8208531: -javafx mode should be on by default when JavaFX is available
authorpmuthuswamy
Wed, 03 Oct 2018 11:43:39 +0530
changeset 51995 f7babf9d1592
parent 51994 7577686cc9bd
child 51996 84743156e780
8208531: -javafx mode should be on by default when JavaFX is available Reviewed-by: jjg
src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/BaseConfiguration.java
test/langtools/jdk/javadoc/doclet/testJavaFX/TestJavaFxMode.java
--- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/BaseConfiguration.java	Tue Oct 02 22:36:08 2018 -0700
+++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/BaseConfiguration.java	Wed Oct 03 11:43:39 2018 +0530
@@ -399,6 +399,10 @@
         // Utils needs docEnv, safe to init now.
         utils = new Utils(this);
 
+        if (!javafx) {
+            javafx = isJavaFXMode();
+        }
+
         // Once docEnv and Utils have been initialized, others should be safe.
         cmtUtils = new CommentUtils(this);
         workArounds = new WorkArounds(this);
@@ -1347,4 +1351,19 @@
     public synchronized VisibleMemberTable getVisibleMemberTable(TypeElement te) {
         return visibleMemberCache.getVisibleMemberTable(te);
     }
+
+    /**
+     * Determines if JavaFX is available in the compilation environment.
+     * @return true if JavaFX is available
+     */
+    public boolean isJavaFXMode() {
+        TypeElement observable = utils.elementUtils.getTypeElement("javafx.beans.Observable");
+        if (observable != null) {
+            ModuleElement javafxModule = utils.elementUtils.getModuleOf(observable);
+            if (javafxModule == null || javafxModule.isUnnamed() || javafxModule.getQualifiedName().contentEquals("javafx.base")) {
+                return true;
+            }
+        }
+        return false;
+    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/langtools/jdk/javadoc/doclet/testJavaFX/TestJavaFxMode.java	Wed Oct 03 11:43:39 2018 +0530
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2018, 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 8208531
+ * @summary -javafx mode should be on by default when JavaFX is available.
+ * @library /tools/lib ../lib
+ * @modules jdk.javadoc/jdk.javadoc.internal.tool
+ * @build JavadocTester
+ * @run main TestJavaFxMode
+ */
+
+import toolbox.ToolBox;
+
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class TestJavaFxMode extends JavadocTester {
+
+    final ToolBox tb;
+
+    public static void main(String... args) throws Exception {
+        TestJavaFxMode tester = new TestJavaFxMode();
+        if (tester.sanity()) {
+            tester.runTests(m -> new Object[]{Paths.get(m.getName())});
+        }
+    }
+
+    TestJavaFxMode() {
+        tb = new ToolBox();
+    }
+
+    // Check if FX modules are available.
+    boolean sanity() {
+        try {
+            Class.forName("javafx.beans.Observable");
+        } catch (ClassNotFoundException cnfe) {
+            System.out.println("Note: javafx.beans.Observable: not found, test passes vacuously");
+            return false;
+        }
+        return true;
+    }
+
+    @Test
+    void test(Path base) throws Exception {
+        Path src = base.resolve("src");
+        createTestClass(src);
+        Path outDir = base.resolve("out");
+
+        javadoc("-d", outDir.toString(),
+                "-sourcepath", src.toString(),
+                "pkg");
+
+        checkExit(Exit.OK);
+        checkOrder("pkg/A.html",
+                "Property Summary",
+                "javafx.beans.property.Property", "<a href=\"#propProperty\">prop</a>",
+                "Field Summary",
+                "javafx.beans.property.Property", "<a href=\"#prop\">prop</a></span>",
+                "Method Summary",
+                "<a href=\"#getProp()\">getProp</a>", "Gets the value of the property prop.",
+                "<a href=\"#propProperty()\">propProperty</a>", "Sets the value of the property prop.");
+    }
+
+    void createTestClass(Path src) throws Exception {
+        tb.writeJavaFiles(src,
+                "package pkg;\n"
+                + "import javafx.beans.property.Property;\n"
+                + "public class A {\n"
+                + "    public Property prop;\n"
+                + "    public Property propProperty(){return null;}\n"
+                + "    public Property getProp(){return null;}\n"
+                + "    public void setProp(Property prop){}\n"
+                + "}");
+    }
+
+}