summaryrefslogtreecommitdiffstats
path: root/org.aspectj.ajdt.core/src
diff options
context:
space:
mode:
authoraclement <aclement>2005-01-20 14:44:39 +0000
committeraclement <aclement>2005-01-20 14:44:39 +0000
commit5d281fd8e98c5c2bec4365d3fc340e2d5f04becc (patch)
tree03948e1c15e0786e75a09899c4e957f8f00da415 /org.aspectj.ajdt.core/src
parent759be74616a981dc6002a9e7e6bc64223d28bda0 (diff)
downloadaspectj-5d281fd8e98c5c2bec4365d3fc340e2d5f04becc.tar.gz
aspectj-5d281fd8e98c5c2bec4365d3fc340e2d5f04becc.zip
Fix for Bug 83303: complier error when mixing inheritance, overriding and polymorphism
Diffstat (limited to 'org.aspectj.ajdt.core/src')
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java32
1 files changed, 32 insertions, 0 deletions
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java
index 0f92785a1..9a6e11857 100644
--- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java
+++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java
@@ -136,6 +136,38 @@ public class AjProblemReporter extends ProblemReporter {
}
+ public void inheritedMethodReducesVisibility(SourceTypeBinding type, MethodBinding concreteMethod, MethodBinding[] abstractMethods) {
+ // if we implemented this method by a public inter-type declaration, then there is no error
+
+ ResolvedTypeX onTypeX = null;
+ // If the type is anonymous, look at its supertype
+ if (!type.isAnonymousType()) {
+ onTypeX = factory.fromEclipse(type);
+ } else {
+ // Hmmm. If the ITD is on an interface that is being 'instantiated' using an anonymous type,
+ // we sort it out elsewhere and don't come into this method -
+ // so we don't have to worry about interfaces, just the superclass.
+ onTypeX = factory.fromEclipse(type.superclass()); //abstractMethod.declaringClass);
+ }
+ for (Iterator i = onTypeX.getInterTypeMungersIncludingSupers().iterator(); i.hasNext(); ) {
+ ConcreteTypeMunger m = (ConcreteTypeMunger)i.next();
+ ResolvedMember sig = m.getSignature();
+ if (!Modifier.isAbstract(sig.getModifiers())) {
+ if (ResolvedTypeX
+ .matches(
+ AjcMemberMaker.interMethod(
+ sig,
+ m.getAspectType(),
+ sig.getDeclaringType().isInterface(
+ factory.getWorld())),
+ EclipseFactory.makeResolvedMember(concreteMethod))) {
+ return;
+ }
+ }
+ }
+
+ super.inheritedMethodReducesVisibility(type,concreteMethod,abstractMethods);
+ }
public void abstractMethodMustBeImplemented(
SourceTypeBinding type,