]> source.dussan.org Git - aspectj.git/commitdiff
Fudge for getSourceLocation to give as much of a
authoracolyer <acolyer>
Thu, 27 Feb 2003 19:40:00 +0000 (19:40 +0000)
committeracolyer <acolyer>
Thu, 27 Feb 2003 19:40:00 +0000 (19:40 +0000)
clue as possible about the real identity of the file.

weaver/src/org/aspectj/weaver/bcel/BcelShadow.java

index 0483a826ebbecc3f356e5ed2f20b3423dc4b033d..cff8c4fa9687fe6b09a5624333a2d2e07c05f885 100644 (file)
@@ -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() {