summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElliot Waite <elliotwaite@google.com>2016-09-16 18:44:49 +0000
committerandroid-build-merger <android-build-merger@google.com>2016-09-16 18:44:49 +0000
commit6abe43ba4c507440528592822d817c2521589236 (patch)
treeb73135afdbce2615cd9b67cc3e222112f46cf7a5
parent9c2a8a94d3a45d8e61148b695545db871a095125 (diff)
parentfc637ca6c49413ca0ed2b137019cec514e56166b (diff)
downloadplatform_external_doclava-6abe43ba4c507440528592822d817c2521589236.tar.gz
platform_external_doclava-6abe43ba4c507440528592822d817c2521589236.tar.bz2
platform_external_doclava-6abe43ba4c507440528592822d817c2521589236.zip
Add new target to generate at_links_navtree.json am: 577bcebdf3 am: 09260382e2
am: fc637ca6c4 Change-Id: I5946dc501528eecb9e2b7075a15a053a4f55081f
-rw-r--r--res/assets/templates/at_links_navtree.cs1
-rw-r--r--src/com/google/doclava/AtLinksNavTree.java181
-rw-r--r--src/com/google/doclava/Doclava.java24
3 files changed, 206 insertions, 0 deletions
diff --git a/res/assets/templates/at_links_navtree.cs b/res/assets/templates/at_links_navtree.cs
new file mode 100644
index 0000000..853d0a6
--- /dev/null
+++ b/res/assets/templates/at_links_navtree.cs
@@ -0,0 +1 @@
+<?cs var:navtree ?> \ No newline at end of file
diff --git a/src/com/google/doclava/AtLinksNavTree.java b/src/com/google/doclava/AtLinksNavTree.java
new file mode 100644
index 0000000..5e278fc
--- /dev/null
+++ b/src/com/google/doclava/AtLinksNavTree.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2016 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.doclava;
+
+import com.google.clearsilver.jsilver.data.Data;
+
+import java.util.ArrayList;
+
+/**
+* Class for writing a JSON dictionary of Android package/class/member info that can be used for
+* dereferencing javadoc style {@link} tags.
+*/
+
+public class AtLinksNavTree {
+
+ /**
+ * Write a JSON dictionary of Android package/class/member info. The hierarchy will follow this
+ * format: package name -> class name -> member name and signature -> parent package.class name
+ * if the member was inherited (or an empty string if the member was not inherited).
+ *
+ * <p>For example:
+ * <pre>{
+ * "android": {
+ * "Manifest": {
+ * "Manifest()": "",
+ * "clone()": "java.lang.Object",
+ * "equals(java.lang.Object)": "java.lang.Object",
+ * ...
+ * },
+ * ...
+ * },
+ * ...
+ * }</pre>
+ *
+ * @param dir The directory path to prepend to the output path if the generated navtree is for
+ * the /support/test or /support/wearable reference docs.
+ */
+ public static void writeAtLinksNavTree(String dir) {
+ StringBuilder buf = new StringBuilder();
+
+ buf.append("{");
+ addPackages(buf, Doclava.choosePackages());
+ buf.append("\n}");
+
+ Data data = Doclava.makeHDF();
+ data.setValue("navtree", buf.toString());
+
+ String output_path;
+ if (Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS && Doclava.testSupportRef) {
+ output_path = dir + Doclava.testSupportPath + "at_links_navtree.json";
+ } else if (Doclava.USE_DEVSITE_LOCALE_OUTPUT_PATHS && Doclava.wearableSupportRef) {
+ output_path = dir + Doclava.wearableSupportPath + "at_links_navtree.json";
+ } else {
+ output_path = "at_links_navtree.json";
+ }
+
+ ClearPage.write(data, "at_links_navtree.cs", output_path);
+ }
+
+ /**
+ * Append the provided string builder with the navtree info for the provided list of packages.
+ *
+ * @param buf The string builder to append to.
+ * @param packages A list of PackageInfo objects. Navtree info for each package will be appended
+ * to the provided string builder.
+ */
+ private static void addPackages(StringBuilder buf, PackageInfo[] packages) {
+ boolean is_first_package = true;
+ for (PackageInfo pkg : Doclava.choosePackages()) {
+ if (!is_first_package) {
+ buf.append(",");
+ }
+ buf.append("\n \"" + pkg.name() + "\": {");
+
+ boolean is_first_class = true;
+ is_first_class = addClasses(buf, pkg.annotations(), is_first_class);
+ is_first_class = addClasses(buf, pkg.interfaces(), is_first_class);
+ is_first_class = addClasses(buf, pkg.ordinaryClasses(), is_first_class);
+ is_first_class = addClasses(buf, pkg.enums(), is_first_class);
+ is_first_class = addClasses(buf, pkg.exceptions(), is_first_class);
+ addClasses(buf, pkg.errors(), is_first_class);
+
+ buf.append("\n }");
+ is_first_package = false;
+ }
+ }
+
+ /**
+ * Append the provided string builder with the navtree info for the provided list of classes.
+ *
+ * @param buf The string builder to append to.
+ * @param classes A list of ClassInfo objects. Navtree info for each class will be appended
+ * to the provided string builder.
+ * @param is_first_class True if this is the first child class listed under the parent package.
+ */
+ private static boolean addClasses(StringBuilder buf, ClassInfo[] classes,
+ boolean is_first_class) {
+ for (ClassInfo cl : classes) {
+ if (cl.checkLevel() && !cl.isHidden()) {
+ if (!is_first_class) {
+ buf.append(",");
+ }
+ buf.append("\n \"" + cl.name() + "\": {");
+
+ boolean is_first_member = true;
+ is_first_member = addFields(buf, cl.fields(), is_first_member, cl);
+ is_first_member = addMethods(buf, cl.constructors(), is_first_member, cl);
+ addMethods(buf, cl.methods(), is_first_member, cl);
+
+ buf.append("\n }");
+ is_first_class = false;
+ }
+ }
+ return is_first_class;
+ }
+
+ /**
+ * Append the provided string builder with the navtree info for the provided list of fields.
+ *
+ * @param buf The string builder to append to.
+ * @param fields A list of FieldInfo objects. Navtree info for each field will be appended
+ * to the provided string builder.
+ * @param is_first_member True if this is the first child member listed under the parent class.
+ * @param cl The ClassInfo object for the parent class of this field.
+ */
+ private static boolean addFields(StringBuilder buf, ArrayList<FieldInfo> fields,
+ boolean is_first_member, ClassInfo cl) {
+ for (FieldInfo field : fields) {
+ if (!is_first_member) {
+ buf.append(",");
+ }
+ buf.append("\n \"" + field.name() + "\": \"");
+ if (!field.containingClass().qualifiedName().equals(cl.qualifiedName())) {
+ buf.append(field.containingClass().qualifiedName());
+ }
+ buf.append("\"");
+ is_first_member = false;
+ }
+ return is_first_member;
+ }
+
+ /**
+ * Append the provided string builder with the navtree info for the provided list of methods.
+ *
+ * @param buf The string builder to append to.
+ * @param methods A list of MethodInfo objects. Navtree info for each method will be appended
+ * to the provided string builder.
+ * @param is_first_member True if this is the first child member listed under the parent class.
+ * @param cl The ClassInfo object for the parent class of this method.
+ */
+ private static boolean addMethods(StringBuilder buf, ArrayList<MethodInfo> methods,
+ boolean is_first_member, ClassInfo cl) {
+ for (MethodInfo method : methods) {
+ if (!is_first_member) {
+ buf.append(",");
+ }
+ buf.append("\n \"" + method.name() + method.signature() + "\": \"");
+ if (!method.containingClass().qualifiedName().equals(cl.qualifiedName())) {
+ buf.append(method.containingClass().qualifiedName());
+ }
+ buf.append("\"");
+ is_first_member = false;
+ }
+ return is_first_member;
+ }
+
+}
diff --git a/src/com/google/doclava/Doclava.java b/src/com/google/doclava/Doclava.java
index 20b68bb..48d8ddb 100644
--- a/src/com/google/doclava/Doclava.java
+++ b/src/com/google/doclava/Doclava.java
@@ -76,6 +76,10 @@ public class Doclava {
public static boolean INCLUDE_PREVIEW = false;
/* output en, es, ja without parent intl/ container */
public static boolean USE_DEVSITE_LOCALE_OUTPUT_PATHS = false;
+ /* generate navtree.js without other docs */
+ public static boolean NAVTREE_ONLY = false;
+ /* Generate reference navtree.js with all inherited members */
+ public static boolean AT_LINKS_NAVTREE = false;
public static String outputPathBase = "/";
public static ArrayList<String> inputPathHtmlDirs = new ArrayList<String>();
public static ArrayList<String> inputPathHtmlDir2 = new ArrayList<String>();
@@ -304,6 +308,10 @@ public class Doclava {
} else if (a[0].equals("-staticonly")) {
staticOnly = true;
mHDFData.add(new String[] {"staticonly", "1"});
+ } else if (a[0].equals("-navtreeonly")) {
+ NAVTREE_ONLY = true;
+ } else if (a[0].equals("-atLinksNavtree")) {
+ AT_LINKS_NAVTREE = true;
} else if (a[0].equals("-devsite")) {
// Don't copy the doclava assets to devsite output (ie use proj assets only)
includeDefaultAssets = false;
@@ -348,6 +356,16 @@ public class Doclava {
return false;
}
+ // if requested, only generate the navtree for ds use-case
+ if (NAVTREE_ONLY) {
+ if (AT_LINKS_NAVTREE) {
+ AtLinksNavTree.writeAtLinksNavTree(javadocDir);
+ } else {
+ NavTree.writeNavTree(javadocDir, "");
+ }
+ return true;
+ }
+
// don't do ref doc tasks in devsite static-only builds
if (!DEVSITE_STATIC_ONLY) {
// Apply @since tags from the XML file
@@ -736,6 +754,12 @@ public class Doclava {
if (option.equals("-staticonly")) {
return 1;
}
+ if (option.equals("-navtreeonly")) {
+ return 1;
+ }
+ if (option.equals("-atLinksNavtree")) {
+ return 1;
+ }
return 0;
}
public static boolean validOptions(String[][] options, DocErrorReporter r) {