From 4e52d3a759b8b5b5566c186eacbffbdff21058fd Mon Sep 17 00:00:00 2001 From: jhugunin Date: Mon, 23 Dec 2002 23:11:02 +0000 Subject: [PATCH] better error handling better handling of synthetic inter-type members --- .../aspectj/weaver/NewConstructorTypeMunger.java | 2 +- .../src/org/aspectj/weaver/NewFieldTypeMunger.java | 9 +++++++++ .../org/aspectj/weaver/NewMethodTypeMunger.java | 2 +- weaver/src/org/aspectj/weaver/ResolvedMember.java | 4 ++++ .../src/org/aspectj/weaver/ResolvedTypeMunger.java | 4 ++++ weaver/src/org/aspectj/weaver/ResolvedTypeX.java | 4 ++-- .../org/aspectj/weaver/patterns/PatternParser.java | 14 +++++++++++--- 7 files changed, 32 insertions(+), 7 deletions(-) diff --git a/weaver/src/org/aspectj/weaver/NewConstructorTypeMunger.java b/weaver/src/org/aspectj/weaver/NewConstructorTypeMunger.java index 5940d4789..9b23de08d 100644 --- a/weaver/src/org/aspectj/weaver/NewConstructorTypeMunger.java +++ b/weaver/src/org/aspectj/weaver/NewConstructorTypeMunger.java @@ -72,7 +72,7 @@ public class NewConstructorTypeMunger extends ResolvedTypeMunger { public ResolvedMember getMatchingSyntheticMember(Member member, ResolvedTypeX aspectType) { ResolvedMember ret = getSyntheticConstructor(); if (ResolvedTypeX.matches(ret, member)) return getSignature(); - return null; + return super.getMatchingSyntheticMember(member, aspectType); } } diff --git a/weaver/src/org/aspectj/weaver/NewFieldTypeMunger.java b/weaver/src/org/aspectj/weaver/NewFieldTypeMunger.java index f30db0970..fe21fec9d 100644 --- a/weaver/src/org/aspectj/weaver/NewFieldTypeMunger.java +++ b/weaver/src/org/aspectj/weaver/NewFieldTypeMunger.java @@ -40,4 +40,13 @@ public class NewFieldTypeMunger extends ResolvedTypeMunger { ResolvedMember.readResolvedMember(s, context), readSuperMethodsCalled(s)); } + + public ResolvedMember getMatchingSyntheticMember(Member member, ResolvedTypeX aspectType) { + //??? might give a field where a method is expected + ResolvedMember ret = AjcMemberMaker.interFieldGetDispatcher(getSignature(), aspectType); + if (ResolvedTypeX.matches(ret, member)) return getSignature(); + ret = AjcMemberMaker.interFieldSetDispatcher(getSignature(), aspectType); + if (ResolvedTypeX.matches(ret, member)) return getSignature(); + return super.getMatchingSyntheticMember(member, aspectType); + } } diff --git a/weaver/src/org/aspectj/weaver/NewMethodTypeMunger.java b/weaver/src/org/aspectj/weaver/NewMethodTypeMunger.java index 32d77aea6..ddb898755 100644 --- a/weaver/src/org/aspectj/weaver/NewMethodTypeMunger.java +++ b/weaver/src/org/aspectj/weaver/NewMethodTypeMunger.java @@ -48,6 +48,6 @@ public class NewMethodTypeMunger extends ResolvedTypeMunger { public ResolvedMember getMatchingSyntheticMember(Member member, ResolvedTypeX aspectType) { ResolvedMember ret = AjcMemberMaker.interMethodDispatcher(getSignature(), aspectType); if (ResolvedTypeX.matches(ret, member)) return getSignature(); - return null; + return super.getMatchingSyntheticMember(member, aspectType); } } diff --git a/weaver/src/org/aspectj/weaver/ResolvedMember.java b/weaver/src/org/aspectj/weaver/ResolvedMember.java index f47f11279..1f43ed501 100644 --- a/weaver/src/org/aspectj/weaver/ResolvedMember.java +++ b/weaver/src/org/aspectj/weaver/ResolvedMember.java @@ -161,6 +161,10 @@ public class ResolvedMember extends Member implements IHasPosition { return Modifier.isAbstract(modifiers); } + public boolean isPublic() { + return Modifier.isPublic(modifiers); + } + public boolean isVisible(ResolvedTypeX fromType) { World world = fromType.getWorld(); return ResolvedTypeX.isVisible(getModifiers(), getDeclaringType().resolve(world), diff --git a/weaver/src/org/aspectj/weaver/ResolvedTypeMunger.java b/weaver/src/org/aspectj/weaver/ResolvedTypeMunger.java index 27c0435b7..e04c923cb 100644 --- a/weaver/src/org/aspectj/weaver/ResolvedTypeMunger.java +++ b/weaver/src/org/aspectj/weaver/ResolvedTypeMunger.java @@ -156,6 +156,10 @@ public abstract class ResolvedTypeMunger { // ---- public ResolvedMember getMatchingSyntheticMember(Member member, ResolvedTypeX aspectType) { + if ((getSignature() != null) && getSignature().isPublic() && member.equals(getSignature())) { + return getSignature(); + } + return null; } diff --git a/weaver/src/org/aspectj/weaver/ResolvedTypeX.java b/weaver/src/org/aspectj/weaver/ResolvedTypeX.java index a57bbd58d..15f5885ed 100644 --- a/weaver/src/org/aspectj/weaver/ResolvedTypeX.java +++ b/weaver/src/org/aspectj/weaver/ResolvedTypeX.java @@ -975,14 +975,14 @@ public abstract class ResolvedTypeX extends TypeX { if (this instanceof BcelObjectType) return; //System.err.println("conflict at " + m2.getSourceLocation()); - getWorld().getMessageHandler().handleMessage(MessageUtil.error( + getWorld().showMessage(IMessage.ERROR, "intertype declaration from " + m1.getAspectType().getName() + " conflicts with intertype declaration: " + m2.getSignature() + " from " + m2.getAspectType().getName(), - m2.getSourceLocation())); + m2.getSourceLocation(), getSourceLocation()); } diff --git a/weaver/src/org/aspectj/weaver/patterns/PatternParser.java b/weaver/src/org/aspectj/weaver/patterns/PatternParser.java index eaeb71f20..242e29c03 100644 --- a/weaver/src/org/aspectj/weaver/patterns/PatternParser.java +++ b/weaver/src/org/aspectj/weaver/patterns/PatternParser.java @@ -618,6 +618,7 @@ public class PatternParser { public SignaturePattern parseMethodOrConstructorSignaturePattern() { + int startPos = tokenSource.peek().getStart(); ModifiersPattern modifiers = parseModifiersPattern(); TypePattern returnType = parseTypePattern(); @@ -659,8 +660,10 @@ public class PatternParser { TypePatternList parameterTypes = parseArgumentsPattern(); ThrowsPattern throwsPattern = parseOptionalThrowsPattern(); - - return new SignaturePattern(kind, modifiers, returnType, declaringType, name, parameterTypes, throwsPattern); + SignaturePattern ret = new SignaturePattern(kind, modifiers, returnType, declaringType, name, parameterTypes, throwsPattern); + int endPos = tokenSource.peek(-1).getEnd(); + ret.setLocation(sourceContext, startPos, endPos); + return ret; } private boolean maybeEatNew(TypePattern returnType) { @@ -680,6 +683,7 @@ public class PatternParser { public SignaturePattern parseFieldSignaturePattern() { + int startPos = tokenSource.peek().getStart(); ModifiersPattern modifiers = parseModifiersPattern(); TypePattern returnType = parseTypePattern(); TypePattern declaringType = parseTypePattern(); @@ -693,8 +697,12 @@ public class PatternParser { declaringType = declaringType.ANY; } } - return new SignaturePattern(Member.FIELD, modifiers, returnType, + SignaturePattern ret = new SignaturePattern(Member.FIELD, modifiers, returnType, declaringType, name, TypePatternList.ANY, ThrowsPattern.ANY); + + int endPos = tokenSource.peek(-1).getEnd(); + ret.setLocation(sourceContext, startPos, endPos); + return ret; } -- 2.39.5