8029143: javadoc standard doclet should add Functional Interface blurb when @FunctionalInterface annotation is present
authorbpatel
Sat, 29 Mar 2014 11:06:33 -0700
changeset 23799 daa645653200
parent 23798 ca0f80391182
child 23800 f7ffcfe938f2
8029143: javadoc standard doclet should add Functional Interface blurb when @FunctionalInterface annotation is present Reviewed-by: ksrini
langtools/src/share/classes/com/sun/javadoc/ClassDoc.java
langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java
langtools/src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java
langtools/src/share/classes/com/sun/tools/javadoc/RootDocImpl.java
langtools/test/com/sun/javadoc/testLambdaFeature/TestLambdaFeature.java
langtools/test/com/sun/javadoc/testLambdaFeature/pkg/A.java
langtools/test/com/sun/javadoc/testLambdaFeature/pkg1/FuncInf.java
langtools/test/com/sun/javadoc/testLambdaFeature/pkg1/NotAFuncInf.java
--- a/langtools/src/share/classes/com/sun/javadoc/ClassDoc.java	Thu Mar 27 18:41:28 2014 -0400
+++ b/langtools/src/share/classes/com/sun/javadoc/ClassDoc.java	Sat Mar 29 11:06:33 2014 -0700
@@ -75,15 +75,6 @@
     boolean isExternalizable();
 
     /**
-     * Return true if this class can be used as a target type of a lambda expression
-     * or method reference.
-     *
-     * @return true if this class can be used as a target type of a lambda expression
-     *         or method reference.
-     */
-    boolean isFunctionalInterface();
-
-    /**
      * Return the serialization methods for this class or
      * interface.
      *
--- a/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java	Thu Mar 27 18:41:28 2014 -0400
+++ b/langtools/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java	Sat Mar 29 11:06:33 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 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
@@ -29,6 +29,7 @@
 
 import com.sun.javadoc.*;
 import com.sun.tools.javac.jvm.Profile;
+import com.sun.tools.javadoc.RootDocImpl;
 import com.sun.tools.doclets.formats.html.markup.*;
 import com.sun.tools.doclets.internal.toolkit.*;
 import com.sun.tools.doclets.internal.toolkit.builders.*;
@@ -528,7 +529,7 @@
      * {@inheritDoc}
      */
     public void addFunctionalInterfaceInfo (Content classInfoTree) {
-        if (classDoc.isFunctionalInterface()) {
+        if (isFunctionalInterface()) {
             Content dt = HtmlTree.DT(getResource("doclet.Functional_Interface"));
             Content dl = HtmlTree.DL(dt);
             Content dd = new HtmlTree(HtmlTag.DD);
@@ -538,6 +539,19 @@
         }
     }
 
+    public boolean isFunctionalInterface() {
+        if (configuration.root instanceof RootDocImpl) {
+            RootDocImpl root = (RootDocImpl) configuration.root;
+            AnnotationDesc[] annotationDescList = classDoc.annotations();
+            for (AnnotationDesc annoDesc : annotationDescList) {
+                if (root.isFunctionalInterface(annoDesc)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
     /**
      * {@inheritDoc}
      */
--- a/langtools/src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java	Thu Mar 27 18:41:28 2014 -0400
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java	Sat Mar 29 11:06:33 2014 -0700
@@ -288,10 +288,6 @@
         return false;
     }
 
-    public boolean isFunctionalInterface() {
-        return env.types.isFunctionalInterface(tsym) && env.source.allowLambda();
-    }
-
     /**
      * Return the package that this class is contained in.
      */
--- a/langtools/src/share/classes/com/sun/tools/javadoc/RootDocImpl.java	Thu Mar 27 18:41:28 2014 -0400
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/RootDocImpl.java	Sat Mar 29 11:06:33 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 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
@@ -381,6 +381,11 @@
         env.initDoclint(opts, customTagNames);
     }
 
+    public boolean isFunctionalInterface(AnnotationDesc annotationDesc) {
+        return annotationDesc.annotationType().qualifiedName().equals(
+                env.syms.functionalInterfaceType.toString()) && env.source.allowLambda();
+    }
+
     public boolean showTagMessages() {
         return env.showTagMessages();
     }
--- a/langtools/test/com/sun/javadoc/testLambdaFeature/TestLambdaFeature.java	Thu Mar 27 18:41:28 2014 -0400
+++ b/langtools/test/com/sun/javadoc/testLambdaFeature/TestLambdaFeature.java	Sat Mar 29 11:06:33 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -23,7 +23,7 @@
 
 /*
  * @test
- * @bug      8004893 8022738
+ * @bug      8004893 8022738 8029143
  * @summary  Make sure that the lambda feature changes work fine in
  *           javadoc.
  * @author   bpatel
@@ -87,6 +87,11 @@
             "<pre>default&nbsp;default&nbsp;void&nbsp;defaultMethod()</pre>"},
         {BUG_ID + FS + "pkg" + FS + "B.html",
             "<td class=\"colFirst\"><code>default void</code></td>"},
+        {BUG_ID + FS + "pkg1" + FS + "NotAFuncInf.html",
+            "<dl>" + NL + "<dt>Functional Interface:</dt>" + NL +
+            "<dd>This is a functional interface and can therefore be used as " +
+            "the assignment target for a lambda expression or method " +
+            "reference.</dd>" + NL + "</dl>"},
         {BUG_ID + FS + "pkg" + FS + "B.html",
             "<dl>" + NL + "<dt>Functional Interface:</dt>"}
     };
--- a/langtools/test/com/sun/javadoc/testLambdaFeature/pkg/A.java	Thu Mar 27 18:41:28 2014 -0400
+++ b/langtools/test/com/sun/javadoc/testLambdaFeature/pkg/A.java	Sat Mar 29 11:06:33 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 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
@@ -23,6 +23,7 @@
 
 package pkg;
 
+@FunctionalInterface
 public interface A {
 
     public void method1();
--- a/langtools/test/com/sun/javadoc/testLambdaFeature/pkg1/FuncInf.java	Thu Mar 27 18:41:28 2014 -0400
+++ b/langtools/test/com/sun/javadoc/testLambdaFeature/pkg1/FuncInf.java	Sat Mar 29 11:06:33 2014 -0700
@@ -23,6 +23,7 @@
 
 package pkg1;
 
+@FunctionalInterface
 public interface FuncInf<V> {
 
     V call() throws Exception;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/com/sun/javadoc/testLambdaFeature/pkg1/NotAFuncInf.java	Sat Mar 29 11:06:33 2014 -0700
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ */
+
+package pkg1;
+
+public interface NotAFuncInf<V> {
+
+    V call() throws Exception;
+}