Merge
authorlana
Thu, 24 Apr 2014 16:04:44 -0700
changeset 24075 ae887a48401a
parent 24061 d6f7227939bc (current diff)
parent 24074 7a609dde1d05 (diff)
child 24076 ff196ad4eb14
Merge
langtools/make/netbeans/langtools/nbproject/standard-context-menu-items.ent
langtools/make/netbeans/langtools/nbproject/standard-ide-actions.ent
langtools/test/tools/javac/lambda/ErroneousLambdaExpr.java
langtools/test/tools/javac/lambda/ErroneousLambdaExpr.out
--- a/langtools/make/netbeans/langtools/build.xml	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/make/netbeans/langtools/build.xml	Thu Apr 24 16:04:44 2014 -0700
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
- Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
 
  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
@@ -136,11 +136,32 @@
         </antcall>
     </target>
 
-    <target name="-show-jtreg" if="netbeans.home" unless="jtreg.passed">
-        <nbbrowse file="${jtreg.report}/report.html"/>
+    <target name="-show-jtreg-single-detect" if="netbeans.home" unless="jtreg.passed">
+        <dirname property="netbeans.jtreg.tests.dir.temp" file="${jtreg.report}/../work/${jtreg.tests}"/>
+        <basename property="netbeans.jtreg.tests.basename.temp" file="${jtreg.tests}" suffix=".java"/>
+        <property name="netbeans.jtreg.single.jtr" value="${netbeans.jtreg.tests.dir.temp}/${netbeans.jtreg.tests.basename.temp}.jtr"/>
+        <condition property="netbeans.jtreg.single">
+            <available file="${netbeans.jtreg.single.jtr}" />
+        </condition>
+        <condition property="netbeans.jtreg.multiple">
+            <not>
+                <available file="${netbeans.jtreg.single.jtr}" />
+            </not>
+        </condition>
+    </target>
+
+    <target name="-show-jtreg-single" if="netbeans.jtreg.single" depends="-show-jtreg-single-detect">
+        <nbbrowse file="${netbeans.jtreg.single.jtr}"/>
         <fail>Some tests failed; see report for details.</fail>
     </target>
 
+    <target name="-show-jtreg-multiple" if="netbeans.jtreg.multiple" depends="-show-jtreg-single-detect">
+        <nbbrowse url="file://${jtreg.report}/html/report.html#Results"/>
+        <fail>Some tests failed; see report for details.</fail>
+    </target>
+
+    <target name="-show-jtreg" depends="-show-jtreg-single-detect,-show-jtreg-single,-show-jtreg-multiple" />
+
     <!-- Debug tool in NetBeans. -->
 
     <target name="debug" depends="-check-target.java.home,-def-run,-def-start-debugger,-get-tool-and-args,build" if="netbeans.home">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/make/netbeans/langtools/nbproject/project.properties	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,10 @@
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=4
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=4
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=8
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=100
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap=none
+auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=project
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.importGroupsOrder=java;javax;*;static java;static javax;static *
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.importInnerClasses=true
+auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.separateStaticImports=true
--- a/langtools/make/netbeans/langtools/nbproject/project.xml	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/make/netbeans/langtools/nbproject/project.xml	Thu Apr 24 16:04:44 2014 -0700
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
- Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
 
  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
@@ -67,38 +67,7 @@
             </folders>
             <ide-actions>
                 <!--
- Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
-   - Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-
-   - Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in the
-     documentation and/or other materials provided with the distribution.
-
-   - Neither the name of Oracle nor the names of its
-     contributors may be used to endorse or promote products derived
-     from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--->
-                <!--
- This file defines the standard actions accepted by langtools projects.
- It is normally included as an entity into a project's project.xml file.
+ This section defines the standard actions accepted by langtools projects.
 
  For information on these actions, see
    - NetBeans: Setting Up Projects
@@ -156,7 +125,7 @@
                         <pattern>\.(java|sh)$</pattern>
                         <format>relative-path</format>
                         <arity>
-                            <separated-files>,</separated-files>
+                            <separated-files> </separated-files>
                         </arity>
                     </context>
                 </action>
@@ -246,39 +215,8 @@
                 </items>
                 <context-menu>
                     <!--
- Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
-   - Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-
-   - Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in the
-     documentation and/or other materials provided with the distribution.
-
-   - Neither the name of Oracle nor the names of its
-     contributors may be used to endorse or promote products derived
-     from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--->
-                    <!--
- This file defines the actions that will appear on the project's context
+ This section defines the actions that will appear on the project's context
  menu, in the Projects viewer.
- It is normally included as an entity into a project's project.xml file.
 
  For information on these actions, see
    - NetBeans: Setting Up Projects
--- a/langtools/make/netbeans/langtools/nbproject/standard-context-menu-items.ent	Thu Apr 24 12:21:18 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2007, 2009, Oracle and/or its affiliates. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
-   - Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-
-   - Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in the
-     documentation and/or other materials provided with the distribution.
-
-   - Neither the name of Oracle nor the names of its
-     contributors may be used to endorse or promote products derived
-     from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--->
-
-<!-- 
- This file defines the actions that will appear on the project's context
- menu, in the Projects viewer.
- It is normally included as an entity into a project's project.xml file.
-
- For information on these actions, see
-   - NetBeans: Setting Up Projects
-     at http://www.netbeans.org/kb/55/using-netbeans/project_setup.html
-   - NetBeans: Advanced Freeform Project Configuration
-     at http://www.netbeans.org/kb/41/freeform-config.html 
--->
-
-<ide-action name="select-tool"/>
-
-<separator/>
-  
-<ide-action name="build"/>
-<ide-action name="rebuild"/>
-<ide-action name="clean"/>
-<ide-action name="javadoc"/>
-
-<separator/>
-
-<ide-action name="run"/>
-<ide-action name="debug"/>
-
-<separator/>
-
-<ide-action name="test"/>
--- a/langtools/make/netbeans/langtools/nbproject/standard-ide-actions.ent	Thu Apr 24 12:21:18 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2007, 2009, Oracle and/or its affiliates. All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
-   - Redistributions of source code must retain the above copyright
-     notice, this list of conditions and the following disclaimer.
-
-   - Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in the
-     documentation and/or other materials provided with the distribution.
-
-   - Neither the name of Oracle nor the names of its
-     contributors may be used to endorse or promote products derived
-     from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--->
-
-<!-- 
- This file defines the standard actions accepted by langtools projects.
- It is normally included as an entity into a project's project.xml file.
-
- For information on these actions, see
-   - NetBeans: Setting Up Projects
-     at http://www.netbeans.org/kb/55/using-netbeans/project_setup.html
-   - NetBeans: Advanced Freeform Project Configuration
-     at http://www.netbeans.org/kb/41/freeform-config.html 
--->
-
-<action name="build">
-    <target>build</target>
-</action>
-
-<action name="clean">
-    <target>clean</target>
-</action>
-
-<action name="rebuild">
-    <target>clean</target>
-    <target>build</target>
-</action>
-
-<action name="compile.single">
-    <target>compile-single</target>
-    <property name="srcdir">${root}/src/share/classes</property>
-    <context>
-        <property>includes</property>
-        <folder>${root}/src/share/classes</folder>
-        <pattern>\.java$</pattern>
-        <format>relative-path</format>
-        <arity>
-            <separated-files>,</separated-files>
-        </arity>
-    </context>
-</action>
-
-<action name="run">
-    <target>run</target>
-</action>
-
-<action name="run.single">
-    <target>run-single</target>
-    <context>
-        <property>run.classname</property>
-        <folder>${root}/src/share/classes</folder>
-        <pattern>\.java$</pattern>
-        <format>java-name</format>
-        <arity>
-            <one-file-only/>
-        </arity>
-    </context>
-</action>
-
-<!-- 
- Note: NetBeans does not appear to support context menu items
- on shell scripts :-(
--->
-
-<action name="run.single">
-    <target>jtreg</target>
-    <context>
-        <property>jtreg.tests</property>
-        <folder>${root}/test</folder>
-        <pattern>\.(java|sh)$</pattern>
-        <format>relative-path</format>
-        <arity>
-            <separated-files>,</separated-files>
-        </arity>
-    </context>
-</action>
-
-<action name="test">
-    <target>jtreg</target>
-</action>
-
-<action name="debug">
-    <target>debug</target>
-</action>
-
-<action name="debug.single">
-    <target>debug-single</target>
-    <context>
-        <property>debug.classname</property>
-        <folder>${root}/src/share/classes</folder>
-        <pattern>\.java$</pattern>
-        <format>java-name</format>
-        <arity>
-            <one-file-only/>
-        </arity>
-    </context>
-</action>
-
-<!-- 
- Note: NetBeans does not appear to support context menu items
- on shell scripts :-(
--->
-
-<action name="debug.single">
-    <target>debug-jtreg</target>
-    <context>
-        <property>jtreg.tests</property>
-        <folder>${root}/test</folder>
-        <pattern>\.(java|sh)$</pattern>
-        <format>relative-path</format>
-        <arity>
-            <one-file-only/>
-        </arity>
-    </context>
-</action>
-
-<action name="debug.fix">
-    <target>debug-fix</target>
-    <property name="srcdir">${root}/src/share/classes</property>
-    <context>
-        <property>class</property>
-        <folder>${root}/src/share/classes</folder>
-        <pattern>\.java$</pattern>
-        <format>relative-path-noext</format>
-        <arity>
-            <one-file-only/>
-        </arity>
-    </context>
-</action>
-
-<action name="javadoc">
-    <target>javadoc</target>
-</action>
-
-<action name="select-tool">
-    <target>select-tool</target>
-</action>
-
-<action name="test-select-tool-1">
-    <target>test-select-tool-1</target>
-</action>
-
-<action name="test-select-tool-2">
-    <target>test-select-tool-2</target>
-</action>
--- a/langtools/make/tools/genstubs/GenStubs.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/make/tools/genstubs/GenStubs.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -316,7 +316,8 @@
                 }
                 defs.add(def);
             }
-            return m.TopLevel(tree.packageAnnotations, tree.pid, defs.toList());
+            tree.defs = tree.defs.intersect(defs.toList());
+            return tree;
         }
 
         @Override
--- a/langtools/src/share/classes/com/sun/source/tree/CompilationUnitTree.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/source/tree/CompilationUnitTree.java	Thu Apr 24 16:04:44 2014 -0700
@@ -41,6 +41,12 @@
 public interface CompilationUnitTree extends Tree {
     List<? extends AnnotationTree> getPackageAnnotations();
     ExpressionTree getPackageName();
+
+    /**
+     * Return the PackageTree associated with this compilation unit.
+     * @since 1.9
+     */
+    PackageTree getPackage();
     List<? extends ImportTree> getImports();
     List<? extends Tree> getTypeDecls();
     JavaFileObject getSourceFile();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/share/classes/com/sun/source/tree/PackageTree.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 com.sun.source.tree;
+
+import java.util.List;
+
+/**
+ * Represents the package declaration.
+ *
+ * @jls sections 7.3, and 7.4
+ *
+ * @author Paul Govereau
+ * @since 1.9
+ */
+@jdk.Exported
+public interface PackageTree extends Tree {
+    List<? extends AnnotationTree> getAnnotations();
+    ExpressionTree getPackageName();
+}
--- a/langtools/src/share/classes/com/sun/source/tree/Tree.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/source/tree/Tree.java	Thu Apr 24 16:04:44 2014 -0700
@@ -208,6 +208,12 @@
         LAMBDA_EXPRESSION(LambdaExpressionTree.class),
 
         /**
+         * Used for instances of {@link PackageTree}.
+         * @since 1.9
+         */
+        PACKAGE(PackageTree.class),
+
+        /**
          * Used for instances of {@link ParenthesizedTree}.
          */
         PARENTHESIZED(ParenthesizedTree.class),
--- a/langtools/src/share/classes/com/sun/source/tree/TreeVisitor.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/source/tree/TreeVisitor.java	Thu Apr 24 16:04:44 2014 -0700
@@ -88,6 +88,7 @@
     R visitNewArray(NewArrayTree node, P p);
     R visitNewClass(NewClassTree node, P p);
     R visitLambdaExpression(LambdaExpressionTree node, P p);
+    R visitPackage(PackageTree node, P p);
     R visitParenthesized(ParenthesizedTree node, P p);
     R visitReturn(ReturnTree node, P p);
     R visitMemberSelect(MemberSelectTree node, P p);
--- a/langtools/src/share/classes/com/sun/source/util/SimpleTreeVisitor.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/source/util/SimpleTreeVisitor.java	Thu Apr 24 16:04:44 2014 -0700
@@ -65,6 +65,10 @@
         return defaultAction(node, p);
     }
 
+    public R visitPackage(PackageTree node, P p) {
+        return defaultAction(node, p);
+    }
+
     public R visitImport(ImportTree node, P p) {
         return defaultAction(node, p);
     }
--- a/langtools/src/share/classes/com/sun/source/util/TreeScanner.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/source/util/TreeScanner.java	Thu Apr 24 16:04:44 2014 -0700
@@ -114,13 +114,18 @@
  ****************************************************************************/
 
     public R visitCompilationUnit(CompilationUnitTree node, P p) {
-        R r = scan(node.getPackageAnnotations(), p);
-        r = scanAndReduce(node.getPackageName(), p, r);
+        R r = scan(node.getPackage(), p);
         r = scanAndReduce(node.getImports(), p, r);
         r = scanAndReduce(node.getTypeDecls(), p, r);
         return r;
     }
 
+    public R visitPackage(PackageTree node, P p) {
+        R r = scan(node.getAnnotations(), p);
+        r = scanAndReduce(node.getPackageName(), p, r);
+        return r;
+    }
+
     public R visitImport(ImportTree node, P p) {
         return scan(node.getQualifiedIdentifier(), p);
     }
--- a/langtools/src/share/classes/com/sun/tools/doclint/Checker.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclint/Checker.java	Thu Apr 24 16:04:44 2014 -0700
@@ -75,6 +75,7 @@
 import com.sun.source.doctree.UnknownInlineTagTree;
 import com.sun.source.doctree.ValueTree;
 import com.sun.source.doctree.VersionTree;
+import com.sun.source.tree.Tree;
 import com.sun.source.util.DocTreePath;
 import com.sun.source.util.DocTreePathScanner;
 import com.sun.source.util.TreePath;
@@ -145,8 +146,8 @@
 
         boolean isOverridingMethod = !env.currOverriddenMethods.isEmpty();
 
-        if (p.getLeaf() == p.getCompilationUnit()) {
-            // If p points to a compilation unit, the implied declaration is the
+        if (p.getLeaf().getKind() == Tree.Kind.PACKAGE) {
+            // If p points to a package, the implied declaration is the
             // package declaration (if any) for the compilation unit.
             // Handle this case specially, because doc comments are only
             // expected in package-info files.
--- a/langtools/src/share/classes/com/sun/tools/doclint/DocLint.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/doclint/DocLint.java	Thu Apr 24 16:04:44 2014 -0700
@@ -42,6 +42,7 @@
 import com.sun.source.doctree.DocCommentTree;
 import com.sun.source.tree.ClassTree;
 import com.sun.source.tree.CompilationUnitTree;
+import com.sun.source.tree.PackageTree;
 import com.sun.source.tree.MethodTree;
 import com.sun.source.tree.Tree;
 import com.sun.source.tree.VariableTree;
@@ -346,13 +347,10 @@
         abstract void visitDecl(Tree tree, Name name);
 
         @Override
-        public Void visitCompilationUnit(CompilationUnitTree tree, Void ignore) {
-            if (tree.getPackageName() != null) {
-                visitDecl(tree, null);
-            }
-            return super.visitCompilationUnit(tree, ignore);
+        public Void visitPackage(PackageTree tree, Void ignore) {
+            visitDecl(tree, null);
+            return super.visitPackage(tree, ignore);
         }
-
         @Override
         public Void visitClass(ClassTree tree, Void ignore) {
             visitDecl(tree, tree.getSimpleName());
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Attr.java	Thu Apr 24 16:04:44 2014 -0700
@@ -2616,7 +2616,7 @@
          * - an instance field, we use the first constructor.
          * - a static field, we create a fake clinit method.
          */
-        private Env<AttrContext> lambdaEnv(JCLambda that, Env<AttrContext> env) {
+        public Env<AttrContext> lambdaEnv(JCLambda that, Env<AttrContext> env) {
             Env<AttrContext> lambdaEnv;
             Symbol owner = env.info.scope.owner;
             if (owner.kind == VAR && owner.owner.kind == TYP) {
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/DeferredAttr.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,7 @@
 
 package com.sun.tools.javac.comp;
 
-import com.sun.source.tree.MemberReferenceTree;
+import com.sun.source.tree.LambdaExpressionTree.BodyKind;
 import com.sun.tools.javac.code.*;
 import com.sun.tools.javac.tree.*;
 import com.sun.tools.javac.util.*;
@@ -35,10 +35,8 @@
 import com.sun.tools.javac.comp.Attr.ResultInfo;
 import com.sun.tools.javac.comp.Infer.InferenceContext;
 import com.sun.tools.javac.comp.Resolve.MethodResolutionPhase;
-import com.sun.tools.javac.comp.Resolve.ReferenceLookupHelper;
 import com.sun.tools.javac.tree.JCTree.*;
 
-
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.EnumSet;
@@ -48,6 +46,7 @@
 import java.util.Set;
 import java.util.WeakHashMap;
 
+import static com.sun.tools.javac.code.Kinds.VAL;
 import static com.sun.tools.javac.code.TypeTag.*;
 import static com.sun.tools.javac.tree.JCTree.Tag.*;
 
@@ -75,6 +74,8 @@
     final Symtab syms;
     final TreeMaker make;
     final Types types;
+    final Flow flow;
+    final Names names;
 
     public static DeferredAttr instance(Context context) {
         DeferredAttr instance = context.get(deferredAttrKey);
@@ -95,7 +96,8 @@
         syms = Symtab.instance(context);
         make = TreeMaker.instance(context);
         types = Types.instance(context);
-        Names names = Names.instance(context);
+        flow = Flow.instance(context);
+        names = Names.instance(context);
         stuckTree = make.Ident(names.empty).setType(Type.stuckType);
         emptyDeferredAttrContext =
             new DeferredAttrContext(AttrMode.CHECK, null, MethodResolutionPhase.BOX, infer.emptyContext, null, null) {
@@ -138,6 +140,11 @@
             return DEFERRED;
         }
 
+        @Override
+        public String toString() {
+            return "DeferredType";
+        }
+
         /**
          * A speculative cache is used to keep track of all overload resolution rounds
          * that triggered speculative attribution on a given deferred type. Each entry
@@ -376,7 +383,9 @@
         }
     }
     //where
-        protected TreeScanner unenterScanner = new TreeScanner() {
+        protected UnenterScanner unenterScanner = new UnenterScanner();
+
+        class UnenterScanner extends TreeScanner {
             @Override
             public void visitClassDef(JCClassDecl tree) {
                 ClassSymbol csym = tree.sym;
@@ -389,7 +398,7 @@
                 syms.classes.remove(csym.flatname);
                 super.visitClassDef(tree);
             }
-        };
+        }
 
     /**
      * A deferred context is created on each method check. A deferred context is
@@ -593,19 +602,111 @@
             public void visitLambda(JCLambda tree) {
                 Check.CheckContext checkContext = resultInfo.checkContext;
                 Type pt = resultInfo.pt;
-                if (inferenceContext.inferencevars.contains(pt)) {
-                    //ok
-                    return;
-                } else {
+                if (!inferenceContext.inferencevars.contains(pt)) {
                     //must be a functional descriptor
+                    Type descriptorType = null;
                     try {
-                        Type desc = types.findDescriptorType(pt);
-                        if (desc.getParameterTypes().length() != tree.params.length()) {
-                            checkContext.report(tree, diags.fragment("incompatible.arg.types.in.lambda"));
-                        }
+                        descriptorType = types.findDescriptorType(pt);
                     } catch (Types.FunctionDescriptorLookupError ex) {
                         checkContext.report(null, ex.getDiagnostic());
                     }
+
+                    if (descriptorType.getParameterTypes().length() != tree.params.length()) {
+                        checkContext.report(tree,
+                                diags.fragment("incompatible.arg.types.in.lambda"));
+                    }
+
+                    Type currentReturnType = descriptorType.getReturnType();
+                    boolean returnTypeIsVoid = currentReturnType.hasTag(VOID);
+                    if (tree.getBodyKind() == BodyKind.EXPRESSION) {
+                        boolean isExpressionCompatible = !returnTypeIsVoid ||
+                            TreeInfo.isExpressionStatement((JCExpression)tree.getBody());
+                        if (!isExpressionCompatible) {
+                            resultInfo.checkContext.report(tree.pos(),
+                                diags.fragment("incompatible.ret.type.in.lambda",
+                                    diags.fragment("missing.ret.val", currentReturnType)));
+                        }
+                    } else {
+                        LambdaBodyStructChecker lambdaBodyChecker =
+                                new LambdaBodyStructChecker();
+
+                        tree.body.accept(lambdaBodyChecker);
+                        boolean isVoidCompatible = lambdaBodyChecker.isVoidCompatible;
+
+                        if (returnTypeIsVoid) {
+                            if (!isVoidCompatible) {
+                                resultInfo.checkContext.report(tree.pos(),
+                                    diags.fragment("unexpected.ret.val"));
+                            }
+                        } else {
+                            boolean isValueCompatible = lambdaBodyChecker.isPotentiallyValueCompatible
+                                && !canLambdaBodyCompleteNormally(tree);
+                            if (!isValueCompatible && !isVoidCompatible) {
+                                log.error(tree.body.pos(),
+                                    "lambda.body.neither.value.nor.void.compatible");
+                            }
+
+                            if (!isValueCompatible) {
+                                resultInfo.checkContext.report(tree.pos(),
+                                    diags.fragment("incompatible.ret.type.in.lambda",
+                                        diags.fragment("missing.ret.val", currentReturnType)));
+                            }
+                        }
+                    }
+                }
+            }
+
+            boolean canLambdaBodyCompleteNormally(JCLambda tree) {
+                JCLambda newTree = new TreeCopier<>(make).copy(tree);
+                /* attr.lambdaEnv will create a meaningful env for the
+                 * lambda expression. This is specially useful when the
+                 * lambda is used as the init of a field. But we need to
+                 * remove any added symbol.
+                 */
+                Env<AttrContext> localEnv = attr.lambdaEnv(newTree, env);
+                try {
+                    List<JCVariableDecl> tmpParams = newTree.params;
+                    while (tmpParams.nonEmpty()) {
+                        tmpParams.head.vartype = make.at(tmpParams.head).Type(syms.errType);
+                        tmpParams = tmpParams.tail;
+                    }
+
+                    attr.attribStats(newTree.params, localEnv);
+
+                    /* set pt to Type.noType to avoid generating any bound
+                     * which may happen if lambda's return type is an
+                     * inference variable
+                     */
+                    Attr.ResultInfo bodyResultInfo = attr.new ResultInfo(VAL, Type.noType);
+                    localEnv.info.returnResult = bodyResultInfo;
+
+                    // discard any log output
+                    Log.DiagnosticHandler diagHandler = new Log.DiscardDiagnosticHandler(log);
+                    try {
+                        JCBlock body = (JCBlock)newTree.body;
+                        /* we need to attribute the lambda body before
+                         * doing the aliveness analysis. This is because
+                         * constant folding occurs during attribution
+                         * and the reachability of some statements depends
+                         * on constant values, for example:
+                         *
+                         *     while (true) {...}
+                         */
+                        attr.attribStats(body.stats, localEnv);
+
+                        attr.preFlow(newTree);
+                        /* make an aliveness / reachability analysis of the lambda
+                         * to determine if it can complete normally
+                         */
+                        flow.analyzeLambda(localEnv, newTree, make, true);
+                    } finally {
+                        log.popDiagnosticHandler(diagHandler);
+                    }
+                    return newTree.canCompleteNormally;
+                } finally {
+                    JCBlock body = (JCBlock)newTree.body;
+                    unenterScanner.scan(body.stats);
+                    localEnv.info.scope.leave();
                 }
             }
 
@@ -623,10 +724,7 @@
             public void visitReference(JCMemberReference tree) {
                 Check.CheckContext checkContext = resultInfo.checkContext;
                 Type pt = resultInfo.pt;
-                if (inferenceContext.inferencevars.contains(pt)) {
-                    //ok
-                    return;
-                } else {
+                if (!inferenceContext.inferencevars.contains(pt)) {
                     try {
                         types.findDescriptorType(pt);
                     } catch (Types.FunctionDescriptorLookupError ex) {
@@ -656,6 +754,40 @@
                 }
             }
         }
+
+        /* This visitor looks for return statements, its analysis will determine if
+         * a lambda body is void or value compatible. We must analyze return
+         * statements contained in the lambda body only, thus any return statement
+         * contained in an inner class or inner lambda body, should be ignored.
+         */
+        class LambdaBodyStructChecker extends TreeScanner {
+            boolean isVoidCompatible = true;
+            boolean isPotentiallyValueCompatible = true;
+
+            @Override
+            public void visitClassDef(JCClassDecl tree) {
+                // do nothing
+            }
+
+            @Override
+            public void visitLambda(JCLambda tree) {
+                // do nothing
+            }
+
+            @Override
+            public void visitNewClass(JCNewClass tree) {
+                // do nothing
+            }
+
+            @Override
+            public void visitReturn(JCReturn tree) {
+                if (tree.expr != null) {
+                    isVoidCompatible = false;
+                } else {
+                    isPotentiallyValueCompatible = false;
+                }
+            }
+        }
     }
 
     /** an empty deferred attribution context - all methods throw exceptions */
@@ -767,7 +899,7 @@
         /**
          * handler that is executed when a node has been discarded
          */
-        abstract void skip(JCTree tree);
+        void skip(JCTree tree) {}
     }
 
     /**
@@ -779,11 +911,6 @@
         PolyScanner() {
             super(EnumSet.of(CONDEXPR, PARENS, LAMBDA, REFERENCE));
         }
-
-        @Override
-        void skip(JCTree tree) {
-            //do nothing
-        }
     }
 
     /**
@@ -796,11 +923,6 @@
             super(EnumSet.of(BLOCK, CASE, CATCH, DOLOOP, FOREACHLOOP,
                     FORLOOP, RETURN, SYNCHRONIZED, SWITCH, TRY, WHILELOOP));
         }
-
-        @Override
-        void skip(JCTree tree) {
-            //do nothing
-        }
     }
 
     /**
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Enter.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Enter.java	Thu Apr 24 16:04:44 2014 -0700
@@ -288,15 +288,16 @@
         boolean addEnv = false;
         boolean isPkgInfo = tree.sourcefile.isNameCompatible("package-info",
                                                              JavaFileObject.Kind.SOURCE);
-        if (tree.pid != null) {
-            tree.packge = syms.enterPackage(TreeInfo.fullName(tree.pid));
-            if (tree.packageAnnotations.nonEmpty()
-                    || pkginfoOpt == PkgInfo.ALWAYS
-                    || tree.docComments != null) {
+        JCPackageDecl pd = tree.getPackage();
+        if (pd != null) {
+            tree.packge = pd.packge = syms.enterPackage(TreeInfo.fullName(pd.pid));
+            if (   pd.annotations.nonEmpty()
+                || pkginfoOpt == PkgInfo.ALWAYS
+                || tree.docComments != null) {
                 if (isPkgInfo) {
                     addEnv = true;
-                } else if (tree.packageAnnotations.nonEmpty()){
-                    log.error(tree.packageAnnotations.head.pos(),
+                } else if (pd.annotations.nonEmpty()) {
+                    log.error(pd.annotations.head.pos(),
                               "pkg.annotations.sb.in.package-info.java");
                 }
             }
@@ -305,26 +306,20 @@
         }
         tree.packge.complete(); // Find all classes in package.
         Env<AttrContext> topEnv = topLevelEnv(tree);
+        Env<AttrContext> packageEnv = isPkgInfo ? topEnv.dup(pd) : null;
 
         // Save environment of package-info.java file.
         if (isPkgInfo) {
             Env<AttrContext> env0 = typeEnvs.get(tree.packge);
-            if (env0 == null) {
-                typeEnvs.put(tree.packge, topEnv);
-            } else {
+            if (env0 != null) {
                 JCCompilationUnit tree0 = env0.toplevel;
                 if (!fileManager.isSameFile(tree.sourcefile, tree0.sourcefile)) {
-                    log.warning(tree.pid != null ? tree.pid.pos()
-                                                 : null,
+                    log.warning(pd != null ? pd.pid.pos() : null,
                                 "pkg-info.already.seen",
                                 tree.packge);
-                    if (addEnv || (tree0.packageAnnotations.isEmpty() &&
-                                   tree.docComments != null &&
-                                   tree.docComments.hasComment(tree))) {
-                        typeEnvs.put(tree.packge, topEnv);
-                    }
                 }
             }
+            typeEnvs.put(tree.packge, packageEnv);
 
             for (Symbol q = tree.packge; q != null && q.kind == PCK; q = q.owner)
                 q.flags_field |= EXISTS;
@@ -339,7 +334,7 @@
         }
         classEnter(tree.defs, topEnv);
         if (addEnv) {
-            todo.append(topEnv);
+            todo.append(packageEnv);
         }
         log.useSource(prev);
         result = null;
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Flow.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -45,7 +45,7 @@
 import static com.sun.tools.javac.tree.JCTree.Tag.*;
 
 /** This pass implements dataflow analysis for Java programs though
- *  different AST visitor steps. Liveness analysis (see AliveAlanyzer) checks that
+ *  different AST visitor steps. Liveness analysis (see AliveAnalyzer) checks that
  *  every statement is reachable. Exception analysis (see FlowAnalyzer) ensures that
  *  every checked exception that is thrown is declared or caught.  Definite assignment analysis
  *  (see AssignAnalyzer) ensures that each variable is assigned when used.  Definite
@@ -388,6 +388,10 @@
                 super.scan(tree);
             }
         }
+
+        public void visitPackageDef(JCPackageDecl tree) {
+            // Do nothing for PackageDecl
+        }
     }
 
     /**
@@ -723,10 +727,6 @@
             }
         }
 
-        public void visitTopLevel(JCCompilationUnit tree) {
-            // Do nothing for TopLevel since each class is visited individually
-        }
-
     /**************************************************************************
      * main method
      *************************************************************************/
@@ -1289,10 +1289,6 @@
             }
         }
 
-        public void visitTopLevel(JCCompilationUnit tree) {
-            // Do nothing for TopLevel since each class is visited individually
-        }
-
     /**************************************************************************
      * main method
      *************************************************************************/
@@ -2357,10 +2353,6 @@
             tree.underlyingType.accept(this);
         }
 
-        public void visitTopLevel(JCCompilationUnit tree) {
-            // Do nothing for TopLevel since each class is visited individually
-        }
-
     /**************************************************************************
      * main method
      *************************************************************************/
@@ -2677,10 +2669,6 @@
             }
         }
 
-        public void visitTopLevel(JCCompilationUnit tree) {
-            // Do nothing for TopLevel since each class is visited individually
-        }
-
     /**************************************************************************
      * main method
      *************************************************************************/
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Infer.java	Thu Apr 24 16:04:44 2014 -0700
@@ -515,6 +515,32 @@
     /** max number of incorporation rounds */
         static final int MAX_INCORPORATION_STEPS = 100;
 
+    /* If for two types t and s there is a least upper bound that is a
+     * parameterized type G, then there exists a supertype of 't' of the form
+     * G<T1, ..., Tn> and a supertype of 's' of the form G<S1, ..., Sn>
+     * which will be returned by this method. If no such supertypes exists then
+     * null is returned.
+     *
+     * As an example for the following input:
+     *
+     * t = java.util.ArrayList<java.lang.String>
+     * s = java.util.List<T>
+     *
+     * we get this ouput:
+     *
+     * Pair[java.util.List<java.lang.String>,java.util.List<T>]
+     */
+    private Pair<Type, Type> getParameterizedSupers(Type t, Type s) {
+        Type lubResult = types.lub(t, s);
+        if (lubResult == syms.errType || lubResult == syms.botType ||
+                !lubResult.isParameterized()) {
+            return null;
+        }
+        Type asSuperOfT = types.asSuper(t, lubResult.tsym);
+        Type asSuperOfS = types.asSuper(s, lubResult.tsym);
+        return new Pair<>(asSuperOfT, asSuperOfS);
+    }
+
     /**
      * This enumeration defines an entry point for doing inference variable
      * bound incorporation - it can be used to inject custom incorporation
@@ -682,6 +708,53 @@
             }
         },
         /**
+         * Given a bound set containing {@code alpha <: P<T>} and
+         * {@code alpha <: P<S>} where P is a parameterized type,
+         * perform {@code T = S} (which could lead to new bounds).
+         */
+        CROSS_UPPER_UPPER() {
+            @Override
+            public void apply(UndetVar uv, InferenceContext inferenceContext, Warner warn) {
+                Infer infer = inferenceContext.infer();
+                List<Type> boundList = uv.getBounds(InferenceBound.UPPER);
+                List<Type> boundListTail = boundList.tail;
+                while (boundList.nonEmpty()) {
+                    List<Type> tmpTail = boundListTail;
+                    while (tmpTail.nonEmpty()) {
+                        Type b1 = boundList.head;
+                        Type b2 = tmpTail.head;
+                        if (b1 != b2) {
+                            Pair<Type, Type> commonSupers = infer.getParameterizedSupers(b1, b2);
+                            if (commonSupers != null) {
+                                List<Type> allParamsSuperBound1 = commonSupers.fst.allparams();
+                                List<Type> allParamsSuperBound2 = commonSupers.snd.allparams();
+                                while (allParamsSuperBound1.nonEmpty() && allParamsSuperBound2.nonEmpty()) {
+                                    //traverse the list of all params comparing them
+                                    if (!allParamsSuperBound1.head.hasTag(WILDCARD) &&
+                                        !allParamsSuperBound2.head.hasTag(WILDCARD)) {
+                                        isSameType(inferenceContext.asUndetVar(allParamsSuperBound1.head),
+                                            inferenceContext.asUndetVar(allParamsSuperBound2.head), infer);
+                                    }
+                                    allParamsSuperBound1 = allParamsSuperBound1.tail;
+                                    allParamsSuperBound2 = allParamsSuperBound2.tail;
+                                }
+                                Assert.check(allParamsSuperBound1.isEmpty() && allParamsSuperBound2.isEmpty());
+                            }
+                        }
+                        tmpTail = tmpTail.tail;
+                    }
+                    boundList = boundList.tail;
+                    boundListTail = boundList.tail;
+                }
+            }
+
+            @Override
+            boolean accepts(UndetVar uv, InferenceContext inferenceContext) {
+                return !uv.isCaptured() &&
+                        uv.getBounds(InferenceBound.UPPER).nonEmpty();
+            }
+        },
+        /**
          * Given a bound set containing {@code alpha == S} and {@code alpha == T}
          * perform {@code S == T} (which could lead to new bounds).
          */
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java	Thu Apr 24 16:04:44 2014 -0700
@@ -2359,6 +2359,7 @@
     /** Visitor method: Translate a single node.
      *  Attach the source position from the old tree to its replacement tree.
      */
+    @Override
     public <T extends JCTree> T translate(T tree) {
         if (tree == null) {
             return null;
@@ -2407,39 +2408,39 @@
         return trees;
     }
 
-    public void visitTopLevel(JCCompilationUnit tree) {
-        if (needPackageInfoClass(tree)) {
-            Name name = names.package_info;
-            long flags = Flags.ABSTRACT | Flags.INTERFACE;
-            if (target.isPackageInfoSynthetic())
-                // package-info is marked SYNTHETIC in JDK 1.6 and later releases
-                flags = flags | Flags.SYNTHETIC;
-            JCClassDecl packageAnnotationsClass
-                = make.ClassDef(make.Modifiers(flags,
-                                               tree.packageAnnotations),
-                                name, List.<JCTypeParameter>nil(),
-                                null, List.<JCExpression>nil(), List.<JCTree>nil());
-            ClassSymbol c = tree.packge.package_info;
-            c.flags_field |= flags;
-            c.setAttributes(tree.packge);
-            ClassType ctype = (ClassType) c.type;
-            ctype.supertype_field = syms.objectType;
-            ctype.interfaces_field = List.nil();
-            packageAnnotationsClass.sym = c;
-
-            translated.append(packageAnnotationsClass);
-        }
+    public void visitPackageDef(JCPackageDecl tree) {
+        if (!needPackageInfoClass(tree))
+            return;
+
+        Name name = names.package_info;
+        long flags = Flags.ABSTRACT | Flags.INTERFACE;
+        if (target.isPackageInfoSynthetic())
+            // package-info is marked SYNTHETIC in JDK 1.6 and later releases
+            flags = flags | Flags.SYNTHETIC;
+        JCClassDecl packageAnnotationsClass
+            = make.ClassDef(make.Modifiers(flags, tree.getAnnotations()),
+                            name, List.<JCTypeParameter>nil(),
+                            null, List.<JCExpression>nil(), List.<JCTree>nil());
+        ClassSymbol c = tree.packge.package_info;
+        c.flags_field |= flags;
+        c.setAttributes(tree.packge);
+        ClassType ctype = (ClassType) c.type;
+        ctype.supertype_field = syms.objectType;
+        ctype.interfaces_field = List.nil();
+        packageAnnotationsClass.sym = c;
+
+        translated.append(packageAnnotationsClass);
     }
     // where
-    private boolean needPackageInfoClass(JCCompilationUnit tree) {
+    private boolean needPackageInfoClass(JCPackageDecl pd) {
         switch (pkginfoOpt) {
             case ALWAYS:
                 return true;
             case LEGACY:
-                return tree.packageAnnotations.nonEmpty();
+                return pd.getAnnotations().nonEmpty();
             case NONEMPTY:
                 for (Attribute.Compound a :
-                         tree.packge.getDeclarationAttributes()) {
+                         pd.packge.getDeclarationAttributes()) {
                     Attribute.RetentionPolicy p = types.getRetention(a);
                     if (p != Attribute.RetentionPolicy.SOURCE)
                         return true;
--- a/langtools/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/comp/MemberEnter.java	Thu Apr 24 16:04:44 2014 -0700
@@ -493,10 +493,26 @@
             return;
         }
 
+        DiagnosticPosition prevLintPos = deferredLintHandler.immediate();
+        Lint prevLint = chk.setLint(lint);
+
+        try {
+            // Import-on-demand java.lang.
+            importAll(tree.pos, syms.enterPackage(names.java_lang), env);
+
+            // Process the package def and all import clauses.
+            memberEnter(tree.defs, env);
+        } finally {
+            chk.setLint(prevLint);
+            deferredLintHandler.setPos(prevLintPos);
+        }
+    }
+
+    public void visitPackageDef(JCPackageDecl tree) {
         // check that no class exists with same fully qualified name as
         // toplevel package
         if (checkClash && tree.pid != null) {
-            Symbol p = tree.packge;
+            Symbol p = env.toplevel.packge;
             while (p.owner != syms.rootPackage) {
                 p.owner.complete(); // enter all class members of p
                 if (syms.classes.get(p.getQualifiedName()) != null) {
@@ -507,23 +523,8 @@
                 p = p.owner;
             }
         }
-
         // process package annotations
-        annotate.annotateLater(tree.packageAnnotations, env, tree.packge, null);
-
-        DiagnosticPosition prevLintPos = deferredLintHandler.immediate();
-        Lint prevLint = chk.setLint(lint);
-
-        try {
-            // Import-on-demand java.lang.
-            importAll(tree.pos, syms.enterPackage(names.java_lang), env);
-
-            // Process all import clauses.
-            memberEnter(tree.defs, env);
-        } finally {
-            chk.setLint(prevLint);
-            deferredLintHandler.setPos(prevLintPos);
-        }
+        annotate.annotateLater(tree.annotations, env, env.toplevel.packge, null);
     }
 
     // process the non-static imports and the static imports of types.
--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java	Thu Apr 24 16:04:44 2014 -0700
@@ -475,14 +475,14 @@
             break;
         case CONSTANT_Fieldref: {
             ClassSymbol owner = readClassSymbol(getChar(index + 1));
-            NameAndType nt = (NameAndType)readPool(getChar(index + 3));
+            NameAndType nt = readNameAndType(getChar(index + 3));
             poolObj[i] = new VarSymbol(0, nt.name, nt.uniqueType.type, owner);
             break;
         }
         case CONSTANT_Methodref:
         case CONSTANT_InterfaceMethodref: {
             ClassSymbol owner = readClassSymbol(getChar(index + 1));
-            NameAndType nt = (NameAndType)readPool(getChar(index + 3));
+            NameAndType nt = readNameAndType(getChar(index + 3));
             poolObj[i] = new MethodSymbol(0, nt.name, nt.uniqueType.type, owner);
             break;
         }
@@ -551,13 +551,34 @@
     /** Read class entry.
      */
     ClassSymbol readClassSymbol(int i) {
-        return (ClassSymbol) (readPool(i));
+        Object obj = readPool(i);
+        if (obj != null && !(obj instanceof ClassSymbol))
+            throw badClassFile("bad.const.pool.entry",
+                               currentClassFile.toString(),
+                               "CONSTANT_Class_info", i);
+        return (ClassSymbol)obj;
     }
 
     /** Read name.
      */
     Name readName(int i) {
-        return (Name) (readPool(i));
+        Object obj = readPool(i);
+        if (obj != null && !(obj instanceof Name))
+            throw badClassFile("bad.const.pool.entry",
+                               currentClassFile.toString(),
+                               "CONSTANT_Utf8_info or CONSTANT_String_info", i);
+        return (Name)obj;
+    }
+
+    /** Read name and type.
+     */
+    NameAndType readNameAndType(int i) {
+        Object obj = readPool(i);
+        if (obj != null && !(obj instanceof NameAndType))
+            throw badClassFile("bad.const.pool.entry",
+                               currentClassFile.toString(),
+                               "CONSTANT_NameAndType_info", i);
+        return (NameAndType)obj;
     }
 
 /************************************************************************
@@ -1209,7 +1230,7 @@
         sym.owner.members().remove(sym);
         ClassSymbol self = (ClassSymbol)sym;
         ClassSymbol c = readClassSymbol(nextChar());
-        NameAndType nt = (NameAndType)readPool(nextChar());
+        NameAndType nt = readNameAndType(nextChar());
 
         if (c.members_field == null)
             throw badClassFile("bad.enclosing.class", self, c);
--- a/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java	Thu Apr 24 16:04:44 2014 -0700
@@ -601,8 +601,7 @@
      */
     protected JCCompilationUnit parse(JavaFileObject filename, CharSequence content) {
         long msec = now();
-        JCCompilationUnit tree = make.TopLevel(List.<JCTree.JCAnnotation>nil(),
-                                      null, List.<JCTree>nil());
+        JCCompilationUnit tree = make.TopLevel(List.<JCTree>nil());
         if (content != null) {
             if (verbose) {
                 log.printVerbose("parsing.started", filename);
@@ -689,7 +688,7 @@
                                       : make.Select(tree, names.fromString(s));
             }
             JCCompilationUnit toplevel =
-                make.TopLevel(List.<JCTree.JCAnnotation>nil(), null, List.<JCTree>nil());
+                make.TopLevel(List.<JCTree>nil());
             toplevel.packge = syms.unnamedPackage;
             return attr.attribIdent(tree, toplevel);
         } finally {
@@ -768,7 +767,7 @@
                 tree = parse(filename, filename.getCharContent(false));
             } catch (IOException e) {
                 log.error("error.reading.file", filename, JavacFileManager.getMessage(e));
-                tree = make.TopLevel(List.<JCTree.JCAnnotation>nil(), null, List.<JCTree>nil());
+                tree = make.TopLevel(List.<JCTree>nil());
             } finally {
                 log.useSource(prev);
             }
@@ -1440,7 +1439,7 @@
             make.at(Position.FIRSTPOS);
             TreeMaker localMake = make.forToplevel(env.toplevel);
 
-            if (env.tree instanceof JCCompilationUnit) {
+            if (env.tree.hasTag(JCTree.Tag.PACKAGEDEF)) {
                 if (!(stubOutput || sourceOutput || printFlat)) {
                     if (shouldStop(CompileState.LOWER))
                         return;
--- a/langtools/src/share/classes/com/sun/tools/javac/model/JavacElements.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/model/JavacElements.java	Thu Apr 24 16:04:44 2014 -0700
@@ -170,8 +170,8 @@
         Symbol sym = cast(Symbol.class, e);
         class Vis extends JCTree.Visitor {
             List<JCAnnotation> result = null;
-            public void visitTopLevel(JCCompilationUnit tree) {
-                result = tree.packageAnnotations;
+            public void visitPackageDef(JCPackageDecl tree) {
+                result = tree.annotations;
             }
             public void visitClassDef(JCClassDecl tree) {
                 result = tree.mods.annotations;
--- a/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/parser/JavacParser.java	Thu Apr 24 16:04:44 2014 -0700
@@ -3081,27 +3081,33 @@
      */
     public JCTree.JCCompilationUnit parseCompilationUnit() {
         Token firstToken = token;
-        JCExpression pid = null;
         JCModifiers mods = null;
         boolean consumedToplevelDoc = false;
         boolean seenImport = false;
         boolean seenPackage = false;
-        List<JCAnnotation> packageAnnotations = List.nil();
+        ListBuffer<JCTree> defs = new ListBuffer<>();
         if (token.kind == MONKEYS_AT)
             mods = modifiersOpt();
 
         if (token.kind == PACKAGE) {
+            int packagePos = token.pos;
+            List<JCAnnotation> annotations = List.nil();
             seenPackage = true;
             if (mods != null) {
                 checkNoMods(mods.flags);
-                packageAnnotations = mods.annotations;
+                annotations = mods.annotations;
                 mods = null;
             }
             nextToken();
-            pid = qualident(false);
+            JCExpression pid = qualident(false);
             accept(SEMI);
+            JCPackageDecl pd = F.at(packagePos).PackageDecl(annotations, pid);
+            attach(pd, firstToken.comment(CommentStyle.JAVADOC));
+            consumedToplevelDoc = true;
+            storeEnd(pd, token.pos);
+            defs.append(pd);
         }
-        ListBuffer<JCTree> defs = new ListBuffer<>();
+
         boolean checkForImports = true;
         boolean firstTypeDecl = true;
         while (token.kind != EOF) {
@@ -3130,7 +3136,7 @@
                 firstTypeDecl = false;
             }
         }
-        JCTree.JCCompilationUnit toplevel = F.at(firstToken.pos).TopLevel(packageAnnotations, pid, defs.toList());
+        JCTree.JCCompilationUnit toplevel = F.at(firstToken.pos).TopLevel(defs.toList());
         if (!consumedToplevelDoc)
             attach(toplevel, firstToken.comment(CommentStyle.JAVADOC));
         if (defs.isEmpty())
@@ -3417,16 +3423,28 @@
      *    | ModifiersOpt
      *      ( Type Ident
      *        ( VariableDeclaratorsRest ";" | MethodDeclaratorRest )
-     *      | VOID Ident MethodDeclaratorRest
-     *      | TypeParameters (Type | VOID) Ident MethodDeclaratorRest
+     *      | VOID Ident VoidMethodDeclaratorRest
+     *      | TypeParameters [Annotations]
+     *        ( Type Ident MethodDeclaratorRest
+     *        | VOID Ident VoidMethodDeclaratorRest
+     *        )
      *      | Ident ConstructorDeclaratorRest
      *      | TypeParameters Ident ConstructorDeclaratorRest
      *      | ClassOrInterfaceOrEnumDeclaration
      *      )
      *  InterfaceBodyDeclaration =
      *      ";"
-     *    | ModifiersOpt Type Ident
-     *      ( ConstantDeclaratorsRest | InterfaceMethodDeclaratorRest ";" )
+     *    | ModifiersOpt
+     *      ( Type Ident
+     *        ( ConstantDeclaratorsRest ";" | MethodDeclaratorRest )
+     *      | VOID Ident MethodDeclaratorRest
+     *      | TypeParameters [Annotations]
+     *        ( Type Ident MethodDeclaratorRest
+     *        | VOID Ident VoidMethodDeclaratorRest
+     *        )
+     *      | ClassOrInterfaceOrEnumDeclaration
+     *      )
+     *
      */
     protected List<JCTree> classOrInterfaceBodyDeclaration(Name className, boolean isInterface) {
         if (token.kind == SEMI) {
@@ -3458,28 +3476,29 @@
                 }
                 List<JCAnnotation> annosAfterParams = annotationsOpt(Tag.ANNOTATION);
 
+                if (annosAfterParams.nonEmpty()) {
+                    checkAnnotationsAfterTypeParams(annosAfterParams.head.pos);
+                    mods.annotations = mods.annotations.appendList(annosAfterParams);
+                    if (mods.pos == Position.NOPOS)
+                        mods.pos = mods.annotations.head.pos;
+                }
+
                 Token tk = token;
                 pos = token.pos;
                 JCExpression type;
                 boolean isVoid = token.kind == VOID;
                 if (isVoid) {
-                    if (annosAfterParams.nonEmpty())
-                        illegal(annosAfterParams.head.pos);
                     type = to(F.at(pos).TypeIdent(TypeTag.VOID));
                     nextToken();
                 } else {
-                    if (annosAfterParams.nonEmpty()) {
-                        checkAnnotationsAfterTypeParams(annosAfterParams.head.pos);
-                        mods.annotations = mods.annotations.appendList(annosAfterParams);
-                        if (mods.pos == Position.NOPOS)
-                            mods.pos = mods.annotations.head.pos;
-                    }
                     // method returns types are un-annotated types
                     type = unannotatedType();
                 }
                 if (token.kind == LPAREN && !isInterface && type.hasTag(IDENT)) {
                     if (isInterface || tk.name() != className)
                         error(pos, "invalid.meth.decl.ret.type.req");
+                    else if (annosAfterParams.nonEmpty())
+                        illegal(annosAfterParams.head.pos);
                     return List.of(methodDeclaratorRest(
                         pos, mods, null, names.init, typarams,
                         isInterface, true, dc));
@@ -3511,13 +3530,9 @@
     }
 
     /** MethodDeclaratorRest =
-     *      FormalParameters BracketsOpt [Throws TypeList] ( MethodBody | [DEFAULT AnnotationValue] ";")
+     *      FormalParameters BracketsOpt [THROWS TypeList] ( MethodBody | [DEFAULT AnnotationValue] ";")
      *  VoidMethodDeclaratorRest =
-     *      FormalParameters [Throws TypeList] ( MethodBody | ";")
-     *  InterfaceMethodDeclaratorRest =
-     *      FormalParameters BracketsOpt [THROWS TypeList] ";"
-     *  VoidInterfaceMethodDeclaratorRest =
-     *      FormalParameters [THROWS TypeList] ";"
+     *      FormalParameters [THROWS TypeList] ( MethodBody | ";")
      *  ConstructorDeclaratorRest =
      *      "(" FormalParameterListOpt ")" [THROWS TypeList] MethodBody
      */
--- a/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/resources/compiler.properties	Thu Apr 24 16:04:44 2014 -0700
@@ -738,6 +738,9 @@
     bad return type in method reference\n\
     {0}
 
+compiler.err.lambda.body.neither.value.nor.void.compatible=\
+    lambda body is neither value nor void compatible
+
 # 0: list of type
 compiler.err.incompatible.thrown.types.in.mref=\
     incompatible thrown types {0} in method reference
@@ -1716,6 +1719,11 @@
 compiler.misc.bad.class.file=\
     class file is invalid for class {0}
 
+# 0: file name, 1: expected CP entry type, 2: constant pool index
+compiler.misc.bad.const.pool.entry=\
+    bad constant pool entry in {0}\n\
+    expected {1} at index {2}
+
 # 0: file name, 1: message segment
 compiler.misc.bad.class.file.header=\
     bad class file: {0}\n\
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/JCTree.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/JCTree.java	Thu Apr 24 16:04:44 2014 -0700
@@ -89,6 +89,10 @@
         */
         TOPLEVEL,
 
+        /** Package level definitions.
+         */
+        PACKAGEDEF,
+
         /** Import clauses, of type Import.
          */
         IMPORT,
@@ -478,9 +482,6 @@
      * Everything in one source file is kept in a {@linkplain JCCompilationUnit} structure.
      */
     public static class JCCompilationUnit extends JCTree implements CompilationUnitTree {
-        public List<JCAnnotation> packageAnnotations;
-        /** The tree representing the package clause. */
-        public JCExpression pid;
         /** All definitions in this file (ClassDef, Import, and Skip) */
         public List<JCTree> defs;
         /* The source file name. */
@@ -499,39 +500,39 @@
         /* An object encapsulating ending positions of source ranges indexed by
          * the tree nodes they belong to. Defined only if option -Xjcov is set. */
         public EndPosTable endPositions = null;
-        protected JCCompilationUnit(List<JCAnnotation> packageAnnotations,
-                        JCExpression pid,
-                        List<JCTree> defs,
-                        JavaFileObject sourcefile,
-                        PackageSymbol packge,
-                        ImportScope namedImportScope,
-                        StarImportScope starImportScope) {
-            this.packageAnnotations = packageAnnotations;
-            this.pid = pid;
+        protected JCCompilationUnit(List<JCTree> defs) {
             this.defs = defs;
-            this.sourcefile = sourcefile;
-            this.packge = packge;
-            this.namedImportScope = namedImportScope;
-            this.starImportScope = starImportScope;
         }
         @Override
         public void accept(Visitor v) { v.visitTopLevel(this); }
 
         public Kind getKind() { return Kind.COMPILATION_UNIT; }
+
+        public JCPackageDecl getPackage() {
+            // PackageDecl must be the first entry if it exists
+            if (!defs.isEmpty() && defs.head.hasTag(PACKAGEDEF))
+                return (JCPackageDecl)defs.head;
+            return null;
+        }
         public List<JCAnnotation> getPackageAnnotations() {
-            return packageAnnotations;
+            JCPackageDecl pd = getPackage();
+            return pd != null ? pd.getAnnotations() : List.<JCAnnotation>nil();
         }
+        public ExpressionTree getPackageName() {
+            JCPackageDecl pd = getPackage();
+            return pd != null ? pd.getPackageName() : null;
+        }
+
         public List<JCImport> getImports() {
             ListBuffer<JCImport> imports = new ListBuffer<>();
             for (JCTree tree : defs) {
                 if (tree.hasTag(IMPORT))
                     imports.append((JCImport)tree);
-                else if (!tree.hasTag(SKIP))
+                else if (!tree.hasTag(PACKAGEDEF) && !tree.hasTag(SKIP))
                     break;
             }
             return imports.toList();
         }
-        public JCExpression getPackageName() { return pid; }
         public JavaFileObject getSourceFile() {
             return sourcefile;
         }
@@ -541,7 +542,7 @@
         public List<JCTree> getTypeDecls() {
             List<JCTree> typeDefs;
             for (typeDefs = defs; !typeDefs.isEmpty(); typeDefs = typeDefs.tail)
-                if (!typeDefs.head.hasTag(IMPORT))
+                if (!typeDefs.head.hasTag(PACKAGEDEF) && !typeDefs.head.hasTag(IMPORT))
                     break;
             return typeDefs;
         }
@@ -557,6 +558,39 @@
     }
 
     /**
+     * Package definition.
+     */
+    public static class JCPackageDecl extends JCTree implements PackageTree {
+        public List<JCAnnotation> annotations;
+        /** The tree representing the package clause. */
+        public JCExpression pid;
+        public PackageSymbol packge;
+        public JCPackageDecl(List<JCAnnotation> annotations, JCExpression pid) {
+            this.annotations = annotations;
+            this.pid = pid;
+        }
+        @Override
+        public void accept(Visitor v) { v.visitPackageDef(this); }
+        public Kind getKind() {
+            return Kind.PACKAGE;
+        }
+        public List<JCAnnotation> getAnnotations() {
+            return annotations;
+        }
+        public JCExpression getPackageName() {
+            return pid;
+        }
+        @Override
+        public <R,D> R accept(TreeVisitor<R,D> v, D d) {
+            return v.visitPackage(this, d);
+        }
+        @Override
+        public Tag getTag() {
+            return PACKAGEDEF;
+        }
+    }
+
+    /**
      * An import clause.
      */
     public static class JCImport extends JCTree implements ImportTree {
@@ -2438,9 +2472,9 @@
     /** An interface for tree factories
      */
     public interface Factory {
-        JCCompilationUnit TopLevel(List<JCAnnotation> packageAnnotations,
-                                   JCExpression pid,
-                                   List<JCTree> defs);
+        JCCompilationUnit TopLevel(List<JCTree> defs);
+        JCPackageDecl PackageDecl(List<JCAnnotation> annotations,
+                                  JCExpression pid);
         JCImport Import(JCTree qualid, boolean staticImport);
         JCClassDecl ClassDef(JCModifiers mods,
                           Name name,
@@ -2528,6 +2562,7 @@
      */
     public static abstract class Visitor {
         public void visitTopLevel(JCCompilationUnit that)    { visitTree(that); }
+        public void visitPackageDef(JCPackageDecl that)      { visitTree(that); }
         public void visitImport(JCImport that)               { visitTree(that); }
         public void visitClassDef(JCClassDecl that)          { visitTree(that); }
         public void visitMethodDef(JCMethodDecl that)        { visitTree(that); }
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/Pretty.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/Pretty.java	Thu Apr 24 16:04:44 2014 -0700
@@ -367,16 +367,13 @@
     public void printUnit(JCCompilationUnit tree, JCClassDecl cdef) throws IOException {
         docComments = tree.docComments;
         printDocComment(tree);
-        if (tree.pid != null) {
-            print("package ");
-            printExpr(tree.pid);
-            print(";");
-            println();
-        }
+
         boolean firstImport = true;
         for (List<JCTree> l = tree.defs;
-        l.nonEmpty() && (cdef == null || l.head.hasTag(IMPORT));
-        l = l.tail) {
+             l.nonEmpty() &&
+                 (cdef == null ||
+                  l.head.hasTag(IMPORT) || l.head.hasTag(PACKAGEDEF));
+             l = l.tail) {
             if (l.head.hasTag(IMPORT)) {
                 JCImport imp = (JCImport)l.head;
                 Name name = TreeInfo.name(imp.qualid);
@@ -426,6 +423,21 @@
         }
     }
 
+    public void visitPackageDef(JCPackageDecl tree) {
+        try {
+            printDocComment(tree);
+            printAnnotations(tree.annotations);
+            if (tree.pid != null) {
+                print("package ");
+                printExpr(tree.pid);
+                print(";");
+                println();
+            }
+        } catch (IOException e) {
+            throw new UncheckedIOException(e);
+        }
+    }
+
     public void visitImport(JCImport tree) {
         try {
             print("import ");
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeCopier.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeCopier.java	Thu Apr 24 16:04:44 2014 -0700
@@ -346,10 +346,15 @@
 
     public JCTree visitCompilationUnit(CompilationUnitTree node, P p) {
         JCCompilationUnit t = (JCCompilationUnit) node;
-        List<JCAnnotation> packageAnnotations = copy(t.packageAnnotations, p);
+        List<JCTree> defs = copy(t.defs, p);
+        return M.at(t.pos).TopLevel(defs);
+    }
+
+    public JCTree visitPackage(PackageTree node, P p) {
+        JCPackageDecl t = (JCPackageDecl) node;
+        List<JCAnnotation> annotations = copy(t.annotations, p);
         JCExpression pid = copy(t.pid, p);
-        List<JCTree> defs = copy(t.defs, p);
-        return M.at(t.pos).TopLevel(packageAnnotations, pid, defs);
+        return M.at(t.pos).PackageDecl(annotations, pid);
     }
 
     public JCTree visitTry(TryTree node, P p) {
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeInfo.java	Thu Apr 24 16:04:44 2014 -0700
@@ -406,6 +406,11 @@
             return Position.NOPOS;
 
         switch(tree.getTag()) {
+            case PACKAGEDEF: {
+                JCPackageDecl pd = (JCPackageDecl)tree;
+                return pd.annotations.isEmpty() ? pd.pos :
+                       pd.annotations.head.pos;
+            }
             case APPLY:
                 return getStartPos(((JCMethodInvocation) tree).meth);
             case ASSIGN:
@@ -788,6 +793,8 @@
         switch (node.getTag()) {
         case TOPLEVEL:
             return ((JCCompilationUnit) node).packge;
+        case PACKAGEDEF:
+            return ((JCPackageDecl) node).packge;
         case CLASSDEF:
             return ((JCClassDecl) node).sym;
         case METHODDEF:
@@ -820,6 +827,7 @@
     public static boolean isDeclaration(JCTree node) {
         node = skipParens(node);
         switch (node.getTag()) {
+        case PACKAGEDEF:
         case CLASSDEF:
         case METHODDEF:
         case VARDEF:
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeMaker.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeMaker.java	Thu Apr 24 16:04:44 2014 -0700
@@ -116,22 +116,28 @@
 
     /**
      * Create given tree node at current position.
-     * @param defs a list of ClassDef, Import, and Skip
+     * @param defs a list of PackageDef, ClassDef, Import, and Skip
      */
-    public JCCompilationUnit TopLevel(List<JCAnnotation> packageAnnotations,
-                                      JCExpression pid,
-                                      List<JCTree> defs) {
-        Assert.checkNonNull(packageAnnotations);
+    public JCCompilationUnit TopLevel(List<JCTree> defs) {
         for (JCTree node : defs)
             Assert.check(node instanceof JCClassDecl
+                || node instanceof JCPackageDecl
                 || node instanceof JCImport
                 || node instanceof JCSkip
                 || node instanceof JCErroneous
                 || (node instanceof JCExpressionStatement
                     && ((JCExpressionStatement)node).expr instanceof JCErroneous),
                 node.getClass().getSimpleName());
-        JCCompilationUnit tree = new JCCompilationUnit(packageAnnotations, pid, defs,
-                                     null, null, null, null);
+        JCCompilationUnit tree = new JCCompilationUnit(defs);
+        tree.pos = pos;
+        return tree;
+    }
+
+    public JCPackageDecl PackageDecl(List<JCAnnotation> annotations,
+                                     JCExpression pid) {
+        Assert.checkNonNull(annotations);
+        Assert.checkNonNull(pid);
+        JCPackageDecl tree = new JCPackageDecl(annotations, pid);
         tree.pos = pos;
         return tree;
     }
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeScanner.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeScanner.java	Thu Apr 24 16:04:44 2014 -0700
@@ -63,9 +63,12 @@
  ****************************************************************************/
 
     public void visitTopLevel(JCCompilationUnit tree) {
-        scan(tree.packageAnnotations);
+        scan(tree.defs);
+    }
+
+    public void visitPackageDef(JCPackageDecl tree) {
+        scan(tree.annotations);
         scan(tree.pid);
-        scan(tree.defs);
     }
 
     public void visitImport(JCImport tree) {
--- a/langtools/src/share/classes/com/sun/tools/javac/tree/TreeTranslator.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/tree/TreeTranslator.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,9 +56,9 @@
             return null;
         } else {
             tree.accept(this);
-            JCTree result = this.result;
+            JCTree tmpResult = this.result;
             this.result = null;
-            return (T)result; // XXX cast
+            return (T)tmpResult; // XXX cast
         }
     }
 
@@ -116,8 +116,13 @@
  ****************************************************************************/
 
     public void visitTopLevel(JCCompilationUnit tree) {
+        tree.defs = translate(tree.defs);
+        result = tree;
+    }
+
+    public void visitPackageDef(JCPackageDecl tree) {
+        tree.annotations = translate(tree.annotations);
         tree.pid = translate(tree.pid);
-        tree.defs = translate(tree.defs);
         result = tree;
     }
 
--- a/langtools/src/share/classes/com/sun/tools/javadoc/DocEnv.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/DocEnv.java	Thu Apr 24 16:04:44 2014 -0700
@@ -743,6 +743,13 @@
         return p;
     }
 
+    TreePath getTreePath(JCCompilationUnit toplevel, JCPackageDecl tree) {
+        TreePath p = treePaths.get(tree);
+        if (p == null)
+            treePaths.put(tree, p = new TreePath(getTreePath(toplevel), tree));
+        return p;
+    }
+
     TreePath getTreePath(JCCompilationUnit toplevel, JCClassDecl tree) {
         TreePath p = treePaths.get(tree);
         if (p == null)
--- a/langtools/src/share/classes/com/sun/tools/javadoc/JavadocEnter.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javadoc/JavadocEnter.java	Thu Apr 24 16:04:44 2014 -0700
@@ -27,6 +27,7 @@
 
 import javax.tools.JavaFileObject;
 
+import com.sun.source.util.TreePath;
 import com.sun.tools.javac.code.Kinds;
 import com.sun.tools.javac.code.Symbol.*;
 import com.sun.tools.javac.comp.Enter;
@@ -84,7 +85,9 @@
     public void visitTopLevel(JCCompilationUnit tree) {
         super.visitTopLevel(tree);
         if (tree.sourcefile.isNameCompatible("package-info", JavaFileObject.Kind.SOURCE)) {
-            docenv.makePackageDoc(tree.packge, docenv.getTreePath(tree));
+            JCPackageDecl pd = tree.getPackage();
+            TreePath tp = pd == null ? docenv.getTreePath(tree) : docenv.getTreePath(tree, pd);
+            docenv.makePackageDoc(tree.packge, tp);
         }
     }
 
--- a/langtools/src/share/classes/com/sun/tools/sjavac/CleanProperties.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/CleanProperties.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,13 +29,14 @@
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Properties;
 
+import com.sun.tools.sjavac.options.Options;
+
 /**
  * The clean properties transform should not be necessary.
  * Eventually we will cleanup the property file sources in the OpenJDK instead.
@@ -51,7 +52,7 @@
         // Any extra information is ignored for clean properties.
     }
 
-    public void setExtra(String[] a) {
+    public void setExtra(Options a) {
         // Any extra information is ignored for clean properties.
     }
 
--- a/langtools/src/share/classes/com/sun/tools/sjavac/CompileJavaPackages.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/CompileJavaPackages.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,15 +25,16 @@
 
 package com.sun.tools.sjavac;
 
+import java.io.PrintStream;
 import java.net.URI;
 import java.util.Arrays;
 import java.util.Random;
 import java.util.Set;
 import java.util.Map;
 
+import com.sun.tools.sjavac.options.Options;
 import com.sun.tools.sjavac.server.JavacServer;
 import com.sun.tools.sjavac.server.SysInfo;
-import java.io.PrintStream;
 
 /**
  * This transform compiles a set of packages containing Java sources.
@@ -54,13 +55,12 @@
     // We hope to improve this in the future.
     final static int limitOnConcurrency = 3;
 
-    String serverSettings;
+    Options args;
+
     public void setExtra(String e) {
-        serverSettings = e;
     }
 
-    String[] args;
-    public void setExtra(String[] a) {
+    public void setExtra(Options a) {
         args = a;
     }
 
@@ -82,14 +82,14 @@
         boolean concurrentCompiles = true;
 
         // Fetch the id.
-        String id = Util.extractStringOption("id", serverSettings);
+        String id = Util.extractStringOption("id", args.getServerConf());
         if (id == null || id.equals("")) {
             // No explicit id set. Create a random id so that the requests can be
             // grouped properly in the server.
             id = "id"+(((new Random()).nextLong())&Long.MAX_VALUE);
         }
         // Only keep portfile and sjavac settings..
-        String psServerSettings = Util.cleanSubOptions("--server:", Util.set("portfile","sjavac","background","keepalive"), serverSettings);
+        String psServerSettings = Util.cleanSubOptions(Util.set("portfile","sjavac","background","keepalive"), args.getServerConf());
 
         // Get maximum heap size from the server!
         SysInfo sysinfo = JavacServer.connectGetSysInfo(psServerSettings, out, err);
@@ -223,7 +223,7 @@
                 @Override
                 public void run() {
                                         rn[ii] = JavacServer.useServer(cleanedServerSettings,
-                                                           Main.removeWrapperArgs(args),
+                                                           args.prepJavacArgs(),
                                                                cc.srcs,
                                                            fvisible_sources,
                                                            fvisible_classes,
--- a/langtools/src/share/classes/com/sun/tools/sjavac/CompileProperties.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/CompileProperties.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,6 +37,8 @@
 import java.util.HashSet;
 import java.util.Map;
 
+import com.sun.tools.sjavac.options.Options;
+
 /**
  * Compile properties transform a properties file into a Java source file.
  * Java has built in support for reading properties from either a text file
@@ -58,7 +60,7 @@
         extra = e;
     }
 
-    public void setExtra(String[] a) {
+    public void setExtra(Options a) {
     }
 
     public boolean transform(Map<String,Set<URI>> pkgSrcs,
--- a/langtools/src/share/classes/com/sun/tools/sjavac/CopyFile.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/CopyFile.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,6 +31,8 @@
 import java.util.HashSet;
 import java.util.Map;
 
+import com.sun.tools.sjavac.options.Options;
+
 /**
  * The copy file transform simply copies a matching file from -src to -d .
  * Such files are typically images, xml documents and other data files.
@@ -45,7 +47,7 @@
     public void setExtra(String e) {
     }
 
-    public void setExtra(String[] a) {
+    public void setExtra(Options a) {
     }
 
     public boolean transform(Map<String,Set<URI>> pkgSrcs,
--- a/langtools/src/share/classes/com/sun/tools/sjavac/JavacState.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/JavacState.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
 package com.sun.tools.sjavac;
 
 import java.io.*;
+import java.nio.file.Path;
 import java.util.Collections;
 import java.util.Date;
 import java.util.Set;
@@ -37,6 +38,9 @@
 import java.net.URI;
 import java.util.*;
 
+import com.sun.tools.sjavac.options.Options;
+import com.sun.tools.sjavac.options.SourceLocation;
+
 /**
  * The javac state class maintains the previous (prev) and the current (now)
  * build states and everything else that goes into the javac_state file.
@@ -117,25 +121,20 @@
     // It can also map from a jar file to the set of visible classes for that jar file.
     Map<URI,Set<String>> visibleClasses;
 
-    // Setup two transforms that always exist.
-    private CopyFile            copyFiles = new CopyFile();
+    // Setup transform that always exist.
     private CompileJavaPackages compileJavaPackages = new CompileJavaPackages();
 
     // Where to send stdout and stderr.
     private PrintStream out, err;
 
-    JavacState(String[] args, File bd, File gd, File hd, boolean permitUnidentifiedArtifacts, boolean removeJavacState,
-            PrintStream o, PrintStream e) {
+    JavacState(Options options, boolean removeJavacState, PrintStream o, PrintStream e) {
         out = o;
         err = e;
-        numCores = Main.findNumberOption(args, "-j");
-        theArgs = "";
-        for (String a : removeArgsNotAffectingState(args)) {
-            theArgs = theArgs+a+" ";
-        }
-        binDir = bd;
-        gensrcDir = gd;
-        headerDir = hd;
+        numCores = options.getNumCores();
+        theArgs = options.getStateArgsString();
+        binDir = Util.pathToFile(options.getDestDir());
+        gensrcDir = Util.pathToFile(options.getGenSrcDir());
+        headerDir = Util.pathToFile(options.getHeaderDir());
         javacStateFilename = binDir.getPath()+File.separator+"javac_state";
         javacState = new File(javacStateFilename);
         if (removeJavacState && javacState.exists()) {
@@ -148,7 +147,7 @@
             // We do not want to risk building a broken incremental build.
             // BUT since the makefiles still copy things straight into the bin_dir et al,
             // we avoid deleting files here, if the option --permit-unidentified-classes was supplied.
-            if (!permitUnidentifiedArtifacts) {
+            if (!options.isUnidentifiedArtifactPermitted()) {
                 deleteContents(binDir);
                 deleteContents(gensrcDir);
                 deleteContents(headerDir);
@@ -301,9 +300,8 @@
     /**
      * Load a javac_state file.
      */
-    public static JavacState load(String[] args, File binDir, File gensrcDir, File headerDir,
-            boolean permitUnidentifiedArtifacts, PrintStream out, PrintStream err) {
-        JavacState db = new JavacState(args, binDir, gensrcDir, headerDir, permitUnidentifiedArtifacts, false, out, err);
+    public static JavacState load(Options options, PrintStream out, PrintStream err) {
+        JavacState db = new JavacState(options, false, out, err);
         Module  lastModule = null;
         Package lastPackage = null;
         Source  lastSource = null;
@@ -370,22 +368,22 @@
             noFileFound = true;
         } catch (IOException e) {
             Log.info("Dropping old javac_state because of errors when reading it.");
-            db = new JavacState(args, binDir, gensrcDir, headerDir, permitUnidentifiedArtifacts, true, out, err);
+            db = new JavacState(options, true, out, err);
             foundCorrectVerNr = true;
             newCommandLine = false;
             syntaxError = false;
     }
         if (foundCorrectVerNr == false && !noFileFound) {
             Log.info("Dropping old javac_state since it is of an old version.");
-            db = new JavacState(args, binDir, gensrcDir, headerDir, permitUnidentifiedArtifacts, true, out, err);
+            db = new JavacState(options, true, out, err);
         } else
         if (newCommandLine == true && !noFileFound) {
             Log.info("Dropping old javac_state since a new command line is used!");
-            db = new JavacState(args, binDir, gensrcDir, headerDir, permitUnidentifiedArtifacts, true, out, err);
+            db = new JavacState(options, true, out, err);
         } else
         if (syntaxError == true) {
             Log.info("Dropping old javac_state since it contains syntax errors.");
-            db = new JavacState(args, binDir, gensrcDir, headerDir, permitUnidentifiedArtifacts, true, out, err);
+            db = new JavacState(options, true, out, err);
         }
         db.prev.calculateDependents();
         return db;
@@ -467,12 +465,6 @@
         return sr;
     }
 
-    /**
-     * Acquire the copying transform.
-     */
-    public Transformer getCopier() {
-        return copyFiles;
-    }
 
     /**
      * If artifacts have gone missing, force a recompile of the packages
@@ -629,7 +621,7 @@
     public void performCopying(File binDir, Map<String,Transformer> suffixRules) {
         Map<String,Transformer> sr = new HashMap<>();
         for (Map.Entry<String,Transformer> e : suffixRules.entrySet()) {
-            if (e.getValue() == copyFiles) {
+            if (e.getValue().getClass().equals(CopyFile.class)) {
                 sr.put(e.getKey(), e.getValue());
             }
         }
@@ -643,10 +635,11 @@
     public void performTranslation(File gensrcDir, Map<String,Transformer> suffixRules) {
         Map<String,Transformer> sr = new HashMap<>();
         for (Map.Entry<String,Transformer> e : suffixRules.entrySet()) {
-            if (e.getValue() != copyFiles &&
-                e.getValue() != compileJavaPackages) {
-                sr.put(e.getKey(), e.getValue());
-            }
+            Class<?> trClass = e.getValue().getClass();
+            if (trClass == CompileJavaPackages.class || trClass == CopyFile.class)
+                continue;
+
+            sr.put(e.getKey(), e.getValue());
         }
         perform(gensrcDir, sr);
     }
@@ -654,14 +647,11 @@
     /**
      * Compile all the java sources. Return true, if it needs to be called again!
      */
-    public boolean performJavaCompilations(File binDir,
-                                           String serverSettings,
-                                           String[] args,
+    public boolean performJavaCompilations(Options args,
                                            Set<String> recentlyCompiled,
                                            boolean[] rcValue) {
         Map<String,Transformer> suffixRules = new HashMap<>();
         suffixRules.put(".java", compileJavaPackages);
-        compileJavaPackages.setExtra(serverSettings);
         compileJavaPackages.setExtra(args);
 
         rcValue[0] = perform(binDir, suffixRules);
@@ -813,7 +803,10 @@
         for (Source s : now.sources().values()) {
             // Don't include link only sources when comparing sources to compile
             if (!s.isLinkedOnly()) {
-                calculatedSources.add(s.file().getPath());
+                String path = s.file().getPath();
+                if (mightNeedRewriting)
+                    path = Util.normalizeDriveLetter(path);
+                calculatedSources.add(path);
             }
         }
         // Read in the file and create another set of filenames with full paths.
--- a/langtools/src/share/classes/com/sun/tools/sjavac/Log.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/Log.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -71,17 +71,19 @@
         err.println(msg);
     }
 
-    static public void setLogLevel(String l, PrintStream o, PrintStream e)
-        throws ProblemException {
+    static public void initializeLog(PrintStream o, PrintStream e) {
         out = o;
         err = e;
+    }
+
+    static public void setLogLevel(String l) {
         switch (l) {
             case "warn": level = WARN; break;
             case "info": level = INFO; break;
             case "debug": level = DEBUG; break;
             case "trace": level = TRACE; break;
             default:
-                throw new ProblemException("No such log level \"" + l + "\"");
+                throw new IllegalArgumentException("No such log level \"" + l + "\"");
         }
     }
 
--- a/langtools/src/share/classes/com/sun/tools/sjavac/Main.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/Main.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,13 +25,14 @@
 
 package com.sun.tools.sjavac;
 
-import java.io.File;
 import java.io.IOException;
 import java.io.PrintStream;
 import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
+import java.nio.file.Path;
+import java.nio.file.Files;
 
+import com.sun.tools.sjavac.options.Options;
+import com.sun.tools.sjavac.options.SourceLocation;
 import com.sun.tools.sjavac.server.JavacServer;
 
 /**
@@ -151,24 +152,8 @@
         The resulting classes are written into bin.
     */
 
-    // This is the final destination for classes and copied files.
-    private File bin_dir;
-    // This is where the annotation process will put generated sources.
-    private File gensrc_dir;
-    // This is where javac -h puts the generated c-header files.
-    private File header_dir;
-
-    // This file contains the list of sources genereated by the makefile.
-    // We double check that our calculated list of sources matches this list,
-    // if not, then we terminate with an error!
-    private File makefile_source_list;
-    // The challenging task to manage an incremental build is done by javac_state.
     private JavacState javac_state;
 
-    // The suffix rules tells you for example, that .java files should be compiled,
-    // and .html files should be copied and .properties files be translated.
-    Map<String,Transformer> suffix_rules;
-
     public static void main(String... args)  {
         if (args.length > 0 && args[0].startsWith("--startserver:")) {
             if (args.length>1) {
@@ -199,118 +184,142 @@
     }
 
     public int go(String[] args, PrintStream out, PrintStream err) {
+
+        Log.initializeLog(out, err);
+
+        Options options;
         try {
-            if (args.length == 0 || findJavaSourceFiles(args) || findAtFile(args) || null==Util.findServerSettings(args)) {
-                printHelp();
-                return 0;
-            }
+            options = Options.parseArgs(args);
+        } catch (IllegalArgumentException e) {
+            Log.error(e.getMessage());
+            return -1;
+        }
+
+        Log.setLogLevel(options.getLogLevel());
 
-            Log.setLogLevel(findLogLevel(args), out, err);
-            String server_settings = Util.findServerSettings(args);
-            args = verifyImplicitOption(args);
-            // Find the source root directories, and add the -src option before these, if not there already.
-            args = addSrcBeforeDirectories(args);
-            // Check that there is at least one -src supplied.
-            checkSrcOption(args);
-            // Check that there is one -d supplied.
-            bin_dir = findDirectoryOption(args,"-d","output", true, false, true);
-            gensrc_dir = findDirectoryOption(args,"-s","gensrc", false, false, true);
-            header_dir = findDirectoryOption(args,"-h","headers", false, false, true);
-            makefile_source_list = findFileOption(args,"--compare-found-sources","makefile source list", false);
+        if (!validateOptions(options))
+            return -1;
+
+        if (!createIfMissing(options.getDestDir()))
+            return -1;
 
-            // Load the prev build state database.
-            javac_state = JavacState.load(args, bin_dir, gensrc_dir, header_dir,
-                    findBooleanOption(args, "--permit-unidentified-artifacts"), out, err);
+        Path gensrc = options.getGenSrcDir();
+        if (gensrc != null && !createIfMissing(gensrc))
+            return -1;
+
+        Path hdrdir = options.getHeaderDir();
+        if (hdrdir != null && !createIfMissing(hdrdir))
+            return -1;
+
+        // Load the prev build state database.
+        javac_state = JavacState.load(options, out, err);
 
-            // Setup the suffix rules from the command line.
-            suffix_rules = javac_state.getJavaSuffixRule();
-            findTranslateOptions(args, suffix_rules);
-            if (suffix_rules.keySet().size() > 1 && gensrc_dir == null) {
-                Log.error("You have translators but no gensrc dir (-s) specified!");
-                return -1;
-            }
-            findCopyOptions(args, suffix_rules);
+        // Setup the suffix rules from the command line.
+        Map<String, Transformer> suffixRules = new HashMap<>();
+
+        // Handling of .java-compilation
+        suffixRules.putAll(javac_state.getJavaSuffixRule());
+
+        // Handling of -copy and -tr
+        suffixRules.putAll(options.getTranslationRules());
+
+        // All found modules are put here.
+        Map<String,Module> modules = new HashMap<>();
+        // We start out in the legacy empty no-name module.
+        // As soon as we stumble on a module-info.java file we change to that module.
+        Module current_module = new Module("", "");
+        modules.put("", current_module);
 
-            // All found modules are put here.
-            Map<String,Module> modules = new HashMap<>();
-            // We start out in the legacy empty no-name module.
-            // As soon as we stumble on a module-info.java file we change to that module.
-            Module current_module = new Module("", "");
-            modules.put("", current_module);
+        // Find all sources, use the suffix rules to know which files are sources.
+        Map<String,Source> sources = new HashMap<>();
 
-            // Find all sources, use the suffix rules to know which files are sources.
-            Map<String,Source> sources = new HashMap<>();
-            // Find the files, this will automatically populate the found modules
-            // with found packages where the sources are found!
-            findFiles(args, "-src", suffix_rules.keySet(), sources, modules, current_module, false);
+        // Find the files, this will automatically populate the found modules
+        // with found packages where the sources are found!
+        findSourceFiles(options.getSources(),
+                        suffixRules.keySet(),
+                        sources,
+                        modules,
+                        current_module,
+                        options.isDefaultPackagePermitted(),
+                        false);
 
-            if (sources.isEmpty()) {
-                Log.error("Found nothing to compile!");
-                return -1;
-            }
+        if (sources.isEmpty()) {
+            Log.error("Found nothing to compile!");
+            return -1;
+        }
 
-            // Create a map of all source files that are available for linking. Both -src and
-            // -sourcepath point to such files. It is possible to specify multiple
-            // -sourcepath options to enable different filtering rules. If the
-            // filters are the same for multiple sourcepaths, they may be concatenated
-            // using :(;). Before sending the list of sourcepaths to javac, they are
-            // all concatenated. The list created here is used by the SmartFileWrapper to
-            // make sure only the correct sources are actually available.
-            // We might find more modules here as well.
-            Map<String,Source> sources_to_link_to = new HashMap<>();
-            findFiles(args, "-src", Util.set(".java"), sources_to_link_to, modules, current_module, true);
-            findFiles(args, "-sourcepath", Util.set(".java"), sources_to_link_to, modules, current_module, true);
-            // Rewrite the -src option to make it through to the javac instances.
-            rewriteOptions(args, "-src", "-sourcepath");
+        // Create a map of all source files that are available for linking. Both -src and
+        // -sourcepath point to such files. It is possible to specify multiple
+        // -sourcepath options to enable different filtering rules. If the
+        // filters are the same for multiple sourcepaths, they may be concatenated
+        // using :(;). Before sending the list of sourcepaths to javac, they are
+        // all concatenated. The list created here is used by the SmartFileWrapper to
+        // make sure only the correct sources are actually available.
+        // We might find more modules here as well.
+        Map<String,Source> sources_to_link_to = new HashMap<>();
 
-            // Find all class files allowable for linking.
-            // And pickup knowledge of all modules found here.
-            // This cannot currently filter classes inside jar files.
-//          Map<String,Source> classes_to_link_to = new HashMap<String,Source>();
-//          findFiles(args, "-classpath", Util.set(".class"), classes_to_link_to, modules, current_module, true);
+        List<SourceLocation> sourceResolutionLocations = new ArrayList<>();
+        sourceResolutionLocations.addAll(options.getSources());
+        sourceResolutionLocations.addAll(options.getSourceSearchPaths());
+        findSourceFiles(sourceResolutionLocations,
+                        Collections.singleton(".java"),
+                        sources_to_link_to,
+                        modules,
+                        current_module,
+                        options.isDefaultPackagePermitted(),
+                        true);
 
-            // Find all module sources allowable for linking.
-//          Map<String,Source> modules_to_link_to = new HashMap<String,Source>();
-//          findFiles(args, "-modulepath", Util.set(".class"), modules_to_link_to, modules, current_module, true);
+        // Find all class files allowable for linking.
+        // And pickup knowledge of all modules found here.
+        // This cannot currently filter classes inside jar files.
+//      Map<String,Source> classes_to_link_to = new HashMap<String,Source>();
+//      findFiles(args, "-classpath", Util.set(".class"), classes_to_link_to, modules, current_module, true);
 
-            // Add the set of sources to the build database.
-            javac_state.now().flattenPackagesSourcesAndArtifacts(modules);
-            javac_state.now().checkInternalState("checking sources", false, sources);
-            javac_state.now().checkInternalState("checking linked sources", true, sources_to_link_to);
-            javac_state.setVisibleSources(sources_to_link_to);
+        // Find all module sources allowable for linking.
+//      Map<String,Source> modules_to_link_to = new HashMap<String,Source>();
+//      findFiles(args, "-modulepath", Util.set(".class"), modules_to_link_to, modules, current_module, true);
 
-            // If there is any change in the source files, taint packages
-            // and mark the database in need of saving.
-            javac_state.checkSourceStatus(false);
+        // Add the set of sources to the build database.
+        javac_state.now().flattenPackagesSourcesAndArtifacts(modules);
+        javac_state.now().checkInternalState("checking sources", false, sources);
+        javac_state.now().checkInternalState("checking linked sources", true, sources_to_link_to);
+        javac_state.setVisibleSources(sources_to_link_to);
 
-            // Find all existing artifacts. Their timestamp will match the last modified timestamps stored
-            // in javac_state, simply because loading of the JavacState will clean out all artifacts
-            // that do not match the javac_state database.
-            javac_state.findAllArtifacts();
+        // If there is any change in the source files, taint packages
+        // and mark the database in need of saving.
+        javac_state.checkSourceStatus(false);
+
+        // Find all existing artifacts. Their timestamp will match the last modified timestamps stored
+        // in javac_state, simply because loading of the JavacState will clean out all artifacts
+        // that do not match the javac_state database.
+        javac_state.findAllArtifacts();
 
-            // Remove unidentified artifacts from the bin, gensrc and header dirs.
-            // (Unless we allow them to be there.)
-            // I.e. artifacts that are not known according to the build database (javac_state).
-            // For examples, files that have been manually copied into these dirs.
-            // Artifacts with bad timestamps (ie the on disk timestamp does not match the timestamp
-            // in javac_state) have already been removed when the javac_state was loaded.
-            if (!findBooleanOption(args, "--permit-unidentified-artifacts")) {
-                javac_state.removeUnidentifiedArtifacts();
-            }
-            // Go through all sources and taint all packages that miss artifacts.
-            javac_state.taintPackagesThatMissArtifacts();
+        // Remove unidentified artifacts from the bin, gensrc and header dirs.
+        // (Unless we allow them to be there.)
+        // I.e. artifacts that are not known according to the build database (javac_state).
+        // For examples, files that have been manually copied into these dirs.
+        // Artifacts with bad timestamps (ie the on disk timestamp does not match the timestamp
+        // in javac_state) have already been removed when the javac_state was loaded.
+        if (!options.isUnidentifiedArtifactPermitted()) {
+            javac_state.removeUnidentifiedArtifacts();
+        }
+        // Go through all sources and taint all packages that miss artifacts.
+        javac_state.taintPackagesThatMissArtifacts();
 
-            // Now clean out all known artifacts belonging to tainted packages.
-            javac_state.deleteClassArtifactsInTaintedPackages();
-            // Copy files, for example property files, images files, xml files etc etc.
-            javac_state.performCopying(bin_dir, suffix_rules);
-            // Translate files, for example compile properties or compile idls.
-            javac_state.performTranslation(gensrc_dir, suffix_rules);
-            // Add any potentially generated java sources to the tobe compiled list.
-            // (Generated sources must always have a package.)
-            Map<String,Source> generated_sources = new HashMap<>();
-            Source.scanRoot(gensrc_dir, Util.set(".java"), null, null, null, null,
-                   generated_sources, modules, current_module, false, true, false);
+        // Now clean out all known artifacts belonging to tainted packages.
+        javac_state.deleteClassArtifactsInTaintedPackages();
+        // Copy files, for example property files, images files, xml files etc etc.
+        javac_state.performCopying(Util.pathToFile(options.getDestDir()), suffixRules);
+        // Translate files, for example compile properties or compile idls.
+        javac_state.performTranslation(Util.pathToFile(gensrc), suffixRules);
+        // Add any potentially generated java sources to the tobe compiled list.
+        // (Generated sources must always have a package.)
+        Map<String,Source> generated_sources = new HashMap<>();
+
+        try {
+
+            Source.scanRoot(Util.pathToFile(options.getGenSrcDir()), Util.set(".java"), null, null, null, null,
+                    generated_sources, modules, current_module, false, true, false);
             javac_state.now().flattenPackagesSourcesAndArtifacts(modules);
             // Recheck the the source files and their timestamps again.
             javac_state.checkSourceStatus(true);
@@ -320,7 +329,7 @@
             // right, then incremental builds will fail with subtility.
             // If any difference is detected, then we will fail hard here.
             // This is an important safety net.
-            javac_state.compareWithMakefileList(makefile_source_list);
+            javac_state.compareWithMakefileList(Util.pathToFile(options.getSourceReferenceList()));
 
             // Do the compilations, repeatedly until no tainted packages exist.
             boolean again;
@@ -330,7 +339,7 @@
             do {
                 // Clean out artifacts in tainted packages.
                 javac_state.deleteClassArtifactsInTaintedPackages();
-                again = javac_state.performJavaCompilations(bin_dir, server_settings, args, recently_compiled, rc);
+                again = javac_state.performJavaCompilations(options, recently_compiled, rc);
                 if (!rc[0]) break;
             } while (again);
             // Only update the state if the compile went well.
@@ -351,620 +360,71 @@
         }
     }
 
-    /**
-     * Are java source files passed on the command line?
-     */
-    private boolean findJavaSourceFiles(String[] args) {
-        String prev = "";
-        for (String s : args) {
-            if (s.endsWith(".java") && !prev.equals("-xf") && !prev.equals("-if")) {
-                return true;
-            }
-            prev = s;
-        }
-        return false;
-    }
+    private static boolean validateOptions(Options options) {
+
+        String err = null;
 
-    /**
-     * Is an at file passed on the command line?
-     */
-    private boolean findAtFile(String[] args) {
-        for (String s : args) {
-            if (s.startsWith("@")) {
-                return true;
-            }
+        if (options.getDestDir() == null) {
+            err = "Please specify output directory.";
+        } else if (options.isJavaFilesAmongJavacArgs()) {
+            err = "Sjavac does not handle explicit compilation of single .java files.";
+        } else if (options.isAtFilePresent()) {
+            err = "Sjavac does not handle @-files.";
+        } else if (options.getServerConf() == null) {
+            err = "No server configuration provided.";
+        } else if (!options.getImplicitPolicy().equals("none")) {
+            err = "The only allowed setting for sjavac is -implicit:none";
+        } else if (options.getSources().isEmpty()) {
+            err = "You have to specify -src.";
+        } else if (options.getTranslationRules().size() > 1
+                && options.getGenSrcDir() == null) {
+            err = "You have translators but no gensrc dir (-s) specified!";
         }
-        return false;
-    }
 
-    /**
-     * Find the log level setting.
-     */
-    private String findLogLevel(String[] args) {
-        for (String s : args) {
-            if (s.startsWith("--log=") && s.length()>6) {
-                return s.substring(6);
-            }
-            if (s.equals("-verbose")) {
-                return "info";
-            }
-        }
-        return "info";
+        if (err != null)
+            Log.error(err);
+
+        return err == null;
+
     }
 
-    /**
-     * Remove smart javac wrapper arguments, before feeding
-     * the args to the plain javac.
-     */
-    static String[] removeWrapperArgs(String[] args) {
-        String[] out = new String[args.length];
-        // The first source path index is remembered
-        // here. So that all following can be concatenated to it.
-        int source_path = -1;
-        // The same for class path.
-        int class_path = -1;
-        // And module path.
-        int module_path = -1;
-        int j = 0;
-        for (int i = 0; i<args.length; ++i) {
-            if (args[i].equals("-src") ||
-                args[i].equals("-x") ||
-                args[i].equals("-i") ||
-                args[i].equals("-xf") ||
-                args[i].equals("-if") ||
-                args[i].equals("-copy") ||
-                args[i].equals("-tr") ||
-                args[i].equals("-j")) {
-                // Just skip it and skip following value
-                i++;
-            } else if (args[i].startsWith("--server:")) {
-                // Just skip it.
-            } else if (args[i].startsWith("--log=")) {
-                // Just skip it.
-            } else if (args[i].equals("--permit-unidentified-artifacts")) {
-                // Just skip it.
-            } else if (args[i].equals("--permit-sources-without-package")) {
-                // Just skip it.
-            } else if (args[i].equals("--compare-found-sources")) {
-                // Just skip it and skip verify file name
-                i++;
-            } else if (args[i].equals("-sourcepath")) {
-                if (source_path == -1) {
-                    source_path = j;
-                    out[j] = args[i];
-                    out[j+1] = args[i+1];
-                    j+=2;
-                    i++;
-                } else {
-                    // Skip this and its argument, but
-                    // append argument to found sourcepath.
-                    out[source_path+1] = out[source_path+1]+File.pathSeparatorChar+args[i+1];
-                    i++;
-                }
-            } else if (args[i].equals("-classpath") || args[i].equals("-cp")) {
-                if (class_path == -1) {
-                    class_path = j;
-                    out[j] = args[i];
-                    out[j+1] = args[i+1];
-                    j+=2;
-                    i++;
-                } else {
-                    // Skip this and its argument, but
-                    // append argument to found sourcepath.
-                    out[class_path+1] = out[class_path+1]+File.pathSeparatorChar+args[i+1];
-                    i++;
-                }
-            } else if (args[i].equals("-modulepath")) {
-                if (module_path == -1) {
-                    module_path = j;
-                    out[j] = args[i];
-                    out[j+1] = args[i+1];
-                    j+=2;
-                    i++;
-                } else {
-                    // Skip this and its argument, but
-                    // append argument to found sourcepath.
-                    out[module_path+1] = out[module_path+1]+File.pathSeparatorChar+args[i+1];
-                    i++;
-                }
-             } else {
-                // Copy argument.
-                out[j] = args[i];
-                j++;
-            }
+    private static boolean createIfMissing(Path dir) {
+
+        if (Files.isDirectory(dir))
+            return true;
+
+        if (Files.exists(dir)) {
+            Log.error(dir + " is not a directory.");
+            return false;
         }
-        String[] ret = new String[j];
-        System.arraycopy(out, 0, ret, 0, j);
-        return ret;
-    }
 
-    /**
-     * Make sure directory exist, create it if not.
-     */
-    private static boolean makeSureExists(File dir) {
-        // Make sure the dest directories exist.
-        if (!dir.exists()) {
-            if (!dir.mkdirs()) {
-                Log.error("Could not create the directory "+dir.getPath());
-                return false;
-            }
+        try {
+            Files.createDirectories(dir);
+        } catch (IOException e) {
+            Log.error("Could not create directory: " + e.getMessage());
+            return false;
         }
+
         return true;
     }
 
-    /**
-     * Verify that a package pattern is valid.
-     */
-    private static void checkPattern(String s) throws ProblemException {
-        // Package names like foo.bar.gamma are allowed, and
-        // package names suffixed with .* like foo.bar.* are
-        // also allowed.
-        Pattern p = Pattern.compile("[a-zA-Z_]{1}[a-zA-Z0-9_]*(\\.[a-zA-Z_]{1}[a-zA-Z0-9_]*)*(\\.\\*)?+");
-        Matcher m = p.matcher(s);
-        if (!m.matches()) {
-            throw new ProblemException("The string \""+s+"\" is not a proper package name pattern.");
-        }
-    }
-
-    /**
-     * Verify that a translate pattern is valid.
-     */
-    private static void checkTranslatePattern(String s) throws ProblemException {
-        // .prop=com.sun.tools.javac.smart.CompileProperties
-        // .idl=com.sun.corba.CompileIdl
-        // .g3=antlr.CompileGrammar,debug=true
-        Pattern p = Pattern.compile(
-            "\\.[a-zA-Z_]{1}[a-zA-Z0-9_]*=[a-z_]{1}[a-z0-9_]*(\\.[a-z_]{1}[a-z0-9_]*)*"+
-            "(\\.[a-zA-Z_]{1}[a-zA-Z0-9_]*)(,.*)?");
-        Matcher m = p.matcher(s);
-        if (!m.matches()) {
-            throw new ProblemException("The string \""+s+"\" is not a proper translate pattern.");
-        }
-    }
-
-    /**
-     * Verify that a copy pattern is valid.
-     */
-    private static void checkCopyPattern(String s) throws ProblemException {
-        // .gif
-        // .html
-        Pattern p = Pattern.compile(
-            "\\.[a-zA-Z_]{1}[a-zA-Z0-9_]*");
-        Matcher m = p.matcher(s);
-        if (!m.matches()) {
-            throw new ProblemException("The string \""+s+"\" is not a proper suffix.");
-        }
-    }
-
-    /**
-     * Verify that a source file name is valid.
-     */
-    private static void checkFilePattern(String s) throws ProblemException {
-        // File names like foo/bar/gamma/Bar.java are allowed,
-        // as well as /bar/jndi.properties as well as,
-        // */bar/Foo.java
-        Pattern p = null;
-        if (File.separatorChar == '\\') {
-            p = Pattern.compile("\\*?(.+\\\\)*.+");
-        }
-        else if (File.separatorChar == '/') {
-            p = Pattern.compile("\\*?(.+/)*.+");
-        } else {
-            throw new ProblemException("This platform uses the unsupported "+File.separatorChar+
-                                      " as file separator character. Please add support for it!");
-        }
-        Matcher m = p.matcher(s);
-        if (!m.matches()) {
-            throw new ProblemException("The string \""+s+"\" is not a proper file name.");
-        }
-    }
-
-    /**
-     * Scan the arguments to find an option is used.
-     */
-    private static boolean hasOption(String[] args, String option) {
-        for (String a : args) {
-            if (a.equals(option)) return true;
-        }
-        return false;
-    }
-
-    /**
-     * Check if -implicit is supplied, if so check that it is none.
-     * If -implicit is not supplied, supply -implicit:none
-     * Only implicit:none is allowed because otherwise the multicore compilations
-     * and dependency tracking will be tangled up.
-     */
-    private static String[] verifyImplicitOption(String[] args)
-        throws ProblemException {
-
-        boolean foundImplicit = false;
-        for (String a : args) {
-            if (a.startsWith("-implicit:")) {
-                foundImplicit = true;
-                if (!a.equals("-implicit:none")) {
-                    throw new ProblemException("The only allowed setting for sjavac is -implicit:none, it is also the default.");
-                }
-            }
-        }
-        if (foundImplicit) {
-            return args;
-        }
-        // -implicit:none not found lets add it.
-        String[] newargs = new String[args.length+1];
-        System.arraycopy(args,0, newargs, 0, args.length);
-        newargs[args.length] = "-implicit:none";
-        return newargs;
-    }
 
-    /**
-     * Rewrite a single option into something else.
-     */
-    private static void rewriteOptions(String[] args, String option, String new_option) {
-        for (int i=0; i<args.length; ++i) {
-            if (args[i].equals(option)) {
-                args[i] = new_option;
-            }
-        }
-    }
-
-    /**
-     * Scan the arguments to find an option that specifies a directory.
-     * Create the directory if necessary.
-     */
-    private static File findDirectoryOption(String[] args, String option, String name, boolean needed, boolean allow_dups, boolean create)
-        throws ProblemException, ProblemException {
-        File dir = null;
-        for (int i = 0; i<args.length; ++i) {
-            if (args[i].equals(option)) {
-                if (dir != null) {
-                    throw new ProblemException("You have already specified the "+name+" dir!");
-                }
-                if (i+1 >= args.length) {
-                    throw new ProblemException("You have to specify a directory following "+option+".");
-                }
-                if (args[i+1].indexOf(File.pathSeparatorChar) != -1) {
-                    throw new ProblemException("You must only specify a single directory for "+option+".");
-                }
-                dir = new File(args[i+1]);
-                if (!dir.exists()) {
-                    if (!create) {
-                         throw new ProblemException("This directory does not exist: "+dir.getPath());
-                    } else
-                    if (!makeSureExists(dir)) {
-                        throw new ProblemException("Cannot create directory "+dir.getPath());
-                    }
-                }
-                if (!dir.isDirectory()) {
-                    throw new ProblemException("\""+args[i+1]+"\" is not a directory.");
-                }
-            }
-        }
-        if (dir == null && needed) {
-            throw new ProblemException("You have to specify "+option);
-        }
-        try {
-            if (dir != null)
-                return dir.getCanonicalFile();
-        } catch (IOException e) {
-            throw new ProblemException(""+e);
-        }
-        return null;
-    }
+    /** Find source files in the given source locations. */
+    public static void findSourceFiles(List<SourceLocation> sourceLocations,
+                                       Set<String> sourceTypes,
+                                       Map<String,Source> foundFiles,
+                                       Map<String, Module> foundModules,
+                                       Module currentModule,
+                                       boolean permitSourcesInDefaultPackage,
+                                       boolean inLinksrc) {
 
-    /**
-     * Option is followed by path.
-     */
-    private static boolean shouldBeFollowedByPath(String o) {
-        return o.equals("-s") ||
-               o.equals("-h") ||
-               o.equals("-d") ||
-               o.equals("-sourcepath") ||
-               o.equals("-classpath") ||
-               o.equals("-cp") ||
-               o.equals("-bootclasspath") ||
-               o.equals("-src");
-    }
-
-    /**
-     * Add -src before source root directories if not already there.
-     */
-    private static String[] addSrcBeforeDirectories(String[] args) {
-        List<String> newargs = new ArrayList<>();
-        for (int i = 0; i<args.length; ++i) {
-            File dir = new File(args[i]);
-            if (dir.exists() && dir.isDirectory()) {
-                if (i == 0 || !shouldBeFollowedByPath(args[i-1])) {
-                    newargs.add("-src");
-                }
-            }
-            newargs.add(args[i]);
-        }
-        return newargs.toArray(new String[0]);
-    }
-
-    /**
-     * Check the -src options.
-     */
-    private static void checkSrcOption(String[] args)
-        throws ProblemException {
-        Set<File> dirs = new HashSet<>();
-        for (int i = 0; i<args.length; ++i) {
-            if (args[i].equals("-src")) {
-                if (i+1 >= args.length) {
-                    throw new ProblemException("You have to specify a directory following -src.");
-                }
-                StringTokenizer st = new StringTokenizer(args[i+1], File.pathSeparator);
-                while (st.hasMoreElements()) {
-                    File dir = new File(st.nextToken());
-                    if (!dir.exists()) {
-                        throw new ProblemException("This directory does not exist: "+dir.getPath());
-                    }
-                    if (!dir.isDirectory()) {
-                        throw new ProblemException("\""+dir.getPath()+"\" is not a directory.");
-                    }
-                    if (dirs.contains(dir)) {
-                        throw new ProblemException("The src directory \""+dir.getPath()+"\" is specified more than once!");
-                    }
-                    dirs.add(dir);
-                }
-            }
-        }
-        if (dirs.isEmpty()) {
-            throw new ProblemException("You have to specify -src.");
+        for (SourceLocation source : sourceLocations) {
+            source.findSourceFiles(sourceTypes,
+                                   foundFiles,
+                                   foundModules,
+                                   currentModule,
+                                   permitSourcesInDefaultPackage,
+                                   inLinksrc);
         }
     }
-
-    /**
-     * Scan the arguments to find an option that specifies a file.
-     */
-    private static File findFileOption(String[] args, String option, String name, boolean needed)
-        throws ProblemException, ProblemException {
-        File file = null;
-        for (int i = 0; i<args.length; ++i) {
-            if (args[i].equals(option)) {
-                if (file != null) {
-                    throw new ProblemException("You have already specified the "+name+" file!");
-                }
-                if (i+1 >= args.length) {
-                    throw new ProblemException("You have to specify a file following "+option+".");
-                }
-                file = new File(args[i+1]);
-                if (file.isDirectory()) {
-                    throw new ProblemException("\""+args[i+1]+"\" is not a file.");
-                }
-                if (!file.exists() && needed) {
-                    throw new ProblemException("The file \""+args[i+1]+"\" does not exist.");
-                }
-
-            }
-        }
-        if (file == null && needed) {
-            throw new ProblemException("You have to specify "+option);
-        }
-        return file;
-    }
-
-    /**
-     * Look for a specific switch, return true if found.
-     */
-    public static boolean findBooleanOption(String[] args, String option) {
-        for (String arg : args) {
-            if (arg.equals(option))
-                return true;
-        }
-        return false;
-    }
-
-    /**
-     * Scan the arguments to find an option that specifies a number.
-     */
-    public static int findNumberOption(String[] args, String option) {
-        int rc = 0;
-        for (int i = 0; i<args.length; ++i) {
-            if (args[i].equals(option)) {
-                if (args.length > i+1) {
-                    rc = Integer.parseInt(args[i+1]);
-                }
-            }
-        }
-        return rc;
-    }
-
-    /**
-     * Scan the arguments to find the option (-tr) that setup translation rules to java source
-     * from different sources. For example: .properties are translated using CompileProperties
-     * The found translators are stored as suffix rules.
-     */
-    private static void findTranslateOptions(String[] args, Map<String,Transformer> suffix_rules)
-        throws ProblemException, ProblemException {
-
-        for (int i = 0; i<args.length; ++i) {
-            if (args[i].equals("-tr")) {
-                if (i+1 >= args.length) {
-                    throw new ProblemException("You have to specify a translate rule following -tr.");
-                }
-                String s = args[i+1];
-                checkTranslatePattern(s);
-                int ep = s.indexOf("=");
-                String suffix = s.substring(0,ep);
-                String classname = s.substring(ep+1);
-                if (suffix_rules.get(suffix) != null) {
-                    throw new ProblemException("You have already specified a "+
-                                              "rule for the suffix "+suffix);
-                }
-                if (s.equals(".class")) {
-                    throw new ProblemException("You cannot have a translator for .class files!");
-                }
-                if (s.equals(".java")) {
-                    throw new ProblemException("You cannot have a translator for .java files!");
-                }
-                String extra = null;
-                int exp = classname.indexOf(",");
-                if (exp != -1) {
-                    extra = classname.substring(exp+1);
-                    classname = classname.substring(0,exp);
-                }
-                try {
-                    Class<?> cl = Class.forName(classname);
-                    Transformer t = (Transformer)cl.newInstance();
-                    t.setExtra(extra);
-                    suffix_rules.put(suffix, t);
-                }
-                catch (Exception e) {
-                    throw new ProblemException("Cannot use "+classname+" as a translator!");
-                }
-            }
-        }
-    }
-
-    /**
-     * Scan the arguments to find the option (-copy) that setup copying rules into the bin dir.
-     * For example: -copy .html
-     * The found copiers are stored as suffix rules as well. No translation is done, just copying.
-     */
-    private void findCopyOptions(String[] args, Map<String,Transformer> suffix_rules)
-        throws ProblemException, ProblemException {
-
-        for (int i = 0; i<args.length; ++i) {
-            if (args[i].equals("-copy")) {
-                if (i+1 >= args.length) {
-                    throw new ProblemException("You have to specify a translate rule following -tr.");
-                }
-                String s = args[i+1];
-                checkCopyPattern(s);
-                if (suffix_rules.get(s) != null) {
-                    throw new ProblemException("You have already specified a "+
-                                              "rule for the suffix "+s);
-                }
-                if (s.equals(".class")) {
-                    throw new ProblemException("You cannot have a copy rule for .class files!");
-                }
-                if (s.equals(".java")) {
-                    throw new ProblemException("You cannot have a copy rule for .java files!");
-                }
-                suffix_rules.put(s, javac_state.getCopier());
-            }
-        }
-    }
-
-    /**
-     * Rewrite a / separated path into \ separated, but only
-     * if we are running on a platform were File.separatorChar=='\', ie winapi.
-     */
-    private String fixupSeparator(String p) {
-        if (File.separatorChar == '/') return p;
-        return p.replaceAll("/", "\\\\");
-    }
-
-    /**
-     * Scan the arguments for -i -x -xf -if followed by the option
-     * -src, -sourcepath, -modulepath or -classpath and produce a map of all the
-     * files to referenced for that particular option.
-     *
-     * Store the found sources and the found modules in the supplied maps.
-     */
-    private boolean findFiles(String[] args, String option, Set<String> suffixes,
-                              Map<String,Source> found_files, Map<String, Module> found_modules,
-                              Module current_module, boolean inLinksrc)
-        throws ProblemException, ProblemException
-    {
-        // Track which source roots, source path roots and class path roots have been added.
-        Set<File> roots = new HashSet<>();
-        // Track the current set of package includes,excludes as well as excluded source files,
-        // to be used in the next -src/-sourcepath/-classpath
-        List<String> includes = new LinkedList<>();
-        List<String> excludes = new LinkedList<>();
-        List<String> excludefiles = new LinkedList<>();
-        List<String> includefiles = new LinkedList<>();
-        // This include is used to find all modules in the source.
-        List<String> moduleinfo = new LinkedList<>();
-        moduleinfo.add("module-info.java");
-
-        for (int i = 0; i<args.length; ++i) {
-            if (args[i].equals("-i")) {
-                if (i+1 >= args.length) {
-                    throw new ProblemException("You have to specify a package pattern following -i");
-                }
-                String incl = args[i+1];
-                checkPattern(incl);
-                includes.add(incl);
-            }
-            if (args[i].equals("-x")) {
-                if (i+1 >= args.length) {
-                    throw new ProblemException("You have to specify a package pattern following -x");
-                }
-                String excl = args[i+1];
-                checkPattern(excl);
-                excludes.add(excl);
-            }
-            if (args[i].equals("-xf")) {
-                if (i+1 >= args.length) {
-                    throw new ProblemException("You have to specify a file following -xf");
-                }
-                String exclf = args[i+1];
-                checkFilePattern(exclf);
-                exclf = Util.normalizeDriveLetter(exclf);
-                excludefiles.add(fixupSeparator(exclf));
-            }
-            if (args[i].equals("-if")) {
-                if (i+1 >= args.length) {
-                    throw new ProblemException("You have to specify a file following -xf");
-                }
-                String inclf = args[i+1];
-                checkFilePattern(inclf);
-                inclf = Util.normalizeDriveLetter(inclf);
-                includefiles.add(fixupSeparator(inclf));
-            }
-            if (args[i].equals(option)) {
-                if (i+1 >= args.length) {
-                    throw new ProblemException("You have to specify a directory following "+option);
-                }
-                String[] root_dirs = args[i+1].split(File.pathSeparator);
-                for (String r : root_dirs) {
-                    File root = new File(r);
-                    if (!root.isDirectory()) {
-                        throw new ProblemException("\""+r+"\" is not a directory.");
-                    }
-                    try {
-                        root = root.getCanonicalFile();
-                    } catch (IOException e) {
-                        throw new ProblemException(""+e);
-                    }
-                    if (roots.contains(root)) {
-                        throw new ProblemException("\""+r+"\" has already been used for "+option);
-                    }
-                    if (root.equals(bin_dir)) {
-                        throw new ProblemException("\""+r+"\" cannot be used both for "+option+" and -d");
-                    }
-                    if (root.equals(gensrc_dir)) {
-                        throw new ProblemException("\""+r+"\" cannot be used both for "+option+" and -s");
-                    }
-                    if (root.equals(header_dir)) {
-                        throw new ProblemException("\""+r+"\" cannot be used both for "+option+" and -h");
-                    }
-                    roots.add(root);
-                    Source.scanRoot(root, suffixes, excludes, includes, excludefiles, includefiles,
-                                    found_files, found_modules, current_module,
-                                    findBooleanOption(args, "--permit-sources-without-package"),
-                                    false, inLinksrc);
-                }
-            }
-            if (args[i].equals("-src") ||
-                args[i].equals("-sourcepath") ||
-                args[i].equals("-modulepath") ||
-                args[i].equals("-classpath") ||
-                args[i].equals("-cp"))
-            {
-                // Reset the includes,excludes and excludefiles after they have been used.
-                includes = new LinkedList<>();
-                excludes = new LinkedList<>();
-                excludefiles = new LinkedList<>();
-                includefiles = new LinkedList<>();
-            }
-        }
-        return true;
-    }
-
 }
-
--- a/langtools/src/share/classes/com/sun/tools/sjavac/Source.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/Source.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -201,7 +201,7 @@
         // It might contain other source files however, (for -tr and -copy) these will
         // always be included, since no package pattern can match the root directory.
         currentModule = addFilesInDir(root, root_prefix, root, suffixes, permitSourcesWithoutPackage,
-                                       excludeFiles, includeFiles, false,
+                                       excludeFiles, includeFiles,
                                        foundFiles, foundModules, currentModule,
                                        inGensrc, inLinksrc);
 
@@ -211,24 +211,28 @@
                 // Descend into the directory structure.
                 scanDirectory(d, root_prefix, root, suffixes,
                               excludes, includes, excludeFiles, includeFiles,
-                              false, foundFiles, foundModules, currentModule, inGensrc, inLinksrc);
+                              foundFiles, foundModules, currentModule, inGensrc, inLinksrc);
             }
         }
     }
 
     /**
      * Test if a path matches any of the patterns given.
-     * The pattern foo.bar matches only foo.bar
-     * The pattern foo.* matches foo.bar and foo.bar.zoo etc
+     * The pattern foo/bar matches only foo/bar
+     * The pattern foo/* matches foo/bar and foo/bar/zoo etc
      */
     static private boolean hasMatch(String path, List<String> patterns) {
+
+        // Convert Windows '\' to '/' for the sake of comparing with the patterns
+        path = path.replace(File.separatorChar, '/');
+
         for (String p : patterns) {
             // Exact match
-            if (p.equals(path)) {
+            if (p.equals(path))
                 return true;
-            }
+
             // Single dot the end matches this package and all its subpackages.
-            if (p.endsWith(".*")) {
+            if (p.endsWith("/*")) {
                 // Remove the wildcard
                 String patprefix = p.substring(0,p.length()-2);
                 // Does the path start with the pattern prefix?
@@ -237,7 +241,7 @@
                     // If the path is longer, then make sure that
                     // the next part of the path starts with a dot (.) to prevent
                     // wildcard matching in the middle of a package name.
-                    if (path.length()==patprefix.length() || path.charAt(patprefix.length())=='.') {
+                    if (path.length()==patprefix.length() || path.charAt(patprefix.length())=='/') {
                         return true;
                     }
                 }
@@ -251,6 +255,9 @@
      // The pattern foo/bar.java only matches foo/bar.java
      // The pattern */bar.java matches foo/bar.java and zoo/bar.java etc
     static private boolean hasFileMatch(String path, List<String> patterns) {
+        // Convert Windows '\' to '/' for the sake of comparing with the patterns
+        path = path.replace(File.separatorChar, '/');
+
         path = Util.normalizeDriveLetter(path);
         for (String p : patterns) {
             // Exact match
@@ -276,7 +283,7 @@
      */
     static private Module addFilesInDir(File dir, int rootPrefix, File root,
                                         Set<String> suffixes, boolean allow_javas,
-                                        List<String> excludeFiles, List<String> includeFiles, boolean all,
+                                        List<String> excludeFiles, List<String> includeFiles,
                                         Map<String,Source> foundFiles,
                                         Map<String,Module> foundModules,
                                         Module currentModule,
@@ -285,79 +292,82 @@
         throws ProblemException
     {
         for (File f : dir.listFiles()) {
-            if (f.isFile()) {
-                boolean should_add =
-                    (excludeFiles == null || excludeFiles.isEmpty() || !hasFileMatch(f.getPath(), excludeFiles))
-                    && (includeFiles == null || includeFiles.isEmpty() || hasFileMatch(f.getPath(), includeFiles));
+
+            if (!f.isFile())
+                continue;
+
+            boolean should_add =
+                (excludeFiles == null || excludeFiles.isEmpty() || !hasFileMatch(f.getPath(), excludeFiles))
+                && (includeFiles == null || includeFiles.isEmpty() || hasFileMatch(f.getPath(), includeFiles));
+
+            if (!should_add)
+                continue;
 
-                if (should_add) {
-                    if (!allow_javas && f.getName().endsWith(".java")) {
-                        throw new ProblemException("No .java files are allowed in the source root "+dir.getPath()+
-                                                   ", please remove "+f.getName());
-                    }
-                    // Extract the file name relative the root.
-                    String fn = f.getPath().substring(rootPrefix);
-                    // Extract the package name.
-                    int sp = fn.lastIndexOf(File.separatorChar);
-                    String pkg = "";
-                    if (sp != -1) {
-                        pkg = fn.substring(0,sp).replace(File.separatorChar,'.');
-                    }
-                    // Is this a module-info.java file?
-                    if (fn.endsWith("module-info.java")) {
-                        // Aha! We have recursed into a module!
-                        if (!currentModule.name().equals("")) {
-                            throw new ProblemException("You have an extra module-info.java inside a module! Please remove "+fn);
+            if (!allow_javas && f.getName().endsWith(".java")) {
+                throw new ProblemException("No .java files are allowed in the source root "+dir.getPath()+
+                                           ", please remove "+f.getName());
+            }
+            // Extract the file name relative the root.
+            String fn = f.getPath().substring(rootPrefix);
+            // Extract the package name.
+            int sp = fn.lastIndexOf(File.separatorChar);
+            String pkg = "";
+            if (sp != -1) {
+                pkg = fn.substring(0,sp);
+            }
+            // Is this a module-info.java file?
+            if (fn.endsWith("module-info.java")) {
+                // Aha! We have recursed into a module!
+                if (!currentModule.name().equals("")) {
+                    throw new ProblemException("You have an extra module-info.java inside a module! Please remove "+fn);
+                }
+                String module_name = fn.substring(0,fn.length()-16);
+                currentModule = new Module(module_name, f.getPath());
+                foundModules.put(module_name, currentModule);
+            }
+            // Extract the suffix.
+            int dp = fn.lastIndexOf(".");
+            String suffix = "";
+            if (dp > 0) {
+                suffix = fn.substring(dp);
+            }
+            // Should the file be added?
+            if (suffixes.contains(suffix)) {
+                Source of = foundFiles.get(f.getPath());
+                if (of != null) {
+                    throw new ProblemException("You have already added the file "+fn+" from "+of.file().getPath());
+                }
+                of = currentModule.lookupSource(f.getPath());
+                if (of != null) {
+                    // Oups, the source is already added, could be ok, could be not, lets check.
+                    if (inLinksrc) {
+                        // So we are collecting sources for linking only.
+                        if (of.isLinkedOnly()) {
+                            // Ouch, this one is also for linking only. Bad.
+                            throw new ProblemException("You have already added the link only file "+fn+" from "+of.file().getPath());
                         }
-                        String module_name = fn.substring(0,fn.length()-16);
-                        currentModule = new Module(module_name, f.getPath());
-                        foundModules.put(module_name, currentModule);
-                    }
-                    // Extract the suffix.
-                    int dp = fn.lastIndexOf(".");
-                    String suffix = "";
-                    if (dp > 0) {
-                        suffix = fn.substring(dp);
-                    }
-                    // Should the file be added?
-                    if (all || suffixes.contains(suffix)) {
-                        Source of = foundFiles.get(f.getPath());
-                        if (of != null) {
-                            throw new ProblemException("You have already added the file "+fn+" from "+of.file().getPath());
-                        }
-                        of = currentModule.lookupSource(f.getPath());
-                        if (of != null) {
-                            // Oups, the source is already added, could be ok, could be not, lets check.
-                            if (inLinksrc) {
-                                // So we are collecting sources for linking only.
-                                if (of.isLinkedOnly()) {
-                                    // Ouch, this one is also for linking only. Bad.
-                                    throw new ProblemException("You have already added the link only file "+fn+" from "+of.file().getPath());
-                                }
-                                // Ok, the existing source is to be compiled. Thus this link only is redundant
-                                // since all compiled are also linked to. Continue to the next source.
-                                // But we need to add the source, so that it will be visible to linking,
-                                // if not the multi core compile will fail because a JavaCompiler cannot
-                                // find the necessary dependencies for its part of the source.
-                                foundFiles.put(f.getPath(), of);
-                                continue;
-                            } else {
-                                // We are looking for sources to compile, if we find an existing to be compiled
-                                // source with the same name, it is an internal error, since we must
-                                // find the sources to be compiled before we find the sources to be linked to.
-                                throw new ProblemException("Internal error: Double add of file "+fn+" from "+of.file().getPath());
-                            }
-                        }
-                        Source s = new Source(currentModule, f.getPath(), f, root);
-                        if (inGensrc) s.markAsGenerated();
-                        if (inLinksrc) {
-                            s.markAsLinkedOnly();
-                        }
-                        pkg = currentModule.name()+":"+pkg;
-                        foundFiles.put(f.getPath(), s);
-                        currentModule.addSource(pkg, s);
+                        // Ok, the existing source is to be compiled. Thus this link only is redundant
+                        // since all compiled are also linked to. Continue to the next source.
+                        // But we need to add the source, so that it will be visible to linking,
+                        // if not the multi core compile will fail because a JavaCompiler cannot
+                        // find the necessary dependencies for its part of the source.
+                        foundFiles.put(f.getPath(), of);
+                        continue;
+                    } else {
+                        // We are looking for sources to compile, if we find an existing to be compiled
+                        // source with the same name, it is an internal error, since we must
+                        // find the sources to be compiled before we find the sources to be linked to.
+                        throw new ProblemException("Internal error: Double add of file "+fn+" from "+of.file().getPath());
                     }
                 }
+                Source s = new Source(currentModule, f.getPath(), f, root);
+                if (inGensrc) s.markAsGenerated();
+                if (inLinksrc) {
+                    s.markAsLinkedOnly();
+                }
+                pkg = currentModule.name()+":"+pkg;
+                foundFiles.put(f.getPath(), s);
+                currentModule.addSource(pkg, s);
             }
         }
         return currentModule;
@@ -368,23 +378,22 @@
     static private void scanDirectory(File dir, int rootPrefix, File root,
                                       Set<String> suffixes,
                                       List<String> excludes, List<String> includes,
-                                      List<String> excludeFiles, List<String> includeFiles, boolean all,
+                                      List<String> excludeFiles, List<String> includeFiles,
                                       Map<String,Source> foundFiles,
                                       Map<String,Module> foundModules,
                                       Module currentModule, boolean inGensrc, boolean inLinksrc)
         throws ProblemException {
 
-        String pkg_name = "";
-        // Remove the root prefix from the dir path, and replace file separator with dots
-        // to get the package name.
+        String path = "";
+        // Remove the root prefix from the dir path
         if (dir.getPath().length() > rootPrefix) {
-            pkg_name = dir.getPath().substring(rootPrefix).replace(File.separatorChar,'.');
+            path = dir.getPath().substring(rootPrefix);
         }
         // Should this package directory be included and not excluded?
-        if (all || ((includes==null || includes.isEmpty() || hasMatch(pkg_name, includes)) &&
-                    (excludes==null || excludes.isEmpty() || !hasMatch(pkg_name, excludes)))) {
+        if ((includes==null || includes.isEmpty() || hasMatch(path, includes)) &&
+            (excludes==null || excludes.isEmpty() || !hasMatch(path, excludes))) {
             // Add the source files.
-            currentModule = addFilesInDir(dir, rootPrefix, root, suffixes, true, excludeFiles, includeFiles, all,
+            currentModule = addFilesInDir(dir, rootPrefix, root, suffixes, true, excludeFiles, includeFiles,
                                           foundFiles, foundModules, currentModule, inGensrc, inLinksrc);
         }
 
@@ -392,7 +401,7 @@
             if (d.isDirectory()) {
                 // Descend into the directory structure.
                 scanDirectory(d, rootPrefix, root, suffixes,
-                              excludes, includes, excludeFiles, includeFiles, all,
+                              excludes, includes, excludeFiles, includeFiles,
                               foundFiles, foundModules, currentModule, inGensrc, inLinksrc);
             }
         }
--- a/langtools/src/share/classes/com/sun/tools/sjavac/Transformer.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/Transformer.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,6 +30,8 @@
 import java.util.Set;
 import java.util.Map;
 
+import com.sun.tools.sjavac.options.Options;
+
 /**
  * The transform interface is used to transform content inside a package, from one form to another.
  * Usually the output form is an unpredictable number of output files. (eg class files)
@@ -95,5 +97,5 @@
                       PrintStream err);
 
     void setExtra(String e);
-    void setExtra(String[] args);
+    void setExtra(Options args);
 }
--- a/langtools/src/share/classes/com/sun/tools/sjavac/Util.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/Util.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
 package com.sun.tools.sjavac;
 
 import java.io.File;
+import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
@@ -94,14 +95,12 @@
      * do settings = cleanOptions("--server:",Util.set("-portfile"),settings);
      *    now settings equals "--server:portfile=bar"
      *
-     * @param optionPrefix The option name, including colon, eg --server:
      * @param allowsSubOptions A set of the allowed sub options, id portfile etc.
      * @param s The option settings string.
      */
-    public static String cleanSubOptions(String optionPrefix, Set<String> allowedSubOptions, String s) {
+    public static String cleanSubOptions(Set<String> allowedSubOptions, String s) {
         StringBuilder sb = new StringBuilder();
-        if (!s.startsWith(optionPrefix)) return "";
-        StringTokenizer st = new StringTokenizer(s.substring(optionPrefix.length()), ",");
+        StringTokenizer st = new StringTokenizer(s, ",");
         while (st.hasMoreTokens()) {
             String o = st.nextToken();
             int p = o.indexOf('=');
@@ -157,4 +156,9 @@
         }
         return null;
     }
+
+    // TODO: Remove when refactoring from java.io.File to java.nio.file.Path.
+    public static File pathToFile(Path path) {
+        return path == null ? null : path.toFile();
+    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/options/ArgumentIterator.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 com.sun.tools.sjavac.options;
+
+import java.util.Iterator;
+
+public class ArgumentIterator implements Iterator<String> {
+
+    /** The underlying argument iterator */
+    private Iterator<String> iter;
+
+    /** Extra state used to implement peek and current */
+    private String current;
+    private String buffered;
+
+    public ArgumentIterator(Iterable<String> iter) {
+        this.iter = iter.iterator();
+    }
+
+    @Override
+    public boolean hasNext() {
+        return buffered != null || iter.hasNext();
+    }
+
+    @Override
+    public String next() {
+        fillBuffer();
+        current = buffered;
+        buffered = null;
+        return current;
+    }
+
+    /**
+     * @return the last element returned by next() (or {@code null} if next has
+     * never been invoked on this iterator).
+     */
+    public String current() {
+        return current;
+    }
+
+    /** Can't remove current element, since we may have buffered it. */
+    @Override
+    public void remove() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * @return Returns the next element without advancing the iterator
+     */
+    public String peek() {
+        fillBuffer();
+        return buffered;
+    }
+
+    private void fillBuffer() {
+        if (buffered == null && iter.hasNext())
+            buffered = iter.next();
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/options/Option.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,360 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 com.sun.tools.sjavac.options;
+
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.sun.tools.sjavac.CopyFile;
+import com.sun.tools.sjavac.Transformer;
+
+
+/**
+ * Sjavac options can be classified as:
+ *
+ *  (1) relevant only for sjavac, such as --server
+ *  (2) relevant for sjavac and javac, such as -d, or
+ *  (3) relevant only for javac, such as -g.
+ *
+ * This enum represents all options from (1) and (2). Note that instances of
+ * this enum only entail static information about the option. For storage of
+ * option values, refer to com.sun.tools.sjavac.options.Options.
+ */
+public enum Option {
+
+    SRC("-src", "Location of source files to be compiled") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            List<Path> paths = getFileListArg(iter, helper);
+            if (paths != null)
+                helper.sourceRoots(paths);
+        }
+    },
+    SOURCEPATH("-sourcepath", "Specify search path for sources.") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            List<Path> paths = getFileListArg(iter, helper);
+            if (paths != null)
+                helper.sourcepath(paths);
+        }
+    },
+    MODULEPATH("-modulepath", "Specify search path for modules.") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            List<Path> paths = getFileListArg(iter, helper);
+            if (paths != null)
+                helper.modulepath(paths);
+        }
+    },
+    CLASSPATH("-classpath", "Specify search path for classes.") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            List<Path> paths = getFileListArg(iter, helper);
+            if (paths != null)
+                helper.classpath(paths);
+        }
+    },
+    CP("-cp", "An alias for -classpath") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            CLASSPATH.processMatching(iter, helper);
+        }
+    },
+    X("-x", "Exclude directory from the subsequent source directory") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            String pattern = getFilePatternArg(iter, helper);
+            if (pattern != null)
+                helper.exclude(pattern);
+        }
+    },
+    I("-i", "Include only the given directory from the subsequent source directory") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            String pattern = getFilePatternArg(iter, helper);
+            if (pattern != null)
+                helper.include(pattern);
+        }
+    },
+    XF("-xf", "Exclude a given file") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            String pattern = getFilePatternArg(iter, helper);
+            if (pattern != null)
+                helper.excludeFile(pattern);
+        }
+    },
+    IF("-if", "Include only the given file") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            String pattern = getFilePatternArg(iter, helper);
+            if (pattern != null)
+                helper.includeFile(pattern);
+        }
+    },
+    TR("-tr", "Translate resources") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+
+            if (!iter.hasNext()) {
+                helper.reportError(arg + " must be followed by a translation rule");
+                return;
+            }
+
+            String trArg = iter.next();
+
+            // Validate argument syntax. Examples:
+            //   .prop=com.sun.tools.javac.smart.CompileProperties
+            //   .idl=com.sun.corba.CompileIdl
+            //   .g3=antlr.CompileGrammar,debug=true
+            String ident = "[a-zA-Z_][a-zA-Z0-9_]*";
+            Pattern p = Pattern.compile("(?<suffix>\\." + ident + ")=" +
+                                        "(?<class>" + ident + "(\\." + ident + ")*)" +
+                                        "(?<extra>,.*)?");
+            // Check syntax
+            Matcher m = p.matcher(trArg);
+            if (!m.matches()) {
+                helper.reportError("The string \"" + trArg + "\" is not a " +
+                                   "valid translate pattern");
+                return;
+            }
+
+            // Extract relevant parts
+            String suffix = m.group("suffix");
+            String classname = m.group("class");
+            String extra = m.group("extra");
+
+            // Valid suffix?
+            if (suffix.matches("\\.(class|java)")) {
+                helper.reportError("You cannot have a translator for " +
+                                   suffix + " files!");
+                return;
+            }
+
+            // Construct transformer
+            try {
+                Class<?> trCls = Class.forName(classname);
+                Transformer transformer = (Transformer) trCls.newInstance();
+                transformer.setExtra(extra);
+                helper.addTransformer(suffix, transformer);
+            } catch (Exception e) {
+                helper.reportError("Cannot use " + classname +
+                                   " as a translator: " + e.getMessage());
+            }
+        }
+    },
+    COPY("-copy", "Copy resources") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            if (!iter.hasNext()) {
+                helper.reportError(arg + " must be followed by a resource type");
+                return;
+            }
+
+            String copyArg = iter.next();
+
+            // Validate argument syntax. Examples: .gif, .html
+            if (!copyArg.matches("\\.[a-zA-Z_][a-zA-Z0-9_]*")) {
+                helper.reportError("The string \"" + copyArg + "\" is not a " +
+                                   "valid resource type.");
+                return;
+            }
+
+            helper.addTransformer(copyArg, new CopyFile());
+        }
+    },
+    J("-j", "Number of cores") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            if (!iter.hasNext() || !iter.peek().matches("\\d+")) {
+                helper.reportError(arg + " must be followed by an integer");
+                return;
+            }
+            helper.numCores(Integer.parseInt(iter.next()));
+        }
+    },
+    SERVER("--server:", "Specify server configuration file of running server") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            helper.serverConf(iter.current().substring(arg.length()));
+        }
+    },
+    STARTSERVER("--startserver:", "Start server and use the given configuration file") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            helper.startServerConf(iter.current().substring(arg.length()));
+        }
+    },
+    IMPLICIT("-implicit:", "Specify how to treat implicitly referenced source code") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            helper.implicit(iter.current().substring(arg.length()));
+        }
+    },
+    LOG("--log=", "Specify logging level") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            helper.logLevel(iter.current().substring(arg.length()));
+        }
+    },
+    VERBOSE("-verbose", "Set verbosity level to \"info\"") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            helper.logLevel("info");
+        }
+    },
+    PERMIT_UNIDENTIFIED_ARTIFACTS("--permit-unidentified-artifacts", "Keep unidentified artifacts in destination directory") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            helper.permitUnidentifiedArtifacts();
+        }
+    },
+    PERMIT_SOURCES_WITHOUT_PACKAGE("--permit-sources-without-package", "Permit sources in the default package") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            helper.permitDefaultPackage();
+        }
+    },
+    COMPARE_FOUND_SOURCES("--compare-found-sources", "Compare found sources with given sources") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            Path referenceSourceList = getFileArg(iter, helper, true, false);
+            if (referenceSourceList != null)
+                helper.compareFoundSources(referenceSourceList);
+        }
+    },
+    D("-d", "Output destination directory") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            Path dir = getFileArg(iter, helper, false, true);
+            if (dir != null)
+                helper.destDir(dir);
+        }
+    },
+    S("-s", "Directory for generated sources") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            Path dir = getFileArg(iter, helper, false, true);
+            if (dir != null)
+                helper.generatedSourcesDir(dir);
+        }
+    },
+    H("-h", "Directory for header files") {
+        @Override
+        protected void processMatching(ArgumentIterator iter, OptionHelper helper) {
+            Path dir = getFileArg(iter, helper, false, true);
+            if (dir != null)
+                helper.headerDir(dir);
+        }
+    };
+
+    public final String arg;
+
+    final String description;
+
+    private Option(String arg, String description) {
+        this.arg = arg;
+        this.description = description;
+    }
+
+    /** Retrieve and verify syntax of file list argument. */
+    List<Path> getFileListArg(ArgumentIterator iter, OptionHelper helper) {
+        if (!iter.hasNext()) {
+            helper.reportError(arg + " must be followed by a list of files " +
+                              "separated by " + File.pathSeparator);
+            return null;
+        }
+        List<Path> result = new ArrayList<>();
+        for (String pathStr : iter.next().split(File.pathSeparator))
+            result.add(Paths.get(pathStr));
+        return result;
+    }
+
+    /** Retrieve and verify syntax of file argument. */
+    Path getFileArg(ArgumentIterator iter, OptionHelper helper, boolean fileAcceptable, boolean dirAcceptable) {
+
+        if (!iter.hasNext()) {
+            String errmsg = arg + " must be followed by ";
+            if (fileAcceptable && dirAcceptable) errmsg += "a file or directory.";
+            else if (fileAcceptable) errmsg += "a file.";
+            else if (dirAcceptable)  errmsg += "a directory.";
+            else throw new IllegalArgumentException("File or directory must be acceptable.");
+            helper.reportError(errmsg);
+            return null;
+        }
+
+        return Paths.get(iter.next());
+    }
+
+    /** Retrieve the next file or package argument. */
+    String getFilePatternArg(ArgumentIterator iter, OptionHelper helper) {
+
+        if (!iter.hasNext()) {
+            helper.reportError(arg + " must be followed by a file or directory pattern.");
+            return null;
+        }
+
+        return iter.next();
+    }
+
+    // Future cleanup: Change the "=" syntax to ":" syntax to be consistent and
+    // to follow the javac-option style.
+
+    public boolean hasOption() {
+        return arg.endsWith(":") || arg.endsWith("=");
+    }
+
+
+    /**
+     * Process current argument of argIter.
+     *
+     * It's final, since the option customization is typically done in
+     * processMatching.
+     *
+     * @param argIter Iterator to read current and succeeding arguments from.
+     * @param helper The helper to report back to.
+     * @return true iff the argument was processed by this option.
+     */
+    public final boolean processCurrent(ArgumentIterator argIter,
+                                        OptionHelper helper) {
+        String fullArg = argIter.current(); // "-tr" or "-log=level"
+        if (hasOption() ? fullArg.startsWith(arg) : fullArg.equals(arg)) {
+            processMatching(argIter, helper);
+            return true;
+        }
+        // Did not match
+        return false;
+    }
+
+    /** Called by process if the current argument matches this option. */
+    protected abstract void processMatching(ArgumentIterator argIter,
+                                            OptionHelper helper);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/options/OptionHelper.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,146 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 com.sun.tools.sjavac.options;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.List;
+
+import com.sun.tools.sjavac.Transformer;
+
+/**
+ * This class is used to decode sjavac options.
+ * See com.sun.tools.sjavac.options.Options for example usage.
+ */
+public abstract class OptionHelper {
+
+    /** Handle error */
+    public abstract void reportError(String msg);
+
+    /** Record a package exclusion pattern */
+    public abstract void exclude(String excl);
+
+    /** Record a package inclusion pattern */
+    public abstract void include(String incl);
+
+    /** Record a file exclusion */
+    public abstract void excludeFile(String exclFile);
+
+    /** Record a file inclusion */
+    public abstract void includeFile(String inclFile);
+
+    /** Record a root of sources to be compiled */
+    public abstract void sourceRoots(List<Path> path);
+
+    /** Record a suffix + transformer */
+    public abstract void addTransformer(String suffix, Transformer tr);
+
+    /** Record a sourcepath to be used */
+    public abstract void sourcepath(List<Path> path);
+
+    /** Record a modulepath to be used */
+    public abstract void modulepath(List<Path> path);
+
+    /** Record a classpath to be used */
+    public abstract void classpath(List<Path> path);
+
+    /** Record the number of cores */
+    public abstract void numCores(int parseInt);
+
+    /** Record desired log level */
+    public abstract void logLevel(String level);
+
+    /** Record path for reference source list */
+    public abstract void compareFoundSources(Path referenceList);
+
+    /** Record the fact that unidentified artifacts are permitted */
+    public abstract void permitUnidentifiedArtifacts();
+
+    /** Record the fact that sources in the default package are permitted */
+    public abstract void permitDefaultPackage();
+
+    /** Record server configuration parameters */
+    public abstract void serverConf(String serverConf);
+
+    /** Record server launch configuration parameters */
+    public abstract void startServerConf(String serverConf);
+
+    /** Record some arguments to be passed on to javac */
+    public abstract void javacArg(String... arg);
+
+    /** Sets the destination directory for the compilation */
+    public abstract void destDir(Path dir);
+
+    /** Sets the directory for generated sources */
+    public abstract void generatedSourcesDir(Path genSrcDir);
+
+    /** Sets the directory for generated headers */
+    public abstract void headerDir(Path dir);
+
+    /** Sets the implicit policy */
+    public abstract void implicit(String policy);
+
+
+    /**
+     * Traverses an array of arguments and performs the appropriate callbacks.
+     *
+     * @param args the arguments to traverse.
+     */
+    void traverse(String[] args) {
+
+        ArgumentIterator argIter = new ArgumentIterator(Arrays.asList(args));
+
+        nextArg:
+        while (argIter.hasNext()) {
+
+            String arg = argIter.next();
+
+            if (arg.startsWith("-")) {
+                for (Option opt : Option.values()) {
+                    if (opt.processCurrent(argIter, this))
+                        continue nextArg;
+                }
+
+                javacArg(arg);
+
+                // Does this javac argument take an argument? If so, don't
+                // let it pass on to sjavac as a source root directory.
+                for (com.sun.tools.javac.main.Option javacOpt : com.sun.tools.javac.main.Option.values()) {
+                    if (javacOpt.matches(arg)) {
+                        boolean takesArgument = javacOpt.hasArg();
+                        boolean separateToken = !arg.contains(":") && !arg.contains("=");
+                        if (takesArgument && separateToken)
+                            javacArg(argIter.next());
+                    }
+                }
+            } else {
+                sourceRoots(Arrays.asList(Paths.get(arg)));
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/options/Options.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,490 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 com.sun.tools.sjavac.options;
+
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.sun.tools.sjavac.Transformer;
+
+/**
+ * Instances of this class represent values for sjavac command line options.
+ */
+public class Options {
+
+    // Output directories
+    private Path destDir, genSrcDir, headerDir;
+
+    // Input directories
+    private List<SourceLocation> sources = new ArrayList<>();
+    private List<SourceLocation> sourceSearchPaths = new ArrayList<>();
+    private List<SourceLocation> classSearchPaths = new ArrayList<>();
+    private List<SourceLocation> moduleSearchPaths = new ArrayList<>();
+
+    private String logLevel = "info";
+
+    private boolean permitUnidentifiedArtifact = false;
+    private boolean permitSourcesInDefaultPackage = false;
+
+    private Path sourceReferenceList;
+    private int numCores = 4;
+    private String implicitPolicy = "none";
+    private List<String> javacArgs = new ArrayList<>();
+
+    private Map<String, Transformer> trRules = new HashMap<>();
+
+    private boolean startServer = false;
+
+    // Server configuration string
+    private String serverConf;
+
+    /** Get the policy for implicit classes */
+    public String getImplicitPolicy() {
+        return implicitPolicy;
+    }
+
+    /** Get the path for generated sources (or null if no such path is set) */
+    public Path getGenSrcDir() {
+        return genSrcDir;
+    }
+
+    /** Get the path for the destination directory */
+    public Path getDestDir() {
+        return destDir;
+    }
+
+    /** Get the path for the header directory (or null if no such path is set) */
+    public Path getHeaderDir() {
+        return headerDir;
+    }
+
+    /** Get all source locations for files to be compiled */
+    public List<SourceLocation> getSources() {
+        return sources;
+    }
+
+    /**
+     * Get all paths to search for classes in .java format. (Java-files in
+     * found here should not be compiled.
+     */
+    public List<SourceLocation> getSourceSearchPaths() {
+        return sourceSearchPaths;
+    }
+
+    /** Get all paths to search for classes in. */
+    public List<SourceLocation> getClassSearchPath() {
+        return classSearchPaths;
+    }
+
+    /** Get all paths to search for modules in. */
+    public List<SourceLocation> getModuleSearchPaths() {
+        return moduleSearchPaths;
+    }
+
+    /** Get the log level. */
+    public String getLogLevel() {
+        return logLevel;
+    }
+
+    /** Returns true iff artifacts in the output directories should be kept,
+     * even if they would not be generated in a clean build. */
+    public boolean isUnidentifiedArtifactPermitted() {
+        return permitUnidentifiedArtifact;
+    }
+
+    /** Returns true iff sources in the default package should be permitted. */
+    public boolean isDefaultPackagePermitted() {
+        return permitSourcesInDefaultPackage;
+    }
+
+    /** Get the path to the list of reference sources (or null if none is set) */
+    public Path getSourceReferenceList() {
+        return sourceReferenceList;
+    }
+
+    /** Get the number of cores to be used by sjavac */
+    public int getNumCores() {
+        return numCores;
+    }
+
+    /** Returns all arguments relevant to javac but irrelevant to sjavac. */
+    public List<String> getJavacArgs() {
+        return javacArgs;
+    }
+
+    /**
+     * Get a map which maps suffixes to transformers (for example
+     * ".java" -> CompileJavaPackages)
+     */
+    public Map<String, Transformer> getTranslationRules() {
+        return trRules;
+    }
+
+    /** Return true iff a new server should be started */
+    public boolean startServerFlag() {
+        return startServer;
+    }
+
+    /** Return the server configuration string. */
+    public String getServerConf() {
+        return serverConf;
+    }
+
+    /**
+     * Parses the given argument array and returns a corresponding Options
+     * instance.
+     */
+    public static Options parseArgs(String... args) {
+        Options options = new Options();
+        options.new ArgDecoderOptionHelper().traverse(args);
+        return options;
+    }
+
+    /** Returns true iff a .java file is among the javac arguments */
+    public boolean isJavaFilesAmongJavacArgs() {
+        for (String javacArg : javacArgs)
+            if (javacArg.endsWith(".java"))
+                return true;
+        return false;
+    }
+
+    /** Returns true iff an @-file is among the javac arguments */
+    public boolean isAtFilePresent() {
+        for (String javacArg : javacArgs)
+            if (javacArg.startsWith("@"))
+                return true;
+        return false;
+    }
+
+    /**
+     * Returns a string representation of the options that affect the result of
+     * the compilation. (Used for saving the state of the options used in a
+     * previous compile.)
+     */
+    public String getStateArgsString() {
+
+        // Local utility class for collecting the arguments
+        class StateArgs {
+
+            private List<String> args = new ArrayList<>();
+
+            void addArg(Option opt) {
+                args.add(opt.arg);
+            }
+
+            void addArg(Option opt, Object val) {
+                addArg(opt);
+                args.add(val.toString());
+            }
+
+            void addSourceLocations(Option opt, List<SourceLocation> locs) {
+                for (SourceLocation sl : locs) {
+                    for (String pkg : sl.includes) addArg(Option.I, pkg);
+                    for (String pkg : sl.excludes) addArg(Option.X, pkg);
+                    for (String f : sl.excludedFiles) addArg(Option.XF, f);
+                    for (String f : sl.includedFiles) addArg(Option.IF, f);
+                    addArg(opt, sl.getPath());
+                }
+            }
+
+            String getResult() {
+                String result = "";
+                for (String s : args)
+                    result += s + " ";
+                return result.trim();
+            }
+
+            public void addAll(Collection<String> toAdd) {
+                args.addAll(toAdd);
+            }
+        }
+
+        StateArgs args = new StateArgs();
+
+        // Directories
+        if (genSrcDir != null)
+            args.addArg(Option.S, genSrcDir.normalize());
+
+        if (headerDir != null)
+            args.addArg(Option.H, headerDir.normalize());
+
+        if (destDir != null)
+            args.addArg(Option.D, destDir.normalize());
+
+        // Source roots
+        args.addSourceLocations(Option.SRC, sources);
+        args.addSourceLocations(Option.SOURCEPATH, sourceSearchPaths);
+        args.addSourceLocations(Option.CLASSPATH,  classSearchPaths);
+        args.addSourceLocations(Option.MODULEPATH, moduleSearchPaths);
+
+        // Boolean options
+        if (permitSourcesInDefaultPackage)
+            args.addArg(Option.PERMIT_SOURCES_WITHOUT_PACKAGE);
+
+        if (permitUnidentifiedArtifact)
+            args.addArg(Option.PERMIT_UNIDENTIFIED_ARTIFACTS);
+
+        // Translation rules
+        for (Map.Entry<String, Transformer> tr : trRules.entrySet()) {
+            String val = tr.getKey() + "=" + tr.getValue().getClass().getName();
+            args.addArg(Option.TR, val);
+        }
+
+        // Javac args
+        args.addAll(javacArgs);
+
+        return args.getResult();
+    }
+
+
+    /** Extract the arguments to be passed on to javac. */
+    public String[] prepJavacArgs() {
+        List<String> args = new ArrayList<>();
+
+        // Output directories
+        args.add("-d");
+        args.add(destDir.toString());
+
+        if (getGenSrcDir() != null) {
+            args.add("-s");
+            args.add(genSrcDir.toString());
+        }
+
+        if (headerDir != null) {
+            args.add("-h");
+            args.add(headerDir.toString());
+        }
+
+        // Prep sourcepath
+        List<SourceLocation> sourcepath = new ArrayList<>();
+        sourcepath.addAll(sources);
+        sourcepath.addAll(sourceSearchPaths);
+        if (sourcepath.size() > 0) {
+            args.add("-sourcepath");
+            args.add(concatenateSourceLocations(sourcepath));
+        }
+
+        // Prep classpath
+        if (classSearchPaths.size() > 0) {
+            args.add("-classpath");
+            args.add(concatenateSourceLocations(classSearchPaths));
+        }
+
+        // This can't be anything but 'none'. Enforced by sjavac main method.
+        args.add("-implicit:" + implicitPolicy);
+
+        // Append javac-options (i.e. pass through options not recognized by
+        // sjavac to javac.)
+        args.addAll(javacArgs);
+
+        return args.toArray(new String[args.size()]);
+    }
+
+    // Helper method to join a list of source locations separated by
+    // File.pathSeparator
+    private static String concatenateSourceLocations(List<SourceLocation> locs) {
+        String s = "";
+        for (SourceLocation loc : locs)
+            s += (s.isEmpty() ? "" : java.io.File.pathSeparator) + loc.getPath();
+        return s;
+    }
+
+    // OptionHelper that records the traversed options in this Options instance.
+    private class ArgDecoderOptionHelper extends OptionHelper {
+
+        List<String> includes, excludes, includeFiles, excludeFiles;
+        {
+            resetFilters();
+        }
+
+        boolean headerProvided = false;
+        boolean genSrcProvided = false;
+
+        @Override
+        public void reportError(String msg) {
+            throw new IllegalArgumentException(msg);
+        }
+
+        @Override
+        public void sourceRoots(List<Path> paths) {
+            sources.addAll(createSourceLocations(paths));
+        }
+
+        @Override
+        public void exclude(String exclPattern) {
+            excludes.add(exclPattern);
+        }
+
+        @Override
+        public void include(String inclPattern) {
+            includes.add(inclPattern);
+        }
+
+        @Override
+        public void excludeFile(String exclFilePattern) {
+            excludeFiles.add(exclFilePattern);
+        }
+
+        @Override
+        public void includeFile(String inclFilePattern) {
+            includeFiles.add(inclFilePattern);
+        }
+
+        @Override
+        public void addTransformer(String suffix, Transformer tr) {
+            if (trRules.containsKey(suffix)) {
+                reportError("More than one transformer specified for " +
+                            "suffix " + suffix + ".");
+                return;
+            }
+            trRules.put(suffix, tr);
+        }
+
+        @Override
+        public void sourcepath(List<Path> paths) {
+            sourceSearchPaths.addAll(createSourceLocations(paths));
+        }
+
+        @Override
+        public void modulepath(List<Path> paths) {
+            moduleSearchPaths.addAll(createSourceLocations(paths));
+        }
+
+        @Override
+        public void classpath(List<Path> paths) {
+            classSearchPaths.addAll(createSourceLocations(paths));
+        }
+
+        @Override
+        public void numCores(int n) {
+            numCores = n;
+        }
+
+        @Override
+        public void logLevel(String level) {
+            logLevel = level;
+        }
+
+        @Override
+        public void compareFoundSources(Path referenceList) {
+            sourceReferenceList = referenceList;
+        }
+
+        @Override
+        public void permitUnidentifiedArtifacts() {
+            permitUnidentifiedArtifact = true;
+        }
+
+        @Override
+        public void permitDefaultPackage() {
+            permitSourcesInDefaultPackage = true;
+        }
+
+        @Override
+        public void serverConf(String conf) {
+            if (serverConf != null)
+                reportError("Can not specify more than one server configuration.");
+            else
+                serverConf = conf;
+        }
+
+        @Override
+        public void implicit(String policy) {
+            implicitPolicy = policy;
+        }
+
+        @Override
+        public void startServerConf(String conf) {
+            if (serverConf != null)
+                reportError("Can not specify more than one server configuration.");
+            else {
+                startServer = true;
+                serverConf = conf;
+            }
+        }
+
+        @Override
+        public void javacArg(String... arg) {
+            javacArgs.addAll(Arrays.asList(arg));
+        }
+
+        @Override
+        public void destDir(Path dir) {
+            if (destDir != null) {
+                reportError("Destination directory already specified.");
+                return;
+            }
+            destDir = dir.toAbsolutePath();
+        }
+
+        @Override
+        public void generatedSourcesDir(Path dir) {
+            if (genSrcProvided) {
+                reportError("Directory for generated sources already specified.");
+                return;
+            }
+            genSrcProvided = true;
+            genSrcDir = dir.toAbsolutePath();
+        }
+
+        @Override
+        public void headerDir(Path dir) {
+            if (headerProvided) {
+                reportError("Header directory already specified.");
+                return;
+            }
+            headerProvided = true;
+            headerDir = dir.toAbsolutePath();
+        }
+
+        private List<SourceLocation> createSourceLocations(List<Path> paths) {
+            List<SourceLocation> result = new ArrayList<>();
+            for (Path path : paths) {
+                result.add(new SourceLocation(
+                        path,
+                        includes,
+                        excludes,
+                        includeFiles,
+                        excludeFiles));
+            }
+            resetFilters();
+            return result;
+        }
+
+        private void resetFilters() {
+            includes = new ArrayList<>();
+            excludes = new ArrayList<>();
+            includeFiles = new ArrayList<>();
+            excludeFiles = new ArrayList<>();
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/options/SourceLocation.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 com.sun.tools.sjavac.options;
+
+import java.nio.file.Path;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import com.sun.tools.sjavac.Module;
+import com.sun.tools.sjavac.ProblemException;
+import com.sun.tools.sjavac.Source;
+
+/**
+ * Represents a directory to be used for input to sjavac. (For instance a
+ * sourcepath or classpath.)
+ */
+public class SourceLocation {
+
+    // Path to the root directory
+    private Path path;
+
+    // Package include / exclude patterns and file includes / excludes.
+    List<String> includes, excludes, includedFiles, excludedFiles;
+
+    public SourceLocation(Path path,
+                          List<String> includes,
+                          List<String> excludes,
+                          List<String> includedFiles,
+                          List<String> excludedFiles) {
+        this.path = path;
+        this.includes = includes;
+        this.excludes = excludes;
+        this.includedFiles = includedFiles;
+        this.excludedFiles = excludedFiles;
+    }
+
+
+    /**
+     * Finds all files with the given suffix that pass the include / exclude
+     * filters in this source location.
+     *
+     * @param suffixes The set of suffixes to search for
+     * @param foundFiles The map in which to store the found files
+     * @param foundModules The map in which to store the found modules
+     * @param currentModule The current module
+     * @param permitSourcesInDefaultPackage true if sources in default package
+     *                                      are to be permitted
+     * @param inLinksrc true if in link source
+     */
+    public void findSourceFiles(Set<String> suffixes,
+                                Map<String, Source> foundFiles,
+                                Map<String, Module> foundModules,
+                                Module currentModule,
+                                boolean permitSourcesInDefaultPackage,
+                                boolean inLinksrc) {
+        try {
+            Source.scanRoot(path.toFile(), suffixes, excludes, includes,
+                    excludedFiles, includedFiles, foundFiles, foundModules,
+                    currentModule, permitSourcesInDefaultPackage, false,
+                    inLinksrc);
+        } catch (ProblemException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /** Get the root directory of this source location */
+    public Path getPath() {
+        return path;
+    }
+
+    /** Get the package include patterns */
+    public List<String> getIncludes() {
+        return includes;
+    }
+
+    /** Get the package exclude patterns */
+    public List<String> getExcludes() {
+        return excludes;
+    }
+
+    /** Get the file include patterns */
+    public List<String> getIncludedFiles() {
+        return includedFiles;
+    }
+
+    /** Get the file exclude patterns */
+    public List<String> getExcludedFiles() {
+        return excludedFiles;
+    }
+
+}
--- a/langtools/src/share/classes/com/sun/tools/sjavac/server/JavacServer.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/server/JavacServer.java	Thu Apr 24 16:04:44 2014 -0700
@@ -104,6 +104,17 @@
             allPortFiles = new HashMap<>();
         }
         PortFile pf = allPortFiles.get(filename);
+
+        // Port file known. Does it still exist?
+        if (pf != null) {
+            try {
+                if (!pf.exists())
+                    pf = null;
+            } catch (IOException ioex) {
+                ioex.printStackTrace();
+            }
+        }
+
         if (pf == null) {
             pf = new PortFile(filename);
             allPortFiles.put(filename, pf);
@@ -305,7 +316,7 @@
                     // We could not connect to the server. Try again.
                     attempts++;
                     try {
-                        Thread.sleep(WAIT_BETWEEN_CONNECT_ATTEMPTS);
+                        Thread.sleep(WAIT_BETWEEN_CONNECT_ATTEMPTS * 1000);
                     } catch (InterruptedException e) {
                     }
                 }
--- a/langtools/src/share/classes/com/sun/tools/sjavac/server/PortFile.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/src/share/classes/com/sun/tools/sjavac/server/PortFile.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
--- a/langtools/test/com/sun/javadoc/5093723/T5093723.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/5093723/T5093723.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,10 +33,8 @@
 
 public class T5093723 extends JavadocTester {
 
-    private static final String BUG_ID = "5093723";
-
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID + ".out", "-Xdoclint:none",
+        "-d", OUTPUT_DIR + ".out", "-Xdoclint:none",
         SRC_DIR + "/DocumentedClass.java",
         SRC_DIR + "/UndocumentedClass.java"
     };
@@ -46,12 +44,4 @@
         if (tester.runJavadoc(ARGS) != 0)
           throw new AssertionError("non-zero return code from javadoc");
     }
-
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/AccessSummary/AccessSummary.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/AccessSummary/AccessSummary.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,30 +34,27 @@
 
 public class AccessSummary extends JavadocTester {
 
-    private static final String BUG_ID = "4637604-4775148";
-    private static final String OUTPUT_DIR1 = "docs1-" + BUG_ID + "/";
-
     /**
      * Assign value for [ fileToSearch, stringToFind ]
      */
     private static final String[][] TESTARRAY1 = {
 
         // Test that the summary attribute appears
-        { OUTPUT_DIR1 + "overview-summary.html",
+        { "overview-summary.html",
                  "summary=\"Packages table, listing packages, and an explanation\"" },
 
         // Test that the summary attribute appears
-        { OUTPUT_DIR1 + "p1/C1.html",
+        { "p1/C1.html",
                  "summary=\"Constructor Summary table, listing constructors, and an explanation\"" },
 
         // Test that the summary attribute appears
-        { OUTPUT_DIR1 + "constant-values.html",
+        { "constant-values.html",
                  "summary=\"Constant Field Values table, listing constant fields, and values\"" }
     };
 
     // First test with -header only
     private static final String[] JAVADOC_ARGS = new String[] {
-            "-d", OUTPUT_DIR1,
+            "-d", OUTPUT_DIR,
             "-sourcepath", SRC_DIR,
             "p1", "p2"};
 
@@ -67,21 +64,7 @@
      */
     public static void main(String[] args) {
         JavadocTester tester = new AccessSummary();
-        run(tester, JAVADOC_ARGS,  TESTARRAY1, new String[][] {});
+        tester.run(JAVADOC_ARGS,  TESTARRAY1, new String[][] {});
         tester.printSummary();       // Necessary for string search
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/MetaTag/MetaTag.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/MetaTag/MetaTag.java	Thu Apr 24 16:04:44 2014 -0700
@@ -39,8 +39,6 @@
 public class MetaTag extends JavadocTester {
 
     //Test information.
-    private static final String BUG_ID = "4034096-4764726-6235799";
-    private static final String OUTPUT_DIR = "docs-" + BUG_ID;
     private static final SimpleDateFormat m_dateFormat = new SimpleDateFormat("yyyy-MM-dd");
 
     //Javadoc arguments.
@@ -63,65 +61,62 @@
     //Input for string search tests.
     private static final String[][] TEST = {
 
-        { OUTPUT_DIR + "/p1/C1.html",
+        { "p1/C1.html",
            "<meta name=\"keywords\" content=\"p1.C1 class\">" },
 
-        { OUTPUT_DIR + "/p1/C1.html",
+        { "p1/C1.html",
            "<meta name=\"keywords\" content=\"field1\">" },
 
-        { OUTPUT_DIR + "/p1/C1.html",
+        { "p1/C1.html",
            "<meta name=\"keywords\" content=\"field2\">" },
 
-        { OUTPUT_DIR + "/p1/C1.html",
+        { "p1/C1.html",
            "<meta name=\"keywords\" content=\"method1()\">" },
 
-        { OUTPUT_DIR + "/p1/C1.html",
+        { "p1/C1.html",
            "<meta name=\"keywords\" content=\"method2()\">" },
 
-        { OUTPUT_DIR + "/p1/package-summary.html",
+        { "p1/package-summary.html",
            "<meta name=\"keywords\" content=\"p1 package\">" },
 
-        { OUTPUT_DIR + "/overview-summary.html",
+        { "overview-summary.html",
            "<meta name=\"keywords\" content=\"Overview, Sample Packages\">" },
 
         //NOTE: Hopefully, this regression test is not run at midnight.  If the output
         //was generated yesterday and this test is run today, the test will fail.
-        {OUTPUT_DIR + "/overview-summary.html",
+        { "overview-summary.html",
            "<meta name=\"date\" "
                             + "content=\"" + m_dateFormat.format(new Date()) + "\">"},
     };
 
-    private static final String[][] NEGATED_TEST = NO_TEST;
-
-    private static final String[][] TEST2 = NO_TEST;
     private static final String[][] NEGATED_TEST2 = {
         //No keywords when -keywords is not used.
-        { OUTPUT_DIR + "-2/p1/C1.html",
+        { "p1/C1.html",
            "<META NAME=\"keywords\" CONTENT=\"p1.C1 class\">" },
 
-        { OUTPUT_DIR + "-2/p1/C1.html",
+        { "p1/C1.html",
            "<META NAME=\"keywords\" CONTENT=\"field1\">" },
 
-        { OUTPUT_DIR + "-2/p1/C1.html",
+        { "p1/C1.html",
            "<META NAME=\"keywords\" CONTENT=\"field2\">" },
 
-        { OUTPUT_DIR + "-2/p1/C1.html",
+        { "p1/C1.html",
            "<META NAME=\"keywords\" CONTENT=\"method1()\">" },
 
-        { OUTPUT_DIR + "-2/p1/C1.html",
+        { "p1/C1.html",
            "<META NAME=\"keywords\" CONTENT=\"method2()\">" },
 
-        { OUTPUT_DIR + "-2/p1/package-summary.html",
+        { "p1/package-summary.html",
            "<META NAME=\"keywords\" CONTENT=\"p1 package\">" },
 
-        { OUTPUT_DIR + "-2/overview-summary.html",
+        { "overview-summary.html",
            "<META NAME=\"keywords\" CONTENT=\"Overview Summary, Sample Packages\">" },
 
         //The date metatag should not show up when -notimestamp is used.
 
         //NOTE: Hopefully, this regression test is not run at midnight.  If the output
         //was generated yesterday and this test is run today, the test will fail.
-        {OUTPUT_DIR + "-2/overview-summary.html",
+        { "overview-summary.html",
            "<META NAME=\"date\" "
                             + "CONTENT=\"" + m_dateFormat.format(new Date()) + "\">"},
     };
@@ -132,22 +127,8 @@
      */
     public static void main(String[] args) {
         MetaTag tester = new MetaTag();
-        run(tester, ARGS, TEST, NEGATED_TEST);
-        run(tester, ARGS_NO_TIMESTAMP_NO_KEYWORDS, TEST2, NEGATED_TEST2);
+        tester.run(ARGS, TEST, NO_TEST);
+        tester.run(ARGS_NO_TIMESTAMP_NO_KEYWORDS, NO_TEST, NEGATED_TEST2);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/PackagesHeader/PackagesHeader.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/PackagesHeader/PackagesHeader.java	Thu Apr 24 16:04:44 2014 -0700
@@ -37,12 +37,9 @@
 public class PackagesHeader extends JavadocTester {
 
     //Test information.
-    private static final String BUG_ID = "4766385";
-    private static final String OUTPUT_DIR = "docs-" + BUG_ID;
-
-    private static final String OUTPUT_DIR1 = "docs1-" + BUG_ID + "/";
-    private static final String OUTPUT_DIR2 = "docs2-" + BUG_ID + "/";
-    private static final String OUTPUT_DIR3 = "docs3-" + BUG_ID + "/";
+    private static final String OUTPUT_DIR1 = OUTPUT_DIR + "-1/";
+    private static final String OUTPUT_DIR2 = OUTPUT_DIR + "-2/";
+    private static final String OUTPUT_DIR3 = OUTPUT_DIR + "-3/";
 
     /**
      * Assign value for [ fileToSearch, stringToFind ]
@@ -50,7 +47,7 @@
     private static final String[][] TESTARRAY1 = {
 
         // Test that the -header shows up in the packages frame
-        { OUTPUT_DIR1 + "overview-frame.html",
+        { "overview-frame.html",
                  "Main Frame Header" }
     };
 
@@ -59,7 +56,7 @@
         // Test that the -packagesheader string shows
         // up in the packages frame
 
-        {  OUTPUT_DIR2 + "overview-frame.html",
+        { "overview-frame.html",
                  "Packages Frame Header" }
     };
 
@@ -67,10 +64,10 @@
 
         // Test that the both headers show up and are different
 
-        { OUTPUT_DIR3 + "overview-frame.html",
+        { "overview-frame.html",
                  "Packages Frame Header" },
 
-        { OUTPUT_DIR3 + "overview-summary.html",
+        { "overview-summary.html",
                  "Main Frame Header" }
     };
 
@@ -97,9 +94,6 @@
             "p1", "p2"};
 
 
-    //Input for string search tests.
-    private static final String[][] NEGATED_TEST = NO_TEST;
-
     /**
      * The entry point of the test.
      * @param args the array of command line arguments.
@@ -107,24 +101,10 @@
     public static void main(String[] args) {
         JavadocTester tester = new PackagesHeader();
 
-        run(tester, JAVADOC_ARGS1, TESTARRAY1, NEGATED_TEST);
-        run(tester, JAVADOC_ARGS2, TESTARRAY2, NEGATED_TEST);
-        run(tester, JAVADOC_ARGS3, TESTARRAY3, NEGATED_TEST);
+        tester.run(JAVADOC_ARGS1, TESTARRAY1, NO_TEST);
+        tester.run(JAVADOC_ARGS2, TESTARRAY2, NO_TEST);
+        tester.run(JAVADOC_ARGS3, TESTARRAY3, NO_TEST);
 
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/T6735320/T6735320.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/T6735320/T6735320.java	Thu Apr 24 16:04:44 2014 -0700
@@ -31,20 +31,11 @@
  */
 public class T6735320 extends JavadocTester {
 
-    private static final String BUG_ID = "6735320";
     private static final String[] ARGS = new String[]{
-        "-d", BUG_ID + ".out",
+        "-d", OUTPUT_DIR + ".out",
         SRC_DIR + "/SerialFieldTest.java"
     };
 
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    public String getBugName() {
-        return getClass().getName();
-    }
-
     public static void main(String... args) {
         T6735320 tester = new T6735320();
         if (tester.runJavadoc(ARGS) == 0) {
--- a/langtools/test/com/sun/javadoc/_template/Template.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/_template/Template.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,10 +33,6 @@
 
 public class Template extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "<BUG ID>";
-    private static final String OUTPUT_DIR = "docs-" + BUG_ID;
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
         "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR
@@ -52,21 +48,7 @@
      */
     public static void main(String[] args) {
         Template tester = new Template();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/_template/TemplateComplete.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/_template/TemplateComplete.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,10 +33,6 @@
 
 public class TemplateComplete extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "<BUG ID>";
-    private static final String OUTPUT_DIR = "docs-" + BUG_ID;
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
         "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR
@@ -51,6 +47,8 @@
 
 
     //Input for file diff test.
+    private static final String DIFFDIR1 = null;
+    private static final String DIFFDIR2 = null;
     private static final String[][] FILES_TO_DIFF = {};
 
     /**
@@ -59,23 +57,9 @@
      */
     public static void main(String[] args) {
         TemplateComplete tester = new TemplateComplete();
-        int actualExitCode = run(tester, ARGS, TEST, NEGATED_TEST);
+        int actualExitCode = tester.run(ARGS, TEST, NEGATED_TEST);
         tester.checkExitCode(EXPECTED_EXIT_CODE, actualExitCode);
-        tester.runDiffs(FILES_TO_DIFF, false);
+        tester.runDiffs(DIFFDIR1, DIFFDIR2, FILES_TO_DIFF, false);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/constantValues/TestConstantValuesDriver.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/constantValues/TestConstantValuesDriver.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,9 +33,8 @@
  */
 public class TestConstantValuesDriver extends JavadocTester {
 
-    private static final String BUG_ID = "4504730-4526070-5077317";
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, SRC_DIR + "/TestConstantValues.java",
+        "-d", OUTPUT_DIR, SRC_DIR + "/TestConstantValues.java",
         SRC_DIR + "/TestConstantValues2.java",
         SRC_DIR + "/A.java"
     };
@@ -47,31 +46,17 @@
     public static void main(String[] args) {
         String[][] tests = new String[5][2];
         for (int i = 0; i < tests.length-1; i++) {
-            tests[i][0] = BUG_ID + "/constant-values.html";
+            tests[i][0] = "constant-values.html";
             tests[i][1] = "TEST"+(i+1)+"PASSES";
         }
-        tests[tests.length-1][0] = BUG_ID + "/constant-values.html";
+        tests[tests.length-1][0] = "constant-values.html";
         tests[tests.length-1][1] = "<code>\"&lt;Hello World&gt;\"</code>";
         TestConstantValuesDriver tester = new TestConstantValuesDriver();
-        run(tester, ARGS, tests, NO_TEST);
+        tester.run(ARGS, tests, NO_TEST);
         tester.printSummary();
     }
 
     /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
-
-    /**
      * @throws java.io.IOException Test 1 passes
      * @throws java.io.IOException Test 2 passes
      * @throws java.lang.NullPointerException comment three
--- a/langtools/test/com/sun/javadoc/dupThrowsTags/TestDupThrowsTags.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/dupThrowsTags/TestDupThrowsTags.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,9 +33,8 @@
  */
 public class TestDupThrowsTags extends JavadocTester {
 
-    private static final String BUG_ID = "4525364";
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, SRC_DIR + "/TestDupThrowsTags.java"
+        "-d", OUTPUT_DIR, SRC_DIR + "/TestDupThrowsTags.java"
     };
 
     /**
@@ -45,29 +44,15 @@
     public static void main(String[] args) {
         String[][] tests = new String[4][2];
         for (int i = 0; i < tests.length; i++) {
-            tests[i][0] = BUG_ID + "/TestDupThrowsTags.html";
+            tests[i][0] = "TestDupThrowsTags.html";
             tests[i][1] = "Test "+(i+1)+" passes";
         }
         TestDupThrowsTags tester = new TestDupThrowsTags();
-        run(tester, ARGS, tests, NO_TEST);
+        tester.run(ARGS, tests, NO_TEST);
         tester.printSummary();
     }
 
     /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
-
-    /**
      * @throws java.io.IOException Test 1 passes
      * @throws java.io.IOException Test 2 passes
      * @throws java.lang.NullPointerException Test 3 passes
--- a/langtools/test/com/sun/javadoc/lib/JavadocTester.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/lib/JavadocTester.java	Thu Apr 24 16:04:44 2014 -0700
@@ -21,8 +21,6 @@
  * questions.
  */
 
-import com.sun.javadoc.*;
-import java.util.*;
 import java.io.*;
 
 
@@ -56,6 +54,7 @@
 
     protected static final String SRC_DIR = System.getProperty("test.src", ".");
     protected static final String JAVA_VERSION = System.getProperty("java.version");
+    protected static final String OUTPUT_DIR = "out";
     protected static final String[][] NO_TEST = new String[][] {};
     protected static final String[] NO_FILE_TEST = new String[] {};
 
@@ -105,11 +104,16 @@
     public StringWriter warnings;
 
     /**
-     * The buffer of warning output..
+     * The buffer of warning output.
      */
     public StringBuffer standardOut;
 
     /**
+     * The output directory.
+     */
+    private File outputDir;
+
+    /**
      * The current subtest number.
      */
     private static int numTestsRun = 0;
@@ -131,37 +135,23 @@
     }
 
     /**
-     * Return the bug id.
-     * @return the bug id
-     */
-    public abstract String getBugId();
-
-    /**
-     * Return the name of the bug.
-     * @return the name of the bug
-     */
-    public abstract String getBugName();
-
-    /**
      * Execute the tests.
      *
-     * @param tester           the tester to execute
      * @param args             the arguments to pass to Javadoc
      * @param testArray        the array of tests
      * @param negatedTestArray the array of negated tests
      * @return                 the return code for the execution of Javadoc
      */
-    public static int run(JavadocTester tester, String[] args,
+    public int run(String[] args,
             String[][] testArray, String[][] negatedTestArray) {
-        int returnCode = tester.runJavadoc(args);
-        tester.runTestsOnHTML(testArray, negatedTestArray);
+        int returnCode = runJavadoc(args);
+        runTestsOnHTML(testArray, negatedTestArray);
         return returnCode;
     }
 
     /**
      * Execute the tests.
      *
-     * @param tester               the tester to execute
      * @param args                 the arguments to pass to Javadoc
      * @param testArray            the array of tests
      * @param negatedTestArray     the array of negated tests
@@ -169,12 +159,12 @@
      * @param negatedFileTestArray the array of negated file tests
      * @return                     the return code for the execution of Javadoc
      */
-    public static int run(JavadocTester tester, String[] args,
-            String[][] testArray, String[][] negatedTestArray, String[] fileTestArray,
-            String[] negatedFileTestArray) {
-        int returnCode = tester.runJavadoc(args);
-        tester.runTestsOnHTML(testArray, negatedTestArray);
-        tester.runTestsOnFile(fileTestArray, negatedFileTestArray);
+    public int run(String[] args,
+            String[][] testArray, String[][] negatedTestArray,
+            String[] fileTestArray, String[] negatedFileTestArray) {
+        int returnCode = runJavadoc(args);
+        runTestsOnHTML(testArray, negatedTestArray);
+        runTestsOnFile(fileTestArray, negatedFileTestArray);
         return returnCode;
     }
 
@@ -208,6 +198,13 @@
                                     + javadocRunNum + ")...");
         }
         initOutputBuffers();
+        outputDir = new File(".");
+        for (int i = 0; i < args.length - 2; i++) {
+            if (args[i].equals("-d")) {
+                outputDir = new File(args[++i]);
+                break;
+            }
+        }
 
         ByteArrayOutputStream stdout = new ByteArrayOutputStream();
         PrintStream prevOut = System.out;
@@ -218,7 +215,7 @@
         System.setErr(new PrintStream(stderr));
 
         int returnCode = com.sun.tools.javadoc.Main.execute(
-                getBugName(),
+                "javadoc",
                 new PrintWriter(errors, true),
                 new PrintWriter(warnings, true),
                 new PrintWriter(notices, true),
@@ -260,60 +257,53 @@
      * Run array of tests on the generated files.
      * This method accepts a fileTestArray for testing if a file is generated
      * and a negatedFileTestArray for testing if a file is not found.
+     * The files are relative to the most recent output directory specified
+     * with -d.
      *
-     * @param testArray         the array of file tests
-     * @param negatedTestArray  the array of negated file tests
+     * @param fileTestArray         the array of file tests
+     * @param negatedFileTestArray  the array of negated file tests
      */
     public void runTestsOnFile(String[] fileTestArray, String[] negatedFileTestArray) {
-        runTestsOnFile(fileTestArray, false);
-        runTestsOnFile(negatedFileTestArray, true);
+        runTestsOnFile(outputDir, fileTestArray, false);
+        runTestsOnFile(outputDir, negatedFileTestArray, true);
     }
 
     /**
      * Run the array of tests on the resulting HTML.
+     * The files are relative to the most recent output directory specified
+     * with -d.
      *
      * @param testArray the array of tests
      * @param isNegated true if test is negated; false otherwise
      */
     private void runTestsOnHTML(String[][] testArray , boolean isNegated) {
-        for (int i = 0; i < testArray.length; i++) {
-
+        for (String[] test : testArray) {
             numTestsRun++;
-
             System.out.print("Running subtest #" + numTestsRun + "... ");
-
             // Get string to find
-            String stringToFind = testArray[i][1];
-
+            String stringToFind = test[1];
             // Read contents of file into a string
             String fileString;
             try {
-                fileString = readFileToString(testArray[i][0]);
+                fileString = readFileToString(outputDir, test[0]);
             } catch (Error e) {
                 if (isNegated) {
-                  System.out.println( "FAILED" + "\n"
-                                    + "for bug " + getBugId()
-                                    + " (" + getBugName() + ") "
-                                    + "due to "
-                                    + e + "\n");
-                  continue;
+                    System.out.println( "FAILED, due to " + e + "\n");
+                    continue;
                 }
                 throw e;
             }
             // Find string in file's contents
             boolean isFound = findString(fileString, stringToFind);
-            if ((isNegated && !isFound) || (!isNegated && isFound) ) {
+            if ((isNegated && !isFound) || (!isNegated && isFound)) {
                 numTestsPassed += 1;
-                System.out.println( "Passed" + "\n"
-                                    + (isNegated ? "not found:" : "found:") + "\n"
-                                    + stringToFind + " in " + testArray[i][0] + "\n");
+                System.out.println("Passed" + "\n"
+                        + (isNegated ? "not found:" : "found:") + "\n"
+                        + stringToFind + " in " + test[0] + "\n");
             } else {
-                System.out.println( "FAILED" + "\n"
-                                    + "for bug " + getBugId()
-                                    + " (" + getBugName() + ")" + "\n"
-                                    + "when searching for:" + "\n"
-                                    + stringToFind
-                                    + " in " + testArray[i][0] + "\n");
+                System.out.println("FAILED, when searching for:" + "\n"
+                        + stringToFind
+                        + " in " + test[0] + "\n");
             }
         }
     }
@@ -324,21 +314,15 @@
      * @param testArray the array of file tests
      * @param isNegated true if test is negated; false otherwise
      */
-    private void runTestsOnFile(String[] testArray, boolean isNegated) {
-        String fileName;
-        String failedString;
-        String passedString;
-        for (int i = 0; i < testArray.length; i++) {
+    private void runTestsOnFile(File baseDir, String[] testArray, boolean isNegated) {
+        for (String fileName : testArray) {
             numTestsRun++;
-            fileName = testArray[i];
-            failedString = "FAILED" + "\n"
-                    + "for bug " + getBugId() + " (" + getBugName() + ") "
-                    + "file (" + fileName + ") found" + "\n";
-            passedString = "Passed" + "\n" +
-                        "file (" + fileName + ") not found" + "\n";
+            String failedString = "FAILED: file (" + fileName + ") found" + "\n";
+            String passedString = "Passed" + "\n" +
+                    "file (" + fileName + ") not found" + "\n";
             System.out.print("Running subtest #" + numTestsRun + "... ");
             try {
-                File file = new File(fileName);
+                File file = new File(baseDir, fileName);
                 if ((file.exists() && !isNegated) || (!file.exists() && isNegated)) {
                     numTestsPassed += 1;
                     System.out.println(passedString);
@@ -354,27 +338,33 @@
     /**
      * Iterate through the list of given file pairs and diff each file.
      *
-     * @param filePairs the pairs of files to diff.
-     * @throws an Error is thrown if any differences are found between
+     * @param baseDir1 the directory containing the first set of files
+     * @param baseDir2 the directory containing the second set of files
+     * @param files the set of files to be compared
+     * @throws Error if any differences are found between
      * file pairs.
      */
-    public void runDiffs(String[][] filePairs) throws Error {
-        runDiffs(filePairs, true);
+    public void runDiffs(String baseDir1, String baseDir2, String[] files) throws Error {
+        runDiffs(baseDir1, baseDir2, files, true);
     }
 
     /**
      * Iterate through the list of given file pairs and diff each file.
      *
-     * @param filePairs the pairs of files to diff.
-     * @param throwErrorIFNoMatch flag to indicate whether or not to throw
+     * @param baseDir1 the directory containing the first set of files
+     * @param baseDir2 the directory containing the second set of files
+     * @param files the set of files to be compared
+     * @param throwErrorIfNoMatch flag to indicate whether or not to throw
      * an error if the files do not match.
      *
-     * @throws an Error is thrown if any differences are found between
-     * file pairs and throwErrorIFNoMatch is true.
+     * @throws Error if any differences are found between
+     * file pairs and throwErrorIfNoMatch is true.
      */
-    public void runDiffs(String[][] filePairs, boolean throwErrorIfNoMatch) throws Error {
-        for (int i = 0; i < filePairs.length; i++) {
-            diff(filePairs[i][0], filePairs[i][1], throwErrorIfNoMatch);
+    public void runDiffs(String baseDir1, String baseDir2, String[] files, boolean throwErrorIfNoMatch) throws Error {
+        File bd1 = new File(baseDir1);
+        File bd2 = new File(baseDir2);
+        for (String file : files) {
+            diff(bd1, bd2, file, throwErrorIfNoMatch);
         }
     }
 
@@ -394,8 +384,7 @@
                 actualExitCode);
             numTestsPassed++;
         } else {
-            System.out.println( "FAILED" + "\n" + "for bug " + getBugId()
-                + " (" + getBugName() + ")" + "\n" + "Expected return code " +
+            System.out.println( "FAILED: expected return code " +
                 expectedExitCode + " but got " + actualExitCode);
         }
     }
@@ -412,8 +401,7 @@
             // Test failed
             throw new Error("\n" + (numTestsRun - numTestsPassed)
                                     + " of " + (numTestsRun)
-                                    + " subtests failed for bug " + getBugId()
-                                    + " (" + getBugName() + ")" + "\n");
+                                    + " subtests failed\n");
         }
     }
 
@@ -434,28 +422,39 @@
      * @return          the file in string format
      */
     public String readFileToString(String fileName) throws Error {
-        if (fileName.equals(ERROR_OUTPUT)) {
-            return getErrorOutput();
-        } else if (fileName.equals(NOTICE_OUTPUT)) {
-            return getNoticeOutput();
-        } else if (fileName.equals(WARNING_OUTPUT)) {
-            return getWarningOutput();
-        } else if (fileName.equals(STANDARD_OUTPUT)) {
-            return getStandardOutput();
+        return readFileToString(outputDir, fileName);
+    }
+
+    /**
+     * Read the file and return it as a string.
+     *
+     * @param baseDir   the directory in which to locate the file
+     * @param fileName  the name of the file to read
+     * @return          the file in string format
+     */
+    private String readFileToString(File baseDir, String fileName) throws Error {
+        switch (fileName) {
+            case ERROR_OUTPUT:
+                return getErrorOutput();
+            case NOTICE_OUTPUT:
+                return getNoticeOutput();
+            case WARNING_OUTPUT:
+                return getWarningOutput();
+            case STANDARD_OUTPUT:
+                return getStandardOutput();
         }
         try {
-            File file = new File(fileName);
+            File file = new File(baseDir, fileName);
             if ( !file.exists() ) {
                 System.out.println("\n" + "FILE DOES NOT EXIST: " + fileName);
             }
-            BufferedReader in = new BufferedReader(new FileReader(file));
-
-            // Create an array of characters the size of the file
-            char[] allChars = new char[(int)file.length()];
-
-            // Read the characters into the allChars array
-            in.read(allChars, 0, (int)file.length());
-            in.close();
+            char[] allChars;
+            try (BufferedReader in = new BufferedReader(new FileReader(file))) {
+                // Create an array of characters the size of the file
+                allChars = new char[(int)file.length()];
+                // Read the characters into the allChars array
+                in.read(allChars, 0, (int)file.length());
+            }
 
             // Convert to a string
             String allCharsString = new String(allChars);
@@ -472,22 +471,24 @@
     /**
      * Compare the two given files.
      *
-     * @param file1 the first file to compare.
-     * @param file2 the second file to compare.
+     * @param baseDir1 the directory in which to locate the first file
+     * @param baseDir2 the directory in which to locate the second file
+     * @param file the file to compare in the two base directories
      * @param throwErrorIFNoMatch flag to indicate whether or not to throw
      * an error if the files do not match.
      * @return true if the files are the same and false otherwise.
      */
-    public boolean diff(String file1, String file2, boolean throwErrorIFNoMatch) throws Error {
-        String file1Contents = readFileToString(file1);
-        String file2Contents = readFileToString(file2);
+    private boolean diff(File baseDir1, File baseDir2, String file,
+            boolean throwErrorIFNoMatch) throws Error {
+        String file1Contents = readFileToString(baseDir1, file);
+        String file2Contents = readFileToString(baseDir2, file);
         numTestsRun++;
         if (file1Contents.trim().compareTo(file2Contents.trim()) == 0) {
-            System.out.println("Diff successful: " + file1 + ", " + file2);
+            System.out.println("Diff successful: " + new File(baseDir1, file) + ", " + new File(baseDir2, file));
             numTestsPassed++;
             return true;
         } else if (throwErrorIFNoMatch) {
-            throw new Error("Diff failed: " + file1 + ", " + file2);
+            throw new Error("Diff failed: " + new File(baseDir1, file) + ", " + new File(baseDir2, file));
         } else {
             return false;
         }
@@ -561,12 +562,12 @@
                 destDirObj.mkdir();
             }
             String[] files = targetDirObj.list();
-            for (int i = 0; i < files.length; i++) {
-                File srcFile = new File(targetDirObj, files[i]);
-                File destFile = new File(destDirObj, files[i]);
+            for (String file : files) {
+                File srcFile = new File(targetDirObj, file);
+                File destFile = new File(destDirObj, file);
                 if (srcFile.isFile()) {
                     System.out.println("Copying " + srcFile + " to " + destFile);
-                        copyFile(destFile, srcFile);
+                    copyFile(destFile, srcFile);
                 } else if(srcFile.isDirectory()) {
                     copyDir(srcFile.getAbsolutePath(), destDirObj.getAbsolutePath());
                 }
@@ -579,13 +580,15 @@
     /**
      * Copy source file to destination file.
      *
+     * @param destfile the destination file
+     * @param srcfile the source file
      * @throws SecurityException
      * @throws IOException
      */
     public static void copyFile(File destfile, File srcfile)
         throws IOException {
         byte[] bytearr = new byte[512];
-        int len = 0;
+        int len;
         FileInputStream input = new FileInputStream(srcfile);
         File destDir = destfile.getParentFile();
         destDir.mkdirs();
@@ -594,8 +597,7 @@
             while ((len = input.read(bytearr)) != -1) {
                 output.write(bytearr, 0, len);
             }
-        } catch (FileNotFoundException exc) {
-        } catch (SecurityException exc) {
+        } catch (FileNotFoundException | SecurityException exc) {
         } finally {
             input.close();
             output.close();
--- a/langtools/test/com/sun/javadoc/testAbsLinkPath/TestAbsLinkPath.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testAbsLinkPath/TestAbsLinkPath.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,10 +34,8 @@
 
 public class TestAbsLinkPath extends JavadocTester {
 
-    private static final String BUG_ID = "4640745";
     private static final String[][] TEST = {
-        {"tmp/pkg1/C1.html", "C2.html"}};
-    private static final String[][] NEGATED_TEST = NO_TEST;
+        { "pkg1/C1.html", "C2.html"}};
 
     private static final String[] ARGS1 =
         new String[] {
@@ -53,22 +51,8 @@
      */
     public static void main(String[] args) {
         TestAbsLinkPath tester = new TestAbsLinkPath();
-        run(tester, ARGS1, NO_TEST, NO_TEST);
-        run(tester, ARGS2,  TEST, NEGATED_TEST);
+        tester.run(ARGS1, NO_TEST, NO_TEST);
+        tester.run(ARGS2,  TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testAbstractMethod/TestAbstractMethod.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testAbstractMethod/TestAbstractMethod.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,18 +35,17 @@
 public class TestAbstractMethod extends JavadocTester {
 
     //Test information.
-    private static final String BUG_ID = "8004891";
 
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/A.html",
+        { "pkg/A.html",
             "<td class=\"colFirst\"><code>default void</code></td>"},
-        {BUG_ID + "/pkg/A.html",
+        { "pkg/A.html",
             "<caption><span id=\"t0\" class=\"activeTableTab\"><span>" +
             "All Methods</span><span class=\"tabEnd\">&nbsp;</span></span>" +
             "<span id=\"t2\" class=\"tableTab\"><span>" +
@@ -57,7 +56,7 @@
             "</span><span id=\"t5\" class=\"tableTab\"><span>" +
             "<a href=\"javascript:show(16);\">Default Methods</a></span>" +
             "<span class=\"tabEnd\">&nbsp;</span></span></caption>"},
-        {BUG_ID + "/pkg/B.html",
+        { "pkg/B.html",
             "<caption><span id=\"t0\" class=\"activeTableTab\"><span>" +
             "All Methods</span><span class=\"tabEnd\">&nbsp;</span></span>" +
             "<span id=\"t2\" class=\"tableTab\"><span>" +
@@ -68,9 +67,9 @@
             "<span id=\"t4\" class=\"tableTab\"><span>" +
             "<a href=\"javascript:show(8);\">Concrete Methods</a></span>" +
             "<span class=\"tabEnd\">&nbsp;</span></span></caption>"},
-        {BUG_ID + "/pkg/B.html",
+        { "pkg/B.html",
             "<td class=\"colFirst\"><code>abstract void</code></td>"},
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<caption><span id=\"t0\" class=\"activeTableTab\"><span>" +
             "All Methods</span><span class=\"tabEnd\">&nbsp;</span></span>" +
             "<span id=\"t2\" class=\"tableTab\"><span>" +
@@ -79,18 +78,18 @@
             "<span id=\"t5\" class=\"tableTab\"><span>" +
             "<a href=\"javascript:show(16);\">Default Methods</a></span>" +
             "<span class=\"tabEnd\">&nbsp;</span></span></caption>"},
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<td class=\"colFirst\"><code>default void</code></td>"}
     };
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg/A.html",
+        { "pkg/A.html",
             "<td class=\"colFirst\"><code>abstract void</code></td>"},
-        {BUG_ID + "/pkg/B.html",
+        { "pkg/B.html",
             "<span><a href=\"javascript:show(16);\">Default Methods</a></span>" +
             "<span class=\"tabEnd\">&nbsp;</span>"},
-        {BUG_ID + "/pkg/B.html",
+        { "pkg/B.html",
             "<td class=\"colFirst\"><code>default void</code></td>"},
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<span><a href=\"javascript:show(4);\">Abstract Methods</a></span>" +
             "<span class=\"tabEnd\">&nbsp;</span>"}
     };
@@ -101,21 +100,7 @@
      */
     public static void main(String[] args) {
         TestAbstractMethod tester = new TestAbstractMethod();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testAnchorNames/TestAnchorNames.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testAnchorNames/TestAnchorNames.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,41 +33,40 @@
 
 public class TestAnchorNames extends JavadocTester {
 
-    private static final String BUG_ID = "8025633";
 
     //Input for string search tests.
     private static final String[][] TEST = {
 
         //Test some section markers and links to these markers
 
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"skip.navbar.top\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"#skip.navbar.top\" title=\"Skip navigation links\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"nested.class.summary\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"#nested.class.summary\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"method.summary\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"#method.summary\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"field.detail\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"#field.detail\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"constructor.detail\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"#constructor.detail\">"
         },
 
@@ -75,170 +74,170 @@
 
         //The marker for this appears in the serialized-form.html which we will
         //test below
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../serialized-form.html#pkg1.RegClass\">"
         },
         //Test some fields
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"Z:Z_\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../pkg1/RegClass.html#Z:Z_\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"Z:Z_:D\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../pkg1/RegClass.html#Z:Z_:D\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"Z:Z:D_\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../pkg1/RegClass.html#Z:Z:D_\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"Z:Z:Dfield\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../pkg1/RegClass.html#Z:Z:Dfield\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"fieldInCla:D:D\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../pkg1/RegClass.html#fieldInCla:D:D\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"S_:D:D:D:D:DINT\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../pkg1/RegClass.html#S_:D:D:D:D:DINT\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"method:D:D\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../pkg1/RegClass.html#method:D:D\">"
         },
-        {BUG_ID + "/pkg1/DeprMemClass.html",
+        { "pkg1/DeprMemClass.html",
             "<a name=\"Z:Z_field_In_Class\">"
         },
-        {BUG_ID + "/pkg1/DeprMemClass.html",
+        { "pkg1/DeprMemClass.html",
             "<a href=\"../pkg1/DeprMemClass.html#Z:Z_field_In_Class\">"
         },
         //Test constructor
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"RegClass-java.lang.String-int-\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../pkg1/RegClass.html#RegClass-java.lang.String-int-\">"
         },
         //Test some methods
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"Z:Z_methodInClass-java.lang.String-\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../pkg1/RegClass.html#Z:Z_methodInClass-java.lang.String-\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"method--\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../pkg1/RegClass.html#method--\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"foo-java.util.Map-\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../pkg1/RegClass.html#foo-java.util.Map-\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"methodInCla:Ds-java.lang.String:A-\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../pkg1/RegClass.html#methodInCla:Ds-java.lang.String:A-\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"Z:Z_methodInClas:D-java.lang.String-int-\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../pkg1/RegClass.html#Z:Z_methodInClas:D-java.lang.String-int-\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"methodD-pkg1.RegClass.:DA-\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../pkg1/RegClass.html#methodD-pkg1.RegClass.:DA-\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a name=\"methodD-pkg1.RegClass.D:A-\">"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             "<a href=\"../pkg1/RegClass.html#methodD-pkg1.RegClass.D:A-\">"
         },
-        {BUG_ID + "/pkg1/DeprMemClass.html",
+        { "pkg1/DeprMemClass.html",
             "<a name=\"Z:Z:Dmethod_In_Class--\">"
         },
-        {BUG_ID + "/pkg1/DeprMemClass.html",
+        { "pkg1/DeprMemClass.html",
             "<a href=\"../pkg1/DeprMemClass.html#Z:Z:Dmethod_In_Class--\">"
         },
 
         //Test enum
 
-        {BUG_ID + "/pkg1/RegClass.Te$t_Enum.html",
+        { "pkg1/RegClass.Te$t_Enum.html",
             "<a name=\"Z:Z:DFLD2\">"
         },
-        {BUG_ID + "/pkg1/RegClass.Te$t_Enum.html",
+        { "pkg1/RegClass.Te$t_Enum.html",
             "<a href=\"../pkg1/RegClass.Te$t_Enum.html#Z:Z:DFLD2\">"
         },
 
         //Test nested class
 
-        {BUG_ID + "/pkg1/RegClass._NestedClas$.html",
+        { "pkg1/RegClass._NestedClas$.html",
             "<a name=\"Z:Z_NestedClas:D--\">"
         },
-        {BUG_ID + "/pkg1/RegClass._NestedClas$.html",
+        { "pkg1/RegClass._NestedClas$.html",
             "<a href=\"../pkg1/RegClass._NestedClas$.html#Z:Z_NestedClas:D--\">"
         },
 
         //Test class use page
 
-        {BUG_ID + "/pkg1/class-use/DeprMemClass.html",
+        { "pkg1/class-use/DeprMemClass.html",
             "<a href=\"../../pkg1/RegClass.html#d____mc\">"
         },
 
         //Test deprecated list page
 
-        {BUG_ID + "/deprecated-list.html",
+        { "deprecated-list.html",
             "<a href=\"pkg1/DeprMemClass.html#Z:Z_field_In_Class\">"
         },
-        {BUG_ID + "/deprecated-list.html",
+        { "deprecated-list.html",
             "<a href=\"pkg1/DeprMemClass.html#Z:Z:Dmethod_In_Class--\">"
         },
 
         //Test constant values page
 
-        {BUG_ID + "/constant-values.html",
+        { "constant-values.html",
             "<a href=\"pkg1/RegClass.html#S_:D:D:D:D:DINT\">"
         },
 
         //Test serialized form page
 
         //This is the marker for the link that appears in the pkg1.RegClass.html page
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
             "<a name=\"pkg1.RegClass\">"
         },
 
         //Test member name index page
 
-        {BUG_ID + "/index-all.html",
+        { "index-all.html",
             "<a name=\"I:Z:Z:D\">"
         },
-        {BUG_ID + "/index-all.html",
+        { "index-all.html",
             "<a href=\"#I:Z:Z:D\">$"
         },
-        {BUG_ID + "/index-all.html",
+        { "index-all.html",
             "<a href=\"#I:Z:Z_\">_"
         }
     };
@@ -246,22 +245,22 @@
     private static final String[][] NEGATED_TEST = {
         //The marker name conversion should only affect HTML anchors. It should not
         //affect the lables.
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             " Z:Z_"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             " Z:Z:Dfield"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             " Z:Z_field_In_Class"
         },
-        {BUG_ID + "/pkg1/RegClass.html",
+        { "pkg1/RegClass.html",
             " S_:D:D:D:D:DINT"
         },
     };
 
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "-use", "pkg1"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "pkg1"
     };
 
     /**
@@ -270,21 +269,7 @@
      */
     public static void main(String[] args) throws Exception {
         TestAnchorNames tester = new TestAnchorNames();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testAnnotationOptional/TestAnnotationOptional.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testAnnotationOptional/TestAnnotationOptional.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,44 +35,24 @@
 
 public class TestAnnotationOptional extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "NO_BUG_ID_YET";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/AnnotationOptional.html",
+        { "pkg/AnnotationOptional.html",
             "<a name=\"annotation.type.element.detail\">"
         }
     };
-
-    private static final String[][] NEGATED_TEST = NO_TEST;
-
     /**
      * The entry point of the test.
      * @param args the array of command line arguments.
      */
     public static void main(String[] args) {
         TestAnnotationOptional tester = new TestAnnotationOptional();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testAnnotationTypes/TestAnnotationTypes.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testAnnotationTypes/TestAnnotationTypes.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,47 +34,44 @@
 
 public class TestAnnotationTypes extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4973609-8015249";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/AnnotationTypeField.html",
+        { "pkg/AnnotationTypeField.html",
             "<li>Summary:&nbsp;</li>\n" +
             "<li><a href=\"#annotation.type." +
             "field.summary\">Field</a>&nbsp;|&nbsp;</li>"},
-        {BUG_ID + "/pkg/AnnotationTypeField.html",
+        { "pkg/AnnotationTypeField.html",
             "<li>Detail:&nbsp;</li>\n" +
             "<li><a href=\"#annotation.type." +
             "field.detail\">Field</a>&nbsp;|&nbsp;</li>"},
-        {BUG_ID + "/pkg/AnnotationTypeField.html",
+        { "pkg/AnnotationTypeField.html",
             "<!-- =========== ANNOTATION TYPE FIELD SUMMARY =========== -->"},
-        {BUG_ID + "/pkg/AnnotationTypeField.html",
+        { "pkg/AnnotationTypeField.html",
             "<h3>Field Summary</h3>"},
-        {BUG_ID + "/pkg/AnnotationTypeField.html",
+        { "pkg/AnnotationTypeField.html",
             "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../" +
             "pkg/AnnotationTypeField.html#DEFAULT_NAME\">DEFAULT_NAME</a></span>" +
             "</code>&nbsp;</td>"},
-        {BUG_ID + "/pkg/AnnotationTypeField.html",
+        { "pkg/AnnotationTypeField.html",
             "<!-- ============ ANNOTATION TYPE FIELD DETAIL =========== -->"},
-        {BUG_ID + "/pkg/AnnotationTypeField.html",
+        { "pkg/AnnotationTypeField.html",
             "<h4>DEFAULT_NAME</h4>\n" +
             "<pre>public static final&nbsp;java." +
             "lang.String&nbsp;DEFAULT_NAME</pre>"},
-        {BUG_ID + "/pkg/AnnotationType.html",
+        { "pkg/AnnotationType.html",
             "<li>Summary:&nbsp;</li>\n" +
             "<li>Field&nbsp;|&nbsp;</li>"},
-        {BUG_ID + "/pkg/AnnotationType.html",
+        { "pkg/AnnotationType.html",
             "<li>Detail:&nbsp;</li>\n" +
             "<li>Field&nbsp;|&nbsp;</li>"},
     };
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg/AnnotationType.html",
+        { "pkg/AnnotationType.html",
             "<HR>\n\n" +
             "<P>\n\n" +
             "<P>" +
@@ -87,21 +84,7 @@
      */
     public static void main(String[] args) {
         TestAnnotationTypes tester = new TestAnnotationTypes();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testBackSlashInLink/TestBackSlashInLink.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testBackSlashInLink/TestBackSlashInLink.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,13 +35,11 @@
 
 public class TestBackSlashInLink extends JavadocTester {
 
-    private static final String BUG_ID = "4511110";
     private static final String[][] TEST = {
-        {BUG_ID + "/C.html", "src-html/C.html#line.7"}};
-    private static final String[][] NEGATED_TEST = NO_TEST;
+        { "C.html", "src-html/C.html#line.7"}};
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR,
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
             "-linksource",  SRC_DIR + "/C.java"};
 
     /**
@@ -50,21 +48,7 @@
      */
     public static void main(String[] args) {
         TestBackSlashInLink tester = new TestBackSlashInLink();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testBadPackageFileInJar/TestBadPackageFileInJar.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testBadPackageFileInJar/TestBadPackageFileInJar.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,10 +35,6 @@
 
 public class TestBadPackageFileInJar extends JavadocTester {
 
-    protected static final String FS = System.getProperty("file.separator");
-
-    private static final String BUG_ID = "4691095";
-
     private static final String[][] TEST =
         new String[][] {
             {ERROR_OUTPUT,
@@ -47,7 +43,7 @@
 
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR, "-classpath",
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-classpath",
             SRC_DIR + "/badPackageFileInJar.jar", "pkg"};
 
 
@@ -57,21 +53,7 @@
      */
     public static void main(String[] args) {
         TestBadPackageFileInJar tester = new TestBadPackageFileInJar();
-        run(tester, ARGS, TEST, NO_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testBadSourceFile/TestBadSourceFile.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testBadSourceFile/TestBadSourceFile.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,40 +35,19 @@
 
 public class TestBadSourceFile extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4835749";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-Xdoclint:none", "-d", BUG_ID, SRC_DIR + "/C2.java"
+        "-Xdoclint:none", "-d", OUTPUT_DIR, SRC_DIR + "/C2.java"
     };
 
-    //Input for string search tests.
-    private static final String[][] TEST = NO_TEST;
-    private static final String[][] NEGATED_TEST = NO_TEST;
-
     /**
      * The entry point of the test.
      * @param args the array of command line arguments.
      */
     public static void main(String[] args) {
         TestBadSourceFile tester = new TestBadSourceFile();
-        int exitCode = run(tester, ARGS, TEST, NEGATED_TEST);
+        int exitCode = tester.run(ARGS, NO_TEST, NO_TEST);
         tester.checkExitCode(0, exitCode);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testBaseClass/TestBaseClass.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testBaseClass/TestBaseClass.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,9 +35,6 @@
 
 public class TestBaseClass extends JavadocTester {
 
-    private static final String BUG_ID = "4197513";
-    private static final String[][] TEST = NO_TEST;
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS =
         new String[] {
             "-sourcepath", SRC_DIR,
@@ -50,22 +47,8 @@
      */
     public static void main(String[] args) {
         TestBaseClass tester = new TestBaseClass();
-        if (run(tester, ARGS, TEST, NEGATED_TEST) != 0) {
+        if (tester.run(ARGS, NO_TEST, NO_TEST) != 0) {
             throw new Error("Javadoc failed to execute.");
         }
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testBreakIterator/TestBreakIterator.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testBreakIterator/TestBreakIterator.java	Thu Apr 24 16:04:44 2014 -0700
@@ -37,14 +37,12 @@
 
 public class TestBreakIterator extends JavadocTester {
 
-    private static final String BUG_ID = "4165985";
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/BreakIteratorTest.html",
+        { "pkg/BreakIteratorTest.html",
             "The class is empty (i.e. it has no members)."}};
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR,
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
             "-breakiterator", "pkg"};
 
     /**
@@ -53,21 +51,7 @@
      */
     public static void main(String[] args) {
         TestBreakIterator tester = new TestBreakIterator();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testCRLineSeparator/TestCRLineSeparator.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testCRLineSeparator/TestCRLineSeparator.java	Thu Apr 24 16:04:44 2014 -0700
@@ -37,21 +37,17 @@
 
 public class TestCRLineSeparator extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4979486-8014636";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", ".", "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", ".", "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/MyClass.html", "Line 1\n" +
+        { "pkg/MyClass.html", "Line 1\n" +
         " Line 2"}
     };
 
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -60,24 +56,10 @@
     public static void main(String[] args) throws Exception {
         initFiles(new File(SRC_DIR), new File("."), "pkg");
         TestCRLineSeparator tester = new TestCRLineSeparator();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
-
     // recursively copy files from fromDir to toDir, replacing newlines
     // with \r
     static void initFiles(File fromDir, File toDir, String f) throws IOException {
--- a/langtools/test/com/sun/javadoc/testCharset/TestCharset.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testCharset/TestCharset.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,25 +34,22 @@
 
 public class TestCharset extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "7052170";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-charset", "UTF-8", "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-charset", "UTF-8", "-sourcepath", SRC_DIR, "pkg"
     };
 
     private static final String[][] TEST = {
-        {BUG_ID + "/index.html",
+        { "index.html",
             "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"},
-        {BUG_ID + "/pkg/Foo.html",
+        { "pkg/Foo.html",
             "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"}
     };
 
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/index.html",
+        { "index.html",
             "<meta http-equiv=\"Content-Type\" content=\"text/html\" charset=\"UTF-8\">"},
-        {BUG_ID + "/pkg/Foo.html",
+        { "pkg/Foo.html",
             "<meta http-equiv=\"Content-Type\" content=\"text/html\" charset=\"UTF-8\">"}
     };
 
@@ -62,21 +59,7 @@
      */
     public static void main(String[] args) {
         TestCharset tester = new TestCharset();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testClassCrossReferences/TestClassCrossReferences.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,29 +34,27 @@
 
 public class TestClassCrossReferences extends JavadocTester {
 
-    private static final String BUG_ID = "4652655-4857717";
     private static final String[][] TEST = {
-        {BUG_ID + "/C.html",
+        { "C.html",
             "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/math/package-summary.html?is-external=true\"><code>Link to math package</code></a>"},
-        {BUG_ID + "/C.html",
+        { "C.html",
             "<a href=\"http://java.sun.com/j2se/1.4/docs/api/javax/swing/text/AbstractDocument.AttributeContext.html?is-external=true\" " +
             "title=\"class or interface in javax.swing.text\"><code>Link to AttributeContext innerclass</code></a>"},
-        {BUG_ID + "/C.html",
+        { "C.html",
             "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigDecimal.html?is-external=true\" " +
                 "title=\"class or interface in java.math\"><code>Link to external class BigDecimal</code></a>"},
-        {BUG_ID + "/C.html",
+        { "C.html",
             "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/math/BigInteger.html?is-external=true#gcd-java.math.BigInteger-\" " +
                 "title=\"class or interface in java.math\"><code>Link to external member gcd</code></a>"},
-        {BUG_ID + "/C.html",
+        { "C.html",
             "<dl>\n" +
             "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
             "<dd><code>toString</code>&nbsp;in class&nbsp;<code>java.lang.Object</code></dd>\n" +
             "</dl>"}
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR,
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
             "-linkoffline", "http://java.sun.com/j2se/1.4/docs/api/",
             SRC_DIR, SRC_DIR + "/C.java"};
 
@@ -66,21 +64,7 @@
      */
     public static void main(String[] args) {
         TestClassCrossReferences tester = new TestClassCrossReferences();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testClassTree/TestClassTree.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testClassTree/TestClassTree.java	Thu Apr 24 16:04:44 2014 -0700
@@ -37,22 +37,19 @@
 
 public class TestClassTree extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4632553-4973607";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/package-tree.html",
+        { "pkg/package-tree.html",
             "<ul>\n" +
             "<li type=\"circle\">pkg.<a href=\"../pkg/ParentClass.html\" " +
             "title=\"class in pkg\"><span class=\"typeNameLink\">ParentClass</span></a>"},
 
-        {BUG_ID + "/pkg/package-tree.html",
+        { "pkg/package-tree.html",
             "<h2 title=\"Annotation Type Hierarchy\">Annotation Type Hierarchy</h2>\n" +
             "<ul>\n" +
             "<li type=\"circle\">pkg.<a href=\"../pkg/AnnotationType.html\" " +
@@ -60,7 +57,7 @@
             "(implements java.lang.annotation.Annotation)</li>\n" +
             "</ul>"},
 
-        {BUG_ID + "/pkg/package-tree.html",
+        { "pkg/package-tree.html",
             "<h2 title=\"Enum Hierarchy\">Enum Hierarchy</h2>\n" +
             "<ul>\n" +
             "<li type=\"circle\">java.lang.Object\n" +
@@ -78,7 +75,7 @@
         },
     };
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg/package-tree.html",
+        { "pkg/package-tree.html",
             "<li type=\"circle\">class pkg.<a href=\"../pkg/ParentClass.html\" " +
             "title=\"class in pkg\"><span class=\"typeNameLink\">ParentClass</span></a></li>"}
         };
@@ -89,21 +86,7 @@
      */
     public static void main(String[] args) {
         TestClassTree tester = new TestClassTree();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testCmndLineClass/TestCmndLineClass.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testCmndLineClass/TestCmndLineClass.java	Thu Apr 24 16:04:44 2014 -0700
@@ -38,8 +38,6 @@
 
     private static final String OUTPUT_DIR1 = "4506980-tmp1";
     private static final String OUTPUT_DIR2 = "4506980-tmp2";
-    private static final String[][] TEST = NO_TEST;
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS1 =
         new String[] {
             "-d", OUTPUT_DIR1, "-sourcepath", SRC_DIR,
@@ -54,15 +52,14 @@
             SRC_DIR + "/pkg2/C3.java",
             SRC_DIR + "/pkg2/C4.java"
         };
-    private static final String[][] FILES_TO_DIFF = {
-        {OUTPUT_DIR1 + "/C5.html", OUTPUT_DIR2 + "/C5.html"},
-        {OUTPUT_DIR2 + "/pkg1/C1.html", OUTPUT_DIR2 + "/pkg1/C1.html"},
-        {OUTPUT_DIR1 + "/pkg1/C2.html", OUTPUT_DIR2 + "/pkg1/C2.html"},
-        {OUTPUT_DIR1 + "/pkg2/C3.html", OUTPUT_DIR2 + "/pkg2/C3.html"},
-        {OUTPUT_DIR1 + "/pkg2/C4.html", OUTPUT_DIR2 + "/pkg2/C4.html"}
+    private static final String[] FILES_TO_DIFF = {
+        "C5.html",
+        "pkg1/C1.html",
+        "pkg1/C2.html",
+        "pkg2/C3.html",
+        "pkg2/C4.html"
     };
 
-    private static final String BUG_ID = "4506980";
 
     /**
      * The entry point of the test.
@@ -70,22 +67,8 @@
      */
     public static void main(String[] args) {
         TestCmndLineClass tester = new TestCmndLineClass();
-        run(tester, ARGS1, TEST, NEGATED_TEST);
-        run(tester, ARGS2, TEST, NEGATED_TEST);
-        tester.runDiffs(FILES_TO_DIFF);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
+        tester.run(ARGS1, NO_TEST, NO_TEST);
+        tester.run(ARGS2, NO_TEST, NO_TEST);
+        tester.runDiffs(OUTPUT_DIR1, OUTPUT_DIR2, FILES_TO_DIFF);
     }
 }
--- a/langtools/test/com/sun/javadoc/testCompletionFailure/TestCompletionFailure.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testCompletionFailure/TestCompletionFailure.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,8 +33,6 @@
 
 public class TestCompletionFailure extends JavadocTester {
 
-    private static final String BUG_ID = "8027977";
-
     //Input for string search tests.
     private static final String[][] NEGATED_TEST = {
         {ERROR_OUTPUT, "TestCompletionFailure: error - " +
@@ -44,7 +42,7 @@
     };
 
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"
     };
 
     /**
@@ -53,21 +51,7 @@
      */
     public static void main(String[] args) throws Exception {
         TestCompletionFailure tester = new TestCompletionFailure();
-        run(tester, ARGS, NO_TEST, NEGATED_TEST);
+        tester.run(ARGS, NO_TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testConstantValuesPage/TestConstantValuesPage.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testConstantValuesPage/TestConstantValuesPage.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,14 +35,12 @@
 
 public class TestConstantValuesPage extends JavadocTester {
 
-    private static final String BUG_ID = "4681599";
-    private static final String[][] TEST = NO_TEST;
     private static final String[][] NEGATED_TEST = {
         {NOTICE_OUTPUT, "constant-values.html..."}
         };
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR, "foo"};
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "foo"};
 
     /**
      * The entry point of the test.
@@ -50,21 +48,7 @@
      */
     public static void main(String[] args) {
         TestConstantValuesPage tester = new TestConstantValuesPage();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, NO_TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testConstructorIndent/TestConstructorIndent.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,17 +35,14 @@
 
 public class TestConstructorIndent extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4904037";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/C.html", "<div class=\"block\">" +
+        { "C.html", "<div class=\"block\">" +
                  "This is just a simple constructor.</div>\n" +
                  "<dl>\n" +
                  "<dt><span class=\"paramLabel\">Parameters:</span></dt>\n" +
@@ -53,7 +50,6 @@
                  "</dl>"
         }
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -61,21 +57,7 @@
      */
     public static void main(String[] args) {
         TestConstructorIndent tester = new TestConstructorIndent();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testConstructors/TestConstructors.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testConstructors/TestConstructors.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,11 +33,9 @@
 
 public class TestConstructors extends JavadocTester {
 
-    private static final String BUG_ID = "8025524";
-
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg1/Outer.html",
+        { "pkg1/Outer.html",
             "<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
             "<dd><a href=\"../pkg1/Outer.Inner.html#Inner--\"><code>Inner()</code></a>, \n" +
             "<a href=\"../pkg1/Outer.Inner.html#Inner-int-\"><code>Inner(int)</code></a>, \n" +
@@ -46,79 +44,79 @@
             "<a href=\"../pkg1/Outer.html#Outer--\"><code>Outer()</code></a>, \n" +
             "<a href=\"../pkg1/Outer.html#Outer-int-\"><code>Outer(int)</code></a>"
         },
-        {BUG_ID + "/pkg1/Outer.html",
+        { "pkg1/Outer.html",
             "Link: <a href=\"../pkg1/Outer.Inner.html#Inner--\"><code>Inner()</code></a>, " +
             "<a href=\"../pkg1/Outer.html#Outer-int-\"><code>Outer(int)</code></a>, " +
             "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\"><code>" +
             "NestedInner(int)</code></a>"
         },
-        {BUG_ID + "/pkg1/Outer.html",
+        { "pkg1/Outer.html",
             "<a href=\"../pkg1/Outer.html#Outer--\">Outer</a></span>()"
         },
-        {BUG_ID + "/pkg1/Outer.html",
+        { "pkg1/Outer.html",
             "<a name=\"Outer--\">"
         },
-        {BUG_ID + "/pkg1/Outer.html",
+        { "pkg1/Outer.html",
             "<a href=\"../pkg1/Outer.html#Outer-int-\">Outer</a></span>(int&nbsp;i)"
         },
-        {BUG_ID + "/pkg1/Outer.html",
+        { "pkg1/Outer.html",
             "<a name=\"Outer-int-\">"
         },
-        {BUG_ID + "/pkg1/Outer.Inner.html",
+        { "pkg1/Outer.Inner.html",
             "<a href=\"../pkg1/Outer.Inner.html#Inner--\">Inner</a></span>()"
         },
-        {BUG_ID + "/pkg1/Outer.Inner.html",
+        { "pkg1/Outer.Inner.html",
             "<a name=\"Inner--\">"
         },
-        {BUG_ID + "/pkg1/Outer.Inner.html",
+        { "pkg1/Outer.Inner.html",
             "<a href=\"../pkg1/Outer.Inner.html#Inner-int-\">Inner</a></span>(int&nbsp;i)"
         },
-        {BUG_ID + "/pkg1/Outer.Inner.html",
+        { "pkg1/Outer.Inner.html",
             "<a name=\"Inner-int-\">"
         },
-        {BUG_ID + "/pkg1/Outer.Inner.NestedInner.html",
+        { "pkg1/Outer.Inner.NestedInner.html",
             "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner--\">NestedInner</a></span>()"
         },
-        {BUG_ID + "/pkg1/Outer.Inner.NestedInner.html",
+        { "pkg1/Outer.Inner.NestedInner.html",
             "<a name=\"NestedInner--\">"
         },
-        {BUG_ID + "/pkg1/Outer.Inner.NestedInner.html",
+        { "pkg1/Outer.Inner.NestedInner.html",
             "<a href=\"../pkg1/Outer.Inner.NestedInner.html#NestedInner-int-\">NestedInner</a></span>(int&nbsp;i)"
         },
-        {BUG_ID + "/pkg1/Outer.Inner.NestedInner.html",
+        { "pkg1/Outer.Inner.NestedInner.html",
             "<a name=\"NestedInner-int-\">"
         }
     };
 
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg1/Outer.Inner.html",
+        { "pkg1/Outer.Inner.html",
             "Outer.Inner--"
         },
-        {BUG_ID + "/pkg1/Outer.Inner.html",
+        { "pkg1/Outer.Inner.html",
             "Outer.Inner-int-"
         },
-        {BUG_ID + "/pkg1/Outer.Inner.NestedInner.html",
+        { "pkg1/Outer.Inner.NestedInner.html",
             "Outer.Inner.NestedInner--"
         },
-        {BUG_ID + "/pkg1/Outer.Inner.NestedInner.html",
+        { "pkg1/Outer.Inner.NestedInner.html",
             "Outer.Inner.NestedInner-int-"
         },
-        {BUG_ID + "/pkg1/Outer.html",
+        { "pkg1/Outer.html",
             "<a href=\"../pkg1/Outer.Inner.html#Outer.Inner--\"><code>Outer.Inner()</code></a>"
         },
-        {BUG_ID + "/pkg1/Outer.html",
+        { "pkg1/Outer.html",
             "<a href=\"../pkg1/Outer.Inner.html#Outer.Inner-int-\"><code>Outer.Inner(int)</code></a>"
         },
-        {BUG_ID + "/pkg1/Outer.html",
+        { "pkg1/Outer.html",
             "<a href=\"../pkg1/Outer.Inner.NestedInner.html#Outer.Inner.NestedInner--\"><code>Outer.Inner.NestedInner()</code></a>"
         },
-        {BUG_ID + "/pkg1/Outer.html",
+        { "pkg1/Outer.html",
             "<a href=\"../pkg1/Outer.Inner.NestedInner.html#Outer.Inner.NestedInner-int-\"><code>Outer.Inner.NestedInner(int)</code></a>"
         }
     };
 
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"
     };
 
     /**
@@ -127,21 +125,7 @@
      */
     public static void main(String[] args) throws Exception {
         TestConstructors tester = new TestConstructors();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testCustomTag/TestCustomTag.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testCustomTag/TestCustomTag.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,28 +33,25 @@
 
 public class TestCustomTag extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "8006248";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-Xdoclint:none", "-d", BUG_ID, "-tagletpath", SRC_DIR,
+        "-Xdoclint:none", "-d", OUTPUT_DIR, "-tagletpath", SRC_DIR,
         "-taglet", "taglets.CustomTag", "-sourcepath",
         SRC_DIR, SRC_DIR + "/TagTestClass.java"
     };
 
     private static final String[] ARGS1 = new String[] {
-        "-d", BUG_ID + "-1", "-tagletpath",
+        "-d", OUTPUT_DIR + "-1", "-tagletpath",
         SRC_DIR, "-taglet", "taglets.CustomTag",
         "-sourcepath", SRC_DIR, SRC_DIR + "/TagTestClass.java"
     };
     private static final String[] ARGS2 = new String[] {
-        "-Xdoclint:none", "-d", BUG_ID + "-2", "-sourcepath",
+        "-Xdoclint:none", "-d", OUTPUT_DIR + "-2", "-sourcepath",
         SRC_DIR, SRC_DIR + "/TagTestClass.java"
     };
 
     private static final String[] ARGS3 = new String[] {
-        "-d", BUG_ID + "-3", "-sourcepath",
+        "-d", OUTPUT_DIR + "-3", "-sourcepath",
         SRC_DIR, SRC_DIR + "/TagTestClass.java"
     };
 
@@ -88,24 +85,10 @@
      */
     public static void main(String[] args) {
         TestCustomTag tester = new TestCustomTag();
-        run(tester, ARGS, TEST, NO_TEST);
-        run(tester, ARGS1, TEST1, NO_TEST);
-        run(tester, ARGS2, TEST2, NO_TEST);
-        run(tester, ARGS3, TEST3, NO_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
+        tester.run(ARGS1, TEST1, NO_TEST);
+        tester.run(ARGS2, TEST2, NO_TEST);
+        tester.run(ARGS3, TEST3, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDeprecatedDocs/TestDeprecatedDocs.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,19 +33,16 @@
 
 public class TestDeprecatedDocs extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4927552";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     private static final String TARGET_FILE  =
-        BUG_ID + "/deprecated-list.html";
+        "deprecated-list.html";
 
     private static final String TARGET_FILE2  =
-        BUG_ID + "/pkg/DeprecatedClassByAnnotation.html";
+        "pkg/DeprecatedClassByAnnotation.html";
 
     //Input for string search tests.
     private static final String[][] TEST = {
@@ -92,29 +89,13 @@
                  "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;</div>"},
     };
 
-    private static final String[][] NEGATED_TEST = NO_TEST;
-
     /**
      * The entry point of the test.
      * @param args the array of command line arguments.
      */
     public static void main(String[] args) {
         TestDeprecatedDocs tester = new TestDeprecatedDocs();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testDocEncoding/TestDocEncoding.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDocEncoding/TestDocEncoding.java	Thu Apr 24 16:04:44 2014 -0700
@@ -38,19 +38,17 @@
 
 public class TestDocEncoding extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "8000743";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-docencoding", "Cp930",
-        "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR,
+        "-docencoding", "Cp930",
+        "-sourcepath", SRC_DIR,
+        "-notimestamp",
+        "pkg"
     };
 
-    private static final String[][] TEST = NO_TEST;
-
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/stylesheet.css",
+        { "stylesheet.css",
             "body {\n" +
             "    background-color:#ffffff;"}
     };
@@ -61,22 +59,8 @@
      */
     public static void main(String[] args) {
         TestDocEncoding tester = new TestDocEncoding();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, NO_TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
 
--- a/langtools/test/com/sun/javadoc/testDocErrorReporter/TestDocErrorReporter.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDocErrorReporter/TestDocErrorReporter.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,19 +35,12 @@
 
 public class TestDocErrorReporter extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4927928";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "-encoding", "xyz",
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-encoding", "xyz",
             SRC_DIR + "/TestDocErrorReporter.java"
     };
 
-    //Input for string search tests.
-    private static final String[][] TEST = NO_TEST;
-    private static final String[][] NEGATED_TEST = NO_TEST;
-
     //Input for Javadoc return code test.
     private static final int EXPECTED_EXIT_CODE = 1;
 
@@ -57,22 +50,8 @@
      */
     public static void main(String[] args) {
         TestDocErrorReporter tester = new TestDocErrorReporter();
-        int actualExitCode = run(tester, ARGS, TEST, NEGATED_TEST);
+        int actualExitCode = tester.run(ARGS, NO_TEST, NO_TEST);
         tester.checkExitCode(EXPECTED_EXIT_CODE, actualExitCode);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testDocFileDir/TestDocFileDir.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDocFileDir/TestDocFileDir.java	Thu Apr 24 16:04:44 2014 -0700
@@ -39,45 +39,37 @@
 
 public class TestDocFileDir extends JavadocTester {
 
-    private static final String BUG_ID = "4258405-4973606";
-
     private static final String[][] TEST1 = {
-        {BUG_ID + "-1/pkg/doc-files/testfile.txt",
+        { "pkg/doc-files/testfile.txt",
             "This doc file did not get trashed."}
         };
-    private static final String[][] NEGATED_TEST1 = NO_TEST;
 
     private static final String[] FILE_TEST2 = {
-        BUG_ID + "-2/pkg/doc-files/subdir-used1" +
-            "/testfile.txt",
-        BUG_ID + "-2/pkg/doc-files/subdir-used2" +
-            "/testfile.txt"
+        "pkg/doc-files/subdir-used1/testfile.txt",
+        "pkg/doc-files/subdir-used2/testfile.txt"
     };
     private static final String[] FILE_NEGATED_TEST2 = {
-        BUG_ID + "-2/pkg/doc-files/subdir-excluded1" +
-            "/testfile.txt",
-        BUG_ID + "-2/pkg/doc-files/subdir-excluded2" +
-            "/testfile.txt"
+        "pkg/doc-files/subdir-excluded1/testfile.txt",
+        "pkg/doc-files/subdir-excluded2/testfile.txt"
     };
 
     private static final String[][] TEST0 = {
         {"pkg/doc-files/testfile.txt",
             "This doc file did not get trashed."}
         };
-    private static final String[][] NEGATED_TEST0 = {};
 
     //Output dir = Input Dir
     private static final String[] ARGS1 =
         new String[] {
-            "-d", BUG_ID + "-1",
+            "-d", OUTPUT_DIR + "-1",
             "-sourcepath",
-            "blah" + File.pathSeparator + BUG_ID + "-1" +
+            "blah" + File.pathSeparator + OUTPUT_DIR + "-1" +
             File.pathSeparator + "blah", "pkg"};
 
     //Exercising -docfilessubdirs and -excludedocfilessubdir
     private static final String[] ARGS2 =
         new String[] {
-            "-d", BUG_ID + "-2",
+            "-d", OUTPUT_DIR + "-2",
             "-sourcepath", SRC_DIR,
             "-docfilessubdirs",
             "-excludedocfilessubdir", "subdir-excluded1:subdir-excluded2",
@@ -95,24 +87,10 @@
     public static void main(String[] args) {
         TestDocFileDir tester = new TestDocFileDir();
         copyDir(SRC_DIR + "/pkg", ".");
-        run(tester, ARGS0, TEST0, NEGATED_TEST0);
-        copyDir(SRC_DIR + "/pkg", BUG_ID + "-1");
-        run(tester, ARGS1, TEST1, NEGATED_TEST1);
-        run(tester, ARGS2, NO_TEST, NO_TEST, FILE_TEST2, FILE_NEGATED_TEST2);
+        tester.run(ARGS0, TEST0, NO_TEST);
+        copyDir(SRC_DIR + "/pkg", OUTPUT_DIR + "-1");
+        tester.run(ARGS1, TEST1, NO_TEST);
+        tester.run(ARGS2, NO_TEST, NO_TEST, FILE_TEST2, FILE_NEGATED_TEST2);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testDocFiles/TestDocFiles.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDocFiles/TestDocFiles.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,9 +33,8 @@
 
 public class TestDocFiles extends JavadocTester {
 
-    private static final String BUG_ID = "8008949";
     private static final String[][] TEST = {
-        {"tmp/pkg/doc-files/test.txt", "test file"}};
+        { "pkg/doc-files/test.txt", "test file"}};
 
     private static final String[] ARGS =
         new String[] {
@@ -47,21 +46,7 @@
      */
     public static void main(String[] args) {
         TestDocFiles tester = new TestDocFiles();
-        run(tester, ARGS, TEST, NO_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testDocRootInlineTag/TestDocRootInlineTag.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDocRootInlineTag/TestDocRootInlineTag.java	Thu Apr 24 16:04:44 2014 -0700
@@ -36,25 +36,23 @@
 
 public class TestDocRootInlineTag extends JavadocTester {
 
-    private static final String BUG_ID = "4369014-4851991";
     private static final String[][] TEST = {
-        {BUG_ID + "/TestDocRootTag.html",
+        { "TestDocRootTag.html",
             "<a href=\"http://www.java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" " +
             "title=\"class or interface in java.io\"><code>File</code></a>"},
-        {BUG_ID + "/TestDocRootTag.html",
+        { "TestDocRootTag.html",
             "<a href=\"./glossary.html\">glossary</a>"},
-        {BUG_ID + "/TestDocRootTag.html",
+        { "TestDocRootTag.html",
             "<a href=\"http://www.java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" " +
             "title=\"class or interface in java.io\"><code>Second File Link</code></a>"},
-        {BUG_ID + "/TestDocRootTag.html", "The value of @docRoot is \"./\""},
-        {BUG_ID + "/index-all.html", "My package page is " +
+        { "TestDocRootTag.html", "The value of @docRoot is \"./\""},
+        { "index-all.html", "My package page is " +
             "<a href=\"./pkg/package-summary.html\">here</a>"}
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS =
         new String[] {
             "-bottom", "The value of @docRoot is \"{@docRoot}\"",
-            "-d", BUG_ID, "-sourcepath", SRC_DIR,
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
             "-linkoffline", "http://www.java.sun.com/j2se/1.4/docs/api",
             SRC_DIR, SRC_DIR + "/TestDocRootTag.java", "pkg"
         };
@@ -65,21 +63,7 @@
      */
     public static void main(String[] args) {
         TestDocRootInlineTag tester = new TestDocRootInlineTag();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testDocRootLink/TestDocRootLink.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDocRootLink/TestDocRootLink.java	Thu Apr 24 16:04:44 2014 -0700
@@ -32,92 +32,91 @@
  */
 public class TestDocRootLink extends JavadocTester {
 
-    private static final String BUG_ID = "6553182";
     private static final String[][] TEST1 = {
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "Refer <a href=\"../../technotes/guides/index.html\">Here</a>"
         },
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "This <a href=\"../pkg2/C2.html\">Here</a> should not be replaced\n" +
             " with an absolute link."
         },
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "Testing <a href=\"../technotes/guides/index.html\">Link 1</a> and\n" +
             " <a href=\"../pkg2/C2.html\">Link 2</a>."
         },
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg1/package-summary.html",
             "<a href=\"../../technotes/guides/index.html\">\n" +
             "            Test document 1</a>"
         },
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg1/package-summary.html",
             "<a href=\"../pkg2/C2.html\">\n" +
             "            Another Test document 1</a>"
         },
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg1/package-summary.html",
             "<a href=\"../technotes/guides/index.html\">\n" +
             "            Another Test document 2.</a>"
         }
     };
     private static final String[][] NEGATED_TEST1 = {
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">"
         },
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "<a href=\"http://download.oracle.com/javase/7/docs/pkg2/C2.html\">"
         },
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg1/package-summary.html",
             "<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">"
         },
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg1/package-summary.html",
             "<a href=\"http://download.oracle.com/javase/7/docs/pkg2/C2.html\">"
         }
     };
     private static final String[][] TEST2 = {
-        {BUG_ID + "-1/pkg2/C2.html",
+        { "pkg2/C2.html",
             "Refer <a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">Here</a>"
         },
-        {BUG_ID + "-1/pkg2/C2.html",
+        { "pkg2/C2.html",
             "This <a href=\"../pkg1/C1.html\">Here</a> should not be replaced\n" +
             " with an absolute link."
         },
-        {BUG_ID + "-1/pkg2/C2.html",
+        { "pkg2/C2.html",
             "Testing <a href=\"../technotes/guides/index.html\">Link 1</a> and\n" +
             " <a href=\"../pkg1/C1.html\">Link 2</a>."
         },
-        {BUG_ID + "-1/pkg2/package-summary.html",
+        { "pkg2/package-summary.html",
             "<a href=\"http://download.oracle.com/javase/7/docs/technotes/guides/index.html\">\n" +
             "            Test document 1</a>"
         },
-        {BUG_ID + "-1/pkg2/package-summary.html",
+        { "pkg2/package-summary.html",
             "<a href=\"../pkg1/C1.html\">\n" +
             "            Another Test document 1</a>"
         },
-        {BUG_ID + "-1/pkg2/package-summary.html",
+        { "pkg2/package-summary.html",
             "<a href=\"../technotes/guides/index.html\">\n" +
             "            Another Test document 2.</a>"
         }
     };
     private static final String[][] NEGATED_TEST2 = {
-        {BUG_ID + "-1/pkg2/C2.html",
+        { "pkg2/C2.html",
             "<a href=\"../../technotes/guides/index.html\">"
         },
-        {BUG_ID + "-1/pkg2/C2.html",
+        { "pkg2/C2.html",
             "<a href=\"http://download.oracle.com/javase/7/docs/pkg1/C1.html\">"
         },
-        {BUG_ID + "-1/pkg2/package-summary.html",
+        { "pkg2/package-summary.html",
             "<a href=\"../../technotes/guides/index.html\">"
         },
-        {BUG_ID + "-1/pkg2/package-summary.html",
+        { "pkg2/package-summary.html",
             "<a href=\"http://download.oracle.com/javase/7/docs/pkg1/C1.html\">"
         }
     };
     private static final String[] ARGS1 =
             new String[]{
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1", "pkg2"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1", "pkg2"
     };
     private static final String[] ARGS2 =
             new String[]{
-        "-d", BUG_ID + "-1", "-Xdocrootparent",
+        "-d", OUTPUT_DIR + "-1", "-Xdocrootparent",
         "http://download.oracle.com/javase/7/docs", "-sourcepath",
         SRC_DIR, "pkg1", "pkg2"
     };
@@ -128,22 +127,8 @@
      */
     public static void main(String[] args) {
         TestDocRootLink tester = new TestDocRootLink();
-        run(tester, ARGS1, TEST1, NEGATED_TEST1);
-        run(tester, ARGS2, TEST2, NEGATED_TEST2);
+        tester.run(ARGS1, TEST1, NEGATED_TEST1);
+        tester.run(ARGS2, TEST2, NEGATED_TEST2);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testDupParamWarn/TestDupParamWarn.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testDupParamWarn/TestDupParamWarn.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,9 +35,8 @@
 
 public class TestDupParamWarn extends JavadocTester {
 
-    private static final String BUG_ID = "4745855";
     private static final String[] ARGS =
-        new String[] {"-d", BUG_ID, "-sourcepath",
+        new String[] {"-d", OUTPUT_DIR, "-sourcepath",
                 SRC_DIR + "/", "pkg"};
     private static final String[][] NEGATED_TEST =
         new String[][] {{WARNING_OUTPUT,
@@ -48,20 +47,8 @@
      * @param args the array of command line arguments.
      */
     public static void main(String[] args) {
-        run(new TestDupParamWarn(), ARGS, NO_TEST, NEGATED_TEST);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
+        JavadocTester tester = new TestDupParamWarn();
+        tester.run(ARGS, NO_TEST, NEGATED_TEST);
+        tester.printSummary();
     }
 }
--- a/langtools/test/com/sun/javadoc/testEmptyClass/TestEmptyClass.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testEmptyClass/TestEmptyClass.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,15 +35,13 @@
 
 public class TestEmptyClass extends JavadocTester {
 
-    private static final String OUTPUT_DIR = "tmp";
-    private static final String[][] TEST = NO_TEST;
     private static final String[][] NEGATED_TEST = {
 
         //The overview tree should not link to classes that were not documented
-        {OUTPUT_DIR + "/overview-tree.html", "<A HREF=\"TestEmptyClass.html\">"},
+        { "overview-tree.html", "<A HREF=\"TestEmptyClass.html\">"},
 
         //The index page should not link to classes that were not documented
-        {OUTPUT_DIR + "/index-all.html", "<A HREF=\"TestEmptyClass.html\">"},
+        { "index-all.html", "<A HREF=\"TestEmptyClass.html\">"},
     };
     private static final String[] ARGS =
         new String[] {
@@ -51,8 +49,6 @@
             "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR + "/src",
             SRC_DIR + "/src/Empty.java"
         };
-    private static final String BUG_ID =
-        "4483401 4483407 4483409 4483413 4494343";
 
     /**
      * The entry point of the test.
@@ -60,24 +56,10 @@
      */
     public static void main(String[] args) {
         TestEmptyClass tester = new TestEmptyClass();
-        int exitCode = run(tester, ARGS, TEST, NEGATED_TEST);
+        int exitCode = tester.run(ARGS, NO_TEST, NEGATED_TEST);
         tester.printSummary();
         if (exitCode != 0) {
             throw new Error("Error found while executing Javadoc");
         }
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testEnclosingClass/TestEnclosingClass.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testEnclosingClass/TestEnclosingClass.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,19 +34,15 @@
 
 public class TestEnclosingClass extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "5008230";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/MyClass.MyInterface.html", "Enclosing class:"}
+        { "pkg/MyClass.MyInterface.html", "Enclosing class:"}
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -54,21 +50,7 @@
      */
     public static void main(String[] args) {
         TestEnclosingClass tester = new TestEnclosingClass();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testEncoding/TestEncoding.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testEncoding/TestEncoding.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,16 +35,14 @@
 
 public class TestEncoding extends JavadocTester {
 
-    private static final String BUG_ID = "4661481";
-    private static final String[][] TEST = NO_TEST;
 
     //If ??? is found in the output, the source file was not read with the correct encoding setting.
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/EncodeTest.html", "??"}
+        { "EncodeTest.html", "??"}
     };
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR,
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
             "-encoding", "iso-8859-1", SRC_DIR + "/EncodeTest.java"
         };
 
@@ -54,21 +52,7 @@
      */
     public static void main(String[] args) {
         TestEncoding tester = new TestEncoding();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, NO_TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testExternalOverridenMethod/TestExternalOverridenMethod.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,28 +35,23 @@
 
 public class TestExternalOverridenMethod extends JavadocTester {
 
-    private static final String BUG_ID = "4857717";
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/XReader.html",
+        { "pkg/XReader.html",
             "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
             "<dd><code><a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true#read--\" " +
             "title=\"class or interface in java.io\">read</a></code>&nbsp;in class&nbsp;<code>" +
             "<a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/FilterReader.html?is-external=true\" " +
             "title=\"class or interface in java.io\">FilterReader</a></code></dd>"},
-        {BUG_ID + "/pkg/XReader.html",
+        { "pkg/XReader.html",
             "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n" +
             "<dd><code><a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true#readInt--\" " +
             "title=\"class or interface in java.io\">readInt</a></code>&nbsp;in interface&nbsp;<code>" +
             "<a href=\"http://java.sun.com/j2se/1.4.1/docs/api/java/io/DataInput.html?is-external=true\" " +
             "title=\"class or interface in java.io\">DataInput</a></code></dd>"}};
 
-
-
-    private static final String[][] NEGATED_TEST = NO_TEST;
-
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR,
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
             "-linkoffline", "http://java.sun.com/j2se/1.4.1/docs/api", SRC_DIR,
             "pkg"
         };
@@ -67,21 +62,7 @@
      */
     public static void main(String[] args) {
         TestExternalOverridenMethod tester = new TestExternalOverridenMethod();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testGeneratedBy/TestGeneratedBy.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testGeneratedBy/TestGeneratedBy.java	Thu Apr 24 16:04:44 2014 -0700
@@ -32,8 +32,6 @@
 
 public class TestGeneratedBy extends JavadocTester {
 
-    private static final String OUTPUT_DIR = "tmp";
-
     private static final String[] FILES = {
         "pkg/MyClass.html",
         "pkg/package-summary.html",
@@ -65,7 +63,6 @@
             "pkg"
         };
 
-    private static final String BUG_ID = "8000418-8024288";
 
     private static String[][] getTests(boolean timestamp) {
         String version = System.getProperty("java.version");
@@ -74,7 +71,7 @@
             String genBy = "Generated by javadoc";
             if (timestamp) genBy += " (" + version + ") on ";
             tests[i] = new String[] {
-                OUTPUT_DIR + "/" + FILES[i], genBy
+                FILES[i], genBy
             };
         }
         return tests;
@@ -84,7 +81,7 @@
         String[][] tests = new String[FILES.length][];
         for (int i = 0; i < FILES.length; i++) {
             tests[i] = new String[] {
-                OUTPUT_DIR + "/" + FILES[i],
+                FILES[i],
                 (timestamp
                     ? "Generated by javadoc (version"
                     : "Generated by javadoc ("),
@@ -100,26 +97,12 @@
      */
     public static void main(String[] args) {
         TestGeneratedBy tester = new TestGeneratedBy();
-        int ec1 = run(tester, STD_ARGS, getTests(true), getNegatedTests(true));
-        int ec2 = run(tester, NO_TIMESTAMP_ARGS, getTests(false), getNegatedTests(false));
+        int ec1 = tester.run(STD_ARGS, getTests(true), getNegatedTests(true));
+        int ec2 = tester.run(NO_TIMESTAMP_ARGS, getTests(false), getNegatedTests(false));
         tester.printSummary();
         if (ec1 != 0 || ec2 != 0) {
             throw new Error("Error found while executing Javadoc");
         }
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
 
--- a/langtools/test/com/sun/javadoc/testGroupOption/TestGroupOption.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testGroupOption/TestGroupOption.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,12 +35,9 @@
 
 public class TestGroupOption extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4924383";
-
     //Javadoc arguments.
     private static final String[] ARGS1 = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR,
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
         "-group", "Package One", "pkg1",
         "-group", "Package Two", "pkg2",
         "-group", "Package Three", "pkg3",
@@ -48,7 +45,7 @@
     };
 
     private static final String[] ARGS2 = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR,
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
         "-group", "Package One", "pkg1",
         "-group", "Package One", "pkg2",
         "-group", "Package One", "pkg3",
@@ -56,11 +53,9 @@
     };
 
     //Input for string search tests.
-    private static final String[][] TEST1 = NO_TEST;
     private static final String[][] NEGATED_TEST1 = {{WARNING_OUTPUT, "-group"}};
 
     private static final String[][] TEST2 = {{WARNING_OUTPUT, "-group"}};
-    private static final String[][] NEGATED_TEST2 = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -69,26 +64,12 @@
     public static void main(String[] args) {
         //Make sure the warning is not printed when -group is used correctly.
         TestGroupOption tester = new TestGroupOption();
-        run(tester, ARGS1, TEST1, NEGATED_TEST1);
+        tester.run(ARGS1, NO_TEST, NEGATED_TEST1);
         tester.printSummary();
 
         //Make sure the warning is printed when -group is not used correctly.
         tester = new TestGroupOption();
-        run(tester, ARGS2, TEST2, NEGATED_TEST2);
+        tester.run(ARGS2, TEST2, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testHeadings/TestHeadings.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHeadings/TestHeadings.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,19 +34,16 @@
 
 public class TestHeadings extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4905786-6259611";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "-use", "-header", "Test Files",
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "-header", "Test Files",
         "pkg1", "pkg2"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
         //Package summary
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg1/package-summary.html",
             "<th class=\"colFirst\" scope=\"col\">" +
             "Class</th>\n" +
             "<th class=\"colLast\" scope=\"col\"" +
@@ -54,31 +51,31 @@
         },
 
         // Class documentation
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
         },
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "<h3>Methods inherited from class&nbsp;java.lang.Object</h3>"
         },
 
         // Class use documentation
-        {BUG_ID + "/pkg1/class-use/C1.html",
+        { "pkg1/class-use/C1.html",
             "<th class=\"colFirst\" scope=\"col\">Package</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Description</th>"
         },
-        {BUG_ID + "/pkg1/class-use/C1.html",
+        { "pkg1/class-use/C1.html",
             "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
         },
 
         // Deprecated
-        {BUG_ID + "/deprecated-list.html",
+        { "deprecated-list.html",
             "<th class=\"colOne\" scope=\"col\">Method and Description</th>"
         },
 
         // Constant values
-        {BUG_ID + "/constant-values.html",
+        { "constant-values.html",
             "<th class=\"colFirst\" scope=\"col\">" +
             "Modifier and Type</th>\n" +
             "<th scope=\"col\">Constant Field</th>\n" +
@@ -86,32 +83,30 @@
         },
 
         // Serialized Form
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
             "<h2 title=\"Package\">Package&nbsp;pkg1</h2>"
         },
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Class <a href=\"pkg1/C1.html\" title=\"class in pkg1\">" +
             "pkg1.C1</a> extends java.lang.Object implements Serializable</h3>"
         },
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Serialized Fields</h3>"
         },
 
         // Overview Frame
-        {BUG_ID + "/overview-frame.html",
+        { "overview-frame.html",
             "<h1 title=\"Test Files\" class=\"bar\">Test Files</h1>"
         },
-        {BUG_ID + "/overview-frame.html",
+        { "overview-frame.html",
             "<title>Overview List</title>"
         },
 
         // Overview Summary
-        {BUG_ID + "/overview-summary.html",
+        { "overview-summary.html",
             "<title>Overview</title>"
-        },
-
+        }
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -119,21 +114,7 @@
      */
     public static void main(String[] args) {
         TestHeadings tester = new TestHeadings();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testHelpFile/TestHelpFile.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHelpFile/TestHelpFile.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,19 +33,14 @@
 
 public class TestHelpFile extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "7132631";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR,
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
             SRC_DIR + "/TestHelpFile.java"
     };
 
-    private static final String[][] NEGATED_TEST = NO_TEST;
-
     private static final String[][] TEST = {
-        {BUG_ID + "/help-doc.html",
+        { "help-doc.html",
             "<a href=\"constant-values.html\">Constant Field Values</a>"
         },
     };
@@ -56,21 +51,7 @@
      */
     public static void main(String[] args) {
         TestHelpFile tester = new TestHelpFile();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testHelpOption/TestHelpOption.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHelpOption/TestHelpOption.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,17 +34,14 @@
 
 public class TestHelpOption extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4934778-4777599-6553182";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "-help",
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-help",
             SRC_DIR + "/TestHelpOption.java"
     };
 
     private static final String[] ARGS2 = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR,
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
             SRC_DIR + "/TestHelpOption.java"
     };
 
@@ -86,14 +83,12 @@
         {STANDARD_OUTPUT, "-stylesheetfile "},
         {STANDARD_OUTPUT, "-docencoding "},
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     private static final String[][] TEST2 = {
-        {BUG_ID + "/TestHelpOption.html",
+        { "TestHelpOption.html",
             "<li><a href=\"help-doc.html\">Help</a></li>"
         },
     };
-    private static final String[][] NEGATED_TEST2 = NO_TEST;
 
     //The help option should not crash the doclet.
     private static final int EXPECTED_EXIT_CODE = 0;
@@ -104,23 +99,9 @@
      */
     public static void main(String[] args) {
         TestHelpOption tester = new TestHelpOption();
-        int actualExitCode = run(tester, ARGS, TEST, NEGATED_TEST);
+        int actualExitCode = tester.run(ARGS, TEST, NO_TEST);
         tester.checkExitCode(EXPECTED_EXIT_CODE, actualExitCode);
-        run(tester, ARGS2, TEST2, NEGATED_TEST2);
+        tester.run(ARGS2, TEST2, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testHiddenMembers/TestHiddenMembers.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHiddenMembers/TestHiddenMembers.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,18 +35,16 @@
 
 public class TestHiddenMembers extends JavadocTester {
 
-    private static final String BUG_ID = "4492178";
-    private static final String[][] TEST = NO_TEST;
 
     //We should not inherit any members from BaseClass because they are all overriden and hidden
     //(declared as private).
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg/SubClass.html",
+        { "pkg/SubClass.html",
             "inherited from class pkg.<A HREF=\"../pkg/BaseClass.html\">BaseClass</A>"}
         };
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR,
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
             "pkg"
         };
 
@@ -56,21 +54,7 @@
      */
     public static void main(String[] args) {
         TestHiddenMembers tester = new TestHiddenMembers();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, NO_TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testHref/TestHref.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHref/TestHref.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,54 +33,51 @@
 
 public class TestHref extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4663254";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "-linkoffline",
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-linkoffline",
         "http://java.sun.com/j2se/1.4/docs/api/", SRC_DIR, "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
         //External link.
-        {BUG_ID + "/pkg/C1.html",
+        { "pkg/C1.html",
             "href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true#wait-long-int-\""
         },
         //Member summary table link.
-        {BUG_ID + "/pkg/C1.html",
+        { "pkg/C1.html",
             "href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\""
         },
         //Anchor test.
-        {BUG_ID + "/pkg/C1.html",
+        { "pkg/C1.html",
             "<a name=\"method-int-int-java.util.ArrayList-\">\n" +
             "<!--   -->\n" +
             "</a>"
         },
         //Backward compatibility anchor test.
-        {BUG_ID + "/pkg/C1.html",
+        { "pkg/C1.html",
             "<a name=\"method-int-int-java.util.ArrayList-\">\n" +
             "<!--   -->\n" +
             "</a>"
         },
         //{@link} test.
-        {BUG_ID + "/pkg/C2.html",
+        { "pkg/C2.html",
             "Link: <a href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\">"
         },
         //@see test.
-        {BUG_ID + "/pkg/C2.html",
+        { "pkg/C2.html",
             "See Also:</span></dt>\n" +
             "<dd><a href=\"../pkg/C1.html#method-int-int-java.util.ArrayList-\">"
         },
 
         //Header does not link to the page itself.
-        {BUG_ID + "/pkg/C4.html",
+        { "pkg/C4.html",
             "Class C4&lt;E extends C4&lt;E&gt;&gt;</h2>"
         },
 
         //Signature does not link to the page itself.
-        {BUG_ID + "/pkg/C4.html",
+        { "pkg/C4.html",
             "public abstract class <span class=\"typeNameLabel\">C4&lt;E extends C4&lt;E&gt;&gt;</span>"
         },
     };
@@ -95,21 +92,7 @@
      */
     public static void main(String[] args) {
         TestHref tester = new TestHref();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testHrefInDocComment/TestHrefInDocComment.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHrefInDocComment/TestHrefInDocComment.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,12 +35,9 @@
 
 public class TestHrefInDocComment extends JavadocTester {
 
-    private static final String BUG_ID = "4638015";
-    private static final String[][] TEST = NO_TEST;
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"};
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"};
 
     /**
      * The entry point of the test.
@@ -48,23 +45,8 @@
      */
     public static void main(String[] args) {
         TestHrefInDocComment tester = new TestHrefInDocComment();
-        if (run(tester, ARGS, TEST, NEGATED_TEST) != 0) {
+        if (tester.run(ARGS, NO_TEST, NO_TEST) != 0) {
             throw new Error("Javadoc failed to execute properly with given source.");
         }
-
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
     }
 }
--- a/langtools/test/com/sun/javadoc/testHtmlComments/TestHtmlComments.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHtmlComments/TestHtmlComments.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,18 +35,14 @@
 
 public class TestHtmlComments extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4904038";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java"
     };
 
     //Input for string search tests.
-    private static final String[][] TEST = NO_TEST;
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/C.html",
+        { "C.html",
             "<!-- ============ FIELD DETAIL =========== -->"}
     };
 
@@ -56,21 +52,7 @@
      */
     public static void main(String[] args) {
         TestHtmlComments tester = new TestHtmlComments();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, NO_TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHtmlDefinitionListTag/TestHtmlDefinitionListTag.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,18 +35,16 @@
 
 public class TestHtmlDefinitionListTag extends JavadocTester {
 
-    private static final String BUG_ID = "6786690-6820360";
-
     // Test common to all runs of javadoc. The class signature should print
     // properly enclosed definition list tags and the Annotation Type
     // Optional Element should print properly nested definition list tags
     // for default value.
     private static final String[][] TEST_ALL = {
-        {BUG_ID + "/pkg1/C1.html", "<pre>public class " +
+        { "pkg1/C1.html", "<pre>public class " +
                  "<span class=\"typeNameLabel\">C1</span>\n" +
                  "extends java.lang.Object\n" +
                  "implements java.io.Serializable</pre>"},
-        {BUG_ID + "/pkg1/C4.html", "<dl>\n" +
+        { "pkg1/C4.html", "<dl>\n" +
                  "<dt>Default:</dt>\n" +
                  "<dd>true</dd>\n" +
                  "</dl>"}};
@@ -55,11 +53,11 @@
     // serialized form should have properly nested definition list tags
     // enclosing comments, tags and deprecated information.
     private static final String[][] TEST_CMNT_DEPR = {
-        {BUG_ID + "/pkg1/package-summary.html", "<dl>\n" +
+        { "pkg1/package-summary.html", "<dl>\n" +
                  "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
                  "<dd>JDK1.0</dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/pkg1/C1.html", "<dl>\n" +
+        { "pkg1/C1.html", "<dl>\n" +
         "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
                  "<dd>JDK1.0</dd>\n" +
                  "<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
@@ -68,7 +66,7 @@
                  "<a href=\"../serialized-form.html#pkg1.C1\">" +
                  "Serialized Form</a></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/pkg1/C1.html", "<dl>\n" +
+        { "pkg1/C1.html", "<dl>\n" +
         "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
                  "<dd>1.4</dd>\n" +
                  "<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
@@ -76,7 +74,7 @@
                  "<a href=\"../pkg1/C1.html#setUndecorated-boolean-\">" +
                  "<code>setUndecorated(boolean)</code></a></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/pkg1/C1.html", "<dl>\n" +
+        { "pkg1/C1.html", "<dl>\n" +
                  "<dt><span class=\"paramLabel\">Parameters:</span></dt>\n" +
                  "<dd><code>title" +
                  "</code> - the title</dd>\n" +
@@ -89,7 +87,7 @@
                  "device</dd>\n" +
                  "<dd><code>HeadlessException</code></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/pkg1/C1.html", "<dl>\n" +
+        { "pkg1/C1.html", "<dl>\n" +
         "<dt><span class=\"paramLabel\">Parameters:</span></dt>\n" +
         "<dd><code>undecorated" +
                  "</code> - <code>true</code> if no decorations are\n" +
@@ -104,7 +102,7 @@
                  "<a href=\"../pkg1/C1.html#readObject--\"><code>readObject()" +
                  "</code></a></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/pkg1/C1.html", "<dl>\n" +
+        { "pkg1/C1.html", "<dl>\n" +
         "<dt><span class=\"throwsLabel\">Throws:</span></dt>\n" +
                  "<dd><code>java.io.IOException</code></dd>\n" +
                  "<dt><span class=\"seeLabel\">See Also:" +
@@ -112,7 +110,7 @@
                  "<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">" +
                  "<code>setUndecorated(boolean)</code></a></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/pkg1/C2.html", "<dl>\n" +
+        { "pkg1/C2.html", "<dl>\n" +
         "<dt><span class=\"paramLabel\">Parameters:" +
                  "</span></dt>\n" +
                  "<dd><code>set</code> - boolean</dd>\n" +
@@ -120,7 +118,7 @@
                  "Since:</span></dt>\n" +
                  "<dd>1.4</dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/serialized-form.html", "<dl>\n" +
+        { "serialized-form.html", "<dl>\n" +
         "<dt><span class=\"throwsLabel\">Throws:</span>" +
                  "</dt>\n" +
                  "<dd><code>" +
@@ -130,7 +128,7 @@
                  "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
                  "<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
                  "<span class=\"deprecatedLabel\">Deprecated.</span>" +
                  "&nbsp;<span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
                  " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
@@ -146,7 +144,7 @@
                  "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
                  "<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
                  "<span class=\"deprecatedLabel\">Deprecated.</span>" +
                  "&nbsp;<span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
                  " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
@@ -159,7 +157,7 @@
                  "IOException</code></code></dd>\n" +
                  "<dd><code>java.io.IOException</code></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
                  "<span class=\"deprecatedLabel\">Deprecated.</span>" +
                  "&nbsp;</div>\n" +
                  "<div class=\"block\">The name for this class.</div>"}};
@@ -170,11 +168,11 @@
     // should display properly nested definition list tags for comments, tags
     // and deprecated information.
     private static final String[][] TEST_NODEPR = {
-        {BUG_ID + "/pkg1/package-summary.html", "<dl>\n" +
+        { "pkg1/package-summary.html", "<dl>\n" +
                  "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
                  "<dd>JDK1.0</dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/pkg1/C1.html", "<dl>\n" +
+        { "pkg1/C1.html", "<dl>\n" +
         "<dt><span class=\"simpleTagLabel\">Since:</span>" +
                  "</dt>\n" +
                  "<dd>JDK1.0</dd>\n" +
@@ -185,7 +183,7 @@
                  "<a href=\"../serialized-form.html#pkg1.C1\">" +
                  "Serialized Form</a></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/pkg1/C1.html", "<dl>\n" +
+        { "pkg1/C1.html", "<dl>\n" +
         "<dt><span class=\"paramLabel\">Parameters:" +
                  "</span></dt>\n" +
                  "<dd><code>title</code> - the title</dd>\n" +
@@ -200,7 +198,7 @@
                  "<dd><code>" +
                  "HeadlessException</code></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/pkg1/C1.html", "<dl>\n" +
+        { "pkg1/C1.html", "<dl>\n" +
         "<dt><span class=\"paramLabel\">Parameters:" +
                  "</span></dt>\n" +
                  "<dd><code>undecorated</code> - <code>true</code>" +
@@ -214,7 +212,7 @@
                  "<dd><a href=\"../pkg1/C1.html#readObject--\">" +
                  "<code>readObject()</code></a></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/pkg1/C1.html", "<dl>\n" +
+        { "pkg1/C1.html", "<dl>\n" +
         "<dt><span class=\"throwsLabel\">Throws:</span>" +
                  "</dt>\n" +
                  "<dd><code>java.io.IOException</code></dd>\n" +
@@ -223,7 +221,7 @@
                  "<dd><a href=\"../pkg1/C1.html#setUndecorated-boolean-\">" +
                  "<code>setUndecorated(boolean)</code></a></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/serialized-form.html", "<dl>\n" +
+        { "serialized-form.html", "<dl>\n" +
         "<dt><span class=\"throwsLabel\">Throws:</span>" +
                  "</dt>\n" +
                  "<dd><code>" +
@@ -233,7 +231,7 @@
                  "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
                  "<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
                  "<span class=\"deprecatedLabel\">Deprecated.</span>" +
                  "&nbsp;<span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
                  " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
@@ -249,7 +247,7 @@
                  "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
                  "<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
                  "<span class=\"deprecatedLabel\">Deprecated.</span>" +
                  "&nbsp;<span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
                  " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
@@ -262,7 +260,7 @@
                  "IOException</code></code></dd>\n" +
                  "<dd><code>java.io.IOException</code></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
                  "<span class=\"deprecatedLabel\">Deprecated.</span>" +
                  "&nbsp;</div>\n" +
                  "<div class=\"block\">" +
@@ -271,25 +269,25 @@
     // Test with -nocomment and -nodeprecated options. The ClassDocs whould
     // not display definition lists for any member details.
     private static final String[][] TEST_NOCMNT_NODEPR = {
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
                  "<pre>public&nbsp;void&nbsp;readObject()\n" +
                  "                throws java.io.IOException</pre>\n" +
                  "</li>"},
-        {BUG_ID + "/pkg1/C2.html", "<pre>public&nbsp;C2()</pre>\n" +
+        { "pkg1/C2.html", "<pre>public&nbsp;C2()</pre>\n" +
                  "</li>"},
-        {BUG_ID + "/pkg1/C1.ModalExclusionType.html", "<pre>public " +
+        { "pkg1/C1.ModalExclusionType.html", "<pre>public " +
                  "static final&nbsp;<a href=\"../pkg1/C1.ModalExclusionType.html\" " +
                  "title=\"enum in pkg1\">C1.ModalExclusionType</a> " +
                  "APPLICATION_EXCLUDE</pre>\n" +
                  "</li>"},
-        {BUG_ID + "/serialized-form.html", "<pre>boolean " +
+        { "serialized-form.html", "<pre>boolean " +
                  "undecorated</pre>\n" +
                  "<div class=\"block\"><span class=\"deprecatedLabel\">" +
                  "Deprecated.</span>&nbsp;<span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
                  " <a href=\"pkg1/C1.html#setUndecorated-boolean-\"><code>" +
                  "setUndecorated(boolean)</code></a>.</span></div>\n" +
                  "</li>"},
-        {BUG_ID + "/serialized-form.html", "<span class=\"deprecatedLabel\">" +
+        { "serialized-form.html", "<span class=\"deprecatedLabel\">" +
                  "Deprecated.</span>&nbsp;<span class=\"deprecationComment\">As of JDK version" +
                  " 1.5, replaced by\n" +
                  " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
@@ -299,54 +297,54 @@
     // Test for valid HTML generation which should not comprise of empty
     // definition list tags.
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg1/package-summary.html", "<dl></dl>"},
-        {BUG_ID + "/pkg1/package-summary.html", "<dl>\n" +
+        { "pkg1/package-summary.html", "<dl></dl>"},
+        { "pkg1/package-summary.html", "<dl>\n" +
         "</dl>"},
-        {BUG_ID + "/pkg1/C1.html", "<dl></dl>"},
-        {BUG_ID + "/pkg1/C1.html", "<dl>\n" +
+        { "pkg1/C1.html", "<dl></dl>"},
+        { "pkg1/C1.html", "<dl>\n" +
         "</dl>"},
-        {BUG_ID + "/pkg1/C1.ModalExclusionType.html", "<dl></dl>"},
-        {BUG_ID + "/pkg1/C1.ModalExclusionType.html", "<dl>\n" +
+        { "pkg1/C1.ModalExclusionType.html", "<dl></dl>"},
+        { "pkg1/C1.ModalExclusionType.html", "<dl>\n" +
         "</dl>"},
-        {BUG_ID + "/pkg1/C2.html", "<dl></dl>"},
-        {BUG_ID + "/pkg1/C2.html", "<dl>\n" +
+        { "pkg1/C2.html", "<dl></dl>"},
+        { "pkg1/C2.html", "<dl>\n" +
         "</dl>"},
-        {BUG_ID + "/pkg1/C2.ModalType.html", "<dl></dl>"},
-        {BUG_ID + "/pkg1/C2.ModalType.html", "<dl>\n" +
+        { "pkg1/C2.ModalType.html", "<dl></dl>"},
+        { "pkg1/C2.ModalType.html", "<dl>\n" +
         "</dl>"},
-        {BUG_ID + "/pkg1/C3.html", "<dl></dl>"},
-        {BUG_ID + "/pkg1/C3.html", "<dl>\n" +
+        { "pkg1/C3.html", "<dl></dl>"},
+        { "pkg1/C3.html", "<dl>\n" +
         "</dl>"},
-        {BUG_ID + "/pkg1/C4.html", "<dl></dl>"},
-        {BUG_ID + "/pkg1/C4.html", "<dl>\n" +
+        { "pkg1/C4.html", "<dl></dl>"},
+        { "pkg1/C4.html", "<dl>\n" +
         "</dl>"},
-        {BUG_ID + "/pkg1/C5.html", "<dl></dl>"},
-        {BUG_ID + "/pkg1/C5.html", "<dl>\n" +
+        { "pkg1/C5.html", "<dl></dl>"},
+        { "pkg1/C5.html", "<dl>\n" +
         "</dl>"},
-        {BUG_ID + "/overview-tree.html", "<dl></dl>"},
-        {BUG_ID + "/overview-tree.html", "<dl>\n" +
+        { "overview-tree.html", "<dl></dl>"},
+        { "overview-tree.html", "<dl>\n" +
         "</dl>"},
-        {BUG_ID + "/serialized-form.html", "<dl></dl>"},
-        {BUG_ID + "/serialized-form.html", "<dl>\n" +
+        { "serialized-form.html", "<dl></dl>"},
+        { "serialized-form.html", "<dl>\n" +
         "</dl>"}};
 
     private static final String[] ARGS1 =
         new String[] {
-            "-Xdoclint:none", "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1"};
+            "-Xdoclint:none", "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"};
 
     private static final String[] ARGS2 =
         new String[] {
-            "-Xdoclint:none", "-d", BUG_ID, "-nocomment", "-sourcepath",
+            "-Xdoclint:none", "-d", OUTPUT_DIR, "-nocomment", "-sourcepath",
             SRC_DIR, "pkg1"};
 
     private static final String[] ARGS3 =
         new String[] {
-            "-Xdoclint:none", "-d", BUG_ID, "-nodeprecated", "-sourcepath",
+            "-Xdoclint:none", "-d", OUTPUT_DIR, "-nodeprecated", "-sourcepath",
             SRC_DIR, "pkg1"};
 
     private static final String[] ARGS4 =
         new String[] {
-            "-Xdoclint:none", "-d", BUG_ID, "-nocomment", "-nodeprecated",
+            "-Xdoclint:none", "-d", OUTPUT_DIR, "-nocomment", "-nodeprecated",
             "-sourcepath", SRC_DIR, "pkg1"};
 
     /**
@@ -355,28 +353,14 @@
      */
     public static void main(String[] args) {
         TestHtmlDefinitionListTag tester = new TestHtmlDefinitionListTag();
-        run(tester, ARGS1, TEST_ALL, NEGATED_TEST);
-        run(tester, ARGS1, TEST_CMNT_DEPR, NEGATED_TEST);
-        run(tester, ARGS2, TEST_ALL, NEGATED_TEST);
-        run(tester, ARGS2, NO_TEST, TEST_CMNT_DEPR);
-        run(tester, ARGS3, TEST_ALL, NEGATED_TEST);
-        run(tester, ARGS3, TEST_NODEPR, TEST_NOCMNT_NODEPR);
-        run(tester, ARGS4, TEST_ALL, NEGATED_TEST);
-        run(tester, ARGS4, TEST_NOCMNT_NODEPR, TEST_CMNT_DEPR);
+        tester.run(ARGS1, TEST_ALL, NEGATED_TEST);
+        tester.run(ARGS1, TEST_CMNT_DEPR, NEGATED_TEST);
+        tester.run(ARGS2, TEST_ALL, NEGATED_TEST);
+        tester.run(ARGS2, NO_TEST, TEST_CMNT_DEPR);
+        tester.run(ARGS3, TEST_ALL, NEGATED_TEST);
+        tester.run(ARGS3, TEST_NODEPR, TEST_NOCMNT_NODEPR);
+        tester.run(ARGS4, TEST_ALL, NEGATED_TEST);
+        tester.run(ARGS4, TEST_NOCMNT_NODEPR, TEST_CMNT_DEPR);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHtmlStrongTag/TestHtmlStrongTag.java	Thu Apr 24 16:04:44 2014 -0700
@@ -36,28 +36,27 @@
 
 public class TestHtmlStrongTag extends JavadocTester {
 
-    private static final String BUG_ID = "6786028";
     private static final String[][] TEST1 = {
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "<span class=\"seeLabel\">See Also:</span>"}};
     private static final String[][] NEGATED_TEST1 = {
-        {BUG_ID + "/pkg1/C1.html", "<STRONG>Method Summary</STRONG>"},
-        {BUG_ID + "/pkg1/C1.html", "<B>"},
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg1/C1.html", "<STRONG>Method Summary</STRONG>"},
+        { "pkg1/C1.html", "<B>"},
+        { "pkg1/package-summary.html",
             "<STRONG>Class Summary</STRONG>"}};
     private static final String[][] TEST2 = {
-        {BUG_ID + "/pkg2/C2.html", "<B>Comments:</B>"}};
+        { "pkg2/C2.html", "<B>Comments:</B>"}};
     private static final String[][] NEGATED_TEST2 = {
-        {BUG_ID + "/pkg2/C2.html", "<STRONG>Method Summary</STRONG>"},
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg2/C2.html", "<STRONG>Method Summary</STRONG>"},
+        { "pkg1/package-summary.html",
             "<STRONG>Class Summary</STRONG>"}};
 
     private static final String[] ARGS1 =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1"};
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"};
     private static final String[] ARGS2 =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg2"};
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg2"};
 
     /**
      * The entry point of the test.
@@ -65,22 +64,8 @@
      */
     public static void main(String[] args) {
         TestHtmlStrongTag tester = new TestHtmlStrongTag();
-        run(tester, ARGS1, TEST1, NEGATED_TEST1);
-        run(tester, ARGS2, TEST2, NEGATED_TEST2);
+        tester.run(ARGS1, TEST1, NEGATED_TEST1);
+        tester.run(ARGS2, TEST2, NEGATED_TEST2);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testHtmlTableStyles/TestHtmlTableStyles.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHtmlTableStyles/TestHtmlTableStyles.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,47 +33,45 @@
 
 public class TestHtmlTableStyles extends JavadocTester {
 
-    private static final String BUG_ID = "8008164";
-
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg1/TestTable.html",
+        { "pkg1/TestTable.html",
             "<table border cellpadding=3 cellspacing=1>"
         },
-        {BUG_ID + "/pkg1/TestTable.html",
+        { "pkg1/TestTable.html",
             "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Field Summary table, listing fields, " +
             "and an explanation\">"
         },
-        {BUG_ID + "/pkg1/TestTable.html",
+        { "pkg1/TestTable.html",
             "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Constructor Summary table, listing " +
             "constructors, and an explanation\">"
         },
-        {BUG_ID + "/pkg1/TestTable.html",
+        { "pkg1/TestTable.html",
             "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Method Summary table, listing methods, " +
             "and an explanation\">"
         },
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg1/package-summary.html",
             "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Class Summary table, listing classes, " +
             "and an explanation\">"
         },
-        {BUG_ID + "/pkg1/class-use/TestTable.html",
+        { "pkg1/class-use/TestTable.html",
             "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Use table, listing fields, and an explanation\">"
         },
-        {BUG_ID + "/overview-summary.html",
+        { "overview-summary.html",
             "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Packages table, listing packages, and an explanation\">"
         },
-        {BUG_ID + "/deprecated-list.html",
+        { "deprecated-list.html",
             "<table class=\"deprecatedSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Deprecated Methods table, listing " +
             "deprecated methods, and an explanation\">"
         },
-        {BUG_ID + "/constant-values.html",
+        { "constant-values.html",
             "<table class=\"constantsSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Constant Field Values table, listing " +
             "constant fields, and values\">"
@@ -81,7 +79,7 @@
     };
 
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
     };
 
     /**
@@ -90,21 +88,7 @@
      */
     public static void main(String[] args) throws Exception {
         TestHtmlTableStyles tester = new TestHtmlTableStyles();
-        run(tester, ARGS, TEST, NO_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,12 +34,9 @@
 
 public class TestHtmlTableTags extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "6786688";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
     };
 
     //Input for string tests for HTML table tags.
@@ -49,127 +46,127 @@
          */
 
         //Package summary
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg1/package-summary.html",
             "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\"" +
             " cellspacing=\"0\" summary=\"Class Summary table, " +
             "listing classes, and an explanation\">"
         },
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg1/package-summary.html",
             "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\"" +
             " cellspacing=\"0\" summary=\"Interface Summary table, " +
             "listing interfaces, and an explanation\">"
         },
-        {BUG_ID + "/pkg2/package-summary.html",
+        { "pkg2/package-summary.html",
             "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\"" +
             " cellspacing=\"0\" summary=\"Enum Summary table, " +
             "listing enums, and an explanation\">"
         },
-        {BUG_ID + "/pkg2/package-summary.html",
+        { "pkg2/package-summary.html",
             "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\"" +
             " cellspacing=\"0\" summary=\"Annotation Types Summary table, " +
             "listing annotation types, and an explanation\">"
         },
         // Class documentation
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Field Summary table, listing fields, " +
             "and an explanation\">"
         },
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Method Summary table, listing methods, " +
             "and an explanation\">"
         },
-        {BUG_ID + "/pkg2/C2.html",
+        { "pkg2/C2.html",
             "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Nested Class Summary table, listing " +
             "nested classes, and an explanation\">"
         },
-        {BUG_ID + "/pkg2/C2.html",
+        { "pkg2/C2.html",
             "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Constructor Summary table, listing " +
             "constructors, and an explanation\">"
         },
-        {BUG_ID + "/pkg2/C2.ModalExclusionType.html",
+        { "pkg2/C2.ModalExclusionType.html",
             "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Enum Constant Summary table, listing " +
             "enum constants, and an explanation\">"
         },
-        {BUG_ID + "/pkg2/C3.html",
+        { "pkg2/C3.html",
             "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Required Element Summary table, " +
             "listing required elements, and an explanation\">"
         },
-        {BUG_ID + "/pkg2/C4.html",
+        { "pkg2/C4.html",
             "<table class=\"memberSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Optional Element Summary table, " +
             "listing optional elements, and an explanation\">"
         },
         // Class use documentation
-        {BUG_ID + "/pkg1/class-use/I1.html",
+        { "pkg1/class-use/I1.html",
             "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
             "table, listing packages, and an explanation\">"
         },
-        {BUG_ID + "/pkg1/class-use/C1.html",
+        { "pkg1/class-use/C1.html",
             "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
             "table, listing fields, and an explanation\">"
         },
-        {BUG_ID + "/pkg1/class-use/C1.html",
+        { "pkg1/class-use/C1.html",
             "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
             "table, listing methods, and an explanation\">"
         },
-        {BUG_ID + "/pkg2/class-use/C2.html",
+        { "pkg2/class-use/C2.html",
             "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
             "table, listing fields, and an explanation\">"
         },
-        {BUG_ID + "/pkg2/class-use/C2.html",
+        { "pkg2/class-use/C2.html",
             "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
             "table, listing methods, and an explanation\">"
         },
-        {BUG_ID + "/pkg2/class-use/C2.ModalExclusionType.html",
+        { "pkg2/class-use/C2.ModalExclusionType.html",
             "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
             "table, listing packages, and an explanation\">"
         },
-        {BUG_ID + "/pkg2/class-use/C2.ModalExclusionType.html",
+        { "pkg2/class-use/C2.ModalExclusionType.html",
             "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
             "table, listing methods, and an explanation\">"
         },
         // Package use documentation
-        {BUG_ID + "/pkg1/package-use.html",
+        { "pkg1/package-use.html",
             "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
             "table, listing packages, and an explanation\">"
         },
-        {BUG_ID + "/pkg1/package-use.html",
+        { "pkg1/package-use.html",
             "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
             "table, listing classes, and an explanation\">"
         },
-        {BUG_ID + "/pkg2/package-use.html",
+        { "pkg2/package-use.html",
             "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
             "table, listing packages, and an explanation\">"
         },
-        {BUG_ID + "/pkg2/package-use.html",
+        { "pkg2/package-use.html",
             "<table class=\"useSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" summary=\"Use " +
             "table, listing classes, and an explanation\">"
         },
         // Deprecated
-        {BUG_ID + "/deprecated-list.html",
+        { "deprecated-list.html",
             "<table class=\"deprecatedSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" " +
             "summary=\"Deprecated Fields table, listing deprecated fields, " +
             "and an explanation\">"
         },
-        {BUG_ID + "/deprecated-list.html",
+        { "deprecated-list.html",
             "<table class=\"deprecatedSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" " +
             "summary=\"Deprecated Methods table, listing deprecated methods, " +
             "and an explanation\">"
         },
         // Constant values
-        {BUG_ID + "/constant-values.html",
+        { "constant-values.html",
             "<table class=\"constantsSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" " +
             "summary=\"Constant Field Values table, listing " +
             "constant fields, and values\">"
         },
         // Overview Summary
-        {BUG_ID + "/overview-summary.html",
+        { "overview-summary.html",
             "<table class=\"overviewSummary\" border=\"0\" cellpadding=\"3\" " +
             "cellspacing=\"0\" summary=\"Packages table, " +
             "listing packages, and an explanation\">"
@@ -180,27 +177,27 @@
          */
 
         //Package summary
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg1/package-summary.html",
             "<caption><span>Class Summary</span><span class=\"tabEnd\">" +
             "&nbsp;</span></caption>"
         },
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg1/package-summary.html",
             "<caption><span>Interface Summary</span><span class=\"tabEnd\">" +
             "&nbsp;</span></caption>"
         },
-        {BUG_ID + "/pkg2/package-summary.html",
+        { "pkg2/package-summary.html",
             "<caption><span>Enum Summary</span><span class=\"tabEnd\">" +
             "&nbsp;</span></caption>"
         },
-        {BUG_ID + "/pkg2/package-summary.html",
+        { "pkg2/package-summary.html",
             "<caption><span>Annotation Types Summary</span><span class=\"tabEnd\">" +
             "&nbsp;</span></caption>"
         },
         // Class documentation
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "<caption><span>Fields</span><span class=\"tabEnd\">&nbsp;</span></caption>"
         },
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All " +
             "Methods</span><span class=\"tabEnd\">&nbsp;</span></span>" +
             "<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">" +
@@ -211,94 +208,94 @@
             "Deprecated Methods</a></span><span class=\"tabEnd\">&nbsp;</span></span>" +
             "</caption>"
         },
-        {BUG_ID + "/pkg2/C2.html",
+        { "pkg2/C2.html",
             "<caption><span>Nested Classes</span><span class=\"tabEnd\">&nbsp;</span></caption>"
         },
-        {BUG_ID + "/pkg2/C2.html",
+        { "pkg2/C2.html",
             "<caption><span>Constructors</span><span class=\"tabEnd\">&nbsp;</span></caption>"
         },
-        {BUG_ID + "/pkg2/C2.ModalExclusionType.html",
+        { "pkg2/C2.ModalExclusionType.html",
             "<caption><span>Enum Constants</span><span class=\"tabEnd\">&nbsp;</span></caption>"
         },
-        {BUG_ID + "/pkg2/C3.html",
+        { "pkg2/C3.html",
             "<caption><span>Required Elements</span><span class=\"tabEnd\">&nbsp;" +
             "</span></caption>"
         },
-        {BUG_ID + "/pkg2/C4.html",
+        { "pkg2/C4.html",
             "<caption><span>Optional Elements</span><span class=\"tabEnd\">&nbsp;" +
             "</span></caption>"
         },
         // Class use documentation
-        {BUG_ID + "/pkg1/class-use/I1.html",
+        { "pkg1/class-use/I1.html",
             "<caption><span>Packages that use <a href=\"../../pkg1/I1.html\" " +
             "title=\"interface in pkg1\">I1</a></span><span class=\"tabEnd\">" +
             "&nbsp;</span></caption>"
         },
-        {BUG_ID + "/pkg1/class-use/C1.html",
+        { "pkg1/class-use/C1.html",
             "<caption><span>Fields in <a href=\"../../pkg2/package-summary.html\">" +
             "pkg2</a> declared as <a href=\"../../pkg1/C1.html\" " +
             "title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\">&nbsp;" +
             "</span></caption>"
         },
-        {BUG_ID + "/pkg1/class-use/C1.html",
+        { "pkg1/class-use/C1.html",
             "<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">" +
             "pkg2</a> that return <a href=\"../../pkg1/C1.html\" " +
             "title=\"class in pkg1\">C1</a></span><span class=\"tabEnd\">" +
             "&nbsp;</span></caption>"
         },
-        {BUG_ID + "/pkg2/class-use/C2.html",
+        { "pkg2/class-use/C2.html",
             "<caption><span>Fields in <a href=\"../../pkg1/package-summary.html\">" +
             "pkg1</a> declared as <a href=\"../../pkg2/C2.html\" " +
             "title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">" +
             "&nbsp;</span></caption>"
         },
-        {BUG_ID + "/pkg2/class-use/C2.html",
+        { "pkg2/class-use/C2.html",
             "<caption><span>Methods in <a href=\"../../pkg1/package-summary.html\">" +
             "pkg1</a> that return <a href=\"../../pkg2/C2.html\" " +
             "title=\"class in pkg2\">C2</a></span><span class=\"tabEnd\">" +
             "&nbsp;</span></caption>"
         },
-        {BUG_ID + "/pkg2/class-use/C2.ModalExclusionType.html",
+        { "pkg2/class-use/C2.ModalExclusionType.html",
             "<caption><span>Methods in <a href=\"../../pkg2/package-summary.html\">" +
             "pkg2</a> that return <a href=\"../../pkg2/C2.ModalExclusionType.html\" " +
             "title=\"enum in pkg2\">C2.ModalExclusionType</a></span>" +
             "<span class=\"tabEnd\">&nbsp;</span></caption>"
         },
         // Package use documentation
-        {BUG_ID + "/pkg1/package-use.html",
+        { "pkg1/package-use.html",
             "<caption><span>Packages that use <a href=\"../pkg1/package-summary.html\">" +
             "pkg1</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
         },
-        {BUG_ID + "/pkg1/package-use.html",
+        { "pkg1/package-use.html",
             "<caption><span>Classes in <a href=\"../pkg1/package-summary.html\">" +
             "pkg1</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>" +
             "</span><span class=\"tabEnd\">&nbsp;</span></caption>"
         },
-        {BUG_ID + "/pkg2/package-use.html",
+        { "pkg2/package-use.html",
             "<caption><span>Packages that use <a href=\"../pkg2/package-summary.html\">" +
             "pkg2</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
         },
-        {BUG_ID + "/pkg2/package-use.html",
+        { "pkg2/package-use.html",
             "<caption><span>Classes in <a href=\"../pkg2/package-summary.html\">" +
             "pkg2</a> used by <a href=\"../pkg1/package-summary.html\">pkg1</a>" +
             "</span><span class=\"tabEnd\">&nbsp;</span></caption>"
         },
         // Deprecated
-        {BUG_ID + "/deprecated-list.html",
+        { "deprecated-list.html",
             "<caption><span>Deprecated Fields</span><span class=\"tabEnd\">" +
             "&nbsp;</span></caption>"
         },
-        {BUG_ID + "/deprecated-list.html",
+        { "deprecated-list.html",
             "<caption><span>Deprecated Methods</span><span class=\"tabEnd\">" +
             "&nbsp;</span></caption>"
         },
         // Constant values
-        {BUG_ID + "/constant-values.html",
+        { "constant-values.html",
             "<caption><span>pkg1.<a href=\"pkg1/C1.html\" title=\"class in pkg1\">" +
             "C1</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
         },
         // Overview Summary
-        {BUG_ID + "/overview-summary.html",
+        { "overview-summary.html",
             "<caption><span>Packages</span><span class=\"tabEnd\">&nbsp;</span></caption>"
         },
 
@@ -307,110 +304,110 @@
          */
 
         //Package summary
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg1/package-summary.html",
             "<th class=\"colFirst\" scope=\"col\">" +
             "Class</th>\n" +
             "<th class=\"colLast\" scope=\"col\"" +
             ">Description</th>"
         },
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg1/package-summary.html",
             "<th class=\"colFirst\" scope=\"col\">" +
             "Interface</th>\n" +
             "<th class=\"colLast\" scope=\"col\"" +
             ">Description</th>"
         },
-        {BUG_ID + "/pkg2/package-summary.html",
+        { "pkg2/package-summary.html",
             "<th class=\"colFirst\" scope=\"col\">" +
             "Enum</th>\n" +
             "<th class=\"colLast\" scope=\"col\"" +
             ">Description</th>"
         },
-        {BUG_ID + "/pkg2/package-summary.html",
+        { "pkg2/package-summary.html",
             "<th class=\"colFirst\" scope=\"col\">" +
             "Annotation Type</th>\n" +
             "<th class=\"colLast\"" +
             " scope=\"col\">Description</th>"
         },
         // Class documentation
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
         },
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
         },
-        {BUG_ID + "/pkg2/C2.html",
+        { "pkg2/C2.html",
             "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Class and Description</th>"
         },
-        {BUG_ID + "/pkg2/C2.html",
+        { "pkg2/C2.html",
             "<th class=\"colOne\" scope=\"col\">Constructor and Description</th>"
         },
-        {BUG_ID + "/pkg2/C2.ModalExclusionType.html",
+        { "pkg2/C2.ModalExclusionType.html",
             "<th class=\"colOne\" scope=\"col\">Enum Constant and Description</th>"
         },
-        {BUG_ID + "/pkg2/C3.html",
+        { "pkg2/C3.html",
             "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Required Element and Description</th>"
         },
-        {BUG_ID + "/pkg2/C4.html",
+        { "pkg2/C4.html",
             "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Optional Element and Description</th>"
         },
         // Class use documentation
-        {BUG_ID + "/pkg1/class-use/I1.html",
+        { "pkg1/class-use/I1.html",
             "<th class=\"colFirst\" scope=\"col\">Package</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Description</th>"
         },
-        {BUG_ID + "/pkg1/class-use/C1.html",
+        { "pkg1/class-use/C1.html",
             "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
         },
-        {BUG_ID + "/pkg1/class-use/C1.html",
+        { "pkg1/class-use/C1.html",
             "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
         },
-        {BUG_ID + "/pkg2/class-use/C2.html",
+        { "pkg2/class-use/C2.html",
             "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Field and Description</th>"
         },
-        {BUG_ID + "/pkg2/class-use/C2.html",
+        { "pkg2/class-use/C2.html",
             "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
         },
-        {BUG_ID + "/pkg2/class-use/C2.ModalExclusionType.html",
+        { "pkg2/class-use/C2.ModalExclusionType.html",
             "<th class=\"colFirst\" scope=\"col\">Package</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Description</th>"
         },
-        {BUG_ID + "/pkg2/class-use/C2.ModalExclusionType.html",
+        { "pkg2/class-use/C2.ModalExclusionType.html",
             "<th class=\"colFirst\" scope=\"col\">Modifier and Type</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Method and Description</th>"
         },
         // Package use documentation
-        {BUG_ID + "/pkg1/package-use.html",
+        { "pkg1/package-use.html",
             "<th class=\"colFirst\" scope=\"col\">Package</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Description</th>"
         },
-        {BUG_ID + "/pkg1/package-use.html",
+        { "pkg1/package-use.html",
             "<th class=\"colOne\" scope=\"col\">Class and Description</th>"
         },
-        {BUG_ID + "/pkg2/package-use.html",
+        { "pkg2/package-use.html",
             "<th class=\"colFirst\" scope=\"col\">Package</th>\n" +
             "<th class=\"colLast\" scope=\"col\">Description</th>"
         },
-        {BUG_ID + "/pkg2/package-use.html",
+        { "pkg2/package-use.html",
             "<th class=\"colOne\" scope=\"col\">Class and Description</th>"
         },
         // Deprecated
-        {BUG_ID + "/deprecated-list.html",
+        { "deprecated-list.html",
             "<th class=\"colOne\" scope=\"col\">Field and Description</th>"
         },
-        {BUG_ID + "/deprecated-list.html",
+        { "deprecated-list.html",
             "<th class=\"colOne\" scope=\"col\">Method and Description</th>"
         },
         // Constant values
-        {BUG_ID + "/constant-values.html",
+        { "constant-values.html",
             "<th class=\"colFirst\" scope=\"col\">" +
             "Modifier and Type</th>\n" +
             "<th" +
@@ -418,14 +415,13 @@
             "<th class=\"colLast\" scope=\"col\">Value</th>"
         },
         // Overview Summary
-        {BUG_ID + "/overview-summary.html",
+        { "overview-summary.html",
             "<th class=\"colFirst\" scope=\"col\">" +
             "Package</th>\n" +
             "<th class=\"colLast\" scope=\"col\"" +
             ">Description</th>"
         }
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -433,21 +429,7 @@
      */
     public static void main(String[] args) {
         TestHtmlTableTags tester = new TestHtmlTableTags();
-        run(tester, ARGS, TABLE_TAGS_TEST, NEGATED_TEST);
+        tester.run(ARGS, TABLE_TAGS_TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testHtmlTag/TestHtmlTag.java	Thu Apr 24 16:04:44 2014 -0700
@@ -38,34 +38,33 @@
 
 public class TestHtmlTag extends JavadocTester {
 
-    private static final String BUG_ID = "6786682";
     private static final String[][] TEST1 = {
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "<html lang=\"" + Locale.getDefault().getLanguage() + "\">"},
-        {BUG_ID + "/pkg1/package-summary.html",
+        { "pkg1/package-summary.html",
             "<html lang=\"" + Locale.getDefault().getLanguage() + "\">"}};
     private static final String[][] NEGATED_TEST1 = {
-        {BUG_ID + "/pkg1/C1.html", "<html>"}};
+        { "pkg1/C1.html", "<html>"}};
     private static final String[][] TEST2 = {
-        {BUG_ID + "/pkg2/C2.html", "<html lang=\"ja\">"},
-        {BUG_ID + "/pkg2/package-summary.html", "<html lang=\"ja\">"}};
+        { "pkg2/C2.html", "<html lang=\"ja\">"},
+        { "pkg2/package-summary.html", "<html lang=\"ja\">"}};
     private static final String[][] NEGATED_TEST2 = {
-        {BUG_ID + "/pkg2/C2.html", "<html>"}};
+        { "pkg2/C2.html", "<html>"}};
     private static final String[][] TEST3 = {
-        {BUG_ID + "/pkg1/C1.html", "<html lang=\"en\">"},
-        {BUG_ID + "/pkg1/package-summary.html", "<html lang=\"en\">"}};
+        { "pkg1/C1.html", "<html lang=\"en\">"},
+        { "pkg1/package-summary.html", "<html lang=\"en\">"}};
     private static final String[][] NEGATED_TEST3 = {
-        {BUG_ID + "/pkg1/C1.html", "<html>"}};
+        { "pkg1/C1.html", "<html>"}};
 
     private static final String[] ARGS1 =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1"};
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"};
     private static final String[] ARGS2 =
         new String[] {
-            "-locale", "ja", "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg2"};
+            "-locale", "ja", "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg2"};
     private static final String[] ARGS3 =
         new String[] {
-            "-locale", "en_US", "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1"};
+            "-locale", "en_US", "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"};
 
     /**
      * The entry point of the test.
@@ -73,23 +72,9 @@
      */
     public static void main(String[] args) {
         TestHtmlTag tester = new TestHtmlTag();
-        run(tester, ARGS1, TEST1, NEGATED_TEST1);
-        run(tester, ARGS2, TEST2, NEGATED_TEST2);
-        run(tester, ARGS3, TEST3, NEGATED_TEST3);
+        tester.run(ARGS1, TEST1, NEGATED_TEST1);
+        tester.run(ARGS2, TEST2, NEGATED_TEST2);
+        tester.run(ARGS3, TEST3, NEGATED_TEST3);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testIndentation/TestIndentation.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testIndentation/TestIndentation.java	Thu Apr 24 16:04:44 2014 -0700
@@ -32,26 +32,22 @@
 
 public class TestIndentation extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "8011288";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "p"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "p"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        { BUG_ID + "/p/Indent.html",
+        { "p/Indent.html",
           "<pre>public&nbsp;&lt;T&gt;&nbsp;void&nbsp;m(T&nbsp;t1," },
-        { BUG_ID + "/p/Indent.html",
+        { "p/Indent.html",
           "\n" +
           "                  T&nbsp;t2)" },
-        { BUG_ID + "/p/Indent.html",
+        { "p/Indent.html",
           "\n" +
           "           throws java.lang.Exception" }
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -59,21 +55,7 @@
      */
     public static void main(String[] args) {
         TestIndentation tester = new TestIndentation();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testIndex/TestIndex.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testIndex/TestIndex.java	Thu Apr 24 16:04:44 2014 -0700
@@ -36,40 +36,37 @@
 
 public class TestIndex extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4852280-4517115-4973608-4994589";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg", SRC_DIR + "/NoPackage.java"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg", SRC_DIR + "/NoPackage.java"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
         //Make sure the horizontal scroll bar does not appear in class frame.
-        {BUG_ID + "/index.html",
+        { "index.html",
             "<frame src=\"overview-summary.html\" name=\"classFrame\" title=\"" +
             "Package, class and interface descriptions\" scrolling=\"yes\">"},
 
         //Test index-all.html
-        {BUG_ID + "/index-all.html",
+        { "index-all.html",
             "<a href=\"pkg/C.html\" title=\"class in pkg\"><span class=\"typeNameLink\">C</span></a>" +
             " - Class in <a href=\"pkg/package-summary.html\">pkg</a>"},
-        {BUG_ID + "/index-all.html",
+        { "index-all.html",
             "<a href=\"pkg/Interface.html\" title=\"interface in pkg\">" +
             "<span class=\"typeNameLink\">Interface</span></a> - Interface in " +
             "<a href=\"pkg/package-summary.html\">pkg</a>"},
-        {BUG_ID + "/index-all.html",
+        { "index-all.html",
             "<a href=\"pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
             "<span class=\"typeNameLink\">AnnotationType</span></a> - Annotation Type in " +
             "<a href=\"pkg/package-summary.html\">pkg</a>"},
-        {BUG_ID + "/index-all.html",
+        { "index-all.html",
             "<a href=\"pkg/Coin.html\" title=\"enum in pkg\">" +
             "<span class=\"typeNameLink\">Coin</span></a> - Enum in " +
             "<a href=\"pkg/package-summary.html\">pkg</a>"},
-        {BUG_ID + "/index-all.html",
+        { "index-all.html",
             "Class in <a href=\"package-summary.html\">&lt;Unnamed&gt;</a>"},
-        {BUG_ID + "/index-all.html",
+        { "index-all.html",
             "<dl>\n" +
             "<dt><span class=\"memberNameLink\"><a href=\"pkg/C.html#Java\">" +
             "Java</a></span> - Static variable in class pkg.<a href=\"pkg/C.html\" " +
@@ -81,7 +78,6 @@
             "<dd>&nbsp;</dd>\n" +
             "</dl>"},
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -89,21 +85,7 @@
      */
     public static void main(String[] args) {
         TestIndex tester = new TestIndex();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testInlineLinkLabel/TestInlineLinkLabel.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testInlineLinkLabel/TestInlineLinkLabel.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,20 +34,18 @@
 
 public class TestInlineLinkLabel extends JavadocTester {
 
-    private static final String BUG_ID = "4524136";
     private static final String[][] TEST = {
         //Search for the label to the package link.
-        {BUG_ID + "/pkg/C1.html" ,
+        { "pkg/C1.html" ,
             "<a href=\"../pkg/package-summary.html\"><code>Here is a link to a package</code></a>"},
 
         //Search for the label to the class link
-        {BUG_ID + "/pkg/C1.html" ,
+        { "pkg/C1.html" ,
             "<a href=\"../pkg/C2.html\" title=\"class in pkg\"><code>Here is a link to a class</code></a>"}
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"};
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"};
 
     /**
      * The entry point of the test.
@@ -55,21 +53,7 @@
      */
     public static void main(String[] args) {
         TestInlineLinkLabel tester = new TestInlineLinkLabel();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testInterface/TestInterface.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testInterface/TestInterface.java	Thu Apr 24 16:04:44 2014 -0700
@@ -37,24 +37,21 @@
 
 public class TestInterface extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4682448-4947464-5029946";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/Interface.html",
+        { "pkg/Interface.html",
             "<pre>int&nbsp;method()</pre>"},
-        {BUG_ID + "/pkg/Interface.html",
+        { "pkg/Interface.html",
             "<pre>static final&nbsp;int field</pre>"},
 
 
         // Make sure known implementing class list is correct and omits type parameters.
-        {BUG_ID + "/pkg/Interface.html",
+        { "pkg/Interface.html",
             "<dl>\n" +
             "<dt>All Known Implementing Classes:</dt>\n" +
             "<dd><a href=\"../pkg/Child.html\" title=\"class in pkg\">Child" +
@@ -63,7 +60,7 @@
             "</dl>"},
 
          // Make sure "All Implemented Interfaces": has substituted type parameters
-         {BUG_ID + "/pkg/Child.html",
+         { "pkg/Child.html",
             "<dl>\n" +
             "<dt>All Implemented Interfaces:</dt>\n" +
             "<dd><a href=\"../pkg/Interface.html\" title=\"interface in pkg\">" +
@@ -71,7 +68,7 @@
             "</dl>"
          },
          //Make sure Class Tree has substituted type parameters.
-         {BUG_ID + "/pkg/Child.html",
+         { "pkg/Child.html",
             "<ul class=\"inheritance\">\n" +
             "<li>java.lang.Object</li>\n" +
             "<li>\n" +
@@ -88,7 +85,7 @@
             "</ul>"
          },
          //Make sure "Direct Know Subclasses" omits type parameters
-        {BUG_ID + "/pkg/Parent.html",
+        { "pkg/Parent.html",
             "<dl>\n" +
             "<dt>Direct Known Subclasses:</dt>\n" +
             "<dd><a href=\"../pkg/Child.html\" title=\"class in pkg\">Child" +
@@ -96,7 +93,7 @@
             "</dl>"
         },
         //Make sure "Specified By" has substituted type parameters.
-        {BUG_ID + "/pkg/Child.html",
+        { "pkg/Child.html",
             "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n" +
             "<dd><code><a href=\"../pkg/Interface.html#method--\">method</a>" +
             "</code>&nbsp;in interface&nbsp;<code>" +
@@ -105,7 +102,7 @@
             "T</a>&gt;</code></dd>"
          },
         //Make sure "Overrides" has substituted type parameters.
-        {BUG_ID + "/pkg/Child.html",
+        { "pkg/Child.html",
             "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
             "<dd><code><a href=\"../pkg/Parent.html#method--\">method</a>" +
             "</code>&nbsp;in class&nbsp;<code><a href=\"../pkg/Parent.html\" " +
@@ -114,9 +111,9 @@
          },
     };
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg/Interface.html",
+        { "pkg/Interface.html",
             "public int&nbsp;method()"},
-        {BUG_ID + "/pkg/Interface.html",
+        { "pkg/Interface.html",
             "public static final&nbsp;int field"},
     };
 
@@ -126,21 +123,7 @@
      */
     public static void main(String[] args) {
         TestInterface tester = new TestInterface();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testJavaFX/TestJavaFX.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testJavaFX/TestJavaFX.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,58 +33,56 @@
 
 public class TestJavaFX extends JavadocTester {
 
-    private static final String BUG_ID = "7112427";
-
     private static final String[][] TEST =
         new String[][] {
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
                 "<dd><a href=\"C.html#getRate--\"><code>getRate()</code></a>, \n" +
                 "<a href=\"C.html#setRate-double-\"><code>setRate(double)</code></a></dd>"},
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "<pre>public final&nbsp;void&nbsp;setRate(double&nbsp;value)</pre>\n" +
                 "<div class=\"block\">Sets the value of the property rate.</div>\n" +
                 "<dl>\n" +
                 "<dt><span class=\"simpleTagLabel\">Property description:</span></dt>" },
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "<pre>public final&nbsp;double&nbsp;getRate()</pre>\n" +
                 "<div class=\"block\">Gets the value of the property rate.</div>\n" +
                 "<dl>\n" +
                 "<dt><span class=\"simpleTagLabel\">Property description:</span></dt>" },
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"C.html#rateProperty\">rate</a></span></code>\n" +
                 "<div class=\"block\">Defines the direction/speed at which the <code>Timeline</code> is expected to"},
 
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "<span class=\"simpleTagLabel\">Default value:</span>"},
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "<span class=\"simpleTagLabel\">Since:</span></dt>\n" +
                 "<dd>JavaFX 8.0</dd>" },
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "<p>Sets the value of the property <code>Property</code>"},
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "<p>Gets the value of the property <code>Property</code>"},
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "<span class=\"simpleTagLabel\">Property description:</span>"},
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"C.html#setTestMethodProperty--\">setTestMethodProperty</a></span>()</code>&nbsp;</td>" },
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "<h4>isPaused</h4>\n" +
                 "<pre>public final&nbsp;double&nbsp;isPaused()</pre>\n" +
                 "<div class=\"block\">Gets the value of the property paused.</div>" },
-            {"./" + BUG_ID + "/D.html",
+            { "D.html",
                 "<h3>Properties inherited from class&nbsp;<a href=\"C.html\" title=\"class in &lt;Unnamed&gt;\">C</a></h3>\n" +
                 "<code><a href=\"C.html#pausedProperty\">paused</a>, <a href=\"C.html#rateProperty\">rate</a></code></li>" },
         };
     private static final String[][] NO_TEST =
         new String[][] {
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "A()"},
         };
 
 
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "-javafx",
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-javafx",
         SRC_DIR + "/C.java", SRC_DIR + "/D.java"
     };
 
@@ -94,21 +92,7 @@
      */
     public static void main(String[] args) {
         TestJavaFX tester = new TestJavaFX();
-        run(tester, ARGS, TEST, NO_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testJavascript/TestJavascript.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testJavascript/TestJavascript.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,22 +34,19 @@
 
 public class TestJavascript extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4665566-4855876-8012375";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg", SRC_DIR +
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg", SRC_DIR +
         "/TestJavascript.java"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<a href=\"../index.html?pkg/C.html\" target=\"_top\">Frames</a>"},
-        {BUG_ID + "/TestJavascript.html",
+        { "TestJavascript.html",
             "<a href=\"index.html?TestJavascript.html\" target=\"_top\">Frames</a>"},
-        {BUG_ID + "/index.html",
+        { "index.html",
             "<script type=\"text/javascript\">\n" +
                         "    targetPage = \"\" + window.location.search;\n" +
             "    if (targetPage != \"\" && targetPage != \"undefined\")\n" +
@@ -104,7 +101,7 @@
             "</script>"},
 
         //Make sure title javascript only runs if is-external is not true
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "    try {\n" +
             "        if (location.href.indexOf('is-external=true') == -1) {\n" +
             "            parent.document.title=\"C\";\n" +
@@ -114,29 +111,13 @@
             "    }"},
     };
 
-    private static final String[][] NEGATED_TEST = NO_TEST;
-
     /**
      * The entry point of the test.
      * @param args the array of command line arguments.
      */
     public static void main(String[] args) {
         TestJavascript tester = new TestJavascript();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testLambdaFeature/TestLambdaFeature.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLambdaFeature/TestLambdaFeature.java	Thu Apr 24 16:04:44 2014 -0700
@@ -40,25 +40,22 @@
 
 public class TestLambdaFeature extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "8004893-8022738";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg", "pkg1"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg", "pkg1"
     };
 
     private static final String[] ARGS_1 = new String[] {
-        "-d", BUG_ID + "-2", "-sourcepath", SRC_DIR, "-source", "1.7", "pkg1"
+        "-d", OUTPUT_DIR + "-2", "-sourcepath", SRC_DIR, "-source", "1.7", "pkg1"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/A.html",
+        { "pkg/A.html",
             "<td class=\"colFirst\"><code>default void</code></td>"},
-        {BUG_ID + "/pkg/A.html",
+        { "pkg/A.html",
             "<pre>default&nbsp;void&nbsp;defaultMethod()</pre>"},
-        {BUG_ID + "/pkg/A.html",
+        { "pkg/A.html",
             "<caption><span id=\"t0\" class=\"activeTableTab\"><span>" +
             "All Methods</span><span class=\"tabEnd\">&nbsp;</span></span>" +
             "<span id=\"t2\" class=\"tableTab\"><span>" +
@@ -69,14 +66,14 @@
             "</span><span id=\"t5\" class=\"tableTab\"><span>" +
             "<a href=\"javascript:show(16);\">Default Methods</a></span>" +
             "<span class=\"tabEnd\">&nbsp;</span></span></caption>"},
-        {BUG_ID + "/pkg/A.html",
+        { "pkg/A.html",
             "<dl>\n" +
             "<dt>Functional Interface:</dt>\n" +
             "<dd>This is a functional interface and can therefore be used as " +
             "the assignment target for a lambda expression or method " +
             "reference.</dd>\n" +
             "</dl>"},
-        {BUG_ID + "/pkg1/FuncInf.html",
+        { "pkg1/FuncInf.html",
             "<dl>\n" +
             "<dt>Functional Interface:</dt>\n" +
             "<dd>This is a functional interface and can therefore be used as " +
@@ -85,25 +82,25 @@
             "</dl>"}
     };
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg/A.html",
+        { "pkg/A.html",
             "<td class=\"colFirst\"><code>default default void</code></td>"},
-        {BUG_ID + "/pkg/A.html",
+        { "pkg/A.html",
             "<pre>default&nbsp;default&nbsp;void&nbsp;defaultMethod()</pre>"},
-        {BUG_ID + "/pkg/B.html",
+        { "pkg/B.html",
             "<td class=\"colFirst\"><code>default void</code></td>"},
-        {BUG_ID + "/pkg1/NotAFuncInf.html",
+        { "pkg1/NotAFuncInf.html",
             "<dl>\n" +
             "<dt>Functional Interface:</dt>\n" +
             "<dd>This is a functional interface and can therefore be used as " +
             "the assignment target for a lambda expression or method " +
             "reference.</dd>\n" +
             "</dl>"},
-        {BUG_ID + "/pkg/B.html",
+        { "pkg/B.html",
             "<dl>\n" +
             "<dt>Functional Interface:</dt>"}
     };
     private static final String[][] NEGATED_TEST_1 = {
-        {BUG_ID + "-2/pkg1/FuncInf.html",
+        { "pkg1/FuncInf.html",
             "<dl>\n" +
             "<dt>Functional Interface:</dt>"}
     };
@@ -114,22 +111,8 @@
      */
     public static void main(String[] args) {
         TestLambdaFeature tester = new TestLambdaFeature();
-        run(tester, ARGS, TEST, NEGATED_TEST);
-        run(tester, ARGS_1, NO_TEST, NEGATED_TEST_1);
+        tester.run(ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS_1, NO_TEST, NEGATED_TEST_1);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testLeadingSpaces/LeadingSpaces.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLeadingSpaces/LeadingSpaces.java	Thu Apr 24 16:04:44 2014 -0700
@@ -37,9 +37,8 @@
 
 public class LeadingSpaces extends JavadocTester {
 
-    private static final String BUG_ID = "4232882-8014636";
     private static final String[][] TEST = {
-        {BUG_ID + "/LeadingSpaces.html",
+        { "LeadingSpaces.html",
 "        1\n" +
 "          2\n" +
 "            3\n" +
@@ -48,10 +47,9 @@
 "                  6\n" +
 "                    7"}
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR,
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
         SRC_DIR + "/LeadingSpaces.java"};
 
     /**
@@ -60,25 +58,11 @@
      */
     public static void main(String[] args) {
         LeadingSpaces tester = new LeadingSpaces();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
 
     /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
-
-    /**
        This leading spaces in the &lt;pre&gt; block below should be
        preserved.
        <pre>
--- a/langtools/test/com/sun/javadoc/testLegacyTaglet/TestLegacyTaglet.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLegacyTaglet/TestLegacyTaglet.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,49 +34,31 @@
 
 public class TestLegacyTaglet extends JavadocTester {
 
-    private static final String BUG_ID = "4638723-8015882";
-
     private static final String[] ARGS =
-        new String[] {"-d", BUG_ID, "-sourcepath", SRC_DIR,
+        new String[] {"-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
             "-tagletpath", SRC_DIR, "-taglet", "ToDoTaglet", "-taglet", "Check",
             "-taglet", "UnderlineTaglet", SRC_DIR + "/C.java"};
 
     private static final String[][] TEST = new String[][] {
-            {BUG_ID + "/C.html", "This is an <u>underline</u>"},
-            {BUG_ID + "/C.html",
+            { "C.html", "This is an <u>underline</u>"},
+            { "C.html",
             "<DT><B>To Do:</B><DD><table cellpadding=2 cellspacing=0><tr>" +
                 "<td bgcolor=\"yellow\">Finish this class.</td></tr></table></DD>"},
-            {BUG_ID + "/C.html",
+            { "C.html",
                 "<DT><B>To Do:</B><DD><table cellpadding=2 cellspacing=0><tr>" +
                 "<td bgcolor=\"yellow\">Tag in Method.</td></tr></table></DD>"}
     };
 
-    private static final String[][] NEGATED_TEST = NO_TEST;
-
     /**
      * The entry point of the test.
      * @param args the array of command line arguments.
      */
     public static void main(String[] args) {
         TestLegacyTaglet tester = new TestLegacyTaglet();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         if (tester.getErrorOutput().contains("NullPointerException")) {
             throw new AssertionError("javadoc threw NullPointerException");
         }
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testLinkOption/TestBadLinkOption.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLinkOption/TestBadLinkOption.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,11 +34,9 @@
 
 public class TestBadLinkOption extends JavadocTester {
 
-    private static final String BUG_ID = "4720957";
-
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR,
-        "-link", BUG_ID, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
+        "-link", OUTPUT_DIR, "pkg"
     };
 
     private static final String[][] TEST = {
@@ -55,21 +53,7 @@
      */
     public static void main(String[] args) {
         TestBadLinkOption tester = new TestBadLinkOption();
-        run(tester, ARGS, TEST, NEG_TEST);
+        tester.run(ARGS, TEST, NEG_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testLinkOption/TestLinkOption.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLinkOption/TestLinkOption.java	Thu Apr 24 16:04:44 2014 -0700
@@ -36,33 +36,31 @@
 
 public class TestLinkOption extends JavadocTester {
 
-    private static final String BUG_ID = "4720957-5020118-8038976";
-
     //Generate the documentation using -linkoffline and a URL as the first parameter.
     private static final String[] ARGS1 = new String[] {
-        "-d", BUG_ID + "-1", "-sourcepath", SRC_DIR,
+        "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR,
         "-linkoffline", "http://java.sun.com/j2se/1.4/docs/api/",
         SRC_DIR, "-package", "pkg", "java.lang"
     };
 
     private static final String[][] TEST1 = {
-        {BUG_ID + "-1/pkg/C.html",
+        { "pkg/C.html",
             "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/String.html?is-external=true\" " +
             "title=\"class or interface in java.lang\"><code>Link to String Class</code></a>"
         },
         //Make sure the parameters are indented properly when the -link option is used.
-        {BUG_ID + "-1/pkg/C.html",
+        { "pkg/C.html",
             "(int&nbsp;p1,\n" +
             "      int&nbsp;p2,\n" +
             "      int&nbsp;p3)"
         },
-        {BUG_ID + "-1/pkg/C.html",
+        { "pkg/C.html",
             "(int&nbsp;p1,\n" +
             "      int&nbsp;p2,\n" +
             "      <a href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" title=\"class or interface in java.lang\">" +
             "Object</a>&nbsp;p3)"
         },
-        {BUG_ID + "-1/java/lang/StringBuilderChild.html",
+        { "java/lang/StringBuilderChild.html",
             "<pre>public abstract class <span class=\"typeNameLabel\">StringBuilderChild</span>\n" +
                 "extends <a href=\"http://java.sun.com/j2se/1.4/docs/api/java/lang/Object.html?is-external=true\" " +
             "title=\"class or interface in java.lang\">Object</a></pre>"
@@ -74,27 +72,26 @@
     //Generate the documentation using -linkoffline and a relative path as the first parameter.
     //We will try linking to the docs generated in test 1 with a relative path.
     private static final String[] ARGS2 = new String[] {
-        "-d", BUG_ID + "-2", "-sourcepath", SRC_DIR,
-        "-linkoffline", "../" + BUG_ID + "-1",
-        BUG_ID + "-1", "-package", "pkg2"
+        "-d", OUTPUT_DIR + "-2", "-sourcepath", SRC_DIR,
+        "-linkoffline", "../" + OUTPUT_DIR + "-1",
+        OUTPUT_DIR + "-1", "-package", "pkg2"
     };
 
     private static final String[][] TEST2 = {
-        {BUG_ID + "-2/pkg2/C2.html",
-            "This is a link to <a href=\"../../" + BUG_ID +
+        { "pkg2/C2.html",
+            "This is a link to <a href=\"../../" + OUTPUT_DIR +
             "-1/pkg/C.html?is-external=true\" " +
             "title=\"class or interface in pkg\"><code>Class C</code></a>."
         }
     };
-    private static final String[][] NEGATED_TEST2 = NO_TEST;
     /*
      * Create the documentation using the -link option, vary the behavior with
      * both trailing and no trailing slash. We are only interested in ensuring
      * that the command executes with no errors or related warnings.
      */
     static String[] createArguments(boolean withTrailingSlash) {
-        String packagePath = new File(BUG_ID + "-1").getAbsolutePath();
-        String outputDirName = BUG_ID;
+        String packagePath = new File(OUTPUT_DIR + "-1").getAbsolutePath();
+        String outputDirName = OUTPUT_DIR;
         if (withTrailingSlash) {
             // add the trailing slash, if it is not present!
             if (!packagePath.endsWith(FS)) {
@@ -121,8 +118,9 @@
      */
     public static void main(String[] args) {
         TestLinkOption tester = new TestLinkOption();
-        run(tester, ARGS1, TEST1, NEGATED_TEST1);
-        run(tester, ARGS2, TEST2, NEGATED_TEST2);
+        tester.run(ARGS1, TEST1, NEGATED_TEST1);
+        tester.run(ARGS1, TEST1, NEGATED_TEST1);
+        tester.run(ARGS2, TEST2, NO_TEST);
         tester.runJavadoc(createArguments(true));  // with trailing slash
         tester.runJavadoc(createArguments(false)); // without trailing slash
         tester.printSummary();
@@ -131,18 +129,4 @@
         }
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testLinkOption/TestNewLineInLink.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLinkOption/TestNewLineInLink.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,7 +35,6 @@
 
 public class TestNewLineInLink extends JavadocTester {
 
-    private static final String BUG_ID = "4739870";
     private static final String[][] NEGATED_TEST =
         new String[][] {
             {ERROR_OUTPUT,
@@ -43,7 +42,7 @@
         };
 
     private static final String[] ARGS = new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR,
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
                 "-linkoffline", "http://www.java.sun.com/j2se/1.4/docs/api",
                 SRC_DIR, "testNewLineInLink"};
 
@@ -53,21 +52,7 @@
      */
     public static void main(String[] args) {
         TestNewLineInLink tester = new TestNewLineInLink();
-        run(tester, ARGS, new String[][] {}, NEGATED_TEST);
+        tester.run(ARGS, new String[][] {}, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLinkTaglet/TestLinkTaglet.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,18 +35,15 @@
 
 public class TestLinkTaglet extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4732864-6280605-7064544-8014636";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg", SRC_DIR +
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg", SRC_DIR +
         "/checkPkg/B.java"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "Qualified Link: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n" +
             " Unqualified Link1: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n" +
             " Unqualified Link2: <a href=\"../pkg/C.InnerC.html\" title=\"class in pkg\"><code>C.InnerC</code></a>.<br/>\n" +
@@ -54,12 +51,12 @@
             " Unqualified Link: <a href=\"../pkg/C.html#method-pkg.C.InnerC-pkg.C.InnerC2-\"><code>method(C.InnerC, C.InnerC2)</code></a>.<br/>\n" +
             " Unqualified Link: <a href=\"../pkg/C.html#method-pkg.C.InnerC-pkg.C.InnerC2-\"><code>method(InnerC, InnerC2)</code></a>.<br/>"
         },
-        {BUG_ID + "/pkg/C.InnerC.html",
+        { "pkg/C.InnerC.html",
             "Link to member in outer class: <a href=\"../pkg/C.html#MEMBER\"><code>C.MEMBER</code></a> <br/>\n" +
             " Link to member in inner class: <a href=\"../pkg/C.InnerC2.html#MEMBER2\"><code>C.InnerC2.MEMBER2</code></a> <br/>\n" +
             " Link to another inner class: <a href=\"../pkg/C.InnerC2.html\" title=\"class in pkg\"><code>C.InnerC2</code></a>"
         },
-        {BUG_ID + "/pkg/C.InnerC2.html",
+        { "pkg/C.InnerC2.html",
             "<dl>\n" +
             "<dt>Enclosing class:</dt>\n" +
             "<dd><a href=\"../pkg/C.html\" title=\"class in pkg\">C</a></dd>\n" +
@@ -76,21 +73,7 @@
      */
     public static void main(String[] args) {
         TestLinkTaglet tester = new TestLinkTaglet();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testLinkToSerialForm/TestLinkToSerialForm.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLinkToSerialForm/TestLinkToSerialForm.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,15 +35,13 @@
 
 public class TestLinkToSerialForm extends JavadocTester {
 
-    private static final String BUG_ID = "4521661";
     private static final String[][] TEST = {
-        {BUG_ID + "/serialized-form.html", "<a name=\"pkg.C\">"},
-        {BUG_ID + "/pkg/C.html", "<a href=\"../serialized-form.html#pkg.C\">"}
+        { "serialized-form.html", "<a name=\"pkg.C\">"},
+        { "pkg/C.html", "<a href=\"../serialized-form.html#pkg.C\">"}
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"};
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"};
 
     /**
      * The entry point of the test.
@@ -51,21 +49,7 @@
      */
     public static void main(String[] args) {
         TestLinkToSerialForm tester = new TestLinkToSerialForm();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testLiteralCodeInPre/TestLiteralCodeInPre.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testLiteralCodeInPre/TestLiteralCodeInPre.java	Thu Apr 24 16:04:44 2014 -0700
@@ -32,10 +32,6 @@
 
 public class TestLiteralCodeInPre extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "8002387-8014636";
-    private static final String OUTPUT_DIR = BUG_ID;
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
         "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-Xdoclint:none", "pkg"
@@ -43,25 +39,25 @@
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        { BUG_ID + "/pkg/Test.html",
+        { "pkg/Test.html",
             "no_pre()</pre>\n" +
             "<div class=\"block\">abc<code>def</code>ghi</div>" },
-        { BUG_ID + "/pkg/Test.html",
+        { "pkg/Test.html",
             "no_pre_extra_whitespace()</pre>\n" +
             "<div class=\"block\">abc<code>def  </code>ghi</div>" },
-        { BUG_ID + "/pkg/Test.html",
+        { "pkg/Test.html",
             "in_pre()</pre>\n" +
             "<div class=\"block\"><pre> abc<code>  def  </code>ghi</pre></div>" },
-        { BUG_ID + "/pkg/Test.html",
+        { "pkg/Test.html",
             "pre_after_text()</pre>\n" +
             "<div class=\"block\">xyz <pre> abc<code>  def  </code>ghi</pre></div>" },
-        { BUG_ID + "/pkg/Test.html",
+        { "pkg/Test.html",
             "after_pre()</pre>\n" +
             "<div class=\"block\">xyz <pre> pqr </pre> abc<code>def  </code>ghi</div>" },
-        { BUG_ID + "/pkg/Test.html",
+        { "pkg/Test.html",
             "back_in_pre()</pre>\n" +
             "<div class=\"block\">xyz <pre> pqr </pre> mno <pre> abc<code>  def  </code>ghi</pre></div>" },
-        { BUG_ID + "/pkg/Test.html",
+        { "pkg/Test.html",
             "typical_usage_code()</pre>\n" +
             "<div class=\"block\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n" +
             " Example:  <pre><code>\n" +
@@ -70,7 +66,7 @@
             "   line 3 }\n" +
             " </code></pre>\n" +
             " and so it goes.</div>" },
-        { BUG_ID + "/pkg/Test.html",
+        { "pkg/Test.html",
             "typical_usage_literal()</pre>\n" +
             "<div class=\"block\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n" +
             " Example:  <pre>\n" +
@@ -79,7 +75,7 @@
             "   line 3 }\n" +
             " </pre>\n" +
             " and so it goes.</div>" },
-        { BUG_ID + "/pkg/Test.html",
+        { "pkg/Test.html",
             "recommended_usage_literal()</pre>\n" +
             "<div class=\"block\">Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n" +
             " Example:  <pre>\n" +
@@ -89,29 +85,13 @@
             " and so it goes.</div>" }
     };
 
-    private static final String[][] NEGATED_TEST = NO_TEST;
-
     /**
      * The entry point of the test.
      * @param args the array of command line arguments.
      */
     public static void main(String[] args) {
         TestLiteralCodeInPre tester = new TestLiteralCodeInPre();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testMemberInheritence/TestMemberInheritence.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,43 +35,41 @@
 
 public class TestMemberInheritence extends JavadocTester {
 
-    private static final String BUG_ID = "4638588-4635809-6256068-6270645";
-
     private static final String[][] TEST = {
         //Public field should be inherited
-        {BUG_ID + "/pkg/SubClass.html",
+        { "pkg/SubClass.html",
          "<a href=\"../pkg/BaseClass.html#pubField\">"},
 
         //Public method should be inherited
-        {BUG_ID + "/pkg/SubClass.html",
+        { "pkg/SubClass.html",
          "<a href=\"../pkg/BaseClass.html#pubMethod--\">"},
 
         //Public inner class should be inherited.
-        {BUG_ID + "/pkg/SubClass.html",
+        { "pkg/SubClass.html",
          "<a href=\"../pkg/BaseClass.pubInnerClass.html\" title=\"class in pkg\">"},
 
         //Protected field should be inherited
-        {BUG_ID + "/pkg/SubClass.html",
+        { "pkg/SubClass.html",
          "<a href=\"../pkg/BaseClass.html#proField\">"},
 
         //Protected method should be inherited
-        {BUG_ID + "/pkg/SubClass.html",
+        { "pkg/SubClass.html",
          "<a href=\"../pkg/BaseClass.html#proMethod--\">"},
 
         //Protected inner class should be inherited.
-        {BUG_ID + "/pkg/SubClass.html",
+        { "pkg/SubClass.html",
          "<a href=\"../pkg/BaseClass.proInnerClass.html\" title=\"class in pkg\">"},
 
         // New labels as of 1.5.0
-        {BUG_ID + "/pkg/SubClass.html",
+        { "pkg/SubClass.html",
          "Nested classes/interfaces inherited from class&nbsp;pkg." +
                  "<a href=\"../pkg/BaseClass.html\" title=\"class in pkg\">BaseClass</a>"},
-        {BUG_ID + "/pkg/SubClass.html",
+        { "pkg/SubClass.html",
          "Nested classes/interfaces inherited from interface&nbsp;pkg." +
                  "<a href=\"../pkg/BaseInterface.html\" title=\"interface in pkg\">BaseInterface</a>"},
 
          // Test overriding/implementing methods with generic parameters.
-                 {BUG_ID + "/pkg/BaseClass.html",
+                 { "pkg/BaseClass.html",
          "<dl>\n" +
          "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n" +
                           "<dd><code><a href=\"../pkg/BaseInterface.html#getAnnotation-java.lang.Class-\">" +
@@ -81,22 +79,22 @@
                           "</dl>"},
 
          // Test diamond inheritence member summary (6256068)
-                 {BUG_ID + "/diamond/Z.html",
+                 { "diamond/Z.html",
                  "<code><a href=\"../diamond/A.html#aMethod--\">aMethod</a></code>"},
 
          // Test that doc is inherited from closed parent (6270645)
-                 {BUG_ID + "/inheritDist/C.html",
+                 { "inheritDist/C.html",
                  "<div class=\"block\">m1-B</div>"},
 
     };
 
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg/SubClass.html",
+        { "pkg/SubClass.html",
         "<a href=\"../pkg/BaseClass.html#staticMethod--\">staticMethod</a></code>"},
     };
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg", "diamond",
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg", "diamond",
             "inheritDist"};
 
     /**
@@ -105,21 +103,7 @@
      */
     public static void main(String[] args) {
         TestMemberInheritence tester = new TestMemberInheritence();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testMemberSummary/TestMemberSummary.java	Thu Apr 24 16:04:44 2014 -0700
@@ -36,30 +36,27 @@
 
 public class TestMemberSummary extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4951228-6290760";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg","pkg2"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg","pkg2"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
         // Check return type in member summary.
-        {BUG_ID + "/pkg/PublicChild.html",
+        { "pkg/PublicChild.html",
             "<code><a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">PublicChild</a></code></td>\n" +
             "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../pkg/PublicChild.html#returnTypeTest--\">" +
             "returnTypeTest</a></span>()</code>"
         },
         // Check return type in member detail.
-        {BUG_ID + "/pkg/PublicChild.html",
+        { "pkg/PublicChild.html",
             "<pre>public&nbsp;<a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">" +
             "PublicChild</a>&nbsp;returnTypeTest()</pre>"
         },
 
          // Legacy anchor dimensions (6290760)
-        {BUG_ID + "/pkg2/A.html",
+        { "pkg2/A.html",
             "<a name=\"f-java.lang.Object:A-\">\n" +
             "<!--   -->\n" +
             "</a><a name=\"f-T:A-\">\n" +
@@ -67,7 +64,6 @@
             "</a>"
         },
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -75,21 +71,7 @@
      */
     public static void main(String[] args) {
         TestMemberSummary tester = new TestMemberSummary();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testMethodTypes/TestMethodTypes.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testMethodTypes/TestMethodTypes.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,20 +33,17 @@
 
 public class TestMethodTypes extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "8002304";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"
     };
 
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg1/A.html",
+        { "pkg1/A.html",
             "var methods = {"
         },
 
-        {BUG_ID + "/pkg1/A.html",
+        { "pkg1/A.html",
             "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All " +
             "Methods</span><span class=\"tabEnd\">&nbsp;</span></span>" +
             "<span id=\"t1\" class=\"tableTab\"><span><a href=\"javascript:show(1);\">" +
@@ -60,11 +57,11 @@
             "</caption>"
         },
 
-        {BUG_ID + "/pkg1/A.html",
+        { "pkg1/A.html",
             "<tr id=\"i0\" class=\"altColor\">"
         },
 
-        {BUG_ID + "/pkg1/B.html",
+        { "pkg1/B.html",
             "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All " +
             "Methods</span><span class=\"tabEnd\">&nbsp;</span></span>" +
             "<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">" +
@@ -74,11 +71,11 @@
             "</caption>"
         },
 
-        {BUG_ID + "/pkg1/D.html",
+        { "pkg1/D.html",
             "var methods = {"
         },
 
-        {BUG_ID + "/pkg1/D.html",
+        { "pkg1/D.html",
             "<caption><span id=\"t0\" class=\"activeTableTab\"><span>All " +
             "Methods</span><span class=\"tabEnd\">&nbsp;</span></span>" +
             "<span id=\"t2\" class=\"tableTab\"><span><a href=\"javascript:show(2);\">" +
@@ -92,22 +89,22 @@
             "</caption>"
         },
 
-        {BUG_ID + "/pkg1/D.html",
+        { "pkg1/D.html",
             "<tr id=\"i0\" class=\"altColor\">"
         },
     };
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg1/A.html",
+        { "pkg1/A.html",
             "<caption><span>Methods</span><span class=\"tabEnd\">&nbsp;</span>" +
             "</caption>"
         },
 
-        {BUG_ID + "/pkg1/B.html",
+        { "pkg1/B.html",
             "<caption><span>Methods</span><span class=\"tabEnd\">&nbsp;</span>" +
             "</caption>"
         },
 
-        {BUG_ID + "/pkg1/D.html",
+        { "pkg1/D.html",
             "<caption><span>Methods</span><span class=\"tabEnd\">&nbsp;</span>" +
             "</caption>"
         },
@@ -119,21 +116,7 @@
      */
     public static void main(String[] args) {
         TestMethodTypes tester = new TestMethodTypes();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testModifier/TestModifier.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testModifier/TestModifier.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,9 +35,6 @@
 
 public class TestModifier extends JavadocTester {
 
-    private static final String BUG_ID = "4210388";
-    private static final String[][] TEST = NO_TEST;
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS =
         new String[] {
             "-sourcepath", SRC_DIR,
@@ -50,22 +47,8 @@
      */
     public static void main(String[] args) {
         TestModifier tester = new TestModifier();
-        if (run(tester, ARGS, TEST, NEGATED_TEST) != 0) {
+        if (tester.run(ARGS, NO_TEST, NO_TEST) != 0) {
             throw new Error("Javadoc error occured during execution.");
         }
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testNavigation/TestNavigation.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testNavigation/TestNavigation.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,38 +34,34 @@
 
 public class TestNavigation extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4131628-4664607";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/A.html", "<li>Prev&nbsp;Class</li>"},
-        {BUG_ID + "/pkg/A.html",
+        { "pkg/A.html", "<li>Prev&nbsp;Class</li>"},
+        { "pkg/A.html",
             "<a href=\"../pkg/C.html\" title=\"class in pkg\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a>"},
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<a href=\"../pkg/A.html\" title=\"annotation in pkg\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a>"},
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<a href=\"../pkg/E.html\" title=\"enum in pkg\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a>"},
-        {BUG_ID + "/pkg/E.html",
+        { "pkg/E.html",
             "<a href=\"../pkg/C.html\" title=\"class in pkg\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a>"},
-        {BUG_ID + "/pkg/E.html",
+        { "pkg/E.html",
             "<a href=\"../pkg/I.html\" title=\"interface in pkg\"><span class=\"typeNameLink\">Next&nbsp;Class</span></a>"},
-        {BUG_ID + "/pkg/I.html",
+        { "pkg/I.html",
             "<a href=\"../pkg/E.html\" title=\"enum in pkg\"><span class=\"typeNameLink\">Prev&nbsp;Class</span></a>"},
-        {BUG_ID + "/pkg/I.html", "<li>Next&nbsp;Class</li>"},
+        { "pkg/I.html", "<li>Next&nbsp;Class</li>"},
         // Test for 4664607
-        {BUG_ID + "/pkg/I.html",
+        { "pkg/I.html",
             "<div class=\"skipNav\"><a href=\"#skip.navbar.top\" title=\"Skip navigation links\">Skip navigation links</a></div>\n" +
             "<a name=\"navbar.top.firstrow\">\n" +
             "<!--   -->\n" +
             "</a>"}
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -73,21 +69,7 @@
      */
     public static void main(String[] args) {
         TestNavigation tester = new TestNavigation();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testNestedGenerics/TestNestedGenerics.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testNestedGenerics/TestNestedGenerics.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,24 +33,20 @@
 
 public class TestNestedGenerics extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "6758050";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[]{
-        "-d", BUG_ID, "-sourcepath", SRC_DIR,
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
         "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/NestedGenerics.html",
+        { "pkg/NestedGenerics.html",
             "<div class=\"block\">Contains <a " +
             "href=\"../pkg/NestedGenerics.html#foo-java.util.Map-\"><code>foo" +
             "(java.util.Map&lt;A, java.util.Map&lt;A, A&gt;&gt;)</code></a></div>"
         }
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -58,21 +54,7 @@
      */
     public static void main(String[] args) {
         TestNestedGenerics tester = new TestNestedGenerics();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testNestedInlineTag/TestNestedInlineTag.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testNestedInlineTag/TestNestedInlineTag.java	Thu Apr 24 16:04:44 2014 -0700
@@ -54,33 +54,31 @@
      */
     public void method(){}
 
-    private static final String BUG_ID = "no-bug-id";
     private static final String[][] TEST = {
         //Test nested inline tag in class description.
-        {BUG_ID + "/TestNestedInlineTag.html",
+        { "TestNestedInlineTag.html",
          "This should be green, underlined and bold (Class): <u><b><font color=\"green\">My test</font></b></u>"
         },
 
         //Test nested inline tag in field description.
-        {BUG_ID + "/TestNestedInlineTag.html",
+        { "TestNestedInlineTag.html",
          "This should be green, underlined and bold (Field): <u><b><font color=\"green\">My test</font></b></u>"
         },
 
         //Test nested inline tag in constructor description.
-        {BUG_ID + "/TestNestedInlineTag.html",
+        { "TestNestedInlineTag.html",
          "This should be green, underlined and bold (Constructor): <u><b><font color=\"green\">My test</font></b></u>"
         },
 
         //Test nested inline tag in method description.
-        {BUG_ID + "/TestNestedInlineTag.html",
+        { "TestNestedInlineTag.html",
          "This should be green, underlined and bold (Method): <u><b><font color=\"green\">My test</font></b></u>"
         }
     };
 
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR,
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
             "-taglet", "testtaglets.UnderlineTaglet",
             "-taglet", "testtaglets.BoldTaglet",
             "-taglet", "testtaglets.GreenTaglet",
@@ -93,21 +91,7 @@
      */
     public static void main(String[] args) {
         TestNestedInlineTag tester = new TestNestedInlineTag();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testNewLanguageFeatures/TestNewLanguageFeatures.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,13 +35,9 @@
 
 public class TestNewLanguageFeatures extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID =
-        "4789689-4905985-4927164-4827184-4993906";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-Xdoclint:none", "-d", BUG_ID, "-use", "-sourcepath", SRC_DIR,
+        "-Xdoclint:none", "-d", OUTPUT_DIR, "-use", "-sourcepath", SRC_DIR,
         "pkg", "pkg1", "pkg2"
     };
 
@@ -52,43 +48,43 @@
             // ENUM TESTING
             //=================================
             //Make sure enum header is correct.
-            {BUG_ID + "/pkg/Coin.html", "Enum Coin</h2>"},
+            { "pkg/Coin.html", "Enum Coin</h2>"},
             //Make sure enum signature is correct.
-            {BUG_ID + "/pkg/Coin.html", "<pre>public enum " +
+            { "pkg/Coin.html", "<pre>public enum " +
                      "<span class=\"typeNameLabel\">Coin</span>\n" +
                      "extends java.lang.Enum&lt;<a href=\"../pkg/Coin.html\" " +
                      "title=\"enum in pkg\">Coin</a>&gt;</pre>"
             },
             //Check for enum constant section
-            {BUG_ID + "/pkg/Coin.html", "<caption><span>Enum Constants" +
+            { "pkg/Coin.html", "<caption><span>Enum Constants" +
                      "</span><span class=\"tabEnd\">&nbsp;</span></caption>"},
             //Detail for enum constant
-            {BUG_ID + "/pkg/Coin.html",
+            { "pkg/Coin.html",
                 "<span class=\"memberNameLink\"><a href=\"../pkg/Coin.html#Dime\">Dime</a></span>"},
             //Automatically insert documentation for values() and valueOf().
-            {BUG_ID + "/pkg/Coin.html",
+            { "pkg/Coin.html",
                 "Returns an array containing the constants of this enum type,"},
-            {BUG_ID + "/pkg/Coin.html",
+            { "pkg/Coin.html",
                 "Returns the enum constant of this type with the specified name"},
-            {BUG_ID + "/pkg/Coin.html", "for (Coin c : Coin.values())"},
-            {BUG_ID + "/pkg/Coin.html",
+            { "pkg/Coin.html", "for (Coin c : Coin.values())"},
+            { "pkg/Coin.html",
                 "Overloaded valueOf() method has correct documentation."},
-            {BUG_ID + "/pkg/Coin.html",
+            { "pkg/Coin.html",
                 "Overloaded values method  has correct documentation."},
 
             //=================================
             // TYPE PARAMETER TESTING
             //=================================
             //Make sure the header is correct.
-            {BUG_ID + "/pkg/TypeParameters.html",
+            { "pkg/TypeParameters.html",
                 "Class TypeParameters&lt;E&gt;</h2>"},
             //Check class type parameters section.
-            {BUG_ID + "/pkg/TypeParameters.html",
+            { "pkg/TypeParameters.html",
                 "<dt><span class=\"paramLabel\">Type Parameters:</span></dt>\n" +
                 "<dd><code>E</code> - " +
                 "the type parameter for this class."},
             //Type parameters in @see/@link
-            {BUG_ID + "/pkg/TypeParameters.html",
+            { "pkg/TypeParameters.html",
                 "<dl>\n" +
                 "<dt><span class=\"seeLabel\">See Also:</span></dt>\n" +
                 "<dd>" +
@@ -96,28 +92,28 @@
                 "<code>TypeParameters</code></a></dd>\n" +
                 "</dl>"},
             //Method that uses class type parameter.
-            {BUG_ID + "/pkg/TypeParameters.html",
+            { "pkg/TypeParameters.html",
                 "(<a href=\"../pkg/TypeParameters.html\" title=\"type " +
                     "parameter in TypeParameters\">E</a>&nbsp;param)"},
             //Method type parameter section.
-            {BUG_ID + "/pkg/TypeParameters.html",
+            { "pkg/TypeParameters.html",
                 "<span class=\"paramLabel\">Type Parameters:</span></dt>\n" +
                 "<dd><code>T</code> - This is the first " +
                     "type parameter.</dd>\n" +
                     "<dd><code>V</code> - This is the second type " +
                     "parameter."},
             //Signature of method with type parameters
-            {BUG_ID + "/pkg/TypeParameters.html",
+            { "pkg/TypeParameters.html",
                 "public&nbsp;&lt;T extends java.util.List,V&gt;&nbsp;" +
                 "java.lang.String[]&nbsp;methodThatHasTypeParameters"},
             //Wildcard testing.
-            {BUG_ID + "/pkg/Wildcards.html",
+            { "pkg/Wildcards.html",
                 "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
                 "TypeParameters</a>&lt;? super java.lang.String&gt;&nbsp;a"},
-            {BUG_ID + "/pkg/Wildcards.html",
+            { "pkg/Wildcards.html",
                 "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
                 "TypeParameters</a>&lt;? extends java.lang.StringBuffer&gt;&nbsp;b"},
-            {BUG_ID + "/pkg/Wildcards.html",
+            { "pkg/Wildcards.html",
                 "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
                     "TypeParameters</a>&nbsp;c"},
             //Bad type parameter warnings.
@@ -127,7 +123,7 @@
                 "\"<BadMethodTypeParam>\" is not a type parameter name."},
 
             //Signature of subclass that has type parameters.
-            {BUG_ID + "/pkg/TypeParameterSubClass.html",
+            { "pkg/TypeParameterSubClass.html",
                 "<pre>public class <span class=\"typeNameLabel\">TypeParameterSubClass&lt;T extends " +
                 "java.lang.String&gt;</span>\n" +
                 "extends " +
@@ -136,20 +132,20 @@
 
             //Interface generic parameter substitution
             //Signature of subclass that has type parameters.
-            {BUG_ID + "/pkg/TypeParameters.html",
+            { "pkg/TypeParameters.html",
                 "<dl>\n" +
                 "<dt>All Implemented Interfaces:</dt>\n" +
                 "<dd><a href=\"../pkg/SubInterface.html\" title=\"interface in pkg\">" +
                 "SubInterface</a>&lt;E&gt;, <a href=\"../pkg/SuperInterface.html\" " +
                 "title=\"interface in pkg\">SuperInterface</a>&lt;E&gt;</dd>\n" +
                 "</dl>"},
-            {BUG_ID + "/pkg/SuperInterface.html",
+            { "pkg/SuperInterface.html",
                 "<dl>\n" +
                 "<dt>All Known Subinterfaces:</dt>\n" +
                 "<dd><a href=\"../pkg/SubInterface.html\" title=\"interface in pkg\">" +
                 "SubInterface</a>&lt;V&gt;</dd>\n" +
                 "</dl>"},
-            {BUG_ID + "/pkg/SubInterface.html",
+            { "pkg/SubInterface.html",
                 "<dl>\n" +
                 "<dt>All Superinterfaces:</dt>\n" +
                 "<dd><a href=\"../pkg/SuperInterface.html\" title=\"interface in pkg\">" +
@@ -159,10 +155,10 @@
             //=================================
             // VAR ARG TESTING
             //=================================
-            {BUG_ID + "/pkg/VarArgs.html", "(int...&nbsp;i)"},
-            {BUG_ID + "/pkg/VarArgs.html", "(int[][]...&nbsp;i)"},
-            {BUG_ID + "/pkg/VarArgs.html", "-int:A...-"},
-            {BUG_ID + "/pkg/VarArgs.html",
+            { "pkg/VarArgs.html", "(int...&nbsp;i)"},
+            { "pkg/VarArgs.html", "(int[][]...&nbsp;i)"},
+            { "pkg/VarArgs.html", "-int:A...-"},
+            { "pkg/VarArgs.html",
                 "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
                 "TypeParameters</a>...&nbsp;t"},
 
@@ -170,7 +166,7 @@
             // ANNOTATION TYPE TESTING
             //=================================
             //Make sure the summary links are correct.
-            {BUG_ID + "/pkg/AnnotationType.html",
+            { "pkg/AnnotationType.html",
                 "<li>Summary:&nbsp;</li>\n" +
                 "<li>Field&nbsp;|&nbsp;</li>\n" +
                 "<li><a href=\"#annotation.type.required.element.summary\">" +
@@ -178,26 +174,26 @@
                 "<li>" +
                 "<a href=\"#annotation.type.optional.element.summary\">Optional</a></li>"},
             //Make sure the detail links are correct.
-            {BUG_ID + "/pkg/AnnotationType.html",
+            { "pkg/AnnotationType.html",
                 "<li>Detail:&nbsp;</li>\n" +
                 "<li>Field&nbsp;|&nbsp;</li>\n" +
                 "<li><a href=\"#annotation.type.element.detail\">Element</a></li>"},
             //Make sure the heading is correct.
-            {BUG_ID + "/pkg/AnnotationType.html",
+            { "pkg/AnnotationType.html",
                 "Annotation Type AnnotationType</h2>"},
             //Make sure the signature is correct.
-            {BUG_ID + "/pkg/AnnotationType.html",
+            { "pkg/AnnotationType.html",
                 "public @interface <span class=\"memberNameLabel\">AnnotationType</span>"},
             //Make sure member summary headings are correct.
-            {BUG_ID + "/pkg/AnnotationType.html",
+            { "pkg/AnnotationType.html",
                 "<h3>Required Element Summary</h3>"},
-            {BUG_ID + "/pkg/AnnotationType.html",
+            { "pkg/AnnotationType.html",
                 "<h3>Optional Element Summary</h3>"},
             //Make sure element detail heading is correct
-            {BUG_ID + "/pkg/AnnotationType.html",
+            { "pkg/AnnotationType.html",
                 "Element Detail"},
             //Make sure default annotation type value is printed when necessary.
-            {BUG_ID + "/pkg/AnnotationType.html",
+            { "pkg/AnnotationType.html",
                 "<dl>\n" +
                 "<dt>Default:</dt>\n" +
                 "<dd>\"unknown\"</dd>\n" +
@@ -208,12 +204,12 @@
             //=================================
 
             //PACKAGE
-            {BUG_ID + "/pkg/package-summary.html",
+            { "pkg/package-summary.html",
                 "<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>=\"Package Annotation\",\n" +
                 "                <a href=\"../pkg/AnnotationType.html#required--\">required</a>=1994)"},
 
             //CLASS
-            {BUG_ID + "/pkg/AnnotationTypeUsage.html",
+            { "pkg/AnnotationTypeUsage.html",
                 "<pre><a href=\"../pkg/AnnotationType.html\" " +
                 "title=\"annotation in pkg\">@AnnotationType</a>(" +
                 "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>" +
@@ -225,7 +221,7 @@
                 "extends java.lang.Object</pre>"},
 
             //FIELD
-            {BUG_ID + "/pkg/AnnotationTypeUsage.html",
+            { "pkg/AnnotationTypeUsage.html",
                 "<pre><a href=\"../pkg/AnnotationType.html\" " +
                 "title=\"annotation in pkg\">@AnnotationType</a>(" +
                 "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>" +
@@ -235,7 +231,7 @@
                 "public&nbsp;int field</pre>"},
 
             //CONSTRUCTOR
-            {BUG_ID + "/pkg/AnnotationTypeUsage.html",
+            { "pkg/AnnotationTypeUsage.html",
                 "<pre><a href=\"../pkg/AnnotationType.html\" " +
                 "title=\"annotation in pkg\">@AnnotationType</a>(" +
                 "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>" +
@@ -245,7 +241,7 @@
                 "public&nbsp;AnnotationTypeUsage()</pre>"},
 
             //METHOD
-            {BUG_ID + "/pkg/AnnotationTypeUsage.html",
+            { "pkg/AnnotationTypeUsage.html",
                 "<pre><a href=\"../pkg/AnnotationType.html\" " +
                 "title=\"annotation in pkg\">@AnnotationType</a>(" +
                 "<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>" +
@@ -255,7 +251,7 @@
                 "public&nbsp;void&nbsp;method()</pre>"},
 
             //METHOD PARAMS
-            {BUG_ID + "/pkg/AnnotationTypeUsage.html",
+            { "pkg/AnnotationTypeUsage.html",
                 "<pre>public&nbsp;void&nbsp;methodWithParams(" +
                 "<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
                 "@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">" +
@@ -265,7 +261,7 @@
                 "                             int&nbsp;undocmented)</pre>"},
 
             //CONSTRUCTOR PARAMS
-            {BUG_ID + "/pkg/AnnotationTypeUsage.html",
+            { "pkg/AnnotationTypeUsage.html",
                 "<pre>public&nbsp;AnnotationTypeUsage(<a " +
                 "href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
                 "@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">" +
@@ -279,59 +275,59 @@
             //=================================
 
             //Integer
-            {BUG_ID + "/pkg1/B.html",
+            { "pkg1/B.html",
                 "<a href=\"../pkg1/A.html#d--\">d</a>=3.14,"},
 
             //Double
-            {BUG_ID + "/pkg1/B.html",
+            { "pkg1/B.html",
                 "<a href=\"../pkg1/A.html#d--\">d</a>=3.14,"},
 
             //Boolean
-            {BUG_ID + "/pkg1/B.html",
+            { "pkg1/B.html",
                 "<a href=\"../pkg1/A.html#b--\">b</a>=true,"},
 
             //String
-            {BUG_ID + "/pkg1/B.html",
+            { "pkg1/B.html",
                 "<a href=\"../pkg1/A.html#s--\">s</a>=\"sigh\","},
 
             //Class
-            {BUG_ID + "/pkg1/B.html",
+            { "pkg1/B.html",
                 "<a href=\"../pkg1/A.html#c--\">c</a>=<a href=\"../pkg2/Foo.html\" title=\"class in pkg2\">Foo.class</a>,"},
 
             //Bounded Class
-            {BUG_ID + "/pkg1/B.html",
+            { "pkg1/B.html",
                 "<a href=\"../pkg1/A.html#w--\">w</a>=<a href=\"../pkg/TypeParameterSubClass.html\" title=\"class in pkg\">TypeParameterSubClass.class</a>,"},
 
             //Enum
-            {BUG_ID + "/pkg1/B.html",
+            { "pkg1/B.html",
                 "<a href=\"../pkg1/A.html#e--\">e</a>=<a href=\"../pkg/Coin.html#Penny\">Penny</a>,"},
 
             //Annotation Type
-            {BUG_ID + "/pkg1/B.html",
+            { "pkg1/B.html",
                 "<a href=\"../pkg1/A.html#a--\">a</a>=<a href=\"../pkg/AnnotationType.html\" title=\"annotation in pkg\">@AnnotationType</a>(<a href=\"../pkg/AnnotationType.html#optional--\">optional</a>=\"foo\",<a href=\"../pkg/AnnotationType.html#required--\">required</a>=1994),"},
 
             //String Array
-            {BUG_ID + "/pkg1/B.html",
+            { "pkg1/B.html",
                 "<a href=\"../pkg1/A.html#sa--\">sa</a>={\"up\",\"down\"},"},
 
             //Primitive
-            {BUG_ID + "/pkg1/B.html",
+            { "pkg1/B.html",
                 "<a href=\"../pkg1/A.html#primitiveClassTest--\">primitiveClassTest</a>=boolean.class,"},
 
             //XXX:  Add array test case after this if fixed:
             //5020899: Incorrect internal representation of class-valued annotation elements
 
             //Make sure that annotations are surrounded by <pre> and </pre>
-            {BUG_ID + "/pkg1/B.html",
+            { "pkg1/B.html",
                 "<pre><a href=\"../pkg1/A.html\" title=\"annotation in pkg1\">@A</a>"},
-            {BUG_ID + "/pkg1/B.html",
+            { "pkg1/B.html",
                 "public interface <span class=\"typeNameLabel\">B</span></pre>"},
 
 
             //==============================================================
             // Handle multiple bounds.
             //==============================================================
-            {BUG_ID + "/pkg/MultiTypeParameters.html",
+            { "pkg/MultiTypeParameters.html",
                 "public&nbsp;&lt;T extends java.lang.Number &amp; java.lang.Runnable&gt;&nbsp;T&nbsp;foo(T&nbsp;t)"},
 
             //==============================================================
@@ -339,79 +335,79 @@
             //==============================================================
 
             //ClassUseTest1: <T extends Foo & Foo2>
-            {BUG_ID + "/pkg2/class-use/Foo.html",
+            { "pkg2/class-use/Foo.html",
                      "<caption><span>Classes in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> with type parameters of " +
                      "type <a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">" +
                      "Foo</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo.html",
+            { "pkg2/class-use/Foo.html",
                      "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest1.html\" " +
                      "title=\"class in pkg2\">ClassUseTest1</a>&lt;T extends " +
                      "<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo" +
                      "</a> &amp; <a href=\"../../pkg2/Foo2.html\" title=\"interface in pkg2\">" +
                      "Foo2</a>&gt;</span></code>&nbsp;</td>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo.html",
+            { "pkg2/class-use/Foo.html",
                      "<caption><span>Methods in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> with type parameters of " +
                      "type <a href=\"../../pkg2/Foo.html\" title=\"class in " +
                      "pkg2\">Foo</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo.html",
+            { "pkg2/class-use/Foo.html",
                      "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest1." +
                      "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/" +
                      "ClassUseTest1.html#method-T-\">method</a></span>" +
                      "(T&nbsp;t)</code>&nbsp;</td>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo.html",
+            { "pkg2/class-use/Foo.html",
                      "<caption><span>Fields in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> with type parameters of " +
                      "type <a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">" +
                      "Foo</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo.html",
+            { "pkg2/class-use/Foo.html",
                      "td class=\"colFirst\"><code><a href=\"../../pkg2/" +
                      "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>" +
                      "&lt;<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\"" +
                      ">Foo</a>&gt;</code></td>"
             },
 
-            {BUG_ID + "/pkg2/class-use/ParamTest.html",
+            { "pkg2/class-use/ParamTest.html",
                      "<caption><span>Fields in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> declared as <a href=\"../" +
                      "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest" +
                      "</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/ParamTest.html",
+            { "pkg2/class-use/ParamTest.html",
                      "<td class=\"colFirst\"><code><a href=\"../../pkg2/" +
                      "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>&lt;<a " +
                      "href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo</a" +
                      ">&gt;</code></td>"
             },
 
-           {BUG_ID + "/pkg2/class-use/Foo2.html",
+           { "pkg2/class-use/Foo2.html",
                     "<caption><span>Classes in <a href=\"../../pkg2/" +
                     "package-summary.html\">pkg2</a> with type parameters of " +
                     "type <a href=\"../../pkg2/Foo2.html\" title=\"interface " +
                     "in pkg2\">Foo2</a></span><span class=\"tabEnd\">&nbsp;" +
                     "</span></caption>"
            },
-           {BUG_ID + "/pkg2/class-use/Foo2.html",
+           { "pkg2/class-use/Foo2.html",
                     "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest1.html\" " +
                      "title=\"class in pkg2\">ClassUseTest1</a>&lt;T extends " +
                      "<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">Foo" +
                      "</a> &amp; <a href=\"../../pkg2/Foo2.html\" title=\"interface in pkg2\">" +
                      "Foo2</a>&gt;</span></code>&nbsp;</td>"
            },
-           {BUG_ID + "/pkg2/class-use/Foo2.html",
+           { "pkg2/class-use/Foo2.html",
                     "<caption><span>Methods in <a href=\"../../pkg2/" +
                     "package-summary.html\">pkg2</a> with type parameters of " +
                     "type <a href=\"../../pkg2/Foo2.html\" title=\"interface " +
                     "in pkg2\">Foo2</a></span><span class=\"tabEnd\">&nbsp;" +
                     "</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo2.html",
+            { "pkg2/class-use/Foo2.html",
                      "<td class=\"colLast\"><span class=\"typeNameLabel\">" +
                      "ClassUseTest1.</span><code><span class=\"memberNameLink\"><a href=\"../../" +
                      "pkg2/ClassUseTest1.html#method-T-\">method</a></span>" +
@@ -419,53 +415,53 @@
             },
 
             //ClassUseTest2: <T extends ParamTest<Foo3>>
-            {BUG_ID + "/pkg2/class-use/ParamTest.html",
+            { "pkg2/class-use/ParamTest.html",
                      "<caption><span>Classes in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> with type parameters of " +
                      "type <a href=\"../../pkg2/ParamTest.html\" title=\"class " +
                      "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">" +
                      "&nbsp;</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/ParamTest.html",
+            { "pkg2/class-use/ParamTest.html",
                      "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest2.html\" " +
                      "title=\"class in pkg2\">ClassUseTest2</a>&lt;T extends " +
                      "<a href=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">" +
                      "ParamTest</a>&lt;<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">" +
                      "Foo3</a>&gt;&gt;</span></code>&nbsp;</td>"
             },
-            {BUG_ID + "/pkg2/class-use/ParamTest.html",
+            { "pkg2/class-use/ParamTest.html",
                      "<caption><span>Methods in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> with type parameters of " +
                      "type <a href=\"../../pkg2/ParamTest.html\" title=\"class " +
                      "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">" +
                      "&nbsp;</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/ParamTest.html",
+            { "pkg2/class-use/ParamTest.html",
                      "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest2." +
                      "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/" +
                      "ClassUseTest2.html#method-T-\">method</a></span>" +
                      "(T&nbsp;t)</code>&nbsp;</td>"
             },
-            {BUG_ID + "/pkg2/class-use/ParamTest.html",
+            { "pkg2/class-use/ParamTest.html",
                      "<caption><span>Fields in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> declared as <a href=\"../" +
                      "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest" +
                      "</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/ParamTest.html",
+            { "pkg2/class-use/ParamTest.html",
                      "<td class=\"colFirst\"><code><a href=\"../../pkg2/" +
                      "ParamTest.html\" title=\"class in pkg2\">ParamTest</a>" +
                      "&lt;<a href=\"../../pkg2/Foo.html\" title=\"class in pkg2\">" +
                      "Foo</a>&gt;</code></td>"
             },
-            {BUG_ID + "/pkg2/class-use/ParamTest.html",
+            { "pkg2/class-use/ParamTest.html",
                      "<caption><span>Methods in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> with type parameters of " +
                      "type <a href=\"../../pkg2/ParamTest.html\" title=\"class " +
                      "in pkg2\">ParamTest</a></span><span class=\"tabEnd\">" +
                      "&nbsp;</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/ParamTest.html",
+            { "pkg2/class-use/ParamTest.html",
                      "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../" +
                      "../pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest" +
                      "</a>&lt;<a href=\"../../pkg2/Foo3.html\" title=\"class in " +
@@ -475,40 +471,40 @@
                      "pkg2\">Foo3</a>&gt;</code></td>"
             },
 
-            {BUG_ID + "/pkg2/class-use/Foo3.html",
+            { "pkg2/class-use/Foo3.html",
                      "<caption><span>Classes in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> with type parameters of " +
                      "type <a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">" +
                      "Foo3</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo3.html",
+            { "pkg2/class-use/Foo3.html",
                      "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest2.html\" " +
                      "title=\"class in pkg2\">ClassUseTest2</a>&lt;T extends " +
                      "<a href=\"../../pkg2/ParamTest.html\" title=\"class in pkg2\">" +
                      "ParamTest</a>&lt;<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">" +
                      "Foo3</a>&gt;&gt;</span></code>&nbsp;</td>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo3.html",
+            { "pkg2/class-use/Foo3.html",
                      "<caption><span>Methods in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> with type parameters of " +
                      "type <a href=\"../../pkg2/Foo3.html\" title=\"class in " +
                      "pkg2\">Foo3</a></span><span class=\"tabEnd\">&nbsp;" +
                      "</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo3.html",
+            { "pkg2/class-use/Foo3.html",
                      "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest2." +
                      "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/" +
                      "ClassUseTest2.html#method-T-\">method</a></span>" +
                      "(T&nbsp;t)</code>&nbsp;</td>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo3.html",
+            { "pkg2/class-use/Foo3.html",
                      "<caption><span>Methods in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> that return types with " +
                      "arguments of type <a href=\"../../pkg2/Foo3.html\" title" +
                      "=\"class in pkg2\">Foo3</a></span><span class=\"tabEnd\">" +
                      "&nbsp;</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo3.html",
+            { "pkg2/class-use/Foo3.html",
                      "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../../" +
                      "pkg2/ParamTest.html\" title=\"class in pkg2\">ParamTest</a>&lt;" +
                      "<a href=\"../../pkg2/Foo3.html\" title=\"class in pkg2\">Foo3" +
@@ -518,14 +514,14 @@
             },
 
             //ClassUseTest3: <T extends ParamTest2<List<? extends Foo4>>>
-            {BUG_ID + "/pkg2/class-use/ParamTest2.html",
+            { "pkg2/class-use/ParamTest2.html",
                      "<caption><span>Classes in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> with type parameters of " +
                      "type <a href=\"../../pkg2/ParamTest2.html\" title=\"class " +
                      "in pkg2\">ParamTest2</a></span><span class=\"tabEnd\">" +
                      "&nbsp;</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/ParamTest2.html",
+            { "pkg2/class-use/ParamTest2.html",
                      "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3.html\" " +
                      "title=\"class in pkg2\">ClassUseTest3</a>&lt;T extends " +
                      "<a href=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
@@ -533,19 +529,19 @@
                      "<a href=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" +
                      "Foo4</a>&gt;&gt;&gt;</span></code>&nbsp;</td>"
             },
-            {BUG_ID + "/pkg2/class-use/ParamTest2.html",
+            { "pkg2/class-use/ParamTest2.html",
                      "<caption><span>Methods in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> with type parameters of " +
                      "type <a href=\"../../pkg2/ParamTest2.html\" title=\"class " +
                      "in pkg2\">ParamTest2</a></span><span class=\"tabEnd\">" +
                      "&nbsp;</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/ParamTest2.html",
+            { "pkg2/class-use/ParamTest2.html",
                      "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest3" +
                      ".</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3." +
                      "html#method-T-\">method</a></span>(T&nbsp;t)</code>&nbsp;</td>"
             },
-            {BUG_ID + "/pkg2/class-use/ParamTest2.html",
+            { "pkg2/class-use/ParamTest2.html",
                      "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../" +
                      "../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
                      "ParamTest2</a>&lt;java.util.List&lt;? extends <a href=\".." +
@@ -556,14 +552,14 @@
                      "class in pkg2\">Foo4</a>&gt;&gt;</code></td>"
             },
 
-            {BUG_ID + "/pkg2/class-use/Foo4.html",
+            { "pkg2/class-use/Foo4.html",
                      "<caption><span>Classes in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> with type parameters of " +
                      "type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
                      "pkg2\">Foo4</a></span><span class=\"tabEnd\">&nbsp;" +
                      "</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo4.html",
+            { "pkg2/class-use/Foo4.html",
                      "<td class=\"colLast\"><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3.html\" " +
                      "title=\"class in pkg2\">ClassUseTest3</a>&lt;T extends " +
                      "<a href=\"../../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
@@ -571,26 +567,26 @@
                      "<a href=\"../../pkg2/Foo4.html\" title=\"class in pkg2\">" +
                      "Foo4</a>&gt;&gt;&gt;</span></code>&nbsp;</td>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo4.html",
+            { "pkg2/class-use/Foo4.html",
                      "<caption><span>Methods in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> with type parameters of " +
                      "type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
                      "pkg2\">Foo4</a></span><span class=\"tabEnd\">&nbsp;</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo4.html",
+            { "pkg2/class-use/Foo4.html",
                      "<td class=\"colLast\"><span class=\"typeNameLabel\">ClassUseTest3." +
                      "</span><code><span class=\"memberNameLink\"><a href=\"../../pkg2/ClassUseTest3." +
                      "html#method-T-\">method</a></span>(T&nbsp;t)</code>" +
                      "&nbsp;</td>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo4.html",
+            { "pkg2/class-use/Foo4.html",
                      "<caption><span>Methods in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> that return types with " +
                      "arguments of type <a href=\"../../pkg2/Foo4.html\" " +
                      "title=\"class in pkg2\">Foo4</a></span><span class=\"" +
                      "tabEnd\">&nbsp;</span></caption>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo4.html",
+            { "pkg2/class-use/Foo4.html",
                      "<td class=\"colFirst\"><code>&lt;T extends <a href=\"../" +
                      "../pkg2/ParamTest2.html\" title=\"class in pkg2\">" +
                      "ParamTest2</a>&lt;java.util.List&lt;? extends <a href=\".." +
@@ -602,7 +598,7 @@
             },
 
             //Type parameters in constructor and method args
-            {BUG_ID + "/pkg2/class-use/Foo4.html",
+            { "pkg2/class-use/Foo4.html",
                      "<caption><span>Method parameters in <a href=\"../../pkg2/" +
                      "package-summary.html\">pkg2</a> with type arguments of " +
                      "type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
@@ -623,7 +619,7 @@
                      "</tr>\n" +
                      "</tbody>"
             },
-            {BUG_ID + "/pkg2/class-use/Foo4.html",
+            { "pkg2/class-use/Foo4.html",
                      "<caption><span>Constructor parameters in <a href=\"../../" +
                      "pkg2/package-summary.html\">pkg2</a> with type arguments " +
                      "of type <a href=\"../../pkg2/Foo4.html\" title=\"class in " +
@@ -634,14 +630,14 @@
             //=================================
             // Annotatation Type Usage
             //=================================
-            {BUG_ID + "/pkg/class-use/AnnotationType.html",
+            { "pkg/class-use/AnnotationType.html",
                      "<caption><span>Packages with annotations of type <a href=\"" +
                      "../../pkg/AnnotationType.html\" title=\"annotation in pkg\">" +
                      "AnnotationType</a></span><span class=\"tabEnd\">&nbsp;" +
                      "</span></caption>"
             },
 
-            {BUG_ID + "/pkg/class-use/AnnotationType.html",
+            { "pkg/class-use/AnnotationType.html",
                      "<caption><span>Classes in <a href=\"../../pkg/" +
                      "package-summary.html\">pkg</a> with annotations of type " +
                      "<a href=\"../../pkg/AnnotationType.html\" title=\"" +
@@ -649,7 +645,7 @@
                      "=\"tabEnd\">&nbsp;</span></caption>"
             },
 
-            {BUG_ID + "/pkg/class-use/AnnotationType.html",
+            { "pkg/class-use/AnnotationType.html",
                      "<caption><span>Fields in <a href=\"../../pkg/" +
                      "package-summary.html\">pkg</a> with annotations of type " +
                      "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
@@ -657,7 +653,7 @@
                      "&nbsp;</span></caption>"
             },
 
-            {BUG_ID + "/pkg/class-use/AnnotationType.html",
+            { "pkg/class-use/AnnotationType.html",
                      "<caption><span>Methods in <a href=\"../../pkg/" +
                      "package-summary.html\">pkg</a> with annotations of type " +
                      "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
@@ -665,7 +661,7 @@
                      "&nbsp;</span></caption>"
             },
 
-            {BUG_ID + "/pkg/class-use/AnnotationType.html",
+            { "pkg/class-use/AnnotationType.html",
                      "<caption><span>Method parameters in <a href=\"../../pkg/" +
                      "package-summary.html\">pkg</a> with annotations of type " +
                      "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
@@ -673,7 +669,7 @@
                      "&nbsp;</span></caption>"
             },
 
-            {BUG_ID + "/pkg/class-use/AnnotationType.html",
+            { "pkg/class-use/AnnotationType.html",
                      "<caption><span>Constructors in <a href=\"../../pkg/" +
                      "package-summary.html\">pkg</a> with annotations of type " +
                      "<a href=\"../../pkg/AnnotationType.html\" title=\"annotation " +
@@ -681,7 +677,7 @@
                      "&nbsp;</span></caption>"
             },
 
-            {BUG_ID + "/pkg/class-use/AnnotationType.html",
+            { "pkg/class-use/AnnotationType.html",
                      "<caption><span>Constructor parameters in <a href=\"../../" +
                      "pkg/package-summary.html\">pkg</a> with annotations of " +
                      "type <a href=\"../../pkg/AnnotationType.html\" title=\"" +
@@ -692,14 +688,14 @@
             //=================================
             // TYPE PARAMETER IN INDEX
             //=================================
-            {BUG_ID + "/index-all.html",
+            { "index-all.html",
                 "<span class=\"memberNameLink\"><a href=\"pkg2/Foo.html#method-java.util.Vector-\">" +
                 "method(Vector&lt;Object&gt;)</a></span>"
             },
             //=================================
             // TYPE PARAMETER IN INDEX
             //=================================
-            {BUG_ID + "/index-all.html",
+            { "index-all.html",
                 "<span class=\"memberNameLink\"><a href=\"pkg2/Foo.html#method-java.util.Vector-\">" +
                 "method(Vector&lt;Object&gt;)</a></span>"
             },
@@ -709,12 +705,12 @@
         // ENUM TESTING
         //=================================
         //NO constructor section
-        {BUG_ID + "/pkg/Coin.html", "<h3>Constructor Summary</h3>"},
+        { "pkg/Coin.html", "<h3>Constructor Summary</h3>"},
         //=================================
         // TYPE PARAMETER TESTING
         //=================================
         //No type parameters in class frame.
-        {BUG_ID + "/allclasses-frame.html",
+        { "allclasses-frame.html",
             "<a href=\"../pkg/TypeParameters.html\" title=\"class in pkg\">" +
                     "TypeParameters</a>&lt;<a href=\"../pkg/TypeParameters.html\" " +
                     "title=\"type parameter in TypeParameters\">E</a>&gt;"
@@ -725,25 +721,25 @@
         //===============================================================
 
         //CLASS
-        {BUG_ID + "/pkg/AnnotationTypeUsage.html",
+        { "pkg/AnnotationTypeUsage.html",
             "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Class Annotation\",\n" +
             "                <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n" +
             "public class <span class=\"typeNameLabel\">AnnotationTypeUsage</span></dt><dt>extends java.lang.Object</dt>"},
 
         //FIELD
-        {BUG_ID + "/pkg/AnnotationTypeUsage.html",
+        { "pkg/AnnotationTypeUsage.html",
             "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Field Annotation\",\n" +
             "                <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n" +
             "public int <span class=\"memberNameLabel\">field</span>"},
 
         //CONSTRUCTOR
-        {BUG_ID + "/pkg/AnnotationTypeUsage.html",
+        { "pkg/AnnotationTypeUsage.html",
             "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Constructor Annotation\",\n" +
             "                <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n" +
             "public <span class=\"typeNameLabel\">AnnotationTypeUsage</span>()"},
 
         //METHOD
-        {BUG_ID + "/pkg/AnnotationTypeUsage.html",
+        { "pkg/AnnotationTypeUsage.html",
             "<a href=\"../pkg/AnnotationTypeUndocumented.html\" title=\"annotation in pkg\">@AnnotationTypeUndocumented</a>(<a href=\"../pkg/AnnotationType.html#optional\">optional</a>=\"Method Annotation\",\n" +
             "                <a href=\"../pkg/AnnotationType.html#required\">required</a>=1994)\n" +
             "public void <span class=\"memberNameLabel\">method</span>()"},
@@ -763,21 +759,7 @@
      */
     public static void main(String[] args) {
         TestNewLanguageFeatures tester = new TestNewLanguageFeatures();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testNoPackagesFile/TestNoPackagesFile.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testNoPackagesFile/TestNoPackagesFile.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,12 +35,9 @@
 
 public class TestNoPackagesFile extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4475679";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR,
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
         SRC_DIR + "/C.java"
     };
 
@@ -50,25 +47,11 @@
      */
     public static void main(String[] args) {
         TestNoPackagesFile tester = new TestNoPackagesFile();
-        run(tester, ARGS, NO_TEST, NO_TEST);
-        if ((new java.io.File(BUG_ID + "/packages.html")).exists()) {
+        tester.run(ARGS, NO_TEST, NO_TEST);
+        if ((new java.io.File(OUTPUT_DIR + "/packages.html")).exists()) {
             throw new Error("Test Fails: packages file should not be " +                "generated anymore.");
         } else {
             System.out.println("Test passes:  packages.html not found.");
         }
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testNonFrameWarning/TestNonFrameWarning.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testNonFrameWarning/TestNonFrameWarning.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,16 +33,15 @@
 
 public class TestNonFrameWarning extends JavadocTester {
 
-    private static final String BUG_ID = "7001086";
     private static final String[][] TEST = {
-        {BUG_ID + "/index.html",
+        { "index.html",
             "<p>This document is designed to be viewed using the frames feature. " +
             "If you see this message, you are using a non-frame-capable web client. " +
             "Link to <a href=\"pkg/package-summary.html\">Non-frame version</a>.</p>"
         }
     };
     private static final String[] ARGS = new String[]{
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     /**
@@ -51,21 +50,7 @@
      */
     public static void main(String[] args) {
         TestNonFrameWarning tester = new TestNonFrameWarning();
-        run(tester, ARGS, TEST, NO_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testNotifications/TestNotifications.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testNotifications/TestNotifications.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,12 +36,9 @@
 
 public class TestNotifications extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4657239";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     private static final String[] ARGS2 = new String[] {
@@ -50,10 +47,10 @@
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {NOTICE_OUTPUT, "Creating destination directory: \"4657239"}
+        {NOTICE_OUTPUT, "Creating destination directory: \"" + OUTPUT_DIR}
     };
     private static final String[][] NEGATED_TEST = {
-        {NOTICE_OUTPUT, "Creating destination directory: \"4657239"}
+        {NOTICE_OUTPUT, "Creating destination directory: \"" + OUTPUT_DIR}
     };
 
     private static final String[][] NEGATED_TEST2 = {
@@ -67,26 +64,12 @@
     public static void main(String[] args) {
         TestNotifications tester = new TestNotifications();
         // Notify that the destination directory must be created.
-        run(tester, ARGS, TEST, NO_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         // No need to notify that the destination must be created because
         // it already exists.
-        run(tester, ARGS, NO_TEST, NEGATED_TEST);
+        tester.run(ARGS, NO_TEST, NEGATED_TEST);
         //Make sure classname is not include in javadoc usage message.
-        run(tester, ARGS2, NO_TEST, NEGATED_TEST2);
+        tester.run(ARGS2, NO_TEST, NEGATED_TEST2);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testOptions/TestOptions.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testOptions/TestOptions.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,46 +33,27 @@
 
 public class TestOptions extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4749567";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-header", "Test header", "-footer", "Test footer",
+        "-d", OUTPUT_DIR, "-header", "Test header", "-footer", "Test footer",
         "-sourcepath", SRC_DIR, "pkg"
     };
 
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/package-summary.html",
+        { "pkg/package-summary.html",
             "<div class=\"aboutLanguage\">Test header</div>"},
-        {BUG_ID + "/pkg/package-summary.html",
+        { "pkg/package-summary.html",
             "<div class=\"aboutLanguage\">Test footer</div>"}
     };
 
-    private static final String[][] NEGATED_TEST = NO_TEST;
-
     /**
      * The entry point of the test.
      * @param args the array of command line arguments.
      */
     public static void main(String[] args) {
         TestOptions tester = new TestOptions();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
 
--- a/langtools/test/com/sun/javadoc/testOverridenMethods/TestMultiInheritence.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testOverridenMethods/TestMultiInheritence.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,29 +35,26 @@
 
 public class TestMultiInheritence extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4933335";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg3"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg3"
     };
 
     //Method foo() is inherited from BOTH I2 and I3
     private static final String[][] TEST = {
-       {BUG_ID + "/pkg3/I1.html",
+       { "pkg3/I1.html",
         "Methods inherited from interface&nbsp;pkg3." +
                 "<a href=\"../pkg3/I2.html\" title=\"interface in pkg3\">" +
                 "I2</a>"},
-        {BUG_ID + "/pkg3/I1.html",
+        { "pkg3/I1.html",
         "Methods inherited from interface&nbsp;pkg3." +
                  "<a href=\"../pkg3/I3.html\" title=\"interface in pkg3\">" +
                  "I3</a>"},
-        {BUG_ID + "/pkg3/I0.html",
+        { "pkg3/I0.html",
         "Methods inherited from interface&nbsp;pkg3." +
                  "<a href=\"../pkg3/I2.html\" title=\"interface in pkg3\">" +
                  "I2</a>"},
-        {BUG_ID + "/pkg3/I0.html",
+        { "pkg3/I0.html",
         "Methods inherited from interface&nbsp;pkg3." +
                  "<a href=\"../pkg3/I3.html\" title=\"interface in pkg3\">" +
                  "I3</a>"},
@@ -66,11 +63,11 @@
     //Method foo() is NOT inherited from I4 because it is overriden by
     //I3.
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg3/I1.html",
+        { "pkg3/I1.html",
         "Methods inherited from interface&nbsp;pkg3." +
                  "<a href=\"../pkg3/I4.html\" title=\"interface in pkg3\">" +
                  "I4</a>"},
-        {BUG_ID + "/pkg3/I0.html",
+        { "pkg3/I0.html",
         "Methods inherited from interface&nbsp;pkg3." +
                  "<a href=\"../pkg3/I4.html\" title=\"interface in pkg3\">" +
                  "I4</a>"},
@@ -82,21 +79,7 @@
      */
     public static void main(String[] args) {
         TestMultiInheritence tester = new TestMultiInheritence();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenMethodDocCopy.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,23 +35,19 @@
 
 public class TestOverridenMethodDocCopy extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4368820";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1", "pkg2"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1", "pkg2"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg1/SubClass.html",
+        { "pkg1/SubClass.html",
             "<span class=\"descfrmTypeLabel\">Description copied from class:&nbsp;<code>" +
             "<a href=\"../pkg1/BaseClass.html#overridenMethodWithDocsToCopy--\">" +
             "BaseClass</a></code></span>"
         }
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -59,21 +55,7 @@
      */
     public static void main(String[] args) {
         TestOverridenMethodDocCopy tester = new TestOverridenMethodDocCopy();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethods.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,16 +35,14 @@
 
 public class TestOverridenPrivateMethods extends JavadocTester {
 
-    private static final String BUG_ID = "4634891";
-
     private static final String[][] TEST = {
         //The public method should be overriden
-        {BUG_ID + "/pkg1/SubClass.html",
+        { "pkg1/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"},
 
         //The public method in different package should be overriden
-        {BUG_ID + "/pkg2/SubClass.html",
+        { "pkg2/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"}
     };
@@ -53,29 +51,29 @@
 
         //The package private method should be overriden since the base and sub class are in the same
         //package.  However, the link should not show up because the package private methods are not documented.
-        {BUG_ID + "/pkg1/SubClass.html",
+        { "pkg1/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"},
 
         //The private method in should not be overriden
-        {BUG_ID + "/pkg1/SubClass.html",
+        { "pkg1/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
 
         //The private method in different package should not be overriden
-        {BUG_ID + "/pkg2/SubClass.html",
+        { "pkg2/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
 
         //The package private method should not be overriden since the base and sub class are in
         //different packages.
-        {BUG_ID + "/pkg2/SubClass.html",
+        { "pkg2/SubClass.html",
          "Overrides:</span></dt><dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"}
     };
 
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1", "pkg2"};
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1", "pkg2"};
 
     /**
      * The entry point of the test.
@@ -83,21 +81,7 @@
      */
     public static void main(String[] args) {
         TestOverridenPrivateMethods tester = new TestOverridenPrivateMethods();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPackageFlag.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,18 +35,16 @@
 
 public class TestOverridenPrivateMethodsWithPackageFlag extends JavadocTester {
 
-    private static final String BUG_ID = "4634891";
-
     private static final String[][] TEST = {
         //The public method should be overriden
-        {BUG_ID + "/pkg1/SubClass.html",
+        { "pkg1/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod--\">" +
                  "publicMethod</a></code>&nbsp;in class&nbsp;<code>" +
                  "<a href=\"../pkg1/BaseClass.html\" title=\"class in pkg1\">BaseClass</a></code></dd>"},
 
         //The public method in different package should be overriden
-        {BUG_ID + "/pkg2/SubClass.html",
+        { "pkg2/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod--\">" +
                  "publicMethod</a></code>&nbsp;in class&nbsp;<code>" +
@@ -54,7 +52,7 @@
 
         //The package private method should be overriden since the base and sub class are in the same
         //package.
-        {BUG_ID + "/pkg1/SubClass.html",
+        { "pkg1/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod--\">" +
                  "packagePrivateMethod</a></code>&nbsp;in class&nbsp;<code>" +
@@ -64,25 +62,25 @@
     private static final String[][] NEGATED_TEST = {
 
         //The private method in should not be overriden
-        {BUG_ID + "/pkg1/SubClass.html",
+        { "pkg1/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod()\">"},
 
         //The private method in different package should not be overriden
-        {BUG_ID + "/pkg2/SubClass.html",
+        { "pkg2/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod()\">"},
 
         //The package private method should not be overriden since the base and sub class are in
         //different packages.
-        {BUG_ID + "/pkg2/SubClass.html",
+        { "pkg2/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod()\">"},
     };
 
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR, "-package", "pkg1", "pkg2"};
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-package", "pkg1", "pkg2"};
 
     /**
      * The entry point of the test.
@@ -90,21 +88,7 @@
      */
     public static void main(String[] args) {
         TestOverridenPrivateMethodsWithPackageFlag tester = new TestOverridenPrivateMethodsWithPackageFlag();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testOverridenMethods/TestOverridenPrivateMethodsWithPrivateFlag.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,22 +35,20 @@
 
 public class TestOverridenPrivateMethodsWithPrivateFlag extends JavadocTester {
 
-    private static final String BUG_ID = "4634891";
-
     private static final String[][] TEST = {
         //The public method should be overriden
-        {BUG_ID + "/pkg1/SubClass.html",
+        { "pkg1/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"},
 
         //The package private method should be overriden since the base and sub class are in the same
         //package.
-        {BUG_ID + "/pkg1/SubClass.html",
+        { "pkg1/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"},
 
         //The public method in different package should be overriden
-        {BUG_ID + "/pkg2/SubClass.html",
+        { "pkg2/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#publicMethod"},
     };
@@ -58,18 +56,18 @@
     private static final String[][] NEGATED_TEST = {
 
         //The private method in should not be overriden
-        {BUG_ID + "/pkg1/SubClass.html",
+        { "pkg1/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
 
         //The private method in different package should not be overriden
-        {BUG_ID + "/pkg2/SubClass.html",
+        { "pkg2/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#privateMethod"},
 
         //The package private method should not be overriden since the base and sub class are in
         //different packages.
-        {BUG_ID + "/pkg2/SubClass.html",
+        { "pkg2/SubClass.html",
          "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
                  "<dd><code><a href=\"../pkg1/BaseClass.html#packagePrivateMethod"}
 
@@ -78,7 +76,7 @@
 
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR, "-private", "pkg1", "pkg2"};
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-private", "pkg1", "pkg2"};
 
     /**
      * The entry point of the test.
@@ -86,21 +84,7 @@
      */
     public static void main(String[] args) {
         TestOverridenPrivateMethodsWithPrivateFlag tester = new TestOverridenPrivateMethodsWithPrivateFlag();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testPackageDeprecation/TestPackageDeprecation.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testPackageDeprecation/TestPackageDeprecation.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,35 +33,30 @@
 
 public class TestPackageDeprecation extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "6492694";
-
     //Javadoc arguments.
     private static final String[] ARGS1 = new String[]{
-        "-d", BUG_ID + "-1", "-sourcepath", SRC_DIR, "-use", "pkg", "pkg1",
+        "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "-use", "pkg", "pkg1",
         SRC_DIR + "/C2.java", SRC_DIR + "/FooDepr.java"
     };
     private static final String[] ARGS2 = new String[]{
-        "-d", BUG_ID + "-2", "-sourcepath", SRC_DIR, "-use", "-nodeprecated",
+        "-d", OUTPUT_DIR + "-2", "-sourcepath", SRC_DIR, "-use", "-nodeprecated",
         "pkg", "pkg1", SRC_DIR + "/C2.java", SRC_DIR + "/FooDepr.java"
     };
 
     //Input for string search tests.
     private static final String[][] TEST1 = {
-        {BUG_ID + "-1/pkg1/package-summary.html",
+        { "pkg1/package-summary.html",
             "<div class=\"deprecatedContent\"><span class=\"deprecatedLabel\">Deprecated.</span>\n" +
             "<div class=\"block\"><span class=\"deprecationComment\">This package is Deprecated." +
             "</span></div>"
         },
-        {BUG_ID + "-1/deprecated-list.html",
+        { "deprecated-list.html",
             "<li><a href=\"#package\">Deprecated Packages</a></li>"
         }
     };
-    private static final String[][] TEST2 = NO_TEST;
-    private static final String[][] NEGATED_TEST1 = NO_TEST;
     private static final String[][] NEGATED_TEST2 = {
-        {BUG_ID + "-2/overview-summary.html", "pkg1"},
-        {BUG_ID + "-2/allclasses-frame.html", "FooDepr"}
+        { "overview-summary.html", "pkg1"},
+        { "allclasses-frame.html", "FooDepr"}
     };
 
     /**
@@ -70,16 +65,16 @@
      */
     public static void main(String[] args) {
         TestPackageDeprecation tester = new TestPackageDeprecation();
-        run(tester, ARGS1, TEST1, NEGATED_TEST1);
-        run(tester, ARGS2, TEST2, NEGATED_TEST2);
-        if ((new java.io.File(BUG_ID + "-2/pkg1/" +
+        tester.run(ARGS1, TEST1, NO_TEST);
+        tester.run(ARGS2, NO_TEST, NEGATED_TEST2);
+        if ((new java.io.File(OUTPUT_DIR + "-2/pkg1/" +
                 "package-summary.html")).exists()) {
             throw new Error("Test Fails: packages summary should not be" +
                     "generated for deprecated package.");
         } else {
             System.out.println("Test passes:  package-summary.html not found.");
         }
-        if ((new java.io.File(BUG_ID + "-2/FooDepr.html")).exists()) {
+        if ((new java.io.File(OUTPUT_DIR + "-2/FooDepr.html")).exists()) {
             throw new Error("Test Fails: FooDepr should not be" +
                     "generated as it is deprecated.");
         } else {
@@ -87,18 +82,4 @@
         }
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testPackagePage/TestPackagePage.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testPackagePage/TestPackagePage.java	Thu Apr 24 16:04:44 2014 -0700
@@ -36,51 +36,50 @@
 
 public class TestPackagePage extends JavadocTester {
 
-    private static final String BUG_ID = "4492643-4689286";
     private static final String[][] TEST1 = {
-        {BUG_ID + "-1/com/pkg/package-summary.html",
+        { "com/pkg/package-summary.html",
             "This is a package page."
         },
         //With just one package, all general pages link to the single package page.
-        {BUG_ID + "-1/com/pkg/C.html",
+        { "com/pkg/C.html",
             "<a href=\"../../com/pkg/package-summary.html\">Package</a>"
         },
-        {BUG_ID + "-1/com/pkg/package-tree.html",
+        { "com/pkg/package-tree.html",
             "<li><a href=\"../../com/pkg/package-summary.html\">Package</a></li>"
         },
-        {BUG_ID + "-1/deprecated-list.html",
+        { "deprecated-list.html",
             "<li><a href=\"com/pkg/package-summary.html\">Package</a></li>"
         },
-        {BUG_ID + "-1/index-all.html",
+        { "index-all.html",
             "<li><a href=\"com/pkg/package-summary.html\">Package</a></li>"
         },
-        {BUG_ID + "-1/help-doc.html",
+        { "help-doc.html",
             "<li><a href=\"com/pkg/package-summary.html\">Package</a></li>"
         },
     };
 
     private static final String[][] TEST2 = {
         //With multiple packages, there is no package link in general pages.
-        {BUG_ID + "-2/deprecated-list.html",
+        { "deprecated-list.html",
             "<li>Package</li>"
         },
-        {BUG_ID + "-2/index-all.html",
+        { "index-all.html",
             "<li>Package</li>"
         },
-        {BUG_ID + "-2/help-doc.html",
+        { "help-doc.html",
             "<li>Package</li>"
         },
     };
 
     private static final String[] ARGS1 =
         new String[] {
-            "-d", BUG_ID + "-1", "-sourcepath", SRC_DIR,
+            "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR,
             SRC_DIR + "/com/pkg/C.java"
         };
 
     private static final String[] ARGS2 =
         new String[] {
-            "-d", BUG_ID + "-2", "-sourcepath", SRC_DIR,
+            "-d", OUTPUT_DIR + "-2", "-sourcepath", SRC_DIR,
             "com.pkg", "pkg2"
         };
 
@@ -90,22 +89,8 @@
      */
     public static void main(String[] args) {
         TestPackagePage tester = new TestPackagePage();
-        run(tester, ARGS1, TEST1, NO_TEST);
-        run(tester, ARGS2, TEST2, NO_TEST);
+        tester.run(ARGS1, TEST1, NO_TEST);
+        tester.run(ARGS2, TEST2, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testParamTaglet/TestParamTaglet.java	Thu Apr 24 16:04:44 2014 -0700
@@ -36,24 +36,21 @@
 
 public class TestParamTaglet extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4802275-4967243";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
         //Regular param tags.
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<span class=\"paramLabel\">Parameters:</span></dt>\n" +
             "<dd><code>param1</code> - testing 1 2 3.</dd>\n" +
                 "<dd><code>param2</code> - testing 1 2 3."
         },
         //Param tags that don't match with any real parameters.
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<span class=\"paramLabel\">Parameters:</span></dt>\n" +
             "<dd><code><I>p1</I></code> - testing 1 2 3.</dd>\n" +
                 "<dd><code><I>p2</I></code> - testing 1 2 3."
@@ -62,12 +59,11 @@
         // Param is printed with nothing inherited.
         //XXX: in the future when Configuration is available during doc inheritence,
         //print a warning for this mistake.
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<code><I>inheritBug</I></code> -"
         },
 
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -75,21 +71,7 @@
      */
     public static void main(String[] args) {
         TestParamTaglet tester = new TestParamTaglet();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testPrivateClasses/TestPrivateClasses.java	Thu Apr 24 16:04:44 2014 -0700
@@ -44,46 +44,43 @@
 
 public class TestPrivateClasses extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4780441-4874845-4978816-8014017";
-
     //Javadoc arguments.
     private static final String[] ARGS1 = new String[] {
-        "-d", BUG_ID + "-1", "-sourcepath", SRC_DIR, "pkg", "pkg2"
+        "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "pkg", "pkg2"
     };
     private static final String[] ARGS2 = new String[] {
-        "-d", BUG_ID + "-2", "-sourcepath", SRC_DIR, "-private",
+        "-d", OUTPUT_DIR + "-2", "-sourcepath", SRC_DIR, "-private",
             "pkg", "pkg2"
     };
 
     // Test output when -private flag is not used.
     private static final String[][] TEST1 = {
         // Field inheritence from non-public superclass.
-        {BUG_ID + "-1/pkg/PublicChild.html",
+        { "pkg/PublicChild.html",
             "<a href=\"../pkg/PublicChild.html#fieldInheritedFromParent\">" +
                 "fieldInheritedFromParent</a>"
         },
 
         // Method inheritence from non-public superclass.
-        {BUG_ID + "-1/pkg/PublicChild.html",
+        { "pkg/PublicChild.html",
             "<a href=\"../pkg/PublicChild.html#methodInheritedFromParent-int-\">" +
                 "methodInheritedFromParent</a>"
         },
 
         // Field inheritence from non-public superinterface.
-        {BUG_ID + "-1/pkg/PublicInterface.html",
+        { "pkg/PublicInterface.html",
             "<a href=\"../pkg/PublicInterface.html#fieldInheritedFromInterface\">" +
                 "fieldInheritedFromInterface</a>"
         },
 
         // Method inheritence from non-public superinterface.
-        {BUG_ID + "-1/pkg/PublicInterface.html",
+        { "pkg/PublicInterface.html",
             "<a href=\"../pkg/PublicInterface.html#methodInterface-int-\">" +
                 "methodInterface</a>"
         },
 
         // private class does not show up in tree
-        {BUG_ID + "-1/pkg/PublicChild.html",
+        { "pkg/PublicChild.html",
             "<ul class=\"inheritance\">\n" +
             "<li>java.lang.Object</li>\n" +
             "<li>\n" +
@@ -95,19 +92,19 @@
         },
 
         // Method is documented as though it is declared in the inheriting method.
-        {BUG_ID + "-1/pkg/PublicChild.html",
+        { "pkg/PublicChild.html",
             "<pre>public&nbsp;void&nbsp;methodInheritedFromParent(int&nbsp;p1)"
         },
 
         //Make sure implemented interfaces from private superclass are inherited
-        {BUG_ID + "-1/pkg/PublicInterface.html",
+        { "pkg/PublicInterface.html",
             "<dl>\n" +
             "<dt>All Known Implementing Classes:</dt>\n" +
             "<dd><a href=\"../pkg/PublicChild.html\" title=\"class in pkg\">" +
             "PublicChild</a></dd>\n" +
             "</dl>"},
 
-        {BUG_ID + "-1/pkg/PublicChild.html",
+        { "pkg/PublicChild.html",
             "<dl>\n" +
             "<dt>All Implemented Interfaces:</dt>\n" +
             "<dd><a href=\"../pkg/PublicInterface.html\" title=\"interface in pkg\">" +
@@ -115,111 +112,111 @@
             "</dl>"},
 
         //Generic interface method test.
-        {BUG_ID + "-1/pkg2/C.html",
+        { "pkg2/C.html",
             "This comment should get copied to the implementing class"},
     };
     private static final String[][] NEGATED_TEST1 = {
        // Should not document that a method overrides method from private class.
-      {BUG_ID + "-1/pkg/PublicChild.html",
+      { "pkg/PublicChild.html",
         "<span class=\"overrideSpecifyLabel\">Overrides:</span>"},
       // Should not document that a method specified by private interface.
-      {BUG_ID + "-1/pkg/PublicChild.html",
+      { "pkg/PublicChild.html",
         "<span class=\"overrideSpecifyLabel\">Specified by:</span>"},
-      {BUG_ID + "-1/pkg/PublicInterface.html",
+      { "pkg/PublicInterface.html",
         "<span class=\"overrideSpecifyLabel\">Specified by:</span>"},
       // Should not mention that any documentation was copied.
-      {BUG_ID + "-1/pkg/PublicChild.html",
+      { "pkg/PublicChild.html",
         "Description copied from"},
-      {BUG_ID + "-1/pkg/PublicInterface.html",
+      { "pkg/PublicInterface.html",
         "Description copied from"},
       // Don't extend private classes or interfaces
-      {BUG_ID + "-1/pkg/PublicChild.html",
+      { "pkg/PublicChild.html",
         "PrivateParent"},
-      {BUG_ID + "-1/pkg/PublicInterface.html",
+      { "pkg/PublicInterface.html",
         "PrivateInterface"},
-      {BUG_ID + "-1/pkg/PublicChild.html",
+      { "pkg/PublicChild.html",
         "PrivateInterface"},
-      {BUG_ID + "-1/pkg/PublicInterface.html",
+      { "pkg/PublicInterface.html",
         "All Superinterfaces"},
       // Make inherited constant are documented correctly.
-      {BUG_ID + "-1/constant-values.html",
+      { "constant-values.html",
         "PrivateInterface"},
 
         //Do not inherit private interface method with generic parameters.
         //This method has been implemented.
-        {BUG_ID + "-1/pkg2/C.html",
+        { "pkg2/C.html",
             "<span class=\"memberNameLink\"><a href=\"../pkg2/I.html#hello-T-\">hello</a></span>"},
     };
 
     // Test output when -private flag is used.
     private static final String[][] TEST2 = {
         // Field inheritence from non-public superclass.
-        {BUG_ID + "-2/pkg/PublicChild.html",
+        { "pkg/PublicChild.html",
             "Fields inherited from class&nbsp;pkg." +
             "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
             "PrivateParent</a>"
         },
-        {BUG_ID + "-2/pkg/PublicChild.html",
+        { "pkg/PublicChild.html",
             "<a href=\"../pkg/PrivateParent.html#fieldInheritedFromParent\">" +
                 "fieldInheritedFromParent</a>"
         },
         // Field inheritence from non-public superinterface.
-        {BUG_ID + "-2/pkg/PublicInterface.html",
+        { "pkg/PublicInterface.html",
             "Fields inherited from interface&nbsp;pkg." +
             "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
             "PrivateInterface</a>"
         },
-        {BUG_ID + "-2/pkg/PublicInterface.html",
+        { "pkg/PublicInterface.html",
             "<a href=\"../pkg/PrivateInterface.html#fieldInheritedFromInterface\">" +
                 "fieldInheritedFromInterface</a>"
         },
         // Method inheritence from non-public superclass.
-        {BUG_ID + "-2/pkg/PublicChild.html",
+        { "pkg/PublicChild.html",
             "Methods inherited from class&nbsp;pkg." +
             "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
             "PrivateParent</a>"
         },
-        {BUG_ID + "-2/pkg/PublicChild.html",
+        { "pkg/PublicChild.html",
             "<a href=\"../pkg/PrivateParent.html#methodInheritedFromParent-int-\">" +
                 "methodInheritedFromParent</a>"
         },
         // Should document that a method overrides method from private class.
-       {BUG_ID + "-2/pkg/PublicChild.html",
+       { "pkg/PublicChild.html",
             "<dt><span class=\"overrideSpecifyLabel\">Overrides:</span></dt>\n" +
             "<dd><code><a href=\"../pkg/PrivateParent.html#methodOverridenFromParent-char:A-int-T-V-java.util.List-\">" +
             "methodOverridenFromParent</a></code>&nbsp;in class&nbsp;<code>" +
             "<a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
             "PrivateParent</a></code></dd>"},
        // Should document that a method is specified by private interface.
-       {BUG_ID + "-2/pkg/PublicChild.html",
+       { "pkg/PublicChild.html",
             "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n" +
             "<dd><code><a href=\"../pkg/PrivateInterface.html#methodInterface-int-\">" +
             "methodInterface</a></code>&nbsp;in interface&nbsp;<code>" +
             "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
             "PrivateInterface</a></code></dd>"},
        // Method inheritence from non-public superinterface.
-       {BUG_ID + "-2/pkg/PublicInterface.html",
+       { "pkg/PublicInterface.html",
             "Methods inherited from interface&nbsp;pkg." +
             "<a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
             "PrivateInterface</a>"
         },
-        {BUG_ID + "-2/pkg/PrivateInterface.html",
+        { "pkg/PrivateInterface.html",
             "<a href=\"../pkg/PrivateInterface.html#methodInterface-int-\">" +
                 "methodInterface</a>"
         },
       // Should mention that any documentation was copied.
-      {BUG_ID + "-2/pkg/PublicChild.html",
+      { "pkg/PublicChild.html",
         "Description copied from"},
       // Extend documented private classes or interfaces
-      {BUG_ID + "-2/pkg/PublicChild.html",
+      { "pkg/PublicChild.html",
         "extends"},
-      {BUG_ID + "-2/pkg/PublicInterface.html",
+      { "pkg/PublicInterface.html",
         "extends"},
-      {BUG_ID + "-2/pkg/PublicInterface.html",
+      { "pkg/PublicInterface.html",
         "All Superinterfaces"},
 
       //Make sure implemented interfaces from private superclass are inherited
-      {BUG_ID + "-2/pkg/PublicInterface.html",
+      { "pkg/PublicInterface.html",
         "<dl>\n" +
         "<dt>All Known Implementing Classes:</dt>\n" +
         "<dd><a href=\"../pkg/PrivateParent.html\" title=\"class in pkg\">" +
@@ -228,7 +225,7 @@
         "</a></dd>\n" +
         "</dl>"},
 
-      {BUG_ID + "-2/pkg/PublicChild.html",
+      { "pkg/PublicChild.html",
         "<dl>\n" +
         "<dt>All Implemented Interfaces:</dt>\n" +
         "<dd><a href=\"../pkg/PrivateInterface.html\" title=\"interface in pkg\">" +
@@ -239,11 +236,11 @@
 
       //Since private flag is used, we can document that private interface method
       //with generic parameters has been implemented.
-      {BUG_ID + "-2/pkg2/C.html",
+      { "pkg2/C.html",
             "<span class=\"descfrmTypeLabel\">Description copied from interface:&nbsp;<code>" +
             "<a href=\"../pkg2/I.html#hello-T-\">I</a></code></span>"},
 
-      {BUG_ID + "-2/pkg2/C.html",
+      { "pkg2/C.html",
             "<dt><span class=\"overrideSpecifyLabel\">Specified by:</span></dt>\n" +
             "<dd><code><a href=\"../pkg2/I.html#hello-T-\">hello</a></code>" +
             "&nbsp;in interface&nbsp;<code>" +
@@ -252,14 +249,14 @@
 
       //Make sure when no modifier appear in the class signature, the
       //signature is displayed correctly without extra space at the beginning.
-      {BUG_ID + "-2/pkg/PrivateParent.html",
+      { "pkg/PrivateParent.html",
             "<pre>class <span class=\"typeNameLabel\">PrivateParent</span>"},
 
-      {BUG_ID + "-2/pkg/PublicChild.html",
+      { "pkg/PublicChild.html",
             "<pre>public class <span class=\"typeNameLabel\">PublicChild</span>"},
     };
     private static final String[][] NEGATED_TEST2 = {
-        {BUG_ID + "-2/pkg/PrivateParent.html",
+        { "pkg/PrivateParent.html",
             "<pre> class <span class=\"typeNameLabel\">PrivateParent</span>"},
     };
 
@@ -269,22 +266,8 @@
      */
     public static void main(String[] args) {
         TestPrivateClasses tester = new TestPrivateClasses();
-        run(tester, ARGS1, TEST1, NEGATED_TEST1);
-        run(tester, ARGS2, TEST2, NEGATED_TEST2);
+        tester.run(ARGS1, TEST1, NEGATED_TEST1);
+        tester.run(ARGS2, TEST2, NEGATED_TEST2);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testProfiles/TestProfiles.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testProfiles/TestProfiles.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,60 +33,59 @@
 public class TestProfiles extends JavadocTester {
 
     //Test information.
-    private static final String BUG_ID = "8006124-8009684-8016921";
-    private static final String PROFILE_BUG_ID = BUG_ID + "-1";
-    private static final String PACKAGE_BUG_ID = BUG_ID + "-2";
+    private static final String PROFILE_OUTPUT_DIR = OUTPUT_DIR + "-1";
+    private static final String PACKAGE_OUTPUT_DIR = OUTPUT_DIR + "-2";
     //Javadoc arguments.
     private static final String[] ARGS1 = new String[]{
-        "-d", PROFILE_BUG_ID, "-sourcepath", SRC_DIR, "-Xprofilespath",
+        "-d", PROFILE_OUTPUT_DIR, "-sourcepath", SRC_DIR, "-Xprofilespath",
          SRC_DIR + "/profile-rtjar-includes.txt", "pkg1", "pkg2",
          "pkg3", "pkg4", "pkg5", "pkgDeprecated"
     };
     private static final String[] ARGS2 = new String[]{
-        "-d", PACKAGE_BUG_ID, "-sourcepath", SRC_DIR, "pkg1", "pkg2",
+        "-d", PACKAGE_OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1", "pkg2",
         "pkg3", "pkg4", "pkg5"
     };
     //Input for string tests for profiles.
     private static final String[][] PROFILES_TEST = {
         // Tests for profile-overview-frame.html listing all profiles.
-        {PROFILE_BUG_ID + "/profile-overview-frame.html",
+        { "profile-overview-frame.html",
             "<span><a href=\"overview-frame.html\" "
             + "target=\"packageListFrame\">All&nbsp;Packages</a></span>"
         },
-        {PROFILE_BUG_ID + "/profile-overview-frame.html",
+        { "profile-overview-frame.html",
             "<li><a href=\"compact1-frame.html\" target=\"packageListFrame\">"
             + "compact1</a></li>"
         },
         // Tests for profileName-frame.html listing all packages in a profile.
-        {PROFILE_BUG_ID + "/compact2-frame.html",
+        { "compact2-frame.html",
             "<span><a href=\"overview-frame.html\" target=\"packageListFrame\">"
             + "All&nbsp;Packages</a></span><span><a href=\"profile-overview-frame.html\" "
             + "target=\"packageListFrame\">All&nbsp;Profiles</a></span>"
         },
-        {PROFILE_BUG_ID + "/compact2-frame.html",
+        { "compact2-frame.html",
             "<li><a href=\"pkg4/compact2-package-frame.html\" "
             + "target=\"packageFrame\">pkg4</a></li>"
         },
         // Test for profileName-package-frame.html listing all types in a
         // package of a profile.
-        {PROFILE_BUG_ID + "/pkg2/compact2-package-frame.html",
+        { "pkg2/compact2-package-frame.html",
             "<a href=\"../compact2-summary.html\" target=\"classFrame\">"
             + "compact2</a> - <a href=\"../pkg2/compact2-package-summary.html\" "
             + "target=\"classFrame\">pkg2</a>"
         },
         // Tests for profileName-summary.html listing the summary for a profile.
-        {PROFILE_BUG_ID + "/compact2-summary.html",
+        { "compact2-summary.html",
             "<li><a href=\"compact1-summary.html\">Prev&nbsp;Profile</a></li>\n"
             + "<li><a href=\"compact3-summary.html\">Next&nbsp;Profile</a></li>"
         },
-        {PROFILE_BUG_ID + "/compact2-summary.html",
+        { "compact2-summary.html",
             "<h1 title=\"Profile\" class=\"title\">Profile&nbsp;compact2</h1>"
         },
-        {PROFILE_BUG_ID + "/compact2-summary.html",
+        { "compact2-summary.html",
             "<h3><a href=\"pkg2/compact2-package-summary.html\" "
             + "target=\"classFrame\">pkg2</a></h3>"
         },
-        {PROFILE_BUG_ID + "/compact2-summary.html",
+        { "compact2-summary.html",
             "<ul class=\"blockList\">\n" +
             "<li class=\"blockList\">\n"
             + "<h3><a href=\"pkg2/compact2-package-summary.html\" target=\"classFrame\">"
@@ -95,7 +94,7 @@
             + "cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, "
             + "listing classes, and an explanation\">"
         },
-        {PROFILE_BUG_ID + "/compact2-summary.html",
+        { "compact2-summary.html",
             "<ul class=\"blockList\">\n" +
             "<li class=\"blockList\">\n"
             + "<h3><a href=\"pkg4/compact2-package-summary.html\" target=\"classFrame\">"
@@ -106,14 +105,14 @@
         },
         // Tests for profileName-package-summary.html listing the summary for a
         // package in a profile.
-        {PROFILE_BUG_ID + "/pkg5/compact3-package-summary.html",
+        { "pkg5/compact3-package-summary.html",
             "<li><a href=\"../pkg4/compact3-package-summary.html\">Prev&nbsp;Package"
             + "</a></li>"
         },
-        {PROFILE_BUG_ID + "/pkg5/compact3-package-summary.html",
+        { "pkg5/compact3-package-summary.html",
             "<div class=\"subTitle\">compact3</div>"
         },
-        {PROFILE_BUG_ID + "/pkg5/compact3-package-summary.html",
+        { "pkg5/compact3-package-summary.html",
             "<ul class=\"blockList\">\n" +
             "<li class=\"blockList\">\n"
             + "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" "
@@ -121,20 +120,20 @@
             + "interfaces, and an explanation\">"
         },
         //Test for "overview-frame.html" showing the "All Profiles" link.
-        {PROFILE_BUG_ID + "/overview-frame.html",
+        { "overview-frame.html",
             "<span><a href=\"profile-overview-frame.html\" "
             + "target=\"packageListFrame\">All&nbsp;Profiles</a></span>"
         },
         //Test for "className.html" showing the profile information for the type.
-        {PROFILE_BUG_ID + "/pkg2/Class1Pkg2.html",
+        { "pkg2/Class1Pkg2.html",
             "<div class=\"subTitle\">compact1, compact2, compact3</div>"
         },
-        {PROFILE_BUG_ID + "/index.html",
+        { "index.html",
             "<frame src=\"overview-frame.html\" name=\"packageListFrame\" " +
             "title=\"All Packages\">"
         },
         //Test for "overview-summary.html" showing the profile list.
-        {PROFILE_BUG_ID + "/overview-summary.html",
+        { "overview-summary.html",
             "<ul>\n" +
             "<li><a href=\"compact1-summary.html\" target=\"classFrame\">" +
             "compact1</a></li>\n" +
@@ -145,28 +144,28 @@
             "</ul>"
         },
         //Test deprecated class in profiles
-        {PROFILE_BUG_ID + "/compact1-summary.html","<td class=\"colFirst\">"
-            + "<a href=\"pkg2/Class1Pkg2.html\" title=\"class in pkg2\">Class1Pkg2</a></td>\n"
+        { "compact1-summary.html",
+            "<td class=\"colFirst\"><a href=\"pkg2/Class1Pkg2.html\" title=\"class in pkg2\">Class1Pkg2</a></td>\n"
             + "<td class=\"colLast\">Deprecated"
         },
-        {PROFILE_BUG_ID + "/deprecated-list.html","<td class=\"colOne\">"
-            + "<a href=\"pkg2/Class1Pkg2.html\" title=\"class in pkg2\">pkg2.Class1Pkg2</a>\n"
+        { "deprecated-list.html",
+            "<td class=\"colOne\"><a href=\"pkg2/Class1Pkg2.html\" title=\"class in pkg2\">pkg2.Class1Pkg2</a>\n"
             +"<div class=\"block\"><span class=\"deprecationComment\">Class1Pkg2. This class is deprecated</span></div>"
         },
         //Test deprecated package in profile
-        {PROFILE_BUG_ID + "/deprecated-list.html","<td class=\"colOne\">"
-            + "<a href=\"pkgDeprecated/package-summary.html\">pkgDeprecated</a>\n"
+        { "deprecated-list.html",
+            "<td class=\"colOne\"><a href=\"pkgDeprecated/package-summary.html\">pkgDeprecated</a>\n"
             +"<div class=\"block\"><span class=\"deprecationComment\">This package is <b>Deprecated</b>."
             + " Use pkg1.</span></div>"
         },
-        {PROFILE_BUG_ID + "/pkgDeprecated/package-summary.html",
+        { "pkgDeprecated/package-summary.html",
             "<div class=\"deprecatedContent\"><span class=\"deprecatedLabel\">Deprecated.</span>\n"
             + "<div class=\"block\"><span class=\"deprecationComment\">This package is <b>Deprecated</b>."
             + " Use pkg1.</span></div>"
         },
         // need to add teststring when JDK-8015496 will be fixed
         //Test exception in profiles
-        {PROFILE_BUG_ID + "/compact1-summary.html",
+        { "compact1-summary.html",
             "<table class=\"typeSummary\" "
             + "border=\"0\" cellpadding=\"3\" cellspacing=\"0\" "
             + "summary=\"Exception Summary table, listing exceptions, and an explanation\">\n"
@@ -184,7 +183,7 @@
             + " title=\"class in pkg2\">ClassException</a></td>"
         },
         //Test errors in profiles
-        {PROFILE_BUG_ID + "/compact1-summary.html",
+        { "compact1-summary.html",
             "<table class=\"typeSummary\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" "
             + "summary=\"Error Summary table, listing errors, and an explanation\">\n"
             + "<caption><span>Error Summary</span><span class=\"tabEnd\">&nbsp;"
@@ -202,19 +201,19 @@
         }
     };
     private static final String[][] PROFILES_NEGATED_TEST = {
-        {PROFILE_BUG_ID + "/pkg3/Class2Pkg3.html",
+        { "pkg3/Class2Pkg3.html",
             "<div class=\"subTitle\">compact1"
         },
-        {PROFILE_BUG_ID + "/pkg3/Interface1Pkg3.html",
+        { "pkg3/Interface1Pkg3.html",
             "<div class=\"subTitle\">compact1"
         },
-        {PROFILE_BUG_ID + "/pkg4/compact2-package-frame.html",
+        { "pkg4/compact2-package-frame.html",
             "<li><a href=\"Anno1Pkg4.html\" title=\"annotation in pkg4\" "
             + "target=\"classFrame\">Anno1Pkg4</a></li>"
         },
-        {PROFILE_BUG_ID + "/compact1-summary.html","<li>Use</li>"
+        { "compact1-summary.html","<li>Use</li>"
         },
-        {PROFILE_BUG_ID + "/compact2-summary.html",
+        { "compact2-summary.html",
             "<ul class=\"blockList\">\n" +
             "<li class=\"blockList\">\n"
             + "<h3><a href=\"pkg2/compact2-package-summary.html\" target=\"classFrame\">"
@@ -224,7 +223,7 @@
             + "cellpadding=\"3\" cellspacing=\"0\" summary=\"Class Summary table, "
             + "listing classes, and an explanation\">"
         },
-        {PROFILE_BUG_ID + "/pkg5/compact3-package-summary.html",
+        { "pkg5/compact3-package-summary.html",
             "<ul class=\"blockList\">\n" +
             "<li class=\"blockList\">\n"
             + "<li class=\"blockList\">\n"
@@ -234,14 +233,14 @@
         }
     };
     private static final String[][] PACKAGES_TEST = {
-        {PACKAGE_BUG_ID + "/overview-frame.html",
+        { "overview-frame.html",
             "<h2 title=\"Packages\">Packages</h2>"
         },
-        {PACKAGE_BUG_ID + "/pkg4/package-frame.html",
+        { "pkg4/package-frame.html",
             "<h1 class=\"bar\"><a href=\"../pkg4/package-summary.html\" "
             + "target=\"classFrame\">pkg4</a></h1>"
         },
-        {PACKAGE_BUG_ID + "/pkg4/package-summary.html",
+        { "pkg4/package-summary.html",
             "<div class=\"header\">\n" +
             "<h1 title=\"Package\" "
             + "class=\"title\">Package&nbsp;pkg4</h1>\n" +
@@ -249,14 +248,14 @@
         }
     };
     private static final String[][] PACKAGES_NEGATED_TEST = {
-        {PACKAGE_BUG_ID + "/overview-frame.html",
+        { "overview-frame.html",
             "<span><a href=\"profile-overview-frame.html\" "
             + "target=\"packageListFrame\">All&nbsp;Profiles</a></span>"
         },
-        {PACKAGE_BUG_ID + "/pkg2/Class1Pkg2.html",
+        { "pkg2/Class1Pkg2.html",
             "<div class=\"subTitle\">compact1, compact2, compact3</div>"
         },
-        {PACKAGE_BUG_ID + "/overview-summary.html",
+        { "overview-summary.html",
             "<ul>\n" +
             "<li><a href=\"compact1-summary.html\" target=\"classFrame\">" +
             "compact1</a></li>\n" +
@@ -268,11 +267,11 @@
         }
     };
     private static final String[] PACKAGES_NEGATED_FILE_TEST = {
-        PACKAGE_BUG_ID + "/profile-overview-frame.html",
-        PACKAGE_BUG_ID + "/compact2-frame.html",
-        PACKAGE_BUG_ID + "/pkg2/compact2-package-frame.html",
-        PACKAGE_BUG_ID + "/compact2-summary.html",
-        PACKAGE_BUG_ID + "/pkg5/compact3-package-summary.html"
+        "profile-overview-frame.html",
+        "compact2-frame.html",
+        "pkg2/compact2-package-frame.html",
+        "compact2-summary.html",
+        "pkg5/compact3-package-summary.html"
     };
 
     /**
@@ -282,22 +281,8 @@
      */
     public static void main(String[] args) {
         TestProfiles tester = new TestProfiles();
-        run(tester, ARGS1, PROFILES_TEST, PROFILES_NEGATED_TEST);
-        run(tester, ARGS2, PACKAGES_TEST, PACKAGES_NEGATED_TEST, NO_FILE_TEST, PACKAGES_NEGATED_FILE_TEST);
+        tester.run(ARGS1, PROFILES_TEST, PROFILES_NEGATED_TEST);
+        tester.run(ARGS2, PACKAGES_TEST, PACKAGES_NEGATED_TEST, NO_FILE_TEST, PACKAGES_NEGATED_FILE_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testProfiles/TestProfilesConfiguration.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testProfiles/TestProfilesConfiguration.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,26 +33,25 @@
 public class TestProfilesConfiguration extends JavadocTester {
 
     //Test information.
-    private static final String BUG_ID = "8006124-8009684";
-    private static final String PROFILE_CONFIGURATION_BUG_ID = BUG_ID + "-3";
-    private static final String NODEPR_NOPKGS_BUG_ID = BUG_ID + "-4";
+    private static final String PROFILE_CONFIGURATION_OUTPUT_DIR = OUTPUT_DIR + "-3";
+    private static final String NODEPR_NOPKGS_OUTPUT_DIR = OUTPUT_DIR + "-4";
     //Javadoc arguments.
     private static final String[] ARGS3 = new String[]{
-        "-d", PROFILE_CONFIGURATION_BUG_ID, "-sourcepath", SRC_DIR,
+        "-d", PROFILE_CONFIGURATION_OUTPUT_DIR, "-sourcepath", SRC_DIR,
         "-nocomment", "-keywords", "-Xprofilespath", SRC_DIR +
         "/profile-rtjar-includes.txt", "-doctitle", "Simple doctitle",
         "-use", "pkg3", "pkg1", "pkg2", "pkg4",
         "pkg5", "-packagesheader", "Simple packages header","pkgDeprecated"
     };
     private static final String[] ARGS4 = new String[]{
-        "-d", NODEPR_NOPKGS_BUG_ID, "-sourcepath", SRC_DIR, "-nocomment",
+        "-d", NODEPR_NOPKGS_OUTPUT_DIR, "-sourcepath", SRC_DIR, "-nocomment",
         "-nodeprecated", "-keywords", "-Xprofilespath", SRC_DIR +
         "/profile-rtjar-includes-nopkgs.txt", "-doctitle", "Simple doctitle",
         "-use", "-packagesheader", "Simple packages header",
         "pkg1", "pkg2", "pkg3", "pkg4", "pkg5", "pkgDeprecated"
     };
     private static final String[][] NODEPR_NOPKGS_TEST = {
-        {NODEPR_NOPKGS_BUG_ID + "/overview-summary.html",
+        { "overview-summary.html",
             "<ul>\n" +
             "<li><a href=\"compact2-summary.html\" target=\"classFrame\">" +
             "compact2</a></li>\n" +
@@ -60,7 +59,7 @@
             "classFrame\">compact3</a></li>\n" +
             "</ul>"
         },
-        {NODEPR_NOPKGS_BUG_ID + "/profile-overview-frame.html",
+        { "profile-overview-frame.html",
             "<ul title=\"Profiles\">\n" +
             "<li><a href=\"compact2-frame.html\" target=\"packageListFrame\">" +
             "compact2</a></li>\n" +
@@ -70,30 +69,30 @@
         }
     };
     private static final String[][] NODEPR_NOPKGS_NEGATED_TEST = {
-        {NODEPR_NOPKGS_BUG_ID + "/overview-summary.html",
+        { "overview-summary.html",
             "compact1"
         }
     };
 
     private static final String[][] PROFILES_CONFIGURATION_TEST = {
         //-use option test string fo profile view page
-        {PROFILE_CONFIGURATION_BUG_ID + "/compact1-summary.html","<li>Use</li>"
+        { "compact1-summary.html","<li>Use</li>"
         },
         //-doctitle option test string
-        {PROFILE_CONFIGURATION_BUG_ID + "/overview-summary.html",
+        { "overview-summary.html",
             "<div class=\"header\">\n" +
             "<h1 class=\"title\">Simple doctitle</h1>"
         },
         //-packagesheader option test string fo profiles
-        {PROFILE_CONFIGURATION_BUG_ID + "/profile-overview-frame.html",
+        { "profile-overview-frame.html",
             "<h1 title=\"Simple packages header\" class=\"bar\">Simple packages header</h1>"
         },
         //-keywords option test string for profiles
-        {PROFILE_CONFIGURATION_BUG_ID + "/compact1-summary.html",
+        { "compact1-summary.html",
             "<meta name=\"keywords\" content=\"compact1 profile\">"
         },
         //Deprecated information on a package
-        {PROFILE_CONFIGURATION_BUG_ID + "/compact1-summary.html",
+        { "compact1-summary.html",
             "<h3><a href=\"pkgDeprecated/compact1-package-summary.html\" target=\"" +
             "classFrame\">pkgDeprecated</a></h3>\n" +
             "<div class=\"deprecatedContent\">" +
@@ -102,7 +101,7 @@
     };
     private static final String[][] PROFILES_CONFIGURATION_NEGATED_TEST = {
         //-nocomments option test string
-        {PROFILE_CONFIGURATION_BUG_ID + "/compact1-summary.html",
+        { "compact1-summary.html",
             "<div class=\"block\"><i>Class1Pkg2.</i></div>"
         }
     };
@@ -114,24 +113,10 @@
      */
     public static void main(String[] args) {
         TestProfilesConfiguration tester = new TestProfilesConfiguration();
-        run(tester, ARGS3, PROFILES_CONFIGURATION_TEST,
+        tester.run(ARGS3, PROFILES_CONFIGURATION_TEST,
         PROFILES_CONFIGURATION_NEGATED_TEST);
-        run(tester, ARGS4, NODEPR_NOPKGS_TEST,
+        tester.run(ARGS4, NODEPR_NOPKGS_TEST,
         NODEPR_NOPKGS_NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testRecurseSubPackages/TestRecurseSubPackages.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testRecurseSubPackages/TestRecurseSubPackages.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,10 +34,9 @@
 
 public class TestRecurseSubPackages extends JavadocTester {
 
-    private static final String BUG_ID = "4074234";
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR,
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
             "-subpackages", "pkg1", "-exclude", "pkg1.pkg2.packageToExclude"
         };
 
@@ -48,28 +47,14 @@
     public static void main(String[] args) {
         String[][] tests = new String[6][2];
         for (int i = 0; i < tests.length; i++) {
-            tests[i][0] = BUG_ID + "/allclasses-frame.html";
+            tests[i][0] = "allclasses-frame.html";
             tests[i][1] = "C" + (i+1) + ".html";
         }
         String[][] negatedTests = new String[][] {
-            {BUG_ID + "/allclasses-frame.html", "DummyClass.html"}
+            { "allclasses-frame.html", "DummyClass.html"}
         };
         TestRecurseSubPackages tester = new TestRecurseSubPackages();
-        run(tester, ARGS, tests, negatedTests);
+        tester.run(ARGS, tests, negatedTests);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testRelativeLinks/TestRelativeLinks.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testRelativeLinks/TestRelativeLinks.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,27 +35,24 @@
 
 public class TestRelativeLinks extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4460354-8014636";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-use", "-sourcepath", SRC_DIR, "pkg", "pkg2"
+        "-d", OUTPUT_DIR, "-use", "-sourcepath", SRC_DIR, "pkg", "pkg2"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
         //These relative paths should stay relative because they appear
         //in the right places.
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<a href=\"relative-class-link.html\">relative class link</a>"},
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<a href=\"relative-field-link.html\">relative field link</a>"},
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<a href=\"relative-method-link.html\">relative method link</a>"},
-        {BUG_ID + "/pkg/package-summary.html",
+        { "pkg/package-summary.html",
             "<a href=\"relative-package-link.html\">relative package link</a>"},
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             " <a\n" +
             " href=\"relative-multi-line-link.html\">relative-multi-line-link</a>."},
 
@@ -63,43 +60,40 @@
         //places.
 
         //INDEX PAGE
-        {BUG_ID + "/index-all.html",
+        { "index-all.html",
             "<a href=\"./pkg/relative-class-link.html\">relative class link</a>"},
-        {BUG_ID + "/index-all.html",
+        { "index-all.html",
             "<a href=\"./pkg/relative-field-link.html\">relative field link</a>"},
-        {BUG_ID + "/index-all.html",
+        { "index-all.html",
             "<a href=\"./pkg/relative-method-link.html\">relative method link</a>"},
-        {BUG_ID + "/index-all.html",
+        { "index-all.html",
             "<a href=\"./pkg/relative-package-link.html\">relative package link</a>"},
-        {BUG_ID + "/index-all.html",
+        { "index-all.html",
             " <a\n" +
             " href=\"./pkg/relative-multi-line-link.html\">relative-multi-line-link</a>."},
 
 
         //PACKAGE USE
-        {BUG_ID + "/pkg/package-use.html",
+        { "pkg/package-use.html",
             "<a href=\"../pkg/relative-package-link.html\">relative package link</a>."},
-        {BUG_ID + "/pkg/package-use.html",
+        { "pkg/package-use.html",
             "<a href=\"../pkg/relative-class-link.html\">relative class link</a>"},
 
         //CLASS_USE
-        {BUG_ID + "/pkg/class-use/C.html",
+        { "pkg/class-use/C.html",
             "<a href=\"../../pkg/relative-field-link.html\">relative field link</a>"},
-        {BUG_ID + "/pkg/class-use/C.html",
+        { "pkg/class-use/C.html",
             "<a href=\"../../pkg/relative-method-link.html\">relative method link</a>"},
-        {BUG_ID + "/pkg/class-use/C.html",
+        { "pkg/class-use/C.html",
             "<a href=\"../../pkg/relative-package-link.html\">relative package link</a>"},
-        {BUG_ID + "/pkg/class-use/C.html",
+        { "pkg/class-use/C.html",
             " <a\n" +
             " href=\"../../pkg/relative-multi-line-link.html\">relative-multi-line-link</a>."},
 
         //PACKAGE OVERVIEW
-        {BUG_ID + "/overview-summary.html",
+        { "overview-summary.html",
             "<a href=\"./pkg/relative-package-link.html\">relative package link</a>"},
-
-
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -107,21 +101,7 @@
      */
     public static void main(String[] args) {
         TestRelativeLinks tester = new TestRelativeLinks();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testRepeatedAnnotations/TestRepeatedAnnotations.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testRepeatedAnnotations/TestRepeatedAnnotations.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,26 +34,25 @@
 public class TestRepeatedAnnotations extends JavadocTester {
 
     //Test information.
-    private static final String BUG_ID = "8005092";
 
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg", "pkg1"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg", "pkg1"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
             "title=\"annotation in pkg\">@ContaineeSynthDoc</a> " +
             "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
             "title=\"annotation in pkg\">@ContaineeSynthDoc</a>"},
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<a href=\"../pkg/ContaineeRegDoc.html\" " +
             "title=\"annotation in pkg\">@ContaineeRegDoc</a> " +
             "<a href=\"../pkg/ContaineeRegDoc.html\" " +
             "title=\"annotation in pkg\">@ContaineeRegDoc</a>"},
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<a href=\"../pkg/RegContainerDoc.html\" " +
             "title=\"annotation in pkg\">@RegContainerDoc</a>" +
             "(<a href=\"../pkg/RegContainerDoc.html#value--\">value</a>={" +
@@ -61,41 +60,41 @@
             "title=\"annotation in pkg\">@RegContaineeNotDoc</a>," +
             "<a href=\"../pkg/RegContaineeNotDoc.html\" " +
             "title=\"annotation in pkg\">@RegContaineeNotDoc</a>})"},
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
             "title=\"annotation in pkg\">@ContaineeSynthDoc</a> " +
             "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
             "title=\"annotation in pkg\">@ContaineeSynthDoc</a> " +
             "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
             "title=\"annotation in pkg\">@ContaineeSynthDoc</a>"},
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<a href=\"../pkg/ContainerSynthDoc.html\" " +
             "title=\"annotation in pkg\">@ContainerSynthDoc</a>(" +
             "<a href=\"../pkg/ContainerSynthDoc.html#value--\">value</a>=" +
             "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
             "title=\"annotation in pkg\">@ContaineeSynthDoc</a>)"},
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
             "title=\"annotation in pkg\">@ContaineeSynthDoc</a> " +
             "<a href=\"../pkg/ContaineeSynthDoc.html\" " +
             "title=\"annotation in pkg\">@ContaineeSynthDoc</a>"},
 
-        {BUG_ID + "/pkg/D.html",
+        { "pkg/D.html",
             "<a href=\"../pkg/RegDoc.html\" title=\"annotation in pkg\">@RegDoc</a>" +
             "(<a href=\"../pkg/RegDoc.html#x--\">x</a>=1)"},
-        {BUG_ID + "/pkg/D.html",
+        { "pkg/D.html",
             "<a href=\"../pkg/RegArryDoc.html\" title=\"annotation in pkg\">@RegArryDoc</a>" +
             "(<a href=\"../pkg/RegArryDoc.html#y--\">y</a>=1)"},
-        {BUG_ID + "/pkg/D.html",
+        { "pkg/D.html",
             "<a href=\"../pkg/RegArryDoc.html\" title=\"annotation in pkg\">@RegArryDoc</a>" +
             "(<a href=\"../pkg/RegArryDoc.html#y--\">y</a>={1,2})"},
-        {BUG_ID + "/pkg/D.html",
+        { "pkg/D.html",
             "<a href=\"../pkg/NonSynthDocContainer.html\" " +
             "title=\"annotation in pkg\">@NonSynthDocContainer</a>" +
             "(<a href=\"../pkg/NonSynthDocContainer.html#value--\">value</a>=" +
             "<a href=\"../pkg/RegArryDoc.html\" title=\"annotation in pkg\">@RegArryDoc</a>)"},
 
-        {BUG_ID + "/pkg1/C.html",
+        { "pkg1/C.html",
             "<a href=\"../pkg1/RegContainerValDoc.html\" " +
             "title=\"annotation in pkg1\">@RegContainerValDoc</a>" +
             "(<a href=\"../pkg1/RegContainerValDoc.html#value--\">value</a>={" +
@@ -104,7 +103,7 @@
             "<a href=\"../pkg1/RegContaineeNotDoc.html\" " +
             "title=\"annotation in pkg1\">@RegContaineeNotDoc</a>}," +
             "<a href=\"../pkg1/RegContainerValDoc.html#y--\">y</a>=3)"},
-        {BUG_ID + "/pkg1/C.html",
+        { "pkg1/C.html",
             "<a href=\"../pkg1/ContainerValDoc.html\" " +
             "title=\"annotation in pkg1\">@ContainerValDoc</a>" +
             "(<a href=\"../pkg1/ContainerValDoc.html#value--\">value</a>={" +
@@ -116,12 +115,12 @@
     };
 
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<a href=\"../pkg/RegContaineeDoc.html\" " +
             "title=\"annotation in pkg\">@RegContaineeDoc</a> " +
             "<a href=\"../pkg/RegContaineeDoc.html\" " +
             "title=\"annotation in pkg\">@RegContaineeDoc</a>"},
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<a href=\"../pkg/RegContainerNotDoc.html\" " +
             "title=\"annotation in pkg\">@RegContainerNotDoc</a>" +
             "(<a href=\"../pkg/RegContainerNotDoc.html#value--\">value</a>={" +
@@ -130,12 +129,12 @@
             "<a href=\"../pkg/RegContaineeNotDoc.html\" " +
             "title=\"annotation in pkg\">@RegContaineeNotDoc</a>})"},
 
-        {BUG_ID + "/pkg1/C.html",
+        { "pkg1/C.html",
             "<a href=\"../pkg1/ContaineeSynthDoc.html\" " +
             "title=\"annotation in pkg1\">@ContaineeSynthDoc</a> " +
             "<a href=\"../pkg1/ContaineeSynthDoc.html\" " +
             "title=\"annotation in pkg1\">@ContaineeSynthDoc</a>"},
-        {BUG_ID + "/pkg1/C.html",
+        { "pkg1/C.html",
             "<a href=\"../pkg1/RegContainerValNotDoc.html\" " +
             "title=\"annotation in pkg1\">@RegContainerValNotDoc</a>" +
             "(<a href=\"../pkg1/RegContainerValNotDoc.html#value--\">value</a>={" +
@@ -144,7 +143,7 @@
             "<a href=\"../pkg1/RegContaineeDoc.html\" " +
             "title=\"annotation in pkg1\">@RegContaineeDoc</a>}," +
             "<a href=\"../pkg1/RegContainerValNotDoc.html#y--\">y</a>=4)"},
-        {BUG_ID + "/pkg1/C.html",
+        { "pkg1/C.html",
             "<a href=\"../pkg1/ContainerValNotDoc.html\" " +
             "title=\"annotation in pkg1\">@ContainerValNotDoc</a>" +
             "(<a href=\"../pkg1/ContainerValNotDoc.html#value--\">value</a>={" +
@@ -153,7 +152,7 @@
             "<a href=\"../pkg1/ContaineeNotDoc.html\" " +
             "title=\"annotation in pkg1\">@ContaineeNotDoc</a>}," +
             "<a href=\"../pkg1/ContainerValNotDoc.html#x--\">x</a>=2)"},
-        {BUG_ID + "/pkg1/C.html",
+        { "pkg1/C.html",
             "<a href=\"../pkg1/ContainerSynthNotDoc.html\" " +
             "title=\"annotation in pkg1\">@ContainerSynthNotDoc</a>(" +
             "<a href=\"../pkg1/ContainerSynthNotDoc.html#value--\">value</a>=" +
@@ -167,21 +166,7 @@
      */
     public static void main(String[] args) {
         TestRepeatedAnnotations tester = new TestRepeatedAnnotations();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testReturnTag/TestReturnTag.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testReturnTag/TestReturnTag.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,12 +34,9 @@
 
 public class TestReturnTag extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4490068";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-Xdoclint:none", "-d", BUG_ID, "-sourcepath", SRC_DIR, SRC_DIR +
+        "-Xdoclint:none", "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, SRC_DIR +
         "/TestReturnTag.java"
     };
 
@@ -48,7 +45,6 @@
         {WARNING_OUTPUT,
             "warning - @return tag cannot be used in method with void return type."}
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * Trigger warning message when return tag is used on a void method.
@@ -63,21 +59,7 @@
      */
     public static void main(String[] args) {
         TestReturnTag tester = new TestReturnTag();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testSeeTag/TestSeeTag.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSeeTag/TestSeeTag.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,10 +33,6 @@
 
 public class TestSeeTag extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "8017191";
-    private static final String OUTPUT_DIR = BUG_ID;
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
         "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
@@ -44,12 +40,12 @@
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        { OUTPUT_DIR + "/pkg/Test.html",
+        { "pkg/Test.html",
           "<code>List</code>"
         }
     };
     private static final String[][] NEGATED_TEST = {
-        { OUTPUT_DIR + "/pkg/Test.html",
+        { "pkg/Test.html",
           "&lt;code&gt;List&lt;/code&gt;"
         }
     };
@@ -60,21 +56,7 @@
      */
     public static void main(String[] args) {
         TestSeeTag tester = new TestSeeTag();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testSerialVersionUID/TestSerialVersionUID.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSerialVersionUID/TestSerialVersionUID.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,10 +35,6 @@
 
 public class TestSerialVersionUID extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4525039";
-    private static final String OUTPUT_DIR = "docs-" + BUG_ID;
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
         "-d", OUTPUT_DIR,
@@ -47,9 +43,8 @@
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {OUTPUT_DIR + "/serialized-form.html", "-111111111111111L"}
+        { "serialized-form.html", "-111111111111111L"}
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -57,21 +52,7 @@
      */
     public static void main(String[] args) {
         TestSerialVersionUID tester = new TestSerialVersionUID();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSerializedForm/TestSerializedForm.java	Thu Apr 24 16:04:44 2014 -0700
@@ -21,9 +21,6 @@
  * questions.
  */
 
-import java.lang.*;
-import java.io.*;
-
 /*
  * @test
  * @bug 4341304 4485668 4966728 8032066
@@ -41,82 +38,83 @@
  * @run main TestSerializedForm
  */
 
-public class TestSerializedForm extends JavadocTester implements Serializable {
+import java.lang.*;
+import java.io.*;
 
-    private static final String BUG_ID = "4341304-4485668-4966728";
+public class TestSerializedForm extends JavadocTester implements Serializable {
 
     private static final String[][] TEST = {
-        {BUG_ID + FS + "serialized-form.html",
+        { "serialized-form.html",
             "protected&nbsp;java.lang.Object&nbsp;readResolve()"},
-        {BUG_ID + FS + "serialized-form.html",
+        { "serialized-form.html",
             "protected&nbsp;java.lang.Object&nbsp;writeReplace()"},
-        {BUG_ID + FS + "serialized-form.html",
+        { "serialized-form.html",
             "protected&nbsp;java.lang.Object&nbsp;readObjectNoData()"},
-        {BUG_ID + FS + "serialized-form.html",
+        { "serialized-form.html",
             "See Also"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Class pkg1.NestedInnerClass.InnerClass.ProNestedInnerClass " +
             "extends java.lang.Object implements Serializable</h3>"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Class pkg1.PrivateIncludeInnerClass.PriInnerClass extends " +
             "java.lang.Object implements Serializable</h3>"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Class pkg1.ProtectedInnerClass.ProInnerClass extends " +
             "java.lang.Object implements Serializable</h3>"}
     };
 
     private static final String[][] TEST_PRIVATE = {
-        {BUG_ID + "-1/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Class <a href=\"pkg1/NestedInnerClass.InnerClass.ProNestedInnerClass.html\" " +
             "title=\"class in pkg1\">pkg1.NestedInnerClass.InnerClass.ProNestedInnerClass</a> " +
             "extends java.lang.Object implements Serializable</h3>"},
-        {BUG_ID + "-1/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Class <a href=\"pkg1/PrivateIncludeInnerClass.PriInnerClass.html\" title=\"class in pkg1\">" +
             "pkg1.PrivateIncludeInnerClass.PriInnerClass</a> extends java.lang.Object implements Serializable</h3>"},
-        {BUG_ID + "-1/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Class <a href=\"pkg1/ProtectedInnerClass.ProInnerClass.html\" title=\"class in pkg1\">" +
             "pkg1.ProtectedInnerClass.ProInnerClass</a> extends java.lang.Object implements Serializable</h3>"}
     };
 
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Class <a href=\"pkg1/NestedInnerClass.InnerClass.ProNestedInnerClass.html\" " +
             "title=\"class in pkg1\">pkg1.NestedInnerClass.InnerClass.ProNestedInnerClass</a> " +
             "extends java.lang.Object implements Serializable</h3>"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Class <a href=\"pkg1/PrivateInnerClass.PriInnerClass.html\" title=\"class in pkg1\">" +
             "pkg1.PrivateInnerClass.PriInnerClass</a> extends java.lang.Object implements Serializable</h3>"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Class <a href=\"pkg1/ProtectedInnerClass.ProInnerClass.html\" title=\"class in pkg1\">" +
             "pkg1.ProtectedInnerClass.ProInnerClass</a> extends java.lang.Object implements Serializable</h3>"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Class pkg1.PublicExcludeInnerClass.PubInnerClass extends java.lang.Object implements " +
             "Serializable</h3>"}
     };
 
     private static final String[][] NEGATED_TEST_PRIVATE = {
-        {BUG_ID + "-1/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Class pkg1.NestedInnerClass.InnerClass.ProNestedInnerClass " +
             "extends java.lang.Object implements Serializable</h3>"},
-        {BUG_ID + "-1/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Class pkg1.PrivateInnerClass.PriInnerClass extends " +
             "java.lang.Object implements Serializable</h3>"},
-        {BUG_ID + "-1/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Class pkg1.ProtectedInnerClass.ProInnerClass extends " +
             "java.lang.Object implements Serializable</h3>"},
-        {BUG_ID + "-1/serialized-form.html",
+        { "serialized-form.html",
             "<h3>Class <a href=\"pkg1/PublicExcludeInnerClass.PubInnerClass.html\" " +
             "title=\"class in pkg1\">pkg1.PublicExcludeInnerClass.PubInnerClass</a> " +
             "extends java.lang.Object implements Serializable</h3>"}
     };
 
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR,
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
         SRC_DIR + "/TestSerializedForm.java", "pkg1"
     };
 
     private static final String[] ARGS_PRIVATE = new String[] {
-        "-private", "-d", BUG_ID + "-1", "-sourcepath", SRC_DIR,
+        "-private", "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR,
         SRC_DIR + "/TestSerializedForm.java", "pkg1"
     };
 
@@ -132,26 +130,12 @@
      */
     public static void main(String[] args) {
         TestSerializedForm tester = new TestSerializedForm();
-        run(tester, ARGS, TEST, NEGATED_TEST);
-        run(tester, ARGS_PRIVATE, TEST_PRIVATE, NEGATED_TEST_PRIVATE);
+        tester.run(ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS_PRIVATE, TEST_PRIVATE, NEGATED_TEST_PRIVATE);
         tester.printSummary();
     }
 
     /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
-
-    /**
      * @param s ObjectInputStream.
      * @throws IOException when there is an I/O error.
      * @serial
--- a/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSerializedFormDeprecationInfo/TestSerializedFormDeprecationInfo.java	Thu Apr 24 16:04:44 2014 -0700
@@ -36,12 +36,10 @@
 
 public class TestSerializedFormDeprecationInfo extends JavadocTester {
 
-    private static final String BUG_ID = "6802694";
-
     // Test for normal run of javadoc. The serialized-form.html should
     // display the inline comments, tags and deprecation information if any.
     private static final String[][] TEST_CMNT_DEPR = {
-        {BUG_ID + "/serialized-form.html", "<dl>\n" +
+        { "serialized-form.html", "<dl>\n" +
                  "<dt><span class=\"throwsLabel\">Throws:</span></dt>\n" +
                  "<dd><code>" +
                  "java.io.IOException</code></dd>\n" +
@@ -50,7 +48,7 @@
                  "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
                  "<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
                  "<span class=\"deprecatedLabel\">Deprecated.</span>" +
                  "&nbsp;<span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
                  " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
@@ -66,7 +64,7 @@
                  "<dd><a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
                  "<code>C1.setUndecorated(boolean)</code></a></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
                  "<span class=\"deprecatedLabel\">Deprecated.</span>" +
                  "&nbsp;<span class=\"deprecationComment\">As of JDK version 1.5, replaced by\n" +
                  " <a href=\"pkg1/C1.html#setUndecorated-boolean-\">" +
@@ -78,7 +76,7 @@
                  "IOException</code></code></dd>\n" +
                  "<dd><code>java.io.IOException</code></dd>\n" +
                  "</dl>"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
                  "<span class=\"deprecatedLabel\">Deprecated.</span>" +
                  "&nbsp;</div>\n" +
                  "<div class=\"block\">" +
@@ -88,14 +86,14 @@
     // not display the inline comments and tags but should display deprecation
     // information if any.
     private static final String[][] TEST_NOCMNT = {
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
                  "<pre>boolean undecorated</pre>\n" +
                  "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;<span class=\"deprecationComment\">" +
                  "As of JDK version 1.5, replaced by\n" +
                  " <a href=\"pkg1/C1.html#setUndecorated-boolean-\"><code>" +
                  "setUndecorated(boolean)</code></a>.</span></div>\n" +
                  "</li>"},
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
                  "<span class=\"deprecatedLabel\">" +
                  "Deprecated.</span>&nbsp;<span class=\"deprecationComment\">As of JDK version" +
                  " 1.5, replaced by\n" +
@@ -117,19 +115,19 @@
 
     private static final String[] ARGS1 =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1"};
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"};
 
     private static final String[] ARGS2 =
         new String[] {
-            "-d", BUG_ID, "-nocomment", "-sourcepath", SRC_DIR, "pkg1"};
+            "-d", OUTPUT_DIR, "-nocomment", "-sourcepath", SRC_DIR, "pkg1"};
 
     private static final String[] ARGS3 =
         new String[] {
-            "-d", BUG_ID, "-nodeprecated", "-sourcepath", SRC_DIR, "pkg1"};
+            "-d", OUTPUT_DIR, "-nodeprecated", "-sourcepath", SRC_DIR, "pkg1"};
 
     private static final String[] ARGS4 =
         new String[] {
-            "-d", BUG_ID, "-nocomment", "-nodeprecated", "-sourcepath",
+            "-d", OUTPUT_DIR, "-nocomment", "-nodeprecated", "-sourcepath",
             SRC_DIR, "pkg1"};
 
     /**
@@ -138,24 +136,10 @@
      */
     public static void main(String[] args) {
         TestSerializedFormDeprecationInfo tester = new TestSerializedFormDeprecationInfo();
-        run(tester, ARGS1, TEST_CMNT_DEPR, TEST_NOCMNT);
-        run(tester, ARGS2, TEST_NOCMNT, TEST_CMNT_DEPR);
-        run(tester, ARGS3, TEST_NODEPR, TEST_NOCMNT_NODEPR);
-        run(tester, ARGS4, TEST_NOCMNT_NODEPR, TEST_NODEPR);
+        tester.run(ARGS1, TEST_CMNT_DEPR, TEST_NOCMNT);
+        tester.run(ARGS2, TEST_NOCMNT, TEST_CMNT_DEPR);
+        tester.run(ARGS3, TEST_NODEPR, TEST_NOCMNT_NODEPR);
+        tester.run(ARGS4, TEST_NOCMNT_NODEPR, TEST_NODEPR);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSimpleTag/TestSimpleTag.java	Thu Apr 24 16:04:44 2014 -0700
@@ -37,22 +37,20 @@
 
 public class TestSimpleTag extends JavadocTester {
 
-    private static final String BUG_ID = "4695326-4750173-4920381";
-
     private static final String[][] TEST =
         new String[][] {
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "<span class=\"simpleTagLabel\">Todo:</span>"},
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "<span class=\"simpleTagLabel\">EJB Beans:</span>"},
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "<span class=\"simpleTagLabel\">Regular Tag:</span>"},
-            {"./" + BUG_ID + "/C.html",
+            { "C.html",
                 "<span class=\"simpleTagLabel\">Back-Slash-Tag:</span>"},
         };
 
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR,
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
         "-tag", "todo",
         "-tag", "ejb\\:bean:a:EJB Beans:",
         "-tag", "regular:a:Regular Tag:",
@@ -66,21 +64,7 @@
      */
     public static void main(String[] args) {
         TestSimpleTag tester = new TestSimpleTag();
-        run(tester, ARGS, TEST, NO_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testSimpleTagExclude/TestSimpleTagExclude.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSimpleTagExclude/TestSimpleTagExclude.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,13 +35,11 @@
 
 public class TestSimpleTagExclude extends JavadocTester {
 
-    private static final String BUG_ID = "4628181";
-    private static final String[][] TEST = NO_TEST;
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/DummyClass.html", "todo"}
+        { "DummyClass.html", "todo"}
     };
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "-tag", "todo:X",
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-tag", "todo:X",
         SRC_DIR + "/DummyClass.java"
     };
 
@@ -51,23 +49,9 @@
      */
     public static void main(String[] args) {
         TestSimpleTagExclude tester = new TestSimpleTagExclude();
-        if (run(tester, ARGS, TEST, NEGATED_TEST) != 0) {
+        if (tester.run(ARGS, NO_TEST, NEGATED_TEST) != 0) {
             throw new Error("Javadoc failed to execute.");
         }
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testSimpleTagInherit/TestSimpleTagInherit.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSimpleTagInherit/TestSimpleTagInherit.java	Thu Apr 24 16:04:44 2014 -0700
@@ -32,10 +32,6 @@
 
 public class TestSimpleTagInherit extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "8008768";
-    private static final String OUTPUT_DIR = BUG_ID;
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
         "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
@@ -45,14 +41,13 @@
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        { BUG_ID + "/p/TestClass.html",
+        { "p/TestClass.html",
           "<dt><span class=\"simpleTagLabel\"><em>Custom:</em></span></dt>\n" +
           "<dd>doc for BaseClass class</dd>" },
-        { BUG_ID + "/p/TestClass.html",
+        { "p/TestClass.html",
           "<dt><span class=\"simpleTagLabel\"><em>Custom:</em></span></dt>\n" +
           "<dd>doc for BaseClass method</dd>" }
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -60,21 +55,7 @@
      */
     public static void main(String[] args) {
         TestSimpleTagInherit tester = new TestSimpleTagInherit();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testSinceTag/TestSinceTag.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSinceTag/TestSinceTag.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,26 +33,23 @@
 
 public class TestSinceTag extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "7180906";
-
     //Javadoc arguments.
     private static final String[] ARGS1 = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"
     };
 
     private static final String[] ARGS2 = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "-nosince", "pkg1"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-nosince", "pkg1"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg1/C1.html",
+        { "pkg1/C1.html",
             "<dl>\n" +
             "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
             "<dd>JDK1.0</dd>"
         },
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
             "<dl>\n" +
             "<dt><span class=\"simpleTagLabel\">Since:</span></dt>\n" +
             "<dd>1.4</dd>"
@@ -65,22 +62,8 @@
      */
     public static void main(String[] args) {
         TestSinceTag tester = new TestSinceTag();
-        run(tester, ARGS1, TEST, NO_TEST);
-        run(tester, ARGS2, NO_TEST, TEST);
+        tester.run(ARGS1, TEST, NO_TEST);
+        tester.run(ARGS2, NO_TEST, TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testSingleQuotedLink/TestSingleQuotedLink.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSingleQuotedLink/TestSingleQuotedLink.java	Thu Apr 24 16:04:44 2014 -0700
@@ -32,21 +32,20 @@
  */
 public class TestSingleQuotedLink extends JavadocTester {
 
-    private static final String BUG_ID = "6457406";
     // We are testing the redirection algorithm with a known scenario when a writer is not forced to ignore it: "-use".
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg1/class-use/C1.html",
+        { "pkg1/class-use/C1.html",
             "<a href=\'http://download.oracle.com/javase/8/docs/technotes/guides/indexC2.html\'>"
         }
     };
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg1/class-use/C1.html",
+        { "pkg1/class-use/C1.html",
             "pkg1/\'http://download.oracle.com/javase/8/docs/technotes/guides/indexC2.html\'>"
         }
     };
     private static final String[] ARGS =
             new String[]{
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "-use", "pkg1"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "pkg1"
     };
 
     /**
@@ -55,21 +54,7 @@
      */
     public static void main(String[] args) {
         TestSingleQuotedLink tester = new TestSingleQuotedLink();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testSourceTab/TestSourceTab.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSourceTab/TestSourceTab.java	Thu Apr 24 16:04:44 2014 -0700
@@ -37,12 +37,9 @@
 
 public class TestSourceTab extends JavadocTester {
 
-    private static final String BUG_ID = "4510979";
     private static final String TMP_SRC_DIR = "tmpSrc";
-    private static final String OUTPUT_DIR1 = BUG_ID + "-tabLengthEight";
-    private static final String OUTPUT_DIR2 = BUG_ID + "-tabLengthFour";
-    private static final String[][] TEST = NO_TEST;
-    private static final String[][] NEGATED_TEST = NO_TEST;
+    private static final String OUTPUT_DIR1 = OUTPUT_DIR + "-tabLengthEight";
+    private static final String OUTPUT_DIR2 = OUTPUT_DIR + "-tabLengthFour";
 
     //Run Javadoc on a source file with that is indented with a single tab per line
     private static final String[] ARGS1 =
@@ -61,14 +58,9 @@
         };
 
     //Files to diff
-    private static final String[][] FILES_TO_DIFF = {
-        {OUTPUT_DIR1 + "/src-html/C.html",
-         OUTPUT_DIR2 + "/src-html/C.html"
-        },
-        {OUTPUT_DIR1 + "/C.html",
-         OUTPUT_DIR2 + "/C.html"
-        }
-
+    private static final String[] FILES_TO_DIFF = {
+        "src-html/C.html",
+        "C.html"
     };
 
     /**
@@ -77,9 +69,9 @@
      */
     public static void main(String[] args) throws IOException {
         TestSourceTab tester = new TestSourceTab();
-        run(tester, ARGS1, TEST, NEGATED_TEST);
-        run(tester, ARGS2, TEST, NEGATED_TEST);
-        tester.runDiffs(FILES_TO_DIFF);
+        tester.run(ARGS1, NO_TEST, NO_TEST);
+        tester.run(ARGS2, NO_TEST, NO_TEST);
+        tester.runDiffs(OUTPUT_DIR1, OUTPUT_DIR2, FILES_TO_DIFF);
     }
 
     TestSourceTab() throws IOException {
@@ -121,18 +113,4 @@
             out.close();
         }
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testStylesheet/TestStylesheet.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testStylesheet/TestStylesheet.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,31 +33,28 @@
 
 public class TestStylesheet extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4494033-7028815-7052425-8007338";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/stylesheet.css",
+        { "stylesheet.css",
             "/* Javadoc style sheet */"},
-        {BUG_ID + "/stylesheet.css",
+        { "stylesheet.css",
             "/*\n" +
             "Overall document style\n" +
             "*/"},
-        {BUG_ID + "/stylesheet.css",
+        { "stylesheet.css",
             "/*\n" +
             "Heading styles\n" +
             "*/"},
-        {BUG_ID + "/stylesheet.css",
+        { "stylesheet.css",
             "/*\n" +
             "Navigation bar styles\n" +
             "*/"},
-        {BUG_ID + "/stylesheet.css",
+        { "stylesheet.css",
             "body {\n" +
             "    background-color:#ffffff;\n" +
             "    color:#353833;\n" +
@@ -65,11 +62,11 @@
             "    font-size:14px;\n" +
             "    margin:0;\n" +
             "}"},
-        {BUG_ID + "/stylesheet.css",
+        { "stylesheet.css",
             "ul {\n" +
             "    list-style-type:disc;\n" +
             "}"},
-        {BUG_ID + "/stylesheet.css",
+        { "stylesheet.css",
             ".overviewSummary caption, .memberSummary caption, .typeSummary caption,\n" +
             ".useSummary caption, .constantsSummary caption, .deprecatedSummary caption {\n" +
             "    position:relative;\n" +
@@ -85,7 +82,7 @@
             "    margin:0px;\n" +
             "    white-space:pre;\n" +
             "}"},
-        {BUG_ID + "/stylesheet.css",
+        { "stylesheet.css",
             ".overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,\n" +
             ".useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span {\n" +
             "    white-space:nowrap;\n" +
@@ -99,7 +96,7 @@
             "    border: none;\n" +
             "    height:16px;\n" +
             "}"},
-        {BUG_ID + "/stylesheet.css",
+        { "stylesheet.css",
             ".memberSummary caption span.activeTableTab span {\n" +
             "    white-space:nowrap;\n" +
             "    padding-top:5px;\n" +
@@ -111,7 +108,7 @@
             "    background-color:#F8981D;\n" +
             "    height:16px;\n" +
             "}"},
-        {BUG_ID + "/stylesheet.css",
+        { "stylesheet.css",
             ".memberSummary caption span.tableTab span {\n" +
             "    white-space:nowrap;\n" +
             "    padding-top:5px;\n" +
@@ -123,7 +120,7 @@
             "    background-color:#4D7A97;\n" +
             "    height:16px;\n" +
             "}"},
-        {BUG_ID + "/stylesheet.css",
+        { "stylesheet.css",
             ".memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab {\n" +
             "    padding-top:0px;\n" +
             "    padding-left:0px;\n" +
@@ -132,16 +129,16 @@
             "    float:none;\n" +
             "    display:inline;\n" +
             "}"},
-        {BUG_ID + "/stylesheet.css",
+        { "stylesheet.css",
             "@import url('resources/fonts/dejavu.css');"},
         // Test whether a link to the stylesheet file is inserted properly
         // in the class documentation.
-        {BUG_ID + "/pkg/A.html",
+        { "pkg/A.html",
             "<link rel=\"stylesheet\" type=\"text/css\" " +
             "href=\"../stylesheet.css\" title=\"Style\">"}
     };
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/stylesheet.css",
+        { "stylesheet.css",
             "* {\n" +
             "    margin:0;\n" +
             "    padding:0;\n" +
@@ -154,21 +151,7 @@
      */
     public static void main(String[] args) {
         TestStylesheet tester = new TestStylesheet();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testSubTitle/TestSubTitle.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSubTitle/TestSubTitle.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,28 +34,27 @@
 
 public class TestSubTitle extends JavadocTester {
 
-    private static final String BUG_ID = "7010342";
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/package-summary.html",
+        { "pkg/package-summary.html",
             "<div class=\"block\">This is the description of package pkg.</div>"
         },
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<div class=\"subTitle\">pkg</div>"
         }
     };
     private static final String[][] NEG_TEST = {
-        {BUG_ID + "/pkg/package-summary.html",
+        { "pkg/package-summary.html",
             "<p class=\"subTitle\">\n" +
             "<div class=\"block\">This is the " +
             "description of package pkg.</div>\n" +
             "</p>"
         },
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<p class=\"subTitle\">pkg</p>"
         }
     };
     private static final String[] ARGS = new String[]{
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     /**
@@ -64,21 +63,7 @@
      */
     public static void main(String[] args) {
         TestSubTitle tester = new TestSubTitle();
-        run(tester, ARGS, TEST, NEG_TEST);
+        tester.run(ARGS, TEST, NEG_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSummaryHeading/TestSummaryHeading.java	Thu Apr 24 16:04:44 2014 -0700
@@ -36,19 +36,15 @@
 
 public class TestSummaryHeading extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4904036";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/C.html",  "<h3>Method Summary</h3>"}
+        { "C.html",  "<h3>Method Summary</h3>"}
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -56,21 +52,7 @@
      */
     public static void main(String[] args) {
         TestSummaryHeading tester = new TestSummaryHeading();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testSuperclassInSerialForm/TestSuperClassInSerialForm.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSuperclassInSerialForm/TestSuperClassInSerialForm.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,16 +35,13 @@
 
 public class TestSuperClassInSerialForm extends JavadocTester {
 
-    private static final String BUG_ID = "4671694";
-
     private static final String[][] TEST = {
-        {BUG_ID + "/serialized-form.html",
+        { "serialized-form.html",
          "<a href=\"pkg/SubClass.html\" title=\"class in pkg\">pkg.SubClass</a> extends <a href=\"pkg/SuperClass.html\" title=\"class in pkg\">SuperClass</a>"}
     };
 
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     /**
@@ -53,21 +50,7 @@
      */
     public static void main(String[] args) {
         TestSuperClassInSerialForm tester = new TestSuperClassInSerialForm();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testSupplementary/TestSupplementary.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testSupplementary/TestSupplementary.java	Thu Apr 24 16:04:44 2014 -0700
@@ -37,7 +37,6 @@
 
 public class TestSupplementary extends JavadocTester {
 
-    private static final String BUG_ID = "4914724";
     private static final String[][] TEST = {
         {WARNING_OUTPUT, "C.java:38: warning - Tag @see:illegal character: \"119040\" in \"C#method\ud834\udd00()"},
         {WARNING_OUTPUT, "C.java:44: warning - illegal character \ud801 in @serialField tag: field\ud801\ud801 int."},
@@ -50,7 +49,7 @@
         {WARNING_OUTPUT, "C.java:31: warning - illegal character"},
     };
     private static final String[] ARGS = new String[] {
-        "-locale", "en_US", "-d", BUG_ID, SRC_DIR + "/C.java"
+        "-locale", "en_US", "-d", OUTPUT_DIR, SRC_DIR + "/C.java"
     };
 
     /**
@@ -61,24 +60,10 @@
         Locale saveLocale = Locale.getDefault();
         try {
             TestSupplementary tester = new TestSupplementary();
-            run(tester, ARGS, TEST, NEGATED_TEST);
+            tester.run(ARGS, TEST, NEGATED_TEST);
             tester.printSummary();
         } finally {
             Locale.setDefault(saveLocale);
         }
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testTagHolderMethod/TestTagHolderMethod.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTagHolderMethod/TestTagHolderMethod.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -21,8 +21,6 @@
  * questions.
  */
 
-import com.sun.javadoc.*;
-
 /*
  * @test
  * @bug 4706525
@@ -34,9 +32,10 @@
  * @run main TestTagHolderMethod
  */
 
+import com.sun.javadoc.*;
+
 public class TestTagHolderMethod extends JavadocTester {
 
-    private static final String BUG_ID = "4706525";
     public static final String[] ARGS = new String[] {
         "-docletpath", SRC_DIR, "-doclet", "TestTagHolderMethod", "-sourcepath",
                 SRC_DIR, "pkg"};
@@ -74,20 +73,7 @@
      * @param args the array of command line arguments.
      */
     public static void main(String[] args) {
-        run(new TestTagHolderMethod(), ARGS, new String[][]{}, new String[][]{});
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
+        JavadocTester tester = new TestTagHolderMethod();
+        tester.run(ARGS, new String[][]{}, new String[][]{});
     }
 }
--- a/langtools/test/com/sun/javadoc/testTagInheritence/TestTagInheritence.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTagInheritence/TestTagInheritence.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,10 +34,8 @@
 
 public class TestTagInheritence extends JavadocTester {
 
-    private static final String BUG_ID =
-        "4496223-4496270-4618686-4720974-4812240-6253614-6253604";
     private static final String[] ARGS = new String[] {
-        "-Xdoclint:none", "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg",
+        "-Xdoclint:none", "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg",
         "firstSentence", "firstSentence2"
     };
 
@@ -54,36 +52,20 @@
 
         //Test valid usage of inheritDoc tag.
         for (int i = 1; i < tests.length-2; i++) {
-            tests[i][0] = BUG_ID + "/pkg/TestTagInheritence.html";
+            tests[i][0] = "pkg/TestTagInheritence.html";
             tests[i][1] = "Test " + i + " passes";
         }
 
         //First sentence test (6253614)
-        tests[tests.length - 2][0] =BUG_ID + "/firstSentence/" +
-            "B.html";
+        tests[tests.length - 2][0] = "firstSentence/B.html";
         tests[tests.length - 2][1] =  "<div class=\"block\">First sentence.</div>";
 
         //Another first sentence test (6253604)
-        tests[tests.length - 1][0] =BUG_ID + "/firstSentence2/" +
-            "C.html";
+        tests[tests.length - 1][0] = "firstSentence2/C.html";
         tests[tests.length - 1][1] =  "<div class=\"block\">First sentence.</div>";
 
         TestTagInheritence tester = new TestTagInheritence();
-        run(tester, ARGS, tests, NO_TEST);
+        tester.run(ARGS, tests, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testTagMisuse/TestTagMisuse.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTagMisuse/TestTagMisuse.java	Thu Apr 24 16:04:44 2014 -0700
@@ -32,16 +32,14 @@
  */
 public class TestTagMisuse extends JavadocTester {
 
-    private static final String BUG_ID = "no-bug-id";
     private static final String[][] TEST = {
         {WARNING_OUTPUT, "warning - Tag @param cannot be used in field documentation."},
         {WARNING_OUTPUT, "warning - Tag @throws cannot be used in field documentation."},
         {WARNING_OUTPUT, "warning - Tag @return cannot be used in constructor documentation."},
         {WARNING_OUTPUT, "warning - Tag @throws cannot be used in inline documentation."},
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS = new String[] {
-        "-Xdoclint:none", "-d", BUG_ID, SRC_DIR + "/TestTagMisuse.java"
+        "-Xdoclint:none", "-d", OUTPUT_DIR, SRC_DIR + "/TestTagMisuse.java"
     };
 
     /**
@@ -50,25 +48,11 @@
      */
     public static void main(String[] args) {
         TestTagMisuse tester = new TestTagMisuse();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
 
     /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
-
-    /**
      * {@throws blah}
      * Here is a bad field tag:
      * @throws foo
--- a/langtools/test/com/sun/javadoc/testTagOutput/TestTagOutput.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTagOutput/TestTagOutput.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,22 +35,21 @@
 
 public class TestTagOutput extends JavadocTester {
 
-    private static final String BUG_ID = "8026370";
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg1/DeprecatedTag.html",
+        { "pkg1/DeprecatedTag.html",
             "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;</div>"},
-        {BUG_ID + "/pkg1/DeprecatedTag.html",
+        { "pkg1/DeprecatedTag.html",
             "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated.</span>&nbsp;" +
             "<span class=\"deprecationComment\">Do not use this.</span></div>"}};
 
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg1/DeprecatedTag.html",
+        { "pkg1/DeprecatedTag.html",
             "<div class=\"block\"><span class=\"deprecatedLabel\">Deprecated." +
             "</span>&nbsp;<span class=\"deprecationComment\"></span></div>"}};
 
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg1"};
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg1"};
 
     /**
      * The entry point of the test.
@@ -58,21 +57,7 @@
      */
     public static void main(String[] args) {
         TestTagOutput tester = new TestTagOutput();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testTaglets/TestTaglets.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTaglets/TestTaglets.java	Thu Apr 24 16:04:44 2014 -0700
@@ -38,10 +38,6 @@
 
 public class TestTaglets extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4654308-4767038";
-    private static final String OUTPUT_DIR = BUG_ID;
-
     //Javadoc arguments.
     private static final String[] ARGS_4654308 = new String[] {
         "-d", "4654308", "-tagletpath", SRC_DIR, "-taglet", "taglets.Foo",
@@ -55,17 +51,15 @@
 
     //Input for string search tests.
     private static final String[][] TEST_4654308 = new String[][] {
-        {"4654308/C.html", "<span class=\"simpleTagLabel\">Foo:</span></dt>" +
+        { "C.html", "<span class=\"simpleTagLabel\">Foo:</span></dt>" +
                  "<dd>my only method is <a href=\"C.html#method--\"><code>here" +
                  "</code></a></dd></dl>"}
     };
-    private static final String[][] NEGATED_TEST_4654308 = NO_TEST;
 
     private static final String[][] TEST_4767038 = new String[][] {
-        {"4767038/Child.html",
+        { "Child.html",
             "This is the first sentence."}
     };
-    private static final String[][] NEGATED_TEST_4767038 = NO_TEST;
 
 
     /**
@@ -74,24 +68,10 @@
      */
     public static void main(String[] args) {
         TestTaglets tester = new TestTaglets();
-        run(tester, ARGS_4654308, TEST_4654308, NEGATED_TEST_4654308);
+        tester.run(ARGS_4654308, TEST_4654308, NO_TEST);
         tester.printSummary();
         tester = new TestTaglets();
-        run(tester, ARGS_4767038, TEST_4767038, NEGATED_TEST_4767038);
+        tester.run(ARGS_4767038, TEST_4767038, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testThrowsHead/TestThrowsHead.java	Thu Apr 24 16:04:44 2014 -0700
@@ -21,7 +21,7 @@
  * questions.
  */
 
-/**
+/*
  * @test
  * @bug 4530727 8026567
  * @summary When an exception is declared in the method signature but
@@ -36,13 +36,11 @@
 
 public class TestThrowsHead extends JavadocTester {
 
-    private static final String BUG_ID = "4530727";
     private static final String[][] TEST = {
-        {BUG_ID + "/C.html", "<dt><span class=\"throwsLabel\">Throws:</span>"}
+        { "C.html", "<dt><span class=\"throwsLabel\">Throws:</span>"}
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, SRC_DIR + "/C.java"
+        "-d", OUTPUT_DIR, SRC_DIR + "/C.java"
     };
 
     /**
@@ -51,21 +49,7 @@
      */
     public static void main(String[] args) {
         TestThrowsHead tester = new TestThrowsHead();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testThrowsInheritence/TestThrowsTagInheritence.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testThrowsInheritence/TestThrowsTagInheritence.java	Thu Apr 24 16:04:44 2014 -0700
@@ -36,18 +36,17 @@
 
 public class TestThrowsTagInheritence extends JavadocTester {
 
-    private static final String BUG_ID = "4684827-4633969";
     private static final String[][] TEST = {
         //The class should not inherit the tag from the interface.
-        {BUG_ID + "/Foo.html", "Test 1 passes."}
+        { "Foo.html", "Test 1 passes."}
     };
     private static final String[][] NEGATED_TEST = {
         //The class should not inherit the tag from the interface.
-        {BUG_ID + "/C.html", "Test 1 fails."}
+        { "C.html", "Test 1 fails."}
 
     };
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java",
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java",
         SRC_DIR + "/I.java", SRC_DIR + "/Foo.java",
         SRC_DIR + "/Iface.java"
     };
@@ -58,21 +57,7 @@
      */
     public static void main(String[] args) {
         TestThrowsTagInheritence tester = new TestThrowsTagInheritence();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testThrowsTag/TestThrowsTag.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,17 +35,14 @@
 
 public class TestThrowsTag extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4985072";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<dd><code><a href=\"../pkg/T1.html\" title=\"class in pkg\">T1</a></code> - the first throws tag.</dd>\n" +
             "<dd><code><a href=\"../pkg/T2.html\" title=\"class in pkg\">T2</a></code> - the second throws tag.</dd>\n" +
             "<dd><code><a href=\"../pkg/T3.html\" title=\"class in pkg\">T3</a></code> - the third throws tag.</dd>\n" +
@@ -56,7 +53,6 @@
             "<dd><code><a href=\"../pkg/T8.html\" title=\"class in pkg\">T8</a></code> - the fourth inherited throws tag.</dd>"
         },
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -64,21 +60,7 @@
      */
     public static void main(String[] args) {
         TestThrowsTag tester = new TestThrowsTag();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testTitleInHref/TestTitleInHref.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTitleInHref/TestTitleInHref.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,26 +34,23 @@
 
 public class TestTitleInHref extends JavadocTester {
 
-    private static final String BUG_ID = "4714257";
-
     private static final String[][] TEST = {
         //Test to make sure that the title shows up in a class link.
-        {BUG_ID + "/pkg/Links.html",
+        { "pkg/Links.html",
             "<a href=\"../pkg/Class.html\" title=\"class in pkg\">"},
 
         //Test to make sure that the title shows up in an interface link.
-        {BUG_ID + "/pkg/Links.html",
+        { "pkg/Links.html",
             "<a href=\"../pkg/Interface.html\" title=\"interface in pkg\">"},
 
         //Test to make sure that the title shows up in cross link shows up
-        {BUG_ID + "/pkg/Links.html",
+        { "pkg/Links.html",
             "<a href=\"http://java.sun.com/j2se/1.4/docs/api/java/io/File.html?is-external=true\" title=\"class or interface in java.io\"><code>This is a cross link to class File</code></a>"},
 
     };
 
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR,
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
         "-linkoffline", "http://java.sun.com/j2se/1.4/docs/api",
         SRC_DIR, "pkg"
     };
@@ -64,21 +61,7 @@
      */
     public static void main(String[] args) {
         TestTitleInHref tester = new TestTitleInHref();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testTopOption/TestTopOption.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTopOption/TestTopOption.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,43 +34,39 @@
 
 public class TestTopOption extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "6227616";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
         "-overview", "SRC_DIR + '/' + overview.html", "-use", "-top",
-        "TOP TEXT", "-d", BUG_ID, "-sourcepath",
+        "TOP TEXT", "-d", OUTPUT_DIR, "-sourcepath",
         SRC_DIR, "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/AnnotationType.html",
+        { "pkg/AnnotationType.html",
             "TOP TEXT"},
-        {BUG_ID + "/pkg/class-use/AnnotationType.html",
+        { "pkg/class-use/AnnotationType.html",
             "TOP TEXT"},
 
-        {BUG_ID + "/pkg/Cl.html",
+        { "pkg/Cl.html",
             "TOP TEXT"},
-        {BUG_ID + "/pkg/class-use/Cl.html",
+        { "pkg/class-use/Cl.html",
             "TOP TEXT"},
 
-        {BUG_ID + "/pkg/package-summary.html",
+        { "pkg/package-summary.html",
             "TOP TEXT"},
-        {BUG_ID + "/pkg/package-use.html",
+        { "pkg/package-use.html",
            "TOP TEXT"},
 
-        {BUG_ID + "/overview-summary.html",
+        { "overview-summary.html",
             "TOP TEXT"},
-        {BUG_ID + "/overview-tree.html",
+        { "overview-tree.html",
             "TOP TEXT"},
-        {BUG_ID + "/constant-values.html",
+        { "constant-values.html",
             "TOP TEXT"},
-        {BUG_ID + "/help-doc.html",
+        { "help-doc.html",
             "TOP TEXT"},
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -78,21 +74,7 @@
      */
     public static void main(String[] args) {
         TestTopOption tester = new TestTopOption();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testTypeAnnotations/TestTypeAnnotations.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTypeAnnotations/TestTypeAnnotations.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,26 +34,22 @@
 
 public class TestTypeAnnotations extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "8005091-8009686";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "-private", "typeannos"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-private", "typeannos"
     };
 
     //Input for string search tests.
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[][] TEST = {
         // Test for type annotations on Class Extends (ClassExtends.java).
-        {BUG_ID + "/typeannos/MyClass.html",
+        { "typeannos/MyClass.html",
             "extends <a href=\"../typeannos/ClassExtA.html\" title=\"annotation " +
             "in typeannos\">@ClassExtA</a> <a href=\"../typeannos/ParameterizedClass.html\" " +
             "title=\"class in typeannos\">ParameterizedClass</a>&lt;<a href=\"" +
             "../typeannos/ClassExtB.html\" title=\"annotation in typeannos\">" +
             "@ClassExtB</a> java.lang.String&gt;"
         },
-        {BUG_ID + "/typeannos/MyClass.html",
+        { "typeannos/MyClass.html",
             "implements <a href=\"../typeannos/ClassExtB.html\" title=\"" +
             "annotation in typeannos\">@ClassExtB</a> java.lang.CharSequence, " +
             "<a href=\"../typeannos/ClassExtA.html\" title=\"annotation in " +
@@ -62,7 +58,7 @@
             "<a href=\"../typeannos/ClassExtB.html\" title=\"annotation in " +
             "typeannos\">@ClassExtB</a> java.lang.String&gt;</pre>"
         },
-        {BUG_ID + "/typeannos/MyInterface.html",
+        { "typeannos/MyInterface.html",
             "extends <a href=\"../typeannos/ClassExtA.html\" title=\"annotation " +
             "in typeannos\">@ClassExtA</a> <a href=\"../typeannos/" +
             "ParameterizedInterface.html\" title=\"interface in typeannos\">" +
@@ -73,12 +69,12 @@
         },
 
         // Test for type annotations on Class Parameters (ClassParameters.java).
-        {BUG_ID + "/typeannos/ExtendsBound.html",
+        { "typeannos/ExtendsBound.html",
             "class <span class=\"typeNameLabel\">ExtendsBound&lt;K extends <a " +
             "href=\"../typeannos/ClassParamA.html\" title=\"annotation in " +
             "typeannos\">@ClassParamA</a> java.lang.String&gt;</span>"
         },
-        {BUG_ID + "/typeannos/ExtendsGeneric.html",
+        { "typeannos/ExtendsGeneric.html",
             "<pre>class <span class=\"typeNameLabel\">ExtendsGeneric&lt;K extends " +
             "<a href=\"../typeannos/ClassParamA.html\" title=\"annotation in " +
             "typeannos\">@ClassParamA</a> <a href=\"../typeannos/Unannotated.html\" " +
@@ -86,24 +82,24 @@
             "../typeannos/ClassParamB.html\" title=\"annotation in typeannos\">" +
             "@ClassParamB</a> java.lang.String&gt;&gt;</span>"
         },
-        {BUG_ID + "/typeannos/TwoBounds.html",
+        { "typeannos/TwoBounds.html",
             "<pre>class <span class=\"typeNameLabel\">TwoBounds&lt;K extends <a href=\"" +
             "../typeannos/ClassParamA.html\" title=\"annotation in typeannos\">" +
             "@ClassParamA</a> java.lang.String,V extends <a href=\"../typeannos/" +
             "ClassParamB.html\" title=\"annotation in typeannos\">@ClassParamB" +
             "</a> java.lang.String&gt;</span>"
         },
-        {BUG_ID + "/typeannos/Complex1.html",
+        { "typeannos/Complex1.html",
             "class <span class=\"typeNameLabel\">Complex1&lt;K extends <a href=\"../" +
             "typeannos/ClassParamA.html\" title=\"annotation in typeannos\">" +
             "@ClassParamA</a> java.lang.String &amp; java.lang.Runnable&gt;</span>"
         },
-        {BUG_ID + "/typeannos/Complex2.html",
+        { "typeannos/Complex2.html",
             "class <span class=\"typeNameLabel\">Complex2&lt;K extends java.lang." +
             "String &amp; <a href=\"../typeannos/ClassParamB.html\" title=\"" +
             "annotation in typeannos\">@ClassParamB</a> java.lang.Runnable&gt;</span>"
         },
-        {BUG_ID + "/typeannos/ComplexBoth.html",
+        { "typeannos/ComplexBoth.html",
             "class <span class=\"typeNameLabel\">ComplexBoth&lt;K extends <a href=\"" +
             "../typeannos/ClassParamA.html\" title=\"annotation in typeannos\"" +
             ">@ClassParamA</a> java.lang.String &amp; <a href=\"../typeannos/" +
@@ -112,24 +108,24 @@
         },
 
         // Test for type annotations on fields (Fields.java).
-        {BUG_ID + "/typeannos/DefaultScope.html",
+        { "typeannos/DefaultScope.html",
             "<pre><a href=\"../typeannos/Parameterized.html\" title=\"class in " +
             "typeannos\">Parameterized</a>&lt;<a href=\"../typeannos/FldA.html\" " +
             "title=\"annotation in typeannos\">@FldA</a> java.lang.String,<a " +
             "href=\"../typeannos/FldB.html\" title=\"annotation in typeannos\">" +
             "@FldB</a> java.lang.String&gt; bothTypeArgs</pre>"
         },
-        {BUG_ID + "/typeannos/DefaultScope.html",
+        { "typeannos/DefaultScope.html",
             "<pre><a href=\"../typeannos/FldA.html\" title=\"annotation in " +
             "typeannos\">@FldA</a> java.lang.String <a href=\"../typeannos/" +
             "FldB.html\" title=\"annotation in typeannos\">@FldB</a> [] " +
             "array1Deep</pre>"
         },
-        {BUG_ID + "/typeannos/DefaultScope.html",
+        { "typeannos/DefaultScope.html",
             "<pre>java.lang.String[] <a href=\"../typeannos/FldB.html\" " +
             "title=\"annotation in typeannos\">@FldB</a> [] array2SecondOld</pre>"
         },
-        {BUG_ID + "/typeannos/DefaultScope.html",
+        { "typeannos/DefaultScope.html",
             "<pre><a href=\"../typeannos/FldD.html\" title=\"annotation in " +
             "typeannos\">@FldD</a> java.lang.String <a href=\"../typeannos/" +
             "FldC.html\" title=\"annotation in typeannos\">@FldC</a> <a href=\"" +
@@ -138,7 +134,7 @@
             "typeannos\">@FldC</a> <a href=\"../typeannos/FldB.html\" title=\"" +
             "annotation in typeannos\">@FldB</a> [] array2Deep</pre>"
         },
-        {BUG_ID + "/typeannos/ModifiedScoped.html",
+        { "typeannos/ModifiedScoped.html",
             "<pre>public final&nbsp;<a href=\"../typeannos/Parameterized.html\" " +
             "title=\"class in typeannos\">Parameterized</a>&lt;<a href=\"../" +
             "typeannos/FldA.html\" title=\"annotation in typeannos\">@FldA</a> " +
@@ -150,30 +146,30 @@
             "title=\"annotation in typeannos\">@FldB</a> java.lang.String&gt; " +
             "nestedParameterized</pre>"
         },
-        {BUG_ID + "/typeannos/ModifiedScoped.html",
+        { "typeannos/ModifiedScoped.html",
             "<pre>public final&nbsp;<a href=\"../typeannos/FldA.html\" " +
             "title=\"annotation in typeannos\">@FldA</a> java.lang.String[][] " +
             "array2</pre>"
         },
 
         // Test for type annotations on method return types (MethodReturnType.java).
-        {BUG_ID + "/typeannos/MtdDefaultScope.html",
+        { "typeannos/MtdDefaultScope.html",
             "<pre>public&nbsp;&lt;T&gt;&nbsp;<a href=\"../typeannos/MRtnA.html\" " +
             "title=\"annotation in typeannos\">@MRtnA</a> java.lang.String" +
             "&nbsp;method()</pre>"
         },
-        {BUG_ID + "/typeannos/MtdDefaultScope.html",
+        { "typeannos/MtdDefaultScope.html",
             "<pre><a href=\"../typeannos/MRtnA.html\" title=\"annotation in " +
             "typeannos\">@MRtnA</a> java.lang.String <a href=\"../typeannos/" +
             "MRtnA.html\" title=\"annotation in typeannos\">@MRtnA</a> [] <a " +
             "href=\"../typeannos/MRtnB.html\" title=\"annotation in typeannos\">" +
             "@MRtnB</a> []&nbsp;array2Deep()</pre>"
         },
-        {BUG_ID + "/typeannos/MtdDefaultScope.html",
+        { "typeannos/MtdDefaultScope.html",
             "<pre><a href=\"../typeannos/MRtnA.html\" title=\"annotation in " +
             "typeannos\">@MRtnA</a> java.lang.String[][]&nbsp;array2()</pre>"
         },
-        {BUG_ID + "/typeannos/MtdModifiedScoped.html",
+        { "typeannos/MtdModifiedScoped.html",
             "<pre>public final&nbsp;<a href=\"../typeannos/MtdParameterized.html\" " +
             "title=\"class in typeannos\">MtdParameterized</a>&lt;<a href=\"../" +
             "typeannos/MRtnA.html\" title=\"annotation in typeannos\">@MRtnA</a> " +
@@ -187,12 +183,12 @@
         },
 
         // Test for type annotations on method type parameters (MethodTypeParameters.java).
-        {BUG_ID + "/typeannos/UnscopedUnmodified.html",
+        { "typeannos/UnscopedUnmodified.html",
             "<pre>&lt;K extends <a href=\"../typeannos/MTyParamA.html\" title=\"" +
             "annotation in typeannos\">@MTyParamA</a> java.lang.String&gt;" +
             "&nbsp;void&nbsp;methodExtends()</pre>"
         },
-        {BUG_ID + "/typeannos/UnscopedUnmodified.html",
+        { "typeannos/UnscopedUnmodified.html",
             "<pre>&lt;K extends <a href=\"../typeannos/MTyParamA.html\" title=\"" +
             "annotation in typeannos\">@MTyParamA</a> <a href=\"../typeannos/" +
             "MtdTyParameterized.html\" title=\"class in typeannos\">" +
@@ -200,12 +196,12 @@
             "title=\"annotation in typeannos\">@MTyParamB</a> java.lang.String" +
             "&gt;&gt;&nbsp;void&nbsp;nestedExtends()</pre>"
         },
-        {BUG_ID + "/typeannos/PublicModifiedMethods.html",
+        { "typeannos/PublicModifiedMethods.html",
             "<pre>public final&nbsp;&lt;K extends <a href=\"../typeannos/" +
             "MTyParamA.html\" title=\"annotation in typeannos\">@MTyParamA</a> " +
             "java.lang.String&gt;&nbsp;void&nbsp;methodExtends()</pre>"
         },
-        {BUG_ID + "/typeannos/PublicModifiedMethods.html",
+        { "typeannos/PublicModifiedMethods.html",
             "<pre>public final&nbsp;&lt;K extends <a href=\"../typeannos/" +
             "MTyParamA.html\" title=\"annotation in typeannos\">@MTyParamA</a> " +
             "java.lang.String,V extends <a href=\"../typeannos/MTyParamA.html\" " +
@@ -217,13 +213,13 @@
         },
 
         // Test for type annotations on parameters (Parameters.java).
-        {BUG_ID + "/typeannos/Parameters.html",
+        { "typeannos/Parameters.html",
             "<pre>void&nbsp;unannotated(<a href=\"../typeannos/" +
             "ParaParameterized.html\" title=\"class in typeannos\">" +
             "ParaParameterized</a>&lt;java.lang.String,java.lang.String&gt;" +
             "&nbsp;a)</pre>"
         },
-        {BUG_ID + "/typeannos/Parameters.html",
+        { "typeannos/Parameters.html",
             "<pre>void&nbsp;nestedParaParameterized(<a href=\"../typeannos/" +
             "ParaParameterized.html\" title=\"class in typeannos\">" +
             "ParaParameterized</a>&lt;<a href=\"../typeannos/ParamA.html\" " +
@@ -236,7 +232,7 @@
             "typeannos/ParamB.html\" title=\"annotation in typeannos\">@ParamB" +
             "</a> java.lang.String&gt;&nbsp;a)</pre>"
         },
-        {BUG_ID + "/typeannos/Parameters.html",
+        { "typeannos/Parameters.html",
             "<pre>void&nbsp;array2Deep(<a href=\"../typeannos/ParamA.html\" " +
             "title=\"annotation in typeannos\">@ParamA</a> java.lang.String " +
             "<a href=\"../typeannos/ParamA.html\" title=\"annotation in " +
@@ -245,37 +241,37 @@
         },
 
         // Test for type annotations on throws (Throws.java).
-        {BUG_ID + "/typeannos/ThrDefaultUnmodified.html",
+        { "typeannos/ThrDefaultUnmodified.html",
             "<pre>void&nbsp;oneException()\n" +
             "           throws <a href=\"../typeannos/ThrA.html\" title=\"" +
             "annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>"
         },
-        {BUG_ID + "/typeannos/ThrDefaultUnmodified.html",
+        { "typeannos/ThrDefaultUnmodified.html",
             "<pre>void&nbsp;twoExceptions()\n" +
             "            throws <a href=\"../typeannos/ThrA.html\" title=\"" +
             "annotation in typeannos\">@ThrA</a> java.lang.RuntimeException,\n" +
             "                   <a href=\"../typeannos/ThrA.html\" title=\"" +
             "annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>"
         },
-        {BUG_ID + "/typeannos/ThrPublicModified.html",
+        { "typeannos/ThrPublicModified.html",
             "<pre>public final&nbsp;void&nbsp;oneException(java.lang.String&nbsp;a)\n" +
             "                        throws <a href=\"../typeannos/ThrA.html\" " +
             "title=\"annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>"
         },
-        {BUG_ID + "/typeannos/ThrPublicModified.html",
+        { "typeannos/ThrPublicModified.html",
             "<pre>public final&nbsp;void&nbsp;twoExceptions(java.lang.String&nbsp;a)\n" +
             "                         throws <a href=\"../typeannos/ThrA.html\" " +
             "title=\"annotation in typeannos\">@ThrA</a> java.lang.RuntimeException,\n" +
             "                                <a href=\"../typeannos/ThrA.html\" " +
             "title=\"annotation in typeannos\">@ThrA</a> java.lang.Exception</pre>"
         },
-        {BUG_ID + "/typeannos/ThrWithValue.html",
+        { "typeannos/ThrWithValue.html",
             "<pre>void&nbsp;oneException()\n" +
             "           throws <a href=\"../typeannos/ThrB.html\" title=\"" +
             "annotation in typeannos\">@ThrB</a>(<a href=\"../typeannos/" +
             "ThrB.html#value--\">value</a>=\"m\") java.lang.Exception</pre>"
         },
-        {BUG_ID + "/typeannos/ThrWithValue.html",
+        { "typeannos/ThrWithValue.html",
             "<pre>void&nbsp;twoExceptions()\n" +
             "            throws <a href=\"../typeannos/ThrB.html\" title=\"" +
             "annotation in typeannos\">@ThrB</a>(<a href=\"../typeannos/" +
@@ -285,33 +281,33 @@
         },
 
         // Test for type annotations on type parameters (TypeParameters.java).
-        {BUG_ID + "/typeannos/TestMethods.html",
+        { "typeannos/TestMethods.html",
             "<pre>&lt;K,V extends <a href=\"../typeannos/TyParaA.html\" title=\"" +
             "annotation in typeannos\">@TyParaA</a> java.lang.String&gt;&nbsp;" +
             "void&nbsp;secondAnnotated()</pre>"
         },
 
         // Test for type annotations on wildcard type (Wildcards.java).
-        {BUG_ID + "/typeannos/BoundTest.html",
+        { "typeannos/BoundTest.html",
             "<pre>void&nbsp;wcExtends(<a href=\"../typeannos/MyList.html\" " +
             "title=\"class in typeannos\">MyList</a>&lt;? extends <a href=\"" +
             "../typeannos/WldA.html\" title=\"annotation in typeannos\">@WldA" +
             "</a> java.lang.String&gt;&nbsp;l)</pre>"
         },
-        {BUG_ID + "/typeannos/BoundTest.html",
+        { "typeannos/BoundTest.html",
             "<pre><a href=\"../typeannos/MyList.html\" title=\"class in " +
             "typeannos\">MyList</a>&lt;? super <a href=\"../typeannos/WldA.html\" " +
             "title=\"annotation in typeannos\">@WldA</a> java.lang.String&gt;" +
             "&nbsp;returnWcSuper()</pre>"
         },
-        {BUG_ID + "/typeannos/BoundWithValue.html",
+        { "typeannos/BoundWithValue.html",
             "<pre>void&nbsp;wcSuper(<a href=\"../typeannos/MyList.html\" title=\"" +
             "class in typeannos\">MyList</a>&lt;? super <a href=\"../typeannos/" +
             "WldB.html\" title=\"annotation in typeannos\">@WldB</a>(<a href=\"" +
             "../typeannos/WldB.html#value--\">value</a>=\"m\") java.lang." +
             "String&gt;&nbsp;l)</pre>"
         },
-        {BUG_ID + "/typeannos/BoundWithValue.html",
+        { "typeannos/BoundWithValue.html",
             "<pre><a href=\"../typeannos/MyList.html\" title=\"class in " +
             "typeannos\">MyList</a>&lt;? extends <a href=\"../typeannos/WldB." +
             "html\" title=\"annotation in typeannos\">@WldB</a>(<a href=\"../" +
@@ -320,40 +316,40 @@
         },
 
         // Test for receiver annotations (Receivers.java).
-        {BUG_ID + "/typeannos/DefaultUnmodified.html",
+        { "typeannos/DefaultUnmodified.html",
             "<pre>void&nbsp;withException(<a href=\"../typeannos/RcvrA.html\" " +
             "title=\"annotation in typeannos\">@RcvrA</a>&nbsp;" +
             "DefaultUnmodified&nbsp;this)\n" +
             "            throws java." +
             "lang.Exception</pre>"
         },
-        {BUG_ID + "/typeannos/DefaultUnmodified.html",
+        { "typeannos/DefaultUnmodified.html",
             "<pre>java.lang.String&nbsp;nonVoid(<a href=\"../typeannos/RcvrA." +
             "html\" title=\"annotation in typeannos\">@RcvrA</a> <a href=\"../" +
             "typeannos/RcvrB.html\" title=\"annotation in typeannos\">@RcvrB" +
             "</a>(<a href=\"../typeannos/RcvrB.html#value--\">value</a>=\"m\")" +
             "&nbsp;DefaultUnmodified&nbsp;this)</pre>"
         },
-        {BUG_ID + "/typeannos/DefaultUnmodified.html",
+        { "typeannos/DefaultUnmodified.html",
             "<pre>&lt;T extends java.lang.Runnable&gt;&nbsp;void&nbsp;accept(" +
             "<a href=\"../typeannos/RcvrA.html\" title=\"annotation in " +
             "typeannos\">@RcvrA</a>&nbsp;DefaultUnmodified&nbsp;this,\n" +
             "                                           T&nbsp;r)\n" +
             "                                    throws java.lang.Exception</pre>"
         },
-        {BUG_ID + "/typeannos/PublicModified.html",
+        { "typeannos/PublicModified.html",
             "<pre>public final&nbsp;java.lang.String&nbsp;nonVoid(<a href=\"" +
             "../typeannos/RcvrA.html\" title=\"annotation in typeannos\">" +
             "@RcvrA</a>&nbsp;PublicModified&nbsp;this)</pre>"
         },
-        {BUG_ID + "/typeannos/PublicModified.html",
+        { "typeannos/PublicModified.html",
             "<pre>public final&nbsp;&lt;T extends java.lang.Runnable&gt;&nbsp;" +
             "void&nbsp;accept(<a href=\"../typeannos/RcvrA.html\" title=\"" +
             "annotation in typeannos\">@RcvrA</a>&nbsp;PublicModified&nbsp;this,\n" +
             "                                                        T&nbsp;r)\n" +
             "                                                 throws java.lang.Exception</pre>"
         },
-        {BUG_ID + "/typeannos/WithValue.html",
+        { "typeannos/WithValue.html",
             "<pre>&lt;T extends java.lang.Runnable&gt;&nbsp;void&nbsp;accept(" +
             "<a href=\"../typeannos/RcvrB.html\" title=\"annotation in " +
             "typeannos\">@RcvrB</a>(<a href=\"../typeannos/RcvrB.html#value--\">" +
@@ -361,17 +357,17 @@
             "                                           T&nbsp;r)\n" +
             "                                    throws java.lang.Exception</pre>"
         },
-        {BUG_ID + "/typeannos/WithFinal.html",
+        { "typeannos/WithFinal.html",
             "<pre>java.lang.String&nbsp;nonVoid(<a href=\"../typeannos/RcvrB." +
             "html\" title=\"annotation in typeannos\">@RcvrB</a>(<a href=\"../" +
             "typeannos/RcvrB.html#value--\">value</a>=\"m\")&nbsp;WithFinal" +
             "&nbsp;this)</pre>"
         },
-        {BUG_ID + "/typeannos/WithBody.html",
+        { "typeannos/WithBody.html",
             "<pre>void&nbsp;field(<a href=\"../typeannos/RcvrA.html\" title=\"" +
             "annotation in typeannos\">@RcvrA</a>&nbsp;WithBody&nbsp;this)</pre>"
         },
-        {BUG_ID + "/typeannos/Generic2.html",
+        { "typeannos/Generic2.html",
             "<pre>void&nbsp;test2(<a href=\"../typeannos/RcvrA.html\" title=\"" +
             "annotation in typeannos\">@RcvrA</a>&nbsp;Generic2&lt;X&gt;&nbsp;this)</pre>"
         }
@@ -383,21 +379,7 @@
      */
     public static void main(String[] args) {
         TestTypeAnnotations tester = new TestTypeAnnotations();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testTypeParams/TestTypeParameters.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testTypeParams/TestTypeParameters.java	Thu Apr 24 16:04:44 2014 -0700
@@ -37,54 +37,50 @@
 
 public class TestTypeParameters extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4927167-4974929-7010344";
-
     //Javadoc arguments.
     private static final String[] ARGS1 = new String[]{
-        "-d", BUG_ID, "-use", "-sourcepath", SRC_DIR,
+        "-d", OUTPUT_DIR, "-use", "-sourcepath", SRC_DIR,
         "pkg"
     };
     private static final String[] ARGS2 = new String[]{
-        "-d", BUG_ID, "-linksource", "-sourcepath", SRC_DIR,
+        "-d", OUTPUT_DIR, "-linksource", "-sourcepath", SRC_DIR,
         "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST1 = {
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<td class=\"colFirst\"><code>&lt;W extends java.lang.String,V extends " +
             "java.util.List&gt;<br>java.lang.Object</code></td>"
         },
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<code>&lt;T&gt;&nbsp;java.lang.Object</code>"
         },
-        {BUG_ID + "/pkg/package-summary.html",
+        { "pkg/package-summary.html",
             "C</a>&lt;E extends <a href=\"../pkg/Parent.html\" " +
             "title=\"class in pkg\">Parent</a>&gt;"
         },
-        {BUG_ID + "/pkg/class-use/Foo4.html",
+        { "pkg/class-use/Foo4.html",
             "<a href=\"../../pkg/ClassUseTest3.html\" title=\"class in pkg\">" +
             "ClassUseTest3</a>&lt;T extends <a href=\"../../pkg/ParamTest2.html\" " +
             "title=\"class in pkg\">ParamTest2</a>&lt;java.util.List&lt;? extends " +
             "<a href=\"../../pkg/Foo4.html\" title=\"class in pkg\">Foo4</a>&gt;&gt;&gt;"
         },
         //Nested type parameters
-        {BUG_ID + "/pkg/C.html",
+        { "pkg/C.html",
             "<a name=\"formatDetails-java.util.Collection-java.util.Collection-\">\n" +
             "<!--   -->\n" +
             "</a>"
         },
     };
     private static final String[][] TEST2 = {
-        {BUG_ID + "/pkg/ClassUseTest3.html",
+        { "pkg/ClassUseTest3.html",
             "public class <a href=\"../src-html/pkg/ClassUseTest3.html#line.28\">" +
             "ClassUseTest3</a>&lt;T extends <a href=\"../pkg/ParamTest2.html\" " +
             "title=\"class in pkg\">ParamTest2</a>&lt;java.util.List&lt;? extends " +
             "<a href=\"../pkg/Foo4.html\" title=\"class in pkg\">Foo4</a>&gt;&gt;&gt;"
         }
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     /**
      * The entry point of the test.
@@ -92,22 +88,8 @@
      */
     public static void main(String[] args) {
         TestTypeParameters tester = new TestTypeParameters();
-        run(tester, ARGS1, TEST1, NEGATED_TEST);
-        run(tester, ARGS2, TEST2, NEGATED_TEST);
+        tester.run(ARGS1, TEST1, NO_TEST);
+        tester.run(ARGS2, TEST2, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testUnnamedPackage/TestUnnamedPackage.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testUnnamedPackage/TestUnnamedPackage.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,32 +35,29 @@
 
 public class TestUnnamedPackage extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4904075-4774450-5015144";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, SRC_DIR + "/C.java"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/package-summary.html",
+        { "package-summary.html",
             "<h1 title=\"Package\" class=\"title\">Package&nbsp;&lt;Unnamed&gt;</h1>"
         },
-        {BUG_ID + "/package-summary.html",
+        { "package-summary.html",
             "This is a package comment for the unnamed package."
         },
-        {BUG_ID + "/package-summary.html",
+        { "package-summary.html",
             "This is a class in the unnamed package."
         },
-        {BUG_ID + "/package-tree.html",
+        { "package-tree.html",
             "<h1 class=\"title\">Hierarchy For Package &lt;Unnamed&gt;</h1>"
         },
-        {BUG_ID + "/index-all.html",
+        { "index-all.html",
             "title=\"class in &lt;Unnamed&gt;\""
         },
-        {BUG_ID + "/C.html", "<a href=\"package-summary.html\">"}
+        { "C.html", "<a href=\"package-summary.html\">"}
     };
     private static final String[][] NEGATED_TEST = {
         {ERROR_OUTPUT, "BadSource"},
@@ -72,21 +69,7 @@
      */
     public static void main(String[] args) {
         TestUnnamedPackage tester = new TestUnnamedPackage();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testUseOption/TestUseOption.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testUseOption/TestUseOption.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,8 +34,6 @@
 
 public class TestUseOption extends JavadocTester {
 
-    private static final String BUG_ID = "4496290-4985072-7006178-7068595";
-
     //Input for string search tests.
     private static final String[] TEST2 = {
         "Field in C1.",
@@ -55,37 +53,38 @@
     };
 
     private static final String[][] TEST3 = {
-        {BUG_ID + "-3/class-use/UsedInC.html", "Uses of <a href=" +
-                 "\"../UsedInC.html\" title=\"class in &lt;Unnamed&gt;\">" +
-                 "UsedInC</a> in <a href=\"../package-summary.html\">&lt;Unnamed&gt;</a>"
+        { "class-use/UsedInC.html",
+            "Uses of <a href=\"../UsedInC.html\" title=\"class in &lt;Unnamed&gt;\">" +
+            "UsedInC</a> in <a href=\"../package-summary.html\">&lt;Unnamed&gt;</a>"
         },
-        {BUG_ID + "-3/package-use.html", "<td class=\"colOne\">" +
-                 "<a href=\"class-use/UsedInC.html#%3CUnnamed%3E\">UsedInC</a>&nbsp;</td>"
+        { "package-use.html",
+            "<td class=\"colOne\">" +
+            "<a href=\"class-use/UsedInC.html#%3CUnnamed%3E\">UsedInC</a>&nbsp;</td>"
         }
     };
 
     private static final String[][] TEST4 = {
-        {BUG_ID + "-4/pkg2/class-use/C3.html", "<a href=" +
-                 "\"../../index.html?pkg2/class-use/C3.html\" target=\"_top\">" +
-                 "Frames</a></li>"
+        { "pkg2/class-use/C3.html",
+            "<a href=\"../../index.html?pkg2/class-use/C3.html\" target=\"_top\">" +
+            "Frames</a></li>"
         }
     };
 
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
     };
 
     private static final String[] ARGS2 = new String[] {
-        "-d", BUG_ID+"-2", "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
+        "-d", OUTPUT_DIR+"-2", "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
     };
 
     private static final String[] ARGS3 = new String[] {
-        "-d", BUG_ID + "-3", "-sourcepath", SRC_DIR, "-use", SRC_DIR +
-        "/C.java", SRC_DIR + "/UsedInC.java"
+        "-d", OUTPUT_DIR + "-3", "-sourcepath", SRC_DIR, "-use",
+        SRC_DIR + "/C.java", SRC_DIR + "/UsedInC.java"
     };
 
     private static final String[] ARGS4 = new String[] {
-        "-d", BUG_ID + "-4", "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
+        "-d", OUTPUT_DIR + "-4", "-sourcepath", SRC_DIR, "-use", "pkg1", "pkg2"
     };
 
     /**
@@ -96,20 +95,19 @@
         String[][] tests = new String[11][2];
         //Eight tests for class use.
         for (int i = 0; i < 8; i++) {
-            tests[i][0] = BUG_ID + "/pkg1/class-use/C1.html";
+            tests[i][0] = "pkg1/class-use/C1.html";
             tests[i][1] = "Test " + (i + 1) + " passes";
         }
         //Three more tests for package use.
         for (int i = 8, j = 1; i < tests.length; i++, j++) {
-            tests[i][0] = BUG_ID + "/pkg1/package-use.html";
+            tests[i][0] = "pkg1/package-use.html";
             tests[i][1] = "Test " + j + " passes";
         }
         TestUseOption tester = new TestUseOption();
-        run(tester, ARGS, tests, NO_TEST);
+        tester.run(ARGS, tests, NO_TEST);
         tester.printSummary();
-        run(tester, ARGS2, NO_TEST, NO_TEST);
-        String usePageContents = tester.readFileToString(BUG_ID +
-            "-2/pkg1/class-use/UsedClass.html");
+        tester.run(ARGS2, NO_TEST, NO_TEST);
+        String usePageContents = tester.readFileToString("pkg1/class-use/UsedClass.html");
         int prevIndex = -1;
         int currentIndex = -1;
         for (int i = 0; i < TEST2.length; i++) {
@@ -120,22 +118,8 @@
             prevIndex = currentIndex;
         }
         tester.printSummary();
-        run(tester, ARGS3, TEST3, NO_TEST);
-        run(tester, ARGS4, TEST4, NO_TEST);
+        tester.run(ARGS3, TEST3, NO_TEST);
+        tester.run(ARGS4, TEST4, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testValueTag/TestValueTag.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testValueTag/TestValueTag.java	Thu Apr 24 16:04:44 2014 -0700
@@ -34,66 +34,63 @@
 
 public class TestValueTag extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4764045";
-
     //Javadoc arguments.
     private static final String[] ARGS =
         new String[] {
-            "-d", BUG_ID, "-sourcepath", SRC_DIR, "-tag",
+            "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-tag",
             "todo", "pkg1", "pkg2"
         };
 
     private static final String[] ARGS1 =
         new String[] {
             "-Xdoclint:none",
-            "-d", BUG_ID + "-1", "-sourcepath", SRC_DIR, "-tag",
+            "-d", OUTPUT_DIR + "-1", "-sourcepath", SRC_DIR, "-tag",
             "todo", "pkg1", "pkg2"
         };
 
     //Input for string search tests.
     private static final String[][] TEST = {
         //Base case:  using @value on a constant.
-        {BUG_ID + "/pkg1/Class1.html",
+        { "pkg1/Class1.html",
             "Result:  \"Test 1 passes\""},
         //Retrieve value of constant in same class.
-        {BUG_ID + "/pkg1/Class1.html",
+        { "pkg1/Class1.html",
             "Result:  <a href=\"../pkg1/Class1.html#TEST_2_PASSES\">\"Test 2 passes\"</a>"},
-        {BUG_ID + "/pkg1/Class1.html",
+        { "pkg1/Class1.html",
             "Result:  <a href=\"../pkg1/Class1.html#TEST_3_PASSES\">\"Test 3 passes\"</a>"},
-        {BUG_ID + "/pkg1/Class1.html",
+        { "pkg1/Class1.html",
             "Result:  <a href=\"../pkg1/Class1.html#TEST_4_PASSES\">\"Test 4 passes\"</a>"},
-        {BUG_ID + "/pkg1/Class1.html",
+        { "pkg1/Class1.html",
             "Result:  <a href=\"../pkg1/Class1.html#TEST_5_PASSES\">\"Test 5 passes\"</a>"},
-        {BUG_ID + "/pkg1/Class1.html",
+        { "pkg1/Class1.html",
             "Result:  <a href=\"../pkg1/Class1.html#TEST_6_PASSES\">\"Test 6 passes\"</a>"},
         //Retrieve value of constant in different class.
-        {BUG_ID + "/pkg1/Class2.html",
+        { "pkg1/Class2.html",
             "Result:  <a href=\"../pkg1/Class1.html#TEST_7_PASSES\">\"Test 7 passes\"</a>"},
-        {BUG_ID + "/pkg1/Class2.html",
+        { "pkg1/Class2.html",
             "Result:  <a href=\"../pkg1/Class1.html#TEST_8_PASSES\">\"Test 8 passes\"</a>"},
-        {BUG_ID + "/pkg1/Class2.html",
+        { "pkg1/Class2.html",
             "Result:  <a href=\"../pkg1/Class1.html#TEST_9_PASSES\">\"Test 9 passes\"</a>"},
-        {BUG_ID + "/pkg1/Class2.html",
+        { "pkg1/Class2.html",
             "Result:  <a href=\"../pkg1/Class1.html#TEST_10_PASSES\">\"Test 10 passes\"</a>"},
-        {BUG_ID + "/pkg1/Class2.html",
+        { "pkg1/Class2.html",
             "Result:  <a href=\"../pkg1/Class1.html#TEST_11_PASSES\">\"Test 11 passes\"</a>"},
         //Retrieve value of constant in different package
-        {BUG_ID + "/pkg1/Class2.html",
+        { "pkg1/Class2.html",
             "Result:  <a href=\"../pkg2/Class3.html#TEST_12_PASSES\">\"Test 12 passes\"</a>"},
-        {BUG_ID + "/pkg1/Class2.html",
+        { "pkg1/Class2.html",
             "Result:  <a href=\"../pkg2/Class3.html#TEST_13_PASSES\">\"Test 13 passes\"</a>"},
-        {BUG_ID + "/pkg1/Class2.html",
+        { "pkg1/Class2.html",
             "Result:  <a href=\"../pkg2/Class3.html#TEST_14_PASSES\">\"Test 14 passes\"</a>"},
-        {BUG_ID + "/pkg1/Class2.html",
+        { "pkg1/Class2.html",
             "Result:  <a href=\"../pkg2/Class3.html#TEST_15_PASSES\">\"Test 15 passes\"</a>"},
-        {BUG_ID + "/pkg1/Class2.html",
+        { "pkg1/Class2.html",
             "Result:  <a href=\"../pkg2/Class3.html#TEST_16_PASSES\">\"Test 16 passes\"</a>"},
         //Retrieve value of constant from a package page
-        {BUG_ID + "/pkg2/package-summary.html",
+        { "pkg2/package-summary.html",
             "Result: <a href=\"../pkg2/Class3.html#TEST_17_PASSES\">\"Test 17 passes\"</a>"},
         //Test @value tag used with custom tag.
-        {BUG_ID + "/pkg1/CustomTagUsage.html",
+        { "pkg1/CustomTagUsage.html",
             "<dt><span class=\"simpleTagLabel\">Todo:</span></dt>\n" +
                 "<dd>the value of this constant is 55.</dd>"},
         //Test @value errors printed dues to invalid use or when used with
@@ -144,7 +141,7 @@
     };
     private static final String[][] NEGATED_TEST = {
         //Base case:  using @value on a constant.
-        {BUG_ID + "/pkg1/Class1.html",
+        { "pkg1/Class1.html",
             "Result:  <a href=\"../pkg1/Class1.html#TEST_12_ERROR\">\"Test 12 " +
             "generates an error message\"</a>"},
     };
@@ -155,9 +152,9 @@
      */
     public static void main(String[] args) {
         TestValueTag tester = new TestValueTag();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         checkForException(tester);
-        run(tester, ARGS1, TEST1, NO_TEST);
+        tester.run(ARGS1, TEST1, NO_TEST);
         checkForException(tester);
         tester.printSummary();
     }
@@ -167,18 +164,4 @@
             throw new AssertionError("javadoc threw DocletAbortException");
         }
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testWarnBadParamNames/TestWarnBadParamNames.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testWarnBadParamNames/TestWarnBadParamNames.java	Thu Apr 24 16:04:44 2014 -0700
@@ -35,15 +35,13 @@
 
 public class TestWarnBadParamNames extends JavadocTester {
 
-    private static final String BUG_ID = "4693440";
     private static final String[][] TEST = {
         {WARNING_OUTPUT, "warning - @param argument \"int\" is not a parameter name."},
         {WARNING_OUTPUT, "warning - @param argument \"IDontExist\" is not a parameter name."},
         {WARNING_OUTPUT, "warning - Parameter \"arg\" is documented more than once."},
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
     private static final String[] ARGS = new String[] {
-        "-Xdoclint:none", "-d", BUG_ID, SRC_DIR + "/C.java"
+        "-Xdoclint:none", "-d", OUTPUT_DIR, SRC_DIR + "/C.java"
     };
 
     /**
@@ -52,21 +50,7 @@
      */
     public static void main(String[] args) {
         TestWarnBadParamNames tester = new TestWarnBadParamNames();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testWarnings/TestWarnings.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testWarnings/TestWarnings.java	Thu Apr 24 16:04:44 2014 -0700
@@ -38,16 +38,13 @@
 
 public class TestWarnings extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "4515705-4804296-4702454-4697036";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-Xdoclint:none", "-d", BUG_ID, "-sourcepath", SRC_DIR, "pkg"
+        "-Xdoclint:none", "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "pkg"
     };
 
     private static final String[] ARGS2 = new String[] {
-        "-Xdoclint:none", "-d", BUG_ID, "-private", "-sourcepath", SRC_DIR,
+        "-Xdoclint:none", "-d", OUTPUT_DIR, "-private", "-sourcepath", SRC_DIR,
         "pkg"
     };
 
@@ -60,45 +57,29 @@
 
     };
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg/X.html", "can't find m()"},
-        {BUG_ID + "/pkg/X.html", "can't find X()"},
-        {BUG_ID + "/pkg/X.html", "can't find f"},
+        { "pkg/X.html", "can't find m()"},
+        { "pkg/X.html", "can't find X()"},
+        { "pkg/X.html", "can't find f"},
     };
 
     private static final String[][] TEST2 = {
-        {BUG_ID + "/pkg/X.html",
+        { "pkg/X.html",
             "<a href=\"../pkg/X.html#m--\"><code>m()</code></a><br/>"},
-        {BUG_ID + "/pkg/X.html",
+        { "pkg/X.html",
             "<a href=\"../pkg/X.html#X--\"><code>X()</code></a><br/>"},
-        {BUG_ID + "/pkg/X.html",
+        { "pkg/X.html",
             "<a href=\"../pkg/X.html#f\"><code>f</code></a><br/>"},
     };
 
-    private static final String[][] NEGATED_TEST2 = NO_TEST;
-
-
     /**
      * The entry point of the test.
      * @param args the array of command line arguments.
      */
     public static void main(String[] args) {
         TestWarnings tester = new TestWarnings();
-        run(tester, ARGS, TEST, NEGATED_TEST);
-        run(tester, ARGS2, TEST2, NEGATED_TEST2);
+        tester.run(ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS2, TEST2, NO_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testWindowTitle/TestWindowTitle.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testWindowTitle/TestWindowTitle.java	Thu Apr 24 16:04:44 2014 -0700
@@ -33,24 +33,23 @@
 
 public class TestWindowTitle extends JavadocTester {
 
-    private static final String BUG_ID = "8016675";
     //Window title with JavaScript special characters.
     private static final String TITLE_JS_CHARS =
             "Testing \"Window 'Title'\" with a \\ backslash and a / " +
             "forward slash and a \u00e8 unicode char also a    tab and also a " +
             "\t special character another \u0002 unicode)";
     private static final String[] ARGS_JS_CHARS = new String[]{
-        "-d", BUG_ID + "-1", "-windowtitle", TITLE_JS_CHARS, "-sourcepath", SRC_DIR, "p1", "p2"
+        "-d", OUTPUT_DIR + "-1", "-windowtitle", TITLE_JS_CHARS, "-sourcepath", SRC_DIR, "p1", "p2"
     };
     private static final String[][] TEST_JS_CHARS = {
-        {BUG_ID + "-1/overview-summary.html",
+        { "overview-summary.html",
             "parent.document.title=\"Overview (Testing \\\"Window \\\'Title\\\'\\\" " +
             "with a \\\\ backslash and a / forward slash and a \\u00E8 unicode char " +
             "also a    tab and also a \\t special character another \\u0002 unicode))\";"
         },
     };
     private static final String[][] NEG_TEST_JS_CHARS = {
-        {BUG_ID + "-1/overview-summary.html",
+        { "overview-summary.html",
             "parent.document.title=\"Overview (Testing \"Window \'Title\'\" " +
             "with a \\ backslash and a / forward slash and a \u00E8 unicode char " +
             "also a    tab and also a \t special character another \u0002 unicode))\";"
@@ -61,24 +60,24 @@
     private static final String TITLE_SCRIPT_TAG =
             "Testing script tag in title </title><script>alert(\"Should not pop up\")</script>.";
     private static final String[] ARGS_SCRIPT_TAG = new String[]{
-        "-d", BUG_ID + "-2", "-windowtitle", TITLE_SCRIPT_TAG, "-sourcepath", SRC_DIR, "p1", "p2"
+        "-d", OUTPUT_DIR + "-2", "-windowtitle", TITLE_SCRIPT_TAG, "-sourcepath", SRC_DIR, "p1", "p2"
     };
     private static final String[][] TEST_SCRIPT_TAG = {
-        {BUG_ID + "-2/overview-summary.html",
+        { "overview-summary.html",
             "parent.document.title=\"Overview (Testing script tag in title alert" +
             "(\\\"Should not pop up\\\").)\";"
         },
-        {BUG_ID + "-2/p2/C2.html",
+        { "p2/C2.html",
             "parent.document.title=\"C2 (Testing script tag in title alert" +
             "(\\\"Should not pop up\\\").)\";"
         }
     };
     private static final String[][] NEG_TEST_SCRIPT_TAG = {
-        {BUG_ID + "-2/overview-summary.html",
+        { "overview-summary.html",
             "parent.document.title=\"Overview (Testing script tag in title </title><script>" +
             "alert(\\\"Should not pop up\\\")</script>.)\";"
         },
-        {BUG_ID + "-2/p2/C2.html",
+        { "p2/C2.html",
             "parent.document.title=\"C2 (Testing script tag in title </title><script>" +
             "alert(\\\"Should not pop up\\\")</script>.)\";"
         }
@@ -89,18 +88,18 @@
             "Testing another <p>HTML</p> tag. Another <h1>tag</h1>. A " +
             "<span id=\"testTag\">tag with attributes</span>. <script and </p are not tags.";
     private static final String[] ARGS_HTML_TAGS = new String[]{
-        "-d", BUG_ID + "-3", "-windowtitle", TITLE_HTML_TAGS,
+        "-d", OUTPUT_DIR + "-3", "-windowtitle", TITLE_HTML_TAGS,
         "-sourcepath", SRC_DIR,
         "p1", "p2"
     };
     private static final String[][] TEST_HTML_TAGS = {
-        {BUG_ID + "-3/overview-summary.html",
+        { "overview-summary.html",
             "parent.document.title=\"Overview (Testing another HTML tag. Another tag. A " +
             "tag with attributes. <script and </p are not tags.)\";"
         }
     };
     private static final String[][] NEG_TEST_HTML_TAGS = {
-        {BUG_ID + "-3/overview-summary.html",
+        { "overview-summary.html",
             "parent.document.title=\"Overview (Testing another <p>HTML</p> tag. Another " +
             "<h1>tag</h1>. A <span id=\"testTag\">tag with attributes</span>. <script and " +
             "</p are not tags.)\";"
@@ -111,18 +110,18 @@
     private static final String TITLE_HTML_ENTITIES =
             "Testing entities &lt;script&gt;alert(\"Should not pop up\")&lt;/script&gt;.";
     private static final String[] ARGS_HTML_ENTITIES = new String[]{
-        "-d", BUG_ID + "-4", "-windowtitle", TITLE_HTML_ENTITIES,
+        "-d", OUTPUT_DIR + "-4", "-windowtitle", TITLE_HTML_ENTITIES,
         "-sourcepath", SRC_DIR,
         "p1", "p2"
     };
     private static final String[][] TEST_HTML_ENTITIES = {
-        {BUG_ID + "-4/overview-summary.html",
+        { "overview-summary.html",
             "parent.document.title=\"Overview (Testing entities &lt;script&gt;alert(\\\"Should " +
             "not pop up\\\")&lt;/script&gt;.)\";"
         }
     };
     private static final String[][] NEG_TEST_HTML_ENTITIES = {
-        {BUG_ID + "-4/overview-summary.html",
+        { "overview-summary.html",
             "parent.document.title=\"Overview (Testing entities alert(\\\"Should not pop up\\\").)\";"
         }
     };
@@ -131,15 +130,15 @@
     private static final String TITLE_EMPTY_TAGS =
             "</title><script></script>";
     private static final String[] ARGS_EMPTY_TAGS = new String[]{
-        "-d", BUG_ID + "-5", "-windowtitle", TITLE_EMPTY_TAGS, "-sourcepath", SRC_DIR, "p1", "p2"
+        "-d", OUTPUT_DIR + "-5", "-windowtitle", TITLE_EMPTY_TAGS, "-sourcepath", SRC_DIR, "p1", "p2"
     };
     private static final String[][] TEST_EMPTY_TAGS = {
-        {BUG_ID + "-5/overview-summary.html",
+        { "overview-summary.html",
             "parent.document.title=\"Overview\";"
         }
     };
     private static final String[][] NEG_TEST_EMPTY_TAGS = {
-        {BUG_ID + "-5/overview-summary.html",
+        { "overview-summary.html",
             "parent.document.title=\"Overview (</title><script></script>)\";"
         }
     };
@@ -148,16 +147,16 @@
     private static final String TITLE_UNICODE_CHARS =
             "Testing unicode \u003cscript\u003ealert(\"Should not pop up\")\u003c/script\u003e.";
     private static final String[] ARGS_UNICODE_CHARS = new String[]{
-        "-d", BUG_ID + "-6", "-windowtitle", TITLE_UNICODE_CHARS, "-sourcepath", SRC_DIR, "p1", "p2"
+        "-d", OUTPUT_DIR + "-6", "-windowtitle", TITLE_UNICODE_CHARS, "-sourcepath", SRC_DIR, "p1", "p2"
     };
     private static final String[][] TEST_UNICODE_CHARS = {
-        {BUG_ID + "-6/overview-summary.html",
+        { "overview-summary.html",
             "parent.document.title=\"Overview (Testing unicode alert(\\\"Should " +
             "not pop up\\\").)\";"
         }
     };
     private static final String[][] NEG_TEST_UNICODE_CHARS = {
-        {BUG_ID + "-6/overview-summary.html",
+        { "overview-summary.html",
             "parent.document.title=\"Overview (Testing unicode <script>alert(\\\"Should not pop up\\\")" +
             "</script>.)\";"
         }
@@ -167,20 +166,20 @@
     private static final String TITLE_EMPTY =
             "";
     private static final String[] ARGS_EMPTY_TITLE = new String[]{
-        "-d", BUG_ID + "-7", "-windowtitle", TITLE_EMPTY, "-sourcepath", SRC_DIR, "p1", "p2"
+        "-d", OUTPUT_DIR + "-7", "-windowtitle", TITLE_EMPTY, "-sourcepath", SRC_DIR, "p1", "p2"
     };
     private static final String[][] TEST_EMPTY = {
-        {BUG_ID + "-7/overview-summary.html",
+        { "overview-summary.html",
             "parent.document.title=\"Overview\";"
         }
     };
 
     //Test doctitle.
     private static final String[] ARGS_DOCTITLE = new String[]{
-        "-d", BUG_ID + "-8", "-doctitle", TITLE_JS_CHARS, "-sourcepath", SRC_DIR, "p1", "p2"
+        "-d", OUTPUT_DIR + "-8", "-doctitle", TITLE_JS_CHARS, "-sourcepath", SRC_DIR, "p1", "p2"
     };
     private static final String[][] NEG_TEST_DOCTITLE = {
-        {BUG_ID + "-8/overview-summary.html",
+        { "overview-summary.html",
             "parent.document.title=\"Overview (Testing \\\"Window \\\'Title\\\'\\\" " +
             "with a \\\\ backslash and a / forward slash and a \\u00E8 unicode char " +
             "also a    tab and also a \\t special character another \\u0002 unicode)\";"
@@ -193,28 +192,14 @@
      */
     public static void main(String[] args) {
         TestWindowTitle tester = new TestWindowTitle();
-        run(tester, ARGS_JS_CHARS, TEST_JS_CHARS, NEG_TEST_JS_CHARS);
-        run(tester, ARGS_SCRIPT_TAG, TEST_SCRIPT_TAG, NEG_TEST_SCRIPT_TAG);
-        run(tester, ARGS_HTML_TAGS, TEST_HTML_TAGS, NEG_TEST_HTML_TAGS);
-        run(tester, ARGS_HTML_ENTITIES, TEST_HTML_ENTITIES, NEG_TEST_HTML_ENTITIES);
-        run(tester, ARGS_EMPTY_TAGS, TEST_EMPTY_TAGS, NEG_TEST_EMPTY_TAGS);
-        run(tester, ARGS_UNICODE_CHARS, TEST_UNICODE_CHARS, NEG_TEST_UNICODE_CHARS);
-        run(tester, ARGS_EMPTY_TITLE, TEST_EMPTY, NO_TEST);
-        run(tester, ARGS_DOCTITLE, NO_TEST, NEG_TEST_DOCTITLE);
+        tester.run(ARGS_JS_CHARS, TEST_JS_CHARS, NEG_TEST_JS_CHARS);
+        tester.run(ARGS_SCRIPT_TAG, TEST_SCRIPT_TAG, NEG_TEST_SCRIPT_TAG);
+        tester.run(ARGS_HTML_TAGS, TEST_HTML_TAGS, NEG_TEST_HTML_TAGS);
+        tester.run(ARGS_HTML_ENTITIES, TEST_HTML_ENTITIES, NEG_TEST_HTML_ENTITIES);
+        tester.run(ARGS_EMPTY_TAGS, TEST_EMPTY_TAGS, NEG_TEST_EMPTY_TAGS);
+        tester.run(ARGS_UNICODE_CHARS, TEST_UNICODE_CHARS, NEG_TEST_UNICODE_CHARS);
+        tester.run(ARGS_EMPTY_TITLE, TEST_EMPTY, NO_TEST);
+        tester.run(ARGS_DOCTITLE, NO_TEST, NEG_TEST_DOCTITLE);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/testXOption/TestXOption.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/testXOption/TestXOption.java	Thu Apr 24 16:04:44 2014 -0700
@@ -32,17 +32,14 @@
 
 public class TestXOption extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "8007687";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR, "-X",
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR, "-X",
             SRC_DIR + "/TestXOption.java"
     };
 
     private static final String[] ARGS2 = new String[] {
-        "-d", BUG_ID, "-sourcepath", SRC_DIR,
+        "-d", OUTPUT_DIR, "-sourcepath", SRC_DIR,
             SRC_DIR + "/TestXOption.java"
     };
 
@@ -53,7 +50,6 @@
         {STANDARD_OUTPUT, "-Xdoclint "},
         {STANDARD_OUTPUT, "-Xdoclint:"},
     };
-    private static final String[][] NEGATED_TEST = NO_TEST;
 
     //The help option should not crash the doclet.
     private static final int EXPECTED_EXIT_CODE = 0;
@@ -64,22 +60,8 @@
      */
     public static void main(String[] args) {
         TestXOption tester = new TestXOption();
-        int actualExitCode = run(tester, ARGS, TEST, NEGATED_TEST);
+        int actualExitCode = tester.run(ARGS, TEST, NO_TEST);
         tester.checkExitCode(EXPECTED_EXIT_CODE, actualExitCode);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- a/langtools/test/com/sun/javadoc/typeAnnotations/smoke/TestSmoke.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/com/sun/javadoc/typeAnnotations/smoke/TestSmoke.java	Thu Apr 24 16:04:44 2014 -0700
@@ -36,76 +36,73 @@
 
 public class TestSmoke extends JavadocTester {
 
-    //Test information.
-    private static final String BUG_ID = "8006735";
-
     //Javadoc arguments.
     private static final String[] ARGS = new String[] {
-        "-d", BUG_ID, "-private", "-sourcepath", SRC_DIR, "pkg"
+        "-d", OUTPUT_DIR, "-private", "-sourcepath", SRC_DIR, "pkg"
     };
 
     //Input for string search tests.
     private static final String[][] TEST = {
-        {BUG_ID + "/pkg/T0x1C.html", "@DA"},
-        {BUG_ID + "/pkg/T0x1D.html", "@DA"},
-        {BUG_ID + "/pkg/T0x0D.html", "@DA"},
-        {BUG_ID + "/pkg/T0x06.html", "@DA"},
-        {BUG_ID + "/pkg/T0x0B.html", "@DA"},
-        {BUG_ID + "/pkg/T0x0F.html", "@DA"},
+        { "pkg/T0x1C.html", "@DA"},
+        { "pkg/T0x1D.html", "@DA"},
+        { "pkg/T0x0D.html", "@DA"},
+        { "pkg/T0x06.html", "@DA"},
+        { "pkg/T0x0B.html", "@DA"},
+        { "pkg/T0x0F.html", "@DA"},
         /* @ignore 8013406: Test cases fail in javadoc test TestSmoke.java
-        {BUG_ID + "/pkg/T0x20.html", "@DA"},
+        { "pkg/T0x20.html", "@DA"},
         */
         /* @ignore 8013406: Test cases fail in javadoc test TestSmoke.java
-        {BUG_ID + "/pkg/T0x20A.html", "@DTPA"},
+        { "pkg/T0x20A.html", "@DTPA"},
         */
         /* @ignore 8013406: Test cases fail in javadoc test TestSmoke.java
-        {BUG_ID + "/pkg/T0x20B.html", "@DA"},
+        { "pkg/T0x20B.html", "@DA"},
         */
         /* @ignore 8013406: Test cases fail in javadoc test TestSmoke.java
-        {BUG_ID + "/pkg/T0x22.html", "@DA"},
+        { "pkg/T0x22.html", "@DA"},
         */
         /* @ignore 8013406: Test cases fail in javadoc test TestSmoke.java
-        {BUG_ID + "/pkg/T0x22A.html", "@DTPA"},
+        { "pkg/T0x22A.html", "@DTPA"},
         */
         /* @ignore 8013406: Test cases fail in javadoc test TestSmoke.java
-        {BUG_ID + "/pkg/T0x22B.html", "@DA"},
+        { "pkg/T0x22B.html", "@DA"},
         */
-        {BUG_ID + "/pkg/T0x10.html", "@DA"},
-        {BUG_ID + "/pkg/T0x10A.html", "@DA"},
-        {BUG_ID + "/pkg/T0x12.html", "@DA"},
-        {BUG_ID + "/pkg/T0x11.html", "@DA"},
-        {BUG_ID + "/pkg/T0x13.html", "@DA"},
-        {BUG_ID + "/pkg/T0x15.html", "@DA"},
-        {BUG_ID + "/pkg/T0x14.html", "@DA"},
-        {BUG_ID + "/pkg/T0x16.html", "@DA"}
+        { "pkg/T0x10.html", "@DA"},
+        { "pkg/T0x10A.html", "@DA"},
+        { "pkg/T0x12.html", "@DA"},
+        { "pkg/T0x11.html", "@DA"},
+        { "pkg/T0x13.html", "@DA"},
+        { "pkg/T0x15.html", "@DA"},
+        { "pkg/T0x14.html", "@DA"},
+        { "pkg/T0x16.html", "@DA"}
     };
 
     private static final String[][] NEGATED_TEST = {
-        {BUG_ID + "/pkg/T0x1C.html", "@A"},
-        {BUG_ID + "/pkg/T0x1D.html", "@A"},
-        {BUG_ID + "/pkg/T0x00.html", "@A"},
-        {BUG_ID + "/pkg/T0x01.html", "@A"},
-        {BUG_ID + "/pkg/T0x02.html", "@A"},
-        {BUG_ID + "/pkg/T0x04.html", "@A"},
-        {BUG_ID + "/pkg/T0x08.html", "@A"},
-        {BUG_ID + "/pkg/T0x0D.html", "@A"},
-        {BUG_ID + "/pkg/T0x06.html", "@A"},
-        {BUG_ID + "/pkg/T0x0B.html", "@A"},
-        {BUG_ID + "/pkg/T0x0F.html", "@A"},
-        {BUG_ID + "/pkg/T0x20.html", "@A"},
-        {BUG_ID + "/pkg/T0x20A.html", "@A"},
-        {BUG_ID + "/pkg/T0x20B.html", "@A"},
-        {BUG_ID + "/pkg/T0x22.html", "@A"},
-        {BUG_ID + "/pkg/T0x22A.html", "@A"},
-        {BUG_ID + "/pkg/T0x22B.html", "@A"},
-        {BUG_ID + "/pkg/T0x10.html", "@A"},
-        {BUG_ID + "/pkg/T0x10A.html", "@A"},
-        {BUG_ID + "/pkg/T0x12.html", "@A"},
-        {BUG_ID + "/pkg/T0x11.html", "@A"},
-        {BUG_ID + "/pkg/T0x13.html", "@A"},
-        {BUG_ID + "/pkg/T0x15.html", "@A"},
-        {BUG_ID + "/pkg/T0x14.html", "@A"},
-        {BUG_ID + "/pkg/T0x16.html", "@A"}
+        { "pkg/T0x1C.html", "@A"},
+        { "pkg/T0x1D.html", "@A"},
+        { "pkg/T0x00.html", "@A"},
+        { "pkg/T0x01.html", "@A"},
+        { "pkg/T0x02.html", "@A"},
+        { "pkg/T0x04.html", "@A"},
+        { "pkg/T0x08.html", "@A"},
+        { "pkg/T0x0D.html", "@A"},
+        { "pkg/T0x06.html", "@A"},
+        { "pkg/T0x0B.html", "@A"},
+        { "pkg/T0x0F.html", "@A"},
+        { "pkg/T0x20.html", "@A"},
+        { "pkg/T0x20A.html", "@A"},
+        { "pkg/T0x20B.html", "@A"},
+        { "pkg/T0x22.html", "@A"},
+        { "pkg/T0x22A.html", "@A"},
+        { "pkg/T0x22B.html", "@A"},
+        { "pkg/T0x10.html", "@A"},
+        { "pkg/T0x10A.html", "@A"},
+        { "pkg/T0x12.html", "@A"},
+        { "pkg/T0x11.html", "@A"},
+        { "pkg/T0x13.html", "@A"},
+        { "pkg/T0x15.html", "@A"},
+        { "pkg/T0x14.html", "@A"},
+        { "pkg/T0x16.html", "@A"}
     };
 
     /**
@@ -114,21 +111,7 @@
      */
     public static void main(String[] args) {
         TestSmoke tester = new TestSmoke();
-        run(tester, ARGS, TEST, NEGATED_TEST);
+        tester.run(ARGS, TEST, NEGATED_TEST);
         tester.printSummary();
     }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugId() {
-        return BUG_ID;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public String getBugName() {
-        return getClass().getName();
-    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/T8029002/MultipleUpperBoundsIncorporationTest.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8029002
+ * @summary javac should take multiple upper bounds into account in incorporation
+ * @compile MultipleUpperBoundsIncorporationTest.java
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MultipleUpperBoundsIncorporationTest {
+
+    static class TestCase1 {
+        interface Task<E extends Exception> {}
+
+        class Comparator<T> {}
+
+        class CustomException extends Exception {}
+
+        class TaskQueue<E extends Exception, T extends Task<E>> {}
+
+        abstract class Test {
+            abstract <E extends Exception, T extends Task<E>> TaskQueue<E, T> create(Comparator<? super T> comparator);
+
+            void f(Comparator<Task<CustomException>> comp) {
+                TaskQueue<CustomException, Task<CustomException>> queue = create(comp);
+                queue.getClass();
+            }
+        }
+    }
+
+    static class TestCase2 {
+        public <T, E extends List<T>> E typedNull() {
+            return null;
+        }
+
+        public void call() {
+            ArrayList<String> list = typedNull();
+        }
+    }
+
+    static class TestCase3 {
+        interface I extends Iterable<String> {}
+
+        <T, Exp extends Iterable<T>> Exp typedNull() { return null; }
+        I i = typedNull();
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/annotations/typeAnnotations/newlocations/AfterMethodTypeParams.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8038788
+ * @summary Verify proper handling of annotations after method's type parameters.
+ * @build AfterMethodTypeParams
+ * @run main AfterMethodTypeParams
+ */
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.net.URI;
+import java.util.*;
+
+import javax.lang.model.element.Name;
+import javax.tools.*;
+
+import com.sun.source.tree.*;
+import com.sun.source.util.*;
+
+public class AfterMethodTypeParams {
+
+    public static void main(String... args) throws IOException {
+        new AfterMethodTypeParams().run();
+    }
+
+    void run() throws IOException {
+        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+
+        for (TestCase tc : testCases) {
+            String test = TEMPLATE.replace("CONTENT", tc.snippet);
+            List<JavaFileObject> files = Arrays.asList(new MyFileObject(test));
+            StringWriter out = new StringWriter();
+            List<String> options = Arrays.asList("-XDrawDiagnostics", "-XDshouldStopPolicy=FLOW");
+            JavacTask task = (JavacTask) compiler.getTask(out, null, null, options, null, files);
+
+            new TreePathScanner<Void, Void>() {
+                boolean seenAnnotation;
+                @Override
+                public Void visitAnnotation(AnnotationTree node, Void p) {
+                    Name name = ((IdentifierTree) node.getAnnotationType()).getName();
+                    seenAnnotation |= name.contentEquals("TA") || name.contentEquals("DA");
+                    return null;
+                }
+                @Override
+                public Void visitCompilationUnit(CompilationUnitTree node, Void p) {
+                    super.visitCompilationUnit(node, p);
+                    if (!seenAnnotation)
+                        error(test, "Annotation was missing");
+                    return null;
+                }
+            }.scan(task.parse(), null);
+
+            task.analyze();
+
+            if (!tc.error.equals(out.toString().trim())) {
+                error(test, "Incorrect errors: " + out.toString());
+            }
+        }
+
+        if (errors > 0) {
+            throw new IllegalStateException("Errors found");
+        }
+    }
+
+    int errors;
+
+    void error(String code, String error) {
+        System.out.println("Error detected: " + error);
+        System.out.println("Code:");
+        System.out.println(code);
+        errors++;
+    }
+
+    static String TEMPLATE =
+        "import java.lang.annotation.*;\n" +
+        "public class Test {\n" +
+        "    CONTENT\n" +
+        "}\n" +
+        "@Target({ElementType.METHOD, ElementType.CONSTRUCTOR})\n" +
+        "@interface DA { }\n" +
+        "@Target(ElementType.TYPE_USE)\n" +
+        "@interface TA { }\n";
+
+    static class MyFileObject extends SimpleJavaFileObject {
+        final String text;
+        public MyFileObject(String text) {
+            super(URI.create("myfo:/Test.java"), JavaFileObject.Kind.SOURCE);
+            this.text = text;
+        }
+        @Override
+        public CharSequence getCharContent(boolean ignoreEncodingErrors) {
+            return text;
+        }
+    }
+
+    static TestCase[] testCases = new TestCase[] {
+        new TestCase("<T> @DA int foo1() { return 0;}", ""),
+        new TestCase("<T> @DA void foo2() { }", ""),
+        new TestCase("<T> @TA int foo3() { return 0;}", ""),
+        new TestCase("<T> @TA void foo4() { }",
+                "Test.java:3:9: compiler.err.annotation.type.not.applicable"),
+        new TestCase("<T> @DA Test() { }", "Test.java:3:9: compiler.err.illegal.start.of.type"),
+        new TestCase("<T> @TA Test() { }", "Test.java:3:9: compiler.err.illegal.start.of.type"),
+    };
+
+    static class TestCase {
+        final String snippet;
+        final String error;
+        public TestCase(String snippet, String error) {
+            this.snippet = snippet;
+            this.error = error;
+        }
+    }
+}
+
--- a/langtools/test/tools/javac/classfiles/InnerClasses/SyntheticClasses.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/tools/javac/classfiles/InnerClasses/SyntheticClasses.java	Thu Apr 24 16:04:44 2014 -0700
@@ -41,7 +41,7 @@
 
     private void run() throws IOException, ConstantPoolException {
         File testClasses = new File(System.getProperty("test.classes"));
-        for (File classFile : testClasses.listFiles()) {
+        for (File classFile : testClasses.listFiles(f -> f.getName().endsWith(".class"))) {
             ClassFile cf = ClassFile.read(classFile);
             if (cf.getName().matches(".*\\$[0-9]+")) {
                 EnclosingMethod_attribute encl =
--- a/langtools/test/tools/javac/diags/examples.not-yet.txt	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/tools/javac/diags/examples.not-yet.txt	Thu Apr 24 16:04:44 2014 -0700
@@ -113,3 +113,4 @@
 compiler.warn.file.from.future                          # warning for future modification times on files
 compiler.err.cant.inherit.from.anon                     # error for subclass of anonymous class
 compiler.misc.bad.class.file                            # class file is malformed
+compiler.misc.bad.const.pool.entry                      # constant pool entry has wrong type
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/diags/examples/LambdaBodyNeitherValueNorVoidCompatible.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+// key: compiler.err.lambda.body.neither.value.nor.void.compatible
+// key: compiler.err.cant.apply.symbol
+// key: compiler.misc.incompatible.ret.type.in.lambda
+// key: compiler.misc.missing.ret.val
+// key: compiler.misc.no.conforming.assignment.exists
+
+class LambdaBodyNeitherValueNorVoidCompatible {
+    interface I {
+        String f(String x);
+    }
+
+    static void foo(I i) {}
+
+    void m() {
+        foo((x) -> {
+            if (x == null) {
+                return;
+            } else {
+                return x;
+            }
+        });
+    }
+}
--- a/langtools/test/tools/javac/lambda/ErroneousLambdaExpr.java	Thu Apr 24 12:21:18 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2012, 2013 Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 8003280
- * @summary Add lambda tests
- *  stale state after speculative attribution round leads to missing classfiles
- * @compile/fail/ref=ErroneousLambdaExpr.out -XDrawDiagnostics ErroneousLambdaExpr.java
- */
-public class ErroneousLambdaExpr<T> {
-
-    static int assertionCount = 0;
-
-    static void assertTrue(boolean cond) {
-        assertionCount++;
-        if (!cond)
-            throw new AssertionError();
-    }
-
-    interface SAM1<X> {
-        X m(X t, String s);
-    }
-
-    interface SAM2 {
-        void m(String s, int i);
-    }
-
-    interface SAM3<X> {
-        X m(X t, String s, int i);
-    }
-
-    void call(SAM1<T> s1) { assertTrue(true); }
-
-    void call(SAM2 s2) { assertTrue(false); }
-
-    void call(SAM3<T> s3) { assertTrue(false); }
-
-    public static void main(String[] args) {
-        ErroneousLambdaExpr<StringBuilder> test =
-                new ErroneousLambdaExpr<>();
-
-        test.call((builder, string) -> { builder.append(string); return builder; });
-        assertTrue(assertionCount == 1);
-    }
-}
--- a/langtools/test/tools/javac/lambda/ErroneousLambdaExpr.out	Thu Apr 24 12:21:18 2014 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-ErroneousLambdaExpr.java:63:13: compiler.err.ref.ambiguous: call, kindname.method, call(ErroneousLambdaExpr.SAM1<T>), ErroneousLambdaExpr, kindname.method, call(ErroneousLambdaExpr.SAM2), ErroneousLambdaExpr
-1 error
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/LambdaExprLeadsToMissingClassFilesTest.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2012, 2014 Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8003280
+ * @summary Add lambda tests
+ *  stale state after speculative attribution round leads to missing classfiles
+ */
+public class LambdaExprLeadsToMissingClassFilesTest<T> {
+
+    static int assertionCount = 0;
+
+    static void assertTrue(boolean cond) {
+        assertionCount++;
+        if (!cond) {
+            throw new AssertionError();
+        }
+    }
+
+    interface SAM1<X> {
+        X m(X t, String s);
+    }
+
+    interface SAM2 {
+        void m(String s, int i);
+    }
+
+    interface SAM3<X> {
+        X m(X t, String s, int i);
+    }
+
+    void call(SAM1<T> s1) { assertTrue(true); }
+
+    void call(SAM2 s2) { assertTrue(false); }
+
+    void call(SAM3<T> s3) { assertTrue(false); }
+
+    public static void main(String[] args) {
+        LambdaExprLeadsToMissingClassFilesTest<StringBuilder> test =
+                new LambdaExprLeadsToMissingClassFilesTest<>();
+
+        test.call((builder, string) -> { builder.append(string); return builder; });
+        assertTrue(assertionCount == 1);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific09.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,81 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 8029718
+ * @summary Should always use lambda body structure to disambiguate overload resolution
+ * @compile/fail/ref=MostSpecific09.out -XDrawDiagnostics -XDshouldStopPolicy=ATTR -XDverboseResolution=applicable,success MostSpecific09.java
+ */
+
+class MostSpecific09 {
+
+    interface I {
+        String xoo(String x);
+    }
+
+    interface J {
+        void xoo(int x);
+    }
+
+    static void foo(I i) {}
+    static void foo(J j) {}
+
+    static void moo(I i) {}
+    static void moo(J j) {}
+
+    void m() {
+        foo((x) -> { return x += 1; });
+        foo((x) -> { return ""; });
+        foo((x) -> { System.out.println(""); });
+        foo((x) -> { return ""; System.out.println(""); });
+        foo((x) -> { throw new RuntimeException(); });
+        foo((x) -> { while (true); });
+
+        foo((x) -> x += 1);
+        foo((x) -> "");
+    }
+
+    /* any return statement that is not in the body of the lambda but in an
+     * inner class or another lambda should be ignored for value void compatibility
+     * determination.
+     */
+    void m1() {
+        boolean cond = true;
+        foo((x) -> {
+            if (cond) {
+                return "";
+            }
+            System.out.println("");
+        });
+
+        foo((x)->{
+            class Bar {
+                String m() {
+                    return "from Bar.m()";
+                }
+            }
+            class Boo {
+                Bar b = new Bar (){
+                    String m() {
+                        return "from Bar$1.m()";
+                    }
+                };
+            }
+            moo((y) -> { return ""; });
+            return;
+        });
+
+        foo((x)->{
+            class Bar {
+                void m() {}
+            }
+            class Boo {
+                Bar b = new Bar (){
+                    void m() {
+                        return;
+                    }
+                };
+            }
+            moo((y) -> { System.out.println(""); });
+            return "";
+        });
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/lambda/MostSpecific09.out	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,27 @@
+MostSpecific09.java:25:9: compiler.note.verbose.resolve.multi: foo, MostSpecific09, 0, BASIC, compiler.misc.type.none, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, foo(MostSpecific09.I), null)}
+MostSpecific09.java:26:9: compiler.note.verbose.resolve.multi: foo, MostSpecific09, 0, BASIC, compiler.misc.type.none, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, foo(MostSpecific09.I), null)}
+MostSpecific09.java:27:9: compiler.note.verbose.resolve.multi: foo, MostSpecific09, 0, BASIC, compiler.misc.type.none, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, foo(MostSpecific09.J), null)}
+MostSpecific09.java:27:32: compiler.note.verbose.resolve.multi: println, java.io.PrintStream, 1, BASIC, java.lang.String, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, println(java.lang.Object), null),(compiler.misc.applicable.method.found: 1, println(java.lang.String), null)}
+MostSpecific09.java:28:13: compiler.err.lambda.body.neither.value.nor.void.compatible
+MostSpecific09.java:28:9: compiler.err.cant.apply.symbols: kindname.method, foo, @680,{(compiler.misc.inapplicable.method: kindname.method, MostSpecific09, foo(MostSpecific09.I), (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.ret.type.in.lambda: (compiler.misc.missing.ret.val: java.lang.String)))),(compiler.misc.inapplicable.method: kindname.method, MostSpecific09, foo(MostSpecific09.J), (compiler.misc.no.conforming.assignment.exists: (compiler.misc.unexpected.ret.val)))}
+MostSpecific09.java:28:43: compiler.note.verbose.resolve.multi: println, java.io.PrintStream, 1, BASIC, java.lang.String, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, println(java.lang.Object), null),(compiler.misc.applicable.method.found: 1, println(java.lang.String), null)}
+MostSpecific09.java:29:9: compiler.err.ref.ambiguous: foo, kindname.method, foo(MostSpecific09.I), MostSpecific09, kindname.method, foo(MostSpecific09.J), MostSpecific09
+MostSpecific09.java:29:28: compiler.note.verbose.resolve.multi: <init>, java.lang.RuntimeException, 0, BASIC, compiler.misc.no.args, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, java.lang.RuntimeException(), null)}
+MostSpecific09.java:30:9: compiler.err.ref.ambiguous: foo, kindname.method, foo(MostSpecific09.I), MostSpecific09, kindname.method, foo(MostSpecific09.J), MostSpecific09
+MostSpecific09.java:32:9: compiler.err.ref.ambiguous: foo, kindname.method, foo(MostSpecific09.I), MostSpecific09, kindname.method, foo(MostSpecific09.J), MostSpecific09
+MostSpecific09.java:33:9: compiler.note.verbose.resolve.multi: foo, MostSpecific09, 0, BASIC, compiler.misc.type.none, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, foo(MostSpecific09.I), null)}
+MostSpecific09.java:42:13: compiler.err.lambda.body.neither.value.nor.void.compatible
+MostSpecific09.java:42:9: compiler.err.cant.apply.symbols: kindname.method, foo, @1129,{(compiler.misc.inapplicable.method: kindname.method, MostSpecific09, foo(MostSpecific09.I), (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.ret.type.in.lambda: (compiler.misc.missing.ret.val: java.lang.String)))),(compiler.misc.inapplicable.method: kindname.method, MostSpecific09, foo(MostSpecific09.J), (compiler.misc.no.conforming.assignment.exists: (compiler.misc.unexpected.ret.val)))}
+MostSpecific09.java:46:23: compiler.note.verbose.resolve.multi: println, java.io.PrintStream, 1, BASIC, java.lang.String, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, println(java.lang.Object), null),(compiler.misc.applicable.method.found: 1, println(java.lang.String), null)}
+MostSpecific09.java:49:9: compiler.note.verbose.resolve.multi: foo, MostSpecific09, 0, BASIC, compiler.misc.type.none, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, foo(MostSpecific09.J), null)}
+MostSpecific09.java:56:25: compiler.note.verbose.resolve.multi: <init>, Bar, 0, BASIC, compiler.misc.no.args, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, Bar(), null)}
+MostSpecific09.java:56:35: compiler.note.verbose.resolve.multi: <init>, Bar, 0, BASIC, compiler.misc.no.args, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, Bar(), null)}
+MostSpecific09.java:56:25: compiler.note.verbose.resolve.multi: <init>, compiler.misc.anonymous.class: MostSpecific09$1Boo$1, 0, BASIC, compiler.misc.no.args, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, compiler.misc.anonymous.class: MostSpecific09$1Boo$1(), null)}
+MostSpecific09.java:62:13: compiler.note.verbose.resolve.multi: moo, MostSpecific09, 0, BASIC, compiler.misc.type.none, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, moo(MostSpecific09.I), null)}
+MostSpecific09.java:66:9: compiler.note.verbose.resolve.multi: foo, MostSpecific09, 0, BASIC, compiler.misc.type.none, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, foo(MostSpecific09.I), null)}
+MostSpecific09.java:71:25: compiler.note.verbose.resolve.multi: <init>, Bar, 0, BASIC, compiler.misc.no.args, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, Bar(), null)}
+MostSpecific09.java:71:35: compiler.note.verbose.resolve.multi: <init>, Bar, 0, BASIC, compiler.misc.no.args, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, Bar(), null)}
+MostSpecific09.java:71:25: compiler.note.verbose.resolve.multi: <init>, compiler.misc.anonymous.class: MostSpecific09$2Boo$1, 0, BASIC, compiler.misc.no.args, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, compiler.misc.anonymous.class: MostSpecific09$2Boo$1(), null)}
+MostSpecific09.java:77:13: compiler.note.verbose.resolve.multi: moo, MostSpecific09, 0, BASIC, compiler.misc.type.none, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, moo(MostSpecific09.J), null)}
+MostSpecific09.java:77:36: compiler.note.verbose.resolve.multi: println, java.io.PrintStream, 1, BASIC, java.lang.String, compiler.misc.no.args,{(compiler.misc.applicable.method.found: 0, println(java.lang.Object), null),(compiler.misc.applicable.method.found: 1, println(java.lang.String), null)}
+7 errors
--- a/langtools/test/tools/javac/lambda/TargetType01.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/tools/javac/lambda/TargetType01.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,6 +42,10 @@
     static String M(F_S_S f){ return null; }
 
     static {
-        M(x1 -> { return M( x2 -> { return x1 + x2; });}); //ambiguous
+        M(x1 -> {
+            return M( x2 -> {
+                return x1 + x2;
+            });
+        }); //ambiguous
     }
 }
--- a/langtools/test/tools/javac/lambda/TargetType01.out	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/tools/javac/lambda/TargetType01.out	Thu Apr 24 16:04:44 2014 -0700
@@ -1,3 +1,3 @@
 TargetType01.java:45:9: compiler.err.ref.ambiguous: M, kindname.method, M(TargetType01.F_I_I), TargetType01, kindname.method, M(TargetType01.F_S_S), TargetType01
-TargetType01.java:45:26: compiler.err.ref.ambiguous: M, kindname.method, M(TargetType01.F_I_I), TargetType01, kindname.method, M(TargetType01.F_S_S), TargetType01
+TargetType01.java:46:20: compiler.err.ref.ambiguous: M, kindname.method, M(TargetType01.F_I_I), TargetType01, kindname.method, M(TargetType01.F_S_S), TargetType01
 2 errors
--- a/langtools/test/tools/javac/lambda/TargetType02.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/tools/javac/lambda/TargetType02.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,31 +1,9 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 8003280
+ * @test /nodynamiccopyright/
+ * @bug 8003280 8029718
  * @summary Add lambda tests
  *  check overload resolution and target type inference w.r.t. generic methods
+ * Should always use lambda body structure to disambiguate overload resolution
  * @author  Maurizio Cimadamore
  * @compile/fail/ref=TargetType02.out -XDrawDiagnostics TargetType02.java
  */
@@ -47,9 +25,18 @@
     static <Z extends Number> void call3(S1<Z> s) { }
     static <Z extends String> void call3(S2<Z> s) { }
 
+    static <Z extends Number> Z call4(S1<Z> s) { return null; }
+    static <Z extends String> Z call4(S2<Z> s) { return null; }
+
     void test() {
         call1(i -> { toString(); return i; });
         call2(i -> { toString(); return i; });
         call3(i -> { toString(); return i; });
+        call3(i -> {
+            toString();
+            return call4(j -> {
+                return j;
+            });
+        });
     }
 }
--- a/langtools/test/tools/javac/lambda/TargetType02.out	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/tools/javac/lambda/TargetType02.out	Thu Apr 24 16:04:44 2014 -0700
@@ -1,3 +1,5 @@
-TargetType02.java:52:14: compiler.err.prob.found.req: (compiler.misc.inferred.do.not.conform.to.upper.bounds: java.lang.Integer, java.lang.String)
-TargetType02.java:53:9: compiler.err.ref.ambiguous: call3, kindname.method, <Z>call3(TargetType02.S1<Z>), TargetType02, kindname.method, <Z>call3(TargetType02.S2<Z>), TargetType02
-2 errors
+TargetType02.java:33:14: compiler.err.prob.found.req: (compiler.misc.inferred.do.not.conform.to.upper.bounds: java.lang.Integer, java.lang.String)
+TargetType02.java:34:9: compiler.err.ref.ambiguous: call3, kindname.method, <Z>call3(TargetType02.S1<Z>), TargetType02, kindname.method, <Z>call3(TargetType02.S2<Z>), TargetType02
+TargetType02.java:35:9: compiler.err.ref.ambiguous: call3, kindname.method, <Z>call3(TargetType02.S1<Z>), TargetType02, kindname.method, <Z>call3(TargetType02.S2<Z>), TargetType02
+TargetType02.java:37:20: compiler.err.ref.ambiguous: call4, kindname.method, <Z>call4(TargetType02.S1<Z>), TargetType02, kindname.method, <Z>call4(TargetType02.S2<Z>), TargetType02
+4 errors
--- a/langtools/test/tools/javac/lambda/TargetType21.out	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/tools/javac/lambda/TargetType21.out	Thu Apr 24 16:04:44 2014 -0700
@@ -1,7 +1,5 @@
 TargetType21.java:28:9: compiler.err.ref.ambiguous: call, kindname.method, call(TargetType21.SAM2), TargetType21, kindname.method, <R,A>call(TargetType21.SAM3<R,A>), TargetType21
-TargetType21.java:31:9: compiler.err.ref.ambiguous: call, kindname.method, call(TargetType21.SAM2), TargetType21, kindname.method, <R,A>call(TargetType21.SAM3<R,A>), TargetType21
-TargetType21.java:32:9: compiler.err.ref.ambiguous: call, kindname.method, call(TargetType21.SAM2), TargetType21, kindname.method, <R,A>call(TargetType21.SAM3<R,A>), TargetType21
-TargetType21.java:32:13: compiler.err.cant.apply.symbol: kindname.method, call, TargetType21.SAM2, @888, kindname.class, TargetType21, (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.ret.type.in.lambda: (compiler.misc.unexpected.ret.val)))
-TargetType21.java:33:9: compiler.err.ref.ambiguous: call, kindname.method, call(TargetType21.SAM2), TargetType21, kindname.method, <R,A>call(TargetType21.SAM3<R,A>), TargetType21
-TargetType21.java:33:13: compiler.err.cant.apply.symbol: kindname.method, call, TargetType21.SAM2, @946, kindname.class, TargetType21, (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.ret.type.in.lambda: (compiler.misc.unexpected.ret.val)))
-6 errors
+TargetType21.java:32:9: compiler.err.ref.ambiguous: call, kindname.method, call(TargetType21.SAM1), TargetType21, kindname.method, <R,A>call(TargetType21.SAM3<R,A>), TargetType21
+TargetType21.java:32:13: compiler.err.cant.apply.symbol: kindname.method, call, TargetType21.SAM1, @888, kindname.class, TargetType21, (compiler.misc.no.conforming.assignment.exists: (compiler.misc.incompatible.ret.type.in.lambda: (compiler.misc.inconvertible.types: java.lang.Object, java.lang.String)))
+TargetType21.java:33:9: compiler.err.ref.ambiguous: call, kindname.method, call(TargetType21.SAM1), TargetType21, kindname.method, <R,A>call(TargetType21.SAM3<R,A>), TargetType21
+4 errors
--- a/langtools/test/tools/javac/lambda/TargetType42.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/tools/javac/lambda/TargetType42.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,12 +31,18 @@
 class TargetType42 {
 
     interface SAM<X, Y> {
-      Y f(X x);
+        Y f(X x);
     }
 
     <Z> void m(SAM<String, SAM<Z, Object>> s, Z z) { }
 
     void test(Object obj) {
-        m((x)->{ class Foo { }; return (x2)-> { new Foo(); return null; }; }, obj);
+        m((x)->{
+            class Foo { }
+            return (x2)-> {
+                new Foo();
+                return null;
+            };
+        }, obj);
     }
 }
--- a/langtools/test/tools/javac/lambda/lambdaExpression/LambdaTest1.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/tools/javac/lambda/lambdaExpression/LambdaTest1.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,7 +33,6 @@
 import java.util.Collections;
 import java.util.List;
 import java.util.ArrayList;
-import java.util.Date;
 
 public class LambdaTest1 {
 
--- a/langtools/test/tools/javac/lambda/lambdaExpression/SamConversionComboTest.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/tools/javac/lambda/lambdaExpression/SamConversionComboTest.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -209,7 +209,11 @@
         final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
         DiagnosticChecker dc = new DiagnosticChecker();
         JavacTask ct = (JavacTask)tool.getTask(null, null, dc, null, null, Arrays.asList(samSourceFile, clientSourceFile));
-        ct.analyze();
+        try {
+            ct.analyze();
+        } catch (Exception e) {
+            throw new AssertionError("failing SAM source file \n" + samSourceFile + "\n\n" + "failing client source file \n"+ clientSourceFile);
+        }
         if (dc.errorFound == checkSamConversion()) {
             throw new AssertionError(samSourceFile + "\n\n" + clientSourceFile);
         }
--- a/langtools/test/tools/javac/tree/DocCommentToplevelTest.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/tools/javac/tree/DocCommentToplevelTest.java	Thu Apr 24 16:04:44 2014 -0700
@@ -144,7 +144,8 @@
             public ClassTree visitCompilationUnit(CompilationUnitTree node, Void unused) {
                 docComments = ((JCTree.JCCompilationUnit)node).docComments;
                 boolean expectedComment = tdk == ToplevelDocKind.HAS_DOC &&
-                        (pk != PackageKind.NO_PKG || ik != ImportKind.ZERO);
+                                          pk == PackageKind.NO_PKG &&
+                                          ik != ImportKind.ZERO;
                 boolean foundComment = docComments.hasComment((JCTree) node);
                 if (expectedComment != foundComment) {
                     error("Unexpected comment " + docComments.getComment((JCTree) node) + " on toplevel");
@@ -153,6 +154,17 @@
             }
 
             @Override
+            public ClassTree visitPackage(PackageTree node, Void unused) {
+                boolean expectedComment = tdk == ToplevelDocKind.HAS_DOC &&
+                                          pk != PackageKind.NO_PKG;
+                boolean foundComment = docComments.hasComment((JCTree) node);
+                if (expectedComment != foundComment) {
+                    error("Unexpected comment " + docComments.getComment((JCTree) node) + " on toplevel");
+                }
+                return super.visitPackage(node, null);
+            }
+
+            @Override
             public ClassTree visitClass(ClassTree node, Void unused) {
                 boolean expectedComment = tdk == ToplevelDocKind.HAS_DOC &&
                         pk == PackageKind.NO_PKG && ik == ImportKind.ZERO &&
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/sjavac/ExclPattern.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+public class ExclPattern {
+
+    public static void main(String[] ignore) throws IOException {
+
+        String toBeExcluded = "pkg/excl-dir/excluded.txt";
+        String toBeIncluded = "pkg/incl-dir/included.txt";
+
+        // Set up source directory with directory to be excluded
+        populate(Paths.get("srcdir"),
+            "pkg/SomeClass.java",
+            "package pkg; public class SomeClass { }",
+
+            toBeExcluded,
+            "This file should not end up in the dest directory.",
+
+            toBeIncluded,
+            "This file should end up in the dest directory.");
+
+        String[] args = {
+                "-x", "pkg/excl-dir/*",
+                "-src", "srcdir",
+                "-d", "dest",
+                "-j", "1",
+                "-copy", ".txt",
+                "--server:portfile=testserver,background=false",
+                "--log=debug"
+        };
+
+        int rc = new com.sun.tools.sjavac.Main().go(args, System.out, System.err);
+        if (rc != 0) throw new RuntimeException("Error during compile!");
+
+        if (!Files.exists(Paths.get("dest/" + toBeIncluded)))
+            throw new AssertionError("File missing: " + toBeIncluded);
+
+        if (Files.exists(Paths.get("dest/" + toBeExcluded)))
+            throw new AssertionError("File present: " + toBeExcluded);
+    }
+
+    static void populate(Path root, String... args) throws IOException {
+        if (!Files.exists(root))
+            Files.createDirectory(root);
+        for (int i = 0; i < args.length; i += 2) {
+            String filename = args[i];
+            String content = args[i+1];
+            Path p = root.resolve(filename);
+            Files.createDirectories(p.getParent());
+            try (PrintWriter out = new PrintWriter(Files.newBufferedWriter(p,
+                    Charset.defaultCharset()))) {
+                out.println(content);
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/sjavac/ExclPatternWrapper.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8037085
+ * @summary Ensures that sjavac can handle various exclusion patterns.
+ * @run main ExclPatternWrapper
+ */
+public class ExclPatternWrapper {
+    public static void main(String... args) throws Exception {
+        SJavacTestUtil.runSjavacTest("ExclPattern", args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/sjavac/JavacOptionPrep.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Iterator;
+
+import com.sun.tools.sjavac.options.Options;
+
+
+public class JavacOptionPrep {
+
+    enum TestPath {
+        CP1, CP2, SRC1, SRC2, SOURCEPATH1, SOURCEPATH2;
+
+        public String toString() {
+            return name().toLowerCase();
+        }
+    }
+
+    private final static String SEP = File.pathSeparator;
+
+    public static void main(String[] unused) throws IOException {
+
+        for (TestPath p : TestPath.values())
+            Files.createDirectory(Paths.get(p.toString()));
+
+        // Test some various cases:
+        //  - Paths combined with File.pathSeparator (CP1 / CP2)
+        //  - Paths given as duplicate options (SOURCEPATH1 / SOURCEPATH2)
+        //  - Sources provided by -src (SRC1)
+        //  - Sources provided without preceding option (SRC2)
+        //  - An unrecognized option which is to be passed on to javac
+        String sjavacArgs = "-cp " + TestPath.CP1 + SEP + TestPath.CP2 +
+                            " -d dest " +
+                            " -h header" +
+                            " -sourcepath " + TestPath.SOURCEPATH1 +
+                            " -src " + TestPath.SRC1 +
+                            " -s gensrc" +
+                            " -sourcepath " + TestPath.SOURCEPATH2 +
+                            " " + TestPath.SRC2 +
+                            " -unrecognized";
+
+        Options options = Options.parseArgs(sjavacArgs.split(" "));
+
+        // Extract javac-options
+        String[] javacArgs = options.prepJavacArgs();
+
+        // Check the result
+        boolean destDirFound = false;
+        boolean headerDirFound = false;
+        boolean gensrcDirFound = false;
+        boolean classPathFound = false;
+        boolean sourcePathFound = false;
+        boolean unrecognizedFound = false;
+        boolean implicitNoneFound = false;
+
+        Iterator<String> javacArgIter = Arrays.asList(javacArgs).iterator();
+        while (javacArgIter.hasNext()) {
+
+            String option = javacArgIter.next();
+
+            switch (option) {
+            case "-classpath":
+            case "-cp":
+                classPathFound = true;
+                assertEquals(TestPath.CP1 + SEP + TestPath.CP2,
+                             javacArgIter.next());
+                break;
+
+            case "-d":
+                destDirFound = true;
+                assertEquals(Paths.get("dest").toAbsolutePath().toString(),
+                             javacArgIter.next());
+                break;
+
+            case "-h":
+                headerDirFound = true;
+                assertEquals(Paths.get("header").toAbsolutePath().toString(),
+                             javacArgIter.next());
+                break;
+
+            case "-s":
+                gensrcDirFound = true;
+                assertEquals(Paths.get("gensrc").toAbsolutePath().toString(),
+                             javacArgIter.next());
+                break;
+
+            case "-sourcepath":
+                sourcePathFound = true;
+                assertEquals(TestPath.SRC1 + SEP +
+                             TestPath.SRC2 + SEP +
+                             TestPath.SOURCEPATH1 + SEP +
+                             TestPath.SOURCEPATH2,
+                             javacArgIter.next());
+                break;
+
+            case "-unrecognized":
+                unrecognizedFound = true;
+                break;
+
+            case "-implicit:none":
+                implicitNoneFound = true;
+                break;
+
+                // Note that *which* files to actually compile is not dealt
+                // with by prepJavacArgs.
+
+            default:
+                throw new AssertionError("Unexpected option found: " + option);
+            }
+        }
+
+        if (!destDirFound)
+            throw new AssertionError("Dest directory not found.");
+
+        if (!headerDirFound)
+            throw new AssertionError("Header directory not found.");
+
+        if (!gensrcDirFound)
+            throw new AssertionError("Generated source directory not found.");
+
+        if (!classPathFound)
+            throw new AssertionError("Class path not found.");
+
+        if (!sourcePathFound)
+            throw new AssertionError("Source path not found.");
+
+        if (!unrecognizedFound)
+            throw new AssertionError("\"-unrecognized\" not found.");
+
+        if (!implicitNoneFound)
+            throw new AssertionError("\"-implicit:none\" not found.");
+
+    }
+
+    static void assertEquals(Object expected, Object actual) {
+        if (!expected.equals(actual))
+            throw new AssertionError("Expected " + expected + " but got " + actual);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/sjavac/JavacOptionPrepWrapper.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8035063
+ * @summary Tests the preparation of javac-arguments.
+ * @run main JavacOptionPrepWrapper
+ */
+public class JavacOptionPrepWrapper {
+    public static void main(String... args) throws Exception {
+        SJavacTestUtil.runSjavacTest("JavacOptionPrep", args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/sjavac/OptionDecoding.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,240 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+
+import static util.OptionTestUtil.assertEquals;
+import static util.OptionTestUtil.checkFilesFound;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.sun.tools.sjavac.CopyFile;
+import com.sun.tools.sjavac.Main;
+import com.sun.tools.sjavac.Module;
+import com.sun.tools.sjavac.Source;
+import com.sun.tools.sjavac.options.Options;
+import com.sun.tools.sjavac.options.SourceLocation;
+
+public class OptionDecoding {
+
+    public static void main(String[] args) throws IOException {
+
+        testPaths();
+        testDupPaths();
+        testSourceLocations();
+        testSimpleOptions();
+        testServerConf();
+        testSearchPaths();
+        testTranslationRules();
+
+    }
+
+    // Test decoding of output paths
+    static void testPaths() throws IOException {
+
+        final String H = "headers";
+        final String G = "gensrc";
+        final String D = "dest";
+        final String CMP = "srcRefList.txt";
+
+        Options options = Options.parseArgs("-h", H, "-s", G, "-d", D,
+                                            "--compare-found-sources", CMP);
+
+        assertEquals(Paths.get(H).toAbsolutePath(), options.getHeaderDir());
+        assertEquals(Paths.get(G).toAbsolutePath(), options.getGenSrcDir());
+        assertEquals(Paths.get(D).toAbsolutePath(), options.getDestDir());
+        assertEquals(Paths.get(CMP), options.getSourceReferenceList());
+
+    }
+
+    // Providing duplicate header / dest / gensrc paths should produce an error.
+    static void testDupPaths() throws IOException {
+
+        try {
+            Options.parseArgs("-h", "dir1", "-h", "dir2");
+            throw new RuntimeException("Duplicate header directories should fail.");
+        } catch (IllegalArgumentException iae) {
+            // Expected
+        }
+
+        try {
+            Options.parseArgs("-s", "dir1", "-s", "dir2");
+            throw new RuntimeException("Duplicate paths for generated sources should fail.");
+        } catch (IllegalArgumentException iae) {
+            // Expected
+        }
+
+        try {
+            Options.parseArgs("-d", "dir1", "-d", "dir2");
+            throw new RuntimeException("Duplicate destination directories should fail.");
+        } catch (IllegalArgumentException iae) {
+            // Expected
+        }
+
+    }
+
+    // Test source locations and -x, -i, -xf, -if filters
+    static void testSourceLocations() throws IOException {
+
+        Path a1 = Paths.get("root/pkg1/ClassA1.java");
+        Path a2 = Paths.get("root/pkg1/ClassA2.java");
+        Path b1 = Paths.get("root/pkg1/pkg2/ClassB1.java");
+        Path b2 = Paths.get("root/pkg1/pkg2/ClassB2.java");
+        Path c1 = Paths.get("root/pkg3/ClassC1.java");
+        Path c2 = Paths.get("root/pkg3/ClassC2.java");
+
+        for (Path p : Arrays.asList(a1, a2, b1, b2, c1, c2)) {
+            Files.createDirectories(p.getParent());
+            Files.createFile(p);
+        }
+
+        // Test -if
+        {
+            Options options = Options.parseArgs("-if", "root/pkg1/ClassA1.java", "root");
+
+            Map<String, Source> foundFiles = new HashMap<>();
+            Main.findSourceFiles(options.getSources(), Collections.singleton(".java"), foundFiles,
+                    new HashMap<String, Module>(), new Module("", ""), false, true);
+
+            checkFilesFound(foundFiles.keySet(), a1);
+        }
+
+        // Test -i
+        System.out.println("--------------------------- CHECKING -i ----------------");
+        {
+            Options options = Options.parseArgs("-i", "pkg1/*", "root");
+
+            Map<String, Source> foundFiles = new HashMap<>();
+            Main.findSourceFiles(options.getSources(), Collections.singleton(".java"), foundFiles,
+                    new HashMap<String, Module>(), new Module("", ""), false, true);
+
+            checkFilesFound(foundFiles.keySet(), a1, a2, b1, b2);
+        }
+        System.out.println("--------------------------------------------------------");
+
+        // Test -xf
+        {
+            Options options = Options.parseArgs("-xf", "root/pkg1/ClassA1.java", "root");
+
+            Map<String, Source> foundFiles = new HashMap<>();
+            Main.findSourceFiles(options.getSources(), Collections.singleton(".java"), foundFiles,
+                    new HashMap<String, Module>(), new Module("", ""), false, true);
+
+            checkFilesFound(foundFiles.keySet(), a2, b1, b2, c1, c2);
+        }
+
+        // Test -x
+        {
+            Options options = Options.parseArgs("-i", "pkg1/*", "root");
+
+            Map<String, Source> foundFiles = new HashMap<>();
+            Main.findSourceFiles(options.getSources(), Collections.singleton(".java"), foundFiles,
+                    new HashMap<String, Module>(), new Module("", ""), false, true);
+
+            checkFilesFound(foundFiles.keySet(), a1, a2, b1, b2);
+        }
+
+        // Test -x and -i
+        {
+            Options options = Options.parseArgs("-i", "pkg1/*", "-x", "pkg1/pkg2/*", "root");
+
+            Map<String, Source> foundFiles = new HashMap<>();
+            Main.findSourceFiles(options.getSources(), Collections.singleton(".java"), foundFiles,
+                    new HashMap<String, Module>(), new Module("", ""), false, true);
+
+            checkFilesFound(foundFiles.keySet(), a1, a2);
+        }
+
+    }
+
+    // Test basic options
+    static void testSimpleOptions() {
+
+        Options options = Options.parseArgs("-j", "17", "--log=debug");
+        assertEquals(17, options.getNumCores());
+        assertEquals("debug", options.getLogLevel());
+        assertEquals(false, options.isDefaultPackagePermitted());
+        assertEquals(false, options.isUnidentifiedArtifactPermitted());
+
+        options = Options.parseArgs("--permit-unidentified-artifacts",
+                                    "--permit-sources-without-package");
+        assertEquals("info", options.getLogLevel());
+        assertEquals(true, options.isDefaultPackagePermitted());
+        assertEquals(true, options.isUnidentifiedArtifactPermitted());
+    }
+
+    // Test server configuration options
+    static void testServerConf() {
+        Options options = Options.parseArgs("--server:someServerConfiguration");
+        assertEquals("someServerConfiguration", options.getServerConf());
+        assertEquals(false, options.startServerFlag());
+
+        options = Options.parseArgs("--startserver:someServerConfiguration");
+        assertEquals("someServerConfiguration", options.getServerConf());
+        assertEquals(true, options.startServerFlag());
+    }
+
+    // Test input paths
+    static void testSearchPaths() {
+
+        List<String> i, x, iF, xF;
+        i = x = iF = xF = new ArrayList<>();
+
+        SourceLocation dir1 = new SourceLocation(Paths.get("dir1"), i, x, iF, xF);
+        SourceLocation dir2 = new SourceLocation(Paths.get("dir2"), i, x, iF, xF);
+
+        Options options = Options.parseArgs("-sourcepath", "dir1:dir2");
+        assertEquals(options.getSourceSearchPaths(), Arrays.asList(dir1, dir2));
+
+        options = Options.parseArgs("-modulepath", "dir1:dir2");
+        assertEquals(options.getModuleSearchPaths(), Arrays.asList(dir1, dir2));
+
+        options = Options.parseArgs("-classpath", "dir1:dir2");
+        assertEquals(options.getClassSearchPath(), Arrays.asList(dir1, dir2));
+    }
+
+    // Test -tr option
+    static void testTranslationRules() {
+
+        Class<?> cls = com.sun.tools.sjavac.CompileJavaPackages.class;
+
+        Options options = Options.parseArgs(
+                "-tr", ".exa=" + cls.getName(),
+                "-tr", ".exb=" + cls.getName(),
+                "-copy", ".html");
+
+        assertEquals(cls, options.getTranslationRules().get(".exa").getClass());
+        assertEquals(cls, options.getTranslationRules().get(".exb").getClass());
+        assertEquals(CopyFile.class, options.getTranslationRules().get(".html").getClass());
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/sjavac/OptionDecodingWrapper.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8035063
+ * @summary Tests decoding of String[] into Options.
+ * @run main OptionDecodingWrapper
+ */
+public class OptionDecodingWrapper {
+    public static void main(String... args) throws Exception {
+        SJavacTestUtil.runSjavacTest("OptionDecoding", args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/sjavac/SJavacTestUtil.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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.
+ */
+
+import java.io.File;
+import java.lang.reflect.Method;
+
+
+public class SJavacTestUtil {
+
+    public static void runSjavacTest(String testClassName, String[] args)
+            throws Exception {
+
+        if (!isSJavacOnClassPath()) {
+            System.out.println("sjavac not available: pass by default");
+            return;
+        }
+
+        File srcDir = new File(System.getProperty("test.src"));
+        File clsDir = new File(System.getProperty("test.classes"));
+
+        File src = new File(srcDir, testClassName + ".java");
+        File cls = new File(clsDir, testClassName + ".class");
+
+        if (cls.lastModified() < src.lastModified()) {
+            System.err.println("Recompiling test class...");
+            String[] javacArgs = { "-d", clsDir.getPath(), src.getPath() };
+            int rc = com.sun.tools.javac.Main.compile(javacArgs);
+            if (rc != 0)
+                throw new Exception("compilation failed");
+        }
+
+        Class<?> sjavac = Class.forName(testClassName);
+        Method main = sjavac.getMethod("main", String[].class);
+        main.invoke(null, new Object[] { args });
+
+    }
+
+    private static boolean isSJavacOnClassPath() {
+        String cls = "com/sun/tools/sjavac/Main.class";
+        return SJavacTestUtil.class.getClassLoader().getResource(cls) != null;
+    }
+}
--- a/langtools/test/tools/sjavac/SJavacWrapper.java	Thu Apr 24 12:21:18 2014 -0700
+++ b/langtools/test/tools/sjavac/SJavacWrapper.java	Thu Apr 24 16:04:44 2014 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,37 +31,8 @@
  * @run main SJavacWrapper
  */
 
-import java.io.*;
-import java.lang.reflect.Method;
-import java.net.*;
-
-
-public
-class SJavacWrapper {
-
+public class SJavacWrapper {
     public static void main(String... args) throws Exception {
-        URL url = SJavacWrapper.class.getClassLoader().getResource("com/sun/tools/sjavac/Main.class");
-        if (url == null) {
-            // No sjavac in the classpath.
-            System.out.println("sjavac not available: pass by default");
-            return;
-        }
-
-        File testSrc = new File(System.getProperty("test.src"));
-        File sjavac_java = new File(testSrc, "SJavac.java");
-        File testClasses = new File(System.getProperty("test.classes"));
-        File sjavac_class = new File(testClasses, "SJavac.class");
-        if (sjavac_class.lastModified() < sjavac_java.lastModified()) {
-            String[] javac_args = { "-d", testClasses.getPath(), sjavac_java.getPath() };
-            System.err.println("Recompiling SJavac.java");
-            int rc = com.sun.tools.javac.Main.compile(javac_args);
-            if (rc != 0)
-                throw new Exception("compilation failed");
-        }
-
-        Class<?> sjavac = Class.forName("SJavac");
-        Method sjavac_main = sjavac.getMethod("main", String[].class);
-        sjavac_main.invoke(null, new Object[] { args });
+        SJavacTestUtil.runSjavacTest("SJavac", args);
     }
-
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/sjavac/Serialization.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import static util.OptionTestUtil.assertEquals;
+
+import java.io.IOException;
+import java.util.Map;
+
+import com.sun.tools.sjavac.CompileJavaPackages;
+import com.sun.tools.sjavac.Transformer;
+import com.sun.tools.sjavac.options.Option;
+import com.sun.tools.sjavac.options.Options;
+import com.sun.tools.sjavac.options.SourceLocation;
+
+
+public class Serialization {
+
+    public static void main(String[] args) throws IOException {
+
+        // Create reference options
+        Options options1 = Options.parseArgs(
+                Option.H.arg, "headers",
+                Option.S.arg, "gensrc",
+                Option.D.arg, "dest",
+                Option.I.arg, "pkg/*",
+                Option.X.arg, "pkg/pkg/*",
+                Option.IF.arg, "root/pkg/MyClass1.java",
+                Option.XF.arg, "root/pkg/MyClass2.java",
+                Option.SRC.arg, "root",
+                Option.SOURCEPATH.arg, "sourcepath",
+                Option.CLASSPATH.arg, "classpath",
+                Option.MODULEPATH.arg, "modulepath",
+                Option.PERMIT_SOURCES_WITHOUT_PACKAGE.arg,
+                Option.PERMIT_UNIDENTIFIED_ARTIFACTS.arg,
+                Option.TR.arg, ".prop=" + CompileJavaPackages.class.getName(),
+                Option.J.arg, "999",
+                "-someJavacArg",
+                "-someOtherJavacArg");
+
+        // Serialize
+        String serialized = options1.getStateArgsString();
+
+        // Deserialize
+        Options options2 = Options.parseArgs(serialized.split(" "));
+
+        // Make sure we got the same result
+        assertEquals(options1.getHeaderDir(), options2.getHeaderDir());
+        assertEquals(options1.getGenSrcDir(), options2.getGenSrcDir());
+        assertEquals(options1.getDestDir(), options2.getDestDir());
+
+        SourceLocation sl1 = options1.getSources().get(0);
+        SourceLocation sl2 = options2.getSources().get(0);
+        assertEquals(sl1.getPath(), sl2.getPath());
+        assertEquals(sl1.getIncludes(), sl2.getIncludes());
+        assertEquals(sl1.getExcludes(), sl2.getExcludes());
+        assertEquals(sl1.getIncludedFiles(), sl2.getIncludedFiles());
+        assertEquals(sl1.getExcludedFiles(), sl2.getExcludedFiles());
+
+        assertEquals(options1.getClassSearchPath(), options2.getClassSearchPath());
+        assertEquals(options1.getSourceSearchPaths(), options2.getSourceSearchPaths());
+        assertEquals(options1.getModuleSearchPaths(), options2.getModuleSearchPaths());
+
+        Map<String, Transformer> trRules1 = options1.getTranslationRules();
+        Map<String, Transformer> trRules2 = options2.getTranslationRules();
+        assertEquals(trRules1.keySet(), trRules2.keySet());
+        assertEquals(trRules1.values().iterator().next().getClass(),
+                     trRules2.values().iterator().next().getClass());
+        assertEquals(options1.getJavacArgs(), options2.getJavacArgs());
+
+        assertEquals(999, options1.getNumCores());
+        if (options2.getNumCores() == 999)
+            throw new AssertionError("Num cores should not be part of serialization");
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/sjavac/SerializationWrapper.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8035063
+ *
+ * @summary Tests serialization of options. The options needs to be serialized
+ *          and saved in the state file since the files need to be recompiled
+ *          if new options are provided.
+ *
+ * @run main SerializationWrapper
+ */
+public class SerializationWrapper {
+    public static void main(String... args) throws Exception {
+        SJavacTestUtil.runSjavacTest("Serialization", args);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/sjavac/util/OptionTestUtil.java	Thu Apr 24 16:04:44 2014 -0700
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * 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 util;
+
+import java.nio.file.Path;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+
+import com.sun.tools.sjavac.options.SourceLocation;
+
+
+public class OptionTestUtil {
+
+    public static void checkFilesFound(Collection<String> found, Path... expected) {
+
+        Collection<String> expectedStrs = new HashSet<String>();
+        for (Path p : expected)
+            expectedStrs.add(p.toString());
+
+        if (!expectedStrs.containsAll(found))
+            throw new AssertionError("Expected (" + expectedStrs + ") does not " +
+                                     "contain all actual (" + found + ")");
+
+        if (!found.containsAll(expectedStrs))
+            throw new AssertionError("Actual (" + found + ") does not " +
+                                     "contain all expected (" + expectedStrs + ")");
+    }
+
+    public static void assertEquals(List<SourceLocation> expected, List<SourceLocation> actual) {
+        if (expected.size() != actual.size())
+            throw new AssertionError("Expected locs of length " + expected.size() + " but got something of size " + actual.size());
+
+        Iterator<SourceLocation> iter1 = expected.iterator();
+        Iterator<SourceLocation> iter2 = actual.iterator();
+
+        while (iter1.hasNext()) {
+            SourceLocation sl1 = iter1.next();
+            SourceLocation sl2 = iter2.next();
+
+            if (!sl1.getPath().equals(sl2.getPath()) ||
+                    !sl1.getIncludes().equals(sl2.getIncludes()) ||
+                    !sl1.getExcludes().equals(sl2.getExcludes()) ||
+                    !sl1.getIncludedFiles().equals(sl2.getIncludedFiles()) ||
+                    !sl1.getExcludedFiles().equals(sl2.getExcludedFiles()))
+                throw new AssertionError("Expected " + sl1 + " but got " + sl2);
+        }
+    }
+
+    public static void assertEquals(Object expected, Object actual) {
+        if (!expected.equals(actual))
+            throw new AssertionError("Expected " + expected + " but got " + actual);
+    }
+
+}