|
97 | 97 | import jdk.graal.compiler.nodes.EncodedGraph;
|
98 | 98 | import jdk.graal.compiler.nodes.spi.IdentityHashCodeProvider;
|
99 | 99 | import jdk.graal.compiler.util.ObjectCopier;
|
| 100 | +import jdk.vm.ci.meta.ConstantReflectionProvider; |
100 | 101 | import jdk.vm.ci.meta.JavaConstant;
|
101 | 102 | import jdk.vm.ci.meta.JavaKind;
|
102 | 103 | import jdk.vm.ci.meta.MethodHandleAccessProvider.IntrinsicMethod;
|
@@ -151,6 +152,7 @@ public void ensureFieldPersisted(AnalysisField field) {
|
151 | 152 | public void ensureConstantPersisted(ImageHeapConstant constant) {
|
152 | 153 | assert !sealed;
|
153 | 154 | constantsToPersist.add(constant);
|
| 155 | + afterConstantAdded(constant); |
154 | 156 | }
|
155 | 157 |
|
156 | 158 | protected record ConstantParent(int constantId, int index) {
|
@@ -433,6 +435,16 @@ protected void afterMethodAdded(AnalysisMethod method) {
|
433 | 435 | imageLayerWriterHelper.afterMethodAdded(method);
|
434 | 436 | }
|
435 | 437 |
|
| 438 | + private void afterConstantAdded(ImageHeapConstant constant) { |
| 439 | + ensureTypePersisted(constant.getType()); |
| 440 | + /* If this is a Class constant persist the corresponding type. */ |
| 441 | + ConstantReflectionProvider constantReflection = aUniverse.getBigbang().getConstantReflectionProvider(); |
| 442 | + AnalysisType typeFromClassConstant = (AnalysisType) constantReflection.asJavaType(constant); |
| 443 | + if (typeFromClassConstant != null) { |
| 444 | + ensureTypePersisted(typeFromClassConstant); |
| 445 | + } |
| 446 | + } |
| 447 | + |
436 | 448 | private void scanConstantReferencedObjects(ImageHeapConstant constant, Collection<ImageHeapConstant> discoveredConstants) {
|
437 | 449 | if (Objects.requireNonNull(constant) instanceof ImageHeapInstance instance) {
|
438 | 450 | if (instance.isReaderInstalled()) {
|
|
0 commit comments