diff -r 1ca2dc8584e1 -r 1bf037016426 src/share/classes/com/sun/tools/javadoc/SourcePositionImpl.java --- a/src/share/classes/com/sun/tools/javadoc/SourcePositionImpl.java Tue Jan 20 17:49:49 2009 +0000 +++ b/src/share/classes/com/sun/tools/javadoc/SourcePositionImpl.java Tue Jan 20 15:17:45 2009 -0800 @@ -25,11 +25,12 @@ package com.sun.tools.javadoc; +import java.io.File; +import javax.tools.FileObject; + import com.sun.javadoc.SourcePosition; import com.sun.tools.javac.util.Position; -import java.io.File; - /** * A source position: filename, line number, and column number. * @@ -37,15 +38,21 @@ * @author Neal M Gafter * @author Michael Van De Vanter (position representation changed to char offsets) */ -class SourcePositionImpl implements SourcePosition { - String filename; +public class SourcePositionImpl implements SourcePosition { + FileObject filename; int position; Position.LineMap lineMap; /** The source file. Returns null if no file information is * available. */ public File file() { - return (filename == null) ? null : new File(filename); + return (filename == null) ? null : new File(filename.getName()); + } + + /** The source file. Returns null if no file information is + * available. */ + public FileObject fileObject() { + return filename; } /** The line in the source file. The first line is numbered 1; @@ -71,7 +78,7 @@ } } - private SourcePositionImpl(String file, int position, + private SourcePositionImpl(FileObject file, int position, Position.LineMap lineMap) { super(); this.filename = file; @@ -79,16 +86,27 @@ this.lineMap = lineMap; } - public static SourcePosition make(String file, int pos, + public static SourcePosition make(FileObject file, int pos, Position.LineMap lineMap) { if (file == null) return null; return new SourcePositionImpl(file, pos, lineMap); } public String toString() { + // Backwards compatibility hack. ZipFileObjects use the format + // zipfile(zipentry) but javadoc has been using zipfile/zipentry + String fn = filename.toString(); + if (fn.endsWith(")")) { + int paren = fn.lastIndexOf("("); + if (paren != -1) + fn = fn.substring(0, paren) + + File.separatorChar + + fn.substring(paren + 1, fn.length() - 1); + } + if (position == Position.NOPOS) - return filename; + return fn; else - return filename + ":" + line(); + return fn + ":" + line(); } }