Browse Source

UnresolvedType: fix JVM signature conversion

Fixes #211. Previously, '?' was not converted to '*' in
UnresolvedType.nameToSignature, but kept as-is. That is why - falsely -
it was necessary to handle the '?' case in UnresolvedType.forSignature
at all, reading this kind of bogus signature and creating a type for it
in TypeFactory.createTypeFromSignature. This, ironically, led to correct
JVM generic type signatures containing '*' not being handled at all.

The conversion should now work correctly both ways.

Signed-off-by: Alexander Kriegisch <Alexander@Kriegisch.name>
pull/212/head
Alexander Kriegisch 1 year ago
parent
commit
59fef88ca1

+ 1
- 1
org.aspectj.matcher/src/main/java/org/aspectj/weaver/TypeFactory.java View File

@@ -152,7 +152,7 @@ public class TypeFactory {
return new UnresolvedType(signature, signatureErasure, typeParams);
}
// can't replace above with convertSigToType - leads to stackoverflow
} else if ((firstChar == '?' || firstChar == '*') && signature.length()==1) {
} else if (firstChar == '*' && signature.length()==1) {
return WildcardedUnresolvedType.QUESTIONMARK;
} else if (firstChar == '+') {
// ? extends ...

+ 2
- 2
org.aspectj.matcher/src/main/java/org/aspectj/weaver/UnresolvedType.java View File

@@ -418,7 +418,7 @@ public class UnresolvedType implements Traceable, TypeVariableDeclaringElement {
return TypeFactory.createTypeFromSignature(signature);
case '-':
return TypeFactory.createTypeFromSignature(signature);
case '?':
case '*':
return TypeFactory.createTypeFromSignature(signature);
case 'T':
return TypeFactory.createTypeFromSignature(signature);
@@ -746,7 +746,7 @@ public class UnresolvedType implements Traceable, TypeVariableDeclaringElement {
return "C";
}
if (name.equals("?")) {
return name;
return "*";
}
}
if (len == 0) {

Loading…
Cancel
Save