# HG changeset patch # User duke # Date 1499290539 -7200 # Node ID f593383efdde7db203efaf9f210a3b259d9e1c36 # Parent 3d88a6f51b8dbc35436fca849d5ac8ec875e5dbd# Parent 4bc3aabebb15adf817ff4783c542f5147372e979 Merge diff -r 3d88a6f51b8d -r f593383efdde .hgtags-top-repo --- a/.hgtags-top-repo Sat Jun 03 02:44:26 2017 +0000 +++ b/.hgtags-top-repo Wed Jul 05 23:35:39 2017 +0200 @@ -424,3 +424,5 @@ df33ef1dc163f994177fd97d4d0e73a1e3cb5d85 jdk-10+8 b94be69cbb1d2943b886bf2d458745756df146e4 jdk-10+9 4c12464a907db4656c1033f56fa49cba643ac629 jdk-9+171 +6558c37afe832582238d338578d598f30c6fdd75 jdk-10+10 +2c25fc24103251f9711a1c280c31e1e41016d90f jdk-9+172 diff -r 3d88a6f51b8d -r f593383efdde make/Docs.gmk --- a/make/Docs.gmk Sat Jun 03 02:44:26 2017 +0000 +++ b/make/Docs.gmk Wed Jul 05 23:35:39 2017 +0200 @@ -36,11 +36,23 @@ $(eval $(call ReadImportMetaData)) ################################################################################ - # Hook to include the corresponding custom file, if present. $(eval $(call IncludeCustomExtension, , Docs.gmk)) ################################################################################ +# This file generates all documentation for OpenJDK. +# +# We will generate API documentation for two different selections of the source +# code: "Java SE", which contains just the modules covered by the top-level +# module java.se.ee, and "JDK", which covers all of Java SE and also all +# other available modules that should be documented, including imported modules, +# if any. +# +# We will also generate separate, free-standing specifications from either +# markdown or existing html files. +# + +################################################################################ # Javadoc settings # On top of the sources that was used to compile the JDK, we need some @@ -106,6 +118,8 @@ FULL_COMPANY_NAME := Oracle and/or its affiliates COMPANY_ADDRESS := 500 Oracle Parkway
Redwood Shores, CA 94065 USA +JAVA_PLATFORM := Java™ Platform + ifeq ($(IS_DRAFT), true) DRAFT_MARKER_STR :=
DRAFT $(VERSION_STRING) ifeq ($(VERSION_BUILD), 0) @@ -113,15 +127,12 @@ else DRAFT_MARKER_TITLE := [build $(VERSION_BUILD)] endif + DRAFT_TEXT := Please note that the specifications and other information \ + contained herein are not final and are subject to change. The \ + information is being made available to you solely for purpose of \ + evaluation. endif -JAVADOC_WINDOW_TITLE := Java Platform SE $(VERSION_SPECIFICATION) \ - $(DRAFT_MARKER_TITLE) - -JAVADOC_HEADER_TITLE := $(subst $(SPACE), ,$(strip \ - Java™ Platform
Standard Ed. \ - $(VERSION_SPECIFICATION)
$(DRAFT_MARKER_STR))) - JAVADOC_BOTTOM := \ \ Submit a bug or feature
\ @@ -143,27 +154,24 @@
Please note that the specifications \ - and other information contained herein are not final and are subject to \ - change. The information is being made available to you solely for \ - purpose of evaluation.
+ sans-serif; font-weight: normal;">$(DRAFT_TEXT) ################################################################################ # JDK javadoc titles/text snippets -JDK_JAVADOC_DOC_TITLE := Java™ Platform, Standard Edition Development Kit \ - (JDK™) $(VERSION_SPECIFICATION)
API Specification +JDK_SHORT_NAME := JDK™ $(VERSION_SPECIFICATION) +JDK_LONG_NAME := Standard Edition Development Kit (JDK™) $(VERSION_SPECIFICATION) ################################################################################ # Java SE javadoc titles/text snippets -JAVASE_JAVADOC_DOC_TITLE := Java™ Platform, Standard Edition \ - $(VERSION_SPECIFICATION)
API Specification +JAVASE_SHORT_NAME := SE $(VERSION_SPECIFICATION) +JAVASE_LONG_NAME := Standard Edition $(VERSION_SPECIFICATION) ################################################################################ +# Index page text titles/snippets -JDK_INDEX_TITLE := Java™ Platform, Standard Edition Development Kit \ - (JDK™) $(VERSION_SPECIFICATION) Specification
$(DRAFT_MARKER_TITLE) +JDK_INDEX_TITLE := $(JAVA_PLATFORM), $(JDK_LONG_NAME) Specification $(DRAFT_MARKER_TITLE) ################################################################################ # Functions @@ -187,9 +195,53 @@ $1_MODULEGRAPH_TARGETS += $$($1_$2_PNG_TARGET) endef +# Helper function to create the overview.html file to use with the -overview +# javadoc option. +# Returns the filename as $1_OVERVIEW. +# +# param 1: SetupJavadocGeneration namespace ($1) +define create_overview_file + $1_OVERVIEW_TEXT := \ + \ + \ +

This document is the API specification for $$($1_FULL_NAME).

\ + # + ifneq ($$($1_GROUPS),) + $1_OVERVIEW_TEXT += \ +

For an overview of the full specification, grouped by usage, see the $$(JAVA_PLATFORM), $$($1_LONG_NAME) Specification.

\ +
\ + # + $1_OVERVIEW_TEXT += $$(foreach g, $$($1_GROUPS), \ +
$$($$g_GROUP_NAME)
\ +
$$($$g_GROUP_DESCRIPTION) \ + ) + $1_OVERVIEW_TEXT += \ +
\ + # + endif + ifeq ($$(IS_DRAFT), true) + $1_OVERVIEW_TEXT += \ +

$$(DRAFT_TEXT)

\ + # + endif + $1_OVERVIEW_TEXT += \ + \ + # + + $1_OVERVIEW := $$(SUPPORT_OUTPUTDIR)/docs/$1-overview.html + + $1_OVERVIEW_VARDEPS_FILE := $$(call DependOnVariable, $1_OVERVIEW_TEXT, \ + $$($1_OVERVIEW).vardeps) + + $$($1_OVERVIEW): $$($1_OVERVIEW_VARDEPS_FILE) + $$(call LogInfo, Creating overview.html for $1) + $$(call MakeDir, $$(@D)) + $$(PRINTF) > $$@ '$$($1_OVERVIEW_TEXT)' +endef + ################################################################################ -# Setup make rules for creating the API documentation, using javadoc and other -# tools if needed. +# Setup make rules to create an API documentation collection, using javadoc and +# other tools if needed. # # Parameter 1 is the name of the rule. This name is used as variable prefix. # Targets generated are returned as $1_JAVADOC_TARGETS and @@ -198,14 +250,10 @@ # # Remaining parameters are named arguments. These include: # MODULES - Modules to generate javadoc for -# NAME - The name of the javadoc compilation, to be presented to the user +# GROUPS - Name of the groups to divide the modules into, if any +# SHORT_NAME - The short name of this documentation collection +# LONG_NAME - The long name of this documentation collection # TARGET_DIR - Where to store the output -# OVERVIEW - Path to an html overview file -# DOC_TITLE - Title to use in -doctitle. -# WINDOW_TITLE - Title to use in -windowtitle. -# HEADER_TITLE - Title to use in -header. -# BOTTOM_TEXT - Text to use in -bottom. -# TOP_TEXT - Text to use in -top. # SetupApiDocsGeneration = $(NamedParamsMacroTemplate) define SetupApiDocsGenerationBody @@ -224,7 +272,6 @@ # Always include tags and basic options $1_OPTIONS := $$(JAVADOC_TAGS) $$(JAVADOC_OPTIONS) - $1_OPTIONS += -overview $$($1_OVERVIEW) $1_OPTIONS += --module-source-path $$(MODULES_SOURCE_PATH) $1_OPTIONS += --module $$(call CommaList, $$($1_MODULES)) @@ -232,12 +279,20 @@ $1_OPTIONS += -Xdoclint:all,$$(call CommaList, $$(addprefix -, \ $$(JAVADOC_DISABLED_DOCLINT))) + $1_FULL_NAME := $$(JAVA_PLATFORM), $$($1_LONG_NAME) \ + $$(DRAFT_MARKER_TITLE) + $1_DOC_TITLE := $$($1_FULL_NAME)
API Specification + $1_WINDOW_TITLE := $$(subst ™,,$$(JAVA_PLATFORM) $$($1_SHORT_NAME)) \ + $$(DRAFT_MARKER_TITLE) + $1_HEADER_TITLE := $$(JAVA_PLATFORM)
$$($1_SHORT_NAME)
\ + $$(DRAFT_MARKER_STR) + $1_OPTIONS += -doctitle '$$($1_DOC_TITLE)' $1_OPTIONS += -windowtitle '$$($1_WINDOW_TITLE)' $1_OPTIONS += -header '$$($1_HEADER_TITLE)' - $1_OPTIONS += -bottom '$$($1_BOTTOM_TEXT)' + $1_OPTIONS += -bottom '$$(JAVADOC_BOTTOM)' ifeq ($$(IS_DRAFT), true) - $1_OPTIONS += -top '$$($1_TOP_TEXT)' + $1_OPTIONS += -top '$$(JAVADOC_TOP)' endif # Do not store debug level options in VARDEPS. @@ -247,6 +302,15 @@ $1_LOG_OPTION += -verbose endif + # Generate the overview.html file. This will return the filename in + # $1_OVERVIEW. + $$(eval $$(call create_overview_file,$1)) + $1_OPTIONS += -overview $$($1_OVERVIEW) + + $$(foreach g, $$($1_GROUPS), \ + $$(eval $1_OPTIONS += -group "$$($$g_GROUP_NAME)" "$$($$g_GROUP_MODULES)") \ + ) + $1_VARDEPS := $$($1_JAVA_ARGS) $$($1_OPTIONS) $$(MODULES_SOURCE_PATH) \ $$($1_ALL_MODULES) $1_VARDEPS_FILE := $$(call DependOnVariable, $1_VARDEPS, \ @@ -259,7 +323,7 @@ # Javadoc creates a lot of files but use index.html as a marker $$($1_TARGET_DIR)/index.html: $$(BUILD_TOOLS_JDK) $$($1_VARDEPS_FILE) \ $$($1_SOURCE_DEPS) $$($1_OVERVIEW) - $$(call LogWarn, Generating $$($1_NAME) API javadoc for \ + $$(call LogWarn, Generating $1 javadoc for \ $$(words $$($1_ALL_MODULES)) modules) $$(call LogInfo, Javadoc modules: $$($1_ALL_MODULES)) $$(call MakeDir, $$($1_TARGET_DIR)) @@ -291,7 +355,7 @@ $1_GENGRAPHS_MARKER := $$($1_GENGRAPHS_DIR)/_gengraphs_run.marker $$($1_GENGRAPHS_MARKER): $$(BUILD_JIGSAW_TOOLS) $$(GENGRAPHS_PROPS) - $$(call LogInfo, Running gengraphs for $$($1_NAME) API documentation) + $$(call LogInfo, Running gengraphs for $1 documentation) $$(call MakeDir, $$($1_GENGRAPHS_DIR)) $$(call ExecuteWithLog, $$($1_GENGRAPHS_DIR)/gengraphs, \ $$(TOOL_GENGRAPHS) --spec --output $$($1_GENGRAPHS_DIR) \ @@ -310,21 +374,49 @@ ################################################################################ # Setup generation of the JDK API documentation (javadoc + modulegraph) +# Define the groups of the JDK API documentation +JavaSE_GROUP_NAME := Java SE +JavaSE_GROUP_MODULES := $(call ColonList, $(sort java.se.ee \ + $(call FindTransitiveIndirectDepsForModules, java.se.ee))) +JavaSE_GROUP_DESCRIPTION := \ + The Java Platform, Standard Edition ("Java SE") APIs define the core Java \ + platform for general-purpose computing. These APIs are in modules with \ + names starting with the string "java.". \ + # +JDK_GROUPS += JavaSE + +JDK_GROUP_NAME := JDK +JDK_GROUP_MODULES := jdk.* +JDK_GROUP_DESCRIPTION := \ + The Java Development Kit ("JDK") APIs define an implementation of the Java \ + SE Platform which may include platform-specific details. These APIs are in \ + modules with names starting with the string "jdk.". \ + # +JDK_GROUPS += JDK + +# If we are importing JavaFX, we need a JavaFX group. In an ideal world, this +# would have been abstracted away to a more proper generic handling of imported +# modules. +ifneq ($(findstring javafx., $(IMPORTED_MODULES)), ) + JavaFX_GROUP_NAME := JavaFX + JavaFX_GROUP_MODULES := javafx.* + JavaFX_GROUP_DESCRIPTION := \ + The JavaFX APIs define a set of user interface (UI) controls, graphics, \ + media, and web packages for developing rich client applications. These \ + APIs are in modules with names starting with the string "javafx.". \ + # + JDK_GROUPS += JavaFX +endif + # All modules to have docs generated by docs-jdk-api target -JDK_JAVADOC_MODULES := $(sort $(DOCS_MODULES)) - -JDK_JAVADOC_OVERVIEW := $(JDK_TOPDIR)/src/java.base/share/classes/overview-core.html +JDK_MODULES := $(sort $(DOCS_MODULES)) $(eval $(call SetupApiDocsGeneration, JDK_API, \ - MODULES := $(JDK_JAVADOC_MODULES), \ - NAME := JDK, \ + MODULES := $(JDK_MODULES), \ + GROUPS := $(JDK_GROUPS), \ + SHORT_NAME := $(JDK_SHORT_NAME), \ + LONG_NAME := $(JDK_LONG_NAME), \ TARGET_DIR := $(DOCS_OUTPUTDIR)/api, \ - OVERVIEW := $(JDK_JAVADOC_OVERVIEW), \ - DOC_TITLE := $(JDK_JAVADOC_DOC_TITLE), \ - WINDOW_TITLE := $(JAVADOC_WINDOW_TITLE), \ - HEADER_TITLE := $(JAVADOC_HEADER_TITLE), \ - BOTTOM_TEXT := $(JAVADOC_BOTTOM), \ - TOP_TEXT := $(JAVADOC_TOP), \ )) # Targets generated are returned in JDK_API_JAVADOC_TARGETS and @@ -335,20 +427,13 @@ # The Java SE module scope is just java.se.ee and it's transitive indirect # exports. -JAVASE_JAVADOC_MODULES := java.se.ee - -JAVASE_JAVADOC_OVERVIEW := $(JDK_TOPDIR)/src/java.base/share/classes/overview-core.html +JAVASE_MODULES := java.se.ee $(eval $(call SetupApiDocsGeneration, JAVASE_API, \ - MODULES := $(JAVASE_JAVADOC_MODULES), \ - NAME := Java SE, \ + MODULES := $(JAVASE_MODULES), \ + SHORT_NAME := $(JAVASE_SHORT_NAME), \ + LONG_NAME := $(JAVASE_LONG_NAME), \ TARGET_DIR := $(IMAGES_OUTPUTDIR)/javase-docs/api, \ - OVERVIEW := $(JAVASE_JAVADOC_OVERVIEW), \ - DOC_TITLE := $(JAVASE_JAVADOC_DOC_TITLE), \ - WINDOW_TITLE := $(JAVADOC_WINDOW_TITLE), \ - HEADER_TITLE := $(JAVADOC_HEADER_TITLE), \ - BOTTOM_TEXT := $(JAVADOC_BOTTOM), \ - TOP_TEXT := $(JAVADOC_TOP), \ )) # Targets generated are returned in JAVASE_API_JAVADOC_TARGETS and diff -r 3d88a6f51b8d -r f593383efdde make/common/MakeBase.gmk --- a/make/common/MakeBase.gmk Sat Jun 03 02:44:26 2017 +0000 +++ b/make/common/MakeBase.gmk Wed Jul 05 23:35:39 2017 +0200 @@ -978,6 +978,17 @@ ) ################################################################################ +# Converts a space separated list to a colon separated list. +# +# Replacing double-colon with a single colon is to workaround the issue with +# some version of make on windows that doesn't substitute spaces with one colon +# properly. +ColonList = \ + $(strip \ + $(subst ::,:,$(subst $(SPACE),:,$(strip $1))) \ + ) + +################################################################################ # Hook to include the corresponding custom file, if present. $(eval $(call IncludeCustomExtension, , common/MakeBase.gmk)) diff -r 3d88a6f51b8d -r f593383efdde test/lib/jdk/test/lib/compiler/CompilerUtils.java --- a/test/lib/jdk/test/lib/compiler/CompilerUtils.java Sat Jun 03 02:44:26 2017 +0000 +++ b/test/lib/jdk/test/lib/compiler/CompilerUtils.java Wed Jul 05 23:35:39 2017 +0200 @@ -39,7 +39,6 @@ * This class consists exclusively of static utility methods for invoking the * java compiler. */ - public final class CompilerUtils { private CompilerUtils() { } @@ -52,13 +51,21 @@ * * @return true if the compilation is successful * - * @throws IOException if there is an I/O error scanning the source tree or - * creating the destination directory + * @throws IOException + * if there is an I/O error scanning the source tree or + * creating the destination directory + * @throws UnsupportedOperationException + * if there is no system java compiler */ - public static boolean compile(Path source, Path destination, String ... options) + public static boolean compile(Path source, Path destination, String... options) throws IOException { JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + if (compiler == null) { + // no compiler available + throw new UnsupportedOperationException("Unable to get system java compiler. " + + "Perhaps, jdk.compiler module is not available."); + } StandardJavaFileManager jfm = compiler.getStandardFileManager(null, null, null); List sources diff -r 3d88a6f51b8d -r f593383efdde test/lib/jdk/test/lib/hprof/parser/HprofReader.java --- a/test/lib/jdk/test/lib/hprof/parser/HprofReader.java Sat Jun 03 02:44:26 2017 +0000 +++ b/test/lib/jdk/test/lib/hprof/parser/HprofReader.java Wed Jul 05 23:35:39 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,6 +35,7 @@ import java.io.*; import java.util.Date; import java.util.Hashtable; +import java.util.Map; import jdk.test.lib.hprof.model.ArrayTypeCodes; import jdk.test.lib.hprof.model.*; @@ -357,6 +358,22 @@ return snapshot; } + public String printStackTraces() { + StringBuffer output = new StringBuffer(); + for (Map.Entry entry : stackTraces.entrySet()) { + StackFrame[] frames = entry.getValue().getFrames(); + output.append("SerialNo " + entry.getKey() + "\n"); + for (int i = 0; i < frames.length; i++) { + output.append(" " + frames[i].getClassName() + "." + frames[i].getMethodName() + + frames[i].getMethodSignature() + " (" + frames[i].getSourceFileName() + + ":" + frames[i].getLineNumber() + ")" + "\n"); + } + } + + System.out.println(output); + return output.toString(); + } + private void skipBytes(long length) throws IOException { while (length > 0) { long skipped = in.skip(length); diff -r 3d88a6f51b8d -r f593383efdde test/lib/jdk/test/lib/hprof/parser/Reader.java --- a/test/lib/jdk/test/lib/hprof/parser/Reader.java Sat Jun 03 02:44:26 2017 +0000 +++ b/test/lib/jdk/test/lib/hprof/parser/Reader.java Wed Jul 05 23:35:39 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2017, 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 @@ -94,4 +94,42 @@ } } } + + /** + * Get Stack Traces from a Hprof file. + * + * @param heapFile The name of a file containing a heap dump + */ + public static String getStack(String heapFile, int debugLevel) + throws IOException { + int dumpNumber = 1; + int pos = heapFile.lastIndexOf('#'); + if (pos > -1) { + String num = heapFile.substring(pos+1, heapFile.length()); + try { + dumpNumber = Integer.parseInt(num, 10); + } catch (java.lang.NumberFormatException ex) { + String msg = "In file name \"" + heapFile + + "\", a dump number was " + + "expected after the :, but \"" + + num + "\" was found instead."; + System.err.println(msg); + throw new IOException(msg); + } + heapFile = heapFile.substring(0, pos); + } + try (PositionDataInputStream in = new PositionDataInputStream( + new BufferedInputStream(new FileInputStream(heapFile)))) { + int i = in.readInt(); + if (i == HprofReader.MAGIC_NUMBER) { + HprofReader r + = new HprofReader(heapFile, in, dumpNumber, + true, debugLevel); + r.read(); + return r.printStackTraces(); + } else { + throw new IOException("Unrecognized magic number: " + i); + } + } + } }