From 026b2728aef846823419ebffceb57fe8161e3d15 Mon Sep 17 00:00:00 2001 From: jhugunin Date: Tue, 22 Jul 2003 20:57:17 +0000 Subject: tests and fix for Bugzilla Bug 39993 ajc stack trace on declaring hashcode() method in aspect added extra error-test for using super inside an inter-type declaration on an interface with multiple parents -- the correct parent is either hard or impossible to determine in that case --- tests/bugs/MultipleSuperCf.java | 16 ++++++++ tests/bugs/OverridingInterfaceObjectMethod.java | 50 +++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 tests/bugs/MultipleSuperCf.java create mode 100644 tests/bugs/OverridingInterfaceObjectMethod.java (limited to 'tests/bugs') diff --git a/tests/bugs/MultipleSuperCf.java b/tests/bugs/MultipleSuperCf.java new file mode 100644 index 000000000..51404a33f --- /dev/null +++ b/tests/bugs/MultipleSuperCf.java @@ -0,0 +1,16 @@ +import org.aspectj.testing.Tester; + +interface B1 { } +interface B2 { } + +interface D extends B1, B2 {} + +aspect A { + public int B1.m() { + return 2; + } + + public int D.m() { + return super.m(); // CE even though B1.m is the only thing that makes sense + } +} \ No newline at end of file diff --git a/tests/bugs/OverridingInterfaceObjectMethod.java b/tests/bugs/OverridingInterfaceObjectMethod.java new file mode 100644 index 000000000..d9ea38b88 --- /dev/null +++ b/tests/bugs/OverridingInterfaceObjectMethod.java @@ -0,0 +1,50 @@ +import org.aspectj.testing.Tester; + +public class OverridingInterfaceObjectMethod { + private static final int VALUE = 10; + + public static void main(String[] args) { + Identifiable i = new C(); + Tester.checkEqual(i.hashCode(), 42); //System.identityHashCode(i)); + i.setId(new Id(VALUE)); + Tester.checkEqual(i.hashCode(), VALUE); + } +} + +//TODO explore complicated inheritance hierarchies + +class C implements Identifiable {} + +interface Base { } + +interface Identifiable extends Base { + void setId(Id id); + Id getId(); +} + +class Id { + public Id(int value) { + this.value = value; + } + int value; +} + +aspect IdentifiableAspect { + private Id Identifiable.id = null; + public Id Identifiable.getId() { + return this.id; + } + public void Identifiable.setId(Id id) { + this.id = id; + } + + public int Identifiable.hashCode() { + return (this.getId() == null) + ? super.hashCode() + : this.getId().value; + } + + public int Base.hashCode() { + return 42; + } +} -- cgit v1.2.3