Skip to content

Commit 0cfc271

Browse files
author
mihailo
committed
Renamed implementation class TypeReachedCondtion into TypeCondition. Simplification of MetadataCondition API.
1 parent f3607e9 commit 0cfc271

File tree

8 files changed

+40
-38
lines changed

8 files changed

+40
-38
lines changed

sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/MetadataCondition.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,14 @@
4242

4343
public interface MetadataCondition {
4444

45-
/* Cached to save space: it is used as a marker for all non-conditional elements */
46-
TypeReachedCondition JAVA_LANG_OBJECT_REACHED = new TypeReachedCondition(Object.class, true);
47-
45+
/**
46+
* Creates the type-reached condition that is always satisfied. Any element that is predicated
47+
* with this condition will always be included.
48+
*
49+
* @return instance of the condition
50+
*/
4851
static MetadataCondition alwaysTrue() {
49-
return MetadataCondition.JAVA_LANG_OBJECT_REACHED;
52+
return TypeCondition.JAVA_LANG_OBJECT_REACHED;
5053
}
5154

5255
/**
@@ -56,10 +59,8 @@ static MetadataCondition alwaysTrue() {
5659
* @param type that has to be reached for this condition to be satisfied
5760
* @return instance of the condition
5861
*/
59-
static MetadataCondition create(Class<?> type) {
60-
return TypeReachedCondition.create(type, true);
62+
static MetadataCondition typeReached(Class<?> type) {
63+
return TypeCondition.create(type, true);
6164
}
6265

63-
boolean isAlwaysTrue();
64-
6566
}

sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/TypeReachedCondition.java renamed to sdk/src/org.graalvm.nativeimage/src/org/graalvm/nativeimage/impl/TypeCondition.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,13 @@
5454
* <li><code>typeReachable</code> (legacy) that signifies that the type must be reachable by static
5555
* analysis at build time.</li>
5656
* <p>
57-
* When {@link TypeReachedCondition#runtimeChecked} is <code>true</code> denotes that this is a
57+
* When {@link TypeCondition#runtimeChecked} is <code>true</code> denotes that this is a
5858
* <code>typeReached</code> condition.
5959
*/
60-
public class TypeReachedCondition implements MetadataCondition {
60+
public class TypeCondition implements MetadataCondition {
6161

62+
/* Cached to save space: it is used as a marker for all non-conditional elements */
63+
public static final TypeCondition JAVA_LANG_OBJECT_REACHED = new TypeCondition(Object.class, true);
6264
private final Class<?> type;
6365

6466
final boolean runtimeChecked;
@@ -72,20 +74,19 @@ public class TypeReachedCondition implements MetadataCondition {
7274
* @return instance of the condition
7375
*/
7476

75-
public static TypeReachedCondition create(Class<?> type, boolean runtimeChecked) {
77+
public static TypeCondition create(Class<?> type, boolean runtimeChecked) {
7678
Objects.requireNonNull(type);
77-
if (MetadataCondition.JAVA_LANG_OBJECT_REACHED.getKey().equals(type)) {
78-
return MetadataCondition.JAVA_LANG_OBJECT_REACHED;
79+
if (TypeCondition.JAVA_LANG_OBJECT_REACHED.getKey().equals(type)) {
80+
return TypeCondition.JAVA_LANG_OBJECT_REACHED;
7981
}
80-
return new TypeReachedCondition(type, runtimeChecked);
82+
return new TypeCondition(type, runtimeChecked);
8183
}
8284

83-
@Override
8485
public boolean isAlwaysTrue() {
8586
return MetadataCondition.alwaysTrue().equals(this);
8687
}
8788

88-
TypeReachedCondition(Class<?> type, boolean runtimeChecked) {
89+
TypeCondition(Class<?> type, boolean runtimeChecked) {
8990
this.runtimeChecked = runtimeChecked;
9091
this.type = type;
9192
}
@@ -102,7 +103,7 @@ public boolean equals(Object o) {
102103
if (o == null || getClass() != o.getClass()) {
103104
return false;
104105
}
105-
TypeReachedCondition that = (TypeReachedCondition) o;
106+
TypeCondition that = (TypeCondition) o;
106107
return runtimeChecked == that.runtimeChecked && Objects.equals(type, that.type);
107108
}
108109

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/configure/RuntimeConditionSet.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
import org.graalvm.nativeimage.Platform;
3535
import org.graalvm.nativeimage.Platforms;
3636
import org.graalvm.nativeimage.impl.MetadataCondition;
37-
import org.graalvm.nativeimage.impl.TypeReachedCondition;
37+
import org.graalvm.nativeimage.impl.TypeCondition;
3838

3939
import com.oracle.svm.core.hub.DynamicHub;
4040
import com.oracle.svm.core.util.VMError;
@@ -69,10 +69,10 @@ public static RuntimeConditionSet createHosted(MetadataCondition condition) {
6969

7070
@Platforms(Platform.HOSTED_ONLY.class)
7171
public synchronized void addCondition(MetadataCondition cnd) {
72-
VMError.guarantee(((TypeReachedCondition) cnd).isRuntimeChecked(), "Only runtime conditions can be added to the ConditionalRuntimeValue.");
72+
VMError.guarantee(((TypeCondition) cnd).isRuntimeChecked(), "Only runtime conditions can be added to the ConditionalRuntimeValue.");
7373
if (satisfied) {
7474
return;
75-
} else if (cnd.isAlwaysTrue()) {
75+
} else if (((TypeCondition) cnd).isAlwaysTrue()) {
7676
conditions = null;
7777
satisfied = true;
7878
return;
@@ -161,10 +161,10 @@ private void setConditions(Object[] conditions) {
161161
}
162162

163163
private static Object createRuntimeCondition(MetadataCondition cnd) {
164-
if (cnd.isAlwaysTrue() || !((TypeReachedCondition) cnd).isRuntimeChecked()) {
164+
if (((TypeCondition) cnd).isAlwaysTrue() || !((TypeCondition) cnd).isRuntimeChecked()) {
165165
throw VMError.shouldNotReachHere("We should never create run-time conditions from conditions that are always true at build time. Condition: " + cnd);
166166
}
167-
return ((TypeReachedCondition) cnd).getKey();
167+
return ((TypeCondition) cnd).getKey();
168168
}
169169

170170
private static boolean isSatisfied(Object condition) {

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/proxy/DynamicProxySupport.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
import org.graalvm.nativeimage.hosted.RuntimeClassInitialization;
3636
import org.graalvm.nativeimage.hosted.RuntimeReflection;
3737
import org.graalvm.nativeimage.impl.MetadataCondition;
38-
import org.graalvm.nativeimage.impl.TypeReachedCondition;
38+
import org.graalvm.nativeimage.impl.TypeCondition;
3939

4040
import com.oracle.svm.core.configure.ConditionalRuntimeValue;
4141
import com.oracle.svm.core.configure.RuntimeConditionSet;
@@ -103,7 +103,7 @@ public DynamicProxySupport() {
103103
@Override
104104
@Platforms(Platform.HOSTED_ONLY.class)
105105
public synchronized void addProxyClass(MetadataCondition condition, Class<?>... interfaces) {
106-
VMError.guarantee(((TypeReachedCondition) condition).isRuntimeChecked(), "The condition used must be a runtime condition.");
106+
VMError.guarantee(((TypeCondition) condition).isRuntimeChecked(), "The condition used must be a runtime condition.");
107107
/*
108108
* Make a defensive copy of the interfaces array to protect against the caller modifying the
109109
* array.

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
import org.graalvm.nativeimage.hosted.Feature;
3535
import org.graalvm.nativeimage.impl.MetadataCondition;
36-
import org.graalvm.nativeimage.impl.TypeReachedCondition;
36+
import org.graalvm.nativeimage.impl.TypeCondition;
3737

3838
import com.oracle.svm.core.util.VMError;
3939
import com.oracle.svm.hosted.classinitialization.ClassInitializationSupport;
@@ -45,29 +45,29 @@ public abstract class ConditionalConfigurationRegistry {
4545
protected void registerConditionalConfiguration(MetadataCondition condition, Consumer<MetadataCondition> consumer) {
4646
Objects.requireNonNull(condition, "Cannot use null value as condition for conditional configuration. Please ensure that you register a non-null condition.");
4747
Objects.requireNonNull(consumer, "Cannot use null value as runnable for conditional configuration. Please ensure that you register a non-null runnable.");
48-
if (((TypeReachedCondition) condition).isRuntimeChecked() && !condition.isAlwaysTrue()) {
48+
if (((TypeCondition) condition).isRuntimeChecked() && !((TypeCondition) condition).isAlwaysTrue()) {
4949
/*
5050
* We do this before the type is reached as the handler runs during analysis when it is
5151
* too late to register types for reached tracking. If the type is never reached, there
5252
* is no damage as subtypes will also never be reached.
5353
*/
54-
ClassInitializationSupport.singleton().addForTypeReachedTracking(((TypeReachedCondition) condition).getKey());
54+
ClassInitializationSupport.singleton().addForTypeReachedTracking(((TypeCondition) condition).getKey());
5555
}
5656
if (MetadataCondition.alwaysTrue().equals(condition)) {
5757
/* analysis optimization to include new types as early as possible */
5858
consumer.accept(MetadataCondition.alwaysTrue());
5959
} else {
6060
MetadataCondition runtimeCondition;
61-
if (((TypeReachedCondition) condition).isRuntimeChecked()) {
61+
if (((TypeCondition) condition).isRuntimeChecked()) {
6262
runtimeCondition = condition;
6363
} else {
6464
runtimeCondition = MetadataCondition.alwaysTrue();
6565
}
6666
if (beforeAnalysisAccess == null) {
67-
Collection<Runnable> handlers = pendingReachabilityHandlers.computeIfAbsent(((TypeReachedCondition) condition).getKey(), key -> new ConcurrentLinkedQueue<>());
67+
Collection<Runnable> handlers = pendingReachabilityHandlers.computeIfAbsent(((TypeCondition) condition).getKey(), key -> new ConcurrentLinkedQueue<>());
6868
handlers.add(() -> consumer.accept(runtimeCondition));
6969
} else {
70-
beforeAnalysisAccess.registerReachabilityHandler(access -> consumer.accept(runtimeCondition), ((TypeReachedCondition) condition).getKey());
70+
beforeAnalysisAccess.registerReachabilityHandler(access -> consumer.accept(runtimeCondition), ((TypeCondition) condition).getKey());
7171
}
7272

7373
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
import org.graalvm.nativeimage.hosted.RuntimeResourceAccess;
6060
import org.graalvm.nativeimage.impl.MetadataCondition;
6161
import org.graalvm.nativeimage.impl.RuntimeResourceSupport;
62-
import org.graalvm.nativeimage.impl.TypeReachedCondition;
62+
import org.graalvm.nativeimage.impl.TypeCondition;
6363

6464
import com.oracle.svm.configure.ConfigurationFile;
6565
import com.oracle.svm.configure.ResourceConfigurationParser;
@@ -203,7 +203,7 @@ public void addGlob(MetadataCondition condition, String module, String glob, Obj
203203
public void addCondition(MetadataCondition condition, Module module, String resourcePath) {
204204
var conditionalResource = Resources.currentLayer().getResource(createStorageKey(module, resourcePath));
205205
if (conditionalResource != null) {
206-
classInitializationSupport.addForTypeReachedTracking(((TypeReachedCondition) condition).getKey());
206+
classInitializationSupport.addForTypeReachedTracking(((TypeCondition) condition).getKey());
207207
conditionalResource.getConditions().addCondition(condition);
208208
}
209209
}
@@ -656,7 +656,7 @@ public void afterAnalysis(AfterAnalysisAccess access) {
656656

657657
/* prepare resources GlobTrie for runtime */
658658
GlobTrieNode<ConditionWithOrigin> root = Resources.currentLayer().getResourcesTrieRoot();
659-
CompressedGlobTrie.removeNodes(root, (conditionWithOrigin) -> !access.isReachable(((TypeReachedCondition) conditionWithOrigin.condition()).getKey()));
659+
CompressedGlobTrie.removeNodes(root, (conditionWithOrigin) -> !access.isReachable(((TypeCondition) conditionWithOrigin.condition()).getKey()));
660660
CompressedGlobTrie.finalize(root);
661661
}
662662

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/NativeImageConditionResolver.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
package com.oracle.svm.hosted.reflect;
2626

2727
import org.graalvm.nativeimage.impl.MetadataCondition;
28-
import org.graalvm.nativeimage.impl.TypeReachedCondition;
28+
import org.graalvm.nativeimage.impl.TypeCondition;
2929
import org.graalvm.nativeimage.impl.UnresolvedConfigurationCondition;
3030

3131
import com.oracle.svm.configure.ConfigurationTypeDescriptor;
@@ -53,7 +53,7 @@ public TypeResult<MetadataCondition> resolveCondition(UnresolvedConfigurationCon
5353
* reachability checks.
5454
*/
5555
var runtimeChecked = !classInitializationSupport.isAlwaysReached(type) && unresolvedCondition.isRuntimeChecked();
56-
return TypeReachedCondition.create(type, runtimeChecked);
56+
return TypeCondition.create(type, runtimeChecked);
5757
});
5858
}
5959

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/ReflectionDataBuilder.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@
7272
import org.graalvm.nativeimage.hosted.RuntimeReflection;
7373
import org.graalvm.nativeimage.impl.MetadataCondition;
7474
import org.graalvm.nativeimage.impl.RuntimeReflectionSupport;
75-
import org.graalvm.nativeimage.impl.TypeReachedCondition;
75+
import org.graalvm.nativeimage.impl.TypeCondition;
7676

7777
import com.oracle.graal.pointsto.ObjectScanner.ScanReason;
7878
import com.oracle.graal.pointsto.constraints.UnsupportedFeatureException;
@@ -180,7 +180,7 @@ public void beforeAnalysis(BeforeAnalysisAccessImpl beforeAnalysisAccess) {
180180
}
181181

182182
private void runConditionalInAnalysisTask(MetadataCondition condition, Consumer<MetadataCondition> task) {
183-
if (sealed || (ClassInitializationSupport.singleton().getConfigurationSealed() && !condition.isAlwaysTrue())) {
183+
if (sealed || (ClassInitializationSupport.singleton().getConfigurationSealed() && !((TypeCondition) condition).isAlwaysTrue())) {
184184
throw new UnsupportedFeatureException("Too late to add classes, methods, and fields for reflective access. Registration must happen in a Feature before the analysis has started.");
185185
}
186186

@@ -231,7 +231,7 @@ public void registerAllClassesQuery(MetadataCondition condition, Class<?> clazz)
231231
@SuppressWarnings("unused")
232232
private static void guaranteeNotRuntimeConditionForQueries(MetadataCondition cnd, boolean queriedOnly) {
233233
if (!TreatAllTypeReachableConditionsAsTypeReached.getValue()) {
234-
VMError.guarantee(!queriedOnly || cnd.isAlwaysTrue() || !((TypeReachedCondition) cnd).isRuntimeChecked(),
234+
VMError.guarantee(!queriedOnly || ((TypeCondition) cnd).isAlwaysTrue() || !((TypeCondition) cnd).isRuntimeChecked(),
235235
"Bulk queries can only be set with 'name' which does not allow run-time conditions.");
236236
}
237237
}

0 commit comments

Comments
 (0)