Skip to content

Commit 4237d45

Browse files
committed
[JVMCI] Make ResolvedJavaType return a List<? extends JavaType> [GR-70208]
1 parent 72cb011 commit 4237d45

File tree

8 files changed

+29
-20
lines changed

8 files changed

+29
-20
lines changed

substratevm/src/com.oracle.graal.pointsto/src/com/oracle/graal/pointsto/meta/AnalysisType.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,14 @@ public abstract class AnalysisType extends AnalysisElement implements WrappedJav
225225

226226
private volatile AnalysisType arrayClass = null;
227227

228-
private static final List<JavaType> PERMITTED_SUBCLASSES_INIT = new ArrayList<>();
229-
private volatile List<JavaType> permittedSubclasses = PERMITTED_SUBCLASSES_INIT;
228+
/**
229+
* Sentinel marker for the uninitialized state of {@link #permittedSubclasses}. Indicates that
230+
* the permitted subclasses (for sealed types) has not yet been computed. Distinguishes this
231+
* state from both a computed {@code null} (not sealed) and a computed list (which may be
232+
* empty).
233+
*/
234+
private static final List<AnalysisType> PERMITTED_SUBCLASSES_UNINITIALIZED = new ArrayList<>();
235+
private volatile List<AnalysisType> permittedSubclasses = PERMITTED_SUBCLASSES_UNINITIALIZED;
230236

231237
@SuppressWarnings("this-escape")
232238
public AnalysisType(AnalysisUniverse universe, ResolvedJavaType javaType, JavaKind storageKind, AnalysisType objectType, AnalysisType cloneableType) {
@@ -967,9 +973,9 @@ public final AnalysisType getArrayClass() {
967973
}
968974

969975
@Override
970-
public List<JavaType> getPermittedSubclasses() {
971-
if (permittedSubclasses == PERMITTED_SUBCLASSES_INIT) {
972-
List<JavaType> wrappedPermittedSubclasses = wrapped.getPermittedSubclasses();
976+
public List<? extends AnalysisType> getPermittedSubclasses() {
977+
if (permittedSubclasses == PERMITTED_SUBCLASSES_UNINITIALIZED) {
978+
List<? extends JavaType> wrappedPermittedSubclasses = wrapped.getPermittedSubclasses();
973979
permittedSubclasses = wrappedPermittedSubclasses == null ? null : wrappedPermittedSubclasses.stream().map(universe::lookup).collect(Collectors.toUnmodifiableList());
974980
}
975981
return permittedSubclasses;

substratevm/src/com.oracle.svm.graal/src/com/oracle/svm/graal/meta/SubstrateType.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
import jdk.vm.ci.meta.Assumptions.AssumptionResult;
4646
import jdk.vm.ci.meta.JavaConstant;
4747
import jdk.vm.ci.meta.JavaKind;
48-
import jdk.vm.ci.meta.JavaType;
4948
import jdk.vm.ci.meta.MetaUtil;
5049
import jdk.vm.ci.meta.ResolvedJavaField;
5150
import jdk.vm.ci.meta.ResolvedJavaMethod;
@@ -320,7 +319,7 @@ public ResolvedJavaType getArrayClass() {
320319
}
321320

322321
@Override
323-
public List<JavaType> getPermittedSubclasses() {
322+
public List<? extends SubstrateType> getPermittedSubclasses() {
324323
Class<?>[] hubPermittedSubclasses = hub.getPermittedSubclasses();
325324
if (hubPermittedSubclasses == null) {
326325
return null;

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/annotation/CustomSubstitutionType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ public ResolvedJavaType getArrayClass() {
207207
}
208208

209209
@Override
210-
public List<JavaType> getPermittedSubclasses() {
210+
public List<? extends JavaType> getPermittedSubclasses() {
211211
return original.getPermittedSubclasses();
212212
}
213213

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/meta/HostedArrayClass.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import com.oracle.graal.pointsto.meta.AnalysisType;
3030

3131
import jdk.vm.ci.meta.JavaKind;
32-
import jdk.vm.ci.meta.JavaType;
3332

3433
public class HostedArrayClass extends HostedClass {
3534

@@ -73,7 +72,7 @@ public final HostedType getComponentType() {
7372
}
7473

7574
@Override
76-
public List<JavaType> getPermittedSubclasses() {
75+
public List<? extends HostedType> getPermittedSubclasses() {
7776
return null;
7877
}
7978

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/meta/HostedPrimitiveType.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import com.oracle.graal.pointsto.meta.AnalysisType;
3030

3131
import jdk.vm.ci.meta.JavaKind;
32-
import jdk.vm.ci.meta.JavaType;
3332

3433
public class HostedPrimitiveType extends HostedType {
3534

@@ -73,7 +72,7 @@ public final HostedType getComponentType() {
7372
}
7473

7574
@Override
76-
public List<JavaType> getPermittedSubclasses() {
75+
public List<? extends HostedType> getPermittedSubclasses() {
7776
return null;
7877
}
7978

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/meta/HostedType.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import jdk.vm.ci.meta.Assumptions.AssumptionResult;
4545
import jdk.vm.ci.meta.JavaConstant;
4646
import jdk.vm.ci.meta.JavaKind;
47-
import jdk.vm.ci.meta.JavaType;
4847
import jdk.vm.ci.meta.ResolvedJavaField;
4948
import jdk.vm.ci.meta.ResolvedJavaMethod;
5049
import jdk.vm.ci.meta.ResolvedJavaRecordComponent;
@@ -67,8 +66,15 @@ public abstract class HostedType extends HostedElement implements SharedType, Wr
6766
private final HostedInterface[] interfaces;
6867

6968
protected HostedArrayClass arrayType;
70-
private static final List<JavaType> PERMITTED_SUBCLASSES_INIT = new ArrayList<>();
71-
private List<JavaType> permittedSubclasses = PERMITTED_SUBCLASSES_INIT;
69+
70+
/**
71+
* Sentinel marker for the uninitialized state of {@link #permittedSubclasses}. Indicates that
72+
* the permitted subclasses (for sealed types) has not yet been computed. Distinguishes this
73+
* state from both a computed {@code null} (not sealed) and a computed list (which may be
74+
* empty).
75+
*/
76+
private static final List<? extends HostedType> PERMITTED_SUBCLASSES_UNINITIALIZED = new ArrayList<>();
77+
private List<? extends HostedType> permittedSubclasses = PERMITTED_SUBCLASSES_UNINITIALIZED;
7278
protected HostedType[] subTypes;
7379
protected HostedField[] staticFields;
7480

@@ -419,12 +425,12 @@ public final HostedArrayClass getArrayClass() {
419425
}
420426

421427
@Override
422-
public List<JavaType> getPermittedSubclasses() {
428+
public List<? extends HostedType> getPermittedSubclasses() {
423429
if (isPrimitive() || isArray()) {
424430
return null;
425431
}
426-
if (permittedSubclasses == PERMITTED_SUBCLASSES_INIT) {
427-
List<JavaType> aPermittedSubclasses = wrapped.getPermittedSubclasses();
432+
if (permittedSubclasses == PERMITTED_SUBCLASSES_UNINITIALIZED) {
433+
List<? extends AnalysisType> aPermittedSubclasses = wrapped.getPermittedSubclasses();
428434
permittedSubclasses = aPermittedSubclasses == null ? null : aPermittedSubclasses.stream().map(universe::lookup).collect(Collectors.toUnmodifiableList());
429435
}
430436
return permittedSubclasses;

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/substitute/InjectedFieldsType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ public ResolvedJavaType getArrayClass() {
205205
}
206206

207207
@Override
208-
public List<JavaType> getPermittedSubclasses() {
208+
public List<? extends JavaType> getPermittedSubclasses() {
209209
return original.getPermittedSubclasses();
210210
}
211211

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/substitute/SubstitutionType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ public ResolvedJavaType getArrayClass() {
232232
}
233233

234234
@Override
235-
public List<JavaType> getPermittedSubclasses() {
235+
public List<? extends JavaType> getPermittedSubclasses() {
236236
return annotated.getPermittedSubclasses();
237237
}
238238

0 commit comments

Comments
 (0)