8157975: Remove duplicate files in sample API
authorksrini
Thu, 02 Jun 2016 17:31:38 -0700
changeset 38838 3d6ea76b35d6
parent 38837 128b0f2cfaf4
child 38839 886e4b458ef5
8157975: Remove duplicate files in sample API Reviewed-by: jjg, ksrini Contributed-by: alexandre.iline@oracle.com
langtools/test/jdk/javadoc/tool/sampleapi/SampleApiTest.java
langtools/test/jdk/javadoc/tool/sampleapi/lib/sampleapi/SampleApi.java
langtools/test/jdk/javadoc/tool/sampleapi/lib/sampleapi/SampleApiDefaultRunner.java
langtools/test/jdk/javadoc/tool/sampleapi/lib/sampleapi/generator/DocCommentGenerator.java
langtools/test/jdk/javadoc/tool/sampleapi/lib/sampleapi/generator/PackageGenerator.java
langtools/test/jdk/javadoc/tool/sampleapi/res/fx.xml
langtools/test/jdk/javadoc/tool/sampleapi/res/simple.xml
langtools/test/jdk/javadoc/tool/sampleapi/res/sub.xml
langtools/test/jdk/javadoc/tool/sampleapi/res/tiny.xml
langtools/test/jdk/javadoc/tool/sampleapi/res/tinysub.xml
langtools/test/jdk/javadoc/tool/sampleapi/res/xml/fx.xml
langtools/test/jdk/javadoc/tool/sampleapi/res/xml/simple.xml
langtools/test/jdk/javadoc/tool/sampleapi/res/xml/tiny.xml
langtools/test/tools/javadoc/sampleapi/README.txt
langtools/test/tools/javadoc/sampleapi/SampleApiTest.java
langtools/test/tools/javadoc/sampleapi/lib/sampleapi/SampleApi.java
langtools/test/tools/javadoc/sampleapi/lib/sampleapi/SampleApiDefaultRunner.java
langtools/test/tools/javadoc/sampleapi/lib/sampleapi/generator/DocCommentGenerator.java
langtools/test/tools/javadoc/sampleapi/lib/sampleapi/generator/Documentifier.java
langtools/test/tools/javadoc/sampleapi/lib/sampleapi/generator/PackageGenerator.java
langtools/test/tools/javadoc/sampleapi/lib/sampleapi/util/PoorDocCommentTable.java
langtools/test/tools/javadoc/sampleapi/lib/sampleapi/util/SimpleMultiplier.java
langtools/test/tools/javadoc/sampleapi/res/fx.xml
langtools/test/tools/javadoc/sampleapi/res/simple.xml
langtools/test/tools/javadoc/sampleapi/res/sub.xml
langtools/test/tools/javadoc/sampleapi/res/tiny.xml
langtools/test/tools/javadoc/sampleapi/res/xml/fx.xml
langtools/test/tools/javadoc/sampleapi/res/xml/simple.xml
langtools/test/tools/javadoc/sampleapi/res/xml/tiny.xml
--- a/langtools/test/jdk/javadoc/tool/sampleapi/SampleApiTest.java	Thu Jun 02 21:14:40 2016 +0000
+++ b/langtools/test/jdk/javadoc/tool/sampleapi/SampleApiTest.java	Thu Jun 02 17:31:38 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -30,21 +30,30 @@
  *          jdk.compiler/com.sun.tools.javac.parser
  *          jdk.compiler/com.sun.tools.javac.tree
  *          jdk.compiler/com.sun.tools.javac.util
- * @run main sampleapi.SampleApiDefaultRunner -o:out/src
+ *          jdk.javadoc/jdk.javadoc.internal.tool
  * @run main SampleApiTest
  */
+import java.io.File;
 
-import com.sun.tools.javadoc.*;
-import java.nio.file.Paths;
+import jdk.javadoc.internal.tool.Main;
+import sampleapi.SampleApiDefaultRunner;
 
 public class SampleApiTest {
 
-    public static void main(String... args) {
+    public static void main(String... args) throws Exception {
 
-        // html4
-        Main.execute(
+        // generate
+        SampleApiDefaultRunner.execute(
             new String[] {
-                "-d", "out/doc.html4",
+                "-o=out/src",
+                "-r=" + System.getProperty("test.src") + "/res"
+            });
+
+        // html4 / unnamed modules
+        System.err.println(">> HTML4, unnamed modules");
+        int res1 = Main.execute(
+            new String[] {
+                "-d", "out/doc.html4.unnamed",
                 "-verbose",
                 "-private",
                 "-use",
@@ -53,16 +62,20 @@
                 "-html4",
                 "-javafx",
                 "-windowtitle", "SampleAPI",
-                "-sourcepath", "out/src",
+                "-overview", "overview.html",
+                "-sourcepath", "out/src" + File.pathSeparator + "out/src/sat.sampleapi",
                 "sampleapi.simple",
+                "sampleapi.simple.sub",
                 "sampleapi.tiny",
+                "sampleapi.tiny.sub",
                 "sampleapi.fx"
             });
 
-        // html5
-        Main.execute(
+        // html5 / unnamed modules
+        System.err.println(">> HTML5, unnamed modules");
+        int res2 = Main.execute(
             new String[] {
-                "-d", "out/doc.html5",
+                "-d", "out/doc.html5.unnamed",
                 "-verbose",
                 "-private",
                 "-use",
@@ -71,10 +84,17 @@
                 "-html5",
                 "-javafx",
                 "-windowtitle", "SampleAPI",
-                "-sourcepath", "out/src",
+                "-overview", "overview.html",
+                "-sourcepath", "out/src" + File.pathSeparator + "out/src/sat.sampleapi",
                 "sampleapi.simple",
+                "sampleapi.simple.sub",
                 "sampleapi.tiny",
+                "sampleapi.tiny.sub",
                 "sampleapi.fx"
             });
+
+        if (res1 > 0 || res2 > 0)
+            throw new Exception("One of exit statuses is non-zero: "
+                + res1 + " for HTML4, " + res2 + " for HTML5.");
     }
 }
--- a/langtools/test/jdk/javadoc/tool/sampleapi/lib/sampleapi/SampleApi.java	Thu Jun 02 21:14:40 2016 +0000
+++ b/langtools/test/jdk/javadoc/tool/sampleapi/lib/sampleapi/SampleApi.java	Thu Jun 02 17:31:38 2016 -0700
@@ -24,6 +24,7 @@
 package sampleapi;
 
 import java.io.File;
+import java.io.FilenameFilter;
 import java.nio.file.Path;
 
 import sampleapi.generator.PackageGenerator;
@@ -32,21 +33,21 @@
 
     PackageGenerator pkgGen = new PackageGenerator();
 
-    public void generate(File dir) throws Fault {
-        pkgGen.processDataSet("simple");
-        pkgGen.generate(dir);
-        pkgGen.processDataSet("tiny");
-        pkgGen.generate(dir);
-        pkgGen.processDataSet("fx");
-        pkgGen.generate(dir);
+    public void generate(File resDir, File outDir) throws Fault {
+        FilenameFilter filter = (dir, name) -> { return name.endsWith(".xml"); };
+        File[] resFiles = resDir.listFiles(filter);
+        for (File resFile : resFiles) {
+            pkgGen.processDataSet(resFile);
+            pkgGen.generate(outDir);
+        }
     }
 
-    public void generate(Path dir) throws Fault {
-        generate(dir.toFile());
+    public void generate(Path res, Path dir) throws Fault {
+        generate(res.toFile(), dir.toFile());
     }
 
-    public void generate(String dir) throws Fault {
-        generate(new File(dir));
+    public void generate(String res, String dir) throws Fault {
+        generate(new File(res), new File(dir));
     }
 
     public static class Fault extends Exception {
--- a/langtools/test/jdk/javadoc/tool/sampleapi/lib/sampleapi/SampleApiDefaultRunner.java	Thu Jun 02 21:14:40 2016 +0000
+++ b/langtools/test/jdk/javadoc/tool/sampleapi/lib/sampleapi/SampleApiDefaultRunner.java	Thu Jun 02 17:31:38 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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,28 +29,48 @@
 
 public class SampleApiDefaultRunner {
 
+    public static final String MSG_NO_OUTDIR =
+        "SampleApi: no outdir set";
+    public static final String MSG_NO_RESDIR =
+        "SampleApi: no resourcedir set";
     public static final String MSG_DUP_OUTDIR =
         "SampleApi: duplicated outdir detected: ";
+    public static final String MSG_DUP_RESDIR =
+        "SampleApi: duplicated resourcedir detected: ";
     public static final String MSG_USE_FIRST =
         "           will use first occurance: ";
     public static final String MSG_INVAL_OUTDIR =
         "SampleApi: outdir is not valid: ";
+    public static final String MSG_INVAL_RESDIR =
+        "SampleApi: outdir is not valid: ";
     public static final String MSG_CANNOT_GEN =
         "SampleApi: cannot generate output: ";
     public static final String MSG_WRONG_OPTION =
         "SampleApi: incorrect option: ";
     public static final String MSG_USE_HELP =
         "           use -? for help";
+    public static final String[] MSG_HELP = {
+        "SampleApi options:",
+        "    -?|-h|--help                                 - print help",
+        "    -r=<dir>|--resdir=<dir>|--resourcedir=<dir>  - set <dir> to find xml resources",
+        "    -o=<dir>|--outdir=<dir>                      - set <dir> to generate output"
+    };
 
     public static void main(String... args) throws Exception {
+        System.exit(execute(args));
+    }
+
+    public static int execute(String... args) throws Exception {
         if (args.length == 0) {
             printHelp();
-            System.exit(1);
+            return 1;
         }
 
         String outDirName = "";
+        String resDirName = "";
 
         boolean isOutDirSet = false;
+        boolean isResDirSet = false;
         boolean isHelpPrinted = false;
         for (String arg : args) {
             Option option = new Option(arg);
@@ -73,6 +93,17 @@
                         System.err.println(MSG_USE_FIRST + outDirName);
                     }
                     break;
+                case "-r":
+                case "--resdir":
+                case "--resourcedir":
+                    if (!isResDirSet) {
+                        resDirName = option.getOptionValue();
+                        isResDirSet = true;
+                    } else {
+                        System.err.println(MSG_DUP_RESDIR + option.getOptionValue());
+                        System.err.println(MSG_USE_FIRST + resDirName);
+                    }
+                    break;
                 default:
                     System.err.println(MSG_WRONG_OPTION + arg);
                     System.err.println(MSG_USE_HELP);
@@ -82,40 +113,47 @@
         }
 
         if (!isOutDirSet) {
-            System.exit(1);
+            System.err.println(MSG_NO_OUTDIR);
+            return 1;
         }
 
         if (outDirName.length() == 0) {
             System.err.println(MSG_INVAL_OUTDIR + outDirName);
-            System.exit(1);
+            return 1;
         }
 
+        if (!isResDirSet) {
+            System.err.println(MSG_NO_RESDIR);
+            return 1;
+        }
+
+        if (resDirName.length() == 0) {
+            System.err.println(MSG_INVAL_RESDIR + resDirName);
+            return 1;
+        }
+
+        File resDir = new File(resDirName);
         File outDir = new File(outDirName);
         outDir.mkdirs();
         SampleApi apiGen = new SampleApi();
 
-        try {
-            apiGen.generate(outDir);
-        } catch (Fault e) {
-            System.err.println(MSG_CANNOT_GEN + e.getMessage());
-            e.printStackTrace();
-        }
+        apiGen.generate(resDir, outDir);
+
+        return 0;
     }
 
     private static void printHelp() {
-        System.out.println("SampleApi:");
-        System.out.println("    options: [-?|-h|--help] [-o:<dir>|--outdir:<dir>]");
-        System.out.println("    -?|-h|--help             - print help");
-        System.out.println("    -o:<dir>|--outdir:<dir>  - set <dir> to generate output");
+        for (String line : MSG_HELP)
+            System.out.println(line);
     }
 
     private static class Option {
 
-        private String optionName;
-        private String optionValue;
+        private final String optionName;
+        private final String optionValue;
 
         public Option(String arg) {
-            int delimPos = arg.indexOf(':');
+            int delimPos = arg.indexOf('=');
 
             if (delimPos == -1) {
                 optionName = arg;
--- a/langtools/test/jdk/javadoc/tool/sampleapi/lib/sampleapi/generator/DocCommentGenerator.java	Thu Jun 02 21:14:40 2016 +0000
+++ b/langtools/test/jdk/javadoc/tool/sampleapi/lib/sampleapi/generator/DocCommentGenerator.java	Thu Jun 02 17:31:38 2016 -0700
@@ -199,11 +199,11 @@
     public String getPackageComment() {
         return InlineTag.INDEX.value("PackageCommentLabel") + " "
                + Text.LOREMIPSUM
-               + "\n <p>" + Text.LIEUROPANLINGUES
+               + "\n<p>" + Text.LIEUROPANLINGUES
                + "\n" + Text.CODE
                + "\n" + LinkTag.nextLink()
                + "\n" + LinkTag.nextSee()
-               + "\n" + Tag.SINCE;
+               + "\n" + Tag.SINCE + "\n";
     }
 
     String[] serialVals = new String[] { "include", "exclude" };
--- a/langtools/test/jdk/javadoc/tool/sampleapi/lib/sampleapi/generator/PackageGenerator.java	Thu Jun 02 21:14:40 2016 +0000
+++ b/langtools/test/jdk/javadoc/tool/sampleapi/lib/sampleapi/generator/PackageGenerator.java	Thu Jun 02 17:31:38 2016 -0700
@@ -29,14 +29,14 @@
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Hashtable;
+import java.util.HashMap;
+import java.util.Map;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.ParserConfigurationException;
 import org.xml.sax.SAXException;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
-import org.w3c.dom.Text;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
@@ -54,7 +54,6 @@
 import com.sun.tools.javac.code.Flags;
 import com.sun.tools.javac.code.Type;
 import com.sun.tools.javac.code.TypeTag;
-import com.sun.tools.javac.code.TypeMetadata;
 import com.sun.tools.javac.code.Symbol;
 import com.sun.tools.javac.code.Symtab;
 
@@ -67,16 +66,16 @@
     String packageDirName;
 
     ArrayList<JCCompilationUnit> topLevels;
-    Hashtable<String, Integer> nameIndex;
-    Hashtable<String, JCClassDecl> idBases;
-    Hashtable<String, JCAnnotation> idAnnos;
+    Map<String, Integer> nameIndex;
+    Map<String, JCClassDecl> idBases;
+    Map<String, JCAnnotation> idAnnos;
 
     TreeMaker make;
     Names names;
     Symtab syms;
     DocumentBuilderFactory factory;
     Documentifier documentifier;
-    boolean fx = false;
+    boolean fx;
 
     public PackageGenerator() {
         JavacTool jt = JavacTool.create();
@@ -91,27 +90,27 @@
         documentifier = Documentifier.instance(ctx);
     }
 
-    String dataSetName;
+    boolean isDataSetProcessed = false;
 
-    public void processDataSet(String dsName) throws Fault {
-        dataSetName = dsName;
+    public void processDataSet(File dsFile) throws Fault {
+        isDataSetProcessed = true;
         topLevels = new ArrayList<>();
-        nameIndex = new Hashtable<>();
-        idBases =  new Hashtable<>();
-        idAnnos =  new Hashtable<>();
-
-        String dsPath = "res/xml/" + dsName + ".xml";
+        nameIndex = new HashMap<>();
+        idBases =  new HashMap<>();
+        idAnnos =  new HashMap<>();
+        fx = false;
 
         try {
-            InputStream is = getClass().getResourceAsStream("/" + dsPath);
-            if (is == null)
-                is = new FileInputStream(dsPath);
+            InputStream is = new FileInputStream(dsFile);
 
             DocumentBuilder builder = factory.newDocumentBuilder();
             Document document = builder.parse(is);
 
             Element rootElement = document.getDocumentElement();
-            packageName = rootElement.getAttribute("package");
+            if (!rootElement.getTagName().equals("package"))
+                throw new IllegalStateException("Unexpected tag name: "
+                        + rootElement.getTagName());
+            packageName = rootElement.getAttribute("name");
             fx = "fx".equals(rootElement.getAttribute("style"));
             packageDirName = packageName.replace('.', '/');
 
@@ -122,17 +121,15 @@
 
                 if (!(node instanceof Element))
                     continue;
-                processTopLevel((Element)node);
+                processTopLevel((Element) node);
             }
         } catch (ParserConfigurationException | SAXException | IOException e) {
-            throw new Fault("Error parsing dataset " + dsName, e);
+            throw new Fault("Error parsing dataset " + dsFile, e);
         }
-
-        fx = false;
     }
 
     public void generate(File outDir) throws Fault {
-        if (dataSetName == null)
+        if (!isDataSetProcessed)
             throw new Fault("No Data Set processed");
 
         try {
@@ -140,9 +137,9 @@
             pkgDir.mkdirs();
 
             for (JCCompilationUnit decl : topLevels) {
-                JCClassDecl classDecl = (JCClassDecl)decl.getTypeDecls().get(0);
-                File outFile = new File(pkgDir,
-                                        classDecl.getSimpleName().toString() + ".java");
+                JCClassDecl classDecl = (JCClassDecl) decl.getTypeDecls().get(0);
+                File outFile
+                        = new File(pkgDir, classDecl.getSimpleName().toString() + ".java");
                 FileWriter writer = new FileWriter(outFile);
                 writer.write(decl.toString());
                 writer.flush();
@@ -155,7 +152,19 @@
             writer.write("/**\n");
             writer.write(documentifier.getDocGenerator().getPackageComment());
             writer.write("*/\n");
-            writer.write("package " + packageName + ";");
+            writer.write("package " + packageName + ";\n");
+            writer.flush();
+            writer.close();
+
+            // overview
+            outFile = new File(pkgDir, "overview.html");
+            writer = new FileWriter(outFile);
+            writer.write("<html>\n");
+            writer.write("<head>\n<title>" + packageName + "</title>\n</head>\n");
+            writer.write("<body>\n");
+            writer.write("<p>Package " + packageName + " overview.\n");
+            writer.write("</body>\n");
+            writer.write("</html>\n");
             writer.flush();
             writer.close();
         } catch (IOException e) {
@@ -197,7 +206,7 @@
         }
     }
 
-    ListBuffer<JCTree>[] processBases(Element baseTag, Hashtable<String, Integer> scope) {
+    ListBuffer<JCTree>[] processBases(Element baseTag, HashMap<String, Integer> scope) {
         String kind = baseTag.getTagName();
         String baseName = baseTag.getAttribute("basename");
         String typeParam = baseTag.getAttribute("tparam");
@@ -232,21 +241,21 @@
 
             if (!(node instanceof Element))
                 continue;
-
-            switch (((Element)node).getTagName()) {
+            Element element = (Element)node;
+            switch (element.getTagName()) {
                 case "modifier":
-                    multiply.addAxis(((Element)node).getTextContent());
+                    multiply.addAxis(element.getTextContent());
                     break;
                 case "anno":
-                    multiply.addAxis(((Element)node).getTextContent());
+                    multiply.addAxis(element.getTextContent());
                     break;
                 case "member":
                     // process members here
-                    members.appendList(processMembers((Element)node, baseName, kind));
+                    members.appendList(processMembers(element, baseName, kind));
                     break;
                 case "extend":
-                    String classId = ((Element)node).getAttribute("id");   // this pkg
-                    String classRef = ((Element)node).getAttribute("ref"); // external
+                    String classId = element.getAttribute("id");   // this pkg
+                    String classRef = element.getAttribute("ref"); // external
                     if (classId.length() !=0 &&
                         idBases.containsKey(classId)) {
                         // if have base, take methods from base members
@@ -260,8 +269,8 @@
                     }
                     break;
                 case "implement":
-                    String interfaceId = ((Element)node).getAttribute("id");
-                    String interfaceRef = ((Element)node).getAttribute("ref");
+                    String interfaceId = element.getAttribute("id");
+                    String interfaceRef = element.getAttribute("ref");
                     if (interfaceId.length() != 0 &&
                         idBases.containsKey(interfaceId)) {
                         JCClassDecl baseDecl = idBases.get(interfaceId);
@@ -277,7 +286,7 @@
                 case "import":
                     imports.append(
                         make.Import(
-                            make.Ident(names.fromString(((Element)node).getTextContent())),
+                            make.Ident(names.fromString(element.getTextContent())),
                             false));
             }
         }
@@ -342,7 +351,7 @@
     ListBuffer<JCTree> processMembers(Element memberTag, String name, String kind) {
         ListBuffer<JCTree> members = new ListBuffer<>();
         NodeList nodes = memberTag.getChildNodes();
-        Hashtable<String, Integer> scope = new Hashtable<>();
+        HashMap<String, Integer> scope = new HashMap<>();
         for (int i = 0; i < nodes.getLength(); i++) {
             Node node = nodes.item(i);
 
@@ -378,7 +387,7 @@
         return members;
     }
 
-    ListBuffer<JCTree> processFields(Element fieldsNode, Hashtable<String, Integer> scope) {
+    ListBuffer<JCTree> processFields(Element fieldsNode, HashMap<String, Integer> scope) {
         String kind = fieldsNode.getTagName();
         String baseName = fieldsNode.getAttribute("basename");
 
@@ -431,7 +440,7 @@
                                              TypeTag.BOT,
                                              "String".equals(type)
                                                  ? new String("blah-blah-blah")
-                                                 : new Integer(0));
+                                                 : Integer.valueOf(0));
 
                 JCVariableDecl fieldDecl = make.VarDef(
                                                make.Modifiers(declFlags, annos.toList()),
@@ -451,7 +460,7 @@
         String[] fieldTypes = sfNode.getTextContent().split(",");
 
         ListBuffer<JCExpression> serialFields = new ListBuffer<>();
-        Hashtable<String, Integer> scope = new Hashtable<>();
+        HashMap<String, Integer> scope = new HashMap<>();
 
         for (String fType : fieldTypes) {
             String fieldName = baseName + getUniqIndex(scope, baseName);
@@ -482,7 +491,7 @@
         return sfDecl;
     }
 
-    ListBuffer<JCTree> processConstants(Element constNode, Hashtable<String, Integer> scope) {
+    ListBuffer<JCTree> processConstants(Element constNode, HashMap<String, Integer> scope) {
         String baseName = constNode.getAttribute("basename");
         int count = 1;
         try {
@@ -507,7 +516,7 @@
         return fields;
     }
 
-    ListBuffer<JCTree> processMethods(Element methodsNode, Hashtable<String, Integer> scope, boolean needBody, boolean isConstructor) {
+    ListBuffer<JCTree> processMethods(Element methodsNode, HashMap<String, Integer> scope, boolean needBody, boolean isConstructor) {
         String kind = methodsNode.getTagName();
         String baseName = methodsNode.getAttribute("basename");
         String name = methodsNode.getAttribute("name");
@@ -590,7 +599,7 @@
                                                      retType.isPrimitive() ?
                                                          retType.getTag() :
                                                          TypeTag.BOT,
-                                                     new Integer(0))));
+                                                     Integer.valueOf(0))));
                     }
                     body = make.Block(0, bodyStatements);
                 }
@@ -681,7 +690,7 @@
                                                      retType.isPrimitive() ?
                                                          retType.getTag() :
                                                          TypeTag.BOT,
-                                                     new Integer(0))));
+                                                     Integer.valueOf(0))));
 
                     JCBlock body = make.Block(0, bodyStatements);
 
@@ -763,16 +772,16 @@
 
     String getUniqName(String name) {
         if (!nameIndex.containsKey(name))
-            nameIndex.put(name, new Integer(0));
+            nameIndex.put(name, 0);
         Integer index = nameIndex.get(name);
         String uniqName = name + index;
         nameIndex.put(name, index + 1);
         return uniqName;
     }
 
-    int getUniqIndex(Hashtable<String, Integer> scope, String name) {
+    int getUniqIndex(HashMap<String, Integer> scope, String name) {
         if (!scope.containsKey(name))
-            scope.put(name, new Integer(0));
+            scope.put(name, 0);
         Integer index = scope.get(name);
         scope.put(name, index + 1);
         return index;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/tool/sampleapi/res/fx.xml	Thu Jun 02 17:31:38 2016 -0700
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2015, 2016, 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 name="sampleapi.fx" style="fx">
+
+    <class basename="FXClass">
+        <modifier>public</modifier>
+        <member>
+            <field basename="id">
+                <modifier>public</modifier>
+                <type>int|boolean</type>
+            </field>
+            <method basename="setProp">
+                <modifier>public|protected|private</modifier>
+                <param>int|String</param>
+                <type>void</type>
+            </method>
+            <method basename="getProp">
+                <modifier>public|protected|private</modifier>
+                <type>int|int|String</type>
+            </method>
+        </member>
+    </class>
+
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/tool/sampleapi/res/simple.xml	Thu Jun 02 17:31:38 2016 -0700
@@ -0,0 +1,529 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2015, 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 name="sampleapi.simple">
+
+    <class basename="SampleClass" id="baseclass">
+        <modifier>public</modifier>
+        <modifier>none|abstract</modifier>
+        <member>
+            <field basename="field">
+                <modifier>none|public</modifier>
+                <modifier>none|static</modifier>
+                <modifier>none|final</modifier>
+                <type>boolean|int|String</type>
+            </field>
+            <field basename="field">
+                <modifier>protected|private</modifier>
+                <type>String</type>
+            </field>
+            <constructor>
+                <modifier>public</modifier>
+                <param>none|int|int,boolean|int,String</param>
+            </constructor>
+            <constructor>
+                <modifier>public</modifier>
+                <param>String</param>
+                <throw>NullPointerException</throw>
+                <throw>SampleException0</throw>
+            </constructor>
+            <method basename="set">
+                <modifier>public</modifier>
+                <type>void</type>
+                <param>int</param>
+            </method>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>int|boolean|String</type>
+            </method>
+            <method basename="doSomething">
+                <modifier>public</modifier>
+                <type>void|int</type>
+                <param>none|int|Object,int</param>
+                <throw>NullPointerException</throw>
+                <throw>ArithmeticException</throw>
+            </method>
+        </member>
+    </class>
+
+    <class basename="Derived">
+        <modifier>public</modifier>
+        <extend id="baseclass"/>
+        <member>
+            <field basename="myField">
+                <modifier>public</modifier>
+                <type>int|boolean</type>
+            </field>
+            <constructor>
+                <modifier>public</modifier>
+                <param>none|int|int,boolean|int,String</param>
+            </constructor>
+            <method basename="myGet">
+                <modifier>public</modifier>
+                <type>int|boolean</type>
+            </method>
+        </member>
+    </class>
+
+    <class basename="SampleSerial">
+        <import>java.io.Serializable</import>
+        <modifier>public</modifier>
+        <implement ref="Serializable"/>
+        <member>
+            <field basename="specialData">
+                <modifier>private|none|public</modifier>
+                <type>boolean|int|String</type>
+            </field>
+        </member>
+    </class>
+
+    <class basename="SampleSerial">
+        <import>java.io.Serializable</import>
+        <import>java.io.ObjectStreamField</import>
+        <modifier>public</modifier>
+        <implement ref="Serializable"/>
+        <member>
+            <serialfield basename="serialField">String,Long,Boolean</serialfield>
+            <method basename="justToBeHere">
+                <modifier>public</modifier>
+                <type>String|long|boolean</type>
+            </method>
+        </member>
+    </class>
+
+    <class basename="SampleSerial">
+        <import>java.io.Serializable</import>
+        <import>java.io.ObjectOutputStream</import>
+        <import>java.io.ObjectOutput</import>
+        <import>java.io.IOException</import>
+        <import>java.io.ObjectStreamException</import>
+        <modifier>public</modifier>
+        <implement ref="Serializable"/>
+        <member>
+            <method name="writeObject">
+                <modifier>private</modifier>
+                <param>ObjectOutputStream</param>
+                <type>void</type>
+                <throw>IOException</throw>
+            </method>
+            <method name="writeExternal">
+                <modifier>public</modifier>
+                <param>ObjectOutput</param>
+                <type>void</type>
+                <throw>IOException</throw>
+            </method>
+            <method name="writeReplace">
+                <modifier>protected</modifier>
+                <param>none</param>
+                <type>Object</type>
+                <throw>ObjectStreamException</throw>
+            </method>
+            <method name="writeSomethingElse">
+                <modifier>public</modifier>
+                <param>Object</param>
+                <type>void</type>
+                <throw>IOException</throw>
+            </method>
+        </member>
+    </class>
+
+    <class basename="SampleSerial">
+        <import>java.io.Serializable</import>
+        <import>java.io.ObjectInputStream</import>
+        <import>java.io.ObjectInput</import>
+        <import>java.io.IOException</import>
+        <import>java.io.ObjectStreamException</import>
+        <modifier>public</modifier>
+        <implement ref="Serializable"/>
+        <member>
+            <method name="readObject">
+                <modifier>private</modifier>
+                <param>ObjectInputStream</param>
+                <type>void</type>
+                <throw>IOException</throw>
+                <throw>ClassNotFoundException</throw>
+            </method>
+            <method name="readExternal">
+                <modifier>public</modifier>
+                <param>ObjectInput</param>
+                <type>void</type>
+                <throw>IOException</throw>
+            </method>
+            <method name="readResolve">
+                <modifier>protected</modifier>
+                <param>none</param>
+                <type>Object</type>
+                <throw>ObjectStreamException</throw>
+            </method>
+            <method name="readSomethingElse">
+                <modifier>public</modifier>
+                <param>Object</param>
+                <type>void</type>
+                <throw>IOException</throw>
+            </method>
+        </member>
+    </class>
+
+    <class basename="Container">
+        <modifier>public</modifier>
+        <member>
+            <class basename="Inner">
+                <modifier>public</modifier>
+                <member>
+                    <field basename="value">
+                        <modifier>public</modifier>
+                        <type>int</type>
+                    </field>
+                </member>
+            </class>
+            <class basename="Nested">
+                <modifier>public</modifier>
+                <modifier>static</modifier>
+            </class>
+            <interface basename="EventListener">
+                <modifier>public</modifier>
+                <modifier>static</modifier>
+                <member>
+                    <method basename="onEvent">
+                         <modifier>public</modifier>
+                         <type>void</type>
+                    </method>
+                </member>
+            </interface>
+        </member> 
+    </class>
+
+    <!-- Errors and exceptions -->
+    <class basename="SampleError">
+        <modifier>public</modifier>
+        <extend ref="java.lang.Error"/>
+        <member>
+            <field basename="errorInfo">
+                <modifier>private</modifier>
+                <type>boolean|int|String</type>
+            </field>
+            <constructor>
+                <modifier>public</modifier>
+                <param>String</param>
+            </constructor>
+            <method basename="getSampleData">
+                <modifier>public</modifier>
+                <type>int|String</type>
+            </method>
+        </member>
+    </class>
+
+    <class basename="SampleException">
+        <modifier>public</modifier>
+        <extend ref="java.lang.Exception"/>
+        <member>
+            <field basename="exceptionInfo">
+                <modifier>private</modifier>
+                <type>boolean|int|String</type>
+            </field>
+            <constructor>
+                <modifier>public</modifier>
+                <param>String</param>
+            </constructor>
+            <method basename="getSampleData">
+                <modifier>public</modifier>
+                <type>int|String</type>
+            </method>
+        </member>
+    </class>
+
+    <interface basename="SampleInterface" id="baseinterface">
+        <modifier>public|none</modifier>
+        <member>
+            <method basename="method">
+                <modifier>public</modifier>
+                <type>void|int|Object</type>
+            </method>
+        </member>
+    </interface>
+
+    <class basename="Implementor">
+        <modifier>public</modifier>
+        <implement id="baseinterface"/>
+        <member>
+            <field basename="myField">
+                <modifier>public</modifier>
+                <type>int|boolean</type>
+            </field>
+            <method basename="myGet">
+                <modifier>public</modifier>
+                <type>int|boolean</type>
+            </method>
+        </member>
+    </class>
+
+    <class basename="GenericClass" tparam="T">
+        <import>java.util.List</import>
+        <modifier>public</modifier>
+        <member>
+            <method basename="put">
+                <modifier>public</modifier>
+                <type>void</type>
+                <param>T</param>
+            </method>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>T</type>
+                <param>int</param>
+            </method>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>List&lt;T&gt;</type>
+            </method>
+        </member>
+    </class>
+
+    <class basename="GenericClass" tparam="K,V">
+        <import>java.util.Set</import>
+        <import>java.util.List</import>
+        <import>java.util.Map</import>
+        <modifier>public</modifier>
+        <member>
+            <method basename="put">
+                <modifier>public</modifier>
+                <type>void</type>
+                <param>K,V</param>
+            </method>
+            <method basename="putMap">
+                <modifier>public</modifier>
+                <type>void</type>
+                <param>Map&lt;K,V&gt;</param>
+            </method>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>V</type>
+                <param>K</param>
+            </method>
+            <method basename="getV">
+                <modifier>public</modifier>
+                <type>Set&lt;V&gt;|List&lt;V&gt;</type>
+            </method>
+            <method basename="getK">
+                <modifier>public</modifier>
+                <type>Set&lt;K&gt;|List&lt;K&gt;</type>
+            </method>
+        </member>
+    </class>
+
+    <class basename="GenericClass" tparam="M,N,O">
+        <import>java.util.Set</import>
+        <import>java.util.List</import>
+        <import>java.util.Map</import>
+        <modifier>public</modifier>
+        <member>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>Set&lt;M&gt;|List&lt;M&gt;</type>
+                <param>Map&lt;N,O&gt;</param>
+            </method>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>Set&lt;N&gt;|List&lt;N&gt;</type>
+                <param>Map&lt;M,O&gt;</param>
+            </method>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>Set&lt;O&gt;|List&lt;O&gt;</type>
+                <param>Map&lt;M,N&gt;</param>
+            </method>
+        </member>
+    </class>
+
+    <class basename="GenericUtil"> <!-- public static generic methods like Collections -->
+        <import>java.util.Set</import>
+        <import>java.util.List</import>
+        <import>java.util.Map</import>
+        <import>java.util.function.Supplier</import>
+        <modifier>public</modifier>
+        <member>
+            <method tparam="E" basename="getSomething">
+                <modifier>public</modifier>
+                <modifier>static</modifier>
+                <type>Set&lt;? extends E&gt;|List&lt;? extends E&gt;</type>
+            </method>
+            <method tparam="V,K" basename="getMore">
+                <modifier>public|private</modifier>
+                <modifier>static</modifier>
+                <type>Map&lt;V,K&gt;</type>
+            </method>
+            <method tparam="E" basename="doSomething">
+                <modifier>public</modifier>
+                <modifier>static</modifier>
+                <type>void</type>
+                <param>E</param>
+            </method>
+            <method tparam="X extends Throwable" basename="orElseThrow">
+                <modifier>public|private</modifier>
+                <modifier>static</modifier>
+                <type>X</type>
+                <param>Supplier&lt;? extends X&gt;</param>
+                <throw>X</throw>
+            </method>
+        </member>
+    </class>
+
+    <enum basename="SampleEnum">
+        <modifier>public</modifier>
+        <member>
+            <constant basename="VALUE" count="3"/>
+        </member>
+    </enum>
+        
+    <enum basename="SampleEnum">
+        <modifier>public</modifier>
+        <member>
+            <constant basename="VALUE" count="2"/>
+            <constant basename="NOVALUE" count="1"/>
+            <field basename="field">
+                <modifier>private</modifier>
+                <type>int|String</type>
+            </field>
+            <method basename="method">
+                <modifier>public</modifier>
+                <type>void|String</type>
+            </method>
+        </member>
+    </enum>
+
+    <annodecl id="documented">
+        <class>Documented</class>
+    </annodecl>
+
+    <annodecl id="reten-source">
+        <class>Retention</class>
+        <arg name="value" value="RetentionPolicy.SOURCE"/>
+    </annodecl>
+
+    <annodecl id="reten-class">
+        <class>Retention</class>
+        <arg name="value" value="RetentionPolicy.CLASS"/>
+    </annodecl>
+
+    <annodecl id="reten-runtime">
+        <class>Retention</class>
+        <arg name="value" value="RetentionPolicy.RUNTIME"/>
+    </annodecl>
+
+    <annodecl id="target-method">
+        <class>Target</class>
+        <arg value="ElementType.METHOD"/>
+    </annodecl>
+
+    <annodecl id="target-field">
+        <class>Target</class>
+        <arg value="ElementType.FIELD"/>
+    </annodecl>
+
+    <annodecl id="target-type">
+        <class>Target</class>
+        <arg value="{ElementType.TYPE, ElementType.TYPE_USE}"/>
+    </annodecl>
+
+    <annotation basename="AnnotatedAnno">
+        <import>java.lang.annotation.Documented</import>
+        <anno>@documented</anno>
+        <modifier>public</modifier>
+        <member>
+            <method basename="value">
+                <modifier>public</modifier>
+                <type>boolean|String</type>
+            </method>
+        </member>
+    </annotation>
+
+    <annotation basename="AnnotatedAnno">
+        <import>java.lang.annotation.Retention</import>
+        <import>java.lang.annotation.RetentionPolicy</import>
+        <anno>@reten-source|@reten-class|@reten-runtime</anno>
+        <modifier>public</modifier>
+        <member>
+            <method basename="value">
+                <modifier>public</modifier>
+                <type>int</type>
+            </method>
+        </member>
+    </annotation>
+
+    <class basename="AnnoContainer">
+        <import>java.lang.annotation.Retention</import>
+        <import>java.lang.annotation.RetentionPolicy</import>
+        <import>java.lang.annotation.Target</import>
+        <import>java.lang.annotation.ElementType</import>
+        <modifier>public</modifier>
+        <member>
+            <annotation basename="AnnotatedAnno">
+                <anno>@reten-source|@reten-class|@reten-runtime</anno>
+                <anno>@target-method|@target-field|@target-type</anno>
+                <modifier>public</modifier>
+                <modifier>static</modifier>
+                <member>
+                    <method basename="value">
+                        <modifier>public</modifier>
+                        <type>String</type>
+                    </method>
+                </member>
+            </annotation>
+        </member>
+    </class>
+
+    <annodecl id="deprecated">
+        <class>Deprecated</class>
+    </annodecl>
+
+    <annodecl id="safevarargs">
+        <class>SafeVarargs</class>
+    </annodecl>
+
+    <annodecl id="suppresswarnings">
+        <class>SuppressWarnings</class>
+        <arg value="{&quot;unchecked&quot;, &quot;rawtypes&quot;}"/>
+    </annodecl>
+
+    <class basename="AnnotatedClass">
+        <modifier>public</modifier>
+        <member>
+            <method basename="deprecatedMethod">
+                <anno>@deprecated</anno>
+                <modifier>public</modifier>
+                <type>void</type>
+            </method>
+            <method basename="safeVarargsMethod">
+                <anno>@safevarargs</anno>
+                <modifier>public</modifier>
+                <type>void|int</type>
+                <param>String...</param>
+            </method>
+            <method basename="suppressWarningsMethod">
+                <anno>@suppresswarnings</anno>
+                <modifier>public</modifier>
+                <type>void</type>
+                <param>int|Object</param>
+            </method>
+        </member>
+    </class>
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/tool/sampleapi/res/sub.xml	Thu Jun 02 17:31:38 2016 -0700
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2016, 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 name="sampleapi.simple.sub">
+
+    <class basename="SClass">
+        <modifier>public</modifier>
+        <modifier>none|abstract</modifier>
+        <implement>SInterface0</implement>
+        <member>
+            <field basename="id">
+                <modifier>public</modifier>
+                <type>int</type>
+            </field>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>int</type>
+                <throw>SException0</throw>
+            </method>
+            <method basename="put">
+                <modifier>public</modifier>
+                <param>int</param>
+                <type>void</type>
+                <throw>SException0</throw>
+            </method>
+        </member>
+    </class>
+
+    <class basename="SException">
+        <modifier>public</modifier>
+        <extend ref="java.lang.Exception"/>
+        <member>
+            <constructor>
+                <modifier>public</modifier>
+                <param>String</param>
+            </constructor>
+        </member>
+    </class>
+
+    <interface basename="SInterface">
+        <modifier>public</modifier>
+        <member>
+            <method basename="put">
+                <modifier>public</modifier>
+                <type>void</type>
+                <param>int</param>
+            </method>
+        </member>
+    </interface>
+
+    <enum basename="SEnum">
+        <modifier>public</modifier>
+        <member>
+            <constant basename="ON" count="1"/>
+            <constant basename="OFF" count="1"/>
+        </member>
+    </enum>
+
+    <annotation basename="SAnno">
+        <modifier>public</modifier>
+        <member>
+            <method basename="value">
+                <modifier>public</modifier>
+                <type>boolean</type>
+            </method>
+        </member>
+    </annotation>
+        
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/tool/sampleapi/res/tiny.xml	Thu Jun 02 17:31:38 2016 -0700
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2015, 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 name="sampleapi.tiny" module="sat.sampleapi">
+
+    <class basename="TinyClass">
+        <modifier>public</modifier>
+        <modifier>none|abstract</modifier>
+        <member>
+            <field basename="id">
+                <modifier>public</modifier>
+                <type>int</type>
+            </field>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>int</type>
+            </method>
+        </member>
+    </class>
+
+    <interface basename="TinyInterface">
+        <modifier>public</modifier>
+        <member>
+            <method basename="put">
+                <modifier>public</modifier>
+                <type>void</type>
+                <param>int</param>
+            </method>
+        </member>
+    </interface>
+
+    <enum basename="TinyEnum">
+        <modifier>public</modifier>
+        <member>
+            <constant basename="YES" count="1"/>
+            <constant basename="NO" count="1"/>
+            <constant basename="MAYBE" count="1"/>
+        </member>
+    </enum>
+
+    <annotation basename="TinyAnno">
+        <modifier>public</modifier>
+        <member>
+            <method basename="value">
+                <modifier>public</modifier>
+                <type>boolean</type>
+            </method>
+        </member>
+    </annotation>
+        
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/jdk/javadoc/tool/sampleapi/res/tinysub.xml	Thu Jun 02 17:31:38 2016 -0700
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2016, 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 name="sampleapi.tiny.sub" module="sat.sampleapi">
+
+    <class basename="TSClass">
+        <modifier>public</modifier>
+        <modifier>none|abstract</modifier>
+        <implement>TSInterface0</implement>
+        <member>
+            <field basename="id">
+                <modifier>public</modifier>
+                <type>int</type>
+            </field>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>int</type>
+                <throw>TSException0</throw>
+            </method>
+            <method basename="put">
+                <modifier>public</modifier>
+                <param>int</param>
+                <type>void</type>
+                <throw>TSException0</throw>
+            </method>
+        </member>
+    </class>
+
+    <class basename="TSException">
+        <modifier>public</modifier>
+        <extend ref="java.lang.Exception"/>
+        <member>
+            <constructor>
+                <modifier>public</modifier>
+                <param>String</param>
+            </constructor>
+        </member>
+    </class>
+
+    <interface basename="TSInterface">
+        <modifier>public</modifier>
+        <member>
+            <method basename="put">
+                <modifier>public</modifier>
+                <type>void</type>
+                <param>int</param>
+            </method>
+        </member>
+    </interface>
+
+    <enum basename="TSEnum">
+        <modifier>public</modifier>
+        <member>
+            <constant basename="ON" count="1"/>
+            <constant basename="OFF" count="1"/>
+        </member>
+    </enum>
+
+    <annotation basename="TSAnno">
+        <modifier>public</modifier>
+        <member>
+            <method basename="value">
+                <modifier>public</modifier>
+                <type>boolean</type>
+            </method>
+        </member>
+    </annotation>
+        
+</package>
--- a/langtools/test/jdk/javadoc/tool/sampleapi/res/xml/fx.xml	Thu Jun 02 21:14:40 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (c) 2015, 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.
--->
-<dataset package="sampleapi.fx" style="fx">
-
-    <class basename="FXClass">
-        <modifier>public</modifier>
-        <member>
-            <field basename="id">
-                <modifier>public</modifier>
-                <type>int|boolean</type>
-            </field>
-            <method basename="setProp">
-                <modifier>public|protected|private</modifier>
-                <param>int|String</param>
-                <type>void</type>
-            </method>
-            <method basename="getProp">
-                <modifier>public|protected|private</modifier>
-                <type>int|int|String</type>
-            </method>
-        </member>
-    </class>
-
-</dataset>
--- a/langtools/test/jdk/javadoc/tool/sampleapi/res/xml/simple.xml	Thu Jun 02 21:14:40 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,529 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (c) 2015, 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.
--->
-<dataset package="sampleapi.simple">
-
-    <class basename="SampleClass" id="baseclass">
-        <modifier>public</modifier>
-        <modifier>none|abstract</modifier>
-        <member>
-            <field basename="field">
-                <modifier>none|public</modifier>
-                <modifier>none|static</modifier>
-                <modifier>none|final</modifier>
-                <type>boolean|int|String</type>
-            </field>
-            <field basename="field">
-                <modifier>protected|private</modifier>
-                <type>String</type>
-            </field>
-            <constructor>
-                <modifier>public</modifier>
-                <param>none|int|int,boolean|int,String</param>
-            </constructor>
-            <constructor>
-                <modifier>public</modifier>
-                <param>String</param>
-                <throw>NullPointerException</throw>
-                <throw>SampleException0</throw>
-            </constructor>
-            <method basename="set">
-                <modifier>public</modifier>
-                <type>void</type>
-                <param>int</param>
-            </method>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>int|boolean|String</type>
-            </method>
-            <method basename="doSomething">
-                <modifier>public</modifier>
-                <type>void|int</type>
-                <param>none|int|Object,int</param>
-                <throw>NullPointerException</throw>
-                <throw>ArithmeticException</throw>
-            </method>
-        </member>
-    </class>
-
-    <class basename="Derived">
-        <modifier>public</modifier>
-        <extend id="baseclass"/>
-        <member>
-            <field basename="myField">
-                <modifier>public</modifier>
-                <type>int|boolean</type>
-            </field>
-            <constructor>
-                <modifier>public</modifier>
-                <param>none|int|int,boolean|int,String</param>
-            </constructor>
-            <method basename="myGet">
-                <modifier>public</modifier>
-                <type>int|boolean</type>
-            </method>
-        </member>
-    </class>
-
-    <class basename="SampleSerial">
-        <import>java.io.Serializable</import>
-        <modifier>public</modifier>
-        <implement ref="Serializable"/>
-        <member>
-            <field basename="specialData">
-                <modifier>private|none|public</modifier>
-                <type>boolean|int|String</type>
-            </field>
-        </member>
-    </class>
-
-    <class basename="SampleSerial">
-        <import>java.io.Serializable</import>
-        <import>java.io.ObjectStreamField</import>
-        <modifier>public</modifier>
-        <implement ref="Serializable"/>
-        <member>
-            <serialfield basename="serialField">String,Long,Boolean</serialfield>
-            <method basename="justToBeHere">
-                <modifier>public</modifier>
-                <type>String|long|boolean</type>
-            </method>
-        </member>
-    </class>
-
-    <class basename="SampleSerial">
-        <import>java.io.Serializable</import>
-        <import>java.io.ObjectOutputStream</import>
-        <import>java.io.ObjectOutput</import>
-        <import>java.io.IOException</import>
-        <import>java.io.ObjectStreamException</import>
-        <modifier>public</modifier>
-        <implement ref="Serializable"/>
-        <member>
-            <method name="writeObject">
-                <modifier>private</modifier>
-                <param>ObjectOutputStream</param>
-                <type>void</type>
-                <throw>IOException</throw>
-            </method>
-            <method name="writeExternal">
-                <modifier>public</modifier>
-                <param>ObjectOutput</param>
-                <type>void</type>
-                <throw>IOException</throw>
-            </method>
-            <method name="writeReplace">
-                <modifier>protected</modifier>
-                <param>none</param>
-                <type>Object</type>
-                <throw>ObjectStreamException</throw>
-            </method>
-            <method name="writeSomethingElse">
-                <modifier>public</modifier>
-                <param>Object</param>
-                <type>void</type>
-                <throw>IOException</throw>
-            </method>
-        </member>
-    </class>
-
-    <class basename="SampleSerial">
-        <import>java.io.Serializable</import>
-        <import>java.io.ObjectInputStream</import>
-        <import>java.io.ObjectInput</import>
-        <import>java.io.IOException</import>
-        <import>java.io.ObjectStreamException</import>
-        <modifier>public</modifier>
-        <implement ref="Serializable"/>
-        <member>
-            <method name="readObject">
-                <modifier>private</modifier>
-                <param>ObjectInputStream</param>
-                <type>void</type>
-                <throw>IOException</throw>
-                <throw>ClassNotFoundException</throw>
-            </method>
-            <method name="readExternal">
-                <modifier>public</modifier>
-                <param>ObjectInput</param>
-                <type>void</type>
-                <throw>IOException</throw>
-            </method>
-            <method name="readResolve">
-                <modifier>protected</modifier>
-                <param>none</param>
-                <type>Object</type>
-                <throw>ObjectStreamException</throw>
-            </method>
-            <method name="readSomethingElse">
-                <modifier>public</modifier>
-                <param>Object</param>
-                <type>void</type>
-                <throw>IOException</throw>
-            </method>
-        </member>
-    </class>
-
-    <class basename="Container">
-        <modifier>public</modifier>
-        <member>
-            <class basename="Inner">
-                <modifier>public</modifier>
-                <member>
-                    <field basename="value">
-                        <modifier>public</modifier>
-                        <type>int</type>
-                    </field>
-                </member>
-            </class>
-            <class basename="Nested">
-                <modifier>public</modifier>
-                <modifier>static</modifier>
-            </class>
-            <interface basename="EventListener">
-                <modifier>public</modifier>
-                <modifier>static</modifier>
-                <member>
-                    <method basename="onEvent">
-                         <modifier>public</modifier>
-                         <type>void</type>
-                    </method>
-                </member>
-            </interface>
-        </member> 
-    </class>
-
-    <!-- Errors and exceptions -->
-    <class basename="SampleError">
-        <modifier>public</modifier>
-        <extend ref="java.lang.Error"/>
-        <member>
-            <field basename="errorInfo">
-                <modifier>private</modifier>
-                <type>boolean|int|String</type>
-            </field>
-            <constructor>
-                <modifier>public</modifier>
-                <param>String</param>
-            </constructor>
-            <method basename="getSampleData">
-                <modifier>public</modifier>
-                <type>int|String</type>
-            </method>
-        </member>
-    </class>
-
-    <class basename="SampleException">
-        <modifier>public</modifier>
-        <extend ref="java.lang.Exception"/>
-        <member>
-            <field basename="exceptionInfo">
-                <modifier>private</modifier>
-                <type>boolean|int|String</type>
-            </field>
-            <constructor>
-                <modifier>public</modifier>
-                <param>String</param>
-            </constructor>
-            <method basename="getSampleData">
-                <modifier>public</modifier>
-                <type>int|String</type>
-            </method>
-        </member>
-    </class>
-
-    <interface basename="SampleInterface" id="baseinterface">
-        <modifier>public|none</modifier>
-        <member>
-            <method basename="method">
-                <modifier>public</modifier>
-                <type>void|int|Object</type>
-            </method>
-        </member>
-    </interface>
-
-    <class basename="Implementor">
-        <modifier>public</modifier>
-        <implement id="baseinterface"/>
-        <member>
-            <field basename="myField">
-                <modifier>public</modifier>
-                <type>int|boolean</type>
-            </field>
-            <method basename="myGet">
-                <modifier>public</modifier>
-                <type>int|boolean</type>
-            </method>
-        </member>
-    </class>
-
-    <class basename="GenericClass" tparam="T">
-        <import>java.util.List</import>
-        <modifier>public</modifier>
-        <member>
-            <method basename="put">
-                <modifier>public</modifier>
-                <type>void</type>
-                <param>T</param>
-            </method>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>T</type>
-                <param>int</param>
-            </method>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>List&lt;T&gt;</type>
-            </method>
-        </member>
-    </class>
-
-    <class basename="GenericClass" tparam="K,V">
-        <import>java.util.Set</import>
-        <import>java.util.List</import>
-        <import>java.util.Map</import>
-        <modifier>public</modifier>
-        <member>
-            <method basename="put">
-                <modifier>public</modifier>
-                <type>void</type>
-                <param>K,V</param>
-            </method>
-            <method basename="putMap">
-                <modifier>public</modifier>
-                <type>void</type>
-                <param>Map&lt;K,V&gt;</param>
-            </method>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>V</type>
-                <param>K</param>
-            </method>
-            <method basename="getV">
-                <modifier>public</modifier>
-                <type>Set&lt;V&gt;|List&lt;V&gt;</type>
-            </method>
-            <method basename="getK">
-                <modifier>public</modifier>
-                <type>Set&lt;K&gt;|List&lt;K&gt;</type>
-            </method>
-        </member>
-    </class>
-
-    <class basename="GenericClass" tparam="M,N,O">
-        <import>java.util.Set</import>
-        <import>java.util.List</import>
-        <import>java.util.Map</import>
-        <modifier>public</modifier>
-        <member>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>Set&lt;M&gt;|List&lt;M&gt;</type>
-                <param>Map&lt;N,O&gt;</param>
-            </method>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>Set&lt;N&gt;|List&lt;N&gt;</type>
-                <param>Map&lt;M,O&gt;</param>
-            </method>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>Set&lt;O&gt;|List&lt;O&gt;</type>
-                <param>Map&lt;M,N&gt;</param>
-            </method>
-        </member>
-    </class>
-
-    <class basename="GenericUtil"> <!-- public static generic methods like Collections -->
-        <import>java.util.Set</import>
-        <import>java.util.List</import>
-        <import>java.util.Map</import>
-        <import>java.util.function.Supplier</import>
-        <modifier>public</modifier>
-        <member>
-            <method tparam="E" basename="getSomething">
-                <modifier>public</modifier>
-                <modifier>static</modifier>
-                <type>Set&lt;? extends E&gt;|List&lt;? extends E&gt;</type>
-            </method>
-            <method tparam="V,K" basename="getMore">
-                <modifier>public|private</modifier>
-                <modifier>static</modifier>
-                <type>Map&lt;V,K&gt;</type>
-            </method>
-            <method tparam="E" basename="doSomething">
-                <modifier>public</modifier>
-                <modifier>static</modifier>
-                <type>void</type>
-                <param>E</param>
-            </method>
-            <method tparam="X extends Throwable" basename="orElseThrow">
-                <modifier>public|private</modifier>
-                <modifier>static</modifier>
-                <type>X</type>
-                <param>Supplier&lt;? extends X&gt;</param>
-                <throw>X</throw>
-            </method>
-        </member>
-    </class>
-
-    <enum basename="SampleEnum">
-        <modifier>public</modifier>
-        <member>
-            <constant basename="VALUE" count="3"/>
-        </member>
-    </enum>
-        
-    <enum basename="SampleEnum">
-        <modifier>public</modifier>
-        <member>
-            <constant basename="VALUE" count="2"/>
-            <constant basename="NOVALUE" count="1"/>
-            <field basename="field">
-                <modifier>private</modifier>
-                <type>int|String</type>
-            </field>
-            <method basename="method">
-                <modifier>public</modifier>
-                <type>void|String</type>
-            </method>
-        </member>
-    </enum>
-
-    <annodecl id="documented">
-        <class>Documented</class>
-    </annodecl>
-
-    <annodecl id="reten-source">
-        <class>Retention</class>
-        <arg name="value" value="RetentionPolicy.SOURCE"/>
-    </annodecl>
-
-    <annodecl id="reten-class">
-        <class>Retention</class>
-        <arg name="value" value="RetentionPolicy.CLASS"/>
-    </annodecl>
-
-    <annodecl id="reten-runtime">
-        <class>Retention</class>
-        <arg name="value" value="RetentionPolicy.RUNTIME"/>
-    </annodecl>
-
-    <annodecl id="target-method">
-        <class>Target</class>
-        <arg value="ElementType.METHOD"/>
-    </annodecl>
-
-    <annodecl id="target-field">
-        <class>Target</class>
-        <arg value="ElementType.FIELD"/>
-    </annodecl>
-
-    <annodecl id="target-type">
-        <class>Target</class>
-        <arg value="{ElementType.TYPE, ElementType.TYPE_USE}"/>
-    </annodecl>
-
-    <annotation basename="AnnotatedAnno">
-        <import>java.lang.annotation.Documented</import>
-        <anno>@documented</anno>
-        <modifier>public</modifier>
-        <member>
-            <method basename="value">
-                <modifier>public</modifier>
-                <type>boolean|String</type>
-            </method>
-        </member>
-    </annotation>
-
-    <annotation basename="AnnotatedAnno">
-        <import>java.lang.annotation.Retention</import>
-        <import>java.lang.annotation.RetentionPolicy</import>
-        <anno>@reten-source|@reten-class|@reten-runtime</anno>
-        <modifier>public</modifier>
-        <member>
-            <method basename="value">
-                <modifier>public</modifier>
-                <type>int</type>
-            </method>
-        </member>
-    </annotation>
-
-    <class basename="AnnoContainer">
-        <import>java.lang.annotation.Retention</import>
-        <import>java.lang.annotation.RetentionPolicy</import>
-        <import>java.lang.annotation.Target</import>
-        <import>java.lang.annotation.ElementType</import>
-        <modifier>public</modifier>
-        <member>
-            <annotation basename="AnnotatedAnno">
-                <anno>@reten-source|@reten-class|@reten-runtime</anno>
-                <anno>@target-method|@target-field|@target-type</anno>
-                <modifier>public</modifier>
-                <modifier>static</modifier>
-                <member>
-                    <method basename="value">
-                        <modifier>public</modifier>
-                        <type>String</type>
-                    </method>
-                </member>
-            </annotation>
-        </member>
-    </class>
-
-    <annodecl id="deprecated">
-        <class>Deprecated</class>
-    </annodecl>
-
-    <annodecl id="safevarargs">
-        <class>SafeVarargs</class>
-    </annodecl>
-
-    <annodecl id="suppresswarnings">
-        <class>SuppressWarnings</class>
-        <arg value="{&quot;unchecked&quot;, &quot;rawtypes&quot;}"/>
-    </annodecl>
-
-    <class basename="AnnotatedClass">
-        <modifier>public</modifier>
-        <member>
-            <method basename="deprecatedMethod">
-                <anno>@deprecated</anno>
-                <modifier>public</modifier>
-                <type>void</type>
-            </method>
-            <method basename="safeVarargsMethod">
-                <anno>@safevarargs</anno>
-                <modifier>public</modifier>
-                <type>void|int</type>
-                <param>String...</param>
-            </method>
-            <method basename="suppressWarningsMethod">
-                <anno>@suppresswarnings</anno>
-                <modifier>public</modifier>
-                <type>void</type>
-                <param>int|Object</param>
-            </method>
-        </member>
-    </class>
-</dataset>
--- a/langtools/test/jdk/javadoc/tool/sampleapi/res/xml/tiny.xml	Thu Jun 02 21:14:40 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (c) 2015, 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.
--->
-<dataset package="sampleapi.tiny">
-
-    <class basename="TinyClass">
-        <modifier>public</modifier>
-        <modifier>none|abstract</modifier>
-        <member>
-            <field basename="id">
-                <modifier>public</modifier>
-                <type>int</type>
-            </field>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>int</type>
-            </method>
-        </member>
-    </class>
-
-    <interface basename="TinyInterface">
-        <modifier>public</modifier>
-        <member>
-            <method basename="put">
-                <modifier>public</modifier>
-                <type>void</type>
-                <param>int</param>
-            </method>
-        </member>
-    </interface>
-
-    <enum basename="TinyEnum">
-        <modifier>public</modifier>
-        <member>
-            <constant basename="YES" count="1"/>
-            <constant basename="NO" count="1"/>
-            <constant basename="MAYBE" count="1"/>
-        </member>
-    </enum>
-
-    <annotation basename="TinyAnno">
-        <modifier>public</modifier>
-        <member>
-            <method basename="value">
-                <modifier>public</modifier>
-                <type>boolean</type>
-            </method>
-        </member>
-    </annotation>
-        
-</dataset>
--- a/langtools/test/tools/javadoc/sampleapi/README.txt	Thu Jun 02 21:14:40 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +0,0 @@
-
-            SampleAPI Generator for javadoc
-
-1. General description
-
-    The primary goal is to provide one or more data sets to be used as input
-to the javadoc tool, such that it can be used to generate representative samples
-of all the different content on all the different types of pages that can be
-generated by javadoc.
-
-    The tool is implemented as generator based on xml descriptions of data sets.
-The xml description of data set provides top level entities (class, interface,
-enum, annotation) with all possible content. Desired output parameters (fields,
-methods, inner/nested classes) are also described in xml as lists of modifiers,
-types and annotations. The generator "multiply" the entities from the lists
-providing the set of all possible combinations.
-
-    After the api generation the tool connects the javadoc style comments to
-the generated entities with full possible sets of supported tags.
-
-2. Tool structure
-
-    Sources:
-        test/tools/javadoc/sampleapi/lib - generator sources
-        test/tools/javadoc/sampleapi/res/xml - sample data sets in xml
-        test/tools/javadoc/sampleapi/res/txt - sample texts for doc comments
-
-3. Public API
-
-3.1 Command line runner
-
-  * test/tools/javadoc/sampleapi/lib/sampleapi/SampleApiDefaultRunner.java
-
-    class sampleapi.SampleApiDefaultRunner
-
-  Options: [-?|-h|--help] [-o:<dir>|--outdir:<dir>]
-    -?|-h|--help             - print help
-    -o:<dir>|--outdir:<dir>  - set <dir> to generate output
-
-3.2 Programmatic access
-
-  * test/tools/javadoc/sampleapi/lib/sampleapi/SampleApi.java
-
-    class sampleapi.SampleApi
-
-    public void generate(File dir)
-    public void generate(Path dir)
-    public void generate(String dir)
-
-3.3 How to run other xml data set description
-
-  Put data set xml description into res/xml directory
-
-  * test/tools/javadoc/sampleapi/lib/sampleapi/generator/PackageGenerator.java
-
-    class sampleapi.generator.PackageGenerator
-
-    public void processDataSet(String dsName)
-    public void generate(File outDir)
--- a/langtools/test/tools/javadoc/sampleapi/SampleApiTest.java	Thu Jun 02 21:14:40 2016 +0000
+++ b/langtools/test/tools/javadoc/sampleapi/SampleApiTest.java	Thu Jun 02 17:31:38 2016 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -24,24 +24,31 @@
 /*
  * @test
  * @bug 8130880
- * @library lib
+ * @library /jdk/javadoc/tool/sampleapi/lib
  * @modules jdk.compiler/com.sun.tools.javac.api
  *          jdk.compiler/com.sun.tools.javac.code
  *          jdk.compiler/com.sun.tools.javac.parser
  *          jdk.compiler/com.sun.tools.javac.tree
  *          jdk.compiler/com.sun.tools.javac.util
- * @run main sampleapi.SampleApiDefaultRunner -o:out/src
  * @run main SampleApiTest
  */
 
 import com.sun.tools.javadoc.*;
+import sampleapi.*;
 
 public class SampleApiTest {
 
-    public static void main(String... args) {
+    public static void main(String... args) throws Exception {
+
+        // generate
+        SampleApiDefaultRunner.execute(
+            new String[] {
+                "-o=out/src",
+                "-r=" + System.getProperty("test.src") + "/res"
+            });
 
         // html4
-        Main.execute(
+        int res1 = Main.execute(
             new String[] {
                 "-d", "out/doc.html4",
                 "-verbose",
@@ -54,12 +61,13 @@
                 "-windowtitle", "SampleAPI",
                 "-sourcepath", "out/src",
                 "sampleapi.simple",
+                "sampleapi.simple.sub",
                 "sampleapi.tiny",
                 "sampleapi.fx"
             });
 
         // html5
-        Main.execute(
+        int res2 = Main.execute(
             new String[] {
                 "-d", "out/doc.html5",
                 "-verbose",
@@ -72,8 +80,13 @@
                 "-windowtitle", "SampleAPI",
                 "-sourcepath", "out/src",
                 "sampleapi.simple",
+                "sampleapi.simple.sub",
                 "sampleapi.tiny",
                 "sampleapi.fx"
             });
+
+        if (res1 + res2 > 0)
+            throw new Exception("One of exit statuses of test execution is non-zero: "
+                + res1 + " for HTML4, " + res2 + " for HTML5.");
     }
 }
--- a/langtools/test/tools/javadoc/sampleapi/lib/sampleapi/SampleApi.java	Thu Jun 02 21:14:40 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2015, 2016, 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 sampleapi;
-
-import java.io.File;
-import java.nio.file.Path;
-
-import sampleapi.generator.PackageGenerator;
-
-public class SampleApi {
-
-    PackageGenerator pkgGen = new PackageGenerator();
-
-    public void generate(File dir) throws Fault {
-        pkgGen.processDataSet("simple");
-        pkgGen.generate(dir);
-        pkgGen.processDataSet("tiny");
-        pkgGen.generate(dir);
-        pkgGen.processDataSet("fx");
-        pkgGen.generate(dir);
-    }
-
-    public void generate(Path dir) throws Fault {
-        generate(dir.toFile());
-    }
-
-    public void generate(String dir) throws Fault {
-        generate(new File(dir));
-    }
-
-    public static class Fault extends Exception {
-        public Fault(String msg) {
-            super(msg);
-        }
-        public Fault(String msg, Throwable th) {
-            super(msg, th);
-        }
-    }
-}
--- a/langtools/test/tools/javadoc/sampleapi/lib/sampleapi/SampleApiDefaultRunner.java	Thu Jun 02 21:14:40 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,137 +0,0 @@
-/*
- * Copyright (c) 2015, 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 sampleapi;
-
-import java.io.File;
-
-import sampleapi.SampleApi.Fault;
-
-public class SampleApiDefaultRunner {
-
-    public static final String MSG_DUP_OUTDIR =
-        "SampleApi: duplicated outdir detected: ";
-    public static final String MSG_USE_FIRST =
-        "           will use first occurance: ";
-    public static final String MSG_INVAL_OUTDIR =
-        "SampleApi: outdir is not valid: ";
-    public static final String MSG_CANNOT_GEN =
-        "SampleApi: cannot generate output: ";
-    public static final String MSG_WRONG_OPTION =
-        "SampleApi: incorrect option: ";
-    public static final String MSG_USE_HELP =
-        "           use -? for help";
-
-    public static void main(String... args) throws Exception {
-        if (args.length == 0) {
-            printHelp();
-            System.exit(1);
-        }
-
-        String outDirName = "";
-
-        boolean isOutDirSet = false;
-        boolean isHelpPrinted = false;
-        for (String arg : args) {
-            Option option = new Option(arg);
-            switch (option.getOptionName()) {
-                case "-?":
-                case "-h":
-                case "--help":
-                    if (!isHelpPrinted) {
-                        printHelp();
-                        isHelpPrinted = true;
-                    }
-                    break;
-                case "-o":
-                case "--outdir":
-                    if (!isOutDirSet) {
-                        outDirName = option.getOptionValue();
-                        isOutDirSet = true;
-                    } else {
-                        System.err.println(MSG_DUP_OUTDIR + option.getOptionValue());
-                        System.err.println(MSG_USE_FIRST + outDirName);
-                    }
-                    break;
-                default:
-                    System.err.println(MSG_WRONG_OPTION + arg);
-                    System.err.println(MSG_USE_HELP);
-                    break;
-            }
-
-        }
-
-        if (!isOutDirSet) {
-            System.exit(1);
-        }
-
-        if (outDirName.length() == 0) {
-            System.err.println(MSG_INVAL_OUTDIR + outDirName);
-            System.exit(1);
-        }
-
-        File outDir = new File(outDirName);
-        outDir.mkdirs();
-        SampleApi apiGen = new SampleApi();
-
-        try {
-            apiGen.generate(outDir);
-        } catch (Fault e) {
-            System.err.println(MSG_CANNOT_GEN + e.getMessage());
-            e.printStackTrace();
-        }
-    }
-
-    private static void printHelp() {
-        System.out.println("SampleApi:");
-        System.out.println("    options: [-?|-h|--help] [-o:<dir>|--outdir:<dir>]");
-        System.out.println("    -?|-h|--help             - print help");
-        System.out.println("    -o:<dir>|--outdir:<dir>  - set <dir> to generate output");
-    }
-
-    private static class Option {
-
-        private String optionName;
-        private String optionValue;
-
-        public Option(String arg) {
-            int delimPos = arg.indexOf(':');
-
-            if (delimPos == -1) {
-                optionName = arg;
-                optionValue = "";
-            } else {
-                optionName = arg.substring(0, delimPos);
-                optionValue = arg.substring(delimPos + 1, arg.length());
-            }
-        }
-
-        public String getOptionName() {
-            return optionName;
-        }
-
-        public String getOptionValue() {
-            return optionValue;
-        }
-    }
-}
--- a/langtools/test/tools/javadoc/sampleapi/lib/sampleapi/generator/DocCommentGenerator.java	Thu Jun 02 21:14:40 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,495 +0,0 @@
-/*
- * Copyright (c) 2015, 2016, 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 sampleapi.generator;
-
-import java.io.File;
-import java.io.BufferedInputStream;
-import java.io.IOException;
-import java.util.Set;
-import javax.lang.model.element.Modifier;
-
-import com.sun.tools.javac.tree.JCTree;
-import com.sun.tools.javac.tree.JCTree.*;
-import com.sun.tools.javac.util.List;
-import java.util.HashMap;
-import java.util.Map;
-
-class DocCommentGenerator {
-
-    public enum Text {
-        BROWNFOX(BROWNFOX_TEXT),
-        NOWISTHETIME(NOWISTHETIME_TEXT),
-        THISPANGRAM(THISPANGRAM_TEXT),
-        LOREMIPSUM(LOREMIPSUM_TEXT),
-        LIEUROPANLINGUES(LIEUROPANLINGUES_TEXT),
-        CODE(CODE_TEXT);
-
-        String commentText;
-
-        Text(String text) {
-            commentText = text;
-        }
-
-        @Override
-        public String toString() {
-            return commentText;
-        }
-    }
-
-    public enum Tag {
-        AUTHOR("@author", "Cody J. Writer"),
-        PARAM("@param", ""),
-        RETURN("@return", Text.NOWISTHETIME.toString()),
-        SINCE("@since", "1.0"),
-        THROWS("@throws", "If problem detected"),
-        EXCEPTION("@exception", "If problem detected"),
-        SERIAL("@serial", ""),
-        SERIALDATA("@serialData", "The types and order of data could be here."),
-        SERIALFIELD("@serialField", "\n        Serial field in special array"),
-        FX_PROPSETTER("@propertySetter", "Set the property"),
-        FX_PROPGETTER("@propertyGetter", "Get the property"),
-        FX_PROPDESC("@propertyDescription", ""),
-        FX_DEFVALUE("@defaultValue", ""),
-        FX_TREATASPRIVATE("@treatAsPrivate", "");
-
-        String tagName;
-        String tagValue;
-
-        Tag(String tagName, String tagValue) {
-            this.tagName = tagName;
-            this.tagValue = tagValue;
-        }
-
-        public String toString() {
-            return value("", "");
-        }
-
-        public String value(String value) {
-            return value(value, "");
-        }
-
-        public String value(String value, String extra) {
-            return tagName
-                   + ((value.length() != 0) ? " " + value : "")
-                   + ((tagValue.length() != 0) ? " " + tagValue : "")
-                   + ((extra.length() != 0) ? " " + extra : "");
-        }
-    }
-
-    public enum InlineTag {
-        LITERAL("@literal", "Use < and > brackets instead of &lt; and &gt; escapes."),
-        CODE("@code", "(i) -> new Abc<Object>((i > 0) ? (i << 1) : 0)"),
-        LINK("@link", ""),
-        VALUE("@value", ""),
-        INDEX("@index", "", true);
-
-        String tagName;
-        String tagValue;
-        boolean counted;
-        Map<String, Integer> counters;
-
-        InlineTag(String tagName, String tagValue) {
-            this(tagName, tagValue, false);
-        }
-
-        InlineTag(String tagName, String tagValue, boolean counted) {
-            this.tagName = tagName;
-            this.tagValue = tagValue;
-            this.counted = counted;
-            if (counted) {
-                counters = new HashMap<>();
-            }
-        }
-
-        public String toString() {
-            return value("");
-        }
-
-        public String value(String value) {
-            String name = ((tagValue.length() != 0) ? " " + tagValue : "")
-                   + ((value.length() != 0) ? " " + value : "");
-            if (counted && !counters.containsKey(name)) {
-                counters.put(name, 0);
-            }
-            return "{" + tagName
-                   + name
-                   + (counted ? "_" + counters.put(name, counters.get(name) + 1) : "")
-                   + "}";
-        }
-    }
-
-    public static class LinkTag {
-
-        static String[] links = new String[] {
-            "Boolean",
-            "Boolean#TRUE",
-            "Boolean#Boolean(boolean)",
-            "Boolean#Boolean(String s)",
-            "Boolean#compare(boolean, boolean)",
-            "Boolean#compareTo(Boolean b)",
-            "java.util.Vector",
-            "java.util.Vector#elementCount",
-            "java.util.Vector#Vector(int)",
-            "java.util.Vector#Vector(int initialCapacity, int capacityIncrement)",
-            "java.util.Vector#indexOf(Object)",
-            "java.util.Vector#indexOf(Object o, int index)",
-            "java.lang.annotation" };
-
-        static int index = 0;
-
-        public static String nextSee() {
-            String next = "@see " + links[index];
-            index = (index + 1) % links.length;
-            return next;
-        }
-
-        public static String nextLink() {
-            String next = "Also check "
-                          + (((index % 2) == 0) ? "{@link " : "{@linkplain ")
-                          + links[index]
-                          + "} for details.\n";
-            index = (index + 1) % links.length;
-            return next;
-        }
-    }
-
-    public static class VersionTag {
-
-        static String[] versions = new String[] {
-            "1.5, 09/01/04",
-            "1.6, 12/11/06",
-            "1.7, 07/28/11",
-            "1.8, 04/19/14",
-            "9,   06/03/16" };
-
-        static int index = 0;
-
-        public static String nextVersion() {
-            String next = "@version " + versions[index];
-            index = (index + 1) % versions.length;
-            return next;
-        }
-    }
-
-    //
-    // getters (build comments for entities)
-    //
-
-    public String getPackageComment() {
-        return InlineTag.INDEX.value("PackageCommentLabel") + " "
-               + Text.LOREMIPSUM
-               + "\n <p>" + Text.LIEUROPANLINGUES
-               + "\n" + Text.CODE
-               + "\n" + LinkTag.nextLink()
-               + "\n" + LinkTag.nextSee()
-               + "\n" + Tag.SINCE;
-    }
-
-    String[] serialVals = new String[] { "include", "exclude" };
-    // static index to roll over "include/exclude"
-    static int serialValIdx = 0;
-
-    public String getBaseComment(JCClassDecl baseDecl, boolean toplevel) {
-        String buildComment = InlineTag.INDEX.value("BaseCommentLabel") + " ";
-
-        buildComment += Text.LIEUROPANLINGUES + "\n";
-
-        buildComment += "<p>It is possible to see inlined code:\n"
-                        + InlineTag.CODE
-                        + " is the example.\n\n";
-
-        buildComment += "<p>Literal use example.\n"
-                        + InlineTag.LITERAL + "\n\n";
-
-        buildComment += "<p>" + Text.THISPANGRAM + "\n"; // make comment longer
-
-        buildComment += "<p>" + LinkTag.nextLink() + "\n";
-
-        if (toplevel)
-            buildComment += "\n" + VersionTag.nextVersion() + "\n";
-
-        // @param for type params
-        List<JCTypeParameter> params = baseDecl.getTypeParameters();
-        int paramIndex = 0;
-        for (JCTypeParameter paramDecl : params) {
-            buildComment += Tag.PARAM.value(
-                                "<" + paramDecl.getName().toString() + ">",
-                                "the type of value set #" + paramIndex++)
-                            + "\n";
-        }
-
-        buildComment += "\n" + LinkTag.nextSee();
-
-        buildComment += "\n";
-
-        if (toplevel)
-            buildComment += Tag.AUTHOR + "\n";
-
-        buildComment += Tag.SINCE + "\n";
-
-        // for serial; currently no need to dig too deep
-        if (isSerializable(baseDecl) || isErrorOrException(baseDecl)) {
-            buildComment += "\n" + Tag.SERIAL.value(serialVals[serialValIdx]);
-            serialValIdx = (serialValIdx + 1) % 2;
-        }
-
-        return buildComment;
-    }
-
-    public String getConstComment() {
-        String buildComment = InlineTag.INDEX.value("ConstCommentLabel") + " ";
-
-        buildComment += Text.NOWISTHETIME + " " + Text.BROWNFOX + "\n";
-        buildComment += LinkTag.nextLink() + "\n";
-        buildComment += LinkTag.nextSee() + "\n";
-        buildComment += Tag.SINCE + "\n";
-
-        return buildComment;
-    }
-
-    public String getFieldComment(JCClassDecl baseDecl,
-                                  JCVariableDecl varDecl,
-                                  boolean isFxStyle) {
-        String buildComment = InlineTag.INDEX.value("FieldCommentLabel") + " ";
-
-        buildComment += Text.BROWNFOX + "<p>" + Text.NOWISTHETIME + "\n";
-        Set<Modifier> mods = varDecl.getModifiers().getFlags();
-        String varName = varDecl.getName().toString();
-
-        if (mods.contains(Modifier.STATIC) && mods.contains(Modifier.FINAL)) {
-            JCExpression init = varDecl.getInitializer();
-            if (init != null
-                && !"null".equals(init.toString())
-                && !"serialPersistentFields".equals(varName))
-                buildComment += "<p>The value of this constant is "
-                                + InlineTag.VALUE
-                                + ".\n";
-        }
-
-        buildComment += "<p>" + LinkTag.nextLink() + "\n";
-
-        if (isSerializable(baseDecl)) {
-            if (isErrorOrException(baseDecl)) {
-                buildComment += Tag.SERIAL + "\n";
-            } else if ("serialPersistentFields".equals(varName)) {
-                JCNewArray sfList = (JCNewArray)varDecl.getInitializer();
-                for (JCExpression sf : sfList.getInitializers()) {
-                    List<JCExpression> args = ((JCNewClass)sf).getArguments();
-                    String sfName = ((JCLiteral)args.get(0)).getValue().toString();
-                    String sfClass = ((JCIdent)args.get(1)).getName().toString();
-                    String sfType = sfClass.substring(0, sfClass.indexOf(".class"));
-
-                    buildComment += Tag.SERIALFIELD.value(sfName + "    " + sfType)
-                                    + "\n";
-                }
-            } else {
-                buildComment += Tag.SERIAL.value("Very important value.") + "\n";
-            }
-        }
-
-        if (isFxStyle) {
-            // set default value
-            String varType = varDecl.getType().toString();
-            buildComment += Tag.FX_DEFVALUE.value(defValue(varType)) + "\n";
-        }
-
-        buildComment += LinkTag.nextSee() + "\n";
-
-        return buildComment;
-    }
-
-    public String getMethodComment(JCClassDecl baseDecl,
-                                   JCMethodDecl methodDecl,
-                                   boolean isFxStyle) {
-        String buildComment = InlineTag.INDEX.value("MethodCommentLabel") + " ";
-
-        buildComment += Text.BROWNFOX + "\n<p>" + Text.THISPANGRAM + "\n";
-
-        buildComment += "<p>" + LinkTag.nextLink() + "\n";
-
-        buildComment += "<p>Literal use example.\n"
-                        + InlineTag.LITERAL + "\n\n";
-
-        // @param for type params
-        List<JCTypeParameter> tparams = methodDecl.getTypeParameters();
-        int tparamIndex = 0;
-        for (JCTypeParameter paramDecl : tparams) {
-            String paramDeclString = paramDecl.getName().toString();
-            // simplify it (could contain 'extend'/'super' clauses
-            int spacePos = paramDeclString.indexOf(' ');
-            if (spacePos != -1)
-                paramDeclString = paramDeclString.substring(0, spacePos);
-            buildComment += Tag.PARAM.value(
-                                "<" + paramDeclString + ">",
-                                "the type of value set #" + tparamIndex++)
-                            + "\n";
-        }
-
-        // @param
-        List<JCVariableDecl> params =  methodDecl.getParameters();
-        int paramIndex = 0;
-        for (JCVariableDecl paramDecl : params) {
-            buildComment += Tag.PARAM.value(
-                                paramDecl.getName().toString(),
-                                "an income parameter #" + paramIndex++)
-                            + "\n";
-        }
-
-        // @return
-        JCTree retType = methodDecl.getReturnType(); // null for constructors
-        if (retType != null && !"void".equals(retType.toString()))
-            buildComment += Tag.RETURN + "\n";
-
-        // @throws/@exception
-        Tag t = isDerived(baseDecl) ? Tag.EXCEPTION : Tag.THROWS;
-        List<JCExpression> throwTypes = methodDecl.getThrows();
-        for (JCExpression throwsExp : throwTypes) {
-            buildComment += t.value(throwsExp.toString()) + "\n";
-        }
-
-        if (isSerializable(baseDecl)) {
-            switch (methodDecl.getName().toString()) {
-                case "writeObject":
-                case "readObject":
-                case "writeExternal":
-                case "readExternal":
-                case "writeReplace":
-                case "readResolve":
-                    buildComment += Tag.SERIALDATA + "\n";
-                    break;
-                default:
-            }
-        }
-
-        if (isFxStyle) {
-            // @propertySetter/Getter + Description
-            if ("void".equals(retType.toString())) {
-                buildComment += Tag.FX_PROPSETTER + "\n";
-            } else {
-                buildComment += Tag.FX_PROPGETTER + "\n";
-                buildComment += Tag.FX_DEFVALUE.value(defValue(retType.toString()))
-                                + "\n";
-            }
-            buildComment += Tag.FX_PROPDESC.value(Text.BROWNFOX.toString()) + "\n";
-
-            // @treatAsPrivate
-            if (methodDecl.getModifiers().getFlags().contains(Modifier.PUBLIC))
-                buildComment += Tag.FX_TREATASPRIVATE + "\n";
-        }
-
-        // @see
-        buildComment += LinkTag.nextSee() + "\n";
-
-        // @since
-        buildComment += Tag.SINCE + "\n";
-
-        return buildComment;
-    }
-
-    //
-    // util methods
-    //
-
-    private boolean isErrorOrException(JCClassDecl baseDecl) {
-        JCExpression ext = baseDecl.getExtendsClause();
-        if (ext != null) {
-            String extClassName = ext.toString();
-            if (extClassName.contains("Error") || extClassName.contains("Exception"))
-                return true;
-        }
-        return false;
-    }
-
-    private boolean isSerializable(JCClassDecl baseDecl) {
-        List<JCExpression> impls = baseDecl.getImplementsClause();
-        for (JCExpression impl : impls) {
-            if (impl.toString().contains("Serializable"))
-                return true;
-        }
-        return false;
-    }
-
-    private boolean isDerived(JCClassDecl baseDecl) {
-        return (baseDecl.getExtendsClause() == null) ? false : true;
-    }
-
-    private String defValue(String type) {
-        switch (type) {
-            case "boolean":
-                return "true";
-            case "byte": case "char": case "int": case "long":
-            case "Integer": case "Long":
-                return "1";
-            case "float": case "double": case "Float": case "Double":
-                return "1.0";
-            case "String":
-                return "string";
-            default:
-                return "null";
-        }
-    }
-
-    private static final String BROWNFOX_TEXT =
-        "The quick brown fox jumps over the lazy dog.\n";
-    private static final String NOWISTHETIME_TEXT =
-        "Now is the time for all good men to come to the aid of the party.\n";
-    private static final String THISPANGRAM_TEXT =
-        "This pangram contains four a's, one b, two c's, one d, thirty e's,\n" +
-        "six f's, five g's, seven h's, eleven i's, one j, one k, two l's,\n" +
-        "two m's, eighteen n's, fifteen o's, two p's, one q, five r's,\n" +
-        "twenty-seven s's, eighteen t's, two u's, seven v's, eight w's,\n" +
-        "two x's, three y's, &amp; one z.";
-    private static final String LOREMIPSUM_TEXT =
-        "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do\n" +
-        "eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut\n" +
-        "enim ad minim veniam, quis nostrud exercitation ullamco laboris\n" +
-        "nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor\n" +
-        "in reprehenderit in voluptate velit esse cillum dolore eu fugiat\n" +
-        "nulla pariatur. Excepteur sint occaecat cupidatat non proident,\n" +
-        "sunt in culpa qui officia deserunt mollit anim id est laborum.\n";
-    private static final String LIEUROPANLINGUES_TEXT =
-        "Li Europan lingues es membres del sam familie. Lor separat existentie\n" +
-        "es un myth. Por scientie, musica, sport etc, litot Europa usa li sam\n" +
-        "vocabular. Li lingues differe solmen in li grammatica, li pronunciation\n" +
-        "e li plu commun vocabules. Omnicos directe al desirabilite de un nov\n" +
-        "lingua franca: On refusa continuar payar custosi traductores.\n" +
-        "\n" +
-        "<p>At solmen va esser necessi far uniform grammatica, pronunciation\n" +
-        "e plu commun paroles. Ma quande lingues coalesce, li grammatica del\n" +
-        "resultant lingue es plu simplic e regulari quam ti del coalescent\n" +
-        "lingues. Li nov lingua franca va esser plu simplic e regulari quam\n" +
-        "li existent Europan lingues. It va esser tam simplic quam Occidental\n" +
-        "in fact, it va esser Occidental. A un Angleso it va semblar un simplificat\n" +
-        "Angles, quam un skeptic Cambridge amico dit me que Occidental es.\n";
-    private static final String CODE_TEXT =
-        "<pre>\n" +
-        "public void checkLanguage(Language lang) throws Exception {\n" +
-        "    if (lang.getName().equals(\"Java\")) {\n" +
-        "        System.out.println(\"Warning! Hot!\");\n" +
-        "    else {\n" +
-        "        throw new LooserException();\n" +
-        "    }\n" +
-        "}\n" +
-        "</pre>\n";
-}
--- a/langtools/test/tools/javadoc/sampleapi/lib/sampleapi/generator/Documentifier.java	Thu Jun 02 21:14:40 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 2015, 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 sampleapi.generator;
-
-import java.util.ArrayList;
-import java.util.Set;
-import javax.lang.model.element.Modifier;
-
-import com.sun.tools.javac.util.Context;
-import com.sun.tools.javac.tree.JCTree;
-import com.sun.tools.javac.tree.JCTree.*;
-import com.sun.tools.javac.tree.DocCommentTable;
-import com.sun.tools.javac.parser.ScannerFactory;
-import com.sun.tools.javac.parser.Scanner;
-import com.sun.tools.javac.parser.Tokens.Token;
-import com.sun.tools.javac.parser.Tokens.Comment;
-import com.sun.tools.javac.parser.Tokens.Comment.CommentStyle;
-import com.sun.source.tree.Tree.Kind;
-
-import sampleapi.util.*;
-
-class Documentifier {
-
-    static Documentifier instance;
-
-    final DocCommentGenerator docGen;
-    final ScannerFactory scanners;
-
-    private Documentifier(Context context) {
-        docGen = new DocCommentGenerator();
-        scanners = ScannerFactory.instance(context);
-    }
-
-    public static Documentifier instance(Context context) {
-        if (instance == null)
-            instance = new Documentifier(context);
-        return instance;
-    }
-
-    private DocCommentTable curDocComments;
-
-    public void documentify(JCCompilationUnit topLevel, boolean isFxStyle) {
-        JCClassDecl base = (JCClassDecl)topLevel.getTypeDecls().get(0);
-        curDocComments = new PoorDocCommentTable();
-        documentifyBase(base, true, isFxStyle);
-        topLevel.docComments = curDocComments;
-    }
-
-    private void documentifyBase(JCClassDecl base, boolean isTopLevel, boolean isFxStyle) {
-        // add doc comment to class itself
-        Comment comm = comment(docGen.getBaseComment(base, isTopLevel));
-        curDocComments.putComment(base, comm);
-
-        // add doc comments to members
-        for (JCTree member : base.getMembers()) {
-            switch (member.getTag()) {
-                case VARDEF:
-                    documentifyField(base, (JCVariableDecl)member, isFxStyle);
-                    break;
-                case METHODDEF:
-                    documentifyMethod(base, (JCMethodDecl)member, isFxStyle);
-                    break;
-                case CLASSDEF:
-                    documentifyBase((JCClassDecl)member, false, isFxStyle);
-                    break;
-            }
-        }
-    }
-
-    private void documentifyField(JCClassDecl base, JCVariableDecl field, boolean isFxStyle) {
-        Kind baseKind = base.getKind();
-        Set<Modifier> fieldMods = field.getModifiers().getFlags();
-        String doc = (baseKind == Kind.ENUM
-                      && fieldMods.contains(Modifier.PUBLIC)
-                      && fieldMods.contains(Modifier.STATIC)
-                      && fieldMods.contains(Modifier.FINAL)) ?
-                     docGen.getConstComment() :
-                     docGen.getFieldComment(base, field, isFxStyle);
-        Comment comm = comment(doc);
-        curDocComments.putComment(field, comm);
-    }
-
-    private void documentifyMethod(JCClassDecl base, JCMethodDecl method, boolean isFxStyle) {
-        Comment comm = comment(docGen.getMethodComment(base, method, isFxStyle));
-        curDocComments.putComment(method, comm);
-    }
-
-    private Comment comment(String docString) {
-        StringBuilder docComment = new StringBuilder()
-                                   .append("/**")
-                                   .append(docString)
-                                   .append("*/");
-        Scanner scanner = scanners.newScanner(docComment, true);
-        scanner.nextToken();
-        Token token = scanner.token();
-        return token.comment(CommentStyle.JAVADOC);
-    }
-
-    // provide package comment data ONLY
-    public DocCommentGenerator getDocGenerator() {
-        return docGen;
-    }
-}
--- a/langtools/test/tools/javadoc/sampleapi/lib/sampleapi/generator/PackageGenerator.java	Thu Jun 02 21:14:40 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,832 +0,0 @@
-/*
- * Copyright (c) 2015, 2016, 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 sampleapi.generator;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.InputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.ParserConfigurationException;
-import org.xml.sax.SAXException;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Text;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import com.sun.source.util.JavacTask;
-import com.sun.tools.javac.api.JavacTool;
-import com.sun.tools.javac.api.JavacTaskImpl;
-import com.sun.tools.javac.util.Context;
-import com.sun.tools.javac.util.Name;
-import com.sun.tools.javac.util.Names;
-import com.sun.tools.javac.util.List;
-import com.sun.tools.javac.util.ListBuffer;
-import com.sun.tools.javac.tree.TreeMaker;
-import com.sun.tools.javac.tree.JCTree;
-import com.sun.tools.javac.tree.JCTree.*;
-import com.sun.tools.javac.code.Flags;
-import com.sun.tools.javac.code.Type;
-import com.sun.tools.javac.code.TypeTag;
-import com.sun.tools.javac.code.TypeMetadata;
-import com.sun.tools.javac.code.Symbol;
-import com.sun.tools.javac.code.Symtab;
-
-import sampleapi.util.*;
-import sampleapi.SampleApi.Fault;
-
-public class PackageGenerator {
-
-    String packageName;
-    String packageDirName;
-
-    ArrayList<JCCompilationUnit> topLevels;
-    Hashtable<String, Integer> nameIndex;
-    Hashtable<String, JCClassDecl> idBases;
-    Hashtable<String, JCAnnotation> idAnnos;
-
-    TreeMaker make;
-    Names names;
-    Symtab syms;
-    DocumentBuilderFactory factory;
-    Documentifier documentifier;
-    boolean fx = false;
-
-    public PackageGenerator() {
-        JavacTool jt = JavacTool.create();
-        JavacTask task = jt.getTask(null, null, null, null, null, null);
-        Context ctx = ((JavacTaskImpl)task).getContext();
-
-        make = TreeMaker.instance(ctx);
-        names = Names.instance(ctx);
-        syms = Symtab.instance(ctx);
-        factory = DocumentBuilderFactory.newInstance();
-
-        documentifier = Documentifier.instance(ctx);
-    }
-
-    String dataSetName;
-
-    public void processDataSet(String dsName) throws Fault {
-        dataSetName = dsName;
-        topLevels = new ArrayList<>();
-        nameIndex = new Hashtable<>();
-        idBases =  new Hashtable<>();
-        idAnnos =  new Hashtable<>();
-
-        String dsPath = "res/xml/" + dsName + ".xml";
-
-        try {
-            InputStream is = getClass().getResourceAsStream("/" + dsPath);
-            if (is == null)
-                is = new FileInputStream(dsPath);
-
-            DocumentBuilder builder = factory.newDocumentBuilder();
-            Document document = builder.parse(is);
-
-            Element rootElement = document.getDocumentElement();
-            packageName = rootElement.getAttribute("package");
-            fx = "fx".equals(rootElement.getAttribute("style"));
-            packageDirName = packageName.replace('.', '/');
-
-            // process nodes (toplevels)
-            NodeList nodeList = rootElement.getChildNodes();
-            for (int i = 0; i < nodeList.getLength(); i++) {
-                Node node = nodeList.item(i);
-
-                if (!(node instanceof Element))
-                    continue;
-                processTopLevel((Element)node);
-            }
-        } catch (ParserConfigurationException | SAXException | IOException e) {
-            throw new Fault("Error parsing dataset " + dsName, e);
-        }
-
-        fx = false;
-    }
-
-    public void generate(File outDir) throws Fault {
-        if (dataSetName == null)
-            throw new Fault("No Data Set processed");
-
-        try {
-            File pkgDir = new File(outDir, packageDirName);
-            pkgDir.mkdirs();
-
-            for (JCCompilationUnit decl : topLevels) {
-                JCClassDecl classDecl = (JCClassDecl)decl.getTypeDecls().get(0);
-                File outFile = new File(pkgDir,
-                                        classDecl.getSimpleName().toString() + ".java");
-                FileWriter writer = new FileWriter(outFile);
-                writer.write(decl.toString());
-                writer.flush();
-                writer.close();
-            }
-
-            // package-info
-            File outFile = new File(pkgDir, "package-info.java");
-            FileWriter writer = new FileWriter(outFile);
-            writer.write("/**\n");
-            writer.write(documentifier.getDocGenerator().getPackageComment());
-            writer.write("*/\n");
-            writer.write("package " + packageName + ";");
-            writer.flush();
-            writer.close();
-        } catch (IOException e) {
-            throw new Fault("Error writing output");
-        }
-    }
-
-    // levels' processing methods
-
-    void processTopLevel(Element tlTag) {
-        String kind = tlTag.getTagName();
-
-        if (kind.equals("annodecl")) {
-            // decls stored separately, does not affect bases
-            String declId = tlTag.getAttribute("id");
-            if (!declId.startsWith("@"))
-                declId = "@" + declId;
-            idAnnos.put(declId, processAnnoDecl(tlTag));
-            return;
-        }
-
-        ListBuffer<JCTree>[] bases = processBases(tlTag, null);
-
-        for (JCTree base : bases[0]) { // [0] - bases namely
-            JCPackageDecl pkg = make.PackageDecl(
-                                    List.<JCAnnotation>nil(),
-                                    make.QualIdent(
-                                        new Symbol.PackageSymbol(
-                                            names.fromString(packageName),
-                                            null)));
-            ListBuffer<JCTree> topLevelParts = new ListBuffer<>();
-            topLevelParts.append(pkg);
-            topLevelParts.appendList(bases[1]); // [1] imports
-            topLevelParts.append(base);
-
-            JCCompilationUnit topLevel = make.TopLevel(topLevelParts.toList());
-            documentifier.documentify(topLevel, fx);
-            topLevels.add(topLevel);
-        }
-    }
-
-    ListBuffer<JCTree>[] processBases(Element baseTag, Hashtable<String, Integer> scope) {
-        String kind = baseTag.getTagName();
-        String baseName = baseTag.getAttribute("basename");
-        String typeParam = baseTag.getAttribute("tparam");
-        String baseId = baseTag.getAttribute("id");
-
-        long kindFlag = 0;
-        switch (kind) {
-            case "class":
-                // no flags for class
-                break;
-            case "interface":
-                kindFlag |= Flags.INTERFACE;
-                break;
-            case "enum":
-                kindFlag |= Flags.ENUM;
-                break;
-            case "annotation":
-                kindFlag |= Flags.ANNOTATION | Flags.INTERFACE;
-                break;
-        }
-
-        // go through other nodes; add modifiers to multiplier
-        NodeList nodes = baseTag.getChildNodes();
-        ListBuffer<JCTree> bases = new ListBuffer<>();
-        ListBuffer<JCTree> members = new ListBuffer<>();
-        ListBuffer<JCTree> imports = new ListBuffer<>();
-        JCExpression extType = null;
-        ListBuffer<JCExpression> implTypes = new ListBuffer<>();
-        SimpleMultiplier multiply = new SimpleMultiplier();
-        for (int i = 0; i < nodes.getLength(); i++) {
-            Node node = nodes.item(i);
-
-            if (!(node instanceof Element))
-                continue;
-
-            switch (((Element)node).getTagName()) {
-                case "modifier":
-                    multiply.addAxis(((Element)node).getTextContent());
-                    break;
-                case "anno":
-                    multiply.addAxis(((Element)node).getTextContent());
-                    break;
-                case "member":
-                    // process members here
-                    members.appendList(processMembers((Element)node, baseName, kind));
-                    break;
-                case "extend":
-                    String classId = ((Element)node).getAttribute("id");   // this pkg
-                    String classRef = ((Element)node).getAttribute("ref"); // external
-                    if (classId.length() !=0 &&
-                        idBases.containsKey(classId)) {
-                        // if have base, take methods from base members
-                        JCClassDecl baseDecl = idBases.get(classId);
-                        extType = make.Type(
-                                      getTypeByName(
-                                          baseDecl.getSimpleName().toString()));
-                        members.appendList(processMethods(baseDecl.getMembers(), false));
-                    } else if (classRef.length() !=0) {
-                        extType = make.Type(getTypeByName(classRef));
-                    }
-                    break;
-                case "implement":
-                    String interfaceId = ((Element)node).getAttribute("id");
-                    String interfaceRef = ((Element)node).getAttribute("ref");
-                    if (interfaceId.length() != 0 &&
-                        idBases.containsKey(interfaceId)) {
-                        JCClassDecl baseDecl = idBases.get(interfaceId);
-                        implTypes.add(
-                            make.Type(
-                                getTypeByName(
-                                    baseDecl.getSimpleName().toString())));
-                        members.appendList(processMethods(baseDecl.getMembers(), true));
-                    } else if (interfaceRef.length() != 0) {
-                        implTypes.add(make.Type(getTypeByName(interfaceRef)));
-                    }
-                    break;
-                case "import":
-                    imports.append(
-                        make.Import(
-                            make.Ident(names.fromString(((Element)node).getTextContent())),
-                            false));
-            }
-        }
-
-        // process modifiers through multiplier
-        multiply.initIterator();
-        while (multiply.hasNext()) {
-            ArrayList<String> tuple = multiply.getNext();
-
-            long declFlags = kindFlag;
-            ListBuffer<JCAnnotation> annos = new ListBuffer<>();
-            for (String modifier : tuple) {
-                if (modifier.startsWith("@") && idAnnos.containsKey(modifier))
-                    annos.add(idAnnos.get(modifier)); // it's anno
-                else
-                    declFlags |= getFlagByName(modifier); // it's modifier
-            }
-
-            String declName = (scope == null)
-                                  ? getUniqName(baseName)
-                                  : baseName + getUniqIndex(scope, baseName);
-            JCClassDecl baseDecl = make.ClassDef(
-                                       make.Modifiers(declFlags, annos.toList()),
-                                       names.fromString(declName),
-                                       processTypeParams(typeParam), // type params
-                                       extType,                      // ext
-                                       implTypes.toList(),           // impl
-                                       members.toList());            // members
-
-            // fix constructors names
-            fixConstructorNames(baseDecl);
-
-            bases.append(baseDecl);
-
-            // for non-empty ids store first base occurence from multiplied sequence
-            if (baseId.length() != 0) {
-                idBases.put(baseId, baseDecl);
-                baseId = "";
-            }
-        }
-
-        return new ListBuffer[] { bases, imports };
-    }
-
-    List<JCTypeParameter> processTypeParams(String typeParams) {
-
-        if (typeParams == null || typeParams.length() == 0)
-            return List.<JCTypeParameter>nil(); // empty
-
-        String[] typeVarsArr = typeParams.split(",");
-        ListBuffer<JCTypeParameter> typeParamsDecls = new ListBuffer<>();
-
-        for (String typeVar : typeVarsArr) {
-            typeParamsDecls.add(
-                make.TypeParameter(names.fromString(typeVar),
-                                    List.<JCExpression>nil()));
-        }
-
-        return typeParamsDecls.toList();
-    }
-
-    ListBuffer<JCTree> processMembers(Element memberTag, String name, String kind) {
-        ListBuffer<JCTree> members = new ListBuffer<>();
-        NodeList nodes = memberTag.getChildNodes();
-        Hashtable<String, Integer> scope = new Hashtable<>();
-        for (int i = 0; i < nodes.getLength(); i++) {
-            Node node = nodes.item(i);
-
-            if (!(node instanceof Element))
-                continue;
-
-            switch (((Element)node).getTagName()) {
-                case "field":
-                    members.appendList(processFields((Element)node, scope));
-                    break;
-                case "serialfield":
-                    members.append(processSerialFields((Element)node));
-                    break;
-                case "constant":
-                    members.appendList(processConstants((Element)node, scope));
-                    break;
-                case "constructor":
-                    members.appendList(processMethods((Element)node, scope, true, true));
-                    break;
-                case "method":
-                    boolean needBody = kind.equals("class") || kind.equals("enum");
-                    members.appendList(processMethods((Element)node, scope, needBody, false));
-                    break;
-                case "class":
-                case "interface":
-                case "enum":
-                case "annotation":
-                    members.appendList(processBases((Element)node, scope)[0]);
-                    break;
-            }
-        }
-
-        return members;
-    }
-
-    ListBuffer<JCTree> processFields(Element fieldsNode, Hashtable<String, Integer> scope) {
-        String kind = fieldsNode.getTagName();
-        String baseName = fieldsNode.getAttribute("basename");
-
-        ListBuffer<JCTree> fields = new ListBuffer<>();
-        NodeList nodes = fieldsNode.getChildNodes();
-        SimpleMultiplier multiply = new SimpleMultiplier(); // for modifiers
-        String[] types = new String[] {};
-        for (int i = 0; i < nodes.getLength(); i++) {
-            Node node = nodes.item(i);
-
-            if (!(node instanceof Element))
-                continue;
-
-            // parse type and modifiers
-            switch (((Element)node).getTagName()) {
-                case "modifier":
-                    multiply.addAxis(((Element)node).getTextContent());
-                    break;
-                case "anno":
-                    multiply.addAxis(((Element)node).getTextContent());
-                case "type":
-                    types = ((Element)node).getTextContent().split("\\|");
-                    break;
-            }
-        }
-
-        // process through modifiers and types
-        multiply.initIterator();
-        while (multiply.hasNext()) {
-            ArrayList<String> tuple = multiply.getNext();
-
-            long declFlags = 0;
-            ListBuffer<JCAnnotation> annos = new ListBuffer<>();
-            for (String modifier : tuple) {
-                if (modifier.startsWith("@") && idAnnos.containsKey(modifier))
-                    annos.add(idAnnos.get(modifier)); // it's anno
-                else
-                    declFlags |= getFlagByName(modifier); // it's modifier
-            }
-
-
-            for (String type : types) {
-                String declName = baseName + getUniqIndex(scope, baseName);
-
-                Type initType = getTypeByName(type);
-                JCExpression initExpr = null;
-                if ((declFlags & Flags.STATIC) != 0) // static to be initialized
-                    initExpr = make.Literal(initType.isPrimitive() ?
-                                             initType.getTag() :
-                                             TypeTag.BOT,
-                                             "String".equals(type)
-                                                 ? new String("blah-blah-blah")
-                                                 : new Integer(0));
-
-                JCVariableDecl fieldDecl = make.VarDef(
-                                               make.Modifiers(declFlags, annos.toList()),
-                                               names.fromString(declName),
-                                               make.Type(getTypeByName(type)),
-                                               initExpr);
-
-                fields.append(fieldDecl);
-            }
-        }
-
-        return fields;
-    }
-
-    JCTree processSerialFields(Element sfNode) {
-        String baseName = sfNode.getAttribute("basename");
-        String[] fieldTypes = sfNode.getTextContent().split(",");
-
-        ListBuffer<JCExpression> serialFields = new ListBuffer<>();
-        Hashtable<String, Integer> scope = new Hashtable<>();
-
-        for (String fType : fieldTypes) {
-            String fieldName = baseName + getUniqIndex(scope, baseName);
-            serialFields.add(
-                make.NewClass(
-                    null,
-                    null,
-                    make.Type(getTypeByName("ObjectStreamField")),
-                    List.from(
-                        new JCTree.JCExpression[] {
-                            make.Literal(fieldName),
-                            make.Ident(names.fromString(fType + ".class"))
-                        }),
-                    null));
-        }
-
-        JCTree sfDecl = make.VarDef(
-                            make.Modifiers(
-                                Flags.PRIVATE | Flags.STATIC | Flags.FINAL),
-                            names.fromString("serialPersistentFields"),
-                            make.TypeArray(
-                                make.Type(getTypeByName("ObjectStreamField"))),
-                            make.NewArray(
-                                null,
-                                List.<JCExpression>nil(),
-                                serialFields.toList()));
-
-        return sfDecl;
-    }
-
-    ListBuffer<JCTree> processConstants(Element constNode, Hashtable<String, Integer> scope) {
-        String baseName = constNode.getAttribute("basename");
-        int count = 1;
-        try {
-            count = Integer.parseInt(constNode.getAttribute("count"));
-        } catch (Exception e) {} // nothing to do, will use count = 1
-
-        long declFlags = Flags.PUBLIC | Flags.STATIC | Flags.FINAL | Flags.ENUM;
-        ListBuffer<JCTree> fields = new ListBuffer<>();
-
-        for (int i = 0; i < count; i++) {
-            String declName = baseName +
-                              ((count == 1) ? "" : getUniqIndex(scope, baseName));
-
-            JCVariableDecl constDecl = make.VarDef(
-                                           make.Modifiers(declFlags),
-                                           names.fromString(declName),
-                                           null,  // no need for type in enum decl
-                                           null); // no init
-
-            fields.append(constDecl);
-        }
-        return fields;
-    }
-
-    ListBuffer<JCTree> processMethods(Element methodsNode, Hashtable<String, Integer> scope, boolean needBody, boolean isConstructor) {
-        String kind = methodsNode.getTagName();
-        String baseName = methodsNode.getAttribute("basename");
-        String name = methodsNode.getAttribute("name");
-        String methodTypeParam = methodsNode.getAttribute("tparam");
-
-        ListBuffer<JCTree> methods = new ListBuffer<>();
-        NodeList nodes = methodsNode.getChildNodes();
-        SimpleMultiplier multiply = new SimpleMultiplier(); // for modifiers
-        String[] types = new String[0];
-        String[] params = new String[] { "none" }; // default - no params
-        ListBuffer<Type> throwTypes = new ListBuffer<>();
-        for (int i = 0; i < nodes.getLength(); i++) {
-            Node node = nodes.item(i);
-
-            if (!(node instanceof Element))
-                continue;
-
-            // parse type and modifiers
-            switch (((Element)node).getTagName()) {
-                case "modifier":
-                    multiply.addAxis(((Element)node).getTextContent());
-                    break;
-                case "anno":
-                    multiply.addAxis(((Element)node).getTextContent());
-                    break;
-                case "type":
-                    types = ((Element)node).getTextContent().split("\\|");
-                    break;
-                case "param":
-                    params = ((Element)node).getTextContent().split("\\|");
-                    break;
-                case "throw":
-                    throwTypes.add(
-                        getTypeByName(((Element)node).getTextContent()));
-                    break;
-
-            }
-        }
-
-        // constructor?
-        if (isConstructor) {
-            baseName = "constructor";
-            types = new String[] { "" };
-        }
-
-        // direct name not indexed
-        boolean isDirectName = false;
-        if (name.length() > 0) {
-            baseName = name;
-            isDirectName = true;
-        }
-
-        // process through modifiers and types
-        multiply.initIterator();
-        while (multiply.hasNext()) {
-            ArrayList<String> tuple = multiply.getNext();
-
-            long declFlags = 0;
-            ListBuffer<JCAnnotation> annos = new ListBuffer<>();
-            for (String modifier : tuple) {
-                if (modifier.startsWith("@") && idAnnos.containsKey(modifier))
-                    annos.add(idAnnos.get(modifier)); // it's anno
-                else
-                    declFlags |= getFlagByName(modifier); // it's modifier
-            }
-
-            for (String type : types) {
-                String declName = baseName
-                                  + ((isConstructor || isDirectName)
-                                     ? "" : getUniqIndex(scope, baseName));
-
-                JCBlock body = null;
-                if (needBody && (declFlags & Flags.ABSTRACT) == 0) { // create body
-                    List<JCStatement> bodyStatements = List.<JCStatement>nil();
-                    if (!type.equals("") && !type.equals("void")) { // create return statement
-                        Type retType = getTypeByName(type);
-                        bodyStatements = List.<JCStatement>of(
-                                             make.Return(
-                                                 make.Literal(
-                                                     retType.isPrimitive() ?
-                                                         retType.getTag() :
-                                                         TypeTag.BOT,
-                                                     new Integer(0))));
-                    }
-                    body = make.Block(0, bodyStatements);
-                }
-
-                // same method by different params (if they exist)
-                for (String param : params) {
-
-                    JCMethodDecl methodDecl =
-                        make.MethodDef(
-                            make.Modifiers(declFlags, annos.toList()),
-                            names.fromString(declName),
-                            isConstructor ? null : make.Type(getTypeByName(type)),
-                            processTypeParams(methodTypeParam), // type params
-                            null,                               // no receiver
-                            processParams(param),               // formal params
-                            make.Types(throwTypes.toList()),   // throws
-                            body,
-                            null);                              // no default value YET
-
-                    methods.append(methodDecl);
-                }
-            }
-        }
-
-        return methods;
-    }
-
-    JCAnnotation processAnnoDecl(Element annoDeclNode) {
-        String annoId = annoDeclNode.getAttribute("id");
-
-        ListBuffer<JCExpression> args = new ListBuffer<>();
-        String className = "";
-
-        NodeList nodes = annoDeclNode.getChildNodes();
-        for (int i = 0; i < nodes.getLength(); i++) {
-            Node node = nodes.item(i);
-
-            if (!(node instanceof Element))
-                continue;
-
-            switch (((Element)node).getTagName()) {
-                case "class":
-                    className = ((Element)node).getTextContent();
-                    break;
-                case "arg":
-                    String argName = ((Element)node).getAttribute("name");
-                    String argValue = ((Element)node).getAttribute("value");
-
-                    JCExpression arg;
-                    if (argName.length() == 0)
-                        arg = make.Ident(names.fromString(argValue));
-                    else
-                        arg = make.Assign(
-                                  make.Ident(names.fromString(argName)),
-                                  make.Ident(names.fromString(argValue)));
-
-                    args.add(arg);
-                    break;
-            }
-        }
-
-        return make.Annotation(
-                   make.Ident(names.fromString(className)),
-                   args.toList());
-    }
-
-    ListBuffer<JCTree> processMethods(List<JCTree> tree, boolean needBody) {
-        // for "extends" clause; returns methods only
-        ListBuffer<JCTree> methods = new ListBuffer<>();
-        for (JCTree memberDecl : tree) {
-            if (memberDecl instanceof JCMethodDecl) {
-                JCMethodDecl methodDecl = (JCMethodDecl)memberDecl;
-                JCTree retTypeTree = methodDecl.getReturnType();
-
-                // skip constructors
-                if (retTypeTree == null)
-                    continue;
-
-                if (needBody) {
-                    // here we need to 'implement' interface declared methods
-                    Type retType = retTypeTree.type;
-
-                    List<JCStatement> bodyStatements = List.<JCStatement>nil();
-                    if (retType.getTag() != TypeTag.VOID)
-                        bodyStatements = List.<JCStatement>of(
-                                             make.Return(
-                                                 make.Literal(
-                                                     retType.isPrimitive() ?
-                                                         retType.getTag() :
-                                                         TypeTag.BOT,
-                                                     new Integer(0))));
-
-                    JCBlock body = make.Block(0, bodyStatements);
-
-                    methodDecl = make.MethodDef(
-                                     methodDecl.getModifiers(),
-                                     methodDecl.getName(),
-                                     (JCExpression)methodDecl.getReturnType(),
-                                     methodDecl.getTypeParameters(),
-                                     methodDecl.getReceiverParameter(),
-                                     methodDecl.getParameters(),
-                                     methodDecl.getThrows(),
-                                     body,
-                                     (JCExpression)methodDecl.getDefaultValue());
-                }
-
-                methods.add(methodDecl);
-            }
-        }
-        return methods;
-    }
-
-    void fixConstructorNames(JCClassDecl baseDecl) {
-        ListBuffer<JCTree> newMembers = new ListBuffer<>();
-        List<JCTree> members = baseDecl.getMembers();
-        Name name = baseDecl.getSimpleName();
-
-        for (JCTree memberDecl : members) {
-            JCTree newDecl = memberDecl;
-
-            if (memberDecl instanceof JCMethodDecl) {
-                JCMethodDecl methodDecl = (JCMethodDecl)memberDecl;
-                JCTree retTypeTree = methodDecl.getReturnType();
-
-                if (retTypeTree == null)
-                    newDecl = make.MethodDef(
-                                  methodDecl.getModifiers(),
-                                  name,
-                                  (JCExpression)methodDecl.getReturnType(),
-                                  methodDecl.getTypeParameters(),
-                                  methodDecl.getReceiverParameter(),
-                                  methodDecl.getParameters(),
-                                  methodDecl.getThrows(),
-                                  methodDecl.getBody(),
-                                  (JCExpression)methodDecl.getDefaultValue());
-            }
-
-            newMembers.add(newDecl);
-        }
-
-        baseDecl.defs = newMembers.toList();
-    }
-
-    List<JCVariableDecl> processParams(String paramTypes) {
-
-        if ("none".equals(paramTypes))
-            return List.<JCVariableDecl>nil(); // empty
-
-        String[] typesArr = paramTypes.split(",(?!(\\w+,)*\\w+>)");
-        ListBuffer<JCVariableDecl> paramsDecls = new ListBuffer<>();
-
-        int i = 0;
-        for (String typeName : typesArr) {
-            String paramName = "param"
-                               + (typesArr.length == 1 ? "" : String.valueOf(i));
-            paramsDecls.add(
-                make.VarDef(make.Modifiers(0),
-                             names.fromString(paramName),
-                             make.Type(getTypeByName(typeName)),
-                             null));
-            i++;
-        }
-
-        return paramsDecls.toList();
-    }
-
-    //
-    // util methods
-    //
-
-    String getUniqName(String name) {
-        if (!nameIndex.containsKey(name))
-            nameIndex.put(name, new Integer(0));
-        Integer index = nameIndex.get(name);
-        String uniqName = name + index;
-        nameIndex.put(name, index + 1);
-        return uniqName;
-    }
-
-    int getUniqIndex(Hashtable<String, Integer> scope, String name) {
-        if (!scope.containsKey(name))
-            scope.put(name, new Integer(0));
-        Integer index = scope.get(name);
-        scope.put(name, index + 1);
-        return index;
-    }
-
-    long getFlagByName(String modifierName) {
-        switch (modifierName) {
-            case "public":
-                return Flags.PUBLIC;
-            case "private":
-                return Flags.PRIVATE;
-            case "protected":
-                return Flags.PROTECTED;
-            case "static":
-                return Flags.STATIC;
-            case "final":
-                return Flags.FINAL;
-            case "abstract":
-                return Flags.ABSTRACT;
-            case "strictfp":
-                return Flags.STRICTFP;
-            default:
-                return 0;
-        }
-    }
-
-    Type getTypeByName(String typeName) {
-        //check for primitive types
-        switch (typeName) {
-            case "void":
-                return syms.voidType;
-            case "boolean":
-                return syms.booleanType;
-            case "byte":
-                return syms.byteType;
-            case "char":
-                return syms.charType;
-            case "double":
-                return syms.doubleType;
-            case "float":
-                return syms.floatType;
-            case "int":
-                return syms.intType;
-            case "long":
-                return syms.longType;
-            default:
-                return getTypeByName(typeName, List.<Type>nil());
-        }
-    }
-
-    Type getTypeByName(String typeName, List<Type> tparams) {
-        return new Type.ClassType(
-                   Type.noType,
-                   tparams,
-                   new Symbol.ClassSymbol(0, names.fromString(typeName), null));
-    }
-}
--- a/langtools/test/tools/javadoc/sampleapi/lib/sampleapi/util/PoorDocCommentTable.java	Thu Jun 02 21:14:40 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 2015, 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 sampleapi.util;
-
-import java.util.HashMap;
-
-import com.sun.tools.javac.parser.Tokens.Comment;
-import com.sun.tools.javac.tree.DCTree.DCDocComment;
-import com.sun.tools.javac.tree.DocCommentTable;
-import com.sun.tools.javac.tree.JCTree;
-
-/*
- * This class is replica of LazyDocCommentTable from com.sun.tools.javac.parser
- * package. It's created due to restrictions of LazyDocCommentTable (cannot be
- * used outside the package) and implements minimal functionality necessary
- * for doc comment generation purposes.
- */
-public class PoorDocCommentTable implements DocCommentTable {
-
-    HashMap<JCTree, Comment> table;
-
-    public PoorDocCommentTable() {
-        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 DCDocComment getCommentTree(JCTree tree) {
-        return null; // no need for generator purposes, Pretty does not call it
-    }
-
-    public void putComment(JCTree tree, Comment c) {
-        table.put(tree, c);
-    }
-}
--- a/langtools/test/tools/javadoc/sampleapi/lib/sampleapi/util/SimpleMultiplier.java	Thu Jun 02 21:14:40 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2015, 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 sampleapi.util;
-
-import java.util.StringTokenizer;
-import java.util.ArrayList;
-
-/*
- * The class implements unknown number of nested loops. The number of modifiers
- * in class/interface definitions could be any size. Annotations are also multiplied
- * by this class.
- * That is, dataset xml can provide any number of modifier sets, and generator should
- * iterate through all possible modifiers, annotations and types combinations.
- *
- * For example, class definition xml provides 3 modifiers sets:
- *
- * "public,private"
- * "static"
- * "final,abstract"
- *
- * and one types set "void,int"
- *
- * the class will generate the sequence like:
- * "public static final void"
- * "public static final int"
- * "public static abstract void"
- * "public static abstract int"
- * "private static final void"
- * "private static final int"
- * "private static abstract void"
- * "private static abstract int".
- *
- * This sequence could be processed by just one loop instead of four.
- *
- * In other places where the number of possible positions are known,
- * the generator uses nested loops instead.
- */
-public class SimpleMultiplier {
-
-    ArrayList<ArrayList<String>> valueSpace = new ArrayList<>();
-
-    int size = 0;
-    int index = 0;
-
-    public void addAxis(String values) {
-        ArrayList<String> valueAxis = new ArrayList<>();
-        StringTokenizer valuesTokens = new StringTokenizer(values, "|");
-        while (valuesTokens.hasMoreTokens())
-            valueAxis.add(valuesTokens.nextToken());
-        valueSpace.add(valueAxis);
-    }
-
-    public void initIterator() {
-        if (!valueSpace.isEmpty()) {
-            size = 1;
-            for (int i = 0; i < valueSpace.size(); i++)
-                size *= valueSpace.get(i).size();
-        }
-        index = 0;
-    }
-
-    public boolean hasNext() {
-        return index < size;
-    }
-
-    public ArrayList<String> getNext() {
-        ArrayList<String> next = new ArrayList<>();
-        int positionIndex = index;
-
-        // last added changing faster
-        for (int i = valueSpace.size() - 1; i >= 0; i--) {
-            ArrayList<String> valueAxis = valueSpace.get(i);
-            int axisSize = valueAxis.size();
-            next.add(valueAxis.get(positionIndex % axisSize));
-            positionIndex /= axisSize;
-        }
-        index += 1;
-
-        return next;
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/sampleapi/res/fx.xml	Thu Jun 02 17:31:38 2016 -0700
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2015, 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 name="sampleapi.fx" style="fx">
+
+    <class basename="FXClass">
+        <modifier>public</modifier>
+        <member>
+            <field basename="id">
+                <modifier>public</modifier>
+                <type>int|boolean</type>
+            </field>
+            <method basename="setProp">
+                <modifier>public|protected|private</modifier>
+                <param>int|String</param>
+                <type>void</type>
+            </method>
+            <method basename="getProp">
+                <modifier>public|protected|private</modifier>
+                <type>int|int|String</type>
+            </method>
+        </member>
+    </class>
+
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/sampleapi/res/simple.xml	Thu Jun 02 17:31:38 2016 -0700
@@ -0,0 +1,529 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2015, 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 name="sampleapi.simple">
+
+    <class basename="SampleClass" id="baseclass">
+        <modifier>public</modifier>
+        <modifier>none|abstract</modifier>
+        <member>
+            <field basename="field">
+                <modifier>none|public</modifier>
+                <modifier>none|static</modifier>
+                <modifier>none|final</modifier>
+                <type>boolean|int|String</type>
+            </field>
+            <field basename="field">
+                <modifier>protected|private</modifier>
+                <type>String</type>
+            </field>
+            <constructor>
+                <modifier>public</modifier>
+                <param>none|int|int,boolean|int,String</param>
+            </constructor>
+            <constructor>
+                <modifier>public</modifier>
+                <param>String</param>
+                <throw>NullPointerException</throw>
+                <throw>SampleException0</throw>
+            </constructor>
+            <method basename="set">
+                <modifier>public</modifier>
+                <type>void</type>
+                <param>int</param>
+            </method>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>int|boolean|String</type>
+            </method>
+            <method basename="doSomething">
+                <modifier>public</modifier>
+                <type>void|int</type>
+                <param>none|int|Object,int</param>
+                <throw>NullPointerException</throw>
+                <throw>ArithmeticException</throw>
+            </method>
+        </member>
+    </class>
+
+    <class basename="Derived">
+        <modifier>public</modifier>
+        <extend id="baseclass"/>
+        <member>
+            <field basename="myField">
+                <modifier>public</modifier>
+                <type>int|boolean</type>
+            </field>
+            <constructor>
+                <modifier>public</modifier>
+                <param>none|int|int,boolean|int,String</param>
+            </constructor>
+            <method basename="myGet">
+                <modifier>public</modifier>
+                <type>int|boolean</type>
+            </method>
+        </member>
+    </class>
+
+    <class basename="SampleSerial">
+        <import>java.io.Serializable</import>
+        <modifier>public</modifier>
+        <implement ref="Serializable"/>
+        <member>
+            <field basename="specialData">
+                <modifier>private|none|public</modifier>
+                <type>boolean|int|String</type>
+            </field>
+        </member>
+    </class>
+
+    <class basename="SampleSerial">
+        <import>java.io.Serializable</import>
+        <import>java.io.ObjectStreamField</import>
+        <modifier>public</modifier>
+        <implement ref="Serializable"/>
+        <member>
+            <serialfield basename="serialField">String,Long,Boolean</serialfield>
+            <method basename="justToBeHere">
+                <modifier>public</modifier>
+                <type>String|long|boolean</type>
+            </method>
+        </member>
+    </class>
+
+    <class basename="SampleSerial">
+        <import>java.io.Serializable</import>
+        <import>java.io.ObjectOutputStream</import>
+        <import>java.io.ObjectOutput</import>
+        <import>java.io.IOException</import>
+        <import>java.io.ObjectStreamException</import>
+        <modifier>public</modifier>
+        <implement ref="Serializable"/>
+        <member>
+            <method name="writeObject">
+                <modifier>private</modifier>
+                <param>ObjectOutputStream</param>
+                <type>void</type>
+                <throw>IOException</throw>
+            </method>
+            <method name="writeExternal">
+                <modifier>public</modifier>
+                <param>ObjectOutput</param>
+                <type>void</type>
+                <throw>IOException</throw>
+            </method>
+            <method name="writeReplace">
+                <modifier>protected</modifier>
+                <param>none</param>
+                <type>Object</type>
+                <throw>ObjectStreamException</throw>
+            </method>
+            <method name="writeSomethingElse">
+                <modifier>public</modifier>
+                <param>Object</param>
+                <type>void</type>
+                <throw>IOException</throw>
+            </method>
+        </member>
+    </class>
+
+    <class basename="SampleSerial">
+        <import>java.io.Serializable</import>
+        <import>java.io.ObjectInputStream</import>
+        <import>java.io.ObjectInput</import>
+        <import>java.io.IOException</import>
+        <import>java.io.ObjectStreamException</import>
+        <modifier>public</modifier>
+        <implement ref="Serializable"/>
+        <member>
+            <method name="readObject">
+                <modifier>private</modifier>
+                <param>ObjectInputStream</param>
+                <type>void</type>
+                <throw>IOException</throw>
+                <throw>ClassNotFoundException</throw>
+            </method>
+            <method name="readExternal">
+                <modifier>public</modifier>
+                <param>ObjectInput</param>
+                <type>void</type>
+                <throw>IOException</throw>
+            </method>
+            <method name="readResolve">
+                <modifier>protected</modifier>
+                <param>none</param>
+                <type>Object</type>
+                <throw>ObjectStreamException</throw>
+            </method>
+            <method name="readSomethingElse">
+                <modifier>public</modifier>
+                <param>Object</param>
+                <type>void</type>
+                <throw>IOException</throw>
+            </method>
+        </member>
+    </class>
+
+    <class basename="Container">
+        <modifier>public</modifier>
+        <member>
+            <class basename="Inner">
+                <modifier>public</modifier>
+                <member>
+                    <field basename="value">
+                        <modifier>public</modifier>
+                        <type>int</type>
+                    </field>
+                </member>
+            </class>
+            <class basename="Nested">
+                <modifier>public</modifier>
+                <modifier>static</modifier>
+            </class>
+            <interface basename="EventListener">
+                <modifier>public</modifier>
+                <modifier>static</modifier>
+                <member>
+                    <method basename="onEvent">
+                         <modifier>public</modifier>
+                         <type>void</type>
+                    </method>
+                </member>
+            </interface>
+        </member> 
+    </class>
+
+    <!-- Errors and exceptions -->
+    <class basename="SampleError">
+        <modifier>public</modifier>
+        <extend ref="java.lang.Error"/>
+        <member>
+            <field basename="errorInfo">
+                <modifier>private</modifier>
+                <type>boolean|int|String</type>
+            </field>
+            <constructor>
+                <modifier>public</modifier>
+                <param>String</param>
+            </constructor>
+            <method basename="getSampleData">
+                <modifier>public</modifier>
+                <type>int|String</type>
+            </method>
+        </member>
+    </class>
+
+    <class basename="SampleException">
+        <modifier>public</modifier>
+        <extend ref="java.lang.Exception"/>
+        <member>
+            <field basename="exceptionInfo">
+                <modifier>private</modifier>
+                <type>boolean|int|String</type>
+            </field>
+            <constructor>
+                <modifier>public</modifier>
+                <param>String</param>
+            </constructor>
+            <method basename="getSampleData">
+                <modifier>public</modifier>
+                <type>int|String</type>
+            </method>
+        </member>
+    </class>
+
+    <interface basename="SampleInterface" id="baseinterface">
+        <modifier>public|none</modifier>
+        <member>
+            <method basename="method">
+                <modifier>public</modifier>
+                <type>void|int|Object</type>
+            </method>
+        </member>
+    </interface>
+
+    <class basename="Implementor">
+        <modifier>public</modifier>
+        <implement id="baseinterface"/>
+        <member>
+            <field basename="myField">
+                <modifier>public</modifier>
+                <type>int|boolean</type>
+            </field>
+            <method basename="myGet">
+                <modifier>public</modifier>
+                <type>int|boolean</type>
+            </method>
+        </member>
+    </class>
+
+    <class basename="GenericClass" tparam="T">
+        <import>java.util.List</import>
+        <modifier>public</modifier>
+        <member>
+            <method basename="put">
+                <modifier>public</modifier>
+                <type>void</type>
+                <param>T</param>
+            </method>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>T</type>
+                <param>int</param>
+            </method>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>List&lt;T&gt;</type>
+            </method>
+        </member>
+    </class>
+
+    <class basename="GenericClass" tparam="K,V">
+        <import>java.util.Set</import>
+        <import>java.util.List</import>
+        <import>java.util.Map</import>
+        <modifier>public</modifier>
+        <member>
+            <method basename="put">
+                <modifier>public</modifier>
+                <type>void</type>
+                <param>K,V</param>
+            </method>
+            <method basename="putMap">
+                <modifier>public</modifier>
+                <type>void</type>
+                <param>Map&lt;K,V&gt;</param>
+            </method>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>V</type>
+                <param>K</param>
+            </method>
+            <method basename="getV">
+                <modifier>public</modifier>
+                <type>Set&lt;V&gt;|List&lt;V&gt;</type>
+            </method>
+            <method basename="getK">
+                <modifier>public</modifier>
+                <type>Set&lt;K&gt;|List&lt;K&gt;</type>
+            </method>
+        </member>
+    </class>
+
+    <class basename="GenericClass" tparam="M,N,O">
+        <import>java.util.Set</import>
+        <import>java.util.List</import>
+        <import>java.util.Map</import>
+        <modifier>public</modifier>
+        <member>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>Set&lt;M&gt;|List&lt;M&gt;</type>
+                <param>Map&lt;N,O&gt;</param>
+            </method>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>Set&lt;N&gt;|List&lt;N&gt;</type>
+                <param>Map&lt;M,O&gt;</param>
+            </method>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>Set&lt;O&gt;|List&lt;O&gt;</type>
+                <param>Map&lt;M,N&gt;</param>
+            </method>
+        </member>
+    </class>
+
+    <class basename="GenericUtil"> <!-- public static generic methods like Collections -->
+        <import>java.util.Set</import>
+        <import>java.util.List</import>
+        <import>java.util.Map</import>
+        <import>java.util.function.Supplier</import>
+        <modifier>public</modifier>
+        <member>
+            <method tparam="E" basename="getSomething">
+                <modifier>public</modifier>
+                <modifier>static</modifier>
+                <type>Set&lt;? extends E&gt;|List&lt;? extends E&gt;</type>
+            </method>
+            <method tparam="V,K" basename="getMore">
+                <modifier>public|private</modifier>
+                <modifier>static</modifier>
+                <type>Map&lt;V,K&gt;</type>
+            </method>
+            <method tparam="E" basename="doSomething">
+                <modifier>public</modifier>
+                <modifier>static</modifier>
+                <type>void</type>
+                <param>E</param>
+            </method>
+            <method tparam="X extends Throwable" basename="orElseThrow">
+                <modifier>public|private</modifier>
+                <modifier>static</modifier>
+                <type>X</type>
+                <param>Supplier&lt;? extends X&gt;</param>
+                <throw>X</throw>
+            </method>
+        </member>
+    </class>
+
+    <enum basename="SampleEnum">
+        <modifier>public</modifier>
+        <member>
+            <constant basename="VALUE" count="3"/>
+        </member>
+    </enum>
+        
+    <enum basename="SampleEnum">
+        <modifier>public</modifier>
+        <member>
+            <constant basename="VALUE" count="2"/>
+            <constant basename="NOVALUE" count="1"/>
+            <field basename="field">
+                <modifier>private</modifier>
+                <type>int|String</type>
+            </field>
+            <method basename="method">
+                <modifier>public</modifier>
+                <type>void|String</type>
+            </method>
+        </member>
+    </enum>
+
+    <annodecl id="documented">
+        <class>Documented</class>
+    </annodecl>
+
+    <annodecl id="reten-source">
+        <class>Retention</class>
+        <arg name="value" value="RetentionPolicy.SOURCE"/>
+    </annodecl>
+
+    <annodecl id="reten-class">
+        <class>Retention</class>
+        <arg name="value" value="RetentionPolicy.CLASS"/>
+    </annodecl>
+
+    <annodecl id="reten-runtime">
+        <class>Retention</class>
+        <arg name="value" value="RetentionPolicy.RUNTIME"/>
+    </annodecl>
+
+    <annodecl id="target-method">
+        <class>Target</class>
+        <arg value="ElementType.METHOD"/>
+    </annodecl>
+
+    <annodecl id="target-field">
+        <class>Target</class>
+        <arg value="ElementType.FIELD"/>
+    </annodecl>
+
+    <annodecl id="target-type">
+        <class>Target</class>
+        <arg value="{ElementType.TYPE, ElementType.TYPE_USE}"/>
+    </annodecl>
+
+    <annotation basename="AnnotatedAnno">
+        <import>java.lang.annotation.Documented</import>
+        <anno>@documented</anno>
+        <modifier>public</modifier>
+        <member>
+            <method basename="value">
+                <modifier>public</modifier>
+                <type>boolean|String</type>
+            </method>
+        </member>
+    </annotation>
+
+    <annotation basename="AnnotatedAnno">
+        <import>java.lang.annotation.Retention</import>
+        <import>java.lang.annotation.RetentionPolicy</import>
+        <anno>@reten-source|@reten-class|@reten-runtime</anno>
+        <modifier>public</modifier>
+        <member>
+            <method basename="value">
+                <modifier>public</modifier>
+                <type>int</type>
+            </method>
+        </member>
+    </annotation>
+
+    <class basename="AnnoContainer">
+        <import>java.lang.annotation.Retention</import>
+        <import>java.lang.annotation.RetentionPolicy</import>
+        <import>java.lang.annotation.Target</import>
+        <import>java.lang.annotation.ElementType</import>
+        <modifier>public</modifier>
+        <member>
+            <annotation basename="AnnotatedAnno">
+                <anno>@reten-source|@reten-class|@reten-runtime</anno>
+                <anno>@target-method|@target-field|@target-type</anno>
+                <modifier>public</modifier>
+                <modifier>static</modifier>
+                <member>
+                    <method basename="value">
+                        <modifier>public</modifier>
+                        <type>String</type>
+                    </method>
+                </member>
+            </annotation>
+        </member>
+    </class>
+
+    <annodecl id="deprecated">
+        <class>Deprecated</class>
+    </annodecl>
+
+    <annodecl id="safevarargs">
+        <class>SafeVarargs</class>
+    </annodecl>
+
+    <annodecl id="suppresswarnings">
+        <class>SuppressWarnings</class>
+        <arg value="{&quot;unchecked&quot;, &quot;rawtypes&quot;}"/>
+    </annodecl>
+
+    <class basename="AnnotatedClass">
+        <modifier>public</modifier>
+        <member>
+            <method basename="deprecatedMethod">
+                <anno>@deprecated</anno>
+                <modifier>public</modifier>
+                <type>void</type>
+            </method>
+            <method basename="safeVarargsMethod">
+                <anno>@safevarargs</anno>
+                <modifier>public</modifier>
+                <type>void|int</type>
+                <param>String...</param>
+            </method>
+            <method basename="suppressWarningsMethod">
+                <anno>@suppresswarnings</anno>
+                <modifier>public</modifier>
+                <type>void</type>
+                <param>int|Object</param>
+            </method>
+        </member>
+    </class>
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/sampleapi/res/sub.xml	Thu Jun 02 17:31:38 2016 -0700
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2016, 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 name="sampleapi.simple.sub">
+
+    <class basename="SClass">
+        <modifier>public</modifier>
+        <modifier>none|abstract</modifier>
+        <implement>SInterface0</implement>
+        <member>
+            <field basename="id">
+                <modifier>public</modifier>
+                <type>int</type>
+            </field>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>int</type>
+                <throw>SException0</throw>
+            </method>
+            <method basename="put">
+                <modifier>public</modifier>
+                <param>int</param>
+                <type>void</type>
+                <throw>SException0</throw>
+            </method>
+        </member>
+    </class>
+
+    <class basename="SException">
+        <modifier>public</modifier>
+        <extend ref="java.lang.Exception"/>
+        <member>
+            <constructor>
+                <modifier>public</modifier>
+                <param>String</param>
+            </constructor>
+        </member>
+    </class>
+
+    <interface basename="SInterface">
+        <modifier>public</modifier>
+        <member>
+            <method basename="put">
+                <modifier>public</modifier>
+                <type>void</type>
+                <param>int</param>
+            </method>
+        </member>
+    </interface>
+
+    <enum basename="SEnum">
+        <modifier>public</modifier>
+        <member>
+            <constant basename="ON" count="1"/>
+            <constant basename="OFF" count="1"/>
+        </member>
+    </enum>
+
+    <annotation basename="SAnno">
+        <modifier>public</modifier>
+        <member>
+            <method basename="value">
+                <modifier>public</modifier>
+                <type>boolean</type>
+            </method>
+        </member>
+    </annotation>
+        
+</package>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javadoc/sampleapi/res/tiny.xml	Thu Jun 02 17:31:38 2016 -0700
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2015, 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 name="sampleapi.tiny">
+
+    <class basename="TinyClass">
+        <modifier>public</modifier>
+        <modifier>none|abstract</modifier>
+        <member>
+            <field basename="id">
+                <modifier>public</modifier>
+                <type>int</type>
+            </field>
+            <method basename="get">
+                <modifier>public</modifier>
+                <type>int</type>
+            </method>
+        </member>
+    </class>
+
+    <interface basename="TinyInterface">
+        <modifier>public</modifier>
+        <member>
+            <method basename="put">
+                <modifier>public</modifier>
+                <type>void</type>
+                <param>int</param>
+            </method>
+        </member>
+    </interface>
+
+    <enum basename="TinyEnum">
+        <modifier>public</modifier>
+        <member>
+            <constant basename="YES" count="1"/>
+            <constant basename="NO" count="1"/>
+            <constant basename="MAYBE" count="1"/>
+        </member>
+    </enum>
+
+    <annotation basename="TinyAnno">
+        <modifier>public</modifier>
+        <member>
+            <method basename="value">
+                <modifier>public</modifier>
+                <type>boolean</type>
+            </method>
+        </member>
+    </annotation>
+        
+</package>
--- a/langtools/test/tools/javadoc/sampleapi/res/xml/fx.xml	Thu Jun 02 21:14:40 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (c) 2015, 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.
--->
-<dataset package="sampleapi.fx" style="fx">
-
-    <class basename="FXClass">
-        <modifier>public</modifier>
-        <member>
-            <field basename="id">
-                <modifier>public</modifier>
-                <type>int|boolean</type>
-            </field>
-            <method basename="setProp">
-                <modifier>public|protected|private</modifier>
-                <param>int|String</param>
-                <type>void</type>
-            </method>
-            <method basename="getProp">
-                <modifier>public|protected|private</modifier>
-                <type>int|int|String</type>
-            </method>
-        </member>
-    </class>
-
-</dataset>
--- a/langtools/test/tools/javadoc/sampleapi/res/xml/simple.xml	Thu Jun 02 21:14:40 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,529 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (c) 2015, 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.
--->
-<dataset package="sampleapi.simple">
-
-    <class basename="SampleClass" id="baseclass">
-        <modifier>public</modifier>
-        <modifier>none|abstract</modifier>
-        <member>
-            <field basename="field">
-                <modifier>none|public</modifier>
-                <modifier>none|static</modifier>
-                <modifier>none|final</modifier>
-                <type>boolean|int|String</type>
-            </field>
-            <field basename="field">
-                <modifier>protected|private</modifier>
-                <type>String</type>
-            </field>
-            <constructor>
-                <modifier>public</modifier>
-                <param>none|int|int,boolean|int,String</param>
-            </constructor>
-            <constructor>
-                <modifier>public</modifier>
-                <param>String</param>
-                <throw>NullPointerException</throw>
-                <throw>SampleException0</throw>
-            </constructor>
-            <method basename="set">
-                <modifier>public</modifier>
-                <type>void</type>
-                <param>int</param>
-            </method>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>int|boolean|String</type>
-            </method>
-            <method basename="doSomething">
-                <modifier>public</modifier>
-                <type>void|int</type>
-                <param>none|int|Object,int</param>
-                <throw>NullPointerException</throw>
-                <throw>ArithmeticException</throw>
-            </method>
-        </member>
-    </class>
-
-    <class basename="Derived">
-        <modifier>public</modifier>
-        <extend id="baseclass"/>
-        <member>
-            <field basename="myField">
-                <modifier>public</modifier>
-                <type>int|boolean</type>
-            </field>
-            <constructor>
-                <modifier>public</modifier>
-                <param>none|int|int,boolean|int,String</param>
-            </constructor>
-            <method basename="myGet">
-                <modifier>public</modifier>
-                <type>int|boolean</type>
-            </method>
-        </member>
-    </class>
-
-    <class basename="SampleSerial">
-        <import>java.io.Serializable</import>
-        <modifier>public</modifier>
-        <implement ref="Serializable"/>
-        <member>
-            <field basename="specialData">
-                <modifier>private|none|public</modifier>
-                <type>boolean|int|String</type>
-            </field>
-        </member>
-    </class>
-
-    <class basename="SampleSerial">
-        <import>java.io.Serializable</import>
-        <import>java.io.ObjectStreamField</import>
-        <modifier>public</modifier>
-        <implement ref="Serializable"/>
-        <member>
-            <serialfield basename="serialField">String,Long,Boolean</serialfield>
-            <method basename="justToBeHere">
-                <modifier>public</modifier>
-                <type>String|long|boolean</type>
-            </method>
-        </member>
-    </class>
-
-    <class basename="SampleSerial">
-        <import>java.io.Serializable</import>
-        <import>java.io.ObjectOutputStream</import>
-        <import>java.io.ObjectOutput</import>
-        <import>java.io.IOException</import>
-        <import>java.io.ObjectStreamException</import>
-        <modifier>public</modifier>
-        <implement ref="Serializable"/>
-        <member>
-            <method name="writeObject">
-                <modifier>private</modifier>
-                <param>ObjectOutputStream</param>
-                <type>void</type>
-                <throw>IOException</throw>
-            </method>
-            <method name="writeExternal">
-                <modifier>public</modifier>
-                <param>ObjectOutput</param>
-                <type>void</type>
-                <throw>IOException</throw>
-            </method>
-            <method name="writeReplace">
-                <modifier>protected</modifier>
-                <param>none</param>
-                <type>Object</type>
-                <throw>ObjectStreamException</throw>
-            </method>
-            <method name="writeSomethingElse">
-                <modifier>public</modifier>
-                <param>Object</param>
-                <type>void</type>
-                <throw>IOException</throw>
-            </method>
-        </member>
-    </class>
-
-    <class basename="SampleSerial">
-        <import>java.io.Serializable</import>
-        <import>java.io.ObjectInputStream</import>
-        <import>java.io.ObjectInput</import>
-        <import>java.io.IOException</import>
-        <import>java.io.ObjectStreamException</import>
-        <modifier>public</modifier>
-        <implement ref="Serializable"/>
-        <member>
-            <method name="readObject">
-                <modifier>private</modifier>
-                <param>ObjectInputStream</param>
-                <type>void</type>
-                <throw>IOException</throw>
-                <throw>ClassNotFoundException</throw>
-            </method>
-            <method name="readExternal">
-                <modifier>public</modifier>
-                <param>ObjectInput</param>
-                <type>void</type>
-                <throw>IOException</throw>
-            </method>
-            <method name="readResolve">
-                <modifier>protected</modifier>
-                <param>none</param>
-                <type>Object</type>
-                <throw>ObjectStreamException</throw>
-            </method>
-            <method name="readSomethingElse">
-                <modifier>public</modifier>
-                <param>Object</param>
-                <type>void</type>
-                <throw>IOException</throw>
-            </method>
-        </member>
-    </class>
-
-    <class basename="Container">
-        <modifier>public</modifier>
-        <member>
-            <class basename="Inner">
-                <modifier>public</modifier>
-                <member>
-                    <field basename="value">
-                        <modifier>public</modifier>
-                        <type>int</type>
-                    </field>
-                </member>
-            </class>
-            <class basename="Nested">
-                <modifier>public</modifier>
-                <modifier>static</modifier>
-            </class>
-            <interface basename="EventListener">
-                <modifier>public</modifier>
-                <modifier>static</modifier>
-                <member>
-                    <method basename="onEvent">
-                         <modifier>public</modifier>
-                         <type>void</type>
-                    </method>
-                </member>
-            </interface>
-        </member> 
-    </class>
-
-    <!-- Errors and exceptions -->
-    <class basename="SampleError">
-        <modifier>public</modifier>
-        <extend ref="java.lang.Error"/>
-        <member>
-            <field basename="errorInfo">
-                <modifier>private</modifier>
-                <type>boolean|int|String</type>
-            </field>
-            <constructor>
-                <modifier>public</modifier>
-                <param>String</param>
-            </constructor>
-            <method basename="getSampleData">
-                <modifier>public</modifier>
-                <type>int|String</type>
-            </method>
-        </member>
-    </class>
-
-    <class basename="SampleException">
-        <modifier>public</modifier>
-        <extend ref="java.lang.Exception"/>
-        <member>
-            <field basename="exceptionInfo">
-                <modifier>private</modifier>
-                <type>boolean|int|String</type>
-            </field>
-            <constructor>
-                <modifier>public</modifier>
-                <param>String</param>
-            </constructor>
-            <method basename="getSampleData">
-                <modifier>public</modifier>
-                <type>int|String</type>
-            </method>
-        </member>
-    </class>
-
-    <interface basename="SampleInterface" id="baseinterface">
-        <modifier>public|none</modifier>
-        <member>
-            <method basename="method">
-                <modifier>public</modifier>
-                <type>void|int|Object</type>
-            </method>
-        </member>
-    </interface>
-
-    <class basename="Implementor">
-        <modifier>public</modifier>
-        <implement id="baseinterface"/>
-        <member>
-            <field basename="myField">
-                <modifier>public</modifier>
-                <type>int|boolean</type>
-            </field>
-            <method basename="myGet">
-                <modifier>public</modifier>
-                <type>int|boolean</type>
-            </method>
-        </member>
-    </class>
-
-    <class basename="GenericClass" tparam="T">
-        <import>java.util.List</import>
-        <modifier>public</modifier>
-        <member>
-            <method basename="put">
-                <modifier>public</modifier>
-                <type>void</type>
-                <param>T</param>
-            </method>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>T</type>
-                <param>int</param>
-            </method>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>List&lt;T&gt;</type>
-            </method>
-        </member>
-    </class>
-
-    <class basename="GenericClass" tparam="K,V">
-        <import>java.util.Set</import>
-        <import>java.util.List</import>
-        <import>java.util.Map</import>
-        <modifier>public</modifier>
-        <member>
-            <method basename="put">
-                <modifier>public</modifier>
-                <type>void</type>
-                <param>K,V</param>
-            </method>
-            <method basename="putMap">
-                <modifier>public</modifier>
-                <type>void</type>
-                <param>Map&lt;K,V&gt;</param>
-            </method>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>V</type>
-                <param>K</param>
-            </method>
-            <method basename="getV">
-                <modifier>public</modifier>
-                <type>Set&lt;V&gt;|List&lt;V&gt;</type>
-            </method>
-            <method basename="getK">
-                <modifier>public</modifier>
-                <type>Set&lt;K&gt;|List&lt;K&gt;</type>
-            </method>
-        </member>
-    </class>
-
-    <class basename="GenericClass" tparam="M,N,O">
-        <import>java.util.Set</import>
-        <import>java.util.List</import>
-        <import>java.util.Map</import>
-        <modifier>public</modifier>
-        <member>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>Set&lt;M&gt;|List&lt;M&gt;</type>
-                <param>Map&lt;N,O&gt;</param>
-            </method>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>Set&lt;N&gt;|List&lt;N&gt;</type>
-                <param>Map&lt;M,O&gt;</param>
-            </method>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>Set&lt;O&gt;|List&lt;O&gt;</type>
-                <param>Map&lt;M,N&gt;</param>
-            </method>
-        </member>
-    </class>
-
-    <class basename="GenericUtil"> <!-- public static generic methods like Collections -->
-        <import>java.util.Set</import>
-        <import>java.util.List</import>
-        <import>java.util.Map</import>
-        <import>java.util.function.Supplier</import>
-        <modifier>public</modifier>
-        <member>
-            <method tparam="E" basename="getSomething">
-                <modifier>public</modifier>
-                <modifier>static</modifier>
-                <type>Set&lt;? extends E&gt;|List&lt;? extends E&gt;</type>
-            </method>
-            <method tparam="V,K" basename="getMore">
-                <modifier>public|private</modifier>
-                <modifier>static</modifier>
-                <type>Map&lt;V,K&gt;</type>
-            </method>
-            <method tparam="E" basename="doSomething">
-                <modifier>public</modifier>
-                <modifier>static</modifier>
-                <type>void</type>
-                <param>E</param>
-            </method>
-            <method tparam="X extends Throwable" basename="orElseThrow">
-                <modifier>public|private</modifier>
-                <modifier>static</modifier>
-                <type>X</type>
-                <param>Supplier&lt;? extends X&gt;</param>
-                <throw>X</throw>
-            </method>
-        </member>
-    </class>
-
-    <enum basename="SampleEnum">
-        <modifier>public</modifier>
-        <member>
-            <constant basename="VALUE" count="3"/>
-        </member>
-    </enum>
-        
-    <enum basename="SampleEnum">
-        <modifier>public</modifier>
-        <member>
-            <constant basename="VALUE" count="2"/>
-            <constant basename="NOVALUE" count="1"/>
-            <field basename="field">
-                <modifier>private</modifier>
-                <type>int|String</type>
-            </field>
-            <method basename="method">
-                <modifier>public</modifier>
-                <type>void|String</type>
-            </method>
-        </member>
-    </enum>
-
-    <annodecl id="documented">
-        <class>Documented</class>
-    </annodecl>
-
-    <annodecl id="reten-source">
-        <class>Retention</class>
-        <arg name="value" value="RetentionPolicy.SOURCE"/>
-    </annodecl>
-
-    <annodecl id="reten-class">
-        <class>Retention</class>
-        <arg name="value" value="RetentionPolicy.CLASS"/>
-    </annodecl>
-
-    <annodecl id="reten-runtime">
-        <class>Retention</class>
-        <arg name="value" value="RetentionPolicy.RUNTIME"/>
-    </annodecl>
-
-    <annodecl id="target-method">
-        <class>Target</class>
-        <arg value="ElementType.METHOD"/>
-    </annodecl>
-
-    <annodecl id="target-field">
-        <class>Target</class>
-        <arg value="ElementType.FIELD"/>
-    </annodecl>
-
-    <annodecl id="target-type">
-        <class>Target</class>
-        <arg value="{ElementType.TYPE, ElementType.TYPE_USE}"/>
-    </annodecl>
-
-    <annotation basename="AnnotatedAnno">
-        <import>java.lang.annotation.Documented</import>
-        <anno>@documented</anno>
-        <modifier>public</modifier>
-        <member>
-            <method basename="value">
-                <modifier>public</modifier>
-                <type>boolean|String</type>
-            </method>
-        </member>
-    </annotation>
-
-    <annotation basename="AnnotatedAnno">
-        <import>java.lang.annotation.Retention</import>
-        <import>java.lang.annotation.RetentionPolicy</import>
-        <anno>@reten-source|@reten-class|@reten-runtime</anno>
-        <modifier>public</modifier>
-        <member>
-            <method basename="value">
-                <modifier>public</modifier>
-                <type>int</type>
-            </method>
-        </member>
-    </annotation>
-
-    <class basename="AnnoContainer">
-        <import>java.lang.annotation.Retention</import>
-        <import>java.lang.annotation.RetentionPolicy</import>
-        <import>java.lang.annotation.Target</import>
-        <import>java.lang.annotation.ElementType</import>
-        <modifier>public</modifier>
-        <member>
-            <annotation basename="AnnotatedAnno">
-                <anno>@reten-source|@reten-class|@reten-runtime</anno>
-                <anno>@target-method|@target-field|@target-type</anno>
-                <modifier>public</modifier>
-                <modifier>static</modifier>
-                <member>
-                    <method basename="value">
-                        <modifier>public</modifier>
-                        <type>String</type>
-                    </method>
-                </member>
-            </annotation>
-        </member>
-    </class>
-
-    <annodecl id="deprecated">
-        <class>Deprecated</class>
-    </annodecl>
-
-    <annodecl id="safevarargs">
-        <class>SafeVarargs</class>
-    </annodecl>
-
-    <annodecl id="suppresswarnings">
-        <class>SuppressWarnings</class>
-        <arg value="{&quot;unchecked&quot;, &quot;rawtypes&quot;}"/>
-    </annodecl>
-
-    <class basename="AnnotatedClass">
-        <modifier>public</modifier>
-        <member>
-            <method basename="deprecatedMethod">
-                <anno>@deprecated</anno>
-                <modifier>public</modifier>
-                <type>void</type>
-            </method>
-            <method basename="safeVarargsMethod">
-                <anno>@safevarargs</anno>
-                <modifier>public</modifier>
-                <type>void|int</type>
-                <param>String...</param>
-            </method>
-            <method basename="suppressWarningsMethod">
-                <anno>@suppresswarnings</anno>
-                <modifier>public</modifier>
-                <type>void</type>
-                <param>int|Object</param>
-            </method>
-        </member>
-    </class>
-</dataset>
--- a/langtools/test/tools/javadoc/sampleapi/res/xml/tiny.xml	Thu Jun 02 21:14:40 2016 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (c) 2015, 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.
--->
-<dataset package="sampleapi.tiny">
-
-    <class basename="TinyClass">
-        <modifier>public</modifier>
-        <modifier>none|abstract</modifier>
-        <member>
-            <field basename="id">
-                <modifier>public</modifier>
-                <type>int</type>
-            </field>
-            <method basename="get">
-                <modifier>public</modifier>
-                <type>int</type>
-            </method>
-        </member>
-    </class>
-
-    <interface basename="TinyInterface">
-        <modifier>public</modifier>
-        <member>
-            <method basename="put">
-                <modifier>public</modifier>
-                <type>void</type>
-                <param>int</param>
-            </method>
-        </member>
-    </interface>
-
-    <enum basename="TinyEnum">
-        <modifier>public</modifier>
-        <member>
-            <constant basename="YES" count="1"/>
-            <constant basename="NO" count="1"/>
-            <constant basename="MAYBE" count="1"/>
-        </member>
-    </enum>
-
-    <annotation basename="TinyAnno">
-        <modifier>public</modifier>
-        <member>
-            <method basename="value">
-                <modifier>public</modifier>
-                <type>boolean</type>
-            </method>
-        </member>
-    </annotation>
-        
-</dataset>