Browse Source

175039: fix and test, plus NPE guard

extensions
aclement 17 years ago
parent
commit
ed4ebd81bf

+ 1
- 0
weaver/src/org/aspectj/weaver/ReferenceType.java View File

@@ -278,6 +278,7 @@ public class ReferenceType extends ResolvedType {
// true iff the statement "this = other" would compile.
public final boolean isAssignableFrom(ResolvedType other,boolean allowMissing) {
if (other==null) return false; // not sure this should ever happen
if (other.isPrimitiveType()) {
if (!world.isInJava5Mode()) return false;
if (ResolvedType.validBoxing.contains(this.getSignature()+other.getSignature())) return true;

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

@@ -123,7 +123,7 @@ public class TypeFactory {
// the type parameters of interest are only those that apply to the 'last type' in the signature
// if the signature is 'PMyInterface<String>$MyOtherType;' then there are none...
String lastType = null;
int nestedTypePosition = signature.indexOf("$");
int nestedTypePosition = signature.indexOf("$", endOfParams); // don't look for $ INSIDE the parameters
if (nestedTypePosition!=-1) lastType = signature.substring(nestedTypePosition+1);
else lastType = new String(signature);
startOfParams = lastType.indexOf("<");

+ 23
- 0
weaver/testsrc/org/aspectj/weaver/TypeXTestCase.java View File

@@ -122,6 +122,29 @@ public class TypeXTestCase extends TestCase {
}
}
public void testTypeFactoryForParameterizedTypes() {
if (LangUtil.is15VMOrGreater()) { // no funny types pre 1.5
UnresolvedType enumOfSimpleType =
TypeFactory.createTypeFromSignature("Pjava/lang/Enum<Ljava/lang/String;>;");
assertEquals(1, enumOfSimpleType.getTypeParameters().length);
UnresolvedType enumOfNestedType =
TypeFactory.createTypeFromSignature("Pjava/lang/Enum<Ljavax/jws/soap/SOAPBinding$ParameterStyle;>;");
assertEquals(1, enumOfNestedType.getTypeParameters().length);

// is this signature right?
UnresolvedType nestedTypeOfParameterized =
TypeFactory.createTypeFromSignature("PMyInterface<Ljava/lang/String;>$MyOtherType;");
assertEquals(0, nestedTypeOfParameterized.getTypeParameters().length);
// how about this one? is this valid?
UnresolvedType doublyNestedTypeSignatures =
TypeFactory.createTypeFromSignature("PMyInterface<Ljava/lang/String;Ljava/lang/String;>$MyOtherType<Ljava/lang/Object;>;");
assertEquals(1, doublyNestedTypeSignatures.getTypeParameters().length);
}
}
private void checkTX(UnresolvedType tx,boolean shouldBeParameterized,int numberOfTypeParameters) {
assertTrue("Expected parameterization flag to be "+shouldBeParameterized,tx.isParameterizedType()==shouldBeParameterized);
if (numberOfTypeParameters==0) {

Loading…
Cancel
Save