diff options
author | jhugunin <jhugunin> | 2003-04-10 22:20:14 +0000 |
---|---|---|
committer | jhugunin <jhugunin> | 2003-04-10 22:20:14 +0000 |
commit | 808bae83b3d5f37de4b39a2380db2782919a5f8a (patch) | |
tree | 576a779c6662eee340976c3be03cf7e8fb9c1fab | |
parent | af3c9f96769fd9a517f688e64706903dca63ade9 (diff) | |
download | aspectj-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.xml | 7 | ||||
-rw-r--r-- | tests/bugs/interAbstract/Driver.java | 35 | ||||
-rw-r--r-- | tests/jimTests.xml | 6 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java | 7 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/LazyClassGen.java | 2 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java | 10 |
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, |