summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraclement <aclement>2010-01-25 20:46:09 +0000
committeraclement <aclement>2010-01-25 20:46:09 +0000
commitdf01d2d711ab2988acf89f0ed0366864974c063d (patch)
treeb9399eccc35982828a3464552464bb1efe9ce34c
parentc70383591c468ed1c289791f8b2bfaad12aca804 (diff)
downloadaspectj-df01d2d711ab2988acf89f0ed0366864974c063d.tar.gz
aspectj-df01d2d711ab2988acf89f0ed0366864974c063d.zip
298704
-rw-r--r--weaver/src/org/aspectj/weaver/model/AsmRelationshipProvider.java23
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(),