Skip to content

Commit d1e0b09

Browse files
committed
Processor: support generated types in rawTypeToWildcardedType helper
1 parent 95b77db commit d1e0b09

File tree

2 files changed

+15
-5
lines changed

2 files changed

+15
-5
lines changed

truffle/src/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/bytecode/parser/CustomOperationParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -686,7 +686,7 @@ private ConstantOperandsModel getConstantOperands(CustomOperationModel customOpe
686686
* generation. Replacing the raw type with a wildcarded type prevents these errors.
687687
*/
688688
private TypeMirror parseConstantOperandType(AnnotationMirror constantOperandMirror) {
689-
TypeMirror result = (TypeMirror) ElementUtils.getAnnotationValue(constantOperandMirror, "type").getValue();
689+
TypeMirror result = ElementUtils.getAnnotationValue(TypeMirror.class, constantOperandMirror, "type");
690690
return ElementUtils.rawTypeToWildcardedType(context, result);
691691
}
692692

truffle/src/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@
9797
import com.oracle.truffle.dsl.processor.java.model.CodeTypeElement;
9898
import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror;
9999
import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror.DeclaredCodeTypeMirror;
100+
import com.oracle.truffle.dsl.processor.java.model.CodeTypeMirror.WildcardTypeMirror;
100101
import com.oracle.truffle.dsl.processor.java.model.GeneratedElement;
101102
import com.oracle.truffle.dsl.processor.model.SpecializationData.Idempotence;
102103

@@ -365,12 +366,21 @@ public static TypeMirror rawTypeToWildcardedType(ProcessorContext context, TypeM
365366
if (typeParameters.isEmpty()) {
366367
return type;
367368
}
369+
if (declaredType instanceof DeclaredCodeTypeMirror generatedType) {
370+
// Special case: generated types
371+
List<TypeMirror> typeArguments = new ArrayList<>(typeParameters.size());
372+
for (int i = 0; i < typeArguments.size(); i++) {
373+
typeArguments.add(new WildcardTypeMirror(null, null));
374+
}
375+
return new DeclaredCodeTypeMirror(typeElement, typeArguments);
376+
}
377+
368378
Types typeUtils = context.getEnvironment().getTypeUtils();
369-
TypeMirror[] wildcards = new TypeMirror[typeParameters.size()];
370-
for (int i = 0; i < wildcards.length; i++) {
371-
wildcards[i] = typeUtils.getWildcardType(null, null);
379+
TypeMirror[] typeArguments = new TypeMirror[typeParameters.size()];
380+
for (int i = 0; i < typeArguments.length; i++) {
381+
typeArguments[i] = typeUtils.getWildcardType(null, null);
372382
}
373-
return typeUtils.getDeclaredType(typeElement, wildcards);
383+
return typeUtils.getDeclaredType(typeElement, typeArguments);
374384
}
375385

376386
public static List<AnnotationMirror> collectAnnotations(AnnotationMirror markerAnnotation, String elementName, Element element, DeclaredType annotationClass) {

0 commit comments

Comments
 (0)