diff --git a/jdk/make/CopyFiles.gmk b/jdk/make/CopyFiles.gmk
index c1fa0d4062b..396f2534317 100644
--- a/jdk/make/CopyFiles.gmk
+++ b/jdk/make/CopyFiles.gmk
@@ -373,7 +373,14 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
POLICY_SRC_LIST += $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS)/lib/security/java.policy
endif
ifndef OPENJDK
- ifneq (, $(filter $(OPENJDK_TARGET_OS), windows solaris))
+ ifeq ($(OPENJDK_TARGET_OS), windows)
+ ifeq ($(OPENJDK_TARGET_CPU_BITS), 32)
+ POLICY_SRC_LIST += $(JDK_TOPDIR)/src/closed/$(OPENJDK_TARGET_OS)/lib/security/java.policy-win32
+ else
+ POLICY_SRC_LIST += $(JDK_TOPDIR)/src/closed/$(OPENJDK_TARGET_OS)/lib/security/java.policy-win64
+ endif
+ endif
+ ifeq ($(OPENJDK_TARGET_OS), solaris)
POLICY_SRC_LIST += $(JDK_TOPDIR)/src/closed/$(OPENJDK_TARGET_OS)/lib/security/java.policy
endif
endif
diff --git a/jdk/make/GenerateData.gmk b/jdk/make/GenerateData.gmk
index 28faec4826a..437dd0b1d38 100644
--- a/jdk/make/GenerateData.gmk
+++ b/jdk/make/GenerateData.gmk
@@ -62,7 +62,7 @@ GENDATA += $(GENDATA_UNINAME)
##########################################################################################
-GENDATA_CURDATA := $(JDK_OUTPUTDIR)/lib/currency.data
+GENDATA_CURDATA := $(JDK_OUTPUTDIR)/classes/java/util/currency.data
$(GENDATA_CURDATA): $(JDK_TOPDIR)/make/data/currency/CurrencyData.properties $(BUILD_TOOLS)
$(MKDIR) -p $(@D)
diff --git a/jdk/make/Setup.gmk b/jdk/make/Setup.gmk
index 123a03e2c17..485c3b72b13 100644
--- a/jdk/make/Setup.gmk
+++ b/jdk/make/Setup.gmk
@@ -27,7 +27,7 @@ DISABLE_WARNINGS := -Xlint:all,-deprecation,-unchecked,-rawtypes,-cast,-serial,-
# To build with all warnings enabled, do the following:
# make JAVAC_WARNINGS="-Xlint:all -Xmaxwarns 10000"
-JAVAC_WARNINGS := -Xlint:-unchecked,-deprecation,-overrides,auxiliaryclass,cast,classfile,dep-ann,divzero,empty,fallthrough,overloads,serial,static,try,varargs -Werror
+JAVAC_WARNINGS := -Xlint:all,-deprecation,-rawtypes,-unchecked -Werror
# Any java code executed during a JDK build to build other parts of the JDK must be
# executed by the bootstrap JDK (probably with -Xbootclasspath/p: ) and for this
diff --git a/jdk/make/lib/Awt2dLibraries.gmk b/jdk/make/lib/Awt2dLibraries.gmk
index a689e52f03a..1d44b22ea83 100644
--- a/jdk/make/lib/Awt2dLibraries.gmk
+++ b/jdk/make/lib/Awt2dLibraries.gmk
@@ -319,7 +319,6 @@ endif
ifeq ($(OPENJDK_TARGET_OS), macosx)
LIBAWT_FILES += awt_LoadLibrary.c
- LIBAWT_CFLAGS += -F/System/Library/Frameworks/JavaVM.framework/Frameworks
endif
ifeq ($(OPENJDK_TARGET_OS)-$(OPENJDK_TARGET_CPU_ARCH), solaris-sparc)
@@ -484,7 +483,6 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBAWT, \
LDFLAGS_SUFFIX_macosx := -lmlib_image -ljvm $(LIBM) \
-framework Cocoa \
-framework OpenGL \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation \
-framework JavaRuntimeSupport \
-framework ApplicationServices \
@@ -709,21 +707,24 @@ $(BUILD_LIBLCMS): $(BUILD_LIBAWT)
##########################################################################################
+BUILD_LIBJAVAJPEG_DIR := $(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg
+
ifdef OPENJDK
- BUILD_LIBJPEG_MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjpeg/mapfile-vers
+ BUILD_LIBJAVAJPEG_MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjpeg/mapfile-vers
else
- BUILD_LIBJPEG_MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjpeg/mapfile-vers-closed
- BUILD_LIBJPEG_CLOSED_SRC := $(JDK_TOPDIR)/src/closed/share/native/sun/awt/image/jpeg
- BUILD_LIBJPEG_CLOSED_INCLUDES := -I$(BUILD_LIBJPEG_CLOSED_SRC)
+ BUILD_LIBJAVAJPEG_MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjpeg/mapfile-vers-closed
+ BUILD_LIBJAVAJPEG_CLOSED_SRC := $(JDK_TOPDIR)/src/closed/share/native/sun/awt/image/jpeg
+ BUILD_LIBJAVAJPEG_CLOSED_INCLUDES := -I$(BUILD_LIBJAVAJPEG_CLOSED_SRC)
endif
-BUILD_LIBJPEG_REORDER :=
+BUILD_LIBJAVAJPEG_REORDER :=
ifeq ($(OPENJDK_TARGET_OS), solaris)
ifneq ($(OPENJDK_TARGET_CPU), x86_64)
- BUILD_LIBJPEG_REORDER := $(JDK_TOPDIR)/make/mapfiles/libjpeg/reorder-$(OPENJDK_TARGET_CPU)
+ BUILD_LIBJAVAJPEG_REORDER := $(JDK_TOPDIR)/make/mapfiles/libjpeg/reorder-$(OPENJDK_TARGET_CPU)
endif
endif
+
# Suppress gcc warnings like "variable might be clobbered by 'longjmp'
# or 'vfork'": this warning indicates that some variable is placed to
# a register by optimized compiler and it's value might be lost on longjmp().
@@ -735,37 +736,50 @@ endif
# $(shell $(EXPR) $(CC_MAJORVER) \> 4 \| \
# \( $(CC_MAJORVER) = 4 \& $(CC_MINORVER) \>= 3 \) )
# ifeq ($(CC_43_OR_NEWER), 1)
-# BUILD_LIBJPEG_CFLAGS_linux += -Wno-clobbered
+# BUILD_LIBJAVAJPEG_CFLAGS_linux += -Wno-clobbered
# endif
#endif
-$(eval $(call SetupNativeCompilation,BUILD_LIBJPEG, \
- LIBRARY := jpeg, \
+ifeq ($(USE_EXTERNAL_LIBJPEG), true)
+ LIBJPEG_LIBS := -ljpeg
+ BUILD_LIBJAVAJPEG_INCLUDE_FILES := \
+ imageIOJPEG.c \
+ jpegdecoder.c
+ BUILD_LIBJAVAJPEG_HEADERS :=
+else
+ LIBJPEG_LIBS :=
+ BUILD_LIBJAVAJPEG_INCLUDE_FILES :=
+ BUILD_LIBJAVAJPEG_HEADERS := -I$(BUILD_LIBJAVAJPEG_DIR)
+endif
+
+$(eval $(call SetupNativeCompilation,BUILD_LIBJAVAJPEG, \
+ LIBRARY := javajpeg, \
OUTPUT_DIR := $(INSTALL_LIBRARIES_HERE), \
- SRC := $(BUILD_LIBJPEG_CLOSED_SRC) \
- $(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg, \
+ SRC := $(BUILD_LIBJAVAJPEG_CLOSED_SRC) \
+ $(BUILD_LIBJAVAJPEG_DIR), \
+ INCLUDE_FILES := $(BUILD_LIBJAVAJPEG_INCLUDE_FILES), \
LANG := C, \
OPTIMIZATION := HIGHEST, \
CFLAGS := $(CFLAGS_JDKLIB) \
- $(BUILD_LIBJPEG_CLOSED_INCLUDES) \
- -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg, \
- MAPFILE := $(BUILD_LIBJPEG_MAPFILE), \
- LDFLAGS := $(LDFLAGS_JDKLIB) \
+ $(BUILD_LIBJAVAJPEG_CLOSED_INCLUDES) \
+ $(BUILD_LIBJAVAJPEG_HEADERS), \
+ MAPFILE := $(BUILD_LIBJAVAJPEG_MAPFILE), \
+ LDFLAGS := $(LDFLAGS_JDKLIB) $(LIBJPEG_LIBS) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_windows := $(WIN_JAVA_LIB) jvm.lib, \
LDFLAGS_SUFFIX := $(LDFLAGS_JDKLIB_SUFFIX), \
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
RC_FLAGS := $(RC_FLAGS) \
- -D "JDK_FNAME=jpeg.dll" \
- -D "JDK_INTERNAL_NAME=jpeg" \
+ -D "JDK_FNAME=javajpeg.dll" \
+ -D "JDK_INTERNAL_NAME=javajpeg" \
-D "JDK_FTYPE=0x2L", \
- REORDER := $(BUILD_LIBJPEG_REORDER), \
+ REORDER := $(BUILD_LIBJAVAJPEG_REORDER), \
OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libjpeg, \
DEBUG_SYMBOLS := $(DEBUG_ALL_BINARIES)))
-$(BUILD_LIBJPEG): $(BUILD_LIBJAVA)
+$(BUILD_LIBJAVAJPEG): $(BUILD_LIBJAVA)
-BUILD_LIBRARIES += $(BUILD_LIBJPEG)
+BUILD_LIBRARIES += $(BUILD_LIBJAVAJPEG)
##########################################################################################
@@ -1130,12 +1144,6 @@ ifeq ($(BUILD_HEADLESS), true)
-I$(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/native/sun/jdga \
$(foreach dir, $(LIBAWT_HEADLESS_DIRS), -I$(dir))
- ifeq ($(OPENJDK_TARGET_OS), macosx)
- LIBAWT_HEADLESS_CFLAGS += \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
- -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks
- endif
-
LIBAWT_HEADLESS_FILES := \
awt_Font.c \
HeadlessToolkit.c \
@@ -1213,6 +1221,13 @@ ifndef BUILD_HEADLESS_ONLY
GIFLIB_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/sun/awt/giflib
endif
+ ifeq ($(USE_EXTERNAL_LIBJPEG), true)
+ LIBJPEG_LDFLAGS := -ljpeg
+ else
+ LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg
+ LIBJPEG_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/sun/awt/image/jpeg
+ endif
+
ifeq ($(USE_EXTERNAL_LIBPNG), false)
LIBSPLASHSCREEN_DIRS += $(JDK_TOPDIR)/src/share/native/sun/awt/libpng
LIBPNG_CFLAGS := -I$(JDK_TOPDIR)/src/share/native/sun/awt/libpng
@@ -1229,8 +1244,7 @@ ifndef BUILD_HEADLESS_ONLY
ifeq ($(OPENJDK_TARGET_OS), macosx)
LIBSPLASHSCREEN_CFLAGS := -I$(JDK_TOPDIR)/src/macosx/native/sun/awt/splashscreen \
- $(LIBSPLASHSCREEN_CFLAGS) \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks
+ $(LIBSPLASHSCREEN_CFLAGS)
LIBSPLASHSCREEN_CFLAGS += -DWITH_MACOSX
LIBSPLASHSCREEN_CFLAGS += -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp
@@ -1260,7 +1274,6 @@ ifndef BUILD_HEADLESS_ONLY
-framework ApplicationServices \
-framework Foundation \
-framework Cocoa \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation
else ifeq ($(OPENJDK_TARGET_OS), windows)
LIBSPLASHSCREEN_LDFLAGS_SUFFIX += kernel32.lib user32.lib gdi32.lib delayimp.lib -DELAYLOAD:user32.dll
@@ -1276,12 +1289,12 @@ ifndef BUILD_HEADLESS_ONLY
LANG := C, \
OPTIMIZATION := LOW, \
CFLAGS := $(LIBSPLASHSCREEN_CFLAGS) $(CFLAGS_JDKLIB) \
- $(GIFLIB_CFLAGS) $(PNG_CFLAGS), \
+ $(GIFLIB_CFLAGS) $(LIBJPEG_CFLAGS) $(PNG_CFLAGS), \
MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libsplashscreen/mapfile-vers, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_SUFFIX := $(LIBSPLASHSCREEN_LDFLAGS_SUFFIX) $(LIBZ) \
- $(GIFLIB_LDFLAGS) $(PNG_LIBS), \
+ $(GIFLIB_LDFLAGS) $(LIBJPEG_LDFLAGS) $(PNG_LIBS), \
LDFLAGS_SUFFIX_solaris := -lc, \
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
RC_FLAGS := $(RC_FLAGS) \
@@ -1445,9 +1458,7 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
-I$(JDK_TOPDIR)/src/share/native/sun/awt/image/cvutils \
-I$(JDK_TOPDIR)/src/share/native/sun/java2d/loops \
-I$(JDK_TOPDIR)/src/share/native/sun/java2d/pipe \
- -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
- -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks, \
+ -I$(JDK_TOPDIR)/src/share/native/sun/awt/debug, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_SUFFIX_macosx := -lawt -lmlib_image -losxapp -ljvm $(LIBM) \
@@ -1458,7 +1469,6 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
-framework Cocoa \
-framework Security \
-framework ExceptionHandling \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation \
-framework JavaRuntimeSupport \
-framework OpenGL \
@@ -1491,8 +1501,7 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
CFLAGS := $(CFLAGS_JDKLIB) \
-I$(JDK_TOPDIR)/src/macosx/native/com/apple/laf \
-I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \
- -I$(JDK_TOPDIR)/src/macosx/native/sun/awt \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks, \
+ -I$(JDK_TOPDIR)/src/macosx/native/sun/awt, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN) \
-Xlinker -rpath -Xlinker @loader_path, \
@@ -1500,7 +1509,6 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
-framework Cocoa \
-framework Carbon \
-framework ApplicationServices \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation \
-framework JavaRuntimeSupport \
-ljava -ljvm, \
diff --git a/jdk/make/lib/CoreLibraries.gmk b/jdk/make/lib/CoreLibraries.gmk
index aa4d90c3e14..871e95a0dff 100644
--- a/jdk/make/lib/CoreLibraries.gmk
+++ b/jdk/make/lib/CoreLibraries.gmk
@@ -306,7 +306,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBPREFS, \
LDFLAGS_SUFFIX_solaris := -ljvm -ljava -lc, \
LDFLAGS_SUFFIX_aix := -ljvm -ljava, \
LDFLAGS_SUFFIX_windows := advapi32.lib jvm.lib $(WIN_JAVA_LIB), \
- LDFLAGS_SUFFIX_macosx := -ljvm -framework CoreFoundation, \
+ LDFLAGS_SUFFIX_macosx := -ljvm -framework CoreFoundation -framework Foundation, \
VERSIONINFO_RESOURCE := $(JDK_TOPDIR)/src/windows/resource/version.rc, \
RC_FLAGS := $(RC_FLAGS) \
-D "JDK_FNAME=prefs.dll" \
diff --git a/jdk/make/lib/PlatformLibraries.gmk b/jdk/make/lib/PlatformLibraries.gmk
index e78a9833dd5..e3fc71c4bf9 100644
--- a/jdk/make/lib/PlatformLibraries.gmk
+++ b/jdk/make/lib/PlatformLibraries.gmk
@@ -32,14 +32,11 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
LANG := C, \
OPTIMIZATION := LOW, \
CFLAGS := $(CFLAGS_JDKLIB) \
- -I$(JDK_TOPDIR)/src/macosx/native/apple/applescript \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
- -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks, \
+ -I$(JDK_TOPDIR)/src/macosx/native/apple/applescript, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_SUFFIX := -framework Cocoa \
-framework Carbon \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation \
$(LDFLAGS_JDKLIB_SUFFIX), \
OBJECT_DIR := $(JDK_OUTPUTDIR)/objs/libAppleScriptEngine, \
@@ -63,9 +60,7 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
OPTIMIZATION := LOW, \
CFLAGS := $(CFLAGS_JDKLIB) \
-I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \
- -I$(JDK_OUTPUTDIR)/gensrc_headers_icons \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
- -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks, \
+ -I$(JDK_OUTPUTDIR)/gensrc_headers_icons, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_SUFFIX_macosx := \
@@ -76,7 +71,6 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
-framework Cocoa \
-framework Security \
-framework ExceptionHandling \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation \
-framework JavaRuntimeSupport \
-framework OpenGL \
@@ -107,16 +101,13 @@ ifeq ($(OPENJDK_TARGET_OS), macosx)
OPTIMIZATION := LOW, \
CFLAGS := $(CFLAGS_JDKLIB) \
$(foreach dir, $(LIBOSX_DIRS), -I$(dir)) \
- -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
- -F/System/Library/Frameworks/ApplicationServices.framework/Frameworks, \
+ -I$(JDK_TOPDIR)/src/macosx/native/sun/osxapp, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_SUFFIX_macosx := \
-losxapp \
-framework Cocoa \
-framework ApplicationServices \
- -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation \
-framework JavaRuntimeSupport \
-framework Security \
diff --git a/jdk/make/lib/SecurityLibraries.gmk b/jdk/make/lib/SecurityLibraries.gmk
index 66c55b8264d..eeb062a30da 100644
--- a/jdk/make/lib/SecurityLibraries.gmk
+++ b/jdk/make/lib/SecurityLibraries.gmk
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
@@ -130,7 +130,7 @@ ifneq ($(BUILD_CRYPTO), no)
BUILD_LIBKRB5_NAME := osxkrb5
BUILD_LIBKRB5_SRC := $(JDK_TOPDIR)/src/share/native/sun/security/krb5 \
$(JDK_TOPDIR)/src/macosx/native/sun/security/krb5
- BUILD_LIBKRB5_LIBS := -F/System/Library/Frameworks/JavaVM.framework/Frameworks \
+ BUILD_LIBKRB5_LIBS := \
-framework JavaNativeFoundation \
-framework Cocoa \
-framework SystemConfiguration \
@@ -147,7 +147,6 @@ ifneq ($(BUILD_CRYPTO), no)
CFLAGS := $(CFLAGS_JDKLIB) \
-I$(JDK_TOPDIR)/src/share/native/sun/security/krb5, \
CFLAGS_windows := -I$(JDK_TOPDIR)/src/windows/native/sun/security/krb5, \
- CFLAGS_macosx := -F/System/Library/Frameworks/JavaVM.framework/Frameworks, \
LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_SUFFIX := $(BUILD_LIBKRB5_LIBS), \
diff --git a/jdk/make/mapfiles/libawt/mapfile-vers b/jdk/make/mapfiles/libawt/mapfile-vers
index b1c6a39ec1e..636c255c6c6 100644
--- a/jdk/make/mapfiles/libawt/mapfile-vers
+++ b/jdk/make/mapfiles/libawt/mapfile-vers
@@ -155,6 +155,7 @@ SUNWprivate_1.1 {
g_CMpDataID;
colorValueID;
mul8table;
+ div8table;
jvm;
# ProcessPath entry points and data
diff --git a/jdk/make/profile-includes.txt b/jdk/make/profile-includes.txt
index 2d013fc26fe..17728a7f3d9 100644
--- a/jdk/make/profile-includes.txt
+++ b/jdk/make/profile-includes.txt
@@ -56,7 +56,6 @@ PROFILE_1_JRE_LIB_FILES := \
$(OPENJDK_TARGET_CPU_LEGACY_LIB)/server/Xusage.txt \
calendars.properties \
classlist \
- currency.data \
ext/localedata.jar \
ext/meta-index \
ext/sunec.jar \
diff --git a/jdk/make/src/classes/build/tools/generatenimbus/PainterGenerator.java b/jdk/make/src/classes/build/tools/generatenimbus/PainterGenerator.java
index 07b016d75ff..265ab3c9e65 100644
--- a/jdk/make/src/classes/build/tools/generatenimbus/PainterGenerator.java
+++ b/jdk/make/src/classes/build/tools/generatenimbus/PainterGenerator.java
@@ -57,6 +57,9 @@ import java.util.Map;
* @author Jasper Potts
*/
public class PainterGenerator {
+
+ private static final boolean debug = false;
+
//a handful of counters, incremented whenever the associated object type is encounted.
//These counters form the basis of the field and method suffixes.
//These are all 1 based, because I felt like it :-)
@@ -384,16 +387,24 @@ public class PainterGenerator {
}
if (Float.isNaN(r)) {
- System.err.println("[Error] Encountered NaN: encode(" + x + ", " + a + ", " + b + ", " + w + ")");
+ if (debug) {
+ System.err.println("[Error] Encountered NaN: encode(" + x + ", " + a + ", " + b + ", " + w + ")");
+ }
return 0;
} else if (Float.isInfinite(r)) {
- System.err.println("[Error] Encountered Infinity: encode(" + x + ", " + a + ", " + b + ", " + w + ")");
+ if (debug) {
+ System.err.println("[Error] Encountered Infinity: encode(" + x + ", " + a + ", " + b + ", " + w + ")");
+ }
return 0;
} else if (r < 0) {
- System.err.println("[Error] encoded value was less than 0: encode(" + x + ", " + a + ", " + b + ", " + w + ")");
+ if (debug) {
+ System.err.println("[Error] encoded value was less than 0: encode(" + x + ", " + a + ", " + b + ", " + w + ")");
+ }
return 0;
} else if (r > 3) {
- System.err.println("[Error] encoded value was greater than 3: encode(" + x + ", " + a + ", " + b + ", " + w + ")");
+ if (debug) {
+ System.err.println("[Error] encoded value was greater than 3: encode(" + x + ", " + a + ", " + b + ", " + w + ")");
+ }
return 3;
} else {
return r;
diff --git a/jdk/make/src/classes/build/tools/tzdb/ChronoField.java b/jdk/make/src/classes/build/tools/tzdb/ChronoField.java
deleted file mode 100644
index 7ce34bbfae2..00000000000
--- a/jdk/make/src/classes/build/tools/tzdb/ChronoField.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * Copyright (c) 2012, Stephen Colebourne & Michael Nascimento Santos
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * * Neither the name of JSR-310 nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-package build.tools.tzdb;
-
-/**
- * A standard set of date/time fields.
- *
- * @since 1.8
- */
-enum ChronoField {
-
- /**
- * The second-of-minute.
- *
- * This counts the second within the minute, from 0 to 59.
- * This field has the same meaning for all calendar systems.
- */
- SECOND_OF_MINUTE("SecondOfMinute", 0, 59),
-
- /**
- * The second-of-day.
- *
- * This counts the second within the day, from 0 to (24 * 60 * 60) - 1.
- * This field has the same meaning for all calendar systems.
- */
- SECOND_OF_DAY("SecondOfDay", 0, 86400 - 1),
-
- /**
- * The minute-of-hour.
- *
- * This counts the minute within the hour, from 0 to 59.
- * This field has the same meaning for all calendar systems.
- */
- MINUTE_OF_HOUR("MinuteOfHour", 0, 59),
-
- /**
- * The hour-of-day.
- *
- * This counts the hour within the day, from 0 to 23.
- * This is the hour that would be observed on a standard 24-hour digital clock.
- * This field has the same meaning for all calendar systems.
- */
- HOUR_OF_DAY("HourOfDay", 0, 23),
-
-
- /**
- * The day-of-month.
- *
- * This represents the concept of the day within the month.
- * In the default ISO calendar system, this has values from 1 to 31 in most months.
- * April, June, September, November have days from 1 to 30, while February has days
- * from 1 to 28, or 29 in a leap year.
- *
- * Non-ISO calendar systems should implement this field using the most recognized
- * day-of-month values for users of the calendar system.
- * Normally, this is a count of days from 1 to the length of the month.
- */
- DAY_OF_MONTH("DayOfMonth", 1, 31),
-
- /**
- * The month-of-year, such as March.
- *
- * This represents the concept of the month within the year.
- * In the default ISO calendar system, this has values from January (1) to December (12).
- *
- * Non-ISO calendar systems should implement this field using the most recognized
- * month-of-year values for users of the calendar system.
- * Normally, this is a count of months starting from 1.
- */
- MONTH_OF_YEAR("MonthOfYear", 1, 12),
-
- /**
- * The proleptic year, such as 2012.
- *
- * This represents the concept of the year, counting sequentially and using negative numbers.
- * The proleptic year is not interpreted in terms of the era.
- * See {@link #YEAR_OF_ERA} for an example showing the mapping from proleptic year to year-of-era.
- *
- * The standard mental model for a date is based on three concepts - year, month and day.
- * These map onto the {@code YEAR}, {@code MONTH_OF_YEAR} and {@code DAY_OF_MONTH} fields.
- * Note that there is no reference to eras.
- * The full model for a date requires four concepts - era, year, month and day. These map onto
- * the {@code ERA}, {@code YEAR_OF_ERA}, {@code MONTH_OF_YEAR} and {@code DAY_OF_MONTH} fields.
- * Whether this field or {@code YEAR_OF_ERA} is used depends on which mental model is being used.
- * See {@link ChronoLocalDate} for more discussion on this topic.
- *
- * Non-ISO calendar systems should implement this field as follows.
- * If the calendar system has only two eras, before and after a fixed date, then the
- * proleptic-year value must be the same as the year-of-era value for the later era,
- * and increasingly negative for the earlier era.
- * If the calendar system has more than two eras, then the proleptic-year value may be
- * defined with any appropriate value, although defining it to be the same as ISO may be
- * the best option.
- */
- YEAR("Year", -999_999_999, 999_999_999);
-
- private final String name;
- private final int min;
- private final int max;
-
- private ChronoField(String name, int min, int max) {
- this.name = name;
- this.min= min;
- this.max= max;
- }
-
- /**
- * Checks that the specified value is valid for this field.
- *
- *
- * @param value the value to check
- * @return the value that was passed in
- */
- public int checkValidValue(int value) {
- if (value >= min && value <= max) {
- return value;
- }
- throw new DateTimeException("Invalid value for " + name + " value: " + value);
- }
-
- public String toString() {
- return name;
- }
-
-}
diff --git a/jdk/make/src/classes/build/tools/tzdb/DateTimeException.java b/jdk/make/src/classes/build/tools/tzdb/DateTimeException.java
deleted file mode 100644
index 2b7674df3ff..00000000000
--- a/jdk/make/src/classes/build/tools/tzdb/DateTimeException.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * This file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Copyright (c) 2008-2012, Stephen Colebourne & Michael Nascimento Santos
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * * Neither the name of JSR-310 nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package build.tools.tzdb;
-
-/**
- * Exception used to indicate a problem while calculating a date-time.
- *
- * This exception is used to indicate problems with creating, querying
- * and manipulating date-time objects.
- *
- * @since 1.8
- */
-class DateTimeException extends RuntimeException {
-
- /**
- * Serialization version.
- */
- private static final long serialVersionUID = -1632418723876261839L;
-
- /**
- * Constructs a new date-time exception with the specified message.
- *
- * @param message the message to use for this exception, may be null
- */
- public DateTimeException(String message) {
- super(message);
- }
-
- /**
- * Constructs a new date-time exception with the specified message and cause.
- *
- * @param message the message to use for this exception, may be null
- * @param cause the cause of the exception, may be null
- */
- public DateTimeException(String message, Throwable cause) {
- super(message, cause);
- }
-
-}
diff --git a/jdk/make/src/classes/build/tools/tzdb/LocalDate.java b/jdk/make/src/classes/build/tools/tzdb/LocalDate.java
deleted file mode 100644
index fedab6d3156..00000000000
--- a/jdk/make/src/classes/build/tools/tzdb/LocalDate.java
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * This file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Copyright (c) 2007-2012, Stephen Colebourne & Michael Nascimento Santos
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * * Neither the name of JSR-310 nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package build.tools.tzdb;
-
-import static build.tools.tzdb.Utils.*;
-import static build.tools.tzdb.LocalTime.SECONDS_PER_DAY;
-import static build.tools.tzdb.ChronoField.DAY_OF_MONTH;
-import static build.tools.tzdb.ChronoField.MONTH_OF_YEAR;
-import static build.tools.tzdb.ChronoField.YEAR;
-
-import java.util.Objects;
-
-/**
- * A date without a time-zone in the ISO-8601 calendar system,
- * such as {@code 2007-12-03}.
- *
- * @since 1.8
- */
-final class LocalDate {
-
- /**
- * The minimum supported {@code LocalDate}, '-999999999-01-01'.
- * This could be used by an application as a "far past" date.
- */
- public static final LocalDate MIN = new LocalDate(YEAR_MIN_VALUE, 1, 1);
- /**
- * The maximum supported {@code LocalDate}, '+999999999-12-31'.
- * This could be used by an application as a "far future" date.
- */
- public static final LocalDate MAX = new LocalDate(YEAR_MAX_VALUE, 12, 31);
-
- /**
- * The number of days in a 400 year cycle.
- */
- private static final int DAYS_PER_CYCLE = 146097;
- /**
- * The number of days from year zero to year 1970.
- * There are five 400 year cycles from year zero to 2000.
- * There are 7 leap years from 1970 to 2000.
- */
- static final long DAYS_0000_TO_1970 = (DAYS_PER_CYCLE * 5L) - (30L * 365L + 7L);
-
- /**
- * The year.
- */
- private final int year;
- /**
- * The month-of-year.
- */
- private final short month;
- /**
- * The day-of-month.
- */
- private final short day;
-
- /**
- * Obtains an instance of {@code LocalDate} from a year, month and day.
- *
- * The day must be valid for the year and month, otherwise an exception will be thrown.
- *
- * @param year the year to represent, from MIN_YEAR to MAX_YEAR
- * @param month the month-of-year to represent, from 1 (January) to 12 (December)
- * @param dayOfMonth the day-of-month to represent, from 1 to 31
- * @return the local date, not null
- * @throws DateTimeException if the value of any field is out of range
- * @throws DateTimeException if the day-of-month is invalid for the month-year
- */
- public static LocalDate of(int year, int month, int dayOfMonth) {
- YEAR.checkValidValue(year);
- MONTH_OF_YEAR.checkValidValue(month);
- DAY_OF_MONTH.checkValidValue(dayOfMonth);
- if (dayOfMonth > 28 && dayOfMonth > lengthOfMonth(month, isLeapYear(year))) {
- if (dayOfMonth == 29) {
- throw new DateTimeException("Invalid date 'February 29' as '" + year + "' is not a leap year");
- } else {
- throw new DateTimeException("Invalid date '" + month + " " + dayOfMonth + "'");
- }
- }
- return new LocalDate(year, month, dayOfMonth);
- }
-
- /**
- * Constructor, previously validated.
- *
- * @param year the year to represent, from MIN_YEAR to MAX_YEAR
- * @param month the month-of-year to represent, not null
- * @param dayOfMonth the day-of-month to represent, valid for year-month, from 1 to 31
- */
- private LocalDate(int year, int month, int dayOfMonth) {
- this.year = year;
- this.month = (short) month;
- this.day = (short) dayOfMonth;
- }
-
- /**
- * Gets the year field.
- *
- * This method returns the primitive {@code int} value for the year.
- *
- * The year returned by this method is proleptic as per {@code get(YEAR)}.
- * To obtain the year-of-era, use {@code get(YEAR_OF_ERA}.
- *
- * @return the year, from MIN_YEAR to MAX_YEAR
- */
- public int getYear() {
- return year;
- }
-
- /**
- * Gets the month-of-year field as an int from 1 to 12.
- *
- * @return the month-of-year
- */
- public int getMonth() {
- return month;
- }
-
- /**
- * Gets the day-of-month field.
- *
- * This method returns the primitive {@code int} value for the day-of-month.
- *
- * @return the day-of-month, from 1 to 31
- */
- public int getDayOfMonth() {
- return day;
- }
-
- /**
- * Gets the day-of-week field, which is an int from 1 to 7.
- *
- * @return the day-of-week
- */
- public int getDayOfWeek() {
- return (int)floorMod(toEpochDay() + 3, 7) + 1;
- }
-
- /**
- * Returns a copy of this {@code LocalDate} with the specified number of days added.
- *
- * This method adds the specified amount to the days field incrementing the
- * month and year fields as necessary to ensure the result remains valid.
- * The result is only invalid if the maximum/minimum year is exceeded.
- *
- * For example, 2008-12-31 plus one day would result in 2009-01-01.
- *
- * This instance is immutable and unaffected by this method call.
- *
- * @param daysToAdd the days to add, may be negative
- * @return a {@code LocalDate} based on this date with the days added, not null
- * @throws DateTimeException if the result exceeds the supported date range
- */
- public LocalDate plusDays(long daysToAdd) {
- if (daysToAdd == 0) {
- return this;
- }
- long mjDay = addExact(toEpochDay(), daysToAdd);
- return LocalDate.ofEpochDay(mjDay);
- }
-
- /**
- * Returns a copy of this {@code LocalDate} with the specified number of days subtracted.
- *
- * This method subtracts the specified amount from the days field decrementing the
- * month and year fields as necessary to ensure the result remains valid.
- * The result is only invalid if the maximum/minimum year is exceeded.
- *
- * For example, 2009-01-01 minus one day would result in 2008-12-31.
- *
- * This instance is immutable and unaffected by this method call.
- *
- * @param daysToSubtract the days to subtract, may be negative
- * @return a {@code LocalDate} based on this date with the days subtracted, not null
- * @throws DateTimeException if the result exceeds the supported date range
- */
- public LocalDate minusDays(long daysToSubtract) {
- return (daysToSubtract == Long.MIN_VALUE ? plusDays(Long.MAX_VALUE).plusDays(1) : plusDays(-daysToSubtract));
- }
-
- /**
- * Obtains an instance of {@code LocalDate} from the epoch day count.
- *
- * The Epoch Day count is a simple incrementing count of days
- * where day 0 is 1970-01-01. Negative numbers represent earlier days.
- *
- * @param epochDay the Epoch Day to convert, based on the epoch 1970-01-01
- * @return the local date, not null
- * @throws DateTimeException if the epoch days exceeds the supported date range
- */
- public static LocalDate ofEpochDay(long epochDay) {
- long zeroDay = epochDay + DAYS_0000_TO_1970;
- // find the march-based year
- zeroDay -= 60; // adjust to 0000-03-01 so leap day is at end of four year cycle
- long adjust = 0;
- if (zeroDay < 0) {
- // adjust negative years to positive for calculation
- long adjustCycles = (zeroDay + 1) / DAYS_PER_CYCLE - 1;
- adjust = adjustCycles * 400;
- zeroDay += -adjustCycles * DAYS_PER_CYCLE;
- }
- long yearEst = (400 * zeroDay + 591) / DAYS_PER_CYCLE;
- long doyEst = zeroDay - (365 * yearEst + yearEst / 4 - yearEst / 100 + yearEst / 400);
- if (doyEst < 0) {
- // fix estimate
- yearEst--;
- doyEst = zeroDay - (365 * yearEst + yearEst / 4 - yearEst / 100 + yearEst / 400);
- }
- yearEst += adjust; // reset any negative year
- int marchDoy0 = (int) doyEst;
-
- // convert march-based values back to january-based
- int marchMonth0 = (marchDoy0 * 5 + 2) / 153;
- int month = (marchMonth0 + 2) % 12 + 1;
- int dom = marchDoy0 - (marchMonth0 * 306 + 5) / 10 + 1;
- yearEst += marchMonth0 / 10;
-
- // check year now we are certain it is correct
- int year = YEAR.checkValidValue((int)yearEst);
- return new LocalDate(year, month, dom);
- }
-
- public long toEpochDay() {
- long y = year;
- long m = month;
- long total = 0;
- total += 365 * y;
- if (y >= 0) {
- total += (y + 3) / 4 - (y + 99) / 100 + (y + 399) / 400;
- } else {
- total -= y / -4 - y / -100 + y / -400;
- }
- total += ((367 * m - 362) / 12);
- total += day - 1;
- if (m > 2) {
- total--;
- if (isLeapYear(year) == false) {
- total--;
- }
- }
- return total - DAYS_0000_TO_1970;
- }
-
- /**
- * Compares this date to another date.
- *
- * The comparison is primarily based on the date, from earliest to latest.
- * It is "consistent with equals", as defined by {@link Comparable}.
- *
- * If all the dates being compared are instances of {@code LocalDate},
- * then the comparison will be entirely based on the date.
- * If some dates being compared are in different chronologies, then the
- * chronology is also considered, see {@link java.time.temporal.ChronoLocalDate#compareTo}.
- *
- * @param other the other date to compare to, not null
- * @return the comparator value, negative if less, positive if greater
- */
- public int compareTo(LocalDate otherDate) {
- int cmp = (year - otherDate.year);
- if (cmp == 0) {
- cmp = (month - otherDate.month);
- if (cmp == 0) {
- cmp = (day - otherDate.day);
- }
- }
- return cmp;
- }
-
- /**
- * Checks if this date is equal to another date.
- *
- * Compares this {@code LocalDate} with another ensuring that the date is the same.
- *
- * Only objects of type {@code LocalDate} are compared, other types return false.
- * To compare the dates of two {@code TemporalAccessor} instances, including dates
- * in two different chronologies, use {@link ChronoField#EPOCH_DAY} as a comparator.
- *
- * @param obj the object to check, null returns false
- * @return true if this is equal to the other date
- */
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof LocalDate) {
- return compareTo((LocalDate) obj) == 0;
- }
- return false;
- }
-
- /**
- * A hash code for this date.
- *
- * @return a suitable hash code
- */
- @Override
- public int hashCode() {
- int yearValue = year;
- int monthValue = month;
- int dayValue = day;
- return (yearValue & 0xFFFFF800) ^ ((yearValue << 11) + (monthValue << 6) + (dayValue));
- }
-
-}
diff --git a/jdk/make/src/classes/build/tools/tzdb/LocalDateTime.java b/jdk/make/src/classes/build/tools/tzdb/LocalDateTime.java
deleted file mode 100644
index ced37b72613..00000000000
--- a/jdk/make/src/classes/build/tools/tzdb/LocalDateTime.java
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * This file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Copyright (c) 2007-2012, Stephen Colebourne & Michael Nascimento Santos
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * * Neither the name of JSR-310 nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package build.tools.tzdb;
-
-import static build.tools.tzdb.Utils.*;
-import static build.tools.tzdb.LocalTime.HOURS_PER_DAY;
-import static build.tools.tzdb.LocalTime.MICROS_PER_DAY;
-import static build.tools.tzdb.LocalTime.MILLIS_PER_DAY;
-import static build.tools.tzdb.LocalTime.MINUTES_PER_DAY;
-import static build.tools.tzdb.LocalTime.SECONDS_PER_DAY;
-import static build.tools.tzdb.LocalTime.SECONDS_PER_MINUTE;
-import static build.tools.tzdb.LocalTime.SECONDS_PER_HOUR;
-
-import java.util.Objects;
-
-/**
- * A date-time without a time-zone in the ISO-8601 calendar system,
- * such as {@code 2007-12-03T10:15:30}.
- *
- * @since 1.8
- */
-final class LocalDateTime {
-
- /**
- * The minimum supported {@code LocalDateTime}, '-999999999-01-01T00:00:00'.
- * This is the local date-time of midnight at the start of the minimum date.
- * This combines {@link LocalDate#MIN} and {@link LocalTime#MIN}.
- * This could be used by an application as a "far past" date-time.
- */
- public static final LocalDateTime MIN = LocalDateTime.of(LocalDate.MIN, LocalTime.MIN);
- /**
- * The maximum supported {@code LocalDateTime}, '+999999999-12-31T23:59:59.999999999'.
- * This is the local date-time just before midnight at the end of the maximum date.
- * This combines {@link LocalDate#MAX} and {@link LocalTime#MAX}.
- * This could be used by an application as a "far future" date-time.
- */
- public static final LocalDateTime MAX = LocalDateTime.of(LocalDate.MAX, LocalTime.MAX);
-
- /**
- * The date part.
- */
- private final LocalDate date;
- /**
- * The time part.
- */
- private final LocalTime time;
-
- /**
- * Obtains an instance of {@code LocalDateTime} from year, month,
- * day, hour and minute, setting the second and nanosecond to zero.
- *
- * The day must be valid for the year and month, otherwise an exception will be thrown.
- * The second and nanosecond fields will be set to zero.
- *
- * @param year the year to represent, from MIN_YEAR to MAX_YEAR
- * @param month the month-of-year to represent, from 1 (January) to 12 (December)
- * @param dayOfMonth the day-of-month to represent, from 1 to 31
- * @param hour the hour-of-day to represent, from 0 to 23
- * @param minute the minute-of-hour to represent, from 0 to 59
- * @return the local date-time, not null
- * @throws DateTimeException if the value of any field is out of range
- * @throws DateTimeException if the day-of-month is invalid for the month-year
- */
- public static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute) {
- LocalDate date = LocalDate.of(year, month, dayOfMonth);
- LocalTime time = LocalTime.of(hour, minute);
- return new LocalDateTime(date, time);
- }
-
- /**
- * Obtains an instance of {@code LocalDateTime} from a date and time.
- *
- * @param date the local date, not null
- * @param time the local time, not null
- * @return the local date-time, not null
- */
- public static LocalDateTime of(LocalDate date, LocalTime time) {
- Objects.requireNonNull(date, "date");
- Objects.requireNonNull(time, "time");
- return new LocalDateTime(date, time);
- }
-
- /**
- * Obtains an instance of {@code LocalDateTime} using seconds from the
- * epoch of 1970-01-01T00:00:00Z.
- *
- * This allows the {@link ChronoField#INSTANT_SECONDS epoch-second} field
- * to be converted to a local date-time. This is primarily intended for
- * low-level conversions rather than general application usage.
- *
- * @param epochSecond the number of seconds from the epoch of 1970-01-01T00:00:00Z
- * @param nanoOfSecond the nanosecond within the second, from 0 to 999,999,999
- * @param offset the zone offset, not null
- * @return the local date-time, not null
- * @throws DateTimeException if the result exceeds the supported range
- */
- public static LocalDateTime ofEpochSecond(long epochSecond, int nanoOfSecond, ZoneOffset offset) {
- Objects.requireNonNull(offset, "offset");
- long localSecond = epochSecond + offset.getTotalSeconds(); // overflow caught later
- long localEpochDay = floorDiv(localSecond, SECONDS_PER_DAY);
- int secsOfDay = (int)floorMod(localSecond, SECONDS_PER_DAY);
- LocalDate date = LocalDate.ofEpochDay(localEpochDay);
- LocalTime time = LocalTime.ofSecondOfDay(secsOfDay); // ignore nano
- return new LocalDateTime(date, time);
- }
-
- /**
- * Constructor.
- *
- * @param date the date part of the date-time, validated not null
- * @param time the time part of the date-time, validated not null
- */
- private LocalDateTime(LocalDate date, LocalTime time) {
- this.date = date;
- this.time = time;
- }
-
- /**
- * Returns a copy of this date-time with the new date and time, checking
- * to see if a new object is in fact required.
- *
- * @param newDate the date of the new date-time, not null
- * @param newTime the time of the new date-time, not null
- * @return the date-time, not null
- */
- private LocalDateTime with(LocalDate newDate, LocalTime newTime) {
- if (date == newDate && time == newTime) {
- return this;
- }
- return new LocalDateTime(newDate, newTime);
- }
-
- /**
- * Gets the {@code LocalDate} part of this date-time.
- *
- * This returns a {@code LocalDate} with the same year, month and day
- * as this date-time.
- *
- * @return the date part of this date-time, not null
- */
- public LocalDate getDate() {
- return date;
- }
-
- /**
- * Gets the year field.
- *
- * This method returns the primitive {@code int} value for the year.
- *
- * The year returned by this method is proleptic as per {@code get(YEAR)}.
- * To obtain the year-of-era, use {@code get(YEAR_OF_ERA}.
- *
- * @return the year, from MIN_YEAR to MAX_YEAR
- */
- public int getYear() {
- return date.getYear();
- }
-
- /**
- * Gets the month-of-year field as an int from 1 to 12.
- *
- * @return the month-of-year
- */
- public int getMonth() {
- return date.getMonth();
- }
-
- /**
- * Gets the day-of-month field.
- *
- * This method returns the primitive {@code int} value for the day-of-month.
- *
- * @return the day-of-month, from 1 to 31
- */
- public int getDayOfMonth() {
- return date.getDayOfMonth();
- }
-
- /**
- * Gets the day-of-week field, which is an integer from 1 to 7.
- *
- * @return the day-of-week, from 1 to 7
- */
- public int getDayOfWeek() {
- return date.getDayOfWeek();
- }
-
- /**
- * Gets the {@code LocalTime} part of this date-time.
- *
- * This returns a {@code LocalTime} with the same hour, minute, second and
- * nanosecond as this date-time.
- *
- * @return the time part of this date-time, not null
- */
- public LocalTime getTime() {
- return time;
- }
-
- /**
- * Gets the hour-of-day field.
- *
- * @return the hour-of-day, from 0 to 23
- */
- public int getHour() {
- return time.getHour();
- }
-
- /**
- * Gets the minute-of-hour field.
- *
- * @return the minute-of-hour, from 0 to 59
- */
- public int getMinute() {
- return time.getMinute();
- }
-
- /**
- * Gets the second-of-minute field.
- *
- * @return the second-of-minute, from 0 to 59
- */
- public int getSecond() {
- return time.getSecond();
- }
-
- /**
- * Converts this date-time to the number of seconds from the epoch
- * of 1970-01-01T00:00:00Z.
- *
- * This combines this local date-time and the specified offset to calculate the
- * epoch-second value, which is the number of elapsed seconds from 1970-01-01T00:00:00Z.
- * Instants on the time-line after the epoch are positive, earlier are negative.
- *
- * This default implementation calculates from the epoch-day of the date and the
- * second-of-day of the time.
- *
- * @param offset the offset to use for the conversion, not null
- * @return the number of seconds from the epoch of 1970-01-01T00:00:00Z
- */
- public long toEpochSecond(ZoneOffset offset) {
- Objects.requireNonNull(offset, "offset");
- long epochDay = getDate().toEpochDay();
- long secs = epochDay * 86400 + getTime().toSecondOfDay();
- secs -= offset.getTotalSeconds();
- return secs;
- }
-
- /**
- * Returns a copy of this {@code LocalDateTime} with the specified period in days added.
- *
- * This method adds the specified amount to the days field incrementing the
- * month and year fields as necessary to ensure the result remains valid.
- * The result is only invalid if the maximum/minimum year is exceeded.
- *
- * For example, 2008-12-31 plus one day would result in 2009-01-01.
- *
- * This instance is immutable and unaffected by this method call.
- *
- * @param days the days to add, may be negative
- * @return a {@code LocalDateTime} based on this date-time with the days added, not null
- * @throws DateTimeException if the result exceeds the supported date range
- */
- public LocalDateTime plusDays(long days) {
- LocalDate newDate = date.plusDays(days);
- return with(newDate, time);
- }
-
- /**
- * Returns a copy of this {@code LocalDateTime} with the specified period in seconds added.
- *
- * This instance is immutable and unaffected by this method call.
- *
- * @param seconds the seconds to add, may be negative
- * @return a {@code LocalDateTime} based on this date-time with the seconds added, not null
- * @throws DateTimeException if the result exceeds the supported date range
- */
- public LocalDateTime plusSeconds(long seconds) {
- return plusWithOverflow(date, 0, 0, seconds, 1);
- }
-
- /**
- * Returns a copy of this {@code LocalDateTime} with the specified period added.
- *
- * This instance is immutable and unaffected by this method call.
- *
- * @param newDate the new date to base the calculation on, not null
- * @param hours the hours to add, may be negative
- * @param minutes the minutes to add, may be negative
- * @param seconds the seconds to add, may be negative
- * @param nanos the nanos to add, may be negative
- * @param sign the sign to determine add or subtract
- * @return the combined result, not null
- */
- private LocalDateTime plusWithOverflow(LocalDate newDate, long hours, long minutes, long seconds, int sign) {
- if ((hours | minutes | seconds) == 0) {
- return with(newDate, time);
- }
- long totDays = seconds / SECONDS_PER_DAY + // max/24*60*60
- minutes / MINUTES_PER_DAY + // max/24*60
- hours / HOURS_PER_DAY; // max/24
- totDays *= sign; // total max*0.4237...
- long totSecs = (seconds % SECONDS_PER_DAY) +
- (minutes % MINUTES_PER_DAY) * SECONDS_PER_MINUTE +
- (hours % HOURS_PER_DAY) * SECONDS_PER_HOUR;
- long curSoD = time.toSecondOfDay();
- totSecs = totSecs * sign + curSoD; // total 432000000000000
- totDays += floorDiv(totSecs, SECONDS_PER_DAY);
-
- int newSoD = (int)floorMod(totSecs, SECONDS_PER_DAY);
- LocalTime newTime = (newSoD == curSoD ? time : LocalTime.ofSecondOfDay(newSoD));
- return with(newDate.plusDays(totDays), newTime);
- }
-
- /**
- * Compares this date-time to another date-time.
- *
- * The comparison is primarily based on the date-time, from earliest to latest.
- * It is "consistent with equals", as defined by {@link Comparable}.
- *
- * If all the date-times being compared are instances of {@code LocalDateTime},
- * then the comparison will be entirely based on the date-time.
- * If some dates being compared are in different chronologies, then the
- * chronology is also considered, see {@link ChronoLocalDateTime#compareTo}.
- *
- * @param other the other date-time to compare to, not null
- * @return the comparator value, negative if less, positive if greater
- */
- public int compareTo(LocalDateTime other) {
- int cmp = date.compareTo(other.getDate());
- if (cmp == 0) {
- cmp = time.compareTo(other.getTime());
- }
- return cmp;
- }
-
- /**
- * Checks if this date-time is equal to another date-time.
- *
- * Compares this {@code LocalDateTime} with another ensuring that the date-time is the same.
- * Only objects of type {@code LocalDateTime} are compared, other types return false.
- *
- * @param obj the object to check, null returns false
- * @return true if this is equal to the other date-time
- */
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof LocalDateTime) {
- LocalDateTime other = (LocalDateTime) obj;
- return date.equals(other.date) && time.equals(other.time);
- }
- return false;
- }
-
- /**
- * A hash code for this date-time.
- *
- * @return a suitable hash code
- */
- @Override
- public int hashCode() {
- return date.hashCode() ^ time.hashCode();
- }
-
-}
diff --git a/jdk/make/src/classes/build/tools/tzdb/LocalTime.java b/jdk/make/src/classes/build/tools/tzdb/LocalTime.java
deleted file mode 100644
index 0fc31868944..00000000000
--- a/jdk/make/src/classes/build/tools/tzdb/LocalTime.java
+++ /dev/null
@@ -1,388 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * This file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Copyright (c) 2007-2012, Stephen Colebourne & Michael Nascimento Santos
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * * Neither the name of JSR-310 nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package build.tools.tzdb;
-
-import static build.tools.tzdb.ChronoField.HOUR_OF_DAY;
-import static build.tools.tzdb.ChronoField.MINUTE_OF_HOUR;
-import static build.tools.tzdb.ChronoField.SECOND_OF_MINUTE;
-import static build.tools.tzdb.ChronoField.SECOND_OF_DAY;
-
-import java.util.Objects;
-
-/**
- * A time without time-zone in the ISO-8601 calendar system,
- * such as {@code 10:15:30}.
- *
- */
-final class LocalTime {
-
- /**
- * The minimum supported {@code LocalTime}, '00:00'.
- * This is the time of midnight at the start of the day.
- */
- public static final LocalTime MIN;
- /**
- * The minimum supported {@code LocalTime}, '23:59:59.999999999'.
- * This is the time just before midnight at the end of the day.
- */
- public static final LocalTime MAX;
- /**
- * The time of midnight at the start of the day, '00:00'.
- */
- public static final LocalTime MIDNIGHT;
- /**
- * The time of noon in the middle of the day, '12:00'.
- */
- public static final LocalTime NOON;
- /**
- * Constants for the local time of each hour.
- */
- private static final LocalTime[] HOURS = new LocalTime[24];
- static {
- for (int i = 0; i < HOURS.length; i++) {
- HOURS[i] = new LocalTime(i, 0, 0);
- }
- MIDNIGHT = HOURS[0];
- NOON = HOURS[12];
- MIN = HOURS[0];
- MAX = new LocalTime(23, 59, 59);
- }
-
- /**
- * Hours per day.
- */
- static final int HOURS_PER_DAY = 24;
- /**
- * Minutes per hour.
- */
- static final int MINUTES_PER_HOUR = 60;
- /**
- * Minutes per day.
- */
- static final int MINUTES_PER_DAY = MINUTES_PER_HOUR * HOURS_PER_DAY;
- /**
- * Seconds per minute.
- */
- static final int SECONDS_PER_MINUTE = 60;
- /**
- * Seconds per hour.
- */
- static final int SECONDS_PER_HOUR = SECONDS_PER_MINUTE * MINUTES_PER_HOUR;
- /**
- * Seconds per day.
- */
- static final int SECONDS_PER_DAY = SECONDS_PER_HOUR * HOURS_PER_DAY;
- /**
- * Milliseconds per day.
- */
- static final long MILLIS_PER_DAY = SECONDS_PER_DAY * 1000L;
- /**
- * Microseconds per day.
- */
- static final long MICROS_PER_DAY = SECONDS_PER_DAY * 1000_000L;
-
- /**
- * The hour.
- */
- private final byte hour;
- /**
- * The minute.
- */
- private final byte minute;
- /**
- * The second.
- */
- private final byte second;
-
- /**
- * Obtains an instance of {@code LocalTime} from an hour and minute.
- *
- * The second and nanosecond fields will be set to zero by this factory method.
- *
- * This factory may return a cached value, but applications must not rely on this.
- *
- * @param hour the hour-of-day to represent, from 0 to 23
- * @param minute the minute-of-hour to represent, from 0 to 59
- * @return the local time, not null
- * @throws DateTimeException if the value of any field is out of range
- */
- public static LocalTime of(int hour, int minute) {
- HOUR_OF_DAY.checkValidValue(hour);
- if (minute == 0) {
- return HOURS[hour]; // for performance
- }
- MINUTE_OF_HOUR.checkValidValue(minute);
- return new LocalTime(hour, minute, 0);
- }
-
- /**
- * Obtains an instance of {@code LocalTime} from an hour, minute and second.
- *
- * The nanosecond field will be set to zero by this factory method.
- *
- * This factory may return a cached value, but applications must not rely on this.
- *
- * @param hour the hour-of-day to represent, from 0 to 23
- * @param minute the minute-of-hour to represent, from 0 to 59
- * @param second the second-of-minute to represent, from 0 to 59
- * @return the local time, not null
- * @throws DateTimeException if the value of any field is out of range
- */
- public static LocalTime of(int hour, int minute, int second) {
- HOUR_OF_DAY.checkValidValue(hour);
- if ((minute | second) == 0) {
- return HOURS[hour]; // for performance
- }
- MINUTE_OF_HOUR.checkValidValue(minute);
- SECOND_OF_MINUTE.checkValidValue(second);
- return new LocalTime(hour, minute, second);
- }
-
- /**
- * Obtains an instance of {@code LocalTime} from a second-of-day value.
- *
- * This factory may return a cached value, but applications must not rely on this.
- *
- * @param secondOfDay the second-of-day, from {@code 0} to {@code 24 * 60 * 60 - 1}
- * @return the local time, not null
- * @throws DateTimeException if the second-of-day value is invalid
- */
- public static LocalTime ofSecondOfDay(int secondOfDay) {
- SECOND_OF_DAY.checkValidValue(secondOfDay);
- int hours = secondOfDay / SECONDS_PER_HOUR;
- secondOfDay -= hours * SECONDS_PER_HOUR;
- int minutes = secondOfDay / SECONDS_PER_MINUTE;
- secondOfDay -= minutes * SECONDS_PER_MINUTE;
- return create(hours, minutes, secondOfDay);
- }
-
-
- /**
- * Creates a local time from the hour, minute, second and nanosecond fields.
- *
- * This factory may return a cached value, but applications must not rely on this.
- *
- * @param hour the hour-of-day to represent, validated from 0 to 23
- * @param minute the minute-of-hour to represent, validated from 0 to 59
- * @param second the second-of-minute to represent, validated from 0 to 59
- * @return the local time, not null
- */
- private static LocalTime create(int hour, int minute, int second) {
- if ((minute | second) == 0) {
- return HOURS[hour];
- }
- return new LocalTime(hour, minute, second);
- }
-
- /**
- * Constructor, previously validated.
- *
- * @param hour the hour-of-day to represent, validated from 0 to 23
- * @param minute the minute-of-hour to represent, validated from 0 to 59
- * @param second the second-of-minute to represent, validated from 0 to 59
- */
- private LocalTime(int hour, int minute, int second) {
- this.hour = (byte) hour;
- this.minute = (byte) minute;
- this.second = (byte) second;
- }
-
- /**
- * Gets the hour-of-day field.
- *
- * @return the hour-of-day, from 0 to 23
- */
- public int getHour() {
- return hour;
- }
-
- /**
- * Gets the minute-of-hour field.
- *
- * @return the minute-of-hour, from 0 to 59
- */
- public int getMinute() {
- return minute;
- }
-
- /**
- * Gets the second-of-minute field.
- *
- * @return the second-of-minute, from 0 to 59
- */
- public int getSecond() {
- return second;
- }
-
- /**
- * Returns a copy of this {@code LocalTime} with the specified period in seconds added.
- *
- * This adds the specified number of seconds to this time, returning a new time.
- * The calculation wraps around midnight.
- *
- * This instance is immutable and unaffected by this method call.
- *
- * @param secondstoAdd the seconds to add, may be negative
- * @return a {@code LocalTime} based on this time with the seconds added, not null
- */
- public LocalTime plusSeconds(long secondstoAdd) {
- if (secondstoAdd == 0) {
- return this;
- }
- int sofd = hour * SECONDS_PER_HOUR +
- minute * SECONDS_PER_MINUTE + second;
- int newSofd = ((int) (secondstoAdd % SECONDS_PER_DAY) + sofd + SECONDS_PER_DAY) % SECONDS_PER_DAY;
- if (sofd == newSofd) {
- return this;
- }
- int newHour = newSofd / SECONDS_PER_HOUR;
- int newMinute = (newSofd / SECONDS_PER_MINUTE) % MINUTES_PER_HOUR;
- int newSecond = newSofd % SECONDS_PER_MINUTE;
- return create(newHour, newMinute, newSecond);
- }
-
- /**
- * Returns a copy of this {@code LocalTime} with the specified period in seconds subtracted.
- *
- * This subtracts the specified number of seconds from this time, returning a new time.
- * The calculation wraps around midnight.
- *
- * This instance is immutable and unaffected by this method call.
- *
- * @param secondsToSubtract the seconds to subtract, may be negative
- * @return a {@code LocalTime} based on this time with the seconds subtracted, not null
- */
- public LocalTime minusSeconds(long secondsToSubtract) {
- return plusSeconds(-(secondsToSubtract % SECONDS_PER_DAY));
- }
-
- /**
- * Extracts the time as seconds of day,
- * from {@code 0} to {@code 24 * 60 * 60 - 1}.
- *
- * @return the second-of-day equivalent to this time
- */
- public int toSecondOfDay() {
- int total = hour * SECONDS_PER_HOUR;
- total += minute * SECONDS_PER_MINUTE;
- total += second;
- return total;
- }
-
- /**
- * Compares this {@code LocalTime} to another time.
- *
- * The comparison is based on the time-line position of the local times within a day.
- * It is "consistent with equals", as defined by {@link Comparable}.
- *
- * @param other the other time to compare to, not null
- * @return the comparator value, negative if less, positive if greater
- * @throws NullPointerException if {@code other} is null
- */
- public int compareTo(LocalTime other) {
- int cmp = Integer.compare(hour, other.hour);
- if (cmp == 0) {
- cmp = Integer.compare(minute, other.minute);
- if (cmp == 0) {
- cmp = Integer.compare(second, other.second);
- }
- }
- return cmp;
- }
-
- /**
- * Checks if this time is equal to another time.
- *
- * The comparison is based on the time-line position of the time within a day.
- *
- * Only objects of type {@code LocalTime} are compared, other types return false.
- * To compare the date of two {@code TemporalAccessor} instances, use
- * {@link ChronoField#NANO_OF_DAY} as a comparator.
- *
- * @param obj the object to check, null returns false
- * @return true if this is equal to the other time
- */
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof LocalTime) {
- LocalTime other = (LocalTime) obj;
- return hour == other.hour && minute == other.minute &&
- second == other.second;
- }
- return false;
- }
-
- /**
- * A hash code for this time.
- *
- * @return a suitable hash code
- */
- @Override
- public int hashCode() {
- long sod = toSecondOfDay();
- return (int) (sod ^ (sod >>> 32));
- }
-
-}
diff --git a/jdk/make/src/classes/build/tools/tzdb/TimeDefinition.java b/jdk/make/src/classes/build/tools/tzdb/TimeDefinition.java
deleted file mode 100644
index 8a5853db3d7..00000000000
--- a/jdk/make/src/classes/build/tools/tzdb/TimeDefinition.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * This file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Copyright (c) 2009-2012, Stephen Colebourne & Michael Nascimento Santos
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * * Neither the name of JSR-310 nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package build.tools.tzdb;
-
-import java.util.Objects;
-
-/**
- * A definition of the way a local time can be converted to the actual
- * transition date-time.
- *
- * Time zone rules are expressed in one of three ways:
- *
- *
Relative to UTC
- *
Relative to the standard offset in force
- *
Relative to the wall offset (what you would see on a clock on the wall)
- *
- */
-public enum TimeDefinition {
- /** The local date-time is expressed in terms of the UTC offset. */
- UTC,
- /** The local date-time is expressed in terms of the wall offset. */
- WALL,
- /** The local date-time is expressed in terms of the standard offset. */
- STANDARD;
-
- /**
- * Converts the specified local date-time to the local date-time actually
- * seen on a wall clock.
- *
- * This method converts using the type of this enum.
- * The output is defined relative to the 'before' offset of the transition.
- *
- * The UTC type uses the UTC offset.
- * The STANDARD type uses the standard offset.
- * The WALL type returns the input date-time.
- * The result is intended for use with the wall-offset.
- *
- * @param dateTime the local date-time, not null
- * @param standardOffset the standard offset, not null
- * @param wallOffset the wall offset, not null
- * @return the date-time relative to the wall/before offset, not null
- */
- public LocalDateTime createDateTime(LocalDateTime dateTime, ZoneOffset standardOffset, ZoneOffset wallOffset) {
- switch (this) {
- case UTC: {
- int difference = wallOffset.getTotalSeconds() - ZoneOffset.UTC.getTotalSeconds();
- return dateTime.plusSeconds(difference);
- }
- case STANDARD: {
- int difference = wallOffset.getTotalSeconds() - standardOffset.getTotalSeconds();
- return dateTime.plusSeconds(difference);
- }
- default: // WALL
- return dateTime;
- }
- }
-
-}
diff --git a/jdk/make/src/classes/build/tools/tzdb/TzdbZoneRulesCompiler.java b/jdk/make/src/classes/build/tools/tzdb/TzdbZoneRulesCompiler.java
index 9f1204ca7fe..8cbdd0d44ff 100644
--- a/jdk/make/src/classes/build/tools/tzdb/TzdbZoneRulesCompiler.java
+++ b/jdk/make/src/classes/build/tools/tzdb/TzdbZoneRulesCompiler.java
@@ -56,8 +56,6 @@
*/
package build.tools.tzdb;
-import static build.tools.tzdb.Utils.*;
-
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.nio.charset.StandardCharsets;
@@ -179,15 +177,41 @@ public final class TzdbZoneRulesCompiler {
System.exit(1);
System.err.println("Source directory does not contain file: VERSION");
}
+
+ // load source files
printVerbose("Compiling TZDB version " + version);
- // parse source files
- for (Path file : srcFiles) {
- printVerbose("Parsing file: " + file);
- parseFile(file);
- }
+ TzdbZoneRulesProvider provider = new TzdbZoneRulesProvider(srcFiles);
+
// build zone rules
printVerbose("Building rules");
- buildZoneRules();
+
+ // Build the rules, zones and links into real zones.
+ SortedMap builtZones = new TreeMap<>();
+
+ // build zones
+ for (String zoneId : provider.getZoneIds()) {
+ printVerbose("Building zone " + zoneId);
+ builtZones.put(zoneId, provider.getZoneRules(zoneId));
+ }
+
+ // build aliases
+ Map links = provider.getAliasMap();
+ for (String aliasId : links.keySet()) {
+ String realId = links.get(aliasId);
+ printVerbose("Linking alias " + aliasId + " to " + realId);
+ ZoneRules realRules = builtZones.get(realId);
+ if (realRules == null) {
+ realId = links.get(realId); // try again (handle alias liked to alias)
+ printVerbose("Relinking alias " + aliasId + " to " + realId);
+ realRules = builtZones.get(realId);
+ if (realRules == null) {
+ throw new IllegalArgumentException("Alias '" + aliasId + "' links to invalid zone '" + realId);
+ }
+ links.put(aliasId, realId);
+ }
+ builtZones.put(aliasId, realRules);
+ }
+
// output to file
printVerbose("Outputting tzdb file: " + dstFile);
outputFile(dstFile, version, builtZones, links);
@@ -269,361 +293,13 @@ public final class TzdbZoneRulesCompiler {
}
}
- private static final Pattern YEAR = Pattern.compile("(?i)(?min)|(?max)|(?only)|(?[0-9]+)");
- private static final Pattern MONTH = Pattern.compile("(?i)(jan)|(feb)|(mar)|(apr)|(may)|(jun)|(jul)|(aug)|(sep)|(oct)|(nov)|(dec)");
- private static final Matcher DOW = Pattern.compile("(?i)(mon)|(tue)|(wed)|(thu)|(fri)|(sat)|(sun)").matcher("");
- private static final Matcher TIME = Pattern.compile("(?-)?+(?[0-9]{1,2})(:(?[0-5][0-9]))?+(:(?[0-5][0-9]))?+").matcher("");
-
- /** The TZDB rules. */
- private final Map> rules = new HashMap<>();
-
- /** The TZDB zones. */
- private final Map> zones = new HashMap<>();
-
- /** The TZDB links. */
- private final Map links = new HashMap<>();
-
- /** The built zones. */
- private final SortedMap builtZones = new TreeMap<>();
-
/** Whether to output verbose messages. */
private boolean verbose;
/**
* private contructor
*/
- private TzdbZoneRulesCompiler() {
- }
-
- /**
- * Parses a source file.
- *
- * @param file the file being read, not null
- * @throws Exception if an error occurs
- */
- private void parseFile(Path file) throws Exception {
- int lineNumber = 1;
- String line = null;
- try {
- List lines = Files.readAllLines(file, StandardCharsets.ISO_8859_1);
- List openZone = null;
- for (; lineNumber < lines.size(); lineNumber++) {
- line = lines.get(lineNumber);
- int index = line.indexOf('#'); // remove comments (doesn't handle # in quotes)
- if (index >= 0) {
- line = line.substring(0, index);
- }
- if (line.trim().length() == 0) { // ignore blank lines
- continue;
- }
- Scanner s = new Scanner(line);
- if (openZone != null && Character.isWhitespace(line.charAt(0)) && s.hasNext()) {
- if (parseZoneLine(s, openZone)) {
- openZone = null;
- }
- } else {
- if (s.hasNext()) {
- String first = s.next();
- if (first.equals("Zone")) {
- openZone = new ArrayList<>();
- try {
- zones.put(s.next(), openZone);
- if (parseZoneLine(s, openZone)) {
- openZone = null;
- }
- } catch (NoSuchElementException x) {
- printVerbose("Invalid Zone line in file: " + file + ", line: " + line);
- throw new IllegalArgumentException("Invalid Zone line");
- }
- } else {
- openZone = null;
- if (first.equals("Rule")) {
- try {
- parseRuleLine(s);
- } catch (NoSuchElementException x) {
- printVerbose("Invalid Rule line in file: " + file + ", line: " + line);
- throw new IllegalArgumentException("Invalid Rule line");
- }
- } else if (first.equals("Link")) {
- try {
- String realId = s.next();
- String aliasId = s.next();
- links.put(aliasId, realId);
- } catch (NoSuchElementException x) {
- printVerbose("Invalid Link line in file: " + file + ", line: " + line);
- throw new IllegalArgumentException("Invalid Link line");
- }
-
- } else {
- throw new IllegalArgumentException("Unknown line");
- }
- }
- }
- }
- }
- } catch (Exception ex) {
- throw new Exception("Failed while parsing file '" + file + "' on line " + lineNumber + " '" + line + "'", ex);
- }
- }
-
- /**
- * Parses a Rule line.
- *
- * @param s the line scanner, not null
- */
- private void parseRuleLine(Scanner s) {
- TZDBRule rule = new TZDBRule();
- String name = s.next();
- if (rules.containsKey(name) == false) {
- rules.put(name, new ArrayList());
- }
- rules.get(name).add(rule);
- rule.startYear = parseYear(s, 0);
- rule.endYear = parseYear(s, rule.startYear);
- if (rule.startYear > rule.endYear) {
- throw new IllegalArgumentException("Year order invalid: " + rule.startYear + " > " + rule.endYear);
- }
- parseOptional(s.next()); // type is unused
- parseMonthDayTime(s, rule);
- rule.savingsAmount = parsePeriod(s.next());
- rule.text = parseOptional(s.next());
- }
-
- /**
- * Parses a Zone line.
- *
- * @param s the line scanner, not null
- * @return true if the zone is complete
- */
- private boolean parseZoneLine(Scanner s, List zoneList) {
- TZDBZone zone = new TZDBZone();
- zoneList.add(zone);
- zone.standardOffset = parseOffset(s.next());
- String savingsRule = parseOptional(s.next());
- if (savingsRule == null) {
- zone.fixedSavingsSecs = 0;
- zone.savingsRule = null;
- } else {
- try {
- zone.fixedSavingsSecs = parsePeriod(savingsRule);
- zone.savingsRule = null;
- } catch (Exception ex) {
- zone.fixedSavingsSecs = null;
- zone.savingsRule = savingsRule;
- }
- }
- zone.text = s.next();
- if (s.hasNext()) {
- zone.year = Integer.parseInt(s.next());
- if (s.hasNext()) {
- parseMonthDayTime(s, zone);
- }
- return false;
- } else {
- return true;
- }
- }
-
- /**
- * Parses a Rule line.
- *
- * @param s the line scanner, not null
- * @param mdt the object to parse into, not null
- */
- private void parseMonthDayTime(Scanner s, TZDBMonthDayTime mdt) {
- mdt.month = parseMonth(s);
- if (s.hasNext()) {
- String dayRule = s.next();
- if (dayRule.startsWith("last")) {
- mdt.dayOfMonth = -1;
- mdt.dayOfWeek = parseDayOfWeek(dayRule.substring(4));
- mdt.adjustForwards = false;
- } else {
- int index = dayRule.indexOf(">=");
- if (index > 0) {
- mdt.dayOfWeek = parseDayOfWeek(dayRule.substring(0, index));
- dayRule = dayRule.substring(index + 2);
- } else {
- index = dayRule.indexOf("<=");
- if (index > 0) {
- mdt.dayOfWeek = parseDayOfWeek(dayRule.substring(0, index));
- mdt.adjustForwards = false;
- dayRule = dayRule.substring(index + 2);
- }
- }
- mdt.dayOfMonth = Integer.parseInt(dayRule);
- }
- if (s.hasNext()) {
- String timeStr = s.next();
- int secsOfDay = parseSecs(timeStr);
- if (secsOfDay == 86400) {
- mdt.endOfDay = true;
- secsOfDay = 0;
- }
- LocalTime time = LocalTime.ofSecondOfDay(secsOfDay);
- mdt.time = time;
- mdt.timeDefinition = parseTimeDefinition(timeStr.charAt(timeStr.length() - 1));
- }
- }
- }
-
- private int parseYear(Scanner s, int defaultYear) {
- if (s.hasNext(YEAR)) {
- s.next(YEAR);
- MatchResult mr = s.match();
- if (mr.group(1) != null) {
- return 1900; // systemv has min
- } else if (mr.group(2) != null) {
- return YEAR_MAX_VALUE;
- } else if (mr.group(3) != null) {
- return defaultYear;
- }
- return Integer.parseInt(mr.group(4));
- /*
- if (mr.group("min") != null) {
- //return YEAR_MIN_VALUE;
- return 1900; // systemv has min
- } else if (mr.group("max") != null) {
- return YEAR_MAX_VALUE;
- } else if (mr.group("only") != null) {
- return defaultYear;
- }
- return Integer.parseInt(mr.group("year"));
- */
- }
- throw new IllegalArgumentException("Unknown year: " + s.next());
- }
-
- private int parseMonth(Scanner s) {
- if (s.hasNext(MONTH)) {
- s.next(MONTH);
- for (int moy = 1; moy < 13; moy++) {
- if (s.match().group(moy) != null) {
- return moy;
- }
- }
- }
- throw new IllegalArgumentException("Unknown month: " + s.next());
- }
-
- private int parseDayOfWeek(String str) {
- if (DOW.reset(str).matches()) {
- for (int dow = 1; dow < 8; dow++) {
- if (DOW.group(dow) != null) {
- return dow;
- }
- }
- }
- throw new IllegalArgumentException("Unknown day-of-week: " + str);
- }
-
- private String parseOptional(String str) {
- return str.equals("-") ? null : str;
- }
-
- private int parseSecs(String str) {
- if (str.equals("-")) {
- return 0;
- }
- try {
- if (TIME.reset(str).find()) {
- int secs = Integer.parseInt(TIME.group("hour")) * 60 * 60;
- if (TIME.group("minute") != null) {
- secs += Integer.parseInt(TIME.group("minute")) * 60;
- }
- if (TIME.group("second") != null) {
- secs += Integer.parseInt(TIME.group("second"));
- }
- if (TIME.group("neg") != null) {
- secs = -secs;
- }
- return secs;
- }
- } catch (NumberFormatException x) {}
- throw new IllegalArgumentException(str);
- }
-
- private ZoneOffset parseOffset(String str) {
- int secs = parseSecs(str);
- return ZoneOffset.ofTotalSeconds(secs);
- }
-
- private int parsePeriod(String str) {
- return parseSecs(str);
- }
-
- private TimeDefinition parseTimeDefinition(char c) {
- switch (c) {
- case 's':
- case 'S':
- // standard time
- return TimeDefinition.STANDARD;
- case 'u':
- case 'U':
- case 'g':
- case 'G':
- case 'z':
- case 'Z':
- // UTC
- return TimeDefinition.UTC;
- case 'w':
- case 'W':
- default:
- // wall time
- return TimeDefinition.WALL;
- }
- }
-
- /**
- * Build the rules, zones and links into real zones.
- *
- * @throws Exception if an error occurs
- */
- private void buildZoneRules() throws Exception {
- // build zones
- for (String zoneId : zones.keySet()) {
- printVerbose("Building zone " + zoneId);
- List tzdbZones = zones.get(zoneId);
- ZoneRulesBuilder bld = new ZoneRulesBuilder();
- for (TZDBZone tzdbZone : tzdbZones) {
- bld = tzdbZone.addToBuilder(bld, rules);
- }
- builtZones.put(zoneId, bld.toRules(zoneId));
- }
-
- // build aliases
- for (String aliasId : links.keySet()) {
- String realId = links.get(aliasId);
- printVerbose("Linking alias " + aliasId + " to " + realId);
- ZoneRules realRules = builtZones.get(realId);
- if (realRules == null) {
- realId = links.get(realId); // try again (handle alias liked to alias)
- printVerbose("Relinking alias " + aliasId + " to " + realId);
- realRules = builtZones.get(realId);
- if (realRules == null) {
- throw new IllegalArgumentException("Alias '" + aliasId + "' links to invalid zone '" + realId);
- }
- links.put(aliasId, realId);
- }
- builtZones.put(aliasId, realRules);
- }
- // remove UTC and GMT
- // builtZones.remove("UTC");
- // builtZones.remove("GMT");
- // builtZones.remove("GMT0");
- builtZones.remove("GMT+0");
- builtZones.remove("GMT-0");
- links.remove("GMT+0");
- links.remove("GMT-0");
- // remove ROC, which is not supported in j.u.tz
- builtZones.remove("ROC");
- links.remove("ROC");
- // remove EST, HST and MST. They are supported via
- // the short-id mapping
- builtZones.remove("EST");
- builtZones.remove("HST");
- builtZones.remove("MST");
- }
+ private TzdbZoneRulesCompiler() {}
/**
* Prints a verbose message.
@@ -635,109 +311,4 @@ public final class TzdbZoneRulesCompiler {
System.out.println(message);
}
}
-
- /**
- * Class representing a month-day-time in the TZDB file.
- */
- abstract class TZDBMonthDayTime {
- /** The month of the cutover. */
- int month = 1;
- /** The day-of-month of the cutover. */
- int dayOfMonth = 1;
- /** Whether to adjust forwards. */
- boolean adjustForwards = true;
- /** The day-of-week of the cutover. */
- int dayOfWeek = -1;
- /** The time of the cutover. */
- LocalTime time = LocalTime.MIDNIGHT;
- /** Whether this is midnight end of day. */
- boolean endOfDay;
- /** The time of the cutover. */
- TimeDefinition timeDefinition = TimeDefinition.WALL;
- void adjustToFowards(int year) {
- if (adjustForwards == false && dayOfMonth > 0) {
- LocalDate adjustedDate = LocalDate.of(year, month, dayOfMonth).minusDays(6);
- dayOfMonth = adjustedDate.getDayOfMonth();
- month = adjustedDate.getMonth();
- adjustForwards = true;
- }
- }
- }
-
- /**
- * Class representing a rule line in the TZDB file.
- */
- final class TZDBRule extends TZDBMonthDayTime {
- /** The start year. */
- int startYear;
- /** The end year. */
- int endYear;
- /** The amount of savings. */
- int savingsAmount;
- /** The text name of the zone. */
- String text;
-
- void addToBuilder(ZoneRulesBuilder bld) {
- adjustToFowards(2004); // irrelevant, treat as leap year
- bld.addRuleToWindow(startYear, endYear, month, dayOfMonth, dayOfWeek, time, endOfDay, timeDefinition, savingsAmount);
- }
- }
-
- /**
- * Class representing a linked set of zone lines in the TZDB file.
- */
- final class TZDBZone extends TZDBMonthDayTime {
- /** The standard offset. */
- ZoneOffset standardOffset;
- /** The fixed savings amount. */
- Integer fixedSavingsSecs;
- /** The savings rule. */
- String savingsRule;
- /** The text name of the zone. */
- String text;
- /** The year of the cutover. */
- int year = YEAR_MAX_VALUE;
-
- ZoneRulesBuilder addToBuilder(ZoneRulesBuilder bld, Map> rules) {
- if (year != YEAR_MAX_VALUE) {
- bld.addWindow(standardOffset, toDateTime(year), timeDefinition);
- } else {
- bld.addWindowForever(standardOffset);
- }
- if (fixedSavingsSecs != null) {
- bld.setFixedSavingsToWindow(fixedSavingsSecs);
- } else {
- List tzdbRules = rules.get(savingsRule);
- if (tzdbRules == null) {
- throw new IllegalArgumentException("Rule not found: " + savingsRule);
- }
- for (TZDBRule tzdbRule : tzdbRules) {
- tzdbRule.addToBuilder(bld);
- }
- }
- return bld;
- }
-
- private LocalDateTime toDateTime(int year) {
- adjustToFowards(year);
- LocalDate date;
- if (dayOfMonth == -1) {
- dayOfMonth = lengthOfMonth(month, isLeapYear(year));
- date = LocalDate.of(year, month, dayOfMonth);
- if (dayOfWeek != -1) {
- date = previousOrSame(date, dayOfWeek);
- }
- } else {
- date = LocalDate.of(year, month, dayOfMonth);
- if (dayOfWeek != -1) {
- date = nextOrSame(date, dayOfWeek);
- }
- }
- LocalDateTime ldt = LocalDateTime.of(date, time);
- if (endOfDay) {
- ldt = ldt.plusDays(1);
- }
- return ldt;
- }
- }
}
diff --git a/jdk/make/src/classes/build/tools/tzdb/TzdbZoneRulesProvider.java b/jdk/make/src/classes/build/tools/tzdb/TzdbZoneRulesProvider.java
new file mode 100644
index 00000000000..220de9276c7
--- /dev/null
+++ b/jdk/make/src/classes/build/tools/tzdb/TzdbZoneRulesProvider.java
@@ -0,0 +1,843 @@
+/*
+ * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+package build.tools.tzdb;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.NavigableMap;
+import java.util.Objects;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.TreeSet;
+import java.util.concurrent.ConcurrentHashMap;
+import java.time.*;
+import java.time.Year;
+import java.time.chrono.IsoChronology;
+import java.time.temporal.TemporalAdjusters;
+import java.time.zone.ZoneOffsetTransition;
+import java.time.zone.ZoneOffsetTransitionRule;
+import java.time.zone.ZoneOffsetTransitionRule.TimeDefinition;
+import java.time.zone.ZoneRulesException;
+
+/**
+ * Compile and build time-zone rules from IANA timezone data
+ *
+ * @author Xueming Shen
+ * @author Stephen Colebourne
+ * @author Michael Nascimento Santos
+ *
+ * @since 1.9
+ */
+
+class TzdbZoneRulesProvider {
+
+ /**
+ * Creates an instance.
+ *
+ * @throws ZoneRulesException if unable to load
+ */
+ public TzdbZoneRulesProvider(List files) {
+ try {
+ load(files);
+ } catch (Exception ex) {
+ throw new ZoneRulesException("Unable to load TZDB time-zone rules", ex);
+ }
+ }
+
+ public Set getZoneIds() {
+ return new TreeSet(regionIds);
+ }
+
+ public Map getAliasMap() {
+ return links;
+ }
+
+ public ZoneRules getZoneRules(String zoneId) {
+ Object obj = zones.get(zoneId);
+ if (obj == null) {
+ String zoneId0 = zoneId;
+ if (links.containsKey(zoneId)) {
+ zoneId = links.get(zoneId);
+ obj = zones.get(zoneId);
+ }
+ if (obj == null) {
+ throw new ZoneRulesException("Unknown time-zone ID: " + zoneId0);
+ }
+ }
+ if (obj instanceof ZoneRules) {
+ return (ZoneRules)obj;
+ }
+ try {
+ ZoneRules zrules = buildRules(zoneId, (List)obj);
+ zones.put(zoneId, zrules);
+ return zrules;
+ } catch (Exception ex) {
+ throw new ZoneRulesException(
+ "Invalid binary time-zone data: TZDB:" + zoneId, ex);
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////
+
+ /**
+ * All the regions that are available.
+ */
+ private List regionIds = new ArrayList<>(600);
+
+ /**
+ * Zone region to rules mapping
+ */
+ private final Map zones = new ConcurrentHashMap<>();
+
+ /**
+ * compatibility list
+ */
+ private static HashSet excludedZones;
+ static {
+ // (1) exclude EST, HST and MST. They are supported
+ // via the short-id mapping
+ // (2) remove UTC and GMT
+ // (3) remove ROC, which is not supported in j.u.tz
+ excludedZones = new HashSet<>(10);
+ excludedZones.add("EST");
+ excludedZones.add("HST");
+ excludedZones.add("MST");
+ excludedZones.add("GMT+0");
+ excludedZones.add("GMT-0");
+ excludedZones.add("ROC");
+ }
+
+ private Map links = new HashMap<>(150);
+ private Map> rules = new HashMap<>(500);
+
+ private void load(List files) throws IOException {
+
+ for (Path file : files) {
+ List openZone = null;
+ try {
+ for (String line : Files.readAllLines(file, StandardCharsets.ISO_8859_1)) {
+ if (line.length() == 0 || line.charAt(0) == '#') {
+ continue;
+ }
+ //StringIterator itr = new StringIterator(line);
+ String[] tokens = split(line);
+ if (openZone != null && // continuing zone line
+ Character.isWhitespace(line.charAt(0)) &&
+ tokens.length > 0) {
+ ZoneLine zLine = new ZoneLine();
+ openZone.add(zLine);
+ if (zLine.parse(tokens, 0)) {
+ openZone = null;
+ }
+ continue;
+ }
+ if (line.startsWith("Zone")) { // parse Zone line
+ String name = tokens[1];
+ if (excludedZones.contains(name)){
+ continue;
+ }
+ if (zones.containsKey(name)) {
+ throw new IllegalArgumentException(
+ "Duplicated zone name in file: " + name +
+ ", line: [" + line + "]");
+ }
+ openZone = new ArrayList<>(10);
+ zones.put(name, openZone);
+ regionIds.add(name);
+ ZoneLine zLine = new ZoneLine();
+ openZone.add(zLine);
+ if (zLine.parse(tokens, 2)) {
+ openZone = null;
+ }
+ } else if (line.startsWith("Rule")) { // parse Rule line
+ String name = tokens[1];
+ if (!rules.containsKey(name)) {
+ rules.put(name, new ArrayList(10));
+ }
+ rules.get(name).add(new RuleLine().parse(tokens));
+ } else if (line.startsWith("Link")) { // parse link line
+ if (tokens.length >= 3) {
+ String realId = tokens[1];
+ String aliasId = tokens[2];
+ if (excludedZones.contains(aliasId)){
+ continue;
+ }
+ links.put(aliasId, realId);
+ regionIds.add(aliasId);
+ } else {
+ throw new IllegalArgumentException(
+ "Invalid Link line in file" +
+ file + ", line: [" + line + "]");
+ }
+ } else {
+ // skip unknown line
+ }
+ }
+
+ } catch (Exception ex) {
+ throw new RuntimeException("Failed while processing file [" + file +
+ "]", ex);
+ }
+ }
+ }
+
+ private String[] split(String str) {
+ int off = 0;
+ int end = str.length();
+ ArrayList list = new ArrayList<>(10);
+ while (off < end) {
+ char c = str.charAt(off);
+ if (c == '\t' || c == ' ') {
+ off++;
+ continue;
+ }
+ if (c == '#') { // comment
+ break;
+ }
+ int start = off;
+ while (off < end) {
+ c = str.charAt(off);
+ if (c == ' ' || c == '\t') {
+ break;
+ }
+ off++;
+ }
+ if (start != off) {
+ list.add(str.substring(start, off));
+ }
+ }
+ return list.toArray(new String[list.size()]);
+ }
+
+ /**
+ * Class representing a month-day-time in the TZDB file.
+ */
+ private static abstract class MonthDayTime {
+ /** The month of the cutover. */
+ Month month = Month.JANUARY;
+
+ /** The day-of-month of the cutover. */
+ int dayOfMonth = 1;
+
+ /** Whether to adjust forwards. */
+ boolean adjustForwards = true;
+
+ /** The day-of-week of the cutover. */
+ DayOfWeek dayOfWeek;
+
+ /** The time of the cutover, in second of day */
+ int secsOfDay = 0;
+
+ /** Whether this is midnight end of day. */
+ boolean endOfDay;
+ /** The time of the cutover. */
+
+ TimeDefinition timeDefinition = TimeDefinition.WALL;
+
+ void adjustToForwards(int year) {
+ if (adjustForwards == false && dayOfMonth > 0) {
+ // weekDay<=monthDay case, don't have it in tzdb data for now
+ LocalDate adjustedDate = LocalDate.of(year, month, dayOfMonth).minusDays(6);
+ dayOfMonth = adjustedDate.getDayOfMonth();
+ month = adjustedDate.getMonth();
+ adjustForwards = true;
+ }
+ }
+
+ LocalDateTime toDateTime(int year) {
+ LocalDate date;
+ if (dayOfMonth < 0) {
+ int monthLen = month.length(IsoChronology.INSTANCE.isLeapYear(year));
+ date = LocalDate.of(year, month, monthLen + 1 + dayOfMonth);
+ if (dayOfWeek != null) {
+ date = date.with(TemporalAdjusters.previousOrSame(dayOfWeek));
+ }
+ } else {
+ date = LocalDate.of(year, month, dayOfMonth);
+ if (dayOfWeek != null) {
+ date = date.with(TemporalAdjusters.nextOrSame(dayOfWeek));
+ }
+ }
+ if (endOfDay) {
+ date = date.plusDays(1);
+ }
+ return LocalDateTime.of(date, LocalTime.ofSecondOfDay(secsOfDay));
+ }
+
+ /**
+ * Parses the MonthDaytime segment of a tzdb line.
+ */
+ private void parse(String[] tokens, int off) {
+ month = parseMonth(tokens[off++]);
+ if (off < tokens.length) {
+ String dayRule = tokens[off++];
+ if (dayRule.startsWith("last")) {
+ dayOfMonth = -1;
+ dayOfWeek = parseDayOfWeek(dayRule.substring(4));
+ adjustForwards = false;
+ } else {
+ int index = dayRule.indexOf(">=");
+ if (index > 0) {
+ dayOfWeek = parseDayOfWeek(dayRule.substring(0, index));
+ dayRule = dayRule.substring(index + 2);
+ } else {
+ index = dayRule.indexOf("<=");
+ if (index > 0) {
+ dayOfWeek = parseDayOfWeek(dayRule.substring(0, index));
+ adjustForwards = false;
+ dayRule = dayRule.substring(index + 2);
+ }
+ }
+ dayOfMonth = Integer.parseInt(dayRule);
+ if (dayOfMonth < -28 || dayOfMonth > 31 || dayOfMonth == 0) {
+ throw new IllegalArgumentException(
+ "Day of month indicator must be between -28 and 31 inclusive excluding zero");
+ }
+ }
+ if (off < tokens.length) {
+ String timeStr = tokens[off++];
+ secsOfDay = parseSecs(timeStr);
+ if (secsOfDay == 86400) {
+ // time must be midnight when end of day flag is true
+ endOfDay = true;
+ secsOfDay = 0;
+ }
+ timeDefinition = parseTimeDefinition(timeStr.charAt(timeStr.length() - 1));
+ }
+ }
+ }
+
+ int parseYear(String year, int defaultYear) {
+ switch (year.toLowerCase()) {
+ case "min": return 1900;
+ case "max": return Year.MAX_VALUE;
+ case "only": return defaultYear;
+ }
+ return Integer.parseInt(year);
+ }
+
+ Month parseMonth(String mon) {
+ switch (mon) {
+ case "Jan": return Month.JANUARY;
+ case "Feb": return Month.FEBRUARY;
+ case "Mar": return Month.MARCH;
+ case "Apr": return Month.APRIL;
+ case "May": return Month.MAY;
+ case "Jun": return Month.JUNE;
+ case "Jul": return Month.JULY;
+ case "Aug": return Month.AUGUST;
+ case "Sep": return Month.SEPTEMBER;
+ case "Oct": return Month.OCTOBER;
+ case "Nov": return Month.NOVEMBER;
+ case "Dec": return Month.DECEMBER;
+ }
+ throw new IllegalArgumentException("Unknown month: " + mon);
+ }
+
+ DayOfWeek parseDayOfWeek(String dow) {
+ switch (dow) {
+ case "Mon": return DayOfWeek.MONDAY;
+ case "Tue": return DayOfWeek.TUESDAY;
+ case "Wed": return DayOfWeek.WEDNESDAY;
+ case "Thu": return DayOfWeek.THURSDAY;
+ case "Fri": return DayOfWeek.FRIDAY;
+ case "Sat": return DayOfWeek.SATURDAY;
+ case "Sun": return DayOfWeek.SUNDAY;
+ }
+ throw new IllegalArgumentException("Unknown day-of-week: " + dow);
+ }
+
+ String parseOptional(String str) {
+ return str.equals("-") ? null : str;
+ }
+
+ static final boolean isDigit(char c) {
+ return c >= '0' && c <= '9';
+ }
+
+ private int parseSecs(String time) {
+ if (time.equals("-")) {
+ return 0;
+ }
+ // faster hack
+ int secs = 0;
+ int sign = 1;
+ int off = 0;
+ int len = time.length();
+ if (off < len && time.charAt(off) == '-') {
+ sign = -1;
+ off++;
+ }
+ char c0, c1;
+ if (off < len && isDigit(c0 = time.charAt(off++))) {
+ int hour = c0 - '0';
+ if (off < len && isDigit(c1 = time.charAt(off))) {
+ hour = hour * 10 + c1 - '0';
+ off++;
+ }
+ secs = hour * 60 * 60;
+ if (off < len && time.charAt(off++) == ':') {
+ if (off + 1 < len &&
+ isDigit(c0 = time.charAt(off++)) &&
+ isDigit(c1 = time.charAt(off++))) {
+ // minutes
+ secs += ((c0 - '0') * 10 + c1 - '0') * 60;
+ if (off < len && time.charAt(off++) == ':') {
+ if (off + 1 < len &&
+ isDigit(c0 = time.charAt(off++)) &&
+ isDigit(c1 = time.charAt(off++))) {
+ // seconds
+ secs += ((c0 - '0') * 10 + c1 - '0');
+ }
+ }
+ }
+
+ }
+ return secs * sign;
+ }
+ throw new IllegalArgumentException("[" + time + "]");
+ }
+
+ int parseOffset(String str) {
+ int secs = parseSecs(str);
+ if (Math.abs(secs) > 18 * 60 * 60) {
+ throw new IllegalArgumentException(
+ "Zone offset not in valid range: -18:00 to +18:00");
+ }
+ return secs;
+ }
+
+ int parsePeriod(String str) {
+ return parseSecs(str);
+ }
+
+ TimeDefinition parseTimeDefinition(char c) {
+ switch (c) {
+ case 's':
+ case 'S':
+ // standard time
+ return TimeDefinition.STANDARD;
+ case 'u':
+ case 'U':
+ case 'g':
+ case 'G':
+ case 'z':
+ case 'Z':
+ // UTC
+ return TimeDefinition.UTC;
+ case 'w':
+ case 'W':
+ default:
+ // wall time
+ return TimeDefinition.WALL;
+ }
+ }
+ }
+
+ /**
+ * Class representing a rule line in the TZDB file.
+ */
+ private static class RuleLine extends MonthDayTime {
+ /** The start year. */
+ int startYear;
+
+ /** The end year. */
+ int endYear;
+
+ /** The amount of savings, in seconds. */
+ int savingsAmount;
+
+ /** The text name of the zone. */
+ String text;
+
+ /**
+ * Converts this to a transition rule.
+ *
+ * @param standardOffset the active standard offset, not null
+ * @param savingsBeforeSecs the active savings before the transition in seconds
+ * @return the transition, not null
+ */
+ ZoneOffsetTransitionRule toTransitionRule(ZoneOffset stdOffset, int savingsBefore) {
+ // rule shared by different zones, so don't change it
+ Month month = this.month;
+ int dayOfMonth = this.dayOfMonth;
+ DayOfWeek dayOfWeek = this.dayOfWeek;
+ boolean endOfDay = this.endOfDay;
+
+ // optimize stored format
+ if (dayOfMonth < 0) {
+ if (month != Month.FEBRUARY) { // not Month.FEBRUARY
+ dayOfMonth = month.maxLength() - 6;
+ }
+ }
+ if (endOfDay && dayOfMonth > 0 &&
+ (dayOfMonth == 28 && month == Month.FEBRUARY) == false) {
+ LocalDate date = LocalDate.of(2004, month, dayOfMonth).plusDays(1); // leap-year
+ month = date.getMonth();
+ dayOfMonth = date.getDayOfMonth();
+ if (dayOfWeek != null) {
+ dayOfWeek = dayOfWeek.plus(1);
+ }
+ endOfDay = false;
+ }
+ // build rule
+ return ZoneOffsetTransitionRule.of(
+ //month, dayOfMonth, dayOfWeek, time, endOfDay, timeDefinition,
+ month, dayOfMonth, dayOfWeek,
+ LocalTime.ofSecondOfDay(secsOfDay), endOfDay, timeDefinition,
+ stdOffset,
+ ZoneOffset.ofTotalSeconds(stdOffset.getTotalSeconds() + savingsBefore),
+ ZoneOffset.ofTotalSeconds(stdOffset.getTotalSeconds() + savingsAmount));
+ }
+
+ RuleLine parse(String[] tokens) {
+ startYear = parseYear(tokens[2], 0);
+ endYear = parseYear(tokens[3], startYear);
+ if (startYear > endYear) {
+ throw new IllegalArgumentException(
+ "Invalid line/Year order invalid:" + startYear + " > " + endYear);
+ }
+ //parseOptional(s.next()); // type is unused
+ super.parse(tokens, 5); // monthdaytime parsing
+ savingsAmount = parsePeriod(tokens[8]);
+ //rule.text = parseOptional(s.next());
+ return this;
+ }
+ }
+
+ /**
+ * Class representing a linked set of zone lines in the TZDB file.
+ */
+ private static class ZoneLine extends MonthDayTime {
+ /** The standard offset. */
+ int stdOffsetSecs;
+
+ /** The fixed savings amount. */
+ int fixedSavingsSecs = 0;
+
+ /** The savings rule. */
+ String savingsRule;
+
+ /** The text name of the zone. */
+ String text;
+
+ /** The cutover year */
+ int year = Year.MAX_VALUE;
+
+ /** The cutover date time */
+ LocalDateTime ldt;
+
+ /** The cutover date/time in epoch seconds/UTC */
+ long ldtSecs = Long.MIN_VALUE;
+
+ LocalDateTime toDateTime() {
+ if (ldt == null) {
+ ldt = toDateTime(year);
+ }
+ return ldt;
+ }
+
+ /**
+ * Creates the date-time epoch second in the wall offset for the local
+ * date-time at the end of the window.
+ *
+ * @param savingsSecs the amount of savings in use in seconds
+ * @return the created date-time epoch second in the wall offset, not null
+ */
+ long toDateTimeEpochSecond(int savingsSecs) {
+ if (ldtSecs == Long.MIN_VALUE) {
+ ldtSecs = toDateTime().toEpochSecond(ZoneOffset.UTC);
+ }
+ switch(timeDefinition) {
+ case UTC: return ldtSecs;
+ case STANDARD: return ldtSecs - stdOffsetSecs;
+ default: return ldtSecs - (stdOffsetSecs + savingsSecs); // WALL
+ }
+ }
+
+ boolean parse(String[] tokens, int off) {
+ stdOffsetSecs = parseOffset(tokens[off++]);
+ savingsRule = parseOptional(tokens[off++]);
+ if (savingsRule != null && savingsRule.length() > 0 &&
+ (savingsRule.charAt(0) == '-' || isDigit(savingsRule.charAt(0)))) {
+ try {
+ fixedSavingsSecs = parsePeriod(savingsRule);
+ savingsRule = null;
+ } catch (Exception ex) {
+ fixedSavingsSecs = 0;
+ }
+ }
+ text = tokens[off++];
+ if (off < tokens.length) {
+ year = Integer.parseInt(tokens[off++]);
+ if (off < tokens.length) {
+ super.parse(tokens, off); // MonthDayTime
+ }
+ return false;
+ } else {
+ return true;
+ }
+ }
+ }
+
+ /**
+ * Class representing a rule line in the TZDB file for a particular year.
+ */
+ private static class TransRule implements Comparable
+ {
+ private int year;
+ private RuleLine rule;
+
+ /** The trans date/time */
+ private LocalDateTime ldt;
+
+ /** The trans date/time in epoch seconds (assume UTC) */
+ long ldtSecs;
+
+ TransRule(int year, RuleLine rule) {
+ this.year = year;
+ this.rule = rule;
+ this.ldt = rule.toDateTime(year);
+ this.ldtSecs = ldt.toEpochSecond(ZoneOffset.UTC);
+ }
+
+ ZoneOffsetTransition toTransition(ZoneOffset standardOffset, int savingsBeforeSecs) {
+ // copy of code in ZoneOffsetTransitionRule to avoid infinite loop
+ ZoneOffset wallOffset = ZoneOffset.ofTotalSeconds(
+ standardOffset.getTotalSeconds() + savingsBeforeSecs);
+ ZoneOffset offsetAfter = ZoneOffset.ofTotalSeconds(
+ standardOffset.getTotalSeconds() + rule.savingsAmount);
+ LocalDateTime dt = rule.timeDefinition
+ .createDateTime(ldt, standardOffset, wallOffset);
+ return ZoneOffsetTransition.of(dt, wallOffset, offsetAfter);
+ }
+
+ long toEpochSecond(ZoneOffset stdOffset, int savingsBeforeSecs) {
+ switch(rule.timeDefinition) {
+ case UTC: return ldtSecs;
+ case STANDARD: return ldtSecs - stdOffset.getTotalSeconds();
+ default: return ldtSecs - (stdOffset.getTotalSeconds() + savingsBeforeSecs); // WALL
+ }
+ }
+
+ /**
+ * Tests if this a real transition with the active savings in seconds
+ *
+ * @param savingsBefore the active savings in seconds
+ * @return true, if savings changes
+ */
+ boolean isTransition(int savingsBefore) {
+ return rule.savingsAmount != savingsBefore;
+ }
+
+ public int compareTo(TransRule other) {
+ return (ldtSecs < other.ldtSecs)? -1 : ((ldtSecs == other.ldtSecs) ? 0 : 1);
+ }
+ }
+
+ private ZoneRules buildRules(String zoneId, List zones) {
+ if (zones.isEmpty()) {
+ throw new IllegalStateException("No available zone window");
+ }
+ final List standardTransitionList = new ArrayList<>(4);
+ final List transitionList = new ArrayList<>(256);
+ final List lastTransitionRuleList = new ArrayList<>(2);
+
+ final ZoneLine zone0 = zones.get(0);
+ // initialize the standard offset, wallOffset and savings for loop
+
+ //ZoneOffset stdOffset = zone0.standardOffset;
+ ZoneOffset stdOffset = ZoneOffset.ofTotalSeconds(zone0.stdOffsetSecs);
+
+ int savings = zone0.fixedSavingsSecs;
+ ZoneOffset wallOffset = ZoneOffset.ofTotalSeconds(stdOffset.getTotalSeconds() + savings);
+
+ // start ldt of each zone window
+ LocalDateTime zoneStart = LocalDateTime.MIN;
+
+ // first stanard offset
+ ZoneOffset firstStdOffset = stdOffset;
+ // first wall offset
+ ZoneOffset firstWallOffset = wallOffset;
+
+ for (ZoneLine zone : zones) {
+ // check if standard offset changed, update it if yes
+ ZoneOffset stdOffsetPrev = stdOffset; // for effectiveSavings check
+ if (zone.stdOffsetSecs != stdOffset.getTotalSeconds()) {
+ ZoneOffset stdOffsetNew = ZoneOffset.ofTotalSeconds(zone.stdOffsetSecs);
+ standardTransitionList.add(
+ ZoneOffsetTransition.of(
+ LocalDateTime.ofEpochSecond(zoneStart.toEpochSecond(wallOffset),
+ 0,
+ stdOffset),
+ stdOffset,
+ stdOffsetNew));
+ stdOffset = stdOffsetNew;
+ }
+
+ LocalDateTime zoneEnd;
+ if (zone.year == Year.MAX_VALUE) {
+ zoneEnd = LocalDateTime.MAX;
+ } else {
+ zoneEnd = zone.toDateTime();
+ }
+ if (zoneEnd.compareTo(zoneStart) < 0) {
+ throw new IllegalStateException("Windows must be in date-time order: " +
+ zoneEnd + " < " + zoneStart);
+ }
+ // calculate effective savings at the start of the window
+ List trules = null;
+ List lastRules = null;
+
+ int effectiveSavings = zone.fixedSavingsSecs;
+ if (zone.savingsRule != null) {
+ List tzdbRules = rules.get(zone.savingsRule);
+ if (tzdbRules == null) {
+ throw new IllegalArgumentException(" not found: " +
+ zone.savingsRule);
+ }
+ trules = new ArrayList<>(256);
+ lastRules = new ArrayList<>(2);
+ int lastRulesStartYear = Year.MIN_VALUE;
+
+ // merge the rules to transitions
+ for (RuleLine rule : tzdbRules) {
+ if (rule.startYear > zoneEnd.getYear()) {
+ // rules will not be used for this zone entry
+ continue;
+ }
+ rule.adjustToForwards(2004); // irrelevant, treat as leap year
+
+ int startYear = rule.startYear;
+ int endYear = rule.endYear;
+ if (zoneEnd.equals(LocalDateTime.MAX)) {
+ if (endYear == Year.MAX_VALUE) {
+ endYear = startYear;
+ lastRules.add(new TransRule(endYear, rule));
+ lastRulesStartYear = Math.max(startYear, lastRulesStartYear);
+ }
+ } else {
+ if (endYear == Year.MAX_VALUE) {
+ //endYear = zoneEnd.getYear();
+ endYear = zone.year;
+ }
+ }
+ int year = startYear;
+ while (year <= endYear) {
+ trules.add(new TransRule(year, rule));
+ year++;
+ }
+ }
+
+ // last rules, fill the gap years between different last rules
+ if (zoneEnd.equals(LocalDateTime.MAX)) {
+ lastRulesStartYear = Math.max(lastRulesStartYear, zoneStart.getYear()) + 1;
+ for (TransRule rule : lastRules) {
+ if (rule.year <= lastRulesStartYear) {
+ int year = rule.year;
+ while (year <= lastRulesStartYear) {
+ trules.add(new TransRule(year, rule.rule));
+ year++;
+ }
+ rule.year = lastRulesStartYear;
+ rule.ldt = rule.rule.toDateTime(year);
+ rule.ldtSecs = rule.ldt.toEpochSecond(ZoneOffset.UTC);
+ }
+ }
+ Collections.sort(lastRules);
+ }
+ // sort the merged rules
+ Collections.sort(trules);
+
+ effectiveSavings = 0;
+ for (TransRule rule : trules) {
+ if (rule.toEpochSecond(stdOffsetPrev, savings) >
+ zoneStart.toEpochSecond(wallOffset)) {
+ // previous savings amount found, which could be the
+ // savings amount at the instant that the window starts
+ // (hence isAfter)
+ break;
+ }
+ effectiveSavings = rule.rule.savingsAmount;
+ }
+ }
+ // check if the start of the window represents a transition
+ ZoneOffset effectiveWallOffset =
+ ZoneOffset.ofTotalSeconds(stdOffset.getTotalSeconds() + effectiveSavings);
+
+ if (!wallOffset.equals(effectiveWallOffset)) {
+ transitionList.add(ZoneOffsetTransition.of(zoneStart,
+ wallOffset,
+ effectiveWallOffset));
+ }
+ savings = effectiveSavings;
+ // apply rules within the window
+ if (trules != null) {
+ long zoneStartEpochSecs = zoneStart.toEpochSecond(wallOffset);
+ for (TransRule trule : trules) {
+ if (trule.isTransition(savings)) {
+ long epochSecs = trule.toEpochSecond(stdOffset, savings);
+ if (epochSecs < zoneStartEpochSecs ||
+ epochSecs >= zone.toDateTimeEpochSecond(savings)) {
+ continue;
+ }
+ transitionList.add(trule.toTransition(stdOffset, savings));
+ savings = trule.rule.savingsAmount;
+ }
+ }
+ }
+ if (lastRules != null) {
+ for (TransRule trule : lastRules) {
+ lastTransitionRuleList.add(trule.rule.toTransitionRule(stdOffset, savings));
+ savings = trule.rule.savingsAmount;
+ }
+ }
+
+ // finally we can calculate the true end of the window, passing it to the next window
+ wallOffset = ZoneOffset.ofTotalSeconds(stdOffset.getTotalSeconds() + savings);
+ zoneStart = LocalDateTime.ofEpochSecond(zone.toDateTimeEpochSecond(savings),
+ 0,
+ wallOffset);
+ }
+ return new ZoneRules(firstStdOffset,
+ firstWallOffset,
+ standardTransitionList,
+ transitionList,
+ lastTransitionRuleList);
+ }
+
+}
diff --git a/jdk/make/src/classes/build/tools/tzdb/Utils.java b/jdk/make/src/classes/build/tools/tzdb/Utils.java
deleted file mode 100644
index d129dd3bc7f..00000000000
--- a/jdk/make/src/classes/build/tools/tzdb/Utils.java
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * Copyright (c) 2009-2012, Stephen Colebourne & Michael Nascimento Santos
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * * Neither the name of JSR-310 nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package build.tools.tzdb;
-
-import java.util.Objects;
-
-class Utils {
-
- // Returns the largest (closest to positive infinity)
- public static long floorDiv(long x, long y) {
- long r = x / y;
- // if the signs are different and modulo not zero, round down
- if ((x ^ y) < 0 && (r * y != x)) {
- r--;
- }
- return r;
- }
-
- // Returns the floor modulus of the {@code long} arguments.
- public static long floorMod(long x, long y) {
- return x - floorDiv(x, y) * y;
- }
-
- // Returns the sum of its arguments,
- public static long addExact(long x, long y) {
- long r = x + y;
- // HD 2-12 Overflow iff both arguments have the opposite sign of the result
- if (((x ^ r) & (y ^ r)) < 0) {
- throw new ArithmeticException("long overflow");
- }
- return r;
- }
-
- // Year
-
- // Returns true if the specified year is a leap year.
- public static boolean isLeapYear(int year) {
- return ((year & 3) == 0) && ((year % 100) != 0 || (year % 400) == 0);
- }
-
- // The minimum supported year, '-999,999,999'.
- public static final int YEAR_MIN_VALUE = -999_999_999;
-
- // The maximum supported year, '+999,999,999'.
- public static final int YEAR_MAX_VALUE = 999_999_999;
-
-
- // Gets the length of the specified month in days.
- public static int lengthOfMonth(int month, boolean leapYear) {
- switch (month) {
- case 2: //FEBRUARY:
- return (leapYear ? 29 : 28);
- case 4: //APRIL:
- case 6: //JUNE:
- case 9: //SEPTEMBER:
- case 11: //NOVEMBER:
- return 30;
- default:
- return 31;
- }
- }
-
- // Gets the maximum length of the specified month in days.
- public static int maxLengthOfMonth(int month) {
- switch (month) {
- case 2: //FEBRUARY:
- return 29;
- case 4: //APRIL:
- case 6: //JUNE:
- case 9: //SEPTEMBER:
- case 11: //NOVEMBER:
- return 30;
- default:
- return 31;
- }
- }
-
- // DayOfWeek
-
- // Returns the day-of-week that is the specified number of days after
- // this one, from 1 to 7 for Monday to Sunday.
- public static int plusDayOfWeek(int dow, long days) {
- int amount = (int) (days % 7);
- return (dow - 1 + (amount + 7)) % 7 + 1;
- }
-
- // Returns the day-of-week that is the specified number of days before
- // this one, from 1 to 7 for Monday to Sunday.
- public static int minusDayOfWeek(int dow, long days) {
- return plusDayOfWeek(dow, -(days % 7));
- }
-
- // Adjusts the date to the first occurrence of the specified day-of-week
- // before the date being adjusted unless it is already on that day in
- // which case the same object is returned.
- public static LocalDate previousOrSame(LocalDate date, int dayOfWeek) {
- return adjust(date, dayOfWeek, 1);
- }
-
- // Adjusts the date to the first occurrence of the specified day-of-week
- // after the date being adjusted unless it is already on that day in
- // which case the same object is returned.
- public static LocalDate nextOrSame(LocalDate date, int dayOfWeek) {
- return adjust(date, dayOfWeek, 0);
- }
-
- // Implementation of next, previous or current day-of-week.
- // @param relative whether the current date is a valid answer
- private static final LocalDate adjust(LocalDate date, int dow, int relative) {
- int calDow = date.getDayOfWeek();
- if (relative < 2 && calDow == dow) {
- return date;
- }
- if ((relative & 1) == 0) {
- int daysDiff = calDow - dow;
- return date.plusDays(daysDiff >= 0 ? 7 - daysDiff : -daysDiff);
- } else {
- int daysDiff = dow - calDow;
- return date.minusDays(daysDiff >= 0 ? 7 - daysDiff : -daysDiff);
- }
- }
-
-}
diff --git a/jdk/make/src/classes/build/tools/tzdb/ZoneOffset.java b/jdk/make/src/classes/build/tools/tzdb/ZoneOffset.java
deleted file mode 100644
index 4f95fb3dd59..00000000000
--- a/jdk/make/src/classes/build/tools/tzdb/ZoneOffset.java
+++ /dev/null
@@ -1,474 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * This file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Copyright (c) 2007-2012, Stephen Colebourne & Michael Nascimento Santos
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * * Neither the name of JSR-310 nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package build.tools.tzdb;
-
-import java.util.Objects;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-/**
- * A time-zone offset from Greenwich/UTC, such as {@code +02:00}.
- *
- * A time-zone offset is the period of time that a time-zone differs from Greenwich/UTC.
- * This is usually a fixed number of hours and minutes.
- *
- * @since 1.8
- */
-final class ZoneOffset implements Comparable {
-
- /** Cache of time-zone offset by offset in seconds. */
- private static final ConcurrentMap SECONDS_CACHE = new ConcurrentHashMap<>(16, 0.75f, 4);
- /** Cache of time-zone offset by ID. */
- private static final ConcurrentMap ID_CACHE = new ConcurrentHashMap<>(16, 0.75f, 4);
-
- /**
- * The number of seconds per hour.
- */
- private static final int SECONDS_PER_HOUR = 60 * 60;
- /**
- * The number of seconds per minute.
- */
- private static final int SECONDS_PER_MINUTE = 60;
- /**
- * The number of minutes per hour.
- */
- private static final int MINUTES_PER_HOUR = 60;
- /**
- * The abs maximum seconds.
- */
- private static final int MAX_SECONDS = 18 * SECONDS_PER_HOUR;
- /**
- * Serialization version.
- */
- private static final long serialVersionUID = 2357656521762053153L;
-
- /**
- * The time-zone offset for UTC, with an ID of 'Z'.
- */
- public static final ZoneOffset UTC = ZoneOffset.ofTotalSeconds(0);
- /**
- * Constant for the maximum supported offset.
- */
- public static final ZoneOffset MIN = ZoneOffset.ofTotalSeconds(-MAX_SECONDS);
- /**
- * Constant for the maximum supported offset.
- */
- public static final ZoneOffset MAX = ZoneOffset.ofTotalSeconds(MAX_SECONDS);
-
- /**
- * The total offset in seconds.
- */
- private final int totalSeconds;
- /**
- * The string form of the time-zone offset.
- */
- private final transient String id;
-
- //-----------------------------------------------------------------------
- /**
- * Obtains an instance of {@code ZoneOffset} using the ID.
- *
- * This method parses the string ID of a {@code ZoneOffset} to
- * return an instance. The parsing accepts all the formats generated by
- * {@link #getId()}, plus some additional formats:
- *
- *
{@code Z} - for UTC
- *
{@code +h}
- *
{@code +hh}
- *
{@code +hh:mm}
- *
{@code -hh:mm}
- *
{@code +hhmm}
- *
{@code -hhmm}
- *
{@code +hh:mm:ss}
- *
{@code -hh:mm:ss}
- *
{@code +hhmmss}
- *
{@code -hhmmss}
- *
- * Note that ± means either the plus or minus symbol.
- *
- * The ID of the returned offset will be normalized to one of the formats
- * described by {@link #getId()}.
- *
- * The maximum supported range is from +18:00 to -18:00 inclusive.
- *
- * @param offsetId the offset ID, not null
- * @return the zone-offset, not null
- * @throws DateTimeException if the offset ID is invalid
- */
- @SuppressWarnings("fallthrough")
- public static ZoneOffset of(String offsetId) {
- Objects.requireNonNull(offsetId, "offsetId");
- // "Z" is always in the cache
- ZoneOffset offset = ID_CACHE.get(offsetId);
- if (offset != null) {
- return offset;
- }
-
- // parse - +h, +hh, +hhmm, +hh:mm, +hhmmss, +hh:mm:ss
- final int hours, minutes, seconds;
- switch (offsetId.length()) {
- case 2:
- offsetId = offsetId.charAt(0) + "0" + offsetId.charAt(1); // fallthru
- case 3:
- hours = parseNumber(offsetId, 1, false);
- minutes = 0;
- seconds = 0;
- break;
- case 5:
- hours = parseNumber(offsetId, 1, false);
- minutes = parseNumber(offsetId, 3, false);
- seconds = 0;
- break;
- case 6:
- hours = parseNumber(offsetId, 1, false);
- minutes = parseNumber(offsetId, 4, true);
- seconds = 0;
- break;
- case 7:
- hours = parseNumber(offsetId, 1, false);
- minutes = parseNumber(offsetId, 3, false);
- seconds = parseNumber(offsetId, 5, false);
- break;
- case 9:
- hours = parseNumber(offsetId, 1, false);
- minutes = parseNumber(offsetId, 4, true);
- seconds = parseNumber(offsetId, 7, true);
- break;
- default:
- throw new DateTimeException("Zone offset ID '" + offsetId + "' is invalid");
- }
- char first = offsetId.charAt(0);
- if (first != '+' && first != '-') {
- throw new DateTimeException("Zone offset ID '" + offsetId + "' is invalid: Plus/minus not found when expected");
- }
- if (first == '-') {
- return ofHoursMinutesSeconds(-hours, -minutes, -seconds);
- } else {
- return ofHoursMinutesSeconds(hours, minutes, seconds);
- }
- }
-
- /**
- * Parse a two digit zero-prefixed number.
- *
- * @param offsetId the offset ID, not null
- * @param pos the position to parse, valid
- * @param precededByColon should this number be prefixed by a precededByColon
- * @return the parsed number, from 0 to 99
- */
- private static int parseNumber(CharSequence offsetId, int pos, boolean precededByColon) {
- if (precededByColon && offsetId.charAt(pos - 1) != ':') {
- throw new DateTimeException("Zone offset ID '" + offsetId + "' is invalid: Colon not found when expected");
- }
- char ch1 = offsetId.charAt(pos);
- char ch2 = offsetId.charAt(pos + 1);
- if (ch1 < '0' || ch1 > '9' || ch2 < '0' || ch2 > '9') {
- throw new DateTimeException("Zone offset ID '" + offsetId + "' is invalid: Non numeric characters found");
- }
- return (ch1 - 48) * 10 + (ch2 - 48);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Obtains an instance of {@code ZoneOffset} using an offset in hours.
- *
- * @param hours the time-zone offset in hours, from -18 to +18
- * @return the zone-offset, not null
- * @throws DateTimeException if the offset is not in the required range
- */
- public static ZoneOffset ofHours(int hours) {
- return ofHoursMinutesSeconds(hours, 0, 0);
- }
-
- /**
- * Obtains an instance of {@code ZoneOffset} using an offset in
- * hours and minutes.
- *
- * The sign of the hours and minutes components must match.
- * Thus, if the hours is negative, the minutes must be negative or zero.
- * If the hours is zero, the minutes may be positive, negative or zero.
- *
- * @param hours the time-zone offset in hours, from -18 to +18
- * @param minutes the time-zone offset in minutes, from 0 to ±59, sign matches hours
- * @return the zone-offset, not null
- * @throws DateTimeException if the offset is not in the required range
- */
- public static ZoneOffset ofHoursMinutes(int hours, int minutes) {
- return ofHoursMinutesSeconds(hours, minutes, 0);
- }
-
- /**
- * Obtains an instance of {@code ZoneOffset} using an offset in
- * hours, minutes and seconds.
- *
- * The sign of the hours, minutes and seconds components must match.
- * Thus, if the hours is negative, the minutes and seconds must be negative or zero.
- *
- * @param hours the time-zone offset in hours, from -18 to +18
- * @param minutes the time-zone offset in minutes, from 0 to ±59, sign matches hours and seconds
- * @param seconds the time-zone offset in seconds, from 0 to ±59, sign matches hours and minutes
- * @return the zone-offset, not null
- * @throws DateTimeException if the offset is not in the required range
- */
- public static ZoneOffset ofHoursMinutesSeconds(int hours, int minutes, int seconds) {
- validate(hours, minutes, seconds);
- int totalSeconds = totalSeconds(hours, minutes, seconds);
- return ofTotalSeconds(totalSeconds);
- }
-
- /**
- * Validates the offset fields.
- *
- * @param hours the time-zone offset in hours, from -18 to +18
- * @param minutes the time-zone offset in minutes, from 0 to ±59
- * @param seconds the time-zone offset in seconds, from 0 to ±59
- * @throws DateTimeException if the offset is not in the required range
- */
- private static void validate(int hours, int minutes, int seconds) {
- if (hours < -18 || hours > 18) {
- throw new DateTimeException("Zone offset hours not in valid range: value " + hours +
- " is not in the range -18 to 18");
- }
- if (hours > 0) {
- if (minutes < 0 || seconds < 0) {
- throw new DateTimeException("Zone offset minutes and seconds must be positive because hours is positive");
- }
- } else if (hours < 0) {
- if (minutes > 0 || seconds > 0) {
- throw new DateTimeException("Zone offset minutes and seconds must be negative because hours is negative");
- }
- } else if ((minutes > 0 && seconds < 0) || (minutes < 0 && seconds > 0)) {
- throw new DateTimeException("Zone offset minutes and seconds must have the same sign");
- }
- if (Math.abs(minutes) > 59) {
- throw new DateTimeException("Zone offset minutes not in valid range: abs(value) " +
- Math.abs(minutes) + " is not in the range 0 to 59");
- }
- if (Math.abs(seconds) > 59) {
- throw new DateTimeException("Zone offset seconds not in valid range: abs(value) " +
- Math.abs(seconds) + " is not in the range 0 to 59");
- }
- if (Math.abs(hours) == 18 && (Math.abs(minutes) > 0 || Math.abs(seconds) > 0)) {
- throw new DateTimeException("Zone offset not in valid range: -18:00 to +18:00");
- }
- }
-
- /**
- * Calculates the total offset in seconds.
- *
- * @param hours the time-zone offset in hours, from -18 to +18
- * @param minutes the time-zone offset in minutes, from 0 to ±59, sign matches hours and seconds
- * @param seconds the time-zone offset in seconds, from 0 to ±59, sign matches hours and minutes
- * @return the total in seconds
- */
- private static int totalSeconds(int hours, int minutes, int seconds) {
- return hours * SECONDS_PER_HOUR + minutes * SECONDS_PER_MINUTE + seconds;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Obtains an instance of {@code ZoneOffset} specifying the total offset in seconds
- *
- * The offset must be in the range {@code -18:00} to {@code +18:00}, which corresponds to -64800 to +64800.
- *
- * @param totalSeconds the total time-zone offset in seconds, from -64800 to +64800
- * @return the ZoneOffset, not null
- * @throws DateTimeException if the offset is not in the required range
- */
- public static ZoneOffset ofTotalSeconds(int totalSeconds) {
- if (Math.abs(totalSeconds) > MAX_SECONDS) {
- throw new DateTimeException("Zone offset not in valid range: -18:00 to +18:00");
- }
- if (totalSeconds % (15 * SECONDS_PER_MINUTE) == 0) {
- Integer totalSecs = totalSeconds;
- ZoneOffset result = SECONDS_CACHE.get(totalSecs);
- if (result == null) {
- result = new ZoneOffset(totalSeconds);
- SECONDS_CACHE.putIfAbsent(totalSecs, result);
- result = SECONDS_CACHE.get(totalSecs);
- ID_CACHE.putIfAbsent(result.getId(), result);
- }
- return result;
- } else {
- return new ZoneOffset(totalSeconds);
- }
- }
-
- /**
- * Constructor.
- *
- * @param totalSeconds the total time-zone offset in seconds, from -64800 to +64800
- */
- private ZoneOffset(int totalSeconds) {
- super();
- this.totalSeconds = totalSeconds;
- id = buildId(totalSeconds);
- }
-
- private static String buildId(int totalSeconds) {
- if (totalSeconds == 0) {
- return "Z";
- } else {
- int absTotalSeconds = Math.abs(totalSeconds);
- StringBuilder buf = new StringBuilder();
- int absHours = absTotalSeconds / SECONDS_PER_HOUR;
- int absMinutes = (absTotalSeconds / SECONDS_PER_MINUTE) % MINUTES_PER_HOUR;
- buf.append(totalSeconds < 0 ? "-" : "+")
- .append(absHours < 10 ? "0" : "").append(absHours)
- .append(absMinutes < 10 ? ":0" : ":").append(absMinutes);
- int absSeconds = absTotalSeconds % SECONDS_PER_MINUTE;
- if (absSeconds != 0) {
- buf.append(absSeconds < 10 ? ":0" : ":").append(absSeconds);
- }
- return buf.toString();
- }
- }
-
- /**
- * Gets the total zone offset in seconds.
- *
- * This is the primary way to access the offset amount.
- * It returns the total of the hours, minutes and seconds fields as a
- * single offset that can be added to a time.
- *
- * @return the total zone offset amount in seconds
- */
- public int getTotalSeconds() {
- return totalSeconds;
- }
-
- /**
- * Gets the normalized zone offset ID.
- *
- * The ID is minor variation to the standard ISO-8601 formatted string
- * for the offset. There are three formats:
- *
- *
{@code Z} - for UTC (ISO-8601)
- *
{@code +hh:mm} or {@code -hh:mm} - if the seconds are zero (ISO-8601)
- *
{@code +hh:mm:ss} or {@code -hh:mm:ss} - if the seconds are non-zero (not ISO-8601)
- *
- *
- * @return the zone offset ID, not null
- */
- public String getId() {
- return id;
- }
-
- /**
- * Compares this offset to another offset in descending order.
- *
- * The offsets are compared in the order that they occur for the same time
- * of day around the world. Thus, an offset of {@code +10:00} comes before an
- * offset of {@code +09:00} and so on down to {@code -18:00}.
- *
- * The comparison is "consistent with equals", as defined by {@link Comparable}.
- *
- * @param other the other date to compare to, not null
- * @return the comparator value, negative if less, postive if greater
- * @throws NullPointerException if {@code other} is null
- */
- @Override
- public int compareTo(ZoneOffset other) {
- return other.totalSeconds - totalSeconds;
- }
-
- /**
- * Checks if this offset is equal to another offset.
- *
- * The comparison is based on the amount of the offset in seconds.
- * This is equivalent to a comparison by ID.
- *
- * @param obj the object to check, null returns false
- * @return true if this is equal to the other offset
- */
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj instanceof ZoneOffset) {
- return totalSeconds == ((ZoneOffset) obj).totalSeconds;
- }
- return false;
- }
-
- /**
- * A hash code for this offset.
- *
- * @return a suitable hash code
- */
- @Override
- public int hashCode() {
- return totalSeconds;
- }
-
- /**
- * Outputs this offset as a {@code String}, using the normalized ID.
- *
- * @return a string representation of this offset, not null
- */
- @Override
- public String toString() {
- return id;
- }
-
-}
diff --git a/jdk/make/src/classes/build/tools/tzdb/ZoneOffsetTransition.java b/jdk/make/src/classes/build/tools/tzdb/ZoneOffsetTransition.java
deleted file mode 100644
index 167b5f112de..00000000000
--- a/jdk/make/src/classes/build/tools/tzdb/ZoneOffsetTransition.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * This file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Copyright (c) 2009-2012, Stephen Colebourne & Michael Nascimento Santos
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * * Neither the name of JSR-310 nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package build.tools.tzdb;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * A transition between two offsets caused by a discontinuity in the local time-line.
- *
- * @since 1.8
- */
-final class ZoneOffsetTransition implements Comparable {
-
- /**
- * The local transition date-time at the transition.
- */
- private final LocalDateTime transition;
- /**
- * The offset before transition.
- */
- private final ZoneOffset offsetBefore;
- /**
- * The offset after transition.
- */
- private final ZoneOffset offsetAfter;
-
- /**
- * Creates an instance defining a transition between two offsets.
- *
- * @param transition the transition date-time with the offset before the transition, not null
- * @param offsetBefore the offset before the transition, not null
- * @param offsetAfter the offset at and after the transition, not null
- */
- ZoneOffsetTransition(LocalDateTime transition, ZoneOffset offsetBefore, ZoneOffset offsetAfter) {
- Objects.requireNonNull(transition, "transition");
- Objects.requireNonNull(offsetBefore, "offsetBefore");
- Objects.requireNonNull(offsetAfter, "offsetAfter");
- if (offsetBefore.equals(offsetAfter)) {
- throw new IllegalArgumentException("Offsets must not be equal");
- }
- this.transition = transition;
- this.offsetBefore = offsetBefore;
- this.offsetAfter = offsetAfter;
- }
-
- /**
- * Creates an instance from epoch-second and offsets.
- *
- * @param epochSecond the transition epoch-second
- * @param offsetBefore the offset before the transition, not null
- * @param offsetAfter the offset at and after the transition, not null
- */
- ZoneOffsetTransition(long epochSecond, ZoneOffset offsetBefore, ZoneOffset offsetAfter) {
- this.transition = LocalDateTime.ofEpochSecond(epochSecond, 0, offsetBefore);
- this.offsetBefore = offsetBefore;
- this.offsetAfter = offsetAfter;
- }
-
- /**
- * Gets the transition instant as an epoch second.
- *
- * @return the transition epoch second
- */
- public long toEpochSecond() {
- return transition.toEpochSecond(offsetBefore);
- }
-
- /**
- * Gets the local transition date-time, as would be expressed with the 'before' offset.
- *
- * This is the date-time where the discontinuity begins expressed with the 'before' offset.
- * At this instant, the 'after' offset is actually used, therefore the combination of this
- * date-time and the 'before' offset will never occur.
- *
- * The combination of the 'before' date-time and offset represents the same instant
- * as the 'after' date-time and offset.
- *
- * @return the transition date-time expressed with the before offset, not null
- */
- public LocalDateTime getDateTimeBefore() {
- return transition;
- }
-
- /**
- * Gets the local transition date-time, as would be expressed with the 'after' offset.
- *
- * This is the first date-time after the discontinuity, when the new offset applies.
- *
- * The combination of the 'before' date-time and offset represents the same instant
- * as the 'after' date-time and offset.
- *
- * @return the transition date-time expressed with the after offset, not null
- */
- public LocalDateTime getDateTimeAfter() {
- return transition.plusSeconds(getDurationSeconds());
- }
-
- /**
- * Gets the offset before the transition.
- *
- * This is the offset in use before the instant of the transition.
- *
- * @return the offset before the transition, not null
- */
- public ZoneOffset getOffsetBefore() {
- return offsetBefore;
- }
-
- /**
- * Gets the offset after the transition.
- *
- * This is the offset in use on and after the instant of the transition.
- *
- * @return the offset after the transition, not null
- */
- public ZoneOffset getOffsetAfter() {
- return offsetAfter;
- }
-
- /**
- * Gets the duration of the transition in seconds.
- *
- * @return the duration in seconds
- */
- private int getDurationSeconds() {
- return getOffsetAfter().getTotalSeconds() - getOffsetBefore().getTotalSeconds();
- }
-
- /**
- * Does this transition represent a gap in the local time-line.
- *
- * Gaps occur where there are local date-times that simply do not not exist.
- * An example would be when the offset changes from {@code +01:00} to {@code +02:00}.
- * This might be described as 'the clocks will move forward one hour tonight at 1am'.
- *
- * @return true if this transition is a gap, false if it is an overlap
- */
- public boolean isGap() {
- return getOffsetAfter().getTotalSeconds() > getOffsetBefore().getTotalSeconds();
- }
-
- /**
- * Does this transition represent a gap in the local time-line.
- *
- * Overlaps occur where there are local date-times that exist twice.
- * An example would be when the offset changes from {@code +02:00} to {@code +01:00}.
- * This might be described as 'the clocks will move back one hour tonight at 2am'.
- *
- * @return true if this transition is an overlap, false if it is a gap
- */
- public boolean isOverlap() {
- return getOffsetAfter().getTotalSeconds() < getOffsetBefore().getTotalSeconds();
- }
-
- /**
- * Checks if the specified offset is valid during this transition.
- *
- * This checks to see if the given offset will be valid at some point in the transition.
- * A gap will always return false.
- * An overlap will return true if the offset is either the before or after offset.
- *
- * @param offset the offset to check, null returns false
- * @return true if the offset is valid during the transition
- */
- public boolean isValidOffset(ZoneOffset offset) {
- return isGap() ? false : (getOffsetBefore().equals(offset) || getOffsetAfter().equals(offset));
- }
-
- /**
- * Gets the valid offsets during this transition.
- *
- * A gap will return an empty list, while an overlap will return both offsets.
- *
- * @return the list of valid offsets
- */
- List getValidOffsets() {
- if (isGap()) {
- return Collections.emptyList();
- }
- return Arrays.asList(getOffsetBefore(), getOffsetAfter());
- }
-
- /**
- * Compares this transition to another based on the transition instant.
- *
- * This compares the instants of each transition.
- * The offsets are ignored, making this order inconsistent with equals.
- *
- * @param transition the transition to compare to, not null
- * @return the comparator value, negative if less, positive if greater
- */
- @Override
- public int compareTo(ZoneOffsetTransition transition) {
- return Long.compare(this.toEpochSecond(), transition.toEpochSecond());
- }
-
- /**
- * Checks if this object equals another.
- *
- * The entire state of the object is compared.
- *
- * @param other the other object to compare to, null returns false
- * @return true if equal
- */
- @Override
- public boolean equals(Object other) {
- if (other == this) {
- return true;
- }
- if (other instanceof ZoneOffsetTransition) {
- ZoneOffsetTransition d = (ZoneOffsetTransition) other;
- return transition.equals(d.transition) &&
- offsetBefore.equals(d.offsetBefore) && offsetAfter.equals(d.offsetAfter);
- }
- return false;
- }
-
- /**
- * Returns a suitable hash code.
- *
- * @return the hash code
- */
- @Override
- public int hashCode() {
- return transition.hashCode() ^ offsetBefore.hashCode() ^ Integer.rotateLeft(offsetAfter.hashCode(), 16);
- }
-
-}
diff --git a/jdk/make/src/classes/build/tools/tzdb/ZoneOffsetTransitionRule.java b/jdk/make/src/classes/build/tools/tzdb/ZoneOffsetTransitionRule.java
deleted file mode 100644
index 783499c2163..00000000000
--- a/jdk/make/src/classes/build/tools/tzdb/ZoneOffsetTransitionRule.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * This file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Copyright (c) 2009-2012, Stephen Colebourne & Michael Nascimento Santos
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * * Neither the name of JSR-310 nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package build.tools.tzdb;
-
-import static build.tools.tzdb.Utils.*;
-import java.util.Objects;
-
-/**
- * A rule expressing how to create a transition.
- *
- * This class allows rules for identifying future transitions to be expressed.
- * A rule might be written in many forms:
- *
- *
the 16th March
- *
the Sunday on or after the 16th March
- *
the Sunday on or before the 16th March
- *
the last Sunday in February
- *
- * These different rule types can be expressed and queried.
- *
- *
Specification for implementors
- * This class is immutable and thread-safe.
- *
- * @since 1.8
- */
-final class ZoneOffsetTransitionRule {
-
- /**
- * The month of the month-day of the first day of the cutover week.
- * The actual date will be adjusted by the dowChange field.
- */
- final int month;
- /**
- * The day-of-month of the month-day of the cutover week.
- * If positive, it is the start of the week where the cutover can occur.
- * If negative, it represents the end of the week where cutover can occur.
- * The value is the number of days from the end of the month, such that
- * {@code -1} is the last day of the month, {@code -2} is the second
- * to last day, and so on.
- */
- final byte dom;
- /**
- * The cutover day-of-week, -1 to retain the day-of-month.
- */
- final int dow;
- /**
- * The cutover time in the 'before' offset.
- */
- final LocalTime time;
- /**
- * Whether the cutover time is midnight at the end of day.
- */
- final boolean timeEndOfDay;
- /**
- * The definition of how the local time should be interpreted.
- */
- final TimeDefinition timeDefinition;
- /**
- * The standard offset at the cutover.
- */
- final ZoneOffset standardOffset;
- /**
- * The offset before the cutover.
- */
- final ZoneOffset offsetBefore;
- /**
- * The offset after the cutover.
- */
- final ZoneOffset offsetAfter;
-
- /**
- * Creates an instance defining the yearly rule to create transitions between two offsets.
- *
- * @param month the month of the month-day of the first day of the cutover week, from 1 to 12
- * @param dayOfMonthIndicator the day of the month-day of the cutover week, positive if the week is that
- * day or later, negative if the week is that day or earlier, counting from the last day of the month,
- * from -28 to 31 excluding 0
- * @param dayOfWeek the required day-of-week, -1 if the month-day should not be changed
- * @param time the cutover time in the 'before' offset, not null
- * @param timeEndOfDay whether the time is midnight at the end of day
- * @param timeDefnition how to interpret the cutover
- * @param standardOffset the standard offset in force at the cutover, not null
- * @param offsetBefore the offset before the cutover, not null
- * @param offsetAfter the offset after the cutover, not null
- * @throws IllegalArgumentException if the day of month indicator is invalid
- * @throws IllegalArgumentException if the end of day flag is true when the time is not midnight
- */
- ZoneOffsetTransitionRule(
- int month,
- int dayOfMonthIndicator,
- int dayOfWeek,
- LocalTime time,
- boolean timeEndOfDay,
- TimeDefinition timeDefnition,
- ZoneOffset standardOffset,
- ZoneOffset offsetBefore,
- ZoneOffset offsetAfter) {
- Objects.requireNonNull(time, "time");
- Objects.requireNonNull(timeDefnition, "timeDefnition");
- Objects.requireNonNull(standardOffset, "standardOffset");
- Objects.requireNonNull(offsetBefore, "offsetBefore");
- Objects.requireNonNull(offsetAfter, "offsetAfter");
- if (month < 1 || month > 12) {
- throw new IllegalArgumentException("month must be between 1 and 12");
- }
- if (dayOfMonthIndicator < -28 || dayOfMonthIndicator > 31 || dayOfMonthIndicator == 0) {
- throw new IllegalArgumentException("Day of month indicator must be between -28 and 31 inclusive excluding zero");
- }
- if (timeEndOfDay && time.equals(LocalTime.MIDNIGHT) == false) {
- throw new IllegalArgumentException("Time must be midnight when end of day flag is true");
- }
- this.month = month;
- this.dom = (byte) dayOfMonthIndicator;
- this.dow = dayOfWeek;
- this.time = time;
- this.timeEndOfDay = timeEndOfDay;
- this.timeDefinition = timeDefnition;
- this.standardOffset = standardOffset;
- this.offsetBefore = offsetBefore;
- this.offsetAfter = offsetAfter;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Checks if this object equals another.
- *
- * The entire state of the object is compared.
- *
- * @param otherRule the other object to compare to, null returns false
- * @return true if equal
- */
- @Override
- public boolean equals(Object otherRule) {
- if (otherRule == this) {
- return true;
- }
- if (otherRule instanceof ZoneOffsetTransitionRule) {
- ZoneOffsetTransitionRule other = (ZoneOffsetTransitionRule) otherRule;
- return month == other.month && dom == other.dom && dow == other.dow &&
- timeDefinition == other.timeDefinition &&
- time.equals(other.time) &&
- timeEndOfDay == other.timeEndOfDay &&
- standardOffset.equals(other.standardOffset) &&
- offsetBefore.equals(other.offsetBefore) &&
- offsetAfter.equals(other.offsetAfter);
- }
- return false;
- }
-
- /**
- * Returns a suitable hash code.
- *
- * @return the hash code
- */
- @Override
- public int hashCode() {
- int hash = ((time.toSecondOfDay() + (timeEndOfDay ? 1 : 0)) << 15) +
- (month << 11) + ((dom + 32) << 5) +
- ((dow == -1 ? 8 : dow) << 2) + (timeDefinition.ordinal());
- return hash ^ standardOffset.hashCode() ^
- offsetBefore.hashCode() ^ offsetAfter.hashCode();
- }
-
-}
diff --git a/jdk/make/src/classes/build/tools/tzdb/ZoneRules.java b/jdk/make/src/classes/build/tools/tzdb/ZoneRules.java
index 22c3be80c02..4d01d3ac5b6 100644
--- a/jdk/make/src/classes/build/tools/tzdb/ZoneRules.java
+++ b/jdk/make/src/classes/build/tools/tzdb/ZoneRules.java
@@ -64,6 +64,12 @@ package build.tools.tzdb;
import java.io.DataOutput;
import java.io.IOException;
import java.io.ObjectOutput;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneOffset;
+import java.time.zone.ZoneOffsetTransition;
+import java.time.zone.ZoneOffsetTransitionRule;
+import java.time.zone.ZoneOffsetTransitionRule.TimeDefinition;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
@@ -224,15 +230,15 @@ final class ZoneRules {
* @throws IOException if an error occurs
*/
static void writeRule(ZoneOffsetTransitionRule rule, DataOutput out) throws IOException {
- int month = rule.month;
- byte dom = rule.dom;
- int dow = rule.dow;
- LocalTime time = rule.time;
- boolean timeEndOfDay = rule.timeEndOfDay;
- TimeDefinition timeDefinition = rule.timeDefinition;
- ZoneOffset standardOffset = rule.standardOffset;
- ZoneOffset offsetBefore = rule.offsetBefore;
- ZoneOffset offsetAfter = rule.offsetAfter;
+ int month = rule.getMonth().getValue();
+ byte dom = (byte)rule.getDayOfMonthIndicator();
+ int dow = rule.getDayOfWeek().getValue();
+ LocalTime time = rule.getLocalTime();
+ boolean timeEndOfDay = rule.isMidnightEndOfDay();
+ TimeDefinition timeDefinition = rule.getTimeDefinition();
+ ZoneOffset standardOffset = rule.getStandardOffset();
+ ZoneOffset offsetBefore = rule.getOffsetBefore();
+ ZoneOffset offsetAfter = rule.getOffsetAfter();
int timeSecs = (timeEndOfDay ? 86400 : time.toSecondOfDay());
int stdOffset = standardOffset.getTotalSeconds();
diff --git a/jdk/make/src/classes/build/tools/tzdb/ZoneRulesBuilder.java b/jdk/make/src/classes/build/tools/tzdb/ZoneRulesBuilder.java
deleted file mode 100644
index f4a437dc074..00000000000
--- a/jdk/make/src/classes/build/tools/tzdb/ZoneRulesBuilder.java
+++ /dev/null
@@ -1,743 +0,0 @@
-/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * This file is available under and governed by the GNU General Public
- * License version 2 only, as published by the Free Software Foundation.
- * However, the following notice accompanied the original version of this
- * file:
- *
- * Copyright (c) 2009-2012, Stephen Colebourne & Michael Nascimento Santos
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- *
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- *
- * * Neither the name of JSR-310 nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-package build.tools.tzdb;
-
-import static build.tools.tzdb.Utils.*;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * A mutable builder used to create all the rules for a historic time-zone.
- *
- * The rules of a time-zone describe how the offset changes over time.
- * The rules are created by building windows on the time-line within which
- * the different rules apply. The rules may be one of two kinds:
- *
- *
Fixed savings - A single fixed amount of savings from the standard offset will apply.
- *
Rules - A set of one or more rules describe how daylight savings changes during the window.
- *
- *
- *
Implementation notes
- * This class is a mutable builder used to create zone instances.
- * It must only be used from a single thread.
- * The created instances are immutable and thread-safe.
- *
- * @since 1.8
- */
-public class ZoneRulesBuilder {
-
- /**
- * The list of windows.
- */
- private List windowList = new ArrayList<>();
-
- //-----------------------------------------------------------------------
- /**
- * Constructs an instance of the builder that can be used to create zone rules.
- *
- * The builder is used by adding one or more windows representing portions
- * of the time-line. The standard offset from UTC/Greenwich will be constant
- * within a window, although two adjacent windows can have the same standard offset.
- *
- * Within each window, there can either be a
- * {@link #setFixedSavingsToWindow fixed savings amount} or a
- * {@link #addRuleToWindow list of rules}.
- */
- public ZoneRulesBuilder() {
- }
-
- //-----------------------------------------------------------------------
- /**
- * Adds a window to the builder that can be used to filter a set of rules.
- *
- * This method defines and adds a window to the zone where the standard offset is specified.
- * The window limits the effect of subsequent additions of transition rules
- * or fixed savings. If neither rules or fixed savings are added to the window
- * then the window will default to no savings.
- *
- * Each window must be added sequentially, as the start instant of the window
- * is derived from the until instant of the previous window.
- *
- * @param standardOffset the standard offset, not null
- * @param until the date-time that the offset applies until, not null
- * @param untilDefinition the time type for the until date-time, not null
- * @return this, for chaining
- * @throws IllegalStateException if the window order is invalid
- */
- public ZoneRulesBuilder addWindow(
- ZoneOffset standardOffset,
- LocalDateTime until,
- TimeDefinition untilDefinition) {
- Objects.requireNonNull(standardOffset, "standardOffset");
- Objects.requireNonNull(until, "until");
- Objects.requireNonNull(untilDefinition, "untilDefinition");
- TZWindow window = new TZWindow(standardOffset, until, untilDefinition);
- if (windowList.size() > 0) {
- TZWindow previous = windowList.get(windowList.size() - 1);
- window.validateWindowOrder(previous);
- }
- windowList.add(window);
- return this;
- }
-
- /**
- * Adds a window that applies until the end of time to the builder that can be
- * used to filter a set of rules.
- *
- * This method defines and adds a window to the zone where the standard offset is specified.
- * The window limits the effect of subsequent additions of transition rules
- * or fixed savings. If neither rules or fixed savings are added to the window
- * then the window will default to no savings.
- *
- * This must be added after all other windows.
- * No more windows can be added after this one.
- *
- * @param standardOffset the standard offset, not null
- * @return this, for chaining
- * @throws IllegalStateException if a forever window has already been added
- */
- public ZoneRulesBuilder addWindowForever(ZoneOffset standardOffset) {
- return addWindow(standardOffset, LocalDateTime.MAX, TimeDefinition.WALL);
- }
-
- //-----------------------------------------------------------------------
- /**
- * Sets the previously added window to have fixed savings.
- *
- * Setting a window to have fixed savings simply means that a single daylight
- * savings amount applies throughout the window. The window could be small,
- * such as a single summer, or large, such as a multi-year daylight savings.
- *
- * A window can either have fixed savings or rules but not both.
- *
- * @param fixedSavingAmountSecs the amount of saving to use for the whole window, not null
- * @return this, for chaining
- * @throws IllegalStateException if no window has yet been added
- * @throws IllegalStateException if the window already has rules
- */
- public ZoneRulesBuilder setFixedSavingsToWindow(int fixedSavingAmountSecs) {
- if (windowList.isEmpty()) {
- throw new IllegalStateException("Must add a window before setting the fixed savings");
- }
- TZWindow window = windowList.get(windowList.size() - 1);
- window.setFixedSavings(fixedSavingAmountSecs);
- return this;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Adds a single transition rule to the current window.
- *
- * This adds a rule such that the offset, expressed as a daylight savings amount,
- * changes at the specified date-time.
- *
- * @param transitionDateTime the date-time that the transition occurs as defined by timeDefintion, not null
- * @param timeDefinition the definition of how to convert local to actual time, not null
- * @param savingAmountSecs the amount of saving from the standard offset after the transition in seconds
- * @return this, for chaining
- * @throws IllegalStateException if no window has yet been added
- * @throws IllegalStateException if the window already has fixed savings
- * @throws IllegalStateException if the window has reached the maximum capacity of 2000 rules
- */
- public ZoneRulesBuilder addRuleToWindow(
- LocalDateTime transitionDateTime,
- TimeDefinition timeDefinition,
- int savingAmountSecs) {
- Objects.requireNonNull(transitionDateTime, "transitionDateTime");
- return addRuleToWindow(
- transitionDateTime.getYear(), transitionDateTime.getYear(),
- transitionDateTime.getMonth(), transitionDateTime.getDayOfMonth(),
- -1, transitionDateTime.getTime(), false, timeDefinition, savingAmountSecs);
- }
-
- /**
- * Adds a single transition rule to the current window.
- *
- * This adds a rule such that the offset, expressed as a daylight savings amount,
- * changes at the specified date-time.
- *
- * @param year the year of the transition, from MIN_YEAR to MAX_YEAR
- * @param month the month of the transition, not null
- * @param dayOfMonthIndicator the day-of-month of the transition, adjusted by dayOfWeek,
- * from 1 to 31 adjusted later, or -1 to -28 adjusted earlier from the last day of the month
- * @param time the time that the transition occurs as defined by timeDefintion, not null
- * @param timeEndOfDay whether midnight is at the end of day
- * @param timeDefinition the definition of how to convert local to actual time, not null
- * @param savingAmountSecs the amount of saving from the standard offset after the transition in seconds
- * @return this, for chaining
- * @throws DateTimeException if a date-time field is out of range
- * @throws IllegalStateException if no window has yet been added
- * @throws IllegalStateException if the window already has fixed savings
- * @throws IllegalStateException if the window has reached the maximum capacity of 2000 rules
- */
- public ZoneRulesBuilder addRuleToWindow(
- int year,
- int month,
- int dayOfMonthIndicator,
- LocalTime time,
- boolean timeEndOfDay,
- TimeDefinition timeDefinition,
- int savingAmountSecs) {
- return addRuleToWindow(year, year, month, dayOfMonthIndicator, -1, time, timeEndOfDay, timeDefinition, savingAmountSecs);
- }
-
- /**
- * Adds a multi-year transition rule to the current window.
- *
- * This adds a rule such that the offset, expressed as a daylight savings amount,
- * changes at the specified date-time for each year in the range.
- *
- * @param startYear the start year of the rule, from MIN_YEAR to MAX_YEAR
- * @param endYear the end year of the rule, from MIN_YEAR to MAX_YEAR
- * @param month the month of the transition, from 1 to 12
- * @param dayOfMonthIndicator the day-of-month of the transition, adjusted by dayOfWeek,
- * from 1 to 31 adjusted later, or -1 to -28 adjusted earlier from the last day of the month
- * @param dayOfWeek the day-of-week to adjust to, -1 if day-of-month should not be adjusted
- * @param time the time that the transition occurs as defined by timeDefintion, not null
- * @param timeEndOfDay whether midnight is at the end of day
- * @param timeDefinition the definition of how to convert local to actual time, not null
- * @param savingAmountSecs the amount of saving from the standard offset after the transition in seconds
- * @return this, for chaining
- * @throws DateTimeException if a date-time field is out of range
- * @throws IllegalArgumentException if the day of month indicator is invalid
- * @throws IllegalArgumentException if the end of day midnight flag does not match the time
- * @throws IllegalStateException if no window has yet been added
- * @throws IllegalStateException if the window already has fixed savings
- * @throws IllegalStateException if the window has reached the maximum capacity of 2000 rules
- */
- public ZoneRulesBuilder addRuleToWindow(
- int startYear,
- int endYear,
- int month,
- int dayOfMonthIndicator,
- int dayOfWeek,
- LocalTime time,
- boolean timeEndOfDay,
- TimeDefinition timeDefinition,
- int savingAmountSecs) {
- Objects.requireNonNull(time, "time");
- Objects.requireNonNull(timeDefinition, "timeDefinition");
- if (dayOfMonthIndicator < -28 || dayOfMonthIndicator > 31 || dayOfMonthIndicator == 0) {
- throw new IllegalArgumentException("Day of month indicator must be between -28 and 31 inclusive excluding zero");
- }
- if (timeEndOfDay && time.equals(LocalTime.MIDNIGHT) == false) {
- throw new IllegalArgumentException("Time must be midnight when end of day flag is true");
- }
- if (windowList.isEmpty()) {
- throw new IllegalStateException("Must add a window before adding a rule");
- }
- TZWindow window = windowList.get(windowList.size() - 1);
- window.addRule(startYear, endYear, month, dayOfMonthIndicator, dayOfWeek, time, timeEndOfDay, timeDefinition, savingAmountSecs);
- return this;
- }
-
- //-----------------------------------------------------------------------
- /**
- * Completes the build converting the builder to a set of time-zone rules.
- *
- * Calling this method alters the state of the builder.
- * Further rules should not be added to this builder once this method is called.
- *
- * @param zoneId the time-zone ID, not null
- * @return the zone rules, not null
- * @throws IllegalStateException if no windows have been added
- * @throws IllegalStateException if there is only one rule defined as being forever for any given window
- */
- public ZoneRules toRules(String zoneId) {
- Objects.requireNonNull(zoneId, "zoneId");
- if (windowList.isEmpty()) {
- throw new IllegalStateException("No windows have been added to the builder");
- }
-
- final List standardTransitionList = new ArrayList<>(4);
- final List transitionList = new ArrayList<>(256);
- final List lastTransitionRuleList = new ArrayList<>(2);
-
- // initialize the standard offset calculation
- final TZWindow firstWindow = windowList.get(0);
- ZoneOffset loopStandardOffset = firstWindow.standardOffset;
- int loopSavings = 0;
- if (firstWindow.fixedSavingAmountSecs != null) {
- loopSavings = firstWindow.fixedSavingAmountSecs;
- }
- final ZoneOffset firstWallOffset = ZoneOffset.ofTotalSeconds(loopStandardOffset.getTotalSeconds() + loopSavings);
- LocalDateTime loopWindowStart = LocalDateTime.of(YEAR_MIN_VALUE, 1, 1, 0, 0);
- ZoneOffset loopWindowOffset = firstWallOffset;
-
- // build the windows and rules to interesting data
- for (TZWindow window : windowList) {
- // tidy the state
- window.tidy(loopWindowStart.getYear());
-
- // calculate effective savings at the start of the window
- Integer effectiveSavings = window.fixedSavingAmountSecs;
- if (effectiveSavings == null) {
- // apply rules from this window together with the standard offset and
- // savings from the last window to find the savings amount applicable
- // at start of this window
- effectiveSavings = 0;
- for (TZRule rule : window.ruleList) {
- if (rule.toEpochSecond(loopStandardOffset, loopSavings) > loopWindowStart.toEpochSecond(loopWindowOffset)) {
- // previous savings amount found, which could be the savings amount at
- // the instant that the window starts (hence isAfter)
- break;
- }
- effectiveSavings = rule.savingAmountSecs;
- }
- }
-
- // check if standard offset changed, and update it
- if (loopStandardOffset.equals(window.standardOffset) == false) {
- standardTransitionList.add(
- new ZoneOffsetTransition(
- LocalDateTime.ofEpochSecond(loopWindowStart.toEpochSecond(loopWindowOffset), 0, loopStandardOffset),
- loopStandardOffset, window.standardOffset));
- loopStandardOffset = window.standardOffset;
- }
-
- // check if the start of the window represents a transition
- ZoneOffset effectiveWallOffset = ZoneOffset.ofTotalSeconds(loopStandardOffset.getTotalSeconds() + effectiveSavings);
- if (loopWindowOffset.equals(effectiveWallOffset) == false) {
- transitionList.add(new ZoneOffsetTransition(loopWindowStart, loopWindowOffset, effectiveWallOffset));
- }
- loopSavings = effectiveSavings;
-
- // apply rules within the window
- for (TZRule rule : window.ruleList) {
- if (rule.isTransition(loopSavings)) {
- ZoneOffsetTransition trans = rule.toTransition(loopStandardOffset, loopSavings);
- if (trans.toEpochSecond() < loopWindowStart.toEpochSecond(loopWindowOffset) == false &&
- trans.toEpochSecond() < window.createDateTimeEpochSecond(loopSavings)) {
- transitionList.add(trans);
- loopSavings = rule.savingAmountSecs;
- }
- }
- }
-
- // calculate last rules
- for (TZRule lastRule : window.lastRuleList) {
- lastTransitionRuleList.add(lastRule.toTransitionRule(loopStandardOffset, loopSavings));
- loopSavings = lastRule.savingAmountSecs;
- }
-
- // finally we can calculate the true end of the window, passing it to the next window
- loopWindowOffset = window.createWallOffset(loopSavings);
- loopWindowStart = LocalDateTime.ofEpochSecond(
- window.createDateTimeEpochSecond(loopSavings), 0, loopWindowOffset);
- }
-
- return new ZoneRules(
- firstWindow.standardOffset, firstWallOffset, standardTransitionList,
- transitionList, lastTransitionRuleList);
- }
-
- //-----------------------------------------------------------------------
- /**
- * A definition of a window in the time-line.
- * The window will have one standard offset and will either have a
- * fixed DST savings or a set of rules.
- */
- class TZWindow {
- /** The standard offset during the window, not null. */
- private final ZoneOffset standardOffset;
- /** The end local time, not null. */
- private final LocalDateTime windowEnd;
- /** The type of the end time, not null. */
- private final TimeDefinition timeDefinition;
-
- /** The fixed amount of the saving to be applied during this window. */
- private Integer fixedSavingAmountSecs;
- /** The rules for the current window. */
- private List ruleList = new ArrayList<>();
- /** The latest year that the last year starts at. */
- private int maxLastRuleStartYear = YEAR_MIN_VALUE;
- /** The last rules. */
- private List lastRuleList = new ArrayList<>();
-
- /**
- * Constructor.
- *
- * @param standardOffset the standard offset applicable during the window, not null
- * @param windowEnd the end of the window, relative to the time definition, null if forever
- * @param timeDefinition the time definition for calculating the true end, not null
- */
- TZWindow(
- ZoneOffset standardOffset,
- LocalDateTime windowEnd,
- TimeDefinition timeDefinition) {
- super();
- this.windowEnd = windowEnd;
- this.timeDefinition = timeDefinition;
- this.standardOffset = standardOffset;
- }
-
- /**
- * Sets the fixed savings amount for the window.
- *
- * @param fixedSavingAmount the amount of daylight saving to apply throughout the window, may be null
- * @throws IllegalStateException if the window already has rules
- */
- void setFixedSavings(int fixedSavingAmount) {
- if (ruleList.size() > 0 || lastRuleList.size() > 0) {
- throw new IllegalStateException("Window has DST rules, so cannot have fixed savings");
- }
- this.fixedSavingAmountSecs = fixedSavingAmount;
- }
-
- /**
- * Adds a rule to the current window.
- *
- * @param startYear the start year of the rule, from MIN_YEAR to MAX_YEAR
- * @param endYear the end year of the rule, from MIN_YEAR to MAX_YEAR
- * @param month the month of the transition, not null
- * @param dayOfMonthIndicator the day-of-month of the transition, adjusted by dayOfWeek,
- * from 1 to 31 adjusted later, or -1 to -28 adjusted earlier from the last day of the month
- * @param dayOfWeek the day-of-week to adjust to, null if day-of-month should not be adjusted
- * @param time the time that the transition occurs as defined by timeDefintion, not null
- * @param timeEndOfDay whether midnight is at the end of day
- * @param timeDefinition the definition of how to convert local to actual time, not null
- * @param savingAmountSecs the amount of saving from the standard offset in seconds
- * @throws IllegalStateException if the window already has fixed savings
- * @throws IllegalStateException if the window has reached the maximum capacity of 2000 rules
- */
- void addRule(
- int startYear,
- int endYear,
- int month,
- int dayOfMonthIndicator,
- int dayOfWeek,
- LocalTime time,
- boolean timeEndOfDay,
- TimeDefinition timeDefinition,
- int savingAmountSecs) {
-
- if (fixedSavingAmountSecs != null) {
- throw new IllegalStateException("Window has a fixed DST saving, so cannot have DST rules");
- }
- if (ruleList.size() >= 2000) {
- throw new IllegalStateException("Window has reached the maximum number of allowed rules");
- }
- boolean lastRule = false;
- if (endYear == YEAR_MAX_VALUE) {
- lastRule = true;
- endYear = startYear;
- }
- int year = startYear;
- while (year <= endYear) {
- TZRule rule = new TZRule(year, month, dayOfMonthIndicator, dayOfWeek, time, timeEndOfDay, timeDefinition, savingAmountSecs);
- if (lastRule) {
- lastRuleList.add(rule);
- maxLastRuleStartYear = Math.max(startYear, maxLastRuleStartYear);
- } else {
- ruleList.add(rule);
- }
- year++;
- }
- }
-
- /**
- * Validates that this window is after the previous one.
- *
- * @param previous the previous window, not null
- * @throws IllegalStateException if the window order is invalid
- */
- void validateWindowOrder(TZWindow previous) {
- if (windowEnd.compareTo(previous.windowEnd) < 0) {
- throw new IllegalStateException("Windows must be added in date-time order: " +
- windowEnd + " < " + previous.windowEnd);
- }
- }
-
- /**
- * Adds rules to make the last rules all start from the same year.
- * Also add one more year to avoid weird case where penultimate year has odd offset.
- *
- * @param windowStartYear the window start year
- * @throws IllegalStateException if there is only one rule defined as being forever
- */
- void tidy(int windowStartYear) {
- if (lastRuleList.size() == 1) {
- throw new IllegalStateException("Cannot have only one rule defined as being forever");
- }
-
- // handle last rules
- if (windowEnd.equals(LocalDateTime.MAX)) {
- // setup at least one real rule, which closes off other windows nicely
- maxLastRuleStartYear = Math.max(maxLastRuleStartYear, windowStartYear) + 1;
- for (TZRule lastRule : lastRuleList) {
- addRule(lastRule.year, maxLastRuleStartYear, lastRule.month, lastRule.dayOfMonthIndicator,
- lastRule.dayOfWeek, lastRule.time, lastRule.timeEndOfDay, lastRule.timeDefinition, lastRule.savingAmountSecs);
- lastRule.year = maxLastRuleStartYear + 1;
- }
- if (maxLastRuleStartYear == YEAR_MAX_VALUE) {
- lastRuleList.clear();
- } else {
- maxLastRuleStartYear++;
- }
- } else {
- // convert all within the endYear limit
- int endYear = windowEnd.getYear();
- for (TZRule lastRule : lastRuleList) {
- addRule(lastRule.year, endYear + 1, lastRule.month, lastRule.dayOfMonthIndicator,
- lastRule.dayOfWeek, lastRule.time, lastRule.timeEndOfDay, lastRule.timeDefinition, lastRule.savingAmountSecs);
- }
- lastRuleList.clear();
- maxLastRuleStartYear = YEAR_MAX_VALUE;
- }
-
- // ensure lists are sorted
- Collections.sort(ruleList);
- Collections.sort(lastRuleList);
-
- // default fixed savings to zero
- if (ruleList.size() == 0 && fixedSavingAmountSecs == null) {
- fixedSavingAmountSecs = 0;
- }
- }
-
- /**
- * Checks if the window is empty.
- *
- * @return true if the window is only a standard offset
- */
- boolean isSingleWindowStandardOffset() {
- return windowEnd.equals(LocalDateTime.MAX) && timeDefinition == TimeDefinition.WALL &&
- fixedSavingAmountSecs == null && lastRuleList.isEmpty() && ruleList.isEmpty();
- }
-
- /**
- * Creates the wall offset for the local date-time at the end of the window.
- *
- * @param savingsSecs the amount of savings in use in seconds
- * @return the created date-time epoch second in the wall offset, not null
- */
- ZoneOffset createWallOffset(int savingsSecs) {
- return ZoneOffset.ofTotalSeconds(standardOffset.getTotalSeconds() + savingsSecs);
- }
-
- /**
- * Creates the offset date-time for the local date-time at the end of the window.
- *
- * @param savingsSecs the amount of savings in use in seconds
- * @return the created date-time epoch second in the wall offset, not null
- */
- long createDateTimeEpochSecond(int savingsSecs) {
- ZoneOffset wallOffset = createWallOffset(savingsSecs);
- LocalDateTime ldt = timeDefinition.createDateTime(windowEnd, standardOffset, wallOffset);
- return ldt.toEpochSecond(wallOffset);
- }
- }
-
- //-----------------------------------------------------------------------
- /**
- * A definition of the way a local time can be converted to an offset time.
- */
- class TZRule implements Comparable {
- private int year;
- private int month;
- private int dayOfMonthIndicator;
- private int dayOfWeek;
- private LocalTime time;
- private boolean timeEndOfDay; // Whether the local time is end of day.
- private TimeDefinition timeDefinition; // The type of the time.
- private int savingAmountSecs; // The amount of the saving to be applied after this point.
-
- /**
- * Constructor.
- *
- * @param year the year
- * @param month the month, value from 1 to 12
- * @param dayOfMonthIndicator the day-of-month of the transition, adjusted by dayOfWeek,
- * from 1 to 31 adjusted later, or -1 to -28 adjusted earlier from the last day of the month
- * @param dayOfWeek the day-of-week, -1 if day-of-month is exact
- * @param time the time, not null
- * @param timeEndOfDay whether midnight is at the end of day
- * @param timeDefinition the time definition, not null
- * @param savingAfterSecs the savings amount in seconds
- */
- TZRule(int year, int month, int dayOfMonthIndicator,
- int dayOfWeek, LocalTime time, boolean timeEndOfDay,
- TimeDefinition timeDefinition, int savingAfterSecs) {
- this.year = year;
- this.month = month;
- this.dayOfMonthIndicator = dayOfMonthIndicator;
- this.dayOfWeek = dayOfWeek;
- this.time = time;
- this.timeEndOfDay = timeEndOfDay;
- this.timeDefinition = timeDefinition;
- this.savingAmountSecs = savingAfterSecs;
- }
-
- /**
- * Converts this to a transition.
- *
- * @param standardOffset the active standard offset, not null
- * @param savingsBeforeSecs the active savings in seconds
- * @return the transition, not null
- */
- ZoneOffsetTransition toTransition(ZoneOffset standardOffset, int savingsBeforeSecs) {
- // copy of code in ZoneOffsetTransitionRule to avoid infinite loop
- LocalDate date = toLocalDate();
- LocalDateTime ldt = LocalDateTime.of(date, time);
- ZoneOffset wallOffset = ZoneOffset.ofTotalSeconds(standardOffset.getTotalSeconds() + savingsBeforeSecs);
- LocalDateTime dt = timeDefinition.createDateTime(ldt, standardOffset, wallOffset);
- ZoneOffset offsetAfter = ZoneOffset.ofTotalSeconds(standardOffset.getTotalSeconds() + savingAmountSecs);
- return new ZoneOffsetTransition(dt, wallOffset, offsetAfter);
- }
-
- /**
- * Returns the apoch second of this rules with the specified
- * active standard offset and active savings
- *
- * @param standardOffset the active standard offset, not null
- * @param savingsBeforeSecs the active savings in seconds
- * @return the transition epoch second
- */
- long toEpochSecond(ZoneOffset standardOffset, int savingsBeforeSecs) {
- LocalDateTime ldt = LocalDateTime.of(toLocalDate(), time);
- ZoneOffset wallOffset = ZoneOffset.ofTotalSeconds(standardOffset.getTotalSeconds() + savingsBeforeSecs);
- return timeDefinition.createDateTime(ldt, standardOffset, wallOffset)
- .toEpochSecond(wallOffset);
- }
-
- /**
- * Tests if this a real transition with the active savings in seconds
- *
- * @param savingsBeforeSecs the active savings in seconds
- * @return true, if savings in seconds changes
- */
- boolean isTransition(int savingsBeforeSecs) {
- return savingAmountSecs != savingsBeforeSecs;
- }
-
- /**
- * Converts this to a transition rule.
- *
- * @param standardOffset the active standard offset, not null
- * @param savingsBeforeSecs the active savings before the transition in seconds
- * @return the transition, not null
- */
- ZoneOffsetTransitionRule toTransitionRule(ZoneOffset standardOffset, int savingsBeforeSecs) {
- // optimize stored format
- if (dayOfMonthIndicator < 0) {
- if (month != 2) { // not Month.FEBRUARY
- dayOfMonthIndicator = maxLengthOfMonth(month) - 6;
- }
- }
- if (timeEndOfDay && dayOfMonthIndicator > 0 &&
- (dayOfMonthIndicator == 28 && month == 2) == false) {
- LocalDate date = LocalDate.of(2004, month, dayOfMonthIndicator).plusDays(1); // leap-year
- month = date.getMonth();
- dayOfMonthIndicator = date.getDayOfMonth();
- if (dayOfWeek != -1) {
- dayOfWeek = plusDayOfWeek(dayOfWeek, 1);
- }
- timeEndOfDay = false;
- }
- // build rule
- return new ZoneOffsetTransitionRule(
- month, dayOfMonthIndicator, dayOfWeek, time, timeEndOfDay, timeDefinition,
- standardOffset,
- ZoneOffset.ofTotalSeconds(standardOffset.getTotalSeconds() + savingsBeforeSecs),
- ZoneOffset.ofTotalSeconds(standardOffset.getTotalSeconds() + savingAmountSecs));
- }
-
- public int compareTo(TZRule other) {
- int cmp = year - other.year;
- cmp = (cmp == 0 ? month - other.month : cmp);
- if (cmp == 0) {
- // convert to date to handle dow/domIndicator/timeEndOfDay
- LocalDate thisDate = toLocalDate();
- LocalDate otherDate = other.toLocalDate();
- cmp = thisDate.compareTo(otherDate);
- }
- cmp = (cmp == 0 ? time.compareTo(other.time) : cmp);
- return cmp;
- }
-
- private LocalDate toLocalDate() {
- LocalDate date;
- if (dayOfMonthIndicator < 0) {
- int monthLen = lengthOfMonth(month, isLeapYear(year));
- date = LocalDate.of(year, month, monthLen + 1 + dayOfMonthIndicator);
- if (dayOfWeek != -1) {
- date = previousOrSame(date, dayOfWeek);
- }
- } else {
- date = LocalDate.of(year, month, dayOfMonthIndicator);
- if (dayOfWeek != -1) {
- date = nextOrSame(date, dayOfWeek);
- }
- }
- if (timeEndOfDay) {
- date = date.plusDays(1);
- }
- return date;
- }
- }
-
-}
diff --git a/jdk/make/src/native/genconstants/ch/genSocketOptionRegistry.c b/jdk/make/src/native/genconstants/ch/genSocketOptionRegistry.c
index d5ed5d7a87e..41bd5484ab7 100644
--- a/jdk/make/src/native/genconstants/ch/genSocketOptionRegistry.c
+++ b/jdk/make/src/native/genconstants/ch/genSocketOptionRegistry.c
@@ -110,6 +110,7 @@ int main(int argc, const char* argv[]) {
emit_inet("StandardSocketOptions.IP_MULTICAST_LOOP", IPPROTO_IP, IP_MULTICAST_LOOP);
#ifdef AF_INET6
+ emit_inet6("StandardSocketOptions.IP_TOS", IPPROTO_IPV6, IPV6_TCLASS);
emit_inet6("StandardSocketOptions.IP_MULTICAST_IF", IPPROTO_IPV6, IPV6_MULTICAST_IF);
emit_inet6("StandardSocketOptions.IP_MULTICAST_TTL", IPPROTO_IPV6, IPV6_MULTICAST_HOPS);
emit_inet6("StandardSocketOptions.IP_MULTICAST_LOOP", IPPROTO_IPV6, IPV6_MULTICAST_LOOP);
diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaComboBoxUI.java b/jdk/src/macosx/classes/com/apple/laf/AquaComboBoxUI.java
index c38e108633b..75c7babb58a 100644
--- a/jdk/src/macosx/classes/com/apple/laf/AquaComboBoxUI.java
+++ b/jdk/src/macosx/classes/com/apple/laf/AquaComboBoxUI.java
@@ -522,15 +522,17 @@ public class AquaComboBoxUI extends BasicComboBoxUI implements Sizeable {
};
@SuppressWarnings("serial") // anonymous class
- private static Action hideAction = new AbstractAction() {
+ private final Action hideAction = new AbstractAction() {
@Override
public void actionPerformed(final ActionEvent e) {
final JComboBox comboBox = (JComboBox)e.getSource();
+ comboBox.firePopupMenuCanceled();
+ comboBox.setPopupVisible(false);
+ }
- if (comboBox.isPopupVisible()) {
- comboBox.firePopupMenuCanceled();
- comboBox.setPopupVisible(false);
- }
+ @Override
+ public boolean isEnabled() {
+ return comboBox.isPopupVisible() && super.isEnabled();
}
};
diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaFileSystemModel.java b/jdk/src/macosx/classes/com/apple/laf/AquaFileSystemModel.java
index 37e627e8338..b0713215077 100644
--- a/jdk/src/macosx/classes/com/apple/laf/AquaFileSystemModel.java
+++ b/jdk/src/macosx/classes/com/apple/laf/AquaFileSystemModel.java
@@ -366,6 +366,11 @@ class AquaFileSystemModel extends AbstractTableModel implements PropertyChangeLi
final SortableFile otherFile = (SortableFile)other;
return otherFile.fFile.equals(fFile);
}
+
+ @Override
+ public int hashCode() {
+ return Objects.hashCode(fFile);
+ }
}
class LoadFilesThread extends Thread {
diff --git a/jdk/src/macosx/classes/com/apple/laf/ScreenPopupFactory.java b/jdk/src/macosx/classes/com/apple/laf/ScreenPopupFactory.java
index 1ab50a18679..bb2c0f1081b 100644
--- a/jdk/src/macosx/classes/com/apple/laf/ScreenPopupFactory.java
+++ b/jdk/src/macosx/classes/com/apple/laf/ScreenPopupFactory.java
@@ -29,18 +29,9 @@ import java.awt.*;
import javax.swing.*;
import sun.lwawt.macosx.CPlatformWindow;
+import sun.swing.SwingAccessor;
class ScreenPopupFactory extends PopupFactory {
- static {
- java.security.AccessController.doPrivileged(
- new java.security.PrivilegedAction() {
- public Void run() {
- System.loadLibrary("osxui");
- return null;
- }
- });
- }
-
static final Float TRANSLUCENT = new Float(248f/255f);
static final Float OPAQUE = new Float(1.0f);
@@ -59,19 +50,13 @@ class ScreenPopupFactory extends PopupFactory {
return (Window)w;
}
- /*
- * Since we can't change the signature of PopupFactory, we have to call the
- * private method getPopup(Component, Component, int, int, int) through JNI
- * (see AquaLookAndFeel.m)
- */
- native Popup _getHeavyWeightPopup(Component comp, Component invoker, int x, int y);
-
public Popup getPopup(final Component comp, final Component invoker, final int x, final int y) {
if (invoker == null) throw new IllegalArgumentException("Popup.getPopup must be passed non-null contents");
final Popup popup;
if (fIsActive) {
- popup = _getHeavyWeightPopup(comp, invoker, x, y);
+ popup = SwingAccessor.getPopupFactoryAccessor()
+ .getHeavyWeightPopup(this, comp, invoker, x, y);
} else {
popup = super.getPopup(comp, invoker, x, y);
}
diff --git a/jdk/src/macosx/classes/sun/font/CStrike.java b/jdk/src/macosx/classes/sun/font/CStrike.java
index af4f8754cfb..5296f5c87f0 100644
--- a/jdk/src/macosx/classes/sun/font/CStrike.java
+++ b/jdk/src/macosx/classes/sun/font/CStrike.java
@@ -415,7 +415,7 @@ public final class CStrike extends FontStrike {
generalCache = new HashMap();
}
- generalCache.put(new Integer(index), new Long(value));
+ generalCache.put(new Integer(index), Long.valueOf(value));
}
public synchronized void dispose() {
diff --git a/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java
index 354f2538012..408862f7746 100644
--- a/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java
+++ b/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java
@@ -317,6 +317,8 @@ public abstract class LWComponentPeer
* subclasses to initialize specific peers properties.
*/
void initializeImpl() {
+ // note that these methods can be overridden by the user and
+ // can return some strange values like null.
setBackground(target.getBackground());
setForeground(target.getForeground());
setFont(target.getFont());
diff --git a/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java
index 226d8c68699..b72ef77d876 100644
--- a/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java
+++ b/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java
@@ -443,6 +443,12 @@ public class LWWindowPeer
getPlatformWindow().updateIconImages();
}
+ @Override
+ public void setBackground(final Color c) {
+ super.setBackground(c);
+ updateOpaque();
+ }
+
@Override
public void setOpacity(float opacity) {
getPlatformWindow().setOpacity(opacity);
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java
index dd718c0ca0b..c241aae3cc0 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java
@@ -97,7 +97,8 @@ public class CEmbeddedFrame extends EmbeddedFrame {
public void handleKeyEvent(int eventType, int modifierFlags, String characters,
String charsIgnoringMods, boolean isRepeat, short keyCode,
boolean needsKeyTyped) {
- responder.handleKeyEvent(eventType, modifierFlags, charsIgnoringMods, keyCode, needsKeyTyped, isRepeat);
+ responder.handleKeyEvent(eventType, modifierFlags, characters, charsIgnoringMods,
+ keyCode, needsKeyTyped, isRepeat);
}
public void handleInputEvent(String text) {
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformLWWindow.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformLWWindow.java
index d7a91264328..9c2edf22742 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformLWWindow.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformLWWindow.java
@@ -29,12 +29,18 @@ import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.GraphicsDevice;
+import java.awt.GraphicsEnvironment;
import java.awt.Insets;
import java.awt.MenuBar;
import java.awt.Point;
+import java.awt.Rectangle;
import java.awt.Window;
+import sun.awt.CGraphicsDevice;
+import sun.awt.CGraphicsEnvironment;
import sun.awt.CausedFocusEvent;
+import sun.awt.LightweightFrame;
import sun.java2d.SurfaceData;
+import sun.lwawt.LWLightweightFramePeer;
import sun.lwawt.LWWindowPeer;
import sun.lwawt.PlatformWindow;
@@ -72,11 +78,6 @@ public class CPlatformLWWindow extends CPlatformWindow {
return null;
}
- @Override
- public GraphicsDevice getGraphicsDevice() {
- return null;
- }
-
@Override
public SurfaceData getScreenSurface() {
return null;
@@ -199,4 +200,24 @@ public class CPlatformLWWindow extends CPlatformWindow {
public long getLayerPtr() {
return 0;
}
+
+ @Override
+ public GraphicsDevice getGraphicsDevice() {
+ CGraphicsEnvironment ge = (CGraphicsEnvironment)GraphicsEnvironment.
+ getLocalGraphicsEnvironment();
+
+ LWLightweightFramePeer peer = (LWLightweightFramePeer)getPeer();
+ int scale = ((LightweightFrame)peer.getTarget()).getScaleFactor();
+
+ Rectangle bounds = ((LightweightFrame)peer.getTarget()).getHostBounds();
+ for (GraphicsDevice d : ge.getScreenDevices()) {
+ if (d.getDefaultConfiguration().getBounds().intersects(bounds) &&
+ ((CGraphicsDevice)d).getScaleFactor() == scale)
+ {
+ return d;
+ }
+ }
+ // We shouldn't be here...
+ return ge.getDefaultScreenDevice();
+ }
}
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java
index d8d1555450c..591c16d2879 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java
@@ -125,7 +125,7 @@ final class CPlatformResponder {
/**
* Handles key events.
*/
- void handleKeyEvent(int eventType, int modifierFlags, String chars,
+ void handleKeyEvent(int eventType, int modifierFlags, String chars, String charsIgnoringModifiers,
short keyCode, boolean needsKeyTyped, boolean needsKeyReleased) {
boolean isFlagsChangedEvent =
isNpapiCallback ? (eventType == CocoaConstants.NPCocoaEventFlagsChanged) :
@@ -153,7 +153,10 @@ final class CPlatformResponder {
testChar = chars.charAt(0);
}
- int[] in = new int[] {testChar, isDeadChar ? 1 : 0, modifierFlags, keyCode};
+ char testCharIgnoringModifiers = charsIgnoringModifiers != null && charsIgnoringModifiers.length() > 0 ?
+ charsIgnoringModifiers.charAt(0) : KeyEvent.CHAR_UNDEFINED;
+
+ int[] in = new int[] {testCharIgnoringModifiers, isDeadChar ? 1 : 0, modifierFlags, keyCode};
int[] out = new int[3]; // [jkeyCode, jkeyLocation, deadChar]
postsTyped = NSEvent.nsToJavaKeyInfo(in, out);
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java
index e81371b4751..3c2cd2325e4 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java
@@ -200,7 +200,7 @@ public class CPlatformView extends CFRetainedResource {
}
private void deliverKeyEvent(NSEvent event) {
- responder.handleKeyEvent(event.getType(), event.getModifierFlags(),
+ responder.handleKeyEvent(event.getType(), event.getModifierFlags(), event.getCharacters(),
event.getCharactersIgnoringModifiers(), event.getKeyCode(), true, false);
}
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
index edf25ddb313..534cf0dd744 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
@@ -119,6 +119,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
static final int NONACTIVATING = 1 << 24;
static final int IS_DIALOG = 1 << 25;
static final int IS_MODAL = 1 << 26;
+ static final int IS_POPUP = 1 << 27;
static final int _STYLE_PROP_BITMASK = DECORATED | TEXTURED | UNIFIED | UTILITY | HUD | SHEET | CLOSEABLE | MINIMIZABLE | RESIZABLE;
@@ -318,6 +319,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
styleBits = SET(styleBits, TEXTURED, false);
// Popups in applets don't activate applet's process
styleBits = SET(styleBits, NONACTIVATING, true);
+ styleBits = SET(styleBits, IS_POPUP, true);
}
if (Window.Type.UTILITY.equals(target.getType())) {
@@ -744,20 +746,22 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
@Override
public void setOpaque(boolean isOpaque) {
CWrapper.NSWindow.setOpaque(getNSWindowPtr(), isOpaque);
- boolean isTextured = (peer == null)? false : peer.isTextured();
- if (!isOpaque && !isTextured) {
- long clearColor = CWrapper.NSColor.clearColor();
- CWrapper.NSWindow.setBackgroundColor(getNSWindowPtr(), clearColor);
+ boolean isTextured = (peer == null) ? false : peer.isTextured();
+ if (!isTextured) {
+ if (!isOpaque) {
+ CWrapper.NSWindow.setBackgroundColor(getNSWindowPtr(), 0);
+ } else if (peer != null) {
+ Color color = peer.getBackground();
+ if (color != null) {
+ int rgb = color.getRGB();
+ CWrapper.NSWindow.setBackgroundColor(getNSWindowPtr(), rgb);
+ }
+ }
}
//This is a temporary workaround. Looks like after 7124236 will be fixed
//the correct place for invalidateShadow() is CGLayer.drawInCGLContext.
- SwingUtilities.invokeLater(new Runnable() {
- @Override
- public void run() {
- invalidateShadow();
- }
- });
+ SwingUtilities.invokeLater(this::invalidateShadow);
}
@Override
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CWrapper.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CWrapper.java
index 8c2e9c01f2d..f0fec624d8d 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CWrapper.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CWrapper.java
@@ -61,7 +61,14 @@ final class CWrapper {
static native void setAlphaValue(long window, float alpha);
static native void setOpaque(long window, boolean opaque);
- static native void setBackgroundColor(long window, long color);
+
+ /**
+ * Sets background color of the NSWindow.
+ *
+ * @param window the pointer of the NSWindow
+ * @param color the color in argb format
+ */
+ static native void setBackgroundColor(long window, int color);
static native void miniaturize(long window);
static native void deminiaturize(long window);
@@ -82,8 +89,4 @@ final class CWrapper {
static native void setToolTip(long view, String msg);
}
-
- static final class NSColor {
- static native long clearColor();
- }
}
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/NSEvent.java b/jdk/src/macosx/classes/sun/lwawt/macosx/NSEvent.java
index ddb74d42b02..d30a39cdfb9 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/NSEvent.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/NSEvent.java
@@ -47,13 +47,15 @@ final class NSEvent {
// Key event information
private short keyCode;
+ private String characters;
private String charactersIgnoringModifiers;
// Called from native
- NSEvent(int type, int modifierFlags, short keyCode, String charactersIgnoringModifiers) {
+ NSEvent(int type, int modifierFlags, short keyCode, String characters, String charactersIgnoringModifiers) {
this.type = type;
this.modifierFlags = modifierFlags;
this.keyCode = keyCode;
+ this.characters = characters;
this.charactersIgnoringModifiers = charactersIgnoringModifiers;
}
@@ -121,12 +123,16 @@ final class NSEvent {
return charactersIgnoringModifiers;
}
+ String getCharacters() {
+ return characters;
+ }
+
@Override
public String toString() {
return "NSEvent[" + getType() + " ," + getModifierFlags() + " ,"
+ getClickCount() + " ," + getButtonNumber() + " ," + getX() + " ,"
+ getY() + " ," + getAbsX() + " ," + getAbsY()+ " ," + getKeyCode() + " ,"
- + getCharactersIgnoringModifiers() + "]";
+ + getCharacters() + " ," + getCharactersIgnoringModifiers() + "]";
}
/*
diff --git a/jdk/src/macosx/native/com/apple/laf/ScreenPopupFactory.m b/jdk/src/macosx/native/com/apple/laf/ScreenPopupFactory.m
deleted file mode 100644
index 516ce45d5a0..00000000000
--- a/jdk/src/macosx/native/com/apple/laf/ScreenPopupFactory.m
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-#import "com_apple_laf_ScreenPopupFactory.h"
-#import
-
-static JNF_CLASS_CACHE(sjc_PopupFactory, "javax/swing/PopupFactory");
-static JNF_MEMBER_CACHE(jm_getPopup, sjc_PopupFactory, "getPopup", "(Ljava/awt/Component;Ljava/awt/Component;III)Ljavax/swing/Popup;");
-
-/*
- * Class: com_apple_laf_ScreenPopupFactory
- * Method: _getHeavyWeightPopup
- * Signature: (Ljava/awt/Component;Ljava/awt/Component;II)Ljavax/swing/Popup;
- */
-JNIEXPORT jobject /* javax.swing.Popup */ JNICALL Java_com_apple_laf_ScreenPopupFactory__1getHeavyWeightPopup
-(JNIEnv *env, jobject screenPopupFactory, jobject comp, jobject invoker, jint x, jint y) {
- jobject popup;
-JNF_COCOA_ENTER(env);
- popup = JNFCallObjectMethod(env, screenPopupFactory, jm_getPopup, comp, invoker, x, y, 2);
-JNF_COCOA_EXIT(env);
- return popup;
-}
diff --git a/jdk/src/macosx/native/jobjc/JObjC.xcodeproj/default.pbxuser b/jdk/src/macosx/native/jobjc/JObjC.xcodeproj/default.pbxuser
deleted file mode 100644
index cda3de5e2f2..00000000000
--- a/jdk/src/macosx/native/jobjc/JObjC.xcodeproj/default.pbxuser
+++ /dev/null
@@ -1,207 +0,0 @@
-// !$*UTF8*$!
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- *
- */
-{
- 00E6828EFEC88D1A11DB9C8B /* Project object */ = {
- activeBuildConfigurationName = Release;
- activeExecutable = 6A9FA6570246BA6C0CC91562 /* JObjC */;
- activeTarget = EB9FD8610AEECCF5008E157E /* JObjC */;
- addToTargets = (
- 4CEBA78E08679EF10015D03E /* JNILib */,
- );
- breakpointsGroup = 0AB3651F0B2F67B300788B6C /* XCBreakpointsBucket */;
- codeSenseManager = 0AB364DB0B2F66FD00788B6C /* Code sense */;
- executables = (
- 6A9FA6570246BA6C0CC91562 /* JObjC */,
- );
- perUserDictionary = {
- PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = {
- PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
- PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID;
- PBXFileTableDataSourceColumnWidthsKey = (
- 22,
- 300,
- 131,
- );
- PBXFileTableDataSourceColumnsKey = (
- PBXExecutablesDataSource_ActiveFlagID,
- PBXExecutablesDataSource_NameID,
- PBXExecutablesDataSource_CommentsID,
- );
- };
- PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
- PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
- PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
- PBXFileTableDataSourceColumnWidthsKey = (
- 20,
- 245,
- 20,
- 48,
- 43,
- 43,
- 20,
- );
- PBXFileTableDataSourceColumnsKey = (
- PBXFileDataSource_FiletypeID,
- PBXFileDataSource_Filename_ColumnID,
- PBXFileDataSource_Built_ColumnID,
- PBXFileDataSource_ObjectSize_ColumnID,
- PBXFileDataSource_Errors_ColumnID,
- PBXFileDataSource_Warnings_ColumnID,
- PBXFileDataSource_Target_ColumnID,
- );
- };
- PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = {
- PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
- PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
- PBXFileTableDataSourceColumnWidthsKey = (
- 20,
- 200,
- 65,
- 20,
- 48,
- 43,
- 43,
- );
- PBXFileTableDataSourceColumnsKey = (
- PBXFileDataSource_FiletypeID,
- PBXFileDataSource_Filename_ColumnID,
- PBXTargetDataSource_PrimaryAttribute,
- PBXFileDataSource_Built_ColumnID,
- PBXFileDataSource_ObjectSize_ColumnID,
- PBXFileDataSource_Errors_ColumnID,
- PBXFileDataSource_Warnings_ColumnID,
- );
- };
- };
- sourceControlManager = 0AB364DA0B2F66FD00788B6C /* Source Control */;
- userBuildSettings = {
- };
- };
- 0AB364DA0B2F66FD00788B6C /* Source Control */ = {
- isa = PBXSourceControlManager;
- fallbackIsa = XCSourceControlManager;
- isSCMEnabled = 0;
- scmConfiguration = {
- };
- scmType = "";
- };
- 0AB364DB0B2F66FD00788B6C /* Code sense */ = {
- isa = PBXCodeSenseManager;
- indexTemplatePath = "";
- };
- 0AB3651F0B2F67B300788B6C /* XCBreakpointsBucket */ = {
- isa = XCBreakpointsBucket;
- name = "Project Breakpoints";
- objects = (
- );
- };
- 0AB365570B2F6ABB00788B6C /* JObjCdylib.c */ = {
- uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {847, 783}}";
- sepNavSelRange = "{0, 0}";
- sepNavVisRect = "{{0, 0}, {847, 783}}";
- sepNavWindowFrame = "{{84, 198}, {886, 912}}";
- };
- };
- 0A3CC35E0B94BB8800F6BA26 /* java */ = {
- isa = PBXFileReference;
- explicitFileType = "compiled.mach-o.executable";
- name = java;
- path = /usr/bin/java;
- sourceTree = "";
- };
- 363028F90383184400C91562 /* Manifest */ = {
- uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {847, 783}}";
- sepNavSelRange = "{0, 0}";
- sepNavVisRect = "{{0, 0}, {847, 783}}";
- sepNavWindowFrame = "{{38, 240}, {886, 912}}";
- };
- };
- 4CEBA78E08679EF10015D03E /* Dylib */ = {
- activeExec = 0;
- };
- 6A9FA6570246BA6C0CC91562 /* JObjC */ = {
- isa = PBXExecutable;
- activeArgIndex = 0;
- activeArgIndices = (
- YES,
- );
- argumentStrings = (
- "-cp JObjC.jar JObjC",
- );
- autoAttachOnCrash = 1;
- configStateDict = {
- "PBXLSLaunchAction-0" = {
- PBXLSLaunchAction = 0;
- PBXLSLaunchStartAction = 1;
- PBXLSLaunchStdioStyle = 2;
- PBXLSLaunchStyle = 0;
- class = PBXLSRunLaunchConfig;
- displayName = "Executable Runner";
- identifier = com.apple.Xcode.launch.runConfig;
- remoteHostInfo = "";
- startActionInfo = "";
- };
- "PBXLSLaunchAction-1" = {
- PBXLSLaunchAction = 1;
- PBXLSLaunchStartAction = 1;
- PBXLSLaunchStdioStyle = 2;
- PBXLSLaunchStyle = 0;
- class = PBXJavaDebuggingNativeLaunchConfig;
- displayName = "Java Debugger";
- identifier = com.apple.Xcode.launch.JavaDebugNativeConfig;
- remoteHostInfo = "";
- startActionInfo = "";
- };
- };
- customDataFormattersEnabled = 1;
- debuggerPlugin = GDBDebugging;
- disassemblyDisplayState = 0;
- dylibVariantSuffix = "";
- enableDebugStr = 1;
- environmentEntries = (
- );
- executableSystemSymbolLevel = 0;
- executableUserSymbolLevel = 0;
- launchableReference = 0A3CC35E0B94BB8800F6BA26 /* java */;
- libgmallocEnabled = 0;
- name = JObjC;
- sourceDirectories = (
- );
- startupPath = "dist";
- };
- EB9FD8610AEECCF5008E157E /* JObjC */ = {
- activeExec = 0;
- };
- EB9FD8720AEECD83008E157E /* build.xml */ = {
- uiCtxt = {
- sepNavIntBoundsRect = "{{0, 0}, {847, 1260}}";
- sepNavSelRange = "{1260, 0}";
- sepNavVisRect = "{{0, 8}, {847, 783}}";
- sepNavWindowFrame = "{{752, 266}, {886, 912}}";
- };
- };
-}
diff --git a/jdk/src/macosx/native/jobjc/JObjC.xcodeproj/project.pbxproj b/jdk/src/macosx/native/jobjc/JObjC.xcodeproj/project.pbxproj
deleted file mode 100644
index 61cf3948d0d..00000000000
--- a/jdk/src/macosx/native/jobjc/JObjC.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,1397 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 44;
- objects = {
-
-/* Begin PBXAggregateTarget section */
- 89EBD58C0C95F43D000F04A0 /* B&I */ = {
- isa = PBXAggregateTarget;
- buildConfigurationList = 89EBD5930C95F44E000F04A0 /* Build configuration list for PBXAggregateTarget "B&I" */;
- buildPhases = (
- );
- dependencies = (
- C592D6590E12F27400D076FF /* PBXTargetDependency */,
- C592D65B0E12F27600D076FF /* PBXTargetDependency */,
- C592D65D0E12F27E00D076FF /* PBXTargetDependency */,
- 89D7CB9C0CDC64F800472EA2 /* PBXTargetDependency */,
- C592D65F0E12F28500D076FF /* PBXTargetDependency */,
- C592D6610E12F28E00D076FF /* PBXTargetDependency */,
- C592D6630E12F29200D076FF /* PBXTargetDependency */,
- 89D7CC920CDE7A8200472EA2 /* PBXTargetDependency */,
- );
- name = "B&I";
- productName = "B&I";
- };
-/* End PBXAggregateTarget section */
-
-/* Begin PBXBuildFile section */
- 89D7C9F70CDB900E00472EA2 /* CIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9EC0CDB900E00472EA2 /* CIF.m */; };
- 89D7C9F80CDB900E00472EA2 /* Coder.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9ED0CDB900E00472EA2 /* Coder.m */; };
- 89D7C9F90CDB900E00472EA2 /* Function.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9EE0CDB900E00472EA2 /* Function.m */; };
- 89D7C9FA0CDB900E00472EA2 /* ID.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9EF0CDB900E00472EA2 /* ID.m */; };
- 89D7C9FB0CDB900E00472EA2 /* JObjCRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9F00CDB900E00472EA2 /* JObjCRuntime.m */; };
- 89D7C9FC0CDB900E00472EA2 /* MacOSXFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9F10CDB900E00472EA2 /* MacOSXFramework.m */; };
- 89D7C9FD0CDB900E00472EA2 /* NativeBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 89D7C9F20CDB900E00472EA2 /* NativeBuffer.h */; };
- 89D7C9FE0CDB900E00472EA2 /* NativeBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9F30CDB900E00472EA2 /* NativeBuffer.m */; };
- 89D7C9FF0CDB900E00472EA2 /* NativeObjectLifecycleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9F40CDB900E00472EA2 /* NativeObjectLifecycleManager.m */; };
- 89D7CA000CDB900E00472EA2 /* NSClass.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9F50CDB900E00472EA2 /* NSClass.m */; };
- 89D7CA010CDB900E00472EA2 /* SEL.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9F60CDB900E00472EA2 /* SEL.m */; };
- 89D7CB770CDC4A6500472EA2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 890FBACC0C6F782C00902C32 /* Foundation.framework */; };
- 89D7CB780CDC4A6500472EA2 /* JavaVM.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 890FBACA0C6F781000902C32 /* JavaVM.framework */; };
- 89D7CB790CDC4A6500472EA2 /* JavaNativeFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 896D90BB0CC2877C005625F5 /* JavaNativeFoundation.framework */; };
- 89D7CB7A0CDC4A6500472EA2 /* libffi.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 89E437680C97A7F200C756EE /* libffi.dylib */; };
- 89D7CCA40CDF9A2600472EA2 /* NativeBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 89D7C9F20CDB900E00472EA2 /* NativeBuffer.h */; };
- 89D7CCA60CDF9A2600472EA2 /* CIF.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9EC0CDB900E00472EA2 /* CIF.m */; };
- 89D7CCA70CDF9A2600472EA2 /* Coder.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9ED0CDB900E00472EA2 /* Coder.m */; };
- 89D7CCA80CDF9A2600472EA2 /* Function.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9EE0CDB900E00472EA2 /* Function.m */; };
- 89D7CCA90CDF9A2600472EA2 /* ID.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9EF0CDB900E00472EA2 /* ID.m */; };
- 89D7CCAA0CDF9A2600472EA2 /* JObjCRuntime.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9F00CDB900E00472EA2 /* JObjCRuntime.m */; };
- 89D7CCAB0CDF9A2600472EA2 /* MacOSXFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9F10CDB900E00472EA2 /* MacOSXFramework.m */; };
- 89D7CCAC0CDF9A2600472EA2 /* NativeBuffer.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9F30CDB900E00472EA2 /* NativeBuffer.m */; };
- 89D7CCAD0CDF9A2600472EA2 /* NativeObjectLifecycleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9F40CDB900E00472EA2 /* NativeObjectLifecycleManager.m */; };
- 89D7CCAE0CDF9A2600472EA2 /* NSClass.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9F50CDB900E00472EA2 /* NSClass.m */; };
- 89D7CCAF0CDF9A2600472EA2 /* SEL.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7C9F60CDB900E00472EA2 /* SEL.m */; };
- 89D7CCB10CDF9A2600472EA2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 890FBACC0C6F782C00902C32 /* Foundation.framework */; };
- 89D7CCB20CDF9A2600472EA2 /* JavaVM.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 890FBACA0C6F781000902C32 /* JavaVM.framework */; };
- 89D7CCB30CDF9A2600472EA2 /* JavaNativeFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 896D90BB0CC2877C005625F5 /* JavaNativeFoundation.framework */; };
- 89D7CCB40CDF9A2600472EA2 /* libffi.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 89E437680C97A7F200C756EE /* libffi.dylib */; };
- 89D7CCBB0CDF9AA200472EA2 /* NativeString.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7CCBA0CDF9AA200472EA2 /* NativeString.m */; };
- 89D7CCBD0CDF9AB100472EA2 /* NativeNumber.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7CCBC0CDF9AB100472EA2 /* NativeNumber.m */; };
- 89D7CCBF0CDF9AC600472EA2 /* NativeThread.m in Sources */ = {isa = PBXBuildFile; fileRef = 89D7CCBE0CDF9AC600472EA2 /* NativeThread.m */; };
- C5742F6D0E316EFA00093838 /* Subclassing.m in Sources */ = {isa = PBXBuildFile; fileRef = C5742F6B0E316EFA00093838 /* Subclassing.m */; };
- C5742F700E316F8600093838 /* Subclassing.m in Sources */ = {isa = PBXBuildFile; fileRef = C5742F6B0E316EFA00093838 /* Subclassing.m */; };
- C5D196C90DF9E43C006F9FB9 /* FFIType.m in Sources */ = {isa = PBXBuildFile; fileRef = C5D196C80DF9E43C006F9FB9 /* FFIType.m */; };
- C5D197D90DFB77C6006F9FB9 /* FFIType.m in Sources */ = {isa = PBXBuildFile; fileRef = C5D196C80DF9E43C006F9FB9 /* FFIType.m */; };
- C5E4547B0E36729F0046D3E8 /* Invoke.m in Sources */ = {isa = PBXBuildFile; fileRef = C5E454790E36729F0046D3E8 /* Invoke.m */; };
- C5E4547D0E367DAB0046D3E8 /* Invoke.m in Sources */ = {isa = PBXBuildFile; fileRef = C5E454790E36729F0046D3E8 /* Invoke.m */; };
- C5F3B23D0E39948300B771AE /* FunCallBench.m in Sources */ = {isa = PBXBuildFile; fileRef = C5F3B1370E398F8E00B771AE /* FunCallBench.m */; };
- C5F3B2620E3AB0F300B771AE /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C5F3B2610E3AB0F300B771AE /* AppKit.framework */; };
- C5F3B2640E3AB0F300B771AE /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C5F3B2630E3AB0F300B771AE /* Cocoa.framework */; };
- C5F3B2650E3AB0F300B771AE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 890FBACC0C6F782C00902C32 /* Foundation.framework */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- 2CC7556013A1322100B09D1B /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = EB9FD8610AEECCF5008E157E;
- remoteInfo = "build-core-java";
- };
- 2CC7556213A1322800B09D1B /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = C5F3B1530E39927900B771AE;
- remoteInfo = "build-test-java";
- };
- 2CC7556413A1323700B09D1B /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 89D7CA160CDBA94D00472EA2;
- remoteInfo = "build-generator-java";
- };
- 2CC7556613A1324300B09D1B /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 89D7CC600CDE75EC00472EA2;
- remoteInfo = "build-additions-java";
- };
- 2CC7556813A1325700B09D1B /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 89D7CB870CDC4ED000472EA2;
- remoteInfo = "run-generator";
- };
- 2CC7556A13A132AF00B09D1B /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 4CEBA78E08679EF10015D03E;
- remoteInfo = "build-core-native";
- };
- 2CC7556C13A132B200B09D1B /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = EB9FD8610AEECCF5008E157E;
- remoteInfo = "build-core-java";
- };
- 89D7CB9B0CDC64F800472EA2 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 89D7CB870CDC4ED000472EA2;
- remoteInfo = "run-generator";
- };
- 89D7CC910CDE7A8200472EA2 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 89D7CC720CDE767500472EA2;
- remoteInfo = "assemble-product-java";
- };
- C592D6580E12F27400D076FF /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = EB9FD8610AEECCF5008E157E;
- remoteInfo = "build-core-java";
- };
- C592D65A0E12F27600D076FF /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 4CEBA78E08679EF10015D03E;
- remoteInfo = "build-core-native";
- };
- C592D65C0E12F27E00D076FF /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 89D7CA160CDBA94D00472EA2;
- remoteInfo = "build-generator-java";
- };
- C592D65E0E12F28500D076FF /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 89D7CC4C0CDE4C0400472EA2;
- remoteInfo = "build-generated-java";
- };
- C592D6600E12F28E00D076FF /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 89D7CC600CDE75EC00472EA2;
- remoteInfo = "build-additions-java";
- };
- C592D6620E12F29200D076FF /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 89D7CCA20CDF9A2600472EA2;
- remoteInfo = "build-additions-native";
- };
- C5D197DA0DFB77E4006F9FB9 /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = 00E6828EFEC88D1A11DB9C8B /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = 4CEBA78E08679EF10015D03E;
- remoteInfo = "build-core-native";
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
- 0AB364E40B2F671600788B6C /* src */ = {isa = PBXFileReference; lastKnownFileType = folder; path = src; sourceTree = ""; };
- 890FBACA0C6F781000902C32 /* JavaVM.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaVM.framework; path = /System/Library/Frameworks/JavaVM.framework; sourceTree = ""; };
- 890FBACC0C6F782C00902C32 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; };
- 896D90BB0CC2877C005625F5 /* JavaNativeFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaNativeFoundation.framework; path = /System/Library/Frameworks/JavaVM.framework/Versions/A/Frameworks/JavaNativeFoundation.framework; sourceTree = ""; };
- 896D91230CC2ED34005625F5 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = ""; };
- 89736E5F0CE819E5008C4205 /* JObjC.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; path = JObjC.jar; sourceTree = BUILT_PRODUCTS_DIR; };
- 89D7C9EC0CDB900E00472EA2 /* CIF.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CIF.m; sourceTree = ""; };
- 89D7C9ED0CDB900E00472EA2 /* Coder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Coder.m; sourceTree = ""; };
- 89D7C9EE0CDB900E00472EA2 /* Function.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Function.m; sourceTree = ""; };
- 89D7C9EF0CDB900E00472EA2 /* ID.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ID.m; sourceTree = ""; };
- 89D7C9F00CDB900E00472EA2 /* JObjCRuntime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JObjCRuntime.m; sourceTree = ""; };
- 89D7C9F10CDB900E00472EA2 /* MacOSXFramework.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MacOSXFramework.m; sourceTree = ""; };
- 89D7C9F20CDB900E00472EA2 /* NativeBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NativeBuffer.h; sourceTree = ""; };
- 89D7C9F30CDB900E00472EA2 /* NativeBuffer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NativeBuffer.m; sourceTree = ""; };
- 89D7C9F40CDB900E00472EA2 /* NativeObjectLifecycleManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NativeObjectLifecycleManager.m; sourceTree = ""; };
- 89D7C9F50CDB900E00472EA2 /* NSClass.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSClass.m; sourceTree = ""; };
- 89D7C9F60CDB900E00472EA2 /* SEL.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SEL.m; sourceTree = ""; };
- 89D7CCB80CDF9A2600472EA2 /* libJObjC.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libJObjC.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
- 89D7CCBA0CDF9AA200472EA2 /* NativeString.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NativeString.m; sourceTree = ""; };
- 89D7CCBC0CDF9AB100472EA2 /* NativeNumber.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NativeNumber.m; sourceTree = ""; };
- 89D7CCBE0CDF9AC600472EA2 /* NativeThread.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NativeThread.m; sourceTree = ""; };
- 89E437680C97A7F200C756EE /* libffi.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libffi.dylib; path = /usr/lib/libffi.dylib; sourceTree = ""; };
- C5742F6B0E316EFA00093838 /* Subclassing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Subclassing.m; sourceTree = ""; };
- C5D196C80DF9E43C006F9FB9 /* FFIType.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FFIType.m; sourceTree = ""; };
- C5E454790E36729F0046D3E8 /* Invoke.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Invoke.m; sourceTree = ""; };
- C5F3B1370E398F8E00B771AE /* FunCallBench.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FunCallBench.m; sourceTree = ""; };
- C5F3B1450E39910500B771AE /* libJObjC-tests.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = "libJObjC-tests.dylib"; sourceTree = BUILT_PRODUCTS_DIR; };
- C5F3B2610E3AB0F300B771AE /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; };
- C5F3B2630E3AB0F300B771AE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; };
- EB9FD8720AEECD83008E157E /* build.xml */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = build.xml; sourceTree = ""; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- 4CEBA78D08679EF10015D03E /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 89D7CB770CDC4A6500472EA2 /* Foundation.framework in Frameworks */,
- 89D7CB780CDC4A6500472EA2 /* JavaVM.framework in Frameworks */,
- 89D7CB790CDC4A6500472EA2 /* JavaNativeFoundation.framework in Frameworks */,
- 89D7CB7A0CDC4A6500472EA2 /* libffi.dylib in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 89D7CCB00CDF9A2600472EA2 /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 89D7CCB10CDF9A2600472EA2 /* Foundation.framework in Frameworks */,
- 89D7CCB20CDF9A2600472EA2 /* JavaVM.framework in Frameworks */,
- 89D7CCB30CDF9A2600472EA2 /* JavaNativeFoundation.framework in Frameworks */,
- 89D7CCB40CDF9A2600472EA2 /* libffi.dylib in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- C5F3B1430E39910500B771AE /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- C5F3B2620E3AB0F300B771AE /* AppKit.framework in Frameworks */,
- C5F3B2640E3AB0F300B771AE /* Cocoa.framework in Frameworks */,
- C5F3B2650E3AB0F300B771AE /* Foundation.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- 00E6828FFEC88D1A11DB9C8B = {
- isa = PBXGroup;
- children = (
- 896D91230CC2ED34005625F5 /* README.txt */,
- EB9FD8720AEECD83008E157E /* build.xml */,
- 0AB364E40B2F671600788B6C /* src */,
- 89D7C9EB0CDB900E00472EA2 /* native-core */,
- 89D7CA020CDB902200472EA2 /* native-additions */,
- C5A9597F0E398F050057C96D /* native-tests */,
- 89D7CA030CDB903000472EA2 /* products */,
- 890FBAC90C6F77B700902C32 /* frameworks */,
- C5F3B1450E39910500B771AE /* libJObjC-tests.dylib */,
- C5F3B2610E3AB0F300B771AE /* AppKit.framework */,
- C5F3B2630E3AB0F300B771AE /* Cocoa.framework */,
- );
- sourceTree = "";
- };
- 890FBAC90C6F77B700902C32 /* frameworks */ = {
- isa = PBXGroup;
- children = (
- 890FBACC0C6F782C00902C32 /* Foundation.framework */,
- 890FBACA0C6F781000902C32 /* JavaVM.framework */,
- 896D90BB0CC2877C005625F5 /* JavaNativeFoundation.framework */,
- 89E437680C97A7F200C756EE /* libffi.dylib */,
- );
- name = frameworks;
- sourceTree = "";
- };
- 89D7C9EB0CDB900E00472EA2 /* native-core */ = {
- isa = PBXGroup;
- children = (
- 89D7C9EC0CDB900E00472EA2 /* CIF.m */,
- 89D7C9ED0CDB900E00472EA2 /* Coder.m */,
- C5D196C80DF9E43C006F9FB9 /* FFIType.m */,
- 89D7C9EE0CDB900E00472EA2 /* Function.m */,
- 89D7C9EF0CDB900E00472EA2 /* ID.m */,
- C5E454790E36729F0046D3E8 /* Invoke.m */,
- 89D7C9F00CDB900E00472EA2 /* JObjCRuntime.m */,
- 89D7C9F10CDB900E00472EA2 /* MacOSXFramework.m */,
- 89D7C9F20CDB900E00472EA2 /* NativeBuffer.h */,
- 89D7C9F30CDB900E00472EA2 /* NativeBuffer.m */,
- 89D7C9F40CDB900E00472EA2 /* NativeObjectLifecycleManager.m */,
- 89D7C9F50CDB900E00472EA2 /* NSClass.m */,
- 89D7C9F60CDB900E00472EA2 /* SEL.m */,
- C5742F6B0E316EFA00093838 /* Subclassing.m */,
- );
- name = "native-core";
- path = src/core/native;
- sourceTree = "";
- };
- 89D7CA020CDB902200472EA2 /* native-additions */ = {
- isa = PBXGroup;
- children = (
- 89D7CCBA0CDF9AA200472EA2 /* NativeString.m */,
- 89D7CCBC0CDF9AB100472EA2 /* NativeNumber.m */,
- 89D7CCBE0CDF9AC600472EA2 /* NativeThread.m */,
- );
- name = "native-additions";
- path = "src/runtime-additions/native";
- sourceTree = "";
- };
- 89D7CA030CDB903000472EA2 /* products */ = {
- isa = PBXGroup;
- children = (
- 89736E5F0CE819E5008C4205 /* JObjC.jar */,
- 89D7CCB80CDF9A2600472EA2 /* libJObjC.dylib */,
- );
- name = products;
- path = "src/runtime-additions/native";
- sourceTree = "";
- };
- C5A9597F0E398F050057C96D /* native-tests */ = {
- isa = PBXGroup;
- children = (
- C5F3B1370E398F8E00B771AE /* FunCallBench.m */,
- );
- name = "native-tests";
- path = src/tests/native;
- sourceTree = "";
- };
-/* End PBXGroup section */
-
-/* Begin PBXHeadersBuildPhase section */
- 4CEBA78B08679EF10015D03E /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 89D7C9FD0CDB900E00472EA2 /* NativeBuffer.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 89D7CCA30CDF9A2600472EA2 /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- 89D7CCA40CDF9A2600472EA2 /* NativeBuffer.h in Headers */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- C5F3B1410E39910500B771AE /* Headers */ = {
- isa = PBXHeadersBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXHeadersBuildPhase section */
-
-/* Begin PBXLegacyTarget section */
- 89D7CA160CDBA94D00472EA2 /* build-generator-java */ = {
- isa = PBXLegacyTarget;
- buildArgumentsString = "-verbose -emacs $ACTION";
- buildConfigurationList = 89D7CA1C0CDBA9B000472EA2 /* Build configuration list for PBXLegacyTarget "build-generator-java" */;
- buildPhases = (
- );
- buildToolPath = /usr/bin/ant;
- dependencies = (
- 2CC7556D13A132B200B09D1B /* PBXTargetDependency */,
- 2CC7556B13A132AF00B09D1B /* PBXTargetDependency */,
- );
- name = "build-generator-java";
- passBuildSettingsInEnvironment = 1;
- productName = "generator-build-java";
- };
- 89D7CB870CDC4ED000472EA2 /* run-generator */ = {
- isa = PBXLegacyTarget;
- buildArgumentsString = "-verbose -emacs $ACTION";
- buildConfigurationList = 89D7CB8E0CDC4ED900472EA2 /* Build configuration list for PBXLegacyTarget "run-generator" */;
- buildPhases = (
- );
- buildToolPath = /usr/bin/ant;
- dependencies = (
- 2CC7556513A1323700B09D1B /* PBXTargetDependency */,
- );
- name = "run-generator";
- passBuildSettingsInEnvironment = 1;
- productName = "run-generator";
- };
- 89D7CC4C0CDE4C0400472EA2 /* build-generated-java */ = {
- isa = PBXLegacyTarget;
- buildArgumentsString = "-verbose -emacs $ACTION";
- buildConfigurationList = 89D7CC510CDE4C5200472EA2 /* Build configuration list for PBXLegacyTarget "build-generated-java" */;
- buildPhases = (
- );
- buildToolPath = /usr/bin/ant;
- dependencies = (
- 2CC7556913A1325700B09D1B /* PBXTargetDependency */,
- );
- name = "build-generated-java";
- passBuildSettingsInEnvironment = 1;
- productName = "build-generated-java";
- };
- 89D7CC600CDE75EC00472EA2 /* build-additions-java */ = {
- isa = PBXLegacyTarget;
- buildArgumentsString = "-verbose -emacs $ACTION";
- buildConfigurationList = 89D7CC630CDE762000472EA2 /* Build configuration list for PBXLegacyTarget "build-additions-java" */;
- buildPhases = (
- );
- buildToolPath = /usr/bin/ant;
- dependencies = (
- );
- name = "build-additions-java";
- passBuildSettingsInEnvironment = 1;
- productName = "build-additions-java";
- };
- 89D7CC720CDE767500472EA2 /* assemble-product-java */ = {
- isa = PBXLegacyTarget;
- buildArgumentsString = "-verbose -emacs $ACTION";
- buildConfigurationList = 89D7CC7A0CDE76F500472EA2 /* Build configuration list for PBXLegacyTarget "assemble-product-java" */;
- buildPhases = (
- );
- buildToolPath = /usr/bin/ant;
- dependencies = (
- );
- name = "assemble-product-java";
- passBuildSettingsInEnvironment = 1;
- productName = "package-product";
- };
- C5F3B1530E39927900B771AE /* build-test-java */ = {
- isa = PBXLegacyTarget;
- buildArgumentsString = "-verbose -emacs $ACTION";
- buildConfigurationList = C5F3B15B0E3992AC00B771AE /* Build configuration list for PBXLegacyTarget "build-test-java" */;
- buildPhases = (
- );
- buildToolPath = /usr/bin/ant;
- dependencies = (
- );
- name = "build-test-java";
- passBuildSettingsInEnvironment = 1;
- productName = "build-test";
- };
- EB9FD8610AEECCF5008E157E /* build-core-java */ = {
- isa = PBXLegacyTarget;
- buildArgumentsString = "-verbose -emacs $ACTION";
- buildConfigurationList = EB9FD8690AEECD13008E157E /* Build configuration list for PBXLegacyTarget "build-core-java" */;
- buildPhases = (
- );
- buildToolPath = /usr/bin/ant;
- buildWorkingDirectory = "";
- dependencies = (
- );
- name = "build-core-java";
- passBuildSettingsInEnvironment = 1;
- productName = AntJNIWrapper;
- };
-/* End PBXLegacyTarget section */
-
-/* Begin PBXNativeTarget section */
- 4CEBA78E08679EF10015D03E /* build-core-native */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 4CEBA79108679F100015D03E /* Build configuration list for PBXNativeTarget "build-core-native" */;
- buildPhases = (
- 4CEBA78B08679EF10015D03E /* Headers */,
- 4CEBA78C08679EF10015D03E /* Sources */,
- 4CEBA78D08679EF10015D03E /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 2CC7556113A1322100B09D1B /* PBXTargetDependency */,
- );
- name = "build-core-native";
- productName = DylibN;
- productType = "com.apple.product-type.library.dynamic";
- };
- 89D7CCA20CDF9A2600472EA2 /* build-additions-native */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = 89D7CCB50CDF9A2600472EA2 /* Build configuration list for PBXNativeTarget "build-additions-native" */;
- buildPhases = (
- 89D7CCA30CDF9A2600472EA2 /* Headers */,
- 89D7CCA50CDF9A2600472EA2 /* Sources */,
- 89D7CCB00CDF9A2600472EA2 /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 2CC7556713A1324300B09D1B /* PBXTargetDependency */,
- C5D197DB0DFB77E4006F9FB9 /* PBXTargetDependency */,
- );
- name = "build-additions-native";
- productName = DylibN;
- productReference = 89D7CCB80CDF9A2600472EA2 /* libJObjC.dylib */;
- productType = "com.apple.product-type.library.dynamic";
- };
- C5F3B1440E39910500B771AE /* build-test-native */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = C5F3B1480E39917500B771AE /* Build configuration list for PBXNativeTarget "build-test-native" */;
- buildPhases = (
- C5F3B1410E39910500B771AE /* Headers */,
- C5F3B1420E39910500B771AE /* Sources */,
- C5F3B1430E39910500B771AE /* Frameworks */,
- );
- buildRules = (
- );
- dependencies = (
- 2CC7556313A1322800B09D1B /* PBXTargetDependency */,
- );
- name = "build-test-native";
- productName = "build-tests-native";
- productReference = C5F3B1450E39910500B771AE /* libJObjC-tests.dylib */;
- productType = "com.apple.product-type.library.dynamic";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- 00E6828EFEC88D1A11DB9C8B /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastUpgradeCheck = 0410;
- };
- buildConfigurationList = 4CEBA75C08679E4D0015D03E /* Build configuration list for PBXProject "JObjC" */;
- compatibilityVersion = "Xcode 3.0";
- developmentRegion = English;
- hasScannedForEncodings = 1;
- knownRegions = (
- English,
- Japanese,
- French,
- German,
- );
- mainGroup = 00E6828FFEC88D1A11DB9C8B;
- productRefGroup = 00E6828FFEC88D1A11DB9C8B;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- 89EBD58C0C95F43D000F04A0 /* B&I */,
- EB9FD8610AEECCF5008E157E /* build-core-java */,
- 4CEBA78E08679EF10015D03E /* build-core-native */,
- 89D7CA160CDBA94D00472EA2 /* build-generator-java */,
- 89D7CB870CDC4ED000472EA2 /* run-generator */,
- 89D7CC4C0CDE4C0400472EA2 /* build-generated-java */,
- 89D7CC600CDE75EC00472EA2 /* build-additions-java */,
- 89D7CCA20CDF9A2600472EA2 /* build-additions-native */,
- 89D7CC720CDE767500472EA2 /* assemble-product-java */,
- C5F3B1530E39927900B771AE /* build-test-java */,
- C5F3B1440E39910500B771AE /* build-test-native */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXSourcesBuildPhase section */
- 4CEBA78C08679EF10015D03E /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- C5E4547B0E36729F0046D3E8 /* Invoke.m in Sources */,
- C5742F6D0E316EFA00093838 /* Subclassing.m in Sources */,
- 89D7C9F70CDB900E00472EA2 /* CIF.m in Sources */,
- 89D7C9F80CDB900E00472EA2 /* Coder.m in Sources */,
- 89D7C9F90CDB900E00472EA2 /* Function.m in Sources */,
- 89D7C9FA0CDB900E00472EA2 /* ID.m in Sources */,
- 89D7C9FB0CDB900E00472EA2 /* JObjCRuntime.m in Sources */,
- 89D7C9FC0CDB900E00472EA2 /* MacOSXFramework.m in Sources */,
- 89D7C9FE0CDB900E00472EA2 /* NativeBuffer.m in Sources */,
- 89D7C9FF0CDB900E00472EA2 /* NativeObjectLifecycleManager.m in Sources */,
- 89D7CA000CDB900E00472EA2 /* NSClass.m in Sources */,
- 89D7CA010CDB900E00472EA2 /* SEL.m in Sources */,
- C5D196C90DF9E43C006F9FB9 /* FFIType.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- 89D7CCA50CDF9A2600472EA2 /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- C5E4547D0E367DAB0046D3E8 /* Invoke.m in Sources */,
- C5742F700E316F8600093838 /* Subclassing.m in Sources */,
- 89D7CCA60CDF9A2600472EA2 /* CIF.m in Sources */,
- 89D7CCA70CDF9A2600472EA2 /* Coder.m in Sources */,
- 89D7CCA80CDF9A2600472EA2 /* Function.m in Sources */,
- 89D7CCA90CDF9A2600472EA2 /* ID.m in Sources */,
- 89D7CCAA0CDF9A2600472EA2 /* JObjCRuntime.m in Sources */,
- 89D7CCAB0CDF9A2600472EA2 /* MacOSXFramework.m in Sources */,
- 89D7CCAC0CDF9A2600472EA2 /* NativeBuffer.m in Sources */,
- 89D7CCAD0CDF9A2600472EA2 /* NativeObjectLifecycleManager.m in Sources */,
- 89D7CCAE0CDF9A2600472EA2 /* NSClass.m in Sources */,
- 89D7CCAF0CDF9A2600472EA2 /* SEL.m in Sources */,
- 89D7CCBB0CDF9AA200472EA2 /* NativeString.m in Sources */,
- 89D7CCBD0CDF9AB100472EA2 /* NativeNumber.m in Sources */,
- 89D7CCBF0CDF9AC600472EA2 /* NativeThread.m in Sources */,
- C5D197D90DFB77C6006F9FB9 /* FFIType.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- C5F3B1420E39910500B771AE /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- C5F3B23D0E39948300B771AE /* FunCallBench.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- 2CC7556113A1322100B09D1B /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = EB9FD8610AEECCF5008E157E /* build-core-java */;
- targetProxy = 2CC7556013A1322100B09D1B /* PBXContainerItemProxy */;
- };
- 2CC7556313A1322800B09D1B /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = C5F3B1530E39927900B771AE /* build-test-java */;
- targetProxy = 2CC7556213A1322800B09D1B /* PBXContainerItemProxy */;
- };
- 2CC7556513A1323700B09D1B /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 89D7CA160CDBA94D00472EA2 /* build-generator-java */;
- targetProxy = 2CC7556413A1323700B09D1B /* PBXContainerItemProxy */;
- };
- 2CC7556713A1324300B09D1B /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 89D7CC600CDE75EC00472EA2 /* build-additions-java */;
- targetProxy = 2CC7556613A1324300B09D1B /* PBXContainerItemProxy */;
- };
- 2CC7556913A1325700B09D1B /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 89D7CB870CDC4ED000472EA2 /* run-generator */;
- targetProxy = 2CC7556813A1325700B09D1B /* PBXContainerItemProxy */;
- };
- 2CC7556B13A132AF00B09D1B /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 4CEBA78E08679EF10015D03E /* build-core-native */;
- targetProxy = 2CC7556A13A132AF00B09D1B /* PBXContainerItemProxy */;
- };
- 2CC7556D13A132B200B09D1B /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = EB9FD8610AEECCF5008E157E /* build-core-java */;
- targetProxy = 2CC7556C13A132B200B09D1B /* PBXContainerItemProxy */;
- };
- 89D7CB9C0CDC64F800472EA2 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 89D7CB870CDC4ED000472EA2 /* run-generator */;
- targetProxy = 89D7CB9B0CDC64F800472EA2 /* PBXContainerItemProxy */;
- };
- 89D7CC920CDE7A8200472EA2 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 89D7CC720CDE767500472EA2 /* assemble-product-java */;
- targetProxy = 89D7CC910CDE7A8200472EA2 /* PBXContainerItemProxy */;
- };
- C592D6590E12F27400D076FF /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = EB9FD8610AEECCF5008E157E /* build-core-java */;
- targetProxy = C592D6580E12F27400D076FF /* PBXContainerItemProxy */;
- };
- C592D65B0E12F27600D076FF /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 4CEBA78E08679EF10015D03E /* build-core-native */;
- targetProxy = C592D65A0E12F27600D076FF /* PBXContainerItemProxy */;
- };
- C592D65D0E12F27E00D076FF /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 89D7CA160CDBA94D00472EA2 /* build-generator-java */;
- targetProxy = C592D65C0E12F27E00D076FF /* PBXContainerItemProxy */;
- };
- C592D65F0E12F28500D076FF /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 89D7CC4C0CDE4C0400472EA2 /* build-generated-java */;
- targetProxy = C592D65E0E12F28500D076FF /* PBXContainerItemProxy */;
- };
- C592D6610E12F28E00D076FF /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 89D7CC600CDE75EC00472EA2 /* build-additions-java */;
- targetProxy = C592D6600E12F28E00D076FF /* PBXContainerItemProxy */;
- };
- C592D6630E12F29200D076FF /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 89D7CCA20CDF9A2600472EA2 /* build-additions-native */;
- targetProxy = C592D6620E12F29200D076FF /* PBXContainerItemProxy */;
- };
- C5D197DB0DFB77E4006F9FB9 /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = 4CEBA78E08679EF10015D03E /* build-core-native */;
- targetProxy = C5D197DA0DFB77E4006F9FB9 /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin XCBuildConfiguration section */
- 4CEBA75D08679E4D0015D03E /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = (
- "$(NATIVE_ARCH_32_BIT)",
- "$(NATIVE_ARCH_64_BIT)",
- );
- GCC_ENABLE_OBJC_GC = supported;
- SYMROOT = build;
- };
- name = Debug;
- };
- 4CEBA75E08679E4D0015D03E /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- GCC_ENABLE_OBJC_GC = supported;
- INSTALL_PATH = /System/Library/Java/Extensions;
- };
- name = Release;
- };
- 4CEBA79208679F100015D03E /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = (
- "$(NATIVE_ARCH_32_BIT)",
- "$(NATIVE_ARCH_64_BIT)",
- );
- COPY_PHASE_STRIP = NO;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- EXECUTABLE_EXTENSION = dylib;
- EXECUTABLE_PREFIX = lib;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"";
- GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
- GCC_MODEL_TUNING = G5;
- GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
- GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS = YES;
- GCC_TREAT_WARNINGS_AS_ERRORS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
- GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES;
- GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
- GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = YES;
- GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
- GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
- GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
- GCC_WARN_MISSING_PARENTHESES = YES;
- GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
- GCC_WARN_PEDANTIC = NO;
- GCC_WARN_PROTOTYPE_CONVERSION = NO;
- GCC_WARN_SHADOW = YES;
- GCC_WARN_SIGN_COMPARE = YES;
- GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES;
- GCC_WARN_UNKNOWN_PRAGMAS = YES;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- HEADER_SEARCH_PATHS = (
- "$(HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- /System/Library/Frameworks/JavaVM.framework/Versions/A/Headers,
- );
- HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/src/jni_headers/core\" \"$(OBJROOT)/src/jni_headers/core\"";
- LIBRARY_SEARCH_PATHS = (
- "$(inherited)",
- "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
- );
- LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries\"";
- LIBRARY_STYLE = DYNAMIC;
- MACH_O_TYPE = mh_dylib;
- OTHER_LDFLAGS = "";
- OTHER_REZFLAGS = "";
- PRODUCT_NAME = JObjC;
- SECTORDER_FLAGS = "";
- VALID_ARCHS = "ppc7400 ppc970 i386 x86_64 ppc";
- WARNING_CFLAGS = (
- "-Wmost",
- "-Wno-four-char-constants",
- "-Wno-unknown-pragmas",
- "-Wformat",
- "-Wformat-security",
- "-Wcast-align",
- "-Wwrite-strings",
- "-Wuninitialized",
- "-Wshadow",
- "-Wshorten-64-to-32",
- "-Wsign-compare",
- "-Wpointer-arith",
- "-Wall",
- );
- ZERO_LINK = NO;
- };
- name = Debug;
- };
- 4CEBA79308679F100015D03E /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = (
- i386,
- ppc,
- x86_64,
- );
- COPY_PHASE_STRIP = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- EXECUTABLE_EXTENSION = dylib;
- EXECUTABLE_PREFIX = lib;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"";
- GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
- GCC_MODEL_TUNING = G5;
- GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
- GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS = YES;
- GCC_TREAT_WARNINGS_AS_ERRORS = YES;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
- GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES;
- GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
- GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = YES;
- GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
- GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
- GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
- GCC_WARN_MISSING_PARENTHESES = YES;
- GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
- GCC_WARN_PEDANTIC = NO;
- GCC_WARN_PROTOTYPE_CONVERSION = NO;
- GCC_WARN_SHADOW = YES;
- GCC_WARN_SIGN_COMPARE = YES;
- GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES;
- GCC_WARN_UNKNOWN_PRAGMAS = YES;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- HEADER_SEARCH_PATHS = (
- "$(HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- /System/Library/Frameworks/JavaVM.framework/Versions/A/Headers,
- );
- HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/src/jni_headers/core\" \"$(OBJROOT)/src/jni_headers/core\"";
- LIBRARY_SEARCH_PATHS = (
- "$(inherited)",
- "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- );
- LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries\"";
- LIBRARY_STYLE = DYNAMIC;
- MACH_O_TYPE = mh_dylib;
- OTHER_LDFLAGS = "";
- OTHER_REZFLAGS = "";
- PRODUCT_NAME = JObjC;
- SECTORDER_FLAGS = "";
- VALID_ARCHS = "ppc7400 ppc970 i386 x86_64 ppc";
- WARNING_CFLAGS = (
- "-Wmost",
- "-Wno-four-char-constants",
- "-Wno-unknown-pragmas",
- "-Wformat",
- "-Wformat-security",
- "-Wcast-align",
- "-Wwrite-strings",
- "-Wuninitialized",
- "-Wshadow",
- "-Wshorten-64-to-32",
- "-Wsign-compare",
- "-Wpointer-arith",
- "-Wall",
- );
- ZERO_LINK = NO;
- };
- name = Release;
- };
- 89D7CA170CDBA94D00472EA2 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = NO;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_OPTIMIZATION_LEVEL = 0;
- PRODUCT_NAME = "build-generator";
- };
- name = Debug;
- };
- 89D7CA180CDBA94D00472EA2 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = YES;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- PRODUCT_NAME = "build-generator";
- ZERO_LINK = NO;
- };
- name = Release;
- };
- 89D7CB880CDC4ED000472EA2 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = NO;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_OPTIMIZATION_LEVEL = "\U00010";
- PRODUCT_NAME = "run-generator";
- };
- name = Debug;
- };
- 89D7CB890CDC4ED000472EA2 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = YES;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- PRODUCT_NAME = "run-generator";
- ZERO_LINK = NO;
- };
- name = Release;
- };
- 89D7CC4D0CDE4C0400472EA2 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = NO;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_OPTIMIZATION_LEVEL = 0;
- PRODUCT_NAME = "build-generated";
- };
- name = Debug;
- };
- 89D7CC4E0CDE4C0400472EA2 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = YES;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- PRODUCT_NAME = "build-generated";
- ZERO_LINK = NO;
- };
- name = Release;
- };
- 89D7CC610CDE75EC00472EA2 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = NO;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_OPTIMIZATION_LEVEL = 0;
- PRODUCT_NAME = "build-additions";
- };
- name = Debug;
- };
- 89D7CC620CDE75EC00472EA2 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = YES;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- PRODUCT_NAME = "build-additions";
- ZERO_LINK = NO;
- };
- name = Release;
- };
- 89D7CC730CDE767500472EA2 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = NO;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_OPTIMIZATION_LEVEL = 0;
- PRODUCT_NAME = "assemble-product";
- };
- name = Debug;
- };
- 89D7CC740CDE767500472EA2 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = YES;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- PRODUCT_NAME = "assemble-product";
- ZERO_LINK = NO;
- };
- name = Release;
- };
- 89D7CCB60CDF9A2600472EA2 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = (
- "$(NATIVE_ARCH_32_BIT)",
- "$(NATIVE_ARCH_64_BIT)",
- );
- COPY_PHASE_STRIP = NO;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- EXECUTABLE_EXTENSION = dylib;
- EXECUTABLE_PREFIX = lib;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"";
- GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
- GCC_MODEL_TUNING = G5;
- GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
- GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS = YES;
- GCC_TREAT_WARNINGS_AS_ERRORS = NO;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
- GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES;
- GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
- GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = YES;
- GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
- GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
- GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
- GCC_WARN_MISSING_PARENTHESES = YES;
- GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
- GCC_WARN_PEDANTIC = NO;
- GCC_WARN_PROTOTYPE_CONVERSION = NO;
- GCC_WARN_SHADOW = YES;
- GCC_WARN_SIGN_COMPARE = YES;
- GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES;
- GCC_WARN_UNKNOWN_PRAGMAS = YES;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- HEADER_SEARCH_PATHS = (
- "$(HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- /System/Library/Frameworks/JavaVM.framework/Versions/A/Headers,
- );
- HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/src/jni_headers/core\" \"$(OBJROOT)/src/jni_headers/core\"";
- HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/src/jni_headers/additions\" \"$(OBJROOT)/src/jni_headers/additions\"";
- INSTALL_PATH = /usr/local/lib;
- LIBRARY_SEARCH_PATHS = (
- "$(inherited)",
- "$(LIBRARY_SEARCH_PATHS_QUOTED_1)",
- );
- LIBRARY_SEARCH_PATHS_QUOTED_1 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries\"";
- LIBRARY_STYLE = DYNAMIC;
- MACH_O_TYPE = mh_dylib;
- OTHER_LDFLAGS = "";
- OTHER_REZFLAGS = "";
- PRODUCT_NAME = JObjC;
- SECTORDER_FLAGS = "";
- VALID_ARCHS = "ppc7400 ppc970 i386 x86_64 ppc";
- WARNING_CFLAGS = (
- "-Wmost",
- "-Wno-four-char-constants",
- "-Wno-unknown-pragmas",
- "-Wformat",
- "-Wformat-security",
- "-Wcast-align",
- "-Wwrite-strings",
- "-Wuninitialized",
- "-Wshadow",
- "-Wshorten-64-to-32",
- "-Wsign-compare",
- "-Wpointer-arith",
- "-Wall",
- );
- ZERO_LINK = NO;
- };
- name = Debug;
- };
- 89D7CCB70CDF9A2600472EA2 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = (
- x86_64,
- ppc,
- i386,
- );
- COPY_PHASE_STRIP = YES;
- DYLIB_COMPATIBILITY_VERSION = 1;
- DYLIB_CURRENT_VERSION = 1;
- EXECUTABLE_EXTENSION = dylib;
- EXECUTABLE_PREFIX = lib;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"";
- GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
- GCC_MODEL_TUNING = G5;
- GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
- GCC_TREAT_NONCONFORMANT_CODE_ERRORS_AS_WARNINGS = YES;
- GCC_TREAT_WARNINGS_AS_ERRORS = NO;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
- GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES;
- GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
- GCC_WARN_EFFECTIVE_CPLUSPLUS_VIOLATIONS = YES;
- GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
- GCC_WARN_HIDDEN_VIRTUAL_FUNCTIONS = YES;
- GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
- GCC_WARN_MISSING_PARENTHESES = YES;
- GCC_WARN_NON_VIRTUAL_DESTRUCTOR = YES;
- GCC_WARN_PEDANTIC = NO;
- GCC_WARN_PROTOTYPE_CONVERSION = NO;
- GCC_WARN_SHADOW = YES;
- GCC_WARN_SIGN_COMPARE = YES;
- GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES;
- GCC_WARN_UNKNOWN_PRAGMAS = YES;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- HEADER_SEARCH_PATHS = (
- "$(HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- /System/Library/Frameworks/JavaVM.framework/Versions/A/Headers,
- );
- HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/src/jni_headers/core\" \"$(OBJROOT)/src/jni_headers/core\"";
- HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/src/jni_headers/additions\" \"$(OBJROOT)/src/jni_headers/additions\"";
- LIBRARY_SEARCH_PATHS = (
- "$(inherited)",
- "$(LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- );
- LIBRARY_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/1.5.0/Libraries\"";
- LIBRARY_STYLE = DYNAMIC;
- MACH_O_TYPE = mh_dylib;
- OTHER_LDFLAGS = "";
- OTHER_REZFLAGS = "";
- PRODUCT_NAME = JObjC;
- SECTORDER_FLAGS = "";
- VALID_ARCHS = "ppc7400 ppc970 i386 x86_64 ppc";
- WARNING_CFLAGS = (
- "-Wmost",
- "-Wno-four-char-constants",
- "-Wno-unknown-pragmas",
- "-Wformat",
- "-Wformat-security",
- "-Wcast-align",
- "-Wwrite-strings",
- "-Wuninitialized",
- "-Wshadow",
- "-Wshorten-64-to-32",
- "-Wsign-compare",
- "-Wpointer-arith",
- "-Wall",
- );
- ZERO_LINK = NO;
- };
- name = Release;
- };
- 89EBD58D0C95F43D000F04A0 /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = NO;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_OPTIMIZATION_LEVEL = 0;
- PRODUCT_NAME = "B&I";
- };
- name = Debug;
- };
- 89EBD58E0C95F43D000F04A0 /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = YES;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- PRODUCT_NAME = "B&I";
- ZERO_LINK = NO;
- };
- name = Release;
- };
- C5F3B1460E39910500B771AE /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = YES;
- ARCHS = (
- x86_64,
- i386,
- ppc,
- );
- COPY_PHASE_STRIP = NO;
- DEBUG_INFORMATION_FORMAT = dwarf;
- EXECUTABLE_EXTENSION = dylib;
- EXECUTABLE_PREFIX = lib;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"";
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_MODEL_TUNING = G5;
- GCC_OPTIMIZATION_LEVEL = 0;
- HEADER_SEARCH_PATHS = (
- "$(HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- /System/Library/Frameworks/JavaVM.framework/Versions/A/Headers,
- "\"$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/src/jni_headers/core\"",
- "\"$(OBJROOT)/src/jni_headers/core\"",
- "\"$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/src/jni_headers/additions\"",
- "\"$(OBJROOT)/src/jni_headers/additions\"",
- "\"$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/src/jni_headers/test\"",
- "\"$(OBJROOT)/src/jni_headers/test\"",
- );
- INSTALL_PATH = /usr/local/lib;
- LIBRARY_STYLE = DYNAMIC;
- MACH_O_TYPE = mh_dylib;
- PRODUCT_NAME = "JObjC-tests";
- SKIP_INSTALL = YES;
- };
- name = Debug;
- };
- C5F3B1470E39910500B771AE /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = YES;
- ARCHS = (
- x86_64,
- i386,
- ppc,
- );
- COPY_PHASE_STRIP = YES;
- DEBUG_INFORMATION_FORMAT = dwarf;
- EXECUTABLE_EXTENSION = dylib;
- EXECUTABLE_PREFIX = lib;
- FRAMEWORK_SEARCH_PATHS = (
- "$(inherited)",
- "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- );
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"";
- FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_2 = "\"$(SYSTEM_LIBRARY_DIR)/Frameworks/JavaVM.framework/Versions/A/Frameworks\"";
- GCC_MODEL_TUNING = G5;
- HEADER_SEARCH_PATHS = (
- "$(HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_1)",
- "$(HEADER_SEARCH_PATHS_QUOTED_FOR_TARGET_2)",
- /System/Library/Frameworks/JavaVM.framework/Versions/A/Headers,
- "\"$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/src/jni_headers/core\"",
- "\"$(OBJROOT)/src/jni_headers/core\"",
- "\"$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/src/jni_headers/additions\"",
- "\"$(OBJROOT)/src/jni_headers/additions\"",
- "\"$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/src/jni_headers/test\"",
- "\"$(OBJROOT)/src/jni_headers/test\"",
- );
- INSTALL_PATH = /usr/local/lib;
- LIBRARY_STYLE = DYNAMIC;
- MACH_O_TYPE = mh_dylib;
- PRODUCT_NAME = "JObjC-tests";
- SKIP_INSTALL = YES;
- ZERO_LINK = NO;
- };
- name = Release;
- };
- C5F3B1540E39927A00B771AE /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = NO;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_OPTIMIZATION_LEVEL = 0;
- PRODUCT_NAME = "build-test";
- };
- name = Debug;
- };
- C5F3B1550E39927A00B771AE /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = YES;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- PRODUCT_NAME = "build-test";
- ZERO_LINK = NO;
- };
- name = Release;
- };
- EB9FD86A0AEECD13008E157E /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = NO;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
- GCC_OPTIMIZATION_LEVEL = 0;
- PRODUCT_NAME = "build-core";
- };
- name = Debug;
- };
- EB9FD86B0AEECD13008E157E /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- COPY_PHASE_STRIP = YES;
- GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
- PRODUCT_NAME = "build-core";
- ZERO_LINK = NO;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- 4CEBA75C08679E4D0015D03E /* Build configuration list for PBXProject "JObjC" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 4CEBA75D08679E4D0015D03E /* Debug */,
- 4CEBA75E08679E4D0015D03E /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 4CEBA79108679F100015D03E /* Build configuration list for PBXNativeTarget "build-core-native" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 4CEBA79208679F100015D03E /* Debug */,
- 4CEBA79308679F100015D03E /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 89D7CA1C0CDBA9B000472EA2 /* Build configuration list for PBXLegacyTarget "build-generator-java" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 89D7CA170CDBA94D00472EA2 /* Debug */,
- 89D7CA180CDBA94D00472EA2 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 89D7CB8E0CDC4ED900472EA2 /* Build configuration list for PBXLegacyTarget "run-generator" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 89D7CB880CDC4ED000472EA2 /* Debug */,
- 89D7CB890CDC4ED000472EA2 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 89D7CC510CDE4C5200472EA2 /* Build configuration list for PBXLegacyTarget "build-generated-java" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 89D7CC4D0CDE4C0400472EA2 /* Debug */,
- 89D7CC4E0CDE4C0400472EA2 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 89D7CC630CDE762000472EA2 /* Build configuration list for PBXLegacyTarget "build-additions-java" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 89D7CC610CDE75EC00472EA2 /* Debug */,
- 89D7CC620CDE75EC00472EA2 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 89D7CC7A0CDE76F500472EA2 /* Build configuration list for PBXLegacyTarget "assemble-product-java" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 89D7CC730CDE767500472EA2 /* Debug */,
- 89D7CC740CDE767500472EA2 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 89D7CCB50CDF9A2600472EA2 /* Build configuration list for PBXNativeTarget "build-additions-native" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 89D7CCB60CDF9A2600472EA2 /* Debug */,
- 89D7CCB70CDF9A2600472EA2 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- 89EBD5930C95F44E000F04A0 /* Build configuration list for PBXAggregateTarget "B&I" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- 89EBD58D0C95F43D000F04A0 /* Debug */,
- 89EBD58E0C95F43D000F04A0 /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- C5F3B1480E39917500B771AE /* Build configuration list for PBXNativeTarget "build-test-native" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- C5F3B1460E39910500B771AE /* Debug */,
- C5F3B1470E39910500B771AE /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- C5F3B15B0E3992AC00B771AE /* Build configuration list for PBXLegacyTarget "build-test-java" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- C5F3B1540E39927A00B771AE /* Debug */,
- C5F3B1550E39927A00B771AE /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- EB9FD8690AEECD13008E157E /* Build configuration list for PBXLegacyTarget "build-core-java" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- EB9FD86A0AEECD13008E157E /* Debug */,
- EB9FD86B0AEECD13008E157E /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
-/* End XCConfigurationList section */
- };
- rootObject = 00E6828EFEC88D1A11DB9C8B /* Project object */;
-}
diff --git a/jdk/src/macosx/native/jobjc/README.txt b/jdk/src/macosx/native/jobjc/README.txt
deleted file mode 100644
index 3bde08a77c4..00000000000
--- a/jdk/src/macosx/native/jobjc/README.txt
+++ /dev/null
@@ -1,132 +0,0 @@
-#title JObjC
-#
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-JObjC core provides a pure Java interface for calling C functions and
-sending ObjC messages. Given some information, it can marshal types
-automatically.
-
-It also parses BridgeSupport to generate Java wrappers around
-Framework bundles. These wrappers rely on the core to provide access
-to the C constants, enums, structs, functions, ObjC classes, etc of a
-framework.
-
-* How to build it
-
-Your best option is `ant all`. There's an Xcode "B&I" target that
-works for buildit.
-
-You'll need a recent JavaNativeFoundation, and perhaps some other
-things. Everything is usually there on SnowLeopard (or Leopard after
-the common ~javabuild/bin/update runs).
-
-The build process is quite involved. Xcode takes care of the native
-parts, ant takes care of the Java parts, and there's an unholy mix of
-external targets and hidden dependencies that keep Xcode and ant (and
-buildit on top of that) from stepping on each other. So a warning: the
-ant and Xcode targets don't have proper dependencies set up because of
-this. They have some dependencies configured, but not the entire
-chain. This is because of the jumping back and forth between
-externals. If you run the aggregate targets (Xcode B&I, ant all, ant
-test, ant bench), everything's is good. But if you manually invoke
-individual targets, chances are you'll miss something. Let's go over
-it all step by step:
-
-** ant gen-pcoder
-
-The PrimitiveCoder subclasses have a lot of boiler plate which
-simplifies the generated MixedPrimitiveCoder classes. So instead of
-maintaining it, I maintain a tiny Haskell script that spits out the
-Java code. This ant target runs that script if Haskell is available on
-the system. If it isn't available, this will silently fail. That's
-okay, because chances are the PrimitiveCoder.java that you got from
-svn is current and does not need to be updated.
-
-** ant build-core / Xcode build-core-java
-
-Build core simply builds the JObjC core java classes, and also
-generates headers for the JNI for Xcode.
-
-** ant build-core-native / Xcode build-core-native
-
-Xcode builds the native core, using the headers from the Java core. It
-generates libJObjC.dylib.
-
-** ant build-generator / Xcode build-generator-java
-
-ant builds the generator.
-
-** ant run-generator / Xcode run-generator
-
-ant runs the generator, using the core Java and native classes.
-
-What is rungen? And what's run-generator-old? run-generator-old is the
-preferred way to run the generator from ant, but there's a strange bug
-when running from buildit that causes run-generator-old to
-freeze. Pratik was helping me debug it, inspecting the stack and
-snooping dtrace probes, but we never found the reason for the
-block. So I figured that maybe if I just add a layer of indirection
-maybe it'll work around that. And it did. Sad but true.
-
-** ant build-generated / Xcode build-generated-java
-
-Build the generator output.
-
-** ant build-additions / Xcode build-additions-java
-
-Builds java additions.
-
-** ant build-additions-native / Xcode build-additions-native
-
-This builds a new version of libJObjC.dylib. It will rebuild
-everything from the core, and include everything from additions.
-
-** ant assemble-product / Xcode assemble-product-java
-
-Create a jar, copy products to destination, etc.
-
-* How to test it
-
-The test cases also contain a Java component and a native component,
-and are built similarly to the above. The benchmarks are built
-together with the tests. So "ant build-test" and "ant
-build-test-native" will build both the benchmarks and the test. "ant
-test" will run the test. "ant bench" will run benchmarks. If you only
-want to run a specific benchmark, you can pass a regexp in the
-environment variable BENCH_MATCH.
-
-
-ant test
-ant bench
-BENCH_MATCH=Foo ant bench
-
-
-Test and bench reports will end up in
-build/JObjC.build/Debug/test-reports/
-
-* How to use it
-
-Include the jar in your classpath and set your java.library.path to
-the directory that contains the dylib. Same thing for app bundles.
diff --git a/jdk/src/macosx/native/jobjc/TODOS b/jdk/src/macosx/native/jobjc/TODOS
deleted file mode 100644
index 16abea13760..00000000000
--- a/jdk/src/macosx/native/jobjc/TODOS
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-#
-egrep "(TODO|FIXME|XXX|HACK)" -r src
diff --git a/jdk/src/macosx/native/jobjc/bridgesupport.gmk b/jdk/src/macosx/native/jobjc/bridgesupport.gmk
deleted file mode 100644
index 1de9bd1d5c5..00000000000
--- a/jdk/src/macosx/native/jobjc/bridgesupport.gmk
+++ /dev/null
@@ -1,54 +0,0 @@
-#
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-
-# makefile for generating a stable set of bridgesupport files that change timestamp
-# only when the bridgesupport data actually changes
-
-FRAMEWORKS_DIR = /System/Library/Frameworks
-GBM = /usr/bin/gen_bridge_metadata
-GEN_HEADERS = $(addsuffix .headers,$(FRAMEWORKS))
-GEN_BRIDGESUPPORT = $(addsuffix .bridgesupport,$(FRAMEWORKS))
-
-%.bridgesupport : %.headers $(FRAMEWORKS_DIR)/%.framework/Headers/*.h
- @echo "generating bridge support for" $<
- if [ -f $(FRAMEWORKS_DIR)/$(<:.headers=.framework)/Resources/BridgeSupport/$(<:.headers=Full.bridgesupport) ] ; \
- then cp $(FRAMEWORKS_DIR)/$(<:.headers=.framework)/Resources/BridgeSupport/$(<:.headers=Full.bridgesupport) $@ ; \
- else $(GBM) -F complete --framework $(<:.headers=.framework) -o $@ ; \
- fi
- if cmp -s $@ $(STABLE_GEN_DIR)/$(@:.bridgesupport=Full.bridgesupport) ; \
- then : ; \
- else cp $@ $(STABLE_GEN_DIR)/$(@:.bridgesupport=Full.bridgesupport) ; \
- fi
-
-%.headers : $(FRAMEWORKS_DIR)/%.framework/Headers
- @echo linking $<
- ln -s $< $@
-
-$(STABLE_GEN_DIR):
- mkdir -p $(STABLE_GEN_DIR)
-
-$(GEN_BRIDGESUPPORT): $(GEN_HEADERS) $(STABLE_GEN_DIR)
-
-all: $(GEN_BRIDGESUPPORT)
diff --git a/jdk/src/macosx/native/jobjc/build.xml b/jdk/src/macosx/native/jobjc/build.xml
deleted file mode 100644
index 9f638840fcf..00000000000
--- a/jdk/src/macosx/native/jobjc/build.xml
+++ /dev/null
@@ -1,520 +0,0 @@
-
-
-
-
-
-
-
- Nothing to do for install-headers build phase
-
-
-
- Nothing to do for install-source build phase
-
-
-
-
-
-
- This Ant build file depends on the native Xcode project to invoke
- targets by defining $PRODUCT_NAME to specify the target.
-
-
- --- Redirecting to target "${env.PRODUCT_NAME}"
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/jdk/src/macosx/native/jobjc/extract_classes.pl b/jdk/src/macosx/native/jobjc/extract_classes.pl
deleted file mode 100644
index b0950db4699..00000000000
--- a/jdk/src/macosx/native/jobjc/extract_classes.pl
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/usr/bin/perl
-#
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-##
-
-$file_dir = $ARGV[0];
-@file_list = qx("/usr/bin/find" "$file_dir");
-
-foreach $file (@file_list) {
- if ($file =~ s/\.class//) {
- if ($file !~ s/\$[0-9]//) {
- $file =~ s/$file_dir\///g;
- $file =~ s/\//\./g;
- chomp($file);
- print "$file,";
- }
- }
-}
diff --git a/jdk/src/macosx/native/jobjc/run-and-write-if-okay b/jdk/src/macosx/native/jobjc/run-and-write-if-okay
deleted file mode 100644
index 8d0bb690276..00000000000
--- a/jdk/src/macosx/native/jobjc/run-and-write-if-okay
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/env ruby
-#
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-#
-
-if ARGV.length < 2
- puts <&1`. If it returns successfully, it writes the output to OUTPATH.
-This script will return successfully unless writing the output fails.
-EOF
- exit
-end
-
-EXECPATH = ARGV[0]
-OUTPATH = ARGV[1]
-
-output = `#{EXECPATH}`
-puts output
-
-if $?.to_i == 0
- puts "Writing output of #{EXECPATH} to #{OUTPATH}"
- File.open(OUTPATH, 'w') {|f| f.write(output) }
-else
- puts "#{EXECPATH} failed to run trial. Ignoring."
-end
diff --git a/jdk/src/macosx/native/jobjc/rungen b/jdk/src/macosx/native/jobjc/rungen
deleted file mode 100644
index 17aeabea15d..00000000000
--- a/jdk/src/macosx/native/jobjc/rungen
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/usr/bin/env ruby
-#
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-#
-
-xcodeAction = ARGV[0]
-
-exit unless xcodeAction == "install"
-
-JOBJC_JAR = ARGV[1]
-LIBPATH = ARGV[2]
-OBJROOT = ARGV[3]
-ARCHS = ARGV[4]
-STABLE_GEN_DIR = ARGV[5]
-
-ourJavaHome = ENV['JAVA_HOME']
-ourJavaVersion = `java -fullversion 2>&1`
-$stderr.puts "ENV['JAVA_HOME'] = #{ourJavaHome}"
-$stderr.puts "java -fullversion = #{ourJavaVersion}"
-
-$stderr.puts "jobjc_jar = #{JOBJC_JAR}"
-$stderr.puts "libpath = #{LIBPATH}"
-$stderr.puts "objroot = #{OBJROOT}"
-$stderr.puts "ARCHS = #{ARCHS}"
-$stderr.puts "STABLE_GEN_DIR = #{STABLE_GEN_DIR}"
-
-jarch = if ARCHS =~ /x86_64/ then "-d64" else "-d32" end
-
-# compute the boot class path, but remove the JObjC jar file that may have been installed in the boot jdk
-
-bootclasspathcmd = "java -classpath #{OBJROOT}/bin/core:#{OBJROOT}/bin/generator com.apple.internal.jobjc.generator.BootClassPathMinus #{JOBJC_JAR}"
-$stderr.puts bootclasspathcmd
-bootclasspath = `#{bootclasspathcmd}`
-
-$stderr.puts "bootclasspath is: "
-$stderr.puts bootclasspath
-
-# we run the generator with our newly created JObjC. The installed version (if available) has been removed from
-# the boot class path, so we are building with everything newly created.
-cmd = "java #{jarch} -Xms128m -Xmx512m -Djava.library.path=#{LIBPATH} -Xbootclasspath:#{bootclasspath.chomp} -classpath #{OBJROOT}/bin/core:#{OBJROOT}/bin/generator -ea com.apple.internal.jobjc.generator.Generator dst=#{OBJROOT}/src/jobjc frameworks=#{STABLE_GEN_DIR}"
-
-$stderr.puts cmd
-puts `#{cmd} 2>&1`
-
-raise $?.to_i if $?.to_i != 0
diff --git a/jdk/src/macosx/native/jobjc/runjava b/jdk/src/macosx/native/jobjc/runjava
deleted file mode 100644
index a6e91547e7d..00000000000
--- a/jdk/src/macosx/native/jobjc/runjava
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation. Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-#
-java -ea -classpath "lib/junit-4.4.jar:build/JObjC.build/Debug/bin/core:build/JObjC.build/Debug/bin/generator:build/JObjC.build/Debug/bin/additions:build/JObjC.build/Debug/bin/test:build/JObjC.build/Debug/bin/generated" -Djava.library.path=build/Debug $@
diff --git a/jdk/src/macosx/native/jobjc/src/core/PrimitiveCoder.hs b/jdk/src/macosx/native/jobjc/src/core/PrimitiveCoder.hs
deleted file mode 100644
index b9b0070fcb4..00000000000
--- a/jdk/src/macosx/native/jobjc/src/core/PrimitiveCoder.hs
+++ /dev/null
@@ -1,275 +0,0 @@
-#!/usr/bin/env runhaskell
-
-{-
-/*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
--}
-{-
-The simplest way to get Haskell is through MacPorts: sudo port install ghc
-
-Otherwise, see http://www.haskell.org/ghc/
--}
-
-import Data.List
-import Data.Maybe
-import Data.Char
-
-data Width = W32 | W64
- deriving (Show, Eq, Bounded, Enum)
-
-data NType = NBOOL | Nschar | Nuchar | Nsshort | Nushort | Nsint | Nuint
- | Nslong | Nulong | Nslonglong | Nulonglong | Nfloat | Ndouble
- deriving (Show, Eq, Bounded, Enum)
-
-data JPrim = Jboolean | Jbyte | Jchar | Jshort | Jint | Jlong | Jfloat | Jdouble
- deriving (Show, Eq, Bounded, Enum)
-
-data JClass = JBoolean | JByte | JCharacter | JShort | JInteger | JLong
- | JFloat | JDouble
- deriving (Show, Eq, Bounded, Enum)
-
-data FFIType = SINT8 | UINT8 | SINT16 | UINT16 | SINT32 | UINT32
- | SINT64 | UINT64 | FLOAT | DOUBLE
- deriving (Show, Eq, Bounded, Enum)
-
-widths = [minBound..maxBound] :: [Width]
-ntypes = [minBound..maxBound] :: [NType]
-jprims = [minBound..maxBound] :: [JPrim]
-jclasses = [minBound..maxBound] :: [JClass]
-ffitypes = [minBound..maxBound] :: [FFIType]
-
--- What's the FFIType for a given Width and NType? For example: W32 NBOOL -> SINT8
-ffitype :: Width -> NType -> FFIType
-ffitype _ NBOOL = SINT8
-ffitype _ Nschar = SINT8
-ffitype _ Nuchar = UINT8
-ffitype _ Nsshort = SINT16
-ffitype _ Nushort = UINT16
-ffitype _ Nsint = SINT32
-ffitype _ Nuint = UINT32
-ffitype W32 Nslong = SINT32
-ffitype W64 Nslong = SINT64
-ffitype W32 Nulong = UINT32
-ffitype W64 Nulong = UINT64
-ffitype _ Nslonglong = SINT64
-ffitype _ Nulonglong = UINT64
-ffitype _ Nfloat = FLOAT
-ffitype _ Ndouble = DOUBLE
-
-sizeof :: FFIType -> Int
-sizeof SINT8 = 1
-sizeof UINT8 = 1
-sizeof SINT16 = 2
-sizeof UINT16 = 2
-sizeof SINT32 = 4
-sizeof UINT32 = 4
-sizeof SINT64 = 8
-sizeof UINT64 = 8
-sizeof FLOAT = 4
-sizeof DOUBLE = 8
-
--- What's the Obj-C encoding for a given NType? For example: unsigned char -> 'C'
-encoding nt = fromJust $ lookup nt $
- [(NBOOL, 'B'), (Nschar, 'c'), (Nuchar, 'C'), (Nsshort, 's'),
- (Nushort, 'S'), (Nsint, 'i'), (Nuint, 'I'), (Nslong, 'l'),
- (Nulong, 'L'), (Nslonglong, 'q'), (Nulonglong, 'Q'),
- (Nfloat, 'f'), (Ndouble, 'd')]
-
--- What's the JPrim for a given NType? For example: native signed long long -> java long
-ntype2jprim nt = fromJust $ lookup nt $
- [(NBOOL, Jboolean), (Nschar, Jbyte), (Nuchar, Jbyte),
- (Nsshort, Jshort), (Nushort, Jshort), (Nsint, Jint), (Nuint, Jint),
- (Nslong, Jlong), (Nulong, Jlong),
- (Nslonglong, Jlong), (Nulonglong, Jlong),
- (Nfloat, Jfloat), (Ndouble, Jdouble)]
-
--- What's the JClass for a given JPrim? For example: int -> Integer
-jprim2jclass jp = fromJust $ lookup jp $
- [(Jboolean, JBoolean), (Jbyte, JByte), (Jchar, JCharacter),
- (Jshort, JShort), (Jint, JInteger), (Jlong, JLong),
- (Jfloat, JFloat), (Jdouble, JDouble)]
-
--- Convert a type to something suitable for Java code. For example: Jboolean -> boolean
-ntype2js nt = tail $ show nt
-jclass2js t = tail $ show t
-jprim2js p = tail $ show p
-ffitype2js f = "FFI_" ++ (show f)
-
--- Capitalize the first letter of a String
-capitalize [] = []
-capitalize s = [toUpper $ head s] ++ tail s
-
--- Given an Width and NType, return the Java code for reading said NType from memory.
-popAddr :: Width -> NType -> String
-popAddr _ NBOOL = "rt.unsafe.getByte(addr) != 0"
-popAddr _ Nschar = "rt.unsafe.getByte(addr)"
-popAddr _ Nuchar = "rt.unsafe.getByte(addr)"
-popAddr W32 Nslong = "rt.unsafe.getInt(addr)"
-popAddr W32 Nulong = "rt.unsafe.getInt(addr)"
-popAddr _ ntype = "rt.unsafe.get" ++ (capitalize.jprim2js.ntype2jprim $ ntype) ++ "(addr)"
-
--- Given an Width and NType, return the Java code for writing said NType to memory.
-pushAddr :: Width -> NType -> String
-pushAddr _ NBOOL = "rt.unsafe.putByte(addr, (byte) (x ? 1 : 0));"
-pushAddr _ Nschar = "rt.unsafe.putByte(addr, x);"
-pushAddr _ Nuchar = "rt.unsafe.putByte(addr, x);"
-pushAddr W32 Nslong = "rt.unsafe.putInt(addr, (int) x);"
-pushAddr W32 Nulong = "rt.unsafe.putInt(addr, (int) x);"
-pushAddr _ ntype = "rt.unsafe.put" ++ (capitalize jprimS) ++ "(addr, (" ++ jprimS ++ ") x);"
- where jprimS = jprim2js.ntype2jprim $ ntype
-
--- Helpers for generating Java ternarnies and conditionals.
-archExpr x32 x64 = if x32 /= x64 then retdiff else x32
- where retdiff = "(JObjCRuntime.IS64 ? (" ++ x64 ++ ") : (" ++ x32 ++ "))"
-
-archStmt x32 x64 = if x32 /= x64 then retdiff else x32
- where retdiff = "if(JObjCRuntime.IS64){ " ++ x64 ++ " }else{ " ++ x32 ++ " }"
-
--- Get a Java expression for the correct FFIType at runtime. For example: (JObjCRuntime.IS64 ? FFI_SINT64 : FFI_SINT32)
-ffitypeVal nt = archExpr (ffitype2js $ ffitype W32 nt)
- (ffitype2js $ ffitype W64 nt)
-
--- Similar to ffiTypeVal. Get the correct pop expression and push statement.
-popAddrVal nt = archExpr (popAddr W32 nt) (popAddr W64 nt)
-pushAddrVal nt = archStmt (pushAddr W32 nt) (pushAddr W64 nt)
-
--- What's the Coder class name we're using for a given NType?
-coderName nt = aux nt ++ "Coder"
- where
- aux NBOOL = "Bool"
- aux Nschar = "SChar"
- aux Nuchar = "UChar"
- aux Nsshort = "SShort"
- aux Nushort = "UShort"
- aux Nsint = "SInt"
- aux Nuint = "UInt"
- aux Nslong = "SLong"
- aux Nulong = "ULong"
- aux Nslonglong = "SLongLong"
- aux Nulonglong = "ULongLong"
- aux Nfloat = "Float"
- aux Ndouble = "Double"
-
--- Operation for converting between primitives. Usually it just casts, but booleans are special.
-jconvertPrims sym Jboolean Jboolean = sym
-jconvertPrims sym Jboolean b = "((" ++ jprim2js b ++ ")(" ++ sym ++ " ? 1 : 0))"
-jconvertPrims sym a Jboolean = "(" ++ sym ++ " != 0)"
-jconvertPrims sym a b = if a == b then sym else "((" ++ jprim2js b ++ ")" ++ sym ++ ")"
-
-sizeofRet nt =
- let ffitypes = map (\w -> ffitype w nt) widths
- sizes = map sizeof ffitypes in
- if (length $ nub sizes) == 1
- then "\t\treturn " ++ (show.head $ sizes) ++ ";"
- else unlines [
- "\t\tswitch(w){",
- (unlines $ map casestmt widths),
- "\t\tdefault: return -1;",
- "\t\t}"]
- where
- casestmt w = "\t\t\tcase " ++ (show w) ++ ": return " ++
- (show.sizeof $ ffitype w nt) ++ ";"
-
--- Generate a coder class for a given NType.
-c2java ntype =
- unlines [
- "// native " ++ ntypeS ++ " -> java " ++ jprimS,
- "public static final class " ++ className ++ " extends PrimitiveCoder<" ++ jclassS ++ ">{",
- "\tpublic static final " ++ className ++ " INST = new " ++ className ++ "();",
- "\tpublic " ++ className ++ "(){ super("++ffitypeVal ntype++", \"" ++ [encoding ntype] ++ "\", "++jclassS++".class, "++jprimS++".class); }",
- "\t// compile time",
- "\t@Override public void push(JObjCRuntime rt, long addr, " ++ jprimS ++ " x){",
- "\t\t" ++ pushAddrVal ntype,
- "\t}",
- "\t@Override public " ++ jprimS ++ " pop" ++ capitalize jprimS ++ "(JObjCRuntime rt, long addr){",
- "\t\treturn " ++ popAddrVal ntype ++ ";",
- "\t}",
- "\t// for runtime coding",
- "\t@Override public int sizeof(Width w){",
- sizeofRet ntype,
- "\t}",
- "\t@Override public void push(JObjCRuntime rt, long addr, " ++ jclassS ++ " x){ " ++
- "push(rt, addr, (" ++ jprimS ++ ") x); }",
- "\t@Override public " ++ jclassS ++ " pop(JObjCRuntime rt, long addr){ " ++
- "return pop" ++ capitalize jprimS ++ "(rt, addr); }",
- "\t// proxies for mixed encoding",
- makeProxyMethods ntype,
- "}"
- ]
- where
- jprim = ntype2jprim ntype
- jclass = jprim2jclass jprim
- jprimS = jprim2js jprim
- jclassS = jclass2js jclass
- ntypeS = ntype2js ntype
- className = coderName ntype
-
--- Generate push and pop methods that convert and proxy to actual implementation.
-makeProxyMethods nt = unlines $ map aux jprims
- where
- targetJPrim = ntype2jprim nt
- targetJPrimS = jprim2js targetJPrim
- aux jprim = if targetJPrim == jprim then "" else unlines [
- "\t@Override public void push(JObjCRuntime rt, long addr, " ++ jprimS ++ " x){ " ++
- "push(rt, addr, " ++ pushConversion "x" ++ "); }",
- "\t@Override public " ++ jprimS ++ " pop" ++ capitalize jprimS ++ "(JObjCRuntime rt, long addr){ " ++
- "return " ++ (popConversion ("pop" ++ capitalize targetJPrimS ++ "(rt, addr)")) ++ "; }"
- ]
- where
- jprimS = jprim2js jprim
- pushConversion sym = jconvertPrims sym jprim targetJPrim
- popConversion sym = jconvertPrims sym targetJPrim jprim
-
-main = do
- putStrLn "package com.apple.jobjc;"
-
- putStrLn "import com.apple.jobjc.JObjCRuntime.Width;"
-
- putStrLn "// Auto generated by PrimitiveCoder.hs"
- putStrLn "// Do not edit by hand."
-
- putStrLn "public abstract class PrimitiveCoder extends Coder{"
-
- putStrLn "\tpublic PrimitiveCoder(int ffiTypeCode, String objCEncoding, Class jclass, Class jprim){"
- putStrLn "\t\tsuper(ffiTypeCode, objCEncoding, jclass, jprim);"
- putStrLn "\t}"
-
- mapM_ (\p -> putStrLn $ unlines [makePopI p, makePushI p]) jprims
-
- mapM_ (putStrLn . c2java) ntypes
-
- putStrLn "}"
- where
- makePopI jprim = unlines ["\tpublic final " ++ jprim2js jprim ++ " pop" ++ (capitalize.jprim2js $ jprim)
- ++ "(NativeArgumentBuffer args){\n"
- ++ "\t\treturn pop" ++ (capitalize.jprim2js $ jprim) ++ "(args.runtime, args.retValPtr);\n"
- ++ "\t}",
- "\tpublic abstract " ++ jprim2js jprim ++ " pop" ++ (capitalize.jprim2js $ jprim) ++ "(JObjCRuntime runtime, long addr);"]
- makePushI jprim = unlines ["\tpublic final void push"
- ++ "(NativeArgumentBuffer args, " ++ jprim2js jprim ++ " x){\n"
- ++ "\t\tpush(args.runtime, args.argValuesPtr, x);\n"
- ++ "\t\targs.didPutArgValue(sizeof());\n"
- ++ "\t}",
- "\tpublic abstract void push(JObjCRuntime runtime, long addr, " ++ jprim2js jprim ++ " x);"]
diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/CIF.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/CIF.java
deleted file mode 100644
index c32d822662f..00000000000
--- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/CIF.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.apple.jobjc;
-
-import com.apple.jobjc.Coder.PrimitivePointerCoder;
-
-class CIF {
- private static native int getSizeofCIF();
- private static final int SIZEOF = getSizeofCIF();
- private static native boolean prepCIF(long cifPtr, int nargs, long retFFITypePtr, long argsPtr);
-
- public static CIF createCIFFor(final NativeArgumentBuffer args, final Coder returnCoder, final Coder ... argCoders) {
- NativeBuffer cifBuf = new NativeBuffer(SIZEOF + (argCoders.length * JObjCRuntime.PTR_LEN));
- final long argsPtr = cifBuf.bufferPtr + SIZEOF;
-
- {
- long argsIterPtr = argsPtr;
- for(final Coder coder : argCoders){
- PrimitivePointerCoder.INST.push(args.runtime, argsIterPtr, coder.getFFITypePtr());
- argsIterPtr += JObjCRuntime.PTR_LEN;
- }
- }
-
- boolean ok = prepCIF(cifBuf.bufferPtr, argCoders.length, returnCoder.getFFITypePtr(), argsPtr);
- if(!ok)
- throw new RuntimeException("ffi_prep_cif failed.");
-
- return new CIF(cifBuf, returnCoder, argCoders);
- }
-
- final NativeBuffer cif;
- // CIF needs to keep refs to the Coders, so they don't get finalized and their FFITypes freed.
- final Coder returnCoder;
- final Coder[] argCoders;
-
- private CIF(final NativeBuffer cif, Coder returnCoder, Coder... argCoders) {
- this.cif = cif;
- this.returnCoder = returnCoder;
- this.argCoders = argCoders;
- }
-}
diff --git a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java b/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java
deleted file mode 100644
index 9efc76e9c05..00000000000
--- a/jdk/src/macosx/native/jobjc/src/core/java/com/apple/jobjc/Coder.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.apple.jobjc;
-
-import java.io.StringWriter;
-import java.lang.reflect.Method;
-
-import com.apple.jobjc.JObjCRuntime.Width;
-import com.apple.jobjc.PrimitiveCoder.BoolCoder;
-import com.apple.jobjc.PrimitiveCoder.DoubleCoder;
-import com.apple.jobjc.PrimitiveCoder.FloatCoder;
-import com.apple.jobjc.PrimitiveCoder.SCharCoder;
-import com.apple.jobjc.PrimitiveCoder.SIntCoder;
-import com.apple.jobjc.PrimitiveCoder.SLongLongCoder;
-import com.apple.jobjc.PrimitiveCoder.SShortCoder;
-
-public abstract class Coder {
- private static native long getNativeFFITypePtrForCode(final int code);
-
- static final int FFI_VOID = 0;
- static final int FFI_PTR = FFI_VOID+1;
-
- static final int FFI_SINT8 = FFI_PTR+1;
- static final int FFI_UINT8 = FFI_SINT8+1;
- static final int FFI_SINT16 = FFI_UINT8+1;
- static final int FFI_UINT16 = FFI_SINT16+1;
- static final int FFI_SINT32 = FFI_UINT16+1;
- static final int FFI_UINT32 = FFI_SINT32+1;
- static final int FFI_SINT64 = FFI_UINT32+1;
- static final int FFI_UINT64 = FFI_SINT64+1;
-
- static final int FFI_FLOAT = FFI_UINT64+1;
- static final int FFI_DOUBLE = FFI_FLOAT+1;
- static final int FFI_LONGDOUBLE = FFI_DOUBLE+1;
-
- private static long[] ffiCodesToFFITypePtrs;
- static{
- System.loadLibrary("JObjC");
- ffiCodesToFFITypePtrs = new long[FFI_LONGDOUBLE + 1];
- for (int i = 0; i < FFI_LONGDOUBLE + 1; i++) ffiCodesToFFITypePtrs[i] = getNativeFFITypePtrForCode(i);
- }
-
- long getFFITypePtr() {
- return ffiCodesToFFITypePtrs[getTypeCode()];
- }
-
- // runtime coding
- public abstract void push(final JObjCRuntime runtime, final long addr, final T x);
- public abstract T pop(final JObjCRuntime runtime, final long addr);
-
- public void push(final NativeArgumentBuffer args, final T x){
- push(args.runtime, args.argValuesPtr, x);
- args.didPutArgValue(sizeof());
- }
-
- public T pop(final NativeArgumentBuffer args){
- return pop(args.runtime, args.retValPtr);
- }
-
- public abstract int sizeof(Width w);
- final public int sizeof(){ return sizeof(JObjCRuntime.WIDTH); }
-
- //
-
- public Coder(int ffiTypeCode, String objCEncoding, Class jclass, Class jprim) {
- this.ffiTypeCode = ffiTypeCode;
- this.objCEncoding = objCEncoding;
- this.jclass = jclass;
- this.jprim = jprim;
- }
-
- public Coder(int ffiTypeCode, String objCEncoding, Class jclass) {
- this(ffiTypeCode, objCEncoding, jclass, null);
- }
-
- private final int ffiTypeCode;
- private final String objCEncoding;
- private final Class jclass;
- private final Class jprim;
-
- final int getTypeCode() { return ffiTypeCode; }
- final String getObjCEncoding(){ return objCEncoding; }
- public final Class getJavaClass() { return jclass; }
- public final Class getJavaPrimitive() { return jprim; }
-
- // runtime coding
-
- private static Coder[] runtimeCoders;
- static public Coder getCoderAtRuntimeForType(Class cls){
- if(runtimeCoders == null) runtimeCoders = new Coder[]{
- NSClassCoder.INST, IDCoder.INST, PointerCoder.INST,
- DoubleCoder.INST, FloatCoder.INST, SLongLongCoder.INST,
- SIntCoder.INST, SShortCoder.INST, SCharCoder.INST, BoolCoder.INST,
- VoidCoder.INST
- };
-
- for(Coder c : runtimeCoders)
- if((c.getJavaClass() != null && c.getJavaClass().isAssignableFrom(cls)) ||
- (c.getJavaPrimitive() != null && c.getJavaPrimitive().isAssignableFrom(cls)))
- return c;
-
- if(Struct.class.isAssignableFrom(cls)){
- try {
- Method m = cls.getDeclaredMethod("getStructCoder");
- m.setAccessible(true);
- return (Coder) m.invoke(null);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- throw new RuntimeException("Could not find suitable coder for " + cls);
- }
-
- static public Coder getCoderAtRuntime(Object inst){
- if(inst == null) return PointerCoder.INST;
- if(inst instanceof Struct) return ((Struct) inst).getCoder();
- return getCoderAtRuntimeForType(inst.getClass());
- }
-
- //
-
- public static final class VoidCoder extends Coder