Index: testsrc/org/aspectj/weaver/TypeXTestCase.java =================================================================== RCS file: /cvsroot/tools/org.aspectj/modules/weaver/testsrc/org/aspectj/weaver/TypeXTestCase.java,v retrieving revision 1.13 diff -u -r1.13 TypeXTestCase.java --- testsrc/org/aspectj/weaver/TypeXTestCase.java 1 Jun 2006 09:52:44 -0000 1.13 +++ testsrc/org/aspectj/weaver/TypeXTestCase.java 23 Feb 2007 15:39:02 -0000 @@ -122,6 +122,29 @@ } } + public void testTypeFactoryForParameterizedTypes() { + if (LangUtil.is15VMOrGreater()) { // no funny types pre 1.5 + UnresolvedType enumOfSimpleType = + TypeFactory.createTypeFromSignature("Pjava/lang/Enum;"); + assertEquals(1, enumOfSimpleType.getTypeParameters().length); + + UnresolvedType enumOfNestedType = + TypeFactory.createTypeFromSignature("Pjava/lang/Enum;"); + assertEquals(1, enumOfNestedType.getTypeParameters().length); + + // is this signature right? + UnresolvedType nestedTypeOfParameterized = + TypeFactory.createTypeFromSignature("PMyInterface$MyOtherType;"); + assertEquals(0, nestedTypeOfParameterized.getTypeParameters().length); + + // how about this one? is this valid? + UnresolvedType doublyNestedTypeSignatures = + TypeFactory.createTypeFromSignature("PMyInterface$MyOtherType;"); + assertEquals(1, nestedTypeOfParameterized.getTypeParameters().length); + + } + } + private void checkTX(UnresolvedType tx,boolean shouldBeParameterized,int numberOfTypeParameters) { assertTrue("Expected parameterization flag to be "+shouldBeParameterized,tx.isParameterizedType()==shouldBeParameterized); if (numberOfTypeParameters==0) { Index: src/org/aspectj/weaver/TypeFactory.java =================================================================== RCS file: /cvsroot/tools/org.aspectj/modules/weaver/src/org/aspectj/weaver/TypeFactory.java,v retrieving revision 1.16 diff -u -r1.16 TypeFactory.java --- src/org/aspectj/weaver/TypeFactory.java 9 Oct 2006 12:27:56 -0000 1.16 +++ src/org/aspectj/weaver/TypeFactory.java 23 Feb 2007 15:39:02 -0000 @@ -123,7 +123,7 @@ // the type parameters of interest are only those that apply to the 'last type' in the signature // if the signature is 'PMyInterface$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("<");