diff --git a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/AbstractAnalysisEngine.java b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/AbstractAnalysisEngine.java index 2838ccb0654a..41675f3e9f70 100644 --- a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/AbstractAnalysisEngine.java +++ b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/AbstractAnalysisEngine.java @@ -74,7 +74,6 @@ public abstract class AbstractAnalysisEngine implements BigBang { protected final AnalysisUniverse universe; protected final AnalysisMetaAccess metaAccess; protected final AnalysisPolicy analysisPolicy; - private final HeapScanningPolicy heapScanningPolicy; protected final Boolean extendedAsserts; protected final int maxConstantObjectsPerType; @@ -124,11 +123,6 @@ public AbstractAnalysisEngine(OptionValues options, AnalysisUniverse universe, H maxConstantObjectsPerType = PointstoOptions.MaxConstantObjectsPerType.getValue(options); profileConstantObjects = PointstoOptions.ProfileConstantObjects.getValue(options); optimizeReturnedParameter = PointstoOptions.OptimizeReturnedParameter.getValue(options); - - this.heapScanningPolicy = PointstoOptions.ExhaustiveHeapScan.getValue(options) - ? HeapScanningPolicy.scanAll() - : HeapScanningPolicy.skipTypes(skippedHeapTypes()); - this.snippetReflectionProvider = snippetReflectionProvider; this.constantReflectionProvider = constantReflectionProvider; this.wordTypes = wordTypes; @@ -246,11 +240,6 @@ public void printTimerStatistics(PrintWriter out) { StatisticsPrinter.printLast(out, "total_memory_bytes", analysisTimer.getTotalMemory()); } - @Override - public AnalysisType[] skippedHeapTypes() { - return new AnalysisType[]{metaAccess.lookupJavaType(String.class)}; - } - @Override public boolean extendedAsserts() { return extendedAsserts; @@ -331,11 +320,6 @@ public WordTypes getWordTypes() { return wordTypes; } - @Override - public HeapScanningPolicy scanningPolicy() { - return heapScanningPolicy; - } - @Override public HostVM getHostVM() { return hostVM; diff --git a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/BigBang.java b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/BigBang.java index 119a82a333ae..f1e51376064f 100644 --- a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/BigBang.java +++ b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/BigBang.java @@ -58,7 +58,7 @@ * * @see PointsToAnalysis */ -public interface BigBang extends ReachabilityAnalysis, HeapScanning { +public interface BigBang extends ReachabilityAnalysis { HostVM getHostVM(); UnsupportedFeatures getUnsupportedFeatures(); diff --git a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/HeapScanning.java b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/HeapScanning.java deleted file mode 100644 index 99ca277531c2..000000000000 --- a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/HeapScanning.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.graal.pointsto; - -import com.oracle.graal.pointsto.meta.AnalysisType; - -/** - * The heap crawling algorithm used for updating type flow is mostly implemented in - * {@link ObjectScanner}. - * - * This interface is a first small step in a bigger effort to separate heap crawling from the - * analysis. If these two parts are cleanly separated, it should allow mixing different algorithms - * and configurations more easily. - */ -public interface HeapScanning { - - /** - * @return types that should not be crawled - */ - AnalysisType[] skippedHeapTypes(); - - /** - * @return policy deciding what to scan - */ - HeapScanningPolicy scanningPolicy(); -} diff --git a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/HeapScanningPolicy.java b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/HeapScanningPolicy.java deleted file mode 100644 index e6eef91b4344..000000000000 --- a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/HeapScanningPolicy.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (c) 2020, 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.oracle.graal.pointsto; - -import java.util.HashMap; -import java.util.Map; - -import com.oracle.graal.pointsto.meta.AnalysisType; - -import jdk.vm.ci.meta.JavaConstant; - -/** - * Policy to decide what constants to scan. - * - * This policy is used to control which instances are really scanned. For example the analysis - * object scanner doesn't need to scan all String instances, but it must scan at least one, if - * present. Scanning all String instances would not add additional information to the analysis - * state. - * - * This policy is also used to control the collection of embedded roots. Similarly, not all Strings - * need to be collected. - * - * A side effect of skipping scanning some objects is that the object replacers will not see all - * those objects. - */ -public abstract class HeapScanningPolicy { - - /** Decide if the constant will be stored in the global constant registry. */ - public abstract boolean trackConstant(BigBang bb, JavaConstant constant); - - /** Decide if the constant will be processed by the object scanner. */ - public abstract boolean scanConstant(BigBang bb, JavaConstant constant); - - public static HeapScanningPolicy scanAll() { - return new ScanAllPolicy(); - } - - public static HeapScanningPolicy skipTypes(AnalysisType... skipTypes) { - return new SkipTypesPolicy(skipTypes); - } - - /** Scan all constants. */ - static class ScanAllPolicy extends HeapScanningPolicy { - @Override - public boolean trackConstant(BigBang bb, JavaConstant constant) { - return true; - } - - @Override - public boolean scanConstant(BigBang bb, JavaConstant constant) { - return true; - } - } - - /** Skip all but one instace of the specified types. */ - static class SkipTypesPolicy extends HeapScanningPolicy { - - /** Per type skip info. */ - static class SkipData { - /** Mark types already seen during tracking. */ - volatile boolean seenForTracking; - /** Mark types already seen during scanning. */ - volatile boolean seenForScanning; - } - - /** - * Store the state of types to skip. Although this map is used in a concurrent context (both - * types tracking and scanning are parallelized) the map itself never gets modified after - * being created and populated. The flags marking types as tracked/scanned will eventually - * be set to true, but not necessarily as soon as the first constant of that type is - * processed. An implementation providing a stronger guarantee that exactly one constant of - * each type is processed is possible, but this implementation is preferred for performance - * reasons since constant scanning is hot code. - */ - final Map skipTypes; - - SkipTypesPolicy(AnalysisType... types) { - skipTypes = new HashMap<>(); - for (AnalysisType type : types) { - skipTypes.put(type, new SkipData()); - } - } - - @Override - public boolean trackConstant(BigBang bb, JavaConstant constant) { - AnalysisType type = bb.getMetaAccess().lookupJavaType(constant); - SkipData data = skipTypes.get(type); - if (data != null) { - if (data.seenForTracking) { - return false; - } - data.seenForTracking = true; - return true; - } - return true; - } - - @Override - public boolean scanConstant(BigBang bb, JavaConstant constant) { - AnalysisType type = bb.getMetaAccess().lookupJavaType(constant); - SkipData data = skipTypes.get(type); - if (data != null) { - if (data.seenForScanning) { - return false; - } - data.seenForScanning = true; - return true; - } - return true; - } - } -} diff --git a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/ObjectScanner.java b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/ObjectScanner.java index 43bdfe07549a..e1ae398c1126 100644 --- a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/ObjectScanner.java +++ b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/ObjectScanner.java @@ -271,10 +271,6 @@ public void scanConstant(JavaConstant value, ScanReason reason) { if (value.isNull() || bb.getMetaAccess().isInstanceOf(value, WordBase.class)) { return; } - if (!bb.scanningPolicy().scanConstant(bb, value)) { - bb.registerTypeAsInHeap(bb.getMetaAccess().lookupJavaType(value), reason); - return; - } JavaConstant unwrappedValue = maybeUnwrap(value); Object valueObj = unwrappedValue instanceof ImageHeapConstant ? unwrappedValue : constantAsObject(bb, unwrappedValue); if (scannedObjects.putAndAcquire(valueObj) == null) { diff --git a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/api/PointstoOptions.java b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/api/PointstoOptions.java index a5bb4df3c442..4f89f701d0bb 100644 --- a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/api/PointstoOptions.java +++ b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/api/PointstoOptions.java @@ -140,9 +140,6 @@ protected void onValueUpdate(EconomicMap, Object> values, Boolean o @Option(help = "Object scanning in parallel")// public static final OptionKey ScanObjectsParallel = new OptionKey<>(true); - @Option(help = "Scan all objects reachable from roots for analysis. By default false.")// - public static final OptionKey ExhaustiveHeapScan = new OptionKey<>(false); - @Option(help = "Run partial escape analysis on compiler graphs before static analysis.", type = Expert)// public static final OptionKey EscapeAnalysisBeforeAnalysis = new OptionKey<>(true); diff --git a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/flow/MethodTypeFlowBuilder.java b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/flow/MethodTypeFlowBuilder.java index 37ecc6e9ead4..9a1f417ee7d6 100644 --- a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/flow/MethodTypeFlowBuilder.java +++ b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/flow/MethodTypeFlowBuilder.java @@ -406,10 +406,7 @@ protected static boolean ignoreInstanceOfType(PointsToAnalysis bb, AnalysisType } private static void registerEmbeddedRoot(PointsToAnalysis bb, ConstantNode cn) { - JavaConstant root = cn.asJavaConstant(); - if (bb.scanningPolicy().trackConstant(bb, root)) { - bb.getUniverse().registerEmbeddedRoot(root, AbstractAnalysisEngine.sourcePosition(cn)); - } + bb.getUniverse().registerEmbeddedRoot(cn.asJavaConstant(), AbstractAnalysisEngine.sourcePosition(cn)); } private static void registerForeignCall(PointsToAnalysis bb, ForeignCallsProvider foreignCallsProvider, ForeignCallDescriptor foreignCallDescriptor, ResolvedJavaMethod from) { diff --git a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/reports/AnalysisHeapHistogramPrinter.java b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/reports/AnalysisHeapHistogramPrinter.java index 66d7b3ce6d3c..5e319cfa2702 100644 --- a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/reports/AnalysisHeapHistogramPrinter.java +++ b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/reports/AnalysisHeapHistogramPrinter.java @@ -28,15 +28,12 @@ import static com.oracle.graal.pointsto.reports.ReportUtils.positionComparator; import java.io.PrintWriter; -import java.util.Arrays; import java.util.HashMap; import java.util.Map; -import java.util.stream.Collectors; import com.oracle.graal.pointsto.BigBang; import com.oracle.graal.pointsto.ObjectScanner; import com.oracle.graal.pointsto.ObjectScanningObserver; -import com.oracle.graal.pointsto.api.PointstoOptions; import com.oracle.graal.pointsto.meta.AnalysisField; import com.oracle.graal.pointsto.meta.AnalysisType; @@ -50,11 +47,6 @@ public static void print(BigBang bb, String reportsPath, String reportName) { } private static void doPrint(PrintWriter out, BigBang bb) { - if (!PointstoOptions.ExhaustiveHeapScan.getValue(bb.getOptions())) { - String types = Arrays.stream(bb.skippedHeapTypes()).map(t -> t.toJavaName()).collect(Collectors.joining(", ")); - System.out.println("Exhaustive heap scanning is disabled. The analysis heap histogram will not contain all instances of types: " + types); - System.out.println("Exhaustive heap scanning can be turned on using -H:+ExhaustiveHeapScan."); - } Map histogram = new HashMap<>(); AnalysisHeapHistogramPrinter printer = new AnalysisHeapHistogramPrinter(bb, histogram); printer.scanBootImageHeapRoots(fieldComparator, positionComparator); diff --git a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/reports/ObjectTreePrinter.java b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/reports/ObjectTreePrinter.java index 6d6cc1f324ee..4740f915ecea 100644 --- a/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/reports/ObjectTreePrinter.java +++ b/substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/reports/ObjectTreePrinter.java @@ -33,7 +33,6 @@ import java.io.PrintWriter; import java.util.ArrayDeque; -import java.util.Arrays; import java.util.Collection; import java.util.Deque; import java.util.Iterator; @@ -41,14 +40,12 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; import org.graalvm.compiler.options.OptionValues; import com.oracle.graal.pointsto.BigBang; import com.oracle.graal.pointsto.ObjectScanner; import com.oracle.graal.pointsto.ObjectScanningObserver; -import com.oracle.graal.pointsto.api.PointstoOptions; import com.oracle.graal.pointsto.meta.AnalysisField; import com.oracle.graal.pointsto.meta.AnalysisType; @@ -66,11 +63,6 @@ public static void print(BigBang bb, String reportsPath, String reportName) { } private static void doPrint(PrintWriter out, BigBang bb) { - if (!PointstoOptions.ExhaustiveHeapScan.getValue(bb.getOptions())) { - String types = Arrays.stream(bb.skippedHeapTypes()).map(t -> t.toJavaName()).collect(Collectors.joining(", ")); - System.out.println("Exhaustive heap scanning is disabled. The object tree will not contain all instances of types: " + types); - System.out.println("Exhaustive heap scanning can be turned on using -H:+ExhaustiveHeapScan."); - } /* Use linked hash map for predictable iteration order. */ Map constantToNode = new LinkedHashMap<>(); ObjectTreePrinter printer = new ObjectTreePrinter(bb, constantToNode); diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/DynamicHub.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/DynamicHub.java index ab9493571f17..36e8727adfd5 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/DynamicHub.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/DynamicHub.java @@ -349,7 +349,7 @@ public final class DynamicHub implements AnnotatedElement, java.lang.reflect.Typ private final DynamicHubCompanion companion; - private String signature; + private final String signature; @Substitute // @InjectAccessors(ClassLoaderAccessors.class) // @@ -385,7 +385,7 @@ public final class DynamicHub implements AnnotatedElement, java.lang.reflect.Typ @Platforms(Platform.HOSTED_ONLY.class) public DynamicHub(Class hostedJavaClass, String name, int hubType, ReferenceType referenceType, DynamicHub superType, DynamicHub componentHub, String sourceFileName, int modifiers, ClassLoader classLoader, boolean isHidden, boolean isRecord, Class nestHost, boolean assertionStatus, boolean hasDefaultMethods, boolean declaresDefaultMethods, - boolean isSealed, boolean isVMInternal, boolean isLambdaFormHidden, String simpleBinaryName, Object declaringClass) { + boolean isSealed, boolean isVMInternal, boolean isLambdaFormHidden, String simpleBinaryName, Object declaringClass, String signature) { this.hostedJavaClass = hostedJavaClass; this.module = hostedJavaClass.getModule(); this.name = name; @@ -398,6 +398,7 @@ public DynamicHub(Class hostedJavaClass, String name, int hubType, ReferenceT this.nestHost = nestHost; this.simpleBinaryName = simpleBinaryName; this.declaringClass = declaringClass; + this.signature = signature; this.flags = NumUtil.safeToUShort(makeFlag(IS_PRIMITIVE_FLAG_BIT, hostedJavaClass.isPrimitive()) | makeFlag(IS_INTERFACE_FLAG_BIT, hostedJavaClass.isInterface()) | @@ -519,11 +520,6 @@ public void initEnumConstantsAtRuntime(Class enumClass) { } } - @Platforms(Platform.HOSTED_ONLY.class) - public void setSignature(String signature) { - this.signature = signature; - } - @Platforms(Platform.HOSTED_ONLY.class) public String getSignature() { return signature; diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/SVMHost.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/SVMHost.java index 17325a678ca7..cea86e5a2f9c 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/SVMHost.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/SVMHost.java @@ -54,6 +54,7 @@ import org.graalvm.compiler.core.common.spi.ForeignCallDescriptor; import org.graalvm.compiler.core.common.spi.ForeignCallsProvider; import org.graalvm.compiler.debug.DebugContext; +import org.graalvm.compiler.debug.GraalError; import org.graalvm.compiler.debug.MethodFilter; import org.graalvm.compiler.graph.Node; import org.graalvm.compiler.java.GraphBuilderPhase.Instance; @@ -421,7 +422,17 @@ private DynamicHub createHub(AnalysisType type) { return new DynamicHub(javaClass, className, computeHubType(type), computeReferenceType(type), superHub, componentHub, sourceFileName, modifiers, hubClassLoader, isHidden, isRecord, nestHost, assertionStatus, type.hasDefaultMethods(), type.declaresDefaultMethods(), isSealed, isVMInternal, isLambdaFormHidden, simpleBinaryName, - getDeclaringClass(javaClass)); + getDeclaringClass(javaClass), getSignature(javaClass)); + } + + private static final Method getSignature = ReflectionUtil.lookupMethod(Class.class, "getGenericSignature0"); + + private String getSignature(Class javaClass) { + try { + return (String) getSignature.invoke(javaClass); + } catch (IllegalAccessException | InvocationTargetException e) { + throw GraalError.shouldNotReachHere(e); // ExcludeFromJacocoGeneratedReport + } } private final Method getDeclaringClass0 = ReflectionUtil.lookupMethod(Class.class, "getDeclaringClass0"); diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/DynamicHubInitializer.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/DynamicHubInitializer.java index aaca57d73a02..c46203663f0b 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/DynamicHubInitializer.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/analysis/DynamicHubInitializer.java @@ -25,13 +25,10 @@ package com.oracle.svm.hosted.analysis; import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.util.Arrays; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import org.graalvm.compiler.debug.GraalError; import org.graalvm.nativeimage.c.function.CFunctionPointer; import com.oracle.graal.pointsto.BigBang; @@ -70,7 +67,6 @@ public class DynamicHubInitializer { private final Field dynamicHubClassInitializationInfoField; private final Field dynamicHubArrayHubField; - private final Field dynamicHubSignatureField; private final Field dynamicHubInterfacesEncodingField; private final Field dynamicHubAnnotationsEnumConstantsReferenceField; @@ -84,7 +80,6 @@ public DynamicHubInitializer(BigBang bb) { dynamicHubClassInitializationInfoField = ReflectionUtil.lookupField(DynamicHub.class, "classInitializationInfo"); dynamicHubArrayHubField = ReflectionUtil.lookupField(DynamicHub.class, "arrayHub"); - dynamicHubSignatureField = ReflectionUtil.lookupField(DynamicHub.class, "signature"); dynamicHubInterfacesEncodingField = ReflectionUtil.lookupField(DynamicHub.class, "interfacesEncoding"); dynamicHubAnnotationsEnumConstantsReferenceField = ReflectionUtil.lookupField(DynamicHub.class, "enumConstantsReference"); } @@ -106,7 +101,6 @@ public void initializeMetaData(ImageHeapScanner heapScanner, AnalysisType type) heapScanner.rescanObject(hub, OtherReason.HUB); buildClassInitializationInfo(heapScanner, type, hub); - fillSignature(heapScanner, type, hub); if (type.getJavaKind() == JavaKind.Object) { if (type.isArray()) { @@ -243,21 +237,6 @@ private ClassInitializationInfo buildRuntimeInitializationInfo(AnalysisType type return new ClassInitializationInfo(classInitializerFunction); } - private static final Method getSignature = ReflectionUtil.lookupMethod(Class.class, "getGenericSignature0"); - - private void fillSignature(ImageHeapScanner heapScanner, AnalysisType type, DynamicHub hub) { - AnalysisError.guarantee(hub.getSignature() == null, "Signature already computed for %s.", type.toJavaName(true)); - Class javaClass = type.getJavaClass(); - String signature; - try { - signature = (String) getSignature.invoke(javaClass); - } catch (IllegalAccessException | InvocationTargetException e) { - throw GraalError.shouldNotReachHere(e); // ExcludeFromJacocoGeneratedReport - } - hub.setSignature(signature); - heapScanner.rescanField(hub, dynamicHubSignatureField); - } - class InterfacesEncodingKey { final AnalysisType[] aInterfaces;