# HG changeset patch # User jjg # Date 1340223806 25200 # Node ID 5c0b3faeb0b08c1a609d6148f5152cebafc7f2fd # Parent 34e254ffd0e7b1df8e642dfab020a0a0b435cae7 7174143: encapsulate doc comment table Reviewed-by: ksrini, mcimadamore diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/api/JavacTrees.java --- a/src/share/classes/com/sun/tools/javac/api/JavacTrees.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/api/JavacTrees.java Wed Jun 20 13:23:26 2012 -0700 @@ -60,7 +60,7 @@ import com.sun.tools.javac.comp.MemberEnter; import com.sun.tools.javac.comp.Resolve; import com.sun.tools.javac.model.JavacElements; -import com.sun.tools.javac.parser.EndPosTable; +import com.sun.tools.javac.tree.EndPosTable; import com.sun.tools.javac.processing.JavacProcessingEnvironment; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.JCTree.*; @@ -240,10 +240,11 @@ public String getDocComment(TreePath path) { CompilationUnitTree t = path.getCompilationUnit(); - if (t instanceof JCTree.JCCompilationUnit) { + Tree leaf = path.getLeaf(); + if (t instanceof JCTree.JCCompilationUnit && leaf instanceof JCTree) { JCCompilationUnit cu = (JCCompilationUnit) t; if (cu.docComments != null) { - return cu.docComments.get(path.getLeaf()); + return cu.docComments.getCommentText((JCTree) leaf); } } return null; diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/comp/Enter.java --- a/src/share/classes/com/sun/tools/javac/comp/Enter.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/comp/Enter.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -312,7 +312,7 @@ tree.packge); if (addEnv || (tree0.packageAnnotations.isEmpty() && tree.docComments != null && - tree.docComments.get(tree) != null)) { + tree.docComments.hasComment(tree))) { typeEnvs.put(tree.packge, topEnv); } } diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/comp/Lower.java --- a/src/share/classes/com/sun/tools/javac/comp/Lower.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/comp/Lower.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,7 +40,7 @@ import com.sun.tools.javac.code.Type.*; import com.sun.tools.javac.jvm.Target; -import com.sun.tools.javac.parser.EndPosTable; +import com.sun.tools.javac.tree.EndPosTable; import static com.sun.tools.javac.code.Flags.*; import static com.sun.tools.javac.code.Flags.BLOCK; diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/jvm/CRTable.java --- a/src/share/classes/com/sun/tools/javac/jvm/CRTable.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/jvm/CRTable.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ import com.sun.tools.javac.util.*; import com.sun.tools.javac.util.List; import com.sun.tools.javac.tree.JCTree.*; -import com.sun.tools.javac.parser.EndPosTable; +import com.sun.tools.javac.tree.EndPosTable; /** This class contains the CharacterRangeTable for some method * and the hashtable for mapping trees or lists of trees to their diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/jvm/Gen.java --- a/src/share/classes/com/sun/tools/javac/jvm/Gen.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/jvm/Gen.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,7 @@ import com.sun.tools.javac.code.Type.*; import com.sun.tools.javac.jvm.Code.*; import com.sun.tools.javac.jvm.Items.*; -import com.sun.tools.javac.parser.EndPosTable; +import com.sun.tools.javac.tree.EndPosTable; import com.sun.tools.javac.tree.JCTree.*; import static com.sun.tools.javac.code.Flags.*; diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/model/JavacElements.java --- a/src/share/classes/com/sun/tools/javac/model/JavacElements.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/model/JavacElements.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,11 +28,14 @@ import java.lang.annotation.Annotation; import java.lang.annotation.Inherited; import java.util.Map; + import javax.lang.model.SourceVersion; import javax.lang.model.element.*; import javax.lang.model.type.DeclaredType; import javax.lang.model.util.Elements; import javax.tools.JavaFileObject; +import static javax.lang.model.util.ElementFilter.methodsIn; + import com.sun.tools.javac.code.*; import com.sun.tools.javac.code.Symbol.*; import com.sun.tools.javac.code.TypeTags; @@ -47,9 +50,7 @@ import com.sun.tools.javac.tree.TreeScanner; import com.sun.tools.javac.util.*; import com.sun.tools.javac.util.Name; - import static com.sun.tools.javac.tree.JCTree.Tag.*; -import static javax.lang.model.util.ElementFilter.methodsIn; /** * Utility methods for operating on program elements. @@ -361,7 +362,7 @@ JCCompilationUnit toplevel = treeTop.snd; if (toplevel.docComments == null) return null; - return toplevel.docComments.get(tree); + return toplevel.docComments.getCommentText(tree); } public PackageElement getPackageOf(Element e) { diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/parser/EndPosTable.java --- a/src/share/classes/com/sun/tools/javac/parser/EndPosTable.java Tue Jun 19 13:25:58 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package com.sun.tools.javac.parser; - -import com.sun.tools.javac.tree.JCTree; - -/** - * Specifies the methods to access a mappings of syntax trees to end positions. - *

This is NOT part of any supported API. - * If you write code that depends on this, you do so at your own - * risk. This code and its internal interfaces are subject to change - * or deletion without notice.

- */ -public interface EndPosTable { - - /** - * This method will return the end position of a given tree, otherwise a - * Positions.NOPOS will be returned. - * @param tree JCTree - * @return position of the source tree or Positions.NOPOS for non-existent mapping - */ - public int getEndPos(JCTree tree); - - /** - * Give an old tree and a new tree, the old tree will be replaced with - * the new tree, the position of the new tree will be that of the old - * tree. - * not exist. - * @param oldtree a JCTree to be replaced - * @param newtree a JCTree to be replaced with - * @return position of the old tree or Positions.NOPOS for non-existent mapping - */ - public int replaceTree(JCTree oldtree, JCTree newtree); -} diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java --- a/src/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -571,7 +571,7 @@ reader.scanCommentChar(); } while (reader.ch != CR && reader.ch != LF && reader.bp < reader.buflen); if (reader.bp < reader.buflen) { - comments = addDocReader(comments, processComment(pos, reader.bp, CommentStyle.LINE)); + comments = addComment(comments, processComment(pos, reader.bp, CommentStyle.LINE)); } break; } else if (reader.ch == '*') { @@ -597,7 +597,7 @@ } if (reader.ch == '/') { reader.scanChar(); - comments = addDocReader(comments, processComment(pos, reader.bp, style)); + comments = addComment(comments, processComment(pos, reader.bp, style)); break; } else { lexError(pos, "unclosed.comment"); @@ -693,10 +693,10 @@ } } //where - List addDocReader(List docReaders, Comment docReader) { - return docReaders == null ? - List.of(docReader) : - docReaders.prepend(docReader); + List addComment(List comments, Comment comment) { + return comments == null ? + List.of(comment) : + comments.prepend(comment); } /** Return the position where a lexical error occurred; diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/parser/JavacParser.java --- a/src/share/classes/com/sun/tools/javac/parser/JavacParser.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/parser/JavacParser.java Wed Jun 20 13:23:26 2012 -0700 @@ -117,7 +117,7 @@ this.allowMethodReferences = source.allowMethodReferences() && fac.options.isSet("allowMethodReferences"); this.keepDocComments = keepDocComments; - docComments = keepDocComments ? new HashMap() : null; + docComments = newDocCommentTable(keepDocComments); this.keepLineMap = keepLineMap; this.errorTree = F.Erroneous(); endPosTable = newEndPosTable(keepEndPositions); @@ -128,6 +128,11 @@ ? new SimpleEndPosTable() : new EmptyEndPosTable(); } + + protected DocCommentTable newDocCommentTable(boolean keepDocComments) { + return keepDocComments ? new SimpleDocCommentTable() : null; + } + /** Switch: Should generics be recognized? */ boolean allowGenerics; @@ -417,21 +422,21 @@ /* ---------- doc comments --------- */ - /** A hashtable to store all documentation comments + /** A table to store all documentation comments * indexed by the tree nodes they refer to. * defined only if option flag keepDocComment is set. */ - private final Map docComments; + private final DocCommentTable docComments; /** Make an entry into docComments hashtable, * provided flag keepDocComments is set and given doc comment is non-null. * @param tree The tree to be used as index in the hashtable * @param dc The doc comment to associate with the tree, or null. */ - void attach(JCTree tree, String dc) { + void attach(JCTree tree, Comment dc) { if (keepDocComments && dc != null) { // System.out.println("doc comment = ");System.out.println(dc);//DEBUG - docComments.put(tree, dc); + docComments.putComment(tree, dc); } } @@ -1858,7 +1863,7 @@ return List.of(parseStatement()); case MONKEYS_AT: case FINAL: { - String dc = token.comment(CommentStyle.JAVADOC); + Comment dc = token.comment(CommentStyle.JAVADOC); JCModifiers mods = modifiersOpt(); if (token.kind == INTERFACE || token.kind == CLASS || @@ -1875,13 +1880,13 @@ } } case ABSTRACT: case STRICTFP: { - String dc = token.comment(CommentStyle.JAVADOC); + Comment dc = token.comment(CommentStyle.JAVADOC); JCModifiers mods = modifiersOpt(); return List.of(classOrInterfaceOrEnumDeclaration(mods, dc)); } case INTERFACE: case CLASS: - String dc = token.comment(CommentStyle.JAVADOC); + Comment dc = token.comment(CommentStyle.JAVADOC); return List.of(classOrInterfaceOrEnumDeclaration(modifiersOpt(), dc)); case ENUM: case ASSERT: @@ -2418,7 +2423,7 @@ JCExpression type, Name name, boolean reqInit, - String dc, + Comment dc, T vdefs) { vdefs.append(variableDeclaratorRest(pos, mods, type, name, reqInit, dc)); @@ -2434,7 +2439,7 @@ /** VariableDeclarator = Ident VariableDeclaratorRest * ConstantDeclarator = Ident ConstantDeclaratorRest */ - JCVariableDecl variableDeclarator(JCModifiers mods, JCExpression type, boolean reqInit, String dc) { + JCVariableDecl variableDeclarator(JCModifiers mods, JCExpression type, boolean reqInit, Comment dc) { return variableDeclaratorRest(token.pos, mods, type, ident(), reqInit, dc); } @@ -2445,7 +2450,7 @@ * @param dc The documentation comment for the variable declarations, or null. */ JCVariableDecl variableDeclaratorRest(int pos, JCModifiers mods, JCExpression type, Name name, - boolean reqInit, String dc) { + boolean reqInit, Comment dc) { type = bracketsOpt(type); JCExpression init = null; if (token.kind == EQ) { @@ -2539,7 +2544,7 @@ seenImport = true; defs.append(importDeclaration()); } else { - String docComment = token.comment(CommentStyle.JAVADOC); + Comment docComment = token.comment(CommentStyle.JAVADOC); if (firstTypeDecl && !seenImport && !seenPackage) { docComment = firstToken.comment(CommentStyle.JAVADOC); consumedToplevelDoc = true; @@ -2597,7 +2602,7 @@ /** TypeDeclaration = ClassOrInterfaceOrEnumDeclaration * | ";" */ - JCTree typeDeclaration(JCModifiers mods, String docComment) { + JCTree typeDeclaration(JCModifiers mods, Comment docComment) { int pos = token.pos; if (mods == null && token.kind == SEMI) { nextToken(); @@ -2612,7 +2617,7 @@ * @param mods Any modifiers starting the class or interface declaration * @param dc The documentation comment for the class, or null. */ - JCStatement classOrInterfaceOrEnumDeclaration(JCModifiers mods, String dc) { + JCStatement classOrInterfaceOrEnumDeclaration(JCModifiers mods, Comment dc) { if (token.kind == CLASS) { return classDeclaration(mods, dc); } else if (token.kind == INTERFACE) { @@ -2656,7 +2661,7 @@ * @param mods The modifiers starting the class declaration * @param dc The documentation comment for the class, or null. */ - protected JCClassDecl classDeclaration(JCModifiers mods, String dc) { + protected JCClassDecl classDeclaration(JCModifiers mods, Comment dc) { int pos = token.pos; accept(CLASS); Name name = ident(); @@ -2685,7 +2690,7 @@ * @param mods The modifiers starting the interface declaration * @param dc The documentation comment for the interface, or null. */ - protected JCClassDecl interfaceDeclaration(JCModifiers mods, String dc) { + protected JCClassDecl interfaceDeclaration(JCModifiers mods, Comment dc) { int pos = token.pos; accept(INTERFACE); Name name = ident(); @@ -2708,7 +2713,7 @@ * @param mods The modifiers starting the enum declaration * @param dc The documentation comment for the enum, or null. */ - protected JCClassDecl enumDeclaration(JCModifiers mods, String dc) { + protected JCClassDecl enumDeclaration(JCModifiers mods, Comment dc) { int pos = token.pos; accept(ENUM); Name name = ident(); @@ -2767,7 +2772,7 @@ /** EnumeratorDeclaration = AnnotationsOpt [TypeArguments] IDENTIFIER [ Arguments ] [ "{" ClassBody "}" ] */ JCTree enumeratorDeclaration(Name enumName) { - String dc = token.comment(CommentStyle.JAVADOC); + Comment dc = token.comment(CommentStyle.JAVADOC); int flags = Flags.PUBLIC|Flags.STATIC|Flags.FINAL|Flags.ENUM; if (token.deprecatedFlag()) { flags |= Flags.DEPRECATED; @@ -2856,7 +2861,7 @@ nextToken(); return List.nil(); } else { - String dc = token.comment(CommentStyle.JAVADOC); + Comment dc = token.comment(CommentStyle.JAVADOC); int pos = token.pos; JCModifiers mods = modifiersOpt(); if (token.kind == CLASS || @@ -2936,7 +2941,7 @@ Name name, List typarams, boolean isInterface, boolean isVoid, - String dc) { + Comment dc) { List params = formalParameters(); if (!isVoid) type = bracketsOpt(type); List thrown = List.nil(); diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/parser/SimpleDocCommentTable.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/com/sun/tools/javac/parser/SimpleDocCommentTable.java Wed Jun 20 13:23:26 2012 -0700 @@ -0,0 +1,67 @@ +/* + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.sun.tools.javac.parser; + +import java.util.HashMap; +import java.util.Map; + +import com.sun.tools.javac.parser.Tokens.Comment; +import com.sun.tools.javac.tree.DocCommentTable; +import com.sun.tools.javac.tree.JCTree; + + +/** + * + *

This is NOT part of any supported API. + * If you write code that depends on this, you do so at your own risk. + * This code and its internal interfaces are subject to change or + * deletion without notice. + */ +public class SimpleDocCommentTable implements DocCommentTable { + Map table; + + SimpleDocCommentTable() { + table = new HashMap(); + } + + public boolean hasComment(JCTree tree) { + return table.containsKey(tree); + } + + public Comment getComment(JCTree tree) { + return table.get(tree); + } + + public String getCommentText(JCTree tree) { + Comment c = getComment(tree); + return (c == null) ? null : c.getText(); + } + + public void putComment(JCTree tree, Comment c) { + table.put(tree, c); + } + +} diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/parser/Tokens.java --- a/src/share/classes/com/sun/tools/javac/parser/Tokens.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/parser/Tokens.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -371,11 +371,11 @@ * Preserve classic semantics - if multiple javadocs are found on the token * the last one is returned */ - public String comment(Comment.CommentStyle style) { - List readers = getReaders(Comment.CommentStyle.JAVADOC); - return readers.isEmpty() ? + public Comment comment(Comment.CommentStyle style) { + List comments = getComments(Comment.CommentStyle.JAVADOC); + return comments.isEmpty() ? null : - readers.head.getText(); + comments.head; } /** @@ -383,22 +383,22 @@ * javadoc comment attached to this token contains the '@deprecated' string */ public boolean deprecatedFlag() { - for (Comment r : getReaders(Comment.CommentStyle.JAVADOC)) { - if (r.isDeprecated()) { + for (Comment c : getComments(Comment.CommentStyle.JAVADOC)) { + if (c.isDeprecated()) { return true; } } return false; } - private List getReaders(Comment.CommentStyle style) { + private List getComments(Comment.CommentStyle style) { if (comments == null) { return List.nil(); } else { ListBuffer buf = ListBuffer.lb(); - for (Comment r : comments) { - if (r.getStyle() == style) { - buf.add(r); + for (Comment c : comments) { + if (c.getStyle() == style) { + buf.add(c); } } return buf.toList(); diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/tree/DocCommentTable.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/com/sun/tools/javac/tree/DocCommentTable.java Wed Jun 20 13:23:26 2012 -0700 @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.sun.tools.javac.tree; + +import com.sun.tools.javac.parser.Tokens.Comment; + +/** + * A table giving the doc comment, if any, for any tree node. + * + *

This is NOT part of any supported API. + * If you write code that depends on this, you do so at your own + * risk. This code and its internal interfaces are subject to change + * or deletion without notice. + */ +public interface DocCommentTable { + /** + * Check if a tree node has a corresponding doc comment. + */ + public boolean hasComment(JCTree tree); + + /** + * Get the Comment token containing the doc comment, if any, for a tree node. + */ + public Comment getComment(JCTree tree); + + /** + * Get the plain text of the doc comment, if any, for a tree node. + */ + public String getCommentText(JCTree tree); + + /** + * Set the Comment to be associated with a tree node. + */ + public void putComment(JCTree tree, Comment c); +} diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/tree/EndPosTable.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/com/sun/tools/javac/tree/EndPosTable.java Wed Jun 20 13:23:26 2012 -0700 @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +package com.sun.tools.javac.tree; + +/** + * Specifies the methods to access a mappings of syntax trees to end positions. + *

This is NOT part of any supported API. + * If you write code that depends on this, you do so at your own + * risk. This code and its internal interfaces are subject to change + * or deletion without notice.

+ */ +public interface EndPosTable { + + /** + * This method will return the end position of a given tree, otherwise a + * Positions.NOPOS will be returned. + * @param tree JCTree + * @return position of the source tree or Positions.NOPOS for non-existent mapping + */ + public int getEndPos(JCTree tree); + + /** + * Give an old tree and a new tree, the old tree will be replaced with + * the new tree, the position of the new tree will be that of the old + * tree. + * not exist. + * @param oldtree a JCTree to be replaced + * @param newtree a JCTree to be replaced with + * @return position of the old tree or Positions.NOPOS for non-existent mapping + */ + public int replaceTree(JCTree oldtree, JCTree newtree); +} diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/tree/JCTree.java --- a/src/share/classes/com/sun/tools/javac/tree/JCTree.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/tree/JCTree.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,25 +25,23 @@ package com.sun.tools.javac.tree; +import java.io.IOException; +import java.io.StringWriter; import java.util.*; -import java.io.IOException; -import java.io.StringWriter; import javax.lang.model.element.Modifier; import javax.lang.model.type.TypeKind; import javax.tools.JavaFileObject; -import com.sun.tools.javac.util.*; -import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition; -import com.sun.tools.javac.util.List; +import com.sun.source.tree.*; +import com.sun.source.tree.LambdaExpressionTree.BodyKind; +import com.sun.source.tree.MemberReferenceTree.ReferenceMode; import com.sun.tools.javac.code.*; import com.sun.tools.javac.code.Scope.*; import com.sun.tools.javac.code.Symbol.*; -import com.sun.tools.javac.parser.EndPosTable; -import com.sun.source.tree.*; -import com.sun.source.tree.LambdaExpressionTree.BodyKind; -import com.sun.source.tree.MemberReferenceTree.ReferenceMode; - +import com.sun.tools.javac.util.*; +import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition; +import com.sun.tools.javac.util.List; import static com.sun.tools.javac.code.BoundKind.*; import static com.sun.tools.javac.tree.JCTree.Tag.*; @@ -491,7 +489,7 @@ public ImportScope namedImportScope; public StarImportScope starImportScope; public Position.LineMap lineMap = null; - public Map docComments = null; + public DocCommentTable docComments = null; public EndPosTable endPositions = null; protected JCCompilationUnit(List packageAnnotations, JCExpression pid, diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/tree/Pretty.java --- a/src/share/classes/com/sun/tools/javac/tree/Pretty.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/tree/Pretty.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,14 +29,12 @@ import java.util.*; import com.sun.source.tree.MemberReferenceTree.ReferenceMode; - +import com.sun.tools.javac.code.*; +import com.sun.tools.javac.code.Symbol.*; +import com.sun.tools.javac.parser.Tokens.Comment; +import com.sun.tools.javac.tree.JCTree.*; import com.sun.tools.javac.util.*; import com.sun.tools.javac.util.List; -import com.sun.tools.javac.code.*; - -import com.sun.tools.javac.code.Symbol.*; -import com.sun.tools.javac.tree.JCTree.*; - import static com.sun.tools.javac.code.Flags.*; import static com.sun.tools.javac.code.Flags.ANNOTATION; import static com.sun.tools.javac.tree.JCTree.Tag.*; @@ -78,10 +76,10 @@ */ Name enclClassName; - /** A hashtable mapping trees to their documentation comments + /** A table mapping trees to their documentation comments * (can be null) */ - Map docComments = null; + DocCommentTable docComments = null; /** Align code to be indented to left margin. */ @@ -233,7 +231,7 @@ */ public void printDocComment(JCTree tree) throws IOException { if (docComments != null) { - String dc = docComments.get(tree); + String dc = docComments.getCommentText(tree); if (dc != null) { print("/**"); println(); int pos = 0; @@ -480,7 +478,7 @@ public void visitVarDef(JCVariableDecl tree) { try { - if (docComments != null && docComments.get(tree) != null) { + if (docComments != null && docComments.hasComment(tree)) { println(); align(); } printDocComment(tree); diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/tree/TreeInfo.java --- a/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java Wed Jun 20 13:23:26 2012 -0700 @@ -25,15 +25,14 @@ package com.sun.tools.javac.tree; + import com.sun.source.tree.Tree; +import com.sun.tools.javac.code.*; 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.util.*; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition; -import com.sun.tools.javac.code.*; -import com.sun.tools.javac.parser.EndPosTable; -import com.sun.tools.javac.tree.JCTree.*; - import static com.sun.tools.javac.code.Flags.*; import static com.sun.tools.javac.tree.JCTree.Tag.*; import static com.sun.tools.javac.tree.JCTree.Tag.BLOCK; @@ -282,6 +281,13 @@ return (lit.typetag == TypeTags.BOT); } + public static String getCommentText(Env env, JCTree tree) { + DocCommentTable docComments = (tree.hasTag(JCTree.Tag.TOPLEVEL)) + ? ((JCCompilationUnit) tree).docComments + : env.toplevel.docComments; + return docComments.getCommentText(tree); + } + /** The position of the first statement in a block, or the position of * the block itself if it is empty. */ diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/util/DiagnosticSource.java --- a/src/share/classes/com/sun/tools/javac/util/DiagnosticSource.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/util/DiagnosticSource.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,7 +32,7 @@ import javax.tools.JavaFileObject; import com.sun.tools.javac.file.JavacFileManager; -import com.sun.tools.javac.parser.EndPosTable; +import com.sun.tools.javac.tree.EndPosTable; import com.sun.tools.javac.tree.JCTree; import static com.sun.tools.javac.util.LayoutCharacters.*; diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/util/JCDiagnostic.java --- a/src/share/classes/com/sun/tools/javac/util/JCDiagnostic.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/util/JCDiagnostic.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,7 +35,7 @@ import com.sun.tools.javac.api.DiagnosticFormatter; import com.sun.tools.javac.code.Lint.LintCategory; -import com.sun.tools.javac.parser.EndPosTable; +import com.sun.tools.javac.tree.EndPosTable; import com.sun.tools.javac.tree.JCTree; import static com.sun.tools.javac.util.JCDiagnostic.DiagnosticType.*; diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javac/util/Log.java --- a/src/share/classes/com/sun/tools/javac/util/Log.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/util/Log.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,7 @@ import com.sun.tools.javac.api.DiagnosticFormatter; import com.sun.tools.javac.main.Main; import com.sun.tools.javac.main.Option; -import com.sun.tools.javac.parser.EndPosTable; +import com.sun.tools.javac.tree.EndPosTable; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType; diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javadoc/JavadocEnter.java --- a/src/share/classes/com/sun/tools/javadoc/JavadocEnter.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javadoc/JavadocEnter.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,14 +25,17 @@ package com.sun.tools.javadoc; -import com.sun.tools.javac.util.Context; -import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition; -import com.sun.tools.javac.util.List; + +import javax.tools.JavaFileObject; + 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 javax.tools.JavaFileObject; +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; /** * Javadoc's own enter phase does a few things above and beyond that @@ -77,7 +80,7 @@ public void visitTopLevel(JCCompilationUnit tree) { super.visitTopLevel(tree); if (tree.sourcefile.isNameCompatible("package-info", JavaFileObject.Kind.SOURCE)) { - String comment = tree.docComments.get(tree); + String comment = TreeInfo.getCommentText(env, tree); docenv.makePackageDoc(tree.packge, comment, tree); } } @@ -87,7 +90,7 @@ super.visitClassDef(tree); if (tree.sym == null) return; if (tree.sym.kind == Kinds.TYP || tree.sym.kind == Kinds.ERR) { - String comment = env.toplevel.docComments.get(tree); + String comment = TreeInfo.getCommentText(env, tree); ClassSymbol c = tree.sym; docenv.makeClassDoc(c, comment, tree, env.toplevel.lineMap); } diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 src/share/classes/com/sun/tools/javadoc/JavadocMemberEnter.java --- a/src/share/classes/com/sun/tools/javadoc/JavadocMemberEnter.java Tue Jun 19 13:25:58 2012 +0100 +++ b/src/share/classes/com/sun/tools/javadoc/JavadocMemberEnter.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,13 +25,14 @@ package com.sun.tools.javadoc; -import com.sun.tools.javac.util.Context; -import com.sun.tools.javac.util.Position; 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 @@ -61,11 +62,12 @@ docenv = DocEnv.instance(context); } + @Override public void visitMethodDef(JCMethodDecl tree) { super.visitMethodDef(tree); MethodSymbol meth = tree.sym; if (meth == null || meth.kind != Kinds.MTH) return; - String docComment = env.toplevel.docComments.get(tree); + String docComment = TreeInfo.getCommentText(env, tree); Position.LineMap lineMap = env.toplevel.lineMap; if (meth.isConstructor()) docenv.makeConstructorDoc(meth, docComment, tree, lineMap); @@ -75,12 +77,13 @@ docenv.makeMethodDoc(meth, docComment, tree, lineMap); } + @Override public void visitVarDef(JCVariableDecl tree) { super.visitVarDef(tree); if (tree.sym != null && tree.sym.kind == Kinds.VAR && !isParameter(tree.sym)) { - String docComment = env.toplevel.docComments.get(tree); + String docComment = TreeInfo.getCommentText(env, tree); Position.LineMap lineMap = env.toplevel.lineMap; docenv.makeFieldDoc(tree.sym, docComment, tree, lineMap); } diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 test/tools/javac/6304921/TestLog.java --- a/test/tools/javac/6304921/TestLog.java Tue Jun 19 13:25:58 2012 +0100 +++ b/test/tools/javac/6304921/TestLog.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,9 +33,9 @@ import javax.tools.JavaFileObject; import javax.tools.SimpleJavaFileObject; import com.sun.tools.javac.file.JavacFileManager; -import com.sun.tools.javac.parser.EndPosTable; import com.sun.tools.javac.parser.Parser; import com.sun.tools.javac.parser.ParserFactory; +import com.sun.tools.javac.tree.EndPosTable; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.TreeScanner; import com.sun.tools.javac.util.Context; diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 test/tools/javac/failover/CheckAttributedTree.java --- a/test/tools/javac/failover/CheckAttributedTree.java Tue Jun 19 13:25:58 2012 +0100 +++ b/test/tools/javac/failover/CheckAttributedTree.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -68,7 +68,7 @@ import com.sun.tools.javac.api.JavacTool; import com.sun.tools.javac.code.Symbol; import com.sun.tools.javac.code.Type; -import com.sun.tools.javac.parser.EndPosTable; +import com.sun.tools.javac.tree.EndPosTable; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; import com.sun.tools.javac.tree.JCTree.JCImport; diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 test/tools/javac/tree/DocCommentToplevelTest.java --- a/test/tools/javac/tree/DocCommentToplevelTest.java Tue Jun 19 13:25:58 2012 +0100 +++ b/test/tools/javac/tree/DocCommentToplevelTest.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ import com.sun.source.tree.*; import com.sun.source.util.*; +import com.sun.tools.javac.tree.DocCommentTable; import com.sun.tools.javac.tree.JCTree; import java.net.URI; @@ -137,16 +138,16 @@ new TreeScanner() { - Map docComments; + DocCommentTable docComments; @Override public ClassTree visitCompilationUnit(CompilationUnitTree node, Void unused) { docComments = ((JCTree.JCCompilationUnit)node).docComments; boolean expectedComment = tdk == ToplevelDocKind.HAS_DOC && (pk != PackageKind.NO_PKG || ik != ImportKind.ZERO); - boolean foundComment = docComments.get(node) != null; + boolean foundComment = docComments.hasComment((JCTree) node); if (expectedComment != foundComment) { - error("Unexpected comment " + docComments.get(node) + " on toplevel"); + error("Unexpected comment " + docComments.getComment((JCTree) node) + " on toplevel"); } return super.visitCompilationUnit(node, null); } @@ -156,9 +157,9 @@ boolean expectedComment = tdk == ToplevelDocKind.HAS_DOC && pk == PackageKind.NO_PKG && ik == ImportKind.ZERO && node.getSimpleName().toString().equals("First"); - boolean foundComment = docComments.get(node) != null; + boolean foundComment = docComments.hasComment((JCTree) node); if (expectedComment != foundComment) { - error("Unexpected comment " + docComments.get(node) + " on class " + node.getSimpleName()); + error("Unexpected comment " + docComments.getComment((JCTree) node) + " on class " + node.getSimpleName()); } return super.visitClass(node, unused); } diff -r 34e254ffd0e7 -r 5c0b3faeb0b0 test/tools/javac/tree/TreePosTest.java --- a/test/tools/javac/tree/TreePosTest.java Tue Jun 19 13:25:58 2012 +0100 +++ b/test/tools/javac/tree/TreePosTest.java Wed Jun 20 13:23:26 2012 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -73,7 +73,7 @@ import com.sun.source.util.JavacTask; import com.sun.tools.javac.api.JavacTool; import com.sun.tools.javac.code.Flags; -import com.sun.tools.javac.parser.EndPosTable; +import com.sun.tools.javac.tree.EndPosTable; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.tree.JCTree.JCCompilationUnit; import com.sun.tools.javac.tree.JCTree.JCNewClass;