# HG changeset patch # User jjg # Date 1355267155 28800 # Node ID 969e90f68ac53f5a519a83484de5243e6c1a8c45 # Parent d66cab4ef3974d650c7485c61e873dcaa38afbce 8004828: refactor init of *DocImpl classes Reviewed-by: darcy diff -r d66cab4ef397 -r 969e90f68ac5 langtools/src/share/classes/com/sun/tools/javadoc/AnnotationTypeDocImpl.java --- a/langtools/src/share/classes/com/sun/tools/javadoc/AnnotationTypeDocImpl.java Mon Dec 10 16:21:26 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javadoc/AnnotationTypeDocImpl.java Tue Dec 11 15:05:55 2012 -0800 @@ -27,13 +27,13 @@ import com.sun.javadoc.*; +import com.sun.source.util.TreePath; import com.sun.tools.javac.code.Kinds; import com.sun.tools.javac.code.Scope; import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.tree.JCTree.*; import com.sun.tools.javac.util.List; import com.sun.tools.javac.util.Names; -import com.sun.tools.javac.util.Position; /** * Represents an annotation type. @@ -51,12 +51,11 @@ extends ClassDocImpl implements AnnotationTypeDoc { public AnnotationTypeDocImpl(DocEnv env, ClassSymbol sym) { - this(env, sym, null, null, null); + this(env, sym, null); } - public AnnotationTypeDocImpl(DocEnv env, ClassSymbol sym, - String doc, JCClassDecl tree, Position.LineMap lineMap) { - super(env, sym, doc, tree, lineMap); + public AnnotationTypeDocImpl(DocEnv env, ClassSymbol sym, TreePath treePath) { + super(env, sym, treePath); } /** diff -r d66cab4ef397 -r 969e90f68ac5 langtools/src/share/classes/com/sun/tools/javadoc/AnnotationTypeElementDocImpl.java --- a/langtools/src/share/classes/com/sun/tools/javadoc/AnnotationTypeElementDocImpl.java Mon Dec 10 16:21:26 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javadoc/AnnotationTypeElementDocImpl.java Tue Dec 11 15:05:55 2012 -0800 @@ -27,9 +27,9 @@ import com.sun.javadoc.*; +import com.sun.source.util.TreePath; import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.tree.JCTree.*; -import com.sun.tools.javac.util.Position; /** * Represents an element of an annotation type. @@ -50,9 +50,8 @@ super(env, sym); } - public AnnotationTypeElementDocImpl(DocEnv env, MethodSymbol sym, - String doc, JCMethodDecl tree, Position.LineMap lineMap) { - super(env, sym, doc, tree, lineMap); + public AnnotationTypeElementDocImpl(DocEnv env, MethodSymbol sym, TreePath treePath) { + super(env, sym, treePath); } /** diff -r d66cab4ef397 -r 969e90f68ac5 langtools/src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java --- a/langtools/src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java Mon Dec 10 16:21:26 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java Tue Dec 11 15:05:55 2012 -0800 @@ -31,13 +31,14 @@ import java.net.URI; import java.util.HashSet; import java.util.Set; + import javax.tools.FileObject; import javax.tools.JavaFileManager.Location; import javax.tools.StandardJavaFileManager; import javax.tools.StandardLocation; import com.sun.javadoc.*; - +import com.sun.source.util.TreePath; import com.sun.tools.javac.code.Flags; import com.sun.tools.javac.code.Kinds; import com.sun.tools.javac.code.Scope; @@ -45,22 +46,17 @@ import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.code.Type; import com.sun.tools.javac.code.Type.ClassType; - import com.sun.tools.javac.comp.AttrContext; import com.sun.tools.javac.comp.Env; - import com.sun.tools.javac.tree.JCTree; -import com.sun.tools.javac.tree.JCTree.JCClassDecl; import com.sun.tools.javac.tree.JCTree.JCFieldAccess; import com.sun.tools.javac.tree.JCTree.JCImport; import com.sun.tools.javac.tree.TreeInfo; - import com.sun.tools.javac.util.List; import com.sun.tools.javac.util.ListBuffer; import com.sun.tools.javac.util.Name; import com.sun.tools.javac.util.Names; import com.sun.tools.javac.util.Position; - import static com.sun.tools.javac.code.Kinds.*; import static com.sun.tools.javac.code.TypeTag.CLASS; import static com.sun.tools.javac.tree.JCTree.Tag.*; @@ -100,15 +96,14 @@ * Constructor */ public ClassDocImpl(DocEnv env, ClassSymbol sym) { - this(env, sym, null, null, null); + this(env, sym, null); } /** * Constructor */ - public ClassDocImpl(DocEnv env, ClassSymbol sym, String documentation, - JCClassDecl tree, Position.LineMap lineMap) { - super(env, sym, documentation, tree, lineMap); + public ClassDocImpl(DocEnv env, ClassSymbol sym, TreePath treePath) { + super(env, sym, treePath); this.type = (ClassType)sym.type; this.tsym = sym; } diff -r d66cab4ef397 -r 969e90f68ac5 langtools/src/share/classes/com/sun/tools/javadoc/ConstructorDocImpl.java --- a/langtools/src/share/classes/com/sun/tools/javadoc/ConstructorDocImpl.java Mon Dec 10 16:21:26 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javadoc/ConstructorDocImpl.java Tue Dec 11 15:05:55 2012 -0800 @@ -27,10 +27,9 @@ import com.sun.javadoc.*; +import com.sun.source.util.TreePath; import com.sun.tools.javac.code.Symbol.ClassSymbol; import com.sun.tools.javac.code.Symbol.MethodSymbol; -import com.sun.tools.javac.tree.JCTree.JCMethodDecl; -import com.sun.tools.javac.util.Position; /** * Represents a constructor of a java class. @@ -58,9 +57,8 @@ /** * constructor. */ - public ConstructorDocImpl(DocEnv env, MethodSymbol sym, - String docComment, JCMethodDecl tree, Position.LineMap lineMap) { - super(env, sym, docComment, tree, lineMap); + public ConstructorDocImpl(DocEnv env, MethodSymbol sym, TreePath treePath) { + super(env, sym, treePath); } /** diff -r d66cab4ef397 -r 969e90f68ac5 langtools/src/share/classes/com/sun/tools/javadoc/DocEnv.java --- a/langtools/src/share/classes/com/sun/tools/javadoc/DocEnv.java Mon Dec 10 16:21:26 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javadoc/DocEnv.java Tue Dec 11 15:05:55 2012 -0800 @@ -27,18 +27,20 @@ import java.lang.reflect.Modifier; import java.util.*; + import javax.tools.JavaFileManager; import com.sun.javadoc.*; - +import com.sun.source.util.TreePath; +import com.sun.tools.javac.api.JavacTrees; import com.sun.tools.javac.code.*; import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.code.Type.ClassType; import com.sun.tools.javac.comp.Check; +import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.JCTree.*; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.Names; -import com.sun.tools.javac.util.Position; /** * Holds the environment for a run of javadoc. @@ -104,6 +106,8 @@ JavaFileManager fileManager; Context context; + WeakHashMap treePaths = new WeakHashMap(); + /** Allow documenting from class files? */ boolean docClasses = false; @@ -540,13 +544,12 @@ /** * Create the PackageDoc (or a subtype) for a package symbol. */ - void makePackageDoc(PackageSymbol pack, String docComment, JCCompilationUnit tree) { + void makePackageDoc(PackageSymbol pack, TreePath treePath) { PackageDocImpl result = packageMap.get(pack); if (result != null) { - if (docComment != null) result.setRawCommentText(docComment); - if (tree != null) result.setTree(tree); + if (treePath != null) result.setTreePath(treePath); } else { - result = new PackageDocImpl(this, pack, docComment, tree); + result = new PackageDocImpl(this, pack, treePath); packageMap.put(pack, result); } } @@ -572,17 +575,16 @@ /** * Create the ClassDoc (or a subtype) for a class symbol. */ - protected void makeClassDoc(ClassSymbol clazz, String docComment, JCClassDecl tree, Position.LineMap lineMap) { + protected void makeClassDoc(ClassSymbol clazz, TreePath treePath) { ClassDocImpl result = classMap.get(clazz); if (result != null) { - if (docComment != null) result.setRawCommentText(docComment); - if (tree != null) result.setTree(tree); + if (treePath != null) result.setTreePath(treePath); return; } - if (isAnnotationType(tree)) { // flags of clazz may not yet be set - result = new AnnotationTypeDocImpl(this, clazz, docComment, tree, lineMap); + if (isAnnotationType((JCClassDecl) treePath.getLeaf())) { // flags of clazz may not yet be set + result = new AnnotationTypeDocImpl(this, clazz, treePath); } else { - result = new ClassDocImpl(this, clazz, docComment, tree, lineMap); + result = new ClassDocImpl(this, clazz, treePath); } classMap.put(clazz, result); } @@ -610,13 +612,12 @@ /** * Create a FieldDoc for a var symbol. */ - protected void makeFieldDoc(VarSymbol var, String docComment, JCVariableDecl tree, Position.LineMap lineMap) { + protected void makeFieldDoc(VarSymbol var, TreePath treePath) { FieldDocImpl result = fieldMap.get(var); if (result != null) { - if (docComment != null) result.setRawCommentText(docComment); - if (tree != null) result.setTree(tree); + if (treePath != null) result.setTreePath(treePath); } else { - result = new FieldDocImpl(this, var, docComment, tree, lineMap); + result = new FieldDocImpl(this, var, treePath); fieldMap.put(var, result); } } @@ -627,14 +628,12 @@ * Create a MethodDoc for this MethodSymbol. * Should be called only on symbols representing methods. */ - protected void makeMethodDoc(MethodSymbol meth, String docComment, - JCMethodDecl tree, Position.LineMap lineMap) { + protected void makeMethodDoc(MethodSymbol meth, TreePath treePath) { MethodDocImpl result = (MethodDocImpl)methodMap.get(meth); if (result != null) { - if (docComment != null) result.setRawCommentText(docComment); - if (tree != null) result.setTree(tree); + if (treePath != null) result.setTreePath(treePath); } else { - result = new MethodDocImpl(this, meth, docComment, tree, lineMap); + result = new MethodDocImpl(this, meth, treePath); methodMap.put(meth, result); } } @@ -656,14 +655,12 @@ * Create the ConstructorDoc for a MethodSymbol. * Should be called only on symbols representing constructors. */ - protected void makeConstructorDoc(MethodSymbol meth, String docComment, - JCMethodDecl tree, Position.LineMap lineMap) { + protected void makeConstructorDoc(MethodSymbol meth, TreePath treePath) { ConstructorDocImpl result = (ConstructorDocImpl)methodMap.get(meth); if (result != null) { - if (docComment != null) result.setRawCommentText(docComment); - if (tree != null) result.setTree(tree); + if (treePath != null) result.setTreePath(treePath); } else { - result = new ConstructorDocImpl(this, meth, docComment, tree, lineMap); + result = new ConstructorDocImpl(this, meth, treePath); methodMap.put(meth, result); } } @@ -685,16 +682,14 @@ * Create the AnnotationTypeElementDoc for a MethodSymbol. * Should be called only on symbols representing annotation type elements. */ - protected void makeAnnotationTypeElementDoc(MethodSymbol meth, - String docComment, JCMethodDecl tree, Position.LineMap lineMap) { + protected void makeAnnotationTypeElementDoc(MethodSymbol meth, TreePath treePath) { AnnotationTypeElementDocImpl result = (AnnotationTypeElementDocImpl)methodMap.get(meth); if (result != null) { - if (docComment != null) result.setRawCommentText(docComment); - if (tree != null) result.setTree(tree); + if (treePath != null) result.setTreePath(treePath); } else { result = - new AnnotationTypeElementDocImpl(this, meth, docComment, tree, lineMap); + new AnnotationTypeElementDocImpl(this, meth, treePath); methodMap.put(meth, result); } } @@ -730,6 +725,18 @@ // return result; } + TreePath getTreePath(JCCompilationUnit tree) { + TreePath p = treePaths.get(tree); + if (p == null) + treePaths.put(tree, p = new TreePath(tree)); + return p; + } + + TreePath getTreePath(JCCompilationUnit toplevel, JCTree tree) { + // don't bother to cache paths for classes and members + return new TreePath(getTreePath(toplevel), tree); + } + /** * Set the encoding. */ diff -r d66cab4ef397 -r 969e90f68ac5 langtools/src/share/classes/com/sun/tools/javadoc/DocImpl.java --- a/langtools/src/share/classes/com/sun/tools/javadoc/DocImpl.java Mon Dec 10 16:21:26 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javadoc/DocImpl.java Tue Dec 11 15:05:55 2012 -0800 @@ -35,6 +35,9 @@ import javax.tools.FileObject; import com.sun.javadoc.*; +import com.sun.source.util.TreePath; +import com.sun.tools.javac.tree.JCTree; +import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; import com.sun.tools.javac.util.Position; /** @@ -61,6 +64,12 @@ protected final DocEnv env; //### Rename this everywhere to 'docenv' ? /** + * Back pointer to the tree node for this doc item. + * May be null if there is no associated tree. + */ + protected TreePath treePath; + + /** * The complex comment object, lazily initialized. */ private Comment comment; @@ -88,11 +97,21 @@ /** * Constructor. */ - DocImpl(DocEnv env, String documentation) { - this.documentation = documentation; + DocImpl(DocEnv env, TreePath treePath) { + this.treePath = treePath; + this.documentation = getCommentText(treePath); this.env = env; } + private static String getCommentText(TreePath p) { + if (p == null) + return null; + + JCCompilationUnit topLevel = (JCCompilationUnit) p.getCompilationUnit(); + JCTree tree = (JCTree) p.getLeaf(); + return topLevel.docComments.getCommentText(tree); + } + /** * So subclasses have the option to do lazy initialization of * "documentation" string. @@ -213,11 +232,21 @@ * operations like internalization. */ public void setRawCommentText(String rawDocumentation) { + treePath = null; documentation = rawDocumentation; comment = null; } /** + * Set the full unprocessed text of the comment and tree path. + */ + void setTreePath(TreePath treePath) { + this.treePath = treePath; + documentation = getCommentText(treePath); + comment = null; + } + + /** * return a key for sorting. */ CollationKey key() { diff -r d66cab4ef397 -r 969e90f68ac5 langtools/src/share/classes/com/sun/tools/javadoc/ExecutableMemberDocImpl.java --- a/langtools/src/share/classes/com/sun/tools/javadoc/ExecutableMemberDocImpl.java Mon Dec 10 16:21:26 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javadoc/ExecutableMemberDocImpl.java Tue Dec 11 15:05:55 2012 -0800 @@ -30,13 +30,12 @@ import com.sun.javadoc.*; +import com.sun.source.util.TreePath; import com.sun.tools.javac.code.Flags; import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.code.Type; -import com.sun.tools.javac.tree.JCTree.JCMethodDecl; import com.sun.tools.javac.util.List; import com.sun.tools.javac.util.ListBuffer; -import com.sun.tools.javac.util.Position; /** * Represents a method or constructor of a java class. @@ -60,9 +59,8 @@ /** * Constructor. */ - public ExecutableMemberDocImpl(DocEnv env, MethodSymbol sym, - String rawDocs, JCMethodDecl tree, Position.LineMap lineMap) { - super(env, sym, rawDocs, tree, lineMap); + public ExecutableMemberDocImpl(DocEnv env, MethodSymbol sym, TreePath treePath) { + super(env, sym, treePath); this.sym = sym; } @@ -70,7 +68,7 @@ * Constructor. */ public ExecutableMemberDocImpl(DocEnv env, MethodSymbol sym) { - this(env, sym, null, null, null); + this(env, sym, null); } /** diff -r d66cab4ef397 -r 969e90f68ac5 langtools/src/share/classes/com/sun/tools/javadoc/FieldDocImpl.java --- a/langtools/src/share/classes/com/sun/tools/javadoc/FieldDocImpl.java Mon Dec 10 16:21:26 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javadoc/FieldDocImpl.java Tue Dec 11 15:05:55 2012 -0800 @@ -25,6 +25,7 @@ package com.sun.tools.javadoc; +import com.sun.source.util.TreePath; import java.lang.reflect.Modifier; import com.sun.javadoc.*; @@ -61,9 +62,8 @@ /** * Constructor. */ - public FieldDocImpl(DocEnv env, VarSymbol sym, - String rawDocs, JCVariableDecl tree, Position.LineMap lineMap) { - super(env, sym, rawDocs, tree, lineMap); + public FieldDocImpl(DocEnv env, VarSymbol sym, TreePath treePath) { + super(env, sym, treePath); this.sym = sym; } @@ -71,7 +71,7 @@ * Constructor. */ public FieldDocImpl(DocEnv env, VarSymbol sym) { - this(env, sym, null, null, null); + this(env, sym, null); } /** diff -r d66cab4ef397 -r 969e90f68ac5 langtools/src/share/classes/com/sun/tools/javadoc/JavadocEnter.java --- a/langtools/src/share/classes/com/sun/tools/javadoc/JavadocEnter.java Mon Dec 10 16:21:26 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javadoc/JavadocEnter.java Tue Dec 11 15:05:55 2012 -0800 @@ -25,13 +25,14 @@ package com.sun.tools.javadoc; + import javax.tools.JavaFileObject; +import com.sun.source.util.TreePath; import com.sun.tools.javac.code.Kinds; import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.comp.Enter; import com.sun.tools.javac.tree.JCTree.*; -import com.sun.tools.javac.tree.TreeInfo; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition; import com.sun.tools.javac.util.List; @@ -85,8 +86,7 @@ public void visitTopLevel(JCCompilationUnit tree) { super.visitTopLevel(tree); if (tree.sourcefile.isNameCompatible("package-info", JavaFileObject.Kind.SOURCE)) { - String comment = TreeInfo.getCommentText(env, tree); - docenv.makePackageDoc(tree.packge, comment, tree); + docenv.makePackageDoc(tree.packge, docenv.getTreePath(tree)); } } @@ -95,9 +95,8 @@ super.visitClassDef(tree); if (tree.sym == null) return; if (tree.sym.kind == Kinds.TYP || tree.sym.kind == Kinds.ERR) { - String comment = TreeInfo.getCommentText(env, tree); ClassSymbol c = tree.sym; - docenv.makeClassDoc(c, comment, tree, env.toplevel.lineMap); + docenv.makeClassDoc(c, docenv.getTreePath(env.toplevel, tree)); } } diff -r d66cab4ef397 -r 969e90f68ac5 langtools/src/share/classes/com/sun/tools/javadoc/JavadocMemberEnter.java --- a/langtools/src/share/classes/com/sun/tools/javadoc/JavadocMemberEnter.java Mon Dec 10 16:21:26 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javadoc/JavadocMemberEnter.java Tue Dec 11 15:05:55 2012 -0800 @@ -25,14 +25,13 @@ package com.sun.tools.javadoc; +import com.sun.source.util.TreePath; import com.sun.tools.javac.code.Flags; import com.sun.tools.javac.code.Kinds; import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.comp.MemberEnter; import com.sun.tools.javac.tree.JCTree.*; -import com.sun.tools.javac.tree.TreeInfo; import com.sun.tools.javac.util.Context; -import com.sun.tools.javac.util.Position; /** * Javadoc's own memberEnter phase does a few things above and beyond that @@ -73,14 +72,13 @@ super.visitMethodDef(tree); MethodSymbol meth = tree.sym; if (meth == null || meth.kind != Kinds.MTH) return; - String docComment = TreeInfo.getCommentText(env, tree); - Position.LineMap lineMap = env.toplevel.lineMap; + TreePath treePath = docenv.getTreePath(env.toplevel, tree); if (meth.isConstructor()) - docenv.makeConstructorDoc(meth, docComment, tree, lineMap); + docenv.makeConstructorDoc(meth, treePath); else if (isAnnotationTypeElement(meth)) - docenv.makeAnnotationTypeElementDoc(meth, docComment, tree, lineMap); + docenv.makeAnnotationTypeElementDoc(meth, treePath); else - docenv.makeMethodDoc(meth, docComment, tree, lineMap); + docenv.makeMethodDoc(meth, treePath); // release resources tree.body = null; @@ -92,9 +90,7 @@ if (tree.sym != null && tree.sym.kind == Kinds.VAR && !isParameter(tree.sym)) { - String docComment = TreeInfo.getCommentText(env, tree); - Position.LineMap lineMap = env.toplevel.lineMap; - docenv.makeFieldDoc(tree.sym, docComment, tree, lineMap); + docenv.makeFieldDoc(tree.sym, docenv.getTreePath(env.toplevel, tree)); } } diff -r d66cab4ef397 -r 969e90f68ac5 langtools/src/share/classes/com/sun/tools/javadoc/MemberDocImpl.java --- a/langtools/src/share/classes/com/sun/tools/javadoc/MemberDocImpl.java Mon Dec 10 16:21:26 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javadoc/MemberDocImpl.java Tue Dec 11 15:05:55 2012 -0800 @@ -27,9 +27,8 @@ import com.sun.javadoc.*; +import com.sun.source.util.TreePath; import com.sun.tools.javac.code.Symbol; -import com.sun.tools.javac.tree.JCTree; -import com.sun.tools.javac.util.Position; /** * Represents a member of a java class: field, constructor, or method. @@ -57,8 +56,8 @@ /** * constructor. */ - public MemberDocImpl(DocEnv env, Symbol sym, String doc, JCTree tree, Position.LineMap lineMap) { - super(env, sym, doc, tree, lineMap); + public MemberDocImpl(DocEnv env, Symbol sym, TreePath treePath) { + super(env, sym, treePath); } /** diff -r d66cab4ef397 -r 969e90f68ac5 langtools/src/share/classes/com/sun/tools/javadoc/MethodDocImpl.java --- a/langtools/src/share/classes/com/sun/tools/javadoc/MethodDocImpl.java Mon Dec 10 16:21:26 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javadoc/MethodDocImpl.java Tue Dec 11 15:05:55 2012 -0800 @@ -28,12 +28,10 @@ import java.lang.reflect.Modifier; import com.sun.javadoc.*; +import com.sun.source.util.TreePath; import com.sun.tools.javac.code.*; import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.code.Type; -import com.sun.tools.javac.tree.JCTree.JCMethodDecl; -import com.sun.tools.javac.util.Position; - import static com.sun.tools.javac.code.TypeTag.CLASS; /** @@ -62,9 +60,8 @@ /** * constructor. */ - public MethodDocImpl(DocEnv env, MethodSymbol sym, - String docComment, JCMethodDecl tree, Position.LineMap lineMap) { - super(env, sym, docComment, tree, lineMap); + public MethodDocImpl(DocEnv env, MethodSymbol sym, TreePath treePath) { + super(env, sym, treePath); } /** diff -r d66cab4ef397 -r 969e90f68ac5 langtools/src/share/classes/com/sun/tools/javadoc/PackageDocImpl.java --- a/langtools/src/share/classes/com/sun/tools/javadoc/PackageDocImpl.java Mon Dec 10 16:21:26 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javadoc/PackageDocImpl.java Tue Dec 11 15:05:55 2012 -0800 @@ -31,6 +31,7 @@ import javax.tools.FileObject; import com.sun.javadoc.*; +import com.sun.source.util.TreePath; import com.sun.tools.javac.code.Attribute; import com.sun.tools.javac.code.Scope; import com.sun.tools.javac.code.Symbol.ClassSymbol; @@ -75,17 +76,16 @@ * Constructor */ public PackageDocImpl(DocEnv env, PackageSymbol sym) { - this(env, sym, null, null); + this(env, sym, null); } /** * Constructor */ - public PackageDocImpl(DocEnv env, PackageSymbol sym, - String documentation, JCTree tree) { - super(env, documentation); + public PackageDocImpl(DocEnv env, PackageSymbol sym, TreePath treePath) { + super(env, treePath); this.sym = sym; - this.tree = (JCCompilationUnit) tree; + this.tree = (treePath == null) ? null : (JCCompilationUnit) treePath.getCompilationUnit(); foundDoc = (documentation != null); } @@ -93,8 +93,8 @@ this.tree = (JCCompilationUnit) tree; } - public void setRawCommentText(String rawDocumentation) { - super.setRawCommentText(rawDocumentation); + public void setTreePath(TreePath treePath) { + super.setTreePath(treePath); checkDoc(); } diff -r d66cab4ef397 -r 969e90f68ac5 langtools/src/share/classes/com/sun/tools/javadoc/ProgramElementDocImpl.java --- a/langtools/src/share/classes/com/sun/tools/javadoc/ProgramElementDocImpl.java Mon Dec 10 16:21:26 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javadoc/ProgramElementDocImpl.java Tue Dec 11 15:05:55 2012 -0800 @@ -29,10 +29,12 @@ import java.text.CollationKey; import com.sun.javadoc.*; +import com.sun.source.util.TreePath; import com.sun.tools.javac.code.Attribute; import com.sun.tools.javac.code.Symbol; import com.sun.tools.javac.code.Symbol.ClassSymbol; import com.sun.tools.javac.tree.JCTree; +import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; import com.sun.tools.javac.util.Position; /** @@ -66,16 +68,20 @@ // Cache for getModifiers(). private int modifiers = -1; - protected ProgramElementDocImpl(DocEnv env, Symbol sym, - String doc, JCTree tree, Position.LineMap lineMap) { - super(env, doc); + protected ProgramElementDocImpl(DocEnv env, Symbol sym, TreePath treePath) { + super(env, treePath); this.sym = sym; - this.tree = tree; - this.lineMap = lineMap; + if (treePath != null) { + tree = (JCTree) treePath.getLeaf(); + lineMap = ((JCCompilationUnit) treePath.getCompilationUnit()).lineMap; + } } - void setTree(JCTree tree) { - this.tree = tree; + @Override + void setTreePath(TreePath treePath) { + super.setTreePath(treePath); + this.tree = (JCTree) treePath.getLeaf(); + this.lineMap = ((JCCompilationUnit) treePath.getCompilationUnit()).lineMap; } /** diff -r d66cab4ef397 -r 969e90f68ac5 langtools/src/share/classes/com/sun/tools/javadoc/RootDocImpl.java --- a/langtools/src/share/classes/com/sun/tools/javadoc/RootDocImpl.java Mon Dec 10 16:21:26 2012 +0000 +++ b/langtools/src/share/classes/com/sun/tools/javadoc/RootDocImpl.java Tue Dec 11 15:05:55 2012 -0800 @@ -331,7 +331,6 @@ @Override protected String documentation() { if (documentation == null) { - int cnt = options.length(); JavaFileObject overviewPath = getOverviewPath(); if (overviewPath == null) { // no doc file to be had