8042345: getDocComment fails for doc comments on PackageElement found in package-info.java
authorpgovereau
Thu, 26 Jun 2014 13:48:58 -0400
changeset 25289 9573116c764c
parent 25288 5234a53b53a8
child 25290 72f49068d56c
8042345: getDocComment fails for doc comments on PackageElement found in package-info.java Reviewed-by: jjg
langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java
langtools/test/tools/javac/processing/model/util/elements/doccomments/TestPackageInfoComments.java
langtools/test/tools/javac/processing/model/util/elements/doccomments/p/package-info.java
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java	Wed Jun 25 19:15:53 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java	Thu Jun 26 13:48:58 2014 -0400
@@ -656,6 +656,10 @@
                 if (that.packge == sym) result = that;
                 else super.visitTopLevel(that);
             }
+            public void visitPackageDef(JCPackageDecl that) {
+                if (that.packge == sym) result = that;
+                else super.visitPackageDef(that);
+            }
             public void visitClassDef(JCClassDecl that) {
                 if (that.sym == sym) result = that;
                 else super.visitClassDef(that);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/model/util/elements/doccomments/TestPackageInfoComments.java	Thu Jun 26 13:48:58 2014 -0400
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2014, 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.
+ *
+ * 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.
+ */
+
+/*
+ * @test
+ * @bug 8042345
+ * @summary getDocComment() fails for doc comments on PackageElement found in package-info.java
+ */
+
+import com.sun.source.util.JavacTask;
+
+import java.io.*;
+import java.util.*;
+import javax.annotation.processing.*;
+import javax.lang.model.*;
+import javax.lang.model.element.*;
+import javax.lang.model.util.*;
+import javax.tools.*;
+
+@SupportedAnnotationTypes("*")
+public class TestPackageInfoComments extends AbstractProcessor {
+
+    public static void main(String... args) throws Exception {
+        String[] opts = {
+            "-implicit:none",
+            "-processor", TestPackageInfoComments.class.getName(),
+            "-processorpath", System.getProperty("test.classes")
+        };
+        File[] files = {
+            new File(System.getProperty("test.src"), "p/package-info.java")
+        };
+        run_test(opts, files);
+    }
+
+    static void run_test(String[] opts, File[] files) throws IOException {
+        DiagnosticListener<JavaFileObject> dl = new DiagnosticListener<JavaFileObject>() {
+            public void report(Diagnostic diagnostic) {
+                throw new Error(diagnostic.toString());
+            }
+        };
+        JavaCompiler c = ToolProvider.getSystemJavaCompiler();
+        StandardJavaFileManager fm = c.getStandardFileManager(null, null, null);
+        Iterable<? extends JavaFileObject> units = fm.getJavaFileObjects(files);
+        JavacTask t = (JavacTask) c.getTask(null, fm, dl, Arrays.asList(opts), null, units);
+        t.parse();
+        t.analyze();
+    }
+
+    // -- Annotation processor: Check all PackageDecl's have a doc comment
+
+    Messager messager;
+    Elements elements;
+
+    @Override
+    public SourceVersion getSupportedSourceVersion() {
+        return SourceVersion.latest();
+    }
+
+    @Override
+    public void init(ProcessingEnvironment pEnv) {
+        super.init(pEnv);
+        messager = pEnv.getMessager();
+        elements = pEnv.getElementUtils();
+    }
+
+    @Override
+    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
+        for (Element e: roundEnv.getRootElements())
+            new TestElementScanner().scan(e);
+        return true;
+    }
+
+    class TestElementScanner extends ElementScanner7<Void, Void> {
+        @Override
+        public Void visitPackage(PackageElement e, Void v) {
+            if (elements.getDocComment(e) == null)
+                messager.printMessage(Diagnostic.Kind.ERROR, "doc comment is null", e);
+            return v;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/processing/model/util/elements/doccomments/p/package-info.java	Thu Jun 26 13:48:58 2014 -0400
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2014, 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.
+ *
+ * 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.
+ */
+
+/** A non-empty comment. */
+package foo;