src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java
--- a/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java Fri Jun 21 13:04:14 2019 -0700
+++ b/src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java Fri Jun 21 16:21:13 2019 -0700
@@ -72,7 +72,6 @@
private volatile HotSpotResolvedJavaField[] instanceFields;
private volatile HotSpotResolvedObjectTypeImpl[] interfaces;
private HotSpotConstantPool constantPool;
- private HotSpotResolvedObjectType arrayOfType;
private final JavaConstant mirror;
private HotSpotResolvedObjectTypeImpl superClass;
@@ -103,17 +102,24 @@
* Creates the JVMCI mirror for a {@link Class} object.
*
* <b>NOTE</b>: Creating an instance of this class does not install the mirror for the
- * {@link Class} type. {@link #fromMetaspace} instead.
+ * {@link Class} type.
* </p>
*
* @param metadataPointer the Klass* to create the mirror for
*/
+ @SuppressWarnings("try")
HotSpotResolvedObjectTypeImpl(long metadataPointer, String name) {
super(name);
+ assert metadataPointer != 0;
this.metadataPointer = metadataPointer;
- this.mirror = runtime().compilerToVm.getJavaMirror(this);
- assert metadataPointer != 0;
- assert getName().charAt(0) != '[' || isArray() : getName();
+
+ // The mirror object must be in the global scope since
+ // this object will be cached in HotSpotJVMCIRuntime.resolvedJavaTypes
+ // and live across more than one compilation.
+ try (HotSpotObjectConstantScope global = HotSpotObjectConstantScope.enterGlobalScope()) {
+ this.mirror = runtime().compilerToVm.getJavaMirror(this);
+ assert getName().charAt(0) != '[' || isArray() : getName();
+ }
}
/**
@@ -147,18 +153,6 @@
}
@Override
- public HotSpotResolvedObjectType getArrayClass() {
- if (arrayOfType == null) {
- try {
- arrayOfType = (HotSpotResolvedObjectType) runtime().compilerToVm.lookupType("[" + getName(), this, true);
- } catch (ClassNotFoundException e) {
- throw new JVMCIError(e);
- }
- }
- return arrayOfType;
- }
-
- @Override
public ResolvedJavaType getComponentType() {
return runtime().compilerToVm.getComponentType(this);
}
@@ -580,6 +574,11 @@
return null;
}
+ if (resolvedMethod.canBeStaticallyBound()) {
+ // No assumptions are required.
+ return new AssumptionResult<>(resolvedMethod);
+ }
+
ResolvedJavaMethod result = resolvedMethod.uniqueConcreteMethod(this);
if (result != null) {
return new AssumptionResult<>(result, new ConcreteMethod(method, this, result));