diff options
author | aclement <aclement> | 2010-01-25 20:46:09 +0000 |
---|---|---|
committer | aclement <aclement> | 2010-01-25 20:46:09 +0000 |
commit | df01d2d711ab2988acf89f0ed0366864974c063d (patch) | |
tree | b9399eccc35982828a3464552464bb1efe9ce34c | |
parent | c70383591c468ed1c289791f8b2bfaad12aca804 (diff) | |
download | aspectj-df01d2d711ab2988acf89f0ed0366864974c063d.tar.gz aspectj-df01d2d711ab2988acf89f0ed0366864974c063d.zip |
298704
-rw-r--r-- | weaver/src/org/aspectj/weaver/model/AsmRelationshipProvider.java | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/weaver/src/org/aspectj/weaver/model/AsmRelationshipProvider.java b/weaver/src/org/aspectj/weaver/model/AsmRelationshipProvider.java index b8a0c7ef8..c6f004afc 100644 --- a/weaver/src/org/aspectj/weaver/model/AsmRelationshipProvider.java +++ b/weaver/src/org/aspectj/weaver/model/AsmRelationshipProvider.java @@ -124,6 +124,7 @@ public class AsmRelationshipProvider { if (model == null) { return; } + if (World.createInjarHierarchy && isBinaryAspect(originatingAspect)) { createHierarchy(model, typeTransformer, originatingAspect); } @@ -140,6 +141,28 @@ public class AsmRelationshipProvider { if (closer != null) { sourceNode = closer; } + if (sourceNode == null) { + // This can be caused by the aspect defining the type munger actually being on the classpath and not the + // inpath or aspectpath. Rather than NPE at the next line, let's have another go at faulting it in. + // This inner loop is a small duplicate of the outer loop that attempts to find something closer than + // the type declaration + if (World.createInjarHierarchy) { + createHierarchy(model, typeTransformer, originatingAspect); + if (typeTransformer.getSourceLocation() != null && typeTransformer.getSourceLocation().getOffset() != -1 + && !isMixinRelated(typeTransformer)) { + sourceNode = model.getHierarchy().findElementForType(originatingAspect.getPackageName(), + originatingAspect.getClassName()); + IProgramElement closer2 = model.getHierarchy().findCloserMatchForLineNumber(sourceNode, + typeTransformer.getSourceLocation().getLine()); + if (closer2 != null) { + sourceNode = closer2; + } + } else { + sourceNode = model.getHierarchy().findElementForType(originatingAspect.getPackageName(), + originatingAspect.getClassName()); + } + } + } sourceHandle = sourceNode.getHandleIdentifier(); } else { sourceNode = model.getHierarchy().findElementForType(originatingAspect.getPackageName(), |