diff options
author | aclement <aclement> | 2004-07-28 14:43:40 +0000 |
---|---|---|
committer | aclement <aclement> | 2004-07-28 14:43:40 +0000 |
commit | 573741c8081c6b6b45921cafaae39f37eede2302 (patch) | |
tree | fae17176ce374ed0881cb10a8a161e39b3e18fbb | |
parent | c143eb5ec12a8ee9cf480e8bf4a4e12acef38d40 (diff) | |
download | aspectj-573741c8081c6b6b45921cafaae39f37eede2302.tar.gz aspectj-573741c8081c6b6b45921cafaae39f37eede2302.zip |
Fix for 64331
java.lang.NullPointerException in WeaverMessageHandler class
-rw-r--r-- | org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/WeaverMessageHandler.java | 20 | ||||
-rw-r--r-- | tests/ajcTests.xml | 7 | ||||
-rw-r--r-- | tests/bugs/abstractITDs/A.java | 2 | ||||
-rw-r--r-- | tests/bugs/abstractITDs/B.aj | 3 | ||||
-rw-r--r-- | tests/bugs/abstractITDs/B.jar | bin | 0 -> 1396 bytes | |||
-rw-r--r-- | tests/bugs/abstractITDs/C.java | 2 | ||||
-rw-r--r-- | tests/bugs/abstractITDs/buildBJar.bat | 1 | ||||
-rw-r--r-- | weaver/src/org/aspectj/weaver/ResolvedTypeX.java | 9 |
8 files changed, 37 insertions, 7 deletions
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/WeaverMessageHandler.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/WeaverMessageHandler.java index 71017a6c3..a379fccb6 100644 --- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/WeaverMessageHandler.java +++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/WeaverMessageHandler.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.aspectj.ajdt.internal.compiler; +import java.util.ArrayList; import java.util.List; import org.aspectj.ajdt.internal.compiler.lookup.EclipseSourceLocation; @@ -164,12 +165,13 @@ public class WeaverMessageHandler implements IMessageHandler { private IProblem[] buildSeeAlsoProblems(List sourceLocations, CompilationResult problemSource, boolean usedBinarySourceFileName) { - int probLength = sourceLocations.size(); - if (usedBinarySourceFileName) probLength++; - IProblem[] ret = new IProblem[probLength]; + List ret = new ArrayList(); + for (int i = 0; i < sourceLocations.size(); i++) { ISourceLocation loc = (ISourceLocation) sourceLocations.get(i); - ret[i] = new DefaultProblem(loc.getSourceFile().getPath().toCharArray(), + if (loc != null ) { + DefaultProblem dp = + new DefaultProblem( loc.getSourceFile().getPath().toCharArray(), "see also", 0, new String[] {}, @@ -177,13 +179,19 @@ public class WeaverMessageHandler implements IMessageHandler { getStartPos(loc,null), getEndPos(loc,null), loc.getLine()); + ret.add(dp); + } else { + throw new RuntimeException("Internal Compiler Error: Unexpected null source location passed as 'see also' location."); + } } if (usedBinarySourceFileName) { - ret[ret.length -1] = new DefaultProblem(problemSource.fileName,"see also",0,new String[] {}, + DefaultProblem dp = new DefaultProblem(problemSource.fileName,"see also",0,new String[] {}, ProblemSeverities.Ignore,0, 0,0); + ret.add(dp); } - return ret; + IProblem[] retValue = (IProblem[])ret.toArray(new IProblem[]{}); + return retValue; } } diff --git a/tests/ajcTests.xml b/tests/ajcTests.xml index 85c36164b..f76405da3 100644 --- a/tests/ajcTests.xml +++ b/tests/ajcTests.xml @@ -7795,4 +7795,11 @@ </compile> </ajc-test> + <ajc-test dir="bugs/abstractITDs" + pr="64331" title="java.lang.NullPointerException in WeaverMessageHandler class"> + <compile files="A.java,C.java" aspectpath="B.jar"> + <message kind="error" line="1" text="must implement abstract inter-type declaration: void A.foo()"/> + </compile> + </ajc-test> + </suite> diff --git a/tests/bugs/abstractITDs/A.java b/tests/bugs/abstractITDs/A.java new file mode 100644 index 000000000..5d9e777af --- /dev/null +++ b/tests/bugs/abstractITDs/A.java @@ -0,0 +1,2 @@ +public abstract class A { +} diff --git a/tests/bugs/abstractITDs/B.aj b/tests/bugs/abstractITDs/B.aj new file mode 100644 index 000000000..54af3233e --- /dev/null +++ b/tests/bugs/abstractITDs/B.aj @@ -0,0 +1,3 @@ +public aspect B {
+ abstract public void A.foo();
+}
\ No newline at end of file diff --git a/tests/bugs/abstractITDs/B.jar b/tests/bugs/abstractITDs/B.jar Binary files differnew file mode 100644 index 000000000..b0fcaad10 --- /dev/null +++ b/tests/bugs/abstractITDs/B.jar diff --git a/tests/bugs/abstractITDs/C.java b/tests/bugs/abstractITDs/C.java new file mode 100644 index 000000000..8e6613707 --- /dev/null +++ b/tests/bugs/abstractITDs/C.java @@ -0,0 +1,2 @@ +public class C extends A { +}
\ No newline at end of file diff --git a/tests/bugs/abstractITDs/buildBJar.bat b/tests/bugs/abstractITDs/buildBJar.bat new file mode 100644 index 000000000..4905f255f --- /dev/null +++ b/tests/bugs/abstractITDs/buildBJar.bat @@ -0,0 +1 @@ +ajc A.java B.aj -outjar B.jar
diff --git a/weaver/src/org/aspectj/weaver/ResolvedTypeX.java b/weaver/src/org/aspectj/weaver/ResolvedTypeX.java index 16634af07..2779f7cdd 100644 --- a/weaver/src/org/aspectj/weaver/ResolvedTypeX.java +++ b/weaver/src/org/aspectj/weaver/ResolvedTypeX.java @@ -986,10 +986,17 @@ public abstract class ResolvedTypeX extends TypeX { for (Iterator iter = getInterTypeMungersIncludingSupers().iterator(); iter.hasNext();) { ConcreteTypeMunger element = (ConcreteTypeMunger) iter.next(); if (element.getSignature() != null && element.getSignature().isAbstract()) { + ISourceLocation xtraLocation = element.getSourceLocation(); + if (xtraLocation == null) { + // Until intertype mungers remember where they came from, the source location + // for the element is null when binary weaving. In these cases uses the + // source location for the aspect containing the ITD + xtraLocation = element.getAspectType().getSourceLocation(); + } world.getMessageHandler().handleMessage( new Message("must implement abstract inter-type declaration: " + element.getSignature(), "", IMessage.ERROR, getSourceLocation(), null, - new ISourceLocation[] { element.getSourceLocation() })); + new ISourceLocation[] { xtraLocation })); } } } |