< prev index next >

src/jdk.scripting.nashorn/share/classes/jdk/nashorn/internal/runtime/linker/JavaAdapterFactory.java

Print this page




 217 
 218     private static AdapterInfo getAdapterInfo(final Class<?>[] types) {
 219         final ClassAndLoader definingClassAndLoader = ClassAndLoader.getDefiningClassAndLoader(types);
 220 
 221         final Map<List<Class<?>>, AdapterInfo> adapterInfoMap = ADAPTER_INFO_MAPS.get(definingClassAndLoader.getRepresentativeClass());
 222         final List<Class<?>> typeList = types.length == 1 ? Collections.<Class<?>>singletonList(types[0]) : Arrays.asList(types.clone());
 223         AdapterInfo adapterInfo;
 224         synchronized(adapterInfoMap) {
 225             adapterInfo = adapterInfoMap.get(typeList);
 226             if(adapterInfo == null) {
 227                 adapterInfo = createAdapterInfo(types, definingClassAndLoader);
 228                 adapterInfoMap.put(typeList, adapterInfo);
 229             }
 230         }
 231         return adapterInfo;
 232     }
 233 
 234    /**
 235      * For a given class, create its adapter class and associated info.
 236      *
 237      * @param type the class for which the adapter is created
 238      *
 239      * @return the adapter info for the class.
 240      */
 241     private static AdapterInfo createAdapterInfo(final Class<?>[] types, final ClassAndLoader definingClassAndLoader) {
 242         Class<?> superClass = null;
 243         final List<Class<?>> interfaces = new ArrayList<>(types.length);
 244         for(final Class<?> t: types) {
 245             final int mod = t.getModifiers();
 246             if(!t.isInterface()) {
 247                 if(superClass != null) {
 248                     return new AdapterInfo(AdaptationResult.Outcome.ERROR_MULTIPLE_SUPERCLASSES, t.getCanonicalName() + " and " + superClass.getCanonicalName());
 249                 }
 250                 if (Modifier.isFinal(mod)) {
 251                     return new AdapterInfo(AdaptationResult.Outcome.ERROR_FINAL_CLASS, t.getCanonicalName());
 252                 }
 253                 superClass = t;
 254             } else {
 255                 if (interfaces.size() > 65535) {
 256                     throw new IllegalArgumentException("interface limit exceeded");
 257                 }




 217 
 218     private static AdapterInfo getAdapterInfo(final Class<?>[] types) {
 219         final ClassAndLoader definingClassAndLoader = ClassAndLoader.getDefiningClassAndLoader(types);
 220 
 221         final Map<List<Class<?>>, AdapterInfo> adapterInfoMap = ADAPTER_INFO_MAPS.get(definingClassAndLoader.getRepresentativeClass());
 222         final List<Class<?>> typeList = types.length == 1 ? Collections.<Class<?>>singletonList(types[0]) : Arrays.asList(types.clone());
 223         AdapterInfo adapterInfo;
 224         synchronized(adapterInfoMap) {
 225             adapterInfo = adapterInfoMap.get(typeList);
 226             if(adapterInfo == null) {
 227                 adapterInfo = createAdapterInfo(types, definingClassAndLoader);
 228                 adapterInfoMap.put(typeList, adapterInfo);
 229             }
 230         }
 231         return adapterInfo;
 232     }
 233 
 234    /**
 235      * For a given class, create its adapter class and associated info.
 236      *
 237      * @param types the class and interfaces for which the adapter is created
 238      *
 239      * @return the adapter info for the class.
 240      */
 241     private static AdapterInfo createAdapterInfo(final Class<?>[] types, final ClassAndLoader definingClassAndLoader) {
 242         Class<?> superClass = null;
 243         final List<Class<?>> interfaces = new ArrayList<>(types.length);
 244         for(final Class<?> t: types) {
 245             final int mod = t.getModifiers();
 246             if(!t.isInterface()) {
 247                 if(superClass != null) {
 248                     return new AdapterInfo(AdaptationResult.Outcome.ERROR_MULTIPLE_SUPERCLASSES, t.getCanonicalName() + " and " + superClass.getCanonicalName());
 249                 }
 250                 if (Modifier.isFinal(mod)) {
 251                     return new AdapterInfo(AdaptationResult.Outcome.ERROR_FINAL_CLASS, t.getCanonicalName());
 252                 }
 253                 superClass = t;
 254             } else {
 255                 if (interfaces.size() > 65535) {
 256                     throw new IllegalArgumentException("interface limit exceeded");
 257                 }


< prev index next >