]> source.dussan.org Git - aspectj.git/commitdiff
175039: fix and test, plus NPE guard
authoraclement <aclement>
Tue, 6 Mar 2007 10:03:31 +0000 (10:03 +0000)
committeraclement <aclement>
Tue, 6 Mar 2007 10:03:31 +0000 (10:03 +0000)
weaver/src/org/aspectj/weaver/ReferenceType.java
weaver/src/org/aspectj/weaver/TypeFactory.java
weaver/testsrc/org/aspectj/weaver/TypeXTestCase.java

index 31313cad8fc394dc3f69c3da77770f8267bf78f0..d23ea9bedbb49ddb6422581c358d8f39d150a9e0 100644 (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;
index 3168f9ca36494bb85085d835be1cabdc19e61a86..0191ea3ac909eea4b30b48050a105208fea3817c 100644 (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("<");
index 5505c092ae416b8811d8eabf0fe8e3c163e0a6da..231df0c756b4bf73d650c068b0eede2af80ea56a 100644 (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) {