From 7d99a23266ff26d1be0bd46af8ab7b3951cb9230 Mon Sep 17 00:00:00 2001 From: aclement Date: Tue, 23 May 2006 10:37:22 +0000 Subject: [PATCH] test and fix for first part of 126355 --- tests/bugs152/pr126355/Pair.java | 7 +++++++ tests/bugs152/pr126355/Test.java | 5 +++++ .../systemtest/ajc152/Ajc152Tests.java | 7 +++++++ .../org/aspectj/systemtest/ajc152/ajc152.xml | 10 ++++++++++ .../aspectj/weaver/bcel/BcelObjectType.java | 19 +++++++++++++------ .../org/aspectj/weaver/bcel/LazyClassGen.java | 1 - 6 files changed, 42 insertions(+), 7 deletions(-) create mode 100644 tests/bugs152/pr126355/Pair.java create mode 100644 tests/bugs152/pr126355/Test.java diff --git a/tests/bugs152/pr126355/Pair.java b/tests/bugs152/pr126355/Pair.java new file mode 100644 index 000000000..385b403d7 --- /dev/null +++ b/tests/bugs152/pr126355/Pair.java @@ -0,0 +1,7 @@ +public class Pair { + public Pair(F first, S second) { } +} + +aspect IdempotentCache pertarget(cached()) { + pointcut cached(): execution(public * *(..)) && within(Pair); +} diff --git a/tests/bugs152/pr126355/Test.java b/tests/bugs152/pr126355/Test.java new file mode 100644 index 000000000..a87128f1e --- /dev/null +++ b/tests/bugs152/pr126355/Test.java @@ -0,0 +1,5 @@ +public class Test { + public static void main (String args[]) { + Pair pair = new Pair("one","two"); + } +} diff --git a/tests/src/org/aspectj/systemtest/ajc152/Ajc152Tests.java b/tests/src/org/aspectj/systemtest/ajc152/Ajc152Tests.java index 1105d8235..230564f07 100644 --- a/tests/src/org/aspectj/systemtest/ajc152/Ajc152Tests.java +++ b/tests/src/org/aspectj/systemtest/ajc152/Ajc152Tests.java @@ -17,6 +17,7 @@ import org.aspectj.testing.XMLBasedAjcTestCase; public class Ajc152Tests extends org.aspectj.testing.XMLBasedAjcTestCase { + public void testFunkyGenericErrorWithITDs_pr126355() { runTest("bizarre generic error with itds");} public void testConcretizingAbstractMethods_pr142466() { runTest("aop.xml aspect inheriting but not concretizing abstract method");} public void testConcretizingAbstractMethods_pr142466_2() { runTest("aop.xml aspect inheriting but not concretizing abstract method - 2");} public void testComplexGenericDecl_pr137568() { runTest("complicated generics declaration");} @@ -69,6 +70,12 @@ public class Ajc152Tests extends org.aspectj.testing.XMLBasedAjcTestCase { public void testJarChecking_pr137235_2() { runTest("directory with .jar extension"); } public void testMakePreMethodNPE_pr136393() { runTest("NPE in makePreMethod");} +// public void testFunkyGenericErrorWithITDs_pr126355_2() { +// runTest("bizarre generic error with itds - 2"); +// // public class Pair affected by pertarget aspect +// GenericsTests.verifyClassSignature(ajc,"Pair","Ljava/lang/Object;LIdempotentCache$ajcMightHaveAspect;;"); +// } + // tests that can't be included for some reason // Not valid whilst the ajc compiler forces debug on (ignores -g:none) - it will be green but is invalid, trust me diff --git a/tests/src/org/aspectj/systemtest/ajc152/ajc152.xml b/tests/src/org/aspectj/systemtest/ajc152/ajc152.xml index 64857100d..18111ec69 100644 --- a/tests/src/org/aspectj/systemtest/ajc152/ajc152.xml +++ b/tests/src/org/aspectj/systemtest/ajc152/ajc152.xml @@ -15,6 +15,16 @@ + + + + + + + + + + diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java b/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java index d48eaa8f8..d352731cd 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java @@ -480,12 +480,19 @@ public class BcelObjectType extends AbstractReferenceTypeDelegate { superClass = newParent; } else { ResolvedType[] oldInterfaceNames = getDeclaredInterfaces(); - int len = oldInterfaceNames.length; - ResolvedType[] newInterfaceNames = new ResolvedType[len+1]; - System.arraycopy(oldInterfaceNames, 0, newInterfaceNames, 0, len); - newInterfaceNames[len] = newParent; - - interfaces = newInterfaceNames; + int exists = -1; + for (int i = 0; i < oldInterfaceNames.length; i++) { + ResolvedType type = oldInterfaceNames[i]; + if (type.equals(newParent)) {exists = i;break; } + } + if (exists==-1) { + int len = oldInterfaceNames.length; + ResolvedType[] newInterfaceNames = new ResolvedType[len+1]; + System.arraycopy(oldInterfaceNames, 0, newInterfaceNames, 0, len); + newInterfaceNames[len] = newParent; + + interfaces = newInterfaceNames; + } } //System.err.println("javaClass: " + Arrays.asList(javaClass.getInterfaceNames()) + " super " + superclassName); //if (lazyClassGen != null) lazyClassGen.print(); diff --git a/weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java b/weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java index 6533ea131..f03a1c835 100644 --- a/weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java +++ b/weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java @@ -581,7 +581,6 @@ public final class LazyClassGen { signature.append("<"); for (int i = 0; i < tVars.length; i++) { TypeVariable variable = tVars[i]; - if (i!=0) signature.append(","); signature.append(variable.getSignature()); } signature.append(">"); -- 2.39.5