src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/D
branchJDK-8145252-TLS13-branch
changeset 56645 c10dbcaed048
parent 56637 d66751750b72
parent 50332 d0d933d61610
child 56646 e57205a6e4ee
equal deleted inserted replaced
56637:d66751750b72 56645:c10dbcaed048
     1 diff --git a/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileBytecodeProvider.java b/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileBytecodeProvider.java
       
     2 index 88403c3..728297d 100644
       
     3 --- a/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileBytecodeProvider.java
       
     4 +++ b/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileBytecodeProvider.java
       
     5 @@ -138,7 +138,11 @@ public final class ClassfileBytecodeProvider implements BytecodeProvider {
       
     6          return classfile;
       
     7      }
       
     8  
       
     9 -    synchronized Class<?> resolveToClass(String descriptor) {
       
    10 +    Class<?> resolveToClass(String descriptor) {
       
    11 +        return resolveToClass(descriptor, false);
       
    12 +    }
       
    13 +
       
    14 +    synchronized Class<?> resolveToClass(String descriptor, boolean initialize) {
       
    15          Class<?> c = classes.get(descriptor);
       
    16          if (c == null) {
       
    17              if (descriptor.length() == 1) {
       
    18 @@ -155,7 +159,7 @@ public final class ClassfileBytecodeProvider implements BytecodeProvider {
       
    19                      name = descriptor.replace('/', '.');
       
    20                  }
       
    21                  try {
       
    22 -                    c = Class.forName(name, true, loader);
       
    23 +                    c = Class.forName(name, initialize, loader);
       
    24                      classes.put(descriptor, c);
       
    25                  } catch (ClassNotFoundException e) {
       
    26                      throw new NoClassDefFoundError(descriptor);
       
    27 diff --git a/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstant.java b/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstant.java
       
    28 index 087f78b..bde2dd4 100644
       
    29 --- a/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstant.java
       
    30 +++ b/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstant.java
       
    31 @@ -70,8 +70,9 @@ abstract class ClassfileConstant {
       
    32       * @param cp
       
    33       * @param index
       
    34       * @param opcode
       
    35 +     * @param initialize
       
    36       */
       
    37 -    public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode) {
       
    38 +    public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode, boolean initialize) {
       
    39      }
       
    40  
       
    41      @Override
       
    42 @@ -90,15 +91,19 @@ abstract class ClassfileConstant {
       
    43          }
       
    44  
       
    45          @Override
       
    46 -        public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode) {
       
    47 -            resolve(cp);
       
    48 +        public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode, boolean initialize) {
       
    49 +            resolve(cp, initialize);
       
    50          }
       
    51  
       
    52          public ResolvedJavaType resolve(ClassfileConstantPool cp) throws GraalError {
       
    53 +            return resolve(cp, false /* initialize */);
       
    54 +        }
       
    55 +
       
    56 +        public ResolvedJavaType resolve(ClassfileConstantPool cp, boolean initialize) throws GraalError {
       
    57              if (type == null) {
       
    58                  String typeDescriptor = cp.get(Utf8.class, nameIndex).value;
       
    59                  ClassfileBytecodeProvider context = cp.context;
       
    60 -                type = context.metaAccess.lookupJavaType(context.resolveToClass(typeDescriptor));
       
    61 +                type = context.metaAccess.lookupJavaType(context.resolveToClass(typeDescriptor, initialize));
       
    62              }
       
    63              return type;
       
    64          }
       
    65 @@ -116,8 +121,8 @@ abstract class ClassfileConstant {
       
    66          }
       
    67  
       
    68          @Override
       
    69 -        public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode) {
       
    70 -            cp.get(ClassRef.class, classIndex).loadReferencedType(cp, classIndex, opcode);
       
    71 +        public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode, boolean initialize) {
       
    72 +            cp.get(ClassRef.class, classIndex).loadReferencedType(cp, classIndex, opcode, initialize);
       
    73          }
       
    74      }
       
    75  
       
    76 @@ -269,7 +274,7 @@ abstract class ClassfileConstant {
       
    77          }
       
    78  
       
    79          @Override
       
    80 -        public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode) {
       
    81 +        public void loadReferencedType(ClassfileConstantPool cp, int index, int opcode, boolean initialize) {
       
    82              throw new GraalError("Resolution of " + name + " constant pool entries not supported by " + ClassfileBytecodeProvider.class.getSimpleName());
       
    83          }
       
    84      }
       
    85 diff --git a/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstantPool.java b/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstantPool.java
       
    86 index 218df10..a54779b 100644
       
    87 --- a/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstantPool.java
       
    88 +++ b/compiler/src/org.graalvm.compiler.replacements/src/org/graalvm/compiler/replacements/classfile/ClassfileConstantPool.java
       
    89 @@ -133,11 +133,11 @@ class ClassfileConstantPool implements ConstantPool {
       
    90      }
       
    91  
       
    92      @Override
       
    93 -    public void loadReferencedType(int index, int opcode) {
       
    94 +    public void loadReferencedType(int index, int opcode, boolean initialize) {
       
    95          if (opcode == Bytecodes.INVOKEDYNAMIC) {
       
    96              throw new GraalError("INVOKEDYNAMIC not supported by " + ClassfileBytecodeProvider.class.getSimpleName());
       
    97          }
       
    98 -        entries[index].loadReferencedType(this, index, opcode);
       
    99 +        entries[index].loadReferencedType(this, index, opcode, initialize);
       
   100      }
       
   101  
       
   102      @Override