From 62ac77ecb955f9eba81bb50997bd94715cdbc8d4 Mon Sep 17 00:00:00 2001 From: acolyer Date: Thu, 27 Feb 2003 19:40:00 +0000 Subject: [PATCH] Fudge for getSourceLocation to give as much of a clue as possible about the real identity of the file. --- .../org/aspectj/weaver/bcel/BcelShadow.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java index 0483a826e..cff8c4fa9 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelShadow.java @@ -1868,7 +1868,23 @@ public class BcelShadow extends Shadow { } public SourceLocation getSourceLocation() { - return new SourceLocation(new File(getEnclosingClass().getFileName()), getSourceLine()); + // AMC - a temporary "fudge" to give as much information as possible about the identity of the + // source file this source location points to. + String internalClassName = getEnclosingClass().getInternalClassName(); + String fileName = getEnclosingClass().getFileName(); + String extension = fileName.substring( fileName.lastIndexOf("."), fileName.length()); + String filePrefix = fileName.substring( 0, fileName.lastIndexOf(".")); + // internal class name is e.g. figures/Point, we don't know whether the file was + // .aj or .java so we put it together with the file extension of the enclosing class + // BUT... sometimes internalClassName is a different class (an aspect), so we only use it if it + // matches the file name. + String mostAccurateFileNameGuess; + if ( internalClassName.endsWith(filePrefix)) { + mostAccurateFileNameGuess = internalClassName + extension; + } else { + mostAccurateFileNameGuess = fileName; + } + return new SourceLocation(new File(mostAccurateFileNameGuess), getSourceLine()); } public Shadow getEnclosingShadow() { -- 2.39.5