summaryrefslogtreecommitdiffstats
path: root/org.aspectj.ajdt.core
diff options
context:
space:
mode:
authoracolyer <acolyer>2004-01-14 11:12:27 +0000
committeracolyer <acolyer>2004-01-14 11:12:27 +0000
commit5c4db9cb620918dcf064ddbfc50f54130d3b2cab (patch)
treeaac96c5782acfad95f20ccb6f50e930c083a96a0 /org.aspectj.ajdt.core
parentb8d42c06d69f44e8c87a9b7d3ea290de0d18ed37 (diff)
downloadaspectj-5c4db9cb620918dcf064ddbfc50f54130d3b2cab.tar.gz
aspectj-5c4db9cb620918dcf064ddbfc50f54130d3b2cab.zip
Fix for Bugzilla Bug 49784
declaring interface methods should work as it does in interface and Bugzilla Bug 45676 AspectJ enhanced code can not be used with plain old java anymo and Bugzilla Bug 43972 Static crosscutting makes interfaces unusable for javac
Diffstat (limited to 'org.aspectj.ajdt.core')
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java27
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java2
2 files changed, 18 insertions, 11 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 8d9146a00..45db5b357 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
@@ -20,6 +20,7 @@ import org.aspectj.ajdt.internal.compiler.ast.PointcutDeclaration;
import org.aspectj.ajdt.internal.compiler.ast.Proceed;
import org.aspectj.ajdt.internal.compiler.lookup.EclipseFactory;
import org.aspectj.util.FuzzyBoolean;
+import org.aspectj.weaver.AjcMemberMaker;
import org.aspectj.weaver.ConcreteTypeMunger;
import org.aspectj.weaver.ResolvedMember;
import org.aspectj.weaver.ResolvedTypeX;
@@ -49,7 +50,7 @@ import org.eclipse.jdt.core.compiler.CharOperation;
public class AjProblemReporter extends ProblemReporter {
private static final boolean DUMP_STACK = false;
- public EclipseFactory world;
+ public EclipseFactory factory;
public AjProblemReporter(
IErrorHandlingPolicy policy,
@@ -64,17 +65,17 @@ public class AjProblemReporter extends ProblemReporter {
TypeBinding exceptionType,
ASTNode location)
{
- if (!world.getWorld().getDeclareSoft().isEmpty()) {
- Shadow callSite = world.makeShadow(location, referenceContext);
- Shadow enclosingExec = world.makeShadow(referenceContext);
+ if (!factory.getWorld().getDeclareSoft().isEmpty()) {
+ Shadow callSite = factory.makeShadow(location, referenceContext);
+ Shadow enclosingExec = factory.makeShadow(referenceContext);
// System.err.println("about to show error for unhandled exception: " + new String(exceptionType.sourceName()) +
// " at " + location + " in " + referenceContext);
- for (Iterator i = world.getWorld().getDeclareSoft().iterator(); i.hasNext(); ) {
+ for (Iterator i = factory.getWorld().getDeclareSoft().iterator(); i.hasNext(); ) {
DeclareSoft d = (DeclareSoft)i.next();
// We need the exceptionType to match the type in the declare soft statement
// This means it must either be the same type or a subtype
- ResolvedTypeX throwException = world.fromEclipse((ReferenceBinding)exceptionType);
+ ResolvedTypeX throwException = factory.fromEclipse((ReferenceBinding)exceptionType);
FuzzyBoolean isExceptionTypeOrSubtype =
d.getException().matchesInstanceof(throwException);
if (!isExceptionTypeOrSubtype.alwaysTrue() ) continue;
@@ -140,16 +141,22 @@ public class AjProblemReporter extends ProblemReporter {
return;
}
-
// if we implemented this method by an inter-type declaration, then there is no error
//??? be sure this is always right
- ResolvedTypeX onTypeX = world.fromEclipse(type); //abstractMethod.declaringClass);
+ ResolvedTypeX onTypeX = factory.fromEclipse(type); //abstractMethod.declaringClass);
for (Iterator i = onTypeX.getInterTypeMungers().iterator(); i.hasNext(); ) {
ConcreteTypeMunger m = (ConcreteTypeMunger)i.next();
if (m.matches(onTypeX)) {
ResolvedMember sig = m.getSignature();
- if (Modifier.isPublic(sig.getModifiers()) && !Modifier.isAbstract(sig.getModifiers())) {
- if (ResolvedTypeX.matches(sig, world.makeResolvedMember(abstractMethod))) {
+ if (!Modifier.isAbstract(sig.getModifiers())) {
+ if (ResolvedTypeX
+ .matches(
+ AjcMemberMaker.interMethod(
+ sig,
+ m.getAspectType(),
+ sig.getDeclaringType().isInterface(
+ factory.getWorld())),
+ EclipseFactory.makeResolvedMember(abstractMethod))) {
return;
}
}
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java
index 9ab6abd65..368ef0064 100644
--- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java
+++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java
@@ -366,7 +366,7 @@ public class AjBuildManager {
// ew.setLint(bcelWorld.getLint());
// ew.setXnoInline(buildConfig.isXnoInline());
le.factory = factory;
- pr.world = factory;
+ pr.factory = factory;
le.factory.buildManager = this;
compiler.lookupEnvironment = le;