]> source.dussan.org Git - aspectj.git/commitdiff
better error handling
authorjhugunin <jhugunin>
Mon, 23 Dec 2002 23:11:02 +0000 (23:11 +0000)
committerjhugunin <jhugunin>
Mon, 23 Dec 2002 23:11:02 +0000 (23:11 +0000)
better handling of synthetic inter-type members

weaver/src/org/aspectj/weaver/NewConstructorTypeMunger.java
weaver/src/org/aspectj/weaver/NewFieldTypeMunger.java
weaver/src/org/aspectj/weaver/NewMethodTypeMunger.java
weaver/src/org/aspectj/weaver/ResolvedMember.java
weaver/src/org/aspectj/weaver/ResolvedTypeMunger.java
weaver/src/org/aspectj/weaver/ResolvedTypeX.java
weaver/src/org/aspectj/weaver/patterns/PatternParser.java

index 5940d478936e5fe42f3d829b985bf4e3084ebdeb..9b23de08de9aae2c88ad1be3bf3ac4e9baa95281 100644 (file)
@@ -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);
        }
 
 }
index f30db09707a0d000ef9f5eb58d866a1de145e889..fe21fec9d22b44ce8f6eccae01e7a81aa51c1044 100644 (file)
@@ -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);
+       }
 }
index 32d77aea63def866287af5352e6d883d12924311..ddb8987554a4bcdc7eac3a29b77145e806d74c9d 100644 (file)
@@ -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);
        }
 }
index f47f11279e12595cf64e829ec84b76625fc66a72..1f43ed50149119a9915fa59c23c3f221ac5eadec 100644 (file)
@@ -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),
index 27c0435b7e0fe5fd65507aaa47c5f73e3e326cef..e04c923cba72b2ddf6205878725e9b34c233b5c0 100644 (file)
@@ -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;
        }
 
index a57bbd58d6b5099424801588256cdd9bffa46bc5..15f5885edd593454ca1079a29e17cbb96d88e2eb 100644 (file)
@@ -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());
        }
        
        
index eaeb71f209dc0a26b28d8d171703b56fcac6b84a..242e29c03086d81f4c9342fa67ba984f55df9432 100644 (file)
@@ -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;
        }