]> source.dussan.org Git - aspectj.git/commitdiff
presumed bug found on mailing list by Eric Jain, rendered both in harness and Ant...
authorwisberg <wisberg>
Mon, 29 Sep 2003 19:12:55 +0000 (19:12 +0000)
committerwisberg <wisberg>
Mon, 29 Sep 2003 19:12:55 +0000 (19:12 +0000)
tests/ajcTestsFailing.xml
tests/bugs/interfaceDefinition/Main.java [new file with mode: 0644]
tests/bugs/interfaceDefinition/build.xml [new file with mode: 0644]
tests/bugs/interfaceDefinition/pack/DefineInterface.java [new file with mode: 0644]
tests/bugs/interfaceDefinition/pack/InterfaceDefinition.java [new file with mode: 0644]
tests/bugs/interfaceDefinition/pack/MyInterface.java [new file with mode: 0644]

index 3a66c89e0b717709f99680404733500489852a10..b5be2713d51f41139e9dcc3744b1957a2c6d73ce 100644 (file)
                </compile>
                <run class="org.aspectj.langlib.PointcutsCW"/>
        </ajc-test>
-               
+
+    <ajc-test dir="bugs/interfaceDefinition" 
+       title="Use class implementing interface via aspect">
+        <compile 
+               files="pack/DefineInterface.java,
+                          pack/InterfaceDefinition.java,
+                          pack/MyInterface.java"/>
+        <run class="pack.InterfaceDefinition"/>
+        <compile 
+               includeClassesDir="true"
+               files="Main.java"/>
+        <run class="Main"/>
+    </ajc-test>
 </suite>
diff --git a/tests/bugs/interfaceDefinition/Main.java b/tests/bugs/interfaceDefinition/Main.java
new file mode 100644 (file)
index 0000000..b9767ac
--- /dev/null
@@ -0,0 +1,8 @@
+
+public class Main implements pack.MyInterface {
+       public static void main(String[] args) {
+               new Main().m();
+               new pack.InterfaceDefinition.C().m();
+       }
+       public void m() { System.out.println("hello"); }
+}
diff --git a/tests/bugs/interfaceDefinition/build.xml b/tests/bugs/interfaceDefinition/build.xml
new file mode 100644 (file)
index 0000000..041f3f5
--- /dev/null
@@ -0,0 +1,71 @@
+
+<project name="interfaceDefinition" default="all" basedir=".">
+       <target name="info">
+       <echo>
+This reproduces a bug found on the mailing list by Eric Jain.
+When the implementation of a method is defined by an aspect,
+the implementing type does not appear to javac to have
+the method.
+</echo>
+       </target>       
+       <target name="init">
+         <property name="example.dir"
+       location="${basedir}"/> 
+         <property name="aspectj.lib.dir"
+        location="${basedir}/../../../aj-build/dist/tools/lib"/> 
+
+         <property name="classes.dir"
+       location="${example.dir}/classes"/> 
+      <property name="aspectjrt.jar"
+            location="${aspectj.lib.dir}/aspectjrt.jar"/> 
+      <property name="aspectjtools.jar"
+            location="${aspectj.lib.dir}/aspectjtools.jar"/> 
+
+      <property name="classes.dir"
+            location="${example.dir}/classes"/> 
+       </target>
+
+    <target name="init.taskdefs" depends="init" 
+         unless="taskdefs.init">
+      <!-- sets name of new task to iajc, old task to ajc -->
+      <taskdef resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties">
+          <classpath> 
+            <pathelement path="${aspectjtools.jar}"/> 
+          </classpath>
+      </taskdef>
+         <property name="taskdefs.init" value="true"/>
+    </target>
+
+       <target name="all" depends="init.taskdefs">
+               <mkdir dir="${classes.dir}"/>
+               <delete dir="${classes.dir}"/>
+               <mkdir dir="${classes.dir}"/>
+       <iajc destdir="${classes.dir}"
+               fork="true"
+               forkclasspath="${aspectjtools.jar}" 
+               srcdir="${example.dir}"
+               includes="pack/MyInterface.java,pack/InterfaceDefinition.java" 
+          classpath="${aspectjrt.jar}"/>
+       <java classname="pack.InterfaceDefinition">
+                       <classpath>
+                       <pathelement path="${aspectjrt.jar}"/>
+                       <pathelement path="${classes.dir}"/>
+               </classpath>
+       </java>
+       <javac destdir="${classes.dir}" 
+                       srcdir="${example.dir}"
+                       includes="Main.java">
+                       <classpath>
+                       <pathelement path="${aspectjrt.jar}"/>
+                       <pathelement path="${classes.dir}"/>
+               </classpath>
+       </javac>
+       <java class="Main">
+                       <classpath>
+                       <pathelement path="${aspectjrt.jar}"/>
+                       <pathelement path="${classes.dir}"/>
+               </classpath>
+       </java>
+
+       </target>
+</project>
\ No newline at end of file
diff --git a/tests/bugs/interfaceDefinition/pack/DefineInterface.java b/tests/bugs/interfaceDefinition/pack/DefineInterface.java
new file mode 100644 (file)
index 0000000..0e3df5d
--- /dev/null
@@ -0,0 +1,21 @@
+
+package pack;
+
+import org.aspectj.testing.Tester;
+
+public aspect DefineInterface {
+    declare parents: InterfaceDefinition.C implements MyInterface;
+    static {
+        Tester.expectEvent("m()");
+        Tester.expectEvent("p()");
+    }
+    public void MyInterface.m() {
+        Tester.event("m()");
+    }
+    before(MyInterface targ) : target(targ) && call(void run()) {
+        targ.m();
+    }
+    after() returning : execution(void main(String[])) {
+        Tester.checkAllEvents();
+    }
+}
diff --git a/tests/bugs/interfaceDefinition/pack/InterfaceDefinition.java b/tests/bugs/interfaceDefinition/pack/InterfaceDefinition.java
new file mode 100644 (file)
index 0000000..980afdc
--- /dev/null
@@ -0,0 +1,13 @@
+
+package pack;
+
+// User Eric Jain reported that interface was somehow bad...
+public class InterfaceDefinition {
+    public static void main(String[] args) {
+        new C().run();
+    }
+    public static 
+    class C {
+        void run() {}
+    }
+}
diff --git a/tests/bugs/interfaceDefinition/pack/MyInterface.java b/tests/bugs/interfaceDefinition/pack/MyInterface.java
new file mode 100644 (file)
index 0000000..cc3863c
--- /dev/null
@@ -0,0 +1,6 @@
+
+package pack;
+
+public interface MyInterface {
+    void m();
+}
\ No newline at end of file