src/jdk/internal/dynalink/support/TypeConverterFactory.java

changeset 488
9a3e3bb30db3
parent 101
f8221ce53c2e
child 494
3c13fba4d727
     1.1 --- a/src/jdk/internal/dynalink/support/TypeConverterFactory.java	Thu Aug 01 12:23:38 2013 +0200
     1.2 +++ b/src/jdk/internal/dynalink/support/TypeConverterFactory.java	Wed Aug 07 16:38:44 2013 +0200
     1.3 @@ -87,6 +87,8 @@
     1.4  import java.lang.invoke.MethodHandles;
     1.5  import java.lang.invoke.MethodType;
     1.6  import java.lang.invoke.WrongMethodTypeException;
     1.7 +import java.security.AccessController;
     1.8 +import java.security.PrivilegedAction;
     1.9  import java.util.LinkedList;
    1.10  import java.util.List;
    1.11  import jdk.internal.dynalink.linker.ConversionComparator;
    1.12 @@ -110,7 +112,7 @@
    1.13      private final ClassValue<ClassMap<MethodHandle>> converterMap = new ClassValue<ClassMap<MethodHandle>>() {
    1.14          @Override
    1.15          protected ClassMap<MethodHandle> computeValue(final Class<?> sourceType) {
    1.16 -            return new ClassMap<MethodHandle>(sourceType.getClassLoader()) {
    1.17 +            return new ClassMap<MethodHandle>(getClassLoader(sourceType)) {
    1.18                  @Override
    1.19                  protected MethodHandle computeValue(Class<?> targetType) {
    1.20                      try {
    1.21 @@ -128,7 +130,7 @@
    1.22      private final ClassValue<ClassMap<MethodHandle>> converterIdentityMap = new ClassValue<ClassMap<MethodHandle>>() {
    1.23          @Override
    1.24          protected ClassMap<MethodHandle> computeValue(final Class<?> sourceType) {
    1.25 -            return new ClassMap<MethodHandle>(sourceType.getClassLoader()) {
    1.26 +            return new ClassMap<MethodHandle>(getClassLoader(sourceType)) {
    1.27                  @Override
    1.28                  protected MethodHandle computeValue(Class<?> targetType) {
    1.29                      if(!canAutoConvert(sourceType, targetType)) {
    1.30 @@ -143,6 +145,15 @@
    1.31          }
    1.32      };
    1.33  
    1.34 +    private static final ClassLoader getClassLoader(final Class<?> clazz) {
    1.35 +        return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
    1.36 +            @Override
    1.37 +            public ClassLoader run() {
    1.38 +                return clazz.getClassLoader();
    1.39 +            }
    1.40 +        });
    1.41 +    }
    1.42 +
    1.43      /**
    1.44       * Creates a new type converter factory from the available {@link GuardingTypeConverterFactory} instances.
    1.45       *

mercurial