Skip to content

Commit 3695a13

Browse files
committed
[GR-72050] Refactor layer features for Terminus
PullRequest: graal/23193
2 parents a14af8c + 2d3db62 commit 3695a13

7 files changed

Lines changed: 31 additions & 27 deletions

File tree

substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/ClassInclusionPolicy.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import com.oracle.graal.pointsto.meta.AnalysisMethod;
2929
import com.oracle.graal.pointsto.meta.AnalysisType;
3030
import com.oracle.graal.pointsto.util.AnalysisError;
31-
import com.oracle.svm.util.OriginalClassProvider;
3231

3332
import jdk.vm.ci.meta.ModifiersProvider;
3433
import jdk.vm.ci.meta.ResolvedJavaField;
@@ -234,7 +233,7 @@ private static boolean isMethodAccessible(ResolvedJavaMethod method) {
234233
/* Protected methods from non-final non-sealed classes should be accessible. */
235234
AnalysisError.guarantee(method.isProtected());
236235
ResolvedJavaType declaringClass = method.getDeclaringClass();
237-
return !declaringClass.isFinalFlagSet() && !OriginalClassProvider.getJavaClass(declaringClass).isSealed();
236+
return !declaringClass.isFinalFlagSet() && !declaringClass.isSealed();
238237
}
239238

240239
@Override

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/config/ObjectLayout.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626

2727
import static com.oracle.svm.guest.staging.Uninterruptible.CALLED_FROM_UNINTERRUPTIBLE_CODE;
2828

29-
import java.lang.reflect.Field;
3029
import java.util.Arrays;
3130
import java.util.List;
3231
import java.util.function.Predicate;
@@ -50,6 +49,7 @@
5049
import com.oracle.svm.shared.singletons.traits.SingletonLayeredInstallationKind.Duplicable;
5150
import com.oracle.svm.shared.singletons.traits.SingletonTraits;
5251
import com.oracle.svm.util.AnnotationUtil;
52+
import com.oracle.svm.util.GuestAccess;
5353

5454
import jdk.graal.compiler.api.directives.GraalDirectives;
5555
import jdk.graal.compiler.api.replacements.Fold;
@@ -60,6 +60,7 @@
6060
import jdk.vm.ci.meta.JavaKind;
6161
import jdk.vm.ci.meta.JavaType;
6262
import jdk.vm.ci.meta.MetaAccessProvider;
63+
import jdk.vm.ci.meta.ResolvedJavaField;
6364
import jdk.vm.ci.meta.ResolvedJavaType;
6465
import jdk.vm.ci.meta.UnresolvedJavaType;
6566

@@ -370,7 +371,7 @@ public void onSingletonRegistration(ImageSingletonLoader loader, ObjectLayout si
370371
List<Integer> currentValues = singleton.getCurrentValues();
371372
List<Integer> priorValues = loader.readIntList("priorValues");
372373

373-
var numFields = Arrays.stream(ObjectLayout.class.getDeclaredFields()).filter(Predicate.not(Field::isSynthetic)).count();
374+
var numFields = Arrays.stream(GuestAccess.get().lookupType(ObjectLayout.class).getInstanceFields(false)).filter(Predicate.not(ResolvedJavaField::isSynthetic)).count();
374375
VMError.guarantee(numFields - 1 == currentValues.size(), "Missing fields");
375376

376377
VMError.guarantee(currentValues.equals(priorValues),

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ImageClassLoader.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
import com.oracle.svm.util.TypeResult;
6060

6161
import jdk.graal.compiler.annotation.AnnotationValue;
62+
import jdk.graal.compiler.vmaccess.ResolvedJavaModule;
6263
import jdk.graal.compiler.vmaccess.ResolvedJavaPackage;
6364
import jdk.graal.compiler.vmaccess.VMAccess;
6465
import jdk.vm.ci.meta.ResolvedJavaField;
@@ -107,7 +108,7 @@ public final class ImageClassLoader {
107108
/**
108109
* Modules containing all {@code svm.core} and {@code svm.hosted} classes.
109110
*/
110-
private Set<Module> builderModules;
111+
private Set<ResolvedJavaModule> builderModules;
111112

112113
ImageClassLoader(Platform platform, NativeImageClassLoaderSupport classLoaderSupport, VMAccess vmAccess) {
113114
this.platform = platform;
@@ -232,7 +233,8 @@ public ClassLoader getDynamicHubClassLoader(Class<?> clazz) {
232233
}
233234

234235
public boolean isCoreType(Class<?> clazz) {
235-
return getBuilderModules().contains(clazz.getModule());
236+
GuestAccess guestAccess = GuestAccess.get();
237+
return getBuilderModules().contains(guestAccess.getModule(guestAccess.lookupType(clazz)));
236238
}
237239

238240
/**
@@ -618,16 +620,17 @@ public boolean noEntryForURI(EconomicSet<String> set) {
618620
return classLoaderSupport.noEntryForURI(set);
619621
}
620622

621-
public Set<Module> getBuilderModules() {
623+
public Set<ResolvedJavaModule> getBuilderModules() {
622624
assert builderModules != null : "Builder modules not yet initialized.";
623625
return builderModules;
624626
}
625627

626628
public void initBuilderModules() {
627629
VMError.guarantee(BuildPhaseProvider.isFeatureRegistrationFinished() && ImageSingletons.contains(VMFeature.class),
628630
"Querying builder modules is only possible after feature registration is finished.");
629-
Module m0 = ImageSingletons.lookup(VMFeature.class).getClass().getModule();
630-
Module m1 = SVMHost.class.getModule();
631+
GuestAccess guestAccess = GuestAccess.get();
632+
ResolvedJavaModule m0 = guestAccess.getModule(guestAccess.lookupType(ImageSingletons.lookup(VMFeature.class).getClass()));
633+
ResolvedJavaModule m1 = guestAccess.getModule(guestAccess.lookupType(SVMHost.class));
631634
builderModules = m0.equals(m1) ? Set.of(m0) : Set.of(m0, m1);
632635
}
633636

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/SVMHost.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ public SVMHost(OptionValues options, ImageClassLoader loader, ClassInitializatio
331331
*/
332332
@Override
333333
public boolean isCoreType(ResolvedJavaType type) {
334-
return loader.getBuilderModules().contains(OriginalClassProvider.getJavaClass(type).getModule());
334+
return loader.getBuilderModules().contains(GuestAccess.get().getModule(OriginalClassProvider.getOriginalType(type)));
335335
}
336336

337337
@Override

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/imagelayer/LayeredClassInitialization.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@
2626

2727
import org.graalvm.nativeimage.ImageSingletons;
2828

29-
import jdk.vm.ci.meta.MetaAccessProvider;
29+
import com.oracle.graal.pointsto.infrastructure.Universe;
30+
31+
import jdk.vm.ci.meta.ResolvedJavaType;
3032

3133
public abstract class LayeredClassInitialization {
3234

3335
static LayeredClassInitialization singleton() {
3436
return ImageSingletons.lookup(LayeredClassInitialization.class);
3537
}
3638

37-
abstract void initializeClassInAppLayer(Class<?> c, MetaAccessProvider meta);
39+
abstract void initializeClassInAppLayer(ResolvedJavaType type, Universe universe);
3840
}

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/imagelayer/LayeredDispatchTableFeature.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,14 @@
7272
import com.oracle.svm.hosted.meta.HostedType;
7373
import com.oracle.svm.hosted.meta.HostedUniverse;
7474
import com.oracle.svm.hosted.meta.VTableBuilder;
75+
import com.oracle.svm.util.GuestAccess;
7576
import com.oracle.svm.util.OriginalClassProvider;
7677
import com.oracle.svm.util.OriginalMethodProvider;
7778

7879
import jdk.graal.compiler.code.CompilationResult;
7980
import jdk.graal.compiler.core.common.NumUtil;
8081
import jdk.graal.compiler.debug.Assertions;
82+
import jdk.graal.compiler.vmaccess.ResolvedJavaModule;
8183
import jdk.vm.ci.meta.ResolvedJavaMethod;
8284
import jdk.vm.ci.meta.ResolvedJavaType;
8385

@@ -135,7 +137,7 @@ public class LayeredDispatchTableFeature implements InternalFeature {
135137
/**
136138
* Cache of builderModules. Set in {@link #beforeCompilation}.
137139
*/
138-
private Set<Module> builderModules;
140+
private Set<ResolvedJavaModule> builderModules;
139141

140142
static final int INVALID_HOSTED_METHOD_INDEX = -1;
141143

@@ -246,7 +248,7 @@ public static LayeredDispatchTableFeature singleton() {
246248
return ImageSingletons.lookup(LayeredDispatchTableFeature.class);
247249
}
248250

249-
void installBuilderModules(Set<Module> newCoreTypes) {
251+
void installBuilderModules(Set<ResolvedJavaModule> newCoreTypes) {
250252
assert builderModules == null : builderModules;
251253
builderModules = newCoreTypes;
252254
}
@@ -256,8 +258,9 @@ void installBuilderModules(Set<Module> newCoreTypes) {
256258
* we filter our all calls either originating from or targeting a {@link #builderModules}.
257259
*/
258260
public void recordVirtualCallTarget(HostedMethod caller, HostedMethod callee) {
259-
Module callerModule = caller.getDeclaringClass().getJavaClass().getModule();
260-
Module calleeModule = callee.getDeclaringClass().getJavaClass().getModule();
261+
GuestAccess guestAccess = GuestAccess.get();
262+
ResolvedJavaModule callerModule = guestAccess.getModule(OriginalClassProvider.getOriginalType(caller.getDeclaringClass()));
263+
ResolvedJavaModule calleeModule = guestAccess.getModule(OriginalClassProvider.getOriginalType(callee.getDeclaringClass()));
261264
if (!(builderModules.contains(callerModule) && !isFactoryMethod(caller)) && !builderModules.contains(calleeModule)) {
262265
virtualCallTargets.add(callee);
263266
}

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/imagelayer/LayeredStaticFieldSupport.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
*/
2525
package com.oracle.svm.hosted.imagelayer;
2626

27-
import java.lang.reflect.Field;
28-
import java.lang.reflect.Modifier;
2927
import java.util.ArrayList;
3028
import java.util.Collections;
3129
import java.util.HashSet;
@@ -39,6 +37,7 @@
3937
import org.graalvm.nativeimage.ImageSingletons;
4038

4139
import com.oracle.graal.pointsto.heap.ImageHeapRelocatableConstant;
40+
import com.oracle.graal.pointsto.infrastructure.Universe;
4241
import com.oracle.graal.pointsto.meta.AnalysisField;
4342
import com.oracle.graal.pointsto.meta.AnalysisMetaAccess;
4443
import com.oracle.graal.pointsto.meta.AnalysisType;
@@ -71,8 +70,8 @@
7170
import jdk.graal.compiler.nodes.calc.FloatingNode;
7271
import jdk.graal.compiler.nodes.spi.LoweringTool;
7372
import jdk.vm.ci.meta.JavaConstant;
74-
import jdk.vm.ci.meta.MetaAccessProvider;
7573
import jdk.vm.ci.meta.ResolvedJavaField;
74+
import jdk.vm.ci.meta.ResolvedJavaType;
7675

7776
/**
7877
* This class keeps track of the location of static fields assigned in previous layers as well as
@@ -180,9 +179,8 @@ public void ensureInitializedFromFieldData(AnalysisField aField, SharedLayerSnap
180179
assert priorInstalledLocation.equals(result);
181180
}
182181

183-
private void installFieldInAppLayer(Field field, MetaAccessProvider meta) {
184-
AnalysisField aField = (AnalysisField) meta.lookupJavaField(field);
185-
installFieldInAppLayer(aField);
182+
private void installFieldInAppLayer(ResolvedJavaField field, Universe universe) {
183+
installFieldInAppLayer((AnalysisField) universe.lookup(field));
186184
}
187185

188186
void installFieldInAppLayer(AnalysisField aField) {
@@ -231,11 +229,9 @@ void installFieldInAppLayer(AnalysisField aField) {
231229
}
232230

233231
@Override
234-
void initializeClassInAppLayer(Class<?> c, MetaAccessProvider meta) {
235-
for (var field : c.getDeclaredFields()) {
236-
if (Modifier.isStatic(field.getModifiers())) {
237-
installFieldInAppLayer(field, meta);
238-
}
232+
void initializeClassInAppLayer(ResolvedJavaType type, Universe universe) {
233+
for (var field : type.getStaticFields()) {
234+
installFieldInAppLayer(field, universe);
239235
}
240236
}
241237

0 commit comments

Comments
 (0)