Browse Source

@override fix: previous version didnt cope with abstract ITDs (yuck)

tags/V1_5_0M3
aclement 19 years ago
parent
commit
9c1f6658a8

+ 19
- 9
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java View File

@@ -15,6 +15,7 @@

import java.lang.reflect.Modifier;
import java.util.Iterator;
import java.util.List;

import org.aspectj.ajdt.internal.compiler.ast.PointcutDeclaration;
import org.aspectj.ajdt.internal.compiler.ast.Proceed;
@@ -342,18 +343,27 @@ public class AjProblemReporter extends ProblemReporter {
// ignore ajc$ methods
if (new String(method.selector).startsWith("ajc$")) return;
ResolvedMember possiblyErroneousRm = factory.makeResolvedMember(method.binding);
ResolvedType onTypeX = factory.fromEclipse(method.binding.declaringClass);
for (Iterator i = onTypeX.getInterTypeMungersIncludingSupers().iterator(); i.hasNext(); ) {
ConcreteTypeMunger m = (ConcreteTypeMunger)i.next();
ResolvedMember sig = m.getSignature();
if (ResolvedType.matches(AjcMemberMaker.interMethod(sig,m.getAspectType(),
sig.getDeclaringType().resolve(factory.getWorld()).isInterface()),
factory.makeResolvedMember(method.binding))) {
// match, so dont need to report a problem!
return;
// Can't use 'getInterTypeMungersIncludingSupers()' since that will exclude abstract ITDs
// on any super classes - so we have to trawl up ourselves.. I wonder if this problem
// affects other code in the problem reporter that looks through ITDs...
ResolvedType supertypeToLookAt = onTypeX.getSuperclass();
while (supertypeToLookAt!=null) {
List itMungers = supertypeToLookAt.getInterTypeMungers();
for (Iterator i = itMungers.iterator(); i.hasNext(); ) {
ConcreteTypeMunger m = (ConcreteTypeMunger)i.next();
ResolvedMember sig = m.getSignature();
ResolvedMember rm = AjcMemberMaker.interMethod(sig,m.getAspectType(),
sig.getDeclaringType().resolve(factory.getWorld()).isInterface());
if (ResolvedType.matches(rm,possiblyErroneousRm)) {
// match, so dont need to report a problem!
return;
}
}
}
supertypeToLookAt = supertypeToLookAt.getSuperclass();
}
// report the error...
super.methodMustOverride(method);
}

Loading…
Cancel
Save