summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2006-05-23 10:37:22 +0000
committeraclement <aclement>2006-05-23 10:37:22 +0000
commit7d99a23266ff26d1be0bd46af8ab7b3951cb9230 (patch)
tree1f3a44ca1e7a0b7df65be7b06863a59d56bcd7a6
parent69e24e90d4fee7115ecbc8c7786915b1f741471b (diff)
downloadaspectj-7d99a23266ff26d1be0bd46af8ab7b3951cb9230.tar.gz
aspectj-7d99a23266ff26d1be0bd46af8ab7b3951cb9230.zip
test and fix for first part of 126355
-rw-r--r--tests/bugs152/pr126355/Pair.java7
-rw-r--r--tests/bugs152/pr126355/Test.java5
-rw-r--r--tests/src/org/aspectj/systemtest/ajc152/Ajc152Tests.java7
-rw-r--r--tests/src/org/aspectj/systemtest/ajc152/ajc152.xml10
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java19
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java1
6 files changed, 42 insertions, 7 deletions
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<F, S> {
+ 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<String,String> pair = new Pair<String,String>("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<F,S> affected by pertarget aspect
+// GenericsTests.verifyClassSignature(ajc,"Pair","<F:Ljava/lang/Object;S:Ljava/lang/Object;>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 @@
</run>
</ajc-test>
+ <ajc-test dir="bugs152/pr126355" title="bizarre generic error with itds">
+ <compile files="Pair.java" options="-1.5"/>
+ <compile files="Test.java" options="-1.5"/>
+ </ajc-test>
+
+ <ajc-test dir="bugs152/pr126355" title="bizarre generic error with itds - 2">
+ <compile files="Pair.java" options="-1.5"/>
+ <compile files="Test.java" options="-1.5"/>
+ </ajc-test>
+
<ajc-test dir="bugs152/pr132349" title="ITD on inner type of generic type">
<compile files="TopLevelType.java" options="-1.5"/>
<run class="TopLevelType"/>
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(">");