changeset 2586:0fde5fa9febf

Merge
author briangoetz
date Mon, 28 Oct 2013 18:30:14 -0400
parents cc5933483c1a 860f1d21763a
children cacf685c22c7
files .hgtags make/build.properties make/build.xml makefiles/Makefile src/share/classes/com/sun/javadoc/package.html src/share/classes/com/sun/source/tree/LambdaExpressionTree.java src/share/classes/com/sun/source/tree/MemberReferenceTree.java src/share/classes/com/sun/source/tree/Tree.java src/share/classes/com/sun/source/tree/TreeVisitor.java src/share/classes/com/sun/source/util/DocTrees.java src/share/classes/com/sun/source/util/JavacTask.java src/share/classes/com/sun/source/util/Plugin.java src/share/classes/com/sun/source/util/SimpleTreeVisitor.java src/share/classes/com/sun/source/util/TreePath.java src/share/classes/com/sun/source/util/TreeScanner.java src/share/classes/com/sun/tools/classfile/package.html src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java src/share/classes/com/sun/tools/doclets/formats/html/markup/package.html src/share/classes/com/sun/tools/doclets/formats/html/package.html src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/package.html src/share/classes/com/sun/tools/doclets/internal/toolkit/package.html src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/stylesheet.css src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/package.html src/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/package.html src/share/classes/com/sun/tools/doclets/internal/toolkit/util/package.html src/share/classes/com/sun/tools/doclets/package.html src/share/classes/com/sun/tools/javac/api/JavacTool.java src/share/classes/com/sun/tools/javac/code/Attribute.java src/share/classes/com/sun/tools/javac/code/Flags.java src/share/classes/com/sun/tools/javac/code/Printer.java src/share/classes/com/sun/tools/javac/code/Symbol.java src/share/classes/com/sun/tools/javac/code/SymbolMetadata.java src/share/classes/com/sun/tools/javac/code/Type.java src/share/classes/com/sun/tools/javac/code/Types.java src/share/classes/com/sun/tools/javac/comp/Annotate.java src/share/classes/com/sun/tools/javac/comp/Attr.java src/share/classes/com/sun/tools/javac/comp/Check.java src/share/classes/com/sun/tools/javac/comp/Flow.java src/share/classes/com/sun/tools/javac/comp/Infer.java src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java src/share/classes/com/sun/tools/javac/comp/Lower.java src/share/classes/com/sun/tools/javac/comp/MemberEnter.java src/share/classes/com/sun/tools/javac/comp/Resolve.java src/share/classes/com/sun/tools/javac/comp/TransTypes.java src/share/classes/com/sun/tools/javac/jvm/ClassReader.java src/share/classes/com/sun/tools/javac/jvm/Gen.java src/share/classes/com/sun/tools/javac/jvm/Pool.java src/share/classes/com/sun/tools/javac/main/JavaCompiler.java src/share/classes/com/sun/tools/javac/model/JavacAnnoConstructs.java src/share/classes/com/sun/tools/javac/parser/JavacParser.java src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java src/share/classes/com/sun/tools/javac/resources/compiler.properties src/share/classes/com/sun/tools/javac/sym/CreateSymbols.java src/share/classes/com/sun/tools/javac/tree/JCTree.java src/share/classes/com/sun/tools/javac/tree/Pretty.java src/share/classes/com/sun/tools/javadoc/ClassDocImpl.java src/share/classes/com/sun/tools/javadoc/DocEnv.java src/share/classes/com/sun/tools/javadoc/RootDocImpl.java src/share/classes/com/sun/tools/javap/package.html src/share/classes/com/sun/tools/jdeps/Profiles.java src/share/classes/jdk/Supported.java test/Makefile test/com/sun/javadoc/testHtmlTableTags/TestHtmlTableTags.java test/com/sun/javadoc/testNavigation/TestNavigation.java test/com/sun/javadoc/testProfiles/TestProfiles.java test/tools/javac/T8019486/WrongLVTForLambdaTest.java test/tools/javac/annotations/typeAnnotations/failures/CantAnnotateStaticClass.out test/tools/javac/annotations/typeAnnotations/failures/IncompleteVararg.java test/tools/javac/annotations/typeAnnotations/failures/IncompleteVararg.out test/tools/javac/annotations/typeAnnotations/failures/StaticMethods.java test/tools/javac/annotations/typeAnnotations/failures/StaticMethods.out test/tools/javac/diags/examples.not-yet.txt test/tools/javac/diags/examples/CantAnnotateNestedType.java test/tools/javac/diags/examples/CantAnnotateStaticClass.java test/tools/javac/diags/examples/DuplicateAnnotation.java test/tools/javac/diags/examples/RepeatableAnnotationsNotSupported.java test/tools/javac/generics/OverrideBridge.java test/tools/javac/lambda/8016081/T8016081.java test/tools/javac/lambda/LambdaExpr13.java test/tools/javac/lambda/TargetType58.java test/tools/javac/lambda/TestSelfRef.java test/tools/javac/lambdaShapes/org/openjdk/tests/separate/TestHarness.java test/tools/javac/lambdaShapes/org/openjdk/tests/vm/DefaultMethodsTest.java
diffstat 489 files changed, 12975 insertions(+), 4229 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Fri Oct 11 17:51:08 2013 -0700
+++ b/.hgtags	Mon Oct 28 18:30:14 2013 -0400
@@ -236,3 +236,5 @@
 252f872b8a2f81a416f9127e77924ca56a4578b0 jdk8-b108
 985abf1cd327169a317d4ff4f318a8162a5cd47d jdk8-b109
 41541097533aa3933a018c8c1c426c1871dfd76e jdk8-b110
+af6244ba81b6b8d1bf4ab06587a2067e021e4570 jdk8-b111
+954dd199d6ff3e4cfc42b894c1f611150526eecd jdk8-b112
--- a/make/build.properties	Fri Oct 11 17:51:08 2013 -0700
+++ b/make/build.properties	Mon Oct 28 18:30:14 2013 -0400
@@ -163,11 +163,11 @@
 #
 
 sjavac.includes = \
-        com/sun/tools/sjavac/ 
+        com/sun/tools/sjavac/
 
 sjavac.tests = \
         tools/sjavac
-        
+
 #
 
 # The following files require the latest JDK to be available.
--- a/make/build.xml	Fri Oct 11 17:51:08 2013 -0700
+++ b/make/build.xml	Mon Oct 28 18:30:14 2013 -0400
@@ -89,7 +89,7 @@
       build-classes-TOOL        build the classes for the tool
       build-TOOL                build the jar file and script for the tool
       jtreg-TOOL                build the tool and run the appropriate tests
-      findbugs-TOOL             run findbugs on the tool's source oode
+      findbugs-TOOL             run findbugs on the tool's source code
       TOOL                      build the tool, run the tests, and run findbugs
  - utility definitions
  -->
@@ -360,7 +360,7 @@
             datafile="${build.coverage.dir}/cobertura.ser"/>
     </target>
 
-    <target name="diags-examples" depends="build-javac">
+    <target name="diags-examples" depends="build-javac,build-javap">
         <!-- can override the following on the command line if desired. -->
         <property name="diags.examples.out" location="${build.dir}/diag-examples/diags-examples.html"/>
         <mkdir dir="${build.dir}/diag-examples/classes"/>
@@ -370,7 +370,7 @@
             destdir="${build.dir}/diag-examples/classes"
             includes="ArgTypeCompilerFactory.java,Example.java,FileManager.java,HTMLWriter.java,RunExamples.java,DocCommentProcessor.java"
             sourcepath=""
-            classpath="${dist.lib.dir}/javac.jar"
+            classpath="${dist.lib.dir}/javac.jar;${dist.lib.dir}/javap.jar"
             includeAntRuntime="no"
             debug="${javac.debug}"
             debuglevel="${javac.debuglevel}">
@@ -379,7 +379,7 @@
         <java fork="true"
             jvm="${target.java.home}/bin/java"
             dir="test/tools/javac/diags"
-            classpath="${build.dir}/diag-examples/classes;${dist.lib.dir}/javac.jar"
+            classpath="${build.dir}/diag-examples/classes;${dist.lib.dir}/javac.jar;${dist.lib.dir}/javap.jar"
             classname="RunExamples">
             <jvmarg value="-Dtest.classes=${build.dir}/diag-examples/classes"/>
             <arg value="-examples"/>
--- a/makefiles/BuildLangtools.gmk	Fri Oct 11 17:51:08 2013 -0700
+++ b/makefiles/BuildLangtools.gmk	Mon Oct 28 18:30:14 2013 -0400
@@ -32,44 +32,49 @@
 
 # The BOOT_JAVAC setup uses the bootdir compiler to compile the tools
 # and the bootstrap javac, to be run by the bootdir jvm.
-$(eval $(call SetupJavaCompiler,BOOT_JAVAC,\
-	JAVAC:=$(JAVAC),\
-        SERVER_DIR:=$(SJAVAC_SERVER_DIR),\
-        SERVER_JVM:=$(SJAVAC_SERVER_JAVA),\
-        FLAGS:=-XDignore.symbol.file=true -g -Xlint:all$(COMMA)-deprecation -Werror))
+$(eval $(call SetupJavaCompiler,BOOT_JAVAC, \
+    JAVAC := $(JAVAC), \
+    SERVER_DIR := $(SJAVAC_SERVER_DIR), \
+    SERVER_JVM := $(SJAVAC_SERVER_JAVA), \
+    FLAGS := -XDignore.symbol.file=true -g -Xlint:all$(COMMA)-deprecation -Werror))
 
 # javax.tools.JavaCompilerTool isn't really a suffix but this gets the file copied.
-RESOURCE_SUFFIXES:=.gif .xml .css .js javax.tools.JavaCompilerTool
+RESOURCE_SUFFIXES := .gif .xml .css .js javax.tools.JavaCompilerTool
 
 # Now setup the compilation of the properties compilation tool. You can depend
 # upon $(BUILD_TOOLS) to trigger a compilation of the tools. Note that we
 # add src/share/classes to the sourcepath. This is necessary since the GenStubs
 # program needs to be linked and run towards the new javac sources.
-$(eval $(call SetupJavaCompilation,BUILD_TOOLS,\
-		SETUP:=BOOT_JAVAC,\
-		DISABLE_SJAVAC:=true,\
-                ADD_JAVAC_FLAGS:=-Xprefer:source,\
-		SRC:=$(LANGTOOLS_TOPDIR)/make/tools $(LANGTOOLS_TOPDIR)/src/share/classes,\
-		INCLUDES:=compileproperties genstubs,\
-		BIN:=$(LANGTOOLS_OUTPUTDIR)/btclasses))
+$(eval $(call SetupJavaCompilation,BUILD_TOOLS, \
+    SETUP := BOOT_JAVAC, \
+    DISABLE_SJAVAC := true, \
+    ADD_JAVAC_FLAGS := -Xprefer:source, \
+    SRC := $(LANGTOOLS_TOPDIR)/make/tools $(LANGTOOLS_TOPDIR)/src/share/classes, \
+    INCLUDES := compileproperties genstubs, \
+    BIN := $(LANGTOOLS_OUTPUTDIR)/btclasses))
 
 # The compileprops tools compiles a properties file into a resource bundle.
-TOOL_COMPILEPROPS_CMD:=$(JAVA) -cp $(LANGTOOLS_OUTPUTDIR)/btclasses compileproperties.CompileProperties -quiet
+TOOL_COMPILEPROPS_CMD := $(JAVA) -cp $(LANGTOOLS_OUTPUTDIR)/btclasses compileproperties.CompileProperties -quiet
+
 # Lookup the properties that need to be compiled into resource bundles.
-PROPSOURCES:=$(shell $(FIND) $(LANGTOOLS_TOPDIR)/src/share/classes -name "*.properties")
+PROPSOURCES := $(shell $(FIND) $(LANGTOOLS_TOPDIR)/src/share/classes -name "*.properties")
+
 # Strip away prefix and suffix, leaving for example only: "com/sun/tools/javac/resources/javac_zh_CN"
-PROPPATHS:=$(patsubst $(LANGTOOLS_TOPDIR)/src/share/classes/%.properties,%,$(PROPSOURCES))
+PROPPATHS := $(patsubst $(LANGTOOLS_TOPDIR)/src/share/classes/%.properties, %, $(PROPSOURCES))
+
 # Generate the list of java files to be created.
-PROPJAVAS:=$(patsubst %,$(LANGTOOLS_OUTPUTDIR)/gensrc/%.java,$(PROPPATHS))
+PROPJAVAS := $(patsubst %, $(LANGTOOLS_OUTPUTDIR)/gensrc/%.java, $(PROPPATHS))
+
 # Generate the package dirs for the tobe generated java files.
-PROPDIRS:=$(dir $(PROPJAVAS))
+PROPDIRS := $(dir $(PROPJAVAS))
+
 # Now generate a sequence of "-compile ...javac_zh_CN.properties ...javac_zh_CN.java java.util.ListResourceBundle"
 # suitable to be fed into the CompileProperties command.
-PROPCMDLINE:=$(subst _SPACE_,$(SPACE),$(join $(addprefix -compile_SPACE_,$(PROPSOURCES)), \
-		$(addsuffix _SPACE_java.util.ListResourceBundle,$(addprefix _SPACE_$(LANGTOOLS_OUTPUTDIR)/gensrc/,$(addsuffix .java,$(PROPPATHS))))))
+PROPCMDLINE := $(subst _SPACE_, $(SPACE), $(join $(addprefix -compile_SPACE_, $(PROPSOURCES)), \
+    $(addsuffix _SPACE_java.util.ListResourceBundle, $(addprefix _SPACE_$(LANGTOOLS_OUTPUTDIR)/gensrc/, $(addsuffix .java, $(PROPPATHS))))))
 
 # Now setup the rule for the generation of the resource bundles.
-$(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props.d : $(PROPSOURCES) $(BUILD_TOOLS)
+$(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props.d: $(PROPSOURCES) $(BUILD_TOOLS)
 	$(RM) -r $(@D)/*
 	$(MKDIR) -p $(@D) $(PROPDIRS)
 	$(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.properties
@@ -78,115 +83,119 @@
 	$(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" > $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/jdeps/resources/version.properties
 	$(ECHO) Compiling $(words $(PROPSOURCES) v1 v2 v3) properties into resource bundles
 	$(TOOL_COMPILEPROPS_CMD) $(PROPCMDLINE) \
-		-compile 	$(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.properties \
-				$(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.java \
-				java.util.ListResourceBundle \
-		-compile 	$(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.properties \
-				$(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.java \
-				java.util.ListResourceBundle \
-		-compile	$(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.properties \
-				$(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.java \
-				java.util.ListResourceBundle \
-		-compile	$(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/jdeps/resources/version.properties \
-				$(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/jdeps/resources/version.java \
-				java.util.ListResourceBundle
-	$(ECHO) PROPS_ARE_CREATED=yes > $@
+	    -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.properties \
+	        $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javah/resources/version.java \
+	        java.util.ListResourceBundle \
+	    -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.properties \
+	        $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javap/resources/version.java \
+	        java.util.ListResourceBundle \
+	    -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.properties \
+	        $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/javac/resources/version.java \
+	        java.util.ListResourceBundle \
+	    -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/jdeps/resources/version.properties \
+	        $(LANGTOOLS_OUTPUTDIR)/gensrc/com/sun/tools/jdeps/resources/version.java \
+	        java.util.ListResourceBundle
+	$(ECHO) PROPS_ARE_CREATED = yes > $@
 
 # Trigger the generation of the resource bundles. After the resource bundles have
 # been compiled, then the makefile will restart and the newly created java files
 # will become part of the build further along in the makefile.
 -include $(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props.d
 
-ifeq ($(PROPS_ARE_CREATED),yes)
-        # Setup the rules to build a dist/bootstrap/lib/javac.jar, ie a smaller intermediate javac
-        # that can be compiled with an old javac. The intermediate javac is then used
-        # to compile javac again and to build the complete new jdk.
-        $(eval $(call SetupJavaCompilation,BUILD_BOOTSTRAP_LANGTOOLS,\
-		SETUP:=BOOT_JAVAC,\
-		DISABLE_SJAVAC:=true,\
-		SRC:=$(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc,\
-		EXCLUDES:=com/sun/tools/javac/nio,\
-		COPY:=$(RESOURCE_SUFFIXES),\
-		BIN:=$(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap))
+ifeq ($(PROPS_ARE_CREATED), yes)
+  # Setup the rules to build a dist/bootstrap/lib/javac.jar, ie a smaller intermediate javac
+  # that can be compiled with an old javac. The intermediate javac is then used
+  # to compile javac again and to build the complete new jdk.
+  $(eval $(call SetupJavaCompilation,BUILD_BOOTSTRAP_LANGTOOLS, \
+      SETUP := BOOT_JAVAC, \
+      DISABLE_SJAVAC := true, \
+      SRC := $(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc, \
+      EXCLUDES := com/sun/tools/javac/nio, \
+      COPY := $(RESOURCE_SUFFIXES), \
+      BIN := $(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap))
 
-        $(eval $(call SetupArchive,ARCHIVE_BOOTSTRAP_JAVAC,$(BUILD_BOOTSTRAP_LANGTOOLS),\
-		SRCS:=$(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap,\
-		JAR:=$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar,\
-		SUFFIXES:=.class $(RESOURCE_SUFFIXES)))
+  $(eval $(call SetupArchive,ARCHIVE_BOOTSTRAP_JAVAC, $(BUILD_BOOTSTRAP_LANGTOOLS), \
+      SRCS := $(LANGTOOLS_OUTPUTDIR)/btclasses/bootstrap, \
+      JAR := $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar, \
+      SUFFIXES := .class $(RESOURCE_SUFFIXES)))
 
-        # GenStubs is used to bootstrap any dependencies from javac to the new JDK that is not 
-        # yet built. It is currently not needed but might be again in the future. The following
-        # exercises the functionality to verify that it works.
-        TOOL_GENSTUBS_CMD=$(JAVA) \
-             "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \
-             -classpath $(LANGTOOLS_OUTPUTDIR)/btclasses \
-             genstubs.GenStubs
-        # We fetch source from the JDK...
-        JDKS=$(JDK_TOPDIR)/src/share/classes
-        # Build the list of classes to generate stubs from. java/util/function/Predicate.java isn't
-        # currently needed, but is used as a demo for now.
-	 STUBSOURCES:=$(shell $(FIND) $(JDKS) -name "*.java" | $(GREP) \
-		    -e "$(JDKS)/java/util/function/Predicate.java")
-        # Rewrite the file names into class names because the GenStubs tool require this.
-        STUBCLASSES:=$(subst /,.,$(patsubst $(JDKS)/%.java,%,$(STUBSOURCES)))
+  # GenStubs is used to bootstrap any dependencies from javac to the new JDK that is not
+  # yet built. It is currently not needed but might be again in the future. The following
+  # exercises the functionality to verify that it works.
+  TOOL_GENSTUBS_CMD = $(JAVA) \
+       "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \
+       -classpath $(LANGTOOLS_OUTPUTDIR)/btclasses \
+       genstubs.GenStubs
 
-        # Now setup the build recipe for genstubs.
-        $(LANGTOOLS_OUTPUTDIR)/genstubs/_the_stubs.d : $(STUBSOURCES) $(BUILD_TOOLS) \
-				$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \
-				$(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props.d
-	       	$(MKDIR) -p $(@D)
-		$(MKDIR) -p $(LANGTOOLS_OUTPUTDIR)/tmpstubs
-	       	$(ECHO) $(LOG_INFO) Generating stubs from JDK sources.
-	       	($(TOOL_GENSTUBS_CMD) -s $(LANGTOOLS_OUTPUTDIR)/tmpstubs -sourcepath $(JDKS) $(STUBCLASSES) && $(ECHO) STUBS_ARE_CREATED=yes > $@)
-		if $(DIFF) -x "_the*" -rq $(LANGTOOLS_OUTPUTDIR)/tmpstubs $(LANGTOOLS_OUTPUTDIR)/genstubs > /dev/null 2>&1; then \
-			$(ECHO) $(LOG_INFO) No changes in the stubs!; \
-			$(RM) -r $(LANGTOOLS_OUTPUTDIR)/tmpstubs; \
-		else \
-			$(ECHO) $(LOG_INFO) Changes in stubs detected!; \
-			$(RM) -r $(@D); \
-			$(MV) $(LANGTOOLS_OUTPUTDIR)/tmpstubs $(@D); \
-		fi
-		$(ECHO) STUBS_ARE_CREATED=yes > $@
+  # We fetch source from the JDK...
+  JDKS = $(JDK_TOPDIR)/src/share/classes
 
-        # Trigger a generation of the genstubs java source code and a restart
-        # of the makefile to make sure that the following build setup use the 
-        # newly created java files.
-        -include $(LANGTOOLS_OUTPUTDIR)/genstubs/_the_stubs.d
+  # Build the list of classes to generate stubs from. java/util/function/Predicate.java isn't
+  # currently needed, but is used as a demo for now.
 
-	ifeq ($(STUBS_ARE_CREATED),yes)
-                # Setup a compiler configuration using the intermediate javac in dist/bootstrap/lib/javac.jar
-                # that generates code for the new jdk that is being built.
-                # The code compiled by this compiler setup, cannot necessarily be run with the bootstrap jvm.
-                $(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE,\
-                  JVM:=$(JAVA),\
-                  JAVAC:="-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \
-			 -cp $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \
-			 com.sun.tools.javac.Main,\
-                  FLAGS:=-XDignore.symbol.file=true -Xlint:all$(COMMA)-deprecation -Werror,\
-                  SERVER_DIR:=$(SJAVAC_SERVER_DIR),\
-                  SERVER_JVM:=$(SJAVAC_SERVER_JAVA)))
+  STUBSOURCES := $(shell $(FIND) $(JDKS) -name "*.java" | $(GREP) \
+      -e "$(JDKS)/java/util/function/Predicate.java")
 
-                $(eval $(call SetupJavaCompilation,BUILD_FULL_JAVAC,\
-			SETUP:=GENERATE_NEWBYTECODE,\
-			SRC:=$(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc \
-			     $(LANGTOOLS_OUTPUTDIR)/genstubs,\
-			EXCLUDES:=java/util java/io java/nio,\
-			COPY:=$(RESOURCE_SUFFIXES),\
-			BIN:=$(LANGTOOLS_OUTPUTDIR)/classes))
+  # Rewrite the file names into class names because the GenStubs tool require this.
+  STUBCLASSES := $(subst /,., $(patsubst $(JDKS)/%.java, %, $(STUBSOURCES)))
 
-                $(eval $(call SetupArchive,ARCHIVE_FULL_JAVAC,$(BUILD_FULL_JAVAC),\
-			SETUP:=GENERATE_NEWBYTECODE,\
-			SRCS:=$(LANGTOOLS_OUTPUTDIR)/classes,\
-			SUFFIXES:=.class $(RESOURCE_SUFFIXES),\
-			JAR:=$(LANGTOOLS_OUTPUTDIR)/dist/lib/classes.jar))
+  # Now setup the build recipe for genstubs.
+  $(LANGTOOLS_OUTPUTDIR)/genstubs/_the_stubs.d: $(STUBSOURCES) $(BUILD_TOOLS) \
+      $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \
+      $(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props.d
+	$(MKDIR) -p $(@D)
+	$(MKDIR) -p $(LANGTOOLS_OUTPUTDIR)/tmpstubs
+	$(ECHO) $(LOG_INFO) Generating stubs from JDK sources.
+	($(TOOL_GENSTUBS_CMD) -s $(LANGTOOLS_OUTPUTDIR)/tmpstubs -sourcepath $(JDKS) $(STUBCLASSES) && $(ECHO) STUBS_ARE_CREATED = yes > $@)
+	if $(DIFF) -x "_the*" -rq $(LANGTOOLS_OUTPUTDIR)/tmpstubs $(LANGTOOLS_OUTPUTDIR)/genstubs > /dev/null 2>&1; then \
+	  $(ECHO) $(LOG_INFO) No changes in the stubs!; \
+	  $(RM) -r $(LANGTOOLS_OUTPUTDIR)/tmpstubs; \
+	else \
+	  $(ECHO) $(LOG_INFO) Changes in stubs detected!; \
+	  $(RM) -r $(@D); \
+	  $(MV) $(LANGTOOLS_OUTPUTDIR)/tmpstubs $(@D); \
+	fi
+	$(ECHO) STUBS_ARE_CREATED = yes > $@
 
-                $(eval $(call SetupZipArchive,ZIP_FULL_JAVAC_SOURCE,\
-			SRC:=$(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc,\
-			ZIP:=$(LANGTOOLS_OUTPUTDIR)/dist/lib/src.zip))
+  # Trigger a generation of the genstubs java source code and a restart
+  # of the makefile to make sure that the following build setup use the
+  # newly created java files.
+  -include $(LANGTOOLS_OUTPUTDIR)/genstubs/_the_stubs.d
 
-                all: 		$(LANGTOOLS_OUTPUTDIR)/dist/lib/classes.jar \
-				$(LANGTOOLS_OUTPUTDIR)/dist/lib/src.zip \
-	                 	$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar
+  ifeq ($(STUBS_ARE_CREATED), yes)
+    # Setup a compiler configuration using the intermediate javac in dist/bootstrap/lib/javac.jar
+    # that generates code for the new jdk that is being built.
+    # The code compiled by this compiler setup, cannot necessarily be run with the bootstrap jvm.
+    $(eval $(call SetupJavaCompiler,GENERATE_NEWBYTECODE, \
+        JVM := $(JAVA), \
+        JAVAC := "-Xbootclasspath/p:$(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar" \
+            -cp $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar \
+            com.sun.tools.javac.Main, \
+        FLAGS := -XDignore.symbol.file=true -Xlint:all$(COMMA)-deprecation -Werror, \
+        SERVER_DIR := $(SJAVAC_SERVER_DIR), \
+        SERVER_JVM := $(SJAVAC_SERVER_JAVA)))
 
-        endif
+    $(eval $(call SetupJavaCompilation,BUILD_FULL_JAVAC, \
+        SETUP := GENERATE_NEWBYTECODE, \
+        SRC := $(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc \
+            $(LANGTOOLS_OUTPUTDIR)/genstubs, \
+        EXCLUDES := java/util java/io java/nio, \
+        COPY := $(RESOURCE_SUFFIXES), \
+        BIN := $(LANGTOOLS_OUTPUTDIR)/classes))
+
+    $(eval $(call SetupArchive,ARCHIVE_FULL_JAVAC, $(BUILD_FULL_JAVAC), \
+        SETUP := GENERATE_NEWBYTECODE, \
+        SRCS := $(LANGTOOLS_OUTPUTDIR)/classes, \
+        SUFFIXES := .class $(RESOURCE_SUFFIXES), \
+        JAR := $(LANGTOOLS_OUTPUTDIR)/dist/lib/classes.jar))
+
+    $(eval $(call SetupZipArchive,ZIP_FULL_JAVAC_SOURCE, \
+        SRC := $(LANGTOOLS_TOPDIR)/src/share/classes $(LANGTOOLS_OUTPUTDIR)/gensrc, \
+        ZIP := $(LANGTOOLS_OUTPUTDIR)/dist/lib/src.zip))
+
+    all: $(LANGTOOLS_OUTPUTDIR)/dist/lib/classes.jar \
+        $(LANGTOOLS_OUTPUTDIR)/dist/lib/src.zip \
+        $(LANGTOOLS_OUTPUTDIR)/dist/bootstrap/lib/javac.jar
+
+  endif
 endif
--- a/makefiles/Makefile	Fri Oct 11 17:51:08 2013 -0700
+++ b/makefiles/Makefile	Mon Oct 28 18:30:14 2013 -0400
@@ -24,19 +24,19 @@
 #
 
 # Locate this Makefile
-ifeq ($(filter /%,$(lastword $(MAKEFILE_LIST))),)
-    makefile_path:=$(CURDIR)/$(lastword $(MAKEFILE_LIST))
+ifeq ($(filter /%, $(lastword $(MAKEFILE_LIST))), )
+  makefile_path := $(CURDIR)/$(lastword $(MAKEFILE_LIST))
 else
-    makefile_path:=$(lastword $(MAKEFILE_LIST))
+  makefile_path := $(lastword $(MAKEFILE_LIST))
 endif
-repo_dir:=$(patsubst %/makefiles/Makefile,%,$(makefile_path))
+repo_dir := $(patsubst %/makefiles/Makefile, %, $(makefile_path))
 
 # What is the name of this subsystem (langtools, corba, etc)?
-subsystem_name:=$(notdir $(repo_dir))
+subsystem_name := $(notdir $(repo_dir))
 
 # Try to locate top-level makefile
-top_level_makefile:=$(repo_dir)/../common/makefiles/Makefile
-ifneq ($(wildcard $(top_level_makefile)),)
+top_level_makefile := $(repo_dir)/../common/makefiles/Makefile
+ifneq ($(wildcard $(top_level_makefile)), )
   $(info Will run $(subsystem_name) target on top-level Makefile)
   $(info WARNING: This is a non-recommended way of building!)
   $(info ===================================================)
--- a/src/share/classes/com/sun/javadoc/Tag.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/javadoc/Tag.java	Mon Oct 28 18:30:14 2013 -0400
@@ -72,7 +72,7 @@
      * <code>kind()&nbsp;==&nbsp;name()</code>;
      * the following table lists those cases where there is more
      * than one tag of a given kind:
-     * <p>
+     *
      * <table border="1" cellpadding="4" cellspacing="0" summary="related tags">
      * <tr><th>{@code kind()  }</th>  <th>{@code name()      }</th></tr>
      * <tr><td>{@code @throws }</td>  <td>{@code @throws     }</td></tr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/javadoc/package-info.java	Mon Oct 28 18:30:14 2013 -0400
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 1998, 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.  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.
+ */
+
+/**
+The Doclet API (also called the Javadoc API) provides a mechanism
+for clients to inspect the source-level structure of programs and
+libraries, including javadoc comments embedded in the source.
+This is useful for documentation, program checking, automatic
+code generation and many other tools.
+<p>
+
+Doclets are invoked by javadoc and use this API to write out
+program information to files.  For example, the standard doclet is called
+by default and writes out documentation to HTML files.
+<p>
+
+The invocation is defined by the abstract {@link com.sun.javadoc.Doclet} class
+-- the entry point is the {@link com.sun.javadoc.Doclet#start(RootDoc) start} method:
+<pre>
+    public static boolean <b>start</b>(RootDoc root)
+</pre>
+The {@link com.sun.javadoc.RootDoc} instance holds the root of the program structure
+information. From this root all other program structure
+information can be extracted.
+<p>
+
+<a name="terminology"></a>
+<h3>Terminology</h3>
+
+<a name="included"></a>
+When calling javadoc, you pass in package names and source file names --
+these are called the <em>specified</em> packages and classes.
+You also pass in Javadoc options; the <em>access control</em> Javadoc options
+(<code>-public</code>, <code>-protected</code>, <code>-package</code>,
+and <code>-private</code>) filter program elements, producing a
+result set, called the <em>included</em> set, or "documented" set.
+(The unfiltered set is also available through
+{@link com.sun.javadoc.PackageDoc#allClasses(boolean) allClasses(false)}.)
+<p>
+
+<a name="class"></a>
+Throughout this API, the term <em>class</em> is normally a
+shorthand for "class or interface", as in: {@link com.sun.javadoc.ClassDoc},
+{@link com.sun.javadoc.PackageDoc#allClasses() allClasses()}, and
+{@link com.sun.javadoc.PackageDoc#findClass(String) findClass(String)}.
+In only a couple of other places, it means "class, as opposed to interface",
+as in:  {@link com.sun.javadoc.Doc#isClass()}.
+In the second sense, this API calls out four kinds of classes:
+{@linkplain com.sun.javadoc.Doc#isOrdinaryClass() ordinary classes},
+{@linkplain com.sun.javadoc.Doc#isEnum() enums},
+{@linkplain com.sun.javadoc.Doc#isError() errors} and
+{@linkplain com.sun.javadoc.Doc#isException() exceptions}.
+Throughout the API, the detailed description of each program element
+describes explicitly which meaning is being used.
+<p>
+
+<a name="qualified"></a>
+A <em>qualified</em> class or interface name is one that has its package
+name prepended to it, such as <code>java.lang.String</code>.  A non-qualified
+name has no package name, such as <code>String</code>.
+<p>
+
+<a name="example"></a>
+<h3>Example</h3>
+
+The following is an example doclet that
+displays information in the <code>@param</code> tags of the processed
+classes:
+<pre>
+import com.sun.javadoc.*;
+
+public class ListParams extends <font color=red title="Doclet API">Doclet</font> {
+
+    public static boolean start(<font color=red title="Doclet API">RootDoc</font> root) {
+        <font color=red title="Doclet API">ClassDoc</font>[] classes = root.<font color=red title="Doclet API">classes</font>();
+        for (int i = 0; i < classes.length; ++i) {
+            <font color=red title="Doclet API">ClassDoc</font> cd = classes[i];
+            printMembers(cd.<font color=red title="Doclet API">constructors</font>());
+            printMembers(cd.<font color=red title="Doclet API">methods</font>());
+        }
+        return true;
+    }
+
+    static void printMembers(<font color=red title="Doclet API">ExecutableMemberDoc</font>[] mems) {
+        for (int i = 0; i < mems.length; ++i) {
+            <font color=red title="Doclet API">ParamTag</font>[] params = mems[i].<font color=red title="Doclet API">paramTags</font>();
+            System.out.println(mems[i].<font color=red title="Doclet API">qualifiedName</font>());
+            for (int j = 0; j < params.length; ++j) {
+                System.out.println("   " + params[j].<font color=red title="Doclet API">parameterName</font>()
+                    + " - " + params[j].<font color=red title="Doclet API">parameterComment</font>());
+            }
+        }
+    }
+}
+</pre>
+Interfaces and methods from the Javadoc API are marked in
+<font color=red title="Doclet API">red</font>.
+{@link com.sun.javadoc.Doclet Doclet} is an abstract class that specifies
+the invocation interface for doclets,
+{@link com.sun.javadoc.Doclet Doclet} holds class or interface information,
+{@link com.sun.javadoc.ExecutableMemberDoc} is a
+superinterface of {@link com.sun.javadoc.MethodDoc} and
+{@link com.sun.javadoc.ConstructorDoc},
+and {@link com.sun.javadoc.ParamTag} holds information
+from "<code>@param</code>" tags.
+<p>
+This doclet when invoked with a command line like:
+<pre>
+    javadoc -doclet ListParams -sourcepath &lt;source-location&gt; java.util
+</pre>
+producing output like:
+<pre>
+    ...
+    java.util.ArrayList.add
+       index - index at which the specified element is to be inserted.
+       element - element to be inserted.
+    java.util.ArrayList.remove
+       index - the index of the element to removed.
+    ...
+
+</pre>
+@see com.sun.javadoc.Doclet
+@see com.sun.javadoc.RootDoc
+*/
+@jdk.Exported
+package com.sun.javadoc;
--- a/src/share/classes/com/sun/javadoc/package.html	Fri Oct 11 17:51:08 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,152 +0,0 @@
-<html>
-<head>
-<TITLE>Doclet API Package</TITLE>
-<!--
- 
-Copyright (c) 1998, 2003, 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.
--->
-</head>
-<body bgcolor="white">
-
-The Doclet API (also called the Javadoc API) provides a mechanism
-for clients to inspect the source-level structure of programs and 
-libraries, including javadoc comments embedded in the source.
-This is useful for documentation, program checking, automatic
-code generation and many other tools.
-<p>
-
-Doclets are invoked by javadoc and use this API to write out 
-program information to files.  For example, the standard doclet is called
-by default and writes out documentation to HTML files.
-<p>
-
-The invocation is defined by the abstract {@link com.sun.javadoc.Doclet} class 
--- the entry point is the {@link com.sun.javadoc.Doclet#start(RootDoc) start} method:
-<pre>
-    public static boolean <b>start</b>(RootDoc root)
-</pre>
-The {@link com.sun.javadoc.RootDoc} instance holds the root of the program structure
-information. From this root all other program structure 
-information can be extracted.  
-<p>
-
-<a name="terminology"></a>
-<h3>Terminology</h3>
-
-<a name="included"></a>
-When calling javadoc, you pass in package names and source file names --
-these are called the <em>specified</em> packages and classes.  
-You also pass in Javadoc options; the <em>access control</em> Javadoc options 
-(<code>-public</code>, <code>-protected</code>, <code>-package</code>, 
-and <code>-private</code>) filter program elements, producing a 
-result set, called the <em>included</em> set, or "documented" set.
-(The unfiltered set is also available through 
-{@link com.sun.javadoc.PackageDoc#allClasses(boolean) allClasses(false)}.)
-<p>
-
-<a name="class"></a>
-Throughout this API, the term <em>class</em> is normally a
-shorthand for "class or interface", as in: {@link com.sun.javadoc.ClassDoc}, 
-{@link com.sun.javadoc.PackageDoc#allClasses() allClasses()}, and
-{@link com.sun.javadoc.PackageDoc#findClass(String) findClass(String)}.
-In only a couple of other places, it means "class, as opposed to interface", 
-as in:  {@link com.sun.javadoc.Doc#isClass()}.
-In the second sense, this API calls out four kinds of classes:
-{@linkplain com.sun.javadoc.Doc#isOrdinaryClass() ordinary classes}, 
-{@linkplain com.sun.javadoc.Doc#isEnum() enums},
-{@linkplain com.sun.javadoc.Doc#isError() errors} and 
-{@linkplain com.sun.javadoc.Doc#isException() exceptions}.
-Throughout the API, the detailed description of each program element 
-describes explicitly which meaning is being used.
-<p>
-
-<a name="qualified"></a>
-A <em>qualified</em> class or interface name is one that has its package
-name prepended to it, such as <code>java.lang.String</code>.  A non-qualified
-name has no package name, such as <code>String</code>.
-<p>
-
-<a name="example"></a>
-<h3>Example</h3>
- 
-The following is an example doclet that 
-displays information in the <code>@param</code> tags of the processed
-classes:
-<pre>
-import com.sun.javadoc.*;
-
-public class ListParams extends <font color=red title="Doclet API">Doclet</font> {
-
-    public static boolean start(<font color=red title="Doclet API">RootDoc</font> root) {
-        <font color=red title="Doclet API">ClassDoc</font>[] classes = root.<font color=red title="Doclet API">classes</font>();
-        for (int i = 0; i < classes.length; ++i) {
-            <font color=red title="Doclet API">ClassDoc</font> cd = classes[i];
-            printMembers(cd.<font color=red title="Doclet API">constructors</font>());
-            printMembers(cd.<font color=red title="Doclet API">methods</font>());
-        }
-        return true;
-    }
-
-    static void printMembers(<font color=red title="Doclet API">ExecutableMemberDoc</font>[] mems) {
-        for (int i = 0; i < mems.length; ++i) {
-            <font color=red title="Doclet API">ParamTag</font>[] params = mems[i].<font color=red title="Doclet API">paramTags</font>();
-            System.out.println(mems[i].<font color=red title="Doclet API">qualifiedName</font>());
-            for (int j = 0; j < params.length; ++j) {
-                System.out.println("   " + params[j].<font color=red title="Doclet API">parameterName</font>()
-                    + " - " + params[j].<font color=red title="Doclet API">parameterComment</font>());
-            }
-        }
-    }        
-}
-</pre>
-Interfaces and methods from the Javadoc API are marked in 
-<font color=red title="Doclet API">red</font>. 
-{@link com.sun.javadoc.Doclet Doclet} is an abstract class that specifies 
-the invocation interface for doclets, 
-{@link com.sun.javadoc.Doclet Doclet} holds class or interface information, 
-{@link com.sun.javadoc.ExecutableMemberDoc} is a
-superinterface of {@link com.sun.javadoc.MethodDoc} and 
-{@link com.sun.javadoc.ConstructorDoc}, 
-and {@link com.sun.javadoc.ParamTag} holds information
-from "<code>@param</code>" tags.
-<p>
-This doclet when invoked with a command line like:
-<pre>
-    javadoc -doclet ListParams -sourcepath &lt;source-location&gt; java.util
-</pre>
-producing output like:
-<pre>
-    ...
-    java.util.ArrayList.add
-       index - index at which the specified element is to be inserted.
-       element - element to be inserted.
-    java.util.ArrayList.remove
-       index - the index of the element to removed.
-    ...
-
-</pre>
-@see com.sun.javadoc.Doclet
-@see com.sun.javadoc.RootDoc
-</BODY>
-</HTML>
--- a/src/share/classes/com/sun/source/doctree/AttributeTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/AttributeTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -33,9 +33,9 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface AttributeTree extends DocTree {
-    @jdk.Supported
+    @jdk.Exported
     enum ValueKind { EMPTY, UNQUOTED, SINGLE, DOUBLE };
 
     Name getName();
--- a/src/share/classes/com/sun/source/doctree/AuthorTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/AuthorTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface AuthorTree extends BlockTagTree {
     List<? extends DocTree> getName();
 }
--- a/src/share/classes/com/sun/source/doctree/BlockTagTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/BlockTagTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -31,7 +31,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface BlockTagTree extends DocTree {
     String getTagName();
 }
--- a/src/share/classes/com/sun/source/doctree/CommentTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/CommentTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -33,7 +33,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface CommentTree extends DocTree {
     String getBody();
 }
--- a/src/share/classes/com/sun/source/doctree/DeprecatedTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/DeprecatedTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface DeprecatedTree extends BlockTagTree {
     List<? extends DocTree> getBody();
 }
--- a/src/share/classes/com/sun/source/doctree/DocCommentTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/DocCommentTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface DocCommentTree extends DocTree {
     List<? extends DocTree> getFirstSentence();
     List<? extends DocTree> getBody();
--- a/src/share/classes/com/sun/source/doctree/DocRootTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/DocRootTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -33,5 +33,5 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface DocRootTree extends InlineTagTree { }
--- a/src/share/classes/com/sun/source/doctree/DocTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/DocTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -30,9 +30,9 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface DocTree {
-    @jdk.Supported
+    @jdk.Exported
     enum Kind {
         /**
          * Used for instances of {@link AttributeTree}
--- a/src/share/classes/com/sun/source/doctree/DocTreeVisitor.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/DocTreeVisitor.java	Mon Oct 28 18:30:14 2013 -0400
@@ -54,7 +54,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface DocTreeVisitor<R,P> {
     R visitAttribute(AttributeTree node, P p);
     R visitAuthor(AuthorTree node, P p);
--- a/src/share/classes/com/sun/source/doctree/EndElementTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/EndElementTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface EndElementTree extends DocTree {
     Name getName();
 }
--- a/src/share/classes/com/sun/source/doctree/EntityTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/EntityTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -36,7 +36,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface EntityTree extends DocTree {
     Name getName();
 }
--- a/src/share/classes/com/sun/source/doctree/ErroneousTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/ErroneousTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -32,7 +32,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface ErroneousTree extends TextTree {
     /**
      * Gets a diagnostic object giving details about
--- a/src/share/classes/com/sun/source/doctree/IdentifierTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/IdentifierTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface IdentifierTree extends DocTree {
     Name getName();
 }
--- a/src/share/classes/com/sun/source/doctree/InheritDocTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/InheritDocTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -34,5 +34,5 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface InheritDocTree extends InlineTagTree { }
--- a/src/share/classes/com/sun/source/doctree/InlineTagTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/InlineTagTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -31,7 +31,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface InlineTagTree extends DocTree {
     String getTagName();
 }
--- a/src/share/classes/com/sun/source/doctree/LinkTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/LinkTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -36,7 +36,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface LinkTree extends InlineTagTree {
     ReferenceTree getReference();
     List<? extends DocTree> getLabel();
--- a/src/share/classes/com/sun/source/doctree/LiteralTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/LiteralTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -34,7 +34,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface LiteralTree extends InlineTagTree {
     TextTree getBody();
 }
--- a/src/share/classes/com/sun/source/doctree/ParamTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/ParamTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface ParamTree extends BlockTagTree {
     boolean isTypeParameter();
     IdentifierTree getName();
--- a/src/share/classes/com/sun/source/doctree/ReferenceTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/ReferenceTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -33,7 +33,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface ReferenceTree extends DocTree {
     String getSignature();
 }
--- a/src/share/classes/com/sun/source/doctree/ReturnTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/ReturnTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface ReturnTree extends BlockTagTree {
     List<? extends DocTree> getDescription();
 }
--- a/src/share/classes/com/sun/source/doctree/SeeTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/SeeTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -38,7 +38,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface SeeTree extends BlockTagTree {
     List<? extends DocTree> getReference();
 }
--- a/src/share/classes/com/sun/source/doctree/SerialDataTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/SerialDataTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface SerialDataTree extends BlockTagTree {
     List<? extends DocTree> getDescription();
 }
--- a/src/share/classes/com/sun/source/doctree/SerialFieldTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/SerialFieldTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface SerialFieldTree extends BlockTagTree {
     IdentifierTree getName();
     ReferenceTree getType();
--- a/src/share/classes/com/sun/source/doctree/SerialTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/SerialTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface SerialTree extends BlockTagTree {
     List<? extends DocTree> getDescription();
 }
--- a/src/share/classes/com/sun/source/doctree/SinceTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/SinceTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface SinceTree extends BlockTagTree {
     List<? extends DocTree> getBody();
 }
--- a/src/share/classes/com/sun/source/doctree/StartElementTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/StartElementTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -36,7 +36,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface StartElementTree extends DocTree {
     Name getName();
     List<? extends DocTree> getAttributes();
--- a/src/share/classes/com/sun/source/doctree/TextTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/TextTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -30,7 +30,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface TextTree extends DocTree {
     String getBody();
 }
--- a/src/share/classes/com/sun/source/doctree/ThrowsTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/ThrowsTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -38,7 +38,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface ThrowsTree extends BlockTagTree {
     ReferenceTree getExceptionName();
     List<? extends DocTree> getDescription();
--- a/src/share/classes/com/sun/source/doctree/UnknownBlockTagTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/UnknownBlockTagTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,7 @@
  * @since 1.8
  *
  */
-@jdk.Supported
+@jdk.Exported
 public interface UnknownBlockTagTree extends BlockTagTree {
     List<? extends DocTree> getContent();
 }
--- a/src/share/classes/com/sun/source/doctree/UnknownInlineTagTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/UnknownInlineTagTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,7 @@
  * @since 1.8
  *
  */
-@jdk.Supported
+@jdk.Exported
 public interface UnknownInlineTagTree extends InlineTagTree {
     List<? extends DocTree> getContent();
 }
--- a/src/share/classes/com/sun/source/doctree/ValueTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/ValueTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -33,7 +33,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface ValueTree extends InlineTagTree {
     ReferenceTree getReference();
 }
--- a/src/share/classes/com/sun/source/doctree/VersionTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/VersionTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -36,7 +36,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface VersionTree extends BlockTagTree {
     List<? extends DocTree> getBody();
 }
--- a/src/share/classes/com/sun/source/doctree/package-info.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/doctree/package-info.java	Mon Oct 28 18:30:14 2013 -0400
@@ -31,5 +31,5 @@
  * @since 1.8
  * @see <a href="http://download.oracle.com/javase/6/docs/technotes/tools/solaris/javadoc.html#javadoctags">http://download.oracle.com/javase/6/docs/technotes/tools/solaris/javadoc.html#javadoctags</a>
  */
-@jdk.Supported
+@jdk.Exported
 package com.sun.source.doctree;
--- a/src/share/classes/com/sun/source/tree/AnnotatedTypeTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/AnnotatedTypeTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -41,7 +41,7 @@
  * @author Mahmood Ali
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface AnnotatedTypeTree extends ExpressionTree {
     List<? extends AnnotationTree> getAnnotations();
     ExpressionTree getUnderlyingType();
--- a/src/share/classes/com/sun/source/tree/AnnotationTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/AnnotationTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -42,7 +42,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface AnnotationTree extends ExpressionTree {
     Tree getAnnotationType();
     List<? extends ExpressionTree> getArguments();
--- a/src/share/classes/com/sun/source/tree/ArrayAccessTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/ArrayAccessTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -39,7 +39,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface ArrayAccessTree extends ExpressionTree {
     ExpressionTree getExpression();
     ExpressionTree getIndex();
--- a/src/share/classes/com/sun/source/tree/ArrayTypeTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/ArrayTypeTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -39,7 +39,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface ArrayTypeTree extends Tree {
     Tree getType();
 }
--- a/src/share/classes/com/sun/source/tree/AssertTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/AssertTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -41,7 +41,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface AssertTree extends StatementTree {
     ExpressionTree getCondition();
     ExpressionTree getDetail();
--- a/src/share/classes/com/sun/source/tree/AssignmentTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/AssignmentTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -39,7 +39,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface AssignmentTree extends ExpressionTree {
     ExpressionTree getVariable();
     ExpressionTree getExpression();
--- a/src/share/classes/com/sun/source/tree/BinaryTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/BinaryTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -40,7 +40,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface BinaryTree extends ExpressionTree {
     ExpressionTree getLeftOperand();
     ExpressionTree getRightOperand();
--- a/src/share/classes/com/sun/source/tree/BlockTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/BlockTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -45,7 +45,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface BlockTree extends StatementTree {
     boolean isStatic();
     List<? extends StatementTree> getStatements();
--- a/src/share/classes/com/sun/source/tree/BreakTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/BreakTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -43,7 +43,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface BreakTree extends StatementTree {
     Name getLabel();
 }
--- a/src/share/classes/com/sun/source/tree/CaseTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/CaseTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -45,7 +45,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface CaseTree extends Tree {
     /**
      * @return null if and only if this Case is {@code default:}
--- a/src/share/classes/com/sun/source/tree/CatchTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/CatchTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -40,7 +40,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface CatchTree extends Tree {
     VariableTree getParameter();
     BlockTree getBlock();
--- a/src/share/classes/com/sun/source/tree/ClassTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/ClassTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -48,7 +48,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface ClassTree extends StatementTree {
     ModifiersTree getModifiers();
     Name getSimpleName();
--- a/src/share/classes/com/sun/source/tree/CompilationUnitTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/CompilationUnitTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -37,7 +37,7 @@
  * @author Peter von der Ah&eacute;
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface CompilationUnitTree extends Tree {
     List<? extends AnnotationTree> getPackageAnnotations();
     ExpressionTree getPackageName();
--- a/src/share/classes/com/sun/source/tree/CompoundAssignmentTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/CompoundAssignmentTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -40,7 +40,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface CompoundAssignmentTree extends ExpressionTree {
     ExpressionTree getVariable();
     ExpressionTree getExpression();
--- a/src/share/classes/com/sun/source/tree/ConditionalExpressionTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/ConditionalExpressionTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -39,7 +39,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface ConditionalExpressionTree extends ExpressionTree {
     ExpressionTree getCondition();
     ExpressionTree getTrueExpression();
--- a/src/share/classes/com/sun/source/tree/ContinueTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/ContinueTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -42,7 +42,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface ContinueTree extends StatementTree {
     Name getLabel();
 }
--- a/src/share/classes/com/sun/source/tree/DoWhileLoopTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/DoWhileLoopTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -41,7 +41,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface DoWhileLoopTree extends StatementTree {
     ExpressionTree getCondition();
     StatementTree getStatement();
--- a/src/share/classes/com/sun/source/tree/EmptyStatementTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/EmptyStatementTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -39,5 +39,5 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface EmptyStatementTree extends StatementTree {}
--- a/src/share/classes/com/sun/source/tree/EnhancedForLoopTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/EnhancedForLoopTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -40,7 +40,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface EnhancedForLoopTree extends StatementTree {
     VariableTree getVariable();
     ExpressionTree getExpression();
--- a/src/share/classes/com/sun/source/tree/ErroneousTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/ErroneousTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -34,7 +34,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface ErroneousTree extends ExpressionTree {
     List<? extends Tree> getErrorTrees();
 }
--- a/src/share/classes/com/sun/source/tree/ExpressionStatementTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/ExpressionStatementTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -39,7 +39,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface ExpressionStatementTree extends StatementTree {
     ExpressionTree getExpression();
 }
--- a/src/share/classes/com/sun/source/tree/ExpressionTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/ExpressionTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,5 +35,5 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface ExpressionTree extends Tree {}
--- a/src/share/classes/com/sun/source/tree/ForLoopTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/ForLoopTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -42,7 +42,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface ForLoopTree extends StatementTree {
     List<? extends StatementTree> getInitializer();
     ExpressionTree getCondition();
--- a/src/share/classes/com/sun/source/tree/IdentifierTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/IdentifierTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -41,7 +41,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface IdentifierTree extends ExpressionTree {
     Name getName();
 }
--- a/src/share/classes/com/sun/source/tree/IfTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/IfTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -45,7 +45,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface IfTree extends StatementTree {
     ExpressionTree getCondition();
     StatementTree getThenStatement();
--- a/src/share/classes/com/sun/source/tree/ImportTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/ImportTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -41,7 +41,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface ImportTree extends Tree {
     boolean isStatic();
     /**
--- a/src/share/classes/com/sun/source/tree/InstanceOfTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/InstanceOfTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -39,7 +39,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface InstanceOfTree extends ExpressionTree {
     ExpressionTree getExpression();
     Tree getType();
--- a/src/share/classes/com/sun/source/tree/IntersectionTypeTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/IntersectionTypeTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -34,7 +34,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface IntersectionTypeTree extends Tree {
     List<? extends Tree> getBounds();
 }
--- a/src/share/classes/com/sun/source/tree/LabeledStatementTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/LabeledStatementTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -41,7 +41,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface LabeledStatementTree extends StatementTree {
     Name getLabel();
     StatementTree getStatement();
--- a/src/share/classes/com/sun/source/tree/LambdaExpressionTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/LambdaExpressionTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -37,14 +37,14 @@
  *   (x,y)-> { return x + y; }
  * }</pre>
  */
-@jdk.Supported
+@jdk.Exported
 public interface LambdaExpressionTree extends ExpressionTree {
 
     /**
      * Lambda expressions come in two forms: (i) expression lambdas, whose body
      * is an expression, and (ii) statement lambdas, whose body is a block
      */
-    @jdk.Supported
+    @jdk.Exported
     public enum BodyKind {
         /** enum constant for expression lambdas */
         EXPRESSION,
--- a/src/share/classes/com/sun/source/tree/LineMap.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/LineMap.java	Mon Oct 28 18:30:14 2013 -0400
@@ -31,7 +31,7 @@
  *
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface LineMap {
     /**
      * Find the start position of a line.
--- a/src/share/classes/com/sun/source/tree/LiteralTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/LiteralTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -40,7 +40,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface LiteralTree extends ExpressionTree {
     Object getValue();
 }
--- a/src/share/classes/com/sun/source/tree/MemberReferenceTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/MemberReferenceTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -39,14 +39,14 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface MemberReferenceTree extends ExpressionTree {
 
     /**
      * There are two kinds of member references: (i) method references and
      * (ii) constructor references
      */
-    @jdk.Supported
+    @jdk.Exported
     public enum ReferenceMode {
         /** enum constant for method references */
         INVOKE,
--- a/src/share/classes/com/sun/source/tree/MemberSelectTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/MemberSelectTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -41,7 +41,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface MemberSelectTree extends ExpressionTree {
     ExpressionTree getExpression();
     Name getIdentifier();
--- a/src/share/classes/com/sun/source/tree/MethodInvocationTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/MethodInvocationTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -43,7 +43,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface MethodInvocationTree extends ExpressionTree {
     List<? extends Tree> getTypeArguments();
     ExpressionTree getMethodSelect();
--- a/src/share/classes/com/sun/source/tree/MethodTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/MethodTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -46,7 +46,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface MethodTree extends Tree {
     ModifiersTree getModifiers();
     Name getName();
--- a/src/share/classes/com/sun/source/tree/ModifiersTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/ModifiersTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -45,7 +45,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface ModifiersTree extends Tree {
     Set<Modifier> getFlags();
     List<? extends AnnotationTree> getAnnotations();
--- a/src/share/classes/com/sun/source/tree/NewArrayTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/NewArrayTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -25,7 +25,7 @@
 
 package com.sun.source.tree;
 
-import com.sun.tools.javac.util.List;
+import java.util.List;
 
 /**
  * A tree node for an expression to create a new instance of an array.
@@ -43,7 +43,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface NewArrayTree extends ExpressionTree {
     Tree getType();
     List<? extends ExpressionTree> getDimensions();
--- a/src/share/classes/com/sun/source/tree/NewClassTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/NewClassTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -48,7 +48,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface NewClassTree extends ExpressionTree {
     ExpressionTree getEnclosingExpression();
     List<? extends Tree> getTypeArguments();
--- a/src/share/classes/com/sun/source/tree/ParameterizedTypeTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/ParameterizedTypeTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -41,7 +41,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface ParameterizedTypeTree extends Tree {
     Tree getType();
     List<? extends Tree> getTypeArguments();
--- a/src/share/classes/com/sun/source/tree/ParenthesizedTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/ParenthesizedTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -40,7 +40,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface ParenthesizedTree extends ExpressionTree {
     ExpressionTree getExpression();
 }
--- a/src/share/classes/com/sun/source/tree/PrimitiveTypeTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/PrimitiveTypeTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -41,7 +41,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface PrimitiveTypeTree extends Tree {
     TypeKind getPrimitiveTypeKind();
 }
--- a/src/share/classes/com/sun/source/tree/ReturnTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/ReturnTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -40,7 +40,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface ReturnTree extends StatementTree {
     ExpressionTree getExpression();
 }
--- a/src/share/classes/com/sun/source/tree/Scope.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/Scope.java	Mon Oct 28 18:30:14 2013 -0400
@@ -48,7 +48,7 @@
  *
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface Scope {
     /**
      * Returns the enclosing scope.
--- a/src/share/classes/com/sun/source/tree/StatementTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/StatementTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,5 +35,5 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface StatementTree extends Tree {}
--- a/src/share/classes/com/sun/source/tree/SwitchTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/SwitchTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -43,7 +43,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface SwitchTree extends StatementTree {
     ExpressionTree getExpression();
     List<? extends CaseTree> getCases();
--- a/src/share/classes/com/sun/source/tree/SynchronizedTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/SynchronizedTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -40,7 +40,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface SynchronizedTree extends StatementTree {
     ExpressionTree getExpression();
     BlockTree getBlock();
--- a/src/share/classes/com/sun/source/tree/ThrowTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/ThrowTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -39,7 +39,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface ThrowTree extends StatementTree {
     ExpressionTree getExpression();
 }
--- a/src/share/classes/com/sun/source/tree/Tree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/Tree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -39,13 +39,13 @@
  *
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface Tree {
 
     /**
      * Enumerates all kinds of trees.
      */
-    @jdk.Supported
+    @jdk.Exported
     public enum Kind {
 
         ANNOTATED_TYPE(AnnotatedTypeTree.class),
--- a/src/share/classes/com/sun/source/tree/TreeVisitor.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/TreeVisitor.java	Mon Oct 28 18:30:14 2013 -0400
@@ -56,7 +56,7 @@
  *
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface TreeVisitor<R,P> {
     R visitAnnotatedType(AnnotatedTypeTree node, P p);
     R visitAnnotation(AnnotationTree node, P p);
--- a/src/share/classes/com/sun/source/tree/TryTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/TryTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -45,7 +45,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface TryTree extends StatementTree {
     BlockTree getBlock();
     List<? extends CatchTree> getCatches();
--- a/src/share/classes/com/sun/source/tree/TypeCastTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/TypeCastTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -39,7 +39,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface TypeCastTree extends ExpressionTree {
     Tree getType();
     ExpressionTree getExpression();
--- a/src/share/classes/com/sun/source/tree/TypeParameterTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/TypeParameterTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -46,7 +46,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface TypeParameterTree extends Tree {
     Name getName();
     List<? extends Tree> getBounds();
--- a/src/share/classes/com/sun/source/tree/UnaryTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/UnaryTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -42,7 +42,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface UnaryTree extends ExpressionTree {
     ExpressionTree getExpression();
 }
--- a/src/share/classes/com/sun/source/tree/UnionTypeTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/UnionTypeTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -34,7 +34,7 @@
  *
  * @since 1.7
  */
-@jdk.Supported
+@jdk.Exported
 public interface UnionTypeTree extends Tree {
     List<? extends Tree> getTypeAlternatives();
 }
--- a/src/share/classes/com/sun/source/tree/VariableTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/VariableTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -42,7 +42,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface VariableTree extends StatementTree {
     ModifiersTree getModifiers();
     Name getName();
--- a/src/share/classes/com/sun/source/tree/WhileLoopTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/WhileLoopTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -41,7 +41,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface WhileLoopTree extends StatementTree {
     ExpressionTree getCondition();
     StatementTree getStatement();
--- a/src/share/classes/com/sun/source/tree/WildcardTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/WildcardTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -44,7 +44,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface WildcardTree extends Tree {
     Tree getBound();
 }
--- a/src/share/classes/com/sun/source/tree/package-info.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/tree/package-info.java	Mon Oct 28 18:30:14 2013 -0400
@@ -31,5 +31,5 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 package com.sun.source.tree;
--- a/src/share/classes/com/sun/source/util/DocSourcePositions.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/DocSourcePositions.java	Mon Oct 28 18:30:14 2013 -0400
@@ -36,7 +36,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface DocSourcePositions extends SourcePositions {
 
     /**
--- a/src/share/classes/com/sun/source/util/DocTreePath.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/DocTreePath.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public class DocTreePath implements Iterable<DocTree> {
     /**
      * Gets a documentation tree path for a tree node within a compilation unit.
--- a/src/share/classes/com/sun/source/util/DocTreePathScanner.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/DocTreePathScanner.java	Mon Oct 28 18:30:14 2013 -0400
@@ -36,7 +36,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public class DocTreePathScanner<R, P> extends DocTreeScanner<R, P> {
     /**
      * Scan a tree from a position identified by a TreePath.
--- a/src/share/classes/com/sun/source/util/DocTreeScanner.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/DocTreeScanner.java	Mon Oct 28 18:30:14 2013 -0400
@@ -67,7 +67,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public class DocTreeScanner<R,P> implements DocTreeVisitor<R,P> {
 
     /**
--- a/src/share/classes/com/sun/source/util/DocTrees.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/DocTrees.java	Mon Oct 28 18:30:14 2013 -0400
@@ -37,7 +37,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public abstract class DocTrees extends Trees {
     /**
      * Gets a DocTrees object for a given CompilationTask.
--- a/src/share/classes/com/sun/source/util/JavacTask.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/JavacTask.java	Mon Oct 28 18:30:14 2013 -0400
@@ -48,7 +48,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public abstract class JavacTask implements CompilationTask {
 
     /**
--- a/src/share/classes/com/sun/source/util/Plugin.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/Plugin.java	Mon Oct 28 18:30:14 2013 -0400
@@ -48,7 +48,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public interface Plugin {
     /**
      * Get the user-friendly name of this plug-in.
--- a/src/share/classes/com/sun/source/util/SimpleDocTreeVisitor.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/SimpleDocTreeVisitor.java	Mon Oct 28 18:30:14 2013 -0400
@@ -32,7 +32,7 @@
  *
  * @since 1.8
  */
-@jdk.Supported
+@jdk.Exported
 public class SimpleDocTreeVisitor<R,P> implements DocTreeVisitor<R, P> {
     protected final R DEFAULT_VALUE;
 
--- a/src/share/classes/com/sun/source/util/SimpleTreeVisitor.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/SimpleTreeVisitor.java	Mon Oct 28 18:30:14 2013 -0400
@@ -33,7 +33,7 @@
  * @author Peter von der Ah&eacute;
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public class SimpleTreeVisitor <R,P> implements TreeVisitor<R,P> {
     protected final R DEFAULT_VALUE;
 
--- a/src/share/classes/com/sun/source/util/SourcePositions.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/SourcePositions.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,7 @@
  * @author Peter von der Ah&eacute;
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface SourcePositions {
 
     /**
--- a/src/share/classes/com/sun/source/util/TaskEvent.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/TaskEvent.java	Mon Oct 28 18:30:14 2013 -0400
@@ -36,14 +36,14 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public final class TaskEvent
 {
     /**
      * Kind of task event.
      * @since 1.6
      */
-    @jdk.Supported
+    @jdk.Exported
     public enum Kind {
         /**
          * For events related to the parsing of a file.
--- a/src/share/classes/com/sun/source/util/TaskListener.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/TaskListener.java	Mon Oct 28 18:30:14 2013 -0400
@@ -32,7 +32,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public interface TaskListener
 {
     public void started(TaskEvent e);
--- a/src/share/classes/com/sun/source/util/TreePath.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/TreePath.java	Mon Oct 28 18:30:14 2013 -0400
@@ -36,7 +36,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public class TreePath implements Iterable<Tree> {
     /**
      * Gets a tree path for a tree node within a compilation unit.
--- a/src/share/classes/com/sun/source/util/TreePathScanner.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/TreePathScanner.java	Mon Oct 28 18:30:14 2013 -0400
@@ -38,7 +38,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public class TreePathScanner<R, P> extends TreeScanner<R, P> {
 
     /**
--- a/src/share/classes/com/sun/source/util/TreeScanner.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/TreeScanner.java	Mon Oct 28 18:30:14 2013 -0400
@@ -68,7 +68,7 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 public class TreeScanner<R,P> implements TreeVisitor<R,P> {
 
     /** Scan a single node.
--- a/src/share/classes/com/sun/source/util/Trees.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/Trees.java	Mon Oct 28 18:30:14 2013 -0400
@@ -51,7 +51,7 @@
  *
  * @author Peter von der Ah&eacute;
  */
-@jdk.Supported
+@jdk.Exported
 public abstract class Trees {
     /**
      * Gets a Trees object for a given CompilationTask.
--- a/src/share/classes/com/sun/source/util/package-info.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/source/util/package-info.java	Mon Oct 28 18:30:14 2013 -0400
@@ -30,5 +30,5 @@
  * @author Jonathan Gibbons
  * @since 1.6
  */
-@jdk.Supported
+@jdk.Exported
 package com.sun.source.util;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/classfile/package-info.java	Mon Oct 28 18:30:14 2013 -0400
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2007, 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.  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.
+ */
+
+/**
+    A minimalist library to read and write class files into objects closely
+    based on the corresponding definitions in
+    <cite>The Java&trade; Virtual Machine Specification</cite> (JVMS).
+
+    <p><b>This is NOT part of any supported API.
+    If you write code that depends on this, you do so at your own risk.
+    This code and its internal interfaces are subject to change or
+    deletion without notice.</b>
+*/
+@jdk.Exported(false)
+package com.sun.tools.classfile;
--- a/src/share/classes/com/sun/tools/classfile/package.html	Fri Oct 11 17:51:08 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-  <head>
-    <title></title>
-    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-  </head>
-  <body>
-    A minimalist library to read and write class files into objects closely 
-    based on the corresponding definitions in 
-    <cite>The Java&trade; Virtual Machine Specification</cite> (JVMS).
-  </body>
-</html>
--- a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractExecutableMemberWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -101,10 +101,10 @@
             Content tdSummary) {
         ExecutableMemberDoc emd = (ExecutableMemberDoc)member;
         String name = emd.name();
-        Content strong = HtmlTree.SPAN(HtmlStyle.strong,
+        Content memberLink = HtmlTree.SPAN(HtmlStyle.memberNameLink,
                 writer.getDocLink(context, cd, (MemberDoc) emd,
                 name, false));
-        Content code = HtmlTree.CODE(strong);
+        Content code = HtmlTree.CODE(memberLink);
         addParameters(emd, false, code, name.length() - 1);
         tdSummary.addContent(code);
     }
@@ -305,6 +305,6 @@
             buf.append(t.dimension());
         }
         buf.append(")");
-        return foundTypeVariable ? buf.toString() : null;
+        return foundTypeVariable ? writer.getName(buf.toString()) : null;
     }
 }
--- a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractIndexWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -89,10 +89,11 @@
      * @param memberlist List of members for the unicode character
      * @param contentTree the content tree to which the information will be added
      */
-    protected void addContents(Character unicode, List<? extends Doc> memberlist,
+    protected void addContents(Character uc, List<? extends Doc> memberlist,
             Content contentTree) {
-        contentTree.addContent(getMarkerAnchor("_" + unicode + "_"));
-        Content headContent = new StringContent(unicode.toString());
+        String unicode = uc.toString();
+        contentTree.addContent(getMarkerAnchorForIndex(unicode));
+        Content headContent = new StringContent(unicode);
         Content heading = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING, false,
                 HtmlStyle.title, headContent);
         contentTree.addContent(heading);
@@ -175,7 +176,7 @@
         String name = (member instanceof ExecutableMemberDoc)?
             member.name() + ((ExecutableMemberDoc)member).flatSignature() :
             member.name();
-        Content span = HtmlTree.SPAN(HtmlStyle.strong,
+        Content span = HtmlTree.SPAN(HtmlStyle.memberNameLink,
                 getDocLink(LinkInfoImpl.Kind.INDEX, member, name));
         Content dt = HtmlTree.DT(span);
         dt.addContent(" - ");
@@ -197,7 +198,7 @@
      */
     protected void addComment(ProgramElementDoc element, Content contentTree) {
         Tag[] tags;
-        Content span = HtmlTree.SPAN(HtmlStyle.strong, deprecatedPhrase);
+        Content span = HtmlTree.SPAN(HtmlStyle.deprecatedLabel, deprecatedPhrase);
         HtmlTree div = new HtmlTree(HtmlTag.DIV);
         div.addStyle(HtmlStyle.block);
         if (Util.isDeprecated(element)) {
@@ -253,4 +254,24 @@
         addPreQualifiedClassLink(LinkInfoImpl.Kind.INDEX, containing,
                 false, contentTree);
     }
+
+    /**
+     * Get the marker anchor which will be added to the index documentation tree.
+     *
+     * @param anchorNameForIndex the anchor name attribute for index page
+     * @return a content tree for the marker anchor
+     */
+    public Content getMarkerAnchorForIndex(String anchorNameForIndex) {
+        return getMarkerAnchor(getNameForIndex(anchorNameForIndex), null);
+    }
+
+    /**
+     * Generate a valid HTML name for member index page.
+     *
+     * @param unicode the string that needs to be converted to valid HTML name.
+     * @return a valid HTML name string.
+     */
+    public String getNameForIndex(String unicode) {
+        return "I:" + getName(unicode);
+    }
 }
--- a/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/AbstractMemberWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -413,7 +413,7 @@
     protected void addDeprecatedAPI(List<Doc> deprmembers, String headingKey,
             String tableSummary, String[] tableHeader, Content contentTree) {
         if (deprmembers.size() > 0) {
-            Content table = HtmlTree.TABLE(0, 3, 0, tableSummary,
+            Content table = HtmlTree.TABLE(HtmlStyle.deprecatedSummary, 0, 3, 0, tableSummary,
                 writer.getTableCaption(configuration.getResource(headingKey)));
             table.addContent(writer.getSummaryTableHeader(tableHeader, "col"));
             Content tbody = new HtmlTree(HtmlTag.TBODY);
@@ -453,7 +453,7 @@
         List<? extends ProgramElementDoc> members = mems;
         boolean printedUseTableHeader = false;
         if (members.size() > 0) {
-            Content table = HtmlTree.TABLE(0, 3, 0, tableSummary,
+            Content table = HtmlTree.TABLE(HtmlStyle.useSummary, 0, 3, 0, tableSummary,
                     writer.getTableCaption(heading));
             Content tbody = new HtmlTree(HtmlTag.TBODY);
             Iterator<? extends ProgramElementDoc> it = members.iterator();
@@ -480,7 +480,7 @@
                 if (cd != null && !(pgmdoc instanceof ConstructorDoc)
                         && !(pgmdoc instanceof ClassDoc)) {
                     HtmlTree name = new HtmlTree(HtmlTag.SPAN);
-                    name.addStyle(HtmlStyle.strong);
+                    name.addStyle(HtmlStyle.typeNameLabel);
                     name.addContent(cd.name() + ".");
                     tdLast.addContent(name);
                 }
--- a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeFieldWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeFieldWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -88,7 +88,7 @@
             Content memberDetailsTree) {
         if (!writer.printedAnnotationFieldHeading) {
             memberDetailsTree.addContent(writer.getMarkerAnchor(
-                    "annotation_type_field_detail"));
+                    SectionName.ANNOTATION_TYPE_FIELD_DETAIL));
             Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
                     writer.fieldDetailsLabel);
             memberDetailsTree.addContent(heading);
@@ -217,7 +217,7 @@
      */
     public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
         memberTree.addContent(writer.getMarkerAnchor(
-                "annotation_type_field_summary"));
+                SectionName.ANNOTATION_TYPE_FIELD_SUMMARY));
     }
 
     /**
@@ -237,9 +237,9 @@
      */
     protected void addSummaryLink(LinkInfoImpl.Kind context, ClassDoc cd, ProgramElementDoc member,
             Content tdSummary) {
-        Content strong = HtmlTree.SPAN(HtmlStyle.strong,
+        Content memberLink = HtmlTree.SPAN(HtmlStyle.memberNameLink,
                 writer.getDocLink(context, (MemberDoc) member, member.name(), false));
-        Content code = HtmlTree.CODE(strong);
+        Content code = HtmlTree.CODE(memberLink);
         tdSummary.addContent(code);
     }
 
@@ -272,7 +272,8 @@
      */
     protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
         if (link) {
-            return writer.getHyperLink("annotation_type_field_summary",
+            return writer.getHyperLink(
+                    SectionName.ANNOTATION_TYPE_FIELD_SUMMARY,
                     writer.getResource("doclet.navField"));
         } else {
             return writer.getResource("doclet.navField");
@@ -284,7 +285,8 @@
      */
     protected void addNavDetailLink(boolean link, Content liNav) {
         if (link) {
-            liNav.addContent(writer.getHyperLink("annotation_type_field_detail",
+            liNav.addContent(writer.getHyperLink(
+                    SectionName.ANNOTATION_TYPE_FIELD_DETAIL,
                     writer.getResource("doclet.navField")));
         } else {
             liNav.addContent(writer.getResource("doclet.navField"));
--- a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeOptionalMemberWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -133,7 +133,7 @@
      */
     public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
         memberTree.addContent(writer.getMarkerAnchor(
-                "annotation_type_optional_element_summary"));
+                SectionName.ANNOTATION_TYPE_OPTIONAL_ELEMENT_SUMMARY));
     }
 
     /**
@@ -141,7 +141,8 @@
      */
     protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
         if (link) {
-            return writer.getHyperLink("annotation_type_optional_element_summary",
+            return writer.getHyperLink(
+                    SectionName.ANNOTATION_TYPE_OPTIONAL_ELEMENT_SUMMARY,
                     writer.getResource("doclet.navAnnotationTypeOptionalMember"));
         } else {
             return writer.getResource("doclet.navAnnotationTypeOptionalMember");
--- a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeRequiredMemberWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -89,7 +89,7 @@
             Content memberDetailsTree) {
         if (!writer.printedAnnotationHeading) {
             memberDetailsTree.addContent(writer.getMarkerAnchor(
-                    "annotation_type_element_detail"));
+                    SectionName.ANNOTATION_TYPE_ELEMENT_DETAIL));
             Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
                     writer.annotationTypeDetailsLabel);
             memberDetailsTree.addContent(heading);
@@ -219,7 +219,7 @@
      */
     public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
         memberTree.addContent(writer.getMarkerAnchor(
-                "annotation_type_required_element_summary"));
+                SectionName.ANNOTATION_TYPE_REQUIRED_ELEMENT_SUMMARY));
     }
 
     /**
@@ -239,9 +239,9 @@
      */
     protected void addSummaryLink(LinkInfoImpl.Kind context, ClassDoc cd, ProgramElementDoc member,
             Content tdSummary) {
-        Content strong = HtmlTree.SPAN(HtmlStyle.strong,
+        Content memberLink = HtmlTree.SPAN(HtmlStyle.memberNameLink,
                 writer.getDocLink(context, (MemberDoc) member, member.name(), false));
-        Content code = HtmlTree.CODE(strong);
+        Content code = HtmlTree.CODE(memberLink);
         tdSummary.addContent(code);
     }
 
@@ -274,7 +274,8 @@
      */
     protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
         if (link) {
-            return writer.getHyperLink("annotation_type_required_element_summary",
+            return writer.getHyperLink(
+                    SectionName.ANNOTATION_TYPE_REQUIRED_ELEMENT_SUMMARY,
                     writer.getResource("doclet.navAnnotationTypeRequiredMember"));
         } else {
             return writer.getResource("doclet.navAnnotationTypeRequiredMember");
@@ -286,7 +287,8 @@
      */
     protected void addNavDetailLink(boolean link, Content liNav) {
         if (link) {
-            liNav.addContent(writer.getHyperLink("annotation_type_element_detail",
+            liNav.addContent(writer.getHyperLink(
+                    SectionName.ANNOTATION_TYPE_ELEMENT_DETAIL,
                     writer.getResource("doclet.navAnnotationTypeMember")));
         } else {
             liNav.addContent(writer.getResource("doclet.navAnnotationTypeMember"));
--- a/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/AnnotationTypeWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -227,7 +227,7 @@
             addSrcLink(annotationType, annotationName, pre);
             pre.addContent(parameterLinks);
         } else {
-            Content span = HtmlTree.SPAN(HtmlStyle.strong, annotationName);
+            Content span = HtmlTree.SPAN(HtmlStyle.memberNameLabel, annotationName);
             span.addContent(parameterLinks);
             pre.addContent(span);
         }
@@ -262,8 +262,8 @@
         annotationInfoTree.addContent(hr);
         Tag[] deprs = annotationType.tags("deprecated");
         if (Util.isDeprecated(annotationType)) {
-            Content strong = HtmlTree.SPAN(HtmlStyle.strong, deprecatedPhrase);
-            Content div = HtmlTree.DIV(HtmlStyle.block, strong);
+            Content deprLabel = HtmlTree.SPAN(HtmlStyle.deprecatedLabel, deprecatedPhrase);
+            Content div = HtmlTree.DIV(HtmlStyle.block, deprLabel);
             if (deprs.length > 0) {
                 Tag[] commentTags = deprs[0].inlineTags();
                 if (commentTags.length > 0) {
--- a/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/ClassUseWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -263,7 +263,7 @@
      * @param contentTree the content tree to which the packages list will be added
      */
     protected void addPackageList(Content contentTree) throws IOException {
-        Content table = HtmlTree.TABLE(0, 3, 0, useTableSummary,
+        Content table = HtmlTree.TABLE(HtmlStyle.useSummary, 0, 3, 0, useTableSummary,
                 getTableCaption(configuration.getResource(
                 "doclet.ClassUse_Packages.that.use.0",
                 getLink(new LinkInfoImpl(configuration, LinkInfoImpl.Kind.CLASS_USE_HEADER, classdoc
@@ -298,7 +298,7 @@
                 pkgToPackageAnnotations.isEmpty()) {
             return;
         }
-        Content table = HtmlTree.TABLE(0, 3, 0, useTableSummary,
+        Content table = HtmlTree.TABLE(HtmlStyle.useSummary, 0, 3, 0, useTableSummary,
                 getTableCaption(configuration.getResource(
                 "doclet.ClassUse_PackageAnnotation",
                 getLink(new LinkInfoImpl(configuration,
--- a/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/ClassWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -254,7 +254,7 @@
             addSrcLink(classDoc, className, pre);
             pre.addContent(parameterLinks);
         } else {
-            Content span = HtmlTree.SPAN(HtmlStyle.strong, className);
+            Content span = HtmlTree.SPAN(HtmlStyle.typeNameLabel, className);
             span.addContent(parameterLinks);
             pre.addContent(span);
         }
@@ -547,8 +547,8 @@
         classInfoTree.addContent(hr);
         Tag[] deprs = classDoc.tags("deprecated");
         if (Util.isDeprecated(classDoc)) {
-            Content strong = HtmlTree.SPAN(HtmlStyle.strong, deprecatedPhrase);
-            Content div = HtmlTree.DIV(HtmlStyle.block, strong);
+            Content deprLabel = HtmlTree.SPAN(HtmlStyle.deprecatedLabel, deprecatedPhrase);
+            Content div = HtmlTree.DIV(HtmlStyle.block, deprLabel);
             if (deprs.length > 0) {
                 Tag[] commentTags = deprs[0].inlineTags();
                 if (commentTags.length > 0) {
--- a/src/share/classes/com/sun/tools/doclets/formats/html/ConfigurationImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/ConfigurationImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -284,7 +284,7 @@
         setTopFile(root);
 
         if (root instanceof RootDocImpl) {
-            ((RootDocImpl) root).initDocLint(doclintOpts);
+            ((RootDocImpl) root).initDocLint(doclintOpts, tagletManager.getCustomTagNames());
         }
     }
 
--- a/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/ConstantsSummaryWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -107,7 +107,8 @@
         //add link to summary
         Content link;
         if (packageName.length() == 0) {
-            link = getHyperLink(DocLink.fragment(DocletConstants.UNNAMED_PACKAGE_ANCHOR),
+            link = getHyperLink(getDocLink(
+                    SectionName.UNNAMED_PACKAGE_ANCHOR),
                     defaultPackageLabel, "", "");
         } else {
             Content packageNameContent = getPackageLabel(parsedPackageName);
@@ -153,7 +154,7 @@
         Content pkgNameContent;
         if (parsedPackageName.length() == 0) {
             summariesTree.addContent(getMarkerAnchor(
-                    DocletConstants.UNNAMED_PACKAGE_ANCHOR));
+                    SectionName.UNNAMED_PACKAGE_ANCHOR));
             pkgNameContent = defaultPackageLabel;
         } else {
             summariesTree.addContent(getMarkerAnchor(
@@ -207,7 +208,7 @@
      * @return the table caption and header
      */
     protected Content getClassName(Content classStr) {
-        Content table = HtmlTree.TABLE(0, 3, 0, constantsTableSummary,
+        Content table = HtmlTree.TABLE(HtmlStyle.constantsSummary, 0, 3, 0, constantsTableSummary,
                 getTableCaption(classStr));
         table.addContent(getSummaryTableHeader(constantsTableHeader, "col"));
         return table;
--- a/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/ConstructorWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -97,7 +97,8 @@
             Content memberDetailsTree) {
         memberDetailsTree.addContent(HtmlConstants.START_OF_CONSTRUCTOR_DETAILS);
         Content constructorDetailsTree = writer.getMemberTreeHeader();
-        constructorDetailsTree.addContent(writer.getMarkerAnchor("constructor_detail"));
+        constructorDetailsTree.addContent(writer.getMarkerAnchor(
+                SectionName.CONSTRUCTOR_DETAIL));
         Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
                 writer.constructorDetailsLabel);
         constructorDetailsTree.addContent(heading);
@@ -256,7 +257,8 @@
      * {@inheritDoc}
      */
     public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
-        memberTree.addContent(writer.getMarkerAnchor("constructor_summary"));
+        memberTree.addContent(writer.getMarkerAnchor(
+                SectionName.CONSTRUCTOR_SUMMARY));
     }
 
     /**
@@ -280,7 +282,7 @@
      */
     protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
         if (link) {
-            return writer.getHyperLink("constructor_summary",
+            return writer.getHyperLink(SectionName.CONSTRUCTOR_SUMMARY,
                     writer.getResource("doclet.navConstructor"));
         } else {
             return writer.getResource("doclet.navConstructor");
@@ -292,7 +294,8 @@
      */
     protected void addNavDetailLink(boolean link, Content liNav) {
         if (link) {
-            liNav.addContent(writer.getHyperLink("constructor_detail",
+            liNav.addContent(writer.getHyperLink(
+                    SectionName.CONSTRUCTOR_DETAIL,
                     writer.getResource("doclet.navConstructor")));
         } else {
             liNav.addContent(writer.getResource("doclet.navConstructor"));
--- a/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/DeprecatedListWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -48,8 +48,8 @@
 
     private static final String[] ANCHORS = new String[] {
         "package", "interface", "class", "enum", "exception", "error",
-        "annotation_type", "field", "method", "constructor", "enum_constant",
-        "annotation_type_member"
+        "annotation.type", "field", "method", "constructor", "enum.constant",
+        "annotation.type.member"
     };
 
     private static final String[] HEADING_KEYS = new String[] {
--- a/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/EnumConstantWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -73,7 +73,8 @@
             Content memberDetailsTree) {
         memberDetailsTree.addContent(HtmlConstants.START_OF_ENUM_CONSTANT_DETAILS);
         Content enumConstantsDetailsTree = writer.getMemberTreeHeader();
-        enumConstantsDetailsTree.addContent(writer.getMarkerAnchor("enum_constant_detail"));
+        enumConstantsDetailsTree.addContent(writer.getMarkerAnchor(
+                SectionName.ENUM_CONSTANT_DETAIL));
         Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
                 writer.enumConstantsDetailsLabel);
         enumConstantsDetailsTree.addContent(heading);
@@ -202,7 +203,8 @@
      * {@inheritDoc}
      */
     public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
-        memberTree.addContent(writer.getMarkerAnchor("enum_constant_summary"));
+        memberTree.addContent(writer.getMarkerAnchor(
+                SectionName.ENUM_CONSTANT_SUMMARY));
     }
 
     /**
@@ -222,9 +224,9 @@
      */
     protected void addSummaryLink(LinkInfoImpl.Kind context, ClassDoc cd, ProgramElementDoc member,
             Content tdSummary) {
-        Content strong = HtmlTree.SPAN(HtmlStyle.strong,
+        Content memberLink = HtmlTree.SPAN(HtmlStyle.memberNameLink,
                 writer.getDocLink(context, (MemberDoc) member, member.name(), false));
-        Content code = HtmlTree.CODE(strong);
+        Content code = HtmlTree.CODE(memberLink);
         tdSummary.addContent(code);
     }
 
@@ -263,11 +265,14 @@
      */
     protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
         if (link) {
-            return writer.getHyperLink((cd == null)?
-                "enum_constant_summary":
-                "enum_constants_inherited_from_class_" +
-                configuration.getClassName(cd),
-                writer.getResource("doclet.navEnum"));
+            if (cd == null) {
+                return writer.getHyperLink(SectionName.ENUM_CONSTANT_SUMMARY,
+                        writer.getResource("doclet.navEnum"));
+            } else {
+                return writer.getHyperLink(
+                        SectionName.ENUM_CONSTANTS_INHERITANCE,
+                        configuration.getClassName(cd), writer.getResource("doclet.navEnum"));
+            }
         } else {
             return writer.getResource("doclet.navEnum");
         }
@@ -278,7 +283,8 @@
      */
     protected void addNavDetailLink(boolean link, Content liNav) {
         if (link) {
-            liNav.addContent(writer.getHyperLink("enum_constant_detail",
+            liNav.addContent(writer.getHyperLink(
+                    SectionName.ENUM_CONSTANT_DETAIL,
                     writer.getResource("doclet.navEnum")));
         } else {
             liNav.addContent(writer.getResource("doclet.navEnum"));
--- a/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/FieldWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -74,7 +74,8 @@
             Content memberDetailsTree) {
         memberDetailsTree.addContent(HtmlConstants.START_OF_FIELD_DETAILS);
         Content fieldDetailsTree = writer.getMemberTreeHeader();
-        fieldDetailsTree.addContent(writer.getMarkerAnchor("field_detail"));
+        fieldDetailsTree.addContent(writer.getMarkerAnchor(
+                SectionName.FIELD_DETAIL));
         Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
                 writer.fieldDetailsLabel);
         fieldDetailsTree.addContent(heading);
@@ -139,11 +140,11 @@
                             holder.typeName() : holder.qualifiedTypeName(),
                             false);
                 Content codeLink = HtmlTree.CODE(link);
-                Content strong = HtmlTree.SPAN(HtmlStyle.strong, holder.isClass()?
+                Content descfrmLabel = HtmlTree.SPAN(HtmlStyle.descfrmTypeLabel, holder.isClass()?
                    writer.descfrmClassLabel : writer.descfrmInterfaceLabel);
-                strong.addContent(writer.getSpace());
-                strong.addContent(codeLink);
-                fieldDocTree.addContent(HtmlTree.DIV(HtmlStyle.block, strong));
+                descfrmLabel.addContent(writer.getSpace());
+                descfrmLabel.addContent(codeLink);
+                fieldDocTree.addContent(HtmlTree.DIV(HtmlStyle.block, descfrmLabel));
                 writer.addInlineComment(field, fieldDocTree);
             }
         }
@@ -224,7 +225,8 @@
      * {@inheritDoc}
      */
     public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
-        memberTree.addContent(writer.getMarkerAnchor("field_summary"));
+        memberTree.addContent(writer.getMarkerAnchor(
+                SectionName.FIELD_SUMMARY));
     }
 
     /**
@@ -232,7 +234,7 @@
      */
     public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
         inheritedTree.addContent(writer.getMarkerAnchor(
-                "fields_inherited_from_class_" + configuration.getClassName(cd)));
+                SectionName.FIELDS_INHERITANCE, configuration.getClassName(cd)));
     }
 
     /**
@@ -256,9 +258,9 @@
      */
     protected void addSummaryLink(LinkInfoImpl.Kind context, ClassDoc cd, ProgramElementDoc member,
             Content tdSummary) {
-        Content strong = HtmlTree.SPAN(HtmlStyle.strong,
+        Content memberLink = HtmlTree.SPAN(HtmlStyle.memberNameLink,
                 writer.getDocLink(context, cd , (MemberDoc) member, member.name(), false));
-        Content code = HtmlTree.CODE(strong);
+        Content code = HtmlTree.CODE(memberLink);
         tdSummary.addContent(code);
     }
 
@@ -293,11 +295,15 @@
      */
     protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
         if (link) {
-            return writer.getHyperLink((cd == null)?
-                "field_summary":
-                "fields_inherited_from_class_" +
-                configuration.getClassName(cd),
-                writer.getResource("doclet.navField"));
+            if (cd == null) {
+                return writer.getHyperLink(
+                        SectionName.FIELD_SUMMARY,
+                        writer.getResource("doclet.navField"));
+            } else {
+                return writer.getHyperLink(
+                        SectionName.FIELDS_INHERITANCE,
+                        configuration.getClassName(cd), writer.getResource("doclet.navField"));
+            }
         } else {
             return writer.getResource("doclet.navField");
         }
@@ -308,7 +314,8 @@
      */
     protected void addNavDetailLink(boolean link, Content liNav) {
         if (link) {
-            liNav.addContent(writer.getHyperLink("field_detail",
+            liNav.addContent(writer.getHyperLink(
+                    SectionName.FIELD_DETAIL,
                     writer.getResource("doclet.navField")));
         } else {
             liNav.addContent(writer.getResource("doclet.navField"));
--- a/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/HelpWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -316,7 +316,7 @@
         liConst.addContent(constPara);
         ul.addContent(liConst);
         Content divContent = HtmlTree.DIV(HtmlStyle.contentContainer, ul);
-        Content line30 = HtmlTree.SPAN(HtmlStyle.italic, getResource("doclet.Help_line_30"));
+        Content line30 = HtmlTree.SPAN(HtmlStyle.emphasizedPhrase, getResource("doclet.Help_line_30"));
         divContent.addContent(line30);
         contentTree.addContent(divContent);
     }
--- a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDoclet.java	Mon Oct 28 18:30:14 2013 -0400
@@ -194,6 +194,10 @@
                             .getClassBuilder(curr, prev, next, classtree);
                     classBuilder.build();
                 }
+            } catch (IOException e) {
+                throw new DocletAbortException(e);
+            } catch (DocletAbortException de) {
+                throw de;
             } catch (Exception e) {
                 e.printStackTrace();
                 throw new DocletAbortException(e);
--- a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlDocletWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -356,7 +356,7 @@
         if(classes.length > 0) {
             Arrays.sort(classes);
             Content caption = getTableCaption(new RawHtml(label));
-            Content table = HtmlTree.TABLE(HtmlStyle.packageSummary, 0, 3, 0,
+            Content table = HtmlTree.TABLE(HtmlStyle.typeSummary, 0, 3, 0,
                     tableSummary, caption);
             table.addContent(getSummaryTableHeader(tableHeader, "col"));
             Content tbody = new HtmlTree(HtmlTag.TBODY);
@@ -391,8 +391,7 @@
                 tbody.addContent(tr);
             }
             table.addContent(tbody);
-            Content li = HtmlTree.LI(HtmlStyle.blockList, table);
-            summaryContentTree.addContent(li);
+            summaryContentTree.addContent(table);
         }
     }
 
@@ -509,28 +508,28 @@
                 body.addContent(HtmlConstants.START_OF_TOP_NAVBAR);
                 navDiv.addStyle(HtmlStyle.topNav);
                 allClassesId += "navbar_top";
-                Content a = getMarkerAnchor("navbar_top");
+                Content a = getMarkerAnchor(SectionName.NAVBAR_TOP);
                 //WCAG - Hyperlinks should contain text or an image with alt text - for AT tools
                 navDiv.addContent(a);
                 Content skipLinkContent = HtmlTree.DIV(HtmlStyle.skipNav, getHyperLink(
-                    DocLink.fragment("skip-navbar_top"), skipNavLinks,
+                    getDocLink(SectionName.SKIP_NAVBAR_TOP), skipNavLinks,
                     skipNavLinks.toString(), ""));
                 navDiv.addContent(skipLinkContent);
             } else {
                 body.addContent(HtmlConstants.START_OF_BOTTOM_NAVBAR);
                 navDiv.addStyle(HtmlStyle.bottomNav);
                 allClassesId += "navbar_bottom";
-                Content a = getMarkerAnchor("navbar_bottom");
+                Content a = getMarkerAnchor(SectionName.NAVBAR_BOTTOM);
                 navDiv.addContent(a);
                 Content skipLinkContent = HtmlTree.DIV(HtmlStyle.skipNav, getHyperLink(
-                    DocLink.fragment("skip-navbar_bottom"), skipNavLinks,
+                    getDocLink(SectionName.SKIP_NAVBAR_BOTTOM), skipNavLinks,
                     skipNavLinks.toString(), ""));
                 navDiv.addContent(skipLinkContent);
             }
             if (header) {
-                navDiv.addContent(getMarkerAnchor("navbar_top_firstrow"));
+                navDiv.addContent(getMarkerAnchor(SectionName.NAVBAR_TOP_FIRSTROW));
             } else {
-                navDiv.addContent(getMarkerAnchor("navbar_bottom_firstrow"));
+                navDiv.addContent(getMarkerAnchor(SectionName.NAVBAR_BOTTOM_FIRSTROW));
             }
             HtmlTree navList = new HtmlTree(HtmlTag.UL);
             navList.addStyle(HtmlStyle.navList);
@@ -577,11 +576,11 @@
             subDiv.addContent(getAllClassesLinkScript(allClassesId.toString()));
             addSummaryDetailLinks(subDiv);
             if (header) {
-                subDiv.addContent(getMarkerAnchor("skip-navbar_top"));
+                subDiv.addContent(getMarkerAnchor(SectionName.SKIP_NAVBAR_TOP));
                 body.addContent(subDiv);
                 body.addContent(HtmlConstants.END_OF_TOP_NAVBAR);
             } else {
-                subDiv.addContent(getMarkerAnchor("skip-navbar_bottom"));
+                subDiv.addContent(getMarkerAnchor(SectionName.SKIP_NAVBAR_BOTTOM));
                 body.addContent(subDiv);
                 body.addContent(HtmlConstants.END_OF_BOTTOM_NAVBAR);
             }
@@ -886,7 +885,28 @@
      * @return a content tree for the marker anchor
      */
     public Content getMarkerAnchor(String anchorName) {
-        return getMarkerAnchor(anchorName, null);
+        return getMarkerAnchor(getName(anchorName), null);
+    }
+
+    /**
+     * Get the marker anchor which will be added to the documentation tree.
+     *
+     * @param sectionName the section name anchor attribute for page
+     * @return a content tree for the marker anchor
+     */
+    public Content getMarkerAnchor(SectionName sectionName) {
+        return getMarkerAnchor(sectionName.getName(), null);
+    }
+
+    /**
+     * Get the marker anchor which will be added to the documentation tree.
+     *
+     * @param sectionName the section name anchor attribute for page
+     * @param anchorName the anchor name combined with section name attribute for the page
+     * @return a content tree for the marker anchor
+     */
+    public Content getMarkerAnchor(SectionName sectionName, String anchorName) {
+        return getMarkerAnchor(sectionName.getName() + getName(anchorName), null);
     }
 
     /**
@@ -937,7 +957,7 @@
     protected void addPackageDeprecatedAPI(List<Doc> deprPkgs, String headingKey,
             String tableSummary, String[] tableHeader, Content contentTree) {
         if (deprPkgs.size() > 0) {
-            Content table = HtmlTree.TABLE(0, 3, 0, tableSummary,
+            Content table = HtmlTree.TABLE(HtmlStyle.deprecatedSummary, 0, 3, 0, tableSummary,
                     getTableCaption(configuration.getResource(headingKey)));
             table.addContent(getSummaryTableHeader(tableHeader, "col"));
             Content tbody = new HtmlTree(HtmlTag.TBODY);
@@ -1030,7 +1050,7 @@
 
     public Content italicsClassName(ClassDoc cd, boolean qual) {
         Content name = new StringContent((qual)? cd.qualifiedName(): cd.name());
-        return (cd.isInterface())?  HtmlTree.SPAN(HtmlStyle.italic, name): name;
+        return (cd.isInterface())?  HtmlTree.SPAN(HtmlStyle.interfaceName, name): name;
     }
 
     /**
@@ -1291,10 +1311,10 @@
         } else if (doc instanceof ExecutableMemberDoc) {
             ExecutableMemberDoc emd = (ExecutableMemberDoc)doc;
             return getLink(new LinkInfoImpl(configuration, context, classDoc)
-                .label(label).where(getAnchor(emd, isProperty)).strong(strong));
+                .label(label).where(getName(getAnchor(emd, isProperty))).strong(strong));
         } else if (doc instanceof MemberDoc) {
             return getLink(new LinkInfoImpl(configuration, context, classDoc)
-                .label(label).where(doc.name()).strong(strong));
+                .label(label).where(getName(doc.name())).strong(strong));
         } else {
             return label;
         }
@@ -1319,10 +1339,10 @@
         } else if (doc instanceof ExecutableMemberDoc) {
             ExecutableMemberDoc emd = (ExecutableMemberDoc) doc;
             return getLink(new LinkInfoImpl(configuration, context, classDoc)
-                .label(label).where(getAnchor(emd)));
+                .label(label).where(getName(getAnchor(emd))));
         } else if (doc instanceof MemberDoc) {
             return getLink(new LinkInfoImpl(configuration, context, classDoc)
-                .label(label).where(doc.name()));
+                .label(label).where(getName(doc.name())));
         } else {
             return label;
         }
@@ -1546,7 +1566,7 @@
         Content div;
         Content result = commentTagsToContent(null, doc, tags, first);
         if (depr) {
-            Content italic = HtmlTree.SPAN(HtmlStyle.italic, result);
+            Content italic = HtmlTree.SPAN(HtmlStyle.deprecationComment, result);
             div = HtmlTree.DIV(HtmlStyle.block, italic);
             htmltree.addContent(div);
         }
--- a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialFieldWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -49,8 +49,6 @@
         implements SerializedFormWriter.SerialFieldWriter {
     ProgramElementDoc[] members = null;
 
-    private boolean printedOverallAnchor = false;
-
     public HtmlSerialFieldWriter(SubWriterHolderWriter writer,
                                     ClassDoc classdoc) {
         super(writer, classdoc);
@@ -98,10 +96,6 @@
         HtmlTree li = new HtmlTree(HtmlTag.LI);
         li.addStyle(HtmlStyle.blockList);
         if (serializableFieldsTree.isValid()) {
-            if (!printedOverallAnchor) {
-                li.addContent(writer.getMarkerAnchor("serializedForm"));
-                printedOverallAnchor = true;
-            }
             Content headingContent = new StringContent(heading);
             Content serialHeading = HtmlTree.HEADING(HtmlConstants.SERIALIZED_MEMBER_HEADING,
                     headingContent);
--- a/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/HtmlSerialMethodWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -85,12 +85,10 @@
      * @return a content tree for the serializable methods content
      */
     public Content getSerializableMethods(String heading, Content serializableMethodContent) {
-        Content li = HtmlTree.LI(HtmlStyle.blockList, writer.getMarkerAnchor(
-                "serialized_methods"));
         Content headingContent = new StringContent(heading);
         Content serialHeading = HtmlTree.HEADING(HtmlConstants.SERIALIZED_MEMBER_HEADING,
                 headingContent);
-        li.addContent(serialHeading);
+        Content li = HtmlTree.LI(HtmlStyle.blockList, serialHeading);
         li.addContent(serializableMethodContent);
         return li;
     }
@@ -113,8 +111,6 @@
      * @param methodsContentTree the content tree to which the member header will be added
      */
     public void addMemberHeader(MethodDoc member, Content methodsContentTree) {
-        methodsContentTree.addContent(writer.getMarkerAnchor(
-                writer.getAnchor(member)));
         methodsContentTree.addContent(getHead(member));
         methodsContentTree.addContent(getSignature(member));
     }
--- a/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/MethodWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -85,7 +85,8 @@
             Content memberDetailsTree) {
         memberDetailsTree.addContent(HtmlConstants.START_OF_METHOD_DETAILS);
         Content methodDetailsTree = writer.getMemberTreeHeader();
-        methodDetailsTree.addContent(writer.getMarkerAnchor("method_detail"));
+        methodDetailsTree.addContent(writer.getMarkerAnchor(
+                SectionName.METHOD_DETAIL));
         Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
                 writer.methodDetailsLabel);
         methodDetailsTree.addContent(heading);
@@ -159,11 +160,11 @@
                             holder.typeName() : holder.qualifiedTypeName(),
                             false);
                 Content codelLink = HtmlTree.CODE(link);
-                Content strong = HtmlTree.SPAN(HtmlStyle.strong, holder.asClassDoc().isClass()?
+                Content descfrmLabel = HtmlTree.SPAN(HtmlStyle.descfrmTypeLabel, holder.asClassDoc().isClass()?
                     writer.descfrmClassLabel : writer.descfrmInterfaceLabel);
-                strong.addContent(writer.getSpace());
-                strong.addContent(codelLink);
-                methodDocTree.addContent(HtmlTree.DIV(HtmlStyle.block, strong));
+                descfrmLabel.addContent(writer.getSpace());
+                descfrmLabel.addContent(codelLink);
+                methodDocTree.addContent(HtmlTree.DIV(HtmlStyle.block, descfrmLabel));
                 writer.addInlineComment(method, methodDocTree);
             }
         }
@@ -244,7 +245,8 @@
      * {@inheritDoc}
      */
     public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
-        memberTree.addContent(writer.getMarkerAnchor("method_summary"));
+        memberTree.addContent(writer.getMarkerAnchor(
+                SectionName.METHOD_SUMMARY));
     }
 
     /**
@@ -252,8 +254,7 @@
      */
     public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
         inheritedTree.addContent(writer.getMarkerAnchor(
-                "methods_inherited_from_class_" +
-                configuration.getClassName(cd)));
+                SectionName.METHODS_INHERITANCE, configuration.getClassName(cd)));
     }
 
     /**
@@ -309,7 +310,7 @@
                 label = writer.specifiedByLabel;
                 context = LinkInfoImpl.Kind.METHOD_SPECIFIED_BY;
             }
-            Content dt = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.strong, label));
+            Content dt = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.overrideSpecifyLabel, label));
             dl.addContent(dt);
             Content overriddenTypeLink =
                     writer.getLink(new LinkInfoImpl(writer.configuration, context, overriddenType));
@@ -318,7 +319,7 @@
             Content methlink = writer.getLink(
                     new LinkInfoImpl(writer.configuration, LinkInfoImpl.Kind.MEMBER,
                     overriddenType.asClassDoc())
-                    .where(writer.getAnchor(method)).label(name));
+                    .where(writer.getName(writer.getAnchor(method))).label(name));
             Content codeMethLink = HtmlTree.CODE(methlink);
             Content dd = HtmlTree.DD(codeMethLink);
             dd.addContent(writer.getSpace());
@@ -364,7 +365,7 @@
             Content intfaclink = writer.getLink(new LinkInfoImpl(
                     writer.configuration, LinkInfoImpl.Kind.METHOD_SPECIFIED_BY, intfac));
             Content codeIntfacLink = HtmlTree.CODE(intfaclink);
-            Content dt = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.strong, writer.specifiedByLabel));
+            Content dt = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.overrideSpecifyLabel, writer.specifiedByLabel));
             dl.addContent(dt);
             Content methlink = writer.getDocLink(
                     LinkInfoImpl.Kind.MEMBER, implementedMeth,
@@ -400,11 +401,15 @@
      */
     protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
         if (link) {
-            return writer.getHyperLink((cd == null)?
-                "method_summary":
-                "methods_inherited_from_class_" +
-                configuration.getClassName(cd),
-                writer.getResource("doclet.navMethod"));
+            if (cd == null) {
+                return writer.getHyperLink(
+                        SectionName.METHOD_SUMMARY,
+                        writer.getResource("doclet.navMethod"));
+            } else {
+                return writer.getHyperLink(
+                        SectionName.METHODS_INHERITANCE,
+                        configuration.getClassName(cd), writer.getResource("doclet.navMethod"));
+            }
         } else {
             return writer.getResource("doclet.navMethod");
         }
@@ -415,8 +420,8 @@
      */
     protected void addNavDetailLink(boolean link, Content liNav) {
         if (link) {
-            liNav.addContent(writer.getHyperLink("method_detail",
-                    writer.getResource("doclet.navMethod")));
+            liNav.addContent(writer.getHyperLink(
+                    SectionName.METHOD_DETAIL, writer.getResource("doclet.navMethod")));
         } else {
             liNav.addContent(writer.getResource("doclet.navMethod"));
         }
--- a/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/NestedClassWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -132,7 +132,8 @@
      * {@inheritDoc}
      */
     public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
-        memberTree.addContent(writer.getMarkerAnchor("nested_class_summary"));
+        memberTree.addContent(writer.getMarkerAnchor(
+                SectionName.NESTED_CLASS_SUMMARY));
     }
 
     /**
@@ -140,7 +141,8 @@
      */
     public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
         inheritedTree.addContent(writer.getMarkerAnchor(
-                "nested_classes_inherited_from_class_" + cd.qualifiedName()));
+                SectionName.NESTED_CLASSES_INHERITANCE,
+                cd.qualifiedName()));
     }
 
     /**
@@ -164,9 +166,9 @@
      */
     protected void addSummaryLink(LinkInfoImpl.Kind context, ClassDoc cd, ProgramElementDoc member,
             Content tdSummary) {
-        Content strong = HtmlTree.SPAN(HtmlStyle.strong,
+        Content memberLink = HtmlTree.SPAN(HtmlStyle.memberNameLink,
                 writer.getLink(new LinkInfoImpl(configuration, context, (ClassDoc)member)));
-        Content code = HtmlTree.CODE(strong);
+        Content code = HtmlTree.CODE(memberLink);
         tdSummary.addContent(code);
     }
 
@@ -202,9 +204,15 @@
      */
     protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
         if (link) {
-            return writer.getHyperLink((cd == null) ? "nested_class_summary":
-                "nested_classes_inherited_from_class_" + cd.qualifiedName(),
-                writer.getResource("doclet.navNested"));
+            if (cd == null) {
+                return writer.getHyperLink(
+                        SectionName.NESTED_CLASS_SUMMARY,
+                        writer.getResource("doclet.navNested"));
+            } else {
+                return writer.getHyperLink(
+                        SectionName.NESTED_CLASSES_INHERITANCE,
+                        cd.qualifiedName(), writer.getResource("doclet.navNested"));
+            }
         } else {
             return writer.getResource("doclet.navNested");
         }
--- a/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/PackageFrameWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -183,7 +183,7 @@
                     printedHeader = true;
                 }
                 Content arr_i_name = new StringContent(arr[i].name());
-                if (arr[i].isInterface()) arr_i_name = HtmlTree.SPAN(HtmlStyle.italic, arr_i_name);
+                if (arr[i].isInterface()) arr_i_name = HtmlTree.SPAN(HtmlStyle.interfaceName, arr_i_name);
                 Content link = getLink(new LinkInfoImpl(configuration,
                         LinkInfoImpl.Kind.PACKAGE_FRAME, arr[i]).label(arr_i_name).target("classFrame"));
                 Content li = HtmlTree.LI(link);
--- a/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/PackageIndexWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -203,8 +203,9 @@
             Content see = seeLabel;
             see.addContent(" ");
             Content descPara = HtmlTree.P(see);
-            Content descLink = getHyperLink(DocLink.fragment("overview_description"),
-                descriptionLabel, "", "");
+            Content descLink = getHyperLink(getDocLink(
+                    SectionName.OVERVIEW_DESCRIPTION),
+                    descriptionLabel, "", "");
             descPara.addContent(descLink);
             div.addContent(descPara);
             body.addContent(div);
@@ -220,7 +221,8 @@
      */
     protected void addOverviewComment(Content htmltree) {
         if (root.inlineTags().length > 0) {
-            htmltree.addContent(getMarkerAnchor("overview_description"));
+            htmltree.addContent(
+                    getMarkerAnchor(SectionName.OVERVIEW_DESCRIPTION));
             addInlineComment(root, htmltree);
         }
     }
--- a/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/PackageTreeWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -155,7 +155,7 @@
      * @param div the content tree to which the link will be added
      */
     protected void addLinkToMainTree(Content div) {
-        Content span = HtmlTree.SPAN(HtmlStyle.strong,
+        Content span = HtmlTree.SPAN(HtmlStyle.packageHierarchyLabel,
                 getResource("doclet.Package_Hierarchies"));
         div.addContent(span);
         HtmlTree ul = new HtmlTree (HtmlTag.UL);
--- a/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/PackageUseWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -151,7 +151,7 @@
      * @param contentTree the content tree to which the package list will be added
      */
     protected void addPackageList(Content contentTree) throws IOException {
-        Content table = HtmlTree.TABLE(0, 3, 0, useTableSummary,
+        Content table = HtmlTree.TABLE(HtmlStyle.useSummary, 0, 3, 0, useTableSummary,
                 getTableCaption(configuration.getResource(
                 "doclet.ClassUse_Packages.that.use.0",
                 getPackageLink(pkgdoc, Util.getPackageName(pkgdoc)))));
@@ -196,7 +196,7 @@
             }
             String tableSummary = configuration.getText("doclet.Use_Table_Summary",
                     configuration.getText("doclet.classes"));
-            Content table = HtmlTree.TABLE(0, 3, 0, tableSummary,
+            Content table = HtmlTree.TABLE(HtmlStyle.useSummary, 0, 3, 0, tableSummary,
                     getTableCaption(configuration.getResource(
                     "doclet.ClassUse_Classes.in.0.used.by.1",
                     getPackageLink(pkgdoc, Util.getPackageName(pkgdoc)),
--- a/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/PackageWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -112,7 +112,8 @@
             addSummaryComment(packageDoc, docSummaryDiv);
             div.addContent(docSummaryDiv);
             Content space = getSpace();
-            Content descLink = getHyperLink(DocLink.fragment("package_description"),
+            Content descLink = getHyperLink(getDocLink(
+                    SectionName.PACKAGE_DESCRIPTION),
                     descriptionLabel, "", "");
             Content descPara = new HtmlTree(HtmlTag.P, seeLabel, space, descLink);
             div.addContent(descPara);
@@ -140,7 +141,7 @@
         if (Util.isDeprecated(packageDoc)) {
             HtmlTree deprDiv = new HtmlTree(HtmlTag.DIV);
             deprDiv.addStyle(HtmlStyle.deprecatedContent);
-            Content deprPhrase = HtmlTree.SPAN(HtmlStyle.strong, deprecatedPhrase);
+            Content deprPhrase = HtmlTree.SPAN(HtmlStyle.deprecatedLabel, deprecatedPhrase);
             deprDiv.addContent(deprPhrase);
             if (deprs.length > 0) {
                 Tag[] commentTags = deprs[0].inlineTags();
@@ -169,7 +170,7 @@
         if(classes.length > 0) {
             Arrays.sort(classes);
             Content caption = getTableCaption(new RawHtml(label));
-            Content table = HtmlTree.TABLE(HtmlStyle.packageSummary, 0, 3, 0,
+            Content table = HtmlTree.TABLE(HtmlStyle.typeSummary, 0, 3, 0,
                     tableSummary, caption);
             table.addContent(getSummaryTableHeader(tableHeader, "col"));
             Content tbody = new HtmlTree(HtmlTag.TBODY);
@@ -211,7 +212,8 @@
      */
     public void addPackageDescription(Content packageContentTree) {
         if (packageDoc.inlineTags().length > 0) {
-            packageContentTree.addContent(getMarkerAnchor("package_description"));
+            packageContentTree.addContent(
+                    getMarkerAnchor(SectionName.PACKAGE_DESCRIPTION));
             Content h2Content = new StringContent(
                     configuration.getText("doclet.Package_Description",
                     packageDoc.name()));
--- a/src/share/classes/com/sun/tools/doclets/formats/html/ProfilePackageFrameWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/ProfilePackageFrameWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -174,7 +174,7 @@
                     printedHeader = true;
                 }
                 Content arr_i_name = new StringContent(arr[i].name());
-                if (arr[i].isInterface()) arr_i_name = HtmlTree.SPAN(HtmlStyle.italic, arr_i_name);
+                if (arr[i].isInterface()) arr_i_name = HtmlTree.SPAN(HtmlStyle.interfaceName, arr_i_name);
                 Content link = getLink(new LinkInfoImpl(configuration,
                         LinkInfoImpl.Kind.PACKAGE_FRAME, arr[i]).label(arr_i_name).target("classFrame"));
                 Content li = HtmlTree.LI(link);
--- a/src/share/classes/com/sun/tools/doclets/formats/html/ProfilePackageWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/ProfilePackageWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -129,7 +129,8 @@
             addSummaryComment(packageDoc, docSummaryDiv);
             div.addContent(docSummaryDiv);
             Content space = getSpace();
-            Content descLink = getHyperLink(DocLink.fragment("package_description"),
+            Content descLink = getHyperLink(getDocLink(
+                    SectionName.PACKAGE_DESCRIPTION),
                     descriptionLabel, "", "");
             Content descPara = new HtmlTree(HtmlTag.P, seeLabel, space, descLink);
             div.addContent(descPara);
@@ -157,7 +158,7 @@
         if (Util.isDeprecated(packageDoc)) {
             HtmlTree deprDiv = new HtmlTree(HtmlTag.DIV);
             deprDiv.addStyle(HtmlStyle.deprecatedContent);
-            Content deprPhrase = HtmlTree.SPAN(HtmlStyle.strong, deprecatedPhrase);
+            Content deprPhrase = HtmlTree.SPAN(HtmlStyle.deprecatedLabel, deprecatedPhrase);
             deprDiv.addContent(deprPhrase);
             if (deprs.length > 0) {
                 Tag[] commentTags = deprs[0].inlineTags();
@@ -174,8 +175,11 @@
      */
     public void addClassesSummary(ClassDoc[] classes, String label,
             String tableSummary, String[] tableHeader, Content packageSummaryContentTree) {
+        HtmlTree li = new HtmlTree(HtmlTag.LI);
+        li.addStyle(HtmlStyle.blockList);
         addClassesSummary(classes, label, tableSummary, tableHeader,
-                packageSummaryContentTree, profileValue);
+                li, profileValue);
+        packageSummaryContentTree.addContent(li);
     }
 
     /**
@@ -192,7 +196,8 @@
      */
     public void addPackageDescription(Content packageContentTree) {
         if (packageDoc.inlineTags().length > 0) {
-            packageContentTree.addContent(getMarkerAnchor("package_description"));
+            packageContentTree.addContent(
+                    getMarkerAnchor(SectionName.PACKAGE_DESCRIPTION));
             Content h2Content = new StringContent(
                     configuration.getText("doclet.Package_Description",
                     packageDoc.name()));
--- a/src/share/classes/com/sun/tools/doclets/formats/html/ProfileWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/ProfileWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -187,7 +187,7 @@
             deprs = pkg.tags("deprecated");
             HtmlTree deprDiv = new HtmlTree(HtmlTag.DIV);
             deprDiv.addStyle(HtmlStyle.deprecatedContent);
-            Content deprPhrase = HtmlTree.SPAN(HtmlStyle.strong, deprecatedPhrase);
+            Content deprPhrase = HtmlTree.SPAN(HtmlStyle.deprecatedLabel, deprecatedPhrase);
             deprDiv.addContent(deprPhrase);
             if (deprs.length > 0) {
                 Tag[] commentTags = deprs[0].inlineTags();
--- a/src/share/classes/com/sun/tools/doclets/formats/html/PropertyWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/PropertyWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -70,7 +70,8 @@
             Content memberDetailsTree) {
         memberDetailsTree.addContent(HtmlConstants.START_OF_PROPERTY_DETAILS);
         Content propertyDetailsTree = writer.getMemberTreeHeader();
-        propertyDetailsTree.addContent(writer.getMarkerAnchor("property_detail"));
+        propertyDetailsTree.addContent(writer.getMarkerAnchor(
+                SectionName.PROPERTY_DETAIL));
         Content heading = HtmlTree.HEADING(HtmlConstants.DETAILS_HEADING,
                 writer.propertyDetailsLabel);
         propertyDetailsTree.addContent(heading);
@@ -135,11 +136,11 @@
                             holder.typeName() : holder.qualifiedTypeName(),
                             false);
                 Content codeLink = HtmlTree.CODE(link);
-                Content strong = HtmlTree.SPAN(HtmlStyle.strong, holder.isClass()?
+                Content descfrmLabel = HtmlTree.SPAN(HtmlStyle.descfrmTypeLabel, holder.isClass()?
                    writer.descfrmClassLabel : writer.descfrmInterfaceLabel);
-                strong.addContent(writer.getSpace());
-                strong.addContent(codeLink);
-                propertyDocTree.addContent(HtmlTree.DIV(HtmlStyle.block, strong));
+                descfrmLabel.addContent(writer.getSpace());
+                descfrmLabel.addContent(codeLink);
+                propertyDocTree.addContent(HtmlTree.DIV(HtmlStyle.block, descfrmLabel));
                 writer.addInlineComment(property, propertyDocTree);
             }
         }
@@ -220,7 +221,8 @@
      * {@inheritDoc}
      */
     public void addSummaryAnchor(ClassDoc cd, Content memberTree) {
-        memberTree.addContent(writer.getMarkerAnchor("property_summary"));
+        memberTree.addContent(writer.getMarkerAnchor(
+                SectionName.PROPERTY_SUMMARY));
     }
 
     /**
@@ -228,7 +230,8 @@
      */
     public void addInheritedSummaryAnchor(ClassDoc cd, Content inheritedTree) {
         inheritedTree.addContent(writer.getMarkerAnchor(
-                "properties_inherited_from_class_" + configuration.getClassName(cd)));
+                SectionName.PROPERTIES_INHERITANCE,
+                configuration.getClassName(cd)));
     }
 
     /**
@@ -252,14 +255,14 @@
      */
     protected void addSummaryLink(LinkInfoImpl.Kind context, ClassDoc cd, ProgramElementDoc member,
             Content tdSummary) {
-        Content strong = HtmlTree.SPAN(HtmlStyle.strong,
+        Content memberLink = HtmlTree.SPAN(HtmlStyle.memberNameLink,
                 writer.getDocLink(context, cd,
                 (MemberDoc) member,
                 member.name().substring(0, member.name().lastIndexOf("Property")),
                 false,
                 true));
 
-        Content code = HtmlTree.CODE(strong);
+        Content code = HtmlTree.CODE(memberLink);
         tdSummary.addContent(code);
     }
 
@@ -297,11 +300,15 @@
      */
     protected Content getNavSummaryLink(ClassDoc cd, boolean link) {
         if (link) {
-            return writer.getHyperLink((cd == null)?
-                "property_summary":
-                "properties_inherited_from_class_" +
-                configuration.getClassName(cd),
+            if (cd == null) {
+                return writer.getHyperLink(
+                SectionName.PROPERTY_SUMMARY,
                 writer.getResource("doclet.navProperty"));
+            } else {
+                return writer.getHyperLink(
+                SectionName.PROPERTIES_INHERITANCE,
+                configuration.getClassName(cd), writer.getResource("doclet.navProperty"));
+            }
         } else {
             return writer.getResource("doclet.navProperty");
         }
@@ -312,7 +319,8 @@
      */
     protected void addNavDetailLink(boolean link, Content liNav) {
         if (link) {
-            liNav.addContent(writer.getHyperLink("property_detail",
+            liNav.addContent(writer.getHyperLink(
+                    SectionName.PROPERTY_DETAIL,
                     writer.getResource("doclet.navProperty")));
         } else {
             liNav.addContent(writer.getResource("doclet.navProperty"));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/SectionName.java	Mon Oct 28 18:30:14 2013 -0400
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 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.  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.doclets.formats.html;
+
+/**
+ * Enum representing various section names of generated API documentation.
+ *
+ *  <p><b>This is NOT part of any supported API.
+ *  If you write code that depends on this, you do so at your own risk.
+ *  This code and its internal interfaces are subject to change or
+ *  deletion without notice.</b>
+ *
+ * @author Bhavesh Patel
+ */
+public enum SectionName {
+
+    ANNOTATION_TYPE_ELEMENT_DETAIL("annotation.type.element.detail"),
+    ANNOTATION_TYPE_FIELD_DETAIL("annotation.type.field.detail"),
+    ANNOTATION_TYPE_FIELD_SUMMARY("annotation.type.field.summary"),
+    ANNOTATION_TYPE_OPTIONAL_ELEMENT_SUMMARY("annotation.type.optional.element.summary"),
+    ANNOTATION_TYPE_REQUIRED_ELEMENT_SUMMARY("annotation.type.required.element.summary"),
+    CONSTRUCTOR_DETAIL("constructor.detail"),
+    CONSTRUCTOR_SUMMARY("constructor.summary"),
+    ENUM_CONSTANT_DETAIL("enum.constant.detail"),
+    ENUM_CONSTANTS_INHERITANCE("enum.constants.inherited.from.class."),
+    ENUM_CONSTANT_SUMMARY("enum.constant.summary"),
+    FIELD_DETAIL("field.detail"),
+    FIELDS_INHERITANCE("fields.inherited.from.class."),
+    FIELD_SUMMARY("field.summary"),
+    METHOD_DETAIL("method.detail"),
+    METHODS_INHERITANCE("methods.inherited.from.class."),
+    METHOD_SUMMARY("method.summary"),
+    NAVBAR_BOTTOM("navbar.bottom"),
+    NAVBAR_BOTTOM_FIRSTROW("navbar.bottom.firstrow"),
+    NAVBAR_TOP("navbar.top"),
+    NAVBAR_TOP_FIRSTROW("navbar.top.firstrow"),
+    NESTED_CLASSES_INHERITANCE("nested.classes.inherited.from.class."),
+    NESTED_CLASS_SUMMARY("nested.class.summary"),
+    OVERVIEW_DESCRIPTION("overview.description"),
+    PACKAGE_DESCRIPTION("package.description"),
+    PROPERTY_DETAIL("property.detail"),
+    PROPERTIES_INHERITANCE("properties.inherited.from.class."),
+    PROPERTY_SUMMARY("property.summary"),
+    SKIP_NAVBAR_BOTTOM("skip.navbar.bottom"),
+    SKIP_NAVBAR_TOP("skip.navbar.top"),
+    UNNAMED_PACKAGE_ANCHOR("unnamed.package");
+
+    private final String value;
+
+    SectionName(String sName) {
+        this.value = sName;
+    }
+
+    public String getName() {
+        return this.value;
+    }
+}
--- a/src/share/classes/com/sun/tools/doclets/formats/html/SingleIndexWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/SingleIndexWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -115,7 +115,8 @@
         for (int i = 0; i < indexbuilder.elements().length; i++) {
             String unicode = (indexbuilder.elements())[i].toString();
             contentTree.addContent(
-                    getHyperLink("_" + unicode + "_", new StringContent(unicode)));
+                    getHyperLink(getNameForIndex(unicode),
+                    new StringContent(unicode)));
             contentTree.addContent(getSpace());
         }
     }
--- a/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/SubWriterHolderWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -92,7 +92,7 @@
         else {
             caption = getTableCaption(mw.getCaption());
         }
-        Content table = HtmlTree.TABLE(HtmlStyle.overviewSummary, 0, 3, 0,
+        Content table = HtmlTree.TABLE(HtmlStyle.memberSummary, 0, 3, 0,
                 mw.getTableSummary(), caption);
         table.addContent(getSummaryTableHeader(mw.getSummaryTableHeader(cd), "col"));
         for (int i = 0; i < tableContents.size(); i++) {
@@ -175,8 +175,8 @@
         Tag[] deprs = member.tags("deprecated");
         Content div;
         if (Util.isDeprecated((ProgramElementDoc) member)) {
-            Content strong = HtmlTree.SPAN(HtmlStyle.strong, deprecatedPhrase);
-            div = HtmlTree.DIV(HtmlStyle.block, strong);
+            Content deprLabel = HtmlTree.SPAN(HtmlStyle.deprecatedLabel, deprecatedPhrase);
+            div = HtmlTree.DIV(HtmlStyle.block, deprLabel);
             div.addContent(getSpace());
             if (deprs.length > 0) {
                 addInlineDeprecatedComment(member, deprs[0], div);
@@ -186,8 +186,8 @@
         } else {
             ClassDoc cd = ((ProgramElementDoc)member).containingClass();
             if (cd != null && Util.isDeprecated(cd)) {
-                Content strong = HtmlTree.SPAN(HtmlStyle.strong, deprecatedPhrase);
-                div = HtmlTree.DIV(HtmlStyle.block, strong);
+                Content deprLabel = HtmlTree.SPAN(HtmlStyle.deprecatedLabel, deprecatedPhrase);
+                div = HtmlTree.DIV(HtmlStyle.block, deprLabel);
                 div.addContent(getSpace());
                 tdSummary.addContent(div);
             }
--- a/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/TagletWriterImpl.java	Mon Oct 28 18:30:14 2013 -0400
@@ -97,7 +97,7 @@
         Tag[] deprs = doc.tags("deprecated");
         if (doc instanceof ClassDoc) {
             if (Util.isDeprecated((ProgramElementDoc) doc)) {
-                result.addContent(HtmlTree.SPAN(HtmlStyle.strong,
+                result.addContent(HtmlTree.SPAN(HtmlStyle.deprecatedLabel,
                         new StringContent(configuration.getText("doclet.Deprecated"))));
                 result.addContent(RawHtml.nbsp);
                 if (deprs.length > 0) {
@@ -112,17 +112,18 @@
         } else {
             MemberDoc member = (MemberDoc) doc;
             if (Util.isDeprecated((ProgramElementDoc) doc)) {
-                result.addContent(HtmlTree.SPAN(HtmlStyle.strong,
+                result.addContent(HtmlTree.SPAN(HtmlStyle.deprecatedLabel,
                         new StringContent(configuration.getText("doclet.Deprecated"))));
                 result.addContent(RawHtml.nbsp);
                 if (deprs.length > 0) {
                     Content body = commentTagsToOutput(null, doc,
                         deprs[0].inlineTags(), false);
-                    result.addContent(HtmlTree.SPAN(HtmlStyle.italic, body));
+                    if (!body.isEmpty())
+                        result.addContent(HtmlTree.SPAN(HtmlStyle.deprecationComment, body));
                 }
             } else {
                 if (Util.isDeprecated(member.containingClass())) {
-                    result.addContent(HtmlTree.SPAN(HtmlStyle.strong,
+                    result.addContent(HtmlTree.SPAN(HtmlStyle.deprecatedLabel,
                             new StringContent(configuration.getText("doclet.Deprecated"))));
                     result.addContent(RawHtml.nbsp);
                 }
@@ -150,7 +151,7 @@
      * {@inheritDoc}
      */
     public Content getParamHeader(String header) {
-        HtmlTree result = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.strong,
+        HtmlTree result = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.paramLabel,
                 new StringContent(header)));
         return result;
     }
@@ -185,7 +186,7 @@
      */
     public Content returnTagOutput(Tag returnTag) {
         ContentBuilder result = new ContentBuilder();
-        result.addContent(HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.strong,
+        result.addContent(HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.returnLabel,
                 new StringContent(configuration.getText("doclet.Returns")))));
         result.addContent(HtmlTree.DD(htmlWriter.commentTagsToContent(
                 returnTag, null, returnTag.inlineTags(), false)));
@@ -230,7 +231,7 @@
             return body;
 
         ContentBuilder result = new ContentBuilder();
-        result.addContent(HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.strong,
+        result.addContent(HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.seeLabel,
                 new StringContent(configuration.getText("doclet.See_Also")))));
         result.addContent(HtmlTree.DD(body));
         return result;
@@ -249,7 +250,7 @@
      */
     public Content simpleTagOutput(Tag[] simpleTags, String header) {
         ContentBuilder result = new ContentBuilder();
-        result.addContent(HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.strong, new RawHtml(header))));
+        result.addContent(HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.simpleTagLabel, new RawHtml(header))));
         ContentBuilder body = new ContentBuilder();
         for (int i = 0; i < simpleTags.length; i++) {
             if (i > 0) {
@@ -267,7 +268,7 @@
      */
     public Content simpleTagOutput(Tag simpleTag, String header) {
         ContentBuilder result = new ContentBuilder();
-        result.addContent(HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.strong, new RawHtml(header))));
+        result.addContent(HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.simpleTagLabel, new RawHtml(header))));
         Content body = htmlWriter.commentTagsToContent(
                 simpleTag, null, simpleTag.inlineTags(), false);
         result.addContent(HtmlTree.DD(body));
@@ -278,7 +279,7 @@
      * {@inheritDoc}
      */
     public Content getThrowsHeader() {
-        HtmlTree result = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.strong,
+        HtmlTree result = HtmlTree.DT(HtmlTree.SPAN(HtmlStyle.throwsLabel,
                 new StringContent(configuration.getText("doclet.Throws"))));
         return result;
     }
--- a/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/TreeWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -131,7 +131,7 @@
             return;
         }
         if (!classesonly) {
-            Content span = HtmlTree.SPAN(HtmlStyle.strong,
+            Content span = HtmlTree.SPAN(HtmlStyle.packageHierarchyLabel,
                     getResource("doclet.Package_Hierarchies"));
             contentTree.addContent(span);
             HtmlTree ul = new HtmlTree(HtmlTag.UL);
--- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/ContentBuilder.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/ContentBuilder.java	Mon Oct 28 18:30:14 2013 -0400
@@ -41,8 +41,6 @@
     @Override
     public void addContent(Content content) {
         nullCheck(content);
-        if ((content instanceof ContentBuilder) && content.isEmpty())
-            return;
         ensureMutableContents();
         if (content instanceof ContentBuilder) {
             contents.addAll(((ContentBuilder) content).contents);
--- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlDocWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -30,6 +30,7 @@
 
 import com.sun.javadoc.*;
 import com.sun.tools.doclets.formats.html.ConfigurationImpl;
+import com.sun.tools.doclets.formats.html.SectionName;
 import com.sun.tools.doclets.internal.toolkit.*;
 import com.sun.tools.doclets.internal.toolkit.util.DocFile;
 import com.sun.tools.doclets.internal.toolkit.util.DocLink;
@@ -78,7 +79,7 @@
     }
 
     /**
-     * Get Html Hyper Link string.
+     * Get Html Hyper Link Content.
      *
      * @param where      Position of the link in the file. Character '#' is not
      *                   needed.
@@ -87,7 +88,125 @@
      */
     public Content getHyperLink(String where,
                                Content label) {
-        return getHyperLink(DocLink.fragment(where), label, "", "");
+        return getHyperLink(getDocLink(where), label, "", "");
+    }
+
+    /**
+     * Get Html Hyper Link Content.
+     *
+     * @param sectionName      The section name to which the link will be created.
+     * @param label            Tag for the link.
+     * @return a content tree for the hyper link
+     */
+    public Content getHyperLink(SectionName sectionName,
+                               Content label) {
+        return getHyperLink(getDocLink(sectionName), label, "", "");
+    }
+
+    /**
+     * Get Html Hyper Link Content.
+     *
+     * @param sectionName      The section name combined with where to which the link
+     *                         will be created.
+     * @param where            The fragment combined with sectionName to which the link
+     *                         will be created.
+     * @param label            Tag for the link.
+     * @return a content tree for the hyper link
+     */
+    public Content getHyperLink(SectionName sectionName, String where,
+                               Content label) {
+        return getHyperLink(getDocLink(sectionName, where), label, "", "");
+    }
+
+    /**
+     * Get the link.
+     *
+     * @param where      Position of the link in the file.
+     * @return a DocLink object for the hyper link
+     */
+    public DocLink getDocLink(String where) {
+        return DocLink.fragment(getName(where));
+    }
+
+    /**
+     * Get the link.
+     *
+     * @param sectionName      The section name to which the link will be created.
+     * @return a DocLink object for the hyper link
+     */
+    public DocLink getDocLink(SectionName sectionName) {
+        return DocLink.fragment(sectionName.getName());
+    }
+
+    /**
+     * Get the link.
+     *
+     * @param sectionName      The section name combined with where to which the link
+     *                         will be created.
+     * @param where            The fragment combined with sectionName to which the link
+     *                         will be created.
+     * @return a DocLink object for the hyper link
+     */
+    public DocLink getDocLink(SectionName sectionName, String where) {
+        return DocLink.fragment(sectionName.getName() + getName(where));
+    }
+
+    /**
+     * Convert the name to a valid HTML name.
+     *
+     * @param name the name that needs to be converted to valid HTML name.
+     * @return a valid HTML name string.
+     */
+    public String getName(String name) {
+        StringBuilder sb = new StringBuilder();
+        char ch;
+        /* The HTML 4 spec at http://www.w3.org/TR/html4/types.html#h-6.2 mentions
+         * that the name/id should begin with a letter followed by other valid characters.
+         * The HTML 5 spec (draft) is more permissive on names/ids where the only restriction
+         * is that it should be at least one character long and should not contain spaces.
+         * The spec draft is @ http://www.w3.org/html/wg/drafts/html/master/dom.html#the-id-attribute.
+         *
+         * For HTML 4, we need to check for non-characters at the beginning of the name and
+         * substitute it accordingly, "_" and "$" can appear at the beginning of a member name.
+         * The method substitutes "$" with "Z:Z:D" and will prefix "_" with "Z:Z".
+         */
+        for (int i = 0; i < name.length(); i++) {
+            ch = name.charAt(i);
+            switch (ch) {
+                case '(':
+                case ')':
+                case '<':
+                case '>':
+                case ',':
+                    sb.append('-');
+                    break;
+                case ' ':
+                case '[':
+                    break;
+                case ']':
+                    sb.append(":A");
+                    break;
+                // Any appearance of $ needs to be substituted with ":D" and not with hyphen
+                // since a field name "P$$ and a method P(), both valid member names, can end
+                // up as "P--". A member name beginning with $ needs to be substituted with
+                // "Z:Z:D".
+                case '$':
+                    if (i == 0)
+                        sb.append("Z:Z");
+                    sb.append(":D");
+                    break;
+                // A member name beginning with _ needs to be prefixed with "Z:Z" since valid anchor
+                // names can only begin with a letter.
+                case '_':
+                    if (i == 0)
+                        sb.append("Z:Z");
+                    sb.append(ch);
+                    break;
+                default:
+                    sb.append(ch);
+            }
+        }
+        return sb.toString();
     }
 
     /**
@@ -117,7 +236,7 @@
                                String stylename, String title, String target) {
         Content body = label;
         if (strong) {
-            body = HtmlTree.SPAN(HtmlStyle.strong, body);
+            body = HtmlTree.SPAN(HtmlStyle.typeNameLink, body);
         }
         if (stylename != null && stylename.length() != 0) {
             HtmlTree t = new HtmlTree(HtmlTag.FONT, body);
--- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlStyle.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlStyle.java	Mon Oct 28 18:30:14 2013 -0400
@@ -48,37 +48,55 @@
     colFirst,
     colLast,
     colOne,
+    constantsSummary,
     constantValuesContainer,
     contentContainer,
+    deprecatedContent,
+    deprecatedLabel,
+    deprecatedSummary,
+    deprecationComment,
     description,
+    descfrmTypeLabel,
     details,
     docSummary,
+    emphasizedPhrase,
     header,
     horizontal,
     footer,
     indexContainer,
     indexHeader,
     inheritance,
-    italic,
+    interfaceName,
     legalCopy,
+    memberNameLabel,
+    memberNameLink,
+    memberSummary,
     nameValue,
     navBarCell1Rev,
     navList,
+    overrideSpecifyLabel,
     overviewSummary,
-    packageSummary,
+    packageHierarchyLabel,
+    paramLabel,
+    returnLabel,
     rowColor,
+    seeLabel,
     serializedFormContainer,
+    simpleTagLabel,
     skipNav,
     sourceContainer,
     sourceLineNo,
-    strong,
     subNav,
     subNavList,
     subTitle,
     summary,
-    deprecatedContent,
     tabEnd,
     tableTab,
+    throwsLabel,
     title,
-    topNav;
+    topNav,
+    typeNameLabel,
+    typeNameLink,
+    typeSummary,
+    useSummary;
 }
--- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlTree.java	Mon Oct 28 18:30:14 2013 -0400
@@ -102,7 +102,12 @@
      * @param tagContent tag content to be added
      */
     public void addContent(Content tagContent) {
-        if (tagContent == HtmlTree.EMPTY || tagContent.isValid()) {
+        if (tagContent instanceof ContentBuilder) {
+            for (Content content: ((ContentBuilder)tagContent).contents) {
+                addContent(content);
+            }
+        }
+        else if (tagContent == HtmlTree.EMPTY || tagContent.isValid()) {
             if (content.isEmpty())
                 content = new ArrayList<Content>();
             content.add(tagContent);
@@ -619,25 +624,6 @@
     }
 
     /**
-     * Generates a Table tag with border, width and summary attributes and
-     * some content.
-     *
-     * @param border border for the table
-     * @param width width of the table
-     * @param summary summary for the table
-     * @param body content for the table
-     * @return an HtmlTree object for the TABLE tag
-     */
-    public static HtmlTree TABLE(int border, int width, String summary,
-            Content body) {
-        HtmlTree htmltree = new HtmlTree(HtmlTag.TABLE, nullCheck(body));
-        htmltree.addAttr(HtmlAttr.BORDER, Integer.toString(border));
-        htmltree.addAttr(HtmlAttr.WIDTH, Integer.toString(width));
-        htmltree.addAttr(HtmlAttr.SUMMARY, nullCheck(summary));
-        return htmltree;
-    }
-
-    /**
      * Generates a Table tag with style class, border, cell padding,
      * cellspacing and summary attributes and some content.
      *
@@ -662,22 +648,6 @@
     }
 
     /**
-     * Generates a Table tag with border, cell padding,
-     * cellspacing and summary attributes and some content.
-     *
-     * @param border border for the table
-     * @param cellPadding cell padding for the table
-     * @param cellSpacing cell spacing for the table
-     * @param summary summary for the table
-     * @param body content for the table
-     * @return an HtmlTree object for the TABLE tag
-     */
-    public static HtmlTree TABLE(int border, int cellPadding,
-            int cellSpacing, String summary, Content body) {
-        return TABLE(null, border, cellPadding, cellSpacing, summary, body);
-    }
-
-    /**
      * Generates a TD tag with style class attribute and some content.
      *
      * @param styleClass style for the tag
--- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/HtmlWriter.java	Mon Oct 28 18:30:14 2013 -0400
@@ -310,8 +310,12 @@
         if(winTitle != null && winTitle.length() > 0) {
             script.addAttr(HtmlAttr.TYPE, "text/javascript");
             String scriptCode = "<!--" + DocletConstants.NL +
-                    "    if (location.href.indexOf('is-external=true') == -1) {" + DocletConstants.NL +
-                    "        parent.document.title=\"" + winTitle + "\";" + DocletConstants.NL +
+                    "    try {" + DocletConstants.NL +
+                    "        if (location.href.indexOf('is-external=true') == -1) {" + DocletConstants.NL +
+                    "            parent.document.title=\"" + escapeJavaScriptChars(winTitle) + "\";" + DocletConstants.NL +
+                    "        }" + DocletConstants.NL +
+                    "    }" + DocletConstants.NL +
+                    "    catch(err) {" + DocletConstants.NL +
                     "    }" + DocletConstants.NL +
                     "//-->" + DocletConstants.NL;
             RawHtml scriptContent = new RawHtml(scriptCode);
@@ -321,6 +325,53 @@
     }
 
     /**
+     * Returns a String with escaped special JavaScript characters.
+     *
+     * @param s String that needs to be escaped
+     * @return a valid escaped JavaScript string
+     */
+    private static String escapeJavaScriptChars(String s) {
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < s.length(); i++) {
+            char ch = s.charAt(i);
+            switch (ch) {
+                case '\b':
+                    sb.append("\\b");
+                    break;
+                case '\t':
+                    sb.append("\\t");
+                    break;
+                case '\n':
+                    sb.append("\\n");
+                    break;
+                case '\f':
+                    sb.append("\\f");
+                    break;
+                case '\r':
+                    sb.append("\\r");
+                    break;
+                case '"':
+                    sb.append("\\\"");
+                    break;
+                case '\'':
+                    sb.append("\\\'");
+                    break;
+                case '\\':
+                    sb.append("\\\\");
+                    break;
+                default:
+                    if (ch < 32 || ch >= 127) {
+                        sb.append(String.format("\\u%04X", (int)ch));
+                    } else {
+                        sb.append(ch);
+                    }
+                    break;
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
      * Returns a content tree for the SCRIPT tag for the main page(index.html).
      *
      * @return a content for the SCRIPT tag
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/markup/package-info.java	Mon Oct 28 18:30:14 2013 -0400
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2007, 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.  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.
+ */
+
+/**
+    This package contains classes that write HTML markup tags.
+
+    <p><b>This is NOT part of any supported API.
+    If you write code that depends on this, you do so at your own risk.
+    This code and its internal interfaces are subject to change or
+    deletion without notice.</b>
+ */
+@jdk.Exported(false)
+package com.sun.tools.doclets.formats.html.markup;
--- a/src/share/classes/com/sun/tools/doclets/formats/html/markup/package.html	Fri Oct 11 17:51:08 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-<!--
- Copyright (c) 2003, 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.
--->
-
-<html>
-<head>
-<title>com.sun.tools.doclets.formats.html.markup package</title>
-<body bgcolor="white">
-        This package contains classes that write HTML markup tags.
-    </body>
-</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/formats/html/package-info.java	Mon Oct 28 18:30:14 2013 -0400
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2003, 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.  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.
+ */
+
+/**
+    This is the default doclet provided with JDK that produces Javadoc's
+    default HTML-formatted API output.  For more documentation
+    on this doclet, please refer to the link below.
+
+    @see <a href="http://www.java.sun.com/javadoc/standard-doclet.html">
+            http://www.java.sun.com/javadoc/standard-doclet.html </a>
+
+    <p><b>This is NOT part of any supported API.
+    If you write code that depends on this, you do so at your own risk.
+    This code and its internal interfaces are subject to change or
+    deletion without notice.</b>
+*/
+@jdk.Exported(false)
+package com.sun.tools.doclets.formats.html;
--- a/src/share/classes/com/sun/tools/doclets/formats/html/package.html	Fri Oct 11 17:51:08 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-<!--
- Copyright (c) 2003, 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.
--->
-
-<html>
-<head>
-<title>com.sun.tools.doclets.formats.html package</title>
-</head>
-<body bgcolor="white">
-        This is the default doclet provided with JDK that produces Javadoc's 
-        default HTML-formatted API output.  For more documentation
-        on this doclet, please refer to the link below.
-        
-        @see <a href="http://www.java.sun.com/javadoc/standard-doclet.html">
-                http://www.java.sun.com/javadoc/standard-doclet.html </a>
-    </body>
-</html>
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/AbstractDoclet.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/AbstractDoclet.java	Mon Oct 28 18:30:14 2013 -0400
@@ -83,6 +83,16 @@
         } catch (Configuration.Fault f) {
             root.printError(f.getMessage());
             return false;
+        } catch (DocletAbortException e) {
+            Throwable cause = e.getCause();
+            if (cause != null) {
+                if (cause.getLocalizedMessage() != null) {
+                    root.printError(cause.getLocalizedMessage());
+                } else {
+                    root.printError(cause.toString());
+                }
+            }
+            return false;
         } catch (Exception exc) {
             exc.printStackTrace();
             return false;
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/AbstractBuilder.java	Mon Oct 28 18:30:14 2013 -0400
@@ -140,7 +140,7 @@
             configuration.root.printError("Unknown element: " + component);
             throw new DocletAbortException(e);
         } catch (InvocationTargetException e) {
-            e.getCause().printStackTrace();
+            throw new DocletAbortException(e.getCause());
         } catch (Exception e) {
             e.printStackTrace();
             configuration.root.printError("Exception " +
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/package-info.java	Mon Oct 28 18:30:14 2013 -0400
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2003, 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.  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.
+ */
+
+/**
+    This doclet-independent package has a set of classes and
+    interfaces that are the building blocks for doclets. They
+    define the basic structure of doclets and make doclet
+    writing much easier because they provide the content generation
+    code to be shared among different doclets. Builders only provide
+    the structure and content of API documentation.
+    They will not provide any style markup.
+
+    <p><b>This is NOT part of any supported API.
+    If you write code that depends on this, you do so at your own risk.
+    This code and its internal interfaces are subject to change or
+    deletion without notice.</b>
+*/
+@jdk.Exported(false)
+package com.sun.tools.doclets.internal.toolkit.builders;
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/builders/package.html	Fri Oct 11 17:51:08 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-<!--
- Copyright (c) 2003, 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.
--->
-
-<html>
-<head>
-<title>com.sun.tools.doclets.internal.toolkit.builders package</title>
-</head>
-<body bgcolor="white">
-        This doclet-independent package has a set of classes and 
-        interfaces that are the building blocks for doclets. They 
-        define the basic structure of doclets and make doclet
-        writing much easier because they provide the content generation 
-        code to be shared among different doclets. Builders only provide 
-        the structure and content of API documentation.
-        They will not provide any style markup.
-        <p>
-        This code is not part of an API.
-        It is implementation that is subject to change.
-        Do not use it as an API.
-    </body>
-</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/package-info.java	Mon Oct 28 18:30:14 2013 -0400
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) 2003, 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.  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.
+ */
+
+/**
+    Contains the base classes that make up a doclet.  Doclets that reuse
+    the functionality provided by the toolkit should have the following
+    characteristics:
+    <ul>
+        <li>
+            The main driver class should extend
+            {@link com.sun.tools.doclets.internal.toolkit.AbstractDoclet}.
+        </li>
+        <li>
+            The doclet configuration class should extend
+            {@link com.sun.tools.doclets.internal.toolkit.Configuration}.
+        </li>
+        <li>
+            The doclet should have a writer factory that implements
+            {@link com.sun.tools.doclets.internal.toolkit.WriterFactory}.
+            This class constructs writers that write doclet specific output.
+        </li>
+        <li>
+            The doclet should have a taglet writer that extends
+            {@link com.sun.tools.doclets.internal.toolkit.taglets.TagletWriter}.
+             This writer determines how to output each given tag.
+        </li>
+    </ul>
+
+    <p><b>This is NOT part of any supported API.
+    If you write code that depends on this, you do so at your own risk.
+    This code and its internal interfaces are subject to change or
+    deletion without notice.</b>
+*/
+@jdk.Exported(false)
+package com.sun.tools.doclets.internal.toolkit;
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/package.html	Fri Oct 11 17:51:08 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-<!--
- Copyright (c) 2003, 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.
--->
-
-<html>
-<head>
-<title>com.sun.tools.doclets.internal.toolkit package</title>
-</head>
-<body bgcolor="white">
-
-        Contains the base classes that make up a doclet.  Doclets that reuse
-        the functionality provided by the toolkit should have the following
-        characteristics:
-        <ul>
-            <li> 
-                The main driver class should extend 
-                {@link com.sun.tools.doclets.internal.toolkit.AbstractDoclet}.
-            </li>
-            <li> 
-                The doclet configuration class should extend 
-                {@link com.sun.tools.doclets.internal.toolkit.Configuration}.
-            </li>
-            <li> 
-                The doclet should have a writer factory that implements
-                {@link com.sun.tools.doclets.internal.toolkit.WriterFactory}.  
-                This class constructs writers that write doclet specific output.
-            </li>
-            <li> 
-                The doclet should have a taglet writer that extends
-                {@link com.sun.tools.doclets.internal.toolkit.taglets.TagletWriter}. 
-                 This writer determines how to output each given tag.
-            </li>
-    </body>
-</html>
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/stylesheet.css	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/resources/stylesheet.css	Mon Oct 28 18:30:14 2013 -0400
@@ -348,27 +348,16 @@
 /*
 Table styles
 */
-.contentContainer table, .classUseContainer table, .constantValuesContainer table {
+.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary {
     border-bottom:1px solid #9eadc0;
+    margin:0 0 12px 0px;
     width:100%;
 }
-.contentContainer ul li table, .classUseContainer ul li table, .constantValuesContainer ul li table {
-    width:100%;
+.overviewSummary, .memberSummary  {
+    padding:0px;
 }
-.contentContainer .description table, .contentContainer .details table {
-    border-bottom:none;
-}
-.contentContainer ul li table th.colOne, .contentContainer ul li table th.colFirst, .contentContainer ul li table th.colLast, .classUseContainer ul li table th, .constantValuesContainer ul li table th, .contentContainer ul li table td.colOne, .contentContainer ul li table td.colFirst, .contentContainer ul li table td.colLast, .classUseContainer ul li table td, .constantValuesContainer ul li table td{
-    vertical-align:top;
-    padding-right:20px;
-}
-.contentContainer ul li table th.colLast, .classUseContainer ul li table th.colLast,.constantValuesContainer ul li table th.colLast,
-.contentContainer ul li table td.colLast, .classUseContainer ul li table td.colLast,.constantValuesContainer ul li table td.colLast,
-.contentContainer ul li table th.colOne, .classUseContainer ul li table th.colOne,
-.contentContainer ul li table td.colOne, .classUseContainer ul li table td.colOne {
-    padding-right:3px;
-}
-.overviewSummary caption, .packageSummary caption, .contentContainer ul.blockList li.blockList caption, .summary caption, .classUseContainer caption, .constantValuesContainer caption {
+.overviewSummary caption, .memberSummary caption, .typeSummary caption,
+.useSummary caption, .constantsSummary caption, .deprecatedSummary caption {
     position:relative;
     text-align:left;
     background-repeat:no-repeat;
@@ -379,10 +368,18 @@
     padding:0px;
     margin:0px;
 }
-caption a:link, caption a:hover, caption a:active, caption a:visited {
+.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link,
+.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link,
+.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover,
+.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover,
+.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active,
+.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active,
+.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited,
+.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited {
     color:#FFFFFF;
 }
-.overviewSummary caption span, .packageSummary caption span, .contentContainer ul.blockList li.blockList caption span, .summary caption span, .classUseContainer caption span, .constantValuesContainer caption span {
+.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,
+.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span {
     white-space:nowrap;
     padding-top:8px;
     padding-left:8px;
@@ -390,7 +387,7 @@
     float:left;
     background-image:url(resources/titlebar.gif);
 }
-.contentContainer ul.blockList li.blockList caption span.activeTableTab span {
+.memberSummary caption span.activeTableTab span {
     white-space:nowrap;
     padding-top:8px;
     padding-left:8px;
@@ -398,7 +395,7 @@
     float:left;
     background-image:url(resources/activetitlebar.gif);
 }
-.contentContainer ul.blockList li.blockList caption span.tableTab span {
+.memberSummary caption span.tableTab span {
     white-space:nowrap;
     padding-top:8px;
     padding-left:8px;
@@ -406,14 +403,15 @@
     float:left;
     background-image:url(resources/titlebar.gif);
 }
-.contentContainer ul.blockList li.blockList caption span.tableTab, .contentContainer ul.blockList li.blockList caption span.activeTableTab {
+.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab {
     padding-top:0px;
     padding-left:0px;
     background-image:none;
     float:none;
     display:inline-block;
 }
-.overviewSummary .tabEnd, .packageSummary .tabEnd, .contentContainer ul.blockList li.blockList .tabEnd, .summary .tabEnd, .classUseContainer .tabEnd, .constantValuesContainer .tabEnd {
+.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd,
+.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd {
     width:10px;
     background-image:url(resources/titlebar_end.gif);
     background-repeat:no-repeat;
@@ -421,7 +419,7 @@
     position:relative;
     float:left;
 }
-.contentContainer ul.blockList li.blockList .activeTableTab .tabEnd {
+.memberSummary .activeTableTab .tabEnd {
     width:10px;
     margin-right:5px;
     background-image:url(resources/activetitlebar_end.gif);
@@ -430,7 +428,7 @@
     position:relative;
     float:left;
 }
-.contentContainer ul.blockList li.blockList .tableTab .tabEnd {
+.memberSummary .tableTab .tabEnd {
     width:10px;
     margin-right:5px;
     background-image:url(resources/titlebar_end.gif);
@@ -439,33 +437,23 @@
     position:relative;
     float:left;
 }
-ul.blockList ul.blockList li.blockList table {
-    margin:0 0 12px 0px;
-    width:100%;
-}
-.tableSubHeadingColor {
-    background-color: #EEEEFF;
-}
-.altColor {
-    background-color:#eeeeef;
-}
-.rowColor {
-    background-color:#ffffff;
-}
-.overviewSummary td, .packageSummary td, .contentContainer ul.blockList li.blockList td, .summary td, .classUseContainer td, .constantValuesContainer td {
+.overviewSummary td, .memberSummary td, .typeSummary td,
+.useSummary td, .constantsSummary td, .deprecatedSummary td {
     text-align:left;
     padding:3px 3px 3px 7px;
 }
-th.colFirst, th.colLast, th.colOne, .constantValuesContainer th {
+th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th,
+td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{
+    vertical-align:top;
+    padding-right:3px;
+}
+th.colFirst, th.colLast, th.colOne, .constantsSummary th {
     background:#dee3e9;
     border-top:1px solid #9eadc0;
     border-bottom:1px solid #9eadc0;
     text-align:left;
     padding:3px 3px 3px 7px;
 }
-td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover {
-    font-weight:bold;
-}
 td.colFirst, th.colFirst {
     border-left:1px solid #9eadc0;
     white-space:nowrap;
@@ -477,18 +465,25 @@
     border-right:1px solid #9eadc0;
     border-left:1px solid #9eadc0;
 }
-table.overviewSummary  {
-    padding:0px;
-    margin-left:0px;
-}
-table.overviewSummary td.colFirst, table.overviewSummary th.colFirst,
-table.overviewSummary td.colOne, table.overviewSummary th.colOne {
+.overviewSummary td.colFirst, .overviewSummary th.colFirst,
+.overviewSummary td.colOne, .overviewSummary th.colOne,
+.memberSummary td.colFirst, .memberSummary th.colFirst,
+.memberSummary td.colOne, .memberSummary th.colOne,
+.typeSummary td.colFirst{
     width:25%;
     vertical-align:middle;
 }
-table.packageSummary td.colFirst, table.overviewSummary th.colFirst {
-    width:25%;
-    vertical-align:middle;
+td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover {
+    font-weight:bold;
+}
+.tableSubHeadingColor {
+    background-color: #EEEEFF;
+}
+.altColor {
+    background-color:#eeeeef;
+}
+.rowColor {
+    background-color:#ffffff;
 }
 /*
 Content styles
@@ -519,9 +514,11 @@
     display:block;
     margin:3px 0 0 0;
 }
-.strong {
+.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink,
+.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel,
+.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink {
     font-weight:bold;
 }
-.italic {
+.deprecationComment, .emphasizedPhrase, .interfaceName {
     font-style:italic;
 }
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/TagletManager.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/TagletManager.java	Mon Oct 28 18:30:14 2013 -0400
@@ -205,6 +205,10 @@
         }
     }
 
+    public Set<String> getCustomTagNames() {
+        return customTags.keySet();
+    }
+
     /**
      * Add a new <code>Taglet</code>.  Print a message to indicate whether or not
      * the Taglet was registered properly.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/package-info.java	Mon Oct 28 18:30:14 2013 -0400
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2003, 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.  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.
+ */
+
+/**
+    This package has classes used to generate Javadoc tag documentation.
+    Doclets no longer have to implement its own version of standard tags
+    such as &#64;param and &#64;throws.  This is the single, doclet
+    implementation of each standard tag that is shared by all
+    doclets.  Each doclet must have a taglet writer that takes a taglet
+    as input and writes doclet-dependent output. The taglet itself will
+    do the tag processing. For example, suppose we are outputing
+    &#64;throws tags. The taglet would:
+    <ul>
+        <li> Retrieve the list of throws tags to be documented.
+        <li> Replace {&#64;inheritDoc} with the appropriate documentation.
+        <li> Add throws documentation for exceptions that are declared in
+             the signature of the method but
+             not documented with the throws tags.
+    </ul>
+    After doing the steps above, the taglet would pass the information to
+    the taglet writer for writing. The taglets are essentially builders for
+    tags.
+
+    <p><b>This is NOT part of any supported API.
+    If you write code that depends on this, you do so at your own risk.
+    This code and its internal interfaces are subject to change or
+    deletion without notice.</b>
+*/
+@jdk.Exported(false)
+package com.sun.tools.doclets.internal.toolkit.taglets;
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/taglets/package.html	Fri Oct 11 17:51:08 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-<!--
- Copyright (c) 2003, 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.
--->
-
-<html>
-<head>
-<title>com.sun.tools.doclets.internal.toolkit.taglets package</title>
-</head>
-<body bgcolor="white">
-        This package has classes used to generate Javadoc tag documentation. 
-        Doclets no longer have to implement its own version of standard tags 
-        such as &#64;param and &#64;throws.  This is the single, doclet 
-        implementation of each standard tag that is shared by all
-        doclets.  Each doclet must have a taglet writer that takes a taglet 
-        as input and writes doclet-dependent output. The taglet itself will 
-        do the tag processing. For example, suppose we are outputing
-        &#64;throws tags. The taglet would:
-        <ul>
-            <li> Retrieve the list of throws tags to be documented.
-            <li> Replace {&#64;inheritDoc} with the appropriate documentation.
-            <li> Add throws documentation for exceptions that are declared in 
-            	 the signature of the method but
-                 not documented with the throws tags.
-        </ul>
-        After doing the steps above, the taglet would pass the information to 
-        the taglet writer for writing. The taglets are essentially builders for 
-        tags.
-        <p>
-        This code is not part of an API.
-        It is implementation that is subject to change.
-        Do not use it as an API.
-    </body>
-</html>
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DocletConstants.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/DocletConstants.java	Mon Oct 28 18:30:14 2013 -0400
@@ -58,9 +58,4 @@
      * The default package file name.
      */
     public static final String DEFAULT_PACKAGE_FILE_NAME = "default";
-
-    /**
-     * The anchor for the default package.
-     */
-    public static final String UNNAMED_PACKAGE_ANCHOR = "unnamed_package";
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/package-info.java	Mon Oct 28 18:30:14 2013 -0400
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2003, 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.  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.
+ */
+
+/**
+    Provides a factory for constructing links.
+
+    <p><b>This is NOT part of any supported API.
+    If you write code that depends on this, you do so at your own risk.
+    This code and its internal interfaces are subject to change or
+    deletion without notice.</b>
+*/
+@jdk.Exported(false)
+package com.sun.tools.doclets.internal.toolkit.util.links;
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/links/package.html	Fri Oct 11 17:51:08 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-<!--
- Copyright (c) 2003, 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.
--->
-
-<html>
-<head>
-<title>com.sun.tools.doclets.interal.toolkit.util.links package</title>
-</head>
-<body bgcolor="white">
-        Provides a factory for constructing links.
-    </body>
-</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/package-info.java	Mon Oct 28 18:30:14 2013 -0400
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2003, 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.  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.
+ */
+
+/**
+    This package has utility classes that perform common services required
+    for API documentation generation.
+
+    <p><b>This is NOT part of any supported API.
+    If you write code that depends on this, you do so at your own risk.
+    This code and its internal interfaces are subject to change or
+    deletion without notice.</b>
+*/
+@jdk.Exported(false)
+package com.sun.tools.doclets.internal.toolkit.util;
--- a/src/share/classes/com/sun/tools/doclets/internal/toolkit/util/package.html	Fri Oct 11 17:51:08 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-<!--
- Copyright (c) 2003, 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.
--->
-
-<html>
-<head>
-<title>com.sun.tools.doclets.internal.toolkit.util package</title>
-</head>
-<body bgcolor="white">
-        This package has utility classes that perform common services required 
-        for API documentation generation.
-        <p>
-        This code is not part of an API.
-        It is implementation that is subject to change.
-        Do not use it as an API.
-    </body>
-</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/doclets/package-info.java	Mon Oct 28 18:30:14 2013 -0400
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2003, 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.  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.
+ */
+
+/**
+    As of JDK version 1.5, replaced by
+    {@code com.sun.tools.doclets.internal.toolkit.util}.
+
+    <p><b>This is NOT part of any supported API.
+    If you write code that depends on this, you do so at your own risk.
+    This code and its internal interfaces are subject to change or
+    deletion without notice.</b>
+*/
+@jdk.Exported(false)
+package com.sun.tools.doclets;
--- a/src/share/classes/com/sun/tools/doclets/package.html	Fri Oct 11 17:51:08 2013 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-<!--
- Copyright (c) 2003, 2012, 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.
--->
-
-<html>
-<head>
-<title>com.sun.tools/doclets package</title>
-</head>
-<body bgcolor="white">
-        As of JDK version 1.5, replaced by 
-        {@code com.sun.tools.doclets.internal.toolkit.util}.
-    </body>
-</html>
--- a/src/share/classes/com/sun/tools/doclint/Checker.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclint/Checker.java	Mon Oct 28 18:30:14 2013 -0400
@@ -71,6 +71,8 @@
 import com.sun.source.doctree.StartElementTree;
 import com.sun.source.doctree.TextTree;
 import com.sun.source.doctree.ThrowsTree;
+import com.sun.source.doctree.UnknownBlockTagTree;
+import com.sun.source.doctree.UnknownInlineTagTree;
 import com.sun.source.doctree.ValueTree;
 import com.sun.source.doctree.VersionTree;
 import com.sun.source.util.DocTreePath;
@@ -213,6 +215,7 @@
     public Void visitDocComment(DocCommentTree tree, Void ignore) {
         super.visitDocComment(tree, ignore);
         for (TagStackItem tsi: tagStack) {
+            warnIfEmpty(tsi, null);
             if (tsi.tree.getKind() == DocTree.Kind.START_ELEMENT
                     && tsi.tag.endKind == HtmlTag.EndKind.REQUIRED) {
                 StartElementTree t = (StartElementTree) tsi.tree;
@@ -270,7 +273,6 @@
 
     @Override
     public Void visitStartElement(StartElementTree tree, Void ignore) {
-        markEnclosingTag(Flag.HAS_ELEMENT);
         final Name treeName = tree.getName();
         final HtmlTag t = HtmlTag.get(treeName);
         if (t == null) {
@@ -279,7 +281,10 @@
             boolean done = false;
             for (TagStackItem tsi: tagStack) {
                 if (tsi.tag.accepts(t)) {
-                    while (tagStack.peek() != tsi) tagStack.pop();
+                    while (tagStack.peek() != tsi) {
+                        warnIfEmpty(tagStack.peek(), null);
+                        tagStack.pop();
+                    }
                     done = true;
                     break;
                 } else if (tsi.tag.endKind != HtmlTag.EndKind.OPTIONAL) {
@@ -288,9 +293,13 @@
                 }
             }
             if (!done && HtmlTag.BODY.accepts(t)) {
-                tagStack.clear();
+                while (!tagStack.isEmpty()) {
+                    warnIfEmpty(tagStack.peek(), null);
+                    tagStack.pop();
+                }
             }
 
+            markEnclosingTag(Flag.HAS_ELEMENT);
             checkStructure(tree, t);
 
             // tag specific checks
@@ -447,12 +456,7 @@
                                         "dc.no.summary.or.caption.for.table");
                             }
                     }
-                    if (t.flags.contains(HtmlTag.Flag.EXPECT_CONTENT)
-                            && !top.flags.contains(Flag.HAS_TEXT)
-                            && !top.flags.contains(Flag.HAS_ELEMENT)
-                            && !top.flags.contains(Flag.HAS_INLINE_TAG)) {
-                        env.messages.warning(HTML, tree, "dc.tag.empty", treeName);
-                    }
+                    warnIfEmpty(top, tree);
                     tagStack.pop();
                     done = true;
                     break;
@@ -485,6 +489,20 @@
 
         return super.visitEndElement(tree, ignore);
     }
+
+    void warnIfEmpty(TagStackItem tsi, DocTree endTree) {
+        if (tsi.tag != null && tsi.tree instanceof StartElementTree) {
+            if (tsi.tag.flags.contains(HtmlTag.Flag.EXPECT_CONTENT)
+                    && !tsi.flags.contains(Flag.HAS_TEXT)
+                    && !tsi.flags.contains(Flag.HAS_ELEMENT)
+                    && !tsi.flags.contains(Flag.HAS_INLINE_TAG)) {
+                DocTree tree = (endTree != null) ? endTree : tsi.tree;
+                Name treeName = ((StartElementTree) tsi.tree).getName();
+                env.messages.warning(HTML, tree, "dc.tag.empty", treeName);
+            }
+        }
+    }
+
     // </editor-fold>
 
     // <editor-fold defaultstate="collapsed" desc="HTML attributes">
@@ -826,6 +844,23 @@
     }
 
     @Override
+    public Void visitUnknownBlockTag(UnknownBlockTagTree tree, Void ignore) {
+        checkUnknownTag(tree, tree.getTagName());
+        return super.visitUnknownBlockTag(tree, ignore);
+    }
+
+    @Override
+    public Void visitUnknownInlineTag(UnknownInlineTagTree tree, Void ignore) {
+        checkUnknownTag(tree, tree.getTagName());
+        return super.visitUnknownInlineTag(tree, ignore);
+    }
+
+    private void checkUnknownTag(DocTree tree, String tagName) {
+        if (env.customTags != null && !env.customTags.contains(tagName))
+            env.messages.error(SYNTAX, tree, "dc.tag.unknown", tagName);
+    }
+
+    @Override
     public Void visitValue(ValueTree tree, Void ignore) {
         ReferenceTree ref = tree.getReference();
         if (ref == null || ref.getSignature().isEmpty()) {
--- a/src/share/classes/com/sun/tools/doclint/DocLint.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclint/DocLint.java	Mon Oct 28 18:30:14 2013 -0400
@@ -78,6 +78,8 @@
     public static final String XMSGS_CUSTOM_PREFIX = "-Xmsgs:";
     private static final String STATS = "-stats";
     public static final String XIMPLICIT_HEADERS = "-XimplicitHeaders:";
+    public static final String XCUSTOM_TAGS_PREFIX = "-XcustomTags:";
+    public static final String TAGS_SEPARATOR = ",";
 
     // <editor-fold defaultstate="collapsed" desc="Command-line entry point">
     public static void main(String... args) {
@@ -199,6 +201,8 @@
                 env.messages.setOptions(null);
             } else if (arg.startsWith(XMSGS_CUSTOM_PREFIX)) {
                 env.messages.setOptions(arg.substring(arg.indexOf(":") + 1));
+            } else if (arg.startsWith(XCUSTOM_TAGS_PREFIX)) {
+                env.setCustomTags(arg.substring(arg.indexOf(":") + 1));
             } else if (arg.equals("-h") || arg.equals("-help") || arg.equals("--help")
                     || arg.equals("-?") || arg.equals("-usage")) {
                 needHelp = true;
@@ -262,6 +266,8 @@
             } else if (arg.matches(XIMPLICIT_HEADERS + "[1-6]")) {
                 char ch = arg.charAt(arg.length() - 1);
                 env.setImplicitHeaders(Character.digit(ch, 10));
+            } else if (arg.startsWith(XCUSTOM_TAGS_PREFIX)) {
+                env.setCustomTags(arg.substring(arg.indexOf(":") + 1));
             } else
                 throw new IllegalArgumentException(arg);
         }
--- a/src/share/classes/com/sun/tools/doclint/Env.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/doclint/Env.java	Mon Oct 28 18:30:14 2013 -0400
@@ -27,6 +27,7 @@
 
 
 import java.util.Set;
+import java.util.LinkedHashSet;
 
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ElementKind;
@@ -86,6 +87,8 @@
 
     int implicitHeaderLevel = 0;
 
+    Set<String> customTags;
+
     // Utility classes
     DocTrees trees;
     Elements elements;
@@ -135,6 +138,14 @@
         implicitHeaderLevel = n;
     }
 
+    void setCustomTags(String cTags) {
+        customTags = new LinkedHashSet<String>();
+        for (String s : cTags.split(DocLint.TAGS_SEPARATOR)) {
+            if (!s.isEmpty())
+                customTags.add(s);
+        }
+    }
+
     /** Set the current declaration and its doc comment. */
     void setCurrent(TreePath path, DocCommentTree comment) {
         currPath = path;
--- a/src/share/classes/com/sun/tools/javac/Main.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/Main.java	Mon Oct 28 18:30:14 2013 -0400
@@ -31,7 +31,7 @@
  * The programmatic interface for the Java Programming Language
  * compiler, javac.
  */
-@jdk.Supported
+@jdk.Exported
 public class Main {
 
     /** Main entry point for the launcher.
--- a/src/share/classes/com/sun/tools/javac/api/JavacTool.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/api/JavacTool.java	Mon Oct 28 18:30:14 2013 -0400
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 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
@@ -120,7 +120,6 @@
         try {
             ClientCodeWrapper ccw = ClientCodeWrapper.instance(context);
 
-            final String kindMsg = "All compilation units must be of SOURCE kind";
             if (options != null)
                 for (String option : options)
                     option.getClass(); // null check
@@ -132,8 +131,11 @@
             if (compilationUnits != null) {
                 compilationUnits = ccw.wrapJavaFileObjects(compilationUnits); // implicit null check
                 for (JavaFileObject cu : compilationUnits) {
-                    if (cu.getKind() != JavaFileObject.Kind.SOURCE)
+                    if (cu.getKind() != JavaFileObject.Kind.SOURCE) {
+                        String kindMsg = "Compilation unit is not of SOURCE kind: "
+                                + "\"" + cu.getName() + "\"";
                         throw new IllegalArgumentException(kindMsg);
+                    }
                 }
             }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/share/classes/com/sun/tools/javac/code/AnnoConstruct.java	Mon Oct 28 18:30:14 2013 -0400
@@ -0,0 +1,249 @@
+/*
+ * Copyright (c) 2005, 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.  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.javac.code;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.Inherited;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import javax.lang.model.AnnotatedConstruct;
+
+import com.sun.tools.javac.model.AnnotationProxyMaker;
+import com.sun.tools.javac.util.List;
+import com.sun.tools.javac.util.ListBuffer;
+
+/**
+ * Common super type for annotated constructs such as Types and Symbols.
+ *
+ * This class should *not* contain any fields since it would have a significant
+ * impact on the javac memory footprint.
+ *
+ * <p><b>This is NOT part of any supported API.
+ * If you write code that depends on this, you do so at your own
+ * risk.  This code and its internal interfaces are subject to change
+ * or deletion without notice.</b></p>
+ */
+public abstract class AnnoConstruct implements AnnotatedConstruct {
+
+
+    // Override to enforce a narrower return type.
+    @Override
+    public abstract List<? extends Attribute.Compound> getAnnotationMirrors();
+
+
+    // This method is part of the javax.lang.model API, do not use this in javac code.
+    protected <A extends Annotation> Attribute.Compound getAttribute(Class<A> annoType) {
+        String name = annoType.getName();
+
+        for (Attribute.Compound anno : getAnnotationMirrors()) {
+            if (name.equals(anno.type.tsym.flatName().toString()))
+                return anno;
+        }
+
+        return null;
+    }
+
+
+    @SuppressWarnings("unchecked")
+    protected <A extends Annotation> A[] getInheritedAnnotations(Class<A> annoType) {
+        return (A[]) java.lang.reflect.Array.newInstance(annoType, 0);  // annoType is the Class for A
+    }
+
+
+    // This method is part of the javax.lang.model API, do not use this in javac code.
+    public <A extends Annotation> A[] getAnnotationsByType(Class<A> annoType) {
+
+        if (!annoType.isAnnotation())
+            throw new IllegalArgumentException("Not an annotation type: "
+                                               + annoType);
+        // If annoType does not declare a container this is equivalent to wrapping
+        // getAnnotation(...) in an array.
+        Class <? extends Annotation> containerType = getContainer(annoType);
+        if (containerType == null) {
+            A res = getAnnotation(annoType);
+            int size = res == null ? 0 : 1;
+
+            @SuppressWarnings("unchecked") // annoType is the Class for A
+            A[] arr = (A[])java.lang.reflect.Array.newInstance(annoType, size);
+            if (res != null)
+                arr[0] = res;
+            return arr;
+        }
+
+        // So we have a containing type
+        String annoTypeName = annoType.getName();
+        String containerTypeName = containerType.getName();
+        int directIndex = -1, containerIndex = -1;
+        Attribute.Compound direct = null, container = null;
+        // Find directly (explicit or implicit) present annotations
+        int index = -1;
+        for (Attribute.Compound attribute : getAnnotationMirrors()) {
+            index++;
+            if (attribute.type.tsym.flatName().contentEquals(annoTypeName)) {
+                directIndex = index;
+                direct = attribute;
+            } else if(containerTypeName != null &&
+                      attribute.type.tsym.flatName().contentEquals(containerTypeName)) {
+                containerIndex = index;
+                container = attribute;
+            }
+        }
+
+        // Deal with inherited annotations
+        if (direct == null && container == null &&
+                annoType.isAnnotationPresent(Inherited.class))
+            return getInheritedAnnotations(annoType);
+
+        Attribute.Compound[] contained = unpackContained(container);
+
+        // In case of an empty legacy container we might need to look for
+        // inherited annos as well
+        if (direct == null && contained.length == 0 &&
+                annoType.isAnnotationPresent(Inherited.class))
+            return getInheritedAnnotations(annoType);
+
+        int size = (direct == null ? 0 : 1) + contained.length;
+        @SuppressWarnings("unchecked") // annoType is the Class for A
+        A[] arr = (A[])java.lang.reflect.Array.newInstance(annoType, size);
+
+        // if direct && container, which is first?
+        int insert = -1;
+        int length = arr.length;
+        if (directIndex >= 0 && containerIndex >= 0) {
+            if (directIndex < containerIndex) {
+                arr[0] = AnnotationProxyMaker.generateAnnotation(direct, annoType);
+                insert = 1;
+            } else {
+                arr[arr.length - 1] = AnnotationProxyMaker.generateAnnotation(direct, annoType);
+                insert = 0;
+                length--;
+            }
+        } else if (directIndex >= 0) {
+            arr[0] = AnnotationProxyMaker.generateAnnotation(direct, annoType);
+            return arr;
+        } else {
+            // Only container
+            insert = 0;
+        }
+
+        for (int i = 0; i + insert < length; i++)
+            arr[insert + i] = AnnotationProxyMaker.generateAnnotation(contained[i], annoType);
+
+        return arr;
+    }
+
+    private Attribute.Compound[] unpackContained(Attribute.Compound container) {
+        // Pack them in an array
+        Attribute[] contained0 = null;
+        if (container != null)
+            contained0 = unpackAttributes(container);
+        ListBuffer<Attribute.Compound> compounds = new ListBuffer<>();
+        if (contained0 != null) {
+            for (Attribute a : contained0)
+                if (a instanceof Attribute.Compound)
+                    compounds = compounds.append((Attribute.Compound)a);
+        }
+        return compounds.toArray(new Attribute.Compound[compounds.size()]);
+    }
+
+    // This method is part of the javax.lang.model API, do not use this in javac code.
+    public <A extends Annotation> A getAnnotation(Class<A> annoType) {
+
+        if (!annoType.isAnnotation())
+            throw new IllegalArgumentException("Not an annotation type: " + annoType);
+
+        Attribute.Compound c = getAttribute(annoType);
+        return c == null ? null : AnnotationProxyMaker.generateAnnotation(c, annoType);
+    }
+
+    // Needed to unpack the runtime view of containing annotations
+    private static final Class<? extends Annotation> REPEATABLE_CLASS = initRepeatable();
+    private static final Method VALUE_ELEMENT_METHOD = initValueElementMethod();
+
+    private static Class<? extends Annotation> initRepeatable() {
+        try {
+            // Repeatable will not be available when bootstrapping on
+            // JDK 7 so use a reflective lookup instead of a class
+            // literal for Repeatable.class.
+            return Class.forName("java.lang.annotation.Repeatable").asSubclass(Annotation.class);
+        } catch (ClassNotFoundException | SecurityException e) {
+            return null;
+        }
+    }
+
+    private static Method initValueElementMethod() {
+        if (REPEATABLE_CLASS == null)
+            return null;
+
+        Method m = null;
+        try {
+            m = REPEATABLE_CLASS.getMethod("value");
+            if (m != null)
+                m.setAccessible(true);
+            return m;
+        } catch (NoSuchMethodException e) {
+            return null;
+        }
+    }
+
+
+    // Helper to getAnnotationsByType
+    private static Class<? extends Annotation> getContainer(Class<? extends Annotation> annoType) {
+        // Since we can not refer to java.lang.annotation.Repeatable until we are
+        // bootstrapping with java 8 we need to get the Repeatable annotation using
+        // reflective invocations instead of just using its type and element method.
+        if (REPEATABLE_CLASS != null &&
+            VALUE_ELEMENT_METHOD != null) {
+            // Get the Repeatable instance on the annotations declaration
+            Annotation repeatable = (Annotation)annoType.getAnnotation(REPEATABLE_CLASS);
+            if (repeatable != null) {
+                try {
+                    // Get the value element, it should be a class
+                    // indicating the containing annotation type
+                    @SuppressWarnings("unchecked")
+                    Class<? extends Annotation> containerType = (Class)VALUE_ELEMENT_METHOD.invoke(repeatable);
+                    if (containerType == null)
+                        return null;
+
+                    return containerType;
+                } catch (ClassCastException | IllegalAccessException | InvocationTargetException e) {
+                    return null;
+                }
+            }
+        }
+        return null;
+    }
+
+
+    // Helper to getAnnotationsByType
+    private static Attribute[] unpackAttributes(Attribute.Compound container) {
+        // We now have an instance of the container,
+        // unpack it returning an instance of the
+        // contained type or null
+        return ((Attribute.Array)container.member(container.type.tsym.name.table.names.value)).values;
+    }
+
+}
--- a/src/share/classes/com/sun/tools/javac/code/Attribute.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/code/Attribute.java	Mon Oct 28 18:30:14 2013 -0400
@@ -64,6 +64,8 @@
         return false;
     }
 
+    public TypeAnnotationPosition getPosition() { return null; };
+
     /** The value for an annotation element of primitive type or String. */
     public static class Constant extends Attribute {
         public final Object value;
@@ -191,8 +193,13 @@
         }
 
         public Attribute member(Name member) {
+            Pair<MethodSymbol,Attribute> res = getElemPair(member);
+            return res == null ? null : res.snd;
+        }
+
+        private Pair<MethodSymbol, Attribute> getElemPair(Name member) {
             for (Pair<MethodSymbol,Attribute> pair : values)
-                if (pair.fst.name == member) return pair.snd;
+                if (pair.fst.name == member) return pair;
             return null;
         }
 
@@ -208,6 +215,16 @@
             return (DeclaredType) type;
         }
 
+        @Override
+        public TypeAnnotationPosition getPosition() {
+            if (values.size() != 0) {
+                Name valueName = values.head.fst.name.table.names.value;
+                Pair<MethodSymbol, Attribute> res = getElemPair(valueName);
+                    return res == null ? null : res.snd.getPosition();
+            }
+            return null;
+        }
+
         public Map<MethodSymbol, Attribute> getElementValues() {
             Map<MethodSymbol, Attribute> valmap =
                 new LinkedHashMap<MethodSymbol, Attribute>();
@@ -219,6 +236,7 @@
 
     public static class TypeCompound extends Compound {
         public TypeAnnotationPosition position;
+
         public TypeCompound(Compound compound,
                 TypeAnnotationPosition position) {
             this(compound.type, compound.values, position);
@@ -230,8 +248,16 @@
             this.position = position;
         }
 
+        @Override
+        public TypeAnnotationPosition getPosition() {
+            if (hasUnknownPosition()) {
+                position = super.getPosition();
+            }
+            return position;
+        }
+
         public boolean hasUnknownPosition() {
-            return position == null || position.type == TargetType.UNKNOWN;
+            return position.type == TargetType.UNKNOWN;
         }
 
         public boolean isContainerTypeCompound() {
@@ -302,6 +328,14 @@
         public <R, P> R accept(AnnotationValueVisitor<R, P> v, P p) {
             return v.visitArray(getValue(), p);
         }
+
+        @Override
+        public TypeAnnotationPosition getPosition() {
+            if (values.length != 0)
+                return values[0].getPosition();
+            else
+                return null;
+        }
     }
 
     /** The value for an annotation element of an enum type.
--- a/src/share/classes/com/sun/tools/javac/code/Flags.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/code/Flags.java	Mon Oct 28 18:30:14 2013 -0400
@@ -270,6 +270,11 @@
      */
     public static final long POTENTIALLY_AMBIGUOUS = 1L<<48;
 
+    /**
+     * Flag that marks a synthetic method body for a lambda expression
+     */
+    public static final long LAMBDA_METHOD = 1L<<49;
+
     /** Modifier masks.
      */
     public static final int
@@ -378,7 +383,8 @@
         NOT_IN_PROFILE(Flags.NOT_IN_PROFILE),
         BAD_OVERRIDE(Flags.BAD_OVERRIDE),
         SIGNATURE_POLYMORPHIC(Flags.SIGNATURE_POLYMORPHIC),
-        THROWS(Flags.THROWS);
+        THROWS(Flags.THROWS),
+        LAMBDA_METHOD(Flags.LAMBDA_METHOD);
 
         Flag(long flag) {
             this.value = flag;
--- a/src/share/classes/com/sun/tools/javac/code/Printer.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/code/Printer.java	Mon Oct 28 18:30:14 2013 -0400
@@ -260,24 +260,23 @@
 
     @Override
     public String visitAnnotatedType(AnnotatedType t, Locale locale) {
-        if (t.typeAnnotations != null &&
-                t.typeAnnotations.nonEmpty()) {
-            if (t.underlyingType.hasTag(TypeTag.ARRAY)) {
+        if (t.getAnnotationMirrors().nonEmpty()) {
+            if (t.unannotatedType().hasTag(TypeTag.ARRAY)) {
                 StringBuilder res = new StringBuilder();
                 printBaseElementType(t, res, locale);
                 printBrackets(t, res, locale);
                 return res.toString();
-            } else if (t.underlyingType.hasTag(TypeTag.CLASS) &&
-                    t.underlyingType.getEnclosingType() != Type.noType) {
-                return visit(t.underlyingType.getEnclosingType(), locale) +
+            } else if (t.unannotatedType().hasTag(TypeTag.CLASS) &&
+                    t.unannotatedType().getEnclosingType() != Type.noType) {
+                return visit(t.unannotatedType().getEnclosingType(), locale) +
                         ". " +
-                        t.typeAnnotations +
-                        " " + className((ClassType)t.underlyingType, false, locale);
+                        t.getAnnotationMirrors() +
+                        " " + className((ClassType)t.unannotatedType(), false, locale);
             } else {
-                return t.typeAnnotations + " " + visit(t.underlyingType, locale);
+                return t.getAnnotationMirrors() + " " + visit(t.unannotatedType(), locale);
             }
         } else {
-            return visit(t.underlyingType, locale);
+            return visit(t.unannotatedType(), locale);
         }
     }
 
--- a/src/share/classes/com/sun/tools/javac/code/Symbol.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/code/Symbol.java	Mon Oct 28 18:30:14 2013 -0400
@@ -25,6 +25,8 @@
 
 package com.sun.tools.javac.code;
 
+import java.lang.annotation.Annotation;
+import java.lang.annotation.Inherited;
 import java.util.Set;
 import java.util.concurrent.Callable;
 
@@ -37,8 +39,6 @@
 import com.sun.tools.javac.comp.AttrContext;
 import com.sun.tools.javac.comp.Env;
 import com.sun.tools.javac.jvm.*;
-import com.sun.tools.javac.model.*;
-import com.sun.tools.javac.tree.JCTree;
 import com.sun.tools.javac.util.*;
 import com.sun.tools.javac.util.Name;
 import static com.sun.tools.javac.code.Flags.*;
@@ -58,8 +58,7 @@
  *  This code and its internal interfaces are subject to change or
  *  deletion without notice.</b>
  */
-public abstract class Symbol implements Element {
-    // public Throwable debug = new Throwable();
+public abstract class Symbol extends AnnoConstruct implements Element {
 
     /** The kind of this symbol.
      *  @see Kinds
@@ -101,16 +100,17 @@
     /** The attributes of this symbol are contained in this
      * SymbolMetadata. The SymbolMetadata instance is NOT immutable.
      */
-    protected SymbolMetadata annotations;
+    protected SymbolMetadata metadata;
+
 
     /** An accessor method for the attributes of this symbol.
      *  Attributes of class symbols should be accessed through the accessor
      *  method to make sure that the class symbol is loaded.
      */
     public List<Attribute.Compound> getRawAttributes() {
-        return (annotations == null)
+        return (metadata == null)
                 ? List.<Attribute.Compound>nil()
-                : annotations.getDeclarationAttributes();
+                : metadata.getDeclarationAttributes();
     }
 
     /** An accessor method for the type attributes of this symbol.
@@ -118,9 +118,9 @@
      *  method to make sure that the class symbol is loaded.
      */
     public List<Attribute.TypeCompound> getRawTypeAttributes() {
-        return (annotations == null)
+        return (metadata == null)
                 ? List.<Attribute.TypeCompound>nil()
-                : annotations.getTypeAttributes();
+                : metadata.getTypeAttributes();
     }
 
     /** Fetch a particular annotation from a symbol. */
@@ -132,106 +132,106 @@
     }
 
     public boolean annotationsPendingCompletion() {
-        return annotations == null ? false : annotations.pendingCompletion();
+        return metadata == null ? false : metadata.pendingCompletion();
     }
 
     public void appendAttributes(List<Attribute.Compound> l) {
         if (l.nonEmpty()) {
-            initedAnnos().append(l);
+            initedMetadata().append(l);
         }
     }
 
     public void appendClassInitTypeAttributes(List<Attribute.TypeCompound> l) {
         if (l.nonEmpty()) {
-            initedAnnos().appendClassInitTypeAttributes(l);
+            initedMetadata().appendClassInitTypeAttributes(l);
         }
     }
 
     public void appendInitTypeAttributes(List<Attribute.TypeCompound> l) {
         if (l.nonEmpty()) {
-            initedAnnos().appendInitTypeAttributes(l);
+            initedMetadata().appendInitTypeAttributes(l);
         }
     }
 
     public void appendTypeAttributesWithCompletion(final Annotate.AnnotateRepeatedContext<Attribute.TypeCompound> ctx) {
-        initedAnnos().appendTypeAttributesWithCompletion(ctx);
+        initedMetadata().appendTypeAttributesWithCompletion(ctx);
     }
 
     public void appendUniqueTypeAttributes(List<Attribute.TypeCompound> l) {
         if (l.nonEmpty()) {
-            initedAnnos().appendUniqueTypes(l);
+            initedMetadata().appendUniqueTypes(l);
         }
     }
 
     public List<Attribute.TypeCompound> getClassInitTypeAttributes() {
-        return (annotations == null)
+        return (metadata == null)
                 ? List.<Attribute.TypeCompound>nil()
-                : annotations.getClassInitTypeAttributes();
+                : metadata.getClassInitTypeAttributes();
     }
 
     public List<Attribute.TypeCompound> getInitTypeAttributes() {
-        return (annotations == null)
+        return (metadata == null)
                 ? List.<Attribute.TypeCompound>nil()
-                : annotations.getInitTypeAttributes();
+                : metadata.getInitTypeAttributes();
     }
 
     public List<Attribute.Compound> getDeclarationAttributes() {
-        return (annotations == null)
+        return (metadata == null)
                 ? List.<Attribute.Compound>nil()
-                : annotations.getDeclarationAttributes();
+                : metadata.getDeclarationAttributes();
     }
 
     public boolean hasAnnotations() {
-        return (annotations != null && !annotations.isEmpty());
+        return (metadata != null && !metadata.isEmpty());
     }
 
     public boolean hasTypeAnnotations() {
-        return (annotations != null && !annotations.isTypesEmpty());
+        return (metadata != null && !metadata.isTypesEmpty());
     }
 
     public void prependAttributes(List<Attribute.Compound> l) {
         if (l.nonEmpty()) {
-            initedAnnos().prepend(l);
+            initedMetadata().prepend(l);
         }
     }
 
     public void resetAnnotations() {
-        initedAnnos().reset();
+        initedMetadata().reset();
     }
 
     public void setAttributes(Symbol other) {
-        if (annotations != null || other.annotations != null) {
-            initedAnnos().setAttributes(other.annotations);
+        if (metadata != null || other.metadata != null) {
+            initedMetadata().setAttributes(other.metadata);
         }
     }
 
     public void setDeclarationAttributes(List<Attribute.Compound> a) {
-        if (annotations != null || a.nonEmpty()) {
-            initedAnnos().setDeclarationAttributes(a);
+        if (metadata != null || a.nonEmpty()) {
+            initedMetadata().setDeclarationAttributes(a);
         }
     }
 
     public void setDeclarationAttributesWithCompletion(final Annotate.AnnotateRepeatedContext<Attribute.Compound> ctx) {
-        initedAnnos().setDeclarationAttributesWithCompletion(ctx);
+        initedMetadata().setDeclarationAttributesWithCompletion(ctx);
     }
 
     public void setTypeAttributes(List<Attribute.TypeCompound> a) {
-        if (annotations != null || a.nonEmpty()) {
-            if (annotations == null)
-                annotations = new SymbolMetadata(this);
-            annotations.setTypeAttributes(a);
+        if (metadata != null || a.nonEmpty()) {
+            if (metadata == null)
+                metadata = new SymbolMetadata(this);
+            metadata.setTypeAttributes(a);
         }
     }
 
-    private SymbolMetadata initedAnnos() {
-        if (annotations == null)
-            annotations = new SymbolMetadata(this);
-        return annotations;
+    private SymbolMetadata initedMetadata() {
+        if (metadata == null)
+            metadata = new SymbolMetadata(this);
+        return metadata;
     }
 
     /** This method is intended for debugging only. */
-    public SymbolMetadata getAnnotations() {
-        return annotations;
+    public SymbolMetadata getMetadata() {
+        return metadata;
     }
 
     // </editor-fold>
@@ -327,7 +327,8 @@
     public boolean isStatic() {
         return
             (flags() & STATIC) != 0 ||
-            (owner.flags() & INTERFACE) != 0 && kind != MTH;
+            (owner.flags() & INTERFACE) != 0 && kind != MTH &&
+             name != name.table.names._this;
     }
 
     public boolean isInterface() {
@@ -595,18 +596,6 @@
         return getRawAttributes();
     }
 
-    /**
-     * @deprecated this method should never be used by javac internally.
-     */
-    @Deprecated
-    public <A extends java.lang.annotation.Annotation> A getAnnotation(Class<A> annoType) {
-        return JavacAnnoConstructs.getAnnotation(this, annoType);
-    }
-
-    // This method is part of the javax.lang.model API, do not use this in javac code.
-    public <A extends java.lang.annotation.Annotation> A[] getAnnotationsByType(Class<A> annoType) {
-        return JavacAnnoConstructs.getAnnotationsByType(this, annoType);
-    }
 
     // TODO: getEnclosedElements should return a javac List, fix in FilteredMemberList
     public java.util.List<Symbol> getEnclosedElements() {
@@ -792,6 +781,28 @@
             return res = res.reverse();
         }
 
+
+
+        // Helper to getAnnotation[s]
+        @Override
+        public <A extends Annotation> Attribute.Compound getAttribute(Class<A> annoType) {
+
+            String name = annoType.getName();
+
+            // Declaration annotations on type variables are stored in type attributes
+            // on the owner of the TypeVariableSymbol
+            List<Attribute.TypeCompound> candidates = owner.getRawTypeAttributes();
+            for (Attribute.TypeCompound anno : candidates)
+                if (anno.position.type == TargetType.CLASS_TYPE_PARAMETER ||
+                        anno.position.type == TargetType.METHOD_TYPE_PARAMETER)
+                    if (name.contentEquals(anno.type.tsym.flatName()))
+                        return anno;
+
+            return null;
+        }
+
+
+
         @Override
         public <R, P> R accept(ElementVisitor<R, P> v, P p) {
             return v.visitTypeParameter(this, p);
@@ -851,10 +862,10 @@
         }
 
         private void mergeAttributes() {
-            if (annotations == null &&
-                package_info.annotations != null) {
-                annotations = new SymbolMetadata(this);
-                annotations.setAttributes(package_info.annotations);
+            if (metadata == null &&
+                package_info.metadata != null) {
+                metadata = new SymbolMetadata(this);
+                metadata.setAttributes(package_info.metadata);
             }
         }
 
@@ -1048,6 +1059,31 @@
             }
         }
 
+        /**
+         * Returns the next class to search for inherited annotations or {@code null}
+         * if the next class can't be found.
+         */
+        private ClassSymbol getSuperClassToSearchForAnnotations() {
+
+            Type sup = getSuperclass();
+
+            if (!sup.hasTag(CLASS) || sup.isErroneous())
+                return null;
+
+            return (ClassSymbol) sup.tsym;
+        }
+
+
+        @Override
+        protected <A extends Annotation> A[] getInheritedAnnotations(Class<A> annoType) {
+
+            ClassSymbol sup = getSuperClassToSearchForAnnotations();
+
+            return sup == null ? super.getInheritedAnnotations(annoType)
+                               : sup.getAnnotationsByType(annoType);
+        }
+
+
         public ElementKind getKind() {
             long flags = flags();
             if ((flags & ANNOTATION) != 0)
@@ -1060,6 +1096,12 @@
                 return ElementKind.CLASS;
         }
 
+        @Override
+        public Set<Modifier> getModifiers() {
+            long flags = flags();
+            return Flags.asModifierSet(flags & ~DEFAULT);
+        }
+
         public NestingKind getNestingKind() {
             complete();
             if (owner.kind == PCK)
@@ -1072,15 +1114,25 @@
                 return NestingKind.MEMBER;
         }
 
-        /**
-         * Since this method works in terms of the runtime representation
-         * of annotations, it should never be used by javac internally.
-         */
+
         @Override
-        public <A extends java.lang.annotation.Annotation> A getAnnotation(Class<A> annoType) {
-            return JavacAnnoConstructs.getAnnotation(this, annoType);
+        protected <A extends Annotation> Attribute.Compound getAttribute(final Class<A> annoType) {
+
+            Attribute.Compound attrib = super.getAttribute(annoType);
+
+            boolean inherited = annoType.isAnnotationPresent(Inherited.class);
+            if (attrib != null || !inherited)
+                return attrib;
+
+            // Search supertypes
+            ClassSymbol superType = getSuperClassToSearchForAnnotations();
+            return superType == null ? null
+                                     : superType.getAttribute(annoType);
         }
 
+
+
+
         public <R, P> R accept(ElementVisitor<R, P> v, P p) {
             return v.visitType(this, p);
         }
--- a/src/share/classes/com/sun/tools/javac/code/SymbolMetadata.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/code/SymbolMetadata.java	Mon Oct 28 18:30:14 2013 -0400
@@ -205,14 +205,14 @@
 
             // Queue a pass that will replace Attribute.Placeholders
             // with Attribute.Compound (made from synthesized containers).
-            ctx.annotateRepeated(new Annotate.Annotator() {
+            ctx.annotateRepeated(new Annotate.Worker() {
                 @Override
                 public String toString() {
                     return "repeated annotation pass of: " + sym + " in: " + sym.owner;
                 }
 
                 @Override
-                public void enterAnnotation() {
+                public void run() {
                     complete(ctx);
                 }
             });
@@ -429,7 +429,7 @@
             super(on.type, List.<Pair<Symbol.MethodSymbol, Attribute>>nil(),
                     ctx.isTypeCompound ?
                             ((Attribute.TypeCompound)placeholderFor.head).position :
-                                null);
+                                new TypeAnnotationPosition());
             this.ctx = ctx;
             this.placeholderFor = placeholderFor;
             this.on = on;
--- a/src/share/classes/com/sun/tools/javac/code/Type.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/code/Type.java	Mon Oct 28 18:30:14 2013 -0400
@@ -35,7 +35,6 @@
 import javax.lang.model.type.*;
 
 import com.sun.tools.javac.code.Symbol.*;
-import com.sun.tools.javac.model.JavacAnnoConstructs;
 import com.sun.tools.javac.util.*;
 import static com.sun.tools.javac.code.BoundKind.*;
 import static com.sun.tools.javac.code.Flags.*;
@@ -70,7 +69,7 @@
  *
  *  @see TypeTag
  */
-public abstract class Type implements TypeMirror {
+public abstract class Type extends AnnoConstruct implements TypeMirror {
 
     /** Constant type: no type at all. */
     public static final JCNoType noType = new JCNoType();
@@ -166,6 +165,12 @@
         return lb.toList();
     }
 
+    /**For ErrorType, returns the original type, otherwise returns the type itself.
+     */
+    public Type getOriginalType() {
+        return this;
+    }
+
     public <R,S> R accept(Type.Visitor<R,S> v, S s) { return v.visitType(this, s); }
 
     /** Define a type given its tag and type symbol
@@ -220,6 +225,10 @@
         return this;
     }
 
+    public Type annotatedType(List<Attribute.TypeCompound> annos) {
+        return new AnnotatedType(annos, this);
+    }
+
     public boolean isAnnotated() {
         return false;
     }
@@ -233,15 +242,17 @@
     }
 
     @Override
-    public List<? extends Attribute.TypeCompound> getAnnotationMirrors() {
+    public List<Attribute.TypeCompound> getAnnotationMirrors() {
         return List.nil();
     }
 
+
     @Override
     public <A extends Annotation> A getAnnotation(Class<A> annotationType) {
         return null;
     }
 
+
     @Override
     public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType) {
         @SuppressWarnings("unchecked")
@@ -1651,6 +1662,9 @@
         public <R, P> R accept(TypeVisitor<R, P> v, P p) {
             return v.visitNoType(this, p);
         }
+
+        @Override
+        public boolean isCompound() { return false; }
     }
 
     /** Represents VOID.
@@ -1672,6 +1686,9 @@
         }
 
         @Override
+        public boolean isCompound() { return false; }
+
+        @Override
         public <R, P> R accept(TypeVisitor<R, P> v, P p) {
             return v.visitNoType(this, p);
         }
@@ -1698,6 +1715,9 @@
         }
 
         @Override
+        public boolean isCompound() { return false; }
+
+        @Override
         public <R, P> R accept(TypeVisitor<R, P> v, P p) {
             return v.visitNull(this, p);
         }
@@ -1802,25 +1822,19 @@
                 javax.lang.model.type.WildcardType {
         /** The type annotations on this type.
          */
-        public List<Attribute.TypeCompound> typeAnnotations;
+        private List<Attribute.TypeCompound> typeAnnotations;
 
         /** The underlying type that is annotated.
          */
-        public Type underlyingType;
+        private Type underlyingType;
 
-        public AnnotatedType(Type underlyingType) {
-            super(underlyingType.tsym);
-            this.typeAnnotations = List.nil();
-            this.underlyingType = underlyingType;
-            Assert.check(!underlyingType.isAnnotated(),
-                    "Can't annotate already annotated type: " + underlyingType);
-        }
-
-        public AnnotatedType(List<Attribute.TypeCompound> typeAnnotations,
+        protected AnnotatedType(List<Attribute.TypeCompound> typeAnnotations,
                 Type underlyingType) {
             super(underlyingType.tsym);
             this.typeAnnotations = typeAnnotations;
             this.underlyingType = underlyingType;
+            Assert.check(typeAnnotations != null && typeAnnotations.nonEmpty(),
+                    "Can't create AnnotatedType without annotations: " + underlyingType);
             Assert.check(!underlyingType.isAnnotated(),
                     "Can't annotate already annotated type: " + underlyingType +
                     "; adding: " + typeAnnotations);
@@ -1837,19 +1851,10 @@
         }
 
         @Override
-        public List<? extends Attribute.TypeCompound> getAnnotationMirrors() {
+        public List<Attribute.TypeCompound> getAnnotationMirrors() {
             return typeAnnotations;
         }
 
-        @Override
-        public <A extends Annotation> A getAnnotation(Class<A> annotationType) {
-            return JavacAnnoConstructs.getAnnotation(this, annotationType);
-        }
-
-        @Override
-        public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType) {
-            return JavacAnnoConstructs.getAnnotationsByType(this, annotationType);
-        }
 
         @Override
         public TypeKind getKind() {
@@ -1970,10 +1975,8 @@
         public TypeMirror getComponentType()     { return ((ArrayType)underlyingType).getComponentType(); }
 
         // The result is an ArrayType, but only in the model sense, not the Type sense.
-        public AnnotatedType makeVarargs() {
-            AnnotatedType atype = new AnnotatedType(((ArrayType)underlyingType).makeVarargs());
-            atype.typeAnnotations = this.typeAnnotations;
-            return atype;
+        public Type makeVarargs() {
+            return ((ArrayType) underlyingType).makeVarargs().annotatedType(typeAnnotations);
         }
 
         @Override
--- a/src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java	Mon Oct 28 18:30:14 2013 -0400
@@ -49,7 +49,8 @@
 import com.sun.tools.javac.code.Symbol.VarSymbol;
 import com.sun.tools.javac.code.Symbol.MethodSymbol;
 import com.sun.tools.javac.comp.Annotate;
-import com.sun.tools.javac.comp.Annotate.Annotator;
+import com.sun.tools.javac.comp.Annotate.Worker;
+import com.sun.tools.javac.comp.Attr;
 import com.sun.tools.javac.comp.AttrContext;
 import com.sun.tools.javac.comp.Env;
 import com.sun.tools.javac.tree.JCTree;
@@ -71,6 +72,7 @@
 import com.sun.tools.javac.util.ListBuffer;
 import com.sun.tools.javac.util.Log;
 import com.sun.tools.javac.util.Names;
+import com.sun.tools.javac.util.Options;
 
 /**
  * Contains operations specific to processing type annotations.
@@ -94,6 +96,7 @@
     final Names names;
     final Symtab syms;
     final Annotate annotate;
+    final Attr attr;
 
     protected TypeAnnotations(Context context) {
         context.put(typeAnnosKey, this);
@@ -101,6 +104,8 @@
         log = Log.instance(context);
         syms = Symtab.instance(context);
         annotate = Annotate.instance(context);
+        attr = Attr.instance(context);
+        Options options = Options.instance(context);
     }
 
     /**
@@ -109,13 +114,13 @@
      * This version only visits types in signatures and should be
      * called from MemberEnter.
      * The method takes the Annotate object as parameter and
-     * adds an Annotator to the correct Annotate queue for
+     * adds an Annotate.Worker to the correct Annotate queue for
      * later processing.
      */
     public void organizeTypeAnnotationsSignatures(final Env<AttrContext> env, final JCClassDecl tree) {
-        annotate.afterRepeated( new Annotator() {
+        annotate.afterRepeated( new Worker() {
             @Override
-            public void enterAnnotation() {
+            public void run() {
                 JavaFileObject oldSource = log.useSource(env.toplevel.sourcefile);
 
                 try {
@@ -127,6 +132,21 @@
         } );
     }
 
+    public void validateTypeAnnotationsSignatures(final Env<AttrContext> env, final JCClassDecl tree) {
+        annotate.validate(new Worker() { //validate annotations
+            @Override
+            public void run() {
+                JavaFileObject oldSource = log.useSource(env.toplevel.sourcefile);
+
+                try {
+                    attr.validateTypeAnnotations(tree, true);
+                } finally {
+                    log.useSource(oldSource);
+                }
+            }
+        } );
+    }
+
     /**
      * This version only visits types in bodies, that is, field initializers,
      * top-level blocks, and method bodies, and should be called from Attr.
@@ -265,13 +285,10 @@
          */
         private void separateAnnotationsKinds(JCTree typetree, Type type, Symbol sym,
                 TypeAnnotationPosition pos) {
-            /*
-            System.out.printf("separateAnnotationsKinds(typetree: %s, type: %s, symbol: %s, pos: %s%n",
-                    typetree, type, sym, pos);
-            */
             List<Attribute.Compound> annotations = sym.getRawAttributes();
             ListBuffer<Attribute.Compound> declAnnos = new ListBuffer<Attribute.Compound>();
             ListBuffer<Attribute.TypeCompound> typeAnnos = new ListBuffer<Attribute.TypeCompound>();
+            ListBuffer<Attribute.TypeCompound> onlyTypeAnnos = new ListBuffer<Attribute.TypeCompound>();
 
             for (Attribute.Compound a : annotations) {
                 switch (annotationType(a, sym)) {
@@ -287,6 +304,8 @@
                 case TYPE: {
                     Attribute.TypeCompound ta = toTypeCompound(a, pos);
                     typeAnnos.append(ta);
+                    // Also keep track which annotations are only type annotations
+                    onlyTypeAnnos.append(ta);
                     break;
                 }
                 }
@@ -304,13 +323,22 @@
             if (type == null) {
                 // When type is null, put the type annotations to the symbol.
                 // This is used for constructor return annotations, for which
-                // no appropriate type exists.
+                // we use the type of the enclosing class.
+                type = sym.getEnclosingElement().asType();
+
+                // Declaration annotations are always allowed on constructor returns.
+                // Therefore, use typeAnnotations instead of onlyTypeAnnos.
+                type = typeWithAnnotations(typetree, type, typeAnnotations, typeAnnotations);
+                // Note that we don't use the result, the call to
+                // typeWithAnnotations side-effects the type annotation positions.
+                // This is important for constructors of nested classes.
+
                 sym.appendUniqueTypeAttributes(typeAnnotations);
                 return;
             }
 
             // type is non-null and annotations are added to that type
-            type = typeWithAnnotations(typetree, type, typeAnnotations);
+            type = typeWithAnnotations(typetree, type, typeAnnotations, onlyTypeAnnos.toList());
 
             if (sym.getKind() == ElementKind.METHOD) {
                 sym.type.asMethodType().restype = type;
@@ -342,9 +370,9 @@
             sym.appendUniqueTypeAttributes(typeAnnotations);
 
             if (sym.getKind() == ElementKind.PARAMETER ||
-                    sym.getKind() == ElementKind.LOCAL_VARIABLE ||
-                    sym.getKind() == ElementKind.RESOURCE_VARIABLE ||
-                    sym.getKind() == ElementKind.EXCEPTION_PARAMETER) {
+                sym.getKind() == ElementKind.LOCAL_VARIABLE ||
+                sym.getKind() == ElementKind.RESOURCE_VARIABLE ||
+                sym.getKind() == ElementKind.EXCEPTION_PARAMETER) {
                 // Make sure all type annotations from the symbol are also
                 // on the owner.
                 sym.owner.appendUniqueTypeAttributes(sym.getRawTypeAttributes());
@@ -362,45 +390,34 @@
         // As a side effect the method sets the type annotation position of "annotations".
         // Note that it is assumed that all annotations share the same position.
         private Type typeWithAnnotations(final JCTree typetree, final Type type,
-                final List<Attribute.TypeCompound> annotations) {
-            // System.out.printf("typeWithAnnotations(typetree: %s, type: %s, annotations: %s)%n",
-            //         typetree, type, annotations);
+                final List<Attribute.TypeCompound> annotations,
+                final List<Attribute.TypeCompound> onlyTypeAnnotations) {
+            // System.out.printf("typeWithAnnotations(typetree: %s, type: %s, annotations: %s, onlyTypeAnnotations: %s)%n",
+            //         typetree, type, annotations, onlyTypeAnnotations);
             if (annotations.isEmpty()) {
                 return type;
             }
             if (type.hasTag(TypeTag.ARRAY)) {
+                Type.ArrayType arType = (Type.ArrayType) type.unannotatedType();
+                Type.ArrayType tomodify = new Type.ArrayType(null, arType.tsym);
                 Type toreturn;
-                Type.ArrayType tomodify;
-                Type.ArrayType arType;
-                {
-                    Type touse = type;
-                    if (type.isAnnotated()) {
-                        Type.AnnotatedType atype = (Type.AnnotatedType)type;
-                        toreturn = new Type.AnnotatedType(atype.underlyingType);
-                        ((Type.AnnotatedType)toreturn).typeAnnotations = atype.typeAnnotations;
-                        touse = atype.underlyingType;
-                        arType = (Type.ArrayType) touse;
-                        tomodify = new Type.ArrayType(null, arType.tsym);
-                        ((Type.AnnotatedType)toreturn).underlyingType = tomodify;
-                    } else {
-                        arType = (Type.ArrayType) touse;
-                        tomodify = new Type.ArrayType(null, arType.tsym);
-                        toreturn = tomodify;
-                    }
+                if (type.isAnnotated()) {
+                    toreturn = tomodify.annotatedType(type.getAnnotationMirrors());
+                } else {
+                    toreturn = tomodify;
                 }
+
                 JCArrayTypeTree arTree = arrayTypeTree(typetree);
 
                 ListBuffer<TypePathEntry> depth = new ListBuffer<>();
                 depth = depth.append(TypePathEntry.ARRAY);
                 while (arType.elemtype.hasTag(TypeTag.ARRAY)) {
                     if (arType.elemtype.isAnnotated()) {
-                        Type.AnnotatedType aelemtype = (Type.AnnotatedType) arType.elemtype;
-                        Type.AnnotatedType newAT = new Type.AnnotatedType(aelemtype.underlyingType);
-                        tomodify.elemtype = newAT;
-                        newAT.typeAnnotations = aelemtype.typeAnnotations;
-                        arType = (Type.ArrayType) aelemtype.underlyingType;
+                        Type aelemtype = arType.elemtype;
+                        arType = (Type.ArrayType) aelemtype.unannotatedType();
+                        ArrayType prevToMod = tomodify;
                         tomodify = new Type.ArrayType(null, arType.tsym);
-                        newAT.underlyingType = tomodify;
+                        prevToMod.elemtype = tomodify.annotatedType(arType.elemtype.getAnnotationMirrors());
                     } else {
                         arType = (Type.ArrayType) arType.elemtype;
                         tomodify.elemtype = new Type.ArrayType(null, arType.tsym);
@@ -409,7 +426,7 @@
                     arTree = arrayTypeTree(arTree.elemtype);
                     depth = depth.append(TypePathEntry.ARRAY);
                 }
-                Type arelemType = typeWithAnnotations(arTree.elemtype, arType.elemtype, annotations);
+                Type arelemType = typeWithAnnotations(arTree.elemtype, arType.elemtype, annotations, onlyTypeAnnotations);
                 tomodify.elemtype = arelemType;
                 {
                     // All annotations share the same position; modify the first one.
@@ -426,7 +443,7 @@
                 // There is a TypeKind, but no TypeTag.
                 JCTypeUnion tutree = (JCTypeUnion) typetree;
                 JCExpression fst = tutree.alternatives.get(0);
-                Type res = typeWithAnnotations(fst, fst.type, annotations);
+                Type res = typeWithAnnotations(fst, fst.type, annotations, onlyTypeAnnotations);
                 fst.type = res;
                 // TODO: do we want to set res as first element in uct.alternatives?
                 // UnionClassType uct = (com.sun.tools.javac.code.Type.UnionClassType)type;
@@ -465,14 +482,23 @@
                  * but nothing more exists.
                  */
                 if (enclTy != null &&
-                        enclTy.getKind() == TypeKind.NONE &&
-                        (enclTr.getKind() == JCTree.Kind.IDENTIFIER ||
-                         enclTr.getKind() == JCTree.Kind.MEMBER_SELECT ||
-                         enclTr.getKind() == JCTree.Kind.PARAMETERIZED_TYPE ||
-                         enclTr.getKind() == JCTree.Kind.ANNOTATED_TYPE)) {
-                    // TODO: also if it's "java. @A lang.Object", that is,
-                    // if it's on a package?
-                    log.error(enclTr.pos(), "cant.annotate.nested.type", enclTr.toString());
+                        enclTy.hasTag(TypeTag.NONE)) {
+                    switch (onlyTypeAnnotations.size()) {
+                    case 0:
+                        // Don't issue an error if all type annotations are
+                        // also declaration annotations.
+                        // If the annotations are also declaration annotations, they are
+                        // illegal as type annotations but might be legal as declaration annotations.
+                        // The normal declaration annotation checks make sure that the use is valid.
+                        break;
+                    case 1:
+                        log.error(typetree.pos(), "cant.type.annotate.scoping.1",
+                                onlyTypeAnnotations);
+                        break;
+                    default:
+                        log.error(typetree.pos(), "cant.type.annotate.scoping",
+                                onlyTypeAnnotations);
+                    }
                     return type;
                 }
 
@@ -551,7 +577,7 @@
                     // assert that t.constValue() == null?
                     if (t == stopAt ||
                         t.getEnclosingType() == Type.noType) {
-                        return new AnnotatedType(s, t);
+                        return t.annotatedType(s);
                     } else {
                         ClassType ret = new ClassType(t.getEnclosingType().accept(this, s),
                                 t.typarams_field, t.tsym);
@@ -566,12 +592,12 @@
 
                 @Override
                 public Type visitAnnotatedType(AnnotatedType t, List<TypeCompound> s) {
-                    return new AnnotatedType(t.typeAnnotations, t.underlyingType.accept(this, s));
+                    return t.unannotatedType().accept(this, s).annotatedType(t.getAnnotationMirrors());
                 }
 
                 @Override
                 public Type visitWildcardType(WildcardType t, List<TypeCompound> s) {
-                    return new AnnotatedType(s, t);
+                    return t.annotatedType(s);
                 }
 
                 @Override
@@ -594,12 +620,12 @@
 
                 @Override
                 public Type visitTypeVar(TypeVar t, List<TypeCompound> s) {
-                    return new AnnotatedType(s, t);
+                    return t.annotatedType(s);
                 }
 
                 @Override
                 public Type visitCapturedType(CapturedType t, List<TypeCompound> s) {
-                    return new AnnotatedType(s, t);
+                    return t.annotatedType(s);
                 }
 
                 @Override
@@ -616,12 +642,12 @@
 
                 @Override
                 public Type visitErrorType(ErrorType t, List<TypeCompound> s) {
-                    return new AnnotatedType(s, t);
+                    return t.annotatedType(s);
                 }
 
                 @Override
                 public Type visitType(Type t, List<TypeCompound> s) {
-                    return new AnnotatedType(s, t);
+                    return t.annotatedType(s);
                 }
             };
 
@@ -1023,9 +1049,7 @@
         @Override
         public void visitMethodDef(final JCMethodDecl tree) {
             if (tree.sym == null) {
-                // Something most be wrong, e.g. a class not found.
-                // Quietly ignore. (See test FailOver15.java)
-                return;
+                Assert.error("Visiting tree node before memberEnter");
             }
             if (sigOnly) {
                 if (!tree.mods.annotations.isEmpty()) {
@@ -1129,7 +1153,7 @@
                 // Nothing to do for separateAnnotationsKinds if
                 // there are no annotations of either kind.
             } else if (tree.sym == null) {
-                // Something is wrong already. Quietly ignore.
+                Assert.error("Visiting tree node before memberEnter");
             } else if (tree.sym.getKind() == ElementKind.PARAMETER) {
                 // Parameters are handled in visitMethodDef or visitLambda.
             } else if (tree.sym.getKind() == ElementKind.FIELD) {
@@ -1197,6 +1221,22 @@
             super.visitTypeParameter(tree);
         }
 
+        private void copyNewClassAnnotationsToOwner(JCNewClass tree) {
+            Symbol sym = tree.def.sym;
+            TypeAnnotationPosition pos = new TypeAnnotationPosition();
+            ListBuffer<Attribute.TypeCompound> newattrs =
+                new ListBuffer<Attribute.TypeCompound>();
+
+            for (Attribute.TypeCompound old : sym.getRawTypeAttributes()) {
+                newattrs.append(new Attribute.TypeCompound(old.type, old.values,
+                                                           pos));
+            }
+
+            pos.type = TargetType.NEW;
+            pos.pos = tree.pos;
+            sym.owner.appendUniqueTypeAttributes(newattrs.toList());
+        }
+
         @Override
         public void visitNewClass(JCNewClass tree) {
             if (tree.def != null &&
@@ -1215,7 +1255,7 @@
                 }
                 Type before = classdecl.sym.type;
                 separateAnnotationsKinds(classdecl, tree.clazz.type, classdecl.sym, pos);
-
+                copyNewClassAnnotationsToOwner(tree);
                 // classdecl.sym.type now contains an annotated type, which
                 // is not what we want there.
                 // TODO: should we put this type somewhere in the superclass/interface?
@@ -1282,9 +1322,9 @@
         private void findPosition(JCTree tree, JCTree frame, List<JCAnnotation> annotations) {
             if (!annotations.isEmpty()) {
                 /*
-                System.out.println("Finding pos for: " + annotations);
-                System.out.println("    tree: " + tree + " kind: " + tree.getKind());
-                System.out.println("    frame: " + frame + " kind: " + frame.getKind());
+                System.err.println("Finding pos for: " + annotations);
+                System.err.println("    tree: " + tree + " kind: " + tree.getKind());
+                System.err.println("    frame: " + frame + " kind: " + frame.getKind());
                 */
                 TypeAnnotationPosition p = new TypeAnnotationPosition();
                 p.onLambda = currentLambda;
--- a/src/share/classes/com/sun/tools/javac/code/Types.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/code/Types.java	Mon Oct 28 18:30:14 2013 -0400
@@ -246,7 +246,7 @@
             public Type visitClassType(ClassType t, Symbol sym) {
                 if (t.tsym == sym)
                     return t;
-                Type base = asSuper(sym.type, t.tsym);
+                Type base = asSuper(sym.type, t);
                 if (base == null)
                     return null;
                 ListBuffer<Type> from = new ListBuffer<Type>();
@@ -689,7 +689,7 @@
                         (t.flags() & SYNTHETIC) == 0;
             }
         };
-        private boolean pendingBridges(ClassSymbol origin, TypeSymbol s) {
+        private boolean pendingBridges(ClassSymbol origin, TypeSymbol sym) {
             //a symbol will be completed from a classfile if (a) symbol has
             //an associated file object with CLASS kind and (b) the symbol has
             //not been entered
@@ -698,11 +698,11 @@
                     enter.getEnv(origin) == null) {
                 return false;
             }
-            if (origin == s) {
+            if (origin == sym) {
                 return true;
             }
             for (Type t : interfaces(origin.type)) {
-                if (pendingBridges((ClassSymbol)t.tsym, s)) {
+                if (pendingBridges((ClassSymbol)t.tsym, sym)) {
                     return true;
                 }
             }
@@ -763,7 +763,7 @@
             } else if (t.hasTag(TYPEVAR)) {
                 return isSubtypeUnchecked(t.getUpperBound(), s, warn);
             } else if (!s.isRaw()) {
-                Type t2 = asSuper(t, s.tsym);
+                Type t2 = asSuper(t, s);
                 if (t2 != null && t2.isRaw()) {
                     if (isReifiable(s)) {
                         warn.silentWarn(LintCategory.UNCHECKED);
@@ -916,7 +916,7 @@
 
             @Override
             public Boolean visitClassType(ClassType t, Type s) {
-                Type sup = asSuper(t, s.tsym);
+                Type sup = asSuper(t, s);
                 return sup != null
                     && sup.tsym == s.tsym
                     // You're not allowed to write
@@ -1275,7 +1275,7 @@
                     return false;
                 if (!s.getAnnotationMirrors().containsAll(t.getAnnotationMirrors()))
                     return false;
-                return visit(t.underlyingType, s);
+                return visit(t.unannotatedType(), s);
             }
         };
     // </editor-fold>
@@ -1937,30 +1937,42 @@
      * @param t a type
      * @param sym a symbol
      */
-    public Type asSuper(Type t, Symbol sym) {
-        return asSuper.visit(t, sym);
+    public Type asSuper(Type t, Symbol s) {
+        return asSuper(t, s.type);
+    }
+
+    public Type asSuper(Type t, Type s) {
+        return asSuper.visit(t, s);
     }
     // where
-        private SimpleVisitor<Type,Symbol> asSuper = new SimpleVisitor<Type,Symbol>() {
-
-            public Type visitType(Type t, Symbol sym) {
+        private SimpleVisitor<Type,Type> asSuper = new SimpleVisitor<Type,Type>() {
+
+            public Type visitType(Type t, Type s) {
                 return null;
             }
 
             @Override
-            public Type visitClassType(ClassType t, Symbol sym) {
-                if (t.tsym == sym)
+            public Type visitClassType(ClassType t, Type s) {
+                if (t.tsym == s.tsym)
                     return t;
 
                 Type st = supertype(t);
-                if (st.hasTag(CLASS) || st.hasTag(TYPEVAR) || st.hasTag(ERROR)) {
-                    Type x = asSuper(st, sym);
+
+                switch(st.getTag()) {
+                default: break;
+                case CLASS:
+                case ARRAY:
+                case TYPEVAR:
+                case ERROR: {
+                    Type x = asSuper(st, s);
                     if (x != null)
                         return x;
+                } break;
                 }
-                if ((sym.flags() & INTERFACE) != 0) {
+
+                if ((s.tsym.flags() & INTERFACE) != 0) {
                     for (List<Type> l = interfaces(t); l.nonEmpty(); l = l.tail) {
-                        Type x = asSuper(l.head, sym);
+                        Type x = asSuper(l.head, s);
                         if (x != null)
                             return x;
                     }
@@ -1969,22 +1981,20 @@
             }
 
             @Override
-            public Type visitArrayType(ArrayType t, Symbol sym) {
-                return isSubtype(t, sym.type) ? sym.type : null;
+            public Type visitArrayType(ArrayType t, Type s) {
+                return isSubtype(t, s) ? s : null;
             }
 
             @Override
-            public Type visitTypeVar(TypeVar t, Symbol sym) {
-                if (t.tsym == sym)
+            public Type visitTypeVar(TypeVar t, Type s) {
+                if (t.tsym == s.tsym)
                     return t;
                 else
-                    return asSuper(t.bound, sym);
+                    return asSuper(t.bound, s);
             }
 
             @Override
-            public Type visitErrorType(ErrorType t, Symbol sym) {
-                return t;
-            }
+            public Type visitErrorType(ErrorType t, Type s) { return t; }
         };
 
     /**
@@ -2209,15 +2219,15 @@
 
             @Override
             public Type visitAnnotatedType(AnnotatedType t, Boolean recurse) {
-                Type erased = erasure(t.underlyingType, recurse);
+                Type erased = erasure(t.unannotatedType(), recurse);
                 if (erased.isAnnotated()) {
                     // This can only happen when the underlying type is a
                     // type variable and the upper bound of it is annotated.
                     // The annotation on the type variable overrides the one
                     // on the bound.
-                    erased = ((AnnotatedType)erased).underlyingType;
+                    erased = ((AnnotatedType)erased).unannotatedType();
                 }
-                return new AnnotatedType(t.typeAnnotations, erased);
+                return erased.annotatedType(t.getAnnotationMirrors());
             }
         };
 
@@ -3565,9 +3575,9 @@
             //step 3 - for each element G in MEC, compute lci(Inv(G))
             List<Type> candidates = List.nil();
             for (Type erasedSupertype : mec) {
-                List<Type> lci = List.of(asSuper(ts.head, erasedSupertype.tsym));
+                List<Type> lci = List.of(asSuper(ts.head, erasedSupertype));
                 for (Type t : ts) {
-                    lci = intersect(lci, List.of(asSuper(t, erasedSupertype.tsym)));
+                    lci = intersect(lci, List.of(asSuper(t, erasedSupertype)));
                 }
                 candidates = candidates.appendList(lci);
             }
@@ -3987,7 +3997,7 @@
         // The arguments to the supers could be unified here to
         // get a more accurate analysis
         while (commonSupers.nonEmpty()) {
-            Type t1 = asSuper(from, commonSupers.head.tsym);
+            Type t1 = asSuper(from, commonSupers.head);
             Type t2 = commonSupers.head; // same as asSuper(to, commonSupers.head.tsym);
             if (disjointTypes(t1.getTypeArguments(), t2.getTypeArguments()))
                 return false;
@@ -4018,7 +4028,7 @@
             from = target;
         }
         Assert.check((from.tsym.flags() & FINAL) != 0);
-        Type t1 = asSuper(from, to.tsym);
+        Type t1 = asSuper(from, to);
         if (t1 == null) return false;
         Type t2 = to;
         if (disjointTypes(t1.getTypeArguments(), t2.getTypeArguments()))
@@ -4411,7 +4421,7 @@
         public R visitUndetVar(UndetVar t, S s)         { return visitType(t, s); }
         public R visitErrorType(ErrorType t, S s)       { return visitType(t, s); }
         // Pretend annotations don't exist
-        public R visitAnnotatedType(AnnotatedType t, S s) { return visit(t.underlyingType, s); }
+        public R visitAnnotatedType(AnnotatedType t, S s) { return visit(t.unannotatedType(), s); }
     }
 
     /**
--- a/src/share/classes/com/sun/tools/javac/comp/Annotate.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/comp/Annotate.java	Mon Oct 28 18:30:14 2013 -0400
@@ -37,6 +37,7 @@
 import static com.sun.tools.javac.code.TypeTag.ARRAY;
 import static com.sun.tools.javac.code.TypeTag.CLASS;
 import static com.sun.tools.javac.tree.JCTree.Tag.*;
+import javax.lang.model.type.ErrorType;
 
 /** Enter annotations on symbols.  Annotations accumulate in a queue,
  *  which is processed at the top level of any set of recursive calls
@@ -87,31 +88,36 @@
 
     private int enterCount = 0;
 
-    ListBuffer<Annotator> q = new ListBuffer<Annotator>();
-    ListBuffer<Annotator> typesQ = new ListBuffer<Annotator>();
-    ListBuffer<Annotator> repeatedQ = new ListBuffer<Annotator>();
-    ListBuffer<Annotator> afterRepeatedQ = new ListBuffer<Annotator>();
+    ListBuffer<Worker> q = new ListBuffer<Worker>();
+    ListBuffer<Worker> typesQ = new ListBuffer<Worker>();
+    ListBuffer<Worker> repeatedQ = new ListBuffer<Worker>();
+    ListBuffer<Worker> afterRepeatedQ = new ListBuffer<Worker>();
+    ListBuffer<Worker> validateQ = new ListBuffer<Worker>();
 
-    public void earlier(Annotator a) {
+    public void earlier(Worker a) {
         q.prepend(a);
     }
 
-    public void normal(Annotator a) {
+    public void normal(Worker a) {
         q.append(a);
     }
 
-    public void typeAnnotation(Annotator a) {
+    public void typeAnnotation(Worker a) {
         typesQ.append(a);
     }
 
-    public void repeated(Annotator a) {
+    public void repeated(Worker a) {
         repeatedQ.append(a);
     }
 
-    public void afterRepeated(Annotator a) {
+    public void afterRepeated(Worker a) {
         afterRepeatedQ.append(a);
     }
 
+    public void validate(Worker a) {
+        validateQ.append(a);
+    }
+
     /** Called when the Enter phase starts. */
     public void enterStart() {
         enterCount++;
@@ -123,34 +129,45 @@
         flush();
     }
 
+    /** Variant which allows for a delayed flush of annotations.
+     * Needed by ClassReader */
+    public void enterDoneWithoutFlush() {
+        enterCount--;
+    }
+
     public void flush() {
         if (enterCount != 0) return;
         enterCount++;
         try {
             while (q.nonEmpty()) {
-                q.next().enterAnnotation();
+                q.next().run();
             }
             while (typesQ.nonEmpty()) {
-                typesQ.next().enterAnnotation();
+                typesQ.next().run();
             }
             while (repeatedQ.nonEmpty()) {
-                repeatedQ.next().enterAnnotation();
+                repeatedQ.next().run();
             }
             while (afterRepeatedQ.nonEmpty()) {
-                afterRepeatedQ.next().enterAnnotation();
+                afterRepeatedQ.next().run();
+            }
+            while (validateQ.nonEmpty()) {
+                validateQ.next().run();
             }
         } finally {
             enterCount--;
         }
     }
 
-    /** A client that has annotations to add registers an annotator,
-     *  the method it will use to add the annotation.  There are no
-     *  parameters; any needed data should be captured by the
-     *  Annotator.
+    /** A client that needs to run during {@link #flush()} registers an worker
+     *  into one of the queues defined in this class. The queues are: {@link #earlier(Worker)},
+     *  {@link #normal(Worker)}, {@link #typeAnnotation(Worker)}, {@link #repeated(Worker)},
+     *  {@link #afterRepeated(Worker)}, {@link #validate(Worker)}.
+     *  The {@link Worker#run()} method will called inside the {@link #flush()}
+     *  call. Queues are empties in the abovementioned order.
      */
-    public interface Annotator {
-        void enterAnnotation();
+    public interface Worker {
+        void run();
         String toString();
     }
 
@@ -195,12 +212,12 @@
         }
 
         /**
-         * Queue the Annotator a on the repeating annotations queue of the
+         * Queue the Worker a on the repeating annotations queue of the
          * Annotate instance this context belongs to.
          *
-         * @param a the Annotator to enqueue for repeating annotation annotating
+         * @param a the Worker to enqueue for repeating annotation annotating
          */
-        public void annotateRepeated(Annotator a) {
+        public void annotateRepeated(Worker a) {
             Annotate.this.repeated(a);
         }
     }
@@ -239,7 +256,8 @@
         a.type = chk.checkType(a.annotationType.pos(), at, expected);
         if (a.type.isErroneous()) {
             if (typeAnnotation) {
-                return new Attribute.TypeCompound(a.type, List.<Pair<MethodSymbol,Attribute>>nil(), null);
+                return new Attribute.TypeCompound(a.type, List.<Pair<MethodSymbol,Attribute>>nil(),
+                        new TypeAnnotationPosition());
             } else {
                 return new Attribute.Compound(a.type, List.<Pair<MethodSymbol,Attribute>>nil());
             }
@@ -317,50 +335,9 @@
             expected.tsym.complete();
         } catch(CompletionFailure e) {
             log.error(tree.pos(), "cant.resolve", Kinds.kindName(e.sym), e.sym);
-            return new Attribute.Error(expected);
+            expected = syms.errType;
         }
-        if (expected.isPrimitive() || types.isSameType(expected, syms.stringType)) {
-            Type result = attr.attribExpr(tree, env, expected);
-            if (result.isErroneous())
-                return new Attribute.Error(expected);
-            if (result.constValue() == null) {
-                log.error(tree.pos(), "attribute.value.must.be.constant");
-                return new Attribute.Error(expected);
-            }
-            result = cfolder.coerce(result, expected);
-            return new Attribute.Constant(expected, result.constValue());
-        }
-        if (expected.tsym == syms.classType.tsym) {
-            Type result = attr.attribExpr(tree, env, expected);
-            if (result.isErroneous()) {
-                // Does it look like a class literal?
-                if (TreeInfo.name(tree) == names._class) {
-                    Name n = (((JCFieldAccess) tree).selected).type.tsym.flatName();
-                    return new Attribute.UnresolvedClass(expected,
-                            types.createErrorType(n,
-                                    syms.unknownSymbol, syms.classType));
-                } else {
-                    return new Attribute.Error(expected);
-                }
-            }
-
-            // Class literals look like field accesses of a field named class
-            // at the tree level
-            if (TreeInfo.name(tree) != names._class) {
-                log.error(tree.pos(), "annotation.value.must.be.class.literal");
-                return new Attribute.Error(expected);
-            }
-            return new Attribute.Class(types,
-                                       (((JCFieldAccess) tree).selected).type);
-        }
-        if ((expected.tsym.flags() & Flags.ANNOTATION) != 0) {
-            if (!tree.hasTag(ANNOTATION)) {
-                log.error(tree.pos(), "annotation.value.must.be.annotation");
-                expected = syms.errorType;
-            }
-            return enterAnnotation((JCAnnotation)tree, expected, env);
-        }
-        if (expected.hasTag(ARRAY)) { // should really be isArray()
+        if (expected.hasTag(ARRAY)) {
             if (!tree.hasTag(NEWARRAY)) {
                 tree = make.at(tree.pos).
                     NewArray(null, List.<JCExpression>nil(), List.of(tree));
@@ -368,7 +345,6 @@
             JCNewArray na = (JCNewArray)tree;
             if (na.elemtype != null) {
                 log.error(na.elemtype.pos(), "new.not.allowed.in.annotation");
-                return new Attribute.Error(expected);
             }
             ListBuffer<Attribute> buf = new ListBuffer<Attribute>();
             for (List<JCExpression> l = na.elems; l.nonEmpty(); l=l.tail) {
@@ -380,20 +356,84 @@
             return new Attribute.
                 Array(expected, buf.toArray(new Attribute[buf.length()]));
         }
+        if (tree.hasTag(NEWARRAY)) { //error recovery
+            if (!expected.isErroneous())
+                log.error(tree.pos(), "annotation.value.not.allowable.type");
+            JCNewArray na = (JCNewArray)tree;
+            if (na.elemtype != null) {
+                log.error(na.elemtype.pos(), "new.not.allowed.in.annotation");
+            }
+            for (List<JCExpression> l = na.elems; l.nonEmpty(); l=l.tail) {
+                enterAttributeValue(syms.errType,
+                                    l.head,
+                                    env);
+            }
+            return new Attribute.Error(syms.errType);
+        }
+        if ((expected.tsym.flags() & Flags.ANNOTATION) != 0) {
+            if (tree.hasTag(ANNOTATION)) {
+                return enterAnnotation((JCAnnotation)tree, expected, env);
+            } else {
+                log.error(tree.pos(), "annotation.value.must.be.annotation");
+                expected = syms.errType;
+            }
+        }
+        if (tree.hasTag(ANNOTATION)) { //error recovery
+            if (!expected.isErroneous())
+                log.error(tree.pos(), "annotation.not.valid.for.type", expected);
+            enterAnnotation((JCAnnotation)tree, syms.errType, env);
+            return new Attribute.Error(((JCAnnotation)tree).annotationType.type);
+        }
+        if (expected.isPrimitive() || types.isSameType(expected, syms.stringType)) {
+            Type result = attr.attribExpr(tree, env, expected);
+            if (result.isErroneous())
+                return new Attribute.Error(result.getOriginalType());
+            if (result.constValue() == null) {
+                log.error(tree.pos(), "attribute.value.must.be.constant");
+                return new Attribute.Error(expected);
+            }
+            result = cfolder.coerce(result, expected);
+            return new Attribute.Constant(expected, result.constValue());
+        }
+        if (expected.tsym == syms.classType.tsym) {
+            Type result = attr.attribExpr(tree, env, expected);
+            if (result.isErroneous()) {
+                // Does it look like an unresolved class literal?
+                if (TreeInfo.name(tree) == names._class &&
+                    ((JCFieldAccess) tree).selected.type.isErroneous()) {
+                    Name n = (((JCFieldAccess) tree).selected).type.tsym.flatName();
+                    return new Attribute.UnresolvedClass(expected,
+                            types.createErrorType(n,
+                                    syms.unknownSymbol, syms.classType));
+                } else {
+                    return new Attribute.Error(result.getOriginalType());
+                }
+            }
+
+            // Class literals look like field accesses of a field named class
+            // at the tree level
+            if (TreeInfo.name(tree) != names._class) {
+                log.error(tree.pos(), "annotation.value.must.be.class.literal");
+                return new Attribute.Error(syms.errType);
+            }
+            return new Attribute.Class(types,
+                                       (((JCFieldAccess) tree).selected).type);
+        }
         if (expected.hasTag(CLASS) &&
             (expected.tsym.flags() & Flags.ENUM) != 0) {
-            attr.attribExpr(tree, env, expected);
+            Type result = attr.attribExpr(tree, env, expected);
             Symbol sym = TreeInfo.symbol(tree);
             if (sym == null ||
                 TreeInfo.nonstaticSelect(tree) ||
                 sym.kind != Kinds.VAR ||
                 (sym.flags() & Flags.ENUM) == 0) {
                 log.error(tree.pos(), "enum.annotation.must.be.enum.constant");
-                return new Attribute.Error(expected);
+                return new Attribute.Error(result.getOriginalType());
             }
             VarSymbol enumerator = (VarSymbol) sym;
             return new Attribute.Enum(expected, enumerator);
         }
+        //error recovery:
         if (!expected.isErroneous())
             log.error(tree.pos(), "annotation.value.not.allowable.type");
         return new Attribute.Error(attr.attribExpr(tree, env, expected));
--- a/src/share/classes/com/sun/tools/javac/comp/Attr.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/comp/Attr.java	Mon Oct 28 18:30:14 2013 -0400
@@ -58,6 +58,7 @@
 import static com.sun.tools.javac.code.Kinds.ERRONEOUS;
 import static com.sun.tools.javac.code.TypeTag.*;
 import static com.sun.tools.javac.code.TypeTag.WILDCARD;
+import static com.sun.tools.javac.code.TypeTag.ARRAY;
 import static com.sun.tools.javac.tree.JCTree.Tag.*;
 
 /** This is the main context-dependent analysis phase in GJC. It
@@ -249,6 +250,14 @@
         Type owntype = found;
         if (!owntype.hasTag(ERROR) && !resultInfo.pt.hasTag(METHOD) && !resultInfo.pt.hasTag(FORALL)) {
             if (allowPoly && inferenceContext.free(found)) {
+                if ((ownkind & ~resultInfo.pkind) == 0) {
+                    owntype = resultInfo.check(tree, inferenceContext.asFree(owntype));
+                } else {
+                    log.error(tree.pos(), "unexpected.type",
+                            kindNames(resultInfo.pkind),
+                            kindName(ownkind));
+                    owntype = types.createErrorType(owntype);
+                }
                 inferenceContext.addFreeTypeListener(List.of(found, resultInfo.pt), new FreeTypeListener() {
                     @Override
                     public void typesInferred(InferenceContext inferenceContext) {
@@ -313,9 +322,6 @@
                 case CLASSDEF:
                     //class def is always an owner
                     return ((JCClassDecl)env.tree).sym;
-                case LAMBDA:
-                    //a lambda is an owner - return a fresh synthetic method symbol
-                    return new MethodSymbol(0, names.empty, null, syms.methodClass);
                 case BLOCK:
                     //static/instance init blocks are owner
                     Symbol blockSym = env.info.scope.owner;
@@ -513,6 +519,15 @@
         protected ResultInfo dup(CheckContext newContext) {
             return new ResultInfo(pkind, pt, newContext);
         }
+
+        @Override
+        public String toString() {
+            if (pt != null) {
+                return pt.toString();
+            } else {
+                return "";
+            }
+        }
     }
 
     class RecoveryInfo extends ResultInfo {
@@ -791,34 +806,45 @@
         Type t = tree.type != null ?
             tree.type :
             attribType(tree, env);
-        return checkBase(t, tree, env, classExpected, interfaceExpected, checkExtensible);
+        return checkBase(t, tree, env, classExpected, interfaceExpected, false, checkExtensible);
     }
     Type checkBase(Type t,
                    JCTree tree,
                    Env<AttrContext> env,
                    boolean classExpected,
-                   boolean interfaceExpected,
+                   boolean interfacesOnlyExpected,
+                   boolean interfacesOrArraysExpected,
                    boolean checkExtensible) {
         if (t.isErroneous())
             return t;
-        if (t.hasTag(TYPEVAR) && !classExpected && !interfaceExpected) {
+        if (t.hasTag(TYPEVAR) && !classExpected &&
+            !interfacesOrArraysExpected && !interfacesOnlyExpected) {
             // check that type variable is already visible
             if (t.getUpperBound() == null) {
                 log.error(tree.pos(), "illegal.forward.ref");
                 return types.createErrorType(t);
             }
+        } else if (classExpected) {
+            t = chk.checkClassType(tree.pos(), t, checkExtensible|!allowGenerics);
         } else {
-            t = chk.checkClassType(tree.pos(), t, checkExtensible|!allowGenerics);
+            t = chk.checkClassOrArrayType(tree.pos(), t,
+                                          checkExtensible|!allowGenerics);
         }
-        if (interfaceExpected && (t.tsym.flags() & INTERFACE) == 0) {
+        if (interfacesOnlyExpected && !t.tsym.isInterface()) {
             log.error(tree.pos(), "intf.expected.here");
             // return errType is necessary since otherwise there might
             // be undetected cycles which cause attribution to loop
             return types.createErrorType(t);
+        } else if (interfacesOrArraysExpected &&
+            !(t.tsym.isInterface() || t.getTag() == ARRAY)) {
+            log.error(tree.pos(), "intf.or.array.expected.here");
+            // return errType is necessary since otherwise there might
+            // be undetected cycles which cause attribution to loop
+            return types.createErrorType(t);
         } else if (checkExtensible &&
                    classExpected &&
-                   (t.tsym.flags() & INTERFACE) != 0) {
-                log.error(tree.pos(), "no.intf.expected.here");
+                   t.tsym.isInterface()) {
+            log.error(tree.pos(), "no.intf.expected.here");
             return types.createErrorType(t);
         }
         if (checkExtensible &&
@@ -829,6 +855,12 @@
         chk.checkNonCyclic(tree.pos(), t);
         return t;
     }
+    //where
+        private Object asTypeParam(Type t) {
+            return (t.hasTag(TYPEVAR))
+                                    ? diags.fragment("type.parameter", t)
+                                    : t;
+        }
 
     Type attribIdentAsEnumType(Env<AttrContext> env, JCIdent id) {
         Assert.check((env.enclClass.sym.flags() & ENUM) != 0);
@@ -947,12 +979,6 @@
                 chk.validateAnnotationType(tree.restype);
                 // ensure that annotation method does not clash with members of Object/Annotation
                 chk.validateAnnotationMethod(tree.pos(), m);
-
-                if (tree.defaultValue != null) {
-                    // if default value is an annotation, check it is a well-formed
-                    // annotation value (e.g. no duplicate values, no missing values, etc.)
-                    chk.validateAnnotationTree(tree.defaultValue);
-                }
             }
 
             for (List<JCExpression> l = tree.thrown; l.nonEmpty(); l = l.tail)
@@ -1014,7 +1040,6 @@
 
             localEnv.info.scope.leave();
             result = tree.type = m.type;
-            chk.validateAnnotations(tree.mods.annotations, m);
         }
         finally {
             chk.setLint(prevLint);
@@ -1072,7 +1097,6 @@
                 }
             }
             result = tree.type = v.type;
-            chk.validateAnnotations(tree.mods.annotations, v);
         }
         finally {
             chk.setLint(prevLint);
@@ -2835,7 +2859,7 @@
             boolean isSpeculativeRound =
                     resultInfo.checkContext.deferredAttrContext().mode == DeferredAttr.AttrMode.SPECULATIVE;
             checkReferenceCompatible(that, desc, refType, resultInfo.checkContext, isSpeculativeRound);
-            if (!isSpeculativeRound && target != Type.recoveryType) {
+            if (!isSpeculativeRound) {
                 checkAccessibleTypes(that, localEnv, resultInfo.checkContext.inferenceContext(), desc, target);
             }
             result = check(that, target, VAL, resultInfo);
@@ -3524,15 +3548,6 @@
                         Type normOuter = site;
                         if (normOuter.hasTag(CLASS)) {
                             normOuter = types.asEnclosingSuper(site, ownOuter.tsym);
-                            if (site.isAnnotated()) {
-                                // Propagate any type annotations.
-                                // TODO: should asEnclosingSuper do this?
-                                // Note that the type annotations in site will be updated
-                                // by annotateType. Therefore, modify site instead
-                                // of creating a new AnnotatedType.
-                                ((AnnotatedType)site).underlyingType = normOuter;
-                                normOuter = site;
-                            }
                         }
                         if (normOuter == null) // perhaps from an import
                             normOuter = types.erasure(ownOuter);
@@ -3891,12 +3906,6 @@
                     }
                 }
                 owntype = new ClassType(clazzOuter, actuals, clazztype.tsym);
-                if (clazztype.isAnnotated()) {
-                    // Use the same AnnotatedType, because it will have
-                    // its annotations set later.
-                    ((AnnotatedType)clazztype).underlyingType = owntype;
-                    owntype = clazztype;
-                }
             } else {
                 if (formals.length() != 0) {
                     log.error(tree.pos(), "wrong.number.type.args",
@@ -3962,9 +3971,7 @@
         TypeVar typeVar = (TypeVar) tree.type;
 
         if (tree.annotations != null && tree.annotations.nonEmpty()) {
-            AnnotatedType antype = new AnnotatedType(typeVar);
-            annotateType(antype, tree.annotations);
-            tree.type = antype;
+            annotateType(tree, tree.annotations);
         }
 
         if (!typeVar.bound.isErroneous()) {
@@ -3977,7 +3984,7 @@
         Set<Type> boundSet = new HashSet<Type>();
         if (bounds.nonEmpty()) {
             // accept class or interface or typevar as first bound.
-            bounds.head.type = checkBase(bounds.head.type, bounds.head, env, false, false, false);
+            bounds.head.type = checkBase(bounds.head.type, bounds.head, env, false, false, false, false);
             boundSet.add(types.erasure(bounds.head.type));
             if (bounds.head.type.isErroneous()) {
                 return bounds.head.type;
@@ -3993,7 +4000,7 @@
                 // if first bound was a class or interface, accept only interfaces
                 // as further bounds.
                 for (JCExpression bound : bounds.tail) {
-                    bound.type = checkBase(bound.type, bound, env, false, true, false);
+                    bound.type = checkBase(bound.type, bound, env, false, false, true, false);
                     if (bound.type.isErroneous()) {
                         bounds = List.of(bound);
                     }
@@ -4058,40 +4065,40 @@
     }
 
     public void visitAnnotation(JCAnnotation tree) {
-        log.error(tree.pos(), "annotation.not.valid.for.type", pt());
-        result = tree.type = syms.errType;
+        Assert.error("should be handled in Annotate");
     }
 
     public void visitAnnotatedType(JCAnnotatedType tree) {
         Type underlyingType = attribType(tree.getUnderlyingType(), env);
         this.attribAnnotationTypes(tree.annotations, env);
-        AnnotatedType antype = new AnnotatedType(underlyingType);
-        annotateType(antype, tree.annotations);
-        result = tree.type = antype;
+        annotateType(tree, tree.annotations);
+        result = tree.type = underlyingType;
     }
 
     /**
      * Apply the annotations to the particular type.
      */
-    public void annotateType(final AnnotatedType type, final List<JCAnnotation> annotations) {
-        if (annotations.isEmpty())
-            return;
-        annotate.typeAnnotation(new Annotate.Annotator() {
+    public void annotateType(final JCTree tree, final List<JCAnnotation> annotations) {
+        annotate.typeAnnotation(new Annotate.Worker() {
             @Override
             public String toString() {
-                return "annotate " + annotations + " onto " + type;
+                return "annotate " + annotations + " onto " + tree;
             }
             @Override
-            public void enterAnnotation() {
+            public void run() {
                 List<Attribute.TypeCompound> compounds = fromAnnotations(annotations);
-                type.typeAnnotations = compounds;
+                if (annotations.size() == compounds.size()) {
+                    // All annotations were successfully converted into compounds
+                    tree.type = tree.type.unannotatedType().annotatedType(compounds);
+                }
             }
         });
     }
 
     private static List<Attribute.TypeCompound> fromAnnotations(List<JCAnnotation> annotations) {
-        if (annotations.isEmpty())
+        if (annotations.isEmpty()) {
             return List.nil();
+        }
 
         ListBuffer<Attribute.TypeCompound> buf = new ListBuffer<>();
         for (JCAnnotation anno : annotations) {
@@ -4103,6 +4110,10 @@
                 // Any better solutions?
                 buf.append((Attribute.TypeCompound) anno.attribute);
             }
+            // Eventually we will want to throw an exception here, but
+            // we can't do that just yet, because it gets triggered
+            // when attempting to attach an annotation that isn't
+            // defined.
         }
         return buf.toList();
     }
@@ -4138,7 +4149,6 @@
         JCCompilationUnit toplevel = env.toplevel;
         try {
             annotate.flush();
-            chk.validateAnnotations(toplevel.packageAnnotations, toplevel.packge);
         } catch (CompletionFailure ex) {
             chk.completionError(toplevel.pos(), ex);
         }
@@ -4223,6 +4233,7 @@
 
                 chk.checkDeprecatedAnnotation(env.tree.pos(), c);
                 chk.checkClassOverrideEqualsAndHashIfNeeded(env.tree.pos(), c);
+                chk.checkFunctionalInterface((JCClassDecl) env.tree, c);
             } finally {
                 env.info.returnResult = prevReturnRes;
                 log.useSource(prev);
@@ -4241,9 +4252,6 @@
         JCClassDecl tree = (JCClassDecl)env.tree;
         Assert.check(c == tree.sym);
 
-        // Validate annotations
-        chk.validateAnnotations(tree.mods.annotations, c);
-
         // Validate type parameters, supertype and interfaces.
         attribStats(tree.typarams, env);
         if (!c.isAnonymous()) {
@@ -4344,7 +4352,7 @@
             typeAnnotations.organizeTypeAnnotationsBodies(tree);
 
             // Check type annotations applicability rules
-            validateTypeAnnotations(tree);
+            validateTypeAnnotations(tree, false);
         }
     }
         // where
@@ -4419,19 +4427,25 @@
         return types.capture(type);
     }
 
-    private void validateTypeAnnotations(JCTree tree) {
-        tree.accept(typeAnnotationsValidator);
+    public void validateTypeAnnotations(JCTree tree, boolean sigOnly) {
+        tree.accept(new TypeAnnotationsValidator(sigOnly));
     }
     //where
-    private final JCTree.Visitor typeAnnotationsValidator = new TreeScanner() {
-
-        private boolean checkAllAnnotations = false;
+    private final class TypeAnnotationsValidator extends TreeScanner {
+
+        private final boolean sigOnly;
+        public TypeAnnotationsValidator(boolean sigOnly) {
+            this.sigOnly = sigOnly;
+        }
 
         public void visitAnnotation(JCAnnotation tree) {
-            if (tree.hasTag(TYPE_ANNOTATION) || checkAllAnnotations) {
-                chk.validateTypeAnnotation(tree, false);
+            chk.validateTypeAnnotation(tree, false);
+            super.visitAnnotation(tree);
+        }
+        public void visitAnnotatedType(JCAnnotatedType tree) {
+            if (!tree.underlyingType.type.isErroneous()) {
+                super.visitAnnotatedType(tree);
             }
-            super.visitAnnotation(tree);
         }
         public void visitTypeParameter(JCTypeParameter tree) {
             chk.validateTypeAnnotations(tree.annotations, true);
@@ -4450,12 +4464,26 @@
             if (tree.restype != null && tree.restype.type != null) {
                 validateAnnotatedType(tree.restype, tree.restype.type);
             }
-            super.visitMethodDef(tree);
+            if (sigOnly) {
+                scan(tree.mods);
+                scan(tree.restype);
+                scan(tree.typarams);
+                scan(tree.recvparam);
+                scan(tree.params);
+                scan(tree.thrown);
+            } else {
+                scan(tree.defaultValue);
+                scan(tree.body);
+            }
         }
         public void visitVarDef(final JCVariableDecl tree) {
             if (tree.sym != null && tree.sym.type != null)
-                validateAnnotatedType(tree, tree.sym.type);
-            super.visitVarDef(tree);
+                validateAnnotatedType(tree.vartype, tree.sym.type);
+            scan(tree.mods);
+            scan(tree.vartype);
+            if (!sigOnly) {
+                scan(tree.init);
+            }
         }
         public void visitTypeCast(JCTypeCast tree) {
             if (tree.clazz != null && tree.clazz.type != null)
@@ -4468,28 +4496,37 @@
             super.visitTypeTest(tree);
         }
         public void visitNewClass(JCNewClass tree) {
-            if (tree.clazz.hasTag(ANNOTATED_TYPE)) {
-                boolean prevCheck = this.checkAllAnnotations;
-                try {
-                    this.checkAllAnnotations = true;
-                    scan(((JCAnnotatedType)tree.clazz).annotations);
-                } finally {
-                    this.checkAllAnnotations = prevCheck;
-                }
-            }
+            if (tree.clazz.type != null)
+                validateAnnotatedType(tree.clazz, tree.clazz.type);
             super.visitNewClass(tree);
         }
         public void visitNewArray(JCNewArray tree) {
-            if (tree.elemtype != null && tree.elemtype.hasTag(ANNOTATED_TYPE)) {
-                boolean prevCheck = this.checkAllAnnotations;
-                try {
-                    this.checkAllAnnotations = true;
-                    scan(((JCAnnotatedType)tree.elemtype).annotations);
-                } finally {
-                    this.checkAllAnnotations = prevCheck;
+            if (tree.elemtype != null && tree.elemtype.type != null)
+                validateAnnotatedType(tree.elemtype, tree.elemtype.type);
+            super.visitNewArray(tree);
+        }
+
+        @Override
+        public void visitClassDef(JCClassDecl tree) {
+            if (sigOnly) {
+                scan(tree.mods);
+                scan(tree.typarams);
+                scan(tree.extending);
+                scan(tree.implementing);
+            }
+            for (JCTree member : tree.defs) {
+                if (member.hasTag(Tag.CLASSDEF)) {
+                    continue;
                 }
+                scan(member);
             }
-            super.visitNewArray(tree);
+        }
+
+        @Override
+        public void visitBlock(JCBlock tree) {
+            if (!sigOnly) {
+                scan(tree.stats);
+            }
         }
 
         /* I would want to model this after
@@ -4501,21 +4538,95 @@
          * can occur.
          */
         private void validateAnnotatedType(final JCTree errtree, final Type type) {
-            if (type.getEnclosingType() != null &&
-                    type != type.getEnclosingType()) {
-                validateEnclosingAnnotatedType(errtree, type.getEnclosingType());
+            // System.out.println("Attr.validateAnnotatedType: " + errtree + " type: " + type);
+
+            if (type.isPrimitiveOrVoid()) {
+                return;
             }
-            for (Type targ : type.getTypeArguments()) {
-                validateAnnotatedType(errtree, targ);
-            }
-        }
-        private void validateEnclosingAnnotatedType(final JCTree errtree, final Type type) {
-            validateAnnotatedType(errtree, type);
-            if (type.tsym != null &&
-                    type.tsym.isStatic() &&
-                    type.getAnnotationMirrors().nonEmpty()) {
-                    // Enclosing static classes cannot have type annotations.
-                log.error(errtree.pos(), "cant.annotate.static.class");
+
+            JCTree enclTr = errtree;
+            Type enclTy = type;
+
+            boolean repeat = true;
+            while (repeat) {
+                if (enclTr.hasTag(TYPEAPPLY)) {
+                    List<Type> tyargs = enclTy.getTypeArguments();
+                    List<JCExpression> trargs = ((JCTypeApply)enclTr).getTypeArguments();
+                    if (trargs.length() > 0) {
+                        // Nothing to do for diamonds
+                        if (tyargs.length() == trargs.length()) {
+                            for (int i = 0; i < tyargs.length(); ++i) {
+                                validateAnnotatedType(trargs.get(i), tyargs.get(i));
+                            }
+                        }
+                        // If the lengths don't match, it's either a diamond
+                        // or some nested type that redundantly provides
+                        // type arguments in the tree.
+                    }
+
+                    // Look at the clazz part of a generic type
+                    enclTr = ((JCTree.JCTypeApply)enclTr).clazz;
+                }
+
+                if (enclTr.hasTag(SELECT)) {
+                    enclTr = ((JCTree.JCFieldAccess)enclTr).getExpression();
+                    if (enclTy != null &&
+                            !enclTy.hasTag(NONE)) {
+                        enclTy = enclTy.getEnclosingType();
+                    }
+                } else if (enclTr.hasTag(ANNOTATED_TYPE)) {
+                    JCAnnotatedType at = (JCTree.JCAnnotatedType) enclTr;
+                    if (enclTy == null ||
+                            enclTy.hasTag(NONE)) {
+                        if (at.getAnnotations().size() == 1) {
+                            log.error(at.underlyingType.pos(), "cant.type.annotate.scoping.1", at.getAnnotations().head.attribute);
+                        } else {
+                            ListBuffer<Attribute.Compound> comps = new ListBuffer<Attribute.Compound>();
+                            for (JCAnnotation an : at.getAnnotations()) {
+                                comps.add(an.attribute);
+                            }
+                            log.error(at.underlyingType.pos(), "cant.type.annotate.scoping", comps.toList());
+                        }
+                        repeat = false;
+                    }
+                    enclTr = at.underlyingType;
+                    // enclTy doesn't need to be changed
+                } else if (enclTr.hasTag(IDENT)) {
+                    repeat = false;
+                } else if (enclTr.hasTag(JCTree.Tag.WILDCARD)) {
+                    JCWildcard wc = (JCWildcard) enclTr;
+                    if (wc.getKind() == JCTree.Kind.EXTENDS_WILDCARD) {
+                        validateAnnotatedType(wc.getBound(), ((WildcardType)enclTy.unannotatedType()).getExtendsBound());
+                    } else if (wc.getKind() == JCTree.Kind.SUPER_WILDCARD) {
+                        validateAnnotatedType(wc.getBound(), ((WildcardType)enclTy.unannotatedType()).getSuperBound());
+                    } else {
+                        // Nothing to do for UNBOUND
+                    }
+                    repeat = false;
+                } else if (enclTr.hasTag(TYPEARRAY)) {
+                    JCArrayTypeTree art = (JCArrayTypeTree) enclTr;
+                    validateAnnotatedType(art.getType(), ((ArrayType)enclTy.unannotatedType()).getComponentType());
+                    repeat = false;
+                } else if (enclTr.hasTag(TYPEUNION)) {
+                    JCTypeUnion ut = (JCTypeUnion) enclTr;
+                    for (JCTree t : ut.getTypeAlternatives()) {
+                        validateAnnotatedType(t, t.type);
+                    }
+                    repeat = false;
+                } else if (enclTr.hasTag(TYPEINTERSECTION)) {
+                    JCTypeIntersection it = (JCTypeIntersection) enclTr;
+                    for (JCTree t : it.getBounds()) {
+                        validateAnnotatedType(t, t.type);
+                    }
+                    repeat = false;
+                } else if (enclTr.getKind() == JCTree.Kind.PRIMITIVE_TYPE) {
+                    // This happens in test TargetTypeTest52.java
+                    // Is there anything to do?
+                    repeat = false;
+                } else {
+                    Assert.error("Unexpected tree: " + enclTr + " with kind: " + enclTr.getKind() +
+                            " within: "+ errtree + " with kind: " + errtree.getKind());
+                }
             }
         }
     };
--- a/src/share/classes/com/sun/tools/javac/comp/Check.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/comp/Check.java	Mon Oct 28 18:30:14 2013 -0400
@@ -30,6 +30,7 @@
 import javax.tools.JavaFileManager;
 
 import com.sun.tools.javac.code.*;
+import com.sun.tools.javac.code.Attribute.Compound;
 import com.sun.tools.javac.jvm.*;
 import com.sun.tools.javac.tree.*;
 import com.sun.tools.javac.util.*;
@@ -527,7 +528,7 @@
             inferenceContext.addFreeTypeListener(List.of(req), new FreeTypeListener() {
                 @Override
                 public void typesInferred(InferenceContext inferenceContext) {
-                    checkType(pos, found, inferenceContext.asInstType(req), checkContext);
+                    checkType(pos, inferenceContext.asInstType(found), inferenceContext.asInstType(req), checkContext);
                 }
             });
         }
@@ -706,6 +707,37 @@
         return t;
     }
 
+    // Analog of checkClassType that calls checkClassOrArrayType instead
+    Type checkClassOrArrayType(DiagnosticPosition pos,
+                               Type t, boolean noBounds) {
+        t = checkClassOrArrayType(pos, t);
+        if (noBounds && t.isParameterized()) {
+            List<Type> args = t.getTypeArguments();
+            while (args.nonEmpty()) {
+                if (args.head.hasTag(WILDCARD))
+                    return typeTagError(pos,
+                                        diags.fragment("type.req.exact"),
+                                        args.head);
+                args = args.tail;
+            }
+        }
+        return t;
+    }
+
+    /** Check that type is a reifiable class, interface or array type.
+     *  @param pos           Position to be used for error reporting.
+     *  @param t             The type to be checked.
+     */
+    Type checkReifiableReferenceType(DiagnosticPosition pos, Type t) {
+        t = checkClassOrArrayType(pos, t);
+        if (!t.isErroneous() && !types.isReifiable(t)) {
+            log.error(pos, "illegal.generic.type.for.instof");
+            return types.createErrorType(t);
+        } else {
+            return t;
+        }
+    }
+
     /** Check that type is a reference type, i.e. a class, interface or array type
      *  or a type variable.
      *  @param pos           Position to be used for error reporting.
@@ -1920,7 +1952,7 @@
      *                      for errors.
      *  @param m            The overriding method.
      */
-    void checkOverride(JCTree tree, MethodSymbol m) {
+    void checkOverride(JCMethodDecl tree, MethodSymbol m) {
         ClassSymbol origin = (ClassSymbol)m.owner;
         if ((origin.flags() & ENUM) != 0 && names.finalize.equals(m.name))
             if (m.overrides(syms.enumFinalFinalize, origin, types, false)) {
@@ -1936,6 +1968,17 @@
                 checkOverride(tree, t2, origin, m);
             }
         }
+
+        if (m.attribute(syms.overrideType.tsym) != null && !isOverrider(m)) {
+            DiagnosticPosition pos = tree.pos();
+            for (JCAnnotation a : tree.getModifiers().annotations) {
+                if (a.annotationType.type.tsym == syms.overrideType.tsym) {
+                    pos = a.pos();
+                    break;
+                }
+            }
+            log.error(pos, "method.does.not.override.superclass");
+        }
     }
 
     void checkOverride(JCTree tree, Type site, ClassSymbol origin, MethodSymbol m) {
@@ -2210,6 +2253,9 @@
             seen = seen.prepend(tv);
             for (Type b : types.getBounds(tv))
                 checkNonCyclic1(pos, b, seen);
+        } else if (t.hasTag(ARRAY)) {
+            final ArrayType at = (ArrayType)t.unannotatedType();
+            checkNonCyclic1(pos, at.elemtype, seen);
         }
     }
 
@@ -2353,13 +2399,28 @@
          ClashFilter cf = new ClashFilter(site);
         //for each method m1 that is overridden (directly or indirectly)
         //by method 'sym' in 'site'...
+
+        List<MethodSymbol> potentiallyAmbiguousList = List.nil();
+        boolean overridesAny = false;
         for (Symbol m1 : types.membersClosure(site, false).getElementsByName(sym.name, cf)) {
-             if (!sym.overrides(m1, site.tsym, types, false)) {
-                 checkPotentiallyAmbiguousOverloads(pos, site, sym, (MethodSymbol)m1);
-                 continue;
-             }
-             //...check each method m2 that is a member of 'site'
-             for (Symbol m2 : types.membersClosure(site, false).getElementsByName(sym.name, cf)) {
+            if (!sym.overrides(m1, site.tsym, types, false)) {
+                if (m1 == sym) {
+                    continue;
+                }
+
+                if (!overridesAny) {
+                    potentiallyAmbiguousList = potentiallyAmbiguousList.prepend((MethodSymbol)m1);
+                }
+                continue;
+            }
+
+            if (m1 != sym) {
+                overridesAny = true;
+                potentiallyAmbiguousList = List.nil();
+            }
+
+            //...check each method m2 that is a member of 'site'
+            for (Symbol m2 : types.membersClosure(site, false).getElementsByName(sym.name, cf)) {
                 if (m2 == m1) continue;
                 //if (i) the signature of 'sym' is not a subsignature of m1 (seen as
                 //a member of 'site') and (ii) m1 has the same erasure as m2, issue an error
@@ -2378,10 +2439,14 @@
                 }
             }
         }
+
+        if (!overridesAny) {
+            for (MethodSymbol m: potentiallyAmbiguousList) {
+                checkPotentiallyAmbiguousOverloads(pos, site, sym, m);
+            }
+        }
     }
 
-
-
     /** Check that all static methods accessible from 'site' are
      *  mutually compatible (JLS 8.4.8).
      *
@@ -2691,20 +2756,11 @@
         if (!annotationApplicable(a, s))
             log.error(a.pos(), "annotation.type.not.applicable");
 
-        if (a.annotationType.type.tsym == syms.overrideType.tsym) {
-            if (!isOverrider(s))
-                log.error(a.pos(), "method.does.not.override.superclass");
-        }
-
         if (a.annotationType.type.tsym == syms.functionalInterfaceType.tsym) {
             if (s.kind != TYP) {
                 log.error(a.pos(), "bad.functional.intf.anno");
-            } else {
-                try {
-                    types.findDescriptorSymbol((TypeSymbol)s);
-                } catch (Types.FunctionDescriptorLookupError ex) {
-                    log.error(a.pos(), "bad.functional.intf.anno.1", ex.getDiagnostic());
-                }
+            } else if (!s.isInterface() || (s.flags() & ANNOTATION) != 0) {
+                log.error(a.pos(), "bad.functional.intf.anno.1", diags.fragment("not.a.functional.intf", s));
             }
         }
     }
@@ -2713,8 +2769,11 @@
         Assert.checkNonNull(a.type, "annotation tree hasn't been attributed yet: " + a);
         validateAnnotationTree(a);
 
-        if (!isTypeAnnotation(a, isTypeParameter))
+        if (a.hasTag(TYPE_ANNOTATION) &&
+                !a.annotationType.type.isErroneous() &&
+                !isTypeAnnotation(a, isTypeParameter)) {
             log.error(a.pos(), "annotation.type.not.applicable");
+        }
     }
 
     /**
@@ -2919,7 +2978,7 @@
         return false;
     }
 
-    /** Is the annotation applicable to type annotations? */
+    /** Is the annotation applicable to types? */
     protected boolean isTypeAnnotation(JCAnnotation a, boolean isTypeParameter) {
         Attribute.Compound atTarget =
             a.annotationType.type.tsym.attribute(syms.annotationTargetType.tsym);
@@ -2952,7 +3011,6 @@
     boolean annotationApplicable(JCAnnotation a, Symbol s) {
         Attribute.Array arr = getAttributeTargetAttribute(a.annotationType.type.tsym);
         Name[] targets;
-
         if (arr == null) {
             targets = defaultTargetMetaInfo(a, s);
         } else {
@@ -2969,7 +3027,7 @@
         }
         for (Name target : targets) {
             if (target == names.TYPE)
-                { if (s.kind == TYP) return true; }
+                { if (s.kind == TYP && !s.isAnonymous()) return true; }
             else if (target == names.FIELD)
                 { if (s.kind == VAR && s.owner.kind != MTH) return true; }
             else if (target == names.METHOD)
@@ -3386,15 +3444,14 @@
                 sym.name != names.error &&
                 (!staticImport || !e.isStaticallyImported())) {
                 if (!e.sym.type.isErroneous()) {
-                    String what = e.sym.toString();
                     if (!isClassDecl) {
                         if (staticImport)
-                            log.error(pos, "already.defined.static.single.import", what);
+                            log.error(pos, "already.defined.static.single.import", e.sym);
                         else
-                        log.error(pos, "already.defined.single.import", what);
+                        log.error(pos, "already.defined.single.import", e.sym);
                     }
                     else if (sym != e.sym)
-                        log.error(pos, "already.defined.this.unit", what);
+                        log.error(pos, "already.defined.this.unit", e.sym);
                 }
                 return false;
             }
@@ -3474,4 +3531,23 @@
     public Warner convertWarner(DiagnosticPosition pos, Type found, Type expected) {
         return new ConversionWarner(pos, "unchecked.assign", found, expected);
     }
+
+    public void checkFunctionalInterface(JCClassDecl tree, ClassSymbol cs) {
+        Compound functionalType = cs.attribute(syms.functionalInterfaceType.tsym);
+
+        if (functionalType != null) {
+            try {
+                types.findDescriptorSymbol((TypeSymbol)cs);
+            } catch (Types.FunctionDescriptorLookupError ex) {
+                DiagnosticPosition pos = tree.pos();
+                for (JCAnnotation a : tree.getModifiers().annotations) {
+                    if (a.annotationType.type.tsym == syms.functionalInterfaceType.tsym) {
+                        pos = a.pos();
+                        break;
+                    }
+                }
+                log.error(pos, "bad.functional.intf.anno.1", ex.getDiagnostic());
+            }
+        }
+    }
 }
--- a/src/share/classes/com/sun/tools/javac/comp/Flow.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/comp/Flow.java	Mon Oct 28 18:30:14 2013 -0400
@@ -1718,9 +1718,9 @@
             if (tree.body == null) {
                 return;
             }
-            /*  MemberEnter can generate synthetic methods, ignore them
+            /*  Ignore synthetic methods, except for translated lambda methods.
              */
-            if ((tree.sym.flags() & SYNTHETIC) != 0) {
+            if ((tree.sym.flags() & (SYNTHETIC | LAMBDA_METHOD)) == SYNTHETIC) {
                 return;
             }
 
@@ -1795,7 +1795,7 @@
         protected void initParam(JCVariableDecl def) {
             inits.incl(def.sym.adr);
             uninits.excl(def.sym.adr);
-        }
+            }
 
         public void visitVarDef(JCVariableDecl tree) {
             boolean track = trackable(tree.sym);
--- a/src/share/classes/com/sun/tools/javac/comp/Infer.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/comp/Infer.java	Mon Oct 28 18:30:14 2013 -0400
@@ -1048,6 +1048,41 @@
             };
             return g.nodes.get(0);
         }
+
+        boolean isSubtype(Type s, Type t, Warner warn, Infer infer) {
+            return doIncorporationOp(IncorporationBinaryOpKind.IS_SUBTYPE, s, t, warn, infer);
+        }
+
+        boolean isSameType(Type s, Type t, Infer infer) {
+            return doIncorporationOp(IncorporationBinaryOpKind.IS_SAME_TYPE, s, t, null, infer);
+        }
+
+        void addBound(InferenceBound ib, UndetVar uv, Type b, Infer infer) {
+            doIncorporationOp(opFor(ib), uv, b, null, infer);
+        }
+
+        IncorporationBinaryOpKind opFor(InferenceBound boundKind) {
+            switch (boundKind) {
+                case EQ:
+                    return IncorporationBinaryOpKind.ADD_EQ_BOUND;
+                case LOWER:
+                    return IncorporationBinaryOpKind.ADD_LOWER_BOUND;
+                case UPPER:
+                    return IncorporationBinaryOpKind.ADD_UPPER_BOUND;
+                default:
+                    Assert.error("Can't get here!");
+                    return null;
+            }
+        }
+
+        boolean doIncorporationOp(IncorporationBinaryOpKind opKind, Type op1, Type op2, Warner warn, Infer infer) {
+            IncorporationBinaryOp newOp = infer.new IncorporationBinaryOp(opKind, op1, op2);
+            Boolean res = infer.incorporationCache.get(newOp);
+            if (res == null) {
+                infer.incorporationCache.put(newOp, res = newOp.apply(warn));
+            }
+            return res;
+        }
     }
 
     /**
@@ -1173,7 +1208,7 @@
         THROWS(InferenceBound.UPPER) {
             @Override
             public boolean accepts(UndetVar t, InferenceContext inferenceContext) {
-                if (t.isCaptured() || (t.qtype.tsym.flags() & Flags.THROWS) == 0) {
+                if ((t.qtype.tsym.flags() & Flags.THROWS) == 0) {
                     //not a throws undet var
                     return false;
                 }
@@ -1733,9 +1768,11 @@
                 public Type apply(Type t) {
                     if (t.hasTag(TYPEVAR)) {
                         TypeVar tv = (TypeVar)t;
-                        return tv.isCaptured() ?
-                                new CapturedUndetVar((CapturedType)tv, types) :
-                                new UndetVar(tv, types);
+                        if (tv.isCaptured()) {
+                            return new CapturedUndetVar((CapturedType)tv, types);
+                        } else {
+                            return new UndetVar(tv, types);
+                        }
                     } else {
                         return t.map(this);
                     }
--- a/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java	Fri Oct 11 17:51:08 2013 -0700
+++ b/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java	Mon Oct 28 18:30:14 2013 -0400
@@ -48,6 +48,7 @@
 import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
 import com.sun.source.tree.MemberReferenceTree.ReferenceMode;
 
+import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -68,6 +69,7 @@
  */
 public class LambdaToMethod extends TreeTranslator {
 
+    private Attr attr;
     private JCDiagnostic.Factory diags;
     private Log log;
     private Lower lower;
@@ -91,10 +93,7 @@
     /** info about the current class being processed */
     private KlassInfo kInfo;
 
-    /** for testing purposes force all lambdas to take a serializable form */
-    private boolean forceSerializableRepresentation;
-
-	/** dump statistics about lambda code generation */
+    /** dump statistics about lambda code generation */
     private boolean dumpLambdaToMethodStats;
 
     /** Flag for alternate metafactories indicating the lambda object is intended to be serializable */
@@ -106,6 +105,35 @@
     /** Flag for alternate metafactories indicating the lambda object requires multiple bridges */
     public static final int FLAG_BRIDGES = 1 << 2;
 
+    // <editor-fold defaultstate="collapsed" desc="Instantiating">
+    protected static final Context.Key<LambdaToMethod> unlambdaKey =
+            new Context.Key<LambdaToMethod>();
+
+    public static LambdaToMethod instance(Context context) {
+        LambdaToMethod instance = context.get(unlambdaKey);
+        if (instance == null) {
+            instance = new LambdaToMethod(context);
+        }
+        return instance;
+    }
+    private LambdaToMethod(Context context) {
+        context.put(unlambdaKey, this);
+        diags = JCDiagnostic.Factory.instance(context);
+        log = Log.instance(context);
+        lower = Lower.instance(context);
+        names = Names.instance(context);
+        syms = Symtab.instance(context);
+        rs = Resolve.instance(context);
+        make = TreeMaker.instance(context);
+        types = Types.instance(context);
+        transTypes = TransTypes.instance(context);
+        analyzer = new LambdaAnalyzerPreprocessor();
+        Options options = Options.instance(context);
+        dumpLambdaToMethodStats = options.isSet("dumpLambdaToMethodStats");
+        attr = Attr.instance(context);
+    }
+    // </editor-fold>
+
     private class KlassInfo {
 
         /**
@@ -128,13 +156,15 @@
          */
         private final VarSymbol deserParamSym;
 
-        private KlassInfo(Symbol kSym) {
+        private final JCClassDecl clazz;
+
+        private KlassInfo(JCClassDecl clazz) {
+            this.clazz = clazz;
             appendedMethodList = new ListBuffer<>();
             deserializeCases = new HashMap<String, ListBuffer<JCStatement>>();
-            long flags = PRIVATE | STATIC | SYNTHETIC;
             MethodType type = new MethodType(List.of(syms.serializedLambdaType), syms.objectType,
                     List.<Type>nil(), syms.methodClass);
-            deserMethodSym = makeSyntheticMethod(flags, names.deserializeLambda, type, kSym);
+            deserMethodSym = makePrivateSyntheticMethod(STATIC, names.deserializeLambda, type, clazz.sym);
             deserParamSym = new VarSymbol(FINAL, names.fromString("lambda"),
                     syms.serializedLambdaType, deserMethodSym);
         }
@@ -144,38 +174,6 @@
         }
     }
 
-    // <editor-fold defaultstate="collapsed" desc="Instantiating">
-    private static final Context.Key<LambdaToMethod> unlambdaKey =
-            new Context.Key<LambdaToMethod>();
-
-    public static LambdaToMethod instance(Context context) {
-        LambdaToMethod instance = context.get(unlambdaKey);
-        if (instance == null) {
-            instance = new LambdaToMethod(context);
-        }
-        return instance;
-    }
-
-    private Attr attr;
-
-    private LambdaToMethod(Context context) {
-        diags = JCDiagnostic.Factory.instance(context);
-        log = Log.instance(context);
-        lower = Lower.instance(context);
-        names = Names.instance(context);
-        syms = Symtab.instance(context);
-        rs = Resolve.instance(context);
-        make = TreeMaker.instance(context);
-        types = Types.instance(context);
-        transTypes = TransTypes.instance(context);
-        // forceSerializableRepresentation = true;
-        analyzer = new LambdaAnalyzerPreprocessor();
-        Options options = Options.instance(context);
-        dumpLambdaToMethodStats = options.isSet("dumpLambdaToMethodStats");
-        attr = Attr.instance(context);
-    }
-    // </editor-fold>
-
     // <editor-fold defaultstate="collapsed" desc="translate methods">
     @Override
     public <T extends JCTree> T translate(T tree) {
@@ -226,10 +224,16 @@
         }
         KlassInfo prevKlassInfo = kInfo;
         try {
-            kInfo = new KlassInfo(tree.sym);
+            kInfo = new KlassInfo(tree);
             super.visitClassDef(tree);
             if (!kInfo.deserializeCases.isEmpty()) {
-                kInfo.addMethod(makeDeserializeMethod(tree.sym));
+                int prevPos = make.pos;
+                try {
+                    make.at(tree);
+                    kInfo.addMethod(makeDeserializeMethod(tree.sym));
+                } finally {
+                    make.at(prevPos);
+                }
             }
             //add all translated instance methods here
             List<JCTree> newMethods = kInfo.appendedMethodList.toList();
@@ -405,26 +409,21 @@
         if (context == null || !analyzer.lambdaIdentSymbolFilter(tree.sym)) {
             super.visitIdent(tree);
         } else {
-            LambdaTranslationContext lambdaContext = (LambdaTranslationContext) context;
-            if (lambdaContext.getSymbolMap(PARAM).containsKey(tree.sym)) {
-                Symbol translatedSym = lambdaContext.getSymbolMap(PARAM).get(tree.sym);
-                result = make.Ident(translatedSym).setType(tree.type);
-                translatedSym.setTypeAttributes(tree.sym.getRawTypeAttributes());
-            } else if (lambdaContext.getSymbolMap(LOCAL_VAR).containsKey(tree.sym)) {
-                Symbol translatedSym = lambdaContext.getSymbolMap(LOCAL_VAR).get(tree.sym);
-                result = make.Ident(translatedSym).setType(tree.type);
-                translatedSym.setTypeAttributes(tree.sym.getRawTypeAttributes());
-            } else if (lambdaContext.getSymbolMap(TYPE_VAR).containsKey(tree.sym)) {
-                Symbol translatedSym = lambdaContext.getSymbolMap(TYPE_VAR).get(tree.sym);
-                result = make.Ident(translatedSym).setType(translatedSym.type);
-                translatedSym.setTypeAttributes(tree.sym.getRawTypeAttributes());
-            } else if (lambdaContext.getSymbolMap(CAPTURED_VAR).containsKey(tree.sym)) {
-                Symbol translatedSym = lambdaContext.getSymbolMap(CAPTURED_VAR).get(tree.sym);
-                result = make.Ident(translatedSym).setType(tree.type);
-            } else {
-                //access to untranslated symbols (i.e. compile-time constants,
-                //members defined inside the lambda body, etc.) )
-                super.visitIdent(tree);
+            int prevPos = make.pos;
+            try {
+                make.at(tree);
+
+                LambdaTranslationContext lambdaContext = (LambdaTranslationContext) context;
+                JCTree ltree = lambdaContext.translate(tree);
+                if (ltree != null) {
+                    result = ltree;
+                } else {
+                    //access to untranslated symbols (i.e. compile-time constants,
+                    //members defined inside the lambda body, etc.) )
+                    super.visitIdent(tree);
+                }
+            } finally {
+                make.at(prevPos);
             }
         }
     }
@@ -434,11 +433,21 @@
         LambdaTranslationContext lambdaContext = (LambdaTranslationContext)context;
         if (context != null && lambdaContext.getSymbolMap(LOCAL_VAR).containsKey(tree.sym)) {
             JCExpression init = translate(tree.init);
-            result = make.VarDef((VarSymbol)lambdaContext.getSymbolMap(LOCAL_VAR).get(tree.sym), init);
+            int prevPos = make.pos;
+            try {
+                result = make.at(tree).VarDef((VarSymbol)lambdaContext.getSymbolMap(LOCAL_VAR).get(tree.sym), init);
+            } finally {
+                make.at(prevPos);
+            }
         } else if (context != null && lambdaContext.getSymbolMap(TYPE_VAR).containsKey(tree.sym)) {
             JCExpression init = translate(tree.init);
             VarSymbol xsym = (VarSymbol)lambdaContext.getSymbolMap(TYPE_VAR).get(tree.sym);
-            result = make.VarDef(xsym, init);
+            int prevPos = make.pos;
+            try {
+                result = make.at(tree).VarDef(xsym, init);
+            } finally {
+                make.at(prevPos);
+            }
             // Replace the entered symbol for this variable
             Scope sc = tree.sym.owner.members();
             if (sc != null) {
@@ -465,23 +474,28 @@
         boolean isLambda_void = expr.type.hasTag(VOID);
         boolean isTarget_void = restype.hasTag(VOID);
         boolean isTarget_Void = types.isSameType(restype, types.boxedClass(syms.voidType).type);
-        if (isTarget_void) {
-            //target is void:
-            // BODY;
-            JCStatement stat = make.Exec(expr);
-            return make.Block(0, List.<JCStatement>of(stat));
-        } else if (isLambda_void && isTarget_Void) {
-            //void to Void conversion:
-            // BODY; return null;
-            ListBuffer<JCStatement> stats = new ListBuffer<>();
-            stats.append(make.Exec(expr));
-            stats.append(make.Return(make.Literal(BOT, null).setType(syms.botType)));
-            return make.Block(0, stats.toList());
-        } else {
-            //non-void to non-void conversion:
-            // return (TYPE)BODY;
-            JCExpression retExpr = transTypes.coerce(attrEnv, expr, restype);
-            return make.at(retExpr).Block(0, List.<JCStatement>of(make.Return(retExpr)));
+        int prevPos = make.pos;
+        try {
+            if (isTarget_void) {
+                //target is void:
+                // BODY;
+                JCStatement stat = make.at(expr).Exec(expr);
+                return make.Block(0, List.<JCStatement>of(stat));
+            } else if (isLambda_void && isTarget_Void) {
+                //void to Void conversion:
+                // BODY; return null;
+                ListBuffer<JCStatement> stats = new ListBuffer<>();
+                stats.append(make.at(expr).Exec(expr));
+                stats.append(make.Return(make.Literal(BOT, null).setType(syms.botType)));
+                return make.Block(0, stats.toList());
+            } else {
+                //non-void to non-void conversion:
+                // return (TYPE)BODY;
+                JCExpression retExpr = transTypes.coerce(attrEnv, expr, restype);
+                return make.at(retExpr).Block(0, List.<JCStatement>of(make.Return(retExpr)));
+            }
+        } finally {
+            make.at(prevPos);
         }
     }
 
@@ -675,8 +689,8 @@
     /**
      * Create new synthetic method with given flags, name, type, owner
      */
-    private MethodSymbol makeSyntheticMethod(long flags, Name name, Type type, Symbol owner) {
-        return new MethodSymbol(flags | SYNTHETIC, name, type, owner);
+    private MethodSymbol makePrivateSyntheticMethod(long flags, Name name, Type type, Symbol owner) {
+        return new MethodSymbol(flags | SYNTHETIC | PRIVATE, name, type, owner);
     }
 
     /**
@@ -983,8 +997,14 @@
                 }
             }
             if (context.isSerializable()) {
-                addDeserializationCase(refKind, refSym, tree.type, samSym,
-                        tree, staticArgs, indyType);
+                int prevPos = make.pos;
+                try {
+                    make.at(kInfo.clazz);
+                    addDeserializationCase(refKind, refSym, tree.type, samSym,
+                            tree, staticArgs, indyType);
+                } finally {
+                    make.at(prevPos);
+                }
             }
         }
 
@@ -1071,12 +1091,12 @@
         } else {
             if (refSym.isStatic()) {
                 return ClassFile.REF_invokeStatic;
+            } else if ((refSym.flags() & PRIVATE) != 0) {
+                return ClassFile.REF_invokeSpecial;
             } else if (refSym.enclClass().isInterface()) {
                 return ClassFile.REF_invokeInterface;
             } else {
-                return (refSym.flags() & PRIVATE) != 0 ?
-                        ClassFile.REF_invokeSpecial :
-                        ClassFile.REF_invokeVirtual;
+                return ClassFile.REF_invokeVirtual;
             }
         }
     }
@@ -1104,7 +1124,7 @@
          * generate unambiguous names for serializable lambdas)
          */
         private class SyntheticMethodNameCounter {
-            private Map<String, Integer> map = new HashMap<String, Integer>();
+            private Map<String, Integer> map = new HashMap<>();
             int getIndex(StringBuilder buf) {
                 String temp = buf.toString();
                 Integer count = map.get(temp);
@@ -1333,7 +1353,9 @@
                 ListBuffer<JCVariableDecl> paramBuff = new ListBuffer<JCVariableDecl>();
                 int i = 0;
                 for (List<Type> l = ptypes; l.nonEmpty(); l = l.tail) {
-                    paramBuff.append(make.Param(make.paramName(i++), l.head, owner));
+                    JCVariableDecl param = make.Param(make.paramName(i++), l.head, owner);
+                    param.sym.pos = tree.pos;
+                    paramBuff.append(param);
                 }
                 List<JCVariableDecl> params = paramBuff.toList();
 
@@ -1453,7 +1475,7 @@
                 //static clinits are generated in Gen - so we need to fake them
                 Symbol clinit = clinits.get(csym);
                 if (clinit == null) {
-                    clinit = makeSyntheticMethod(STATIC,
+                    clinit = makePrivateSyntheticMethod(STATIC,
                             names.clinit,
                             new MethodType(List.<Type>nil(), syms.voidType, List.<Type>nil(), syms.methodClass),
                             csym);
@@ -1655,9 +1677,6 @@
 
             /** does this functional expression require serialization support? */
             boolean isSerializable() {
-                if (forceSerializableRepresentation) {
-                    return true;
-                }
                 for (Type target : tree.targets) {
                     if (types.asSuper(target, syms.serializableType.tsym) != null) {
                         return true;
@@ -1665,7 +1684,7 @@
                 }
                 return false;
             }
-            
+
             /**
              * @return Name of the enclosing method to be folded into synthetic
              * method name
@@ -1673,9 +1692,9 @@
             String enclosingMethodName() {
                 return syntheticMethodNameComponent(owner.name);
             }
-            
+
             /**
-             * @return Method name in a form that can be folded into a 
+             * @return Method name in a form that can be folded into a
              * component of a synthetic method name
              */
             String syntheticMethodNameComponent(Name name) {
@@ -1700,29 +1719,16 @@
          */
         private class LambdaTranslationContext extends TranslationContext<JCLambda> {
 
-            /** variable declaration in the enclosing context to which this lambda is assigned */
+            /** variable in the enclosing context to which this lambda is assigned */</