From: aclement Date: Wed, 28 Jul 2004 14:43:40 +0000 (+0000) Subject: Fix for 64331 X-Git-Tag: for_ajdt1_1_12~91 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=573741c8081c6b6b45921cafaae39f37eede2302;p=aspectj.git Fix for 64331 java.lang.NullPointerException in WeaverMessageHandler class --- 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 @@ + + + + + + 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 new file mode 100644 index 000000000..b0fcaad10 Binary files /dev/null and b/tests/bugs/abstractITDs/B.jar differ 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 })); } } }