Merge
This commit is contained in:
commit
7c923b06e9
1
.hgtags
1
.hgtags
@ -6,3 +6,4 @@ bf2517e15f0c0f950e5b3143c4ca11e2df73dcc1 jdk7-b25
|
||||
bfe4572fd301a6fcd120373cdb2eff5d2da0c72c jdk7-b29
|
||||
bee4731164a06ddece1297ae58db24aca6a1c626 jdk7-b30
|
||||
cd8b8f500face60d1566d850857a7fccadbd383a jdk7-b31
|
||||
a9f1805e3ba9ca520cad199d522c84af5433e85a jdk7-b32
|
||||
|
@ -6,3 +6,4 @@ cbc8ad9dd0e085a607427ea35411990982f19a36 jdk7-b25
|
||||
31e08f70e88d77c2053f91c21b49a04296bdc59a jdk7-b29
|
||||
2dab2f712e1832c92acfa63ec0337048b9422c20 jdk7-b30
|
||||
3300a35a0bd56d695b92fe0b34f03ebbfc939064 jdk7-b31
|
||||
64da805be725721bf2004e7409a0d7a16fc8ddbc jdk7-b32
|
||||
|
373
Makefile
373
Makefile
@ -49,27 +49,17 @@ ifndef JDK_MAKE_SHARED_DIR
|
||||
JDK_MAKE_SHARED_DIR=$(JDK_TOPDIR)/make/common/shared
|
||||
endif
|
||||
|
||||
# For start and finish echo lines
|
||||
TITLE_TEXT = Control $(PLATFORM) $(ARCH) $(RELEASE)
|
||||
DAYE_STAMP = `$(DATE) '+%y-%m-%d %H:%M'`
|
||||
START_ECHO = echo "$(TITLE_TEXT) $@ build started: $(DATE_STAMP)"
|
||||
FINISH_ECHO = echo "$(TITLE_TEXT) $@ build finished: $(DATE_STAMP)"
|
||||
|
||||
default: all
|
||||
|
||||
include $(JDK_MAKE_SHARED_DIR)/Defs-control.gmk
|
||||
|
||||
include ./make/Defs-internal.gmk
|
||||
|
||||
all::
|
||||
@$(ECHO) $(PLATFORM) $(ARCH) $(RELEASE) build started: `$(DATE) '+%y-%m-%d %H:%M'`
|
||||
$(MKDIR) -p $(OUTPUTDIR)
|
||||
|
||||
# Rules for sanity checks
|
||||
include ./make/sanity-rules.gmk
|
||||
|
||||
dev : dev-build
|
||||
|
||||
dev-build:
|
||||
$(MAKE) DEV_ONLY=true all
|
||||
dev-sanity:
|
||||
$(MAKE) DEV_ONLY=true sanity
|
||||
dev-clobber:
|
||||
$(MAKE) DEV_ONLY=true clobber
|
||||
|
||||
# Rules for various components
|
||||
include ./make/hotspot-rules.gmk
|
||||
include ./make/langtools-rules.gmk
|
||||
include ./make/corba-rules.gmk
|
||||
@ -80,11 +70,203 @@ include ./make/install-rules.gmk
|
||||
include ./make/sponsors-rules.gmk
|
||||
include ./make/deploy-rules.gmk
|
||||
|
||||
all:: setup build
|
||||
# What "all" means
|
||||
all::
|
||||
@$(START_ECHO)
|
||||
|
||||
setup: openjdk_check
|
||||
all:: openjdk_check sanity all_product_build
|
||||
|
||||
ifeq ($(SKIP_FASTDEBUG_BUILD), false)
|
||||
all:: fastdebug_build
|
||||
endif
|
||||
|
||||
ifeq ($(SKIP_DEBUG_BUILD), false)
|
||||
all:: debug_build
|
||||
endif
|
||||
|
||||
ifneq ($(SKIP_OPENJDK_BUILD), true)
|
||||
all:: openjdk_build
|
||||
endif
|
||||
|
||||
all::
|
||||
@$(FINISH_ECHO)
|
||||
|
||||
# Everything for a full product build
|
||||
all_product_build::
|
||||
@$(START_ECHO)
|
||||
|
||||
ifeq ($(SKIP_PRODUCT_BUILD), false)
|
||||
|
||||
all_product_build:: product_build
|
||||
|
||||
ifeq ($(BUILD_INSTALL), true)
|
||||
all_product_build:: $(INSTALL)
|
||||
clobber:: install-clobber
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_SPONSORS), true)
|
||||
all_product_build:: $(SPONSORS)
|
||||
clobber:: sponsors-clobber
|
||||
endif
|
||||
|
||||
ifneq ($(SKIP_COMPARE_IMAGES), true)
|
||||
all_product_build:: compare-image
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
all_product_build::
|
||||
@$(FINISH_ECHO)
|
||||
|
||||
# Generis build of basic repo series
|
||||
generic_build_repo_series::
|
||||
$(MKDIR) -p $(OUTPUTDIR)
|
||||
$(MKDIR) -p $(OUTPUTDIR)/j2sdk-image
|
||||
|
||||
ifeq ($(BUILD_LANGTOOLS), true)
|
||||
generic_build_repo_series:: langtools
|
||||
clobber:: langtools-clobber
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_CORBA), true)
|
||||
generic_build_repo_series:: corba
|
||||
clobber:: corba-clobber
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_JAXP), true)
|
||||
generic_build_repo_series:: jaxp
|
||||
clobber:: jaxp-clobber
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_JAXWS), true)
|
||||
generic_build_repo_series:: jaxws
|
||||
clobber:: jaxws-clobber
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_HOTSPOT), true)
|
||||
generic_build_repo_series:: $(HOTSPOT)
|
||||
clobber:: hotspot-clobber
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_JDK), true)
|
||||
generic_build_repo_series:: $(JDK_JAVA_EXE)
|
||||
clobber:: jdk-clobber
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_DEPLOY), true)
|
||||
generic_build_repo_series:: $(DEPLOY)
|
||||
clobber:: deploy-clobber
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_JDK), true)
|
||||
ifeq ($(BUNDLE_RULES_AVAILABLE), true)
|
||||
generic_build_repo_series:: openjdk-binary-plugs-bundles
|
||||
endif
|
||||
endif
|
||||
|
||||
# The debug build, fastdebug or debug. Needs special handling.
|
||||
# Note that debug builds do NOT do INSTALL steps, but must be done
|
||||
# after the product build and before the INSTALL step of the product build.
|
||||
#
|
||||
# DEBUG_NAME is fastdebug or debug
|
||||
# ALT_OUTPUTDIR is changed to have -debug or -fastdebug suffix
|
||||
# The resulting j2sdk-image is used by the install makefiles to create a
|
||||
# debug install bundle jdk-*-debug-** bundle (tar or zip)
|
||||
# which will install in the debug or fastdebug subdirectory of the
|
||||
# normal product install area.
|
||||
# The install process needs to know what the DEBUG_NAME is, so
|
||||
# look for INSTALL_DEBUG_NAME in the install rules.
|
||||
#
|
||||
|
||||
# Location of fresh bootdir output
|
||||
ABS_BOOTDIR_OUTPUTDIR=$(ABS_OUTPUTDIR)/bootjdk
|
||||
FRESH_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/j2sdk-image
|
||||
FRESH_DEBUG_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)-$(DEBUG_NAME)/j2sdk-image
|
||||
|
||||
create_fresh_product_bootdir: FRC
|
||||
@$(START_ECHO)
|
||||
$(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \
|
||||
NO_DOCS=true \
|
||||
BOOT_CYCLE_SETTINGS= \
|
||||
build_product_image
|
||||
@$(FINISH_ECHO)
|
||||
|
||||
create_fresh_debug_bootdir: FRC
|
||||
@$(START_ECHO)
|
||||
$(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \
|
||||
NO_DOCS=true \
|
||||
BOOT_CYCLE_DEBUG_SETTINGS= \
|
||||
build_debug_image
|
||||
@$(FINISH_ECHO)
|
||||
|
||||
create_fresh_fastdebug_bootdir: FRC
|
||||
@$(START_ECHO)
|
||||
$(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) \
|
||||
NO_DOCS=true \
|
||||
BOOT_CYCLE_DEBUG_SETTINGS= \
|
||||
build_fastdebug_image
|
||||
@$(FINISH_ECHO)
|
||||
|
||||
# Create boot image?
|
||||
ifeq ($(SKIP_BOOT_CYCLE),false)
|
||||
ifneq ($(PLATFORM)$(ARCH_DATA_MODEL),solaris64)
|
||||
DO_BOOT_CYCLE=true
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(DO_BOOT_CYCLE),true)
|
||||
|
||||
# Create the bootdir to use in the build
|
||||
product_build:: create_fresh_product_bootdir
|
||||
debug_build:: create_fresh_debug_bootdir
|
||||
fastdebug_build:: create_fresh_fastdebug_bootdir
|
||||
|
||||
# Define variables to be used now for the boot jdk
|
||||
BOOT_CYCLE_SETTINGS= \
|
||||
ALT_BOOTDIR=$(FRESH_BOOTDIR) \
|
||||
ALT_JDK_IMPORT_PATH=$(FRESH_BOOTDIR)
|
||||
BOOT_CYCLE_DEBUG_SETTINGS= \
|
||||
ALT_BOOTDIR=$(FRESH_DEBUG_BOOTDIR) \
|
||||
ALT_JDK_IMPORT_PATH=$(FRESH_DEBUG_BOOTDIR)
|
||||
|
||||
else
|
||||
|
||||
# Use the supplied ALT_BOOTDIR as the boot
|
||||
BOOT_CYCLE_SETTINGS=
|
||||
BOOT_CYCLE_DEBUG_SETTINGS=
|
||||
|
||||
endif
|
||||
|
||||
build_product_image:
|
||||
@$(START_ECHO)
|
||||
$(MAKE) \
|
||||
SKIP_FASTDEBUG_BUILD=true \
|
||||
SKIP_DEBUG_BUILD=true \
|
||||
$(BOOT_CYCLE_SETTINGS) \
|
||||
generic_build_repo_series
|
||||
@$(FINISH_ECHO)
|
||||
|
||||
generic_debug_build:
|
||||
@$(START_ECHO)
|
||||
$(MAKE) \
|
||||
ALT_OUTPUTDIR=$(ABS_OUTPUTDIR)-$(DEBUG_NAME) \
|
||||
DEBUG_NAME=$(DEBUG_NAME) \
|
||||
NO_DOCS=true \
|
||||
$(BOOT_CYCLE_DEBUG_SETTINGS) \
|
||||
generic_build_repo_series
|
||||
@$(FINISH_ECHO)
|
||||
|
||||
build_debug_image:
|
||||
$(MAKE) DEBUG_NAME=debug generic_debug_build
|
||||
|
||||
build_fastdebug_image:
|
||||
$(MAKE) DEBUG_NAME=fastdebug generic_debug_build
|
||||
|
||||
# Build final image
|
||||
product_build:: build_product_image
|
||||
debug_build:: build_debug_image
|
||||
fastdebug_build:: build_fastdebug_image
|
||||
|
||||
# Check on whether we really can build the openjdk, need source etc.
|
||||
openjdk_check: FRC
|
||||
ifneq ($(SKIP_OPENJDK_BUILD), true)
|
||||
@ -101,113 +283,6 @@ ifneq ($(SKIP_OPENJDK_BUILD), true)
|
||||
@$(ECHO) " "
|
||||
endif
|
||||
|
||||
build:: sanity
|
||||
|
||||
clobber::
|
||||
|
||||
ifeq ($(BUILD_LANGTOOLS), true)
|
||||
build:: langtools
|
||||
clobber:: langtools-clobber
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_CORBA), true)
|
||||
build:: corba
|
||||
clobber:: corba-clobber
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_JAXP), true)
|
||||
build:: jaxp
|
||||
clobber:: jaxp-clobber
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_JAXWS), true)
|
||||
build:: jaxws
|
||||
clobber:: jaxws-clobber
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_HOTSPOT), true)
|
||||
build:: $(HOTSPOT)
|
||||
clobber:: hotspot-clobber
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_JDK), true)
|
||||
build:: $(JDK_JAVA_EXE)
|
||||
clobber:: jdk-clobber
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_DEPLOY), true)
|
||||
build:: $(DEPLOY)
|
||||
clobber:: deploy-clobber
|
||||
endif
|
||||
|
||||
#
|
||||
# Generic debug build, fastdebug or debug. Needs special handling.
|
||||
# Note that debug builds do NOT do INSTALL steps, but must be done
|
||||
# after the product build and before the INSTALL step of the product build.
|
||||
#
|
||||
# DEBUG_NAME is fastdebug or debug
|
||||
# ALT_OUTPUTDIR is changed to have -debug or -fastdebug suffix
|
||||
# The resulting j2sdk-image is used by the install makefiles to create a
|
||||
# debug install bundle jdk-*-debug-** bundle (tar or zip)
|
||||
# which will install in the debug or fastdebug subdirectory of the
|
||||
# normal product install area.
|
||||
# The install process needs to know what the DEBUG_NAME is, so
|
||||
# look for INSTALL_DEBUG_NAME in the install rules.
|
||||
#
|
||||
|
||||
COMMON_DEBUG_FLAGS= \
|
||||
DEBUG_NAME=$(DEBUG_NAME) \
|
||||
ALT_OUTPUTDIR=$(ABS_OUTPUTDIR)-$(DEBUG_NAME) \
|
||||
NO_DOCS=true
|
||||
|
||||
product_build: setup
|
||||
@$(ECHO) $@ build started: `$(DATE) '+%y-%m-%d %H:%M'`
|
||||
$(MAKE) SKIP_FASTDEBUG_BUILD=true SKIP_DEBUG_BUILD=true all
|
||||
@$(ECHO) $@ build finished: `$(DATE) '+%y-%m-%d %H:%M'`
|
||||
|
||||
generic_debug_build:
|
||||
@$(ECHO) $@ build started: `$(DATE) '+%y-%m-%d %H:%M'`
|
||||
$(MAKE) $(COMMON_DEBUG_FLAGS) setup build
|
||||
@$(ECHO) $@ build finished: `$(DATE) '+%y-%m-%d %H:%M'`
|
||||
|
||||
debug_build: setup
|
||||
$(MAKE) DEBUG_NAME=debug generic_debug_build
|
||||
|
||||
fastdebug_build: setup
|
||||
$(MAKE) DEBUG_NAME=fastdebug generic_debug_build
|
||||
|
||||
ifeq ($(SKIP_FASTDEBUG_BUILD), false)
|
||||
all:: fastdebug_build
|
||||
endif
|
||||
|
||||
ifeq ($(SKIP_DEBUG_BUILD), false)
|
||||
all:: debug_build
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_JDK), true)
|
||||
ifeq ($(BUNDLE_RULES_AVAILABLE), true)
|
||||
all:: openjdk-binary-plugs-bundles
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_INSTALL), true)
|
||||
all :: $(INSTALL)
|
||||
clobber:: install-clobber
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_SPONSORS), true)
|
||||
all :: $(SPONSORS)
|
||||
clobber:: sponsors-clobber
|
||||
endif
|
||||
|
||||
ifneq ($(SKIP_COMPARE_IMAGES), true)
|
||||
all :: compare-image
|
||||
endif
|
||||
|
||||
ifneq ($(SKIP_OPENJDK_BUILD), true)
|
||||
all :: openjdk_build
|
||||
endif
|
||||
|
||||
# If we have bundle rules, we have a chance here to do a complete cycle
|
||||
# build, of production and open build.
|
||||
# FIXUP: We should create the openjdk source bundle and build that?
|
||||
@ -235,6 +310,7 @@ else
|
||||
endif
|
||||
|
||||
openjdk_build:
|
||||
@$(START_ECHO)
|
||||
@$(ECHO) " "
|
||||
@$(ECHO) "================================================="
|
||||
@$(ECHO) "Starting openjdk build"
|
||||
@ -245,6 +321,7 @@ openjdk_build:
|
||||
$(MKDIR) -p $(OPENJDK_OUTPUTDIR)
|
||||
($(CD) $(OPENJDK_BUILDDIR) && $(MAKE) \
|
||||
OPENJDK=true \
|
||||
NO_DOCS=true \
|
||||
ALT_JDK_DEVTOOLS_DIR=$(JDK_DEVTOOLS_DIR) \
|
||||
ALT_OUTPUTDIR=$(OPENJDK_OUTPUTDIR) \
|
||||
ALT_BINARY_PLUGS_PATH=$(OPENJDK_PLUGS) \
|
||||
@ -261,6 +338,7 @@ openjdk_build:
|
||||
@$(ECHO) " Binary Bundle: $(OPENJDK_BUILD_BINARY_ZIP)"
|
||||
@$(ECHO) "================================================="
|
||||
@$(ECHO) " "
|
||||
@$(FINISH_ECHO)
|
||||
|
||||
endif
|
||||
endif
|
||||
@ -274,8 +352,18 @@ clobber::
|
||||
|
||||
clean: clobber
|
||||
|
||||
all::
|
||||
@$(ECHO) Control build finished: `$(DATE) '+%y-%m-%d %H:%M'`
|
||||
#
|
||||
# Dev builds
|
||||
#
|
||||
|
||||
dev : dev-build
|
||||
|
||||
dev-build:
|
||||
$(MAKE) DEV_ONLY=true all
|
||||
dev-sanity:
|
||||
$(MAKE) DEV_ONLY=true sanity
|
||||
dev-clobber:
|
||||
$(MAKE) DEV_ONLY=true clobber
|
||||
|
||||
#
|
||||
# Quick jdk verification build
|
||||
@ -460,16 +548,6 @@ ifeq ($(BUNDLE_RULES_AVAILABLE), true)
|
||||
include $(BUNDLE_RULES)
|
||||
endif
|
||||
|
||||
################################################################
|
||||
# Cycle build. Build the jdk, use it to build the jdk again.
|
||||
################################################################
|
||||
|
||||
ABS_BOOTDIR_OUTPUTDIR=$(ABS_OUTPUTDIR)/bootjdk
|
||||
|
||||
boot_cycle:
|
||||
$(MAKE) ALT_OUTPUTDIR=$(ABS_BOOTDIR_OUTPUTDIR) product_build
|
||||
$(MAKE) ALT_BOOTDIR=$(ABS_BOOTDIR_OUTPUTDIR)/j2sdk-image product_build
|
||||
|
||||
################################################################
|
||||
# JPRT rule to build
|
||||
################################################################
|
||||
@ -480,9 +558,20 @@ include ./make/jprt.gmk
|
||||
# PHONY
|
||||
################################################################
|
||||
|
||||
.PHONY: all build what clobber insane \
|
||||
fastdebug_build debug_build product_build setup \
|
||||
dev dev-build dev-sanity dev-clobber
|
||||
.PHONY: all \
|
||||
generic_build_repo_series \
|
||||
what clobber insane \
|
||||
dev dev-build dev-sanity dev-clobber \
|
||||
product_build \
|
||||
fastdebug_build \
|
||||
debug_build \
|
||||
build_product_image \
|
||||
build_debug_image \
|
||||
build_fastdebug_image \
|
||||
create_fresh_product_bootdir \
|
||||
create_fresh_debug_bootdir \
|
||||
create_fresh_fastdebug_bootdir \
|
||||
generic_debug_build
|
||||
|
||||
# Force target
|
||||
FRC:
|
||||
|
@ -132,7 +132,7 @@
|
||||
See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
|
||||
SunSolve</a> for patch downloads.
|
||||
</td>
|
||||
<td>Sun Studio 11 </td>
|
||||
<td>Sun Studio 12</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Solaris SPARCV9 (64bit)</td>
|
||||
@ -141,7 +141,7 @@
|
||||
See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
|
||||
SunSolve</a> for patch downloads.
|
||||
</td>
|
||||
<td>Sun Studio 11</td>
|
||||
<td>Sun Studio 12</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Solaris X86 (32bit)</td>
|
||||
@ -150,7 +150,7 @@
|
||||
See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
|
||||
SunSolve</a> for patch downloads.
|
||||
</td>
|
||||
<td>Sun Studio 11</td>
|
||||
<td>Sun Studio 12</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Solaris X64 (64bit)</td>
|
||||
@ -159,7 +159,7 @@
|
||||
See <a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/JavaSE" target="_blank">
|
||||
SunSolve</a> for patch downloads.
|
||||
</td>
|
||||
<td>Sun Studio 11</td>
|
||||
<td>Sun Studio 12</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Windows X86 (32bit)</td>
|
||||
@ -831,8 +831,8 @@
|
||||
<blockquote>
|
||||
At a minimum, the
|
||||
<a href="http://developers.sun.com/sunstudio/index.jsp" target="_blank">
|
||||
Sun Studio 11 Compilers</a>
|
||||
(containing version 5.8 of the C and C++ compilers) is required,
|
||||
Sun Studio 12 Compilers</a>
|
||||
(containing version 5.9 of the C and C++ compilers) is required,
|
||||
with patches from the
|
||||
<a href="http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/patch-access" target="_blank">
|
||||
SunSolve web site</a>.
|
||||
|
@ -6,3 +6,4 @@ e84e9018bebbf3e5bafc5706e7882a15cb1c7d99 jdk7-b27
|
||||
8b71960f79ce0a6fb8ddfeec03f03d400a361747 jdk7-b29
|
||||
c0252adbb2abbfdd6c35595429ac6fbdd98e20ac jdk7-b30
|
||||
ef6af34d75a7b44e77083f1d4ee47631fa09d3b4 jdk7-b31
|
||||
80a0f46a6203e727012bd579fe38a609b83decce jdk7-b32
|
||||
|
@ -41,4 +41,7 @@ com_sun_corba_se_impl_dynamicany_java = \
|
||||
com/sun/corba/se/impl/dynamicany/DynSequenceImpl.java \
|
||||
com/sun/corba/se/impl/dynamicany/DynStructImpl.java \
|
||||
com/sun/corba/se/impl/dynamicany/DynUnionImpl.java \
|
||||
com/sun/corba/se/impl/dynamicany/DynValueImpl.java
|
||||
com/sun/corba/se/impl/dynamicany/DynValueImpl.java \
|
||||
com/sun/corba/se/impl/dynamicany/DynValueBoxImpl.java \
|
||||
com/sun/corba/se/impl/dynamicany/DynValueCommonImpl.java
|
||||
|
||||
|
@ -52,6 +52,8 @@ com_sun_corba_se_impl_encoding_java = \
|
||||
com/sun/corba/se/impl/encoding/CodeSetComponentInfo.java \
|
||||
com/sun/corba/se/impl/encoding/EncapsInputStream.java \
|
||||
com/sun/corba/se/impl/encoding/EncapsOutputStream.java \
|
||||
com/sun/corba/se/impl/encoding/IDLJavaSerializationInputStream.java \
|
||||
com/sun/corba/se/impl/encoding/IDLJavaSerializationOutputStream.java \
|
||||
com/sun/corba/se/impl/encoding/MarkAndResetHandler.java \
|
||||
com/sun/corba/se/impl/encoding/MarshalInputStream.java \
|
||||
com/sun/corba/se/impl/encoding/MarshalOutputStream.java \
|
||||
|
@ -63,6 +63,7 @@ com_sun_corba_se_impl_ior_java = \
|
||||
com/sun/corba/se/impl/ior/iiop/IIOPProfileImpl.java \
|
||||
com/sun/corba/se/impl/ior/iiop/IIOPProfileTemplateImpl.java \
|
||||
com/sun/corba/se/impl/ior/iiop/JavaCodebaseComponentImpl.java \
|
||||
com/sun/corba/se/impl/ior/iiop/JavaSerializationComponent.java \
|
||||
com/sun/corba/se/impl/ior/iiop/MaxStreamFormatVersionComponentImpl.java \
|
||||
com/sun/corba/se/impl/ior/iiop/RequestPartitioningComponentImpl.java \
|
||||
com/sun/corba/se/impl/ior/iiop/ORBTypeComponentImpl.java
|
||||
|
@ -27,6 +27,7 @@ com_sun_corba_se_impl_orbutil_java = \
|
||||
com/sun/corba/se/impl/orbutil/CacheTable.java \
|
||||
com/sun/corba/se/impl/orbutil/CorbaResourceUtil.java \
|
||||
com/sun/corba/se/impl/orbutil/DenseIntMapImpl.java \
|
||||
com/sun/corba/se/impl/orbutil/GetPropertyAction.java \
|
||||
com/sun/corba/se/impl/orbutil/HexOutputStream.java \
|
||||
com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3.java \
|
||||
com/sun/corba/se/impl/orbutil/IIOPInputStream_1_3_1.java \
|
||||
@ -76,6 +77,7 @@ com_sun_corba_se_impl_orbutil_java = \
|
||||
com/sun/corba/se/impl/copyobject/FallbackObjectCopierImpl.java \
|
||||
com/sun/corba/se/impl/copyobject/ORBStreamObjectCopierImpl.java \
|
||||
com/sun/corba/se/impl/copyobject/ReferenceObjectCopierImpl.java \
|
||||
com/sun/corba/se/impl/copyobject/JavaStreamObjectCopierImpl.java \
|
||||
com/sun/corba/se/impl/orbutil/graph/Node.java \
|
||||
com/sun/corba/se/impl/orbutil/graph/NodeData.java \
|
||||
com/sun/corba/se/impl/orbutil/graph/Graph.java \
|
||||
|
@ -63,6 +63,7 @@ com_sun_corba_se_impl_protocol_java = \
|
||||
com/sun/corba/se/impl/protocol/giopmsgheaders/LocateRequestMessage_1_0.java \
|
||||
com/sun/corba/se/impl/protocol/giopmsgheaders/LocateRequestMessage_1_1.java \
|
||||
com/sun/corba/se/impl/protocol/giopmsgheaders/LocateRequestMessage_1_2.java \
|
||||
com/sun/corba/se/impl/protocol/giopmsgheaders/LocateReplyOrReplyMessage.java \
|
||||
com/sun/corba/se/impl/protocol/giopmsgheaders/Message.java \
|
||||
com/sun/corba/se/impl/protocol/giopmsgheaders/MessageBase.java \
|
||||
com/sun/corba/se/impl/protocol/giopmsgheaders/MessageHandler.java \
|
||||
|
@ -29,6 +29,7 @@
|
||||
|
||||
com_sun_corba_se_spi_legacy_interceptor_java = \
|
||||
com/sun/corba/se/spi/legacy/interceptor/IORInfoExt.java \
|
||||
com/sun/corba/se/spi/legacy/interceptor/ORBInitInfoExt.java \
|
||||
com/sun/corba/se/spi/legacy/interceptor/RequestInfoExt.java \
|
||||
com/sun/corba/se/spi/legacy/interceptor/UnknownType.java
|
||||
|
||||
|
@ -35,5 +35,6 @@ FILES_java = \
|
||||
com/sun/corba/se/spi/monitoring/MonitoredObjectFactory.java \
|
||||
com/sun/corba/se/spi/monitoring/MonitoredAttribute.java \
|
||||
com/sun/corba/se/spi/monitoring/MonitoredAttributeInfoFactory.java \
|
||||
com/sun/corba/se/spi/monitoring/MonitoringConstants.java \
|
||||
com/sun/corba/se/spi/monitoring/MonitoringManager.java \
|
||||
com/sun/corba/se/spi/monitoring/MonitoringManagerFactory.java
|
||||
|
@ -27,6 +27,7 @@ com_sun_corba_se_spi_presentation_rmi_java = \
|
||||
com/sun/corba/se/spi/presentation/rmi/DynamicMethodMarshaller.java \
|
||||
com/sun/corba/se/spi/presentation/rmi/DynamicStub.java \
|
||||
com/sun/corba/se/spi/presentation/rmi/IDLNameTranslator.java \
|
||||
com/sun/corba/se/spi/presentation/rmi/PresentationDefaults.java \
|
||||
com/sun/corba/se/spi/presentation/rmi/PresentationManager.java \
|
||||
com/sun/corba/se/spi/presentation/rmi/StubAdapter.java
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
com_sun_corba_se_spi_transport_java = \
|
||||
com/sun/corba/se/spi/transport/CorbaAcceptor.java \
|
||||
com/sun/corba/se/spi/transport/CorbaConnection.java \
|
||||
com/sun/corba/se/spi/transport/CorbaConnectionCache.java \
|
||||
com/sun/corba/se/spi/transport/CorbaContactInfo.java \
|
||||
com/sun/corba/se/spi/transport/CorbaContactInfoList.java \
|
||||
com/sun/corba/se/spi/transport/CorbaContactInfoListFactory.java \
|
||||
|
@ -47,6 +47,7 @@ NS_GENERATED_java = \
|
||||
org/omg/CosNaming/NamingContext.java \
|
||||
org/omg/CosNaming/NamingContextHelper.java \
|
||||
org/omg/CosNaming/NamingContextHolder.java \
|
||||
org/omg/CosNaming/NamingContextOperations.java \
|
||||
org/omg/CosNaming/_NamingContextStub.java \
|
||||
org/omg/CosNaming/NamingContextPackage/AlreadyBound.java \
|
||||
org/omg/CosNaming/NamingContextPackage/AlreadyBoundHelper.java \
|
||||
|
@ -47,6 +47,10 @@ DYNANY_GENERATED_java = \
|
||||
org/omg/DynamicAny/DynUnionOperations.java \
|
||||
org/omg/DynamicAny/DynValue.java \
|
||||
org/omg/DynamicAny/DynValueOperations.java \
|
||||
org/omg/DynamicAny/DynValueBox.java \
|
||||
org/omg/DynamicAny/DynValueBoxOperations.java \
|
||||
org/omg/DynamicAny/DynValueCommon.java \
|
||||
org/omg/DynamicAny/DynValueCommonOperations.java \
|
||||
org/omg/DynamicAny/NameDynAnyPair.java \
|
||||
org/omg/DynamicAny/NameValuePair.java \
|
||||
org/omg/DynamicAny/DynAnyPackage/InvalidValue.java \
|
||||
@ -70,8 +74,16 @@ DYNANY_GENERATED_java = \
|
||||
org/omg/DynamicAny/DynSequenceHelper.java \
|
||||
org/omg/DynamicAny/NameDynAnyPairSeqHelper.java \
|
||||
org/omg/DynamicAny/NameValuePairHelper.java \
|
||||
org/omg/DynamicAny/NameValuePairSeqHelper.java
|
||||
|
||||
org/omg/DynamicAny/NameValuePairSeqHelper.java \
|
||||
org/omg/DynamicAny/_DynAnyFactoryStub.java \
|
||||
org/omg/DynamicAny/_DynAnyStub.java \
|
||||
org/omg/DynamicAny/_DynArrayStub.java \
|
||||
org/omg/DynamicAny/_DynEnumStub.java \
|
||||
org/omg/DynamicAny/_DynFixedStub.java \
|
||||
org/omg/DynamicAny/_DynSequenceStub.java \
|
||||
org/omg/DynamicAny/_DynStructStub.java \
|
||||
org/omg/DynamicAny/_DynUnionStub.java \
|
||||
org/omg/DynamicAny/_DynValueStub.java
|
||||
|
||||
DYNANY_HELP_HOLD_java = \
|
||||
org/omg/DynamicAny/AnySeqHolder.java \
|
||||
|
@ -106,6 +106,7 @@ PI_GENERATED_java = \
|
||||
org/omg/IOP/CodecPackage/TypeMismatchHelper.java \
|
||||
org/omg/IOP/ENCODING_CDR_ENCAPS.java \
|
||||
org/omg/IOP/Encoding.java \
|
||||
org/omg/IOP/ExceptionDetailMessage.java \
|
||||
org/omg/Dynamic/Parameter.java
|
||||
|
||||
# Helper and Holder files to be removed:
|
||||
|
@ -46,6 +46,8 @@ CORBA_JMK_DIRECTORY=$(TOPDIR)/make/com/sun/corba/minclude/
|
||||
include $(CORBA_JMK_DIRECTORY)com_sun_corba_se_PortableActivationIDL.jmk
|
||||
include $(CORBA_JMK_DIRECTORY)com_sun_corba_se_impl_logging.jmk
|
||||
|
||||
FILES_java += com/sun/corba/se/org/omg/CORBA/ORB.java
|
||||
|
||||
#
|
||||
# Dirs
|
||||
#
|
||||
|
@ -31,11 +31,8 @@ COMPILER_NAME=Sun Studio
|
||||
|
||||
# Sun Studio Compiler settings specific to Solaris
|
||||
ifeq ($(PLATFORM), solaris)
|
||||
# FIXUP: Change to SS12 when validated
|
||||
#COMPILER_VERSION=SS12
|
||||
#REQUIRED_CC_VER=5.9
|
||||
COMPILER_VERSION=SS11
|
||||
REQUIRED_CC_VER=5.8
|
||||
COMPILER_VERSION=SS12
|
||||
REQUIRED_CC_VER=5.9
|
||||
CC = $(COMPILER_PATH)cc
|
||||
CPP = $(COMPILER_PATH)cc -E
|
||||
CXX = $(COMPILER_PATH)CC
|
||||
|
@ -35,7 +35,7 @@ include $(BUILDDIR)/common/Defs.gmk
|
||||
#
|
||||
# Files to compile
|
||||
#
|
||||
AUTO_FILES_JAVA_DIRS = javax/transaction/xa
|
||||
AUTO_FILES_JAVA_DIRS = javax/transaction
|
||||
|
||||
#
|
||||
# Rules
|
||||
|
@ -127,9 +127,7 @@ if [ "${osname}" = SunOS ] ; then
|
||||
if [ "${JPRT_SOLARIS_COMPILER_NAME}" != "" ] ; then
|
||||
compiler_name=${JPRT_SOLARIS_COMPILER_NAME}
|
||||
else
|
||||
# FIXUP: Change to SS12 when validated
|
||||
#compiler_name=SS12
|
||||
compiler_name=SS11
|
||||
compiler_name=SS12
|
||||
fi
|
||||
compiler_path=${jdk_devtools}/${solaris_arch}/SUNWspro/${compiler_name}/bin
|
||||
ALT_COMPILER_PATH="${compiler_path}"
|
||||
|
@ -47,8 +47,8 @@ else
|
||||
endif
|
||||
|
||||
FILES_java = \
|
||||
$(ORG_OMG_SENDINGCONTEXT_java) \
|
||||
$(ORG_OMG_CORBA_2_3_java) \
|
||||
$(org_omg_SendingContext_java) \
|
||||
$(org_omg_CORBA_2_3_java) \
|
||||
$(ORG_OMG_CORBA_java)
|
||||
|
||||
#
|
||||
|
@ -6,3 +6,4 @@ c14dab40ed9bf45ad21150bd70c9c80cdf655415 jdk7-b28
|
||||
4f91c08b3e4498213a9c5a24898f7d9c38cf86fb jdk7-b29
|
||||
d1605aabd0a15ecf93787c47de63073c33fba52d jdk7-b30
|
||||
9c2ecc2ffb125f14fab3857fe7689598956348a0 jdk7-b31
|
||||
b727c32788a906c04839516ae7443a085185a300 jdk7-b32
|
||||
|
@ -6,3 +6,4 @@ b996318955c0ad8e9fa0ffb56c74f626786e863f jdk7-b28
|
||||
617ee8607cfd5fd81f233f3c0b690f85084687a0 jdk7-b29
|
||||
2d94a238a1641d074e6032dcdceed461d6f85d6a jdk7-b30
|
||||
255d64ee287e926e8629dd80bc67690e65eeba30 jdk7-b31
|
||||
400a5ee432cc2db9031e06852ddde9264a192b48 jdk7-b32
|
||||
|
@ -6,3 +6,4 @@ eefcd5204500a11d6aa802dca9f961cf10ab64c2 jdk7-b28
|
||||
836c55713abab186e4de0c6eabd06ff008c7b8d0 jdk7-b29
|
||||
7f2466f8cc7009702e548d1a763254f546024d7e jdk7-b30
|
||||
f978623825364a2ad9c6f51d02fc9424a8b0bc86 jdk7-b31
|
||||
e6daca2eced9d84b01255cabcfcc49164c26405e jdk7-b32
|
||||
|
@ -7,3 +7,4 @@ e21f4266466cd1306b176aaa08b2cd8337a9be3d jdk7-b29
|
||||
b6d6877c1155621a175dccd12dc14c54f938fb8b jdk7-b30
|
||||
b7474b739d13bacd9972f88ac91f6350b7b0be12 jdk7-b31
|
||||
c51121419e30eac5f0fbbce45ff1711c4ce0de28 jdk7-b32
|
||||
fa4c0a6cdd25d97d4e6f5d7aa180bcbb0e0d56af jdk7-b33
|
||||
|
@ -1,27 +0,0 @@
|
||||
|
||||
OPENJDK ASSEMBLY EXCEPTION
|
||||
|
||||
The OpenJDK source code made available by Sun at openjdk.java.net and
|
||||
openjdk.dev.java.net ("OpenJDK Code") is distributed under the terms of the
|
||||
GNU General Public License <http://www.gnu.org/copyleft/gpl.html> version 2
|
||||
only ("GPL2"), with the following clarification and special exception.
|
||||
|
||||
Linking this OpenJDK Code statically or dynamically with other code
|
||||
is making a combined work based on this library. Thus, the terms
|
||||
and conditions of GPL2 cover the whole combination.
|
||||
|
||||
As a special exception, Sun gives you permission to link this
|
||||
OpenJDK Code with certain code licensed by Sun as indicated at
|
||||
http://openjdk.java.net/legal/exception-modules-2007-05-08.html
|
||||
("Designated Exception Modules") to produce an executable,
|
||||
regardless of the license terms of the Designated Exception Modules,
|
||||
and to copy and distribute the resulting executable under GPL2,
|
||||
provided that the Designated Exception Modules continue to be
|
||||
governed by the licenses under which they were offered by Sun.
|
||||
|
||||
As such, it allows licensees and sublicensees of Sun's GPL2 OpenJDK Code to
|
||||
build an executable that includes those portions of necessary code that Sun
|
||||
could not provide under GPL2 (or that Sun has provided under GPL2 with the
|
||||
Classpath exception). If you modify or add to the OpenJDK code, that new
|
||||
GPL2 code may still be combined with Designated Exception Modules if the
|
||||
new code is made subject to this exception by its copyright holder.
|
347
jdk/make/LICENSE
347
jdk/make/LICENSE
@ -1,347 +0,0 @@
|
||||
The GNU General Public License (GPL)
|
||||
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies of this license
|
||||
document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your freedom to share
|
||||
and change it. By contrast, the GNU General Public License is intended to
|
||||
guarantee your freedom to share and change free software--to make sure the
|
||||
software is free for all its users. This General Public License applies to
|
||||
most of the Free Software Foundation's software and to any other program whose
|
||||
authors commit to using it. (Some other Free Software Foundation software is
|
||||
covered by the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not price. Our
|
||||
General Public Licenses are designed to make sure that you have the freedom to
|
||||
distribute copies of free software (and charge for this service if you wish),
|
||||
that you receive source code or can get it if you want it, that you can change
|
||||
the software or use pieces of it in new free programs; and that you know you
|
||||
can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid anyone to deny
|
||||
you these rights or to ask you to surrender the rights. These restrictions
|
||||
translate to certain responsibilities for you if you distribute copies of the
|
||||
software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether gratis or for
|
||||
a fee, you must give the recipients all the rights that you have. You must
|
||||
make sure that they, too, receive or can get the source code. And you must
|
||||
show them these terms so they know their rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and (2)
|
||||
offer you this license which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain that
|
||||
everyone understands that there is no warranty for this free software. If the
|
||||
software is modified by someone else and passed on, we want its recipients to
|
||||
know that what they have is not the original, so that any problems introduced
|
||||
by others will not reflect on the original authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software patents. We
|
||||
wish to avoid the danger that redistributors of a free program will
|
||||
individually obtain patent licenses, in effect making the program proprietary.
|
||||
To prevent this, we have made it clear that any patent must be licensed for
|
||||
everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and modification
|
||||
follow.
|
||||
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains a notice
|
||||
placed by the copyright holder saying it may be distributed under the terms of
|
||||
this General Public License. The "Program", below, refers to any such program
|
||||
or work, and a "work based on the Program" means either the Program or any
|
||||
derivative work under copyright law: that is to say, a work containing the
|
||||
Program or a portion of it, either verbatim or with modifications and/or
|
||||
translated into another language. (Hereinafter, translation is included
|
||||
without limitation in the term "modification".) Each licensee is addressed as
|
||||
"you".
|
||||
|
||||
Activities other than copying, distribution and modification are not covered by
|
||||
this License; they are outside its scope. The act of running the Program is
|
||||
not restricted, and the output from the Program is covered only if its contents
|
||||
constitute a work based on the Program (independent of having been made by
|
||||
running the Program). Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's source code as
|
||||
you receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice and
|
||||
disclaimer of warranty; keep intact all the notices that refer to this License
|
||||
and to the absence of any warranty; and give any other recipients of the
|
||||
Program a copy of this License along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and you may
|
||||
at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion of it, thus
|
||||
forming a work based on the Program, and copy and distribute such modifications
|
||||
or work under the terms of Section 1 above, provided that you also meet all of
|
||||
these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices stating
|
||||
that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in whole or
|
||||
in part contains or is derived from the Program or any part thereof, to be
|
||||
licensed as a whole at no charge to all third parties under the terms of
|
||||
this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively when run,
|
||||
you must cause it, when started running for such interactive use in the
|
||||
most ordinary way, to print or display an announcement including an
|
||||
appropriate copyright notice and a notice that there is no warranty (or
|
||||
else, saying that you provide a warranty) and that users may redistribute
|
||||
the program under these conditions, and telling the user how to view a copy
|
||||
of this License. (Exception: if the Program itself is interactive but does
|
||||
not normally print such an announcement, your work based on the Program is
|
||||
not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If identifiable
|
||||
sections of that work are not derived from the Program, and can be reasonably
|
||||
considered independent and separate works in themselves, then this License, and
|
||||
its terms, do not apply to those sections when you distribute them as separate
|
||||
works. But when you distribute the same sections as part of a whole which is a
|
||||
work based on the Program, the distribution of the whole must be on the terms
|
||||
of this License, whose permissions for other licensees extend to the entire
|
||||
whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest your
|
||||
rights to work written entirely by you; rather, the intent is to exercise the
|
||||
right to control the distribution of derivative or collective works based on
|
||||
the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program with the
|
||||
Program (or with a work based on the Program) on a volume of a storage or
|
||||
distribution medium does not bring the other work under the scope of this
|
||||
License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it, under
|
||||
Section 2) in object code or executable form under the terms of Sections 1 and
|
||||
2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable source
|
||||
code, which must be distributed under the terms of Sections 1 and 2 above
|
||||
on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three years, to
|
||||
give any third party, for a charge no more than your cost of physically
|
||||
performing source distribution, a complete machine-readable copy of the
|
||||
corresponding source code, to be distributed under the terms of Sections 1
|
||||
and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer to
|
||||
distribute corresponding source code. (This alternative is allowed only
|
||||
for noncommercial distribution and only if you received the program in
|
||||
object code or executable form with such an offer, in accord with
|
||||
Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for making
|
||||
modifications to it. For an executable work, complete source code means all
|
||||
the source code for all modules it contains, plus any associated interface
|
||||
definition files, plus the scripts used to control compilation and installation
|
||||
of the executable. However, as a special exception, the source code
|
||||
distributed need not include anything that is normally distributed (in either
|
||||
source or binary form) with the major components (compiler, kernel, and so on)
|
||||
of the operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering access to copy
|
||||
from a designated place, then offering equivalent access to copy the source
|
||||
code from the same place counts as distribution of the source code, even though
|
||||
third parties are not compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program except as
|
||||
expressly provided under this License. Any attempt otherwise to copy, modify,
|
||||
sublicense or distribute the Program is void, and will automatically terminate
|
||||
your rights under this License. However, parties who have received copies, or
|
||||
rights, from you under this License will not have their licenses terminated so
|
||||
long as such parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not signed it.
|
||||
However, nothing else grants you permission to modify or distribute the Program
|
||||
or its derivative works. These actions are prohibited by law if you do not
|
||||
accept this License. Therefore, by modifying or distributing the Program (or
|
||||
any work based on the Program), you indicate your acceptance of this License to
|
||||
do so, and all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the Program),
|
||||
the recipient automatically receives a license from the original licensor to
|
||||
copy, distribute or modify the Program subject to these terms and conditions.
|
||||
You may not impose any further restrictions on the recipients' exercise of the
|
||||
rights granted herein. You are not responsible for enforcing compliance by
|
||||
third parties to this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues), conditions
|
||||
are imposed on you (whether by court order, agreement or otherwise) that
|
||||
contradict the conditions of this License, they do not excuse you from the
|
||||
conditions of this License. If you cannot distribute so as to satisfy
|
||||
simultaneously your obligations under this License and any other pertinent
|
||||
obligations, then as a consequence you may not distribute the Program at all.
|
||||
For example, if a patent license would not permit royalty-free redistribution
|
||||
of the Program by all those who receive copies directly or indirectly through
|
||||
you, then the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under any
|
||||
particular circumstance, the balance of the section is intended to apply and
|
||||
the section as a whole is intended to apply in other circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any patents or
|
||||
other property right claims or to contest validity of any such claims; this
|
||||
section has the sole purpose of protecting the integrity of the free software
|
||||
distribution system, which is implemented by public license practices. Many
|
||||
people have made generous contributions to the wide range of software
|
||||
distributed through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing to
|
||||
distribute software through any other system and a licensee cannot impose that
|
||||
choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to be a
|
||||
consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in certain
|
||||
countries either by patents or by copyrighted interfaces, the original
|
||||
copyright holder who places the Program under this License may add an explicit
|
||||
geographical distribution limitation excluding those countries, so that
|
||||
distribution is permitted only in or among countries not thus excluded. In
|
||||
such case, this License incorporates the limitation as if written in the body
|
||||
of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions of the
|
||||
General Public License from time to time. Such new versions will be similar in
|
||||
spirit to the present version, but may differ in detail to address new problems
|
||||
or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any later
|
||||
version", you have the option of following the terms and conditions either of
|
||||
that version or of any later version published by the Free Software Foundation.
|
||||
If the Program does not specify a version number of this License, you may
|
||||
choose any version ever published by the Free Software Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free programs
|
||||
whose distribution conditions are different, write to the author to ask for
|
||||
permission. For software which is copyrighted by the Free Software Foundation,
|
||||
write to the Free Software Foundation; we sometimes make exceptions for this.
|
||||
Our decision will be guided by the two goals of preserving the free status of
|
||||
all derivatives of our free software and of promoting the sharing and reuse of
|
||||
software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR
|
||||
THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
|
||||
STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
|
||||
PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
|
||||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
|
||||
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
|
||||
YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
|
||||
ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
|
||||
PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
|
||||
INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
|
||||
BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||
FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER
|
||||
OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest possible
|
||||
use to the public, the best way to achieve this is to make it free software
|
||||
which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest to attach
|
||||
them to the start of each source file to most effectively convey the exclusion
|
||||
of warranty; and each file should have at least the "copyright" line and a
|
||||
pointer to where the full notice is found.
|
||||
|
||||
One line to give the program's name and a brief idea of what it does.
|
||||
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the Free
|
||||
Software Foundation; either version 2 of the License, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program 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 for
|
||||
more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc., 59
|
||||
Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this when it
|
||||
starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author Gnomovision comes
|
||||
with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free
|
||||
software, and you are welcome to redistribute it under certain conditions;
|
||||
type 'show c' for details.
|
||||
|
||||
The hypothetical commands 'show w' and 'show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may be
|
||||
called something other than 'show w' and 'show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary. Here
|
||||
is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
'Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
signature of Ty Coon, 1 April 1989
|
||||
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General Public
|
||||
License instead of this License.
|
||||
|
||||
|
||||
"CLASSPATH" EXCEPTION TO THE GPL
|
||||
|
||||
Certain source files distributed by Sun Microsystems, Inc. are subject to
|
||||
the following clarification and special exception to the GPL, but only where
|
||||
Sun has expressly included in the particular source file's header the words
|
||||
"Sun designates this particular file as subject to the "Classpath" exception
|
||||
as provided by Sun in the LICENSE file that accompanied this code."
|
||||
|
||||
Linking this library statically or dynamically with other modules is making
|
||||
a combined work based on this library. Thus, the terms and conditions of
|
||||
the GNU General Public License cover the whole combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent modules,
|
||||
and to copy and distribute the resulting executable under terms of your
|
||||
choice, provided that you also meet, for each linked independent module,
|
||||
the terms and conditions of the license of that module. An independent
|
||||
module is a module which is not derived from or based on this library. If
|
||||
you modify this library, you may extend this exception to your version of
|
||||
the library, but you are not obligated to do so. If you do not wish to do
|
||||
so, delete this exception statement from your version.
|
@ -1,34 +0,0 @@
|
||||
README:
|
||||
This file should be located at the top of the jdk Mercurial repository.
|
||||
|
||||
See http://openjdk.java.net/ for more information about the OpenJDK.
|
||||
|
||||
Simple Build Instructions:
|
||||
|
||||
1. Download and install a JDK 6 from
|
||||
http://java.sun.com/javase/downloads/index.jsp
|
||||
Set the environment variable ALT_BOOTDIR to the location of this JDK 6.
|
||||
|
||||
2. Download and install the Binary Plugs for the most recent JDK7 from
|
||||
http://download.java.net/openjdk/jdk7/
|
||||
Set the environment variable ALT_BINARY_PLUGS_PATH to the location of
|
||||
these binary plugs.
|
||||
|
||||
3. Either download and install the latest JDK7 from
|
||||
http://download.java.net/openjdk/jdk7/, or build your own complete
|
||||
OpenJDK7 by using the top level Makefile in the OpenJDK Mercurial forest.
|
||||
Set the environment variable ALT_JDK_IMPORT_PATH to the location of
|
||||
this latest JDK7 or OpenJDK7 build.
|
||||
|
||||
4. Check the sanity of doing a build with the current machine:
|
||||
cd make && gnumake sanity
|
||||
See README-builds.html if you run into problems.
|
||||
|
||||
5. Do a partial build of the jdk:
|
||||
cd make && gnumake all
|
||||
|
||||
6. Construct the images:
|
||||
cd make && gnumake images
|
||||
The resulting JDK image should be found in build/*/j2sdk-image
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,28 +0,0 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||
<html>
|
||||
|
||||
<head> <title>OpenJDK README</title> </head>
|
||||
|
||||
<!-- ====================================================== -->
|
||||
<hr noshade="noshade" size="3">
|
||||
<center>
|
||||
<h1>OpenJDK README</h1>
|
||||
</center>
|
||||
|
||||
<!-- ------------------------------------------------------ -->
|
||||
<hr noshade="noshade" size="3">
|
||||
|
||||
<h2>TBD</h2>
|
||||
|
||||
<h2>Building the OpenJDK</h2>
|
||||
|
||||
<p>
|
||||
Refer to <a href="README-builds.html">the OpenJDK Build README</a>
|
||||
for build instructions.
|
||||
|
||||
<!-- ====================================================== -->
|
||||
|
||||
<hr noshade="noshade" size="3">
|
||||
|
||||
</body>
|
||||
</html>
|
File diff suppressed because it is too large
Load Diff
@ -193,7 +193,7 @@ build-jar: $(UNSIGNED_DIR)/sunjce_provider.jar
|
||||
$(UNSIGNED_DIR)/sunjce_provider.jar: build $(JCE_MANIFEST_FILE)
|
||||
$(prep-target)
|
||||
$(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ $(JAR_DIRS) \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
|
||||
@ -253,7 +253,7 @@ endif
|
||||
@$(CD) $(OBFUS_DIR); $(java-vm-cleanup)
|
||||
$(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ \
|
||||
-C $(OBFUS_DIR)/build com \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
$(sign-target)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
|
@ -71,7 +71,7 @@ $(IMJAR): $(FILES_class) $(FILES_copy) $(PROVIDER_CONF_FILE)
|
||||
$(BOOT_JAR_CMD) -cf $@ \
|
||||
-C $(CLASSDESTDIR) com \
|
||||
-C $(CLASSDESTDIR) $(SERVICESDIR) \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
clean::
|
||||
|
@ -71,7 +71,7 @@ $(IMJAR): $(FILES_class) $(FILES_copy) $(PROVIDER_CONF_FILE)
|
||||
$(BOOT_JAR_CMD) -cf $@ \
|
||||
-C $(CLASSDESTDIR) com \
|
||||
-C $(CLASSDESTDIR) $(SERVICESDIR) \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
clean::
|
||||
|
@ -46,7 +46,7 @@ $(BUILDTOOL_JAR_FILE): $(BUILDTOOL_MANIFEST_FILE) \
|
||||
-sourcepath $(BUILDTOOL_SOURCE_ROOT) $(BUILDTOOL_MAIN_SOURCE_FILE)
|
||||
$(BOOT_JAR_CMD) cfm $@ $(BUILDTOOL_MANIFEST_FILE) \
|
||||
-C $(BUILDTOOLCLASSDIR) $(PKGDIR) \
|
||||
$(JAR_JFLAGS) || $(RM) $@
|
||||
$(BOOT_JAR_JFLAGS) || $(RM) $@
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
# Printing out a build tool information line
|
||||
|
@ -86,18 +86,22 @@ HPIS = native
|
||||
#
|
||||
# Default optimization
|
||||
#
|
||||
CC_HIGHEST_OPT = -O3
|
||||
CC_HIGHER_OPT = -O3
|
||||
CC_LOWER_OPT = -O2
|
||||
CC_NO_OPT =
|
||||
|
||||
ifeq ($(PRODUCT), java)
|
||||
_OPT = $(CC_HIGHER_OPT)
|
||||
else
|
||||
_OPT = $(CC_LOWER_OPT)
|
||||
CPPFLAGS_DBG += -DLOGGING
|
||||
ifndef OPTIMIZATION_LEVEL
|
||||
ifeq ($(PRODUCT), java)
|
||||
OPTIMIZATION_LEVEL = HIGHER
|
||||
else
|
||||
OPTIMIZATION_LEVEL = LOWER
|
||||
endif
|
||||
endif
|
||||
|
||||
CC_OPT/NONE =
|
||||
CC_OPT/LOWER = -O2
|
||||
CC_OPT/HIGHER = -O3
|
||||
CC_OPT/HIGHEST = -O3
|
||||
|
||||
CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL))
|
||||
|
||||
# For all platforms, do not omit the frame pointer register usage.
|
||||
# We need this frame pointer to make it easy to walk the stacks.
|
||||
# This should be the default on X86, but ia64 and amd64 may not have this
|
||||
@ -112,18 +116,6 @@ LDFLAGS_COMMON_sparc += -m32 -mcpu=v9
|
||||
CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH))
|
||||
LDFLAGS_COMMON += $(LDFLAGS_COMMON_$(ARCH))
|
||||
|
||||
# Add in platform specific optimizations for all opt levels
|
||||
CC_HIGHEST_OPT += $(_OPT_$(ARCH))
|
||||
CC_HIGHER_OPT += $(_OPT_$(ARCH))
|
||||
CC_LOWER_OPT += $(_OPT_$(ARCH))
|
||||
|
||||
# If NO_OPTIMIZATIONS is defined in the environment, turn all optimzations off
|
||||
ifdef NO_OPTIMIZATIONS
|
||||
CC_HIGHEST_OPT = $(CC_NO_OPT)
|
||||
CC_HIGHER_OPT = $(CC_NO_OPT)
|
||||
CC_LOWER_OPT = $(CC_NO_OPT)
|
||||
endif
|
||||
|
||||
#
|
||||
# Selection of warning messages
|
||||
#
|
||||
@ -162,19 +154,19 @@ ifeq ($(FASTDEBUG), true)
|
||||
endif
|
||||
endif
|
||||
|
||||
CFLAGS_OPT = $(POPT)
|
||||
CFLAGS_OPT = $(CC_OPT)
|
||||
CFLAGS_DBG = $(DEBUG_FLAG)
|
||||
CFLAGS_COMMON += $(CFLAGS_REQUIRED)
|
||||
|
||||
CXXFLAGS_COMMON = $(GLOBAL_KPIC) -DCC_NOEX $(GCC_WARNINGS)
|
||||
CXXFLAGS_OPT = $(POPT)
|
||||
CXXFLAGS_OPT = $(CC_OPT)
|
||||
CXXFLAGS_DBG = $(DEBUG_FLAG)
|
||||
CXXFLAGS_COMMON += $(CFLAGS_REQUIRED)
|
||||
|
||||
# FASTDEBUG: Optimize the code in the -g versions, gives us a faster debug java
|
||||
ifeq ($(FASTDEBUG), true)
|
||||
CFLAGS_DBG += $(CC_LOWER_OPT)
|
||||
CXXFLAGS_DBG += $(CC_LOWER_OPT)
|
||||
CFLAGS_DBG += $(CC_OPT/LOWER)
|
||||
CXXFLAGS_DBG += $(CC_OPT/LOWER)
|
||||
endif
|
||||
|
||||
CPPFLAGS_COMMON = -D$(ARCH) -DARCH='"$(ARCH)"' -DLINUX $(VERSION_DEFINES) \
|
||||
@ -186,6 +178,9 @@ endif
|
||||
|
||||
CPPFLAGS_OPT =
|
||||
CPPFLAGS_DBG = -DDEBUG
|
||||
ifneq ($(PRODUCT), java)
|
||||
CPPFLAGS_DBG += -DLOGGING
|
||||
endif
|
||||
|
||||
ifdef LIBRARY
|
||||
# Libraries need to locate other libraries at runtime, and you can tell
|
||||
|
@ -86,15 +86,16 @@ HPIS = native
|
||||
#
|
||||
# Java default optimization (-x04/-O2) etc. Applies to the VM.
|
||||
#
|
||||
ifeq ($(PRODUCT), java)
|
||||
_OPT = $(CC_HIGHER_OPT)
|
||||
else
|
||||
_OPT = $(CC_LOWER_OPT)
|
||||
CPPFLAGS_DBG += -DLOGGING -DDBINFO
|
||||
ifndef OPTIMIZATION_LEVEL
|
||||
ifeq ($(PRODUCT), java)
|
||||
OPTIMIZATION_LEVEL = HIGHER
|
||||
else
|
||||
OPTIMIZATION_LEVEL = LOWER
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# If -Xa is in CFLAGS_COMMON it will end up ahead of $(POPT) for the
|
||||
# If -Xa is in CFLAGS_COMMON it will end up ahead of $(CC_OPT) for the
|
||||
# optimized build, and that ordering of the flags completely freaks
|
||||
# out cc. Hence, -Xa is instead in each CFLAGS variant.
|
||||
#
|
||||
@ -123,8 +124,8 @@ endif
|
||||
#
|
||||
# Debug flag for C and C++ compiler
|
||||
#
|
||||
CFLAGS_DEBUG_OPTION=-g
|
||||
CXXFLAGS_DEBUG_OPTION=-g
|
||||
CFLAGS_DEBUG_OPTION = -g $(CC_OPT/NONE)
|
||||
CXXFLAGS_DEBUG_OPTION = -g $(CXX_OPT/NONE)
|
||||
|
||||
# Turn off -g if we are doing tcov build
|
||||
ifdef TCOV_BUILD
|
||||
@ -142,9 +143,8 @@ endif
|
||||
# Performance/size of files should be about the same, maybe smaller.
|
||||
#
|
||||
ifeq ($(FASTDEBUG), true)
|
||||
CC_FASTDEBUG_OPT = $(CC_LOWER_OPT)
|
||||
CFLAGS_DEBUG_OPTION = -g $(CC_FASTDEBUG_OPT)
|
||||
CXXFLAGS_DEBUG_OPTION = -g0 $(CC_FASTDEBUG_OPT)
|
||||
CFLAGS_DEBUG_OPTION = -g $(CC_OPT/LOWER)
|
||||
CXXFLAGS_DEBUG_OPTION = -g0 $(CXX_OPT/LOWER)
|
||||
endif
|
||||
|
||||
CFLAGS_COMMON = -L$(OBJDIR)
|
||||
@ -160,7 +160,7 @@ CFLAGS_COMMON += -errshort=tags
|
||||
CXXFLAGS_COMMON += -errtags=yes
|
||||
|
||||
# Optimization flags
|
||||
CFLAGS_OPT = $(POPT)
|
||||
CFLAGS_OPT = $(CC_OPT)
|
||||
|
||||
# Debug version flags
|
||||
CFLAGS_DBG = $(CFLAGS_DEBUG_OPTION)
|
||||
@ -197,7 +197,7 @@ ifeq ($(COMPILER_WARNINGS_FATAL),true)
|
||||
CXXFLAGS_COMMON += -errwarn=%all
|
||||
endif
|
||||
|
||||
CXXFLAGS_OPT = $(POPT)
|
||||
CXXFLAGS_OPT = $(CXX_OPT)
|
||||
CXXFLAGS_DBG = $(CXXFLAGS_DEBUG_OPTION)
|
||||
CXXFLAGS_COMMON += $(CFLAGS_REQUIRED)
|
||||
|
||||
@ -267,6 +267,10 @@ CPPFLAGS_COMMON = -D__solaris__ -D$(ARCH_FAMILY)
|
||||
CPPFLAGS_OPT = -DNDEBUG
|
||||
CPPFLAGS_DBG = -DDEBUG
|
||||
|
||||
ifneq ($(PRODUCT), java)
|
||||
CPPFLAGS_DBG += -DLOGGING -DDBINFO
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH_FAMILY), i586)
|
||||
# The macro _LITTLE_ENDIAN needs to be defined the same to avoid the
|
||||
# Sun C compiler warning message: warning: macro redefined: _LITTLE_ENDIAN
|
||||
@ -410,63 +414,151 @@ endif
|
||||
# Different "levels" of optimization.
|
||||
#
|
||||
ifeq ($(CC_VERSION),gcc)
|
||||
CC_HIGHEST_OPT = -O3
|
||||
CC_HIGHER_OPT = -O3
|
||||
CC_LOWER_OPT = -O2
|
||||
|
||||
CC_OPT/NONE =
|
||||
CC_OPT/LOWER = -O2
|
||||
CC_OPT/HIGHER = -O3
|
||||
CC_OPT/HIGHEST = -O3
|
||||
|
||||
CXX_OPT/NONE =
|
||||
CXX_OPT/LOWER = -O2
|
||||
CXX_OPT/HIGHER = -O3
|
||||
CXX_OPT/HIGHEST = -O3
|
||||
|
||||
CFLAGS_REQUIRED_i586 += -fno-omit-frame-pointer
|
||||
CFLAGS_REQUIRED_amd64 += -fno-omit-frame-pointer
|
||||
|
||||
# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
|
||||
# (See Rules.gmk) May need to wait for gcc 5?
|
||||
AUTOMATIC_PCH_OPTION =
|
||||
|
||||
else
|
||||
|
||||
# Highest could be -xO5, but indications are that -xO5 should be reserved
|
||||
# for a per-file use, on sources with known performance impacts.
|
||||
CC_HIGHEST_OPT = -xO4
|
||||
CC_HIGHER_OPT = -xO4
|
||||
CC_LOWER_OPT = -xO2
|
||||
OPT_LEVEL/LOWER = 2
|
||||
OPT_LEVEL/HIGHER = 4
|
||||
OPT_LEVEL/HIGHEST = 4
|
||||
|
||||
CC_OPT/NONE =
|
||||
CC_OPT/LOWER = $(OPT_LEVEL/LOWER:%=-xO%)
|
||||
CC_OPT/HIGHER = $(OPT_LEVEL/HIGHER:%=-xO%)
|
||||
CC_OPT/HIGHEST = $(OPT_LEVEL/HIGHEST:%=-xO%)
|
||||
|
||||
CXX_OPT/NONE =
|
||||
CXX_OPT/LOWER = $(OPT_LEVEL/LOWER:%=-xO%)
|
||||
CXX_OPT/HIGHER = $(OPT_LEVEL/HIGHER:%=-xO%)
|
||||
CXX_OPT/HIGHEST = $(OPT_LEVEL/HIGHEST:%=-xO%)
|
||||
|
||||
# We need stack frames at all times
|
||||
USE_XKEEPFRAME_OPTION = false
|
||||
ifeq ($(USE_XKEEPFRAME_OPTION),true)
|
||||
|
||||
# Unknown spelling on this option at this time (Maybe in SS13?)
|
||||
CC_XKEEPFRAME_OPTIONS = -xkeepframe
|
||||
CXX_XKEEPFRAME_OPTIONS = -xkeepframe
|
||||
|
||||
else
|
||||
|
||||
# On X86, make sure tail call optimization is off
|
||||
# The z and y are the tail call optimizations.
|
||||
ifeq ($(ARCH_FAMILY), i586)
|
||||
ifeq ($(shell $(EXPR) $(CC_VER) \> 5.8), 1)
|
||||
# Somehow, tail call optimization is creeping in.
|
||||
# Make sure it is off.
|
||||
# WARNING: These may cause compiler warnings about duplicate -O options
|
||||
CC_XKEEPFRAME_OPTIONS += -Wu,-O$(OPT_LEVEL/$(OPTIMIZATION_LEVEL))~yz
|
||||
CXX_XKEEPFRAME_OPTIONS += -Qoption ube -O$(OPT_LEVEL/$(OPTIMIZATION_LEVEL))~yz
|
||||
endif
|
||||
endif
|
||||
|
||||
# On i586 we need to tell the code generator to ALWAYS use a
|
||||
# frame pointer.
|
||||
ifeq ($(ARCH_FAMILY), i586)
|
||||
# Note that in 5.7, this is done with -xregs=no%frameptr
|
||||
ifeq ($(CC_VER), 5.5)
|
||||
# It's not exactly clear when this optimization kicks in, the
|
||||
# current assumption is -xO4 or greater and for C++ with
|
||||
# the -features=no%except option and -xO4 and greater.
|
||||
# Bottom line is, we ALWAYS want a frame pointer!
|
||||
CC_XKEEPFRAME_OPTIONS += -Wu,-Z~B
|
||||
CXX_XKEEPFRAME_OPTIONS += -Qoption ube -Z~B
|
||||
endif
|
||||
ifeq ($(shell $(EXPR) $(CC_VER) \> 5.6), 1)
|
||||
# Do NOT use frame pointer register as a general purpose opt register
|
||||
CC_OPT/NONE += -xregs=no%frameptr
|
||||
CXX_OPT/NONE += -xregs=no%frameptr
|
||||
CC_XKEEPFRAME_OPTIONS += -xregs=no%frameptr
|
||||
CXX_XKEEPFRAME_OPTIONS += -xregs=no%frameptr
|
||||
endif
|
||||
endif
|
||||
|
||||
# Optimizer for sparc needs to be told not to do certain things
|
||||
# related to frames or save instructions.
|
||||
ifeq ($(ARCH_FAMILY), sparc)
|
||||
# Do not use save instructions instead of add instructions
|
||||
# This was an optimization starting in SC5.0 that made it hard for us to
|
||||
# find the "save" instruction (which got turned into an "add")
|
||||
CC_XKEEPFRAME_OPTIONS += -Wc,-Qrm-s
|
||||
CXX_XKEEPFRAME_OPTIONS += -Qoption cg -Qrm-s
|
||||
# Don't allow tail call code optimization. Started in SC5.0.
|
||||
# We don't like code of this form:
|
||||
# save
|
||||
# <code>
|
||||
# call foo
|
||||
# restore
|
||||
# because we can't tell if the method will have a stack frame
|
||||
# and register windows or not.
|
||||
CC_XKEEPFRAME_OPTIONS += -Wc,-Qiselect-T0
|
||||
CXX_XKEEPFRAME_OPTIONS += -Qoption cg -Qiselect-T0
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
# Extra options used with HIGHEST
|
||||
#
|
||||
# WARNING: Use of _OPT=$(CC_HIGHEST_OPT) in your Makefile needs to be
|
||||
# WARNING: Use of OPTIMIZATION_LEVEL=HIGHEST in your Makefile needs to be
|
||||
# done with care, there are some assumptions below that need to
|
||||
# be understood about the use of pointers, and IEEE behavior.
|
||||
#
|
||||
# Use non-standard floating point mode (not IEEE 754)
|
||||
CC_HIGHEST_OPT += -fns
|
||||
CC_HIGHEST_EXTRAS += -fns
|
||||
# Do some simplification of floating point arithmetic (not IEEE 754)
|
||||
CC_HIGHEST_OPT += -fsimple
|
||||
CC_HIGHEST_EXTRAS += -fsimple
|
||||
# Use single precision floating point with 'float'
|
||||
CC_HIGHEST_OPT += -fsingle
|
||||
CC_HIGHEST_EXTRAS += -fsingle
|
||||
# Assume memory references via basic pointer types do not alias
|
||||
# (Source with excessing pointer casting and data access with mixed
|
||||
# pointer types are not recommended)
|
||||
CC_HIGHEST_OPT += -xalias_level=basic
|
||||
CC_HIGHEST_EXTRAS += -xalias_level=basic
|
||||
# Use intrinsic or inline versions for math/std functions
|
||||
# (If you expect perfect errno behavior, do not use this)
|
||||
CC_HIGHEST_OPT += -xbuiltin=%all
|
||||
CC_HIGHEST_EXTRAS += -xbuiltin=%all
|
||||
# Loop data dependency optimizations (need -xO3 or higher)
|
||||
CC_HIGHEST_OPT += -xdepend
|
||||
CC_HIGHEST_EXTRAS += -xdepend
|
||||
# Pointer parameters to functions do not overlap
|
||||
# (Similar to -xalias_level=basic usage, but less obvious sometimes.
|
||||
# If you pass in multiple pointers to the same data, do not use this)
|
||||
CC_HIGHEST_OPT += -xrestrict
|
||||
CC_HIGHEST_EXTRAS += -xrestrict
|
||||
# Inline some library routines
|
||||
# (If you expect perfect errno behavior, do not use this)
|
||||
CC_HIGHEST_OPT += -xlibmil
|
||||
CC_HIGHEST_EXTRAS += -xlibmil
|
||||
# Use optimized math routines
|
||||
# (If you expect perfect errno behavior, do not use this)
|
||||
# Can cause undefined external on Solaris 8 X86 on __sincos, removing for now
|
||||
# CC_HIGHEST_OPT += -xlibmopt
|
||||
# CC_HIGHEST_EXTRAS += -xlibmopt
|
||||
ifeq ($(ARCH_FAMILY), sparc)
|
||||
# Assume at most 8byte alignment, raise SIGBUS on error
|
||||
### Presents an ABI issue with customer JNI libs?
|
||||
####CC_HIGHEST_OPT += -xmemalign=8s
|
||||
####CC_HIGHEST_EXTRAS += -xmemalign=8s
|
||||
# Automatic prefetch instructions, explicit prefetch macros
|
||||
CC_HIGHEST_OPT += -xprefetch=auto,explicit
|
||||
CC_HIGHEST_EXTRAS += -xprefetch=auto,explicit
|
||||
# Pick ultra as the chip to optimize to
|
||||
CC_HIGHEST_OPT += -xchip=ultra
|
||||
CC_HIGHEST_EXTRAS += -xchip=ultra
|
||||
endif
|
||||
ifeq ($(ARCH), i586)
|
||||
# Pick pentium as the chip to optimize to
|
||||
CC_HIGHEST_OPT += -xchip=pentium
|
||||
CC_HIGHEST_EXTRAS += -xchip=pentium
|
||||
endif
|
||||
ifdef LIBRARY
|
||||
# The Solaris CBE (Common Build Environment) requires that the use
|
||||
@ -476,9 +568,6 @@ else
|
||||
CFLAGS_REQUIRED_sparcv9 += -xregs=no%appl
|
||||
endif
|
||||
ifeq ($(shell $(EXPR) $(CC_VER) \> 5.6), 1)
|
||||
# Do NOT use the frame pointer register as a general purpose opt register
|
||||
CFLAGS_REQUIRED_i586 += -xregs=no%frameptr
|
||||
CFLAGS_REQUIRED_amd64 += -xregs=no%frameptr
|
||||
# We MUST allow data alignment of 4 for sparc V8 (32bit)
|
||||
# Presents an ABI issue with customer JNI libs? We must be able to
|
||||
# to handle 4byte aligned objects? (rare occurance, but possible?)
|
||||
@ -492,77 +581,28 @@ else
|
||||
# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
|
||||
# (See Rules.gmk) The SS11 -xpch=auto* options appear to be broken.
|
||||
AUTOMATIC_PCH_OPTION =
|
||||
|
||||
# Add in keep frame options
|
||||
CC_OPT/LOWER += $(CC_XKEEPFRAME_OPTIONS)
|
||||
CC_OPT/HIGHER += $(CC_XKEEPFRAME_OPTIONS)
|
||||
CC_OPT/HIGHEST += $(CC_XKEEPFRAME_OPTIONS)
|
||||
CXX_OPT/LOWER += $(CXX_XKEEPFRAME_OPTIONS)
|
||||
CXX_OPT/HIGHER += $(CXX_XKEEPFRAME_OPTIONS)
|
||||
CXX_OPT/HIGHEST += $(CXX_XKEEPFRAME_OPTIONS)
|
||||
|
||||
# Add in highest optimization settings
|
||||
CC_OPT/HIGHEST += $(CC_HIGHEST_EXTRAS)
|
||||
CXX_OPT/HIGHEST += $(CC_HIGHEST_EXTRAS)
|
||||
|
||||
endif
|
||||
CC_NO_OPT =
|
||||
|
||||
# If NO_OPTIMIZATIONS is defined in the environment, turn all optimzations off
|
||||
ifdef NO_OPTIMIZATIONS
|
||||
CC_HIGHEST_OPT = $(CC_NO_OPT)
|
||||
CC_HIGHER_OPT = $(CC_NO_OPT)
|
||||
CC_LOWER_OPT = $(CC_NO_OPT)
|
||||
endif
|
||||
# Default optimization settings based on level.
|
||||
CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL))
|
||||
CXX_OPT = $(CXX_OPT/$(OPTIMIZATION_LEVEL))
|
||||
|
||||
# Flags required all the time
|
||||
CFLAGS_REQUIRED = $(CFLAGS_REQUIRED_$(ARCH))
|
||||
|
||||
# Add processor specific options for optimizations
|
||||
CC_HIGHEST_OPT += $(_OPT_$(ARCH))
|
||||
CC_HIGHER_OPT += $(_OPT_$(ARCH))
|
||||
CC_LOWER_OPT += $(_OPT_$(ARCH))
|
||||
|
||||
# Secret compiler optimization options that should be in the above macros
|
||||
# but since they differ in format from C to C++, are added into the C or
|
||||
# C++ specific macros for compiler flags.
|
||||
#
|
||||
# On i586 we need to tell the code generator to ALWAYS use a
|
||||
# frame pointer.
|
||||
ifeq ($(ARCH_FAMILY), i586)
|
||||
# Note that in 5.7, this is done with -xregs=no%frameptr
|
||||
ifeq ($(CC_VER), 5.5)
|
||||
# It's not exactly clear when this optimization kicks in, the
|
||||
# current assumption is -xO4 or greater and for C++ with
|
||||
# the -features=no%except option and -xO4 and greater.
|
||||
# Bottom line is, we ALWAYS want a frame pointer!
|
||||
CXXFLAGS_OPT += -Qoption ube -Z~B
|
||||
CFLAGS_OPT += -Wu,-Z~B
|
||||
ifeq ($(FASTDEBUG), true)
|
||||
CXXFLAGS_DBG += -Qoption ube -Z~B
|
||||
CFLAGS_DBG += -Wu,-Z~B
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
#
|
||||
# Optimizer for sparc needs to be told not to do certain things
|
||||
# related to frames or save instructions.
|
||||
ifeq ($(ARCH_FAMILY), sparc)
|
||||
# NOTE: Someday the compilers will provide a high-level option for this.
|
||||
# Use save instructions instead of add instructions
|
||||
# This was an optimization starting in SC5.0 that made it hard for us to
|
||||
# find the "save" instruction (which got turned into an "add")
|
||||
CXXFLAGS_OPT += -Qoption cg -Qrm-s
|
||||
CFLAGS_OPT += -Wc,-Qrm-s
|
||||
ifeq ($(FASTDEBUG), true)
|
||||
CXXFLAGS_DBG += -Qoption cg -Qrm-s
|
||||
CFLAGS_DBG += -Wc,-Qrm-s
|
||||
endif
|
||||
#
|
||||
# NOTE: Someday the compilers will provide a high-level option for this.
|
||||
# Don't allow tail call code optimization. Started in SC5.0.
|
||||
# We don't like code of this form:
|
||||
# save
|
||||
# <code>
|
||||
# call foo
|
||||
# restore
|
||||
# because we can't tell if the method will have a stack frame
|
||||
# and register windows or not.
|
||||
CXXFLAGS_OPT += -Qoption cg -Qiselect-T0
|
||||
CFLAGS_OPT += -Wc,-Qiselect-T0
|
||||
ifeq ($(FASTDEBUG), true)
|
||||
CXXFLAGS_DBG += -Qoption cg -Qiselect-T0
|
||||
CFLAGS_DBG += -Wc,-Qiselect-T0
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# Path and option to link against the VM, if you have to. Note that
|
||||
# there are libraries that link against only -ljava, but they do get
|
||||
|
@ -84,6 +84,15 @@ EXTRA_LFLAGS += /LIBPATH:$(DXSDK_LIB_PATH)
|
||||
#
|
||||
# Default optimization
|
||||
#
|
||||
|
||||
ifndef OPTIMIZATION_LEVEL
|
||||
ifeq ($(PRODUCT), java)
|
||||
OPTIMIZATION_LEVEL = HIGHER
|
||||
else
|
||||
OPTIMIZATION_LEVEL = LOWER
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(CC_VERSION),msvc)
|
||||
# Visual Studio .NET 2003 or VS2003 compiler option definitions:
|
||||
# -O1 Favors reduced size over speed (-Og -Os -Oy -Ob2 -Gs -GF -Gy)
|
||||
@ -113,21 +122,28 @@ ifeq ($(CC_VERSION),msvc)
|
||||
# NOTE: With VC6, -Ox, -O1, and -O2 used -Ob1, not -Ob2.
|
||||
# NOTE: With VC6, -O1 and -O2 used -Gf, not -GF.
|
||||
#
|
||||
|
||||
CC_OPT/NONE = -Od
|
||||
CC_OPT/LOWER = -O2
|
||||
CC_OPT/HIGHER = -O3
|
||||
CC_OPT/HIGHEST = -O3
|
||||
|
||||
ifeq ($(COMPILER_VERSION), VC6)
|
||||
# VC6 (6.2) msvc compiler (the way Tiger and early Mustang were built)
|
||||
# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
|
||||
AUTOMATIC_PCH_OPTION =
|
||||
GX_OPTION = -GX
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
CC_HIGHEST_OPT = -Ox -Gy -Os -GB
|
||||
CC_HIGHER_OPT = -Ox -Gy -Os -GB
|
||||
CC_LOWER_OPT = -Ox -Gy -Os -GB
|
||||
CC_OPT/HIGHEST = -Ox -Gy -Os -GB
|
||||
CC_OPT/HIGHER = -Ox -Gy -Os -GB
|
||||
CC_OPT/LOWER = -Ox -Gy -Os -GB
|
||||
else
|
||||
CC_HIGHEST_OPT = -Ox -Gy -Op
|
||||
CC_HIGHER_OPT = -Ox -Gy -Op
|
||||
CC_LOWER_OPT = -Ox -Gy -Op
|
||||
CC_OPT/HIGHEST = -Ox -Gy -Op
|
||||
CC_OPT/HIGHER = -Ox -Gy -Op
|
||||
CC_OPT/LOWER = -Ox -Gy -Op
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(COMPILER_VERSION), VS2003)
|
||||
# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
|
||||
AUTOMATIC_PCH_OPTION = -YX
|
||||
@ -135,53 +151,45 @@ ifeq ($(CC_VERSION),msvc)
|
||||
GX_OPTION = -GX
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
# Lowered opt level to try and reduce footprint, dll size especially.
|
||||
# Was: CC_HIGHEST_OPT = -O2 -G6
|
||||
# Was: CC_HIGHER_OPT = -O2
|
||||
CC_HIGHEST_OPT = -O2
|
||||
CC_HIGHER_OPT = -O1
|
||||
CC_LOWER_OPT = -O1
|
||||
# Was: CC_OPT/HIGHEST = -O2 -G6
|
||||
# Was: CC_OPT/HIGHER = -O2
|
||||
CC_OPT/HIGHEST = -O2
|
||||
CC_OPT/HIGHER = -O1
|
||||
CC_OPT/LOWER = -O1
|
||||
else
|
||||
CC_HIGHEST_OPT = -O2 -Op
|
||||
CC_HIGHER_OPT = -O2 -Op
|
||||
CC_LOWER_OPT = -O1 -Op
|
||||
CC_OPT/HIGHEST = -O2 -Op
|
||||
CC_OPT/HIGHER = -O2 -Op
|
||||
CC_OPT/LOWER = -O1 -Op
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(COMPILER_VERSION), VS2005)
|
||||
# Automatic precompiled header option to use (if COMPILE_APPROACH=batch)
|
||||
AUTOMATIC_PCH_OPTION =
|
||||
# VS2005 compiler, only with Platform SDK right now?
|
||||
GX_OPTION = -EHsc
|
||||
ifeq ($(ARCH_DATA_MODEL), 32)
|
||||
CC_HIGHEST_OPT = -O2
|
||||
CC_HIGHER_OPT = -O1
|
||||
CC_LOWER_OPT = -O1
|
||||
CC_OPT/HIGHEST = -O2
|
||||
CC_OPT/HIGHER = -O1
|
||||
CC_OPT/LOWER = -O1
|
||||
else
|
||||
CC_HIGHEST_OPT = -O2
|
||||
CC_HIGHER_OPT = -O1
|
||||
CC_LOWER_OPT = -O1
|
||||
CC_OPT/HIGHEST = -O2
|
||||
CC_OPT/HIGHER = -O1
|
||||
CC_OPT/LOWER = -O1
|
||||
endif
|
||||
endif
|
||||
CC_NO_OPT = -Od
|
||||
|
||||
else # CC_VERSION
|
||||
|
||||
# GCC not supported, but left for historical reference...
|
||||
CC_HIGHEST_OPT = -O3
|
||||
CC_HIGHER_OPT = -O2
|
||||
CC_LOWER_OPT = -O2
|
||||
CC_NO_OPT =
|
||||
CC_OPT/NONE =
|
||||
CC_OPT/LOWER = -O2
|
||||
CC_OPT/HIGHER = -O2
|
||||
CC_OPT/HIGHEST = -O3
|
||||
|
||||
endif
|
||||
|
||||
# If NO_OPTIMIZATIONS is defined in the environment, turn all optimzations off
|
||||
ifdef NO_OPTIMIZATIONS
|
||||
CC_HIGHEST_OPT = $(CC_NO_OPT)
|
||||
CC_HIGHER_OPT = $(CC_NO_OPT)
|
||||
CC_LOWER_OPT = $(CC_NO_OPT)
|
||||
endif
|
||||
|
||||
ifeq ($(PRODUCT), java)
|
||||
_OPT = $(CC_HIGHER_OPT)
|
||||
else
|
||||
_OPT = $(CC_LOWER_OPT)
|
||||
endif
|
||||
CC_OPT = $(CC_OPT/$(OPTIMIZATION_LEVEL))
|
||||
|
||||
# Select the runtime support library carefully, need to be consistent
|
||||
#
|
||||
@ -233,7 +241,7 @@ ifeq ($(CC_VERSION),msvc)
|
||||
# Use static link for the C++ runtime (so msvcp71.dll not needed)
|
||||
#
|
||||
CFLAGS_COMMON += -Zi -nologo
|
||||
CFLAGS_OPT = $(POPT)
|
||||
CFLAGS_OPT = $(CC_OPT)
|
||||
CFLAGS_DBG = -Od $(MS_RUNTIME_DEBUG_OPTION)
|
||||
|
||||
# Starting from VS2005 the wchar_t is handled as a built-in C/C++ data type
|
||||
|
@ -482,11 +482,6 @@ PKGDIR = $(subst .,/,$(PACKAGE))
|
||||
#
|
||||
include $(JDK_MAKE_SHARED_DIR)/Defs-java.gmk
|
||||
|
||||
#
|
||||
# Set opt level to ALT_OPT if set otherwise _OPT
|
||||
#
|
||||
POPT = $(_OPT$(ALT_OPT))$(ALT_OPT)
|
||||
|
||||
#
|
||||
# Convenient macros
|
||||
#
|
||||
|
@ -251,7 +251,7 @@ $(DEMO_JAR): \
|
||||
@$(DEMO_JAVAC_INPUT)
|
||||
$(BOOT_JAR_CMD) -cfm $@ $(DEMO_MANIFEST) \
|
||||
-C $(DEMO_JAR_IMAGE) . \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
endif
|
||||
@ -317,7 +317,11 @@ bundles: $(DEMO_BUILD_SRCZIP)
|
||||
# Applets are special, no jar file, no src.zip, everything expanded.
|
||||
ifdef DEMO_IS_APPLET
|
||||
@$(ECHO) "Expanding jar file into demos area at $(DEMO_DESTDIR)"
|
||||
( $(CD) $(DEMO_DESTDIR) && $(BOOT_JAR_CMD) -xfv $(DEMONAME).jar && $(RM) -r META-INF $(DEMONAME).jar )
|
||||
( $(CD) $(DEMO_DESTDIR) && \
|
||||
$(BOOT_JAR_CMD) -xfv $(DEMONAME).jar \
|
||||
$(BOOT_JAR_JFLAGS) && \
|
||||
$(RM) -r META-INF $(DEMONAME).jar && \
|
||||
$(java-vm-cleanup) )
|
||||
@( $(CD) $(DEMO_DESTDIR) && $(java-vm-cleanup) )
|
||||
@$(ECHO) "Expanding source into demos area at $(DEMO_DESTDIR)"
|
||||
( $(CD) $(DEMO_DESTDIR) && $(UNZIP) -o src.zip && $(RM) src.zip )
|
||||
|
@ -238,7 +238,7 @@ else # PLATFORM
|
||||
#
|
||||
$(ACTUAL_LIBRARY):: $(COMPILE_FILES_o) $(FILES_m) $(FILES_reorder)
|
||||
@$(prep-target)
|
||||
@$(ECHO) "STATS: LIBRARY=$(LIBRARY), PRODUCT=$(PRODUCT), _OPT=$(_OPT)"
|
||||
@$(ECHO) "STATS: LIBRARY=$(LIBRARY), PRODUCT=$(PRODUCT), OPTIMIZATION_LEVEL=$(OPTIMIZATION_LEVEL)"
|
||||
@$(ECHO) "Rebuilding $@ because of $?"
|
||||
ifeq ($(LIBRARY), fdlibm)
|
||||
$(AR) -r $@ $(FILES_o)
|
||||
|
@ -63,15 +63,6 @@ endif
|
||||
|
||||
JTG_DOCS = $(JDK_TOPDIR)/src/solaris/doc
|
||||
|
||||
# Choose the right set of documents for the images
|
||||
ifdef OPENJDK
|
||||
SHARE_JDK_DOC_SRC = $(JDK_TOPDIR)/make
|
||||
SHARE_JRE_DOC_SRC = $(JDK_TOPDIR)/make
|
||||
else
|
||||
SHARE_JDK_DOC_SRC = $(CLOSED_SHARE_SRC)/doc/jdk
|
||||
SHARE_JRE_DOC_SRC = $(CLOSED_SHARE_SRC)/doc/jre
|
||||
endif
|
||||
|
||||
#We use this for man page header
|
||||
jdkversion := $(JDK_MAJOR_VERSION).$(JDK_MINOR_VERSION).$(JDK_MICRO_VERSION)
|
||||
|
||||
@ -81,13 +72,20 @@ ifeq ($(PLATFORM), windows)
|
||||
endif
|
||||
|
||||
# The base names of all the license and document files for the jdk and jre
|
||||
# (These files get placed in the jdk and jre install images)
|
||||
ifdef OPENJDK
|
||||
# Where to find these files
|
||||
SHARE_JDK_DOC_SRC = $(JDK_TOPDIR)
|
||||
SHARE_JRE_DOC_SRC = $(JDK_TOPDIR)
|
||||
# Same files for jdk and jre, no name changes
|
||||
LICENSE_DOCLIST_JDK = LICENSE ASSEMBLY_EXCEPTION
|
||||
LICENSE_DOCLIST_JRE = LICENSE ASSEMBLY_EXCEPTION
|
||||
OTHER_DOCLIST_JDK = README.html THIRD_PARTY_README
|
||||
OTHER_DOCLIST_JRE = README.html THIRD_PARTY_README
|
||||
OTHER_DOCLIST_JDK = THIRD_PARTY_README
|
||||
OTHER_DOCLIST_JRE = THIRD_PARTY_README
|
||||
else
|
||||
# Where to find these files
|
||||
SHARE_JDK_DOC_SRC = $(CLOSED_SHARE_SRC)/doc/jdk
|
||||
SHARE_JRE_DOC_SRC = $(CLOSED_SHARE_SRC)/doc/jre
|
||||
# Select the pre-release or FCS license version based on the build milestone.
|
||||
LICENSE_VERSION=.pre
|
||||
ifeq ($(MILESTONE), fcs)
|
||||
@ -662,7 +660,7 @@ $(RES_JAR_ARGLIST): $(RES_JAR_FILELIST)
|
||||
$(RESOURCES_JAR): $(RES_JAR_ARGLIST) $(JAR_MANIFEST_FILE)
|
||||
$(prep-target)
|
||||
$(BOOT_JAR_CMD) c0mf $(JAR_MANIFEST_FILE) $@ \
|
||||
@$(RES_JAR_ARGLIST) $(JAR_JFLAGS)
|
||||
@$(RES_JAR_ARGLIST) $(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
# Create jsse.jar containing SunJSSE implementation classes
|
||||
@ -671,7 +669,7 @@ $(JSSE_JAR): $(JAR_MANIFEST_FILE)
|
||||
$(prep-target)
|
||||
$(BOOT_JAR_CMD) c0mf $(JAR_MANIFEST_FILE) $@ \
|
||||
$(JSSE_CLASSES_DIRS:%=-C $(CLASSBINDIR) %) \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
# Create sec-bin.zip
|
||||
@ -721,7 +719,7 @@ $(RT_JAR_ARGLIST): $(RT_JAR_FILELIST)
|
||||
$(RT_JAR): $(RT_JAR_ARGLIST) $(JAR_MANIFEST_FILE)
|
||||
$(prep-target)
|
||||
$(BOOT_JAR_CMD) c0mf $(JAR_MANIFEST_FILE) $@ \
|
||||
@$(RT_JAR_ARGLIST) $(JAR_JFLAGS)
|
||||
@$(RT_JAR_ARGLIST) $(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
# Meta-index construction to make core class loaders lazier
|
||||
@ -955,7 +953,7 @@ initial-image-jdk:: initial-image-jdk-setup \
|
||||
@#
|
||||
$(BOOT_JAR_CMD) c0f $(LIBDIR)/tools.jar $(addprefix \
|
||||
-C $(CLASSBINDIR) , $(TOOLS)) \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
$(CP) $(LIBDIR)/tools.jar $(JDK_IMAGE_DIR)/lib/tools.jar
|
||||
@#
|
||||
@ -968,7 +966,7 @@ initial-image-jdk:: initial-image-jdk-setup \
|
||||
-Acom.sun.tools.javac.sym.Dest=$(OUTPUTDIR)/symbols/META-INF/sym/rt.jar \
|
||||
$(CORE_PKGS) $(NON_CORE_PKGS) $(EXCLUDE_PROPWARN_PKGS)
|
||||
$(BOOT_JAR_CMD) c0f $(LIBDIR)/ct.sym \
|
||||
-C $(OUTPUTDIR)/symbols META-INF $(JAR_JFLAGS)
|
||||
-C $(OUTPUTDIR)/symbols META-INF $(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
$(CP) $(LIBDIR)/ct.sym $(JDK_IMAGE_DIR)/lib/ct.sym
|
||||
@#
|
||||
@ -1132,11 +1130,11 @@ endef
|
||||
COMPARE_FILTER = | $(EGREP) -v /fastdebug/ | $(EGREP) -v /demo/ | $(EGREP) -v /sample/
|
||||
|
||||
# If a previuous image is provided, no need to install it.
|
||||
ifdef PREVIOUS_JDK_IMAGE
|
||||
ifdef PREVIOUS_RELEASE_IMAGE
|
||||
|
||||
# Just use the pre-installed images
|
||||
PREV_JRE_IMAGE_DIR=$(PREVIOUS_JDK_IMAGE)/jre
|
||||
PREV_JDK_IMAGE_DIR=$(PREVIOUS_JDK_IMAGE)
|
||||
PREV_JRE_IMAGE_DIR=$(PREVIOUS_RELEASE_IMAGE)/jre
|
||||
PREV_JDK_IMAGE_DIR=$(PREVIOUS_RELEASE_IMAGE)
|
||||
|
||||
else
|
||||
|
||||
|
@ -185,7 +185,8 @@ endef # import-binary-plug-file
|
||||
define import-binary-plug-classes
|
||||
@$(MKDIR) -p $(CLASSDESTDIR)
|
||||
@$(CAT) $1 | $(SED) -e 's/^/PLUG IMPORT: /'
|
||||
($(CD) $(CLASSDESTDIR) && $(BOOT_JAR_CMD) xf $(PLUG_IMPORT_JARFILE) @$1)
|
||||
($(CD) $(CLASSDESTDIR) && $(BOOT_JAR_CMD) xf $(PLUG_IMPORT_JARFILE) @$1 $(BOOT_JAR_JFLAGS) )
|
||||
($(CD) $(CLASSDESTDIR) && $(java-vm-cleanup) )
|
||||
endef # import-binary-plug-classes
|
||||
|
||||
# Import specific area classes (the classes are always created)
|
||||
@ -275,7 +276,8 @@ $(PLUG_EXPORT_JARFILE): $(PLUG_TEMPDIR)/all.clist $(PLUG_TEMPDIR)/all.jargs
|
||||
@$(prep-target)
|
||||
@$(ECHO) "PLUG EXPORT: $(@F)"
|
||||
@$(CAT) $(PLUG_TEMPDIR)/all.clist | $(SED) -e 's/^/PLUG EXPORT: /'
|
||||
$(BOOT_JAR_CMD) cf $@ @$(PLUG_TEMPDIR)/all.jargs
|
||||
$(BOOT_JAR_CMD) cf $@ @$(PLUG_TEMPDIR)/all.jargs $(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
export-binary-plugs-jar: $(PLUG_EXPORT_JARFILE)
|
||||
|
||||
# Export native libraries
|
||||
|
@ -107,8 +107,9 @@ endef
|
||||
define Unjar
|
||||
( \
|
||||
$(MKDIR) -p $1; \
|
||||
$(ECHO) "( $(CD) $1 && $(BOOT_JAR_CMD) xfv $2 $3 )" ; \
|
||||
( $(CD) $1 && $(BOOT_JAR_CMD) xfv $2 $3 ) \
|
||||
$(ECHO) "( $(CD) $1 && $(BOOT_JAR_CMD) xfv $2 $3 $(BOOT_JAR_JFLAGS) )" ; \
|
||||
( $(CD) $1 && $(BOOT_JAR_CMD) xfv $2 $3 $(BOOT_JAR_JFLAGS) ) && \
|
||||
( $(CD) $1 && $(java-vm-cleanup) ) \
|
||||
)
|
||||
endef
|
||||
|
||||
|
@ -31,11 +31,8 @@ COMPILER_NAME=Sun Studio
|
||||
|
||||
# Sun Studio Compiler settings specific to Solaris
|
||||
ifeq ($(PLATFORM), solaris)
|
||||
# FIXUP: Change to SS12 when validated
|
||||
#COMPILER_VERSION=SS12
|
||||
#REQUIRED_CC_VER=5.9
|
||||
COMPILER_VERSION=SS11
|
||||
REQUIRED_CC_VER=5.8
|
||||
COMPILER_VERSION=SS12
|
||||
REQUIRED_CC_VER=5.9
|
||||
CC = $(COMPILER_PATH)cc
|
||||
CPP = $(COMPILER_PATH)cc -E
|
||||
CXX = $(COMPILER_PATH)CC
|
||||
|
@ -190,6 +190,7 @@ ifeq ($(JAVAC_WARNINGS_FATAL), true)
|
||||
BOOT_JAVACFLAGS += -Werror
|
||||
endif
|
||||
BOOT_JAVACFLAGS += -encoding ascii
|
||||
BOOT_JAR_JFLAGS += $(JAR_JFLAGS)
|
||||
|
||||
BOOT_JAVA_CMD = $(BOOTDIR)/bin/java $(JAVA_TOOLS_FLAGS)
|
||||
BOOT_JAVAC_CMD = $(BOOTDIR)/bin/javac $(JAVAC_JVM_FLAGS) $(BOOT_JAVACFLAGS)
|
||||
|
@ -279,9 +279,6 @@ PROMOTED_BUILD_LATEST = latest
|
||||
PROMOTED_BUILD_BASEDIR = $(PROMOTED_RE_AREA)/$(PROMOTED_BUILD_LATEST)
|
||||
PROMOTED_BUILD_BINARIES = $(PROMOTED_BUILD_BASEDIR)/binaries
|
||||
|
||||
# OPT: Changes what the optimizations settings (in _OPT)
|
||||
POPT = $(_OPT$(ALT_OPT))$(ALT_OPT)
|
||||
|
||||
# PARALLEL_COMPILE_JOBS: is the number of compiles done in parallel.
|
||||
# If the user sets ALT_PARALLEL_COMPILE_JOBS, then COMPILE_APPROACH is set
|
||||
# to parallel.
|
||||
|
@ -33,6 +33,7 @@
|
||||
BUILDDIR = ../..
|
||||
LIBRARY = fdlibm
|
||||
PRODUCT = java
|
||||
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
#
|
||||
@ -40,14 +41,23 @@ include $(BUILDDIR)/common/Defs.gmk
|
||||
#
|
||||
FDLIBM_SRC = $(SHARE_SRC)/native/java/lang/fdlibm
|
||||
|
||||
# windows compiler flags
|
||||
# Windows: compiler flags
|
||||
ifeq ($(PLATFORM),windows)
|
||||
# Turn all optimizations off
|
||||
_OPT = $(CC_NO_OPT)
|
||||
OPTIMIZATION_LEVEL = NONE
|
||||
OTHER_CFLAGS =
|
||||
CPPFLAGS_DBG += -DLOGGING
|
||||
endif
|
||||
|
||||
#
|
||||
# Linux: Disable optimization to get correctly reproducible
|
||||
# floating-point results.
|
||||
#
|
||||
ifeq ($(PLATFORM),linux)
|
||||
# Turn all optimizations off
|
||||
OPTIMIZATION_LEVEL = NONE
|
||||
endif
|
||||
|
||||
#
|
||||
# Include path.
|
||||
#
|
||||
@ -68,15 +78,6 @@ include FILES_c.gmk
|
||||
#
|
||||
include $(BUILDDIR)/common/Library.gmk
|
||||
|
||||
#
|
||||
# Disable optimization to get correctly reproducible
|
||||
# floating-point results.
|
||||
#
|
||||
ifeq ($(PLATFORM),linux)
|
||||
# Turn all optimizations off
|
||||
_OPT = $(CC_NO_OPT)
|
||||
endif
|
||||
|
||||
#
|
||||
# Find fdlibm source files.
|
||||
#
|
||||
|
@ -28,14 +28,14 @@ LIBRARY = hprof
|
||||
PRODUCT = sun
|
||||
LIBRARY_OUTPUT = hprof_jvmti
|
||||
|
||||
# Configure the CFLAGS for this library.
|
||||
# Use highest optimization
|
||||
OPTIMIZATION_LEVEL = HIGHEST
|
||||
|
||||
# Configure the CFLAGS for this library.
|
||||
FILES_m = mapfile-vers
|
||||
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
_OPT=$(CC_HIGHEST_OPT)
|
||||
|
||||
SRCDIR=$(SHARE_SRC)/demo/jvmti/hprof
|
||||
PSRCDIR=$(PLATFORM_SRC)/demo/jvmti/hprof
|
||||
|
||||
|
@ -93,7 +93,8 @@ endif
|
||||
include $(BUILDDIR)/common/Library.gmk
|
||||
|
||||
$(AGENTJAR): $(LIBDIR) $(TEMPDIR)/manifest
|
||||
$(BOOT_JAR_CMD) -cfm $(AGENTJAR) $(TEMPDIR)/manifest
|
||||
$(BOOT_JAR_CMD) -cfm $(AGENTJAR) $(TEMPDIR)/manifest $(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
$(TEMPDIR)/manifest: $(MANIFEST)
|
||||
$(install-file)
|
||||
|
@ -230,7 +230,7 @@ build-jar: $(UNSIGNED_DIR)/jce.jar
|
||||
$(UNSIGNED_DIR)/jce.jar: prebuild build $(JCE_MANIFEST_FILE)
|
||||
$(prep-target)
|
||||
$(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ $(JAR_DIRS) \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
$(CP) -r $(CLASSDESTDIR)/* $(CLASSBINDIR)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
@ -268,7 +268,7 @@ $(UNSIGNED_POLICY_BUILDDIR)/unlimited/US_export_policy.jar: \
|
||||
$(prep-target)
|
||||
$(BOOT_JAR_CMD) cmf policy/unlimited/UNLIMITED $@ \
|
||||
-C policy/unlimited default_US_export.policy \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
$(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar: \
|
||||
@ -277,7 +277,7 @@ $(UNSIGNED_POLICY_BUILDDIR)/unlimited/local_policy.jar: \
|
||||
$(prep-target)
|
||||
$(BOOT_JAR_CMD) cmf policy/unlimited/UNLIMITED $@ \
|
||||
-C policy/unlimited default_local.policy \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
#
|
||||
@ -302,7 +302,7 @@ $(UNSIGNED_POLICY_BUILDDIR)/limited/local_policy.jar: \
|
||||
$(BOOT_JAR_CMD) cmf policy/limited/LIMITED $@ \
|
||||
-C policy/limited default_local.policy \
|
||||
-C policy/limited exempt_local.policy \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
UNSIGNED_POLICY_FILES = \
|
||||
@ -402,7 +402,7 @@ endif
|
||||
$(BOOT_JAR_CMD) cmf $(JCE_MANIFEST_FILE) $@ \
|
||||
-C $(OBFUS_DIR)/build javax \
|
||||
-C $(OBFUS_DIR)/build sun \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
$(sign-target)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
|
@ -170,7 +170,7 @@ mkpackaging:
|
||||
$(BOOT_JAR_CMD) cf $(TEMPDIR)/tmp.jar \
|
||||
-C $(BEANCLASSDIR) javax \
|
||||
-C $(BEANCLASSDIR) sun \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
$(MV) $(TEMPDIR)/tmp.jar $(JDK_IMAGE_DIR)/lib/dt.jar
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
|
@ -137,9 +137,7 @@ if [ "${osname}" = SunOS ] ; then
|
||||
if [ "${JPRT_SOLARIS_COMPILER_NAME}" != "" ] ; then
|
||||
compiler_name=${JPRT_SOLARIS_COMPILER_NAME}
|
||||
else
|
||||
# FIXUP: Change to SS12 when validated
|
||||
#compiler_name=SS12
|
||||
compiler_name=SS11
|
||||
compiler_name=SS12
|
||||
fi
|
||||
compiler_path=${jdk_devtools}/${solaris_arch}/SUNWspro/${compiler_name}/bin
|
||||
ALT_COMPILER_PATH="${compiler_path}"
|
||||
|
@ -28,17 +28,13 @@ PACKAGE = sun.awt
|
||||
LIBRARY = awt
|
||||
PRODUCT = sun
|
||||
|
||||
#
|
||||
# Tell Defs.gmk that VIS is needed
|
||||
#
|
||||
VIS_NEEDED=true
|
||||
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
#
|
||||
# Use highest optimization level
|
||||
#
|
||||
_OPT = $(CC_HIGHEST_OPT)
|
||||
OPTMIZATION_LEVEL = HIGHEST
|
||||
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
OTHER_CFLAGS += -D__MEDIALIB_OLD_NAMES -D__USE_J2D_NAMES
|
||||
|
||||
|
@ -35,6 +35,9 @@ PRODUCT = sun
|
||||
# Indicate we want the C++ compiler to do the linking.
|
||||
CPLUSPLUSLIBRARY=true
|
||||
|
||||
# Use higher optimization level
|
||||
OPTIMIZATION_LEVEL = HIGHER
|
||||
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
#
|
||||
@ -48,11 +51,6 @@ endif
|
||||
# Files
|
||||
#
|
||||
|
||||
#
|
||||
# Use higher optimization level
|
||||
#
|
||||
_OPT = $(CC_HIGHER_OPT)
|
||||
|
||||
include FILES_c.gmk
|
||||
|
||||
AUTO_FILES_JAVA_DIRS = sun/font
|
||||
|
@ -41,12 +41,10 @@ CPLUSPLUSLIBRARY=true
|
||||
# for a few ones with native methods) so shouldn't clobber them.
|
||||
DONT_CLOBBER_CLASSES=true
|
||||
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
#
|
||||
# Use higher optimization level
|
||||
#
|
||||
_OPT = $(CC_HIGHER_OPT)
|
||||
OPTIMIZATION_LEVEL = HIGHER
|
||||
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
#
|
||||
# Files
|
||||
|
@ -31,12 +31,11 @@ BUILDDIR = ../../..
|
||||
PACKAGE = sun.awt.medialib
|
||||
LIBRARY = mlib_image
|
||||
PRODUCT = sun
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
#
|
||||
# Use highest level of optimization on this library
|
||||
#
|
||||
_OPT = $(CC_HIGHEST_OPT)
|
||||
OPTIMIZATION_LEVEL = HIGHEST
|
||||
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
#
|
||||
# Use mapfile
|
||||
|
@ -31,17 +31,13 @@ PACKAGE = sun.awt.medialib
|
||||
LIBRARY = mlib_image_v
|
||||
PRODUCT = sun
|
||||
|
||||
#
|
||||
# Tell Defs.gmk we need VIS instructions
|
||||
#
|
||||
VIS_NEEDED=true
|
||||
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
#
|
||||
# Select highest level of optimization for this library
|
||||
#
|
||||
_OPT = $(CC_HIGHEST_OPT)
|
||||
OPTIMIZATION_LEVEL = HIGHEST
|
||||
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
#
|
||||
# Use generic mapfile
|
||||
|
@ -82,7 +82,7 @@ $(JARFILE): $(LIBDIR) $(FILES_class) $(FILES_png) $(FILES_gif) $(TEMPDIR)/manife
|
||||
$(BOOT_JAR_CMD) -cfm $(JARFILE) $(TEMPDIR)/manifest \
|
||||
-C $(CLASSBINDIR) sun/tools/jconsole \
|
||||
-C $(CLASSBINDIR) com/sun/tools/jconsole \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
clean clobber::
|
||||
|
@ -27,12 +27,11 @@ BUILDDIR = ../..
|
||||
PACKAGE = sun.awt
|
||||
LIBRARY = jpeg
|
||||
PRODUCT = sun
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
#
|
||||
# Use highest optimization level
|
||||
#
|
||||
_OPT = $(CC_HIGHEST_OPT)
|
||||
OPTIMIZATION_LEVEL = HIGHEST
|
||||
|
||||
include $(BUILDDIR)/common/Defs.gmk
|
||||
|
||||
#
|
||||
# Files
|
||||
|
@ -67,7 +67,7 @@ $(JARFILE): $(CLASSDESTDIR)/META-INF/services/$(SERVICE_DESCRIPTION) \
|
||||
$(BOOT_JAR_CMD) -cf $(JARFILE) \
|
||||
-C $(CLASSDESTDIR) sun \
|
||||
-C $(CLASSDESTDIR) META-INF \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
include $(BUILDDIR)/common/Classes.gmk
|
||||
|
@ -91,7 +91,7 @@ $(CHARSETS_JAR): $(FILES_class) $(CLASSDESTDIR)/$(SERVICE_DESCRIPTION_PATH) $(FI
|
||||
$(BOOT_JAR_CMD) cf $(CHARSETS_JAR) \
|
||||
-C $(CLASSDESTDIR) sun \
|
||||
-C $(CLASSDESTDIR) $(SERVICE_DESCRIPTION_PATH) \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
clean::
|
||||
|
@ -210,7 +210,7 @@ build-jar: $(UNSIGNED_DIR)/sunmscapi.jar
|
||||
$(UNSIGNED_DIR)/sunmscapi.jar: build
|
||||
$(prep-target)
|
||||
$(BOOT_JAR_CMD) cf $@ $(JAR_DIRS) \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
|
||||
|
@ -210,7 +210,7 @@ build-jar: $(UNSIGNED_DIR)/sunpkcs11.jar
|
||||
$(UNSIGNED_DIR)/sunpkcs11.jar: build
|
||||
$(prep-target)
|
||||
$(BOOT_JAR_CMD) cf $@ $(JAR_DIRS) \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
|
||||
|
@ -112,7 +112,7 @@ $(CLASSDESTDIR)/sun/text/resources/% : $(TEXT_SRCDIR)/%
|
||||
$(LOCALEDATA_JAR): $(EXTDIR) $(FILES_class) $(BIFILES) $(SPECIALFILES)
|
||||
$(prep-target)
|
||||
$(BOOT_JAR_CMD) -cf $@ -C $(CLASSDESTDIR) sun \
|
||||
$(JAR_JFLAGS)
|
||||
$(BOOT_JAR_JFLAGS)
|
||||
@$(java-vm-cleanup)
|
||||
|
||||
build: $(LOCALEDATA_JAR)
|
||||
|
@ -6,3 +6,4 @@ a17265993253d61becd04fe7d96d1fe8b4bd6dff jdk7-b27
|
||||
dec081837b01d509dcc2b9de86a4299c1ec17e04 jdk7-b29
|
||||
eaf608c64fecf70f955dc9f29f94c055b183aeec jdk7-b30
|
||||
07c916ecfc71f6bf432e4ff09bfbfb6290b5703c jdk7-b31
|
||||
13aee98cc0d8e24a084b62ad1d48d2a49792416c jdk7-b32
|
||||
|
@ -0,0 +1,117 @@
|
||||
/*
|
||||
* Copyright 2008 Sun Microsystems, Inc. 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. Sun designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
package com.sun.tools.javac.api;
|
||||
|
||||
import java.util.Locale;
|
||||
import javax.tools.Diagnostic;
|
||||
|
||||
/**
|
||||
* Provides simple functionalities for javac diagnostic formatting
|
||||
* @param <D> type of diagnostic handled by this formatter
|
||||
*/
|
||||
public interface DiagnosticFormatter<D extends Diagnostic<?>> {
|
||||
|
||||
/**
|
||||
* Whether the source code output for this diagnostic is to be displayed
|
||||
*
|
||||
* @param diag diagnostic to be formatted
|
||||
* @return true if the source line this diagnostic refers to is to be displayed
|
||||
*/
|
||||
boolean displaySource(D diag);
|
||||
|
||||
/**
|
||||
* Format the contents of a diagnostics
|
||||
*
|
||||
* @param diag the diagnostic to be formatted
|
||||
* @param l locale object to be used for i18n
|
||||
* @return a string representing the diagnostic
|
||||
*/
|
||||
public String format(D diag, Locale l);
|
||||
|
||||
/**
|
||||
* Controls the way in which a diagnostic message is displayed.
|
||||
*
|
||||
* @param diag diagnostic to be formatted
|
||||
* @param l locale object to be used for i18n
|
||||
* @return string representation of the diagnostic message
|
||||
*/
|
||||
public String formatMessage(D diag,Locale l);
|
||||
|
||||
/**
|
||||
* Controls the way in which a diagnostic kind is displayed.
|
||||
*
|
||||
* @param diag diagnostic to be formatted
|
||||
* @param l locale object to be used for i18n
|
||||
* @return string representation of the diagnostic prefix
|
||||
*/
|
||||
public String formatKind(D diag, Locale l);
|
||||
|
||||
/**
|
||||
* Controls the way in which a diagnostic source is displayed.
|
||||
*
|
||||
* @param diag diagnostic to be formatted
|
||||
* @param l locale object to be used for i18n
|
||||
* @return string representation of the diagnostic source
|
||||
*/
|
||||
public String formatSource(D diag, Locale l);
|
||||
|
||||
/**
|
||||
* Controls the way in which a diagnostic position is displayed.
|
||||
*
|
||||
* @param diag diagnostic to be formatted
|
||||
* @param pk enum constant representing the position kind
|
||||
* @param l locale object to be used for i18n
|
||||
* @return string representation of the diagnostic position
|
||||
*/
|
||||
public String formatPosition(D diag, PositionKind pk, Locale l);
|
||||
//where
|
||||
/**
|
||||
* This enum defines a set of constants for all the kinds of position
|
||||
* that a diagnostic can be asked for. All positions are intended to be
|
||||
* relative to a given diagnostic source.
|
||||
*/
|
||||
public enum PositionKind {
|
||||
/**
|
||||
* Start position
|
||||
*/
|
||||
START,
|
||||
/**
|
||||
* End position
|
||||
*/
|
||||
END,
|
||||
/**
|
||||
* Line number
|
||||
*/
|
||||
LINE,
|
||||
/**
|
||||
* Column number
|
||||
*/
|
||||
COLUMN,
|
||||
/**
|
||||
* Offset position
|
||||
*/
|
||||
OFFSET
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
/*
|
||||
* Copyright 2008 Sun Microsystems, Inc. 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. Sun designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
package com.sun.tools.javac.api;
|
||||
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
/**
|
||||
* This interface must be implemented by any javac class that has non-trivial
|
||||
* formatting needs (e.g. where toString() does not apply because of localization).
|
||||
*
|
||||
* @author Maurizio Cimadamore
|
||||
*/
|
||||
public interface Formattable {
|
||||
|
||||
/**
|
||||
* Used to obtain a localized String representing the object accordingly
|
||||
* to a given locale
|
||||
*
|
||||
* @param bundle resource bundle class used for localization
|
||||
* @return a locale-dependent string representing the object
|
||||
*/
|
||||
public String toString(ResourceBundle bundle);
|
||||
/**
|
||||
* Retrieve a pretty name of this object's kind
|
||||
* @return a string representing the object's kind
|
||||
*/
|
||||
String getKind();
|
||||
}
|
@ -25,6 +25,7 @@
|
||||
|
||||
package com.sun.tools.javac.code;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@ -43,38 +44,49 @@ public class Flags {
|
||||
|
||||
public static String toString(long flags) {
|
||||
StringBuffer buf = new StringBuffer();
|
||||
if ((flags&PUBLIC) != 0) buf.append("public ");
|
||||
if ((flags&PRIVATE) != 0) buf.append("private ");
|
||||
if ((flags&PROTECTED) != 0) buf.append("protected ");
|
||||
if ((flags&STATIC) != 0) buf.append("static ");
|
||||
if ((flags&FINAL) != 0) buf.append("final ");
|
||||
if ((flags&SYNCHRONIZED) != 0) buf.append("synchronized ");
|
||||
if ((flags&VOLATILE) != 0) buf.append("volatile ");
|
||||
if ((flags&TRANSIENT) != 0) buf.append("transient ");
|
||||
if ((flags&NATIVE) != 0) buf.append("native ");
|
||||
if ((flags&INTERFACE) != 0) buf.append("interface ");
|
||||
if ((flags&ABSTRACT) != 0) buf.append("abstract ");
|
||||
if ((flags&STRICTFP) != 0) buf.append("strictfp ");
|
||||
if ((flags&BRIDGE) != 0) buf.append("bridge ");
|
||||
if ((flags&SYNTHETIC) != 0) buf.append("synthetic ");
|
||||
if ((flags&DEPRECATED) != 0) buf.append("deprecated ");
|
||||
if ((flags&HASINIT) != 0) buf.append("hasinit ");
|
||||
if ((flags&ENUM) != 0) buf.append("enum ");
|
||||
if ((flags&IPROXY) != 0) buf.append("iproxy ");
|
||||
if ((flags&NOOUTERTHIS) != 0) buf.append("noouterthis ");
|
||||
if ((flags&EXISTS) != 0) buf.append("exists ");
|
||||
if ((flags&COMPOUND) != 0) buf.append("compound ");
|
||||
if ((flags&CLASS_SEEN) != 0) buf.append("class_seen ");
|
||||
if ((flags&SOURCE_SEEN) != 0) buf.append("source_seen ");
|
||||
if ((flags&LOCKED) != 0) buf.append("locked ");
|
||||
if ((flags&UNATTRIBUTED) != 0) buf.append("unattributed ");
|
||||
if ((flags&ANONCONSTR) != 0) buf.append("anonconstr ");
|
||||
if ((flags&ACYCLIC) != 0) buf.append("acyclic ");
|
||||
if ((flags&PARAMETER) != 0) buf.append("parameter ");
|
||||
if ((flags&VARARGS) != 0) buf.append("varargs ");
|
||||
String sep = "";
|
||||
for (Flag s : asFlagSet(flags)) {
|
||||
buf.append(sep);
|
||||
buf.append(s);
|
||||
sep = " ";
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
public static EnumSet<Flag> asFlagSet(long mask) {
|
||||
EnumSet<Flag> flags = EnumSet.noneOf(Flag.class);
|
||||
if ((mask&PUBLIC) != 0) flags.add(Flag.PUBLIC);
|
||||
if ((mask&PRIVATE) != 0) flags.add(Flag.PRIVATE);
|
||||
if ((mask&PROTECTED) != 0) flags.add(Flag.PROTECTED);
|
||||
if ((mask&STATIC) != 0) flags.add(Flag.STATIC);
|
||||
if ((mask&FINAL) != 0) flags.add(Flag.FINAL);
|
||||
if ((mask&SYNCHRONIZED) != 0) flags.add(Flag.SYNCHRONIZED);
|
||||
if ((mask&VOLATILE) != 0) flags.add(Flag.VOLATILE);
|
||||
if ((mask&TRANSIENT) != 0) flags.add(Flag.TRANSIENT);
|
||||
if ((mask&NATIVE) != 0) flags.add(Flag.NATIVE);
|
||||
if ((mask&INTERFACE) != 0) flags.add(Flag.INTERFACE);
|
||||
if ((mask&ABSTRACT) != 0) flags.add(Flag.ABSTRACT);
|
||||
if ((mask&STRICTFP) != 0) flags.add(Flag.STRICTFP);
|
||||
if ((mask&BRIDGE) != 0) flags.add(Flag.BRIDGE);
|
||||
if ((mask&SYNTHETIC) != 0) flags.add(Flag.SYNTHETIC);
|
||||
if ((mask&DEPRECATED) != 0) flags.add(Flag.DEPRECATED);
|
||||
if ((mask&HASINIT) != 0) flags.add(Flag.HASINIT);
|
||||
if ((mask&ENUM) != 0) flags.add(Flag.ENUM);
|
||||
if ((mask&IPROXY) != 0) flags.add(Flag.IPROXY);
|
||||
if ((mask&NOOUTERTHIS) != 0) flags.add(Flag.NOOUTERTHIS);
|
||||
if ((mask&EXISTS) != 0) flags.add(Flag.EXISTS);
|
||||
if ((mask&COMPOUND) != 0) flags.add(Flag.COMPOUND);
|
||||
if ((mask&CLASS_SEEN) != 0) flags.add(Flag.CLASS_SEEN);
|
||||
if ((mask&SOURCE_SEEN) != 0) flags.add(Flag.SOURCE_SEEN);
|
||||
if ((mask&LOCKED) != 0) flags.add(Flag.LOCKED);
|
||||
if ((mask&UNATTRIBUTED) != 0) flags.add(Flag.UNATTRIBUTED);
|
||||
if ((mask&ANONCONSTR) != 0) flags.add(Flag.ANONCONSTR);
|
||||
if ((mask&ACYCLIC) != 0) flags.add(Flag.ACYCLIC);
|
||||
if ((mask&PARAMETER) != 0) flags.add(Flag.PARAMETER);
|
||||
if ((mask&VARARGS) != 0) flags.add(Flag.VARARGS);
|
||||
return flags;
|
||||
}
|
||||
|
||||
/* Standard Java flags.
|
||||
*/
|
||||
public static final int PUBLIC = 1<<0;
|
||||
@ -271,4 +283,48 @@ public class Flags {
|
||||
public static boolean isConstant(Symbol.VarSymbol symbol) {
|
||||
return symbol.getConstValue() != null;
|
||||
}
|
||||
|
||||
public enum Flag {
|
||||
|
||||
PUBLIC("public"),
|
||||
PRIVATE("private"),
|
||||
PROTECTED("protected"),
|
||||
STATIC("static"),
|
||||
FINAL("final"),
|
||||
SYNCHRONIZED("synchronized"),
|
||||
VOLATILE("volatile"),
|
||||
TRANSIENT("transient"),
|
||||
NATIVE("native"),
|
||||
INTERFACE("interface"),
|
||||
ABSTRACT("abstract"),
|
||||
STRICTFP("strictfp"),
|
||||
BRIDGE("bridge"),
|
||||
SYNTHETIC("synthetic"),
|
||||
DEPRECATED("deprecated"),
|
||||
HASINIT("hasinit"),
|
||||
ENUM("enum"),
|
||||
IPROXY("iproxy"),
|
||||
NOOUTERTHIS("noouterthis"),
|
||||
EXISTS("exists"),
|
||||
COMPOUND("compound"),
|
||||
CLASS_SEEN("class_seen"),
|
||||
SOURCE_SEEN("source_seen"),
|
||||
LOCKED("locked"),
|
||||
UNATTRIBUTED("unattributed"),
|
||||
ANONCONSTR("anonconstr"),
|
||||
ACYCLIC("acyclic"),
|
||||
PARAMETER("parameter"),
|
||||
VARARGS("varargs"),
|
||||
PACKAGE("package");
|
||||
|
||||
String name;
|
||||
|
||||
Flag(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,13 @@
|
||||
|
||||
package com.sun.tools.javac.code;
|
||||
|
||||
import java.util.EnumSet;
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
import com.sun.tools.javac.api.Formattable;
|
||||
|
||||
import static com.sun.tools.javac.code.TypeTags.*;
|
||||
import static com.sun.tools.javac.code.Flags.*;
|
||||
|
||||
/** Internal symbol kinds, which distinguish between elements of
|
||||
* different subclasses of Symbol. Symbol kinds are organized so they can be
|
||||
@ -82,4 +89,133 @@ public class Kinds {
|
||||
public static final int WRONG_MTH = ERRONEOUS+6; // one method with wrong arguments
|
||||
public static final int ABSENT_MTH = ERRONEOUS+7; // missing method
|
||||
public static final int ABSENT_TYP = ERRONEOUS+8; // missing type
|
||||
|
||||
public enum KindName implements Formattable {
|
||||
ANNOTATION("kindname.interface"),
|
||||
CONSTRUCTOR("kindname.constructor"),
|
||||
INTERFACE("kindname.interface"),
|
||||
STATIC("kindname.static"),
|
||||
TYPEVAR("kindname.type.variable"),
|
||||
BOUND("kindname.type.variable.bound"),
|
||||
VAR("kindname.variable"),
|
||||
VAL("kindname.value"),
|
||||
METHOD("kindname.method"),
|
||||
CLASS("kindname.class"),
|
||||
PACKAGE("kindname.package");
|
||||
|
||||
private String name;
|
||||
|
||||
KindName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public String getKind() {
|
||||
return "Kindname";
|
||||
}
|
||||
|
||||
public String toString(ResourceBundle bundle) {
|
||||
String s = toString();
|
||||
return bundle.getString("compiler.misc." + s);
|
||||
}
|
||||
}
|
||||
|
||||
/** A KindName representing a given symbol kind
|
||||
*/
|
||||
public static KindName kindName(int kind) {
|
||||
switch (kind) {
|
||||
case PCK: return KindName.PACKAGE;
|
||||
case TYP: return KindName.CLASS;
|
||||
case VAR: return KindName.VAR;
|
||||
case VAL: return KindName.VAL;
|
||||
case MTH: return KindName.METHOD;
|
||||
default : throw new AssertionError("Unexpected kind: "+kind);
|
||||
}
|
||||
}
|
||||
|
||||
/** A KindName representing a given symbol
|
||||
*/
|
||||
public static KindName kindName(Symbol sym) {
|
||||
switch (sym.getKind()) {
|
||||
case PACKAGE:
|
||||
return KindName.PACKAGE;
|
||||
|
||||
case ENUM:
|
||||
case ANNOTATION_TYPE:
|
||||
case INTERFACE:
|
||||
case CLASS:
|
||||
return KindName.CLASS;
|
||||
|
||||
case TYPE_PARAMETER:
|
||||
return KindName.TYPEVAR;
|
||||
|
||||
case ENUM_CONSTANT:
|
||||
case FIELD:
|
||||
case PARAMETER:
|
||||
case LOCAL_VARIABLE:
|
||||
case EXCEPTION_PARAMETER:
|
||||
return KindName.VAR;
|
||||
|
||||
case METHOD:
|
||||
case CONSTRUCTOR:
|
||||
case STATIC_INIT:
|
||||
case INSTANCE_INIT:
|
||||
return KindName.METHOD;
|
||||
|
||||
default:
|
||||
if (sym.kind == VAL)
|
||||
// I don't think this can happen but it can't harm
|
||||
// playing it safe --ahe
|
||||
return KindName.VAL;
|
||||
else
|
||||
throw new AssertionError("Unexpected kind: "+sym.getKind());
|
||||
}
|
||||
}
|
||||
|
||||
/** A set of KindName(s) representing a set of symbol's kinds.
|
||||
*/
|
||||
public static EnumSet<KindName> kindNames(int kind) {
|
||||
EnumSet<KindName> kinds = EnumSet.noneOf(KindName.class);
|
||||
if ((kind & VAL) != 0)
|
||||
kinds.add(((kind & VAL) == VAR) ? KindName.VAR : KindName.VAL);
|
||||
if ((kind & MTH) != 0) kinds.add(KindName.METHOD);
|
||||
if ((kind & TYP) != 0) kinds.add(KindName.CLASS);
|
||||
if ((kind & PCK) != 0) kinds.add(KindName.PACKAGE);
|
||||
return kinds;
|
||||
}
|
||||
|
||||
/** A KindName representing the kind of a given class/interface type.
|
||||
*/
|
||||
public static KindName typeKindName(Type t) {
|
||||
if (t.tag == TYPEVAR ||
|
||||
t.tag == CLASS && (t.tsym.flags() & COMPOUND) != 0)
|
||||
return KindName.BOUND;
|
||||
else if (t.tag == PACKAGE)
|
||||
return KindName.PACKAGE;
|
||||
else if ((t.tsym.flags_field & ANNOTATION) != 0)
|
||||
return KindName.ANNOTATION;
|
||||
else if ((t.tsym.flags_field & INTERFACE) != 0)
|
||||
return KindName.INTERFACE;
|
||||
else
|
||||
return KindName.CLASS;
|
||||
}
|
||||
|
||||
/** A KindName representing the kind of a a missing symbol, given an
|
||||
* error kind.
|
||||
* */
|
||||
public static KindName absentKind(int kind) {
|
||||
switch (kind) {
|
||||
case ABSENT_VAR:
|
||||
return KindName.VAR;
|
||||
case WRONG_MTHS: case WRONG_MTH: case ABSENT_MTH:
|
||||
return KindName.METHOD;
|
||||
case ABSENT_TYP:
|
||||
return KindName.CLASS;
|
||||
default:
|
||||
throw new AssertionError("Unexpected kind: "+kind);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -140,25 +140,27 @@ public abstract class Symbol implements Element {
|
||||
}
|
||||
|
||||
/** A Java source description of the location of this symbol; used for
|
||||
* error reporting. Use of this method may result in the loss of the
|
||||
* symbol's description.
|
||||
* error reporting.
|
||||
*
|
||||
* @return null if the symbol is a package or a toplevel class defined in
|
||||
* the default package; otherwise, the owner symbol is returned
|
||||
*/
|
||||
public String location() {
|
||||
public Symbol location() {
|
||||
if (owner.name == null || (owner.name.len == 0 && owner.kind != PCK)) {
|
||||
return "";
|
||||
return null;
|
||||
}
|
||||
return owner.toString();
|
||||
return owner;
|
||||
}
|
||||
|
||||
public String location(Type site, Types types) {
|
||||
public Symbol location(Type site, Types types) {
|
||||
if (owner.name == null || owner.name.len == 0) {
|
||||
return location();
|
||||
}
|
||||
if (owner.type.tag == CLASS) {
|
||||
Type ownertype = types.asOuterSuper(site, owner);
|
||||
if (ownertype != null) return ownertype.toString();
|
||||
if (ownertype != null) return ownertype.tsym;
|
||||
}
|
||||
return owner.toString();
|
||||
return owner;
|
||||
}
|
||||
|
||||
/** The symbol's erased type.
|
||||
@ -451,8 +453,8 @@ public abstract class Symbol implements Element {
|
||||
this.other = other;
|
||||
}
|
||||
public String toString() { return other.toString(); }
|
||||
public String location() { return other.location(); }
|
||||
public String location(Type site, Types types) { return other.location(site, types); }
|
||||
public Symbol location() { return other.location(); }
|
||||
public Symbol location(Type site, Types types) { return other.location(site, types); }
|
||||
public Type erasure(Types types) { return other.erasure(types); }
|
||||
public Type externalType(Types types) { return other.externalType(types); }
|
||||
public boolean isLocal() { return other.isLocal(); }
|
||||
|
@ -979,6 +979,10 @@ public class Type implements PrimitiveType {
|
||||
return TypeKind.TYPEVAR;
|
||||
}
|
||||
|
||||
public boolean isCaptured() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public <R, P> R accept(TypeVisitor<R, P> v, P p) {
|
||||
return v.visitTypeVariable(this, p);
|
||||
}
|
||||
@ -1014,6 +1018,11 @@ public class Type implements PrimitiveType {
|
||||
return lower;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCaptured() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "capture#"
|
||||
|
@ -835,7 +835,7 @@ public class Types {
|
||||
};
|
||||
|
||||
public boolean isCaptureOf(Type s, WildcardType t) {
|
||||
if (s.tag != TYPEVAR || !(s instanceof CapturedType))
|
||||
if (s.tag != TYPEVAR || !((TypeVar)s).isCaptured())
|
||||
return false;
|
||||
return isSameWildcard(t, ((CapturedType)s).wildcard);
|
||||
}
|
||||
|
@ -172,8 +172,8 @@ public class Attr extends JCTree.Visitor {
|
||||
owntype = chk.checkType(tree.pos(), owntype, pt);
|
||||
} else {
|
||||
log.error(tree.pos(), "unexpected.type",
|
||||
Resolve.kindNames(pkind),
|
||||
Resolve.kindName(ownkind));
|
||||
kindNames(pkind),
|
||||
kindName(ownkind));
|
||||
owntype = syms.errType;
|
||||
}
|
||||
}
|
||||
@ -2664,7 +2664,7 @@ public class Attr extends JCTree.Visitor {
|
||||
// Enums may not be extended by source-level classes
|
||||
if (st.tsym != null &&
|
||||
((st.tsym.flags_field & Flags.ENUM) != 0) &&
|
||||
((c.flags_field & Flags.ENUM) == 0) &&
|
||||
((c.flags_field & (Flags.ENUM | Flags.COMPOUND)) == 0) &&
|
||||
!target.compilerBootstrap(c)) {
|
||||
log.error(env.tree.pos(), "enum.types.not.extensible");
|
||||
}
|
||||
|
@ -422,9 +422,34 @@ public class Check {
|
||||
* @param bs The bound.
|
||||
*/
|
||||
private void checkExtends(DiagnosticPosition pos, Type a, TypeVar bs) {
|
||||
if (a.isUnbound()) {
|
||||
return;
|
||||
} else if (a.tag != WILDCARD) {
|
||||
if (a.tag == TYPEVAR && ((TypeVar)a).isCaptured()) {
|
||||
CapturedType ct = (CapturedType)a;
|
||||
boolean ok;
|
||||
if (ct.bound.isErroneous()) {//capture doesn't exist
|
||||
ok = false;
|
||||
}
|
||||
else {
|
||||
switch (ct.wildcard.kind) {
|
||||
case EXTENDS:
|
||||
ok = types.isCastable(bs.getUpperBound(),
|
||||
types.upperBound(a),
|
||||
Warner.noWarnings);
|
||||
break;
|
||||
case SUPER:
|
||||
ok = !types.notSoftSubtype(types.lowerBound(a),
|
||||
bs.getUpperBound());
|
||||
break;
|
||||
case UNBOUND:
|
||||
ok = true;
|
||||
break;
|
||||
default:
|
||||
throw new AssertionError("Invalid bound kind");
|
||||
}
|
||||
}
|
||||
if (!ok)
|
||||
log.error(pos, "not.within.bounds", a);
|
||||
}
|
||||
else {
|
||||
a = types.upperBound(a);
|
||||
for (List<Type> l = types.getBounds(bs); l.nonEmpty(); l = l.tail) {
|
||||
if (!types.isSubtype(a, l.head)) {
|
||||
@ -432,12 +457,6 @@ public class Check {
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else if (a.isExtendsBound()) {
|
||||
if (!types.isCastable(bs.getUpperBound(), types.upperBound(a), Warner.noWarnings))
|
||||
log.error(pos, "not.within.bounds", a);
|
||||
} else if (a.isSuperBound()) {
|
||||
if (types.notSoftSubtype(types.lowerBound(a), bs.getUpperBound()))
|
||||
log.error(pos, "not.within.bounds", a);
|
||||
}
|
||||
}
|
||||
|
||||
@ -557,8 +576,8 @@ public class Check {
|
||||
if ((flags & set1) != 0 && (flags & set2) != 0) {
|
||||
log.error(pos,
|
||||
"illegal.combination.of.modifiers",
|
||||
TreeInfo.flagNames(TreeInfo.firstFlag(flags & set1)),
|
||||
TreeInfo.flagNames(TreeInfo.firstFlag(flags & set2)));
|
||||
asFlagSet(TreeInfo.firstFlag(flags & set1)),
|
||||
asFlagSet(TreeInfo.firstFlag(flags & set2)));
|
||||
return false;
|
||||
} else
|
||||
return true;
|
||||
@ -651,7 +670,7 @@ public class Check {
|
||||
}
|
||||
else {
|
||||
log.error(pos,
|
||||
"mod.not.allowed.here", TreeInfo.flagNames(illegal));
|
||||
"mod.not.allowed.here", asFlagSet(illegal));
|
||||
}
|
||||
}
|
||||
else if ((sym.kind == TYP ||
|
||||
@ -776,7 +795,7 @@ public class Check {
|
||||
public void visitTypeApply(JCTypeApply tree) {
|
||||
if (tree.type.tag == CLASS) {
|
||||
List<Type> formals = tree.type.tsym.type.getTypeArguments();
|
||||
List<Type> actuals = tree.type.getTypeArguments();
|
||||
List<Type> actuals = types.capture(tree.type).getTypeArguments();
|
||||
List<JCExpression> args = tree.arguments;
|
||||
List<Type> forms = formals;
|
||||
ListBuffer<TypeVar> tvars_buf = new ListBuffer<TypeVar>();
|
||||
@ -792,7 +811,7 @@ public class Check {
|
||||
// bounds substed with actuals.
|
||||
tvars_buf.append(types.substBound(((TypeVar)forms.head),
|
||||
formals,
|
||||
Type.removeBounds(actuals)));
|
||||
actuals));
|
||||
|
||||
args = args.tail;
|
||||
forms = forms.tail;
|
||||
@ -811,10 +830,11 @@ public class Check {
|
||||
tvars = tvars_buf.toList();
|
||||
while (args.nonEmpty() && tvars.nonEmpty()) {
|
||||
checkExtends(args.head.pos(),
|
||||
args.head.type,
|
||||
actuals.head,
|
||||
tvars.head);
|
||||
args = args.tail;
|
||||
tvars = tvars.tail;
|
||||
actuals = actuals.tail;
|
||||
}
|
||||
|
||||
// Check that this type is either fully parameterized, or
|
||||
@ -1003,14 +1023,6 @@ public class Check {
|
||||
}
|
||||
}
|
||||
|
||||
/** A string describing the access permission given by a flag set.
|
||||
* This always returns a space-separated list of Java Keywords.
|
||||
*/
|
||||
private static String protectionString(long flags) {
|
||||
long flags1 = flags & AccessFlags;
|
||||
return (flags1 == 0) ? "package" : TreeInfo.flagNames(flags1);
|
||||
}
|
||||
|
||||
/** A customized "cannot override" error message.
|
||||
* @param m The overriding method.
|
||||
* @param other The overridden method.
|
||||
@ -1104,7 +1116,7 @@ public class Check {
|
||||
(other.flags() & STATIC) != 0) {
|
||||
log.error(TreeInfo.diagnosticPositionFor(m, tree), "override.meth",
|
||||
cannotOverride(m, other),
|
||||
TreeInfo.flagNames(other.flags() & (FINAL | STATIC)));
|
||||
asFlagSet(other.flags() & (FINAL | STATIC)));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1118,9 +1130,10 @@ public class Check {
|
||||
protection(m.flags()) > protection(other.flags())) {
|
||||
log.error(TreeInfo.diagnosticPositionFor(m, tree), "override.weaker.access",
|
||||
cannotOverride(m, other),
|
||||
protectionString(other.flags()));
|
||||
other.flags() == 0 ?
|
||||
Flag.PACKAGE :
|
||||
asFlagSet(other.flags() & AccessFlags));
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
Type mt = types.memberType(origin.type, m);
|
||||
@ -2015,7 +2028,7 @@ public class Check {
|
||||
log.error(pos,
|
||||
"operator.cant.be.applied",
|
||||
treeinfo.operatorName(tag),
|
||||
left + "," + right);
|
||||
List.of(left, right));
|
||||
}
|
||||
return operator.opcode;
|
||||
}
|
||||
|
@ -2944,8 +2944,10 @@ public class Lower extends TreeTranslator {
|
||||
itvar.type,
|
||||
List.<Type>nil());
|
||||
JCExpression vardefinit = make.App(make.Select(make.Ident(itvar), next));
|
||||
if (iteratorTarget != syms.objectType)
|
||||
vardefinit = make.TypeCast(iteratorTarget, vardefinit);
|
||||
if (tree.var.type.isPrimitive())
|
||||
vardefinit = make.TypeCast(types.upperBound(iteratorTarget), vardefinit);
|
||||
else
|
||||
vardefinit = make.TypeCast(tree.var.type, vardefinit);
|
||||
JCVariableDecl indexDef = (JCVariableDecl)make.VarDef(tree.var.mods,
|
||||
tree.var.name,
|
||||
tree.var.vartype,
|
||||
|
@ -317,8 +317,9 @@ public class MemberEnter extends JCTree.Visitor implements Completer {
|
||||
importFrom(tsym);
|
||||
if (!found) {
|
||||
log.error(pos, "cant.resolve.location",
|
||||
JCDiagnostic.fragment("kindname.static"),
|
||||
name, "", "", Resolve.typeKindName(tsym.type),
|
||||
KindName.STATIC,
|
||||
name, List.<Type>nil(), List.<Type>nil(),
|
||||
typeKindName(tsym.type),
|
||||
tsym.type);
|
||||
}
|
||||
} finally {
|
||||
@ -719,7 +720,7 @@ public class MemberEnter extends JCTree.Visitor implements Completer {
|
||||
annotations.nonEmpty())
|
||||
log.error(annotations.head.pos,
|
||||
"already.annotated",
|
||||
Resolve.kindName(s), s);
|
||||
kindName(s), s);
|
||||
enterAnnotations(annotations, localEnv, s);
|
||||
} finally {
|
||||
log.useSource(prev);
|
||||
|
@ -1441,107 +1441,6 @@ public class Resolve {
|
||||
return thisType;
|
||||
}
|
||||
|
||||
/* ***************************************************************************
|
||||
* Methods related to kinds
|
||||
****************************************************************************/
|
||||
|
||||
/** A localized string describing a given kind.
|
||||
*/
|
||||
static JCDiagnostic kindName(int kind) {
|
||||
switch (kind) {
|
||||
case PCK: return JCDiagnostic.fragment("kindname.package");
|
||||
case TYP: return JCDiagnostic.fragment("kindname.class");
|
||||
case VAR: return JCDiagnostic.fragment("kindname.variable");
|
||||
case VAL: return JCDiagnostic.fragment("kindname.value");
|
||||
case MTH: return JCDiagnostic.fragment("kindname.method");
|
||||
default : return JCDiagnostic.fragment("kindname",
|
||||
Integer.toString(kind)); //debug
|
||||
}
|
||||
}
|
||||
|
||||
static JCDiagnostic kindName(Symbol sym) {
|
||||
switch (sym.getKind()) {
|
||||
case PACKAGE:
|
||||
return JCDiagnostic.fragment("kindname.package");
|
||||
|
||||
case ENUM:
|
||||
case ANNOTATION_TYPE:
|
||||
case INTERFACE:
|
||||
case CLASS:
|
||||
return JCDiagnostic.fragment("kindname.class");
|
||||
|
||||
case TYPE_PARAMETER:
|
||||
return JCDiagnostic.fragment("kindname.type.variable");
|
||||
|
||||
case ENUM_CONSTANT:
|
||||
case FIELD:
|
||||
case PARAMETER:
|
||||
case LOCAL_VARIABLE:
|
||||
case EXCEPTION_PARAMETER:
|
||||
return JCDiagnostic.fragment("kindname.variable");
|
||||
|
||||
case METHOD:
|
||||
case CONSTRUCTOR:
|
||||
case STATIC_INIT:
|
||||
case INSTANCE_INIT:
|
||||
return JCDiagnostic.fragment("kindname.method");
|
||||
|
||||
default:
|
||||
if (sym.kind == VAL)
|
||||
// I don't think this can happen but it can't harm
|
||||
// playing it safe --ahe
|
||||
return JCDiagnostic.fragment("kindname.value");
|
||||
else
|
||||
return JCDiagnostic.fragment("kindname", sym.getKind()); // debug
|
||||
}
|
||||
}
|
||||
|
||||
/** A localized string describing a given set of kinds.
|
||||
*/
|
||||
static JCDiagnostic kindNames(int kind) {
|
||||
StringBuffer key = new StringBuffer();
|
||||
key.append("kindname");
|
||||
if ((kind & VAL) != 0)
|
||||
key.append(((kind & VAL) == VAR) ? ".variable" : ".value");
|
||||
if ((kind & MTH) != 0) key.append(".method");
|
||||
if ((kind & TYP) != 0) key.append(".class");
|
||||
if ((kind & PCK) != 0) key.append(".package");
|
||||
return JCDiagnostic.fragment(key.toString(), kind);
|
||||
}
|
||||
|
||||
/** A localized string describing the kind -- either class or interface --
|
||||
* of a given type.
|
||||
*/
|
||||
static JCDiagnostic typeKindName(Type t) {
|
||||
if (t.tag == TYPEVAR ||
|
||||
t.tag == CLASS && (t.tsym.flags() & COMPOUND) != 0)
|
||||
return JCDiagnostic.fragment("kindname.type.variable.bound");
|
||||
else if (t.tag == PACKAGE)
|
||||
return JCDiagnostic.fragment("kindname.package");
|
||||
else if ((t.tsym.flags_field & ANNOTATION) != 0)
|
||||
return JCDiagnostic.fragment("kindname.annotation");
|
||||
else if ((t.tsym.flags_field & INTERFACE) != 0)
|
||||
return JCDiagnostic.fragment("kindname.interface");
|
||||
else
|
||||
return JCDiagnostic.fragment("kindname.class");
|
||||
}
|
||||
|
||||
/** A localized string describing the kind of a missing symbol, given an
|
||||
* error kind.
|
||||
*/
|
||||
static JCDiagnostic absentKindName(int kind) {
|
||||
switch (kind) {
|
||||
case ABSENT_VAR:
|
||||
return JCDiagnostic.fragment("kindname.variable");
|
||||
case WRONG_MTHS: case WRONG_MTH: case ABSENT_MTH:
|
||||
return JCDiagnostic.fragment("kindname.method");
|
||||
case ABSENT_TYP:
|
||||
return JCDiagnostic.fragment("kindname.class");
|
||||
default:
|
||||
return JCDiagnostic.fragment("kindname", kind);
|
||||
}
|
||||
}
|
||||
|
||||
/* ***************************************************************************
|
||||
* ResolveError classes, indicating error situations when accessing symbols
|
||||
****************************************************************************/
|
||||
@ -1633,55 +1532,77 @@ public class Resolve {
|
||||
*/
|
||||
void report(Log log, DiagnosticPosition pos, Type site, Name name,
|
||||
List<Type> argtypes, List<Type> typeargtypes) {
|
||||
if (argtypes == null)
|
||||
argtypes = List.nil();
|
||||
if (typeargtypes == null)
|
||||
typeargtypes = List.nil();
|
||||
if (name != name.table.error) {
|
||||
JCDiagnostic kindname = absentKindName(kind);
|
||||
String idname = name.toString();
|
||||
String args = "";
|
||||
String typeargs = "";
|
||||
KindName kindname = absentKind(kind);
|
||||
Name idname = name;
|
||||
if (kind >= WRONG_MTHS && kind <= ABSENT_MTH) {
|
||||
if (isOperator(name)) {
|
||||
log.error(pos, "operator.cant.be.applied",
|
||||
name, Type.toString(argtypes));
|
||||
name, argtypes);
|
||||
return;
|
||||
}
|
||||
if (name == name.table.init) {
|
||||
kindname = JCDiagnostic.fragment("kindname.constructor");
|
||||
idname = site.tsym.name.toString();
|
||||
kindname = KindName.CONSTRUCTOR;
|
||||
idname = site.tsym.name;
|
||||
}
|
||||
args = "(" + Type.toString(argtypes) + ")";
|
||||
if (typeargtypes != null && typeargtypes.nonEmpty())
|
||||
typeargs = "<" + Type.toString(typeargtypes) + ">";
|
||||
}
|
||||
if (kind == WRONG_MTH) {
|
||||
Symbol ws = wrongSym.asMemberOf(site, types);
|
||||
log.error(pos,
|
||||
"cant.apply.symbol" + (explanation != null ? ".1" : ""),
|
||||
wrongSym.asMemberOf(site, types),
|
||||
wrongSym.location(site, types),
|
||||
typeargs,
|
||||
Type.toString(argtypes),
|
||||
kindname,
|
||||
ws.name == names.init ? ws.owner.name : ws.name,
|
||||
ws.type.getParameterTypes(),
|
||||
argtypes,
|
||||
kindName(ws.owner),
|
||||
ws.owner.type,
|
||||
explanation);
|
||||
} else if (site.tsym.name.len != 0) {
|
||||
if (site.tsym.kind == PCK && !site.tsym.exists())
|
||||
log.error(pos, "doesnt.exist", site.tsym);
|
||||
else
|
||||
log.error(pos, "cant.resolve.location",
|
||||
kindname, idname, args, typeargs,
|
||||
typeKindName(site), site);
|
||||
else {
|
||||
String errKey = getErrorKey("cant.resolve.location",
|
||||
argtypes, typeargtypes,
|
||||
kindname);
|
||||
log.error(pos, errKey, kindname, idname, //symbol kindname, name
|
||||
typeargtypes, argtypes, //type parameters and arguments (if any)
|
||||
typeKindName(site), site); //location kindname, type
|
||||
}
|
||||
} else {
|
||||
log.error(pos, "cant.resolve", kindname, idname, args, typeargs);
|
||||
String errKey = getErrorKey("cant.resolve",
|
||||
argtypes, typeargtypes,
|
||||
kindname);
|
||||
log.error(pos, errKey, kindname, idname, //symbol kindname, name
|
||||
typeargtypes, argtypes); //type parameters and arguments (if any)
|
||||
}
|
||||
}
|
||||
}
|
||||
//where
|
||||
/** A name designates an operator if it consists
|
||||
* of a non-empty sequence of operator symbols +-~!/*%&|^<>=
|
||||
*/
|
||||
boolean isOperator(Name name) {
|
||||
int i = 0;
|
||||
while (i < name.len &&
|
||||
"+-~!*/%&|^<>=".indexOf(name.byteAt(i)) >= 0) i++;
|
||||
return i > 0 && i == name.len;
|
||||
//where
|
||||
String getErrorKey(String key, List<Type> argtypes, List<Type> typeargtypes, KindName kindname) {
|
||||
String suffix = "";
|
||||
switch (kindname) {
|
||||
case METHOD:
|
||||
case CONSTRUCTOR: {
|
||||
suffix += ".args";
|
||||
suffix += typeargtypes.nonEmpty() ? ".params" : "";
|
||||
}
|
||||
}
|
||||
return key + suffix;
|
||||
}
|
||||
|
||||
/** A name designates an operator if it consists
|
||||
* of a non-empty sequence of operator symbols +-~!/*%&|^<>=
|
||||
*/
|
||||
boolean isOperator(Name name) {
|
||||
int i = 0;
|
||||
while (i < name.len &&
|
||||
"+-~!*/%&|^<>=".indexOf(name.byteAt(i)) >= 0) i++;
|
||||
return i > 0 && i == name.len;
|
||||
}
|
||||
}
|
||||
|
||||
/** Resolve error class indicating that a symbol is not accessible.
|
||||
@ -1726,7 +1647,7 @@ public class Resolve {
|
||||
sym, sym.location());
|
||||
else if ((sym.flags() & (PRIVATE | PROTECTED)) != 0)
|
||||
log.error(pos, "report.access", sym,
|
||||
TreeInfo.flagNames(sym.flags() & (PRIVATE | PROTECTED)),
|
||||
asFlagSet(sym.flags() & (PRIVATE | PROTECTED)),
|
||||
sym.location());
|
||||
else
|
||||
log.error(pos, "not.def.public.cant.access",
|
||||
@ -1759,11 +1680,11 @@ public class Resolve {
|
||||
Name name,
|
||||
List<Type> argtypes,
|
||||
List<Type> typeargtypes) {
|
||||
String symstr = ((sym.kind == TYP && sym.type.tag == CLASS)
|
||||
? types.erasure(sym.type)
|
||||
: sym).toString();
|
||||
Symbol errSym = ((sym.kind == TYP && sym.type.tag == CLASS)
|
||||
? types.erasure(sym.type).tsym
|
||||
: sym);
|
||||
log.error(pos, "non-static.cant.be.ref",
|
||||
kindName(sym), symstr);
|
||||
kindName(sym), errSym);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1331,7 +1331,7 @@ public class ClassReader extends ClassFile implements Completer {
|
||||
log.warning("annotation.method.not.found.reason",
|
||||
container,
|
||||
name,
|
||||
failure.getMessage());
|
||||
failure.getDetailValue());//diagnostic, if present
|
||||
}
|
||||
} finally {
|
||||
log.useSource(prevSource);
|
||||
|
@ -63,6 +63,7 @@ import static com.sun.tools.javac.util.ListBuffer.lb;
|
||||
// TEMP, until we have a more efficient way to save doc comment info
|
||||
import com.sun.tools.javac.parser.DocCommentScanner;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Queue;
|
||||
import javax.lang.model.SourceVersion;
|
||||
|
||||
@ -444,7 +445,25 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
|
||||
*/
|
||||
public Todo todo;
|
||||
|
||||
private Set<Env<AttrContext>> deferredSugar = new HashSet<Env<AttrContext>>();
|
||||
protected enum CompileState {
|
||||
TODO(0),
|
||||
ATTR(1),
|
||||
FLOW(2);
|
||||
CompileState(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
boolean isDone(CompileState other) {
|
||||
return value >= other.value;
|
||||
}
|
||||
private int value;
|
||||
};
|
||||
protected class CompileStates extends HashMap<Env<AttrContext>,CompileState> {
|
||||
boolean isDone(Env<AttrContext> env, CompileState cs) {
|
||||
CompileState ecs = get(env);
|
||||
return ecs != null && ecs.isDone(cs);
|
||||
}
|
||||
}
|
||||
private CompileStates compileStates = new CompileStates();
|
||||
|
||||
/** The set of currently compiled inputfiles, needed to ensure
|
||||
* we don't accidentally overwrite an input file when -s is set.
|
||||
@ -1039,6 +1058,9 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
|
||||
* @returns the attributed parse tree
|
||||
*/
|
||||
public Env<AttrContext> attribute(Env<AttrContext> env) {
|
||||
if (compileStates.isDone(env, CompileState.ATTR))
|
||||
return env;
|
||||
|
||||
if (verboseCompilePolicy)
|
||||
log.printLines(log.noticeWriter, "[attribute " + env.enclClass.sym + "]");
|
||||
if (verbose)
|
||||
@ -1055,6 +1077,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
|
||||
env.toplevel.sourcefile);
|
||||
try {
|
||||
attr.attribClass(env.tree.pos(), env.enclClass.sym);
|
||||
compileStates.put(env, CompileState.ATTR);
|
||||
}
|
||||
finally {
|
||||
log.useSource(prev);
|
||||
@ -1094,7 +1117,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
|
||||
if (errorCount() > 0)
|
||||
return;
|
||||
|
||||
if (relax || deferredSugar.contains(env)) {
|
||||
if (relax || compileStates.isDone(env, CompileState.FLOW)) {
|
||||
results.append(env);
|
||||
return;
|
||||
}
|
||||
@ -1109,6 +1132,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
|
||||
make.at(Position.FIRSTPOS);
|
||||
TreeMaker localMake = make.forToplevel(env.toplevel);
|
||||
flow.analyzeTree(env.tree, localMake);
|
||||
compileStates.put(env, CompileState.FLOW);
|
||||
|
||||
if (errorCount() > 0)
|
||||
return;
|
||||
@ -1146,7 +1170,7 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
|
||||
* the current implicitSourcePolicy is taken into account.
|
||||
* The preparation stops as soon as an error is found.
|
||||
*/
|
||||
protected void desugar(Env<AttrContext> env, Queue<Pair<Env<AttrContext>, JCClassDecl>> results) {
|
||||
protected void desugar(final Env<AttrContext> env, Queue<Pair<Env<AttrContext>, JCClassDecl>> results) {
|
||||
if (errorCount() > 0)
|
||||
return;
|
||||
|
||||
@ -1155,13 +1179,30 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
|
||||
return;
|
||||
}
|
||||
|
||||
if (desugarLater(env)) {
|
||||
if (verboseCompilePolicy)
|
||||
log.printLines(log.noticeWriter, "[defer " + env.enclClass.sym + "]");
|
||||
todo.append(env);
|
||||
return;
|
||||
/**
|
||||
* As erasure (TransTypes) destroys information needed in flow analysis,
|
||||
* including information in supertypes, we need to ensure that supertypes
|
||||
* are processed through attribute and flow before subtypes are translated.
|
||||
*/
|
||||
class ScanNested extends TreeScanner {
|
||||
Set<Env<AttrContext>> dependencies = new HashSet<Env<AttrContext>>();
|
||||
public void visitClassDef(JCClassDecl node) {
|
||||
Type st = types.supertype(node.sym.type);
|
||||
if (st.tag == TypeTags.CLASS) {
|
||||
ClassSymbol c = st.tsym.outermostClass();
|
||||
Env<AttrContext> stEnv = enter.getEnv(c);
|
||||
if (stEnv != null && env != stEnv)
|
||||
dependencies.add(stEnv);
|
||||
}
|
||||
super.visitClassDef(node);
|
||||
}
|
||||
}
|
||||
ScanNested scanner = new ScanNested();
|
||||
scanner.scan(env.tree);
|
||||
for (Env<AttrContext> dep: scanner.dependencies) {
|
||||
if (!compileStates.isDone(dep, CompileState.FLOW))
|
||||
flow(attribute(dep));
|
||||
}
|
||||
deferredSugar.remove(env);
|
||||
|
||||
if (verboseCompilePolicy)
|
||||
log.printLines(log.noticeWriter, "[desugar " + env.enclClass.sym + "]");
|
||||
@ -1234,43 +1275,6 @@ public class JavaCompiler implements ClassReader.SourceCompleter {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if a class needs to be desugared later. As erasure
|
||||
* (TransTypes) destroys information needed in flow analysis, we
|
||||
* need to ensure that supertypes are translated before derived
|
||||
* types are translated.
|
||||
*/
|
||||
public boolean desugarLater(final Env<AttrContext> env) {
|
||||
if (compilePolicy == CompilePolicy.BY_FILE)
|
||||
return false;
|
||||
if (!devVerbose && deferredSugar.contains(env))
|
||||
// guarantee that compiler terminates
|
||||
return false;
|
||||
class ScanNested extends TreeScanner {
|
||||
Set<Symbol> externalSupers = new HashSet<Symbol>();
|
||||
public void visitClassDef(JCClassDecl node) {
|
||||
Type st = types.supertype(node.sym.type);
|
||||
if (st.tag == TypeTags.CLASS) {
|
||||
ClassSymbol c = st.tsym.outermostClass();
|
||||
Env<AttrContext> stEnv = enter.getEnv(c);
|
||||
if (stEnv != null && env != stEnv)
|
||||
externalSupers.add(st.tsym);
|
||||
}
|
||||
super.visitClassDef(node);
|
||||
}
|
||||
}
|
||||
ScanNested scanner = new ScanNested();
|
||||
scanner.scan(env.tree);
|
||||
if (scanner.externalSupers.isEmpty())
|
||||
return false;
|
||||
if (!deferredSugar.add(env) && devVerbose) {
|
||||
throw new AssertionError(env.enclClass.sym + " was deferred, " +
|
||||
"second time has these external super types " +
|
||||
scanner.externalSupers);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/** Generates the source or class file for a list of classes.
|
||||
* The decision to generate a source file or a class file is
|
||||
* based upon the compiler's options.
|
||||
|
@ -91,34 +91,6 @@ public class Keywords {
|
||||
*/
|
||||
private Name[] tokenName = new Name[Token.values().length];
|
||||
|
||||
public String token2string(Token token) {
|
||||
switch (token) {
|
||||
case IDENTIFIER:
|
||||
return log.getLocalizedString("token.identifier");
|
||||
case CHARLITERAL:
|
||||
return log.getLocalizedString("token.character");
|
||||
case STRINGLITERAL:
|
||||
return log.getLocalizedString("token.string");
|
||||
case INTLITERAL:
|
||||
return log.getLocalizedString("token.integer");
|
||||
case LONGLITERAL:
|
||||
return log.getLocalizedString("token.long-integer");
|
||||
case FLOATLITERAL:
|
||||
return log.getLocalizedString("token.float");
|
||||
case DOUBLELITERAL:
|
||||
return log.getLocalizedString("token.double");
|
||||
case ERROR:
|
||||
return log.getLocalizedString("token.bad-symbol");
|
||||
case EOF:
|
||||
return log.getLocalizedString("token.end-of-input");
|
||||
case DOT: case COMMA: case SEMI: case LPAREN: case RPAREN:
|
||||
case LBRACKET: case RBRACKET: case LBRACE: case RBRACE:
|
||||
return "'" + token.name + "'";
|
||||
default:
|
||||
return token.name;
|
||||
}
|
||||
}
|
||||
|
||||
private void enterKeyword(String s, Token token) {
|
||||
Name n = names.fromString(s);
|
||||
tokenName[token.ordinal()] = n;
|
||||
|
@ -272,13 +272,13 @@ public class Parser {
|
||||
}
|
||||
}
|
||||
|
||||
private JCErroneous syntaxError(int pos, String key, Object... arg) {
|
||||
return syntaxError(pos, null, key, arg);
|
||||
private JCErroneous syntaxError(int pos, String key, Token... args) {
|
||||
return syntaxError(pos, null, key, args);
|
||||
}
|
||||
|
||||
private JCErroneous syntaxError(int pos, List<JCTree> errs, String key, Object... arg) {
|
||||
private JCErroneous syntaxError(int pos, List<JCTree> errs, String key, Token... args) {
|
||||
setErrorEndPos(pos);
|
||||
reportSyntaxError(pos, key, arg);
|
||||
reportSyntaxError(pos, key, (Object[])args);
|
||||
return toP(F.at(pos).Erroneous(errs));
|
||||
}
|
||||
|
||||
@ -287,12 +287,12 @@ public class Parser {
|
||||
* Report a syntax error at given position using the given
|
||||
* argument unless one was already reported at the same position.
|
||||
*/
|
||||
private void reportSyntaxError(int pos, String key, Object... arg) {
|
||||
private void reportSyntaxError(int pos, String key, Object... args) {
|
||||
if (pos > S.errPos() || pos == Position.NOPOS) {
|
||||
if (S.token() == EOF)
|
||||
log.error(pos, "premature.eof");
|
||||
else
|
||||
log.error(pos, key, arg);
|
||||
log.error(pos, key, args);
|
||||
}
|
||||
S.errPos(pos);
|
||||
if (S.pos() == errorPos)
|
||||
@ -311,7 +311,7 @@ public class Parser {
|
||||
/** Generate a syntax error at current position unless one was
|
||||
* already reported at the same position.
|
||||
*/
|
||||
private JCErroneous syntaxError(String key, String arg) {
|
||||
private JCErroneous syntaxError(String key, Token arg) {
|
||||
return syntaxError(S.pos(), key, arg);
|
||||
}
|
||||
|
||||
@ -323,7 +323,7 @@ public class Parser {
|
||||
S.nextToken();
|
||||
} else {
|
||||
setErrorEndPos(S.pos());
|
||||
reportSyntaxError(S.prevEndPos(), "expected", keywords.token2string(token));
|
||||
reportSyntaxError(S.prevEndPos(), "expected", token);
|
||||
}
|
||||
}
|
||||
|
||||
@ -349,7 +349,7 @@ public class Parser {
|
||||
if (mods != 0) {
|
||||
long lowestMod = mods & -mods;
|
||||
log.error(S.pos(), "mod.not.allowed.here",
|
||||
Flags.toString(lowestMod).trim());
|
||||
Flags.asFlagSet(lowestMod));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1180,7 +1180,7 @@ public class Parser {
|
||||
}
|
||||
accept(RPAREN);
|
||||
} else {
|
||||
syntaxError(S.pos(), "expected", keywords.token2string(LPAREN));
|
||||
syntaxError(S.pos(), "expected", LPAREN);
|
||||
}
|
||||
return args.toList();
|
||||
}
|
||||
@ -1253,7 +1253,7 @@ public class Parser {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
syntaxError(S.pos(), "expected", keywords.token2string(LT));
|
||||
syntaxError(S.pos(), "expected", LT);
|
||||
}
|
||||
return args.toList();
|
||||
}
|
||||
@ -1278,9 +1278,7 @@ public class Parser {
|
||||
} else if (S.token() == IDENTIFIER) {
|
||||
//error recovery
|
||||
reportSyntaxError(S.prevEndPos(), "expected3",
|
||||
keywords.token2string(GT),
|
||||
keywords.token2string(EXTENDS),
|
||||
keywords.token2string(SUPER));
|
||||
GT, EXTENDS, SUPER);
|
||||
TypeBoundKind t = F.at(Position.NOPOS).TypeBoundKind(BoundKind.UNBOUND);
|
||||
JCExpression wc = toP(F.at(pos).Wildcard(t, null));
|
||||
JCIdent id = toP(F.at(S.pos()).Ident(ident()));
|
||||
@ -1392,8 +1390,7 @@ public class Parser {
|
||||
return classCreatorRest(newpos, null, typeArgs, t);
|
||||
} else {
|
||||
reportSyntaxError(S.pos(), "expected2",
|
||||
keywords.token2string(LPAREN),
|
||||
keywords.token2string(LBRACKET));
|
||||
LPAREN, LBRACKET);
|
||||
t = toP(F.at(newpos).NewClass(null, typeArgs, t, List.<JCExpression>nil(), null));
|
||||
return toP(F.at(newpos).Erroneous(List.<JCTree>of(t)));
|
||||
}
|
||||
@ -1500,7 +1497,7 @@ public class Parser {
|
||||
List<JCStatement> stats = blockStatements();
|
||||
JCBlock t = F.at(pos).Block(flags, stats);
|
||||
while (S.token() == CASE || S.token() == DEFAULT) {
|
||||
syntaxError("orphaned", keywords.token2string(S.token()));
|
||||
syntaxError("orphaned", S.token());
|
||||
switchBlockStatementGroups();
|
||||
}
|
||||
// the Block node has a field "endpos" for first char of last token, which is
|
||||
@ -1842,9 +1839,7 @@ public class Parser {
|
||||
default:
|
||||
S.nextToken(); // to ensure progress
|
||||
syntaxError(pos, "expected3",
|
||||
keywords.token2string(CASE),
|
||||
keywords.token2string(DEFAULT),
|
||||
keywords.token2string(RBRACE));
|
||||
CASE, DEFAULT, RBRACE);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2110,7 +2105,7 @@ public class Parser {
|
||||
S.nextToken();
|
||||
init = variableInitializer();
|
||||
}
|
||||
else if (reqInit) syntaxError(S.pos(), "expected", keywords.token2string(EQ));
|
||||
else if (reqInit) syntaxError(S.pos(), "expected", EQ);
|
||||
JCVariableDecl result =
|
||||
toP(F.at(pos).VarDef(mods, name, type, init));
|
||||
attach(result, dc);
|
||||
@ -2241,9 +2236,7 @@ public class Parser {
|
||||
errs = List.<JCTree>of(mods);
|
||||
}
|
||||
return toP(F.Exec(syntaxError(pos, errs, "expected3",
|
||||
keywords.token2string(CLASS),
|
||||
keywords.token2string(INTERFACE),
|
||||
keywords.token2string(ENUM))));
|
||||
CLASS, INTERFACE, ENUM)));
|
||||
}
|
||||
} else {
|
||||
if (S.token() == ENUM) {
|
||||
@ -2260,8 +2253,7 @@ public class Parser {
|
||||
errs = List.<JCTree>of(mods);
|
||||
}
|
||||
return toP(F.Exec(syntaxError(pos, errs, "expected2",
|
||||
keywords.token2string(CLASS),
|
||||
keywords.token2string(INTERFACE))));
|
||||
CLASS, INTERFACE)));
|
||||
}
|
||||
}
|
||||
|
||||
@ -2360,9 +2352,7 @@ public class Parser {
|
||||
}
|
||||
if (S.token() != SEMI && S.token() != RBRACE) {
|
||||
defs.append(syntaxError(S.pos(), "expected3",
|
||||
keywords.token2string(COMMA),
|
||||
keywords.token2string(RBRACE),
|
||||
keywords.token2string(SEMI)));
|
||||
COMMA, RBRACE, SEMI));
|
||||
S.nextToken();
|
||||
}
|
||||
}
|
||||
@ -2531,7 +2521,7 @@ public class Parser {
|
||||
? List.<JCTree>of(toP(F.at(pos).MethodDef(mods, name, type, typarams,
|
||||
List.<JCVariableDecl>nil(), List.<JCExpression>nil(), null, null)))
|
||||
: null;
|
||||
return List.<JCTree>of(syntaxError(S.pos(), err, "expected", keywords.token2string(LPAREN)));
|
||||
return List.<JCTree>of(syntaxError(S.pos(), err, "expected", LPAREN));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,9 @@
|
||||
|
||||
package com.sun.tools.javac.parser;
|
||||
|
||||
import java.util.ResourceBundle;
|
||||
|
||||
import com.sun.tools.javac.api.Formattable;
|
||||
|
||||
/** An interface that defines codes for Java source tokens
|
||||
* returned from lexical analysis.
|
||||
@ -34,7 +37,7 @@ package com.sun.tools.javac.parser;
|
||||
* This code and its internal interfaces are subject to change or
|
||||
* deletion without notice.</b>
|
||||
*/
|
||||
public enum Token {
|
||||
public enum Token implements Formattable {
|
||||
EOF,
|
||||
ERROR,
|
||||
IDENTIFIER,
|
||||
@ -155,4 +158,41 @@ public enum Token {
|
||||
}
|
||||
|
||||
public final String name;
|
||||
|
||||
public String toString() {
|
||||
switch (this) {
|
||||
case IDENTIFIER:
|
||||
return "token.identifier";
|
||||
case CHARLITERAL:
|
||||
return "token.character";
|
||||
case STRINGLITERAL:
|
||||
return "token.string";
|
||||
case INTLITERAL:
|
||||
return "token.integer";
|
||||
case LONGLITERAL:
|
||||
return "token.long-integer";
|
||||
case FLOATLITERAL:
|
||||
return "token.float";
|
||||
case DOUBLELITERAL:
|
||||
return "token.double";
|
||||
case ERROR:
|
||||
return "token.bad-symbol";
|
||||
case EOF:
|
||||
return "token.end-of-input";
|
||||
case DOT: case COMMA: case SEMI: case LPAREN: case RPAREN:
|
||||
case LBRACKET: case RBRACKET: case LBRACE: case RBRACE:
|
||||
return "'" + name + "'";
|
||||
default:
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
public String getKind() {
|
||||
return "Token";
|
||||
}
|
||||
|
||||
public String toString(ResourceBundle bundle) {
|
||||
String s = toString();
|
||||
return s.startsWith("token.") ? bundle.getString("compiler.misc." + s) : s;
|
||||
}
|
||||
}
|
||||
|
@ -81,9 +81,14 @@ compiler.err.break.outside.switch.loop=\
|
||||
compiler.err.call.must.be.first.stmt.in.ctor=\
|
||||
call to {0} must be first statement in constructor
|
||||
compiler.err.cant.apply.symbol=\
|
||||
{0} in {1} cannot be applied to {2}({3})
|
||||
compiler.err.cant.apply.symbol.1=\
|
||||
{0} in {1} cannot be applied to {2}({3}); {4}
|
||||
{0} {1} in {4} {5} cannot be applied to given types\n\
|
||||
required: {2}\n\
|
||||
found: {3}
|
||||
compiler.err.cant.apply.symbol.1=\
|
||||
{0} {1} in {4} {5} cannot be applied to given types;\n\
|
||||
required: {2}\n\
|
||||
found: {3}\n\
|
||||
reason: {6}
|
||||
compiler.err.cant.assign.val.to.final.var=\
|
||||
cannot assign a value to final variable {0}
|
||||
compiler.err.cant.deref=\
|
||||
@ -940,7 +945,7 @@ compiler.misc.type.req.ref=\
|
||||
compiler.misc.type.req.exact=\
|
||||
class or interface without bounds
|
||||
compiler.misc.type.parameter=\
|
||||
type parameter {0}
|
||||
type parameter {0}
|
||||
|
||||
#####
|
||||
|
||||
@ -980,16 +985,39 @@ unexpected type\n\
|
||||
required: {0}\n\
|
||||
found : {1}
|
||||
|
||||
## The first argument ({0}) is a "kindname".
|
||||
## The first argument {0} is a "kindname" (e.g. 'constructor', 'field', etc.)
|
||||
## The second argument {1} is the non-resolved symbol
|
||||
## The third argument {2} is a list of type parameters (non-empty if {1} is a method)
|
||||
## The fourth argument {3} is a list of argument types (non-empty if {1} is a method)
|
||||
compiler.err.cant.resolve=\
|
||||
cannot find symbol\n\
|
||||
symbol: {0} {3}{1}{2}
|
||||
cannot find symbol\n\
|
||||
symbol: {0} {1}
|
||||
|
||||
## The first argument ({0}) and fifth argument ({4}) are "kindname"s.
|
||||
compiler.err.cant.resolve.args=\
|
||||
cannot find symbol\n\
|
||||
symbol: {0} {1}({3})
|
||||
|
||||
compiler.err.cant.resolve.args.params=\
|
||||
cannot find symbol\n\
|
||||
symbol: {0} <{2}>{1}({3})
|
||||
|
||||
## arguments from {0} to {3} have the same meaning as above
|
||||
## The fifth argument {4} is the location "kindname" (e.g. 'constructor', 'field', etc.)
|
||||
## The sixth argument {5} is the location type
|
||||
compiler.err.cant.resolve.location=\
|
||||
cannot find symbol\n\
|
||||
symbol : {0} {3}{1}{2}\n\
|
||||
location: {4} {5}
|
||||
cannot find symbol\n\
|
||||
symbol : {0} {1}\n\
|
||||
location: {4} {5}
|
||||
|
||||
compiler.err.cant.resolve.location.args=\
|
||||
cannot find symbol\n\
|
||||
symbol : {0} {1}({3})\n\
|
||||
location: {4} {5}
|
||||
|
||||
compiler.err.cant.resolve.location.args.params=\
|
||||
cannot find symbol\n\
|
||||
symbol : {0} <{2}>{1}({3})\n\
|
||||
location: {4} {5}
|
||||
|
||||
## The following are all possible string for "kindname".
|
||||
## They should be called whatever the JLS calls them after it been translated
|
||||
@ -1008,55 +1036,16 @@ compiler.misc.kindname.type.variable=\
|
||||
type variable
|
||||
compiler.misc.kindname.type.variable.bound=\
|
||||
bound of type variable
|
||||
compiler.misc.kindname=\
|
||||
identifier({0})
|
||||
compiler.misc.kindname.variable=\
|
||||
variable
|
||||
compiler.misc.kindname.value=\
|
||||
value
|
||||
compiler.misc.kindname.method=\
|
||||
method
|
||||
compiler.misc.kindname.variable.method=\
|
||||
variable, method
|
||||
compiler.misc.kindname.value.method=\
|
||||
value, method
|
||||
compiler.misc.kindname.class=\
|
||||
class
|
||||
compiler.misc.kindname.variable.class=\
|
||||
variable, class
|
||||
compiler.misc.kindname.value.class=\
|
||||
value, class
|
||||
compiler.misc.kindname.method.class=\
|
||||
method, class
|
||||
compiler.misc.kindname.variable.method.class=\
|
||||
variable, method, class
|
||||
compiler.misc.kindname.value.method.class=\
|
||||
value, method, class
|
||||
compiler.misc.kindname.package=\
|
||||
package
|
||||
compiler.misc.kindname.variable.package=\
|
||||
variable, package
|
||||
compiler.misc.kindname.value.package=\
|
||||
value, package
|
||||
compiler.misc.kindname.method.package=\
|
||||
method, package
|
||||
compiler.misc.kindname.variable.method.package=\
|
||||
variable, method, package
|
||||
compiler.misc.kindname.value.method.package=\
|
||||
value, method, package
|
||||
compiler.misc.kindname.class.package=\
|
||||
class, package
|
||||
compiler.misc.kindname.variable.class.package=\
|
||||
variable, class, package
|
||||
compiler.misc.kindname.value.class.package=\
|
||||
value, class, package
|
||||
compiler.misc.kindname.method.class.package=\
|
||||
method, class, package
|
||||
compiler.misc.kindname.variable.method.class.package=\
|
||||
variable, method, class, package
|
||||
compiler.misc.kindname.value.method.class.package=\
|
||||
value, method, class, package
|
||||
|
||||
#####
|
||||
|
||||
compiler.err.override.static=\
|
||||
|
@ -0,0 +1,169 @@
|
||||
/*
|
||||
* Copyright 2008 Sun Microsystems, Inc. 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. Sun designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
package com.sun.tools.javac.util;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Locale;
|
||||
import javax.tools.JavaFileObject;
|
||||
|
||||
import com.sun.tools.javac.api.DiagnosticFormatter;
|
||||
import com.sun.tools.javac.api.Formattable;
|
||||
import com.sun.tools.javac.api.DiagnosticFormatter.PositionKind;
|
||||
import com.sun.tools.javac.file.JavacFileManager;
|
||||
|
||||
/**
|
||||
* This abstract class provides a basic implementation of the functionalities that should be provided
|
||||
* by any formatter used by javac. Among the main features provided by AbstractDiagnosticFormatter are:
|
||||
*
|
||||
* <ul>
|
||||
* <li> Provides a standard implementation of the visitor-like methods defined in the interface DiagnisticFormatter.
|
||||
* Those implementations are specifically targeting JCDiagnostic objects.
|
||||
* <li> Provides basic support for i18n and a method for executing all locale-dependent conversions
|
||||
* <li> Provides the formatting logic for rendering the arguments of a JCDiagnostic object.
|
||||
* <ul>
|
||||
*
|
||||
*/
|
||||
public abstract class AbstractDiagnosticFormatter implements DiagnosticFormatter<JCDiagnostic> {
|
||||
|
||||
/**
|
||||
* Messages object used by this formatter for i18n
|
||||
*/
|
||||
protected Messages messages;
|
||||
|
||||
/**
|
||||
* Initialize an AbstractDiagnosticFormatter by setting its Messages object
|
||||
* @param messages
|
||||
*/
|
||||
protected AbstractDiagnosticFormatter(Messages messages) {
|
||||
this.messages = messages;
|
||||
}
|
||||
|
||||
public String formatMessage(JCDiagnostic d, Locale l) {
|
||||
//this code should rely on the locale settings but it's not! See RFE 6443132
|
||||
Collection<String> args = formatArguments(d, l);
|
||||
return localize(l, d.getCode(), args.toArray());
|
||||
}
|
||||
|
||||
public String formatKind(JCDiagnostic d, Locale l) {
|
||||
switch (d.getType()) {
|
||||
case FRAGMENT: return "";
|
||||
case NOTE: return localize(l, "compiler.note.note");
|
||||
case WARNING: return localize(l, "compiler.warn.warning");
|
||||
case ERROR: return localize(l, "compiler.err.error");
|
||||
default:
|
||||
throw new AssertionError("Unknown diagnostic type: " + d.getType());
|
||||
}
|
||||
}
|
||||
|
||||
public String formatPosition(JCDiagnostic d, PositionKind pk,Locale l) {
|
||||
assert (d.getPosition() != Position.NOPOS);
|
||||
return String.valueOf(getPosition(d, pk));
|
||||
}
|
||||
//WHERE
|
||||
public long getPosition(JCDiagnostic d, PositionKind pk) {
|
||||
switch (pk) {
|
||||
case START: return d.getIntStartPosition();
|
||||
case END: return d.getIntEndPosition();
|
||||
case LINE: return d.getLineNumber();
|
||||
case COLUMN: return d.getColumnNumber();
|
||||
case OFFSET: return d.getIntPosition();
|
||||
default:
|
||||
throw new AssertionError("Unknown diagnostic position: " + pk);
|
||||
}
|
||||
}
|
||||
|
||||
public String formatSource(JCDiagnostic d,Locale l) {
|
||||
assert (d.getSource() != null);
|
||||
return d.getSource().getName();
|
||||
}
|
||||
|
||||
/**
|
||||
* Format the arguments of a given diagnostic.
|
||||
*
|
||||
* @param d diagnostic whose arguments are to be formatted
|
||||
* @param l locale object to be used for i18n
|
||||
* @return a Collection whose elements are the formatted arguments of the diagnostic
|
||||
*/
|
||||
protected Collection<String> formatArguments(JCDiagnostic d, Locale l) {
|
||||
ListBuffer<String> buf = new ListBuffer<String>();
|
||||
for (Object o : d.getArgs()) {
|
||||
buf.append(formatArgument(d, o, l));
|
||||
}
|
||||
return buf.toList();
|
||||
}
|
||||
|
||||
/**
|
||||
* Format a single argument of a given diagnostic.
|
||||
*
|
||||
* @param d diagnostic whose argument is to be formatted
|
||||
* @param arg argument to be formatted
|
||||
* @param l locale object to be used for i18n
|
||||
* @return string representation of the diagnostic argument
|
||||
*/
|
||||
protected String formatArgument(JCDiagnostic d, Object arg, Locale l) {
|
||||
if (arg instanceof JCDiagnostic)
|
||||
return format((JCDiagnostic)arg, l);
|
||||
else if (arg instanceof Iterable<?>) {
|
||||
return formatIterable(d, (Iterable<?>)arg, l);
|
||||
}
|
||||
else if (arg instanceof JavaFileObject)
|
||||
return JavacFileManager.getJavacBaseFileName((JavaFileObject)arg);
|
||||
else if (arg instanceof Formattable)
|
||||
return ((Formattable)arg).toString(Messages.getDefaultBundle());
|
||||
else
|
||||
return String.valueOf(arg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Format an iterable argument of a given diagnostic.
|
||||
*
|
||||
* @param d diagnostic whose argument is to be formatted
|
||||
* @param it iterable argument to be formatted
|
||||
* @param l locale object to be used for i18n
|
||||
* @return string representation of the diagnostic iterable argument
|
||||
*/
|
||||
protected String formatIterable(JCDiagnostic d, Iterable<?> it, Locale l) {
|
||||
StringBuilder sbuf = new StringBuilder();
|
||||
String sep = "";
|
||||
for (Object o : it) {
|
||||
sbuf.append(sep);
|
||||
sbuf.append(formatArgument(d, o, l));
|
||||
sep = ",";
|
||||
}
|
||||
return sbuf.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a String into a locale-dependent representation accordingly to a given locale
|
||||
*
|
||||
* @param l locale object to be used for i18n
|
||||
* @param key locale-independent key used for looking up in a resource file
|
||||
* @param args localization arguments
|
||||
* @return a locale-dependent string
|
||||
*/
|
||||
protected String localize(Locale l, String key, Object... args) {
|
||||
return messages.getLocalizedString(key, args);
|
||||
}
|
||||
}
|
@ -0,0 +1,190 @@
|
||||
/*
|
||||
* Copyright 2005-2008 Sun Microsystems, Inc. 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. Sun designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
package com.sun.tools.javac.util;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import javax.tools.JavaFileObject;
|
||||
|
||||
import static com.sun.tools.javac.util.BasicDiagnosticFormatter.BasicFormatKind.*;
|
||||
import static com.sun.tools.javac.api.DiagnosticFormatter.PositionKind.*;
|
||||
|
||||
/**
|
||||
* A basic formatter for diagnostic messages.
|
||||
* The basic formatter will format a diagnostic according to one of three format patterns, depending on whether
|
||||
* or not the source name and position are set. The formatter supports a printf-like string for patterns
|
||||
* with the following special characters:
|
||||
* <ul>
|
||||
* <li>%b: the base of the source name
|
||||
* <li>%f: the source name (full absolute path)
|
||||
* <li>%l: the line number of the diagnostic, derived from the character offset
|
||||
* <li>%c: the column number of the diagnostic, derived from the character offset
|
||||
* <li>%o: the character offset of the diagnostic if set
|
||||
* <li>%p: the prefix for the diagnostic, derived from the diagnostic type
|
||||
* <li>%t: the prefix as it normally appears in standard diagnostics. In this case, no prefix is
|
||||
* shown if the type is ERROR and if a source name is set
|
||||
* <li>%m: the text or the diagnostic, including any appropriate arguments
|
||||
* <li>%_: space delimiter, useful for formatting purposes
|
||||
* </ul>
|
||||
*/
|
||||
public class BasicDiagnosticFormatter extends AbstractDiagnosticFormatter {
|
||||
|
||||
protected Map<BasicFormatKind, String> availableFormats;
|
||||
|
||||
/**
|
||||
* Create a basic formatter based on the supplied options.
|
||||
*
|
||||
* @param opts list of command-line options
|
||||
* @param msgs Messages object used for i18n
|
||||
*/
|
||||
BasicDiagnosticFormatter(Options opts, Messages msgs) {
|
||||
this(msgs); //common init
|
||||
String fmt = opts.get("diags");
|
||||
if (fmt != null) {
|
||||
String[] formats = fmt.split("\\|");
|
||||
switch (formats.length) {
|
||||
case 3:
|
||||
availableFormats.put(DEFAULT_CLASS_FORMAT, formats[2]);
|
||||
case 2:
|
||||
availableFormats.put(DEFAULT_NO_POS_FORMAT, formats[1]);
|
||||
default:
|
||||
availableFormats.put(DEFAULT_POS_FORMAT, formats[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a standard basic formatter
|
||||
*
|
||||
* @param msgs Messages object used for i18n
|
||||
*/
|
||||
public BasicDiagnosticFormatter(Messages msgs) {
|
||||
super(msgs);
|
||||
availableFormats = new HashMap<BasicFormatKind, String>();
|
||||
availableFormats.put(DEFAULT_POS_FORMAT, "%f:%l:%_%t%m");
|
||||
availableFormats.put(DEFAULT_NO_POS_FORMAT, "%p%m");
|
||||
availableFormats.put(DEFAULT_CLASS_FORMAT, "%f:%_%t%m");
|
||||
}
|
||||
|
||||
public String format(JCDiagnostic d, Locale l) {
|
||||
String format = selectFormat(d);
|
||||
StringBuilder buf = new StringBuilder();
|
||||
for (int i = 0; i < format.length(); i++) {
|
||||
char c = format.charAt(i);
|
||||
boolean meta = false;
|
||||
if (c == '%' && i < format.length() - 1) {
|
||||
meta = true;
|
||||
c = format.charAt(++i);
|
||||
}
|
||||
buf.append(meta ? formatMeta(c, d, l) : String.valueOf(c));
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
protected String formatMeta(char c, JCDiagnostic d, Locale l) {
|
||||
switch (c) {
|
||||
case 'b':
|
||||
return formatSource(d, l);
|
||||
case 'e':
|
||||
return formatPosition(d, END, l);
|
||||
case 'f':
|
||||
return formatSource(d, l);
|
||||
case 'l':
|
||||
return formatPosition(d, LINE, l);
|
||||
case 'c':
|
||||
return formatPosition(d, COLUMN, l);
|
||||
case 'o':
|
||||
return formatPosition(d, OFFSET, l);
|
||||
case 'p':
|
||||
return formatKind(d, l);
|
||||
case 's':
|
||||
return formatPosition(d, START, l);
|
||||
case 't': {
|
||||
boolean usePrefix;
|
||||
switch (d.getType()) {
|
||||
case FRAGMENT:
|
||||
usePrefix = false;
|
||||
break;
|
||||
case ERROR:
|
||||
usePrefix = (d.getIntPosition() == Position.NOPOS);
|
||||
break;
|
||||
default:
|
||||
usePrefix = true;
|
||||
}
|
||||
if (usePrefix)
|
||||
return formatKind(d, l);
|
||||
else
|
||||
return "";
|
||||
}
|
||||
case 'm':
|
||||
return formatMessage(d, l);
|
||||
case '_':
|
||||
return " ";
|
||||
case '%':
|
||||
return "%";
|
||||
default:
|
||||
return String.valueOf(c);
|
||||
}
|
||||
}
|
||||
|
||||
private String selectFormat(JCDiagnostic d) {
|
||||
DiagnosticSource source = d.getDiagnosticSource();
|
||||
String format = availableFormats.get(DEFAULT_NO_POS_FORMAT);
|
||||
if (source != null) {
|
||||
if (d.getIntPosition() != Position.NOPOS) {
|
||||
format = availableFormats.get(DEFAULT_POS_FORMAT);
|
||||
} else if (source.getFile() != null &&
|
||||
source.getFile().getKind() == JavaFileObject.Kind.CLASS) {
|
||||
format = availableFormats.get(DEFAULT_CLASS_FORMAT);
|
||||
}
|
||||
}
|
||||
return format;
|
||||
}
|
||||
|
||||
public boolean displaySource(JCDiagnostic d) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* This enum contains all the kinds of formatting patterns supported
|
||||
* by a basic diagnostic formatter.
|
||||
*/
|
||||
public enum BasicFormatKind {
|
||||
/**
|
||||
* A format string to be used for diagnostics with a given position.
|
||||
*/
|
||||
DEFAULT_POS_FORMAT,
|
||||
/**
|
||||
* A format string to be used for diagnostics without a given position.
|
||||
*/
|
||||
DEFAULT_NO_POS_FORMAT,
|
||||
/**
|
||||
* A format string to be used for diagnostics regarding classfiles
|
||||
*/
|
||||
DEFAULT_CLASS_FORMAT;
|
||||
}
|
||||
}
|
@ -1,252 +0,0 @@
|
||||
/*
|
||||
* Copyright 2005-2008 Sun Microsystems, Inc. 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. Sun designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
package com.sun.tools.javac.util;
|
||||
|
||||
import javax.tools.JavaFileObject;
|
||||
|
||||
import com.sun.tools.javac.file.JavacFileManager;
|
||||
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType;
|
||||
|
||||
/**
|
||||
* A formatter for diagnostic messages.
|
||||
* The formatter will format a diagnostic according to one of two format strings, depending on whether
|
||||
* or not the source name and position are set. The format is a printf-like string,
|
||||
* with the following special characters:
|
||||
* <ul>
|
||||
* <li>%b: the base of the source name, or "-" if not set
|
||||
* <li>%f: the source name, or "-" if not set
|
||||
* <li>%l: the line number of the diagnostic, derived from the character offset if set, or "-" otherwise
|
||||
* <li>%c: the column number of the diagnostic, derived from the character offset if set, or "-" otherwise
|
||||
* <li>%o: the character offset of the diagnostic if set, or "-" otherwise
|
||||
* <li>%p: the prefix for the diagnostic, derived from the diagnostic type
|
||||
* <li>%t: the prefix as it normally appears in standard diagnostics. In this case, no prefix is
|
||||
* shown if the type is ERROR and if a source name is set
|
||||
* <li>%m: the text or the diagnostic, including any appropriate arguments
|
||||
* </ul>
|
||||
*/
|
||||
public class DiagnosticFormatter {
|
||||
/**
|
||||
* A format string to be used for diagnostics with a given position.
|
||||
*/
|
||||
protected String posFormat;
|
||||
|
||||
/**
|
||||
* A format string to be used for diagnostics regarding classfiles
|
||||
*/
|
||||
protected String classFormat = DEFAULT_CLASS_FORMAT;
|
||||
|
||||
/**
|
||||
* A format string to be used for diagnostics without a given position.
|
||||
*/
|
||||
protected String noPosFormat;
|
||||
|
||||
/**
|
||||
* A value to indicate whether to output the i18n key and args, instead of
|
||||
* the derived l10n message.
|
||||
*/
|
||||
protected boolean raw;
|
||||
|
||||
/** The context key for the formatter. */
|
||||
protected static final Context.Key<DiagnosticFormatter> formatterKey =
|
||||
new Context.Key<DiagnosticFormatter>();
|
||||
|
||||
/** Get the DiagnosticFormatter instance for this context. */
|
||||
public static DiagnosticFormatter instance(Context context) {
|
||||
DiagnosticFormatter instance = context.get(formatterKey);
|
||||
if (instance == null)
|
||||
instance = new DiagnosticFormatter(context);
|
||||
return instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a formatter based on the supplied options.
|
||||
*/
|
||||
protected DiagnosticFormatter(Context context) {
|
||||
Options options = Options.instance(context);
|
||||
raw = options.get("rawDiagnostics") != null;
|
||||
String fmt = options.get("diags");
|
||||
if (fmt != null) {
|
||||
int sep = fmt.indexOf('|');
|
||||
if (sep == -1)
|
||||
posFormat = noPosFormat = fmt;
|
||||
else {
|
||||
posFormat = fmt.substring(0, sep);
|
||||
noPosFormat = fmt.substring(sep + 1);
|
||||
}
|
||||
}
|
||||
else {
|
||||
posFormat = DEFAULT_POS_FORMAT;
|
||||
noPosFormat = DEFAULT_NO_POS_FORMAT;
|
||||
}
|
||||
}
|
||||
|
||||
public static final String DEFAULT_POS_FORMAT = "%f:%l: %t%m";
|
||||
public static final String DEFAULT_CLASS_FORMAT = "%f: %t%m";
|
||||
public static final String DEFAULT_NO_POS_FORMAT = "%p%m";
|
||||
|
||||
public DiagnosticFormatter() {
|
||||
posFormat = DEFAULT_POS_FORMAT;
|
||||
noPosFormat = DEFAULT_NO_POS_FORMAT;
|
||||
raw = false;
|
||||
}
|
||||
|
||||
public DiagnosticFormatter(String pos, String noPos) {
|
||||
posFormat = pos;
|
||||
noPosFormat = noPos;
|
||||
raw = false;
|
||||
}
|
||||
|
||||
String format(JCDiagnostic d) {
|
||||
return (raw ? format_raw(d) : format_std(d));
|
||||
}
|
||||
|
||||
private String format_raw(JCDiagnostic d) {
|
||||
DiagnosticSource source = d.getDiagnosticSource();
|
||||
int position = d.getIntPosition();
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (position == Position.NOPOS)
|
||||
sb.append("-");
|
||||
else {
|
||||
sb.append(source.getName() + ":" + source.getLineNumber(position) + ":" + source.getColumnNumber(position) + ":");
|
||||
}
|
||||
sb.append(" ");
|
||||
sb.append(d.getCode());
|
||||
String sep = ": ";
|
||||
for (Object arg: d.getArgs()) {
|
||||
sb.append(sep);
|
||||
if (arg instanceof JCDiagnostic) {
|
||||
sb.append('(');
|
||||
sb.append(format_raw((JCDiagnostic) arg));
|
||||
sb.append(')');
|
||||
}
|
||||
else if (arg instanceof JavaFileObject)
|
||||
sb.append(JavacFileManager.getJavacBaseFileName((JavaFileObject) arg));
|
||||
else
|
||||
sb.append(arg);
|
||||
sep = ", ";
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private String format_std(JCDiagnostic d) {
|
||||
DiagnosticSource source = d.getDiagnosticSource();
|
||||
DiagnosticType type = d.getType();
|
||||
int position = d.getIntPosition();
|
||||
|
||||
|
||||
String format = noPosFormat;
|
||||
if (source != null) {
|
||||
if (position != Position.NOPOS) {
|
||||
format = posFormat;
|
||||
} else if (source.getFile() != null &&
|
||||
source.getFile().getKind() == JavaFileObject.Kind.CLASS) {
|
||||
format = classFormat;
|
||||
}
|
||||
}
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
for (int i = 0; i < format.length(); i++) {
|
||||
char c = format.charAt(i);
|
||||
if (c == '%' && i < format.length() - 1) {
|
||||
c = format.charAt(++i);
|
||||
switch (c) {
|
||||
case 'b':
|
||||
sb.append(source == null ? "-" : source.getName());
|
||||
break;
|
||||
|
||||
case 'e':
|
||||
sb.append(position == Position.NOPOS ? "-" : String.valueOf(d.getEndPosition()));
|
||||
break;
|
||||
|
||||
case 'f':
|
||||
sb.append(source == null ? "-" : d.getSourceName());
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
sb.append(position == Position.NOPOS ? "-" : String.valueOf(d.getLineNumber()));
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
sb.append(position == Position.NOPOS ? "-" : String.valueOf(d.getColumnNumber()));
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
sb.append(position == Position.NOPOS ? "-" : String.valueOf(position));
|
||||
break;
|
||||
|
||||
case 'p':
|
||||
sb.append(d.getPrefix());
|
||||
break;
|
||||
|
||||
case 's':
|
||||
sb.append(position == Position.NOPOS ? "-" : String.valueOf(d.getStartPosition()));
|
||||
break;
|
||||
|
||||
case 't': {
|
||||
boolean usePrefix;
|
||||
switch (type) {
|
||||
case FRAGMENT:
|
||||
usePrefix = false;
|
||||
break;
|
||||
|
||||
case ERROR:
|
||||
usePrefix = (position == Position.NOPOS);
|
||||
break;
|
||||
|
||||
default:
|
||||
usePrefix = true;
|
||||
}
|
||||
|
||||
if (usePrefix)
|
||||
sb.append(d.getPrefix());
|
||||
break;
|
||||
}
|
||||
|
||||
case 'm':
|
||||
sb.append(d.getMessage(null));
|
||||
break;
|
||||
|
||||
case '_':
|
||||
sb.append(' ');
|
||||
break;
|
||||
|
||||
case '%':
|
||||
sb.append('%');
|
||||
break;
|
||||
|
||||
default:
|
||||
sb.append(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
sb.append(c);
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
@ -31,6 +31,7 @@ import java.util.Map;
|
||||
import javax.tools.Diagnostic;
|
||||
import javax.tools.JavaFileObject;
|
||||
|
||||
import com.sun.tools.javac.api.DiagnosticFormatter;
|
||||
import com.sun.tools.javac.file.JavacFileManager;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
|
||||
@ -253,7 +254,7 @@ public class JCDiagnostic implements Diagnostic<JavaFileObject> {
|
||||
private final int line;
|
||||
private final int column;
|
||||
private final String key;
|
||||
private final Object[] args;
|
||||
protected Object[] args;
|
||||
private boolean mandatory;
|
||||
|
||||
/**
|
||||
@ -397,46 +398,25 @@ public class JCDiagnostic implements Diagnostic<JavaFileObject> {
|
||||
* @return the prefix string associated with a particular type of diagnostic
|
||||
*/
|
||||
public String getPrefix(DiagnosticType dt) {
|
||||
switch (dt) {
|
||||
case FRAGMENT: return "";
|
||||
case NOTE: return getLocalizedString("compiler.note.note");
|
||||
case WARNING: return getLocalizedString("compiler.warn.warning");
|
||||
case ERROR: return getLocalizedString("compiler.err.error");
|
||||
default:
|
||||
throw new AssertionError("Unknown diagnostic type: " + dt);
|
||||
}
|
||||
return getFormatter().formatKind(this, Locale.getDefault());
|
||||
}
|
||||
|
||||
private DiagnosticFormatter<JCDiagnostic> getFormatter() {
|
||||
if (defaultFormatter == null) {
|
||||
defaultFormatter = new BasicDiagnosticFormatter(messages);
|
||||
}
|
||||
return defaultFormatter;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the standard presentation of this diagnostic.
|
||||
*/
|
||||
public String toString() {
|
||||
if (defaultFormatter == null) {
|
||||
defaultFormatter =
|
||||
new DiagnosticFormatter();
|
||||
}
|
||||
return defaultFormatter.format(this);
|
||||
return getFormatter().format(this,Locale.getDefault());
|
||||
}
|
||||
|
||||
private static DiagnosticFormatter defaultFormatter;
|
||||
|
||||
private static final String messageBundleName =
|
||||
"com.sun.tools.javac.resources.compiler";
|
||||
|
||||
private String getLocalizedString(String key, Object... args) {
|
||||
String[] strings = new String[args.length];
|
||||
for (int i = 0; i < strings.length; i++) {
|
||||
Object arg = args[i];
|
||||
if (arg == null)
|
||||
strings[i] = null;
|
||||
else if (arg instanceof JCDiagnostic)
|
||||
strings[i] = ((JCDiagnostic) arg).getMessage(null);
|
||||
else
|
||||
strings[i] = arg.toString();
|
||||
}
|
||||
|
||||
return messages.getLocalizedString(key, (Object[]) strings);
|
||||
}
|
||||
private static DiagnosticFormatter<JCDiagnostic> defaultFormatter;
|
||||
|
||||
// Methods for javax.tools.Diagnostic
|
||||
|
||||
@ -460,7 +440,6 @@ public class JCDiagnostic implements Diagnostic<JavaFileObject> {
|
||||
|
||||
public String getMessage(Locale locale) {
|
||||
// RFE 6406133: JCDiagnostic.getMessage ignores locale argument
|
||||
return getLocalizedString(key, args);
|
||||
return getFormatter().formatMessage(this, locale);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -29,11 +29,13 @@ import java.io.*;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Locale;
|
||||
import javax.tools.DiagnosticListener;
|
||||
import javax.tools.JavaFileObject;
|
||||
|
||||
import com.sun.tools.javac.file.JavacFileManager;
|
||||
import com.sun.tools.javac.tree.JCTree;
|
||||
import com.sun.tools.javac.api.DiagnosticFormatter;
|
||||
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition;
|
||||
import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType;
|
||||
|
||||
@ -68,10 +70,6 @@ public class Log extends AbstractLog {
|
||||
public final int MaxErrors;
|
||||
public final int MaxWarnings;
|
||||
|
||||
/** Whether or not to display the line of source containing a diagnostic.
|
||||
*/
|
||||
private final boolean showSourceLine;
|
||||
|
||||
/** Switch: prompt user on each error.
|
||||
*/
|
||||
public boolean promptOnError;
|
||||
@ -97,7 +95,7 @@ public class Log extends AbstractLog {
|
||||
/**
|
||||
* Formatter for diagnostics
|
||||
*/
|
||||
private DiagnosticFormatter diagFormatter;
|
||||
private DiagnosticFormatter<JCDiagnostic> diagFormatter;
|
||||
|
||||
/** Construct a log with given I/O redirections.
|
||||
*/
|
||||
@ -115,9 +113,11 @@ public class Log extends AbstractLog {
|
||||
this.emitWarnings = options.get("-Xlint:none") == null;
|
||||
this.MaxErrors = getIntOption(options, "-Xmaxerrs", 100);
|
||||
this.MaxWarnings = getIntOption(options, "-Xmaxwarns", 100);
|
||||
this.showSourceLine = options.get("rawDiagnostics") == null;
|
||||
|
||||
this.diagFormatter = DiagnosticFormatter.instance(context);
|
||||
boolean rawDiagnostics = options.get("rawDiagnostics") != null;
|
||||
Messages msgs = Messages.instance(context);
|
||||
this.diagFormatter = rawDiagnostics ? new RawDiagnosticFormatter(msgs) :
|
||||
new BasicDiagnosticFormatter(options, msgs);
|
||||
@SuppressWarnings("unchecked") // FIXME
|
||||
DiagnosticListener<? super JavaFileObject> diagListener =
|
||||
context.get(DiagnosticListener.class);
|
||||
@ -335,8 +335,8 @@ public class Log extends AbstractLog {
|
||||
|
||||
PrintWriter writer = getWriterForDiagnosticType(diag.getType());
|
||||
|
||||
printLines(writer, diagFormatter.format(diag));
|
||||
if (showSourceLine) {
|
||||
printLines(writer, diagFormatter.format(diag, Locale.getDefault()));
|
||||
if (diagFormatter.displaySource(diag)) {
|
||||
int pos = diag.getIntPosition();
|
||||
if (pos != Position.NOPOS) {
|
||||
JavaFileObject prev = useSource(diag.getSource());
|
||||
|
@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Copyright 2008 Sun Microsystems, Inc. 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. Sun designates this
|
||||
* particular file as subject to the "Classpath" exception as provided
|
||||
* by Sun 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
package com.sun.tools.javac.util;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import com.sun.tools.javac.api.Formattable;
|
||||
import static com.sun.tools.javac.api.DiagnosticFormatter.PositionKind.*;
|
||||
|
||||
/**
|
||||
* A raw formatter for diagnostic messages.
|
||||
* The raw formatter will format a diagnostic according to one of two format patterns, depending on whether
|
||||
* or not the source name and position are set. This formatter provides a standardized, localize-independent
|
||||
* implementation of a diagnostic formatter; as such, this formatter is best suited for testing purposes.
|
||||
*/
|
||||
public class RawDiagnosticFormatter extends AbstractDiagnosticFormatter {
|
||||
|
||||
/**
|
||||
* Create a formatter based on the supplied options.
|
||||
* @param msgs
|
||||
*/
|
||||
public RawDiagnosticFormatter(Messages msgs) {
|
||||
super(null);
|
||||
}
|
||||
|
||||
//provide common default formats
|
||||
public String format(JCDiagnostic d, Locale l) {
|
||||
try {
|
||||
StringBuffer buf = new StringBuffer();
|
||||
if (d.getPosition() != Position.NOPOS) {
|
||||
buf.append(formatSource(d, null));
|
||||
buf.append(':');
|
||||
buf.append(formatPosition(d, LINE, null));
|
||||
buf.append(':');
|
||||
buf.append(formatPosition(d, COLUMN, null));
|
||||
buf.append(':');
|
||||
}
|
||||
else
|
||||
buf.append('-');
|
||||
buf.append(' ');
|
||||
buf.append(formatMessage(d, null));
|
||||
return buf.toString();
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String formatSource(JCDiagnostic d,Locale l) {
|
||||
assert(d.getSource() != null);
|
||||
return d.getSource().getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String formatArgument(JCDiagnostic diag, Object arg, Locale l) {
|
||||
String s;
|
||||
if (arg instanceof Formattable)
|
||||
s = arg.toString();
|
||||
else
|
||||
s = super.formatArgument(diag, arg, null);
|
||||
if (arg instanceof JCDiagnostic)
|
||||
return "(" + s + ")";
|
||||
else
|
||||
return s;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String localize(Locale l, String s, Object... args) {
|
||||
StringBuffer buf = new StringBuffer();
|
||||
buf.append(s);
|
||||
String sep = ": ";
|
||||
for (Object o : args) {
|
||||
buf.append(sep);
|
||||
buf.append(o);
|
||||
sep = ", ";
|
||||
}
|
||||
return buf.toString();
|
||||
}
|
||||
|
||||
public boolean displaySource(JCDiagnostic d) {
|
||||
return false;
|
||||
}
|
||||
}
|
@ -1,2 +1,2 @@
|
||||
Bar.java:13:29: compiler.err.cant.resolve.location: (- compiler.misc.kindname.class), Serializable, , , (- compiler.misc.kindname.package), java.io
|
||||
Bar.java:13:29: compiler.err.cant.resolve.location: kindname.class, Serializable, , , kindname.package, java.io
|
||||
1 error
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 6199662 6325201
|
||||
* @bug 6199662 6325201 6726015
|
||||
* @summary javac: compilation success depends on compilation order
|
||||
*
|
||||
* @compile Tree.java TreeScanner.java TreeInfo.java
|
||||
|
@ -1,2 +1,2 @@
|
||||
T6330920.java:11:22: compiler.err.cant.resolve.location: (- compiler.misc.kindname.class), T6330920Missing, , , (- compiler.misc.kindname.class), T6330920
|
||||
T6330920.java:11:22: compiler.err.cant.resolve.location: kindname.class, T6330920Missing, , , kindname.class, T6330920
|
||||
1 error
|
||||
|
42
langtools/test/tools/javac/6717241/T6717241a.java
Normal file
42
langtools/test/tools/javac/6717241/T6717241a.java
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright 2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 6717241
|
||||
* @summary some diagnostic argument is prematurely converted into a String object
|
||||
* @author Maurizio Cimadamore
|
||||
* @compile/fail/ref=T6717241a.out -XDstdout -XDrawDiagnostics T6717241a.java
|
||||
*/
|
||||
|
||||
class T6717241a<X extends Object & java.io.Serializable> {
|
||||
X x;
|
||||
void test() {
|
||||
//this will generate a 'cant.resolve'
|
||||
Object o = x.v;
|
||||
//this will generate a 'cant.resolve.args'
|
||||
x.m1(1, "");
|
||||
//this will generate a 'cant.resolve.args.params'
|
||||
x.<Integer,Double>m2(1, "");
|
||||
}
|
||||
}
|
4
langtools/test/tools/javac/6717241/T6717241a.out
Normal file
4
langtools/test/tools/javac/6717241/T6717241a.out
Normal file
@ -0,0 +1,4 @@
|
||||
T6717241a.java:36:21: compiler.err.cant.resolve: kindname.variable, v, ,
|
||||
T6717241a.java:38:10: compiler.err.cant.resolve.args: kindname.method, m1, , int,java.lang.String
|
||||
T6717241a.java:40:10: compiler.err.cant.resolve.args.params: kindname.method, m2, java.lang.Integer,java.lang.Double, int,java.lang.String
|
||||
3 errors
|
41
langtools/test/tools/javac/6717241/T6717241b.java
Normal file
41
langtools/test/tools/javac/6717241/T6717241b.java
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 2008 Sun Microsystems, Inc. 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 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
|
||||
* CA 95054 USA or visit www.sun.com if you need additional information or
|
||||
* have any questions.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @bug 6717241
|
||||
* @summary some diagnostic argument is prematurely converted into a String object
|
||||
* @author Maurizio Cimadamore
|
||||
* @compile/fail/ref=T6717241b.out -XDstdout -XDrawDiagnostics T6717241b.java
|
||||
*/
|
||||
|
||||
class T6717241b {
|
||||
void test() {
|
||||
//this will generate a 'cant.resolve.location'
|
||||
Object o = v;
|
||||
//this will generate a 'cant.resolve.location.args'
|
||||
m1(1, "");
|
||||
//this will generate a 'cant.resolve.location.args.params'
|
||||
T6717241b.<Integer,Double>m2(1, "");
|
||||
}
|
||||
}
|
4
langtools/test/tools/javac/6717241/T6717241b.out
Normal file
4
langtools/test/tools/javac/6717241/T6717241b.out
Normal file
@ -0,0 +1,4 @@
|
||||
T6717241b.java:35:20: compiler.err.cant.resolve.location: kindname.variable, v, , , kindname.class, T6717241b
|
||||
T6717241b.java:37:9: compiler.err.cant.resolve.location.args: kindname.method, m1, , int,java.lang.String, kindname.class, T6717241b
|
||||
T6717241b.java:39:18: compiler.err.cant.resolve.location.args.params: kindname.method, m2, java.lang.Integer,java.lang.Double, int,java.lang.String, kindname.class, T6717241b
|
||||
3 errors
|
@ -1,7 +1,7 @@
|
||||
ExtendsAccess.java:31:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), publicClass, ,
|
||||
ExtendsAccess.java:32:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), defaultClass, ,
|
||||
ExtendsAccess.java:33:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), protectedClass, ,
|
||||
ExtendsAccess.java:34:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), privateClass, ,
|
||||
ExtendsAccess.java:31:32: compiler.err.cant.resolve: kindname.class, publicClass, ,
|
||||
ExtendsAccess.java:32:32: compiler.err.cant.resolve: kindname.class, defaultClass, ,
|
||||
ExtendsAccess.java:33:32: compiler.err.cant.resolve: kindname.class, protectedClass, ,
|
||||
ExtendsAccess.java:34:32: compiler.err.cant.resolve: kindname.class, privateClass, ,
|
||||
ExtendsAccess.java:39:46: compiler.err.report.access: ExtendsAccess.privateClass, private, ExtendsAccess
|
||||
ExtendsAccess.java:42:48: compiler.err.not.def.public.cant.access: p.ExtendsAccess.defaultClass, p.ExtendsAccess
|
||||
ExtendsAccess.java:43:48: compiler.err.report.access: p.ExtendsAccess.protectedClass, protected, p.ExtendsAccess
|
||||
@ -12,10 +12,10 @@ ExtendsAccess.java:69:21: compiler.err.report.access: p.ExtendsAccess.privateCla
|
||||
ExtendsAccess.java:85:34: compiler.err.report.access: ExtendsAccess.privateClass, private, ExtendsAccess
|
||||
ExtendsAccess.java:92:36: compiler.err.not.def.public.cant.access: p.ExtendsAccess.defaultClass, p.ExtendsAccess
|
||||
ExtendsAccess.java:101:36: compiler.err.report.access: p.ExtendsAccess.privateClass, private, p.ExtendsAccess
|
||||
ExtendsAccess.java:104:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), publicStaticClass, ,
|
||||
ExtendsAccess.java:105:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), defaultStaticClass, ,
|
||||
ExtendsAccess.java:106:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), protectedStaticClass, ,
|
||||
ExtendsAccess.java:107:32: compiler.err.cant.resolve: (- compiler.misc.kindname.class), privateStaticClass, ,
|
||||
ExtendsAccess.java:104:32: compiler.err.cant.resolve: kindname.class, publicStaticClass, ,
|
||||
ExtendsAccess.java:105:32: compiler.err.cant.resolve: kindname.class, defaultStaticClass, ,
|
||||
ExtendsAccess.java:106:32: compiler.err.cant.resolve: kindname.class, protectedStaticClass, ,
|
||||
ExtendsAccess.java:107:32: compiler.err.cant.resolve: kindname.class, privateStaticClass, ,
|
||||
ExtendsAccess.java:112:46: compiler.err.report.access: ExtendsAccess.privateStaticClass, private, ExtendsAccess
|
||||
ExtendsAccess.java:115:48: compiler.err.not.def.public.cant.access: p.ExtendsAccess.defaultStaticClass, p.ExtendsAccess
|
||||
ExtendsAccess.java:116:48: compiler.err.report.access: p.ExtendsAccess.protectedStaticClass, protected, p.ExtendsAccess
|
||||
@ -26,10 +26,10 @@ ExtendsAccess.java:142:21: compiler.err.report.access: p.ExtendsAccess.privateSt
|
||||
ExtendsAccess.java:158:34: compiler.err.report.access: ExtendsAccess.privateStaticClass, private, ExtendsAccess
|
||||
ExtendsAccess.java:165:36: compiler.err.not.def.public.cant.access: p.ExtendsAccess.defaultStaticClass, p.ExtendsAccess
|
||||
ExtendsAccess.java:174:36: compiler.err.report.access: p.ExtendsAccess.privateStaticClass, private, p.ExtendsAccess
|
||||
ExtendsAccess.java:177:57: compiler.err.cant.resolve: (- compiler.misc.kindname.class), publicInterface, ,
|
||||
ExtendsAccess.java:178:57: compiler.err.cant.resolve: (- compiler.misc.kindname.class), defaultInterface, ,
|
||||
ExtendsAccess.java:179:57: compiler.err.cant.resolve: (- compiler.misc.kindname.class), protectedInterface, ,
|
||||
ExtendsAccess.java:180:57: compiler.err.cant.resolve: (- compiler.misc.kindname.class), privateInterface, ,
|
||||
ExtendsAccess.java:177:57: compiler.err.cant.resolve: kindname.class, publicInterface, ,
|
||||
ExtendsAccess.java:178:57: compiler.err.cant.resolve: kindname.class, defaultInterface, ,
|
||||
ExtendsAccess.java:179:57: compiler.err.cant.resolve: kindname.class, protectedInterface, ,
|
||||
ExtendsAccess.java:180:57: compiler.err.cant.resolve: kindname.class, privateInterface, ,
|
||||
ExtendsAccess.java:186:33: compiler.err.report.access: ExtendsAccess.privateInterface, private, ExtendsAccess
|
||||
ExtendsAccess.java:191:35: compiler.err.not.def.public.cant.access: p.ExtendsAccess.defaultInterface, p.ExtendsAccess
|
||||
ExtendsAccess.java:193:35: compiler.err.report.access: p.ExtendsAccess.protectedInterface, protected, p.ExtendsAccess
|
||||
|
@ -1,2 +1,2 @@
|
||||
NonStaticFieldExpr1.java:10:30: compiler.err.non-static.cant.be.ref: (- compiler.misc.kindname.variable), x
|
||||
NonStaticFieldExpr1.java:10:30: compiler.err.non-static.cant.be.ref: kindname.variable, x
|
||||
1 error
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user