From: aclement Date: Tue, 27 Jul 2004 14:17:32 +0000 (+0000) Subject: Fix for bug 69459 X-Git-Tag: for_ajdt1_1_12~97 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=b18436307ecfed63c8995fd35013ffa07e5116e7;p=aspectj.git Fix for bug 69459 Hiding of Instance Methods by static methods --- diff --git a/tests/ajcTests.xml b/tests/ajcTests.xml index a74b3d915..85c36164b 100644 --- a/tests/ajcTests.xml +++ b/tests/ajcTests.xml @@ -7776,4 +7776,23 @@ + + + + + + + + + + + + + + + + diff --git a/tests/bugs/intertypeOverrides/Aspect1.class b/tests/bugs/intertypeOverrides/Aspect1.class new file mode 100644 index 000000000..824e468a1 Binary files /dev/null and b/tests/bugs/intertypeOverrides/Aspect1.class differ diff --git a/tests/bugs/intertypeOverrides/Aspect1.java b/tests/bugs/intertypeOverrides/Aspect1.java new file mode 100644 index 000000000..e6dbf8bd8 --- /dev/null +++ b/tests/bugs/intertypeOverrides/Aspect1.java @@ -0,0 +1,3 @@ +aspect Aspect1 { + public void Subclass.staticMethod() {}; +} diff --git a/tests/bugs/intertypeOverrides/Aspect2.class b/tests/bugs/intertypeOverrides/Aspect2.class new file mode 100644 index 000000000..f4421e9e3 Binary files /dev/null and b/tests/bugs/intertypeOverrides/Aspect2.class differ diff --git a/tests/bugs/intertypeOverrides/Aspect2.java b/tests/bugs/intertypeOverrides/Aspect2.java new file mode 100644 index 000000000..b2ea3ca56 --- /dev/null +++ b/tests/bugs/intertypeOverrides/Aspect2.java @@ -0,0 +1,3 @@ +aspect Aspect2 { + public static void Subclass.nonstaticMethod() {}; +} diff --git a/tests/bugs/intertypeOverrides/IntertypeOverrides.java b/tests/bugs/intertypeOverrides/IntertypeOverrides.java new file mode 100644 index 000000000..895a49b91 --- /dev/null +++ b/tests/bugs/intertypeOverrides/IntertypeOverrides.java @@ -0,0 +1,9 @@ +class Super { + public void m(){}; +} + +class Sub extends Super {} + +aspect A { + public static void Sub.m(){} +} diff --git a/tests/bugs/intertypeOverrides/IntertypeOverrides2.java b/tests/bugs/intertypeOverrides/IntertypeOverrides2.java new file mode 100644 index 000000000..ae86cc3bf --- /dev/null +++ b/tests/bugs/intertypeOverrides/IntertypeOverrides2.java @@ -0,0 +1,9 @@ +class Super { + public static void m(){}; +} + +class Sub extends Super {} + +aspect A { + public void Sub.m(){} +} diff --git a/tests/bugs/intertypeOverrides/Subclass.class b/tests/bugs/intertypeOverrides/Subclass.class new file mode 100644 index 000000000..c0a203fbd Binary files /dev/null and b/tests/bugs/intertypeOverrides/Subclass.class differ diff --git a/tests/bugs/intertypeOverrides/Subclass.java b/tests/bugs/intertypeOverrides/Subclass.java new file mode 100644 index 000000000..b87d7c845 --- /dev/null +++ b/tests/bugs/intertypeOverrides/Subclass.java @@ -0,0 +1,2 @@ +class Subclass extends Superclass { +} diff --git a/tests/bugs/intertypeOverrides/Super.class b/tests/bugs/intertypeOverrides/Super.class new file mode 100644 index 000000000..0a91a0098 Binary files /dev/null and b/tests/bugs/intertypeOverrides/Super.class differ diff --git a/tests/bugs/intertypeOverrides/Superclass.class b/tests/bugs/intertypeOverrides/Superclass.class new file mode 100644 index 000000000..6b0ea6b94 Binary files /dev/null and b/tests/bugs/intertypeOverrides/Superclass.class differ diff --git a/tests/bugs/intertypeOverrides/Superclass.java b/tests/bugs/intertypeOverrides/Superclass.java new file mode 100644 index 000000000..eface6c39 --- /dev/null +++ b/tests/bugs/intertypeOverrides/Superclass.java @@ -0,0 +1,4 @@ +class Superclass { + public static void staticMethod(){} {} + public void nonstaticMethod() {}; +} diff --git a/weaver/src/org/aspectj/weaver/ResolvedTypeX.java b/weaver/src/org/aspectj/weaver/ResolvedTypeX.java index 15c86bdbb..16634af07 100644 --- a/weaver/src/org/aspectj/weaver/ResolvedTypeX.java +++ b/weaver/src/org/aspectj/weaver/ResolvedTypeX.java @@ -1107,9 +1107,9 @@ public abstract class ResolvedTypeX extends TypeX { ResolvedMember sig = munger.getSignature(); while (existingMembers.hasNext()) { ResolvedMember existingMember = (ResolvedMember)existingMembers.next(); - + //System.err.println("Comparing munger: "+sig+" with member "+existingMember); if (conflictingSignature(existingMember, munger.getSignature())) { - //System.err.println("conflict: " + existingMember + " with " + munger); + //System.err.println("conflict: existingMember=" + existingMember + " typeMunger=" + munger); //System.err.println(munger.getSourceLocation() + ", " + munger.getSignature() + ", " + munger.getSignature().getSourceLocation()); if (isVisible(existingMember.getModifiers(), this, munger.getAspectType())) { @@ -1191,7 +1191,15 @@ public abstract class ResolvedTypeX extends TypeX { return false; } - + if (parent.isStatic() && !child.isStatic()) { + world.showMessage(IMessage.ERROR, + child.toString()+" cannot override "+parent.toString()+"; overridden method is static", + child.getSourceLocation(),null); + } else if (child.isStatic() && !parent.isStatic()) { + world.showMessage(IMessage.ERROR, + child.toString()+" cannot override "+parent.toString()+"; overriding method is static", + child.getSourceLocation(),null); + } return true; }