Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions common.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,12 +55,12 @@
"graalvm-ee-25-ea": {"name": "graalvm-jdk", "version": "25.0.0", "ea": "36", "platformspecific": true },

"oraclejdk-latest": {"name": "jpg-jdk", "version": "25", "build_id": "jdk-25+37", "platformspecific": true, "extrabundles": ["static-libs"]},
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-25+37-jvmci-b05", "platformspecific": true },
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-25+37-jvmci-b05-debug", "platformspecific": true },
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-25+37-jvmci-b05-sulong", "platformspecific": true },
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-25+37-jvmci-b05", "platformspecific": true },
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-25+37-jvmci-b05-debug", "platformspecific": true },
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-25+37-jvmci-b05-sulong", "platformspecific": true }
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-25+37-jvmci-b06", "platformspecific": true },
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-25+37-jvmci-b06-debug", "platformspecific": true },
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-25+37-jvmci-b06-sulong", "platformspecific": true },
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-25+37-jvmci-b06", "platformspecific": true },
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-25+37-jvmci-b06-debug", "platformspecific": true },
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-25+37-jvmci-b06-sulong", "platformspecific": true }
},

"eclipse": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ public final class JVMCIVersionCheck {
// Checkstyle: stop stable iteration order check
private static final Map<String, Map<String, Version>> JVMCI_MIN_VERSIONS = Map.of(
"25", Map.of(
"Oracle Corporation", createLabsJDKVersion("25+37", 5),
DEFAULT_VENDOR_ENTRY, createLabsJDKVersion("25+37", 5)));
"Oracle Corporation", createLabsJDKVersion("25+37", 6),
DEFAULT_VENDOR_ENTRY, createLabsJDKVersion("25+37", 6)));
// Checkstyle: resume stable iteration order check

private static final int NA = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,11 @@ public ResolvedJavaType getArrayClass() {
return arrayOfType;
}

@Override
public boolean isHidden() {
throw new UnsupportedOperationException();
}

@Override
public List<JavaType> getPermittedSubclasses() {
throw new UnsupportedOperationException();
Expand Down Expand Up @@ -312,6 +317,11 @@ public ResolvedJavaType getEnclosingType() {
throw new UnsupportedOperationException();
}

@Override
public ResolvedJavaMethod getEnclosingMethod() {
throw new UnsupportedOperationException();
}

@Override
public ResolvedJavaMethod[] getDeclaredConstructors() {
return getDeclaredConstructors(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import java.lang.annotation.Annotation;
import java.util.List;

import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
import jdk.vm.ci.hotspot.HotSpotResolvedJavaType;
import jdk.vm.ci.hotspot.HotSpotResolvedObjectType;
import jdk.vm.ci.meta.Assumptions;
Expand Down Expand Up @@ -86,6 +87,22 @@ public final HotSpotResolvedObjectType getArrayClass() {
return (HotSpotResolvedObjectType) handle(getArrayClassMethod, getArrayClassInvokable);
}

private static final SymbolicMethod getEnclosingMethodMethod = method("getEnclosingMethod");
private static final InvokableMethod getEnclosingMethodInvokable = (receiver, args) -> ((HotSpotResolvedJavaType) receiver).getEnclosingMethod();

@Override
public HotSpotResolvedJavaMethod getEnclosingMethod() {
return (HotSpotResolvedJavaMethod) handle(getEnclosingMethodMethod, getEnclosingMethodInvokable);
}

private static final SymbolicMethod isHiddenMethod = method("isHidden");
private static final InvokableMethod isHiddenInvokable = (receiver, args) -> ((HotSpotResolvedObjectType) receiver).isHidden();

@Override
public boolean isHidden() {
return (boolean) handle(isHiddenMethod, isHiddenInvokable);
}

private static final SymbolicMethod getPermittedSubclassesMethod = method("getPermittedSubclasses");
private static final InvokableMethod getPermittedSubclassesInvokable = (receiver, args) -> ((HotSpotResolvedJavaType) receiver).getPermittedSubclasses();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,11 @@ public EspressoResolvedArrayType getArrayClass() {
return arrayType;
}

@Override
public boolean isHidden() {
return false;
}

@Override
public List<JavaType> getPermittedSubclasses() {
return null;
Expand Down Expand Up @@ -289,6 +294,11 @@ public ResolvedJavaType getEnclosingType() {
return null;
}

@Override
public ResolvedJavaMethod getEnclosingMethod() {
return null;
}

@Override
public ResolvedJavaMethod[] getDeclaredConstructors(boolean forceLink) {
return NO_METHODS;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
import static java.util.Objects.requireNonNull;

import java.lang.annotation.Annotation;
import java.lang.reflect.Executable;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.Collections;
Expand Down Expand Up @@ -273,6 +275,9 @@ public ResolvedJavaType getComponentType() {
return null;
}

@Override
public native boolean isHidden();

@Override
public List<JavaType> getPermittedSubclasses() {
Class<?>[] permittedSubclass = getPermittedSubclasses0(getMirror());
Expand Down Expand Up @@ -492,6 +497,16 @@ public ResolvedJavaType getEnclosingType() {
return runtime().getHostJVMCIBackend().getMetaAccess().lookupJavaType(enclosingClass);
}

@Override
public ResolvedJavaMethod getEnclosingMethod() {
Method enclosingMethod = getMirror().getEnclosingMethod();
Executable enclosingExecutable = enclosingMethod != null ? enclosingMethod : getMirror().getEnclosingConstructor();
if (enclosingExecutable != null) {
return runtime().getHostJVMCIBackend().getMetaAccess().lookupJavaMethod(enclosingExecutable);
}
return null;
}

@Override
public native void link();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,11 @@ public ResolvedJavaType getComponentType() {
return null;
}

@Override
public boolean isHidden() {
return false;
}

@Override
public List<JavaType> getPermittedSubclasses() {
return null;
Expand Down Expand Up @@ -259,6 +264,11 @@ public ResolvedJavaType getEnclosingType() {
return null;
}

@Override
public ResolvedJavaMethod getEnclosingMethod() {
return null;
}

@Override
public ResolvedJavaMethod[] getDeclaredMethods(boolean forceLink) {
return NO_METHODS;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,11 @@ static StaticObject doDefault(StaticObject self,
}
}

@Substitution
public static boolean isHidden(@JavaType(Class.class) StaticObject self, @Inject EspressoContext context) {
return context.getVM().JVM_IsHiddenClass(self);
}

@Substitution
public static @JavaType(Class[].class) StaticObject getPermittedSubclasses0(@JavaType(Class.class) StaticObject self, @Inject EspressoContext context) {
return context.getVM().JVM_GetPermittedSubclasses(self);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,8 +225,14 @@ public abstract class AnalysisType extends AnalysisElement implements WrappedJav

private volatile AnalysisType arrayClass = null;

private static final List<JavaType> PERMITTED_SUBCLASSES_INIT = new ArrayList<>();
private volatile List<JavaType> permittedSubclasses = PERMITTED_SUBCLASSES_INIT;
/**
* Sentinel marker for the uninitialized state of {@link #permittedSubclasses}. Indicates that
* the permitted subclasses (for sealed types) has not yet been computed. Distinguishes this
* state from both a computed {@code null} (not sealed) and a computed list (which may be
* empty).
*/
private static final List<AnalysisType> PERMITTED_SUBCLASSES_UNINITIALIZED = new ArrayList<>();
private volatile List<AnalysisType> permittedSubclasses = PERMITTED_SUBCLASSES_UNINITIALIZED;

@SuppressWarnings("this-escape")
public AnalysisType(AnalysisUniverse universe, ResolvedJavaType javaType, JavaKind storageKind, AnalysisType objectType, AnalysisType cloneableType) {
Expand Down Expand Up @@ -967,9 +973,14 @@ public final AnalysisType getArrayClass() {
}

@Override
public List<JavaType> getPermittedSubclasses() {
if (permittedSubclasses == PERMITTED_SUBCLASSES_INIT) {
List<JavaType> wrappedPermittedSubclasses = wrapped.getPermittedSubclasses();
public boolean isHidden() {
return wrapped.isHidden();
}

@Override
public List<? extends AnalysisType> getPermittedSubclasses() {
if (permittedSubclasses == PERMITTED_SUBCLASSES_UNINITIALIZED) {
List<? extends JavaType> wrappedPermittedSubclasses = wrapped.getPermittedSubclasses();
permittedSubclasses = wrappedPermittedSubclasses == null ? null : wrappedPermittedSubclasses.stream().map(universe::lookup).collect(Collectors.toUnmodifiableList());
}
return permittedSubclasses;
Expand Down Expand Up @@ -1327,6 +1338,11 @@ public AnalysisType getEnclosingType() {
return universe.lookup(wrapped.getEnclosingType());
}

@Override
public AnalysisMethod getEnclosingMethod() {
return universe.lookup(wrapped.getEnclosingMethod());
}

@Override
public ResolvedJavaType[] getDeclaredTypes() {
ResolvedJavaType[] declaredTypes = wrapped.getDeclaredTypes();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,11 @@ public ResolvedJavaType getArrayClass() {
throw AnalysisError.shouldNotReachHere("This type is incomplete and should not be used.");
}

@Override
public boolean isHidden() {
throw AnalysisError.shouldNotReachHere("This type is incomplete and should not be used.");
}

@Override
public List<JavaType> getPermittedSubclasses() {
throw AnalysisError.shouldNotReachHere("This type is incomplete and should not be used.");
Expand Down Expand Up @@ -321,6 +326,11 @@ public ResolvedJavaType getEnclosingType() {
return enclosingType;
}

@Override
public ResolvedJavaMethod getEnclosingMethod() {
throw AnalysisError.shouldNotReachHere("This type is incomplete and should not be used.");
}

@Override
public ResolvedJavaMethod[] getDeclaredConstructors() {
throw AnalysisError.shouldNotReachHere("This type is incomplete and should not be used.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,16 +81,6 @@ public interface CremaResolvedJavaType extends ResolvedJavaType {
*/
byte[] getRawTypeAnnotations();

/**
* If this object represents a local or anonymous class within a method, returns a
* {@link CremaEnclosingMethodInfo} object representing the immediately enclosing method of the
* underlying class. Returns {@code null} otherwise.
*
* @return the immediately enclosing method of the underlying class, if that class is a local or
* anonymous class; otherwise {@code null}.
*/
CremaEnclosingMethodInfo getEnclosingMethod();

/**
* Returns an array of {@code JavaType} objects reflecting all the classes and interfaces
* declared as members of the class represented by this object. This includes public, protected,
Expand Down Expand Up @@ -128,7 +118,4 @@ public interface CremaResolvedJavaType extends ResolvedJavaType {
* @return a JavaType representing the nest host
*/
ResolvedJavaType getNestHost();

record CremaEnclosingMethodInfo(JavaType enclosingType, String name, String description) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@
package com.oracle.svm.graal.meta;

import java.lang.annotation.Annotation;
import java.lang.reflect.Executable;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
Expand All @@ -45,7 +47,6 @@
import jdk.vm.ci.meta.Assumptions.AssumptionResult;
import jdk.vm.ci.meta.JavaConstant;
import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.JavaType;
import jdk.vm.ci.meta.MetaUtil;
import jdk.vm.ci.meta.ResolvedJavaField;
import jdk.vm.ci.meta.ResolvedJavaMethod;
Expand Down Expand Up @@ -320,7 +321,12 @@ public ResolvedJavaType getArrayClass() {
}

@Override
public List<JavaType> getPermittedSubclasses() {
public boolean isHidden() {
return hub.isHidden();
}

@Override
public List<? extends SubstrateType> getPermittedSubclasses() {
Class<?>[] hubPermittedSubclasses = hub.getPermittedSubclasses();
if (hubPermittedSubclasses == null) {
return null;
Expand Down Expand Up @@ -454,6 +460,17 @@ public ResolvedJavaType getEnclosingType() {
return SubstrateMetaAccess.singleton().lookupJavaType(enclosingClass);
}

@Override
public ResolvedJavaMethod getEnclosingMethod() {
Class<?> cls = DynamicHub.toClass(hub);
Method enclosingMethod = cls.getEnclosingMethod();
Executable enclosingExecutable = enclosingMethod != null ? enclosingMethod : cls.getEnclosingConstructor();
if (enclosingExecutable != null) {
return SubstrateMetaAccess.singleton().lookupJavaMethod(enclosingExecutable);
}
return null;
}

@Override
public ResolvedJavaMethod[] getDeclaredConstructors() {
return getDeclaredConstructors(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,12 @@ public ResolvedJavaType getArrayClass() {
}

@Override
public List<JavaType> getPermittedSubclasses() {
public boolean isHidden() {
return original.isHidden();
}

@Override
public List<? extends JavaType> getPermittedSubclasses() {
return original.getPermittedSubclasses();
}

Expand Down Expand Up @@ -261,6 +266,11 @@ public ResolvedJavaType getEnclosingType() {
return original.getEnclosingType();
}

@Override
public ResolvedJavaMethod getEnclosingMethod() {
return original.getEnclosingMethod();
}

@Override
public ResolvedJavaMethod[] getDeclaredConstructors() {
return getDeclaredConstructors(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
import com.oracle.graal.pointsto.meta.AnalysisType;

import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.JavaType;

public class HostedArrayClass extends HostedClass {

Expand Down Expand Up @@ -73,7 +72,7 @@ public final HostedType getComponentType() {
}

@Override
public List<JavaType> getPermittedSubclasses() {
public List<? extends HostedType> getPermittedSubclasses() {
return null;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
import com.oracle.graal.pointsto.meta.AnalysisType;

import jdk.vm.ci.meta.JavaKind;
import jdk.vm.ci.meta.JavaType;

public class HostedPrimitiveType extends HostedType {

Expand Down Expand Up @@ -73,7 +72,7 @@ public final HostedType getComponentType() {
}

@Override
public List<JavaType> getPermittedSubclasses() {
public List<? extends HostedType> getPermittedSubclasses() {
return null;
}

Expand Down
Loading