summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhugunin <jhugunin>2003-04-10 22:20:14 +0000
committerjhugunin <jhugunin>2003-04-10 22:20:14 +0000
commit808bae83b3d5f37de4b39a2380db2782919a5f8a (patch)
tree576a779c6662eee340976c3be03cf7e8fb9c1fab
parentaf3c9f96769fd9a517f688e64706903dca63ade9 (diff)
downloadaspectj-808bae83b3d5f37de4b39a2380db2782919a5f8a.tar.gz
aspectj-808bae83b3d5f37de4b39a2380db2782919a5f8a.zip
test and fix for
Bugzilla Bug 36046 inter-type declaration bug with abstract classes
-rw-r--r--tests/ajcTests.xml7
-rw-r--r--tests/bugs/interAbstract/Driver.java35
-rw-r--r--tests/jimTests.xml6
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java7
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java2
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java10
6 files changed, 57 insertions, 10 deletions
diff --git a/tests/ajcTests.xml b/tests/ajcTests.xml
index 2d00cf805..55014305b 100644
--- a/tests/ajcTests.xml
+++ b/tests/ajcTests.xml
@@ -5768,4 +5768,11 @@
<run class="ConvertToUnchecked"/>
</ajc-test>
+ <ajc-test dir="bugs/interAbstract"
+ title="inter-type declaration bug with abstract classes"
+ pr="36046">
+ <compile files="Driver.java"/>
+ <run class="Driver"/>
+ </ajc-test>
+
</suite>
diff --git a/tests/bugs/interAbstract/Driver.java b/tests/bugs/interAbstract/Driver.java
new file mode 100644
index 000000000..1f2f37cd9
--- /dev/null
+++ b/tests/bugs/interAbstract/Driver.java
@@ -0,0 +1,35 @@
+//Bugzilla Bug 36046
+// inter-type declaration bug with abstract classes
+
+public class Driver {
+ public static void main(String args[]) {
+ Derived generator = new Derived();
+ System.out.println(generator.getExecutions("processEvents"));
+ }
+ static aspect MonitorBase {
+ declare parents: Base implements ExecutionMonitor.MonitoredItem;
+ }
+}
+
+class Derived extends Base {
+ public String getName() {
+ return null;
+ }
+}
+
+abstract class Base {
+ abstract public String getName();
+}
+
+aspect ExecutionMonitor {
+ /** marker interface to indicate the execution monitor should track calls
+and executions on this class. */
+ public interface MonitoredItem {
+ int getExecutions(String methodName);
+ }
+
+ /** a Map of events to mutable integers */
+ public int MonitoredItem.getExecutions(String methodName) {
+ return 0;
+ }
+} \ No newline at end of file
diff --git a/tests/jimTests.xml b/tests/jimTests.xml
index ea5a82516..cc3257d9f 100644
--- a/tests/jimTests.xml
+++ b/tests/jimTests.xml
@@ -1,10 +1,6 @@
<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd">
<suite>
- <ajc-test dir="new" title="new around construct"
- keywords="from-resolved_10x">
- <compile files="AroundAdvice.java"/>
- <run class="AroundAdvice"/>
- </ajc-test>
+
<!--
<ajc-test dir="new" pr="885"
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java b/weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java
index 79eb5f29c..4cb41ad1c 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java
@@ -220,7 +220,12 @@ class BcelClassWeaver implements IClassWeaver {
private boolean alreadyDefined(LazyClassGen clazz, LazyMethodGen mg) {
for (Iterator i = clazz.getMethodGens().iterator(); i.hasNext(); ) {
- if (signaturesMatch(mg, (LazyMethodGen)i.next())) {
+ LazyMethodGen existing = (LazyMethodGen)i.next();
+ if (signaturesMatch(mg, existing)) {
+ if (!mg.isAbstract() && existing.isAbstract()) {
+ i.remove();
+ return false;
+ }
return true;
}
}
diff --git a/weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java b/weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java
index 4c6308d01..39f3427e9 100644
--- a/weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java
+++ b/weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java
@@ -147,7 +147,7 @@ public final class LazyClassGen {
}
public List getMethodGens() {
- return Collections.unmodifiableList(methodGens);
+ return methodGens; //???Collections.unmodifiableList(methodGens);
}
diff --git a/weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java b/weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java
index 7703774f1..adf0c953a 100644
--- a/weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java
+++ b/weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java
@@ -594,9 +594,13 @@ public final class LazyMethodGen {
return prevLine;
}
- public boolean isStatic() {
- return Modifier.isStatic(getAccessFlags());
- }
+ public boolean isStatic() {
+ return Modifier.isStatic(getAccessFlags());
+ }
+
+ public boolean isAbstract() {
+ return Modifier.isAbstract(getAccessFlags());
+ }
public void addExceptionHandler(
InstructionHandle start,