From 8bc2b3ff3a92b1f8a66745f98c399f8165027fc7 Mon Sep 17 00:00:00 2001 From: Chris Hegarty Date: Wed, 3 Dec 2014 14:25:46 +0000 Subject: [PATCH] 8049367: Modular Run-Time Images Co-authored-by: Alan Bateman Co-authored-by: Alex Buckley Co-authored-by: Bradford Wetmore Co-authored-by: Erik Joelsson Co-authored-by: James Laskey Co-authored-by: Jonathan Gibbons Co-authored-by: Karen Kinnear Co-authored-by: Magnus Ihse Bursie Co-authored-by: Mandy Chung Co-authored-by: Mark Reinhold Co-authored-by: Paul Sandoz Co-authored-by: Sundararajan Athijegannathan Reviewed-by: jlahoda, ksrini --- langtools/make/CompileInterim.gmk | 16 +- langtools/make/GensrcLangtools.gmk | 111 --- langtools/make/Tools.gmk | 45 ++ .../Gensrc-jdk.compiler.gmk} | 23 +- .../gensrc/Gensrc-jdk.dev.gmk} | 28 +- langtools/make/gensrc/Gensrc-jdk.javadoc.gmk | 33 + langtools/make/gensrc/GensrcCommon.gmk | 95 +++ .../tools/crules/MutableFieldsAnalyzer.java | 3 + .../classes/javax/tools/ToolProvider.java | 75 +- .../tools/javac/api/ClientCodeWrapper.java | 99 ++- .../com/sun/tools/javac/code/ClassFinder.java | 107 ++- .../com/sun/tools/javac/file/JRTIndex.java | 272 +++++++ .../tools/javac/file/JavacFileManager.java | 177 +++-- .../com/sun/tools/javac/file/Locations.java | 114 ++- .../sun/tools/javac/file/RelativePath.java | 17 +- .../sun/tools/javac/file/SymbolArchive.java | 107 --- .../com/sun/tools/javac/jvm/ClassReader.java | 16 +- .../tools/javac/nio/JavacPathFileManager.java | 5 +- .../sun/tools/javac/nio/PathFileObject.java | 45 +- .../sun/tools/javac/resources/ct.properties | 749 ++++++++++++++++++ .../sun/tools/javac/util/BaseFileManager.java | 5 + .../com/sun/tools/javap/JavapTask.java | 3 +- .../tools/sjavac/comp/SmartFileManager.java | 1 + .../classes/com/sun/tools/jdeps/Archive.java | 9 +- .../com/sun/tools/jdeps/ClassFileReader.java | 70 +- .../com/sun/tools/jdeps/JdepsTask.java | 5 +- .../classes/com/sun/tools/jdeps/Module.java | 7 +- .../com/sun/tools/jdeps/ModulesXmlReader.java | 86 +- .../sun/tools/jdeps/PlatformClassPath.java | 310 ++------ .../classes/com/sun/tools/jdeps/Profile.java | 57 +- .../TestCompletionFailure.java | 4 +- .../apt/Basics/CheckAptIsRemovedTest.java | 94 --- .../test/tools/doclint/tool/PathsTest.java | 24 +- .../javac/6508981/TestInferBinaryName.java | 26 +- .../test/tools/javac/EarlyAssertWrapper.java | 8 +- .../test/tools/javac/Paths/Class-Path.sh | 12 +- .../test/tools/javac/Paths/Class-Path2.sh | 8 +- .../test/tools/javac/Paths/CompileClose.java | 77 -- .../test/tools/javac/Paths/Diagnostics.sh | 47 +- langtools/test/tools/javac/Paths/MineField.sh | 334 ++++---- langtools/test/tools/javac/Paths/SameJVM.java | 66 -- langtools/test/tools/javac/Paths/Util.sh | 52 +- langtools/test/tools/javac/T6558476.java | 2 +- langtools/test/tools/javac/T6654037.java | 5 +- langtools/test/tools/javac/T6705935.java | 2 - langtools/test/tools/javac/T6725036.java | 60 +- langtools/test/tools/javac/T6873845.java | 10 +- .../TestAnnotationPackageInfo.java | 6 +- .../test/tools/javac/api/6411310/Test.java | 232 ------ .../tools/javac/api/6598108/T6598108.java | 5 +- .../tools/javac/api/6608214/T6608214.java | 5 +- langtools/test/tools/javac/api/T6412669.java | 21 +- langtools/test/tools/javac/api/T6430241.java | 457 ++++++----- langtools/test/tools/javac/api/T6877206.java | 25 +- .../tools/javac/api/TestJavacTaskScanner.java | 24 +- .../test/tools/javac/api/TestSearchPaths.java | 20 +- .../tools/javac/diags/CheckResourceKeys.java | 3 +- .../javac/diags/examples/NotInProfile.java | 2 +- .../test/tools/javac/lib/CompileFail.java | 3 +- .../javac/nio/compileTest/CompileTest.java | 169 ---- .../javac/nio/compileTest/HelloPathWorld.java | 28 - .../model/testgetallmembers/Main.java | 23 - .../TestWithXstdout.java | 2 - .../javac/profiles/ProfileOptionTest.java | 8 +- .../test/tools/javadoc/6942366/T6942366.java | 8 - .../tools/javadoc/6964914/TestUserDoclet.java | 2 - .../api/basic/GetTask_FileManagerTest.java | 59 +- langtools/test/tools/javah/T5070898.java | 8 +- langtools/test/tools/javah/T6893943.java | 6 +- .../tools/javah/compareTest/CompareTest.java | 265 ------- .../javah/compareTest/FindNativeFiles.java | 86 -- langtools/test/tools/javah/compareTest/README | 16 - langtools/test/tools/javap/T6729471.java | 43 +- .../test/tools/javap/WhitespaceTest.java | 7 +- langtools/test/tools/jdeps/APIDeps.java | 21 - langtools/test/tools/jdeps/Basic.java | 21 - langtools/test/tools/jdeps/DotFileTest.java | 21 - .../test/tools/jdeps/profiles.properties | 263 ------ langtools/test/tools/lib/ToolBox.java | 47 +- .../test/tools/sjavac/OptionDecoding.java | 9 +- 80 files changed, 2575 insertions(+), 2861 deletions(-) delete mode 100644 langtools/make/GensrcLangtools.gmk create mode 100644 langtools/make/Tools.gmk rename langtools/make/{CommonLangtools.gmk => gensrc/Gensrc-jdk.compiler.gmk} (69%) rename langtools/{test/tools/javah/compareTest/CompareTest.sh => make/gensrc/Gensrc-jdk.dev.gmk} (54%) create mode 100644 langtools/make/gensrc/Gensrc-jdk.javadoc.gmk create mode 100644 langtools/make/gensrc/GensrcCommon.gmk create mode 100644 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JRTIndex.java delete mode 100644 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/SymbolArchive.java create mode 100644 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/ct.properties delete mode 100644 langtools/test/tools/apt/Basics/CheckAptIsRemovedTest.java delete mode 100644 langtools/test/tools/javac/Paths/CompileClose.java delete mode 100644 langtools/test/tools/javac/Paths/SameJVM.java delete mode 100644 langtools/test/tools/javac/api/6411310/Test.java delete mode 100644 langtools/test/tools/javac/nio/compileTest/CompileTest.java delete mode 100644 langtools/test/tools/javac/nio/compileTest/HelloPathWorld.java delete mode 100644 langtools/test/tools/javah/compareTest/CompareTest.java delete mode 100644 langtools/test/tools/javah/compareTest/FindNativeFiles.java delete mode 100644 langtools/test/tools/javah/compareTest/README delete mode 100644 langtools/test/tools/jdeps/profiles.properties diff --git a/langtools/make/CompileInterim.gmk b/langtools/make/CompileInterim.gmk index 1a5efd2aedf..d3c78279b2a 100644 --- a/langtools/make/CompileInterim.gmk +++ b/langtools/make/CompileInterim.gmk @@ -29,9 +29,9 @@ default: all include $(SPEC) include MakeBase.gmk include JavaCompilation.gmk +include SetupJavaCompilers.gmk -include CommonLangtools.gmk - +################################################################################ # Setup the rules to build the interim langtools jar, which is compiled by # the boot javac and can be run on the boot jdk. This will be used to compile # the rest of the product. Include the Genstubs build tool in this compilation @@ -44,12 +44,12 @@ $(eval $(call SetupJavaCompilation,BUILD_INTERIM_LANGTOOLS, \ $(LANGTOOLS_TOPDIR)/src/jdk.dev/share/classes \ $(LANGTOOLS_TOPDIR)/src/jdk.javadoc/share/classes \ $(LANGTOOLS_TOPDIR)/src/java.base/share/classes \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.compiler \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.dev \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.javadoc, \ - EXCLUDES := com/sun/tools/javac/nio compileproperties anttasks crules, \ - COPY := $(RESOURCE_SUFFIXES) jdeps.properties jdkinternals.properties version.properties, \ - BIN := $(LANGTOOLS_OUTPUTDIR)/interim_classes, \ + $(SUPPORT_OUTPUTDIR)/gensrc/jdk.compiler \ + $(SUPPORT_OUTPUTDIR)/gensrc/jdk.dev \ + $(SUPPORT_OUTPUTDIR)/gensrc/jdk.javadoc, \ + EXCLUDES := sun jdk, \ + COPY := .gif .xml .css .js javax.tools.JavaCompilerTool, \ + BIN := $(BUILDTOOLS_OUTPUTDIR)/langtools_interim_classes, \ JAR := $(INTERIM_LANGTOOLS_JAR))) all: $(BUILD_INTERIM_LANGTOOLS) diff --git a/langtools/make/GensrcLangtools.gmk b/langtools/make/GensrcLangtools.gmk deleted file mode 100644 index 7afde739408..00000000000 --- a/langtools/make/GensrcLangtools.gmk +++ /dev/null @@ -1,111 +0,0 @@ -# -# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# This must be the first rule -default: all - -include $(SPEC) -include MakeBase.gmk -include JavaCompilation.gmk - -include CommonLangtools.gmk - -################################################################################ -# Setup the compilation of the properties compilation tool. You can depend -# upon $(BUILD_TOOLS_LANGTOOLS) 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 with the new javac sources. -$(eval $(call SetupJavaCompilation,BUILD_TOOLS_LANGTOOLS, \ - SETUP := BOOT_JAVAC, \ - DISABLE_SJAVAC := true, \ - ADD_JAVAC_FLAGS := -Xprefer:source, \ - SRC := $(LANGTOOLS_TOPDIR)/make/tools, \ - INCLUDES := compileproperties, \ - BIN := $(LANGTOOLS_OUTPUTDIR)/buildtools_classes)) - -################################################################################ -# The compileprops tools compiles a properties file into a resource bundle. -TOOL_COMPILEPROPS_CMD := $(JAVA) -cp $(LANGTOOLS_OUTPUTDIR)/buildtools_classes \ - compileproperties.CompileProperties -quiet - -# Lookup the properties that need to be compiled into resource bundles. -PROPSOURCES := $(shell $(FIND) $(LANGTOOLS_TOPDIR)/src/*/share/classes -name "*.properties") - -# Convert .../src//share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties -# to .../langtools/gensrc//com/sun/tools/javac/resources/javac_zh_CN.java -# Strip away prefix and suffix, leaving for example only: -# "/share/classes/com/sun/tools/javac/resources/javac_zh_CN" -PROPJAVAS := $(patsubst $(LANGTOOLS_TOPDIR)/src/%.properties, \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/%.java, \ - $(subst /share/classes,,$(PROPSOURCES))) - -# Generate the package dirs for the tobe generated java files. Sort to remove -# duplicates. -PROPDIRS := $(sort $(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_, $(PROPJAVAS))))) - -# Now setup the rule for the generation of the resource bundles. -$(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props: $(PROPSOURCES) $(BUILD_TOOLS_LANGTOOLS) - $(RM) -r $(@D)/* - $(MKDIR) -p $(@D) $(PROPDIRS) - $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" \ - > $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.compiler/com/sun/tools/javah/resources/version.properties - $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" \ - > $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.compiler/com/sun/tools/javap/resources/version.properties - $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" \ - > $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.compiler/com/sun/tools/javac/resources/version.properties - $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" \ - > $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.dev/com/sun/tools/jdeps/resources/version.properties - $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" \ - > $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.javadoc/com/sun/tools/javadoc/resources/version.properties - $(ECHO) Compiling $(words $(PROPSOURCES) v1 v2 v3) properties into resource bundles - $(TOOL_COMPILEPROPS_CMD) $(PROPCMDLINE) \ - -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.compiler/com/sun/tools/javah/resources/version.properties \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.compiler/com/sun/tools/javah/resources/version.java \ - java.util.ListResourceBundle \ - -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.compiler/com/sun/tools/javap/resources/version.properties \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.compiler/com/sun/tools/javap/resources/version.java \ - java.util.ListResourceBundle \ - -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.compiler/com/sun/tools/javac/resources/version.properties \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.compiler/com/sun/tools/javac/resources/version.java \ - java.util.ListResourceBundle \ - -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.dev/com/sun/tools/jdeps/resources/version.properties \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.dev/com/sun/tools/jdeps/resources/version.java \ - java.util.ListResourceBundle \ - -compile $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.javadoc/com/sun/tools/javadoc/resources/version.properties \ - $(LANGTOOLS_OUTPUTDIR)/gensrc/jdk.javadoc/com/sun/tools/javadoc/resources/version.java \ - java.util.ListResourceBundle - $(TOUCH) $@ - -all: $(LANGTOOLS_OUTPUTDIR)/gensrc/_the_props - -################################################################################ diff --git a/langtools/make/Tools.gmk b/langtools/make/Tools.gmk new file mode 100644 index 00000000000..7e23cd122f9 --- /dev/null +++ b/langtools/make/Tools.gmk @@ -0,0 +1,45 @@ +# +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# This must be the first rule +default: all + +include $(SPEC) +include MakeBase.gmk +include JavaCompilation.gmk +include SetupJavaCompilers.gmk + +################################################################################ +# Setup the compilation of the properties compilation tool. You can depend +# upon $(BUILD_TOOLS_LANGTOOLS) to trigger a compilation of the tools. +$(eval $(call SetupJavaCompilation,BUILD_TOOLS_LANGTOOLS, \ + SETUP := BOOT_JAVAC, \ + DISABLE_SJAVAC := true, \ + ADD_JAVAC_FLAGS := -Xprefer:source, \ + SRC := $(LANGTOOLS_TOPDIR)/make/tools, \ + INCLUDES := compileproperties, \ + BIN := $(BUILDTOOLS_OUTPUTDIR)/langtools_tools_classes)) + +all: $(BUILD_TOOLS_LANGTOOLS) diff --git a/langtools/make/CommonLangtools.gmk b/langtools/make/gensrc/Gensrc-jdk.compiler.gmk similarity index 69% rename from langtools/make/CommonLangtools.gmk rename to langtools/make/gensrc/Gensrc-jdk.compiler.gmk index f32a0ac2ab7..8d44ea7b3e8 100644 --- a/langtools/make/CommonLangtools.gmk +++ b/langtools/make/gensrc/Gensrc-jdk.compiler.gmk @@ -23,13 +23,18 @@ # questions. # -# The BOOT_JAVAC setup uses the boot jdk compiler to compile the tools -# and the interim javac, to be run by the boot jdk. -$(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)) +include GensrcCommon.gmk -# javax.tools.JavaCompilerTool isn't really a suffix but this gets the file copied. -RESOURCE_SUFFIXES := .gif .xml .css .js javax.tools.JavaCompilerTool +$(eval $(call SetupVersionProperties,JAVAC_VERSION,\ + com/sun/tools/javac/resources/version.properties)) + +$(eval $(call SetupVersionProperties,JAVAH_VERSION,\ + com/sun/tools/javah/resources/version.properties)) + +$(eval $(call SetupVersionProperties,JAVAP_VERSION,\ + com/sun/tools/javap/resources/version.properties)) + +$(eval $(call SetupCompileProperties,COMPILE_PROPERTIES,\ + $(JAVAC_VERSION) $(JAVAH_VERSION) $(JAVAP_VERSION))) + +all: $(COMPILE_PROPERTIES) diff --git a/langtools/test/tools/javah/compareTest/CompareTest.sh b/langtools/make/gensrc/Gensrc-jdk.dev.gmk similarity index 54% rename from langtools/test/tools/javah/compareTest/CompareTest.sh rename to langtools/make/gensrc/Gensrc-jdk.dev.gmk index e9ce4cfd797..bf35d05b0d0 100644 --- a/langtools/test/tools/javah/compareTest/CompareTest.sh +++ b/langtools/make/gensrc/Gensrc-jdk.dev.gmk @@ -1,11 +1,12 @@ -#!/bin/sh # -# Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. +# 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 @@ -22,22 +23,11 @@ # questions. # -jdk=${1:-/opt/jdk/1.6.0} -javah=${jdk}/bin/javah -rtjar=${jdk}/jre/lib/rt.jar +include GensrcCommon.gmk -# compile test -mkdir -p build/compareTest -/opt/jdk/1.7.0/bin/javac -classpath build/classes -d build/compareTest test/tools/javah/compareTest/*.java +$(eval $(call SetupVersionProperties,JDEPS_VERSION,\ + com/sun/tools/jdeps/resources/version.properties)) -# run test -/opt/jdk/1.7.0/bin/java -classpath build/compareTest:build/classes CompareTest $javah $rtjar 2>&1 | tee CompareTest.out - -# show diffs for tests that failed -grep 'error:' CompareTest.out | sed -e 's|.*new/||' -e 's/\.h$//' -e 's|_|.|g' > CompareTest.classes.fail - -for i in $(cat CompareTest.classes.fail) ; do - /opt/jdk/1.7.0/bin/java -classpath compareTest:build/classes CompareTest $javah $rtjar $i - diff -r old new -done +$(eval $(call SetupCompileProperties,COMPILE_PROPERTIES, $(JDEPS_VERSION))) +all: $(COMPILE_PROPERTIES) diff --git a/langtools/make/gensrc/Gensrc-jdk.javadoc.gmk b/langtools/make/gensrc/Gensrc-jdk.javadoc.gmk new file mode 100644 index 00000000000..1d9ab44b32b --- /dev/null +++ b/langtools/make/gensrc/Gensrc-jdk.javadoc.gmk @@ -0,0 +1,33 @@ +# +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +include GensrcCommon.gmk + +$(eval $(call SetupVersionProperties,JAVADOC_VERSION,\ + com/sun/tools/javadoc/resources/version.properties)) + +$(eval $(call SetupCompileProperties,COMPILE_PROPERTIES, $(JAVADOC_VERSION))) + +all: $(COMPILE_PROPERTIES) diff --git a/langtools/make/gensrc/GensrcCommon.gmk b/langtools/make/gensrc/GensrcCommon.gmk new file mode 100644 index 00000000000..efd9d23c58d --- /dev/null +++ b/langtools/make/gensrc/GensrcCommon.gmk @@ -0,0 +1,95 @@ +# +# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. 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 must be the first rule +default: all + +include $(SPEC) +include MakeBase.gmk +include JavaCompilation.gmk + +################################################################################ +# The compileprops tools compiles a properties file into a resource bundle. +TOOL_COMPILEPROPS_CMD := $(JAVA) -cp $(BUILDTOOLS_OUTPUTDIR)/langtools_tools_classes \ + compileproperties.CompileProperties -quiet + + +################################################################################ +# Sets up a rule that creates a version.properties file in the gensrc output +# directory. +# Param 1 - Variable to add generated file name to +# Param 2 - Name of version.properties file including packages from the src +# root. +define SetupVersionProperties + $(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)/$$(strip $2): + $(MKDIR) -p $$(@D) + $(PRINTF) "jdk=$(JDK_VERSION)\nfull=$(FULL_VERSION)\nrelease=$(RELEASE)\n" \ + > $$@ + + $$(strip $1) += $(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)/$$(strip $2) +endef + +################################################################################ +# Finds all properties files in the module source and creates a rule that runs +# CompileProperties on them into the gensrc dir. +# Param 1 - Variable to add targets to +# Param 2 - Extra properties files to process +define SetupCompileProperties + # Lookup the properties that need to be compiled into resource bundles. + PROPSOURCES := $2 $$(shell $(FIND) $(LANGTOOLS_TOPDIR)/src/$(MODULE)/share/classes -name "*.properties") + + # Convert .../src//share/classes/com/sun/tools/javac/resources/javac_zh_CN.properties + # to .../langtools/gensrc//com/sun/tools/javac/resources/javac_zh_CN.java + # Strip away prefix and suffix, leaving for example only: + # "/share/classes/com/sun/tools/javac/resources/javac_zh_CN" + PROPJAVAS := $$(patsubst $(LANGTOOLS_TOPDIR)/src/%, \ + $(SUPPORT_OUTPUTDIR)/gensrc/%, \ + $$(patsubst %.properties, %.java, \ + $$(subst /share/classes,, $$(PROPSOURCES)))) + + # Generate the package dirs for the tobe generated java files. Sort to remove + # duplicates. + PROPDIRS := $$(sort $$(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_, $$(PROPJAVAS))))) + + # Now setup the rule for the generation of the resource bundles. + $(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)/_the_props: $$(PROPSOURCES) + $(FIND) $$(@D) -name "*.java" $(FIND_DELETE) + $(MKDIR) -p $$(@D) $$(PROPDIRS) + $(ECHO) Compiling $$(words $$(PROPSOURCES)) properties into resource bundles for $(MODULE) + $(TOOL_COMPILEPROPS_CMD) $$(PROPCMDLINE) + $(TOUCH) $$@ + + $$(strip $1) += $(SUPPORT_OUTPUTDIR)/gensrc/$(MODULE)/_the_props +endef + +################################################################################ diff --git a/langtools/make/tools/crules/MutableFieldsAnalyzer.java b/langtools/make/tools/crules/MutableFieldsAnalyzer.java index 95ae58f7ec0..bd81af5bfea 100644 --- a/langtools/make/tools/crules/MutableFieldsAnalyzer.java +++ b/langtools/make/tools/crules/MutableFieldsAnalyzer.java @@ -102,6 +102,9 @@ public class MutableFieldsAnalyzer extends AbstractCodingRulesAnalyzer { classFieldsToIgnoreMap. put("com.sun.tools.javac.file.ZipFileIndexCache", Arrays.asList("sharedInstance")); + classFieldsToIgnoreMap. + put("com.sun.tools.javac.file.JRTIndex", + Arrays.asList("sharedInstance")); classFieldsToIgnoreMap. put("com.sun.tools.javac.main.JavaCompiler", Arrays.asList("versionRB")); diff --git a/langtools/src/java.compiler/share/classes/javax/tools/ToolProvider.java b/langtools/src/java.compiler/share/classes/javax/tools/ToolProvider.java index ccd37aa6d52..46ab0c4a415 100644 --- a/langtools/src/java.compiler/share/classes/javax/tools/ToolProvider.java +++ b/langtools/src/java.compiler/share/classes/javax/tools/ToolProvider.java @@ -25,17 +25,14 @@ package javax.tools; -import java.io.File; import java.lang.ref.Reference; import java.lang.ref.WeakReference; -import java.net.URL; -import java.net.URLClassLoader; -import java.net.MalformedURLException; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.logging.Logger; import java.util.logging.Level; + import static java.util.logging.Level.*; /** @@ -89,7 +86,7 @@ public class ToolProvider { return null; } - private static final String defaultJavaCompilerName + private static final String systemJavaCompilerName = "com.sun.tools.javac.api.JavacTool"; /** @@ -99,10 +96,10 @@ public class ToolProvider { * {@code null} if no compiler is provided */ public static JavaCompiler getSystemJavaCompiler() { - return instance().getSystemTool(JavaCompiler.class, defaultJavaCompilerName); + return instance().getSystemTool(JavaCompiler.class, systemJavaCompilerName); } - private static final String defaultDocumentationToolName + private static final String systemDocumentationToolName = "com.sun.tools.javadoc.api.JavadocTool"; /** @@ -112,7 +109,7 @@ public class ToolProvider { * {@code null} if no documentation tool is provided */ public static DocumentationTool getSystemDocumentationTool() { - return instance().getSystemTool(DocumentationTool.class, defaultDocumentationToolName); + return instance().getSystemTool(DocumentationTool.class, systemDocumentationToolName); } /** @@ -125,13 +122,7 @@ public class ToolProvider { * or {@code null} if no tools are provided */ public static ClassLoader getSystemToolClassLoader() { - try { - Class c = - instance().getSystemToolClass(JavaCompiler.class, defaultJavaCompilerName); - return c.getClassLoader(); - } catch (Throwable e) { - return trace(WARNING, e); - } + return ClassLoader.getSystemClassLoader(); } @@ -145,12 +136,7 @@ public class ToolProvider { // Cache for tool classes. // Use weak references to avoid keeping classes around unnecessarily - private Map>> toolClasses = new HashMap<>(); - - // Cache for tool classloader. - // Use a weak reference to avoid keeping it around unnecessarily - private Reference refToolClassLoader = null; - + private final Map>> toolClasses = new HashMap<>(); private ToolProvider() { } @@ -158,9 +144,8 @@ public class ToolProvider { Class c = getSystemToolClass(clazz, name); try { return c.asSubclass(clazz).newInstance(); - } catch (Throwable e) { - trace(WARNING, e); - return null; + } catch (InstantiationException | IllegalAccessException | RuntimeException | Error e) { + return trace(WARNING, e); } } @@ -169,48 +154,12 @@ public class ToolProvider { Class c = (refClass == null ? null : refClass.get()); if (c == null) { try { - c = findSystemToolClass(name); - } catch (Throwable e) { + c = Class.forName(name, false, ClassLoader.getSystemClassLoader()); + } catch (ClassNotFoundException | RuntimeException | Error e) { return trace(WARNING, e); } - toolClasses.put(name, new WeakReference>(c)); + toolClasses.put(name, new WeakReference<>(c)); } return c.asSubclass(clazz); } - - private static final String[] defaultToolsLocation = { "lib", "tools.jar" }; - - private Class findSystemToolClass(String toolClassName) - throws MalformedURLException, ClassNotFoundException - { - // try loading class directly, in case tool is on the bootclasspath - try { - return Class.forName(toolClassName, false, null); - } catch (ClassNotFoundException e) { - trace(FINE, e); - - // if tool not on bootclasspath, look in default tools location (tools.jar) - ClassLoader cl = (refToolClassLoader == null ? null : refToolClassLoader.get()); - if (cl == null) { - File file = new File(System.getProperty("java.home")); - if (file.getName().equalsIgnoreCase("jre")) - file = file.getParentFile(); - for (String name : defaultToolsLocation) - file = new File(file, name); - - // if tools not found, no point in trying a URLClassLoader - // so rethrow the original exception. - if (!file.exists()) - throw e; - - URL[] urls = { file.toURI().toURL() }; - trace(FINE, urls[0].toString()); - - cl = URLClassLoader.newInstance(urls); - refToolClassLoader = new WeakReference<>(cl); - } - - return Class.forName(toolClassName, false, cl); - } - } } diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/ClientCodeWrapper.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/ClientCodeWrapper.java index dc37175a073..85b22c70556 100644 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/ClientCodeWrapper.java +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/api/ClientCodeWrapper.java @@ -26,6 +26,7 @@ package com.sun.tools.javac.api; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -55,6 +56,7 @@ import javax.tools.JavaFileManager; import javax.tools.JavaFileManager.Location; import javax.tools.JavaFileObject; import javax.tools.JavaFileObject.Kind; +import javax.tools.StandardJavaFileManager; import com.sun.source.util.TaskEvent; import com.sun.source.util.TaskListener; @@ -115,11 +117,13 @@ public class ClientCodeWrapper { public JavaFileManager wrap(JavaFileManager fm) { if (isTrusted(fm)) return fm; + if (fm instanceof StandardJavaFileManager) + return new WrappedStandardJavaFileManager((StandardJavaFileManager) fm); return new WrappedJavaFileManager(fm); } public FileObject wrap(FileObject fo) { - if (isTrusted(fo)) + if (fo == null || isTrusted(fo)) return fo; return new WrappedFileObject(fo); } @@ -132,7 +136,7 @@ public class ClientCodeWrapper { } public JavaFileObject wrap(JavaFileObject fo) { - if (isTrusted(fo)) + if (fo == null || isTrusted(fo)) return fo; return new WrappedJavaFileObject(fo); } @@ -360,6 +364,79 @@ public class ClientCodeWrapper { } } + protected class WrappedStandardJavaFileManager extends WrappedJavaFileManager + implements StandardJavaFileManager { + WrappedStandardJavaFileManager(StandardJavaFileManager clientJavaFileManager) { + super(clientJavaFileManager); + } + + @Override @DefinedBy(Api.COMPILER) + public Iterable getJavaFileObjectsFromFiles(Iterable files) { + try { + return ((StandardJavaFileManager)clientJavaFileManager).getJavaFileObjectsFromFiles(files); + } catch (ClientCodeException e) { + throw e; + } catch (RuntimeException | Error e) { + throw new ClientCodeException(e); + } + } + + @Override @DefinedBy(Api.COMPILER) + public Iterable getJavaFileObjects(File... files) { + try { + return ((StandardJavaFileManager)clientJavaFileManager).getJavaFileObjects(files); + } catch (ClientCodeException e) { + throw e; + } catch (RuntimeException | Error e) { + throw new ClientCodeException(e); + } + } + + @Override @DefinedBy(Api.COMPILER) + public Iterable getJavaFileObjectsFromStrings(Iterable names) { + try { + return ((StandardJavaFileManager)clientJavaFileManager).getJavaFileObjectsFromStrings(names); + } catch (ClientCodeException e) { + throw e; + } catch (RuntimeException | Error e) { + throw new ClientCodeException(e); + } + } + + @Override @DefinedBy(Api.COMPILER) + public Iterable getJavaFileObjects(String... names) { + try { + return ((StandardJavaFileManager)clientJavaFileManager).getJavaFileObjects(names); + } catch (ClientCodeException e) { + throw e; + } catch (RuntimeException | Error e) { + throw new ClientCodeException(e); + } + } + + @Override @DefinedBy(Api.COMPILER) + public void setLocation(Location location, Iterable path) throws IOException { + try { + ((StandardJavaFileManager)clientJavaFileManager).setLocation(location, path); + } catch (ClientCodeException e) { + throw e; + } catch (RuntimeException | Error e) { + throw new ClientCodeException(e); + } + } + + @Override @DefinedBy(Api.COMPILER) + public Iterable getLocation(Location location) { + try { + return ((StandardJavaFileManager)clientJavaFileManager).getLocation(location); + } catch (ClientCodeException e) { + throw e; + } catch (RuntimeException | Error e) { + throw new ClientCodeException(e); + } + } + } + protected class WrappedFileObject implements FileObject { protected FileObject clientFileObject; WrappedFileObject(FileObject clientFileObject) { @@ -558,47 +635,47 @@ public class ClientCodeWrapper { this.d = d; } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public Diagnostic.Kind getKind() { return d.getKind(); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public JavaFileObject getSource() { return unwrap(d.getSource()); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public long getPosition() { return d.getPosition(); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public long getStartPosition() { return d.getStartPosition(); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public long getEndPosition() { return d.getEndPosition(); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public long getLineNumber() { return d.getLineNumber(); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public long getColumnNumber() { return d.getColumnNumber(); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public String getCode() { return d.getCode(); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public String getMessage(Locale locale) { return d.getMessage(locale); } diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java index bd2c0c4eb1a..d27e18a6762 100644 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java @@ -27,21 +27,33 @@ package com.sun.tools.javac.code; import java.io.*; import java.util.EnumSet; +import java.util.HashMap; +import java.util.Map; import java.util.Set; + import javax.lang.model.SourceVersion; -import javax.tools.JavaFileObject; import javax.tools.JavaFileManager; import javax.tools.JavaFileManager.Location; +import javax.tools.JavaFileObject; import javax.tools.StandardJavaFileManager; -import static javax.tools.StandardLocation.*; - -import com.sun.tools.javac.comp.Annotate; import com.sun.tools.javac.code.Scope.WriteableScope; import com.sun.tools.javac.code.Symbol.*; +import com.sun.tools.javac.code.Symbol.ClassSymbol; +import com.sun.tools.javac.code.Symbol.Completer; +import com.sun.tools.javac.code.Symbol.CompletionFailure; +import com.sun.tools.javac.code.Symbol.PackageSymbol; +import com.sun.tools.javac.code.Symbol.TypeSymbol; +import com.sun.tools.javac.comp.Annotate; +import com.sun.tools.javac.file.JRTIndex; +import com.sun.tools.javac.file.JavacFileManager; +import com.sun.tools.javac.file.RelativePath.RelativeDirectory; import com.sun.tools.javac.jvm.ClassReader; +import com.sun.tools.javac.jvm.Profile; import com.sun.tools.javac.util.*; +import static javax.tools.StandardLocation.*; + import static com.sun.tools.javac.code.Flags.*; import static com.sun.tools.javac.code.Kinds.Kind.*; @@ -125,6 +137,18 @@ public class ClassFinder { */ protected Symbol currentOwner = null; + /** + * The currently selected profile. + */ + private final Profile profile; + + /** + * Use direct access to the JRTIndex to access the temporary + * replacement for the info that used to be in ct.sym. + * In time, this will go away and be replaced by the module system. + */ + private final JRTIndex jrtIndex; + /** * Completer that delegates to the complete-method of this class. */ @@ -168,13 +192,73 @@ public class ClassFinder { preferSource = "source".equals(options.get("-Xprefer")); userPathsFirst = options.isSet(XXUSERPATHSFIRST); - completionFailureName = options.isSet("failcomplete") ? names.fromString(options.get("failcomplete")) : null; + + // Temporary, until more info is available from the module system. + boolean useCtProps; + JavaFileManager fm = context.get(JavaFileManager.class); + if (fm instanceof JavacFileManager) { + JavacFileManager jfm = (JavacFileManager) fm; + useCtProps = jfm.isDefaultBootClassPath() && jfm.isSymbolFileEnabled(); + } else if (fm.getClass().getName().equals("com.sun.tools.sjavac.comp.SmartFileManager")) { + useCtProps = !options.isSet("ignore.symbol.file"); + } else { + useCtProps = false; + } + jrtIndex = useCtProps && JRTIndex.isAvailable() ? JRTIndex.getSharedInstance() : null; + + profile = Profile.instance(context); } + +/************************************************************************ + * Temporary ct.sym replacement + * + * The following code is a temporary substitute for the ct.sym mechanism + * used in JDK 6 thru JDK 8. + * This mechanism will eventually be superseded by the Jigsaw module system. + ***********************************************************************/ + + /** + * Returns any extra flags for a class symbol. + * This information used to be provided using private annotations + * in the class file in ct.sym; in time, this information will be + * available from the module system. + */ + long getSupplementaryFlags(ClassSymbol c) { + if (jrtIndex == null || !jrtIndex.isInJRT(c.classfile)) { + return 0; + } + + if (supplementaryFlags == null) { + supplementaryFlags = new HashMap<>(); + } + + Long flags = supplementaryFlags.get(c.packge()); + if (flags == null) { + long newFlags = 0; + try { + JRTIndex.CtSym ctSym = jrtIndex.getCtSym(c.packge().flatName()); + Profile minProfile = Profile.DEFAULT; + if (ctSym.proprietary) + newFlags |= PROPRIETARY; + if (ctSym.minProfile != null) + minProfile = Profile.lookup(ctSym.minProfile); + if (profile != Profile.DEFAULT && minProfile.value > profile.value) { + newFlags |= NOT_IN_PROFILE; + } + } catch (IOException ignore) { + } + supplementaryFlags.put(c.packge(), flags = newFlags); + } + return flags; + } + + private Map supplementaryFlags; + /************************************************************************ * Loading Classes ***********************************************************************/ @@ -259,6 +343,7 @@ public class ClassFinder { } if (classfile.getKind() == JavaFileObject.Kind.CLASS) { reader.readClassFile(c); + c.flags_field |= getSupplementaryFlags(c); } else { if (sourceCompleter != null) { sourceCompleter.complete(c); @@ -271,13 +356,15 @@ public class ClassFinder { currentClassFile = previousClassFile; } } else { - JCDiagnostic diag = - diagFactory.fragment("class.file.not.found", c.flatname); - throw - newCompletionFailure(c, diag); + throw classFileNotFound(c); } } // where + private CompletionFailure classFileNotFound(ClassSymbol c) { + JCDiagnostic diag = + diagFactory.fragment("class.file.not.found", c.flatname); + return newCompletionFailure(c, diag); + } /** Static factory for CompletionFailure objects. * In practice, only one can be used at a time, so we share one * to reduce the expense of allocating new exception objects. @@ -296,7 +383,7 @@ public class ClassFinder { return result; } } - private CompletionFailure cachedCompletionFailure = + private final CompletionFailure cachedCompletionFailure = new CompletionFailure(null, (JCDiagnostic) null); { cachedCompletionFailure.setStackTrace(new StackTraceElement[0]); diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JRTIndex.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JRTIndex.java new file mode 100644 index 00000000000..975816ded62 --- /dev/null +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JRTIndex.java @@ -0,0 +1,272 @@ +/* + * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package com.sun.tools.javac.file; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.lang.ref.SoftReference; +import java.net.URI; +import java.nio.file.DirectoryStream; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.spi.FileSystemProvider; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.MissingResourceException; +import java.util.ResourceBundle; +import java.util.Set; + +import javax.tools.FileObject; + +import com.sun.tools.javac.file.RelativePath.RelativeDirectory; +import com.sun.tools.javac.nio.PathFileObject; +import com.sun.tools.javac.util.Context; + +/** + * A package-oriented index into the jrt: filesystem. + */ +public class JRTIndex { + /** Get a shared instance of the cache. */ + private static JRTIndex sharedInstance; + public synchronized static JRTIndex getSharedInstance() { + if (sharedInstance == null) { + try { + sharedInstance = new JRTIndex(); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + return sharedInstance; + } + + /** Get a context-specific instance of a cache. */ + public static JRTIndex instance(Context context) { + try { + JRTIndex instance = context.get(JRTIndex.class); + if (instance == null) + context.put(JRTIndex.class, instance = new JRTIndex()); + return instance; + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + + public static boolean isAvailable() { + for (FileSystemProvider p: FileSystemProvider.installedProviders()) { + if (p.getScheme().equals("jrt")) + return true; + } + return false; + } + + + /** + * The jrt: file system. + */ + private final FileSystem jrtfs; + + /** + * The set of module directories within the jrt: file system. + */ + private final Set jrtModules; + + /** + * A lazily evaluated set of entries about the contents of the jrt: file system. + */ + private final Map> entries; + + /** + * An entry provides cached info about a specific package directory within jrt:. + */ + class Entry { + /** + * The regular files for this package. + * For now, assume just one instance of each file across all modules. + */ + final Map files; + + /** + * The set of subdirectories in jrt: for this package. + */ + final Set subdirs; + + /** + * The info that used to be in ct.sym for classes in this package. + */ + final CtSym ctSym; + + private Entry(Map files, Set subdirs, CtSym ctSym) { + this.files = files; + this.subdirs = subdirs; + this.ctSym = ctSym; + } + } + + /** + * The info that used to be in ct.sym for classes in a package. + */ + public static class CtSym { + /** + * The classes in this package are internal and not visible. + */ + public final boolean hidden; + /** + * The classes in this package are proprietary and will generate a warning. + */ + public final boolean proprietary; + /** + * The minimum profile in which classes in this package are available. + */ + public final String minProfile; + + CtSym(boolean hidden, boolean proprietary, String minProfile) { + this.hidden = hidden; + this.proprietary = proprietary; + this.minProfile = minProfile; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("CtSym["); + boolean needSep = false; + if (hidden) { + sb.append("hidden"); + needSep = true; + } + if (proprietary) { + if (needSep) sb.append(","); + sb.append("proprietary"); + needSep = true; + } + if (minProfile != null) { + if (needSep) sb.append(","); + sb.append(minProfile); + } + sb.append("]"); + return sb.toString(); + } + + static final CtSym EMPTY = new CtSym(false, false, null); + } + + /** + * Create and initialize the index. + */ + private JRTIndex() throws IOException { + jrtfs = FileSystems.getFileSystem(URI.create("jrt:/")); + jrtModules = new LinkedHashSet<>(); + Path root = jrtfs.getPath("/"); + try (DirectoryStream stream = Files.newDirectoryStream(root)) { + for (Path entry: stream) { + if (Files.isDirectory(entry)) + jrtModules.add(entry); + } + } + entries = new HashMap<>(); + } + + public CtSym getCtSym(CharSequence packageName) throws IOException { + return getEntry(RelativeDirectory.forPackage(packageName)).ctSym; + } + + synchronized Entry getEntry(RelativeDirectory rd) throws IOException { + SoftReference ref = entries.get(rd); + Entry e = (ref == null) ? null : ref.get(); + if (e == null) { + Map files = new LinkedHashMap<>(); + Set subdirs = new LinkedHashSet<>(); + for (Path module: jrtModules) { + Path p = rd.getFile(module); + if (!Files.exists(p)) + continue; + try (DirectoryStream stream = Files.newDirectoryStream(p)) { + for (Path entry: stream) { + String name = entry.getFileName().toString(); + if (Files.isRegularFile(entry)) { + // TODO: consider issue of files with same name in different modules + files.put(name, entry); + } else if (Files.isDirectory(entry)) { + subdirs.add(new RelativeDirectory(rd, name)); + } + } + } + } + e = new Entry(Collections.unmodifiableMap(files), + Collections.unmodifiableSet(subdirs), + getCtInfo(rd)); + entries.put(rd, new SoftReference<>(e)); + } + return e; + } + + public boolean isInJRT(FileObject fo) { + if (fo instanceof PathFileObject) { + Path path = ((PathFileObject) fo).getPath(); + return (path.getFileSystem() == jrtfs); + } else { + return false; + } + } + + private CtSym getCtInfo(RelativeDirectory dir) { + if (dir.path.isEmpty()) + return CtSym.EMPTY; + // It's a side-effect of the default build rules that ct.properties + // ends up as a resource bundle. + if (ctBundle == null) { + final String bundleName = "com.sun.tools.javac.resources.ct"; + ctBundle = ResourceBundle.getBundle(bundleName); + } + try { + String attrs = ctBundle.getString(dir.path.replace('/', '.') + '*'); + boolean hidden = false; + boolean proprietary = false; + String minProfile = null; + for (String attr: attrs.split(" +", 0)) { + switch (attr) { + case "hidden": + hidden = true; + break; + case "proprietary": + proprietary = true; + break; + default: + minProfile = attr; + } + } + return new CtSym(hidden, proprietary, minProfile); + } catch (MissingResourceException e) { + return CtSym.EMPTY; + } + + } + + private ResourceBundle ctBundle; +} diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java index 72c6574410e..bc29808fb81 100644 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/JavacFileManager.java @@ -25,17 +25,16 @@ package com.sun.tools.javac.file; -import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; -import java.io.OutputStreamWriter; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.nio.CharBuffer; import java.nio.charset.Charset; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -54,8 +53,9 @@ import javax.tools.JavaFileManager; import javax.tools.JavaFileObject; import javax.tools.StandardJavaFileManager; -import com.sun.tools.javac.file.RelativePath.RelativeFile; import com.sun.tools.javac.file.RelativePath.RelativeDirectory; +import com.sun.tools.javac.file.RelativePath.RelativeFile; +import com.sun.tools.javac.nio.PathFileObject; import com.sun.tools.javac.util.BaseFileManager; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.DefinedBy; @@ -65,6 +65,8 @@ import com.sun.tools.javac.util.ListBuffer; import static javax.tools.StandardLocation.*; +import static com.sun.tools.javac.util.BaseFileManager.getKind; + /** * This class provides access to the source, class and other files * used by the compiler and related tools. @@ -97,11 +99,13 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil protected enum SortFiles implements Comparator { FORWARD { + @Override public int compare(File f1, File f2) { return f1.getName().compareTo(f2.getName()); } }, REVERSE { + @Override public int compare(File f1, File f2) { return -f1.getName().compareTo(f2.getName()); } @@ -115,6 +119,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil */ public static void preRegister(Context context) { context.put(JavaFileManager.class, new Context.Factory() { + @Override public JavaFileManager make(Context c) { return new JavacFileManager(c, true, null); } @@ -161,6 +166,10 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil symbolFileEnabled = b; } + public boolean isSymbolFileEnabled() { + return symbolFileEnabled; + } + public JavaFileObject getFileForInput(String name) { return getRegularFile(new File(name)); } @@ -177,7 +186,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil return getJavaFileForOutput(CLASS_OUTPUT, classname, kind, sibling); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public Iterable getJavaFileObjectsFromStrings(Iterable names) { ListBuffer files = new ListBuffer<>(); for (String name : names) @@ -185,7 +194,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil return getJavaFileObjectsFromFiles(files.toList()); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public Iterable getJavaFileObjects(String... names) { return getJavaFileObjectsFromStrings(Arrays.asList(nullCheck(names))); } @@ -250,6 +259,40 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil System.out.println(message); } + /** + * Insert all files in a subdirectory of the platform image + * which match fileKinds into resultList. + */ + private void listJRTImage(RelativeDirectory subdirectory, + Set fileKinds, + boolean recurse, + ListBuffer resultList) throws IOException { + JRTIndex.Entry e = getJRTIndex().getEntry(subdirectory); + if (symbolFileEnabled && e.ctSym.hidden) + return; + for (Path file: e.files.values()) { + if (fileKinds.contains(getKind(file))) { + JavaFileObject fe + = PathFileObject.createJRTPathFileObject(JavacFileManager.this, file); + resultList.append(fe); + } + } + + if (recurse) { + for (RelativeDirectory rd: e.subdirs) { + listJRTImage(rd, fileKinds, recurse, resultList); + } + } + } + + private synchronized JRTIndex getJRTIndex() { + if (jrtIndex == null) + jrtIndex = JRTIndex.getSharedInstance(); + return jrtIndex; + } + + private JRTIndex jrtIndex; + /** * Insert all files in subdirectory subdirectory of directory directory @@ -334,7 +377,29 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil ListBuffer resultList) { Archive archive = archives.get(container); if (archive == null) { - // archives are not created for directories. + // Very temporary and obnoxious interim hack + if (container.getName().equals("bootmodules.jimage")) { + System.err.println("Warning: reference to bootmodules.jimage replaced by jrt:"); + container = Locations.JRT_MARKER_FILE; + } else if (container.getName().endsWith(".jimage")) { + System.err.println("Warning: reference to " + container + " ignored"); + return; + } + + // archives are not created for directories or jrt: images + if (container == Locations.JRT_MARKER_FILE) { + try { + listJRTImage(subdirectory, + fileKinds, + recurse, + resultList); + } catch (IOException ex) { + ex.printStackTrace(System.err); + log.error("error.reading.file", container, getMessage(ex)); + } + return; + } + if (fsInfo.isDirectory(container)) { listDirectory(container, subdirectory, @@ -348,8 +413,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil try { archive = openArchive(container); } catch (IOException ex) { - log.error("error.reading.file", - container, getMessage(ex)); + log.error("error.reading.file", container, getMessage(ex)); return; } } @@ -419,21 +483,26 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil public MissingArchive(File name) { zipFileName = name; } + @Override public boolean contains(RelativePath name) { return false; } + @Override public void close() { } + @Override public JavaFileObject getFileObject(RelativeDirectory subdirectory, String file) { return null; } + @Override public List getFiles(RelativeDirectory subdirectory) { return List.nil(); } + @Override public Set getSubdirectories() { return Collections.emptySet(); } @@ -448,10 +517,6 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil */ Map archives = new HashMap<>(); - private static final String[] symbolFileLocation = { "lib", "ct.sym" }; - private static final RelativeDirectory symbolFilePrefix - = new RelativeDirectory("META-INF/sym/rt.jar/"); - /* * This method looks for a ZipFormatException and takes appropriate * evasive action. If there is a failure in the fast mode then we @@ -473,19 +538,6 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil /** Open a new zip file directory, and cache it. */ private Archive openArchive(File zipFileName, boolean useOptimizedZip) throws IOException { - File origZipFileName = zipFileName; - if (symbolFileEnabled && locations.isDefaultBootClassPathRtJar(zipFileName)) { - File file = zipFileName.getParentFile().getParentFile(); // ${java.home} - if (new File(file.getName()).equals(new File("jre"))) - file = file.getParentFile(); - // file == ${jdk.home} - for (String name : symbolFileLocation) - file = new File(file, name); - // file == ${jdk.home}/lib/ct.sym - if (file.exists()) - zipFileName = file; - } - Archive archive; try { @@ -522,7 +574,6 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil } } - if (origZipFileName == zipFileName) { if (!useOptimizedZip) { archive = new ZipArchive(this, zdir); } else { @@ -533,18 +584,6 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil preindexCacheLocation, options.isSet("writezipindexfiles"))); } - } else { - if (!useOptimizedZip) { - archive = new SymbolArchive(this, origZipFileName, zdir, symbolFilePrefix); - } else { - archive = new ZipFileIndexArchive(this, - zipFileIndexCache.getZipFileIndex(zipFileName, - symbolFilePrefix, - usePreindexedCache, - preindexCacheLocation, - options.isSet("writezipindexfiles"))); - } - } } catch (FileNotFoundException ex) { archive = new MissingArchive(zipFileName); } catch (ZipFileIndex.ZipFormatException zfe) { @@ -555,13 +594,13 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil archive = new MissingArchive(zipFileName); } - archives.put(origZipFileName, archive); + archives.put(zipFileName, archive); return archive; } /** Flush any output resources. */ - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public void flush() { contentCache.clear(); } @@ -569,19 +608,19 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil /** * Close the JavaFileManager, releasing resources. */ - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public void close() { for (Iterator i = archives.values().iterator(); i.hasNext(); ) { Archive a = i.next(); i.remove(); try { a.close(); - } catch (IOException e) { + } catch (IOException ignore) { } } } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public ClassLoader getClassLoader(Location location) { nullCheck(location); Iterable path = getLocation(location); @@ -599,7 +638,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil return getClassLoader(lb.toArray(new URL[lb.size()])); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public Iterable list(Location location, String packageName, Set kinds, @@ -621,7 +660,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil return results.toList(); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public String inferBinaryName(Location location, JavaFileObject file) { file.getClass(); // null check location.getClass(); // null check @@ -633,27 +672,32 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil if (file instanceof BaseFileObject) { return ((BaseFileObject) file).inferBinaryName(path); + } else if (file instanceof PathFileObject) { + return ((PathFileObject) file).inferBinaryName(null); } else throw new IllegalArgumentException(file.getClass().getName()); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public boolean isSameFile(FileObject a, FileObject b) { nullCheck(a); nullCheck(b); - if (!(a instanceof BaseFileObject)) + if (a instanceof PathFileObject && b instanceof PathFileObject) + return ((PathFileObject) a).isSameFile((PathFileObject) b); + // In time, we should phase out BaseFileObject in favor of PathFileObject + if (!(a instanceof BaseFileObject || a instanceof PathFileObject)) throw new IllegalArgumentException("Not supported: " + a); - if (!(b instanceof BaseFileObject)) + if (!(b instanceof BaseFileObject || b instanceof PathFileObject)) throw new IllegalArgumentException("Not supported: " + b); return a.equals(b); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public boolean hasLocation(Location location) { return getLocation(location) != null; } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public JavaFileObject getJavaFileForInput(Location location, String className, JavaFileObject.Kind kind) @@ -668,7 +712,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil return getFileForInput(location, RelativeFile.forClass(className, kind)); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public FileObject getFileForInput(Location location, String packageName, String relativeName) @@ -690,17 +734,26 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil if (path == null) return null; - for (File dir: path) { - Archive a = archives.get(dir); + for (File file: path) { + Archive a = archives.get(file); if (a == null) { - if (fsInfo.isDirectory(dir)) { - File f = name.getFile(dir); + // archives are not created for directories or jrt: images + if (file == Locations.JRT_MARKER_FILE) { + JRTIndex.Entry e = getJRTIndex().getEntry(name.dirname()); + if (symbolFileEnabled && e.ctSym.hidden) + continue; + Path p = e.files.get(name.basename()); + if (p != null) + return PathFileObject.createJRTPathFileObject(this, p); + continue; + } else if (fsInfo.isDirectory(file)) { + File f = name.getFile(file); if (f.exists()) return new RegularFileObject(this, f); continue; } // Not a directory, create the archive - a = openArchive(dir); + a = openArchive(file); } // Process the archive if (a.contains(name)) { @@ -710,7 +763,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil return null; } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public JavaFileObject getJavaFileForOutput(Location location, String className, JavaFileObject.Kind kind, @@ -726,7 +779,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil return getFileForOutput(location, RelativeFile.forClass(className, kind), sibling); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public FileObject getFileForOutput(Location location, String packageName, String relativeName, @@ -776,7 +829,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public Iterable getJavaFileObjectsFromFiles( Iterable files) { @@ -790,12 +843,12 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil return result; } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public Iterable getJavaFileObjects(File... files) { return getJavaFileObjectsFromFiles(Arrays.asList(nullCheck(files))); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public void setLocation(Location location, Iterable path) throws IOException @@ -804,7 +857,7 @@ public class JavacFileManager extends BaseFileManager implements StandardJavaFil locations.setLocation(location, path); } - @DefinedBy(Api.COMPILER) + @Override @DefinedBy(Api.COMPILER) public Iterable getLocation(Location location) { nullCheck(location); return locations.getLocation(location); diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/Locations.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/Locations.java index 33cb4c8245e..526bf751104 100644 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/Locations.java +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/Locations.java @@ -27,8 +27,12 @@ package com.sun.tools.javac.file; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.UncheckedIOException; import java.net.MalformedURLException; import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -41,6 +45,8 @@ import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import java.util.StringTokenizer; +import java.util.stream.Collectors; +import java.util.stream.Stream; import java.util.zip.ZipFile; import javax.tools.JavaFileManager; @@ -94,6 +100,12 @@ public class Locations { */ private boolean warn; + // Used by Locations(for now) to indicate that the PLATFORM_CLASS_PATH + // should use the jrt: file system. + // When Locations has been converted to use java.nio.file.Path, + // Locations can use Paths.get(URI.create("jrt:")) + static final File JRT_MARKER_FILE = new File("JRT_MARKER_FILE"); + public Locations() { initHandlers(); } @@ -115,12 +127,6 @@ public class Locations { return h.isDefault(); } - boolean isDefaultBootClassPathRtJar(File file) { - BootClassPathLocationHandler h - = (BootClassPathLocationHandler) getHandler(PLATFORM_CLASS_PATH); - return h.isDefaultRtJar(file); - } - public Collection userClassPath() { return getLocation(CLASS_PATH); } @@ -283,7 +289,7 @@ public class Locations { if (fsInfo.isFile(file)) { /* File is an ordinary file. */ - if (!isArchive(file)) { + if (!isArchive(file) && !file.getName().endsWith(".jimage")) { /* Not a recognized extension; open it to see if it looks like a valid zip file. */ try { @@ -309,7 +315,7 @@ public class Locations { super.add(file); canonicalValues.add(canonFile); - if (expandJarClassPaths && fsInfo.isFile(file)) { + if (expandJarClassPaths && fsInfo.isFile(file) && !file.getName().endsWith(".jimage")) { addJarClassPath(file, warn); } } @@ -543,15 +549,9 @@ public class Locations { final Map optionValues = new EnumMap<>(Option.class); /** - * rt.jar as found on the default bootclasspath. If the user specified a bootclasspath, null - * is used. + * Is the bootclasspath the default? */ - private File defaultBootClassPathRtJar = null; - - /** - * Is bootclasspath the default? - */ - private boolean isDefaultBootClassPath; + private boolean isDefault; BootClassPathLocationHandler() { super(StandardLocation.PLATFORM_CLASS_PATH, @@ -564,12 +564,7 @@ public class Locations { boolean isDefault() { lazy(); - return isDefaultBootClassPath; - } - - boolean isDefaultRtJar(File file) { - lazy(); - return file.equals(defaultBootClassPathRtJar); + return isDefault; } @Override @@ -614,16 +609,16 @@ public class Locations { if (files == null) { searchPath = null; // reset to "uninitialized" } else { - defaultBootClassPathRtJar = null; - isDefaultBootClassPath = false; + isDefault = false; SearchPath p = new SearchPath().addFiles(files, false); searchPath = Collections.unmodifiableCollection(p); optionValues.clear(); } } - SearchPath computePath() { - defaultBootClassPathRtJar = null; + SearchPath computePath() throws IOException { + String java_home = System.getProperty("java.home"); + SearchPath path = new SearchPath(); String bootclasspathOpt = optionValues.get(BOOTCLASSPATH); @@ -643,13 +638,13 @@ public class Locations { path.addFiles(bootclasspathOpt); } else { // Standard system classes for this compiler's release. - String files = System.getProperty("sun.boot.class.path"); - path.addFiles(files, false); - File rt_jar = new File("rt.jar"); - for (File file : getPathEntries(files)) { - if (new File(file.getName()).equals(rt_jar)) { - defaultBootClassPathRtJar = file; - } + Collection systemClasses = systemClasses(java_home); + if (systemClasses != null) { + path.addFiles(systemClasses, false); + } else { + // fallback to the value of sun.boot.class.path + String files = System.getProperty("sun.boot.class.path"); + path.addFiles(files, false); } } @@ -661,20 +656,69 @@ public class Locations { if (extdirsOpt != null) { path.addDirectories(extdirsOpt); } else { + // Add lib/jfxrt.jar to the search path + File jfxrt = new File(new File(java_home, "lib"), "jfxrt.jar"); + if (jfxrt.exists()) { + path.addFile(jfxrt, false); + } path.addDirectories(System.getProperty("java.ext.dirs"), false); } - isDefaultBootClassPath - = (xbootclasspathPrependOpt == null) + isDefault = + (xbootclasspathPrependOpt == null) && (bootclasspathOpt == null) && (xbootclasspathAppendOpt == null); return path; } + /** + * Return a collection of files containing system classes. + * Returns {@code null} if not running on a modular image. + * + * @throws UncheckedIOException if an I/O errors occurs + */ + private Collection systemClasses(String java_home) throws IOException { + // Return .jimage files if available + Path libModules = Paths.get(java_home, "lib", "modules"); + if (Files.exists(libModules)) { + try (Stream files = Files.list(libModules)) { + boolean haveJImageFiles = + files.anyMatch(f -> f.getFileName().toString().endsWith(".jimage")); + if (haveJImageFiles) { + return Collections.singleton(JRT_MARKER_FILE); + } + } + } + + // Temporary: if no .jimage files, return individual modules + if (Files.exists(libModules.resolve("java.base"))) { + return Files.list(libModules) + .map(d -> d.resolve("classes")) + .map(Path::toFile) + .collect(Collectors.toList()); + } + + // Exploded module image + Path modules = Paths.get(java_home, "modules"); + if (Files.isDirectory(modules.resolve("java.base"))) { + return Files.list(modules) + .map(Path::toFile) + .collect(Collectors.toList()); + } + + // not a modular image that we know about + return null; + } + private void lazy() { if (searchPath == null) { + try { searchPath = Collections.unmodifiableCollection(computePath()); + } catch (IOException e) { + // TODO: need better handling here, e.g. javac Abort? + throw new UncheckedIOException(e); + } } } } diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/RelativePath.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/RelativePath.java index 564ff170348..6da5c1fce9e 100644 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/RelativePath.java +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/RelativePath.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,8 +26,13 @@ package com.sun.tools.javac.file; import java.io.File; +import java.nio.file.FileSystems; +import java.nio.file.InvalidPathException; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; + import javax.tools.JavaFileObject; /** @@ -58,6 +63,16 @@ public abstract class RelativePath implements Comparable { return new File(directory, path.replace('/', File.separatorChar)); } + public Path getFile(Path directory) throws /*unchecked*/ InvalidPathException { + if (directory == null) { + String sep = FileSystems.getDefault().getSeparator(); + return Paths.get(path.replace("/", sep)); + } else { + String sep = directory.getFileSystem().getSeparator(); + return directory.resolve(path.replace("/", sep)); + } + } + public int compareTo(RelativePath other) { return path.compareTo(other.path); } diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/SymbolArchive.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/SymbolArchive.java deleted file mode 100644 index 581527d6c6f..00000000000 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/file/SymbolArchive.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2005, 2009, 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.file; - -import java.io.File; -import java.io.IOException; -import java.util.zip.ZipEntry; -import java.util.zip.ZipFile; -import javax.tools.JavaFileObject; - -import com.sun.tools.javac.file.RelativePath.RelativeDirectory; -import com.sun.tools.javac.file.RelativePath.RelativeFile; -import com.sun.tools.javac.util.List; - -/** - *

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. -*/ -public class SymbolArchive extends ZipArchive { - - final File origFile; - final RelativeDirectory prefix; - - public SymbolArchive(JavacFileManager fileManager, File orig, ZipFile zdir, RelativeDirectory prefix) throws IOException { - super(fileManager, zdir, false); - this.origFile = orig; - this.prefix = prefix; - initMap(); - } - - @Override - void addZipEntry(ZipEntry entry) { - String name = entry.getName(); - if (!name.startsWith(prefix.path)) { - return; - } - name = name.substring(prefix.path.length()); - int i = name.lastIndexOf('/'); - RelativeDirectory dirname = new RelativeDirectory(name.substring(0, i+1)); - String basename = name.substring(i + 1); - if (basename.length() == 0) { - return; - } - List list = map.get(dirname); - if (list == null) - list = List.nil(); - list = list.prepend(basename); - map.put(dirname, list); - } - - @Override - public JavaFileObject getFileObject(RelativeDirectory subdirectory, String file) { - RelativeDirectory prefix_subdir = new RelativeDirectory(prefix, subdirectory.path); - ZipEntry ze = new RelativeFile(prefix_subdir, file).getZipEntry(zfile); - return new SymbolFileObject(this, file, ze); - } - - @Override - public String toString() { - return "SymbolArchive[" + zfile.getName() + "]"; - } - - /** - * A subclass of JavaFileObject representing zip entries in a symbol file. - */ - public static class SymbolFileObject extends ZipFileObject { - protected SymbolFileObject(SymbolArchive zarch, String name, ZipEntry entry) { - super(zarch, name, entry); - } - - @Override - protected String inferBinaryName(Iterable path) { - String entryName = entry.getName(); - String prefix = ((SymbolArchive) zarch).prefix.path; - if (entryName.startsWith(prefix)) - entryName = entryName.substring(prefix.length()); - return removeExtension(entryName).replace('/', '.'); - } - } - - -} diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java index 2dddaa17929..091ad869436 100644 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java @@ -1299,21 +1299,7 @@ public class ClassReader { ListBuffer proxies = new ListBuffer<>(); for (int i = 0; i v: proxy.values) { - if (v.fst == names.value && v.snd instanceof Attribute.Constant) { - Attribute.Constant c = (Attribute.Constant) v.snd; - if (c.type == syms.intType && ((Integer) c.value) > profile.value) { - sym.flags_field |= NOT_IN_PROFILE; - } - } - } - } - } else - proxies.append(proxy); + proxies.append(proxy); } annotate.normal(new AnnotationCompleter(sym, proxies.toList())); } diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/nio/JavacPathFileManager.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/nio/JavacPathFileManager.java index 9a05715f8e8..0696611a657 100644 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/nio/JavacPathFileManager.java +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/nio/JavacPathFileManager.java @@ -368,7 +368,7 @@ public class JavacPathFileManager extends BaseFileManager implements PathFileMan @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) { Path name = dir.getFileName(); - if (name == null || SourceVersion.isIdentifier(name.toString())) // JSR 292? + if (name == null || SourceVersion.isIdentifier(name.toString())) return FileVisitResult.CONTINUE; else return FileVisitResult.SKIP_SUBTREE; @@ -377,6 +377,9 @@ public class JavacPathFileManager extends BaseFileManager implements PathFileMan @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { if (attrs.isRegularFile() && kinds.contains(getKind(file.getFileName().toString()))) { + // WORKAROUND for .jimage files + if (!file.isAbsolute()) + file = pathDir.resolve(file); JavaFileObject fe = PathFileObject.createDirectoryPathFileObject( JavacPathFileManager.this, file, pathDir); diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/nio/PathFileObject.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/nio/PathFileObject.java index 8d687eea8e9..f1715f4f6a5 100644 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/nio/PathFileObject.java +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/nio/PathFileObject.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -62,19 +62,19 @@ import com.sun.tools.javac.util.DefinedBy.Api; * This code and its internal interfaces are subject to change or * deletion without notice. */ -abstract class PathFileObject implements JavaFileObject { - private JavacPathFileManager fileManager; - private Path path; +public abstract class PathFileObject implements JavaFileObject { + private final BaseFileManager fileManager; + private final Path path; /** * Create a PathFileObject within a directory, such that the binary name * can be inferred from the relationship to the parent directory. */ - static PathFileObject createDirectoryPathFileObject(JavacPathFileManager fileManager, + static PathFileObject createDirectoryPathFileObject(BaseFileManager fileManager, final Path path, final Path dir) { return new PathFileObject(fileManager, path) { @Override - String inferBinaryName(Iterable paths) { + public String inferBinaryName(Iterable paths) { return toBinaryName(dir.relativize(path)); } }; @@ -84,25 +84,40 @@ abstract class PathFileObject implements JavaFileObject { * Create a PathFileObject in a file system such as a jar file, such that * the binary name can be inferred from its position within the filesystem. */ - static PathFileObject createJarPathFileObject(JavacPathFileManager fileManager, + public static PathFileObject createJarPathFileObject(BaseFileManager fileManager, final Path path) { return new PathFileObject(fileManager, path) { @Override - String inferBinaryName(Iterable paths) { + public String inferBinaryName(Iterable paths) { return toBinaryName(path); } }; } + /** + * Create a PathFileObject in a modular file system, such as jrt:, such that + * the binary name can be inferred from its position within the filesystem. + */ + public static PathFileObject createJRTPathFileObject(BaseFileManager fileManager, + final Path path) { + return new PathFileObject(fileManager, path) { + @Override + public String inferBinaryName(Iterable paths) { + // use subpath to ignore the leading component containing the module name + return toBinaryName(path.subpath(1, path.getNameCount())); + } + }; + } + /** * Create a PathFileObject whose binary name can be inferred from the * relative path to a sibling. */ - static PathFileObject createSiblingPathFileObject(JavacPathFileManager fileManager, + static PathFileObject createSiblingPathFileObject(BaseFileManager fileManager, final Path path, final String relativePath) { return new PathFileObject(fileManager, path) { @Override - String inferBinaryName(Iterable paths) { + public String inferBinaryName(Iterable paths) { return toBinaryName(relativePath, "/"); } }; @@ -112,11 +127,11 @@ abstract class PathFileObject implements JavaFileObject { * Create a PathFileObject whose binary name might be inferred from its * position on a search path. */ - static PathFileObject createSimplePathFileObject(JavacPathFileManager fileManager, + static PathFileObject createSimplePathFileObject(BaseFileManager fileManager, final Path path) { return new PathFileObject(fileManager, path) { @Override - String inferBinaryName(Iterable paths) { + public String inferBinaryName(Iterable paths) { Path absPath = path.toAbsolutePath(); for (Path p: paths) { Path ap = p.toAbsolutePath(); @@ -135,20 +150,20 @@ abstract class PathFileObject implements JavaFileObject { }; } - protected PathFileObject(JavacPathFileManager fileManager, Path path) { + protected PathFileObject(BaseFileManager fileManager, Path path) { fileManager.getClass(); // null check path.getClass(); // null check this.fileManager = fileManager; this.path = path; } - abstract String inferBinaryName(Iterable paths); + public abstract String inferBinaryName(Iterable paths); /** * Return the Path for this object. * @return the Path for this object. */ - Path getPath() { + public Path getPath() { return path; } diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/ct.properties b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/ct.properties new file mode 100644 index 00000000000..71f53c1ea70 --- /dev/null +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/ct.properties @@ -0,0 +1,749 @@ +apple.applescript.*: hidden +apple.laf.*: hidden +apple.security.*: hidden +com.apple.concurrent.*: hidden +com.apple.eawt.*: hidden +com.apple.eawt.event.*: hidden +com.apple.eio.*: hidden +com.apple.laf.*: hidden +com.oracle.webservices.internal.api.*: hidden +com.oracle.webservices.internal.api.databinding.*: hidden +com.oracle.webservices.internal.api.message.*: hidden +com.oracle.webservices.internal.impl.encoding.*: hidden +com.oracle.webservices.internal.impl.internalspi.encoding.*: hidden +com.oracle.xmlns.internal.webservices.jaxws_databinding.*: hidden +com.sun.accessibility.internal.resources.*: proprietary +com.sun.activation.registries.*: hidden +com.sun.awt.*: proprietary +com.sun.beans.*: proprietary +com.sun.beans.decoder.*: hidden +com.sun.beans.editors.*: hidden +com.sun.beans.finder.*: hidden +com.sun.beans.infos.*: hidden +com.sun.beans.introspect.*: hidden +com.sun.beans.util.*: hidden +com.sun.corba.se.impl.activation.*: proprietary +com.sun.corba.se.impl.copyobject.*: proprietary +com.sun.corba.se.impl.corba.*: proprietary +com.sun.corba.se.impl.dynamicany.*: proprietary +com.sun.corba.se.impl.encoding.*: proprietary +com.sun.corba.se.impl.interceptors.*: proprietary +com.sun.corba.se.impl.io.*: proprietary +com.sun.corba.se.impl.ior.*: proprietary +com.sun.corba.se.impl.ior.iiop.*: proprietary +com.sun.corba.se.impl.javax.rmi.*: proprietary +com.sun.corba.se.impl.javax.rmi.CORBA.*: proprietary +com.sun.corba.se.impl.legacy.connection.*: proprietary +com.sun.corba.se.impl.logging.*: proprietary +com.sun.corba.se.impl.monitoring.*: proprietary +com.sun.corba.se.impl.naming.cosnaming.*: proprietary +com.sun.corba.se.impl.naming.namingutil.*: proprietary +com.sun.corba.se.impl.naming.pcosnaming.*: proprietary +com.sun.corba.se.impl.oa.*: proprietary +com.sun.corba.se.impl.oa.poa.*: proprietary +com.sun.corba.se.impl.oa.toa.*: proprietary +com.sun.corba.se.impl.orb.*: proprietary +com.sun.corba.se.impl.orbutil.*: proprietary +com.sun.corba.se.impl.orbutil.closure.*: proprietary +com.sun.corba.se.impl.orbutil.concurrent.*: proprietary +com.sun.corba.se.impl.orbutil.fsm.*: proprietary +com.sun.corba.se.impl.orbutil.graph.*: proprietary +com.sun.corba.se.impl.orbutil.threadpool.*: proprietary +com.sun.corba.se.impl.presentation.rmi.*: proprietary +com.sun.corba.se.impl.protocol.*: proprietary +com.sun.corba.se.impl.protocol.giopmsgheaders.*: proprietary +com.sun.corba.se.impl.resolver.*: proprietary +com.sun.corba.se.impl.transport.*: proprietary +com.sun.corba.se.impl.util.*: proprietary +com.sun.corba.se.internal.CosNaming.*: proprietary +com.sun.corba.se.internal.Interceptors.*: proprietary +com.sun.corba.se.internal.POA.*: proprietary +com.sun.corba.se.internal.corba.*: proprietary +com.sun.corba.se.internal.iiop.*: proprietary +com.sun.corba.se.org.omg.CORBA.*: proprietary +com.sun.corba.se.pept.broker.*: proprietary +com.sun.corba.se.pept.encoding.*: proprietary +com.sun.corba.se.pept.protocol.*: proprietary +com.sun.corba.se.pept.transport.*: proprietary +com.sun.corba.se.spi.activation.*: proprietary +com.sun.corba.se.spi.activation.InitialNameServicePackage.*: proprietary +com.sun.corba.se.spi.activation.LocatorPackage.*: proprietary +com.sun.corba.se.spi.activation.RepositoryPackage.*: proprietary +com.sun.corba.se.spi.copyobject.*: proprietary +com.sun.corba.se.spi.encoding.*: proprietary +com.sun.corba.se.spi.extension.*: proprietary +com.sun.corba.se.spi.ior.*: proprietary +com.sun.corba.se.spi.ior.iiop.*: proprietary +com.sun.corba.se.spi.legacy.connection.*: proprietary +com.sun.corba.se.spi.legacy.interceptor.*: proprietary +com.sun.corba.se.spi.logging.*: proprietary +com.sun.corba.se.spi.monitoring.*: proprietary +com.sun.corba.se.spi.oa.*: proprietary +com.sun.corba.se.spi.orb.*: proprietary +com.sun.corba.se.spi.orbutil.closure.*: proprietary +com.sun.corba.se.spi.orbutil.fsm.*: proprietary +com.sun.corba.se.spi.orbutil.proxy.*: proprietary +com.sun.corba.se.spi.orbutil.threadpool.*: proprietary +com.sun.corba.se.spi.presentation.rmi.*: proprietary +com.sun.corba.se.spi.protocol.*: proprietary +com.sun.corba.se.spi.resolver.*: proprietary +com.sun.corba.se.spi.servicecontext.*: proprietary +com.sun.corba.se.spi.transport.*: proprietary +com.sun.demo.jvmti.hprof.*: hidden +com.sun.imageio.plugins.bmp.*: proprietary +com.sun.imageio.plugins.common.*: proprietary +com.sun.imageio.plugins.gif.*: proprietary +com.sun.imageio.plugins.jpeg.*: proprietary +com.sun.imageio.plugins.png.*: proprietary +com.sun.imageio.plugins.wbmp.*: proprietary +com.sun.imageio.spi.*: proprietary +com.sun.imageio.stream.*: hidden +com.sun.istack.internal.*: hidden +com.sun.istack.internal.localization.*: hidden +com.sun.istack.internal.logging.*: hidden +com.sun.java.swing.*: proprietary +com.sun.java.swing.plaf.gtk.resources.*: proprietary +com.sun.java.swing.plaf.motif.resources.*: proprietary +com.sun.java.swing.plaf.nimbus.*: proprietary +com.sun.java.swing.plaf.windows.resources.*: proprietary +com.sun.java.util.jar.pack.*: proprietary compact1 +com.sun.java_cup.internal.runtime.*: proprietary compact2 +com.sun.jmx.defaults.*: proprietary compact3 +com.sun.jmx.interceptor.*: proprietary compact3 +com.sun.jmx.mbeanserver.*: proprietary compact3 +com.sun.jmx.remote.internal.*: proprietary compact3 +com.sun.jmx.remote.protocol.rmi.*: proprietary compact3 +com.sun.jmx.remote.security.*: proprietary compact3 +com.sun.jmx.remote.util.*: proprietary compact3 +com.sun.jndi.cosnaming.*: proprietary +com.sun.jndi.dns.*: proprietary compact3 +com.sun.jndi.ldap.*: proprietary compact3 +com.sun.jndi.ldap.ext.*: proprietary compact3 +com.sun.jndi.ldap.pool.*: proprietary compact3 +com.sun.jndi.ldap.sasl.*: proprietary compact3 +com.sun.jndi.rmi.registry.*: proprietary compact3 +com.sun.jndi.toolkit.corba.*: proprietary +com.sun.jndi.toolkit.ctx.*: proprietary compact3 +com.sun.jndi.toolkit.dir.*: proprietary compact3 +com.sun.jndi.toolkit.url.*: proprietary compact3 +com.sun.jndi.url.corbaname.*: proprietary +com.sun.jndi.url.dns.*: proprietary compact3 +com.sun.jndi.url.iiop.*: proprietary +com.sun.jndi.url.iiopname.*: proprietary +com.sun.jndi.url.ldap.*: proprietary compact3 +com.sun.jndi.url.ldaps.*: proprietary compact3 +com.sun.jndi.url.rmi.*: proprietary compact3 +com.sun.management.*: compact3 +com.sun.media.sound.*: proprietary +com.sun.naming.internal.*: proprietary compact3 +com.sun.net.httpserver.*: compact2 +com.sun.net.httpserver.spi.*: compact2 +com.sun.net.ssl.*: compact1 +com.sun.net.ssl.internal.www.protocol.https.*: proprietary compact1 +com.sun.nio.file.*: compact1 +com.sun.nio.sctp.*: compact3 +com.sun.org.apache.bcel.internal.*: proprietary compact2 +com.sun.org.apache.bcel.internal.classfile.*: proprietary compact2 +com.sun.org.apache.bcel.internal.generic.*: proprietary compact2 +com.sun.org.apache.bcel.internal.util.*: proprietary compact2 +com.sun.org.apache.regexp.internal.*: proprietary compact2 +com.sun.org.apache.xalan.internal.*: proprietary compact2 +com.sun.org.apache.xalan.internal.extensions.*: proprietary compact2 +com.sun.org.apache.xalan.internal.lib.*: proprietary compact2 +com.sun.org.apache.xalan.internal.res.*: proprietary compact2 +com.sun.org.apache.xalan.internal.templates.*: proprietary compact2 +com.sun.org.apache.xalan.internal.utils.*: hidden +com.sun.org.apache.xalan.internal.xslt.*: proprietary compact2 +com.sun.org.apache.xalan.internal.xsltc.*: proprietary compact2 +com.sun.org.apache.xalan.internal.xsltc.cmdline.*: proprietary compact2 +com.sun.org.apache.xalan.internal.xsltc.cmdline.getopt.*: proprietary compact2 +com.sun.org.apache.xalan.internal.xsltc.compiler.*: proprietary compact2 +com.sun.org.apache.xalan.internal.xsltc.compiler.util.*: proprietary compact2 +com.sun.org.apache.xalan.internal.xsltc.dom.*: proprietary compact2 +com.sun.org.apache.xalan.internal.xsltc.runtime.*: proprietary compact2 +com.sun.org.apache.xalan.internal.xsltc.runtime.output.*: proprietary compact2 +com.sun.org.apache.xalan.internal.xsltc.trax.*: proprietary compact2 +com.sun.org.apache.xalan.internal.xsltc.util.*: proprietary compact2 +com.sun.org.apache.xerces.internal.dom.*: proprietary compact2 +com.sun.org.apache.xerces.internal.dom.events.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.dtd.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.dtd.models.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.dv.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.dv.dtd.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.dv.util.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.dv.xs.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.io.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.msg.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.validation.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.xpath.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.xpath.regex.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.xs.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.xs.identity.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.xs.models.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.xs.opti.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.xs.traversers.*: proprietary compact2 +com.sun.org.apache.xerces.internal.impl.xs.util.*: proprietary compact2 +com.sun.org.apache.xerces.internal.jaxp.*: proprietary compact2 +com.sun.org.apache.xerces.internal.jaxp.datatype.*: proprietary compact2 +com.sun.org.apache.xerces.internal.jaxp.validation.*: proprietary compact2 +com.sun.org.apache.xerces.internal.parsers.*: proprietary compact2 +com.sun.org.apache.xerces.internal.util.*: proprietary compact2 +com.sun.org.apache.xerces.internal.utils.*: hidden +com.sun.org.apache.xerces.internal.xinclude.*: proprietary compact2 +com.sun.org.apache.xerces.internal.xni.*: proprietary compact2 +com.sun.org.apache.xerces.internal.xni.grammars.*: proprietary compact2 +com.sun.org.apache.xerces.internal.xni.parser.*: proprietary compact2 +com.sun.org.apache.xerces.internal.xpointer.*: hidden +com.sun.org.apache.xerces.internal.xs.*: proprietary compact2 +com.sun.org.apache.xerces.internal.xs.datatypes.*: hidden +com.sun.org.apache.xml.internal.dtm.*: proprietary compact2 +com.sun.org.apache.xml.internal.dtm.ref.*: proprietary compact2 +com.sun.org.apache.xml.internal.dtm.ref.dom2dtm.*: proprietary compact2 +com.sun.org.apache.xml.internal.dtm.ref.sax2dtm.*: proprietary compact2 +com.sun.org.apache.xml.internal.res.*: proprietary compact2 +com.sun.org.apache.xml.internal.resolver.*: hidden +com.sun.org.apache.xml.internal.resolver.helpers.*: hidden +com.sun.org.apache.xml.internal.resolver.readers.*: hidden +com.sun.org.apache.xml.internal.resolver.tools.*: hidden +com.sun.org.apache.xml.internal.security.*: hidden +com.sun.org.apache.xml.internal.security.algorithms.*: hidden +com.sun.org.apache.xml.internal.security.algorithms.implementations.*: hidden +com.sun.org.apache.xml.internal.security.c14n.*: hidden +com.sun.org.apache.xml.internal.security.c14n.helper.*: hidden +com.sun.org.apache.xml.internal.security.c14n.implementations.*: hidden +com.sun.org.apache.xml.internal.security.encryption.*: hidden +com.sun.org.apache.xml.internal.security.exceptions.*: hidden +com.sun.org.apache.xml.internal.security.keys.*: hidden +com.sun.org.apache.xml.internal.security.keys.content.*: hidden +com.sun.org.apache.xml.internal.security.keys.content.keyvalues.*: hidden +com.sun.org.apache.xml.internal.security.keys.content.x509.*: hidden +com.sun.org.apache.xml.internal.security.keys.keyresolver.*: hidden +com.sun.org.apache.xml.internal.security.keys.keyresolver.implementations.*: hidden +com.sun.org.apache.xml.internal.security.keys.storage.*: hidden +com.sun.org.apache.xml.internal.security.keys.storage.implementations.*: hidden +com.sun.org.apache.xml.internal.security.signature.*: hidden +com.sun.org.apache.xml.internal.security.signature.reference.*: hidden +com.sun.org.apache.xml.internal.security.transforms.*: hidden +com.sun.org.apache.xml.internal.security.transforms.implementations.*: hidden +com.sun.org.apache.xml.internal.security.transforms.params.*: hidden +com.sun.org.apache.xml.internal.security.utils.*: hidden +com.sun.org.apache.xml.internal.security.utils.resolver.*: hidden +com.sun.org.apache.xml.internal.security.utils.resolver.implementations.*: hidden +com.sun.org.apache.xml.internal.serialize.*: proprietary compact2 +com.sun.org.apache.xml.internal.serializer.*: proprietary compact2 +com.sun.org.apache.xml.internal.serializer.dom3.*: hidden +com.sun.org.apache.xml.internal.serializer.utils.*: hidden +com.sun.org.apache.xml.internal.utils.*: proprietary compact2 +com.sun.org.apache.xml.internal.utils.res.*: proprietary compact2 +com.sun.org.apache.xpath.internal.*: proprietary compact2 +com.sun.org.apache.xpath.internal.axes.*: proprietary compact2 +com.sun.org.apache.xpath.internal.compiler.*: proprietary compact2 +com.sun.org.apache.xpath.internal.domapi.*: hidden +com.sun.org.apache.xpath.internal.functions.*: proprietary compact2 +com.sun.org.apache.xpath.internal.jaxp.*: proprietary compact2 +com.sun.org.apache.xpath.internal.objects.*: proprietary compact2 +com.sun.org.apache.xpath.internal.operations.*: proprietary compact2 +com.sun.org.apache.xpath.internal.patterns.*: proprietary compact2 +com.sun.org.apache.xpath.internal.res.*: proprietary compact2 +com.sun.org.glassfish.external.amx.*: hidden +com.sun.org.glassfish.external.arc.*: hidden +com.sun.org.glassfish.external.probe.provider.*: hidden +com.sun.org.glassfish.external.probe.provider.annotations.*: hidden +com.sun.org.glassfish.external.statistics.*: hidden +com.sun.org.glassfish.external.statistics.annotations.*: hidden +com.sun.org.glassfish.external.statistics.impl.*: hidden +com.sun.org.glassfish.gmbal.*: hidden +com.sun.org.glassfish.gmbal.util.*: hidden +com.sun.org.omg.CORBA.*: proprietary +com.sun.org.omg.CORBA.ValueDefPackage.*: proprietary +com.sun.org.omg.CORBA.portable.*: proprietary +com.sun.org.omg.SendingContext.*: proprietary +com.sun.org.omg.SendingContext.CodeBasePackage.*: proprietary +com.sun.rmi.rmid.*: proprietary compact2 +com.sun.rowset.*: proprietary compact3 +com.sun.rowset.internal.*: proprietary compact3 +com.sun.rowset.providers.*: proprietary compact3 +com.sun.security.auth.*: compact3 +com.sun.security.auth.callback.*: compact3 +com.sun.security.auth.login.*: compact3 +com.sun.security.auth.module.*: compact3 +com.sun.security.cert.internal.x509.*: proprietary compact1 +com.sun.security.jgss.*: compact3 +com.sun.security.ntlm.*: hidden +com.sun.security.sasl.*: proprietary compact3 +com.sun.security.sasl.digest.*: proprietary compact3 +com.sun.security.sasl.gsskerb.*: proprietary compact3 +com.sun.security.sasl.ntlm.*: hidden +com.sun.security.sasl.util.*: proprietary compact3 +com.sun.swing.internal.plaf.basic.resources.*: proprietary +com.sun.swing.internal.plaf.metal.resources.*: proprietary +com.sun.swing.internal.plaf.synth.resources.*: proprietary +com.sun.tracing.*: proprietary compact3 +com.sun.tracing.dtrace.*: proprietary compact3 +com.sun.xml.internal.bind.*: hidden +com.sun.xml.internal.bind.annotation.*: hidden +com.sun.xml.internal.bind.api.*: hidden +com.sun.xml.internal.bind.api.impl.*: hidden +com.sun.xml.internal.bind.marshaller.*: hidden +com.sun.xml.internal.bind.unmarshaller.*: hidden +com.sun.xml.internal.bind.util.*: hidden +com.sun.xml.internal.bind.v2.*: hidden +com.sun.xml.internal.bind.v2.bytecode.*: hidden +com.sun.xml.internal.bind.v2.model.annotation.*: hidden +com.sun.xml.internal.bind.v2.model.core.*: hidden +com.sun.xml.internal.bind.v2.model.impl.*: hidden +com.sun.xml.internal.bind.v2.model.nav.*: hidden +com.sun.xml.internal.bind.v2.model.runtime.*: hidden +com.sun.xml.internal.bind.v2.model.util.*: hidden +com.sun.xml.internal.bind.v2.runtime.*: hidden +com.sun.xml.internal.bind.v2.runtime.output.*: hidden +com.sun.xml.internal.bind.v2.runtime.property.*: hidden +com.sun.xml.internal.bind.v2.runtime.reflect.*: hidden +com.sun.xml.internal.bind.v2.runtime.reflect.opt.*: hidden +com.sun.xml.internal.bind.v2.runtime.unmarshaller.*: hidden +com.sun.xml.internal.bind.v2.schemagen.*: hidden +com.sun.xml.internal.bind.v2.schemagen.episode.*: hidden +com.sun.xml.internal.bind.v2.schemagen.xmlschema.*: hidden +com.sun.xml.internal.bind.v2.util.*: hidden +com.sun.xml.internal.fastinfoset.*: hidden +com.sun.xml.internal.fastinfoset.algorithm.*: hidden +com.sun.xml.internal.fastinfoset.alphabet.*: hidden +com.sun.xml.internal.fastinfoset.dom.*: hidden +com.sun.xml.internal.fastinfoset.org.apache.xerces.util.*: hidden +com.sun.xml.internal.fastinfoset.sax.*: hidden +com.sun.xml.internal.fastinfoset.stax.*: hidden +com.sun.xml.internal.fastinfoset.stax.events.*: hidden +com.sun.xml.internal.fastinfoset.stax.factory.*: hidden +com.sun.xml.internal.fastinfoset.stax.util.*: hidden +com.sun.xml.internal.fastinfoset.tools.*: hidden +com.sun.xml.internal.fastinfoset.util.*: hidden +com.sun.xml.internal.fastinfoset.vocab.*: hidden +com.sun.xml.internal.messaging.saaj.*: hidden +com.sun.xml.internal.messaging.saaj.client.p2p.*: hidden +com.sun.xml.internal.messaging.saaj.packaging.mime.*: hidden +com.sun.xml.internal.messaging.saaj.packaging.mime.internet.*: hidden +com.sun.xml.internal.messaging.saaj.packaging.mime.util.*: hidden +com.sun.xml.internal.messaging.saaj.soap.*: hidden +com.sun.xml.internal.messaging.saaj.soap.dynamic.*: hidden +com.sun.xml.internal.messaging.saaj.soap.impl.*: hidden +com.sun.xml.internal.messaging.saaj.soap.name.*: hidden +com.sun.xml.internal.messaging.saaj.soap.ver1_1.*: hidden +com.sun.xml.internal.messaging.saaj.soap.ver1_2.*: hidden +com.sun.xml.internal.messaging.saaj.util.*: hidden +com.sun.xml.internal.messaging.saaj.util.stax.*: hidden +com.sun.xml.internal.messaging.saaj.util.transform.*: hidden +com.sun.xml.internal.org.jvnet.fastinfoset.*: hidden +com.sun.xml.internal.org.jvnet.fastinfoset.sax.*: hidden +com.sun.xml.internal.org.jvnet.fastinfoset.sax.helpers.*: hidden +com.sun.xml.internal.org.jvnet.fastinfoset.stax.*: hidden +com.sun.xml.internal.org.jvnet.mimepull.*: hidden +com.sun.xml.internal.org.jvnet.staxex.*: hidden +com.sun.xml.internal.org.jvnet.staxex.util.*: hidden +com.sun.xml.internal.stream.*: hidden +com.sun.xml.internal.stream.buffer.*: hidden +com.sun.xml.internal.stream.buffer.sax.*: hidden +com.sun.xml.internal.stream.buffer.stax.*: hidden +com.sun.xml.internal.stream.dtd.*: hidden +com.sun.xml.internal.stream.dtd.nonvalidating.*: hidden +com.sun.xml.internal.stream.events.*: hidden +com.sun.xml.internal.stream.util.*: hidden +com.sun.xml.internal.stream.writers.*: hidden +com.sun.xml.internal.txw2.*: hidden +com.sun.xml.internal.txw2.annotation.*: hidden +com.sun.xml.internal.txw2.output.*: hidden +com.sun.xml.internal.ws.*: hidden +com.sun.xml.internal.ws.addressing.*: hidden +com.sun.xml.internal.ws.addressing.model.*: hidden +com.sun.xml.internal.ws.addressing.policy.*: hidden +com.sun.xml.internal.ws.addressing.v200408.*: hidden +com.sun.xml.internal.ws.api.*: hidden +com.sun.xml.internal.ws.api.addressing.*: hidden +com.sun.xml.internal.ws.api.client.*: hidden +com.sun.xml.internal.ws.api.config.management.*: hidden +com.sun.xml.internal.ws.api.config.management.policy.*: hidden +com.sun.xml.internal.ws.api.databinding.*: hidden +com.sun.xml.internal.ws.api.fastinfoset.*: hidden +com.sun.xml.internal.ws.api.ha.*: hidden +com.sun.xml.internal.ws.api.handler.*: hidden +com.sun.xml.internal.ws.api.message.*: hidden +com.sun.xml.internal.ws.api.message.saaj.*: hidden +com.sun.xml.internal.ws.api.message.stream.*: hidden +com.sun.xml.internal.ws.api.model.*: hidden +com.sun.xml.internal.ws.api.model.soap.*: hidden +com.sun.xml.internal.ws.api.model.wsdl.*: hidden +com.sun.xml.internal.ws.api.model.wsdl.editable.*: hidden +com.sun.xml.internal.ws.api.pipe.*: hidden +com.sun.xml.internal.ws.api.pipe.helper.*: hidden +com.sun.xml.internal.ws.api.policy.*: hidden +com.sun.xml.internal.ws.api.policy.subject.*: hidden +com.sun.xml.internal.ws.api.server.*: hidden +com.sun.xml.internal.ws.api.streaming.*: hidden +com.sun.xml.internal.ws.api.wsdl.parser.*: hidden +com.sun.xml.internal.ws.api.wsdl.writer.*: hidden +com.sun.xml.internal.ws.assembler.*: hidden +com.sun.xml.internal.ws.assembler.dev.*: hidden +com.sun.xml.internal.ws.assembler.jaxws.*: hidden +com.sun.xml.internal.ws.binding.*: hidden +com.sun.xml.internal.ws.client.*: hidden +com.sun.xml.internal.ws.client.dispatch.*: hidden +com.sun.xml.internal.ws.client.sei.*: hidden +com.sun.xml.internal.ws.commons.xmlutil.*: hidden +com.sun.xml.internal.ws.config.management.policy.*: hidden +com.sun.xml.internal.ws.config.metro.dev.*: hidden +com.sun.xml.internal.ws.config.metro.util.*: hidden +com.sun.xml.internal.ws.db.*: hidden +com.sun.xml.internal.ws.db.glassfish.*: hidden +com.sun.xml.internal.ws.developer.*: hidden +com.sun.xml.internal.ws.dump.*: hidden +com.sun.xml.internal.ws.encoding.*: hidden +com.sun.xml.internal.ws.encoding.fastinfoset.*: hidden +com.sun.xml.internal.ws.encoding.policy.*: hidden +com.sun.xml.internal.ws.encoding.soap.*: hidden +com.sun.xml.internal.ws.encoding.soap.streaming.*: hidden +com.sun.xml.internal.ws.encoding.xml.*: hidden +com.sun.xml.internal.ws.fault.*: hidden +com.sun.xml.internal.ws.handler.*: hidden +com.sun.xml.internal.ws.message.*: hidden +com.sun.xml.internal.ws.message.jaxb.*: hidden +com.sun.xml.internal.ws.message.saaj.*: hidden +com.sun.xml.internal.ws.message.source.*: hidden +com.sun.xml.internal.ws.message.stream.*: hidden +com.sun.xml.internal.ws.model.*: hidden +com.sun.xml.internal.ws.model.soap.*: hidden +com.sun.xml.internal.ws.model.wsdl.*: hidden +com.sun.xml.internal.ws.org.objectweb.asm.*: hidden +com.sun.xml.internal.ws.policy.*: hidden +com.sun.xml.internal.ws.policy.jaxws.*: hidden +com.sun.xml.internal.ws.policy.jaxws.spi.*: hidden +com.sun.xml.internal.ws.policy.privateutil.*: hidden +com.sun.xml.internal.ws.policy.sourcemodel.*: hidden +com.sun.xml.internal.ws.policy.sourcemodel.attach.*: hidden +com.sun.xml.internal.ws.policy.sourcemodel.wspolicy.*: hidden +com.sun.xml.internal.ws.policy.spi.*: hidden +com.sun.xml.internal.ws.policy.subject.*: hidden +com.sun.xml.internal.ws.protocol.soap.*: hidden +com.sun.xml.internal.ws.protocol.xml.*: hidden +com.sun.xml.internal.ws.resources.*: hidden +com.sun.xml.internal.ws.runtime.config.*: hidden +com.sun.xml.internal.ws.server.*: hidden +com.sun.xml.internal.ws.server.provider.*: hidden +com.sun.xml.internal.ws.server.sei.*: hidden +com.sun.xml.internal.ws.spi.*: hidden +com.sun.xml.internal.ws.spi.db.*: hidden +com.sun.xml.internal.ws.streaming.*: hidden +com.sun.xml.internal.ws.transport.*: hidden +com.sun.xml.internal.ws.transport.http.*: hidden +com.sun.xml.internal.ws.transport.http.client.*: hidden +com.sun.xml.internal.ws.transport.http.server.*: hidden +com.sun.xml.internal.ws.util.*: hidden +com.sun.xml.internal.ws.util.exception.*: hidden +com.sun.xml.internal.ws.util.pipe.*: hidden +com.sun.xml.internal.ws.util.xml.*: hidden +com.sun.xml.internal.ws.wsdl.*: hidden +com.sun.xml.internal.ws.wsdl.parser.*: hidden +com.sun.xml.internal.ws.wsdl.writer.*: hidden +com.sun.xml.internal.ws.wsdl.writer.document.*: hidden +com.sun.xml.internal.ws.wsdl.writer.document.http.*: hidden +com.sun.xml.internal.ws.wsdl.writer.document.soap.*: hidden +com.sun.xml.internal.ws.wsdl.writer.document.soap12.*: hidden +com.sun.xml.internal.ws.wsdl.writer.document.xsd.*: hidden +java.awt.dnd.peer.*: proprietary +java.awt.peer.*: proprietary +java.desktop.macosx.classes.com.apple.laf.resources.*: hidden +java.desktop.macosx.classes.sun.awt.resources.*: hidden +java.desktop.windows.classes.sun.awt.windows.*: hidden +java.io.*: compact1 +java.lang.*: compact1 +java.lang.annotation.*: compact1 +java.lang.instrument.*: compact3 +java.lang.invoke.*: compact1 +java.lang.management.*: compact3 +java.lang.ref.*: compact1 +java.lang.reflect.*: compact1 +java.math.*: compact1 +java.net.*: compact1 +java.nio.*: compact1 +java.nio.channels.*: compact1 +java.nio.channels.spi.*: compact1 +java.nio.charset.*: compact1 +java.nio.charset.spi.*: compact1 +java.nio.file.*: compact1 +java.nio.file.attribute.*: compact1 +java.nio.file.spi.*: compact1 +java.rmi.*: compact2 +java.rmi.activation.*: compact2 +java.rmi.dgc.*: compact2 +java.rmi.registry.*: compact2 +java.rmi.server.*: compact2 +java.security.*: compact1 +java.security.acl.*: compact3 +java.security.cert.*: compact1 +java.security.interfaces.*: compact1 +java.security.spec.*: compact1 +java.sql.*: compact2 +java.text.*: compact1 +java.text.spi.*: compact1 +java.time.*: compact1 +java.time.chrono.*: compact1 +java.time.format.*: compact1 +java.time.temporal.*: compact1 +java.time.zone.*: compact1 +java.util.*: compact1 +java.util.concurrent.*: compact1 +java.util.concurrent.atomic.*: compact1 +java.util.concurrent.locks.*: compact1 +java.util.function.*: compact1 +java.util.jar.*: compact1 +java.util.logging.*: compact1 +java.util.prefs.*: compact3 +java.util.regex.*: compact1 +java.util.spi.*: compact1 +java.util.stream.*: compact1 +java.util.zip.*: compact1 +javax.annotation.processing.*: compact3 +javax.lang.model.*: compact3 +javax.lang.model.element.*: compact3 +javax.lang.model.type.*: compact3 +javax.lang.model.util.*: compact3 +javax.management.*: compact3 +javax.management.loading.*: compact3 +javax.management.modelmbean.*: compact3 +javax.management.monitor.*: compact3 +javax.management.openmbean.*: compact3 +javax.management.relation.*: compact3 +javax.management.remote.*: compact3 +javax.management.remote.rmi.*: compact3 +javax.management.timer.*: compact3 +javax.naming.*: compact3 +javax.naming.directory.*: compact3 +javax.naming.event.*: compact3 +javax.naming.ldap.*: compact3 +javax.naming.spi.*: compact3 +javax.net.*: compact1 +javax.net.ssl.*: compact1 +javax.rmi.ssl.*: compact2 +javax.script.*: compact1 +javax.security.auth.*: compact1 +javax.security.auth.callback.*: compact1 +javax.security.auth.kerberos.*: compact3 +javax.security.auth.login.*: compact1 +javax.security.auth.spi.*: compact1 +javax.security.auth.x500.*: compact1 +javax.security.cert.*: compact1 +javax.security.sasl.*: compact3 +javax.smartcardio.*: compact3 +javax.sql.*: compact2 +javax.sql.rowset.*: compact3 +javax.sql.rowset.serial.*: compact3 +javax.sql.rowset.spi.*: compact3 +javax.tools.*: compact3 +javax.transaction.xa.*: compact2 +javax.xml.*: compact2 +javax.xml.crypto.*: compact3 +javax.xml.crypto.dom.*: compact3 +javax.xml.crypto.dsig.*: compact3 +javax.xml.crypto.dsig.dom.*: compact3 +javax.xml.crypto.dsig.keyinfo.*: compact3 +javax.xml.crypto.dsig.spec.*: compact3 +javax.xml.datatype.*: compact2 +javax.xml.namespace.*: compact2 +javax.xml.parsers.*: compact2 +javax.xml.stream.*: compact2 +javax.xml.stream.events.*: compact2 +javax.xml.stream.util.*: compact2 +javax.xml.transform.*: compact2 +javax.xml.transform.dom.*: compact2 +javax.xml.transform.sax.*: compact2 +javax.xml.transform.stax.*: compact2 +javax.xml.transform.stream.*: compact2 +javax.xml.validation.*: compact2 +javax.xml.xpath.*: compact2 +jdk.*: compact1 +jdk.internal.org.objectweb.asm.*: hidden +jdk.internal.org.objectweb.asm.commons.*: hidden +jdk.internal.org.objectweb.asm.signature.*: hidden +jdk.internal.org.objectweb.asm.tree.*: hidden +jdk.internal.org.objectweb.asm.tree.analysis.*: hidden +jdk.internal.org.objectweb.asm.util.*: hidden +jdk.internal.org.xml.sax.*: hidden +jdk.internal.org.xml.sax.helpers.*: hidden +jdk.internal.util.xml.*: hidden +jdk.internal.util.xml.impl.*: hidden +jdk.net.*: compact1 +org.ietf.jgss.*: compact3 +org.jcp.xml.dsig.internal.*: hidden +org.jcp.xml.dsig.internal.dom.*: hidden +org.w3c.dom.*: compact2 +org.w3c.dom.bootstrap.*: compact2 +org.w3c.dom.css.*: compact2 +org.w3c.dom.events.*: compact2 +org.w3c.dom.html.*: compact2 +org.w3c.dom.ls.*: compact2 +org.w3c.dom.ranges.*: compact2 +org.w3c.dom.stylesheets.*: compact2 +org.w3c.dom.traversal.*: compact2 +org.w3c.dom.views.*: compact2 +org.w3c.dom.xpath.*: hidden +org.xml.sax.*: compact2 +org.xml.sax.ext.*: compact2 +org.xml.sax.helpers.*: compact2 +sun.applet.*: proprietary +sun.applet.resources.*: proprietary +sun.awt.*: proprietary +sun.awt.X11.*: proprietary +sun.awt.datatransfer.*: proprietary +sun.awt.dnd.*: proprietary +sun.awt.event.*: hidden +sun.awt.geom.*: proprietary +sun.awt.im.*: proprietary +sun.awt.image.*: proprietary +sun.awt.motif.*: proprietary +sun.awt.resources.*: proprietary +sun.awt.shell.*: proprietary +sun.awt.util.*: hidden +sun.awt.windows.*: proprietary +sun.corba.*: proprietary +sun.datatransfer.*: hidden +sun.font.*: proprietary +sun.instrument.*: proprietary compact3 +sun.invoke.*: hidden +sun.invoke.anon.*: hidden +sun.invoke.empty.*: hidden +sun.invoke.util.*: hidden +sun.io.*: proprietary compact1 +sun.java2d.*: proprietary +sun.java2d.cmm.*: hidden +sun.java2d.cmm.lcms.*: hidden +sun.java2d.d3d.*: hidden +sun.java2d.jules.*: hidden +sun.java2d.loops.*: proprietary +sun.java2d.opengl.*: proprietary +sun.java2d.pipe.*: proprietary +sun.java2d.pipe.hw.*: hidden +sun.java2d.pisces.*: hidden +sun.java2d.windows.*: hidden +sun.java2d.x11.*: hidden +sun.java2d.xr.*: hidden +sun.launcher.*: hidden +sun.launcher.resources.*: hidden +sun.lwawt.*: hidden +sun.lwawt.macosx.*: hidden +sun.management.*: proprietary compact3 +sun.management.counter.*: proprietary compact3 +sun.management.counter.perf.*: proprietary compact3 +sun.management.jdp.*: hidden +sun.management.jmxremote.*: proprietary compact3 +sun.management.resources.*: proprietary compact3 +sun.misc.*: proprietary compact1 +sun.misc.resources.*: proprietary compact1 +sun.net.*: proprietary compact1 +sun.net.dns.*: proprietary compact3 +sun.net.ftp.*: proprietary +sun.net.ftp.impl.*: hidden +sun.net.httpserver.*: hidden +sun.net.idn.*: hidden +sun.net.sdp.*: hidden +sun.net.smtp.*: proprietary +sun.net.spi.*: proprietary compact1 +sun.net.spi.nameservice.*: proprietary compact1 +sun.net.util.*: proprietary compact1 +sun.net.www.*: proprietary compact1 +sun.net.www.content.audio.*: proprietary +sun.net.www.content.image.*: proprietary +sun.net.www.content.text.*: proprietary +sun.net.www.http.*: proprietary compact1 +sun.net.www.protocol.file.*: proprietary compact1 +sun.net.www.protocol.ftp.*: proprietary +sun.net.www.protocol.http.*: proprietary compact1 +sun.net.www.protocol.http.logging.*: hidden +sun.net.www.protocol.http.ntlm.*: hidden +sun.net.www.protocol.http.spnego.*: hidden +sun.net.www.protocol.https.*: proprietary compact1 +sun.net.www.protocol.jar.*: proprietary compact1 +sun.net.www.protocol.mailto.*: proprietary +sun.net.www.protocol.netdoc.*: proprietary +sun.nio.*: proprietary compact1 +sun.nio.ch.*: proprietary compact1 +sun.nio.ch.sctp.*: hidden +sun.nio.cs.*: proprietary compact1 +sun.nio.fs.*: hidden +sun.print.*: proprietary +sun.print.resources.*: proprietary +sun.reflect.*: proprietary compact1 +sun.reflect.annotation.*: proprietary compact1 +sun.reflect.generics.factory.*: proprietary compact1 +sun.reflect.generics.parser.*: proprietary compact1 +sun.reflect.generics.reflectiveObjects.*: proprietary compact1 +sun.reflect.generics.repository.*: proprietary compact1 +sun.reflect.generics.scope.*: proprietary compact1 +sun.reflect.generics.tree.*: proprietary compact1 +sun.reflect.generics.visitor.*: proprietary compact1 +sun.reflect.misc.*: hidden +sun.rmi.log.*: proprietary compact2 +sun.rmi.registry.*: proprietary compact2 +sun.rmi.runtime.*: proprietary compact2 +sun.rmi.server.*: proprietary compact2 +sun.rmi.transport.*: proprietary compact2 +sun.rmi.transport.proxy.*: proprietary compact2 +sun.rmi.transport.tcp.*: proprietary compact2 +sun.security.acl.*: proprietary compact3 +sun.security.action.*: proprietary compact1 +sun.security.jca.*: proprietary compact1 +sun.security.jgss.*: proprietary compact3 +sun.security.jgss.krb5.*: proprietary compact3 +sun.security.jgss.spi.*: proprietary compact3 +sun.security.jgss.spnego.*: hidden +sun.security.jgss.wrapper.*: hidden +sun.security.krb5.*: proprietary compact3 +sun.security.krb5.internal.*: proprietary compact3 +sun.security.krb5.internal.ccache.*: proprietary compact3 +sun.security.krb5.internal.crypto.*: proprietary compact3 +sun.security.krb5.internal.crypto.dk.*: proprietary compact3 +sun.security.krb5.internal.ktab.*: proprietary compact3 +sun.security.krb5.internal.rcache.*: proprietary compact3 +sun.security.krb5.internal.tools.*: proprietary compact3 +sun.security.krb5.internal.util.*: proprietary compact3 +sun.security.pkcs.*: proprietary compact1 +sun.security.pkcs10.*: hidden +sun.security.pkcs12.*: hidden +sun.security.provider.*: proprietary compact1 +sun.security.provider.certpath.*: proprietary compact1 +sun.security.provider.certpath.ldap.*: hidden +sun.security.provider.certpath.ssl.*: hidden +sun.security.rsa.*: proprietary compact1 +sun.security.smartcardio.*: hidden +sun.security.timestamp.*: proprietary compact1 +sun.security.tools.*: proprietary compact1 +sun.security.tools.keytool.*: hidden +sun.security.tools.policytool.*: hidden +sun.security.util.*: proprietary compact1 +sun.security.validator.*: proprietary compact1 +sun.security.x509.*: proprietary compact1 +sun.swing.*: proprietary +sun.swing.icon.*: hidden +sun.swing.plaf.*: hidden +sun.swing.plaf.synth.*: proprietary +sun.swing.plaf.windows.*: hidden +sun.swing.table.*: hidden +sun.swing.text.*: hidden +sun.swing.text.html.*: hidden +sun.text.*: proprietary compact1 +sun.text.bidi.*: hidden +sun.text.normalizer.*: hidden +sun.text.resources.*: proprietary compact1 +sun.text.resources.en.*: hidden +sun.tools.jar.*: proprietary +sun.tools.jar.resources.*: proprietary +sun.tracing.*: hidden +sun.tracing.dtrace.*: hidden +sun.util.*: proprietary compact1 +sun.util.calendar.*: proprietary compact1 +sun.util.cldr.*: hidden +sun.util.locale.*: proprietary compact1 +sun.util.locale.provider.*: hidden +sun.util.logging.*: hidden +sun.util.logging.resources.*: proprietary compact1 +sun.util.resources.*: hidden +sun.util.resources.en.*: hidden +sun.util.spi.*: hidden diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/BaseFileManager.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/BaseFileManager.java index 3daea85ffbd..1fd465fc3b0 100644 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/BaseFileManager.java +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/BaseFileManager.java @@ -41,6 +41,7 @@ import java.nio.charset.CoderResult; import java.nio.charset.CodingErrorAction; import java.nio.charset.IllegalCharsetNameException; import java.nio.charset.UnsupportedCharsetException; +import java.nio.file.Path; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; @@ -414,6 +415,10 @@ public abstract class BaseFileManager implements JavaFileManager { } // + public static Kind getKind(Path path) { + return getKind(path.getFileName().toString()); + } + public static Kind getKind(String name) { if (name.endsWith(Kind.CLASS.extension)) return Kind.CLASS; diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javap/JavapTask.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javap/JavapTask.java index 59ddd6ba4df..30fed42cc9f 100644 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javap/JavapTask.java +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javap/JavapTask.java @@ -681,6 +681,7 @@ public class JavapTask implements DisassemblerTool.DisassemblerTask, Messages { final URI uri = new URI(className); final URL url = uri.toURL(); final URLConnection conn = url.openConnection(); + conn.setUseCaches(false); return new JavaFileObject() { @DefinedBy(Api.COMPILER) public Kind getKind() { @@ -709,7 +710,7 @@ public class JavapTask implements DisassemblerTool.DisassemblerTask, Messages { @DefinedBy(Api.COMPILER) public String getName() { - return url.toString(); + return uri.toString(); } @DefinedBy(Api.COMPILER) diff --git a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/comp/SmartFileManager.java b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/comp/SmartFileManager.java index be607860b5f..d7bcd885303 100644 --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/comp/SmartFileManager.java +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/sjavac/comp/SmartFileManager.java @@ -56,6 +56,7 @@ import com.sun.tools.javac.util.ListBuffer; * This code and its internal interfaces are subject to change or * deletion without notice. */ +@com.sun.tools.javac.api.ClientCodeWrapper.Trusted public class SmartFileManager extends ForwardingJavaFileManager { // Set of sources that can be seen by javac. diff --git a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Archive.java b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Archive.java index ebb07741db3..49e827c4bff 100644 --- a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Archive.java +++ b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Archive.java @@ -28,6 +28,7 @@ import com.sun.tools.classfile.ClassFile; import com.sun.tools.classfile.Dependency.Location; import java.io.IOException; +import java.io.UncheckedIOException; import java.nio.file.Path; import java.util.HashSet; import java.util.Map; @@ -38,8 +39,12 @@ import java.util.concurrent.ConcurrentHashMap; * Represents the source of the class files. */ public class Archive { - public static Archive getInstance(Path p) throws IOException { - return new Archive(p, ClassFileReader.newInstance(p)); + public static Archive getInstance(Path p) { + try { + return new Archive(p, ClassFileReader.newInstance(p)); + } catch (IOException e) { + throw new UncheckedIOException(e); + } } private final Path path; diff --git a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/ClassFileReader.java b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/ClassFileReader.java index 11ce3e2f954..dc1bd2cb068 100644 --- a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/ClassFileReader.java +++ b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/ClassFileReader.java @@ -27,7 +27,12 @@ package com.sun.tools.jdeps; import com.sun.tools.classfile.ClassFile; import com.sun.tools.classfile.ConstantPoolException; import com.sun.tools.classfile.Dependencies.ClassFileError; -import java.io.*; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; @@ -36,6 +41,8 @@ import java.nio.file.attribute.BasicFileAttributes; import java.util.*; import java.util.jar.JarEntry; import java.util.jar.JarFile; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * ClassFileReader reads ClassFile(s) of a given path that can be @@ -159,18 +166,23 @@ public class ClassFileReader { } private static class DirectoryReader extends ClassFileReader { + protected final String fsSep; DirectoryReader(Path path) throws IOException { + this(FileSystems.getDefault(), path); + } + DirectoryReader(FileSystem fs, Path path) throws IOException { super(path); + this.fsSep = fs.getSeparator(); } public ClassFile getClassFile(String name) throws IOException { if (name.indexOf('.') > 0) { int i = name.lastIndexOf('.'); - String pathname = name.replace('.', File.separatorChar) + ".class"; + String pathname = name.replace(".", fsSep) + ".class"; Path p = path.resolve(pathname); if (!Files.exists(p)) { p = path.resolve(pathname.substring(0, i) + "$" + - pathname.substring(i+1, pathname.length())); + pathname.substring(i+1, pathname.length())); } if (Files.exists(p)) { return readClassFile(p); @@ -193,25 +205,28 @@ public class ClassFileReader { }; } - private List walkTree(Path dir) throws IOException { - final List files = new ArrayList<>(); - Files.walkFileTree(dir, new SimpleFileVisitor() { - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) - throws IOException { - if (file.getFileName().toString().endsWith(".class")) { - files.add(file); + private List entries; + protected synchronized List walkTree() throws IOException { + if (entries == null) { + entries = new ArrayList<>(); + Files.walkFileTree(path, new SimpleFileVisitor() { + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) + throws IOException { + if (file.getFileName().toString().endsWith(".class")) { + entries.add(file); + } + return FileVisitResult.CONTINUE; } - return FileVisitResult.CONTINUE; - } - }); - return files; + }); + } + return entries; } class DirectoryIterator implements Iterator { private List entries; private int index = 0; DirectoryIterator() throws IOException { - entries = walkTree(path); + entries = walkTree(); index = 0; } @@ -355,4 +370,29 @@ public class ClassFileReader { throw new UnsupportedOperationException("Not supported yet."); } } + + /** + * ClassFileReader for modules. + */ + static class ModuleClassReader extends DirectoryReader { + final String modulename; + ModuleClassReader(FileSystem fs, String mn, Path root) throws IOException { + super(fs, root); + this.modulename = mn; + } + + public Set packages() throws IOException { + return walkTree().stream() + .map(this::toPackageName) + .sorted() + .collect(Collectors.toSet()); + } + + String toPackageName(Path p) { + if (p.getParent() == null) { + return ""; + } + return path.relativize(p.getParent()).toString().replace(fsSep, "."); + } + } } diff --git a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/JdepsTask.java b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/JdepsTask.java index cf4a7a9d0fd..3a93327d5e4 100644 --- a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/JdepsTask.java +++ b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/JdepsTask.java @@ -551,10 +551,11 @@ class JdepsTask { if (options.includePattern != null) { initialArchives.addAll(classpaths); } - classpaths.addAll(PlatformClassPath.getArchives(options.mpath)); + classpaths.addAll(PlatformClassPath.getModules(options.mpath)); if (options.mpath != null) { - initialArchives.addAll(PlatformClassPath.getArchives(options.mpath)); + initialArchives.addAll(PlatformClassPath.getModules(options.mpath)); } + classpaths.addAll(PlatformClassPath.getJarFiles()); // add all classpath archives to the source locations for reporting sourceLocations.addAll(classpaths); } diff --git a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Module.java b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Module.java index bb046292ffb..f09fa8fe84c 100644 --- a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Module.java +++ b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Module.java @@ -173,8 +173,8 @@ final class Module extends Archive { return this; } - public Builder include(String p) { - packages.add(p); + public Builder packages(Set pkgs) { + packages.addAll(pkgs); return this; } @@ -184,10 +184,11 @@ final class Module extends Archive { exports.put(p, new HashSet<>(ms)); return this; } - public Builder classes(ClassFileReader reader) { + public Builder classes(ClassFileReader.ModuleClassReader reader) { this.reader = reader; return this; } + public Module build() { Module m = new Module(reader, name, requires, exports, packages); return m; diff --git a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/ModulesXmlReader.java b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/ModulesXmlReader.java index 675a0ec7c83..93635ea0542 100644 --- a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/ModulesXmlReader.java +++ b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/ModulesXmlReader.java @@ -24,15 +24,9 @@ */ package com.sun.tools.jdeps; -import com.sun.tools.classfile.ClassFile; -import com.sun.tools.jdeps.PlatformClassPath.LegacyImageHelper; import java.io.IOException; import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Collections; import java.util.HashSet; -import java.util.List; import java.util.Set; import javax.xml.namespace.QName; import javax.xml.stream.XMLEventReader; @@ -40,73 +34,15 @@ import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.events.Attribute; import javax.xml.stream.events.XMLEvent; +import com.sun.tools.jdeps.ClassFileReader.ModuleClassReader; +import com.sun.tools.jdeps.PlatformClassPath.ImageHelper; -abstract class ModulesXmlReader { - abstract ClassFileReader getClassFileReader(String modulename, Set packages) - throws IOException; - - static class ImageReader extends ModulesXmlReader { - final LegacyImageHelper helper; - ImageReader(LegacyImageHelper helper) { - this.helper = helper; - } - ClassFileReader getClassFileReader(String modulename, Set packages) - throws IOException - { - return helper.getClassReader(modulename, packages); - } - } - - static class ModulePathReader extends ModulesXmlReader { - final Path mpath; - final ClassFileReader defaultReader; - ModulePathReader(Path mp) throws IOException { - this.mpath = mp; - this.defaultReader = new NonExistModuleReader(mpath); - } - ClassFileReader getClassFileReader(String modulename, Set packages) - throws IOException - { - Path mdir = mpath.resolve(modulename); - if (Files.exists(mdir) && Files.isDirectory(mdir)) { - return ClassFileReader.newInstance(mdir); - } else { - // aggregator module or os-specific module in jdeps-modules.xml - // mdir not exist - return defaultReader; - } - } - class NonExistModuleReader extends ClassFileReader { - private final List classes = Collections.emptyList(); - private NonExistModuleReader(Path mpath) { - super(mpath); - } - - public ClassFile getClassFile(String name) throws IOException { - return null; - } - public Iterable getClassFiles() throws IOException { - return classes; - } - } - } - - public static Set load(Path mpath, InputStream in) +final class ModulesXmlReader { + public static Set load(ImageHelper helper,InputStream in) throws IOException { try { - ModulePathReader reader = new ModulePathReader(mpath); - return reader.load(in); - } catch (XMLStreamException e) { - throw new RuntimeException(e); - } - } - - public static Set loadFromImage(LegacyImageHelper helper, InputStream in) - throws IOException - { - try { - ImageReader reader = new ImageReader(helper); + ModulesXmlReader reader = new ModulesXmlReader(helper); return reader.load(in); } catch (XMLStreamException e) { throw new RuntimeException(e); @@ -119,8 +55,12 @@ abstract class ModulesXmlReader { private static final String DEPEND = "depend"; private static final String EXPORT = "export"; private static final String TO = "to"; - private static final String INCLUDE = "include"; private static final QName REEXPORTS = new QName("re-exports"); + private final ImageHelper helper; + ModulesXmlReader(ImageHelper helper) { + this.helper = helper; + } + public Set load(InputStream in) throws XMLStreamException, IOException { Set modules = new HashSet<>(); if (in == null) { @@ -162,9 +102,6 @@ abstract class ModulesXmlReader { } mb.require(getData(reader), reexports); break; - case INCLUDE: - mb.include(getData(reader)); - break; case EXPORT: exportedPackage = getNextTag(reader, NAME); break; @@ -178,8 +115,9 @@ abstract class ModulesXmlReader { String endTag = event.asEndElement().getName().getLocalPart(); switch (endTag) { case MODULE: - ClassFileReader cfr = getClassFileReader(modulename, mb.packages); + ModuleClassReader cfr = helper.getModuleClassReader(modulename); mb.classes(cfr); + mb.packages(cfr.packages()); modules.add(mb.build()); mb = null; break; diff --git a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/PlatformClassPath.java b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/PlatformClassPath.java index 238656281d8..dbb98ec7cf8 100644 --- a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/PlatformClassPath.java +++ b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/PlatformClassPath.java @@ -24,39 +24,48 @@ */ package com.sun.tools.jdeps; -import com.sun.tools.classfile.Annotation; import com.sun.tools.classfile.ClassFile; -import com.sun.tools.classfile.ConstantPool; -import com.sun.tools.classfile.ConstantPoolException; -import com.sun.tools.classfile.RuntimeAnnotations_attribute; -import com.sun.tools.classfile.Dependencies.ClassFileError; +import com.sun.tools.jdeps.ClassFileReader.ModuleClassReader; import java.io.IOException; import java.io.InputStream; import java.io.BufferedInputStream; -import java.nio.file.FileVisitResult; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.SimpleFileVisitor; +import java.net.URI; +import java.nio.file.*; import java.nio.file.attribute.BasicFileAttributes; import java.util.*; -import java.util.jar.*; - -import static com.sun.tools.classfile.Attribute.*; -import static com.sun.tools.jdeps.ClassFileReader.*; +import java.util.stream.Collectors; /** * ClassPath for Java SE and JDK */ class PlatformClassPath { private static List modules; - static synchronized List getArchives(Path mpath) throws IOException { + static synchronized List getModules(Path mpath) throws IOException { if (modules == null) { - initPlatformArchives(mpath); + initPlatformModules(mpath); } return modules; } + private static void initPlatformModules(Path mpath) throws IOException { + ImageHelper helper = ImageHelper.getInstance(mpath); + String fn = System.getProperty("jdeps.modules.xml"); + if (fn != null) { + Path p = Paths.get(fn); + try (InputStream in = new BufferedInputStream(Files.newInputStream(p))) { + modules = new ArrayList<>(ModulesXmlReader.load(helper, in)); + } + } else { + try (InputStream in = PlatformClassPath.class + .getResourceAsStream("resources/jdeps-modules.xml")) { + modules = new ArrayList<>(ModulesXmlReader.load(helper, in)); + } + } + if (findModule("java.base") != null) { + Profile.initProfiles(modules); + } + } + /** * Finds the module with the given name. Returns null * if such module doesn't exist. @@ -75,237 +84,86 @@ class PlatformClassPath { return null; } - private static List initPlatformArchives(Path mpath) throws IOException { - Path home = Paths.get(System.getProperty("java.home")); - if (mpath == null && !home.endsWith("jre")) { - // jdk build - Path p = home.resolve("modules"); - if (Files.isDirectory(p)) { - mpath = p; - } - } - modules = mpath != null ? initModules(mpath) : initLegacyImage(home); - if (findModule("java.base") != null) { - Profile.initProfiles(); - } - return modules; + /** + * Returns JAR files in $java.home/lib. This is for transition until + * all components are linked into jimage. + */ + static List getJarFiles() throws IOException { + Path home = Paths.get(System.getProperty("java.home"), "lib"); + return Files.find(home, 1, (Path p, BasicFileAttributes attr) + -> p.getFileName().toString().endsWith(".jar")) + .map(Archive::getInstance) + .collect(Collectors.toList()); } - private static List initModules(Path mpath) throws IOException { - String fn = System.getProperty("jdeps.modules.xml"); - if (fn!= null) { - Path p = Paths.get(fn); - try (InputStream in = new BufferedInputStream(Files.newInputStream(p))) { - return new ArrayList(ModulesXmlReader.load(mpath, in)); + static class ImageHelper { + static ImageHelper getInstance(Path mpath) throws IOException { + if (mpath != null) { + return new ImageHelper(mpath); } - } else { - try (InputStream in = PlatformClassPath.class - .getResourceAsStream("resources/jdeps-modules.xml")) { - return new ArrayList(ModulesXmlReader.load(mpath, in)); - } - } - } - - private static List initLegacyImage(Path home) throws IOException { - LegacyImageHelper cfr = new LegacyImageHelper(home); - List archives = new ArrayList<>(cfr.nonPlatformArchives); - try (InputStream in = PlatformClassPath.class - .getResourceAsStream("resources/jdeps-modules.xml")) { - archives.addAll(ModulesXmlReader.loadFromImage(cfr, in)); - return archives; - } - } - - static class LegacyImageHelper { - private static final List NON_PLATFORM_JARFILES = - Arrays.asList("alt-rt.jar", "jfxrt.jar", "ant-javafx.jar", "javafx-mx.jar"); - final List nonPlatformArchives = new ArrayList<>(); - final List jarfiles = new ArrayList<>(); - final Path home; - - LegacyImageHelper(Path home) { - this.home = home; - try { - if (home.endsWith("jre")) { - // jar files in /jre/lib - addJarFiles(home.resolve("lib")); - if (home.getParent() != null) { - // add tools.jar and other JDK jar files - Path lib = home.getParent().resolve("lib"); - if (Files.exists(lib)) { - addJarFiles(lib); - } - } - } else if (Files.exists(home.resolve("lib"))) { - // add other JAR files - addJarFiles(home.resolve("lib")); - } else { - throw new RuntimeException("\"" + home + "\" not a JDK home"); + Path home = Paths.get(System.getProperty("java.home")); + Path mlib = home.resolve("lib").resolve("modules"); + if (Files.isDirectory(mlib)) { + // jimage + FileSystem fs = FileSystems.getFileSystem(URI.create("jrt:/")); + return new ImageHelper(fs, fs.getPath("/")); + } else { + // exploded modules + mlib = home.resolve("modules"); + if (!Files.isDirectory(mlib)) { + throw new InternalError(home + " not a modular image"); } - } catch (IOException e) { - throw new Error(e); + return new ImageHelper(mlib); } } + private final FileSystem fs; + private final Path mpath; + + ImageHelper(Path path) throws IOException { + this(FileSystems.getDefault(), path); + } + + ImageHelper(FileSystem fs, Path path) throws IOException { + this.fs = fs; + this.mpath = path; + } + /** - * Returns a ClassFileReader that only reads classes for the given modulename. + * Returns a ModuleClassReader that only reads classes for the given modulename. */ - ClassFileReader getClassReader(String modulename, Set packages) throws IOException { - return new ModuleClassReader(modulename, packages); + public ModuleClassReader getModuleClassReader(String modulename) + throws IOException + { + Path mp = mpath.resolve(modulename); + if (Files.exists(mp) && Files.isDirectory(mp)) { + return new ModuleClassReader(fs, modulename, mp); + } else { + // aggregator module or os-specific module in jdeps-modules.xml + // mdir not exist + return new NonExistModuleReader(fs, modulename, mp); + } } - private void addJarFiles(final Path root) throws IOException { - final Path ext = root.resolve("ext"); - Files.walkFileTree(root, new SimpleFileVisitor() { - @Override - public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) - throws IOException - { - if (dir.equals(root) || dir.equals(ext)) { - return FileVisitResult.CONTINUE; - } else { - // skip other cobundled JAR files - return FileVisitResult.SKIP_SUBTREE; - } - } + static class NonExistModuleReader extends ModuleClassReader { + private final List classes = Collections.emptyList(); - @Override - public FileVisitResult visitFile(Path p, BasicFileAttributes attrs) - throws IOException - { - String fn = p.getFileName().toString(); - if (fn.endsWith(".jar")) { - // JDK may cobundle with JavaFX that doesn't belong to any profile - // Treat jfxrt.jar as regular Archive - if (NON_PLATFORM_JARFILES.contains(fn)) { - nonPlatformArchives.add(Archive.getInstance(p)); - } else { - jarfiles.add(new JarFile(p.toFile())); - } - } - return FileVisitResult.CONTINUE; - } - }); - } - - /** - * ModuleClassFile reads classes for the specified module from the legacy image. - * - */ - class ModuleClassReader extends JarFileReader { - private JarFile cachedJarFile = getJarFile(0); - private final Set packages; - private final String module; - ModuleClassReader(String module, Set packages) throws IOException { - super(home, null); - this.module = module; - this.packages = packages; + private NonExistModuleReader(FileSystem fs, String mn, Path mpath) + throws IOException + { + super(fs, mn, mpath); } - private boolean includes(String name) { - String cn = name.replace('/', '.'); - int i = cn.lastIndexOf('.'); - String pn = i > 0 ? cn.substring(0, i) : ""; - return packages.contains(pn); - } - - private JarEntry findJarEntry(JarFile jarfile, String entryName1, String entryName2) { - JarEntry e = jarfile.getJarEntry(entryName1); - if (e == null) { - e = jarfile.getJarEntry(entryName2); - } - return e; - } - - public String toString() { - return module + " " + packages.size() + " " + packages; - } - - @Override public ClassFile getClassFile(String name) throws IOException { - if (jarfiles.isEmpty() || !includes(name)) { - return null; - } - - if (name.indexOf('.') > 0) { - int i = name.lastIndexOf('.'); - String entryName = name.replace('.', '/') + ".class"; - String innerClassName = entryName.substring(0, i) + "$" - + entryName.substring(i + 1, entryName.length()); - JarEntry e = findJarEntry(cachedJarFile, entryName, innerClassName); - if (e != null) { - return readClassFile(cachedJarFile, e); - } - for (JarFile jf : jarfiles) { - if (jf == cachedJarFile) { - continue; - } - System.err.format("find jar entry %s at %s%n", entryName, jf); - e = findJarEntry(jf, entryName, innerClassName); - if (e != null) { - cachedJarFile = jf; - return readClassFile(jf, e); - } - } - } else { - String entryName = name + ".class"; - JarEntry e = cachedJarFile.getJarEntry(entryName); - if (e != null) { - return readClassFile(cachedJarFile, e); - } - for (JarFile jf : jarfiles) { - if (jf == cachedJarFile) { - continue; - } - e = jf.getJarEntry(entryName); - if (e != null) { - cachedJarFile = jf; - return readClassFile(jf, e); - } - } - } return null; } - @Override public Iterable getClassFiles() throws IOException { - final Iterator iter = new ModuleClassIterator(this); - return new Iterable() { - public Iterator iterator() { - return iter; - } - }; + return classes; } - private JarFile getJarFile(int index) { - return index < jarfiles.size() ? jarfiles.get(index) : null; - } - - class ModuleClassIterator extends JarFileIterator { - private int index; - ModuleClassIterator(ModuleClassReader reader) { - super(reader); - this.index = 0; - this.jf = getJarFile(0); - this.entries = jf != null ? jf.entries() : null; - this.nextEntry = nextEntry(); - } - - @Override - protected JarEntry nextEntry() { - while (jf != null) { - while (entries.hasMoreElements()) { - JarEntry e = entries.nextElement(); - String name = e.getName(); - if (name.endsWith(".class") && includes(name)) { - return e; - } - } - jf = getJarFile(++index); - entries = jf != null ? jf.entries() : null; - } - return null; - } + public Set packages() { + return Collections.emptySet(); } } } diff --git a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Profile.java b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Profile.java index 14660e2a541..fac68feb828 100644 --- a/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Profile.java +++ b/langtools/src/jdk.dev/share/classes/com/sun/tools/jdeps/Profile.java @@ -28,23 +28,28 @@ import java.io.IOException; import java.util.*; /** - * Build the profile information from ct.sym if exists. + * Build the profile information. */ enum Profile { COMPACT1("compact1", 1, "java.compact1"), COMPACT2("compact2", 2, "java.compact2"), - COMPACT3("compact3", 3, "java.compact3"), - FULL_JRE("Full JRE", 4, "java.se"); + COMPACT3("compact3", 3, "java.compact3", "java.smartcardio", "jdk.sctp", + "jdk.httpserver", "jdk.security.auth", + "jdk.naming.dns", "jdk.naming.rmi"), + FULL_JRE("Full JRE", 4, "java.se", "jdk.deploy.osx", "jdk.charsets", + "jdk.crypto.ec", "jdk.crypto.pkcs11", + "jdk.crypto.mscapi", "jdk.crypto.ucrypto", "jdk.jvmstat", + "jdk.localedata", "jdk.scripting.nashorn", "jdk.zipfs"); final String name; final int profile; - final String moduleName; + final String[] mnames; final Set modules = new HashSet<>(); - Profile(String name, int profile, String moduleName) { + Profile(String name, int profile, String... mnames) { this.name = name; this.profile = profile; - this.moduleName = moduleName; + this.mnames = mnames; } public String profileName() { @@ -53,7 +58,7 @@ enum Profile { @Override public String toString() { - return moduleName; + return mnames[0]; } public static int getProfileCount() { @@ -86,27 +91,37 @@ enum Profile { return null; } - final static Set JDK = new HashSet<>(); - static void initProfiles() { + private final static Set JDK = new HashSet<>(); + static void initProfiles(List modules) { + // add all modules into JDK + modules.forEach(m -> JDK.add((Module)m)); + for (Profile p : Profile.values()) { - Module m = PlatformClassPath.findModule(p.moduleName); - if (m == null) - throw new Error(p.moduleName + " doesn't exist"); - p.modules.add(m); - JDK.add(m); - for (String n : m.requires().keySet()) { - Module d = PlatformClassPath.findModule(n); - if (d == null) - throw new Error(n + " doesn't exist"); - p.modules.add(d); - JDK.add(d); + for (String mn : p.mnames) { + // this includes platform-dependent module that may not exist + Module m = PlatformClassPath.findModule(mn); + if (m != null) { + p.addModule(m); + } } } } + + private void addModule(Module m) { + modules.add(m); + for (String n : m.requires().keySet()) { + Module d = PlatformClassPath.findModule(n); + if (d == null) { + throw new InternalError("module " + n + " required by " + + m.name() + " doesn't exist"); + } + modules.add(d); + } + } // for debugging public static void main(String[] args) throws IOException { // find platform modules - PlatformClassPath.getArchives(null); + PlatformClassPath.getModules(null); if (Profile.getProfileCount() == 0) { System.err.println("No profile is present in this JDK"); } diff --git a/langtools/test/com/sun/javadoc/testCompletionFailure/TestCompletionFailure.java b/langtools/test/com/sun/javadoc/testCompletionFailure/TestCompletionFailure.java index 83434c0b64e..21419dafb51 100644 --- a/langtools/test/com/sun/javadoc/testCompletionFailure/TestCompletionFailure.java +++ b/langtools/test/com/sun/javadoc/testCompletionFailure/TestCompletionFailure.java @@ -46,8 +46,6 @@ public class TestCompletionFailure extends JavadocTester { checkExit(Exit.OK); checkOutput(Output.STDERR, false, - "TestCompletionFailure: error - " - + "com.sun.tools.javac.code.Symbol$CompletionFailure: class file for " - + "sun.util.locale.provider.LocaleProviderAdapter not found"); + "sun.util.locale.provider.LocaleProviderAdapter"); } } diff --git a/langtools/test/tools/apt/Basics/CheckAptIsRemovedTest.java b/langtools/test/tools/apt/Basics/CheckAptIsRemovedTest.java deleted file mode 100644 index 35bb8aa1df0..00000000000 --- a/langtools/test/tools/apt/Basics/CheckAptIsRemovedTest.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 4908512 5024825 4957203 4993280 4996963 6174696 6177059 7041249 - * @summary Make sure apt is removed and doesn't come back - * @library /tools/lib - * @build ToolBox - * @run main CheckAptIsRemovedTest - */ - -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - -// Original test: test/tools/apt/Basics/apt.sh -public class CheckAptIsRemovedTest { - //I think this class can be let with the imports only and that should be enough for as test's purpose - private static final String NullAPFSrc = - "import com.sun.mirror.apt.*;\n" + - "import com.sun.mirror.declaration.*;\n" + - "import com.sun.mirror.type.*;\n" + - "import com.sun.mirror.util.*;\n" + - "import java.util.Collection;\n" + - "import java.util.Set;\n\n" + - - "public class NullAPF implements AnnotationProcessorFactory {\n" + - " static class NullAP implements AnnotationProcessor {\n" + - " NullAP(AnnotationProcessorEnvironment ape) {}\n" + - " public void process() {return;}\n" + - " }\n\n" + - - " static Collection supportedTypes;\n\n" + - " static {\n" + - " String types[] = {\"*\"};\n" + - " supportedTypes = java.util.Arrays.asList(types);\n" + - " }\n\n" + - - " public Collection supportedOptions() {\n" + - " return java.util.Collections.emptySet();\n" + - " }\n\n" + - - " public Collection supportedAnnotationTypes() {\n" + - " return supportedTypes;\n" + - " }\n\n" + - - " public AnnotationProcessor getProcessorFor(" + - " Set atds,\n" + - " AnnotationProcessorEnvironment env) {\n" + - " return new NullAP(env);\n" + - " }\n" + - "}"; - - public static void main(String[] args) throws Exception { - String testJDK = System.getProperty("test.jdk"); - Path aptLin = Paths.get(testJDK, "bin", "apt"); - Path aptWin = Paths.get(testJDK, "bin", "apt.exe"); - - if (Files.exists(aptLin) || Files.exists(aptWin)) { - throw new AssertionError("apt executable should not exist"); - } - - Path classpath = Paths.get(testJDK, "lib", "tools.jar"); - ToolBox tb = new ToolBox(); - tb.new JavacTask() - .classpath(classpath.toString()) // TODO: add overload - .sourcepath(".") - .sources(NullAPFSrc) - .run(ToolBox.Expect.FAIL) - .writeAll(); - } - -} diff --git a/langtools/test/tools/doclint/tool/PathsTest.java b/langtools/test/tools/doclint/tool/PathsTest.java index e4cb2e2ae1e..6ea18061a7d 100644 --- a/langtools/test/tools/doclint/tool/PathsTest.java +++ b/langtools/test/tools/doclint/tool/PathsTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,13 @@ * @test * @bug 8006263 * @summary Supplementary test cases needed for doclint + * @library /tools/lib + * @build ToolBox + * @run main PathsTest */ +import com.sun.tools.javac.util.Context; +import com.sun.tools.javac.file.JavacFileManager; import com.sun.tools.doclint.DocLint; import com.sun.tools.doclint.DocLint.BadArgs; import java.io.File; @@ -35,6 +40,8 @@ import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.util.regex.Pattern; +import javax.tools.StandardLocation; +import javax.tools.JavaFileManager; public class PathsTest { public static void main(String... args) throws Exception { @@ -56,9 +63,11 @@ public class PathsTest { test("src/Test.java", "-sourcepath", "src1" + PS + "src2"); test("src/Test.java", "-classpath", "classes1" + PS + "classes2"); + + File testJar = createJar(); String sysBootClassPath = System.getProperty("sun.boot.class.path"); test("src/Test.java", "-bootclasspath", - sysBootClassPath + PS + "classes1" + PS + "classes2"); + testJar + PS + "classes1" + PS + "classes2"); if (errors > 0) throw new Exception(errors + " errors found"); @@ -87,6 +96,17 @@ public class PathsTest { } } + File createJar() throws IOException { + File f = new File("test.jar"); + try (JavaFileManager fm = new JavacFileManager(new Context(), false, null)) { + ToolBox tb = new ToolBox(); + tb.new JarTask(f.getPath()) + .files(fm, StandardLocation.PLATFORM_CLASS_PATH, "java.lang.*") + .run(); + } + return f; + } + void compile(String... args) { for (int i = 0; i < args.length; i++) { if (args[i].equals("-d")) { diff --git a/langtools/test/tools/javac/6508981/TestInferBinaryName.java b/langtools/test/tools/javac/6508981/TestInferBinaryName.java index 01da20b42ba..a70ebeb9f39 100644 --- a/langtools/test/tools/javac/6508981/TestInferBinaryName.java +++ b/langtools/test/tools/javac/6508981/TestInferBinaryName.java @@ -49,8 +49,6 @@ import static javax.tools.StandardLocation.*; * the impl of inferBinaryName for that file object. */ public class TestInferBinaryName { - static final boolean IGNORE_SYMBOL_FILE = false; - static final boolean USE_SYMBOL_FILE = true; static final boolean DONT_USE_ZIP_FILE_INDEX = false; static final boolean USE_ZIP_FILE_INDEX = true; @@ -59,15 +57,14 @@ public class TestInferBinaryName { } void run() throws Exception { - //System.err.println(System.getProperties()); testDirectory(); - testSymbolArchive(); File testJar = createJar(); testZipArchive(testJar); testZipFileIndexArchive(testJar); testZipFileIndexArchive2(testJar); + if (errors > 0) throw new Exception(errors + " error found"); } @@ -87,27 +84,17 @@ public class TestInferBinaryName { String testClassName = "p.A"; List testClasses = Arrays.asList(new File(System.getProperty("test.classes"))); try (JavaFileManager fm = - getFileManager(testClasses, USE_SYMBOL_FILE, USE_ZIP_FILE_INDEX)) { + getFileManager(testClasses, USE_ZIP_FILE_INDEX)) { test("testDirectory", fm, testClassName, "com.sun.tools.javac.file.RegularFileObject"); } } - void testSymbolArchive() throws IOException { - String testClassName = "java.lang.String"; - List path = getPath(System.getProperty("sun.boot.class.path")); - try (JavaFileManager fm = - getFileManager(path, USE_SYMBOL_FILE, DONT_USE_ZIP_FILE_INDEX)) { - test("testSymbolArchive", - fm, testClassName, "com.sun.tools.javac.file.SymbolArchive$SymbolFileObject"); - } - } - void testZipArchive(File testJar) throws IOException { String testClassName = "java.lang.String"; List path = Arrays.asList(testJar); try (JavaFileManager fm = - getFileManager(path, IGNORE_SYMBOL_FILE, DONT_USE_ZIP_FILE_INDEX)) { + getFileManager(path, DONT_USE_ZIP_FILE_INDEX)) { test("testZipArchive", fm, testClassName, "com.sun.tools.javac.file.ZipArchive$ZipFileObject"); } @@ -117,7 +104,7 @@ public class TestInferBinaryName { String testClassName = "java.lang.String"; List path = Arrays.asList(testJar); try (JavaFileManager fm = - getFileManager(path, USE_SYMBOL_FILE, USE_ZIP_FILE_INDEX)) { + getFileManager(path, USE_ZIP_FILE_INDEX)) { test("testZipFileIndexArchive", fm, testClassName, "com.sun.tools.javac.file.ZipFileIndexArchive$ZipFileIndexFileObject"); } @@ -127,7 +114,7 @@ public class TestInferBinaryName { String testClassName = "java.lang.String"; List path = Arrays.asList(testJar); try (JavaFileManager fm = - getFileManager(path, IGNORE_SYMBOL_FILE, USE_ZIP_FILE_INDEX)) { + getFileManager(path, USE_ZIP_FILE_INDEX)) { test("testZipFileIndexArchive2", fm, testClassName, "com.sun.tools.javac.file.ZipFileIndexArchive$ZipFileIndexFileObject"); } @@ -159,7 +146,6 @@ public class TestInferBinaryName { } JavaFileManager getFileManager(List path, - boolean symFileKind, boolean zipFileIndexKind) throws IOException { Context ctx = new Context(); @@ -167,8 +153,6 @@ public class TestInferBinaryName { options.put("useOptimizedZip", Boolean.toString(zipFileIndexKind == USE_ZIP_FILE_INDEX)); - if (symFileKind == IGNORE_SYMBOL_FILE) - options.put("ignore.symbol.file", "true"); JavacFileManager fm = new JavacFileManager(ctx, false, null); fm.setLocation(CLASS_PATH, path); return fm; diff --git a/langtools/test/tools/javac/EarlyAssertWrapper.java b/langtools/test/tools/javac/EarlyAssertWrapper.java index f6ea9cdfd93..fa8a5f10d1f 100644 --- a/langtools/test/tools/javac/EarlyAssertWrapper.java +++ b/langtools/test/tools/javac/EarlyAssertWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,14 +37,8 @@ public class EarlyAssertWrapper { void run() throws Exception { List cmd = new ArrayList(); File java_home = new File(System.getProperty("java.home")); - if (java_home.getName().equals("jre")) - java_home = java_home.getParentFile(); cmd.add(new File(new File(java_home, "bin"), "java").getPath()); - // ensure we run with the same bootclasspath as this test, - // in case this test is being run with -Xbootclasspath - cmd.add("-Xbootclasspath:" + System.getProperty("sun.boot.class.path")); - // propogate classpath cmd.add("-classpath"); cmd.add(System.getProperty("java.class.path")); diff --git a/langtools/test/tools/javac/Paths/Class-Path.sh b/langtools/test/tools/javac/Paths/Class-Path.sh index 7cdb4a71ea9..db4957366da 100644 --- a/langtools/test/tools/javac/Paths/Class-Path.sh +++ b/langtools/test/tools/javac/Paths/Class-Path.sh @@ -97,13 +97,13 @@ Success "$java" ${TESTVMOPTS} -cp "jars/A.jar${PS}." Main Success "$javac" ${TESTTOOLVMOPTS} -cp "jars/B.zip" Main.java Success "$java" ${TESTVMOPTS} -cp "jars/B.zip${PS}." Main -Success "$javac" ${TESTTOOLVMOPTS} -extdirs "jars" -cp None Main.java -Success "$javac" ${TESTTOOLVMOPTS} -Djava.ext.dirs="jars" -cp None Main.java -Success "$java" ${TESTVMOPTS} -Djava.ext.dirs="jars" -cp . Main +# Success "$javac" ${TESTTOOLVMOPTS} -extdirs "jars" -cp None Main.java +# Success "$javac" ${TESTTOOLVMOPTS} -Djava.ext.dirs="jars" -cp None Main.java +# Success "$java" ${TESTVMOPTS} -Djava.ext.dirs="jars" -cp . Main -Success "$javac" ${TESTTOOLVMOPTS} -endorseddirs "jars" -cp None Main.java -Success "$javac" ${TESTTOOLVMOPTS} -Djava.endorsed.dirs="jars" -cp None Main.java -Success "$java" ${TESTVMOPTS} -Djava.endorsed.dirs="jars" -cp . Main +# Success "$javac" ${TESTTOOLVMOPTS} -endorseddirs "jars" -cp None Main.java +# Success "$javac" ${TESTTOOLVMOPTS} -Djava.endorsed.dirs="jars" -cp None Main.java +# Success "$java" ${TESTVMOPTS} -Djava.endorsed.dirs="jars" -cp . Main Failure "$java" ${TESTVMOPTS} -Xbootclasspath/p:"jars/A.jar" -cp . Main Failure "$java" ${TESTVMOPTS} -Xbootclasspath/a:"jars/B.zip" -cp . Main diff --git a/langtools/test/tools/javac/Paths/Class-Path2.sh b/langtools/test/tools/javac/Paths/Class-Path2.sh index 180ba7c7f77..fc37c6fdbfc 100644 --- a/langtools/test/tools/javac/Paths/Class-Path2.sh +++ b/langtools/test/tools/javac/Paths/Class-Path2.sh @@ -100,11 +100,11 @@ Success "$java" ${TESTVMOPTS} -cp "jars/sub/B.zip${PS}." Main # Test 2: Use of extension directories is incorrect # -Success "$javac" ${TESTTOOLVMOPTS} -extdirs jars -cp None Main.java -Success "$java" ${TESTVMOPTS} -Djava.ext.dirs="jars" -cp . Main +# Success "$javac" ${TESTTOOLVMOPTS} -extdirs jars -cp None Main.java +# Success "$java" ${TESTVMOPTS} -Djava.ext.dirs="jars" -cp . Main -Success "$javac" ${TESTTOOLVMOPTS} -extdirs jars/sub -cp None Main.java -Success "$java" ${TESTVMOPTS} -Djava.ext.dirs="jars/sub" -cp . Main +# Success "$javac" ${TESTTOOLVMOPTS} -extdirs jars/sub -cp None Main.java +# Success "$java" ${TESTVMOPTS} -Djava.ext.dirs="jars/sub" -cp . Main Cleanup diff --git a/langtools/test/tools/javac/Paths/CompileClose.java b/langtools/test/tools/javac/Paths/CompileClose.java deleted file mode 100644 index ea7d9c3ed5c..00000000000 --- a/langtools/test/tools/javac/Paths/CompileClose.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 5071352 - * @summary Make sure compiler closes all open files on Windows - * @author Martin Buchholz - * - * @run main/othervm -Xms200m -Xmx200m CompileClose - */ - -// -Xms120m is sufficient to inhibit a gc during a compile. -// -Xms200m leaves room for expansion and was used by the customer. - -import java.io.*; - -public class CompileClose { - static void writeFile(String f, String contents) throws IOException { - PrintStream s = new PrintStream(new FileOutputStream(f)); - s.println(contents); - s.close(); - } - - static void rm(String filename) throws Exception { - File f = new File(filename); - f.delete(); - if (f.exists()) - throw new Exception(filename + ": couldn't remove"); - } - - static void clean() throws Exception { - rm("tmpCompileClose.java"); - rm("tmpCompileClose.class"); - rm("tmpCompileClose.jar"); - } - - public static void main(String args[]) throws Exception { - try { - clean(); - main1(); - } finally { - clean(); - } - } - - static void main1() throws Exception { - writeFile("tmpCompileClose.java", - "public class tmpCompileClose {}"); - // Any old jar file will do - SameJVM.jar("cf", "tmpCompileClose.jar", "tmpCompileClose.java"); - System.gc(); // Inhibit gc during next compile - SameJVM.javac("-cp", "tmpCompileClose.jar", "tmpCompileClose.java"); - // The following rm is the actual test! - rm("tmpCompileClose.jar"); - } -} diff --git a/langtools/test/tools/javac/Paths/Diagnostics.sh b/langtools/test/tools/javac/Paths/Diagnostics.sh index 0be54f48350..572d6f01212 100644 --- a/langtools/test/tools/javac/Paths/Diagnostics.sh +++ b/langtools/test/tools/javac/Paths/Diagnostics.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -37,11 +37,11 @@ set -u -BCP=`DefaultBootClassPath` +# BCP=`DefaultBootClassPath` DiagnosticsInEnglishPlease -No() { NO="no"; "$@"; NO=""; } # No means NO! +No() { NO="no"; "$@"; NO=""; } # No means NO! Warning() { HorizontalRule @@ -52,9 +52,9 @@ Warning() { case "$output" in *warning:*) gotwarning="yes";; *) gotwarning="no";; esac if test "$gotwarning" = "yes" -a "$NO" = "no"; then - Fail "Command \"$*\" printed an unexpected warning" + Fail "Command \"$*\" printed an unexpected warning" elif test "$gotwarning" = "no" -a "$NO" != "no"; then - Fail "Command \"$*\" did not generate the expected warning" + Fail "Command \"$*\" did not generate the expected warning" fi } @@ -66,20 +66,20 @@ Error() { case "$output" in *error:*) goterror="yes";; *) goterror="no";; esac if test "$NO" = "no"; then - test "$rc" -ne 0 && \ - Fail "Command \"$*\" failed with return code $rc" - test "$goterror" = "yes" && \ - Fail "Command \"$*\" did not generate any error message" + test "$rc" -ne 0 && \ + Fail "Command \"$*\" failed with return code $rc" + test "$goterror" = "yes" && \ + Fail "Command \"$*\" did not generate any error message" else - test "$rc" -eq 0 && \ - Fail "Command \"$*\" was supposed to Die with fatal error"; - test "$goterror" = "no" && \ - Fail "Command \"$*\" printed an unexpected error message" + test "$rc" -eq 0 && \ + Fail "Command \"$*\" was supposed to Die with fatal error"; + test "$goterror" = "no" && \ + Fail "Command \"$*\" printed an unexpected error message" fi } Cleanup() { - Sys rm -rf Main.java Main.class + Sys rm -rf Main.java Main.class Sys rm -rf classes classes.foo classes.jar classes.war classes.zip Sys rm -rf MANIFEST.MF classesRef.jar classesRefRef.jar jars } @@ -99,18 +99,19 @@ No Warning "$javac" ${TESTTOOLVMOPTS} -cp ".${PS}classes" Main.java Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path -cp ".${PS}classes" Main.java Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-Xbootclasspath/p:classes" Main.java Warning "$javac" ${TESTTOOLVMOPTS} -Xlint "-Xbootclasspath/a:classes" Main.java + Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-endorseddirs" "classes" Main.java Warning "$javac" ${TESTTOOLVMOPTS} -Xlint "-extdirs" "classes" Main.java -Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-Xbootclasspath:classes${PS}${BCP}" Main.java +# Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-Xbootclasspath:classes${PS}${BCP}" Main.java #---------------------------------------------------------------- # No warning for missing elts in "system" paths #---------------------------------------------------------------- -No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-J-Djava.endorsed.dirs=classes" Main.java -No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-J-Djava.ext.dirs=classes" Main.java +# No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-J-Djava.endorsed.dirs=classes" Main.java +# No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-J-Djava.ext.dirs=classes" Main.java No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-J-Xbootclasspath/p:classes" Main.java No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-J-Xbootclasspath/a:classes" Main.java -No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-J-Xbootclasspath:classes${PS}${BCP}" Main.java +# No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-J-Xbootclasspath:classes${PS}${BCP}" Main.java #---------------------------------------------------------------- # No warning if class path element exists @@ -121,7 +122,7 @@ No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-endorseddirs" "classes" Ma No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-extdirs" "classes" Main.java No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-Xbootclasspath/p:classes" Main.java No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-Xbootclasspath/a:classes" Main.java -No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-Xbootclasspath:classes${PS}${BCP}" Main.java +# No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path "-Xbootclasspath:classes${PS}${BCP}" Main.java Sys "$jar" cf classes.jar Main.class Sys cp classes.jar classes.war @@ -131,7 +132,7 @@ No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path -cp ".${PS}classes.jar" Ma No Warning "$javac" ${TESTTOOLVMOPTS} -Xlint:path -cp ".${PS}classes.zip" Main.java #---------------------------------------------------------------- -# Warn if -Xlint is used and if class path element refers to +# Warn if -Xlint is used and if class path element refers to # regular file which doesn't look like a zip file, but is #---------------------------------------------------------------- Sys cp classes.war classes.foo @@ -146,7 +147,7 @@ No Error "$javac" ${TESTTOOLVMOPTS} -cp Main.java Main.java # Main.java is NOT a No Error "$javac" ${TESTTOOLVMOPTS} Main.java #---------------------------------------------------------------- -# Warn if -Xlint is used and if class path element refers to +# Warn if -Xlint is used and if class path element refers to # regular file which is not a zip file #---------------------------------------------------------------- Warning "$javac" ${TESTTOOLVMOPTS} -Xlint -cp Main.java Main.java # Main.java is NOT a jar file @@ -193,8 +194,8 @@ Sys cp -p classesRefRef.jar jars/. # Bad Jar file in extdirs and endorseddirs should not be ignored #---------------------------------------------------------------- BadJarFile jars/classesRef.jar - Error "$javac" ${TESTTOOLVMOPTS} -Xlint -extdirs jars Main.java - Error "$javac" ${TESTTOOLVMOPTS} -Xlint -endorseddirs jars Main.java + Error "$javac" ${TESTTOOLVMOPTS} -Xlint -extdirs jars Main.java + Error "$javac" ${TESTTOOLVMOPTS} -Xlint -endorseddirs jars Main.java Cleanup diff --git a/langtools/test/tools/javac/Paths/MineField.sh b/langtools/test/tools/javac/Paths/MineField.sh index bb3f91f8d2c..10fb3210dd6 100644 --- a/langtools/test/tools/javac/Paths/MineField.sh +++ b/langtools/test/tools/javac/Paths/MineField.sh @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -55,7 +55,7 @@ set -u -BCP=`DefaultBootClassPath` +# BCP=`DefaultBootClassPath` #---------------------------------------------------------------- # Prepare the "Minefield" @@ -91,62 +91,62 @@ echo 'public class Main {public static void main(String[] a) {Lib.f();}}' > Main #---------------------------------------------------------------- # Verify that javac class search order is the same as java's #---------------------------------------------------------------- -Failure "$javac" ${TESTTOOLVMOPTS} \ - -Xbootclasspath/p:"BadClass" \ - -J-Djava.endorsed.dirs="GooJar" \ - Main.java -Success "$javac" ${TESTTOOLVMOPTS} \ - -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ - -J-Djava.endorsed.dirs="BadJar${PS}GooZip" \ - Main.java -Failure "$java" ${TESTVMOPTS} \ - -Xbootclasspath/p:"BadClass" \ - -Djava.endorsed.dirs="GooJar" \ - Main -Success "$java" ${TESTVMOPTS} \ - -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ - -Djava.endorsed.dirs="BadJar${PS}GooZip" \ - Main +# Failure "$javac" ${TESTTOOLVMOPTS} \ +# -Xbootclasspath/p:"BadClass" \ +# -J-Djava.endorsed.dirs="GooJar" \ +# Main.java +# Success "$javac" ${TESTTOOLVMOPTS} \ +# -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ +# -J-Djava.endorsed.dirs="BadJar${PS}GooZip" \ +# Main.java +# Failure "$java" ${TESTVMOPTS} \ +# -Xbootclasspath/p:"BadClass" \ +# -Djava.endorsed.dirs="GooJar" \ +# Main +# Success "$java" ${TESTVMOPTS} \ +# -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ +# -Djava.endorsed.dirs="BadJar${PS}GooZip" \ +# Main #---------------------------------------------------------------- -Failure "$javac" ${TESTTOOLVMOPTS} \ - -Xbootclasspath/p:"GooClass" \ - -bootclasspath "$BCP${PS}BadZip/Lib.zip" \ - Main.java -Success "$javac" ${TESTTOOLVMOPTS} \ - -Xbootclasspath/p:"BadClass${PS}GooClass" \ - -bootclasspath "$BCP${PS}GooZip/Lib.zip${PS}BadClass" \ - Main.java -Success "$javac" ${TESTTOOLVMOPTS} \ - -Xbootclasspath/p:"BadJar/Lib.jar" \ - -Xbootclasspath:"$BCP${PS}GooClass" \ - Main.java -Failure "$java" ${TESTVMOPTS} \ - -Xbootclasspath/p:"GooClass" \ - -Xbootclasspath:"$BCP${PS}BadZip/Lib.zip" \ - Main -Success "$java" ${TESTVMOPTS} \ - -Xbootclasspath/p:"BadClass${PS}GooClass" \ - -Xbootclasspath:"$BCP${PS}GooZip/Lib.zip${PS}BadClass" \ - Main +# Failure "$javac" ${TESTTOOLVMOPTS} \ +# -Xbootclasspath/p:"GooClass" \ +# -bootclasspath "$BCP${PS}BadZip/Lib.zip" \ +# Main.java +# Success "$javac" ${TESTTOOLVMOPTS} \ +# -Xbootclasspath/p:"BadClass${PS}GooClass" \ +# -bootclasspath "$BCP${PS}GooZip/Lib.zip${PS}BadClass" \ +# Main.java +# Success "$javac" ${TESTTOOLVMOPTS} \ +# -Xbootclasspath/p:"BadJar/Lib.jar" \ +# -Xbootclasspath:"$BCP${PS}GooClass" \ +# Main.java +# Failure "$java" ${TESTVMOPTS} \ +# -Xbootclasspath/p:"GooClass" \ +# -Xbootclasspath:"$BCP${PS}BadZip/Lib.zip" \ +# Main +# Success "$java" ${TESTVMOPTS} \ +# -Xbootclasspath/p:"BadClass${PS}GooClass" \ +# -Xbootclasspath:"$BCP${PS}GooZip/Lib.zip${PS}BadClass" \ +# Main #---------------------------------------------------------------- -Failure "$javac" ${TESTTOOLVMOPTS} \ - -bootclasspath "$BCP${PS}GooZip/Lib.zip" \ - -Xbootclasspath/p:"BadClass" \ - Main.java -Success "$javac" ${TESTTOOLVMOPTS} \ - -bootclasspath "$BCP${PS}BadZip/Lib.zip" \ - -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ - Main.java -Failure "$java" ${TESTVMOPTS} \ - -Xbootclasspath:"$BCP${PS}GooClass" \ - -Xbootclasspath/p:"BadClass" \ - Main -Success "$java" ${TESTVMOPTS} \ - -Xbootclasspath:"$BCP${PS}BadClass" \ - -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ - Main +# Failure "$javac" ${TESTTOOLVMOPTS} \ +# -bootclasspath "$BCP${PS}GooZip/Lib.zip" \ +# -Xbootclasspath/p:"BadClass" \ +# Main.java +# Success "$javac" ${TESTTOOLVMOPTS} \ +# -bootclasspath "$BCP${PS}BadZip/Lib.zip" \ +# -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ +# Main.java +# Failure "$java" ${TESTVMOPTS} \ +# -Xbootclasspath:"$BCP${PS}GooClass" \ +# -Xbootclasspath/p:"BadClass" \ +# Main +# Success "$java" ${TESTVMOPTS} \ +# -Xbootclasspath:"$BCP${PS}BadClass" \ +# -Xbootclasspath/p:"GooClass${PS}BadJar/Lib.jar" \ +# Main #---------------------------------------------------------------- Failure "$javac" ${TESTTOOLVMOPTS} \ @@ -167,74 +167,74 @@ Success "$java" ${TESTVMOPTS} \ Main #---------------------------------------------------------------- -Failure "$javac" ${TESTTOOLVMOPTS} \ - -Xbootclasspath/p:"GooClass" \ - -J-Djava.endorsed.dirs="BadZip" \ - -bootclasspath "GooClass${PS}$BCP" \ - Main.java -Success "$javac" ${TESTTOOLVMOPTS} \ - -Xbootclasspath/p:"BadClass" \ - -J-Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ - -bootclasspath "BadClass${PS}$BCP" \ - Main.java -Failure "$java" ${TESTVMOPTS} \ - -Xbootclasspath/p:"GooClass" \ - -Djava.endorsed.dirs="BadZip" \ - -Xbootclasspath:"GooClass${PS}$BCP" \ - Main -Success "$java" ${TESTVMOPTS} \ - -Xbootclasspath/p:"BadClass" \ - -Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ - -Xbootclasspath:"BadClass${PS}$BCP" \ - Main +# Failure "$javac" ${TESTTOOLVMOPTS} \ +# -Xbootclasspath/p:"GooClass" \ +# -J-Djava.endorsed.dirs="BadZip" \ +# -bootclasspath "GooClass${PS}$BCP" \ +# Main.java +# Success "$javac" ${TESTTOOLVMOPTS} \ +# -Xbootclasspath/p:"BadClass" \ +# -J-Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ +# -bootclasspath "BadClass${PS}$BCP" \ +# Main.java +# Failure "$java" ${TESTVMOPTS} \ +# -Xbootclasspath/p:"GooClass" \ +# -Djava.endorsed.dirs="BadZip" \ +# -Xbootclasspath:"GooClass${PS}$BCP" \ +# Main +# Success "$java" ${TESTVMOPTS} \ +# -Xbootclasspath/p:"BadClass" \ +# -Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ +# -Xbootclasspath:"BadClass${PS}$BCP" \ +# Main #---------------------------------------------------------------- -Failure "$javac" ${TESTTOOLVMOPTS} \ - -Xbootclasspath/p:"GooClass" \ - -Xbootclasspath:"BadClass${PS}$BCP" \ - -Xbootclasspath/a:"GooClass" \ - Main.java -Success "$javac" ${TESTTOOLVMOPTS} \ - -Xbootclasspath/p:"BadClass" \ - -Xbootclasspath:"GooClass${PS}BadClass${PS}$BCP" \ - -Xbootclasspath/a:"BadClass" \ - Main.java -Failure "$java" ${TESTVMOPTS} \ - -Xbootclasspath/p:"GooClass" \ - -Xbootclasspath:"BadClass${PS}$BCP" \ - -Xbootclasspath/a:"GooClass" \ - Main -Success "$java" ${TESTVMOPTS} \ - -Xbootclasspath/p:"BadClass" \ - -Xbootclasspath:"GooClass${PS}BadClass${PS}$BCP" \ - -Xbootclasspath/a:"BadClass" \ - Main +# Failure "$javac" ${TESTTOOLVMOPTS} \ +# -Xbootclasspath/p:"GooClass" \ +# -Xbootclasspath:"BadClass${PS}$BCP" \ +# -Xbootclasspath/a:"GooClass" \ +# Main.java +# Success "$javac" ${TESTTOOLVMOPTS} \ +# -Xbootclasspath/p:"BadClass" \ +# -Xbootclasspath:"GooClass${PS}BadClass${PS}$BCP" \ +# -Xbootclasspath/a:"BadClass" \ +# Main.java +# Failure "$java" ${TESTVMOPTS} \ +# -Xbootclasspath/p:"GooClass" \ +# -Xbootclasspath:"BadClass${PS}$BCP" \ +# -Xbootclasspath/a:"GooClass" \ +# Main +# Success "$java" ${TESTVMOPTS} \ +# -Xbootclasspath/p:"BadClass" \ +# -Xbootclasspath:"GooClass${PS}BadClass${PS}$BCP" \ +# -Xbootclasspath/a:"BadClass" \ +# Main #---------------------------------------------------------------- -Failure "$javac" ${TESTTOOLVMOPTS} \ - -J-Djava.endorsed.dirs="BadZip" \ - -Xbootclasspath:"GooClass${PS}$BCP" \ - Main.java -Success "$javac" ${TESTTOOLVMOPTS} \ - -endorseddirs "BadClass${PS}GooZip${PS}BadJar" \ - -Xbootclasspath:"BadClass${PS}$BCP" \ - Main.java -Success "$javac" ${TESTTOOLVMOPTS} \ - -Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ - -Xbootclasspath:"BadClass${PS}$BCP" \ - Main.java -Success "$javac" ${TESTTOOLVMOPTS} \ - -J-Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ - -Xbootclasspath:"BadClass${PS}$BCP" \ - Main.java -Failure "$java" ${TESTVMOPTS} \ - -Djava.endorsed.dirs="BadZip" \ - -Xbootclasspath:"GooClass${PS}$BCP" \ - Main -Success "$java" ${TESTVMOPTS} \ - -Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ - -Xbootclasspath:"BadClass${PS}$BCP" \ - Main +# Failure "$javac" ${TESTTOOLVMOPTS} \ +# -J-Djava.endorsed.dirs="BadZip" \ +# -Xbootclasspath:"GooClass${PS}$BCP" \ +# Main.java +# Success "$javac" ${TESTTOOLVMOPTS} \ +# -endorseddirs "BadClass${PS}GooZip${PS}BadJar" \ +# -Xbootclasspath:"BadClass${PS}$BCP" \ +# Main.java +# Success "$javac" ${TESTTOOLVMOPTS} \ +# -Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ +# -Xbootclasspath:"BadClass${PS}$BCP" \ +# Main.java +# Success "$javac" ${TESTTOOLVMOPTS} \ +# -J-Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ +# -Xbootclasspath:"BadClass${PS}$BCP" \ +# Main.java +# Failure "$java" ${TESTVMOPTS} \ +# -Djava.endorsed.dirs="BadZip" \ +# -Xbootclasspath:"GooClass${PS}$BCP" \ +# Main +# Success "$java" ${TESTVMOPTS} \ +# -Djava.endorsed.dirs="BadClass${PS}GooZip${PS}BadJar" \ +# -Xbootclasspath:"BadClass${PS}$BCP" \ +# Main #---------------------------------------------------------------- Failure "$javac" ${TESTTOOLVMOPTS} \ @@ -245,32 +245,32 @@ Success "$javac" ${TESTTOOLVMOPTS} \ -Xbootclasspath/a:"GooClass${PS}BadClass" \ -extdirs "BadZip" \ Main.java -Failure "$java" ${TESTVMOPTS} \ - -Xbootclasspath/a:"BadClass" \ - -Djava.ext.dirs="GooZip" \ - Main -Success "$java" ${TESTVMOPTS} \ - -Xbootclasspath/a:"GooClass${PS}BadClass" \ - -Djava.ext.dirs="BadZip" \ - Main +# Failure "$java" ${TESTVMOPTS} \ +# -Xbootclasspath/a:"BadClass" \ +# -Djava.ext.dirs="GooZip" \ +# Main +# Success "$java" ${TESTVMOPTS} \ +# -Xbootclasspath/a:"GooClass${PS}BadClass" \ +# -Djava.ext.dirs="BadZip" \ +# Main #---------------------------------------------------------------- -Failure "$javac" ${TESTTOOLVMOPTS} \ - -bootclasspath "$BCP${PS}BadJar/Lib.jar" \ - -J-Djava.ext.dir="GooJar" \ - Main.java -Success "$javac" ${TESTTOOLVMOPTS} \ - -bootclasspath "$BCP${PS}GooJar/Lib.jar${PS}BadClass" \ - -J-Djava.ext.dir="BadJar" \ - Main.java -Failure "$java" ${TESTVMOPTS} \ - -Xbootclasspath:"$BCP${PS}BadJar/Lib.jar" \ - -Djava.ext.dirs="GooJar" \ - Main -Success "$java" ${TESTVMOPTS} \ - -Xbootclasspath:"$BCP${PS}GooJar/Lib.jar${PS}BadClass" \ - -Djava.ext.dirs="BadJar" \ - Main +# Failure "$javac" ${TESTTOOLVMOPTS} \ +# -bootclasspath "$BCP${PS}BadJar/Lib.jar" \ +# -J-Djava.ext.dir="GooJar" \ +# Main.java +# Success "$javac" ${TESTTOOLVMOPTS} \ +# -bootclasspath "$BCP${PS}GooJar/Lib.jar${PS}BadClass" \ +# -J-Djava.ext.dir="BadJar" \ +# Main.java +# Failure "$java" ${TESTVMOPTS} \ +# -Xbootclasspath:"$BCP${PS}BadJar/Lib.jar" \ +# -Djava.ext.dirs="GooJar" \ +# Main +# Success "$java" ${TESTVMOPTS} \ +# -Xbootclasspath:"$BCP${PS}GooJar/Lib.jar${PS}BadClass" \ +# -Djava.ext.dirs="BadJar" \ +# Main #---------------------------------------------------------------- Failure "$javac" ${TESTTOOLVMOPTS} \ @@ -285,18 +285,18 @@ Success "$javac" ${TESTTOOLVMOPTS} \ -Djava.ext.dirs="GooZip${PS}BadJar" \ -classpath "BadZip/Lib.zip" \ Main.java -Success "$javac" ${TESTTOOLVMOPTS} \ - -J-Djava.ext.dirs="GooZip${PS}BadJar" \ - -classpath "BadZip/Lib.zip" \ - Main.java -Failure "$java" ${TESTVMOPTS} \ - -Djava.ext.dirs="GooClass${PS}BadZip" \ - -cp "GooZip/Lib.zip${PS}." \ - Main -Success "$java" ${TESTVMOPTS} \ - -Djava.ext.dirs="GooZip${PS}BadJar" \ - -cp "BadZip/Lib.zip${PS}." \ - Main +# Success "$javac" ${TESTTOOLVMOPTS} \ +# -J-Djava.ext.dirs="GooZip${PS}BadJar" \ +# -classpath "BadZip/Lib.zip" \ +# Main.java +# Failure "$java" ${TESTVMOPTS} \ +# -Djava.ext.dirs="GooClass${PS}BadZip" \ +# -cp "GooZip/Lib.zip${PS}." \ +# Main +# Success "$java" ${TESTVMOPTS} \ +# -Djava.ext.dirs="GooZip${PS}BadJar" \ +# -cp "BadZip/Lib.zip${PS}." \ +# Main #---------------------------------------------------------------- Failure "$javac" ${TESTTOOLVMOPTS} -classpath "BadClass${PS}GooClass" Main.java @@ -339,27 +339,27 @@ In GooClass Success "$java" ${TESTVMOPTS} -cp "..${PS}${PS}/xyzzy" Main # All other empty path elements are ignored. In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -extdirs "" -cp ".." ../Main.java -In GooJar Failure "$java" ${TESTVMOPTS} -Djava.ext.dirs="" -cp ".." Main +# In GooJar Failure "$java" ${TESTVMOPTS} -Djava.ext.dirs="" -cp ".." Main In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -extdirs "${PS}" -cp ".." ../Main.java In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -Djava.ext.dirs="${PS}" -cp ".." ../Main.java -In GooJar Failure "$java" ${TESTVMOPTS} -Djava.ext.dirs="${PS}" -cp ".." Main +# In GooJar Failure "$java" ${TESTVMOPTS} -Djava.ext.dirs="${PS}" -cp ".." Main In GooJar Success "$javac" ${TESTTOOLVMOPTS} -extdirs "." -cp ".." ../Main.java In GooJar Success "$javac" ${TESTTOOLVMOPTS} -Djava.ext.dirs="." -cp ".." ../Main.java -In GooJar Success "$java" ${TESTVMOPTS} -Djava.ext.dirs="." -cp ".." Main +# In GooJar Success "$java" ${TESTVMOPTS} -Djava.ext.dirs="." -cp ".." Main -In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -J-Djava.endorsed.dirs="" -cp ".." ../Main.java +# In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -J-Djava.endorsed.dirs="" -cp ".." ../Main.java In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -Djava.endorsed.dirs="" -cp ".." ../Main.java -In GooJar Failure "$java" ${TESTVMOPTS} -Djava.endorsed.dirs="" -cp ".." Main +# In GooJar Failure "$java" ${TESTVMOPTS} -Djava.endorsed.dirs="" -cp ".." Main -In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -J-Djava.endorsed.dirs="${PS}" -cp ".." ../Main.java +# In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -J-Djava.endorsed.dirs="${PS}" -cp ".." ../Main.java In GooJar Failure "$javac" ${TESTTOOLVMOPTS} -endorseddirs "${PS}" -cp ".." ../Main.java -In GooJar Failure "$java" ${TESTVMOPTS} -Djava.endorsed.dirs="${PS}" -cp ".." Main +# In GooJar Failure "$java" ${TESTVMOPTS} -Djava.endorsed.dirs="${PS}" -cp ".." Main -In GooJar Success "$javac" ${TESTTOOLVMOPTS} -J-Djava.endorsed.dirs="." -cp ".." ../Main.java +# In GooJar Success "$javac" ${TESTTOOLVMOPTS} -J-Djava.endorsed.dirs="." -cp ".." ../Main.java In GooJar Success "$javac" ${TESTTOOLVMOPTS} -Djava.endorsed.dirs="." -cp ".." ../Main.java -In GooJar Success "$java" ${TESTVMOPTS} -Djava.endorsed.dirs="." -cp ".." Main +# In GooJar Success "$java" ${TESTVMOPTS} -Djava.endorsed.dirs="." -cp ".." Main In GooClass Failure "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath/p: -cp ".." ../Main.java In GooClass Failure "$java" ${TESTVMOPTS} -Xbootclasspath/p: -cp ".." Main @@ -367,11 +367,11 @@ In GooClass Failure "$java" ${TESTVMOPTS} -Xbootclasspath/p: -cp ".." Main In GooClass Success "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath/p:. -cp ".." ../Main.java In GooClass Success "$java" ${TESTVMOPTS} -Xbootclasspath/p:. -cp ".." Main -In GooClass Failure "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath:"$BCP" -cp ".." ../Main.java -In GooClass Failure "$java" ${TESTVMOPTS} -Xbootclasspath:"$BCP" -cp ".." Main +# In GooClass Failure "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath:"$BCP" -cp ".." ../Main.java +# In GooClass Failure "$java" ${TESTVMOPTS} -Xbootclasspath:"$BCP" -cp ".." Main -In GooClass Success "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath:"$BCP${PS}." -cp ".." ../Main.java -In GooClass Success "$java" ${TESTVMOPTS} -Xbootclasspath:"$BCP${PS}." -cp ".." Main +# In GooClass Success "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath:"$BCP${PS}." -cp ".." ../Main.java +# In GooClass Success "$java" ${TESTVMOPTS} -Xbootclasspath:"$BCP${PS}." -cp ".." Main In GooClass Failure "$javac" ${TESTTOOLVMOPTS} -Xbootclasspath/a: -cp ".." ../Main.java In GooClass Failure "$java" ${TESTVMOPTS} -Xbootclasspath/a: -cp ".." Main diff --git a/langtools/test/tools/javac/Paths/SameJVM.java b/langtools/test/tools/javac/Paths/SameJVM.java deleted file mode 100644 index 369b0b0b16a..00000000000 --- a/langtools/test/tools/javac/Paths/SameJVM.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * Support routines to allow running `javac' or `jar' within the same JVM. - */ - -import java.io.*; -import java.net.*; -import java.lang.reflect.*; - -class SameJVM { - - private static ClassLoader toolsClassLoader() { - File javaHome = new File(System.getProperty("java.home")); - File classesDir = new File(javaHome, "classes"); - File libDir = new File(javaHome.getParentFile(), "lib"); - File toolsJar = new File(libDir, "tools.jar"); - try { - return new URLClassLoader( - new URL[] {classesDir.toURL(), toolsJar.toURL()}); - } catch (MalformedURLException e) { throw new AssertionError(e); } - } - private static final ClassLoader cl = toolsClassLoader(); - - static void javac(String... args) throws Exception { - Class c = Class.forName("com.sun.tools.javac.Main", true, cl); - int status = (Integer) - c.getMethod("compile", new Class[] {String[].class}) - .invoke(c.newInstance(), new Object[] {args}); - if (status != 0) - throw new Exception("javac failed: status=" + status); - } - - static void jar(String... args) throws Exception { - Class c = Class.forName("sun.tools.jar.Main", true, cl); - Object instance = c.getConstructor( - new Class[] {PrintStream.class, PrintStream.class, String.class}) - .newInstance(System.out, System.err, "jar"); - boolean result = (Boolean) - c.getMethod("run", new Class[] {String[].class}) - .invoke(instance, new Object[] {args}); - if (! result) - throw new Exception("jar failed"); - } -} diff --git a/langtools/test/tools/javac/Paths/Util.sh b/langtools/test/tools/javac/Paths/Util.sh index 35840aee6bf..3f41f707804 100644 --- a/langtools/test/tools/javac/Paths/Util.sh +++ b/langtools/test/tools/javac/Paths/Util.sh @@ -1,5 +1,5 @@ # -# Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -57,15 +57,15 @@ Report() { test "$#" != 2 && Die "Usage: Report success|failure rc" if test "$1" = "success" -a "$2" = 0; then - echo "PASS: succeeded as expected" + echo "PASS: succeeded as expected" elif test "$1" = "failure" -a "$2" != 0; then - echo "PASS: failed as expected" + echo "PASS: failed as expected" elif test "$1" = "success" -a "$2" != 0; then - Fail "test failed unexpectedly" + Fail "test failed unexpectedly" elif test "$1" = "failure" -a "$2" = 0; then - Fail "test succeeded unexpectedly" + Fail "test succeeded unexpectedly" else - Die "Usage: Report success|failure rc" + Die "Usage: Report success|failure rc" fi } @@ -92,12 +92,12 @@ Bottom() { test "$#" = 1 -a "$1" = "Line" || Die "Usage: Bottom Line" if test -n "$failed"; then - count=`printf "%s" "$failed" | wc -c | tr -d ' '` - echo "FAIL: $count tests failed" - exit 1 + count=`printf "%s" "$failed" | wc -c | tr -d ' '` + echo "FAIL: $count tests failed" + exit 1 else - echo "PASS: all tests gave expected results" - exit 0 + echo "PASS: all tests gave expected results" + exit 0 fi } @@ -105,21 +105,21 @@ BadJarFile() { for jarfilename in "$@"; do pwd > "$jarfilename"; done } -#---------------------------------------------------------------- -# Usage: BCP=`DefaultBootClassPath` -# Returns default bootclasspath, discarding non-existent entries -#---------------------------------------------------------------- -DefaultBootClassPath() { - echo 'public class B {public static void main(String[] a) { - System.out.println(System.getProperty("sun.boot.class.path"));}}' > B.java - "$javac" ${TESTTOOLVMOPTS} B.java - _BCP_="" - for elt in `"$java" ${TESTVMOPTS} B | tr "${PS}" " "`; do - test -r "$elt" -a -n "$elt" && _BCP_="${_BCP_:+${_BCP_}${PS}}${elt}" - done - rm -f B.java B.class - printf "%s" "$_BCP_" # Don't use echo -- unsafe on Windows -} +# #---------------------------------------------------------------- +# # Usage: BCP=`DefaultBootClassPath` +# # Returns default bootclasspath, discarding non-existent entries +# #---------------------------------------------------------------- +# DefaultBootClassPath() { +# echo 'public class B {public static void main(String[] a) { +# System.out.println(System.getProperty("sun.boot.class.path"));}}' > B.java +# "$javac" ${TESTTOOLVMOPTS} B.java +# _BCP_="" +# for elt in `"$java" ${TESTVMOPTS} B | tr "${PS}" " "`; do +# test -r "$elt" -a -n "$elt" && _BCP_="${_BCP_:+${_BCP_}${PS}}${elt}" +# done +# rm -f B.java B.class +# printf "%s" "$_BCP_" # Don't use echo -- unsafe on Windows +# } #---------------------------------------------------------------- # Foil message localization diff --git a/langtools/test/tools/javac/T6558476.java b/langtools/test/tools/javac/T6558476.java index f6871c2a40c..5b021016407 100644 --- a/langtools/test/tools/javac/T6558476.java +++ b/langtools/test/tools/javac/T6558476.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it diff --git a/langtools/test/tools/javac/T6654037.java b/langtools/test/tools/javac/T6654037.java index a59487320f3..e6dad2cef7d 100644 --- a/langtools/test/tools/javac/T6654037.java +++ b/langtools/test/tools/javac/T6654037.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,13 +44,12 @@ import javax.tools.ToolProvider; public class T6654037 { public static void main(String[] args) throws Exception { - final String bootPath = System.getProperty("sun.boot.class.path"); //NOI18N final JavaCompiler tool = ToolProvider.getSystemJavaCompiler(); assert tool != null; String code = "package test; public class Test {private void test() {Object o = null; boolean b = o != null && o instanceof String;} private Test() {}}"; - JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, Arrays.asList("-bootclasspath", bootPath, "-Xjcov"), null, Arrays.asList(new MyFileObject(code))); + JavacTaskImpl ct = (JavacTaskImpl) tool.getTask(null, null, null, Arrays.asList("-Xjcov"), null, Arrays.asList(new MyFileObject(code))); CompilationUnitTree cut = ct.parse().iterator().next(); ClassTree clazz = (ClassTree) cut.getTypeDecls().get(0); MethodTree method = (MethodTree) clazz.getMembers().get(0); diff --git a/langtools/test/tools/javac/T6705935.java b/langtools/test/tools/javac/T6705935.java index 51e09177a12..a836a01e33f 100644 --- a/langtools/test/tools/javac/T6705935.java +++ b/langtools/test/tools/javac/T6705935.java @@ -41,8 +41,6 @@ public class T6705935 { public void run() throws Exception { File java_home = new File(System.getProperty("java.home")); - if (java_home.getName().equals("jre")) - java_home = java_home.getParentFile(); JavaCompiler c = ToolProvider.getSystemJavaCompiler(); try (StandardJavaFileManager fm = c.getStandardFileManager(null, null, null)) { diff --git a/langtools/test/tools/javac/T6725036.java b/langtools/test/tools/javac/T6725036.java index a2fd60bbce3..7d994cd336b 100644 --- a/langtools/test/tools/javac/T6725036.java +++ b/langtools/test/tools/javac/T6725036.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,13 +26,17 @@ * @bug 6725036 8016760 * @summary javac returns incorrect value for lastModifiedTime() when * source is a zip file archive + * @library /tools/lib + * @build ToolBox + * @run main T6725036 */ import java.io.File; +import java.io.IOException; import java.util.Date; import java.util.jar.JarEntry; import java.util.jar.JarFile; -import javax.tools.JavaFileObject; +import javax.tools.*; import com.sun.tools.javac.file.JavacFileManager; import com.sun.tools.javac.file.RelativePath.RelativeFile; @@ -49,33 +53,43 @@ public class T6725036 { void run() throws Exception { RelativeFile TEST_ENTRY_NAME = new RelativeFile("java/lang/String.class"); - File f = new File(System.getProperty("java.home")); - if (!f.getName().equals("jre")) - f = new File(f, "jre"); - File rt_jar = new File(new File(f, "lib"), "rt.jar"); + File testJar = createJar("test.jar", "java.lang.*"); - JarFile j = new JarFile(rt_jar); - JarEntry je = j.getJarEntry(TEST_ENTRY_NAME.getPath()); - long jarEntryTime = je.getTime(); + try (JarFile j = new JarFile(testJar)) { + JarEntry je = j.getJarEntry(TEST_ENTRY_NAME.getPath()); + long jarEntryTime = je.getTime(); - ZipFileIndexCache zfic = ZipFileIndexCache.getSharedInstance(); - ZipFileIndex zfi = zfic.getZipFileIndex(rt_jar, null, false, null, false); - long zfiTime = zfi.getLastModified(TEST_ENTRY_NAME); + ZipFileIndexCache zfic = ZipFileIndexCache.getSharedInstance(); + ZipFileIndex zfi = zfic.getZipFileIndex(testJar, null, false, null, false); + long zfiTime = zfi.getLastModified(TEST_ENTRY_NAME); - check(je, jarEntryTime, zfi + ":" + TEST_ENTRY_NAME.getPath(), zfiTime); + check(je, jarEntryTime, zfi + ":" + TEST_ENTRY_NAME.getPath(), zfiTime); - Context context = new Context(); - JavacFileManager fm = new JavacFileManager(context, false, null); - ZipFileIndexArchive zfia = new ZipFileIndexArchive(fm, zfi); - JavaFileObject jfo = - zfia.getFileObject(TEST_ENTRY_NAME.dirname(), - TEST_ENTRY_NAME.basename()); - long jfoTime = jfo.getLastModified(); + Context context = new Context(); + JavacFileManager fm = new JavacFileManager(context, false, null); + ZipFileIndexArchive zfia = new ZipFileIndexArchive(fm, zfi); + JavaFileObject jfo = + zfia.getFileObject(TEST_ENTRY_NAME.dirname(), + TEST_ENTRY_NAME.basename()); + long jfoTime = jfo.getLastModified(); - check(je, jarEntryTime, jfo, jfoTime); + check(je, jarEntryTime, jfo, jfoTime); - if (errors > 0) - throw new Exception(errors + " occurred"); + if (errors > 0) + throw new Exception(errors + " occurred"); + } + } + + File createJar(String name, String... paths) throws IOException { + JavaCompiler comp = ToolProvider.getSystemJavaCompiler(); + try (JavaFileManager fm = comp.getStandardFileManager(null, null, null)) { + File f = new File(name); + ToolBox tb = new ToolBox(); + tb.new JarTask(f.getPath()) + .files(fm, StandardLocation.PLATFORM_CLASS_PATH, paths) + .run(); + return f; + } } void check(Object ref, long refTime, Object test, long testTime) { diff --git a/langtools/test/tools/javac/T6873845.java b/langtools/test/tools/javac/T6873845.java index b1cfea6d203..3fc6ca4eea4 100644 --- a/langtools/test/tools/javac/T6873845.java +++ b/langtools/test/tools/javac/T6873845.java @@ -1,14 +1,14 @@ -import java.io.*; -import java.util.*; - -import sun.misc.*; - /* * @test /nodynamiccopyright/ * @bug 6873845 * @summary refine access to symbol file */ +import java.io.*; +import java.util.*; + +import sun.misc.*; + public class T6873845 { public static void main(String... args) throws Exception { new T6873845().run(); diff --git a/langtools/test/tools/javac/annotations/TestAnnotationPackageInfo.java b/langtools/test/tools/javac/annotations/TestAnnotationPackageInfo.java index ac7593c3d49..f6a7e1f649f 100644 --- a/langtools/test/tools/javac/annotations/TestAnnotationPackageInfo.java +++ b/langtools/test/tools/javac/annotations/TestAnnotationPackageInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -51,7 +51,6 @@ public class TestAnnotationPackageInfo { } public void run() throws Exception { - final String bootPath = System.getProperty("sun.boot.class.path"); final JavaCompiler tool = ToolProvider.getSystemJavaCompiler(); assert tool != null; @@ -65,9 +64,8 @@ public class TestAnnotationPackageInfo { DiagnosticCollector coll = new DiagnosticCollector(); - List options = Arrays.asList("-bootclasspath", bootPath); List files = Arrays.asList(test_java, package_info_java); - JavacTask ct = (JavacTask)tool.getTask(null, null, coll, options, null, files); + JavacTask ct = (JavacTask)tool.getTask(null, null, coll, null, null, files); ct.analyze(); String expectedCode = "compiler.err.annotation.missing.default.value"; diff --git a/langtools/test/tools/javac/api/6411310/Test.java b/langtools/test/tools/javac/api/6411310/Test.java deleted file mode 100644 index 26a989285ce..00000000000 --- a/langtools/test/tools/javac/api/6411310/Test.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 6410367 6411310 - * @summary FileObject should support user-friendly names via getName() - */ - -import java.io.*; -import java.util.*; -import java.util.jar.*; -import java.util.zip.*; -import javax.tools.*; - -import com.sun.tools.javac.file.JavacFileManager; -import com.sun.tools.javac.util.Context; -import com.sun.tools.javac.util.Options; - -// Test FileObject.getName returned from JavacFileManager and its support classes. - -public class Test { - public static void main(String... args) throws Exception { - new Test().run(); - } - - Set foundClasses = new TreeSet(); - Set foundJars = new TreeSet(); - - void run() throws Exception { - File rt_jar = findRtJar(); - - // names for entries to be created in directories and jar files - String[] entries = { "p/A.java", "p/A.class", "p/resources/A-1.html" }; - - // test various combinations of directories and jar files, intended to - // cover all sources of file objects within JavacFileManager's support classes - - test(createFileManager(), createDir("dir", entries), "p", entries); - test(createFileManager(), createDir("a b/dir", entries), "p", entries); - - for (boolean useOptimizedZip: new boolean[] { false, true }) { - test(createFileManager(useOptimizedZip), createJar("jar", entries), "p", entries); - test(createFileManager(useOptimizedZip), createJar("jar jar", entries), "p", entries); - - for (boolean useSymbolFile: new boolean[] { false, true }) { - test(createFileManager(useOptimizedZip, useSymbolFile), rt_jar, "java.lang.ref", null); - } - } - - if (errors > 0) - throw new Exception(errors + " errors found"); - - // Verify that we hit all the impl classes we intended - checkCoverage("classes", foundClasses, - "RegularFileObject", "SymbolFileObject", "ZipFileIndexFileObject", "ZipFileObject"); - - // Verify that we hit the jar files we intended, specifically ct.sym as well as rt.jar - checkCoverage("jar files", foundJars, - "ct.sym", "jar", "jar jar", "rt.jar"); - } - - // use a new file manager for each test - void test(StandardJavaFileManager fm, File f, String pkg, String[] entries) throws Exception { - System.err.println("Test " + f); - try { - if (f.isDirectory()) { - for (File dir: new File[] { f, f.getAbsoluteFile() }) { - for (String e: entries) { - JavaFileObject fo = fm.getJavaFileObjects(new File(dir, e)).iterator().next(); - test(fo, dir, e); - } - } - } - - fm.setLocation(StandardLocation.CLASS_PATH, Collections.singleton(f)); - fm.setLocation(StandardLocation.SOURCE_PATH, Collections.singleton(f.getAbsoluteFile())); - for (StandardLocation l: EnumSet.of(StandardLocation.CLASS_PATH, StandardLocation.SOURCE_PATH)) { - for (JavaFileObject fo: fm.list(l, pkg, EnumSet.allOf(JavaFileObject.Kind.class), true)) { - // we could use fm.getLocation but the following guarantees we preserve the original filename - File dir = (l == StandardLocation.CLASS_PATH ? f : f.getAbsoluteFile()); - char sep = (dir.isDirectory() ? File.separatorChar : '/'); - String b = fm.inferBinaryName(l, fo); - String e = fo.getKind().extension; - test(fo, dir, b.replace('.', sep) + e); - } - } - } finally { - fm.close(); - } - } - - void test(JavaFileObject fo, File dir, String p) { - System.err.println("Test: " + fo); - String expect = dir.isDirectory() ? new File(dir, p).getPath() : (dir.getPath() + "(" + p + ")"); - String found = fo.getName(); - // if ct.sym is found, replace it with the equivalent rt.jar - String found2 = found.replaceAll("lib([\\\\/])ct.sym\\(META-INF/sym/rt.jar/", "jre$1lib$1rt.jar("); - if (!expect.equals(found2)) { - System.err.println("expected: " + expect); - System.err.println(" found: " + found); - if (!found.equals(found2)) - System.err.println(" found2: " + found2); - error("Failed: " + fo); - } - - // record the file object class name for coverage checks later - foundClasses.add(fo.getClass().getSimpleName()); - - if (found.contains("(")) { - // record access to the jar file for coverage checks later - foundJars.add(new File(found.substring(0, found.indexOf("("))).getName()); - } - } - - void checkCoverage(String label, Set found, String... expect) throws Exception { - Set e = new TreeSet(Arrays.asList(expect)); - if (!found.equals(e)) { - e.removeAll(found); - throw new Exception("expected " + label + " not used: " + e); - } - } - - JavacFileManager createFileManager() { - return createFileManager(false, false); - } - - JavacFileManager createFileManager(boolean useOptimizedZip) { - return createFileManager(useOptimizedZip, false); - } - - JavacFileManager createFileManager(boolean useOptimizedZip, boolean useSymbolFile) { - Context c = new Context(); - Options options = Options.instance(c); - - options.put("useOptimizedZip", Boolean.toString(useOptimizedZip)); - - if (!useSymbolFile) { - options.put("ignore.symbol.file", "true"); - } - return new JavacFileManager(c, false, null); - } - - File createDir(String name, String... entries) throws Exception { - File dir = new File(name); - if (!dir.mkdirs()) - throw new Exception("cannot create directories " + dir); - for (String e: entries) { - writeFile(new File(dir, e), e); - } - return dir; - } - - File createJar(String name, String... entries) throws IOException { - File jar = new File(name); - OutputStream out = new FileOutputStream(jar); - try { - JarOutputStream jos = new JarOutputStream(out); - for (String e: entries) { - jos.putNextEntry(new ZipEntry(e)); - jos.write(e.getBytes()); - } - jos.close(); - } finally { - out.close(); - } - return jar; - } - - File findRtJar() throws Exception { - File java_home = new File(System.getProperty("java.home")); - if (java_home.getName().equals("jre")) - java_home = java_home.getParentFile(); - File rt_jar = new File(new File(new File(java_home, "jre"), "lib"), "rt.jar"); - if (!rt_jar.exists()) - throw new Exception("can't find rt.jar"); - return rt_jar; - } - - byte[] read(InputStream in) throws IOException { - byte[] data = new byte[1024]; - int offset = 0; - try { - int n; - while ((n = in.read(data, offset, data.length - offset)) != -1) { - offset += n; - if (offset == data.length) - data = Arrays.copyOf(data, 2 * data.length); - } - } finally { - in.close(); - } - return Arrays.copyOf(data, offset); - } - - void writeFile(File f, String s) throws IOException { - f.getParentFile().mkdirs(); - FileWriter out = new FileWriter(f); - try { - out.write(s); - } finally { - out.close(); - } - } - - void error(String msg) { - System.err.println(msg); - errors++; - } - - int errors; -} diff --git a/langtools/test/tools/javac/api/6598108/T6598108.java b/langtools/test/tools/javac/api/6598108/T6598108.java index a7ca25971aa..6bc71aac462 100644 --- a/langtools/test/tools/javac/api/6598108/T6598108.java +++ b/langtools/test/tools/javac/api/6598108/T6598108.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,10 +43,9 @@ import javax.tools.ToolProvider; public class T6598108 { public static void main(String[] args) throws Exception { - final String bootPath = System.getProperty("sun.boot.class.path"); //NOI18N final JavaCompiler tool = ToolProvider.getSystemJavaCompiler(); assert tool != null; - final JavacTask ct = (JavacTask)tool.getTask(null, null, null, Arrays.asList("-bootclasspath", bootPath), null, Arrays.asList(new MyFileObject())); + final JavacTask ct = (JavacTask)tool.getTask(null, null, null, null, null, Arrays.asList(new MyFileObject())); CompilationUnitTree cut = ct.parse().iterator().next(); TreePath tp = new TreePath(new TreePath(cut), cut.getTypeDecls().get(0)); diff --git a/langtools/test/tools/javac/api/6608214/T6608214.java b/langtools/test/tools/javac/api/6608214/T6608214.java index 42383923bc0..be17e1c85e7 100644 --- a/langtools/test/tools/javac/api/6608214/T6608214.java +++ b/langtools/test/tools/javac/api/6608214/T6608214.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -47,8 +47,7 @@ public class T6608214 { } }; List files = Arrays.asList(sfo); - String bootPath = System.getProperty("sun.boot.class.path"); - List opts = Arrays.asList("-bootclasspath", bootPath, "-Xjcov"); + List opts = Arrays.asList("-Xjcov"); JavaCompiler tool = ToolProvider.getSystemJavaCompiler(); JavacTask ct = (JavacTask)tool.getTask(null, null, null,opts,null,files); ct.analyze(); diff --git a/langtools/test/tools/javac/api/T6412669.java b/langtools/test/tools/javac/api/T6412669.java index c8fc966b46e..f9e9152f0c7 100644 --- a/langtools/test/tools/javac/api/T6412669.java +++ b/langtools/test/tools/javac/api/T6412669.java @@ -44,28 +44,9 @@ public class T6412669 extends AbstractProcessor { File testSrc = new File(System.getProperty("test.src", ".")); File testClasses = new File(System.getProperty("test.classes", ".")); - // Determine location of necessary tools classes. Assume all in one place. - // Likely candidates are typically tools.jar (when testing JDK build) - // or build/classes or dist/javac.jar (when testing langtools, using -Xbootclasspath/p:) - File toolsClasses; - URL u = T6412669.class.getClassLoader().getResource("com/sun/source/util/JavacTask.class"); - switch (u.getProtocol()) { - case "file": - toolsClasses = new File(u.toURI()); - break; - case "jar": - String s = u.getFile(); // will be file:path!/entry - int sep = s.indexOf("!"); - toolsClasses = new File(new URI(s.substring(0, sep))); - break; - default: - throw new AssertionError("Cannot locate tools classes"); - } - //System.err.println("toolsClasses: " + toolsClasses); - JavacTool tool = JavacTool.create(); try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) { - fm.setLocation(StandardLocation.CLASS_PATH, Arrays.asList(testClasses, toolsClasses)); + fm.setLocation(StandardLocation.CLASS_PATH, Arrays.asList(testClasses)); Iterable files = fm.getJavaFileObjectsFromFiles(Arrays.asList(new File(testSrc, T6412669.class.getName()+".java"))); String[] opts = { "-proc:only", "-processor", T6412669.class.getName()}; diff --git a/langtools/test/tools/javac/api/T6430241.java b/langtools/test/tools/javac/api/T6430241.java index bdcc068aa25..e032d4165ea 100644 --- a/langtools/test/tools/javac/api/T6430241.java +++ b/langtools/test/tools/javac/api/T6430241.java @@ -1,238 +1,255 @@ - /* - * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ +/* + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ - /* - * @test - * @bug 6430241 - * @summary Hard to disable symbol file feature through API - */ +/* + * @test + * @bug 6430241 + * @summary Hard to disable symbol file feature through API + * @library /tools/lib + * @build ToolBox + * @run main T6430241 + */ - import java.io.*; - import java.util.*; - import javax.tools.*; +import java.io.*; +import java.util.*; - import com.sun.source.util.JavacTask; - import com.sun.tools.javac.api.JavacTool; +import javax.tools.*; - public class T6430241 { - public static void main(String... args) throws Exception { - new T6430241().run(); +import com.sun.source.util.JavacTask; +import com.sun.tools.javac.api.JavacTool; +import com.sun.tools.javac.file.JavacFileManager; +import com.sun.tools.javac.util.Context; + +public class T6430241 { + public static void main(String... args) throws Exception { + new T6430241().run(); + } + + void run() throws Exception { + setup(); + testCommandLine(); + testSimpleAPI(); + testTaskAPI(); + + if (errors > 0) + throw new Exception(errors + " errors found"); + } + + void setup() throws Exception { + classesDir = new File("classes"); + classesDir.mkdirs(); + + emptyDir = new File("empty"); + emptyDir.mkdirs(); + + bootClassPath = createJar().getPath(); + + File srcDir = new File("src"); + String test = "import sun.misc.Unsafe; class Test { }"; + testFile = writeFile(srcDir, "Test.java", test); + } + + //----- tests for command line invocation + + void testCommandLine() throws Exception { + testCommandLine(true); + testCommandLine(false, "-Xbootclasspath/p:" + emptyDir); + testCommandLine(false, "-Xbootclasspath:" + bootClassPath); + testCommandLine(false, "-Xbootclasspath/a:" + emptyDir); + testCommandLine(false, "-XDignore.symbol.file"); + System.err.println(); + } + + void testCommandLine(boolean expectWarnings, String... opts) throws Exception { + System.err.println("test command line: " + Arrays.asList(opts)); + + String[] args = initArgs(opts); + + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + int rc = com.sun.tools.javac.Main.compile(args, pw); + String out = showOutput(sw.toString()); + + checkCompilationOK(rc); + checkOutput(out, expectWarnings); + } + + //----- tests for simple API invocation + + void testSimpleAPI() { + testSimpleAPI(true); + testSimpleAPI(false, "-Xbootclasspath/p:" + emptyDir); + testSimpleAPI(false, "-Xbootclasspath:" + bootClassPath); + testSimpleAPI(false, "-Xbootclasspath/a:" + emptyDir); + testSimpleAPI(false, "-XDignore.symbol.file"); + System.err.println(); + } + + void testSimpleAPI(boolean expectWarnings, String... opts) { + System.err.println("test simple API: " + Arrays.asList(opts)); + + String[] args = initArgs(opts); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + PrintStream ps = new PrintStream(baos); + + JavacTool tool = JavacTool.create(); + int rc = tool.run(null, null, ps, args); + + String out = showOutput(baos.toString()); + + checkCompilationOK(rc); + checkOutput(out, expectWarnings); + } + + //----- tests for CompilationTask API invocation + + void testTaskAPI() throws Exception { + List bcp = new ArrayList(); + for (String f: bootClassPath.split(File.pathSeparator)) { + if (!f.isEmpty()) + bcp.add(new File(f)); } - void run() throws Exception { - setup(); - testCommandLine(); - testSimpleAPI(); - testTaskAPI(); + testTaskAPI(true, null); + testTaskAPI(false, bcp); + System.err.println(); + } - if (errors > 0) - throw new Exception(errors + " errors found"); - } + void testTaskAPI(boolean expectWarnings, Iterable pcp) throws Exception { + System.err.println("test task API: " + pcp); - void setup() throws Exception { - classesDir = new File("classes"); - classesDir.mkdirs(); + JavacTool tool = JavacTool.create(); + try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) { - emptyDir = new File("empty"); - emptyDir.mkdirs(); + if (pcp != null) + fm.setLocation(StandardLocation.PLATFORM_CLASS_PATH, pcp); - bootClassPath = System.getProperty("sun.boot.class.path"); - - File srcDir = new File("src"); - String test = "import sun.misc.Unsafe; class Test { }"; - testFile = writeFile(srcDir, "Test.java", test); - } - - //----- tests for command line invocation - - void testCommandLine() throws Exception { - testCommandLine(true); - testCommandLine(true, "-Xbootclasspath/p:" + emptyDir); - testCommandLine(false, "-Xbootclasspath:" + bootClassPath); - testCommandLine(true, "-Xbootclasspath/a:" + emptyDir); - testCommandLine(false, "-XDignore.symbol.file"); - System.err.println(); - } - - void testCommandLine(boolean expectWarnings, String... opts) throws Exception { - System.err.println("test command line: " + Arrays.asList(opts)); - - String[] args = initArgs(opts); + Iterable files = fm.getJavaFileObjects(testFile); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); - int rc = com.sun.tools.javac.Main.compile(args, pw); + JavacTask task = tool.getTask(pw, fm, null, null, null, files); + boolean ok = task.call(); String out = showOutput(sw.toString()); - checkCompilationOK(rc); + checkCompilationOK(ok); checkOutput(out, expectWarnings); } - - //----- tests for simple API invocation - - void testSimpleAPI() { - testSimpleAPI(true); - testSimpleAPI(true, "-Xbootclasspath/p:" + emptyDir); - testSimpleAPI(false, "-Xbootclasspath:" + bootClassPath); - testSimpleAPI(true, "-Xbootclasspath/a:" + emptyDir); - testSimpleAPI(false, "-XDignore.symbol.file"); - System.err.println(); - } - - void testSimpleAPI(boolean expectWarnings, String... opts) { - System.err.println("test simple API: " + Arrays.asList(opts)); - - String[] args = initArgs(opts); - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - PrintStream ps = new PrintStream(baos); - - JavacTool tool = JavacTool.create(); - int rc = tool.run(null, null, ps, args); - - String out = showOutput(baos.toString()); - - checkCompilationOK(rc); - checkOutput(out, expectWarnings); - } - - //----- tests for CompilationTask API invocation - - void testTaskAPI() throws Exception { - List bcp = new ArrayList(); - for (String f: bootClassPath.split(File.pathSeparator)) { - if (!f.isEmpty()) - bcp.add(new File(f)); - } - - testTaskAPI(true, null); - testTaskAPI(false, bcp); - System.err.println(); - } - - void testTaskAPI(boolean expectWarnings, Iterable pcp) throws Exception { - System.err.println("test task API: " + pcp); - - JavacTool tool = JavacTool.create(); - try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) { - - if (pcp != null) - fm.setLocation(StandardLocation.PLATFORM_CLASS_PATH, pcp); - - Iterable files = fm.getJavaFileObjects(testFile); - - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - JavacTask task = tool.getTask(pw, fm, null, null, null, files); - boolean ok = task.call(); - String out = showOutput(sw.toString()); - - checkCompilationOK(ok); - checkOutput(out, expectWarnings); - } - } - - //----- utility methods - - /** - * Create a file with given content. - */ - File writeFile(File dir, String path, String content) throws IOException { - File f = new File(dir, path); - f.getParentFile().mkdirs(); - FileWriter out = new FileWriter(f); - try { - out.write(content); - } finally { - out.close(); - } - return f; - } - - /** - * Initialize args for compilation with given opts. - * @return opts -d classesDir testFile - */ - String[] initArgs(String[] opts) { - List args = new ArrayList(); - args.addAll(Arrays.asList(opts)); - args.add("-d"); - args.add(classesDir.getPath()); - args.add(testFile.getPath()); - return args.toArray(new String[args.size()]); - } - - /** - * Show output from compilation if non empty. - */ - String showOutput(String out) { - if (!out.isEmpty()) - System.err.println(out); - return out; - } - - /** - * Verify compilation succeeeded. - */ - void checkCompilationOK(boolean ok) { - if (!ok) - error("compilation failed"); - } - - /** - * Verify compilation succeeeded. - */ - void checkCompilationOK(int rc) { - if (rc != 0) - error("compilation failed, rc: " + rc); - } - - /** - * Check whether output contains warnings if and only if warnings - * are expected. - */ - void checkOutput(String out, boolean expectWarnings) { - boolean foundWarnings = out.contains("warning"); - if (foundWarnings) { - if (!expectWarnings) - error("unexpected warnings found"); - } else { - if (expectWarnings) - error("expected warnings not found"); - } - } - - /** - * Report an error. - */ - void error(String msg) { - System.err.println("error: " + msg); - errors++; - } - - String bootClassPath; - File classesDir; - File emptyDir; - File testFile; - int errors; } + + //----- utility methods + + File createJar() throws IOException { + File f = new File("test.jar"); + try (JavaFileManager fm = new JavacFileManager(new Context(), false, null)) { + ToolBox tb = new ToolBox(); + tb.new JarTask(f.getPath()) + .files(fm, StandardLocation.PLATFORM_CLASS_PATH, "java.lang.*", "sun.misc.*") + .run(); + } + return f; + } + + /** + * Create a file with given content. + */ + File writeFile(File dir, String path, String content) throws IOException { + File f = new File(dir, path); + f.getParentFile().mkdirs(); + FileWriter out = new FileWriter(f); + try { + out.write(content); + } finally { + out.close(); + } + return f; + } + + /** + * Initialize args for compilation with given opts. + * @return opts -d classesDir testFile + */ + String[] initArgs(String[] opts) { + List args = new ArrayList(); + args.addAll(Arrays.asList(opts)); + args.add("-d"); + args.add(classesDir.getPath()); + args.add(testFile.getPath()); + return args.toArray(new String[args.size()]); + } + + /** + * Show output from compilation if non empty. + */ + String showOutput(String out) { + if (!out.isEmpty()) + System.err.println(out); + return out; + } + + /** + * Verify compilation succeeded. + */ + void checkCompilationOK(boolean ok) { + if (!ok) + error("compilation failed"); + } + + /** + * Verify compilation succeeded. + */ + void checkCompilationOK(int rc) { + if (rc != 0) + error("compilation failed, rc: " + rc); + } + + /** + * Check whether output contains warnings if and only if warnings + * are expected. + */ + void checkOutput(String out, boolean expectWarnings) { + boolean foundWarnings = out.contains("warning"); + if (foundWarnings) { + if (!expectWarnings) + error("unexpected warnings found"); + } else { + if (expectWarnings) + error("expected warnings not found"); + } + } + + /** + * Report an error. + */ + void error(String msg) { + System.err.println("error: " + msg); + errors++; + } + + String bootClassPath; + File classesDir; + File emptyDir; + File testFile; + int errors; +} diff --git a/langtools/test/tools/javac/api/T6877206.java b/langtools/test/tools/javac/api/T6877206.java index d3a09a519eb..aae6f485f21 100644 --- a/langtools/test/tools/javac/api/T6877206.java +++ b/langtools/test/tools/javac/api/T6877206.java @@ -52,8 +52,6 @@ public class T6877206 { Set foundJars = new TreeSet(); void run() throws Exception { - File rt_jar = findRtJar(); - // names for entries to be created in directories and jar files String[] entries = { "p/A.class", "p/resources/A-1.jpg" }; @@ -66,19 +64,14 @@ public class T6877206 { for (boolean useOptimizedZip: new boolean[] { false, true }) { test(createFileManager(useOptimizedZip), createJar("jar", entries), "p", entries.length); test(createFileManager(useOptimizedZip), createJar("jar jar", entries), "p", entries.length); - - for (boolean useSymbolFile: new boolean[] { false, true }) { - test(createFileManager(useOptimizedZip, useSymbolFile), rt_jar, "java.lang.ref", -1); - } } - // Verify that we hit all the impl classes we intended + // Verify that we hit the files we intended checkCoverage("classes", foundClasses, - "RegularFileObject", "SymbolFileObject", "ZipFileIndexFileObject", "ZipFileObject"); + "RegularFileObject", "ZipFileIndexFileObject", "ZipFileObject"); - // Verify that we hit the jar files we intended, specifically ct.sym as well as rt.jar - checkCoverage("jar files", foundJars, - "ct.sym", "jar", "jar jar", "rt.jar"); + // Verify that we hit the jar files we intended + checkCoverage("jar files", foundJars, "jar", "jar jar"); } // use a new file manager for each test @@ -201,16 +194,6 @@ public class T6877206 { return jar; } - File findRtJar() throws Exception { - File java_home = new File(System.getProperty("java.home")); - if (java_home.getName().equals("jre")) - java_home = java_home.getParentFile(); - File rt_jar = new File(new File(new File(java_home, "jre"), "lib"), "rt.jar"); - if (!rt_jar.exists()) - throw new Exception("can't find rt.jar"); - return rt_jar; - } - byte[] read(InputStream in) throws IOException { byte[] data = new byte[1024]; int offset = 0; diff --git a/langtools/test/tools/javac/api/TestJavacTaskScanner.java b/langtools/test/tools/javac/api/TestJavacTaskScanner.java index 39c0979d4ec..2cf4ad71f26 100644 --- a/langtools/test/tools/javac/api/TestJavacTaskScanner.java +++ b/langtools/test/tools/javac/api/TestJavacTaskScanner.java @@ -89,7 +89,7 @@ public class TestJavacTaskScanner extends ToolTester { System.out.println("#parseTypeElements: " + numParseTypeElements); System.out.println("#allMembers: " + numAllMembers); - check(numTokens, "#Tokens", 1222); + check(numTokens, "#Tokens", 1054); check(numParseTypeElements, "#parseTypeElements", 158); check(numAllMembers, "#allMembers", 52); } @@ -138,30 +138,10 @@ public class TestJavacTaskScanner extends ToolTester { public StandardJavaFileManager getLocalFileManager(JavaCompiler tool, DiagnosticListener dl, Charset encoding) { - File javac_classes; - try { - final String javacMainClass = "com/sun/tools/javac/Main.class"; - URL url = getClass().getClassLoader().getResource(javacMainClass); - if (url == null) - throw new Error("can't locate javac classes"); - URI uri = url.toURI(); - String scheme = uri.getScheme(); - String ssp = uri.getSchemeSpecificPart(); - if (scheme.equals("jar")) { - javac_classes = new File(new URI(ssp.substring(0, ssp.indexOf("!/")))); - } else if (scheme.equals("file")) { - javac_classes = new File(ssp.substring(0, ssp.indexOf(javacMainClass))); - } else - throw new Error("unknown URL: " + url); - } catch (URISyntaxException e) { - throw new Error(e); - } - System.err.println("javac_classes: " + javac_classes); - StandardJavaFileManager fm = tool.getStandardFileManager(dl, null, encoding); try { fm.setLocation(SOURCE_PATH, Arrays.asList(test_src)); - fm.setLocation(CLASS_PATH, join(test_class_path, Arrays.asList(javac_classes))); + fm.setLocation(CLASS_PATH, test_class_path); fm.setLocation(CLASS_OUTPUT, Arrays.asList(test_classes)); } catch (IOException e) { throw new AssertionError(e); diff --git a/langtools/test/tools/javac/api/TestSearchPaths.java b/langtools/test/tools/javac/api/TestSearchPaths.java index 3aa39320fa8..cd0a2a4311b 100644 --- a/langtools/test/tools/javac/api/TestSearchPaths.java +++ b/langtools/test/tools/javac/api/TestSearchPaths.java @@ -108,6 +108,7 @@ public class TestSearchPaths { void testClassOutput() throws IOException { String test = "testClassOutput"; + System.err.println("test: " + test); for (int i = 1; i <= 5; i++) { File classes = createDir(test + "/" + i + "/classes"); @@ -133,6 +134,7 @@ public class TestSearchPaths { void testClassPath() throws IOException { String test = "testClassPath"; + System.err.println("test: " + test); for (int i = 1; i <= 5; i++) { File classes = createDir(test + "/" + i + "/classes"); @@ -159,10 +161,12 @@ public class TestSearchPaths { } tested.add(CLASS_PATH); + System.err.println(); } void testSourcePath() throws IOException { String test = "testSourcePath"; + System.err.println("test: " + test); setLocation(CLASS_PATH); // empty for (int i = 1; i <= 5; i++) { @@ -188,10 +192,12 @@ public class TestSearchPaths { } tested.add(SOURCE_PATH); + System.err.println(); } void testPlatformClassPath() throws IOException { String test = "testPlatformClassPath"; + System.err.println("test: " + test); List defaultPath = getLocation(PLATFORM_CLASS_PATH); StringBuilder sb = new StringBuilder(); @@ -205,7 +211,10 @@ public class TestSearchPaths { setLocation(CLASS_PATH); // empty setLocation(SOURCE_PATH); // empty - for (int i = 1; i <= 10; i++) { + // FIXME: temporarily exclude cases referring to default bootclasspath + // for (int i = 1; i <= 10; i++) { + int[] cases = new int[] { 1, 2, 4, 5, 6, 7 }; + for (int i : cases) { File classes = createDir(test + "/" + i + "/classes"); File testJars = createDir(test + "/" + i + "/testJars"); File testClasses = createDir(test + "/" + i + "/testClasses"); @@ -302,10 +311,14 @@ public class TestSearchPaths { } tested.add(PLATFORM_CLASS_PATH); + System.err.println(); } void testAnnotationProcessorPath() throws IOException { String test = "testAnnotationProcessorPath"; + System.err.println("test: " + test); + + fileManager.setLocation(PLATFORM_CLASS_PATH, null); String template = "import java.util.*;\n" @@ -348,10 +361,12 @@ public class TestSearchPaths { } tested.add(ANNOTATION_PROCESSOR_PATH); + System.err.println(); } void testSourceOutput() throws IOException { String test = "testAnnotationProcessorPath"; + System.err.println("test: " + test); String source = "import java.io.*;\n" @@ -407,10 +422,12 @@ public class TestSearchPaths { checkFile(CLASS_OUTPUT, "G" + i + ".class"); } tested.add(SOURCE_OUTPUT); + System.err.println(); } void testNativeHeaderOutput() throws IOException { String test = "testNativeHeaderOutput"; + System.err.println("test: " + test); for (int i = 1; i <= 5; i++) { File classes = createDir(test + "/" + i + "/classes"); @@ -433,6 +450,7 @@ public class TestSearchPaths { } tested.add(StandardLocation.NATIVE_HEADER_OUTPUT); + System.err.println(); } List getOptions(String... args) { diff --git a/langtools/test/tools/javac/diags/CheckResourceKeys.java b/langtools/test/tools/javac/diags/CheckResourceKeys.java index f1d439243a1..0ddf0520303 100644 --- a/langtools/test/tools/javac/diags/CheckResourceKeys.java +++ b/langtools/test/tools/javac/diags/CheckResourceKeys.java @@ -282,7 +282,8 @@ public class CheckResourceKeys { // file names "ct.sym", "rt.jar", - "tools.jar", + "jfxrt.jar", + "bootmodules.jimage", // -XD option names "process.packages", "ignore.symbol.file", diff --git a/langtools/test/tools/javac/diags/examples/NotInProfile.java b/langtools/test/tools/javac/diags/examples/NotInProfile.java index 079d35907ba..e0c1be31140 100644 --- a/langtools/test/tools/javac/diags/examples/NotInProfile.java +++ b/langtools/test/tools/javac/diags/examples/NotInProfile.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it diff --git a/langtools/test/tools/javac/lib/CompileFail.java b/langtools/test/tools/javac/lib/CompileFail.java index 328c271ae00..8717abb49c7 100644 --- a/langtools/test/tools/javac/lib/CompileFail.java +++ b/langtools/test/tools/javac/lib/CompileFail.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,7 +37,6 @@ public class CompileFail { List javacArgs = new ArrayList<>(); javacArgs.addAll(Arrays.asList( - "-bootclasspath", System.getProperty("sun.boot.class.path"), "-d", "." )); diff --git a/langtools/test/tools/javac/nio/compileTest/CompileTest.java b/langtools/test/tools/javac/nio/compileTest/CompileTest.java deleted file mode 100644 index e04c97c2664..00000000000 --- a/langtools/test/tools/javac/nio/compileTest/CompileTest.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/** - * @test - * @bug 6906175 6915476 6915497 7006564 - * @summary Path-based JavaFileManager - * @compile -g CompileTest.java HelloPathWorld.java - * @run main CompileTest - */ - -import java.io.*; -import java.nio.file.*; -import java.util.*; -import java.util.jar.*; -import javax.tools.*; - -import com.sun.tools.javac.nio.*; -import com.sun.tools.javac.util.Context; -import java.nio.file.spi.FileSystemProvider; - - -public class CompileTest { - public static void main(String[] args) throws Exception { - new CompileTest().run(); - } - - public void run() throws Exception { - File rtDir = new File("rt.dir"); - File javaHome = new File(System.getProperty("java.home")); - if (javaHome.getName().equals("jre")) - javaHome = javaHome.getParentFile(); - File rtJar = new File(new File(new File(javaHome, "jre"), "lib"), "rt.jar"); - expand(rtJar, rtDir); - - String[] rtDir_opts = { - "-bootclasspath", rtDir.toString(), - "-classpath", "", - "-sourcepath", "", - "-extdirs", "" - }; - test(rtDir_opts, "HelloPathWorld"); - - if (isJarFileSystemAvailable()) { - String[] rtJar_opts = { - "-bootclasspath", rtJar.toString(), - "-classpath", "", - "-sourcepath", "", - "-extdirs", "" - }; - test(rtJar_opts, "HelloPathWorld"); - - String[] default_opts = { }; - test(default_opts, "HelloPathWorld"); - - // finally, a non-trivial program - test(default_opts, "CompileTest"); - } else - System.err.println("jar file system not available: test skipped"); - } - - void test(String[] opts, String className) throws Exception { - count++; - System.err.println("Test " + count + " " + Arrays.asList(opts) + " " + className); - Path testSrcDir = Paths.get(System.getProperty("test.src")); - Path testClassesDir = Paths.get(System.getProperty("test.classes")); - Path classes = Files.createDirectory(Paths.get("classes." + count)); - - Context ctx = new Context(); - PathFileManager fm = new JavacPathFileManager(ctx, true, null); - JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); - List options = new ArrayList(); - options.addAll(Arrays.asList(opts)); - options.addAll(Arrays.asList( - "-verbose", "-XDverboseCompilePolicy", - "-d", classes.toString(), - "-g" - )); - Iterable compilationUnits = - fm.getJavaFileObjects(testSrcDir.resolve(className + ".java")); - StringWriter sw = new StringWriter(); - PrintWriter out = new PrintWriter(sw); - JavaCompiler.CompilationTask t = - compiler.getTask(out, fm, null, options, null, compilationUnits); - boolean ok = t.call(); - System.err.println(sw.toString()); - if (!ok) { - throw new Exception("compilation failed"); - } - - File expect = new File("classes." + count + "/" + className + ".class"); - if (!expect.exists()) - throw new Exception("expected file not found: " + expect); - // Note that we explicitly specify -g for compiling both the actual class and the expected class. - // This isolates the expected class from javac options that might be given to jtreg. - long expectedSize = new File(testClassesDir.toString(), className + ".class").length(); - long actualSize = expect.length(); - if (expectedSize != actualSize) - throw new Exception("wrong size found: " + actualSize + "; expected: " + expectedSize); - } - - boolean isJarFileSystemAvailable() { - boolean result = false; - for (FileSystemProvider fsp: FileSystemProvider.installedProviders()) { - String scheme = fsp.getScheme(); - System.err.println("Provider: " + scheme + " " + fsp); - if (scheme.equalsIgnoreCase("jar") || scheme.equalsIgnoreCase("zip")) - result = true; - } - return result; - } - - void expand(File jar, File dir) throws IOException { - JarFile jarFile = new JarFile(jar); - try { - Enumeration entries = jarFile.entries(); - while (entries.hasMoreElements()) { - JarEntry je = entries.nextElement(); - if (!je.isDirectory()) { - copy(jarFile.getInputStream(je), new File(dir, je.getName())); - } - } - } finally { - jarFile.close(); - } - } - - void copy(InputStream in, File dest) throws IOException { - dest.getParentFile().mkdirs(); - OutputStream out = new BufferedOutputStream(new FileOutputStream(dest)); - try { - byte[] data = new byte[8192]; - int n; - while ((n = in.read(data, 0, data.length)) > 0) - out.write(data, 0, n); - } finally { - out.close(); - in.close(); - } - } - - void error(String message) { - System.err.println("Error: " + message); - errors++; - } - - int errors; - int count; -} diff --git a/langtools/test/tools/javac/nio/compileTest/HelloPathWorld.java b/langtools/test/tools/javac/nio/compileTest/HelloPathWorld.java deleted file mode 100644 index 8e186d4bf45..00000000000 --- a/langtools/test/tools/javac/nio/compileTest/HelloPathWorld.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -class HelloPathWorld { - public static void main(String... args) { - System.out.println("Hello World!"); - } -} diff --git a/langtools/test/tools/javac/processing/model/testgetallmembers/Main.java b/langtools/test/tools/javac/processing/model/testgetallmembers/Main.java index 9629923e9f5..1525294959b 100644 --- a/langtools/test/tools/javac/processing/model/testgetallmembers/Main.java +++ b/langtools/test/tools/javac/processing/model/testgetallmembers/Main.java @@ -59,10 +59,6 @@ public class Main { static Elements elements; public static void main(String[] args) throws Exception { - if (haveAltRt()) { - System.out.println("Warning: alt-rt.jar detected, test skipped"); - return; - } JavaCompiler tool = ToolProvider.getSystemJavaCompiler(); try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) { fm.setLocation(CLASS_PATH, Collections.emptyList()); @@ -126,23 +122,4 @@ public class Main { throw new AssertionError("Too few nested classes in PLATFORM_CLASS_PATH ;-)"); } } - /* - * If -XX:+AggressiveOpts has been used to test, the option currently - * instructs the VM to prepend alt-rt.jar onto the bootclasspath. This - * overrides the default TreeMap implemation in rt.jar causing symbol - * resolution problems (caused by inconsistent inner class), although - * alt-rt.jar is being eliminated, we have this sanity check to detect this - * case and skip the test. - */ - static boolean haveAltRt() { - String bootClassPath = System.getProperty("sun.boot.class.path"); - for (String cp : bootClassPath.split(File.pathSeparator)) { - if (cp.endsWith("alt-rt.jar")) { - System.err.println("Warning: detected alt-rt.jar in " - + "sun.boot.class.path"); - return true; - } - } - return false; - } } diff --git a/langtools/test/tools/javac/processing/options/testPrintProcessorInfo/TestWithXstdout.java b/langtools/test/tools/javac/processing/options/testPrintProcessorInfo/TestWithXstdout.java index e9e60d4a237..60c199dcd77 100644 --- a/langtools/test/tools/javac/processing/options/testPrintProcessorInfo/TestWithXstdout.java +++ b/langtools/test/tools/javac/processing/options/testPrintProcessorInfo/TestWithXstdout.java @@ -56,8 +56,6 @@ public class TestWithXstdout { static void run_javac(String... args) throws IOException, InterruptedException { File javaHome = new File(System.getProperty("java.home")); - if (javaHome.getName().equals("jre")) - javaHome = javaHome.getParentFile(); File javac = new File(new File(javaHome, "bin"), "javac"); List opts = new ArrayList<>(); diff --git a/langtools/test/tools/javac/profiles/ProfileOptionTest.java b/langtools/test/tools/javac/profiles/ProfileOptionTest.java index ab3cdc18128..0f4f4edd7d2 100644 --- a/langtools/test/tools/javac/profiles/ProfileOptionTest.java +++ b/langtools/test/tools/javac/profiles/ProfileOptionTest.java @@ -105,14 +105,18 @@ public class ProfileOptionTest { JavaFileObject fo = new StringJavaFileObject("Test.java", "class Test { }"); for (Target t: Target.values()) { switch (t) { - case JDK1_1: case JDK1_2: // no equivalent -source + case JDK1_1: + case JDK1_2: + case JDK1_3: + case JDK1_4: + case JDK1_5: // not supported continue; } for (Profile p: Profile.values()) { List opts = new ArrayList<>(); opts.addAll(Arrays.asList("-source", t.name, "-target", t.name)); - opts.add("-Xlint:-options"); // dont warn about no -bootclasspath + opts.add("-Xlint:-options"); // don't warn about no -bootclasspath if (p != Profile.DEFAULT) opts.addAll(Arrays.asList("-profile", p.name)); diff --git a/langtools/test/tools/javadoc/6942366/T6942366.java b/langtools/test/tools/javadoc/6942366/T6942366.java index c5199981e66..6246ef372a1 100644 --- a/langtools/test/tools/javadoc/6942366/T6942366.java +++ b/langtools/test/tools/javadoc/6942366/T6942366.java @@ -76,14 +76,6 @@ public class T6942366 { args.add("."); } - // use a very simple bootclasspath to avoid stuff jtreg might have put on path - File javaHome = new File(System.getProperty("java.home")); - File rt_jar = new File(javaHome, "lib/rt.jar"); - if (!rt_jar.exists()) - throw new Exception("rt.jar not found"); - args.add("-bootclasspath"); - args.add(rt_jar.getPath()); - args.add(new File(testSrc, "Test.java").getPath()); System.out.println("javadoc: " + args); diff --git a/langtools/test/tools/javadoc/6964914/TestUserDoclet.java b/langtools/test/tools/javadoc/6964914/TestUserDoclet.java index 00de80db818..3a5e94e5958 100644 --- a/langtools/test/tools/javadoc/6964914/TestUserDoclet.java +++ b/langtools/test/tools/javadoc/6964914/TestUserDoclet.java @@ -47,8 +47,6 @@ public class TestUserDoclet extends Doclet { /** Main test method. */ void run() throws Exception { File javaHome = new File(System.getProperty("java.home")); - if (javaHome.getName().equals("jre")) - javaHome = javaHome.getParentFile(); File javadoc = new File(new File(javaHome, "bin"), "javadoc"); File testSrc = new File(System.getProperty("test.src")); File testClasses = new File(System.getProperty("test.classes")); diff --git a/langtools/test/tools/javadoc/api/basic/GetTask_FileManagerTest.java b/langtools/test/tools/javadoc/api/basic/GetTask_FileManagerTest.java index d5ab604f6ac..d5b34bd15a6 100644 --- a/langtools/test/tools/javadoc/api/basic/GetTask_FileManagerTest.java +++ b/langtools/test/tools/javadoc/api/basic/GetTask_FileManagerTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ * @run main GetTask_FileManagerTest */ +import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.util.Arrays; @@ -36,10 +37,14 @@ import java.util.Set; import javax.tools.DocumentationTool; import javax.tools.DocumentationTool.DocumentationTask; +import javax.tools.FileObject; +import javax.tools.ForwardingJavaFileManager; import javax.tools.JavaFileObject; import javax.tools.JavaFileObject.Kind; +import javax.tools.StandardJavaFileManager; import javax.tools.ToolProvider; +import com.sun.tools.javac.file.JavacFileManager; import com.sun.tools.javac.nio.JavacPathFileManager; import com.sun.tools.javac.nio.PathFileManager; import com.sun.tools.javac.util.Context; @@ -60,11 +65,11 @@ public class GetTask_FileManagerTest extends APITest { public void testFileManager() throws Exception { JavaFileObject srcFile = createSimpleJavaFileObject(); DocumentationTool tool = ToolProvider.getSystemDocumentationTool(); - PathFileManager fm = new JavacPathFileManager(new Context(), false, null); - Path outDir = getOutDir().toPath(); + StandardJavaFileManager fm = new TestFileManager(); + File outDir = getOutDir(); fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir)); Iterable files = Arrays.asList(srcFile); - DocumentationTask t = tool.getTask(null, fm, null, null, null, files); + DocumentationTask t = tool.getTask(null, fm, null, null, Arrays.asList("-verbose"), files); if (t.call()) { System.err.println("task succeeded"); checkFiles(outDir, standardExpectFiles); @@ -80,7 +85,7 @@ public class GetTask_FileManagerTest extends APITest { public void testBadFileManager() throws Exception { JavaFileObject srcFile = createSimpleJavaFileObject(); DocumentationTool tool = ToolProvider.getSystemDocumentationTool(); - PathFileManager fm = new JavacPathFileManager(new Context(), false, null) { + StandardJavaFileManager fm = new TestFileManager() { @Override public Iterable list(Location location, String packageName, @@ -90,8 +95,7 @@ public class GetTask_FileManagerTest extends APITest { throw new UnexpectedError(); } }; - Path outDir = getOutDir().toPath(); - fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(outDir)); + fm.setLocation(DocumentationTool.Location.DOCUMENTATION_OUTPUT, Arrays.asList(getOutDir())); Iterable files = Arrays.asList(srcFile); DocumentationTask t = tool.getTask(null, fm, null, null, null, files); try { @@ -108,4 +112,45 @@ public class GetTask_FileManagerTest extends APITest { public static class UnexpectedError extends Error { } + /* + * A JavaFileManager which is not a JavacFileManager, even though it uses one internally for + * convenience. + */ + static class TestFileManager extends ForwardingJavaFileManager + implements StandardJavaFileManager { + TestFileManager() { + super(new JavacFileManager(new Context(), false, null)); + } + + @Override + public Iterable getJavaFileObjectsFromFiles(Iterable files) { + return fileManager.getJavaFileObjectsFromFiles(files); + } + + @Override + public Iterable getJavaFileObjects(File... files) { + return fileManager.getJavaFileObjects(files); + } + + @Override + public Iterable getJavaFileObjectsFromStrings(Iterable names) { + return fileManager.getJavaFileObjectsFromStrings(names); + } + + @Override + public Iterable getJavaFileObjects(String... names) { + return fileManager.getJavaFileObjects(names); + } + + @Override + public void setLocation(Location location, Iterable path) throws IOException { + fileManager.setLocation(location, path); + } + + @Override + public Iterable getLocation(Location location) { + return fileManager.getLocation(location); + } + + } } diff --git a/langtools/test/tools/javah/T5070898.java b/langtools/test/tools/javah/T5070898.java index 669960b3c27..12bea9cfdf5 100644 --- a/langtools/test/tools/javah/T5070898.java +++ b/langtools/test/tools/javah/T5070898.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -73,14 +73,8 @@ public class T5070898 int runJavah() throws Exception { List cmd = new ArrayList(); File java_home = new File(System.getProperty("java.home")); - if (java_home.getName().equals("jre")) - java_home = java_home.getParentFile(); cmd.add(new File(new File(java_home, "bin"), "javah").getPath()); - // ensure we run with the same bootclasspath as this test, - // in case this test is being run with -Xbootclasspath - cmd.add("-J-Xbootclasspath:" + System.getProperty("sun.boot.class.path")); - cmd.add("JavahTest"); ProcessBuilder pb = new ProcessBuilder(cmd); diff --git a/langtools/test/tools/javah/T6893943.java b/langtools/test/tools/javah/T6893943.java index a63858f69eb..bf2944fb877 100644 --- a/langtools/test/tools/javah/T6893943.java +++ b/langtools/test/tools/javah/T6893943.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -58,12 +58,8 @@ public class T6893943 { void testCommand(String[] args, int expect_rc) throws Exception { System.err.println("Test command: " + Arrays.asList(args)); File javaHome = new File(System.getProperty("java.home")); - if (javaHome.getName().equals("jre")) - javaHome = javaHome.getParentFile(); - List command = new ArrayList(); command.add(new File(new File(javaHome, "bin"), "javah").getPath()); - command.add("-J-Xbootclasspath:" + System.getProperty("sun.boot.class.path")); command.addAll(Arrays.asList(args)); //System.err.println("command: " + command); diff --git a/langtools/test/tools/javah/compareTest/CompareTest.java b/langtools/test/tools/javah/compareTest/CompareTest.java deleted file mode 100644 index 9d1884e8ad7..00000000000 --- a/langtools/test/tools/javah/compareTest/CompareTest.java +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import java.io.DataInputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Enumeration; -import java.util.List; -import java.util.Set; -import java.util.TreeSet; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; - -import com.sun.tools.classfile.AccessFlags; -import com.sun.tools.classfile.ClassFile; -import com.sun.tools.classfile.ConstantPoolException; -import com.sun.tools.classfile.Method; -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.InputStreamReader; -import java.util.LinkedHashSet; - -public class CompareTest { - String[][] testCases = { - { }, - { "-jni" }, -// { "-llni" }, - }; - - public static void main(String... args) throws Exception { - new CompareTest().run(args); - } - - public void run(String... args) throws Exception { - old_javah_cmd = new File(args[0]); - rt_jar = new File(args[1]); - - Set testClasses; - if (args.length > 2) { - testClasses = new LinkedHashSet(Arrays.asList(Arrays.copyOfRange(args, 2, args.length))); - } else - testClasses = getNativeClasses(new JarFile(rt_jar)); - - for (String[] options: testCases) { - for (String name: testClasses) { - test(Arrays.asList(options), rt_jar, name); - } - } - - if (errors == 0) - System.out.println(count + " tests passed"); - else - throw new Exception(errors + "/" + count + " tests failed"); - } - - public void test(List options, File bootclasspath, String className) - throws IOException, InterruptedException { - System.err.println("test: " + options + " " + className); - count++; - - testOptions = options; - testClassName = className; - - File oldOutDir = initDir(file(new File("old"), className)); - int old_rc = old_javah(options, oldOutDir, bootclasspath, className); - - File newOutDir = initDir(file(new File("new"), className)); - int new_rc = new_javah(options, newOutDir, bootclasspath, className); - - if (old_rc != new_rc) - error("return codes differ; old: " + old_rc + ", new: " + new_rc); - - compare(oldOutDir, newOutDir); - } - - int old_javah(List options, File outDir, File bootclasspath, String className) - throws IOException, InterruptedException { - List cmd = new ArrayList(); - cmd.add(old_javah_cmd.getPath()); - cmd.addAll(options); - cmd.add("-d"); - cmd.add(outDir.getPath()); - cmd.add("-bootclasspath"); - cmd.add(bootclasspath.getPath()); - cmd.add(className); - System.err.println("old_javah: " + cmd); - ProcessBuilder pb = new ProcessBuilder(cmd); - pb.redirectErrorStream(true); - Process p = pb.start(); - BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); - String line; - StringBuilder sb = new StringBuilder(); - while ((line = in.readLine()) != null) { - sb.append(line); - sb.append("\n"); - } - System.err.println("old javah out: " + sb.toString()); - return p.waitFor(); - } - - int new_javah(List options, File outDir, File bootclasspath, String className) { - List args = new ArrayList(); - args.addAll(options); - args.add("-d"); - args.add(outDir.getPath()); - args.add("-bootclasspath"); - args.add(bootclasspath.getPath()); - args.add(className); - StringWriter sw = new StringWriter(); - PrintWriter pw = new PrintWriter(sw); - int rc = com.sun.tools.javah.Main.run(args.toArray(new String[args.size()]), pw); - pw.close(); - System.err.println("new javah out: " + sw.toString()); - return rc; - } - - Set getNativeClasses(JarFile jar) throws IOException, ConstantPoolException { - System.err.println("getNativeClasses: " + jar.getName()); - Set results = new TreeSet(); - Enumeration e = jar.entries(); - while (e.hasMoreElements()) { - JarEntry je = e.nextElement(); - if (isNativeClass(jar, je)) { - String name = je.getName(); - results.add(name.substring(0, name.length() - 6).replace("/", ".")); - } - } - return results; - } - - boolean isNativeClass(JarFile jar, JarEntry entry) throws IOException, ConstantPoolException { - String name = entry.getName(); - if (name.startsWith("META-INF") || !name.endsWith(".class")) - return false; - //String className = name.substring(0, name.length() - 6).replace("/", "."); - //System.err.println("check " + className); - InputStream in = jar.getInputStream(entry); - ClassFile cf = ClassFile.read(in); - for (int i = 0; i < cf.methods.length; i++) { - Method m = cf.methods[i]; - if (m.access_flags.is(AccessFlags.ACC_NATIVE)) { - // System.err.println(className); - return true; - } - } - return false; - } - - void compare(File f1, File f2) throws IOException { - if (f1.isFile() && f2.isFile()) - compareFiles(f1, f2); - else if (f1.isDirectory() && f2.isDirectory()) - compareDirectories(f1, f2); - else - error("files differ: " - + f1 + " (" + getFileType(f1) + "), " - + f2 + " (" + getFileType(f2) + ")"); - } - - void compareDirectories(File d1, File d2) throws IOException { - Set list = new TreeSet(); - list.addAll(Arrays.asList(d1.list())); - list.addAll(Arrays.asList(d2.list())); - for (String c: list) - compare(new File(d1, c), new File(d2, c)); - } - - void compareFiles(File f1, File f2) throws IOException { - byte[] c1 = readFile(f1); - byte[] c2 = readFile(f2); - if (!Arrays.equals(c1, c2)) - error("files differ: " + f1 + ", " + f2); - } - - byte[] readFile(File file) throws IOException { - int size = (int) file.length(); - byte[] data = new byte[size]; - DataInputStream in = new DataInputStream(new FileInputStream(file)); - try { - in.readFully(data); - } finally { - in.close(); - } - return data; - } - - String getFileType(File f) { - return f.isDirectory() ? "directory" - : f.isFile() ? "file" - : f.exists() ? "other" - : "not found"; - } - - /** - * Set up an empty directory. - */ - public File initDir(File dir) { - if (dir.exists()) - deleteAll(dir); - dir.mkdirs(); - return dir; - } - - /** - * Delete a file or a directory (including all its contents). - */ - boolean deleteAll(File file) { - if (file.isDirectory()) { - for (File f: file.listFiles()) - deleteAll(f); - } - return file.delete(); - } - - File file(File dir, String... path) { - File f = dir; - for (String p: path) - f = new File(f, p); - return f; - } - - /** - * Report an error. - */ - void error(String msg, String... more) { - System.err.println("test: " + testOptions + " " + testClassName); - System.err.println("error: " + msg); - for (String s: more) - System.err.println(s); - errors++; - System.exit(1); - } - - File old_javah_cmd; - File rt_jar; - List testOptions; - String testClassName; - int count; - int errors; -} diff --git a/langtools/test/tools/javah/compareTest/FindNativeFiles.java b/langtools/test/tools/javah/compareTest/FindNativeFiles.java deleted file mode 100644 index 92002d06421..00000000000 --- a/langtools/test/tools/javah/compareTest/FindNativeFiles.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2009, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -import java.io.IOException; -import java.io.InputStream; -import java.util.Enumeration; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; - -import com.sun.tools.classfile.AccessFlags; -import com.sun.tools.classfile.ClassFile; -import com.sun.tools.classfile.ConstantPoolException; -import com.sun.tools.classfile.Method; -import java.util.Comparator; -import java.util.Set; -import java.util.TreeSet; - -public class FindNativeFiles { - public static void main(String[] args) throws IOException, ConstantPoolException { - new FindNativeFiles().run(args); - } - - public void run(String[] args) throws IOException, ConstantPoolException { - JarFile jar = new JarFile(args[0]); - Set entries = getNativeClasses(jar); - for (JarEntry e: entries) { - String name = e.getName(); - String className = name.substring(0, name.length() - 6).replace("/", "."); - System.out.println(className); - } - } - - Set getNativeClasses(JarFile jar) throws IOException, ConstantPoolException { - Set results = new TreeSet(new Comparator() { - public int compare(JarEntry o1, JarEntry o2) { - return o1.getName().compareTo(o2.getName()); - } - }); - Enumeration e = jar.entries(); - while (e.hasMoreElements()) { - JarEntry je = e.nextElement(); - if (isNativeClass(jar, je)) - results.add(je); - } - return results; - } - - boolean isNativeClass(JarFile jar, JarEntry entry) throws IOException, ConstantPoolException { - String name = entry.getName(); - if (name.startsWith("META-INF") || !name.endsWith(".class")) - return false; - //String className = name.substring(0, name.length() - 6).replace("/", "."); - //System.err.println("check " + className); - InputStream in = jar.getInputStream(entry); - ClassFile cf = ClassFile.read(in); - in.close(); - for (int i = 0; i < cf.methods.length; i++) { - Method m = cf.methods[i]; - if (m.access_flags.is(AccessFlags.ACC_NATIVE)) { - // System.err.println(className); - return true; - } - } - return false; - } -} diff --git a/langtools/test/tools/javah/compareTest/README b/langtools/test/tools/javah/compareTest/README deleted file mode 100644 index e0f19c55537..00000000000 --- a/langtools/test/tools/javah/compareTest/README +++ /dev/null @@ -1,16 +0,0 @@ -test/tools/javah/compareTest/README - -This directory contains a program for comparing the output of new javah against the -output of JDK 6 or other older versions of javah. - -It cannot be run automatically because of the need for the older version of javah -to compare against. - -The test works by scanning a jar file, such as rt.jar, looking for all files with -native methods. It then runs both the old and new versions of javah on those -classes with native methods, and verifies that the results are character-for-character -identical. - -To run the test, build langtools, then execute the script in the root langtools -directory, providing the location of the JDK to be tested. The default is -/opt/jdk/1.6.0. diff --git a/langtools/test/tools/javap/T6729471.java b/langtools/test/tools/javap/T6729471.java index 5fdb368885b..d7384b25865 100644 --- a/langtools/test/tools/javap/T6729471.java +++ b/langtools/test/tools/javap/T6729471.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,19 +26,23 @@ * @test * @bug 6729471 * @summary javap does not output inner interfaces of an interface + * @library /tools/lib + * @build ToolBox + * @run main T6729471 */ import java.io.*; import java.net.*; import java.util.*; +import javax.tools.*; public class T6729471 { - public static void main(String... args) { + public static void main(String... args) throws IOException { new T6729471().run(); } - void run() { + void run() throws IOException { File testClasses = new File(System.getProperty("test.classes")); // simple class @@ -57,34 +61,31 @@ public class T6729471 verify(new File(testClasses, "T6729471.class").toURI().toString(), "public static void main(java.lang.String...)"); - // jar url: rt.jar - File java_home = new File(System.getProperty("java.home")); - if (java_home.getName().equals("jre")) - java_home = java_home.getParentFile(); - File rt_jar = new File(new File(new File(java_home, "jre"), "lib"), "rt.jar"); + // jar url + File testJar = createJar("test.jar", "java.util.*"); try { - verify("jar:" + rt_jar.toURL() + "!/java/util/Map.class", + verify("jar:" + testJar.toURL() + "!/java/util/Map.class", "public abstract boolean containsKey(java.lang.Object)"); } catch (MalformedURLException e) { error(e.toString()); } - // jar url: ct.sym, if it exists - File ct_sym = new File(new File(java_home, "lib"), "ct.sym"); - if (ct_sym.exists()) { - try { - verify("jar:" + ct_sym.toURL() + "!/META-INF/sym/rt.jar/java/util/Map.class", - "public abstract boolean containsKey(java.lang.Object)"); - } catch (MalformedURLException e) { - error(e.toString()); - } - } else - System.err.println("warning: ct.sym not found"); - if (errors > 0) throw new Error(errors + " found."); } + File createJar(String name, String... paths) throws IOException { + JavaCompiler comp = ToolProvider.getSystemJavaCompiler(); + try (JavaFileManager fm = comp.getStandardFileManager(null, null, null)) { + File f = new File(name); + ToolBox tb = new ToolBox(); + tb.new JarTask(f.getPath()) + .files(fm, StandardLocation.PLATFORM_CLASS_PATH, paths) + .run(); + return f; + } + } + void verify(String className, String... expects) { String output = javap(className); for (String expect: expects) { diff --git a/langtools/test/tools/javap/WhitespaceTest.java b/langtools/test/tools/javap/WhitespaceTest.java index 3c9933a33e2..b52da9b9019 100644 --- a/langtools/test/tools/javap/WhitespaceTest.java +++ b/langtools/test/tools/javap/WhitespaceTest.java @@ -57,8 +57,11 @@ public class WhitespaceTest { if (line.endsWith(" ")) error("line has trailing whitespace: " + line); int comment = line.indexOf(doubleSlash); - if (comment > 0 && line.charAt(comment - 1) != ' ') - error("no space before comment: " + line); + if (comment > 0 && line.charAt(comment - 1) != ' ') { + // make allowance for URLs + if (!line.matches(".*\\bfile:/{3}.*")) + error("no space before comment: " + line); + } if (line.matches(" +}")) error("bad indentation: " + line); } diff --git a/langtools/test/tools/jdeps/APIDeps.java b/langtools/test/tools/jdeps/APIDeps.java index c3d2c9977f7..528f3d800eb 100644 --- a/langtools/test/tools/jdeps/APIDeps.java +++ b/langtools/test/tools/jdeps/APIDeps.java @@ -39,27 +39,6 @@ import java.util.*; import java.util.regex.*; public class APIDeps { - private static boolean symbolFileExist = initProfiles(); - private static boolean initProfiles() { - // check if ct.sym exists; if not use the profiles.properties file - Path home = Paths.get(System.getProperty("java.home")); - if (home.endsWith("jre")) { - home = home.getParent(); - } - Path ctsym = home.resolve("lib").resolve("ct.sym"); - boolean symbolExists = ctsym.toFile().exists(); - if (!symbolExists) { - Path testSrcProfiles = - Paths.get(System.getProperty("test.src", "."), "profiles.properties"); - if (!testSrcProfiles.toFile().exists()) - throw new Error(testSrcProfiles + " does not exist"); - System.out.format("%s doesn't exist.%nUse %s to initialize profiles info%n", - ctsym, testSrcProfiles); - System.setProperty("jdeps.profiles", testSrcProfiles.toString()); - } - return symbolExists; - } - public static void main(String... args) throws Exception { int errors = 0; errors += new APIDeps().run(); diff --git a/langtools/test/tools/jdeps/Basic.java b/langtools/test/tools/jdeps/Basic.java index 046a047fcc6..a1bfdd4ea31 100644 --- a/langtools/test/tools/jdeps/Basic.java +++ b/langtools/test/tools/jdeps/Basic.java @@ -41,27 +41,6 @@ import java.util.regex.*; import static java.nio.file.StandardCopyOption.*; public class Basic { - private static boolean symbolFileExist = initProfiles(); - private static boolean initProfiles() { - // check if ct.sym exists; if not use the profiles.properties file - Path home = Paths.get(System.getProperty("java.home")); - if (home.endsWith("jre")) { - home = home.getParent(); - } - Path ctsym = home.resolve("lib").resolve("ct.sym"); - boolean symbolExists = ctsym.toFile().exists(); - if (!symbolExists) { - Path testSrcProfiles = - Paths.get(System.getProperty("test.src", "."), "profiles.properties"); - if (!testSrcProfiles.toFile().exists()) - throw new Error(testSrcProfiles + " does not exist"); - System.out.format("%s doesn't exist.%nUse %s to initialize profiles info%n", - ctsym, testSrcProfiles); - System.setProperty("jdeps.profiles", testSrcProfiles.toString()); - } - return symbolExists; - } - public static void main(String... args) throws Exception { int errors = 0; errors += new Basic().run(); diff --git a/langtools/test/tools/jdeps/DotFileTest.java b/langtools/test/tools/jdeps/DotFileTest.java index 46fe5003ec0..cdcc666d8e5 100644 --- a/langtools/test/tools/jdeps/DotFileTest.java +++ b/langtools/test/tools/jdeps/DotFileTest.java @@ -41,27 +41,6 @@ import java.util.*; import java.util.regex.*; public class DotFileTest { - private static boolean symbolFileExist = initProfiles(); - private static boolean initProfiles() { - // check if ct.sym exists; if not use the profiles.properties file - Path home = Paths.get(System.getProperty("java.home")); - if (home.endsWith("jre")) { - home = home.getParent(); - } - Path ctsym = home.resolve("lib").resolve("ct.sym"); - boolean symbolExists = ctsym.toFile().exists(); - if (!symbolExists) { - Path testSrcProfiles = - Paths.get(System.getProperty("test.src", "."), "profiles.properties"); - if (!testSrcProfiles.toFile().exists()) - throw new Error(testSrcProfiles + " does not exist"); - System.out.format("%s doesn't exist.%nUse %s to initialize profiles info%n", - ctsym, testSrcProfiles); - System.setProperty("jdeps.profiles", testSrcProfiles.toString()); - } - return symbolExists; - } - public static void main(String... args) throws Exception { int errors = 0; errors += new DotFileTest().run(); diff --git a/langtools/test/tools/jdeps/profiles.properties b/langtools/test/tools/jdeps/profiles.properties deleted file mode 100644 index f00bb4a5e39..00000000000 --- a/langtools/test/tools/jdeps/profiles.properties +++ /dev/null @@ -1,263 +0,0 @@ -# This properties file is used for testing a JDK development build. -# No need to keep this properties file up to date as long as it covers -# the APIs used by the jdeps regression test. -profile.1.name = compact1 -profile.1.packages = \ - java.io \ - java.lang \ - java.lang.annotation \ - java.lang.invoke \ - java.lang.ref \ - java.lang.reflect \ - java.math \ - java.net \ - java.nio \ - java.nio.channels \ - java.nio.channels.spi \ - java.nio.charset \ - java.nio.charset.spi \ - java.nio.file \ - java.nio.file.attribute \ - java.nio.file.spi \ - java.security \ - java.security.cert \ - java.security.interfaces \ - java.security.spec \ - java.text \ - java.text.spi \ - java.util \ - java.util.concurrent \ - java.util.concurrent.atomic \ - java.util.concurrent.locks \ - java.util.jar \ - java.util.logging \ - java.util.regex \ - java.util.spi \ - java.util.zip \ - javax.crypto \ - javax.crypto.interfaces \ - javax.crypto.spec \ - javax.security.auth \ - javax.security.auth.callback \ - javax.security.auth.login \ - javax.security.auth.spi \ - javax.security.auth.x500 \ - javax.net \ - javax.net.ssl \ - javax.security.cert \ - \ - com.sun.net.ssl \ - com.sun.nio.file \ - com.sun.nio.sctp \ - com.sun.security.auth \ - com.sun.security.auth.login - -profile.2.name = compact2 -profile.2.packages = \ - java.sql \ - javax.sql \ - javax.xml \ - javax.xml.datatype \ - javax.xml.namespace \ - javax.xml.parsers \ - javax.xml.stream \ - javax.xml.stream.events \ - javax.xml.stream.util \ - javax.xml.transform \ - javax.xml.transform.dom \ - javax.xml.transform.sax \ - javax.xml.transform.stax \ - javax.xml.transform.stream \ - javax.xml.validation \ - javax.xml.xpath \ - org.w3c.dom \ - org.w3c.dom.bootstrap \ - org.w3c.dom.events \ - org.w3c.dom.ls \ - org.xml.sax \ - org.xml.sax.ext \ - org.xml.sax.helpers \ - java.rmi \ - java.rmi.activation \ - java.rmi.dgc \ - java.rmi.registry \ - java.rmi.server \ - javax.rmi.ssl \ - javax.transaction \ - javax.transaction.xa \ - \ - com.sun.net.httpserver \ - com.sun.net.httpserver.spi - -profile.3.name = compact3 -profile.3.packages = \ - java.lang.instrument \ - java.lang.management \ - java.security.acl \ - java.util.prefs \ - javax.management \ - javax.management.loading \ - javax.management.modelmbean \ - javax.management.monitor \ - javax.management.openmbean \ - javax.management.relation \ - javax.management.remote \ - javax.management.remote.rmi \ - javax.management.timer \ - javax.naming \ - javax.naming.directory \ - javax.naming.event \ - javax.naming.ldap \ - javax.naming.spi \ - javax.sql.rowset \ - javax.sql.rowset.serial \ - javax.sql.rowset.spi \ - javax.security.auth.kerberos \ - javax.security.sasl \ - javax.script \ - javax.smartcardio \ - javax.xml.crypto \ - javax.xml.crypto.dom \ - javax.xml.crypto.dsig \ - javax.xml.crypto.dsig.dom \ - javax.xml.crypto.dsig.keyinfo \ - javax.xml.crypto.dsig.spec \ - javax.annotation.processing \ - javax.lang.model \ - javax.lang.model.element \ - javax.lang.model.type \ - javax.lang.model.util \ - javax.tools \ - javax.tools.annotation \ - org.ietf.jgss \ - \ - com.sun.management \ - com.sun.security.auth.callback \ - com.sun.security.auth.module \ - com.sun.security.jgss - -profile.4.name = Full JRE -profile.4.packages = \ - java.applet \ - java.awt \ - java.awt.color \ - java.awt.datatransfer \ - java.awt.dnd \ - java.awt.dnd.peer \ - java.awt.event \ - java.awt.font \ - java.awt.geom \ - java.awt.im \ - java.awt.im.spi \ - java.awt.image \ - java.awt.image.renderable \ - java.awt.peer \ - java.awt.print \ - java.beans \ - java.beans.beancontext \ - javax.accessibility \ - javax.imageio \ - javax.imageio.event \ - javax.imageio.metadata \ - javax.imageio.plugins.bmp \ - javax.imageio.plugins.jpeg \ - javax.imageio.spi \ - javax.imageio.stream \ - javax.print \ - javax.print.attribute \ - javax.print.attribute.standard \ - javax.print.event \ - javax.sound.midi \ - javax.sound.midi.spi \ - javax.sound.sampled \ - javax.sound.sampled.spi \ - javax.swing \ - javax.swing.border \ - javax.swing.colorchooser \ - javax.swing.event \ - javax.swing.filechooser \ - javax.swing.plaf \ - javax.swing.plaf.basic \ - javax.swing.plaf.metal \ - javax.swing.plaf.multi \ - javax.swing.plaf.nimbus \ - javax.swing.plaf.synth \ - javax.swing.table \ - javax.swing.text \ - javax.swing.text.html \ - javax.swing.text.html.parser \ - javax.swing.text.rtf \ - javax.swing.tree \ - javax.swing.undo \ - javax.activation \ - javax.jws \ - javax.jws.soap \ - javax.rmi \ - javax.rmi.CORBA \ - javax.xml.bind \ - javax.xml.bind.annotation \ - javax.xml.bind.annotation.adapters \ - javax.xml.bind.attachment \ - javax.xml.bind.helpers \ - javax.xml.bind.util \ - javax.xml.soap \ - javax.xml.ws \ - javax.xml.ws.handler \ - javax.xml.ws.handler.soap \ - javax.xml.ws.http \ - javax.xml.ws.soap \ - javax.xml.ws.spi \ - javax.xml.ws.spi.http \ - javax.xml.ws.wsaddressing \ - javax.annotation \ - org.omg.CORBA \ - org.omg.CORBA.DynAnyPackage \ - org.omg.CORBA.ORBPackage \ - org.omg.CORBA.TypeCodePackage \ - org.omg.CORBA.portable \ - org.omg.CORBA_2_3 \ - org.omg.CORBA_2_3.portable \ - org.omg.CosNaming \ - org.omg.CosNaming.NamingContextExtPackage \ - org.omg.CosNaming.NamingContextPackage \ - org.omg.Dynamic \ - org.omg.DynamicAny \ - org.omg.DynamicAny.DynAnyFactoryPackage \ - org.omg.DynamicAny.DynAnyPackage \ - org.omg.IOP \ - org.omg.IOP.CodecFactoryPackage \ - org.omg.IOP.CodecPackage \ - org.omg.Messaging \ - org.omg.PortableInterceptor \ - org.omg.PortableInterceptor.ORBInitInfoPackage \ - org.omg.PortableServer \ - org.omg.PortableServer.CurrentPackage \ - org.omg.PortableServer.POAManagerPackage \ - org.omg.PortableServer.POAPackage \ - org.omg.PortableServer.ServantLocatorPackage \ - org.omg.PortableServer.portable \ - org.omg.SendingContext \ - org.omg.stub.java.rmi \ - org.omg.stub.javax.management.remote.rmi - -# Remaining JDK supported API -profile.5.name = JDK tools -profile.5.packages = \ - com.sun.jdi \ - com.sun.jdi.connect \ - com.sun.jdi.connect.spi \ - com.sun.jdi.event \ - com.sun.jdi.request \ - com.sun.javadoc \ - com.sun.tools.doclets \ - com.sun.tools.doctree \ - com.sun.source.tree \ - com.sun.source.util \ - com.sun.tools.attach \ - com.sun.tools.attach.spi \ - com.sun.tools.jconsole \ - com.sun.tools.javac \ - com.sun.tools.javah \ - com.sun.tools.javap \ - com.sun.tools.javadoc \ - com.sun.servicetag diff --git a/langtools/test/tools/lib/ToolBox.java b/langtools/test/tools/lib/ToolBox.java index 859765b2db1..a62ff1bc1a0 100644 --- a/langtools/test/tools/lib/ToolBox.java +++ b/langtools/test/tools/lib/ToolBox.java @@ -1546,31 +1546,31 @@ public class ToolBox { } private void writeFiles(JarOutputStream jos) throws IOException { - Path base = (baseDir == null) ? currDir : baseDir; - for (Path path : paths) { - Files.walkFileTree(base.resolve(path), new SimpleFileVisitor() { - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { - try { + Path base = (baseDir == null) ? currDir : baseDir; + for (Path path : paths) { + Files.walkFileTree(base.resolve(path), new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { + try { String p = base.relativize(file) .normalize() .toString() .replace(File.separatorChar, '/'); JarEntry e = new JarEntry(p); - jos.putNextEntry(e); + jos.putNextEntry(e); try { jos.write(Files.readAllBytes(file)); } finally { jos.closeEntry(); } - return FileVisitResult.CONTINUE; - } catch (IOException e) { + return FileVisitResult.CONTINUE; + } catch (IOException e) { error("Exception while adding " + file + " to jar file", e); - return FileVisitResult.TERMINATE; + return FileVisitResult.TERMINATE; + } } - } - }); - } + }); + } } private void writeFileObjects(JarOutputStream jos) throws IOException { @@ -1587,9 +1587,9 @@ public class ToolBox { } catch (IOException ex) { error("Exception while adding " + fo.getName() + " to jar file", ex); } - } finally { + } finally { jos.closeEntry(); - } + } } } @@ -1599,17 +1599,30 @@ public class ToolBox { */ private final Pattern jarEntry = Pattern.compile(".*!/(?:META-INF/sym/[^/]+/)?(.*)"); + /* + * A jrt: URL is of the form jrt:/module/package/file + */ + private final Pattern jrtEntry = Pattern.compile("/([^/]+)/(.*)"); + private String guessPath(FileObject fo) { URI u = fo.toUri(); switch (u.getScheme()) { - case "jar": + case "jar": { Matcher m = jarEntry.matcher(u.getSchemeSpecificPart()); if (m.matches()) { return m.group(1); } break; + } + case "jrt": { + Matcher m = jrtEntry.matcher(u.getSchemeSpecificPart()); + if (m.matches()) { + return m.group(2); + } + break; + } } - throw new IllegalArgumentException(fo.getName()); + throw new IllegalArgumentException(fo.getName() + "--" + fo.toUri()); } private void error(String message, Throwable t) { diff --git a/langtools/test/tools/sjavac/OptionDecoding.java b/langtools/test/tools/sjavac/OptionDecoding.java index 7d82ec69186..cfd733e51f5 100644 --- a/langtools/test/tools/sjavac/OptionDecoding.java +++ b/langtools/test/tools/sjavac/OptionDecoding.java @@ -35,6 +35,7 @@ import static util.OptionTestUtil.assertEquals; import static util.OptionTestUtil.checkFilesFound; +import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -218,20 +219,20 @@ public class OptionDecoding { // Test input paths static void testSearchPaths() { - List i, x, iF, xF; i = x = iF = xF = new ArrayList<>(); SourceLocation dir1 = new SourceLocation(Paths.get("dir1"), i, x, iF, xF); SourceLocation dir2 = new SourceLocation(Paths.get("dir2"), i, x, iF, xF); + String dir1_PS_dir2 = "dir1" + File.pathSeparator + "dir2"; - Options options = Options.parseArgs("-sourcepath", "dir1:dir2"); + Options options = Options.parseArgs("-sourcepath", dir1_PS_dir2); assertEquals(options.getSourceSearchPaths(), Arrays.asList(dir1, dir2)); - options = Options.parseArgs("-modulepath", "dir1:dir2"); + options = Options.parseArgs("-modulepath", dir1_PS_dir2); assertEquals(options.getModuleSearchPaths(), Arrays.asList(dir1, dir2)); - options = Options.parseArgs("-classpath", "dir1:dir2"); + options = Options.parseArgs("-classpath", dir1_PS_dir2); assertEquals(options.getClassSearchPath(), Arrays.asList(dir1, dir2)); }