diff options
author | aclement <aclement> | 2005-01-20 14:44:39 +0000 |
---|---|---|
committer | aclement <aclement> | 2005-01-20 14:44:39 +0000 |
commit | 5d281fd8e98c5c2bec4365d3fc340e2d5f04becc (patch) | |
tree | 03948e1c15e0786e75a09899c4e957f8f00da415 /org.aspectj.ajdt.core/src | |
parent | 759be74616a981dc6002a9e7e6bc64223d28bda0 (diff) | |
download | aspectj-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.java | 32 |
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, |