diff options
Diffstat (limited to 'tests/bugs/OverridingInterfaceObjectMethod.java')
-rw-r--r-- | tests/bugs/OverridingInterfaceObjectMethod.java | 50 |
1 files changed, 50 insertions, 0 deletions
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; + } +} |