aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authoraclement <aclement>2004-08-27 10:03:54 +0000
committeraclement <aclement>2004-08-27 10:03:54 +0000
commitb5e6307a63b0513cb058e8d6e56ff87287bdfa15 (patch)
tree70b0ee884349a3ed4d54190eca286ed975106764 /tests
parentbd5021a1dd1f070a4be9192beb4daece84d3c1a8 (diff)
downloadaspectj-b5e6307a63b0513cb058e8d6e56ff87287bdfa15.tar.gz
aspectj-b5e6307a63b0513cb058e8d6e56ff87287bdfa15.zip
fix for Bugzilla Bug 72150
AJC possible bug with static nested classes
Diffstat (limited to 'tests')
-rw-r--r--tests/bugs/java5/arrayCloning/A.java6
-rw-r--r--tests/bugs/java5/arrayCloning/C.java41
-rw-r--r--tests/bugs/java5/arrayCloning/OneFiveCode.jarbin0 -> 1467 bytes
-rw-r--r--tests/bugs/java5/arrayCloning/explanation.txt2
-rw-r--r--tests/bugs/java5/arrayCloning/rebuild.bat4
-rw-r--r--tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java4
-rw-r--r--tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml6
7 files changed, 63 insertions, 0 deletions
diff --git a/tests/bugs/java5/arrayCloning/A.java b/tests/bugs/java5/arrayCloning/A.java
new file mode 100644
index 000000000..10cb71381
--- /dev/null
+++ b/tests/bugs/java5/arrayCloning/A.java
@@ -0,0 +1,6 @@
+aspect A {
+ Object around(): call(* clone(..)) {
+ return proceed();
+ }
+}
+
diff --git a/tests/bugs/java5/arrayCloning/C.java b/tests/bugs/java5/arrayCloning/C.java
new file mode 100644
index 000000000..8886906f5
--- /dev/null
+++ b/tests/bugs/java5/arrayCloning/C.java
@@ -0,0 +1,41 @@
+import java.lang.reflect.*;
+
+class C {
+
+ public static B.D[] arr = new B.D[5];
+
+ public static void main(String[]argv) {
+ arr[0] = new B.D(42);
+ arr[1] = new B.D(22);
+ arr[2] = new B.D(46);
+ arr[3] = new B.D(50);
+ arr[4] = new B.D(54);
+
+ B.D[] arr2 = arr.clone();
+
+
+ // Check the clone is OK
+ if (arr2[0].i!=42) throw new RuntimeException("Call that a clone 0");
+ if (arr2[1].i!=22) throw new RuntimeException("Call that a clone 1");
+ if (arr2[2].i!=46) throw new RuntimeException("Call that a clone 2");
+ if (arr2[3].i!=50) throw new RuntimeException("Call that a clone 3");
+ if (arr2[4].i!=54) throw new RuntimeException("Call that a clone 4");
+ System.err.println("Clone OK - attempting value manipulation");
+
+ // Change the clone, check the original is OK
+ arr2[2] = new B.D(1);
+ if (arr[2].i == 1) throw new RuntimeException("Shouldnt have affected original");
+ if (arr2[2].i != 1) throw new RuntimeException("Should have affected clone");
+
+
+ System.err.println("Clone OK - finished");
+ }
+}
+
+
+class B {
+ public static class D {
+ public int i;
+ D(int x) { i=x;}
+ }
+}
diff --git a/tests/bugs/java5/arrayCloning/OneFiveCode.jar b/tests/bugs/java5/arrayCloning/OneFiveCode.jar
new file mode 100644
index 000000000..0196f39b0
--- /dev/null
+++ b/tests/bugs/java5/arrayCloning/OneFiveCode.jar
Binary files differ
diff --git a/tests/bugs/java5/arrayCloning/explanation.txt b/tests/bugs/java5/arrayCloning/explanation.txt
new file mode 100644
index 000000000..b3f4de2c0
--- /dev/null
+++ b/tests/bugs/java5/arrayCloning/explanation.txt
@@ -0,0 +1,2 @@
+Under Java 1.4 the target of a clone() method called on an array type was 'Object.clone' in the byte code.
+Under Java 1.5 this has been changed to be (correctly) a call to the clone() method on the array type. \ No newline at end of file
diff --git a/tests/bugs/java5/arrayCloning/rebuild.bat b/tests/bugs/java5/arrayCloning/rebuild.bat
new file mode 100644
index 000000000..f0004a93e
--- /dev/null
+++ b/tests/bugs/java5/arrayCloning/rebuild.bat
@@ -0,0 +1,4 @@
+erase *.class
+javac C.java
+jar -cvMf OneFiveCode.jar *.class
+erase *.class
diff --git a/tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java b/tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java
index bdd752160..7c3e3a261 100644
--- a/tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java
+++ b/tests/src/org/aspectj/systemtest/ajc121/Ajc121Tests.java
@@ -267,5 +267,9 @@ public class Ajc121Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
public void test050_typePatternMatchingWithArrays() {
runTest("declare warning warns at wrong points");
}
+
+ public void test051_arrayCloningInJava5() {
+ runTest("AJC possible bug with static nested classes");
+ }
}
diff --git a/tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml b/tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml
index edf21cf94..dd9664295 100644
--- a/tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml
+++ b/tests/src/org/aspectj/systemtest/ajc121/ajc121-tests.xml
@@ -412,4 +412,10 @@
<message kind="warning" line="22" text="*[] returning method called"/>
</compile>
</ajc-test>
+
+ <ajc-test dir="bugs/java5/arrayCloning" pr="72150"
+ title="AJC possible bug with static nested classes">
+ <compile files="A.java" inpath="OneFiveCode.jar"/>
+ <!--run class="C"/-->
+ </ajc-test>
\ No newline at end of file