Skip to content

Commit 1b5ccb0

Browse files
committed
Switch MultiLayeredImageSingletons to use SingletonTraits.
1 parent d8af05b commit 1b5ccb0

25 files changed

+367
-376
lines changed

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/ImageHeapInfo.java

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

27-
import java.util.EnumSet;
28-
2927
import org.graalvm.word.Pointer;
3028
import org.graalvm.word.UnsignedWord;
3129

@@ -36,19 +34,21 @@
3634
import com.oracle.svm.core.heap.UnknownObjectField;
3735
import com.oracle.svm.core.heap.UnknownPrimitiveField;
3836
import com.oracle.svm.core.hub.LayoutEncoding;
39-
import com.oracle.svm.core.layeredimagesingleton.LayeredImageSingletonBuilderFlags;
40-
import com.oracle.svm.core.layeredimagesingleton.MultiLayeredImageSingleton;
41-
import com.oracle.svm.core.layeredimagesingleton.UnsavedSingleton;
4237
import com.oracle.svm.core.log.Log;
4338
import com.oracle.svm.core.snippets.KnownIntrinsics;
39+
import com.oracle.svm.core.traits.BuiltinTraits.AllAccess;
40+
import com.oracle.svm.core.traits.BuiltinTraits.NoLayeredCallbacks;
41+
import com.oracle.svm.core.traits.SingletonLayeredInstallationKind.MultiLayer;
42+
import com.oracle.svm.core.traits.SingletonTraits;
4443

4544
import jdk.graal.compiler.word.Word;
4645

4746
/**
4847
* Information on the multiple partitions that make up the image heap, which don't necessarily form
4948
* a contiguous block of memory (there can be holes in between), and their boundaries.
5049
*/
51-
public final class ImageHeapInfo implements MultiLayeredImageSingleton, UnsavedSingleton {
50+
@SingletonTraits(access = AllAccess.class, layeredCallbacks = NoLayeredCallbacks.class, layeredInstallationKind = MultiLayer.class)
51+
public final class ImageHeapInfo {
5252
/** Indicates no chunk with {@link #initialize} chunk offset parameters. */
5353
public static final long NO_CHUNK = -1;
5454

@@ -232,9 +232,4 @@ public void print(Log log) {
232232
log.string("Writable Huge: ").zhex(Word.objectToUntrackedPointer(firstWritableHugeObject)).string(" - ").zhex(getObjectEnd(lastWritableHugeObject)).newline();
233233
log.string("ReadOnly Huge: ").zhex(Word.objectToUntrackedPointer(firstReadOnlyHugeObject)).string(" - ").zhex(getObjectEnd(lastReadOnlyHugeObject)).newline();
234234
}
235-
236-
@Override
237-
public EnumSet<LayeredImageSingletonBuilderFlags> getImageBuilderFlags() {
238-
return LayeredImageSingletonBuilderFlags.ALL_ACCESS;
239-
}
240235
}

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/CGlobalDataPointerSingleton.java

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,18 @@
2424
*/
2525
package com.oracle.svm.core;
2626

27-
import java.util.EnumSet;
28-
2927
import org.graalvm.nativeimage.Platform;
3028
import org.graalvm.nativeimage.Platforms;
3129

3230
import com.oracle.svm.core.c.BoxedRelocatedPointer;
3331
import com.oracle.svm.core.feature.AutomaticallyRegisteredImageSingleton;
3432
import com.oracle.svm.core.graal.code.CGlobalDataBasePointer;
35-
import com.oracle.svm.core.layeredimagesingleton.ImageSingletonWriter;
36-
import com.oracle.svm.core.layeredimagesingleton.LayeredImageSingletonBuilderFlags;
3733
import com.oracle.svm.core.layeredimagesingleton.LayeredImageSingletonSupport;
3834
import com.oracle.svm.core.layeredimagesingleton.MultiLayeredImageSingleton;
35+
import com.oracle.svm.core.traits.BuiltinTraits.AllAccess;
36+
import com.oracle.svm.core.traits.BuiltinTraits.NoLayeredCallbacks;
37+
import com.oracle.svm.core.traits.SingletonLayeredInstallationKind.MultiLayer;
38+
import com.oracle.svm.core.traits.SingletonTraits;
3939

4040
/**
4141
* This singleton contains the {@link CGlobalDataBasePointer} of the current layer. In layered
@@ -44,7 +44,8 @@
4444
* used.
4545
*/
4646
@AutomaticallyRegisteredImageSingleton
47-
public class CGlobalDataPointerSingleton implements MultiLayeredImageSingleton {
47+
@SingletonTraits(access = AllAccess.class, layeredCallbacks = NoLayeredCallbacks.class, layeredInstallationKind = MultiLayer.class)
48+
public class CGlobalDataPointerSingleton {
4849

4950
/**
5051
* Image heap object storing the base address of CGlobalData memory using a relocation. Before
@@ -64,14 +65,4 @@ public static CGlobalDataPointerSingleton[] allLayers() {
6465
public BoxedRelocatedPointer getRuntimeBaseAddress() {
6566
return cGlobalDataRuntimeBaseAddress;
6667
}
67-
68-
@Override
69-
public EnumSet<LayeredImageSingletonBuilderFlags> getImageBuilderFlags() {
70-
return LayeredImageSingletonBuilderFlags.ALL_ACCESS;
71-
}
72-
73-
@Override
74-
public PersistFlags preparePersist(ImageSingletonWriter writer) {
75-
return PersistFlags.NOTHING;
76-
}
7768
}

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/StaticFieldsSupport.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import static jdk.graal.compiler.nodeinfo.NodeSize.SIZE_0;
2929
import static jdk.graal.compiler.nodeinfo.NodeSize.SIZE_1;
3030

31-
import java.util.EnumSet;
3231
import java.util.Objects;
3332
import java.util.function.Function;
3433

@@ -42,15 +41,15 @@
4241
import com.oracle.svm.core.feature.InternalFeature;
4342
import com.oracle.svm.core.heap.UnknownObjectField;
4443
import com.oracle.svm.core.imagelayer.ImageLayerBuildingSupport;
45-
import com.oracle.svm.core.layeredimagesingleton.LayeredImageSingletonBuilderFlags;
4644
import com.oracle.svm.core.layeredimagesingleton.LayeredImageSingletonSupport;
4745
import com.oracle.svm.core.layeredimagesingleton.MultiLayeredImageSingleton;
48-
import com.oracle.svm.core.layeredimagesingleton.UnsavedSingleton;
4946
import com.oracle.svm.core.meta.SharedField;
5047
import com.oracle.svm.core.meta.SharedType;
48+
import com.oracle.svm.core.traits.BuiltinTraits.AllAccess;
5149
import com.oracle.svm.core.traits.BuiltinTraits.BuildtimeAccessOnly;
5250
import com.oracle.svm.core.traits.BuiltinTraits.NoLayeredCallbacks;
5351
import com.oracle.svm.core.traits.SingletonLayeredInstallationKind.Independent;
52+
import com.oracle.svm.core.traits.SingletonLayeredInstallationKind.MultiLayer;
5453
import com.oracle.svm.core.traits.SingletonTraits;
5554
import com.oracle.svm.core.util.VMError;
5655

@@ -295,7 +294,8 @@ static void checkFieldOffsetAllowed(ResolvedJavaField field) {
295294
}
296295

297296
@AutomaticallyRegisteredImageSingleton
298-
class MultiLayeredStaticFieldsBase implements MultiLayeredImageSingleton, UnsavedSingleton {
297+
@SingletonTraits(access = AllAccess.class, layeredCallbacks = NoLayeredCallbacks.class, layeredInstallationKind = MultiLayer.class)
298+
class MultiLayeredStaticFieldsBase {
299299

300300
@UnknownObjectField(availability = BuildPhaseProvider.AfterHostedUniverse.class) private Object[] staticObjectFields = null;
301301

@@ -326,12 +326,6 @@ void setData(Object[] objectFields, byte[] primitiveFields) {
326326
this.staticObjectFields = Objects.requireNonNull(objectFields);
327327
this.staticPrimitiveFields = Objects.requireNonNull(primitiveFields);
328328
}
329-
330-
@Override
331-
public EnumSet<LayeredImageSingletonBuilderFlags> getImageBuilderFlags() {
332-
return LayeredImageSingletonBuilderFlags.ALL_ACCESS;
333-
}
334-
335329
}
336330

337331
/**

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/code/ImageCodeInfo.java

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

27-
import java.util.EnumSet;
2827
import java.util.List;
2928

3029
import org.graalvm.nativeimage.Platform;
@@ -41,15 +40,18 @@
4140
import com.oracle.svm.core.c.NonmovableObjectArray;
4241
import com.oracle.svm.core.heap.UnknownObjectField;
4342
import com.oracle.svm.core.heap.UnknownPrimitiveField;
44-
import com.oracle.svm.core.layeredimagesingleton.LayeredImageSingletonBuilderFlags;
4543
import com.oracle.svm.core.layeredimagesingleton.MultiLayeredImageSingleton;
46-
import com.oracle.svm.core.layeredimagesingleton.UnsavedSingleton;
4744
import com.oracle.svm.core.nmt.NmtCategory;
45+
import com.oracle.svm.core.traits.BuiltinTraits.AllAccess;
46+
import com.oracle.svm.core.traits.BuiltinTraits.NoLayeredCallbacks;
47+
import com.oracle.svm.core.traits.SingletonLayeredInstallationKind.MultiLayer;
48+
import com.oracle.svm.core.traits.SingletonTraits;
4849
import com.oracle.svm.core.util.VMError;
4950

5051
import jdk.graal.compiler.word.Word;
5152

52-
public class ImageCodeInfo implements MultiLayeredImageSingleton, UnsavedSingleton {
53+
@SingletonTraits(access = AllAccess.class, layeredCallbacks = NoLayeredCallbacks.class, layeredInstallationKind = MultiLayer.class)
54+
public class ImageCodeInfo {
5355
public static final String CODE_INFO_NAME = "image code";
5456

5557
@Platforms(Platform.HOSTED_ONLY.class) //
@@ -156,11 +158,6 @@ public List<Integer> getTotalByteArrayLengths() {
156158
return List.of(codeInfoIndex.length, codeInfoEncodings.length, referenceMapEncoding.length, frameInfoEncodings.length, methodTable.length);
157159
}
158160

159-
@Override
160-
public EnumSet<LayeredImageSingletonBuilderFlags> getImageBuilderFlags() {
161-
return LayeredImageSingletonBuilderFlags.ALL_ACCESS;
162-
}
163-
164161
/**
165162
* Pure-hosted {@link CodeInfo} to collect and persist image code metadata in
166163
* {@link ImageCodeInfo} and provide accesses during image generation.

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/code/ImageCodeInfoStorage.java

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

27-
import java.util.EnumSet;
28-
2927
import org.graalvm.nativeimage.ImageSingletons;
3028
import org.graalvm.nativeimage.c.struct.SizeOf;
3129
import org.graalvm.word.Pointer;
@@ -36,9 +34,11 @@
3634
import com.oracle.svm.core.feature.AutomaticallyRegisteredFeature;
3735
import com.oracle.svm.core.feature.InternalFeature;
3836
import com.oracle.svm.core.layeredimagesingleton.FeatureSingleton;
39-
import com.oracle.svm.core.layeredimagesingleton.LayeredImageSingletonBuilderFlags;
40-
import com.oracle.svm.core.layeredimagesingleton.MultiLayeredImageSingleton;
4137
import com.oracle.svm.core.layeredimagesingleton.UnsavedSingleton;
38+
import com.oracle.svm.core.traits.BuiltinTraits.NoLayeredCallbacks;
39+
import com.oracle.svm.core.traits.BuiltinTraits.RuntimeAccessOnly;
40+
import com.oracle.svm.core.traits.SingletonLayeredInstallationKind.MultiLayer;
41+
import com.oracle.svm.core.traits.SingletonTraits;
4242

4343
import jdk.graal.compiler.api.replacements.Fold;
4444
import jdk.graal.compiler.core.common.NumUtil;
@@ -49,7 +49,8 @@
4949
* Note we now store this separately from {@link CIsolateData} so that it can be stored in a
5050
* multi-layered image singleton.
5151
*/
52-
public class ImageCodeInfoStorage implements MultiLayeredImageSingleton, UnsavedSingleton {
52+
@SingletonTraits(access = RuntimeAccessOnly.class, layeredCallbacks = NoLayeredCallbacks.class, layeredInstallationKind = MultiLayer.class)
53+
public class ImageCodeInfoStorage {
5354

5455
private final byte[] data;
5556

@@ -77,11 +78,6 @@ public CodeInfoImpl getCodeInfo() {
7778
Pointer base = Word.objectToUntrackedPointer(data).add(Word.unsigned(getAlignedOffsetInArray()));
7879
return (CodeInfoImpl) base;
7980
}
80-
81-
@Override
82-
public EnumSet<LayeredImageSingletonBuilderFlags> getImageBuilderFlags() {
83-
return LayeredImageSingletonBuilderFlags.RUNTIME_ACCESS_ONLY;
84-
}
8581
}
8682

8783
@AutomaticallyRegisteredFeature

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/code/RuntimeMetadataEncoding.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,18 @@
2424
*/
2525
package com.oracle.svm.core.code;
2626

27-
import java.util.EnumSet;
28-
2927
import org.graalvm.nativeimage.Platform;
3028
import org.graalvm.nativeimage.Platforms;
3129

3230
import com.oracle.svm.core.BuildPhaseProvider.AfterCompilation;
3331
import com.oracle.svm.core.code.RuntimeMetadataDecoderImpl.MetadataAccessorImpl;
3432
import com.oracle.svm.core.feature.AutomaticallyRegisteredImageSingleton;
3533
import com.oracle.svm.core.heap.UnknownObjectField;
36-
import com.oracle.svm.core.layeredimagesingleton.LayeredImageSingletonBuilderFlags;
3734
import com.oracle.svm.core.layeredimagesingleton.LayeredImageSingletonSupport;
38-
import com.oracle.svm.core.layeredimagesingleton.MultiLayeredImageSingleton;
39-
import com.oracle.svm.core.layeredimagesingleton.UnsavedSingleton;
35+
import com.oracle.svm.core.traits.BuiltinTraits.AllAccess;
36+
import com.oracle.svm.core.traits.BuiltinTraits.NoLayeredCallbacks;
37+
import com.oracle.svm.core.traits.SingletonLayeredInstallationKind.MultiLayer;
38+
import com.oracle.svm.core.traits.SingletonTraits;
4039

4140
/**
4241
* Stores the encoding of all runtime metadata.
@@ -49,7 +48,8 @@
4948
* we would need an index to locate all relevant runtime metadata of an entity from all layers.
5049
*/
5150
@AutomaticallyRegisteredImageSingleton
52-
public class RuntimeMetadataEncoding implements MultiLayeredImageSingleton, UnsavedSingleton {
51+
@SingletonTraits(access = AllAccess.class, layeredCallbacks = NoLayeredCallbacks.class, layeredInstallationKind = MultiLayer.class)
52+
public class RuntimeMetadataEncoding {
5353
@UnknownObjectField(availability = AfterCompilation.class) private byte[] encoding;
5454

5555
@Platforms(Platform.HOSTED_ONLY.class)
@@ -65,9 +65,4 @@ public byte[] getEncoding() {
6565
public void setEncoding(byte[] encoding) {
6666
this.encoding = encoding;
6767
}
68-
69-
@Override
70-
public EnumSet<LayeredImageSingletonBuilderFlags> getImageBuilderFlags() {
71-
return LayeredImageSingletonBuilderFlags.ALL_ACCESS;
72-
}
7368
}

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/heap/dump/HeapDumpMetadata.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
*/
2525
package com.oracle.svm.core.heap.dump;
2626

27-
import java.util.EnumSet;
28-
2927
import org.graalvm.nativeimage.ImageSingletons;
3028
import org.graalvm.nativeimage.Platform;
3129
import org.graalvm.nativeimage.Platforms;
@@ -47,16 +45,17 @@
4745
import com.oracle.svm.core.heap.UnknownObjectField;
4846
import com.oracle.svm.core.hub.DynamicHub;
4947
import com.oracle.svm.core.hub.registry.TypeIDs;
50-
import com.oracle.svm.core.layeredimagesingleton.LayeredImageSingletonBuilderFlags;
5148
import com.oracle.svm.core.layeredimagesingleton.LayeredImageSingletonSupport;
5249
import com.oracle.svm.core.layeredimagesingleton.MultiLayeredImageSingleton;
53-
import com.oracle.svm.core.layeredimagesingleton.UnsavedSingleton;
5450
import com.oracle.svm.core.memory.NullableNativeMemory;
5551
import com.oracle.svm.core.metaspace.Metaspace;
5652
import com.oracle.svm.core.nmt.NmtCategory;
53+
import com.oracle.svm.core.traits.BuiltinTraits.AllAccess;
54+
import com.oracle.svm.core.traits.BuiltinTraits.NoLayeredCallbacks;
5755
import com.oracle.svm.core.traits.BuiltinTraits.RuntimeAccessOnly;
5856
import com.oracle.svm.core.traits.BuiltinTraits.SingleLayer;
5957
import com.oracle.svm.core.traits.SingletonLayeredInstallationKind.InitialLayerOnly;
58+
import com.oracle.svm.core.traits.SingletonLayeredInstallationKind.MultiLayer;
6059
import com.oracle.svm.core.traits.SingletonTraits;
6160
import com.oracle.svm.core.util.coder.ByteStream;
6261
import com.oracle.svm.core.util.coder.ByteStreamAccess;
@@ -490,14 +489,10 @@ public void visitObject(Object o) {
490489
}
491490
}
492491

493-
public static class HeapDumpEncodedData implements MultiLayeredImageSingleton, UnsavedSingleton {
492+
@SingletonTraits(access = AllAccess.class, layeredCallbacks = NoLayeredCallbacks.class, layeredInstallationKind = MultiLayer.class)
493+
public static class HeapDumpEncodedData {
494494
@UnknownObjectField(availability = AfterCompilation.class) private byte[] data;
495495

496-
@Override
497-
public EnumSet<LayeredImageSingletonBuilderFlags> getImageBuilderFlags() {
498-
return LayeredImageSingletonBuilderFlags.ALL_ACCESS;
499-
}
500-
501496
private static HeapDumpEncodedData currentLayer() {
502497
return LayeredImageSingletonSupport.singleton().lookup(HeapDumpEncodedData.class, false, true);
503498
}

0 commit comments

Comments
 (0)