summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bridge/src/org/aspectj/bridge/SourceLocation.java1
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AjConstructorDeclaration.java2
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AjMethodDeclaration.java2
-rw-r--r--org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/EclipseSourceContext.java22
-rw-r--r--tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjSyntaxTests.java4
-rw-r--r--weaver/src/org/aspectj/weaver/AjAttribute.java22
-rw-r--r--weaver/src/org/aspectj/weaver/ISourceContext.java2
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/AtAjAttributes.java10
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelMethod.java12
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java2
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelShadow.java2
-rw-r--r--weaver/src/org/aspectj/weaver/bcel/BcelSourceContext.java18
-rw-r--r--weaver/src/org/aspectj/weaver/patterns/IfPointcut.java4
13 files changed, 66 insertions, 37 deletions
diff --git a/bridge/src/org/aspectj/bridge/SourceLocation.java b/bridge/src/org/aspectj/bridge/SourceLocation.java
index fecf9041a..73b63f940 100644
--- a/bridge/src/org/aspectj/bridge/SourceLocation.java
+++ b/bridge/src/org/aspectj/bridge/SourceLocation.java
@@ -155,4 +155,5 @@ public class SourceLocation implements ISourceLocation, java.io.Serializable {
public void setOffset(int i) { offset=i;}
+
}
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AjConstructorDeclaration.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AjConstructorDeclaration.java
index 504631c9c..13212dfdd 100644
--- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AjConstructorDeclaration.java
+++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AjConstructorDeclaration.java
@@ -53,6 +53,6 @@ public class AjConstructorDeclaration extends ConstructorDeclaration {
}
extraAttributeList.add(
- new EclipseAttributeAdapter(new AjAttribute.MethodDeclarationLineNumberAttribute(declarationStartLine)));
+ new EclipseAttributeAdapter(new AjAttribute.MethodDeclarationLineNumberAttribute(declarationStartLine, this.sourceStart())));
}
}
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AjMethodDeclaration.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AjMethodDeclaration.java
index ae91da894..21e009f67 100644
--- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AjMethodDeclaration.java
+++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/ast/AjMethodDeclaration.java
@@ -69,6 +69,6 @@ public class AjMethodDeclaration extends MethodDeclaration {
}
extraAttributeList.add(
- new EclipseAttributeAdapter(new AjAttribute.MethodDeclarationLineNumberAttribute(declarationStartLine)));
+ new EclipseAttributeAdapter(new AjAttribute.MethodDeclarationLineNumberAttribute(declarationStartLine, this.sourceStart())));
}
}
diff --git a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/EclipseSourceContext.java b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/EclipseSourceContext.java
index b3fc473b4..8cdaa333b 100644
--- a/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/EclipseSourceContext.java
+++ b/org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/EclipseSourceContext.java
@@ -50,18 +50,22 @@ public class EclipseSourceContext implements ISourceContext {
return new EclipseSourceLocation(result, position.getStart(), position.getEnd());
}
- public ISourceLocation makeSourceLocation(int line) {
+ public ISourceLocation makeSourceLocation(int line, int offset) {
SourceLocation sl = new SourceLocation(getSourceFile(), line);
- // compute the offset
- //TODO AV - should we do it lazily?
- int[] offsets = result.lineSeparatorPositions;
- int likelyOffset = 0;
- if (line > 0 && line < offsets.length) {
- //1st char of given line is next char after previous end of line
- likelyOffset = offsets[line-1];
+ if (offset > 0) {
+ sl.setOffset(offset);
+ } else {
+ // compute the offset
+ //TODO AV - should we do it lazily?
+ int[] offsets = result.lineSeparatorPositions;
+ int likelyOffset = 0;
+ if (line > 0 && line < offsets.length) {
+ //1st char of given line is next char after previous end of line
+ likelyOffset = offsets[line-1];//FIXME may be need -2
+ }
+ sl.setOffset(likelyOffset);
}
- sl.setOffset(likelyOffset);
return sl;
}
diff --git a/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjSyntaxTests.java b/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjSyntaxTests.java
index eda07cb53..7cec3892b 100644
--- a/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjSyntaxTests.java
+++ b/tests/src/org/aspectj/systemtest/ajc150/ataspectj/AtAjSyntaxTests.java
@@ -41,11 +41,11 @@ public class AtAjSyntaxTests extends XMLBasedAjcTestCase {
public void testSingletonAspectBindings() {
//Note AV: uncomment setReporting to get it in modules/tests folder
- //org.aspectj.asm.AsmManager.setReporting("debug.txt",true,true,true,true);
+ org.aspectj.asm.AsmManager.setReporting("debug.txt",true,true,true,true);
runTest("singletonAspectBindings");
// same stuff with AJ
//org.aspectj.asm.AsmManager.setReporting("debug-aj.txt",true,true,true,true);
- runTest("singletonAspectBindings2");
+ //runTest("singletonAspectBindings2");
}
diff --git a/weaver/src/org/aspectj/weaver/AjAttribute.java b/weaver/src/org/aspectj/weaver/AjAttribute.java
index 8bb1f6a9c..bc0628a3e 100644
--- a/weaver/src/org/aspectj/weaver/AjAttribute.java
+++ b/weaver/src/org/aspectj/weaver/AjAttribute.java
@@ -314,23 +314,35 @@ public abstract class AjAttribute {
}
private int lineNumber;
-
- public MethodDeclarationLineNumberAttribute(int line) {
+
+ // AV: added in 1.5 M3 thus handling cases where we don't have that information
+ private int offset;
+
+ public MethodDeclarationLineNumberAttribute(int line, int offset) {
this.lineNumber = line;
+ this.offset = offset;
}
public int getLineNumber() { return lineNumber; }
-
+
+ public int getOffset() { return offset; }
+
public void write(DataOutputStream s) throws IOException {
s.writeInt(lineNumber);
+ s.writeInt(offset);
}
public static MethodDeclarationLineNumberAttribute read(VersionedDataInputStream s) throws IOException {
- return new MethodDeclarationLineNumberAttribute(s.readInt());
+ int line = s.readInt();
+ int offset = 0;
+ if (s.available()>0) {
+ offset = s.readInt();
+ }
+ return new MethodDeclarationLineNumberAttribute(line, offset);
}
public String toString() {
- return AttributeName + ": " + lineNumber;
+ return AttributeName + ": " + lineNumber + ":" + offset;
}
}
diff --git a/weaver/src/org/aspectj/weaver/ISourceContext.java b/weaver/src/org/aspectj/weaver/ISourceContext.java
index d0c91a27b..70c7031d8 100644
--- a/weaver/src/org/aspectj/weaver/ISourceContext.java
+++ b/weaver/src/org/aspectj/weaver/ISourceContext.java
@@ -17,6 +17,6 @@ import org.aspectj.bridge.ISourceLocation;
public interface ISourceContext {
public ISourceLocation makeSourceLocation(IHasPosition position);
- public ISourceLocation makeSourceLocation(int line);
+ public ISourceLocation makeSourceLocation(int line, int offset);
public int getOffset();
}
diff --git a/weaver/src/org/aspectj/weaver/bcel/AtAjAttributes.java b/weaver/src/org/aspectj/weaver/bcel/AtAjAttributes.java
index e45259a38..499bc04b6 100644
--- a/weaver/src/org/aspectj/weaver/bcel/AtAjAttributes.java
+++ b/weaver/src/org/aspectj/weaver/bcel/AtAjAttributes.java
@@ -552,7 +552,7 @@ public class AtAjAttributes {
}
setIgnoreUnboundBindingNames(pc, bindings);
- ISourceLocation sl = struct.context.makeSourceLocation(struct.bMethod.getDeclarationLineNumber());
+ ISourceLocation sl = struct.context.makeSourceLocation(struct.bMethod.getDeclarationLineNumber(), struct.bMethod.getDeclarationOffset());
struct.ajAttributes.add(
new AjAttribute.AdviceAttribute(
AdviceKind.Before,
@@ -607,7 +607,7 @@ public class AtAjAttributes {
}
setIgnoreUnboundBindingNames(pc, bindings);
- ISourceLocation sl = struct.context.makeSourceLocation(struct.bMethod.getDeclarationLineNumber());
+ ISourceLocation sl = struct.context.makeSourceLocation(struct.bMethod.getDeclarationLineNumber(), struct.bMethod.getDeclarationOffset());
struct.ajAttributes.add(
new AjAttribute.AdviceAttribute(
AdviceKind.After,
@@ -692,7 +692,7 @@ public class AtAjAttributes {
}
setIgnoreUnboundBindingNames(pc, bindings);
- ISourceLocation sl = struct.context.makeSourceLocation(struct.bMethod.getDeclarationLineNumber());
+ ISourceLocation sl = struct.context.makeSourceLocation(struct.bMethod.getDeclarationLineNumber(), struct.bMethod.getDeclarationOffset());
struct.ajAttributes.add(
new AjAttribute.AdviceAttribute(
AdviceKind.AfterReturning,
@@ -776,7 +776,7 @@ public class AtAjAttributes {
}
setIgnoreUnboundBindingNames(pc, bindings);
- ISourceLocation sl = struct.context.makeSourceLocation(struct.bMethod.getDeclarationLineNumber());
+ ISourceLocation sl = struct.context.makeSourceLocation(struct.bMethod.getDeclarationLineNumber(), struct.bMethod.getDeclarationOffset());
struct.ajAttributes.add(
new AjAttribute.AdviceAttribute(
AdviceKind.AfterThrowing,
@@ -830,7 +830,7 @@ public class AtAjAttributes {
}
setIgnoreUnboundBindingNames(pc, bindings);
- ISourceLocation sl = struct.context.makeSourceLocation(struct.bMethod.getDeclarationLineNumber());
+ ISourceLocation sl = struct.context.makeSourceLocation(struct.bMethod.getDeclarationLineNumber(), struct.bMethod.getDeclarationOffset());
struct.ajAttributes.add(
new AjAttribute.AdviceAttribute(
AdviceKind.Around,
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelMethod.java b/weaver/src/org/aspectj/weaver/bcel/BcelMethod.java
index e4dff0586..376ee1e14 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelMethod.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelMethod.java
@@ -151,13 +151,21 @@ final class BcelMethod extends ResolvedMember {
return -1;
}
}
-
+
+ public int getDeclarationOffset() {
+ if (declarationLineNumber != null) {
+ return declarationLineNumber.getOffset();
+ } else {
+ return -1;
+ }
+ }
+
public ISourceLocation getSourceLocation() {
ISourceLocation ret = super.getSourceLocation();
if ((ret == null || ret.getLine()==0) && hasDeclarationLineNumberInfo()) {
// lets see if we can do better
ISourceContext isc = getSourceContext();
- if (isc !=null) ret = isc.makeSourceLocation(getDeclarationLineNumber());
+ if (isc !=null) ret = isc.makeSourceLocation(getDeclarationLineNumber(), getDeclarationOffset());
else ret = new SourceLocation(null,getDeclarationLineNumber());
}
return ret;
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java b/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java
index 3a3cdc2f0..21f3d766a 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelObjectType.java
@@ -394,7 +394,7 @@ public class BcelObjectType extends AbstractReferenceTypeDelegate {
}
public ISourceLocation getSourceLocation() {
- return getResolvedTypeX().getSourceContext().makeSourceLocation(0); //FIXME ??? we can do better than this
+ return getResolvedTypeX().getSourceContext().makeSourceLocation(0, 0); //FIXME ??? we can do better than this
}
public AjAttribute.WeaverVersionInfo getWeaverVersionAttribute() {
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
index 16fa420a2..e0db5e9cd 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java
@@ -3020,7 +3020,7 @@ public class BcelShadow extends Shadow {
if (getKind()==Shadow.StaticInitialization && getEnclosingClass().getType().getSourceLocation().getOffset()!=0)
return getEnclosingClass().getType().getSourceLocation();
else
- return getEnclosingClass().getType().getSourceContext().makeSourceLocation(sourceLine);
+ return getEnclosingClass().getType().getSourceContext().makeSourceLocation(sourceLine, 0);
}
}
diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelSourceContext.java b/weaver/src/org/aspectj/weaver/bcel/BcelSourceContext.java
index 2bd26e066..d4a47c80b 100644
--- a/weaver/src/org/aspectj/weaver/bcel/BcelSourceContext.java
+++ b/weaver/src/org/aspectj/weaver/bcel/BcelSourceContext.java
@@ -86,16 +86,20 @@ public class BcelSourceContext implements ISourceContext {
}
}
- public ISourceLocation makeSourceLocation(int line) {
+ public ISourceLocation makeSourceLocation(int line, int offset) {
if (line < 0) line = 0;
SourceLocation sl = new SourceLocation(getSourceFile(), line);
- if (lineBreaks != null) {
- int likelyOffset = 0;
- if (line > 0 && line < lineBreaks.length) {
- //1st char of given line is next char after previous end of line
- likelyOffset = lineBreaks[line-1] + 1;
+ if (offset > 0) {
+ sl.setOffset(offset);
+ } else {
+ if (lineBreaks != null) {
+ int likelyOffset = 0;
+ if (line > 0 && line < lineBreaks.length) {
+ //1st char of given line is next char after previous end of line
+ likelyOffset = lineBreaks[line-1] + 1;
+ }
+ sl.setOffset(likelyOffset);
}
- sl.setOffset(likelyOffset);
}
return sl;
}
diff --git a/weaver/src/org/aspectj/weaver/patterns/IfPointcut.java b/weaver/src/org/aspectj/weaver/patterns/IfPointcut.java
index bebc5aa84..f914b74ac 100644
--- a/weaver/src/org/aspectj/weaver/patterns/IfPointcut.java
+++ b/weaver/src/org/aspectj/weaver/patterns/IfPointcut.java
@@ -120,12 +120,12 @@ public class IfPointcut extends Pointcut {
public void write(DataOutputStream s) throws IOException {
s.writeByte(Pointcut.IF);
- testMethod.write(s);//TODO Adrian, do something if this one happens to be null for @style if() from JDT stuff
+ testMethod.write(s);//FIXME Adrian, do something if this one happens to be null for @style if() from JDT stuff
s.writeByte(extraParameterFlags);
writeLocation(s);
}
public static Pointcut read(VersionedDataInputStream s, ISourceContext context) throws IOException {
- //TODO Adrian, read may failt if testMethod happens to be null for @style if() from JDT stuff
+ //FIXME Adrian, read may failt if testMethod happens to be null for @style if() from JDT stuff
IfPointcut ret = new IfPointcut(ResolvedMember.readResolvedMember(s, context), s.readByte());
ret.readLocation(context, s);
return ret;