diff --git a/jdk/make/common/Release.gmk b/jdk/make/common/Release.gmk
index 70033e457d0..5371d044b91 100644
--- a/jdk/make/common/Release.gmk
+++ b/jdk/make/common/Release.gmk
@@ -348,7 +348,6 @@ TOOLS = \
sun/tools/serialver \
sun/tools/tree \
sun/tools/util \
- sun/security/tools/jarsigner/JarBASE64Encoder.class \
sun/security/tools/jarsigner/Main.class \
sun/security/tools/jarsigner/JarSignerParameters.class \
sun/security/tools/jarsigner/Resources.class \
@@ -576,7 +575,6 @@ $(NOT_RT_JAR_LIST): FRC
$(ECHO) "sun/tools/serialver/" >> $@
$(ECHO) "sun/tools/tree/" >> $@
$(ECHO) "sun/tools/util/" >> $@
- $(ECHO) "sun/security/tools/jarsigner/JarBASE64Encoder.class" >> $@
$(ECHO) "sun/security/tools/jarsigner/Main.class" >> $@
$(ECHO) "sun/security/tools/jarsigner/JarSignerParameters.class" >> $@
$(ECHO) "sun/security/tools/jarsigner/Resources.class" >> $@
diff --git a/jdk/make/java/java/FILES_java.gmk b/jdk/make/java/java/FILES_java.gmk
index 8c2f80c5248..189b9fcb7c2 100644
--- a/jdk/make/java/java/FILES_java.gmk
+++ b/jdk/make/java/java/FILES_java.gmk
@@ -257,6 +257,7 @@ JAVA_JAVA_java = \
sun/util/calendar/ZoneInfoFile.java \
java/util/TooManyListenersException.java \
java/util/Comparator.java \
+ java/util/Comparators.java \
java/util/Collections.java \
java/util/Iterator.java \
java/util/ListIterator.java \
diff --git a/jdk/make/java/zip/Makefile b/jdk/make/java/zip/Makefile
index 67a8557de0b..99afd603d7c 100644
--- a/jdk/make/java/zip/Makefile
+++ b/jdk/make/java/zip/Makefile
@@ -68,6 +68,16 @@ ifeq ($(PLATFORM), solaris)
FILES_reorder += reorder-$(ARCH)
endif
endif
+
+#
+# Use mapfile unconditionally (even with fastdebug).
+# JDK's internal zlib is incompatible with stock zlib, because the
+# size of struct z_stream has been changed, so internal zlib
+# implementation must not be allowed to leak outside of libzip.so,
+# else you get hard to debug failures with fastdebug jdk when user
+# native code includes stock zlib.
+#
+FILES_m = mapfile-vers
include $(BUILDDIR)/common/Mapfile-vers.gmk
include $(BUILDDIR)/common/Library.gmk
diff --git a/jdk/make/launchers/Makefile b/jdk/make/launchers/Makefile
index be16512e478..47645158793 100644
--- a/jdk/make/launchers/Makefile
+++ b/jdk/make/launchers/Makefile
@@ -77,6 +77,7 @@ $(call make-launcher, jmap, sun.tools.jmap.JMap, \
-J-Dsun.jvm.hotspot.debugger.useWindbgDebugger, )
$(call make-launcher, jps, sun.tools.jps.Jps, , )
$(call make-launcher, jrunscript, com.sun.tools.script.shell.Main, , )
+$(call make-launcher, jjs, jdk.nashorn.tools.Shell, , )
$(call make-launcher, jsadebugd, sun.jvm.hotspot.jdi.SADebugServer, , )
$(call make-launcher, jstack, sun.tools.jstack.JStack, \
-J-Dsun.jvm.hotspot.debugger.useProcDebugger \
diff --git a/jdk/make/sun/cmm/lcms/Makefile b/jdk/make/sun/cmm/lcms/Makefile
index 24fde37fba0..85b02e4960e 100644
--- a/jdk/make/sun/cmm/lcms/Makefile
+++ b/jdk/make/sun/cmm/lcms/Makefile
@@ -28,6 +28,9 @@ PACKAGE = sun.java2d.cmm.lcms
LIBRARY = lcms
PRODUCT = sun
+# Use highest level of optimization on this library
+OPTIMIZATION_LEVEL = HIGHEST
+
include $(BUILDDIR)/common/Defs.gmk
#
diff --git a/jdk/make/sun/cmm/lcms/mapfile-vers b/jdk/make/sun/cmm/lcms/mapfile-vers
index ac4e7458b37..3d9074f746d 100644
--- a/jdk/make/sun/cmm/lcms/mapfile-vers
+++ b/jdk/make/sun/cmm/lcms/mapfile-vers
@@ -27,13 +27,12 @@
SUNWprivate_1.1 {
global:
- Java_sun_java2d_cmm_lcms_LCMS_loadProfile;
- Java_sun_java2d_cmm_lcms_LCMS_freeProfile;
+ Java_sun_java2d_cmm_lcms_LCMS_loadProfileNative;
+ Java_sun_java2d_cmm_lcms_LCMS_freeProfileNative;
Java_sun_java2d_cmm_lcms_LCMS_getProfileSize;
Java_sun_java2d_cmm_lcms_LCMS_getProfileData;
- Java_sun_java2d_cmm_lcms_LCMS_getTagSize;
- Java_sun_java2d_cmm_lcms_LCMS_getTagData;
- Java_sun_java2d_cmm_lcms_LCMS_setTagData;
+ Java_sun_java2d_cmm_lcms_LCMS_getTagNative;
+ Java_sun_java2d_cmm_lcms_LCMS_setTagDataNative;
Java_sun_java2d_cmm_lcms_LCMS_colorConvert;
Java_sun_java2d_cmm_lcms_LCMS_getProfileID;
Java_sun_java2d_cmm_lcms_LCMS_initLCMS;
diff --git a/jdk/make/tools/javazic/Makefile b/jdk/make/tools/javazic/Makefile
deleted file mode 100644
index 4545c4d491c..00000000000
--- a/jdk/make/tools/javazic/Makefile
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright (c) 1998, 2005, 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 building the javazic tool
-#
-
-BUILDDIR = ../..
-PACKAGE = build.tools.javazic
-PRODUCT = javazic
-PROGRAM = javazic
-include $(BUILDDIR)/common/Defs.gmk
-
-BUILDTOOL_SOURCE_ROOT = $(BUILDDIR)/tools/src
-BUILDTOOL_MAIN = $(PKGDIR)/Main.java
-
-#
-# Build tool jar rules.
-#
-include $(BUILDDIR)/common/BuildToolJar.gmk
-
diff --git a/jdk/make/tools/src/build/tools/deps/refs.allowed b/jdk/make/tools/src/build/tools/deps/refs.allowed
index 91605d535fe..ad9d5271199 100644
--- a/jdk/make/tools/src/build/tools/deps/refs.allowed
+++ b/jdk/make/tools/src/build/tools/deps/refs.allowed
@@ -33,8 +33,3 @@ sun.security.krb5.Realm=sun.security.ssl.krb5.KerberosClientKeyExchangeImpl,comp
#
java.beans.PropertyChangeListener=java.util.logging.LogManager,sun.org.mozilla.javascript.internal.Context,compact1,compact2,compact3
java.beans.PropertyChangeEvent=sun.org.mozilla.javascript.internal.Context,compact3
-
-# JFR traces even in builds with JFR disabled
-com.oracle.jrockit.jfr.FlightRecorder: com.sun.management.MissionControl, compact3
-com.oracle.jrockit.jfr.management.FlightRecorderMBean: com.sun.management.MissionControl, compact3
-
diff --git a/jdk/make/tools/src/build/tools/javazic/BackEnd.java b/jdk/make/tools/src/build/tools/javazic/BackEnd.java
deleted file mode 100644
index bfeda032037..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/BackEnd.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. 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.javazic;
-
-/**
- * BackEnd is an abstract base class for a back-end of compiling
- * Olson's zoneinfo database and generating Java zoneinfo database.
- *
- * @since 1.4
- */
-abstract class BackEnd {
-
- /**
- * Receives each zone's TimeZone information which was created by
- * {@link Zoneinfo#parse} in class Zoneinfo,
- * and processes it.
- *
- * @param tz Timezone object for each zone
- * @return 0 if no error occurred, otherwise 1.
- */
- abstract int processZoneinfo(Timezone tz);
-
- /**
- * Receives whole information which is generated by JavaZic's front-end
- * in the form of Mapping object and generates all Java zone information
- * files.
- *
- * @param m Mappings object which is generated by
- * {@link Main#compile() Main.compile()}.
- * @return 0 if no error occurred, otherwise 1.
- */
- abstract int generateSrc(Mappings m);
-
- /**
- * Decides which backend class should be used and returns its instance.
- * @return an instance of backend class
- */
- static BackEnd getBackEnd() {
- if (Zoneinfo.isYearForTimeZoneDataSpecified) {
- return new Simple();
- } else if (Main.outputDoc) {
- return new GenDoc();
- } else {
- return new Gen();
- }
- }
-}
diff --git a/jdk/make/tools/src/build/tools/javazic/Checksum.java b/jdk/make/tools/src/build/tools/javazic/Checksum.java
deleted file mode 100644
index 565395d5c8d..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/Checksum.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2000, 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.javazic;
-
-import java.util.zip.CRC32;
-
-/**
- * Checksum provides methods for calculating a CRC32 value for a
- * transitions table.
- *
- * @since 1.4
- */
-public class Checksum extends CRC32
-{
- /**
- * Updates the CRC32 value from each byte of the given int
- * value. The bytes are used in the big endian order.
- * @param val the int value
- */
- public void update(int val) {
- byte[] b = new byte[4];
- b[0] = (byte)((val >>> 24) & 0xff);
- b[1] = (byte)((val >>> 16) & 0xff);
- b[2] = (byte)((val >>> 8) & 0xff);
- b[3] = (byte)(val & 0xff);
- update(b);
- }
-
- /**
- * Updates the CRC32 value from each byte of the given long
- * value. The bytes are used in the big endian order.
- * @param val the long value
- */
- void update(long val) {
- byte[] b = new byte[8];
- b[0] = (byte)((val >>> 56) & 0xff);
- b[1] = (byte)((val >>> 48) & 0xff);
- b[2] = (byte)((val >>> 40) & 0xff);
- b[3] = (byte)((val >>> 32) & 0xff);
- b[4] = (byte)((val >>> 24) & 0xff);
- b[5] = (byte)((val >>> 16) & 0xff);
- b[6] = (byte)((val >>> 8) & 0xff);
- b[7] = (byte)(val & 0xff);
- update(b);
- }
-}
diff --git a/jdk/make/tools/src/build/tools/javazic/Gen.java b/jdk/make/tools/src/build/tools/javazic/Gen.java
deleted file mode 100644
index 8f3a8c5a37a..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/Gen.java
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. 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.javazic;
-
-import java.io.IOException;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.DataOutputStream;
-import java.io.RandomAccessFile;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import sun.util.calendar.ZoneInfoFile;
-
-/**
- * Gen is one of back-end classes of javazic, and generates
- * ZoneInfoMappings and zone-specific file for each zone.
- */
-class Gen extends BackEnd {
-
- /**
- * Generates datafile in binary TLV format for each time zone.
- * Regarding contents of output files, see {@link ZoneInfoFile}.
- *
- * @param Timezone
- * @return 0 if no errors, or 1 if error occurred.
- */
- int processZoneinfo(Timezone tz) {
- try {
- int size;
- String outputDir = Main.getOutputDir();
- String zonefile = ZoneInfoFile.getFileName(tz.getName());
-
- /* If outputDir doesn't end with file-separator, adds it. */
- if (!outputDir.endsWith(File.separator)) {
- outputDir += File.separatorChar;
- }
-
- /* If zonefile includes file-separator, it's treated as part of
- * pathname. And make directory if necessary.
- */
- int index = zonefile.lastIndexOf(File.separatorChar);
- if (index != -1) {
- outputDir += zonefile.substring(0, index+1);
- }
- File outD = new File(outputDir);
- outD.mkdirs();
-
- FileOutputStream fos =
- new FileOutputStream(outputDir + zonefile.substring(index+1));
- DataOutputStream dos = new DataOutputStream(fos);
-
- /* Output Label */
- dos.write(ZoneInfoFile.JAVAZI_LABEL, 0,
- ZoneInfoFile.JAVAZI_LABEL.length);
-
- /* Output Version of ZoneInfoFile */
- dos.writeByte(ZoneInfoFile.JAVAZI_VERSION);
-
- List transitions = tz.getTransitions();
- if (transitions != null) {
- List dstOffsets = tz.getDstOffsets();
- List offsets = tz.getOffsets();
-
- if ((dstOffsets == null && offsets != null) ||
- (dstOffsets != null && offsets == null)) {
- Main.panic("Data not exist. (dstOffsets or offsets)");
- return 1;
- }
-
- /* Output Transition records */
- dos.writeByte(ZoneInfoFile.TAG_Transition);
- size = transitions.size();
- dos.writeShort((size * 8) & 0xFFFF);
- int dstoffset;
- for (int i = 0; i < size; i++) {
- /* if DST offset is 0, this means DST isn't used.
- * (NOT: offset's index is 0.)
- */
- if ((dstoffset = dstOffsets.get(i).intValue()) == -1) {
- dstoffset = 0;
- }
-
- dos.writeLong((transitions.get(i).longValue() << 12)
- | (dstoffset << 4)
- | offsets.get(i).intValue());
-
- }
-
- /* Output data for GMTOffset */
- List gmtoffset = tz.getGmtOffsets();
- dos.writeByte(ZoneInfoFile.TAG_Offset);
- size = gmtoffset.size();
- dos.writeShort((size * 4) & 0xFFFF);
- for (int i = 0; i < size; i++) {
- dos.writeInt(gmtoffset.get(i));
- }
- }
-
- /* Output data for SimpleTimeZone */
- List stz = tz.getLastRules();
- if (stz != null) {
- RuleRec[] rr = new RuleRec[2];
- boolean wall = true;
-
- rr[0] = stz.get(0);
- rr[1] = stz.get(1);
-
- dos.writeByte(ZoneInfoFile.TAG_SimpleTimeZone);
- wall = rr[0].getTime().isWall() && rr[1].getTime().isWall();
- if (wall) {
- dos.writeShort(32);
- } else {
- dos.writeShort(40);
- }
-
- for (int i = 0; i < 2; i++) {
- dos.writeInt(rr[i].getMonthNum() - 1); // 0-based month number
- dos.writeInt(rr[i].getDay().getDayForSimpleTimeZone());
- dos.writeInt(rr[i].getDay().getDayOfWeekForSimpleTimeZoneInt());
- dos.writeInt((int)rr[i].getTime().getTime());
- if (!wall) {
- dos.writeInt((rr[i].getTime().getType() & 0xFF) - 1);
- }
- }
- }
-
- /* Output RawOffset */
- dos.writeByte(ZoneInfoFile.TAG_RawOffset);
- dos.writeShort(4);
- dos.writeInt(tz.getRawOffset());
-
- /* Output willGMTOffsetChange flag */
- if (tz.willGMTOffsetChange()) {
- dos.writeByte(ZoneInfoFile.TAG_GMTOffsetWillChange);
- dos.writeShort(1);
- dos.writeByte(1);
- }
-
- /* Output LastDSTSaving */
- dos.writeByte(ZoneInfoFile.TAG_LastDSTSaving);
- dos.writeShort(2);
- dos.writeShort(tz.getLastDSTSaving()/1000);
-
- /* Output checksum */
- dos.writeByte(ZoneInfoFile.TAG_CRC32);
- dos.writeShort(4);
- dos.writeInt(tz.getCRC32());
-
- fos.close();
- dos.close();
- } catch(IOException e) {
- Main.panic("IO error: "+e.getMessage());
- return 1;
- }
-
- return 0;
- }
-
- /**
- * Generates ZoneInfoMappings in binary TLV format for each zone.
- * Regarding contents of output files, see {@link ZoneInfoFile}.
- *
- * @param Mappings
- * @return 0 if no errors, or 1 if error occurred.
- */
- int generateSrc(Mappings map) {
- try {
- int index;
- int block_size;
- int roi_size;
- long fp;
- String outputDir = Main.getOutputDir();
-
- /* If outputDir doesn't end with file-separator, adds it. */
- if (!outputDir.endsWith(File.separator)) {
- outputDir += File.separatorChar;
- }
-
- File outD = new File(outputDir);
- outD.mkdirs();
-
- /* Open ZoneInfoMapping file to write. */
- RandomAccessFile raf =
- new RandomAccessFile(outputDir + ZoneInfoFile.JAVAZM_FILE_NAME, "rw");
-
- /* Whether rawOffsetIndex list exists or not. */
- List roi = map.getRawOffsetsIndex();
- if (roi == null) {
- Main.panic("Data not exist. (rawOffsetsIndex)");
- return 1;
- }
- roi_size = roi.size();
-
- /* Whether rawOffsetIndexTable list exists or not. */
- List> roit = map.getRawOffsetsIndexTable();
- if (roit == null || roit.size() != roi_size) {
- Main.panic("Data not exist. (rawOffsetsIndexTable) Otherwise, Invalid size");
- return 1;
- }
-
- /* Output Label */
- raf.write(ZoneInfoFile.JAVAZM_LABEL, 0,
- ZoneInfoFile.JAVAZM_LABEL.length);
-
- /* Output Version */
- raf.writeByte(ZoneInfoFile.JAVAZM_VERSION);
-
- index = ZoneInfoFile.JAVAZM_LABEL.length + 2;
-
- /* Output Version of Olson's tzdata */
- byte[] b = Main.getVersionName().getBytes("UTF-8");
- raf.writeByte(ZoneInfoFile.TAG_TZDataVersion);
- raf.writeShort((b.length+1) & 0xFFFF);
- raf.write(b);
- raf.writeByte(0x00);
- index += b.length + 4;
-
- /* Output ID list. */
- raf.writeByte(ZoneInfoFile.TAG_ZoneIDs);
- block_size = 2;
- raf.writeShort(block_size & 0xFFFF);
- short nID = 0;
- raf.writeShort(nID & 0xFFFF);
- for (int i = 0; i < roi_size; i++) {
- for (String key : roit.get(i)) {
- byte size = (byte)key.getBytes("UTF-8").length;
- raf.writeByte(size & 0xFF);
- raf.write(key.getBytes("UTF-8"), 0, size);
- block_size += 1 + size;
- nID++;
- }
- }
- fp = raf.getFilePointer();
- raf.seek(index);
- raf.writeShort((block_size) & 0xFFFF);
- raf.writeShort(nID & 0xFFFF);
- raf.seek(fp);
-
- /* Output sorted rawOffset list. */
- raf.writeByte(ZoneInfoFile.TAG_RawOffsets);
- index += 3 + block_size;
- block_size = roi_size * 4;
- raf.writeShort(block_size & 0xFFFF);
- for (int i = 0; i < roi_size; i++) {
- raf.writeInt(Integer.parseInt(roi.get(i).toString()));
- }
-
- /* Output sorted rawOffsetIndex list. */
- raf.writeByte(ZoneInfoFile.TAG_RawOffsetIndices);
- index += 3 + block_size;
- block_size = 0;
- raf.writeShort(block_size & 0xFFFF);
- int num;
- for (int i = 0; i < roi_size; i++) {
- num = roit.get(i).size();
- block_size += num;
- for (int j = 0; j < num; j++) {
- raf.writeByte(i);
- }
- }
- fp = raf.getFilePointer();
- raf.seek(index);
- raf.writeShort((block_size) & 0xFFFF);
- raf.seek(fp);
-
- /* Whether alias list exists or not. */
- Map a = map.getAliases();
- if (a == null) {
- Main.panic("Data not exist. (aliases)");
- return 0;
- }
-
- /* Output ID list. */
- raf.writeByte(ZoneInfoFile.TAG_ZoneAliases);
- index += 3 + block_size;
- block_size = 2;
- raf.writeShort(block_size & 0xFFFF);
- raf.writeShort(a.size() & 0xFFFF);
- for (String key : a.keySet()) {
- String alias = a.get(key);
- byte key_size = (byte)key.length();
- byte alias_size = (byte)alias.length();
- raf.writeByte(key_size & 0xFF);
- raf.write(key.getBytes("UTF-8"), 0, key_size);
- raf.writeByte(alias_size & 0xFF);
- raf.write(alias.getBytes("UTF-8"), 0, alias_size);
- block_size += 2 + key_size + alias_size;
- }
- fp = raf.getFilePointer();
- raf.seek(index);
- raf.writeShort((block_size) & 0xFFFF);
- raf.seek(fp);
-
- /* Output the exclude list if it exists. */
- List excludedZones = map.getExcludeList();
- if (excludedZones != null) {
- raf.writeByte(ZoneInfoFile.TAG_ExcludedZones);
- index += 3 + block_size;
- block_size = 2;
- raf.writeShort(block_size & 0xFFFF); // place holder
- raf.writeShort(excludedZones.size()); // the number of excluded zones
- for (String name : excludedZones) {
- byte size = (byte) name.length();
- raf.writeByte(size); // byte length
- raf.write(name.getBytes("UTF-8"), 0, size); // zone name
- block_size += 1 + size;
- }
- fp = raf.getFilePointer();
- raf.seek(index);
- raf.writeShort(block_size & 0xFFFF);
- raf.seek(fp);
- }
-
- /* Close ZoneInfoMapping file. */
- raf.close();
- } catch(IOException e) {
- Main.panic("IO error: "+e.getMessage());
- return 1;
- }
-
- return 0;
- }
-}
diff --git a/jdk/make/tools/src/build/tools/javazic/GenDoc.java b/jdk/make/tools/src/build/tools/javazic/GenDoc.java
deleted file mode 100644
index c598b9b9dc5..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/GenDoc.java
+++ /dev/null
@@ -1,781 +0,0 @@
-/*
- * Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. 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.javazic;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.StringTokenizer;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import sun.util.calendar.ZoneInfoFile;
-
-/**
- * GenDoc is one of back-end classes of javazic, and generates
- * index.html and other html files which prints the detailed time zone
- * information for each zone.
- */
-class GenDoc extends BackEnd {
-
- private static final String docDir = "doc";
-
- private static final String header1 =
- "\n" +
- "\n\n\n\n" +
- "Java Platform, Standard Edition - TimeZone information based on ";
- private static final String header3 =
- "-->\n\n" +
- "Java Platform, Standard Edition TimeZone - ";
- private static final String header4 =
- "\n" +
- "\n\n";
-
- private static final String body1 =
- "\n";
- private static final String body2 =
- "\n";
-
- private static final String footer =
- "\n";
-
-
- // list of time zone name and zonefile name/real time zone name
- // e.g.
- // key (String) : value (String)
- // "America/Denver" : "America/Denver.html" (real time zone)
- // "America/Shiprock" : "America/Denver" (alias)
- TreeMap timezoneList = new TreeMap();
-
- // list of time zone's display name and time zone name
- // e.g.
- // key (String) : value (String)
- // "Tokyo, Asia" : "Asia/Tokyo"
- // "Marengo, Indiana, America" : "America/Indiana/Marengo"
- // (aliases included)
- TreeMap displayNameList = new TreeMap();
-
- // list of top level regions
- // e.g.
- // key (String) : value (String)
- // "America" : "America.html"
- // (including entries in America/Indiana/, America/Kentucky/, ...)
- TreeMap regionList = new TreeMap();
-
- // mapping list from zone name to latitude & longitude
- // This list is generated from zone.tab.
- // e.g.
- // key (String) : value (LatitudeAndLongitude object)
- // "Asia/Tokyo" : latitude=35.3916, longitude=13.9444
- // (aliases not included)
- HashMap mapList = null;
-
- // SortedMap of zone IDs sorted by their GMT offsets. If zone's GMT
- // offset will change in the future, its last known offset is
- // used.
- SortedMap> zonesByOffset = new TreeMap>();
-
- /**
- * Generates HTML document for each zone.
- * @param Timezone
- * @return 0 if no errors, or 1 if error occurred.
- */
- int processZoneinfo(Timezone tz) {
- try {
- int size;
- int index;
- String outputDir = Main.getOutputDir();
- String zonename = tz.getName();
- String zonefile = ZoneInfoFile.getFileName(zonename) + ".html";
- List stz = tz.getLastRules();
- timezoneList.put(zonename, zonefile);
- displayNameList.put(transform(zonename), zonename);
-
- // Populate zonesByOffset. (Zones that will change their
- // GMT offsets are also added to zonesByOffset here.)
- int lastKnownOffset = tz.getRawOffset();
- Set set = zonesByOffset.get(lastKnownOffset);
- if (set == null) {
- set = new TreeSet();
- zonesByOffset.put(lastKnownOffset, set);
- }
- set.add(zonename);
-
- /* If outputDir doesn't end with file-separator, adds it. */
- if (!outputDir.endsWith(File.separator)) {
- outputDir += File.separatorChar;
- }
- outputDir += docDir + File.separatorChar;
-
- index = zonename.indexOf('/');
- if (index != -1) {
- regionList.put(zonename.substring(0, index),
- zonename.substring(0, index) + ".html");
- }
-
- /* If zonefile includes file-separator, it's treated as part of
- * pathname. And make directory if necessary.
- */
- index = zonefile.lastIndexOf('/');
- if (index != -1) {
- zonefile.replace('/', File.separatorChar);
- outputDir += zonefile.substring(0, index+1);
- }
- File outD = new File(outputDir);
- outD.mkdirs();
-
- /* If mapfile is available, add a link to the appropriate map */
- if ((mapList == null) && (Main.getMapFile() != null)) {
- FileReader fr = new FileReader(Main.getMapFile());
- BufferedReader in = new BufferedReader(fr);
- mapList = new HashMap();
- String line;
- while ((line = in.readLine()) != null) {
- // skip blank and comment lines
- if (line.length() == 0 || line.charAt(0) == '#') {
- continue;
- }
- StringTokenizer tokens = new StringTokenizer(line);
- String token = tokens.nextToken(); /* We don't use the first token. */
- token = tokens.nextToken();
- LatitudeAndLongitude location = new LatitudeAndLongitude(token);
- token = tokens.nextToken();
- mapList.put(token, location);
- }
- in.close();
- }
-
- /* Open zoneinfo file to write. */
- FileWriter fw = new FileWriter(outputDir + zonefile.substring(index+1));
- BufferedWriter out = new BufferedWriter(fw);
-
- out.write(header1 + new Date() + header3 + zonename + header4);
- out.write(body1 + "" + zonename + "");
- LatitudeAndLongitude location = mapList.get(zonename);
- if (location != null) {
- int deg, min, sec;
-
- deg = location.getLatDeg();
- min = location.getLatMin();
- sec = location.getLatSec();
- if (deg < 0) {
- min = -min;
- sec = -sec;
- } else if (min < 0) {
- sec = -sec;
- }
- out.write(" " +
- "[map]");
- }
- out.write("\n
\n");
-
- List zone = tz.getZones();
- List rule = tz.getRules();
- if (rule != null && zone != null) {
- out.write("
\n");
- for (int i = 0; i < size; i++) {
- out.write("
\n");
- StringTokenizer st = new StringTokenizer(zone.get(i).getLine());
- String s = st.nextToken();
- if (s.equals("Zone")) { /* NAME */
- s = st.nextToken();
- s = st.nextToken();
- }
- out.write("
\n");
- }
- out.write(body2 + footer);
-
- out.close();
- fw.close();
- } catch(IOException e) {
- Main.panic("IO error: "+e.getMessage());
- return 1;
- }
-
- return 0;
- }
-
- /**
- * Generates index.html and other top-level frame files.
- * @param Mappings
- * @return 0 if no errors, or 1 if error occurred.
- */
- int generateSrc(Mappings map) {
- try {
- int len;
- Object o[];
- String outputDir = Main.getOutputDir();
- FileWriter fw1, fw2;
- BufferedWriter out1, out2;
-
- /* Whether alias list exists or not. */
- Map a = map.getAliases();
- if (a == null) {
- Main.panic("Data not exist. (aliases)");
- return 1;
- }
-
- timezoneList.putAll(a);
-
- /* If outputDir doesn't end with file-separator, adds it. */
- if (!outputDir.endsWith(File.separator)) {
- outputDir += File.separatorChar;
- }
- outputDir += docDir + File.separatorChar;
-
- File outD = new File(outputDir);
- outD.mkdirs();
-
- /* Creates index.html */
- fw1 = new FileWriter(outputDir + "index.html", false);
- out1 = new BufferedWriter(fw1);
-
- out1.write(header1 + new Date() + header2 + Main.getVersionName() +
- header4 +
- "\n" +
- "\n" +
- "
\nFrame Alert\n
\n\n" +
- "
\n\n" +
- "This document is designed to be viewed using the frames feature. If you see this\n" +
- "message, you are using a non-frame-capable web client.\n" +
- " \n" +
- "Link toNon-frame version.\n" +
- "
This is the list of time zones generated from " +
- Main.getVersionName() + " for Java Platform, " +
- "Standard Edition. The source code can be obtained " +
- "from ftp site " +
- "ftp://elsie.nci.nih.gov/pub/. A total of " +
- len +
- " time zones and aliases are supported " +
- "in this edition. For the " +
- "format of rules and zones, refer to the zic " +
- "(zoneinfo compiler) man page on " +
- "Solaris or Linux.
\n" +
- "
Note that the time zone data is not " +
- "a public interface of the Java Platform. No " +
- "applications should rely on the time zone data of " +
- "this document. Time zone names and data " +
- "may change without any prior notice.
\n" +
- body2 + footer);
-
- out1.close();
- fw1.close();
- } catch(IOException e) {
- Main.panic("IO error: "+e.getMessage());
- return 1;
- }
-
- return 0;
- }
-
- String transform(String s) {
- int index = s.lastIndexOf("/");
-
- /* If the string doesn't include any delimiter, return */
- if (index == -1) {
- return s;
- }
-
- int lastIndex = index;
- String str = s.substring(index+1);
- do {
- index = s.substring(0, lastIndex).lastIndexOf('/');
- str += ", " + s.substring(index+1, lastIndex);
- lastIndex = index;
- } while (index > -1);
-
- return str;
- }
-
- static class LatitudeAndLongitude {
-
- private int latDeg, latMin, latSec, longDeg, longMin, longSec;
-
- LatitudeAndLongitude(String s) {
- try {
- // First of all, check the string has the correct format:
- // either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS
-
- if (!s.startsWith("+") && !s.startsWith("-")) {
- Main.warning("Wrong latitude&longitude data: " + s);
- return;
- }
- int index;
- if (((index = s.lastIndexOf("+")) <= 0) &&
- ((index = s.lastIndexOf("-")) <= 0)) {
- Main.warning("Wrong latitude&longitude data: " + s);
- return;
- }
-
- if (index == 5) {
- latDeg = Integer.parseInt(s.substring(1, 3));
- latMin = Integer.parseInt(s.substring(3, 5));
- latSec = 0;
- } else if (index == 7) {
- latDeg = Integer.parseInt(s.substring(1, 3));
- latMin = Integer.parseInt(s.substring(3, 5));
- latSec = Integer.parseInt(s.substring(5, 7));
- } else {
- Main.warning("Wrong latitude&longitude data: " + s);
- return;
- }
- if (s.startsWith("-")){
- latDeg = -latDeg;
- latMin = -latMin;
- latSec = -latSec;
- }
-
- int len = s.length();
- if (index == 5 && len == 11) {
- longDeg = Integer.parseInt(s.substring(index+1, index+4));
- longMin = Integer.parseInt(s.substring(index+4, index+6));
- longSec = 0;
- } else if (index == 7 && len == 15) {
- longDeg = Integer.parseInt(s.substring(index+1, index+4));
- longMin = Integer.parseInt(s.substring(index+4, index+6));
- longSec = Integer.parseInt(s.substring(index+6, index+8));
- } else {
- Main.warning("Wrong latitude&longitude data: " + s);
- return;
- }
- if (s.charAt(index) == '-'){
- longDeg = -longDeg;
- longMin = -longMin;
- longSec = -longSec;
- }
- } catch(Exception e) {
- Main.warning("LatitudeAndLongitude() Parse error: " + s);
- }
- }
-
- int getLatDeg() {
- return latDeg;
- }
-
- int getLatMin() {
- return latMin;
- }
-
- int getLatSec() {
- return latSec;
- }
-
- int getLongDeg() {
- return longDeg;
- }
-
- int getLongMin() {
- return longMin;
- }
-
- int getLongSec() {
- return longSec;
- }
- }
-}
diff --git a/jdk/make/tools/src/build/tools/javazic/Main.java b/jdk/make/tools/src/build/tools/javazic/Main.java
deleted file mode 100644
index a91ab91fff8..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/Main.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. 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.javazic;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Main class for the javazic time zone data compiler.
- *
- * @since 1.4
- */
-public class Main {
-
- private static boolean verbose = false;
- static boolean outputDoc = false;
-
- private List ziFiles = new ArrayList();
- private static String zoneNamesFile = null;
- private static String versionName = "unknown";
- private static String outputDir = "zoneinfo";
- private static String mapFile = null;
-
- /**
- * Parses the specified arguments and sets up the variables.
- * @param argv the arguments
- */
- void processArgs(String[] argv) {
- for (int i = 0; i < argv.length; i++) {
- String arg = argv[i];
- if (arg.startsWith("-h")) {
- usage();
- System.exit(0);
- } else if (arg.equals("-d")) {
- outputDir = argv[++i];
- } else if (arg.equals("-v")) {
- verbose = true;
- } else if (arg.equals("-V")) {
- versionName = argv[++i];
- } else if (arg.equals("-doc")) {
- outputDoc = true;
- } else if (arg.equals("-map")) {
- outputDoc = true;
- mapFile = argv[++i];
- } else if (arg.equals("-f")) {
- zoneNamesFile = argv[++i];
- } else if (arg.equals("-S")) {
- try {
- Zoneinfo.setYear(Integer.parseInt(argv[++i]));
- } catch (Exception e) {
- error("invalid year: " + argv[i]);
- usage();
- System.exit(1);
- }
- } else {
- boolean isStartYear = arg.equals("-s");
- if (isStartYear || arg.equals("-e")) {
- try {
- int year = Integer.parseInt(argv[++i]);
- if (isStartYear) {
- Zoneinfo.setStartYear(year);
- } else {
- Zoneinfo.setEndYear(year);
- }
- } catch (Exception e) {
- error("invalid year: " + argv[i]);
- usage();
- System.exit(1);
- }
- } else {
- // the rest of args are zoneinfo source files
- while (i < argv.length) {
- ziFiles.add(argv[i++]);
- }
- }
- }
- }
- }
-
- /**
- * Parses zoneinfo source files
- */
- int compile() {
- int nFiles = ziFiles.size();
- int status = 0;
- Mappings maps = new Mappings();
- BackEnd backend = BackEnd.getBackEnd();
-
- for (int i = 0; i < nFiles; i++) {
- Zoneinfo frontend = Zoneinfo.parse(ziFiles.get(i));
-
- for (String key : frontend.getZones().keySet()) {
- info(key);
-
- Timezone tz = frontend.phase2(key);
- status |= backend.processZoneinfo(tz);
- }
-
- maps.add(frontend);
- }
-
- // special code for dealing with the conflicting name "MET"
- Zone.addMET();
-
- maps.resolve();
-
- status |= backend.generateSrc(maps);
-
- return status;
- }
-
- public static void main(String[] argv) {
- Main zic = new Main();
-
- /*
- * Parse args
- */
- zic.processArgs(argv);
-
- /*
- * Read target zone names
- */
- if (zoneNamesFile != null) {
- Zone.readZoneNames(zoneNamesFile);
- }
-
- int status = zic.compile();
-
- System.exit(status);
- }
-
- void usage() {
- System.err.println("Usage: javazic [options] file...\n"+
- " -f namefile file containing zone names\n"+
- " to be generated (ie, generating subset)\n"+
- " -d dir output directory\n"+
- " -v verbose\n"+
- " -V datavers specifies the tzdata version string\n"+
- " (eg, \"tzdata2000g\")"+
- " -S year output only SimleTimeZone data of that year\n"+
- " -s year start year (default: 1900)\n"+
- " -e year end year (default: 2037)\n"+
- " -doc generates HTML documents\n"+
- " -map mapfile generates HTML documents with map information\n"+
- " file... zoneinfo source file(s)");
- }
-
- /**
- * @return the output directory path name
- */
- static String getOutputDir() {
- return outputDir;
- }
-
- /**
- * @return the map file's path and name
- */
- static String getMapFile() {
- return mapFile;
- }
-
- /**
- * Returns the time zone data version string specified by the -V
- * option. If it is not specified, "unknown" is returned.
- * @return the time zone data version string
- */
- static String getVersionName() {
- return versionName;
- }
-
- /**
- * Prints out the specified fatal error message and calls {@link
- * java.lang.System#exit System.exit(1)}.
- * @param msg the fatal error message
- */
- static void panic(String msg) {
- printMessage("fatal error", msg);
- System.exit(1);
- }
-
- /**
- * Prints out the specified error message.
- * @param msg the error message
- */
- static void error(String msg) {
- printMessage("error", msg);
- }
-
- /**
- * Prints out the specified warning message.
- * @param msg the warning message
- */
- static void warning(String msg) {
- printMessage("warning", msg);
- }
-
- /**
- * Prints out the informative message.
- * @param msg the informative message
- */
- static void info(String msg) {
- if (verbose) {
- printMessage(null, msg);
- }
- }
-
- private static void printMessage(String type, String msg) {
- if (type != null) {
- type += ": ";
- } else {
- type = "";
- }
- System.err.println("javazic: " + type + msg);
- }
-}
diff --git a/jdk/make/tools/src/build/tools/javazic/Mappings.java b/jdk/make/tools/src/build/tools/javazic/Mappings.java
deleted file mode 100644
index 885b9a091b6..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/Mappings.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright (c) 2000, 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 build.tools.javazic;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-/**
- * Mappings generates two Maps and a List which are used by
- * javazic BackEnd.
- *
- * @since 1.4
- */
-class Mappings {
- // All aliases specified by Link statements. It's alias name to
- // real name mappings.
- private Map aliases;
-
- private List rawOffsetsIndex;
-
- private List> rawOffsetsIndexTable;
-
- // Zone names to be excluded from rawOffset table. Those have GMT
- // offsets to change some future time.
- private List excludeList;
-
- /**
- * Constructor creates some necessary instances.
- */
- Mappings() {
- aliases = new TreeMap();
- rawOffsetsIndex = new LinkedList();
- rawOffsetsIndexTable = new LinkedList>();
- }
-
- /**
- * Generates aliases and rawOffsets tables.
- * @param zi a Zoneinfo containing Zones
- */
- void add(Zoneinfo zi) {
- Map zones = zi.getZones();
-
- for (String zoneName : zones.keySet()) {
- Zone zone = zones.get(zoneName);
- String zonename = zone.getName();
- int rawOffset = zone.get(zone.size()-1).getGmtOffset();
-
- // If the GMT offset of this Zone will change in some
- // future time, this Zone is added to the exclude list.
- boolean isExcluded = false;
- for (int i = 0; i < zone.size(); i++) {
- ZoneRec zrec = zone.get(i);
- if ((zrec.getGmtOffset() != rawOffset)
- && (zrec.getUntilTime(0) > Time.getCurrentTime())) {
- if (excludeList == null) {
- excludeList = new ArrayList();
- }
- excludeList.add(zone.getName());
- isExcluded = true;
- break;
- }
- }
-
- if (!rawOffsetsIndex.contains(new Integer(rawOffset))) {
- // Find the index to insert this raw offset zones
- int n = rawOffsetsIndex.size();
- int i;
- for (i = 0; i < n; i++) {
- if (rawOffsetsIndex.get(i) > rawOffset) {
- break;
- }
- }
- rawOffsetsIndex.add(i, rawOffset);
-
- Set perRawOffset = new TreeSet();
- if (!isExcluded) {
- perRawOffset.add(zonename);
- }
- rawOffsetsIndexTable.add(i, perRawOffset);
- } else if (!isExcluded) {
- int i = rawOffsetsIndex.indexOf(new Integer(rawOffset));
- Set perRawOffset = rawOffsetsIndexTable.get(i);
- perRawOffset.add(zonename);
- }
- }
-
- Map a = zi.getAliases();
- // If there are time zone names which refer to any of the
- // excluded zones, add those names to the excluded list.
- if (excludeList != null) {
- for (String zoneName : a.keySet()) {
- String realname = a.get(zoneName);
- if (excludeList.contains(realname)) {
- excludeList.add(zoneName);
- }
- }
- }
- aliases.putAll(a);
- }
-
- /**
- * Adds valid aliases to one of per-RawOffset table and removes
- * invalid aliases from aliases List. Aliases referring to
- * excluded zones are not added to a per-RawOffset table.
- */
- void resolve() {
- int index = rawOffsetsIndexTable.size();
- List toBeRemoved = new ArrayList();
- for (String key : aliases.keySet()) {
- boolean validname = false;
- for (int j = 0; j < index; j++) {
- Set perRO = rawOffsetsIndexTable.get(j);
- boolean isExcluded = (excludeList == null) ?
- false : excludeList.contains(key);
-
- if ((perRO.contains(aliases.get(key)) || isExcluded)
- && Zone.isTargetZone(key)) {
- validname = true;
- if (!isExcluded) {
- perRO.add(key);
- Main.info("Alias <"+key+"> added to the list.");
- }
- break;
- }
- }
-
- if (!validname) {
- Main.info("Alias <"+key+"> removed from the list.");
- toBeRemoved.add(key);
- }
- }
-
- // Remove zones, if any, from the list.
- for (String key : toBeRemoved) {
- aliases.remove(key);
- }
- // Eliminate any alias-to-alias mappings. For example, if
- // there are A->B and B->C, A->B is changed to A->C.
- Map newMap = new HashMap();
- for (String key : aliases.keySet()) {
- String realid = aliases.get(key);
- String leaf = realid;
- while (aliases.get(leaf) != null) {
- leaf = aliases.get(leaf);
- }
- if (!realid.equals(leaf)) {
- newMap.put(key, leaf);
- }
- }
- aliases.putAll(newMap);
- }
-
- Map getAliases() {
- return(aliases);
- }
-
- List getRawOffsetsIndex() {
- return(rawOffsetsIndex);
- }
-
- List> getRawOffsetsIndexTable() {
- return(rawOffsetsIndexTable);
- }
-
- List getExcludeList() {
- return excludeList;
- }
-}
diff --git a/jdk/make/tools/src/build/tools/javazic/Month.java b/jdk/make/tools/src/build/tools/javazic/Month.java
deleted file mode 100644
index 9e70808809f..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/Month.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. 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.javazic;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Month enum handles month related manipulation.
- *
- * @since 1.4
- */
-enum Month {
- JANUARY("Jan"),
- FEBRUARY("Feb"),
- MARCH("Mar"),
- APRIL("Apr"),
- MAY("May"),
- JUNE("Jun"),
- JULY("Jul"),
- AUGUST("Aug"),
- SEPTEMBER("Sep"),
- OCTOBER("Oct"),
- NOVEMBER("Nov"),
- DECEMBER("Dec");
-
- private final String abbr;
-
- private static final Map abbreviations
- = new HashMap(12);
-
- static {
- for (Month m : Month.values()) {
- abbreviations.put(m.abbr, m);
- }
- }
-
- private Month(String abbr) {
- this.abbr = abbr;
- }
-
- int value() {
- return ordinal() + 1;
- }
-
- /**
- * Parses the specified string as a month abbreviation.
- * @param name the month abbreviation
- * @return the Month value
- */
- static Month parse(String name) {
- Month m = abbreviations.get(name);
- if (m != null) {
- return m;
- }
- return null;
- }
-
- /**
- * @param month the nunmth number (1-based)
- * @return the month name in uppercase of the specified month
- */
- static String toString(int month) {
- if (month >= JANUARY.value() && month <= DECEMBER.value()) {
- return "Calendar." + Month.values()[month - 1];
- }
- throw new IllegalArgumentException("wrong month number: " + month);
- }
-}
diff --git a/jdk/make/tools/src/build/tools/javazic/Rule.java b/jdk/make/tools/src/build/tools/javazic/Rule.java
deleted file mode 100644
index c8e97fccae2..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/Rule.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. 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.javazic;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-import java.util.StringTokenizer;
-
-/**
- * Rule manipulates Rule records.
- *
- * @since 1.4
- */
-class Rule {
-
- private List list;
- private String name;
-
- /**
- * Constructs a Rule which consists of a Rule record list. The
- * specified name is given to this Rule.
- * @param name the Rule name
- */
- Rule(String name) {
- this.name = name;
- list = new ArrayList();
- }
-
- /**
- * Added a RuleRec to the Rule record list.
- */
- void add(RuleRec rec) {
- list.add(rec);
- }
-
- /**
- * @return the Rule name
- */
- String getName() {
- return name;
- }
-
- /**
- * Gets all rule records that cover the given year.
- *
- * @param year the year number for which the rule is applicable.
- * @return rules in List that are collated in time. If no rule is found, an empty
- * List is returned.
- */
- List getRules(int year) {
- List rules = new ArrayList(3);
- for (RuleRec rec : list) {
- if (year >= rec.getFromYear() && year <= rec.getToYear()) {
- if ((rec.isOdd() && year % 2 == 0) || (rec.isEven() && year % 2 == 1))
- continue;
- rules.add(rec);
- }
- }
- int n = rules.size();
- if (n <= 1) {
- return rules;
- }
- if (n == 2) {
- RuleRec rec1 = rules.get(0);
- RuleRec rec2 = rules.get(1);
- if (rec1.getMonthNum() > rec2.getMonthNum()) {
- rules.set(0, rec2);
- rules.set(1, rec1);
- } else if (rec1.getMonthNum() == rec2.getMonthNum()) {
- // TODO: it's not accurate to ignore time types (STD, WALL, UTC)
- long t1 = Time.getLocalTime(year, rec1.getMonth(),
- rec1.getDay(), rec1.getTime().getTime());
- long t2 = Time.getLocalTime(year, rec2.getMonth(),
- rec2.getDay(), rec2.getTime().getTime());
- if (t1 > t2) {
- rules.set(0, rec2);
- rules.set(1, rec1);
- }
- }
- return rules;
- }
-
- final int y = year;
- RuleRec[] recs = new RuleRec[rules.size()];
- rules.toArray(recs);
- Arrays.sort(recs, new Comparator() {
- public int compare(RuleRec r1, RuleRec r2) {
- int n = r1.getMonthNum() - r2.getMonthNum();
- if (n != 0) {
- return n;
- }
- // TODO: it's not accurate to ignore time types (STD, WALL, UTC)
- long t1 = Time.getLocalTime(y, r1.getMonth(),
- r1.getDay(), r1.getTime().getTime());
- long t2 = Time.getLocalTime(y, r2.getMonth(),
- r2.getDay(), r2.getTime().getTime());
- return (int)(t1 - t2);
- }
- public boolean equals(Object o) {
- return this == o;
- }
- });
- rules.clear();
- for (int i = 0; i < n; i++) {
- rules.add(recs[i]);
- }
- return rules;
- }
-
- /**
- * Gets rule records that have either "max" or cover the endYear
- * value in its DST schedule.
- *
- * @return rules that contain last DST schedule. An empty
- * ArrayList is returned if no last rules are found.
- */
- List getLastRules() {
- RuleRec start = null;
- RuleRec end = null;
-
- for (int i = 0; i < list.size(); i++) {
- RuleRec rec = list.get(i);
- if (rec.isLastRule()) {
- if (rec.getSave() > 0) {
- start = rec;
- } else {
- end = rec;
- }
- }
- }
- if (start == null || end == null) {
- int endYear = Zoneinfo.getEndYear();
- for (int i = 0; i < list.size(); i++) {
- RuleRec rec = list.get(i);
- if (endYear >= rec.getFromYear() && endYear <= rec.getToYear()) {
- if (start == null && rec.getSave() > 0) {
- start = rec;
- } else {
- if (end == null && rec.getSave() == 0) {
- end = rec;
- }
- }
- }
- }
- }
-
- List r = new ArrayList(2);
- if (start == null || end == null) {
- if (start != null || end != null) {
- Main.warning("found last rules for "+name+" inconsistent.");
- }
- return r;
- }
-
- r.add(start);
- r.add(end);
- return r;
- }
-}
diff --git a/jdk/make/tools/src/build/tools/javazic/RuleDay.java b/jdk/make/tools/src/build/tools/javazic/RuleDay.java
deleted file mode 100644
index 5ce43f19fce..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/RuleDay.java
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright (c) 2000, 2010, 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.javazic;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * RuleDay class represents the value of the "ON" field. The day of
- * week values start from 1 following the {@link java.util.Calendar}
- * convention.
- *
- * @since 1.4
- */
-class RuleDay {
- private static final Map abbreviations = new HashMap(7);
- static {
- for (DayOfWeek day : DayOfWeek.values()) {
- abbreviations.put(day.getAbbr(), day);
- }
- }
-
- private String dayName = null;
- private DayOfWeek dow;
- private boolean lastOne = false;
- private int soonerOrLater = 0;
- private int thanDayOfMonth; // day of month (e.g., 8 for "Sun>=8")
-
- RuleDay() {
- }
-
- RuleDay(int day) {
- thanDayOfMonth = day;
- }
-
- int getDay() {
- return thanDayOfMonth;
- }
-
- /**
- * @return the day of week value (1-based)
- */
- int getDayOfWeekNum() {
- return dow.value();
- }
-
- /**
- * @return true if this rule day represents the last day of
- * week. (e.g., lastSun).
- */
- boolean isLast() {
- return lastOne;
- }
-
- /**
- * @return true if this rule day represents the day of week on or
- * later than (after) the {@link #getDay}. (e.g., Sun>=1)
- */
- boolean isLater() {
- return soonerOrLater > 0;
- }
-
- /**
- * @return true if this rule day represents the day of week on or
- * earlier than (before) the {@link #getDay}. (e.g., Sun<=15)
- */
- boolean isEarlier() {
- return soonerOrLater < 0;
- }
-
- /**
- * @return true if this rule day represents an exact day.
- */
- boolean isExact() {
- return soonerOrLater == 0;
- }
-
- /**
- * Parses the "ON" field and constructs a RuleDay.
- * @param day an "ON" field string (e.g., "Sun>=1")
- * @return a RuleDay representing the given "ON" field
- */
- static RuleDay parse(String day) {
- RuleDay d = new RuleDay();
- if (day.startsWith("last")) {
- d.lastOne = true;
- d.dayName = day.substring(4);
- d.dow = getDOW(d.dayName);
- } else {
- int index;
- if ((index = day.indexOf(">=")) != -1) {
- d.dayName = day.substring(0, index);
- d.dow = getDOW(d.dayName);
- d.soonerOrLater = 1; // greater or equal
- d.thanDayOfMonth = Integer.parseInt(day.substring(index+2));
- } else if ((index = day.indexOf("<=")) != -1) {
- d.dayName = day.substring(0, index);
- d.dow = getDOW(d.dayName);
- d.soonerOrLater = -1; // less or equal
- d.thanDayOfMonth = Integer.parseInt(day.substring(index+2));
- } else {
- // it should be an integer value.
- d.thanDayOfMonth = Integer.parseInt(day);
- }
- }
- return d;
- }
-
- /**
- * Converts this RuleDay to the SimpleTimeZone day rule.
- * @return the converted SimpleTimeZone day rule
- */
- int getDayForSimpleTimeZone() {
- if (isLast()) {
- return -1;
- }
- return isEarlier() ? -getDay() : getDay();
- }
-
- /**
- * Converts this RuleDay to the SimpleTimeZone day-of-week rule.
- * @return the SimpleTimeZone day-of-week rule value
- */
- int getDayOfWeekForSimpleTimeZoneInt() {
- if (isEarlier() || isLater()) {
- return -getDayOfWeekNum();
- }
- return isLast() ? getDayOfWeekNum() : 0;
- }
-
- /**
- * @return the string representation of the {@link
- * #getDayOfWeekForSimpleTimeZoneInt} value
- */
- String getDayOfWeekForSimpleTimeZone() {
- int d = getDayOfWeekForSimpleTimeZoneInt();
- if (d == 0) {
- return "0";
- }
- String sign = "";
- if (d < 0) {
- sign = "-";
- d = -d;
- }
- return sign + toString(d);
- }
-
- private static DayOfWeek getDOW(String abbr) {
- return abbreviations.get(abbr);
- }
-
- /**
- * Converts the specified day of week value to the day-of-week
- * name defined in {@link java.util.Calenda}.
- * @param dow 1-based day of week value
- * @return the Calendar day of week name with "Calendar." prefix.
- * @throws IllegalArgumentException if the specified dow value is out of range.
- */
- static String toString(int dow) {
- if (dow >= DayOfWeek.SUNDAY.value() && dow <= DayOfWeek.SATURDAY.value()) {
- return "Calendar." + DayOfWeek.values()[dow - 1];
- }
- throw new IllegalArgumentException("wrong Day_of_Week number: " + dow);
- }
-}
diff --git a/jdk/make/tools/src/build/tools/javazic/RuleRec.java b/jdk/make/tools/src/build/tools/javazic/RuleRec.java
deleted file mode 100644
index 37743725729..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/RuleRec.java
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. 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.javazic;
-
-import java.util.StringTokenizer;
-
-/**
- * RuleRec class represents one record of the Rule set.
- *
- * @since 1.4
- */
-class RuleRec {
- private int fromYear;
- private int toYear;
- private String type;
- private Month inMonth;
- private RuleDay onDay;
- private Time atTime;
- private int save;
- private String letters;
- private String line;
- private boolean isLastRule;
-
- int getFromYear() {
- return fromYear;
- }
-
- int getToYear() {
- return toYear;
- }
-
- Month getMonth() {
- return inMonth;
- }
-
- int getMonthNum() {
- return inMonth.value();
- }
-
- RuleDay getDay() {
- return onDay;
- }
-
- Time getTime() {
- return atTime;
- }
-
- int getSave() {
- return save;
- }
-
- String getLine() {
- return line;
- }
-
- /**
- * Sets the line from the text file.
- * @param line the text of the line
- */
- void setLine(String line) {
- this.line = line;
- }
-
- /**
- * @return true if the rule type is "odd".
- */
- boolean isOdd() {
- return "odd".equals(type);
- }
-
- /**
- * @return true if the rule type is "even".
- */
- boolean isEven() {
- return "even".equals(type);
- }
-
- /**
- * Determines if this rule record is the last DST schedule rule.
- *
- * @return true if this rule record has "max" as TO (year).
- */
- boolean isLastRule() {
- return isLastRule;
- }
-
- /**
- * Determines if the unadjusted until time of the specified ZoneRec
- * is the same as the transition time of this rule in the same
- * year as the ZoneRec until year.
- *
- * @param zrec ZoneRec to compare to
- * @param save the amount of daylight saving in milliseconds
- * @param gmtOffset the GMT offset value in milliseconds
- * @return true if the unadjusted until time is the same as rule's
- * transition time.
- */
- boolean isSameTransition(ZoneRec zrec, int save, int gmtOffset) {
- long until, transition;
-
- if (zrec.getUntilTime().getType() != atTime.getType()) {
- until = zrec.getLocalUntilTime(save, gmtOffset);
- transition = Time.getLocalTime(zrec.getUntilYear(),
- getMonth(),
- getDay(),
- save,
- gmtOffset,
- atTime);
- } else {
- until = zrec.getLocalUntilTime();
- transition = Time.getLocalTime(zrec.getUntilYear(),
- getMonth(),
- getDay(),
- atTime.getTime());
- }
-
- return until == transition;
- }
-
- /**
- * Parses a Rule line and returns a RuleRec object.
- *
- * @param tokens a StringTokenizer object that should contain a
- * token for the "FROM" field and the rest.
- * @return a RuleRec object.
- */
- static RuleRec parse(StringTokenizer tokens) {
- RuleRec rec = new RuleRec();
- try {
- // FROM
- String token = tokens.nextToken();
- try {
- rec.fromYear = Integer.parseInt(token);
- } catch (NumberFormatException e) {
- // it's not integer
- if ("min".equals(token) || "minimum".equals(token)) {
- rec.fromYear = Zoneinfo.getMinYear();
- } else if ("max".equals(token) || "maximum".equals(token)) {
- rec.fromYear = Zoneinfo.getMaxYear();
- } else {
- Main.panic("invalid year value: "+token);
- }
- }
-
- // TO
- token = tokens.nextToken();
- rec.isLastRule = false;
- try {
- rec.toYear = Integer.parseInt(token);
- } catch (NumberFormatException e) {
- // it's not integer
- if ("min".equals(token) || "minimum".equals(token)) {
- rec.fromYear = Zoneinfo.getMinYear();
- } else if ("max".equals(token) || "maximum".equals(token)) {
- rec.toYear = Integer.MAX_VALUE;
- rec.isLastRule = true;
- } else if ("only".equals(token)) {
- rec.toYear = rec.fromYear;
- } else {
- Main.panic("invalid year value: "+token);
- }
- }
-
- // TYPE
- rec.type = tokens.nextToken();
-
- // IN
- rec.inMonth = Month.parse(tokens.nextToken());
-
- // ON
- rec.onDay = RuleDay.parse(tokens.nextToken());
-
- // AT
- rec.atTime = Time.parse(tokens.nextToken());
-
- // SAVE
- rec.save = (int) Time.parse(tokens.nextToken()).getTime();
-
- // LETTER/S
- rec.letters = tokens.nextToken();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return rec;
- }
-
- /**
- * Calculates the transition time of the given year under this rule.
- * @param year the year value
- * @param gmtOffset the GMT offset value in milliseconds
- * @param save the amount of daylight save time
- * @return the transition time in milliseconds of the given year in UTC.
- */
- long getTransitionTime(int year, int gmtOffset, int save) {
- long time = Time.getLocalTime(year, getMonth(),
- getDay(), atTime.getTime());
- if (atTime.isSTD()) {
- time -= gmtOffset;
- } else if (atTime.isWall()) {
- time -= gmtOffset + save;
- }
- return time;
- }
-
- private static int getInt(StringTokenizer tokens) {
- String token = tokens.nextToken();
- return Integer.parseInt(token);
- }
-}
diff --git a/jdk/make/tools/src/build/tools/javazic/Simple.java b/jdk/make/tools/src/build/tools/javazic/Simple.java
deleted file mode 100644
index 69c7fe783f5..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/Simple.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. 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.javazic;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-/**
- * Simple generates TimeZoneData, which had been used as internal
- * data of TimeZone before J2SDK1.3.
- * Since J2SDK1.4 doesn't need TimeZoneData, this class is for maintenance
- * of old JDK release.
- */
-class Simple extends BackEnd {
-
- /**
- * Zone records which are applied for given year.
- */
- private static Map lastZoneRecs = new HashMap<>();
-
- /**
- * Rule records which are applied for given year.
- */
- private static Map> lastRules = new TreeMap<>();
-
- /**
- * zone IDs sorted by their GMT offsets. If zone's GMT
- * offset will change in the future, its last known offset is
- * used.
- */
- private SortedMap> zonesByOffset = new TreeMap<>();
-
- /**
- * Sets last Rule records and Zone records for given timezone to
- * each Map.
- *
- * @param tz Timezone object for each zone
- * @return always 0
- */
- int processZoneinfo(Timezone tz) {
- String zonename = tz.getName();
-
- lastRules.put(zonename, tz.getLastRules());
- lastZoneRecs.put(zonename, tz.getLastZoneRec());
-
- // Populate zonesByOffset. (Zones that will change their
- // GMT offsets are also added to zonesByOffset here.)
- int lastKnownOffset = tz.getRawOffset();
- Set set = zonesByOffset.get(lastKnownOffset);
- if (set == null) {
- set = new TreeSet<>();
- zonesByOffset.put(lastKnownOffset, set);
- }
- set.add(zonename);
-
- return 0;
- }
-
- /**
- * Generates TimeZoneData to output SimpleTimeZone data.
- * @param map Mappings object which is generated by {@link Main#compile}.
- * @return 0 if no error occurred, otherwise 1.
- */
- int generateSrc(Mappings map) {
- try {
- File outD = new File(Main.getOutputDir());
- outD.mkdirs();
-
- FileWriter fw =
- new FileWriter(new File(outD, "TimeZoneData.java"), false);
- BufferedWriter out = new BufferedWriter(fw);
-
- out.write("import java.util.SimpleTimeZone;\n\n");
- out.write(" static SimpleTimeZone zones[] = {\n");
-
- Map a = map.getAliases();
- List roi = map.getRawOffsetsIndex();
- List> roit = map.getRawOffsetsIndexTable();
-
- int index = 0;
- for (int offset : zonesByOffset.keySet()) {
- int o = roi.get(index);
- Set set = zonesByOffset.get(offset);
- if (offset == o) {
- // Merge aliases into zonesByOffset
- set.addAll(roit.get(index));
- }
- index++;
-
- for (String key : set) {
- ZoneRec zrec;
- String realname;
- List stz;
- if ((realname = a.get(key)) != null) {
- // if this alias is not targeted, ignore it.
- if (!Zone.isTargetZone(key)) {
- continue;
- }
- stz = lastRules.get(realname);
- zrec = lastZoneRecs.get(realname);
- } else {
- stz = lastRules.get(key);
- zrec = lastZoneRecs.get(key);
- }
-
- out.write("\t//--------------------------------------------------------------------\n");
- String s = Time.toFormedString(offset);
- out.write("\tnew SimpleTimeZone(" +
- Time.toFormedString(offset) + ", \"" + key + "\"");
- if (realname != null) {
- out.write(" /* " + realname + " */");
- }
-
- if (stz == null) {
- out.write("),\n");
- } else {
- RuleRec rr0 = stz.get(0);
- RuleRec rr1 = stz.get(1);
-
- out.write(",\n\t " + Month.toString(rr0.getMonthNum()) +
- ", " + rr0.getDay().getDayForSimpleTimeZone() + ", " +
- rr0.getDay().getDayOfWeekForSimpleTimeZone() + ", " +
- Time.toFormedString((int)rr0.getTime().getTime()) + ", " +
- rr0.getTime().getTypeForSimpleTimeZone() + ",\n" +
-
- "\t " + Month.toString(rr1.getMonthNum()) + ", " +
- rr1.getDay().getDayForSimpleTimeZone() + ", " +
- rr1.getDay().getDayOfWeekForSimpleTimeZone() + ", " +
- Time.toFormedString((int)rr1.getTime().getTime())+ ", " +
- rr1.getTime().getTypeForSimpleTimeZone() + ",\n" +
-
- "\t " + Time.toFormedString(rr0.getSave()) + "),\n");
-
- out.write("\t// " + rr0.getLine() + "\n");
- out.write("\t// " + rr1.getLine() + "\n");
- }
-
- String zline = zrec.getLine();
- if (zline.indexOf("Zone") == -1) {
- zline = "Zone " + key + "\t" + zline.trim();
- }
- out.write("\t// " + zline + "\n");
- }
- }
- out.write(" };\n");
-
- out.close();
- fw.close();
- } catch(IOException e) {
- Main.panic("IO error: "+e.getMessage());
- return 1;
- }
-
- return 0;
- }
-}
diff --git a/jdk/make/tools/src/build/tools/javazic/Time.java b/jdk/make/tools/src/build/tools/javazic/Time.java
deleted file mode 100644
index 66458a0020d..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/Time.java
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. 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.javazic;
-
-import java.util.Locale;
-import sun.util.calendar.CalendarDate;
-import sun.util.calendar.CalendarSystem;
-import sun.util.calendar.Gregorian;
-
-/**
- * Time class represents the "AT" field and other time related information.
- *
- * @since 1.4
- */
-class Time {
-
- static final Gregorian gcal = CalendarSystem.getGregorianCalendar();
-
- // type is wall clock time
- private static final int WALL = 1;
-
- // type is standard time
- private static final int STD = 2;
-
- // type is UTC
- private static final int UTC = 3;
-
- // type of representing time
- private int type;
-
- /**
- * Time from the EPOCH in milliseconds
- */
- private long time;
-
- /**
- * Current time in milliseconds
- */
- private static final long currentTime = System.currentTimeMillis();
-
- Time() {
- time = 0L;
- }
-
- Time(long time) {
- this.time = time;
- }
-
- void setType(int type) {
- this.type = type;
- }
-
- long getTime() {
- return time;
- }
-
- int getType() {
- return type;
- }
-
- static long getCurrentTime() {
- return currentTime;
- }
-
- /**
- * @return true if the time is represented in wall-clock time.
- */
- boolean isWall() {
- return type == WALL;
- }
-
- /**
- * @return true if the time is represented in standard time.
- */
- boolean isSTD() {
- return type == STD;
- }
-
- /**
- * @return true if the time is represented in UTC time.
- */
- boolean isUTC() {
- return type == UTC;
- }
-
- /**
- * Converts the type to a string that represents the type in the
- * SimpleTimeZone time mode. (e.g., "SimpleTimeZone.WALL_TIME").
- * @return the converted string or null if the type is undefined.
- */
- String getTypeForSimpleTimeZone() {
- String stz = "SimpleTimeZone.";
- if (isWall()) {
- return stz+"WALL_TIME";
- }
- else if (isSTD()) {
- return stz+"STANDARD_TIME";
- }
- else if (isUTC()) {
- return stz+"UTC_TIME";
- }
- else {
- return null;
- }
- }
-
- /**
- * Converts the given Gregorian calendar field values to local time.
- * Local time is represented by the amount of milliseconds from
- * January 1, 1970 0:00 GMT.
- * @param year the year value
- * @param month the Month value
- * @param day the day represented by {@link RuleDay}
- * @param save the amount of daylight time in milliseconds
- * @param gmtOffset the GMT offset in milliseconds
- * @param time the time of the day represented by {@link Time}
- * @return local time
- */
- static long getLocalTime(int year, Month month, RuleDay day, int save,
- int gmtOffset, Time time) {
- long t = time.getTime();
-
- if (time.isSTD())
- t = time.getTime() + save;
- else if (time.isUTC())
- t = time.getTime() + save + gmtOffset;
-
- return getLocalTime(year, month, day, t);
- }
-
- /**
- * Converts the given Gregorian calendar field values to local time.
- * Local time is represented by the amount of milliseconds from
- * January 1, 1970 0:00 GMT.
- * @param year the year value
- * @param month the Month value
- * @param day the day value
- * @param time the time of the day in milliseconds
- * @return local time
- */
- static long getLocalTime(int year, Month month, int day, long time) {
- CalendarDate date = gcal.newCalendarDate(null);
- date.setDate(year, month.value(), day);
- long millis = gcal.getTime(date);
- return millis + time;
- }
-
- /**
- * Equivalent to getLocalTime(year, month, day, (long)time).
- * @param year the year value
- * @param month the Month value
- * @param day the day value
- * @param time the time of the day in milliseconds
- * @return local time
- */
- static long getLocalTime(int year, Month month, int day, int time) {
- return getLocalTime(year, month, day, (long)time);
- }
-
- /**
- * Equivalent to {@link #getLocalTime(int, Month, RuleDay, int)
- * getLocalTime(year, month, day, (int) time)}.
- * @param year the year value
- * @param month the Month value
- * @param day the day represented by {@link RuleDay}
- * @param time the time of the day represented by {@link Time}
- * @return local time
- */
- static long getLocalTime(int year, Month month, RuleDay day, long time) {
- return getLocalTime(year, month, day, (int) time);
- }
-
- /**
- * Converts the given Gregorian calendar field values to local time.
- * Local time is represented by the amount of milliseconds from
- * January 1, 1970 0:00 GMT.
- * @param year the year value
- * @param month the Month value
- * @param day the day represented by {@link RuleDay}
- * @param time the time of the day represented by {@link Time}
- * @return local time
- */
- static long getLocalTime(int year, Month month, RuleDay day, int time) {
- CalendarDate cdate = gcal.newCalendarDate(null);
- int monthValue = month.value();
-
- if (day.isLast()) { // e.g., "lastSun"
- cdate.setDate(year, monthValue, 1);
- cdate.setDayOfMonth(gcal.getMonthLength(cdate));
- cdate = gcal.getNthDayOfWeek(-1, day.getDayOfWeekNum(), cdate);
- } else if (day.isLater()) { // e.g., "Sun>=1"
- cdate.setDate(year, monthValue, day.getDay());
- cdate = gcal.getNthDayOfWeek(1, day.getDayOfWeekNum(), cdate);
- } else if (day.isExact()) {
- cdate.setDate(year, monthValue, day.getDay());
- } else if (day.isEarlier()) { // e.g., "Sun<=15"
- cdate.setDate(year, monthValue, day.getDay());
- cdate = gcal.getNthDayOfWeek(-1, day.getDayOfWeekNum(), cdate);
- } else {
- Main.panic("invalid day type: " + day);
- }
- return gcal.getTime(cdate) + time;
- }
-
- /**
- * Parses the given "AT" field and constructs a Time object.
- * @param the "AT" field string
- * @return the Time object
- */
- static Time parse(String time) {
- int sign;
- int index = 0;
- Time tm;
-
- if (time.charAt(0) == '-') {
- sign = -1;
- index++;
- } else {
- sign = 1;
- }
- int val = 0;
- int num = 0;
- int countDelim = 0;
- while (index < time.length()) {
- char c = time.charAt(index++);
- if (c == ':') {
- val = val * 60 + num;
- countDelim++;
- num = 0;
- continue;
- }
- int d = Character.digit(c, 10);
- if (d == -1) {
- --index;
- break;
- }
- num = num * 10 + d;
- }
- val = val * 60 + num;
- // convert val to second
- for (; countDelim < 2; countDelim++) {
- val *= 60;
- }
- tm = new Time((long)val * 1000 * sign);
- if (index < time.length()) {
- char c = time.charAt(index++);
- if (c == 's') {
- tm.setType(Time.STD);
- } else if (c == 'u' || c == 'g' || c == 'z') {
- tm.setType(Time.UTC);
- } else if (c == 'w') {
- tm.setType(Time.WALL);
- } else {
- Main.panic("unknown time mode: "+c);
- }
- } else {
- tm.setType(Time.WALL);
- }
- return tm;
- }
-
- /**
- * Converts the given milliseconds string to a "[+-]hh:mm" string.
- * @param ms the milliseconds string
- */
- static String toGMTFormat(String ms) {
- long sec = Long.parseLong(ms) / 1000;
- char sign;
- if (sec < 0) {
- sign = '-';
- sec = -sec;
- } else {
- sign = '+';
- }
- return String.format((Locale)null, "%c%02d:%02d",
- sign, sec/3600, (sec%3600)/60);
- }
-
- /**
- * Converts the given millisecond value to a string for a
- * SimpleTimeZone parameter.
- * @param ms the millisecond value
- * @return the string in a human readable form
- */
- static String toFormedString(int ms) {
- StringBuilder s = new StringBuilder();
- boolean minus = false;
-
- if (ms < 0) {
- s.append("-");
- minus = true;
- ms = -ms;
- } else if (ms == 0) {
- return "0";
- }
-
- int hour = ms / (60 * 60 * 1000);
- ms %= (60 * 60 * 1000);
- int minute = ms / (60 * 1000);
-
- if (hour != 0) {
- if (minus && minute != 0) {
- s.append("(");
- }
- s.append(Integer.toString(hour) + "*ONE_HOUR");
- }
-
- if (minute != 0) {
- if (hour != 0) {
- s.append("+");
- }
- s.append(Integer.toString(minute) + "*ONE_MINUTE");
- if (minus && hour != 0) {
- s.append(")");
- }
- }
-
- return s.toString();
- }
-}
diff --git a/jdk/make/tools/src/build/tools/javazic/Timezone.java b/jdk/make/tools/src/build/tools/javazic/Timezone.java
deleted file mode 100644
index 941ea454563..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/Timezone.java
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
- * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. 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.javazic;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Timezone represents all information of a single point of time to
- * generate its time zone database.
- *
- * @since 1.4
- */
-class Timezone {
- /**
- * zone name of this time zone
- */
- private String name;
-
- /**
- * transition time values in UTC (millisecond)
- */
- private List transitions;
-
- /**
- * All offset values in millisecond
- * @see sun.util.calendar.ZoneInfo
- */
- private List offsets;
-
- /**
- * Indices of GMT offset values (both raw and raw+saving)
- * at transitions
- */
- private List gmtOffsets;
-
- /**
- * Indices of regular or "direct" saving time values
- * at transitions
- */
- private List dstOffsets;
-
- /**
- * Zone records of this time zone
- */
- private List usedZoneRecs;
-
- /**
- * Rule records referred to by this time zone
- */
- private List usedRuleRecs;
-
- /**
- * Type of DST rules in this time zone
- */
- private int dstType;
- static final int UNDEF_DST = 0; // DST type not set yet
- static final int NO_DST = 1; // never observed DST
- static final int LAST_DST = 2; // last rule ends in DST (all year round DST-only)
- static final int X_DST = 3; // used to observe DST
- static final int DST = 4; // observing DST regularly
-
- /**
- * Raw GMT offset of this time zone in the last rule
- */
- private int rawOffset;
-
- /**
- * The CRC32 value of the transitions data
- */
- private int crc32;
-
- /**
- * The last ZoneRec
- */
- private ZoneRec lastZoneRec;
-
- /**
- * The last DST rules. lastRules[0] is the DST start
- * rule. lastRules[1] is the DST end rules.
- */
- private List lastRules;
-
- /**
- * The amount of DST saving value (millisecond) in the last DST
- * rule.
- */
- private int lastSaving;
-
- /**
- * true if the raw offset will change in the future time.
- */
- private boolean willRawOffsetChange = false;
-
-
- /**
- * Constracts a Timezone object with the given zone name.
- * @param name the zone name
- */
- Timezone(String name) {
- this.name = name;
- }
-
- /**
- * @return the number of transitions
- */
- int getNTransitions() {
- if (transitions == null) {
- return 0;
- }
- return transitions.size();
- }
-
- /**
- * @return the zone name
- */
- String getName() {
- return name;
- }
-
- /**
- * Returns the list of all rule records that have been referred to
- * by this time zone.
- * @return the rule records list
- */
- List getRules() {
- return usedRuleRecs;
- }
-
- /**
- * Returns the list of all zone records that have been referred to
- * by this time zone.
- * @return the zone records list
- */
- List getZones() {
- return usedZoneRecs;
- }
-
- /**
- * @return the transition table (list)
- */
- List getTransitions() {
- return transitions;
- }
-
- /**
- * @return the offsets list
- */
- List getOffsets() {
- return offsets;
- }
-
- /**
- * @return the DST saving offsets list
- */
- List getDstOffsets() {
- return dstOffsets;
- }
-
- /**
- * @return the GMT offsets list
- */
- List getGmtOffsets() {
- return gmtOffsets;
- }
-
- /**
- * @return the checksum (crc32) value of the trasition table
- */
- int getCRC32() {
- return crc32;
- }
-
- /**
- * @return true if the GMT offset of this time zone would change
- * after the time zone database has been generated, false, otherwise.
- */
- boolean willGMTOffsetChange() {
- return willRawOffsetChange;
- }
-
- /**
- * @return the last known GMT offset value in milliseconds
- */
- int getRawOffset() {
- return rawOffset;
- }
-
- /**
- * Sets time zone's GMT offset to offset.
- * @param offset the GMT offset value in milliseconds
- */
- void setRawOffset(int offset) {
- rawOffset = offset;
- }
-
- /**
- * Sets time zone's GMT offset value to offset. If
- * startTime is future time, then the {@link
- * #willRawOffsetChange} value is set to true.
- * @param offset the GMT offset value in milliseconds
- * @param startTime the UTC time at which the GMT offset is in effective
- */
- void setRawOffset(int offset, long startTime) {
- // if this rawOffset is for the future time, let the run-time
- // look for the current GMT offset.
- if (startTime > Time.getCurrentTime()) {
- willRawOffsetChange = true;
- }
- setRawOffset(offset);
- }
-
- /**
- * Adds the specified transition information to the end of the transition table.
- * @param time the UTC time at which this transition happens
- * @param offset the total amount of the offset from GMT in milliseconds
- * @param dstOffset the amount of time in milliseconds saved at this transition
- */
- void addTransition(long time, int offset, int dstOffset) {
- if (transitions == null) {
- transitions = new ArrayList();
- offsets = new ArrayList();
- dstOffsets = new ArrayList();
- }
- transitions.add(time);
- offsets.add(offset);
- dstOffsets.add(dstOffset);
- }
-
- /**
- * Sets the type of historical daylight saving time
- * observation. For example, China used to observed daylight
- * saving time, but it no longer does. Then, X_DST is set to the
- * China time zone.
- * @param type the type of daylight saving time
- */
- void setDSTType(int type) {
- dstType = type;
- }
-
- /**
- * @return the type of historical daylight saving time
- * observation.
- */
- int getDSTType() {
- return dstType;
- }
-
- /**
- * Adds the specified zone record to the zone records list.
- * @param rec the zone record
- */
- void addUsedRec(ZoneRec rec) {
- if (usedZoneRecs == null) {
- usedZoneRecs = new ArrayList();
- }
- usedZoneRecs.add(rec);
- }
-
- /**
- * Adds the specified rule record to the rule records list.
- * @param rec the rule record
- */
- void addUsedRec(RuleRec rec) {
- if (usedRuleRecs == null) {
- usedRuleRecs = new ArrayList();
- }
- // if the last used rec is the same as the given rec, avoid
- // putting the same rule.
- int n = usedRuleRecs.size();
- for (int i = 0; i < n; i++) {
- if (usedRuleRecs.get(i).equals(rec)) {
- return;
- }
- }
- usedRuleRecs.add(rec);
- }
-
- /**
- * Sets the last zone record for this time zone.
- * @param the last zone record
- */
- void setLastZoneRec(ZoneRec zrec) {
- lastZoneRec = zrec;
- }
-
- /**
- * @return the last zone record for this time zone.
- */
- ZoneRec getLastZoneRec() {
- return lastZoneRec;
- }
-
- /**
- * Sets the last rule records for this time zone. Those are used
- * for generating SimpleTimeZone parameters.
- * @param rules the last rule records
- */
- void setLastRules(List rules) {
- int n = rules.size();
- if (n > 0) {
- lastRules = rules;
- RuleRec rec = rules.get(0);
- int offset = rec.getSave();
- if (offset > 0) {
- setLastDSTSaving(offset);
- } else {
- System.err.println("\t No DST starting rule in the last rules.");
- }
- }
- }
-
- /**
- * @return the last rule records for this time zone.
- */
- List getLastRules() {
- return lastRules;
- }
-
- /**
- * Sets the last daylight saving amount.
- * @param the daylight saving amount
- */
- void setLastDSTSaving(int offset) {
- lastSaving = offset;
- }
-
- /**
- * @return the last daylight saving amount.
- */
- int getLastDSTSaving() {
- return lastSaving;
- }
-
- /**
- * Calculates the CRC32 value from the transition table and sets
- * the value to crc32.
- */
- void checksum() {
- if (transitions == null) {
- crc32 = 0;
- return;
- }
- Checksum sum = new Checksum();
- for (int i = 0; i < transitions.size(); i++) {
- int offset = offsets.get(i);
- // adjust back to make the transition in local time
- sum.update(transitions.get(i) + offset);
- sum.update(offset);
- sum.update(dstOffsets.get(i));
- }
- crc32 = (int)sum.getValue();
- }
-
- /**
- * Removes unnecessary transitions for Java time zone support.
- */
- void optimize() {
- // if there is only one offset, delete all transitions. This
- // could happen if only time zone abbreviations changed.
- if (gmtOffsets.size() == 1) {
- transitions = null;
- usedRuleRecs = null;
- setDSTType(NO_DST);
- return;
- }
- for (int i = 0; i < (transitions.size() - 2); i++) { // don't remove the last one
- if (transitions.get(i) == transitions.get(i+1)) {
- transitions.remove(i);
- offsets.remove(i);
- dstOffsets.remove(i);
- i--;
- }
- }
-
- for (int i = 0; i < (transitions.size() - 2); i++) { // don't remove the last one
- if (offsets.get(i) == offsets.get(i+1)
- && dstOffsets.get(i) == dstOffsets.get(i+1)) {
- transitions.remove(i+1);
- offsets.remove(i+1);
- dstOffsets.remove(i+1);
- i--;
- }
- }
- }
-
- /**
- * Stores the specified offset value from GMT in the GMT offsets
- * table and returns its index. The offset value includes the base
- * GMT offset and any additional daylight saving if applicable. If
- * the same value as the specified offset is already in the table,
- * its index is returned.
- * @param offset the offset value in milliseconds
- * @return the index to the offset value in the GMT offsets table.
- */
- int getOffsetIndex(int offset) {
- return getOffsetIndex(offset, 0);
- }
-
- /**
- * Stores the specified daylight saving value in the GMT offsets
- * table and returns its index. If the same value as the specified
- * offset is already in the table, its index is returned. If 0 is
- * specified, it's not stored in the table and -1 is returned.
- * @param offset the offset value in milliseconds
- * @return the index to the specified offset value in the GMT
- * offsets table, or -1 if 0 is specified.
- */
- int getDstOffsetIndex(int offset) {
- if (offset == 0) {
- return -1;
- }
- return getOffsetIndex(offset, 1);
- }
-
- private int getOffsetIndex(int offset, int index) {
- if (gmtOffsets == null) {
- gmtOffsets = new ArrayList();
- }
- for (int i = index; i < gmtOffsets.size(); i++) {
- if (offset == gmtOffsets.get(i)) {
- return i;
- }
- }
- if (gmtOffsets.size() < index) {
- gmtOffsets.add(0);
- }
- gmtOffsets.add(offset);
- return gmtOffsets.size() - 1;
- }
-}
diff --git a/jdk/make/tools/src/build/tools/javazic/Zone.java b/jdk/make/tools/src/build/tools/javazic/Zone.java
deleted file mode 100644
index 1f4e7029c15..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/Zone.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. 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.javazic;
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-/**
- * Zone holds information corresponding to a "Zone" part of a time
- * zone definition file.
- *
- * @since 1.4
- */
-class Zone {
- // zone name (e.g., "America/Los_Angeles")
- private String name;
-
- // zone records
- private List list;
-
- // target zone names for this compilation
- private static Set targetZones;
-
- /**
- * Constructs a Zone with the specified zone name.
- * @param name the zone name
- */
- Zone(String name) {
- this.name = name;
- list = new ArrayList();
- }
-
- /**
- * Reads time zone names to be generated, called "target zone
- * name", from the specified text file and creats an internal hash
- * table to keep those names. It's assumed that one text line
- * contains a zone name or comments if it starts with
- * '#'. Comments can't follow a zone name in a single line.
- * @param fileName the text file name
- */
- static void readZoneNames(String fileName) {
- if (fileName == null) {
- return;
- }
- BufferedReader in = null;
- try {
- FileReader fr = new FileReader(fileName);
- in = new BufferedReader(fr);
- } catch (FileNotFoundException e) {
- Main.panic("can't open file: " + fileName);
- }
- targetZones = new HashSet();
- String line;
-
- try {
- while ((line = in.readLine()) != null) {
- line = line.trim();
- if (line.length() == 0 || line.charAt(0) == '#') {
- continue;
- }
- if (!targetZones.add(line)) {
- Main.warning("duplicated target zone name: " + line);
- }
- }
- in.close();
- } catch (IOException e) {
- Main.panic("IO error: "+e.getMessage());
- }
- }
-
- /**
- * Determines whether the specified zone is one of the target zones.
- * If no target zones are specified, this method always returns
- * true for any zone name.
- * @param zoneName the zone name
- * @return true if the specified name is a target zone.
- */
- static boolean isTargetZone(String zoneName) {
- if (targetZones == null) {
- return true;
- }
- return targetZones.contains(zoneName);
- }
-
- /**
- * Forces to add "MET" to the target zone table. This is because
- * there is a conflict between Java zone name "WET" and Olson zone
- * name.
- */
- static void addMET() {
- if (targetZones != null) {
- targetZones.add("MET");
- }
- }
-
- /**
- * @return the zone name
- */
- String getName() {
- return name;
- }
-
- /**
- * Adds the specified zone record to the zone record list.
- */
- void add(ZoneRec rec) {
- list.add(rec);
- }
-
- /**
- * @param index the index at which the zone record in the list is returned.
- * @return the zone record specified by the index.
- */
- ZoneRec get(int index) {
- return list.get(index);
- }
-
- /**
- * @return the size of the zone record list
- */
- int size() {
- return list.size();
- }
-
- /**
- * Resolves the reference to a rule in each zone record.
- * @param zi the Zoneinfo object with which the rule reference is
- * resolved.
- */
- void resolve(Zoneinfo zi) {
- for (int i = 0; i < list.size(); i++) {
- ZoneRec rec = list.get(i);
- rec.resolve(zi);
- }
- }
-}
diff --git a/jdk/make/tools/src/build/tools/javazic/ZoneRec.java b/jdk/make/tools/src/build/tools/javazic/ZoneRec.java
deleted file mode 100644
index b175e0e93d4..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/ZoneRec.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. 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.javazic;
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.StringTokenizer;
-
-/**
- * ZoneRec hold information of time zone corresponding to each text
- * line of the "Zone" part.
- *
- * @since 1.4
- */
-class ZoneRec {
- private int gmtOffset;
- private String ruleName;
- private int directSave;
- private Rule ruleRef;
- private String format;
- private boolean hasUntil;
- private int untilYear;
- private Month untilMonth;
- private RuleDay untilDay;
- private Time untilTime;
- private long untilInMillis;
- private String line;
-
- /**
- * @return the "UNTIL" value in milliseconds
- */
- Time getUntilTime() {
- return untilTime;
- }
-
- /**
- * @return the GMT offset value in milliseconds
- */
- int getGmtOffset() {
- return gmtOffset;
- }
-
- /**
- * @return the rule name to which this zone record refers
- */
- String getRuleName() {
- return ruleName;
- }
-
- /**
- * @return the amount of saving time directly defined in the
- * "RULES/SAVE" field.
- */
- int getDirectSave() {
- return directSave;
- }
-
- /**
- * @return true if this zone record has a reference to a rule
- */
- boolean hasRuleReference() {
- return ruleRef != null;
- }
-
- /**
- * Returns the "FORMAT" field string of this zone record. This
- * @return the "FORMAT" field
- */
- String getFormat() {
- return format;
- }
-
- /**
- * @return the year in the "UNTIL" field
- */
- int getUntilYear() {
- return untilYear;
- }
-
- /**
- * Returns the "UNTIL" field value in milliseconds from Janurary
- * 1, 1970 0:00 GMT.
- * @param currentSave the amount of daylight saving in
- * milliseconds that is used to adjust wall-clock time.
- * @return the milliseconds value of the "UNTIL" field
- */
- long getUntilTime(int currentSave) {
- if (untilTime.isWall()) {
- return untilInMillis - currentSave;
- }
- return untilInMillis;
- }
-
- /**
- * Returns the "UNTIL" time in milliseconds without adjusting GMT
- * offsets or daylight saving.
- * @return local "UNTIL" time in milliseconds
- */
- long getLocalUntilTime() {
- return Time.getLocalTime(untilYear,
- untilMonth,
- untilDay,
- untilTime.getTime());
- }
-
- /**
- * Returns the "UNTIL" time in milliseconds with adjusting GMT offsets and daylight saving.
- * @return the "UNTIL" time after the adjustment
- */
- long getLocalUntilTime(int save, int gmtOffset) {
- return Time.getLocalTime(untilYear,
- untilMonth,
- untilDay,
- save,
- gmtOffset,
- untilTime);
- }
-
- /**
- * @return the text line of this zone record
- */
- String getLine() {
- return line;
- }
-
- /**
- * Sets the specified text line to this zone record
- */
- void setLine(String line) {
- this.line = line;
- }
-
- /**
- * @return true if this zone record has the "UNTIL" field
- */
- boolean hasUntil() {
- return this.hasUntil;
- }
-
- /**
- * Adjusts the "UNTIL" time to GMT offset if this zone record has
- * it. untilTime is not adjusted to daylight saving
- * in this method.
- */
- void adjustTime() {
- if (!hasUntil()) {
- return;
- }
- if (untilTime.isSTD() || untilTime.isWall()) {
- // adjust to gmt offset only here. adjust to real
- // wall-clock time when tracking rules
- untilInMillis -= gmtOffset;
- }
- }
-
- /**
- * @return the reference to the Rule object
- */
- Rule getRuleRef() {
- return ruleRef;
- }
-
- /**
- * Resolves the reference to a Rule and adjusts its "UNTIL" time
- * to GMT offset.
- */
- void resolve(Zoneinfo zi) {
- if (ruleName != null && (!"-".equals(ruleName))) {
- ruleRef = zi.getRule(ruleName);
- }
- adjustTime();
- }
-
- /**
- * Parses a Zone text line that is described by a StringTokenizer.
- * @param tokens represents tokens of a Zone text line
- * @return the zone record produced by parsing the text
- */
- static ZoneRec parse(StringTokenizer tokens) {
- ZoneRec rec = new ZoneRec();
- try {
- rec.gmtOffset = (int) Time.parse(tokens.nextToken()).getTime();
- String token = tokens.nextToken();
- char c = token.charAt(0);
- if (c >= '0' && c <= '9') {
- rec.directSave = (int) Time.parse(token).getTime();
- } else {
- rec.ruleName = token;
- }
- rec.format = tokens.nextToken();
- if (tokens.hasMoreTokens()) {
- rec.hasUntil = true;
- rec.untilYear = Integer.parseInt(tokens.nextToken());
- if (tokens.hasMoreTokens()) {
- rec.untilMonth = Month.parse(tokens.nextToken());
- } else {
- rec.untilMonth = Month.JANUARY;
- }
- if (tokens.hasMoreTokens()) {
- rec.untilDay = RuleDay.parse(tokens.nextToken());
- } else {
- rec.untilDay = new RuleDay(1);
- }
- if (tokens.hasMoreTokens()) {
- rec.untilTime = Time.parse(tokens.nextToken());
- } else {
- rec.untilTime = Time.parse("0:00");
- }
- rec.untilInMillis = rec.getLocalUntilTime();
- }
- } catch (Exception e) {
- // TODO: error reporting
- e.printStackTrace();
- }
- return rec;
- }
-
- private static void panic(String msg) {
- Main.panic(msg);
- }
-}
diff --git a/jdk/make/tools/src/build/tools/javazic/Zoneinfo.java b/jdk/make/tools/src/build/tools/javazic/Zoneinfo.java
deleted file mode 100644
index 129f87c57d2..00000000000
--- a/jdk/make/tools/src/build/tools/javazic/Zoneinfo.java
+++ /dev/null
@@ -1,569 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. 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.javazic;
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-/**
- * Zoneinfo provides javazic compiler front-end functionality.
- * @since 1.4
- */
-class Zoneinfo {
-
- private static final int minYear = 1900;
- private static final int maxYear = 2037;
- private static final long minTime = Time.getLocalTime(minYear, Month.JANUARY, 1, 0);
- private static int startYear = minYear;
- private static int endYear = maxYear;
-
- /**
- * True if javazic should generate a list of SimpleTimeZone
- * instances for the SimpleTimeZone-based time zone support.
- */
- static boolean isYearForTimeZoneDataSpecified = false;
-
- /**
- * Zone name to Zone mappings
- */
- private Map zones;
-
- /**
- * Rule name to Rule mappings
- */
- private Map rules;
-
- /**
- * Alias name to real name mappings
- */
- private Map aliases;
-
- /**
- * Constracts a Zoneinfo.
- */
- Zoneinfo() {
- zones = new HashMap();
- rules = new HashMap();
- aliases = new HashMap();
- }
-
- /**
- * Adds the given zone to the list of Zones.
- * @param zone Zone to be added to the list.
- */
- void add(Zone zone) {
- String name = zone.getName();
- zones.put(name, zone);
- }
-
- /**
- * Adds the given rule to the list of Rules.
- * @param rule Rule to be added to the list.
- */
- void add(Rule rule) {
- String name = rule.getName();
- rules.put(name, rule);
- }
-
- /**
- * Puts the specifid name pair to the alias table.
- * @param name1 an alias time zone name
- * @param name2 the real time zone of the alias name
- */
- void putAlias(String name1, String name2) {
- aliases.put(name1, name2);
- }
-
- /**
- * Sets the given year for SimpleTimeZone list output.
- * This method is called when the -S option is specified.
- * @param year the year for which SimpleTimeZone list should be generated
- */
- static void setYear(int year) {
- setStartYear(year);
- setEndYear(year);
- isYearForTimeZoneDataSpecified = true;
- }
-
- /**
- * Sets the start year.
- * @param year the start year value
- * @throws IllegalArgumentException if the specified year value is
- * smaller than the minimum year or greater than the end year.
- */
- static void setStartYear(int year) {
- if (year < minYear || year > endYear) {
- throw new IllegalArgumentException("invalid start year specified: " + year);
- }
- startYear = year;
- }
-
- /**
- * @return the start year value
- */
- static int getStartYear() {
- return startYear;
- }
-
- /**
- * Sets the end year.
- * @param year the end year value
- * @throws IllegalArgumentException if the specified year value is
- * smaller than the start year or greater than the maximum year.
- */
- static void setEndYear(int year) {
- if (year < startYear || year > maxYear) {
- throw new IllegalArgumentException();
- }
- endYear = year;
- }
-
- /**
- * @return the end year value
- */
- static int getEndYear() {
- return endYear;
- }
-
- /**
- * @return the minimum year value
- */
- static int getMinYear() {
- return minYear;
- }
-
- /**
- * @return the maximum year value
- */
- static int getMaxYear() {
- return maxYear;
- }
-
- /**
- * @return the alias table
- */
- Map getAliases() {
- return aliases;
- }
-
- /**
- * @return the Zone list
- */
- Map getZones() {
- return zones;
- }
-
- /**
- * @return a Zone specified by name.
- * @param name a zone name
- */
- Zone getZone(String name) {
- return zones.get(name);
- }
-
- /**
- * @return a Rule specified by name.
- * @param name a rule name
- */
- Rule getRule(String name) {
- return rules.get(name);
- }
-
- private static String line;
-
- private static int lineNum;
-
- /**
- * Parses the specified time zone data file and creates a Zoneinfo
- * that has all Rules, Zones and Links (aliases) information.
- * @param fname the time zone data file name
- * @return a Zoneinfo object
- */
- static Zoneinfo parse(String fname) {
- BufferedReader in = null;
- try {
- FileReader fr = new FileReader(fname);
- in = new BufferedReader(fr);
- } catch (FileNotFoundException e) {
- panic("can't open file: "+fname);
- }
- Zoneinfo zi = new Zoneinfo();
- boolean continued = false;
- Zone zone = null;
- String l;
- lineNum = 0;
-
- try {
- while ((line = in.readLine()) != null) {
- lineNum++;
- // skip blank and comment lines
- if (line.length() == 0 || line.charAt(0) == '#') {
- continue;
- }
-
- // trim trailing comments
- int rindex = line.lastIndexOf('#');
- if (rindex != -1) {
- // take the data part of the line
- l = line.substring(0, rindex);
- } else {
- l = line;
- }
-
- StringTokenizer tokens = new StringTokenizer(l);
- if (!tokens.hasMoreTokens()) {
- continue;
- }
- String token = tokens.nextToken();
-
- if (continued || "Zone".equals(token)) {
- if (zone == null) {
- if (!tokens.hasMoreTokens()) {
- panic("syntax error: zone no more token");
- }
- token = tokens.nextToken();
- // if the zone name is in "GMT+hh" or "GMT-hh"
- // format, ignore it due to spec conflict.
- if (token.startsWith("GMT+") || token.startsWith("GMT-")) {
- continue;
- }
- zone = new Zone(token);
- } else {
- // no way to push the current token back...
- tokens = new StringTokenizer(l);
- }
-
- ZoneRec zrec = ZoneRec.parse(tokens);
- zrec.setLine(line);
- zone.add(zrec);
- if ((continued = zrec.hasUntil()) == false) {
- if (Zone.isTargetZone(zone.getName())) {
- // zone.resolve(zi);
- zi.add(zone);
- }
- zone = null;
- }
- } else if ("Rule".equals(token)) {
- if (!tokens.hasMoreTokens()) {
- panic("syntax error: rule no more token");
- }
- token = tokens.nextToken();
- Rule rule = zi.getRule(token);
- if (rule == null) {
- rule = new Rule(token);
- zi.add(rule);
- }
- RuleRec rrec = RuleRec.parse(tokens);
- rrec.setLine(line);
- rule.add(rrec);
- } else if ("Link".equals(token)) {
- // Link
- try {
- String name1 = tokens.nextToken();
- String name2 = tokens.nextToken();
-
- // if the zone name is in "GMT+hh" or "GMT-hh"
- // format, ignore it due to spec conflict with
- // custom time zones. Also, ignore "ROC" for
- // PC-ness.
- if (name2.startsWith("GMT+") || name2.startsWith("GMT-")
- || "ROC".equals(name2)) {
- continue;
- }
- zi.putAlias(name2, name1);
- } catch (Exception e) {
- panic("syntax error: no more token for Link");
- }
- }
- }
- in.close();
- } catch (IOException ex) {
- panic("IO error: " + ex.getMessage());
- }
-
- return zi;
- }
-
- /**
- * Interprets a zone and constructs a Timezone object that
- * contains enough information on GMT offsets and DST schedules to
- * generate a zone info database.
- *
- * @param zoneName the zone name for which a Timezone object is
- * constructed.
- *
- * @return a Timezone object that contains all GMT offsets and DST
- * rules information.
- */
- Timezone phase2(String zoneName) {
- Timezone tz = new Timezone(zoneName);
- Zone zone = getZone(zoneName);
- zone.resolve(this);
-
- // TODO: merge phase2's for the regular and SimpleTimeZone ones.
- if (isYearForTimeZoneDataSpecified) {
- ZoneRec zrec = zone.get(zone.size()-1);
- tz.setLastZoneRec(zrec);
- tz.setRawOffset(zrec.getGmtOffset());
- if (zrec.hasRuleReference()) {
- /*
- * This part assumes that the specified year is covered by
- * the rules referred to by the last zone record.
- */
- List rrecs = zrec.getRuleRef().getRules(startYear);
-
- if (rrecs.size() == 2) {
- // make sure that one is a start rule and the other is
- // an end rule.
- RuleRec r0 = rrecs.get(0);
- RuleRec r1 = rrecs.get(1);
- if (r0.getSave() == 0 && r1.getSave() > 0) {
- rrecs.set(0, r1);
- rrecs.set(1, r0);
- } else if (!(r0.getSave() > 0 && r1.getSave() == 0)) {
- rrecs = null;
- Main.error(zoneName + ": rules for " + startYear + " not found.");
- }
- } else {
- rrecs = null;
- }
- if (rrecs != null) {
- tz.setLastRules(rrecs);
- }
- }
- return tz;
- }
-
- int gmtOffset;
- int year = minYear;
- int fromYear = year;
- long fromTime = Time.getLocalTime(startYear,
- Month.JANUARY,
- 1, 0);
-
- // take the index 0 for the GMT offset of the last zone record
- ZoneRec zrec = zone.get(zone.size()-1);
- tz.getOffsetIndex(zrec.getGmtOffset());
-
- int currentSave = 0;
- boolean usedZone;
- for (int zindex = 0; zindex < zone.size(); zindex++) {
- zrec = zone.get(zindex);
- usedZone = false;
- gmtOffset = zrec.getGmtOffset();
- int stdOffset = zrec.getDirectSave();
-
- // If this is the last zone record, take the last rule info.
- if (!zrec.hasUntil()) {
- tz.setRawOffset(gmtOffset, fromTime);
- if (zrec.hasRuleReference()) {
- tz.setLastRules(zrec.getRuleRef().getLastRules());
- } else if (stdOffset != 0) {
- // in case the last rule is all year round DST-only
- // (Asia/Amman once announced this rule.)
- tz.setLastDSTSaving(stdOffset);
- }
- }
- if (!zrec.hasRuleReference()) {
- if (!zrec.hasUntil() || zrec.getUntilTime(stdOffset) >= fromTime) {
- tz.addTransition(fromTime,
- tz.getOffsetIndex(gmtOffset+stdOffset),
- tz.getDstOffsetIndex(stdOffset));
- usedZone = true;
- }
- currentSave = stdOffset;
- // optimization in case the last rule is fixed.
- if (!zrec.hasUntil()) {
- if (tz.getNTransitions() > 0) {
- if (stdOffset == 0) {
- tz.setDSTType(Timezone.X_DST);
- } else {
- tz.setDSTType(Timezone.LAST_DST);
- }
- long time = Time.getLocalTime(maxYear,
- Month.JANUARY, 1, 0);
- time -= zrec.getGmtOffset();
- tz.addTransition(time,
- tz.getOffsetIndex(gmtOffset+stdOffset),
- tz.getDstOffsetIndex(stdOffset));
- tz.addUsedRec(zrec);
- } else {
- tz.setDSTType(Timezone.NO_DST);
- }
- break;
- }
- } else {
- Rule rule = zrec.getRuleRef();
- boolean fromTimeUsed = false;
- currentSave = 0;
- year_loop:
- for (year = getMinYear(); year <= endYear; year++) {
- if (zrec.hasUntil() && year > zrec.getUntilYear()) {
- break;
- }
- List rules = rule.getRules(year);
- if (rules.size() > 0) {
- for (int i = 0; i < rules.size(); i++) {
- RuleRec rrec = rules.get(i);
- long transition = rrec.getTransitionTime(year,
- gmtOffset,
- currentSave);
- if (zrec.hasUntil()) {
- if (transition >= zrec.getUntilTime(currentSave)) {
- break year_loop;
- }
- }
-
- if (fromTimeUsed == false) {
- if (fromTime <= transition) {
- fromTimeUsed = true;
-
- if (fromTime != minTime) {
- int prevsave;
-
- ZoneRec prevzrec = zone.get(zindex - 1);
-
- // See if until time in the previous
- // ZoneRec is the same thing as the
- // local time in the next rule.
- // (examples are Asia/Ashkhabad in 1991,
- // Europe/Riga in 1989)
-
- if (i > 0) {
- prevsave = rules.get(i-1).getSave();
- } else {
- List prevrules = rule.getRules(year-1);
-
- if (prevrules.size() > 0) {
- prevsave = prevrules.get(prevrules.size()-1).getSave();
- } else {
- prevsave = 0;
- }
- }
-
- if (rrec.isSameTransition(prevzrec, prevsave, gmtOffset)) {
- currentSave = rrec.getSave();
- tz.addTransition(fromTime,
- tz.getOffsetIndex(gmtOffset+currentSave),
- tz.getDstOffsetIndex(currentSave));
- tz.addUsedRec(rrec);
- usedZone = true;
- continue;
- }
- if (!prevzrec.hasRuleReference()
- || rule != prevzrec.getRuleRef()
- || (rule == prevzrec.getRuleRef()
- && gmtOffset != prevzrec.getGmtOffset())) {
- int save = (fromTime == transition) ? rrec.getSave() : currentSave;
- tz.addTransition(fromTime,
- tz.getOffsetIndex(gmtOffset+save),
- tz.getDstOffsetIndex(save));
- tz.addUsedRec(rrec);
- usedZone = true;
- }
- } else { // fromTime == minTime
- int save = rrec.getSave();
- tz.addTransition(minTime,
- tz.getOffsetIndex(gmtOffset),
- tz.getDstOffsetIndex(0));
-
- tz.addTransition(transition,
- tz.getOffsetIndex(gmtOffset+save),
- tz.getDstOffsetIndex(save));
-
- tz.addUsedRec(rrec);
- usedZone = true;
- }
- } else if (year == fromYear && i == rules.size()-1) {
- int save = rrec.getSave();
- tz.addTransition(fromTime,
- tz.getOffsetIndex(gmtOffset+save),
- tz.getDstOffsetIndex(save));
- }
- }
-
- currentSave = rrec.getSave();
- if (fromTime < transition) {
- tz.addTransition(transition,
- tz.getOffsetIndex(gmtOffset+currentSave),
- tz.getDstOffsetIndex(currentSave));
- tz.addUsedRec(rrec);
- usedZone = true;
- }
- }
- } else {
- if (year == fromYear) {
- tz.addTransition(fromTime,
- tz.getOffsetIndex(gmtOffset+currentSave),
- tz.getDstOffsetIndex(currentSave));
- fromTimeUsed = true;
- }
- if (year == endYear && !zrec.hasUntil()) {
- if (tz.getNTransitions() > 0) {
- // Assume that this Zone stopped DST
- tz.setDSTType(Timezone.X_DST);
- long time = Time.getLocalTime(maxYear, Month.JANUARY,
- 1, 0);
- time -= zrec.getGmtOffset();
- tz.addTransition(time,
- tz.getOffsetIndex(gmtOffset),
- tz.getDstOffsetIndex(0));
- usedZone = true;
- } else {
- tz.setDSTType(Timezone.NO_DST);
- }
- }
- }
- }
- }
- if (usedZone) {
- tz.addUsedRec(zrec);
- }
- if (zrec.hasUntil() && zrec.getUntilTime(currentSave) > fromTime) {
- fromTime = zrec.getUntilTime(currentSave);
- fromYear = zrec.getUntilYear();
- year = zrec.getUntilYear();
- }
- }
-
- if (tz.getDSTType() == Timezone.UNDEF_DST) {
- tz.setDSTType(Timezone.DST);
- }
- tz.optimize();
- tz.checksum();
- return tz;
- }
-
- private static void panic(String msg) {
- Main.panic(msg);
- }
-}
diff --git a/jdk/makefiles/CompileLaunchers.gmk b/jdk/makefiles/CompileLaunchers.gmk
index 170dc164ec4..501c986082e 100644
--- a/jdk/makefiles/CompileLaunchers.gmk
+++ b/jdk/makefiles/CompileLaunchers.gmk
@@ -311,6 +311,9 @@ $(eval $(call SetupLauncher,jps,\
$(eval $(call SetupLauncher,jrunscript,\
-DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "com.sun.tools.script.shell.Main"$(COMMA) }'))
+$(eval $(call SetupLauncher,jjs,\
+ -DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "jdk.nashorn.tools.Shell"$(COMMA) }'))
+
$(eval $(call SetupLauncher,jsadebugd,\
-DJAVA_ARGS='{ "-J-ms8m"$(COMMA) "sun.jvm.hotspot.jdi.SADebugServer"$(COMMA) }' \
-DAPP_CLASSPATH='{ "/lib/tools.jar"$(COMMA) "/lib/sa-jdi.jar"$(COMMA) "/classes" }' \
diff --git a/jdk/makefiles/CompileNativeLibraries.gmk b/jdk/makefiles/CompileNativeLibraries.gmk
index 9b38b5aba79..9df22fe8b6a 100644
--- a/jdk/makefiles/CompileNativeLibraries.gmk
+++ b/jdk/makefiles/CompileNativeLibraries.gmk
@@ -1219,7 +1219,7 @@ ifdef OPENJDK
OUTPUT_DIR:=$(INSTALL_LIBRARIES_HERE),\
SRC:=$(JDK_TOPDIR)/src/share/native/sun/java2d/cmm/lcms,\
LANG:=C,\
- OPTIMIZATION:=LOW, \
+ OPTIMIZATION:=HIGHEST, \
CFLAGS:=$(filter-out -xc99=%none,$(CFLAGS_JDKLIB)) \
$(SHARED_LIBRARY_FLAGS) \
-I$(JDK_TOPDIR)/src/share/native/sun/java2d \
diff --git a/jdk/makefiles/CreateJars.gmk b/jdk/makefiles/CreateJars.gmk
index 7e33790d299..82b85dc97f3 100644
--- a/jdk/makefiles/CreateJars.gmk
+++ b/jdk/makefiles/CreateJars.gmk
@@ -213,28 +213,28 @@ RT_JAR_EXCLUDES += \
org/relaxng/datatype \
sun/awt/HKSCS.class \
sun/awt/motif/X11GB2312.class \
- sun/awt/motif/X11GB2312\$$$$Decoder.class \
- sun/awt/motif/X11GB2312\$$$$Encoder.class \
+ sun/awt/motif/X11GB2312\$$Decoder.class \
+ sun/awt/motif/X11GB2312\$$Encoder.class \
sun/awt/motif/X11GBK.class \
- sun/awt/motif/X11GBK\$$$$Encoder.class \
+ sun/awt/motif/X11GBK\$$Encoder.class \
sun/awt/motif/X11KSC5601.class \
- sun/awt/motif/X11KSC5601\$$$$Decoder.class \
- sun/awt/motif/X11KSC5601\$$$$Encoder.class \
+ sun/awt/motif/X11KSC5601\$$Decoder.class \
+ sun/awt/motif/X11KSC5601\$$Encoder.class \
sun/jvmstat \
sun/net/spi/nameservice/dns \
sun/nio/cs/ext \
sun/rmi/rmic \
sun/security/ec/ECDHKeyAgreement.class \
sun/security/ec/ECDSASignature.class \
- sun/security/ec/ECDSASignature\$$$$Raw.class \
- sun/security/ec/ECDSASignature\$$$$SHA1.class \
- sun/security/ec/ECDSASignature\$$$$SHA224.class \
- sun/security/ec/ECDSASignature\$$$$SHA256.class \
- sun/security/ec/ECDSASignature\$$$$SHA384.class \
- sun/security/ec/ECDSASignature\$$$$SHA512.class \
+ sun/security/ec/ECDSASignature\$$Raw.class \
+ sun/security/ec/ECDSASignature\$$SHA1.class \
+ sun/security/ec/ECDSASignature\$$SHA224.class \
+ sun/security/ec/ECDSASignature\$$SHA256.class \
+ sun/security/ec/ECDSASignature\$$SHA384.class \
+ sun/security/ec/ECDSASignature\$$SHA512.class \
sun/security/ec/ECKeyFactory.class \
sun/security/ec/ECKeyPairGenerator.class \
- sun/security/ec/SunEC\$$$$1.class \
+ sun/security/ec/SunEC\$$1.class \
sun/security/ec/SunEC.class \
sun/security/ec/SunECEntries.class \
sun/security/internal \
@@ -1119,6 +1119,14 @@ endif
##########################################################################################
+# Import nashorn.jar from nashorn dist dir.
+$(IMAGES_OUTPUTDIR)/lib/ext/nashorn.jar: $(NASHORN_DIST)/nashorn.jar
+ $(install-file)
+
+JARS += $(IMAGES_OUTPUTDIR)/lib/ext/nashorn.jar
+
+##########################################################################################
+
-include $(CUSTOM_MAKE_DIR)/CreateJars.gmk
##########################################################################################
diff --git a/jdk/makefiles/Images.gmk b/jdk/makefiles/Images.gmk
index 8dedfaec3d0..4a3a23525d1 100644
--- a/jdk/makefiles/Images.gmk
+++ b/jdk/makefiles/Images.gmk
@@ -609,6 +609,7 @@ define create-info-file
$(call info-file-item, "OS_NAME", "$(REQUIRED_OS_NAME)")
$(call info-file-item, "OS_VERSION", "$(REQUIRED_OS_VERSION)")
$(call info-file-item, "OS_ARCH", "$(OPENJDK_TARGET_CPU_LEGACY)")
+ if [ -n "$(JDK_ARCH_ABI_PROP_NAME)" ]; then $(call info-file-item, "SUN_ARCH_ABI", "$(JDK_ARCH_ABI_PROP_NAME)"); fi
$(call info-file-item, "SOURCE", "$(ALL_SOURCE_TIPS)")
endef
diff --git a/jdk/makefiles/mapfiles/liblcms/mapfile-vers b/jdk/makefiles/mapfiles/liblcms/mapfile-vers
index 04703dffc5a..024511423d3 100644
--- a/jdk/makefiles/mapfiles/liblcms/mapfile-vers
+++ b/jdk/makefiles/mapfiles/liblcms/mapfile-vers
@@ -27,13 +27,12 @@
SUNWprivate_1.1 {
global:
- Java_sun_java2d_cmm_lcms_LCMS_loadProfile;
- Java_sun_java2d_cmm_lcms_LCMS_freeProfile;
+ Java_sun_java2d_cmm_lcms_LCMS_loadProfileNative;
+ Java_sun_java2d_cmm_lcms_LCMS_freeProfileNative;
Java_sun_java2d_cmm_lcms_LCMS_getProfileSize;
Java_sun_java2d_cmm_lcms_LCMS_getProfileData;
- Java_sun_java2d_cmm_lcms_LCMS_getTagSize;
- Java_sun_java2d_cmm_lcms_LCMS_getTagData;
- Java_sun_java2d_cmm_lcms_LCMS_setTagData;
+ Java_sun_java2d_cmm_lcms_LCMS_getTagNative;
+ Java_sun_java2d_cmm_lcms_LCMS_setTagDataNative;
Java_sun_java2d_cmm_lcms_LCMS_colorConvert;
Java_sun_java2d_cmm_lcms_LCMS_getProfileID;
Java_sun_java2d_cmm_lcms_LCMS_initLCMS;
diff --git a/jdk/makefiles/profile-rtjar-includes.txt b/jdk/makefiles/profile-rtjar-includes.txt
index 4722727ea31..4cc528e67d5 100644
--- a/jdk/makefiles/profile-rtjar-includes.txt
+++ b/jdk/makefiles/profile-rtjar-includes.txt
@@ -349,6 +349,7 @@ PROFILE_3_RTJAR_INCLUDE_PACKAGES := \
com/sun/rowset/providers \
com/sun/script/javascript \
com/sun/script/util \
+ com/sun/security/auth \
com/sun/security/auth/callback \
com/sun/security/auth/login \
com/sun/security/auth/module \
@@ -448,8 +449,7 @@ PROFILE_3_RTJAR_INCLUDE_PACKAGES := \
sun/tracing \
sun/tracing/dtrace
-PROFILE_3_RTJAR_INCLUDE_TYPES := \
- com/sun/security/auth/*.class
+PROFILE_3_RTJAR_INCLUDE_TYPES :=
PROFILE_3_RTJAR_EXCLUDE_TYPES := \
javax/management/remote/rmi/_RMIConnectionImpl_Tie.class \
@@ -457,10 +457,10 @@ PROFILE_3_RTJAR_EXCLUDE_TYPES := \
javax/management/remote/rmi/_RMIServerImpl_Tie.class \
javax/management/remote/rmi/_RMIServer_Stub.class \
com/sun/security/auth/callback/DialogCallbackHandler.class \
- com/sun/security/auth/callback/DialogCallbackHandler\$$$$1.class \
- com/sun/security/auth/callback/DialogCallbackHandler\$$$$2.class \
- com/sun/security/auth/callback/DialogCallbackHandler\$$$$Action.class \
- com/sun/security/auth/callback/DialogCallbackHandler\$$$$ConfirmationInfo.class
+ com/sun/security/auth/callback/DialogCallbackHandler\$$1.class \
+ com/sun/security/auth/callback/DialogCallbackHandler\$$2.class \
+ com/sun/security/auth/callback/DialogCallbackHandler\$$Action.class \
+ com/sun/security/auth/callback/DialogCallbackHandler\$$ConfirmationInfo.class
PROFILE_3_INCLUDE_METAINF_SERVICES := \
META-INF/services/javax.script.ScriptEngineFactory
diff --git a/jdk/src/macosx/classes/com/apple/laf/AquaComboBoxUI.java b/jdk/src/macosx/classes/com/apple/laf/AquaComboBoxUI.java
index a4831d29ea9..8e8527f6541 100644
--- a/jdk/src/macosx/classes/com/apple/laf/AquaComboBoxUI.java
+++ b/jdk/src/macosx/classes/com/apple/laf/AquaComboBoxUI.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -34,7 +34,6 @@ import javax.swing.border.Border;
import javax.swing.event.*;
import javax.swing.plaf.*;
import javax.swing.plaf.basic.*;
-import com.apple.laf.ClientPropertyApplicator;
import com.apple.laf.ClientPropertyApplicator.Property;
import apple.laf.JRSUIConstants.Size;
@@ -142,35 +141,46 @@ public class AquaComboBoxUI extends BasicComboBoxUI implements Sizeable {
return new AquaComboBoxEditor();
}
- class AquaComboBoxEditor extends BasicComboBoxEditor implements UIResource, DocumentListener {
- protected AquaComboBoxEditor() {
+ final class AquaComboBoxEditor extends BasicComboBoxEditor
+ implements UIResource, DocumentListener {
+
+ AquaComboBoxEditor() {
super();
editor = new AquaCustomComboTextField();
editor.addFocusListener(this);
editor.getDocument().addDocumentListener(this);
}
+ @Override
public void focusGained(final FocusEvent e) {
- arrowButton.repaint();
+ if (arrowButton != null) {
+ arrowButton.repaint();
+ }
}
+ @Override
public void focusLost(final FocusEvent e) {
- arrowButton.repaint();
+ if (arrowButton != null) {
+ arrowButton.repaint();
+ }
}
+ @Override
public void changedUpdate(final DocumentEvent e) {
editorTextChanged();
}
+ @Override
public void insertUpdate(final DocumentEvent e) {
editorTextChanged();
}
+ @Override
public void removeUpdate(final DocumentEvent e) {
editorTextChanged();
}
- protected void editorTextChanged() {
+ private void editorTextChanged() {
if (!popup.isVisible()) return;
final Object text = editor.getText();
diff --git a/jdk/src/macosx/classes/sun/awt/CGraphicsConfig.java b/jdk/src/macosx/classes/sun/awt/CGraphicsConfig.java
index fb37d01209c..055af2edb22 100644
--- a/jdk/src/macosx/classes/sun/awt/CGraphicsConfig.java
+++ b/jdk/src/macosx/classes/sun/awt/CGraphicsConfig.java
@@ -53,7 +53,7 @@ public abstract class CGraphicsConfig extends GraphicsConfiguration
@Override
public Rectangle getBounds() {
- final Rectangle2D nativeBounds = nativeGetBounds(device.getCoreGraphicsScreen());
+ final Rectangle2D nativeBounds = nativeGetBounds(device.getCGDisplayID());
return nativeBounds.getBounds(); // does integer rounding
}
diff --git a/jdk/src/macosx/classes/sun/awt/CGraphicsDevice.java b/jdk/src/macosx/classes/sun/awt/CGraphicsDevice.java
index bcb24ea46f7..1a5e22af582 100644
--- a/jdk/src/macosx/classes/sun/awt/CGraphicsDevice.java
+++ b/jdk/src/macosx/classes/sun/awt/CGraphicsDevice.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -25,11 +25,12 @@
package sun.awt;
-import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsDevice;
-import java.awt.Window;
import java.awt.AWTPermission;
import java.awt.DisplayMode;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+import java.awt.Insets;
+import java.awt.Window;
import java.util.Objects;
import sun.java2d.opengl.CGLGraphicsConfig;
@@ -58,9 +59,12 @@ public final class CGraphicsDevice extends GraphicsDevice {
}
/**
+ * Returns CGDirectDisplayID, which is the same id as @"NSScreenNumber" in
+ * NSScreen.
+ *
* @return CoreGraphics display id.
*/
- public int getCoreGraphicsScreen() {
+ public int getCGDisplayID() {
return displayID;
}
@@ -107,8 +111,9 @@ public final class CGraphicsDevice extends GraphicsDevice {
return nativeGetYResolution(displayID);
}
- private static native double nativeGetXResolution(int displayID);
- private static native double nativeGetYResolution(int displayID);
+ public Insets getScreenInsets() {
+ return nativeGetScreenInsets(displayID);
+ }
/**
* Enters full-screen mode, or returns to windowed mode.
@@ -214,9 +219,15 @@ public final class CGraphicsDevice extends GraphicsDevice {
return nativeGetDisplayModes(displayID);
}
- private native void nativeSetDisplayMode(int displayID, int w, int h, int bpp, int refrate);
+ private static native void nativeSetDisplayMode(int displayID, int w, int h, int bpp, int refrate);
- private native DisplayMode nativeGetDisplayMode(int displayID);
+ private static native DisplayMode nativeGetDisplayMode(int displayID);
- private native DisplayMode[] nativeGetDisplayModes(int displayID);
+ private static native DisplayMode[] nativeGetDisplayModes(int displayID);
+
+ private static native double nativeGetXResolution(int displayID);
+
+ private static native double nativeGetYResolution(int displayID);
+
+ private static native Insets nativeGetScreenInsets(int displayID);
}
diff --git a/jdk/src/macosx/classes/sun/font/CStrike.java b/jdk/src/macosx/classes/sun/font/CStrike.java
index 61fe234cb29..9635b85a1de 100644
--- a/jdk/src/macosx/classes/sun/font/CStrike.java
+++ b/jdk/src/macosx/classes/sun/font/CStrike.java
@@ -500,7 +500,10 @@ public class CStrike extends FontStrike {
final Iterator i = generalCache.values().iterator();
while (i.hasNext()) {
final long longValue = i.next().longValue();
- if (longValue != -1 && longValue != 0) StrikeCache.freeLongPointer(longValue);
+ if (longValue != -1 && longValue != 0) {
+ removeGlyphInfoFromCache(longValue);
+ StrikeCache.freeLongPointer(longValue);
+ }
}
}
@@ -512,7 +515,10 @@ public class CStrike extends FontStrike {
private static void disposeLongArray(final long[] longArray) {
for (int i = 0; i < longArray.length; i++) {
final long ptr = longArray[i];
- if (ptr != 0 && ptr != -1) StrikeCache.freeLongPointer(ptr); // free's the native struct pointer
+ if (ptr != 0 && ptr != -1) {
+ removeGlyphInfoFromCache(ptr);
+ StrikeCache.freeLongPointer(ptr); // free's the native struct pointer
+ }
}
}
diff --git a/jdk/src/macosx/classes/sun/font/CStrikeDisposer.java b/jdk/src/macosx/classes/sun/font/CStrikeDisposer.java
index 7357ea6bd42..661bd6a7b42 100644
--- a/jdk/src/macosx/classes/sun/font/CStrikeDisposer.java
+++ b/jdk/src/macosx/classes/sun/font/CStrikeDisposer.java
@@ -85,4 +85,6 @@ class CStrikeDisposer extends FontStrikeDisposer {
}
private native void freeNativeScalerContext(long pContext);
+
+ protected static native void removeGlyphInfoFromCache(long glyphInfo);
}
diff --git a/jdk/src/macosx/classes/sun/java2d/opengl/CGLGraphicsConfig.java b/jdk/src/macosx/classes/sun/java2d/opengl/CGLGraphicsConfig.java
index 230f7057927..c8539a8e3f6 100644
--- a/jdk/src/macosx/classes/sun/java2d/opengl/CGLGraphicsConfig.java
+++ b/jdk/src/macosx/classes/sun/java2d/opengl/CGLGraphicsConfig.java
@@ -80,10 +80,8 @@ public final class CGLGraphicsConfig extends CGraphicsConfig
private ContextCapabilities oglCaps;
private OGLContext context;
private final Object disposerReferent = new Object();
-
- public static native int getDefaultPixFmt(int screennum);
private static native boolean initCGL();
- private static native long getCGLConfigInfo(int screennum, int visualnum,
+ private static native long getCGLConfigInfo(int displayID, int visualnum,
int swapInterval);
private static native int getOGLCapabilities(long configInfo);
@@ -137,15 +135,16 @@ public final class CGLGraphicsConfig extends CGraphicsConfig
// Java-level context and flush the queue...
OGLContext.invalidateCurrentContext();
- cfginfo = getCGLConfigInfo(device.getCoreGraphicsScreen(), pixfmt,
+ cfginfo = getCGLConfigInfo(device.getCGDisplayID(), pixfmt,
kOpenGLSwapInterval);
-
- OGLContext.setScratchSurface(cfginfo);
- rq.flushAndInvokeNow(new Runnable() {
- public void run() {
- ids[0] = OGLContext.getOGLIdString();
- }
- });
+ if (cfginfo != 0L) {
+ OGLContext.setScratchSurface(cfginfo);
+ rq.flushAndInvokeNow(new Runnable() {
+ public void run() {
+ ids[0] = OGLContext.getOGLIdString();
+ }
+ });
+ }
} finally {
rq.unlock();
}
@@ -253,8 +252,8 @@ public final class CGLGraphicsConfig extends CGraphicsConfig
@Override
public String toString() {
- int screen = getDevice().getCoreGraphicsScreen();
- return ("CGLGraphicsConfig[dev="+screen+",pixfmt="+pixfmt+"]");
+ int displayID = getDevice().getCGDisplayID();
+ return ("CGLGraphicsConfig[dev="+displayID+",pixfmt="+pixfmt+"]");
}
@Override
@@ -413,8 +412,8 @@ public final class CGLGraphicsConfig extends CGraphicsConfig
@Override
public void addDeviceEventListener(AccelDeviceEventListener l) {
- int screen = getDevice().getCoreGraphicsScreen();
- AccelDeviceEventNotifier.addListener(l, screen);
+ int displayID = getDevice().getCGDisplayID();
+ AccelDeviceEventNotifier.addListener(l, displayID);
}
@Override
diff --git a/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java
index aa9b798c617..052b91726b6 100644
--- a/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java
+++ b/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java
@@ -439,7 +439,7 @@ public abstract class LWComponentPeer
}
@Override
- public final Graphics getGraphics() {
+ public Graphics getGraphics() {
final Graphics g = getOnscreenGraphics();
if (g != null) {
synchronized (getPeerTreeLock()){
@@ -1227,10 +1227,10 @@ public abstract class LWComponentPeer
}
protected void sendEventToDelegate(final AWTEvent e) {
+ if (getDelegate() == null || !isShowing() || !isEnabled()) {
+ return;
+ }
synchronized (getDelegateLock()) {
- if (getDelegate() == null || !isShowing() || !isEnabled()) {
- return;
- }
AWTEvent delegateEvent = createDelegateEvent(e);
if (delegateEvent != null) {
AWTAccessor.getComponentAccessor()
@@ -1244,7 +1244,12 @@ public abstract class LWComponentPeer
}
}
- protected AWTEvent createDelegateEvent(AWTEvent e) {
+ /**
+ * Changes the target of the AWTEvent from awt component to appropriate
+ * swing delegate.
+ */
+ private AWTEvent createDelegateEvent(final AWTEvent e) {
+ // TODO modifiers should be changed to getModifiers()|getModifiersEx()?
AWTEvent delegateEvent = null;
if (e instanceof MouseWheelEvent) {
MouseWheelEvent me = (MouseWheelEvent) e;
diff --git a/jdk/src/macosx/classes/sun/lwawt/LWLightweightFramePeer.java b/jdk/src/macosx/classes/sun/lwawt/LWLightweightFramePeer.java
new file mode 100644
index 00000000000..90e2e88c441
--- /dev/null
+++ b/jdk/src/macosx/classes/sun/lwawt/LWLightweightFramePeer.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.lwawt;
+
+import java.awt.Graphics;
+import java.awt.Insets;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Window;
+import java.awt.dnd.DropTarget;
+
+import sun.awt.CausedFocusEvent;
+import sun.awt.LightweightFrame;
+
+public class LWLightweightFramePeer extends LWWindowPeer {
+
+ public LWLightweightFramePeer(LightweightFrame target,
+ PlatformComponent platformComponent,
+ PlatformWindow platformWindow)
+ {
+ super(target, platformComponent, platformWindow, LWWindowPeer.PeerType.LW_FRAME);
+ }
+
+ private LightweightFrame getLwTarget() {
+ return (LightweightFrame)getTarget();
+ }
+
+ @Override
+ public Graphics getGraphics() {
+ return getLwTarget().getGraphics();
+ }
+
+ @Override
+ protected void setVisibleImpl(final boolean visible) {
+ }
+
+ @Override
+ public boolean requestWindowFocus(CausedFocusEvent.Cause cause) {
+ if (!focusAllowedFor()) {
+ return false;
+ }
+ if (getPlatformWindow().rejectFocusRequest(cause)) {
+ return false;
+ }
+
+ Window opposite = LWKeyboardFocusManagerPeer.getInstance().
+ getCurrentFocusedWindow();
+
+ changeFocusedWindow(true, opposite);
+
+ return true;
+ }
+
+ @Override
+ public Point getLocationOnScreen() {
+ Rectangle bounds = getBounds();
+ return new Point(bounds.x, bounds.y); // todo
+ }
+
+ @Override
+ public Insets getInsets() {
+ return new Insets(0, 0, 0, 0);
+ }
+
+ @Override
+ public void setBounds(int x, int y, int w, int h, int op) {
+ setBounds(x, y, w, h, op, true, false);
+ }
+
+ @Override
+ public void updateCursorImmediately() {
+ // TODO: tries to switch to the awt/fx toolkit thread and causes a deadlock on macosx
+ }
+
+ @Override
+ public void addDropTarget(DropTarget dt) {
+ }
+
+ @Override
+ public void removeDropTarget(DropTarget dt) {
+ }
+
+ @Override
+ public void grab() {
+ getLwTarget().grabFocus();
+ }
+
+ @Override
+ public void ungrab() {
+ getLwTarget().ungrabFocus();
+ }
+}
diff --git a/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java b/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java
index 89f39fccbf8..cad6e4353ba 100644
--- a/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java
+++ b/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java
@@ -218,6 +218,23 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
return peer;
}
+ private LWLightweightFramePeer createDelegatedLwPeer(LightweightFrame target,
+ PlatformComponent platformComponent,
+ PlatformWindow platformWindow)
+ {
+ LWLightweightFramePeer peer = new LWLightweightFramePeer(target, platformComponent, platformWindow);
+ targetCreatedPeer(target, peer);
+ peer.initialize();
+ return peer;
+ }
+
+ @Override
+ public FramePeer createLightweightFrame(LightweightFrame target) {
+ PlatformComponent platformComponent = createLwPlatformComponent();
+ PlatformWindow platformWindow = createPlatformWindow(LWWindowPeer.PeerType.LW_FRAME);
+ return createDelegatedLwPeer(target, platformComponent, platformWindow);
+ }
+
@Override
public WindowPeer createWindow(Window target) {
PlatformComponent platformComponent = createPlatformComponent();
@@ -502,6 +519,8 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
protected abstract PlatformComponent createPlatformComponent();
+ protected abstract PlatformComponent createLwPlatformComponent();
+
protected abstract FileDialogPeer createFileDialogPeer(FileDialog target);
// ---- UTILITY METHODS ---- //
diff --git a/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java b/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java
index 5b19788f244..d50335f7cd5 100644
--- a/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java
+++ b/jdk/src/macosx/classes/sun/lwawt/LWWindowPeer.java
@@ -48,7 +48,8 @@ public class LWWindowPeer
FRAME,
DIALOG,
EMBEDDED_FRAME,
- VIEW_EMBEDDED_FRAME
+ VIEW_EMBEDDED_FRAME,
+ LW_FRAME
}
private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.lwawt.focus.LWWindowPeer");
@@ -1090,7 +1091,7 @@ public class LWWindowPeer
return platformWindow.requestWindowFocus();
}
- private boolean focusAllowedFor() {
+ protected boolean focusAllowedFor() {
Window window = getTarget();
// TODO: check if modal blocked
return window.isVisible() && window.isEnabled() && isFocusableWindow();
@@ -1113,10 +1114,15 @@ public class LWWindowPeer
return !(window instanceof Dialog || window instanceof Frame);
}
+ @Override
+ public void emulateActivation(boolean activate) {
+ changeFocusedWindow(activate, null);
+ }
+
/*
* Changes focused window on java level.
*/
- private void changeFocusedWindow(boolean becomesFocused, Window opposite) {
+ protected void changeFocusedWindow(boolean becomesFocused, Window opposite) {
if (focusLog.isLoggable(PlatformLogger.FINE)) {
focusLog.fine((becomesFocused?"gaining":"loosing") + " focus window: " + this);
}
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CDropTargetContextPeer.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CDropTargetContextPeer.java
index 181d0847225..0f32d3178fd 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CDropTargetContextPeer.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CDropTargetContextPeer.java
@@ -128,6 +128,15 @@ final class CDropTargetContextPeer extends SunDropTargetContextPeer {
}
}
+ @Override
+ protected int postDropTargetEvent(Component component, int x, int y, int dropAction,
+ int actions, long[] formats, long nativeCtxt, int eventID,
+ boolean dispatchType) {
+ // On MacOS X all the DnD events should be synchronous
+ return super.postDropTargetEvent(component, x, y, dropAction, actions, formats, nativeCtxt,
+ eventID, SunDropTargetContextPeer.DISPATCH_SYNC);
+ }
+
// Signal drop complete:
protected void doDropDone(boolean success, int dropAction, boolean isLocal) {
long nativeDropTarget = this.getNativeDragContext();
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformComponent.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformComponent.java
index 370b930ea98..978f65c3c91 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformComponent.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformComponent.java
@@ -35,7 +35,7 @@ import sun.lwawt.PlatformWindow;
* On OSX {@code CPlatformComponent} stores pointer to the native CAlayer which
* can be used from JAWT.
*/
-final class CPlatformComponent extends CFRetainedResource
+class CPlatformComponent extends CFRetainedResource
implements PlatformComponent {
private volatile PlatformWindow platformWindow;
diff --git a/jdk/make/tools/src/build/tools/javazic/DayOfWeek.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformLWComponent.java
similarity index 68%
rename from jdk/make/tools/src/build/tools/javazic/DayOfWeek.java
rename to jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformLWComponent.java
index 9df8163fe5e..fd76cf5c898 100644
--- a/jdk/make/tools/src/build/tools/javazic/DayOfWeek.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformLWComponent.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,34 +23,31 @@
* questions.
*/
-package build.tools.javazic;
-/**
- * Day of week enum.
- *
- * @since 1.6
- */
+package sun.lwawt.macosx;
-enum DayOfWeek {
- SUNDAY("Sun"),
- MONDAY("Mon"),
- TUESDAY("Tue"),
- WEDNESDAY("Wed"),
- THURSDAY("Thu"),
- FRIDAY("Fri"),
- SATURDAY("Sat");
+import sun.lwawt.PlatformWindow;
- private final String abbr;
+class CPlatformLWComponent extends CPlatformComponent {
- private DayOfWeek(String abbr) {
- this.abbr = abbr;
+ CPlatformLWComponent() {
+ super();
}
- String getAbbr() {
- return abbr;
+ @Override
+ public long getPointer() {
+ return 0;
}
- int value() {
- return ordinal() + 1;
+ @Override
+ public void initialize(final PlatformWindow platformWindow) {
+ }
+
+ @Override
+ public void setBounds(final int x, final int y, final int w, final int h) {
+ }
+
+ @Override
+ public void dispose() {
}
}
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformLWView.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformLWView.java
new file mode 100644
index 00000000000..e5d99678b18
--- /dev/null
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformLWView.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.lwawt.macosx;
+
+import sun.lwawt.LWWindowPeer;
+import sun.java2d.SurfaceData;
+
+public class CPlatformLWView extends CPlatformView {
+
+ public CPlatformLWView() {
+ super();
+ }
+
+ @Override
+ public void initialize(LWWindowPeer peer, CPlatformResponder responder) {
+ initializeBase(peer, responder);
+ }
+
+ @Override
+ public long getAWTView() {
+ return 0;
+ }
+
+ @Override
+ public boolean isOpaque() {
+ return true;
+ }
+
+ @Override
+ public void setBounds(int x, int y, int width, int height) {
+ }
+
+ @Override
+ public void enterFullScreenMode() {
+ }
+
+ @Override
+ public void exitFullScreenMode() {
+ }
+
+ @Override
+ public SurfaceData replaceSurfaceData() {
+ return null;
+ }
+
+ @Override
+ public SurfaceData getSurfaceData() {
+ return null;
+ }
+
+ @Override
+ public void dispose() {
+ }
+
+ @Override
+ public long getWindowLayerPtr() {
+ return 0;
+ }
+}
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformLWWindow.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformLWWindow.java
new file mode 100644
index 00000000000..d7a91264328
--- /dev/null
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformLWWindow.java
@@ -0,0 +1,202 @@
+/*
+ * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.lwawt.macosx;
+
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.GraphicsDevice;
+import java.awt.Insets;
+import java.awt.MenuBar;
+import java.awt.Point;
+import java.awt.Window;
+import sun.awt.CausedFocusEvent;
+import sun.java2d.SurfaceData;
+import sun.lwawt.LWWindowPeer;
+import sun.lwawt.PlatformWindow;
+
+public class CPlatformLWWindow extends CPlatformWindow {
+
+ @Override
+ public void initialize(Window target, LWWindowPeer peer, PlatformWindow owner) {
+ initializeBase(target, peer, owner, new CPlatformLWView());
+ }
+
+ @Override
+ public void toggleFullScreen() {
+ }
+
+ @Override
+ public void setMenuBar(MenuBar mb) {
+ }
+
+ @Override
+ public void dispose() {
+ }
+
+ @Override
+ public FontMetrics getFontMetrics(Font f) {
+ return null;
+ }
+
+ @Override
+ public Insets getInsets() {
+ return new Insets(0, 0, 0, 0);
+ }
+
+ @Override
+ public Point getLocationOnScreen() {
+ return null;
+ }
+
+ @Override
+ public GraphicsDevice getGraphicsDevice() {
+ return null;
+ }
+
+ @Override
+ public SurfaceData getScreenSurface() {
+ return null;
+ }
+
+ @Override
+ public SurfaceData replaceSurfaceData() {
+ return null;
+ }
+
+ @Override
+ public void setBounds(int x, int y, int w, int h) {
+ if (getPeer() != null) {
+ getPeer().notifyReshape(x, y, w, h);
+ }
+ }
+
+ @Override
+ public void setVisible(boolean visible) {
+ }
+
+ @Override
+ public void setTitle(String title) {
+ }
+
+ @Override
+ public void updateIconImages() {
+ }
+
+ @Override
+ public long getNSWindowPtr() {
+ return 0;
+ }
+
+ @Override
+ public SurfaceData getSurfaceData() {
+ return null;
+ }
+
+ @Override
+ public void toBack() {
+ }
+
+ @Override
+ public void toFront() {
+ }
+
+ @Override
+ public void setResizable(final boolean resizable) {
+ }
+
+ @Override
+ public void setSizeConstraints(int minW, int minH, int maxW, int maxH) {
+ }
+
+ @Override
+ public boolean rejectFocusRequest(CausedFocusEvent.Cause cause) {
+ return false;
+ }
+
+ @Override
+ public boolean requestWindowFocus() {
+ return true;
+ }
+
+ @Override
+ public boolean isActive() {
+ return true;
+ }
+
+ @Override
+ public void updateFocusableWindowState() {
+ }
+
+ @Override
+ public Graphics transformGraphics(Graphics g) {
+ return null;
+ }
+
+ @Override
+ public void setAlwaysOnTop(boolean isAlwaysOnTop) {
+ }
+
+ @Override
+ public PlatformWindow getTopmostPlatformWindowUnderMouse(){
+ return null;
+ }
+
+ @Override
+ public void setOpacity(float opacity) {
+ }
+
+ @Override
+ public void setOpaque(boolean isOpaque) {
+ }
+
+ @Override
+ public void enterFullScreenMode() {
+ }
+
+ @Override
+ public void exitFullScreenMode() {
+ }
+
+ @Override
+ public void setWindowState(int windowState) {
+ }
+
+ @Override
+ public LWWindowPeer getPeer() {
+ return super.getPeer();
+ }
+
+ @Override
+ public CPlatformView getContentView() {
+ return super.getContentView();
+ }
+
+ @Override
+ public long getLayerPtr() {
+ return 0;
+ }
+}
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java
index 495657963bd..3a0bec48629 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformView.java
@@ -54,8 +54,7 @@ public class CPlatformView extends CFRetainedResource {
}
public void initialize(LWWindowPeer peer, CPlatformResponder responder) {
- this.peer = peer;
- this.responder = responder;
+ initializeBase(peer, responder);
if (!LWCToolkit.getSunAwtDisableCALayers()) {
this.windowLayer = new CGLLayer(peer);
@@ -63,6 +62,11 @@ public class CPlatformView extends CFRetainedResource {
setPtr(nativeCreateView(0, 0, 0, 0, getWindowLayerPtr()));
}
+ protected void initializeBase(LWWindowPeer peer, CPlatformResponder responder) {
+ this.peer = peer;
+ this.responder = responder;
+ }
+
public long getAWTView() {
return ptr;
}
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
index 8f83702a209..3fb585bdb53 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
@@ -30,6 +30,7 @@ import java.awt.Dialog.ModalityType;
import java.awt.event.*;
import java.awt.peer.WindowPeer;
import java.beans.*;
+import java.lang.reflect.InvocationTargetException;
import java.util.List;
import javax.swing.*;
@@ -44,7 +45,7 @@ import com.apple.laf.*;
import com.apple.laf.ClientPropertyApplicator.Property;
import com.sun.awt.AWTUtilities;
-public final class CPlatformWindow extends CFRetainedResource implements PlatformWindow {
+public class CPlatformWindow extends CFRetainedResource implements PlatformWindow {
private native long nativeCreateNSWindow(long nsViewPtr, long styleBits, double x, double y, double w, double h);
private static native void nativeSetNSWindowStyleBits(long nsWindowPtr, int mask, int data);
private static native void nativeSetNSWindowMenuBar(long nsWindowPtr, long menuBarPtr);
@@ -218,11 +219,7 @@ public final class CPlatformWindow extends CFRetainedResource implements Platfor
*/
@Override // PlatformWindow
public void initialize(Window _target, LWWindowPeer _peer, PlatformWindow _owner) {
- this.peer = _peer;
- this.target = _target;
- if (_owner instanceof CPlatformWindow) {
- this.owner = (CPlatformWindow)_owner;
- }
+ initializeBase(_target, _peer, _owner, new CPlatformView());
final int styleBits = getInitialStyleBits();
@@ -231,7 +228,6 @@ public final class CPlatformWindow extends CFRetainedResource implements Platfor
String warningString = target.getWarningString();
responder = new CPlatformResponder(peer, false);
- contentView = new CPlatformView();
contentView.initialize(peer, responder);
final long nativeWindowPtr = nativeCreateNSWindow(contentView.getAWTView(), styleBits, 0, 0, 0, 0);
@@ -253,6 +249,15 @@ public final class CPlatformWindow extends CFRetainedResource implements Platfor
validateSurface();
}
+ protected void initializeBase(Window target, LWWindowPeer peer, PlatformWindow owner, CPlatformView view) {
+ this.peer = peer;
+ this.target = target;
+ if (owner instanceof CPlatformWindow) {
+ this.owner = (CPlatformWindow)owner;
+ }
+ this.contentView = view;
+ }
+
private int getInitialStyleBits() {
// defaults style bits
int styleBits = DECORATED | HAS_SHADOW | CLOSEABLE | MINIMIZABLE | ZOOMABLE | RESIZABLE;
@@ -857,7 +862,16 @@ public final class CPlatformWindow extends CFRetainedResource implements Platfor
private void flushBuffers() {
if (isVisible() && !nativeBounds.isEmpty()) {
- LWCToolkit.getLWCToolkit().flushPendingEventsOnAppkit(target);
+ try {
+ LWCToolkit.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ //Posting an empty to flush the EventQueue without blocking the main thread
+ }
+ }, target);
+ } catch (InterruptedException | InvocationTargetException e) {
+ e.printStackTrace();
+ }
}
}
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CRobot.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CRobot.java
index e04a45fd579..c74a589a328 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CRobot.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CRobot.java
@@ -65,7 +65,7 @@ class CRobot implements RobotPeer {
mouseLastX = x;
mouseLastY = y;
- mouseEvent(fDevice.getCoreGraphicsScreen(), mouseLastX, mouseLastY,
+ mouseEvent(fDevice.getCGDisplayID(), mouseLastX, mouseLastY,
mouseButtonsState, true, true);
}
@@ -79,7 +79,7 @@ class CRobot implements RobotPeer {
public void mousePress(int buttons) {
mouseButtonsState |= buttons;
- mouseEvent(fDevice.getCoreGraphicsScreen(), mouseLastX, mouseLastY,
+ mouseEvent(fDevice.getCGDisplayID(), mouseLastX, mouseLastY,
buttons, true, false);
}
@@ -93,7 +93,7 @@ class CRobot implements RobotPeer {
public void mouseRelease(int buttons) {
mouseButtonsState &= ~buttons;
- mouseEvent(fDevice.getCoreGraphicsScreen(), mouseLastX, mouseLastY,
+ mouseEvent(fDevice.getCGDisplayID(), mouseLastX, mouseLastY,
buttons, false, false);
}
@@ -163,7 +163,7 @@ class CRobot implements RobotPeer {
}
private native void initRobot();
- private native void mouseEvent(int screen, int lastX, int lastY,
+ private native void mouseEvent(int displayID, int lastX, int lastY,
int buttonsState,
boolean isButtonsDownState,
boolean isMouseMove);
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/CToolkitThreadBlockedHandler.java b/jdk/src/macosx/classes/sun/lwawt/macosx/CToolkitThreadBlockedHandler.java
index 94a74e5174b..6bc6cc7c41b 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CToolkitThreadBlockedHandler.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CToolkitThreadBlockedHandler.java
@@ -25,27 +25,33 @@
package sun.lwawt.macosx;
+import sun.awt.Mutex;
import sun.awt.datatransfer.ToolkitThreadBlockedHandler;
-final class CToolkitThreadBlockedHandler implements ToolkitThreadBlockedHandler {
- private final LWCToolkit toolkit = (LWCToolkit)java.awt.Toolkit.getDefaultToolkit();
+final class CToolkitThreadBlockedHandler extends Mutex implements ToolkitThreadBlockedHandler {
+ private long awtRunLoopMediator = 0;
+ private final boolean processEvents;
- public void lock() {
- }
-
- public void unlock() {
- }
-
- protected boolean isOwned() {
- return false;
+ CToolkitThreadBlockedHandler() {
+ super();
+ this.processEvents = true;
}
public void enter() {
- // Execute the next AppKit event while we are waiting for system to
- // finish our request - this will save us from biting our own tail
- toolkit.executeNextAppKitEvent();
+ if (!isOwned()) {
+ throw new IllegalMonitorStateException();
+ }
+ awtRunLoopMediator = LWCToolkit.createAWTRunLoopMediator();
+ unlock();
+ LWCToolkit.doAWTRunLoop(awtRunLoopMediator, processEvents);
+ lock();
}
public void exit() {
+ if (!isOwned()) {
+ throw new IllegalMonitorStateException();
+ }
+ LWCToolkit.stopAWTRunLoop(awtRunLoopMediator);
+ awtRunLoopMediator = 0;
}
}
diff --git a/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java b/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java
index ae6a4f77662..a15eb46a1d1 100644
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/LWCToolkit.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -63,8 +63,6 @@ public final class LWCToolkit extends LWToolkit {
private static native void initIDs();
- static native void executeNextAppKitEvent();
-
private static CInputMethodDescriptor sInputMethodDescriptor;
static {
@@ -160,6 +158,8 @@ public final class LWCToolkit extends LWToolkit {
return new CPlatformEmbeddedFrame();
} else if (peerType == PeerType.VIEW_EMBEDDED_FRAME) {
return new CViewPlatformEmbeddedFrame();
+ } else if (peerType == PeerType.LW_FRAME) {
+ return new CPlatformLWWindow();
} else {
assert (peerType == PeerType.SIMPLEWINDOW || peerType == PeerType.DIALOG || peerType == PeerType.FRAME);
return new CPlatformWindow();
@@ -171,6 +171,11 @@ public final class LWCToolkit extends LWToolkit {
return new CPlatformComponent();
}
+ @Override
+ protected PlatformComponent createLwPlatformComponent() {
+ return new CPlatformLWComponent();
+ }
+
@Override
protected FileDialogPeer createFileDialogPeer(FileDialog target) {
return new CFileDialog(target);
@@ -346,22 +351,7 @@ public final class LWCToolkit extends LWToolkit {
@Override
public Insets getScreenInsets(final GraphicsConfiguration gc) {
- final CGraphicsConfig cgc = (CGraphicsConfig) gc;
- final int displayId = cgc.getDevice().getCoreGraphicsScreen();
- Rectangle fullScreen, workArea;
- final long screen = CWrapper.NSScreen.screenByDisplayId(displayId);
- try {
- fullScreen = CWrapper.NSScreen.frame(screen).getBounds();
- workArea = CWrapper.NSScreen.visibleFrame(screen).getBounds();
- } finally {
- CWrapper.NSObject.release(screen);
- }
- // Convert between Cocoa's coordinate system and Java.
- int bottom = workArea.y - fullScreen.y;
- int top = fullScreen.height - workArea.height - bottom;
- int left = workArea.x - fullScreen.x;
- int right = fullScreen.width - workArea.width - left;
- return new Insets(top, left, bottom, right);
+ return ((CGraphicsConfig) gc).getDevice().getScreenInsets();
}
@Override
@@ -495,30 +485,6 @@ public final class LWCToolkit extends LWToolkit {
synchronized(ret) { return ret[0]; }
}
- /**
- * Just a wrapper for LWCToolkit.invokeAndWait. Posts an empty event to the
- * appropriate event queue and waits for it to finish.
- */
- public static void flushPendingEventsOnAppkit(final Component component) {
- try {
- invokeAndWait(new Runnable() {
- @Override
- public void run() {
- }
- }, component);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- // Kicks an event over to the appropriate eventqueue and waits for it to finish
- // To avoid deadlocking, we manually run the NSRunLoop while waiting
- // Any selector invoked using ThreadUtilities performOnMainThread will be processed in doAWTRunLoop
- // The CInvocationEvent will call LWCToolkit.stopAWTRunLoop() when finished, which will stop our manual runloop
- public static void invokeAndWait(Runnable event, Component component) throws InterruptedException, InvocationTargetException {
- invokeAndWait(event, component, true);
- }
-
public static T invokeAndWait(final Callable callable, Component component) throws Exception {
final CallableWrapper wrapper = new CallableWrapper(callable);
invokeAndWait(wrapper, component);
@@ -548,10 +514,27 @@ public final class LWCToolkit extends LWToolkit {
}
}
- public static void invokeAndWait(Runnable event, Component component, boolean detectDeadlocks) throws InterruptedException, InvocationTargetException {
- long mediator = createAWTRunLoopMediator();
+ // Kicks an event over to the appropriate eventqueue and waits for it to finish
+ // To avoid deadlocking, we manually run the NSRunLoop while waiting
+ // Any selector invoked using ThreadUtilities performOnMainThread will be processed in doAWTRunLoop
+ // The InvocationEvent will call LWCToolkit.stopAWTRunLoop() when finished, which will stop our manual runloop
+ // Does not dispatch native events while in the loop
+ public static void invokeAndWait(Runnable event, Component component) throws InterruptedException, InvocationTargetException {
+ final long mediator = createAWTRunLoopMediator();
- InvocationEvent invocationEvent = new CPeerEvent(event, mediator);
+ InvocationEvent invocationEvent =
+ new InvocationEvent(component != null ? component : Toolkit.getDefaultToolkit(), event) {
+ @Override
+ public void dispatch() {
+ try {
+ super.dispatch();
+ } finally {
+ if (mediator != 0) {
+ stopAWTRunLoop(mediator);
+ }
+ }
+ }
+ };
if (component != null) {
AppContext appContext = SunToolkit.targetToAppContext(component);
@@ -564,7 +547,7 @@ public final class LWCToolkit extends LWToolkit {
((LWCToolkit)Toolkit.getDefaultToolkit()).getSystemEventQueueForInvokeAndWait().postEvent(invocationEvent);
}
- doAWTRunLoop(mediator, true, detectDeadlocks);
+ doAWTRunLoop(mediator, false);
Throwable eventException = invocationEvent.getException();
if (eventException != null) {
@@ -576,7 +559,8 @@ public final class LWCToolkit extends LWToolkit {
}
public static void invokeLater(Runnable event, Component component) throws InvocationTargetException {
- final InvocationEvent invocationEvent = new CPeerEvent(event, 0);
+ final InvocationEvent invocationEvent =
+ new InvocationEvent(component != null ? component : Toolkit.getDefaultToolkit(), event);
if (component != null) {
final AppContext appContext = SunToolkit.targetToAppContext(component);
@@ -681,31 +665,6 @@ public final class LWCToolkit extends LWToolkit {
return false;
}
- // Extends PeerEvent because we want to pass long an ObjC mediator object and because we want these events to be posted early
- // Typically, rather than relying on the notifier to call notifyAll(), we use the mediator to stop the runloop
- public static class CPeerEvent extends PeerEvent {
- private long _mediator = 0;
-
- public CPeerEvent(Runnable runnable, long mediator) {
- super(Toolkit.getDefaultToolkit(), runnable, null, true, 0);
- _mediator = mediator;
- }
-
- public void dispatch() {
- try {
- super.dispatch();
- } finally {
- if (_mediator != 0) {
- LWCToolkit.stopAWTRunLoop(_mediator);
- }
- }
- }
- }
-
- // Call through to native methods
- public static void doAWTRunLoop(long mediator, boolean awtMode) { doAWTRunLoop(mediator, awtMode, true); }
- public static void doAWTRunLoop(long mediator) { doAWTRunLoop(mediator, true); }
-
private static Boolean sunAwtDisableCALayers = null;
/**
@@ -730,12 +689,20 @@ public final class LWCToolkit extends LWToolkit {
* Native methods section
************************/
- // These are public because they are accessed from WebKitPluginObject in JavaDeploy
- // Basic usage:
- // createAWTRunLoopMediator. Start client code on another thread. doAWTRunLoop. When client code is finished, stopAWTRunLoop.
- public static native long createAWTRunLoopMediator();
- public static native void doAWTRunLoop(long mediator, boolean awtMode, boolean detectDeadlocks);
- public static native void stopAWTRunLoop(long mediator);
+ static native long createAWTRunLoopMediator();
+ /**
+ * Method to run a nested run-loop. The nested loop is spinned in the javaRunLoop mode, so selectors sent
+ * by [JNFRunLoop performOnMainThreadWaiting] are processed.
+ * @param mediator a native pointer to the mediator object created by createAWTRunLoopMediator
+ * @param processEvents if true - dispatches event while in the nested loop. Used in DnD.
+ * Additional attention is needed when using this feature as we short-circuit normal event
+ * processing which could break Appkit.
+ * (One known example is when the window is resized with the mouse)
+ *
+ * if false - all events come after exit form the nested loop
+ */
+ static native void doAWTRunLoop(long mediator, boolean processEvents);
+ static native void stopAWTRunLoop(long mediator);
private native boolean nativeSyncQueue(long timeout);
diff --git a/jdk/src/macosx/native/sun/awt/AWTView.m b/jdk/src/macosx/native/sun/awt/AWTView.m
index cc16a2026ee..7e1f248c7ed 100644
--- a/jdk/src/macosx/native/sun/awt/AWTView.m
+++ b/jdk/src/macosx/native/sun/awt/AWTView.m
@@ -227,7 +227,7 @@ AWT_ASSERT_APPKIT_THREAD;
- (void) mouseMoved: (NSEvent *)event {
// TODO: better way to redirect move events to the "under" view
-
+
NSPoint eventLocation = [event locationInWindow];
NSPoint localPoint = [self convertPoint: eventLocation fromView: nil];
@@ -668,7 +668,7 @@ AWT_ASSERT_APPKIT_THREAD;
- (void) setDropTarget:(CDropTarget *)target {
self._dropTarget = target;
- [ThreadUtilities performOnMainThread:@selector(controlModelControlValid) onObject:self._dropTarget withObject:nil waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(controlModelControlValid) on:self._dropTarget withObject:nil waitUntilDone:YES];
}
/******************************** BEGIN NSDraggingSource Interface ********************************/
@@ -1215,7 +1215,7 @@ JNF_CLASS_CACHE(jc_CInputMethod, "sun/lwawt/macosx/CInputMethod");
fprintf(stderr, "AWTView InputMethod Selector Called : [abandonInput]\n");
#endif // IM_DEBUG
- [ThreadUtilities performOnMainThread:@selector(markedTextAbandoned:) onObject:[NSInputManager currentInputManager] withObject:self waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(markedTextAbandoned:) on:[NSInputManager currentInputManager] withObject:self waitUntilDone:YES];
[self unmarkText];
}
diff --git a/jdk/src/macosx/native/sun/awt/ApplicationDelegate.m b/jdk/src/macosx/native/sun/awt/ApplicationDelegate.m
index 9a5aee94d44..6b584b21ca3 100644
--- a/jdk/src/macosx/native/sun/awt/ApplicationDelegate.m
+++ b/jdk/src/macosx/native/sun/awt/ApplicationDelegate.m
@@ -567,10 +567,9 @@ JNIEXPORT void JNICALL Java_com_apple_eawt__1AppEventHandler_nativeRegisterForNo
{
JNF_COCOA_ENTER(env);
[ThreadUtilities performOnMainThread:@selector(_registerForNotification:)
- onObject:[ApplicationDelegate class]
+ on:[ApplicationDelegate class]
withObject:[NSNumber numberWithInt:notificationType]
- waitUntilDone:NO
- awtMode:NO]; // AWT_THREADING Safe (non-blocking)
+ waitUntilDone:NO]; // AWT_THREADING Safe (non-blocking)
JNF_COCOA_EXIT(env);
}
diff --git a/jdk/src/macosx/native/sun/awt/CClipboard.m b/jdk/src/macosx/native/sun/awt/CClipboard.m
index fb300f72971..bfba06b47d1 100644
--- a/jdk/src/macosx/native/sun/awt/CClipboard.m
+++ b/jdk/src/macosx/native/sun/awt/CClipboard.m
@@ -120,7 +120,7 @@ static CClipboard *sClipboard = nil;
fClipboardOwner = JNFNewGlobalRef(inEnv, inClipboard);
}
}
- [ThreadUtilities performOnMainThread:@selector(_nativeDeclareTypes:) onObject:self withObject:inTypes waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(_nativeDeclareTypes:) on:self withObject:inTypes waitUntilDone:YES];
}
- (void) _nativeDeclareTypes:(NSArray *)inTypes {
@@ -135,7 +135,7 @@ static CClipboard *sClipboard = nil;
- (NSArray *) javaGetTypes {
NSMutableArray *args = [NSMutableArray arrayWithCapacity:1];
- [ThreadUtilities performOnMainThread:@selector(_nativeGetTypes:) onObject:self withObject:args waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(_nativeGetTypes:) on:self withObject:args waitUntilDone:YES];
//NSLog(@"CClipboard getTypes returns %@", [args lastObject]);
return [args lastObject];
@@ -152,7 +152,7 @@ static CClipboard *sClipboard = nil;
- (void) javaSetData:(NSData *)inData forType:(NSString *) inFormat {
CClipboardUpdate *newUpdate = [[CClipboardUpdate alloc] initWithData:inData withFormat:inFormat];
- [ThreadUtilities performOnMainThread:@selector(_nativeSetData:) onObject:self withObject:newUpdate waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(_nativeSetData:) on:self withObject:newUpdate waitUntilDone:YES];
[newUpdate release];
//NSLog(@"CClipboard javaSetData forType %@", inFormat);
@@ -170,7 +170,7 @@ static CClipboard *sClipboard = nil;
- (NSData *) javaGetDataForType:(NSString *) inFormat {
NSMutableArray *args = [NSMutableArray arrayWithObject:inFormat];
- [ThreadUtilities performOnMainThread:@selector(_nativeGetDataForType:) onObject:self withObject:args waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(_nativeGetDataForType:) on:self withObject:args waitUntilDone:YES];
//NSLog(@"CClipboard javaGetDataForType %@ returns an NSData", inFormat);
return [args lastObject];
diff --git a/jdk/src/macosx/native/sun/awt/CDropTarget.m b/jdk/src/macosx/native/sun/awt/CDropTarget.m
index 60cd7818254..9dda8ae3551 100644
--- a/jdk/src/macosx/native/sun/awt/CDropTarget.m
+++ b/jdk/src/macosx/native/sun/awt/CDropTarget.m
@@ -390,8 +390,7 @@ extern JNFClassInfo jc_CDropTargetContextPeer;
// Release dragging data if any when Java's AWT event thread is all finished.
// Make sure dragging data is released on the native event thread.
- [ThreadUtilities performOnMainThread:@selector(safeReleaseDraggingData:) onObject:self
- withObject:draggingSequenceNumberID waitUntilDone:NO awtMode:NO];
+ [ThreadUtilities performOnMainThread:@selector(safeReleaseDraggingData:) on:self withObject:draggingSequenceNumberID waitUntilDone:NO];
}
- (jint)currentJavaActions {
diff --git a/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m b/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m
index 9bc5393d765..1e2df28dd56 100644
--- a/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m
+++ b/jdk/src/macosx/native/sun/awt/CGraphicsDevice.m
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * 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
@@ -23,7 +23,8 @@
* questions.
*/
-#include "LWCToolkit.h"
+#import "LWCToolkit.h"
+#import "ThreadUtilities.h"
/*
* Convert the mode string to the more convinient bits per pixel value
@@ -146,6 +147,47 @@ Java_sun_awt_CGraphicsDevice_nativeGetYResolution
return dpi;
}
+/*
+ * Class: sun_awt_CGraphicsDevice
+ * Method: nativeGetScreenInsets
+ * Signature: (I)D
+ */
+JNIEXPORT jobject JNICALL
+Java_sun_awt_CGraphicsDevice_nativeGetScreenInsets
+ (JNIEnv *env, jclass class, jint displayID)
+{
+ jobject ret = NULL;
+ __block NSRect frame = NSZeroRect;
+ __block NSRect visibleFrame = NSZeroRect;
+JNF_COCOA_ENTER(env);
+
+ [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
+ NSArray *screens = [NSScreen screens];
+ for (NSScreen *screen in screens) {
+ NSDictionary *screenInfo = [screen deviceDescription];
+ NSNumber *screenID = [screenInfo objectForKey:@"NSScreenNumber"];
+ if ([screenID pointerValue] == displayID){
+ frame = [screen frame];
+ visibleFrame = [screen visibleFrame];
+ break;
+ }
+ }
+ }];
+ // Convert between Cocoa's coordinate system and Java.
+ jint bottom = visibleFrame.origin.y - frame.origin.y;
+ jint top = frame.size.height - visibleFrame.size.height - bottom;
+ jint left = visibleFrame.origin.x - frame.origin.x;
+ jint right = frame.size.width - visibleFrame.size.width - left;
+
+ static JNF_CLASS_CACHE(jc_Insets, "java/awt/Insets");
+ static JNF_CTOR_CACHE(jc_Insets_ctor, jc_Insets, "(IIII)V");
+ ret = JNFNewObject(env, jc_Insets_ctor, top, left, bottom, right);
+
+JNF_COCOA_EXIT(env);
+
+ return ret;
+}
+
/*
* Class: sun_awt_CGraphicsDevice
* Method: nativeSetDisplayMode
diff --git a/jdk/src/macosx/native/sun/awt/CMenu.m b/jdk/src/macosx/native/sun/awt/CMenu.m
index e6325c2c3db..8b643b3bca0 100644
--- a/jdk/src/macosx/native/sun/awt/CMenu.m
+++ b/jdk/src/macosx/native/sun/awt/CMenu.m
@@ -55,11 +55,11 @@ AWT_ASSERT_APPKIT_THREAD;
//- (void)finalize { [super finalize]; }
- (void)addJavaSubmenu:(CMenu *)submenu {
- [ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) onObject:self withObject:submenu waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) on:self withObject:submenu waitUntilDone:YES];
}
- (void)addJavaMenuItem:(CMenuItem *)theMenuItem {
- [ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) onObject:self withObject:theMenuItem waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(addNativeItem_OnAppKitThread:) on:self withObject:theMenuItem waitUntilDone:YES];
}
- (void)addNativeItem_OnAppKitThread:(CMenuItem *)itemModified {
@@ -70,7 +70,7 @@ AWT_ASSERT_APPKIT_THREAD;
- (void)setJavaMenuTitle:(NSString *)title {
if (title) {
- [ThreadUtilities performOnMainThread:@selector(setNativeMenuTitle_OnAppKitThread:) onObject:self withObject:title waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(setNativeMenuTitle_OnAppKitThread:) on:self withObject:title waitUntilDone:YES];
}
}
@@ -93,7 +93,7 @@ AWT_ASSERT_APPKIT_THREAD;
- (void)deleteJavaItem:(jint)index {
- [ThreadUtilities performOnMainThread:@selector(deleteNativeJavaItem_OnAppKitThread:) onObject:self withObject:[NSNumber numberWithInt:index] waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(deleteNativeJavaItem_OnAppKitThread:) on:self withObject:[NSNumber numberWithInt:index] waitUntilDone:YES];
}
- (void)deleteNativeJavaItem_OnAppKitThread:(NSNumber *)number {
@@ -139,7 +139,7 @@ CMenu * createCMenu (jobject cPeerObjGlobal) {
// We use an array here only to be able to get a return value
NSMutableArray *args = [[NSMutableArray alloc] initWithObjects:[NSValue valueWithBytes:&cPeerObjGlobal objCType:@encode(jobject)], nil];
- [ThreadUtilities performOnMainThread:@selector(_create_OnAppKitThread:) onObject:[CMenu alloc] withObject:args waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(_create_OnAppKitThread:) on:[CMenu alloc] withObject:args waitUntilDone:YES];
aCMenu = (CMenu *)[args objectAtIndex: 0];
diff --git a/jdk/src/macosx/native/sun/awt/CMenuBar.m b/jdk/src/macosx/native/sun/awt/CMenuBar.m
index 23c79496189..b0d67f71a2a 100644
--- a/jdk/src/macosx/native/sun/awt/CMenuBar.m
+++ b/jdk/src/macosx/native/sun/awt/CMenuBar.m
@@ -197,7 +197,7 @@ static BOOL sSetupHelpMenu = NO;
if (self == sActiveMenuBar) {
NSArray *args = [[NSArray alloc] initWithObjects:theMenu, [NSNumber numberWithInt:-1], nil];
- [ThreadUtilities performOnMainThread:@selector(nativeAddMenuAtIndex_OnAppKitThread:) onObject:self withObject:args waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(nativeAddMenuAtIndex_OnAppKitThread:) on:self withObject:args waitUntilDone:YES];
[args release];
}
}
@@ -216,7 +216,7 @@ static BOOL sSetupHelpMenu = NO;
if (self == sActiveMenuBar) {
NSArray *args = [[NSArray alloc] initWithObjects:theMenu, [NSNumber numberWithInt:index], nil];
- [ThreadUtilities performOnMainThread:@selector(nativeAddMenuAtIndex_OnAppKitThread:) onObject:self withObject:args waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(nativeAddMenuAtIndex_OnAppKitThread:) on:self withObject:args waitUntilDone:YES];
[args release];
}
}
@@ -286,7 +286,7 @@ static BOOL sSetupHelpMenu = NO;
- (void) javaDeleteMenu: (jint)index {
if (self == sActiveMenuBar) {
- [ThreadUtilities performOnMainThread:@selector(nativeDeleteMenu_OnAppKitThread:) onObject:self withObject:[NSNumber numberWithInt:index] waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(nativeDeleteMenu_OnAppKitThread:) on:self withObject:[NSNumber numberWithInt:index] waitUntilDone:YES];
}
@synchronized(self) {
@@ -388,7 +388,7 @@ Java_sun_lwawt_macosx_CMenuBar_nativeCreateMenuBar
// We use an array here only to be able to get a return value
NSMutableArray *args = [[NSMutableArray alloc] initWithObjects:[NSValue valueWithBytes:&cPeerObjGlobal objCType:@encode(jobject)], nil];
- [ThreadUtilities performOnMainThread:@selector(_create_OnAppKitThread:) onObject:[CMenuBar alloc] withObject:args waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(_create_OnAppKitThread:) on:[CMenuBar alloc] withObject:args waitUntilDone:YES];
aCMenuBar = (CMenuBar *)[args objectAtIndex: 0];
diff --git a/jdk/src/macosx/native/sun/awt/CMenuItem.m b/jdk/src/macosx/native/sun/awt/CMenuItem.m
index 2281d8bcd95..b67c70658dd 100644
--- a/jdk/src/macosx/native/sun/awt/CMenuItem.m
+++ b/jdk/src/macosx/native/sun/awt/CMenuItem.m
@@ -386,7 +386,7 @@ JNF_COCOA_ENTER(env);
args = [[NSMutableArray alloc] initWithObjects:[NSValue valueWithBytes:&cPeerObjGlobal objCType:@encode(jobject)], [NSNumber numberWithBool:NO], nil];
}
- [ThreadUtilities performOnMainThread:@selector(_createMenuItem_OnAppKitThread:) onObject:[CMenuItem alloc] withObject:args waitUntilDone:YES awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(_createMenuItem_OnAppKitThread:) on:[CMenuItem alloc] withObject:args waitUntilDone:YES];
aCMenuItem = (CMenuItem *)[args objectAtIndex: 0];
diff --git a/jdk/src/macosx/native/sun/awt/CRobot.m b/jdk/src/macosx/native/sun/awt/CRobot.m
index c04d5685a56..056fd19e29f 100644
--- a/jdk/src/macosx/native/sun/awt/CRobot.m
+++ b/jdk/src/macosx/native/sun/awt/CRobot.m
@@ -135,7 +135,7 @@ Java_sun_lwawt_macosx_CRobot_initRobot
JNIEXPORT void JNICALL
Java_sun_lwawt_macosx_CRobot_mouseEvent
(JNIEnv *env, jobject peer,
- jint screenIndex, jint mouseLastX, jint mouseLastY, jint buttonsState,
+ jint displayID, jint mouseLastX, jint mouseLastY, jint buttonsState,
jboolean isButtonsDownState, jboolean isMouseMove)
{
JNF_COCOA_ENTER(env);
@@ -149,8 +149,6 @@ Java_sun_lwawt_macosx_CRobot_mouseEvent
CGError err = kCGErrorSuccess;
- CGDirectDisplayID displayID =
- FindCGDirectDisplayIDForScreenIndex(screenIndex);
CGRect globalDeviceBounds = CGDisplayBounds(displayID);
// Set unknown mouse location, if needed.
diff --git a/jdk/src/macosx/native/sun/awt/JavaComponentAccessibility.m b/jdk/src/macosx/native/sun/awt/JavaComponentAccessibility.m
index f886c4afbe1..a01bd781faa 100644
--- a/jdk/src/macosx/native/sun/awt/JavaComponentAccessibility.m
+++ b/jdk/src/macosx/native/sun/awt/JavaComponentAccessibility.m
@@ -1113,18 +1113,10 @@ static NSObject *sAttributeNamesLOCK = nil;
JNIEnv *env = [ThreadUtilities getJNIEnv];
id value = nil;
- // This code frequently gets called indirectly by Java when VoiceOver is active.
- // Basically, we just have to know when we going to be a bad state, and do something "special".
- // Note that while NSApplication isn't technically correct, we post a focus changed notification
- // (which will call this method, but with the correct codepath) shortly afterwards. See +postFocusChanged.
- if (sInPerformFromJava) {
- return [NSApplication sharedApplication];
- } else {
- jobject focused = JNFCallStaticObjectMethod(env, jm_getFocusOwner, fComponent); // AWT_THREADING Safe (AWTRunLoop)
- if (focused != NULL) {
- if (JNFIsInstanceOf(env, focused, &sjc_Accessible)) {
- value = [JavaComponentAccessibility createWithAccessible:focused withEnv:env withView:fView];
- }
+ jobject focused = JNFCallStaticObjectMethod(env, jm_getFocusOwner, fComponent); // AWT_THREADING Safe (AWTRunLoop)
+ if (focused != NULL) {
+ if (JNFIsInstanceOf(env, focused, &sjc_Accessible)) {
+ value = [JavaComponentAccessibility createWithAccessible:focused withEnv:env withView:fView];
}
}
@@ -1149,7 +1141,7 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessibility_focusChanged
{
JNF_COCOA_ENTER(env);
- [ThreadUtilities performOnMainThread:@selector(postFocusChanged:) onObject:[JavaComponentAccessibility class] withObject:nil waitUntilDone:NO awtMode:NO];
+ [ThreadUtilities performOnMainThread:@selector(postFocusChanged:) on:[JavaComponentAccessibility class] withObject:nil waitUntilDone:NO];
JNF_COCOA_EXIT(env);
}
@@ -1164,7 +1156,7 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_valueChanged
(JNIEnv *env, jclass jklass, jlong element)
{
JNF_COCOA_ENTER(env);
- [ThreadUtilities performOnMainThread:@selector(postValueChanged) onObject:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO awtMode:NO];
+ [ThreadUtilities performOnMainThread:@selector(postValueChanged) on:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO];
JNF_COCOA_EXIT(env);
}
@@ -1177,7 +1169,7 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_selectionChanged
(JNIEnv *env, jclass jklass, jlong element)
{
JNF_COCOA_ENTER(env);
- [ThreadUtilities performOnMainThread:@selector(postSelectionChanged) onObject:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO awtMode:NO];
+ [ThreadUtilities performOnMainThread:@selector(postSelectionChanged) on:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO];
JNF_COCOA_EXIT(env);
}
@@ -1191,7 +1183,7 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CAccessible_unregisterFromCocoaAXSy
(JNIEnv *env, jclass jklass, jlong element)
{
JNF_COCOA_ENTER(env);
- [ThreadUtilities performOnMainThread:@selector(unregisterFromCocoaAXSystem) onObject:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO awtMode:NO];
+ [ThreadUtilities performOnMainThread:@selector(unregisterFromCocoaAXSystem) on:(JavaComponentAccessibility *)jlong_to_ptr(element) withObject:nil waitUntilDone:NO];
JNF_COCOA_EXIT(env);
}
diff --git a/jdk/src/macosx/native/sun/awt/LWCToolkit.h b/jdk/src/macosx/native/sun/awt/LWCToolkit.h
index c318421c2e1..8df2c553996 100644
--- a/jdk/src/macosx/native/sun/awt/LWCToolkit.h
+++ b/jdk/src/macosx/native/sun/awt/LWCToolkit.h
@@ -44,8 +44,6 @@ extern jint* gButtonDownMasks;
+ (void) eventCountPlusPlus;
@end
-CGDirectDisplayID FindCGDirectDisplayIDForScreenIndex(jint screenIndex);
-
/*
* Utility Macros
*/
diff --git a/jdk/src/macosx/native/sun/awt/LWCToolkit.m b/jdk/src/macosx/native/sun/awt/LWCToolkit.m
index 45c546181f0..47c72abbfa5 100644
--- a/jdk/src/macosx/native/sun/awt/LWCToolkit.m
+++ b/jdk/src/macosx/native/sun/awt/LWCToolkit.m
@@ -177,39 +177,6 @@ Java_sun_lwawt_macosx_LWCToolkit_beep
NSBeep(); // produces both sound and visual flash, if configured in System Preferences
}
-CGDirectDisplayID
-FindCGDirectDisplayIDForScreenIndex(jint screenIndex)
-{
- // most common case - just one monitor
- CGDirectDisplayID screenID = CGMainDisplayID();
-
- CGDisplayCount displayCount = 0;
- CGGetOnlineDisplayList(0, NULL, &displayCount);
-
- if ((displayCount > 1) &&
- (screenIndex >= 0) &&
- (screenIndex < (jint)displayCount))
- {
- if (displayCount < 10) {
- // stack allocated optimization for less than 10 monitors
- CGDirectDisplayID onlineDisplays[displayCount];
- CGGetOnlineDisplayList(displayCount, onlineDisplays, &displayCount);
- screenID = (CGDirectDisplayID)onlineDisplays[screenIndex];
- } else {
- CGDirectDisplayID *onlineDisplays =
- malloc(displayCount*sizeof(CGDirectDisplayID));
- if (onlineDisplays != NULL) {
- CGGetOnlineDisplayList(displayCount, onlineDisplays,
- &displayCount);
- screenID = (CGDirectDisplayID)onlineDisplays[screenIndex];
- free(onlineDisplays);
- }
- }
- }
-
- return screenID;
-}
-
/*
* Class: sun_lwawt_macosx_LWCToolkit
* Method: initIDs
@@ -332,7 +299,7 @@ AWT_ASSERT_APPKIT_THREAD;
* Signature: (JZZ)V
*/
JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_doAWTRunLoop
-(JNIEnv *env, jclass clz, jlong mediator, jboolean awtMode, jboolean detectDeadlocks)
+(JNIEnv *env, jclass clz, jlong mediator, jboolean processEvents)
{
AWT_ASSERT_APPKIT_THREAD;
JNF_COCOA_ENTER(env);
@@ -341,26 +308,25 @@ JNF_COCOA_ENTER(env);
if (mediatorObject == nil) return;
- if (!sInPerformFromJava || !detectDeadlocks) {
+ // Don't use acceptInputForMode because that doesn't setup autorelease pools properly
+ BOOL isRunning = true;
+ while (![mediatorObject shouldEndRunLoop] && isRunning) {
+ isRunning = [[NSRunLoop currentRunLoop] runMode:[JNFRunLoop javaRunLoopMode]
+ beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.010]];
+ if (processEvents) {
+ //We do not spin a runloop here as date is nil, so does not matter which mode to use
+ NSEvent *event;
+ if ((event = [NSApp nextEventMatchingMask:NSAnyEventMask
+ untilDate:nil
+ inMode:NSDefaultRunLoopMode
+ dequeue:YES]) != nil) {
+ [NSApp sendEvent:event];
+ }
- NSRunLoop *currentRunLoop = [NSRunLoop currentRunLoop];
- NSDate *distantFuture = [NSDate distantFuture];
- NSString *mode = (awtMode) ? [JNFRunLoop javaRunLoopMode] : NSDefaultRunLoopMode;
-
- BOOL isRunning = YES;
- while (isRunning && ![mediatorObject shouldEndRunLoop]) {
- // Don't use acceptInputForMode because that doesn't setup autorelease pools properly
- isRunning = [currentRunLoop runMode:mode beforeDate:distantFuture];
}
-
}
-#ifndef PRODUCT_BUILD
- if (sInPerformFromJava) {
- NSLog(@"Apple AWT: Short-circuiting CToolkit.invokeAndWait trampoline deadlock!!!!!");
- NSLog(@"\tPlease file a bug report with this message and a reproducible test case.");
- }
-#endif
+
CFRelease(mediatorObject);
JNF_COCOA_EXIT(env);
@@ -379,7 +345,7 @@ JNF_COCOA_ENTER(env);
AWTRunLoopObject* mediatorObject = (AWTRunLoopObject*)jlong_to_ptr(mediator);
- [ThreadUtilities performOnMainThread:@selector(endRunLoop) onObject:mediatorObject withObject:nil waitUntilDone:NO awtMode:YES];
+ [ThreadUtilities performOnMainThread:@selector(endRunLoop) on:mediatorObject withObject:nil waitUntilDone:NO];
CFRelease(mediatorObject);
@@ -463,20 +429,3 @@ Java_sun_font_FontManager_populateFontFileNameMap
}
-/*
- * Class: sun_lwawt_macosx_LWCToolkit
- * Method: executeNextAppKitEvent
- * Signature: ()V
- */
-JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_executeNextAppKitEvent
-(JNIEnv *env, jclass cls)
-{
- // Simply get the next event in native loop and pass it to execution
- // We'll be called repeatedly so there's no need to block here
- NSRunLoop *theRL = [NSRunLoop currentRunLoop];
- NSApplication * app = [NSApplication sharedApplication];
- NSEvent * event = [app nextEventMatchingMask: 0xFFFFFFFF untilDate:nil inMode:NSDefaultRunLoopMode dequeue:YES];
- if (event != nil) {
- [app sendEvent: event];
- }
-}
diff --git a/jdk/src/macosx/native/sun/font/AWTStrike.m b/jdk/src/macosx/native/sun/font/AWTStrike.m
index 261bd34ae57..7f04b530ade 100644
--- a/jdk/src/macosx/native/sun/font/AWTStrike.m
+++ b/jdk/src/macosx/native/sun/font/AWTStrike.m
@@ -27,11 +27,13 @@
#import "java_awt_geom_PathIterator.h"
#import "sun_awt_SunHints.h"
#import "sun_font_CStrike.h"
+#import "sun_font_CStrikeDisposer.h"
#import "CGGlyphImages.h"
#import "CGGlyphOutlines.h"
#import "AWTStrike.h"
#import "CoreTextSupport.h"
//#import "jni_util.h"
+#include "fontscalerdefs.h"
/* Use THIS_FILE when it is available. */
#ifndef THIS_FILE
@@ -423,3 +425,19 @@ JNF_COCOA_EXIT(env);
return metrics;
}
+
+extern void AccelGlyphCache_RemoveAllInfos(GlyphInfo* glyph);
+/*
+ * Class: sun_font_CStrikeDisposer
+ * Method: removeGlyphInfoFromCache
+ * Signature: (J)V
+ */
+JNIEXPORT void JNICALL Java_sun_font_CStrikeDisposer_removeGlyphInfoFromCache
+(JNIEnv *env, jclass cls, jlong glyphInfo)
+{
+ JNF_COCOA_ENTER(env);
+
+ AccelGlyphCache_RemoveAllCellInfos((GlyphInfo*)jlong_to_ptr(glyphInfo));
+
+ JNF_COCOA_EXIT(env);
+}
diff --git a/jdk/src/macosx/native/sun/java2d/opengl/CGLGraphicsConfig.m b/jdk/src/macosx/native/sun/java2d/opengl/CGLGraphicsConfig.m
index 0bc58ec6ad3..a9de285758d 100644
--- a/jdk/src/macosx/native/sun/java2d/opengl/CGLGraphicsConfig.m
+++ b/jdk/src/macosx/native/sun/java2d/opengl/CGLGraphicsConfig.m
@@ -192,12 +192,12 @@ Java_sun_java2d_opengl_CGLGraphicsConfig_initCGL
JNIEXPORT jlong JNICALL
Java_sun_java2d_opengl_CGLGraphicsConfig_getCGLConfigInfo
(JNIEnv *env, jclass cglgc,
- jint screennum, jint pixfmt, jint swapInterval)
+ jint displayID, jint pixfmt, jint swapInterval)
{
jlong ret = 0L;
JNF_COCOA_ENTER(env);
NSMutableArray * retArray = [NSMutableArray arrayWithCapacity:3];
- [retArray addObject: [NSNumber numberWithInt: (int)screennum]];
+ [retArray addObject: [NSNumber numberWithInt: (int)displayID]];
[retArray addObject: [NSNumber numberWithInt: (int)pixfmt]];
[retArray addObject: [NSNumber numberWithInt: (int)swapInterval]];
if ([NSThread isMainThread]) {
@@ -217,7 +217,7 @@ Java_sun_java2d_opengl_CGLGraphicsConfig_getCGLConfigInfo
+ (void) _getCGLConfigInfo: (NSMutableArray *)argValue {
AWT_ASSERT_APPKIT_THREAD;
- jint screennum = (jint)[(NSNumber *)[argValue objectAtIndex: 0] intValue];
+ jint displayID = (jint)[(NSNumber *)[argValue objectAtIndex: 0] intValue];
jint pixfmt = (jint)[(NSNumber *)[argValue objectAtIndex: 1] intValue];
jint swapInterval = (jint)[(NSNumber *)[argValue objectAtIndex: 2] intValue];
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
@@ -230,16 +230,11 @@ Java_sun_java2d_opengl_CGLGraphicsConfig_getCGLConfigInfo
CGOpenGLDisplayMask glMask = (CGOpenGLDisplayMask)pixfmt;
if (sharedContext == NULL) {
if (glMask == 0) {
- CGDirectDisplayID id =
- FindCGDirectDisplayIDForScreenIndex(screennum);
- glMask = CGDisplayIDToOpenGLDisplayMask(id);
+ glMask = CGDisplayIDToOpenGLDisplayMask(displayID);
}
NSOpenGLPixelFormatAttribute attrs[] = {
NSOpenGLPFAClosestPolicy,
- NSOpenGLPFANoRecovery,
- NSOpenGLPFAAccelerated,
- NSOpenGLPFAFullScreen,
NSOpenGLPFAWindow,
NSOpenGLPFAPixelBuffer,
NSOpenGLPFADoubleBuffer,
@@ -412,7 +407,7 @@ Java_sun_java2d_opengl_CGLGraphicsConfig_getCGLConfigInfo
return;
}
memset(cglinfo, 0, sizeof(CGLGraphicsConfigInfo));
- cglinfo->screen = screennum;
+ cglinfo->screen = displayID;
cglinfo->pixfmt = sharedPixelFormat;
cglinfo->context = oglc;
@@ -422,17 +417,6 @@ Java_sun_java2d_opengl_CGLGraphicsConfig_getCGLConfigInfo
}
@end //GraphicsConfigUtil
-
-JNIEXPORT jint JNICALL
-Java_sun_java2d_opengl_CGLGraphicsConfig_getDefaultPixFmt
- (JNIEnv *env, jclass cglgc, jint screennum)
-{
- J2dTraceLn(J2D_TRACE_INFO, "CGLGraphicsConfig_getDefaultPixFmt");
-
- CGDirectDisplayID id = FindCGDirectDisplayIDForScreenIndex(screennum);
- return (jint)CGDisplayIDToOpenGLDisplayMask(id);
-}
-
JNIEXPORT jint JNICALL
Java_sun_java2d_opengl_CGLGraphicsConfig_getOGLCapabilities
(JNIEnv *env, jclass cglgc, jlong configInfo)
diff --git a/jdk/src/macosx/native/sun/osxapp/ThreadUtilities.h b/jdk/src/macosx/native/sun/osxapp/ThreadUtilities.h
index c0d2054f6e3..2ee65e94c65 100644
--- a/jdk/src/macosx/native/sun/osxapp/ThreadUtilities.h
+++ b/jdk/src/macosx/native/sun/osxapp/ThreadUtilities.h
@@ -122,19 +122,12 @@ do { \
#endif /* AWT_THREAD_ASSERTS */
// --------------------------------------------------------------------------
-// This tracks if we are current inside of a performOnMainThread that is both waiting and in the AWTRunLoopMode
-extern BOOL sInPerformFromJava;
-
-// This is an empty Obj-C object just so that -performSelectorOnMainThread
-// can be used, and to use the Obj-C +initialize feature.
__attribute__((visibility("default")))
-@interface ThreadUtilities : NSObject { }
+@interface ThreadUtilities { }
+ (JNIEnv*)getJNIEnv;
+ (JNIEnv*)getJNIEnvUncached;
-+ (void)performOnMainThread:(SEL)aSelector onObject:(id)target withObject:(id)arg waitUntilDone:(BOOL)wait awtMode:(BOOL)inAWT;
-
//Wrappers for the corresponding JNFRunLoop methods with a check for main thread
+ (void)performOnMainThreadWaiting:(BOOL)wait block:(void (^)())block;
+ (void)performOnMainThread:(SEL)aSelector on:(id)target withObject:(id)arg waitUntilDone:(BOOL)wait;
diff --git a/jdk/src/macosx/native/sun/osxapp/ThreadUtilities.m b/jdk/src/macosx/native/sun/osxapp/ThreadUtilities.m
index 0b42f1b5896..d431386bbdb 100644
--- a/jdk/src/macosx/native/sun/osxapp/ThreadUtilities.m
+++ b/jdk/src/macosx/native/sun/osxapp/ThreadUtilities.m
@@ -34,85 +34,6 @@
JavaVM *jvm = NULL;
static JNIEnv *appKitEnv = NULL;
-static NSArray *sPerformModes = nil;
-static NSArray *sAWTPerformModes = nil;
-
-static BOOL sLoggingEnabled = YES;
-
-#ifdef AWT_THREAD_ASSERTS_ENV_ASSERT
-int sAWTThreadAsserts = 0;
-#endif /* AWT_THREAD_ASSERTS_ENV_ASSERT */
-
-BOOL sInPerformFromJava = NO;
-
-// This class is used so that performSelectorOnMainThread can be
-// controlled a little more easily by us. It has 2 roles.
-// The first is to set/unset a flag (sInPerformFromJava) that code can
-// check to see if we are in a synchronous perform initiated by a java thread.
-// The second is to implement the CocoaComponent backward compatibility mode.
-@interface CPerformer : NSObject {
- id fTarget;
- SEL fSelector;
- id fArg;
- BOOL fWait;
-}
-
-- (id) initWithTarget:(id)target selector:(SEL)selector arg:(id)arg wait:(BOOL)wait;
-- (void) perform;
-@end
-
-
-@implementation CPerformer
-
-- (id) initWithTarget:(id)target selector:(SEL)selector arg:(id)arg {
- return [self initWithTarget:target selector:selector arg:arg wait:YES];
-}
-
-- (id) initWithTarget:(id)target selector:(SEL)selector arg:(id)arg wait:(BOOL)wait {
- self = [super init];
- if (self != nil) {
- fTarget = [target retain];
- fSelector = selector;
- fArg = [arg retain];
- // Only set sInPerformFromJava if this is a synchronous perform
- fWait = wait;
- }
- return self;
-}
-
-- (void) dealloc {
- [fTarget release];
- [fArg release];
- [super dealloc];
-}
-//- (void)finalize { [super finalize]; }
-
-- (void) perform {
- AWT_ASSERT_APPKIT_THREAD;
-
- // If this is the first time we're going from java thread -> appkit thread,
- // set sInPerformFromJava for the duration of the invocation
- BOOL nestedPerform = sInPerformFromJava;
- if (fWait) {
- sInPerformFromJava = YES;
- }
-
- // Actually do the work (cheat to avoid a method call)
- @try {
- objc_msgSend(fTarget, fSelector, fArg);
- //[fTarget performSelector:fSelector withObject:fArg];
- } @catch (NSException *e) {
- NSLog(@"*** CPerformer: ignoring exception '%@' raised during perform of selector '%@' on target '%@' with args '%@'", e, NSStringFromSelector(fSelector), fTarget, fArg);
- } @finally {
- // If we actually set sInPerformFromJava, unset it now
- if (!nestedPerform && fWait) {
- sInPerformFromJava = NO;
- }
- }
-}
-@end
-
-
@implementation ThreadUtilities
+ (JNIEnv*)getJNIEnv {
@@ -129,36 +50,6 @@ AWT_ASSERT_APPKIT_THREAD;
return env;
}
-+ (void)initialize {
- // Headless: BOTH
- // Embedded: BOTH
- // Multiple Calls: NO
- // Caller: Obj-C class initialization
- // Thread: ?
-
- if (sPerformModes == nil) {
- // Create list of Run Loop modes to perform on
- // The default performSelector, with no mode argument, runs in Default,
- // ModalPanel, and EventTracking modes
- sPerformModes = [[NSArray alloc] initWithObjects:NSDefaultRunLoopMode, NSModalPanelRunLoopMode, nil];
- sAWTPerformModes = [[NSArray alloc] initWithObjects:NSDefaultRunLoopMode, NSModalPanelRunLoopMode, NSEventTrackingRunLoopMode, [JNFRunLoop javaRunLoopMode], nil];
-
-#ifdef AWT_THREAD_ASSERTS_ENV_ASSERT
- sAWTThreadAsserts = (getenv("COCOA_AWT_DISABLE_THREAD_ASSERTS") == NULL);
-#endif /* AWT_THREAD_ASSERTS_ENV_ASSERT */
- }
-}
-
-// These methods can behave slightly differently than the normal
-// performSelector... In particular, we define a special runloop mode
-// (AWTRunLoopMode) so that we can "block" the main thread against the
-// java event thread without deadlocking. See CToolkit.invokeAndWait.
-+ (void)performOnMainThread:(SEL)aSelector onObject:(id)target withObject:(id)arg waitUntilDone:(BOOL)wait awtMode:(BOOL)inAWT {
- CPerformer *performer = [[CPerformer alloc] initWithTarget:target selector:aSelector arg:arg wait:wait];
- [performer performSelectorOnMainThread:@selector(perform) withObject:nil waitUntilDone:wait modes:((inAWT) ? sAWTPerformModes : sPerformModes)]; // AWT_THREADING Safe (cover method)
- [performer release];
-}
-
+ (void)performOnMainThreadWaiting:(BOOL)wait block:(void (^)())block {
if ([NSThread isMainThread] && wait == YES) {
block();
diff --git a/jdk/src/share/back/transport.c b/jdk/src/share/back/transport.c
index 40608b31239..1d7335d660b 100644
--- a/jdk/src/share/back/transport.c
+++ b/jdk/src/share/back/transport.c
@@ -117,6 +117,9 @@ loadTransportLibrary(char *libdir, char *name)
/* Construct library name (simple name or full path) */
dbgsysBuildLibName(libname, sizeof(libname), plibdir, name);
+ if (strlen(libname) == 0) {
+ return NULL;
+ }
/* dlopen (unix) / LoadLibrary (windows) the transport library */
handle = dbgsysLoadLibrary(libname, buf, sizeof(buf));
diff --git a/jdk/src/share/bin/jli_util.h b/jdk/src/share/bin/jli_util.h
index 568318c95c6..388910407ff 100644
--- a/jdk/src/share/bin/jli_util.h
+++ b/jdk/src/share/bin/jli_util.h
@@ -66,7 +66,7 @@ int JLI_GetStdArgc();
#include
#define JLI_StrCaseCmp(p1, p2) stricmp((p1), (p2))
#define JLI_StrNCaseCmp(p1, p2, p3) strnicmp((p1), (p2), (p3))
-#define JLI_Snprintf _snprintf
+int JLI_Snprintf(char *buffer, size_t size, const char *format, ...);
void JLI_CmdToArgs(char *cmdline);
#define JLI_Lseek _lseeki64
#else /* NIXES */
diff --git a/jdk/src/share/bin/parse_manifest.c b/jdk/src/share/bin/parse_manifest.c
index 61b0bbf4884..4926824e36b 100644
--- a/jdk/src/share/bin/parse_manifest.c
+++ b/jdk/src/share/bin/parse_manifest.c
@@ -569,9 +569,9 @@ JLI_ParseManifest(char *jarfile, manifest_info *info)
#ifdef O_BINARY
| O_BINARY /* use binary mode on windows */
#endif
- )) == -1)
+ )) == -1) {
return (-1);
-
+ }
info->manifest_version = NULL;
info->main_class = NULL;
info->jre_version = NULL;
@@ -618,15 +618,17 @@ JLI_JarUnpackFile(const char *jarfile, const char *filename, int *size) {
zentry entry;
void *data = NULL;
- fd = open(jarfile, O_RDONLY
+ if ((fd = open(jarfile, O_RDONLY
#ifdef O_LARGEFILE
| O_LARGEFILE /* large file mode */
#endif
#ifdef O_BINARY
| O_BINARY /* use binary mode on windows */
#endif
- );
- if (fd != -1 && find_file(fd, &entry, filename) == 0) {
+ )) == -1) {
+ return NULL;
+ }
+ if (find_file(fd, &entry, filename) == 0) {
data = inflate_file(fd, &entry, size);
}
close(fd);
@@ -671,8 +673,9 @@ JLI_ManifestIterate(const char *jarfile, attribute_closure ac, void *user_data)
#ifdef O_BINARY
| O_BINARY /* use binary mode on windows */
#endif
- )) == -1)
+ )) == -1) {
return (-1);
+ }
if (rc = find_file(fd, &entry, manifest_name) != 0) {
close(fd);
diff --git a/jdk/src/share/classes/com/sun/beans/finder/MethodFinder.java b/jdk/src/share/classes/com/sun/beans/finder/MethodFinder.java
index fa7cc5612ab..98c52bc929a 100644
--- a/jdk/src/share/classes/com/sun/beans/finder/MethodFinder.java
+++ b/jdk/src/share/classes/com/sun/beans/finder/MethodFinder.java
@@ -66,11 +66,14 @@ public final class MethodFinder extends AbstractFinder {
Signature signature = new Signature(type, name, args);
Method method = CACHE.get(signature);
- if (method != null) {
+ boolean cached = method != null;
+ if (cached && isPackageAccessible(method.getDeclaringClass())) {
return method;
}
method = findAccessibleMethod(new MethodFinder(name, args).find(type.getMethods()));
- CACHE.put(signature, method);
+ if (!cached) {
+ CACHE.put(signature, method);
+ }
return method;
}
diff --git a/jdk/src/share/classes/com/sun/crypto/provider/DHKeyAgreement.java b/jdk/src/share/classes/com/sun/crypto/provider/DHKeyAgreement.java
index b69875dd481..33fa49297dd 100644
--- a/jdk/src/share/classes/com/sun/crypto/provider/DHKeyAgreement.java
+++ b/jdk/src/share/classes/com/sun/crypto/provider/DHKeyAgreement.java
@@ -41,6 +41,8 @@ import javax.crypto.ShortBufferException;
import javax.crypto.SecretKey;
import javax.crypto.spec.*;
+import sun.security.util.KeyUtil;
+
/**
* This class implements the Diffie-Hellman key agreement protocol between
* any number of parties.
@@ -200,6 +202,9 @@ extends KeyAgreementSpi {
throw new InvalidKeyException("Incompatible parameters");
}
+ // validate the Diffie-Hellman public key
+ KeyUtil.validate(dhPubKey);
+
// store the y value
this.y = dhPubKey.getY();
diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java
index f6ff030263e..a6033c97b14 100644
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Attribute.java
@@ -177,7 +177,7 @@ class Attribute implements Comparable {
define(sd, ATTR_CONTEXT_METHOD, "Synthetic", "");
define(sd, ATTR_CONTEXT_METHOD, "Deprecated", "");
define(sd, ATTR_CONTEXT_METHOD, "Exceptions", "NH[RCH]");
- define(sd, ATTR_CONTEXT_METHOD, "MethodParameters", "NB[RUNHI]");
+ define(sd, ATTR_CONTEXT_METHOD, "MethodParameters", "NB[RUNHFH]");
//define(sd, ATTR_CONTEXT_METHOD, "Code", "HHNI[B]NH[PHPOHPOHRCNH]NH[RUHNI[B]]");
define(sd, ATTR_CONTEXT_CODE, "StackMapTable",
diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java
index fdfb87dc136..322e2c33326 100644
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/BandStructure.java
@@ -1000,7 +1000,6 @@ class BandStructure {
/** Write a constant pool reference. */
public void putRef(Entry e) {
- assert(index != null);
addValue(encodeRefOrNull(e, index));
}
public void putRef(Entry e, Index index) {
@@ -1052,6 +1051,8 @@ class BandStructure {
int encodeRef(Entry e, Index ix) {
+ if (ix == null)
+ throw new RuntimeException("null index for " + e.stringValue());
int coding = ix.indexOf(e);
if (verbose > 2)
Utils.log.fine("putRef "+coding+" => "+e);
@@ -1505,7 +1506,7 @@ class BandStructure {
// band for predefine method parameters
IntBand method_MethodParameters_NB = method_attr_bands.newIntBand("method_MethodParameters_NB", BYTE1);
CPRefBand method_MethodParameters_name_RUN = method_attr_bands.newCPRefBand("method_MethodParameters_name_RUN", UNSIGNED5, CONSTANT_Utf8, NULL_IS_OK);
- IntBand method_MethodParameters_flag_I = method_attr_bands.newIntBand("method_MethodParameters_flag_I");
+ IntBand method_MethodParameters_flag_FH = method_attr_bands.newIntBand("method_MethodParameters_flag_FH");
MultiBand class_attr_bands = class_bands.newMultiBand("(class_attr_bands)", UNSIGNED5);
IntBand class_flags_hi = class_attr_bands.newIntBand("class_flags_hi");
@@ -1776,9 +1777,9 @@ class BandStructure {
new Band[]{
method_MethodParameters_NB,
method_MethodParameters_name_RUN,
- method_MethodParameters_flag_I
+ method_MethodParameters_flag_FH
},
- "MethodParameters", "NB[RUNHI]");
+ "MethodParameters", "NB[RUNHFH]");
assert(attrCodeEmpty == Package.attrCodeEmpty);
predefineAttribute(X_ATTR_Signature, ATTR_CONTEXT_METHOD,
new Band[] { method_Signature_RS },
diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java
index 3df8706da37..3da159f6e29 100644
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/ClassReader.java
@@ -564,7 +564,7 @@ class ClassReader {
code.bytes = new byte[readInt()];
in.readFully(code.bytes);
Entry[] cpMap = cls.getCPMap();
- Instruction.opcodeChecker(code.bytes, cpMap);
+ Instruction.opcodeChecker(code.bytes, cpMap, this.cls.version);
int nh = readUnsignedShort();
code.setHandlerCount(nh);
for (int i = 0; i < nh; i++) {
diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/ConstantPool.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/ConstantPool.java
index ad2175f9993..1ede29134b0 100644
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/ConstantPool.java
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/ConstantPool.java
@@ -207,6 +207,10 @@ class ConstantPool {
return tag;
}
+ public final boolean tagEquals(int tag) {
+ return getTag() == tag;
+ }
+
public Entry getRef(int i) {
return null;
}
@@ -1405,6 +1409,8 @@ class ConstantPool {
/** Index of all CP entries of a given tag and class. */
public Index getMemberIndex(byte tag, ClassEntry classRef) {
+ if (classRef == null)
+ throw new RuntimeException("missing class reference for " + tagName(tag));
if (indexByTagAndClass == null)
indexByTagAndClass = new Index[CONSTANT_Limit][];
Index allClasses = getIndexByTag(CONSTANT_Class);
diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/Constants.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/Constants.java
index 15882624381..5059bc07967 100644
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Constants.java
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Constants.java
@@ -479,4 +479,10 @@ class Constants {
public final static int _qldc = _xldc_op+7;
public final static int _qldc_w = _xldc_op+8;
public final static int _xldc_limit = _xldc_op+9;
+
+ // handling of InterfaceMethodRef
+ public final static int _invoke_int_op = _xldc_limit;
+ public final static int _invokespecial_int = _invoke_int_op+0;
+ public final static int _invokestatic_int = _invoke_int_op+1;
+ public final static int _invoke_int_limit = _invoke_int_op+2;
}
diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/Instruction.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/Instruction.java
index 31ee22b059d..93175fe8ecf 100644
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/Instruction.java
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/Instruction.java
@@ -446,12 +446,14 @@ class Instruction {
public static boolean isCPRefOp(int bc) {
if (bc < BC_INDEX[0].length && BC_INDEX[0][bc] > 0) return true;
if (bc >= _xldc_op && bc < _xldc_limit) return true;
+ if (bc == _invokespecial_int || bc == _invokestatic_int) return true;
return false;
}
public static byte getCPRefOpTag(int bc) {
if (bc < BC_INDEX[0].length && BC_INDEX[0][bc] > 0) return BC_TAG[0][bc];
if (bc >= _xldc_op && bc < _xldc_limit) return CONSTANT_LoadableValue;
+ if (bc == _invokestatic_int || bc == _invokespecial_int) return CONSTANT_InterfaceMethodref;
return CONSTANT_None;
}
@@ -647,7 +649,8 @@ class Instruction {
}
}
- public static void opcodeChecker(byte[] code, ConstantPool.Entry[] cpMap) throws FormatException {
+ public static void opcodeChecker(byte[] code, ConstantPool.Entry[] cpMap,
+ Package.Version clsVersion) throws FormatException {
Instruction i = at(code, 0);
while (i != null) {
int opcode = i.getBC();
@@ -658,10 +661,17 @@ class Instruction {
ConstantPool.Entry e = i.getCPRef(cpMap);
if (e != null) {
byte tag = i.getCPTag();
- if (!e.tagMatches(tag)) {
- String message = "illegal reference, expected type=" +
- ConstantPool.tagName(tag) + ": " +
- i.toString(cpMap);
+ boolean match = e.tagMatches(tag);
+ if (!match &&
+ (i.bc == _invokespecial || i.bc == _invokestatic) &&
+ e.tagMatches(CONSTANT_InterfaceMethodref) &&
+ clsVersion.greaterThan(Constants.JAVA7_MAX_CLASS_VERSION)) {
+ match = true;
+ }
+ if (!match) {
+ String message = "illegal reference, expected type="
+ + ConstantPool.tagName(tag) + ": "
+ + i.toString(cpMap);
throw new FormatException(message);
}
}
diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/NativeUnpack.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/NativeUnpack.java
index 532d4467664..3f2f430fb84 100644
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/NativeUnpack.java
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/NativeUnpack.java
@@ -109,6 +109,10 @@ class NativeUnpack {
return (p200 == null)? null: p200._nunp;
}
+ private synchronized long getUnpackerPtr() {
+ return unpackerPtr;
+ }
+
// Callback from the unpacker engine to get more data.
private long readInputFn(ByteBuffer pbuf, long minlen) throws IOException {
if (in == null) return 0; // nothing is readable
diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageReader.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageReader.java
index 319b8793347..b42dda30eb4 100644
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageReader.java
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageReader.java
@@ -1521,7 +1521,7 @@ class PackageReader extends BandStructure {
// *method_Exceptions_RC :UNSIGNED5 (cp_Class)
// *method_MethodParameters_NB: BYTE1
// *method_MethodParameters_RUN: UNSIGNED5 (cp_Utf8)
- // *method_MethodParameters_I: UNSIGNED5 (flag)
+ // *method_MethodParameters_FH: UNSIGNED5 (flag)
//
// code_attr_bands:
// *code_flags :UNSIGNED5
@@ -2256,6 +2256,12 @@ class PackageReader extends BandStructure {
int origBC = bc;
int size = 2;
switch (bc) {
+ case _invokestatic_int:
+ origBC = _invokestatic;
+ break;
+ case _invokespecial_int:
+ origBC = _invokespecial;
+ break;
case _ildc:
case _cldc:
case _fldc:
diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageWriter.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageWriter.java
index 47959294fd2..a78c9ae9969 100644
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageWriter.java
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackageWriter.java
@@ -1409,6 +1409,10 @@ class PackageWriter extends BandStructure {
int bc = i.getBC();
if (!(bc >= _first_linker_op && bc <= _last_linker_op)) return -1;
MemberEntry ref = (MemberEntry) i.getCPRef(curCPMap);
+ // do not optimize this case, simply fall back to regular coding
+ if ((bc == _invokespecial || bc == _invokestatic) &&
+ ref.tagEquals(CONSTANT_InterfaceMethodref))
+ return -1;
ClassEntry refClass = ref.classRef;
int self_bc = _self_linker_op + (bc - _first_linker_op);
if (refClass == curClass.thisClass)
@@ -1609,7 +1613,16 @@ class PackageWriter extends BandStructure {
case CONSTANT_Fieldref:
bc_which = bc_fieldref; break;
case CONSTANT_Methodref:
- bc_which = bc_methodref; break;
+ if (ref.tagEquals(CONSTANT_InterfaceMethodref)) {
+ if (bc == _invokespecial)
+ vbc = _invokespecial_int;
+ if (bc == _invokestatic)
+ vbc = _invokestatic_int;
+ bc_which = bc_imethodref;
+ } else {
+ bc_which = bc_methodref;
+ }
+ break;
case CONSTANT_InterfaceMethodref:
bc_which = bc_imethodref; break;
case CONSTANT_InvokeDynamic:
diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java
index 0dc88a108c7..309c68a8623 100644
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/PackerImpl.java
@@ -83,7 +83,7 @@ public class PackerImpl extends TLGlobals implements Pack200.Packer {
* @param out an OutputStream
* @exception IOException if an error is encountered.
*/
- public void pack(JarFile in, OutputStream out) throws IOException {
+ public synchronized void pack(JarFile in, OutputStream out) throws IOException {
assert(Utils.currentInstance.get() == null);
TimeZone tz = (props.getBoolean(Utils.PACK_DEFAULT_TIMEZONE))
? null
@@ -118,7 +118,7 @@ public class PackerImpl extends TLGlobals implements Pack200.Packer {
* @param out an OutputStream
* @exception IOException if an error is encountered.
*/
- public void pack(JarInputStream in, OutputStream out) throws IOException {
+ public synchronized void pack(JarInputStream in, OutputStream out) throws IOException {
assert(Utils.currentInstance.get() == null);
TimeZone tz = (props.getBoolean(Utils.PACK_DEFAULT_TIMEZONE)) ? null :
TimeZone.getDefault();
diff --git a/jdk/src/share/classes/com/sun/java/util/jar/pack/UnpackerImpl.java b/jdk/src/share/classes/com/sun/java/util/jar/pack/UnpackerImpl.java
index 5727d32986e..fd8ccfd3c71 100644
--- a/jdk/src/share/classes/com/sun/java/util/jar/pack/UnpackerImpl.java
+++ b/jdk/src/share/classes/com/sun/java/util/jar/pack/UnpackerImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -106,7 +106,7 @@ public class UnpackerImpl extends TLGlobals implements Pack200.Unpacker {
* @param out a JarOutputStream.
* @exception IOException if an error is encountered.
*/
- public void unpack(InputStream in, JarOutputStream out) throws IOException {
+ public synchronized void unpack(InputStream in, JarOutputStream out) throws IOException {
if (in == null) {
throw new NullPointerException("null input");
}
@@ -151,7 +151,7 @@ public class UnpackerImpl extends TLGlobals implements Pack200.Unpacker {
* @param out a JarOutputStream.
* @exception IOException if an error is encountered.
*/
- public void unpack(File in, JarOutputStream out) throws IOException {
+ public synchronized void unpack(File in, JarOutputStream out) throws IOException {
if (in == null) {
throw new NullPointerException("null input");
}
diff --git a/jdk/src/share/classes/com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.java b/jdk/src/share/classes/com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.java
index 728fb12a7e8..9fc0e7dbe9e 100644
--- a/jdk/src/share/classes/com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.java
+++ b/jdk/src/share/classes/com/sun/jmx/mbeanserver/ClassLoaderRepositorySupport.java
@@ -36,6 +36,7 @@ import java.util.logging.Level;
import javax.management.ObjectName;
import javax.management.loading.PrivateClassLoader;
+import sun.reflect.misc.ReflectUtil;
/**
* This class keeps the list of Class Loaders registered in the MBean Server.
@@ -192,6 +193,7 @@ final class ClassLoaderRepositorySupport
final ClassLoader without,
final ClassLoader stop)
throws ClassNotFoundException {
+ ReflectUtil.checkPackageAccess(className);
final int size = list.length;
for(int i=0; i theClass)
throws ReflectionException, MBeanException {
+
+ checkMBeanPermission(theClass, null, null, "instantiate");
+
Object moi;
@@ -260,6 +266,9 @@ public class MBeanInstantiator {
public Object instantiate(Class> theClass, Object params[],
String signature[], ClassLoader loader)
throws ReflectionException, MBeanException {
+
+ checkMBeanPermission(theClass, null, null, "instantiate");
+
// Instantiate the new object
// ------------------------------
@@ -407,6 +416,8 @@ public class MBeanInstantiator {
throw new RuntimeOperationsException(new
IllegalArgumentException(), "Null className passed in parameter");
}
+
+ ReflectUtil.checkPackageAccess(className);
Class> theClass;
if (loaderName == null) {
// Load the class using the agent class loader
@@ -619,13 +630,13 @@ public class MBeanInstantiator {
**/
static Class> loadClass(String className, ClassLoader loader)
throws ReflectionException {
-
Class> theClass;
if (className == null) {
throw new RuntimeOperationsException(new
IllegalArgumentException("The class name cannot be null"),
"Exception occurred during object instantiation");
}
+ ReflectUtil.checkPackageAccess(className);
try {
if (loader == null)
loader = MBeanInstantiator.class.getClassLoader();
@@ -676,6 +687,7 @@ public class MBeanInstantiator {
// We need to load the class through the class
// loader of the target object.
//
+ ReflectUtil.checkPackageAccess(signature[i]);
tab[i] = Class.forName(signature[i], false, aLoader);
}
} catch (ClassNotFoundException e) {
@@ -701,7 +713,7 @@ public class MBeanInstantiator {
private Constructor> findConstructor(Class> c, Class>[] params) {
try {
- return c.getConstructor(params);
+ return ConstructorUtil.getConstructor(c, params);
} catch (Exception e) {
return null;
}
@@ -715,4 +727,18 @@ public class MBeanInstantiator {
char.class, boolean.class})
primitiveClasses.put(c.getName(), c);
}
+
+ private static void checkMBeanPermission(Class> clazz,
+ String member,
+ ObjectName objectName,
+ String actions) {
+ SecurityManager sm = System.getSecurityManager();
+ if (clazz != null && sm != null) {
+ Permission perm = new MBeanPermission(clazz.getName(),
+ member,
+ objectName,
+ actions);
+ sm.checkPermission(perm);
+ }
+ }
}
diff --git a/jdk/src/share/classes/com/sun/jmx/mbeanserver/MBeanSupport.java b/jdk/src/share/classes/com/sun/jmx/mbeanserver/MBeanSupport.java
index 8109365e8d4..3af4b8b86d7 100644
--- a/jdk/src/share/classes/com/sun/jmx/mbeanserver/MBeanSupport.java
+++ b/jdk/src/share/classes/com/sun/jmx/mbeanserver/MBeanSupport.java
@@ -38,6 +38,7 @@ import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
import javax.management.ReflectionException;
import com.sun.jmx.mbeanserver.MXBeanMappingFactory;
+import sun.reflect.misc.ReflectUtil;
/**
* Base class for MBeans. There is one instance of this class for
@@ -131,6 +132,7 @@ public abstract class MBeanSupport
" is not an instance of " + mbeanInterfaceType.getName();
throw new NotCompliantMBeanException(msg);
}
+ ReflectUtil.checkPackageAccess(mbeanInterfaceType);
this.resource = resource;
MBeanIntrospector introspector = getMBeanIntrospector();
this.perInterface = introspector.getPerInterface(mbeanInterfaceType);
diff --git a/jdk/src/share/classes/java/awt/CheckboxMenuItem.java b/jdk/src/share/classes/java/awt/CheckboxMenuItem.java
index 635e9b55b89..ad12d4c29a9 100644
--- a/jdk/src/share/classes/java/awt/CheckboxMenuItem.java
+++ b/jdk/src/share/classes/java/awt/CheckboxMenuItem.java
@@ -277,7 +277,7 @@ public class CheckboxMenuItem extends MenuItem implements ItemSelectable, Access
* @since 1.4
*/
public synchronized ItemListener[] getItemListeners() {
- return (ItemListener[])(getListeners(ItemListener.class));
+ return getListeners(ItemListener.class);
}
/**
diff --git a/jdk/src/share/classes/java/awt/Cursor.java b/jdk/src/share/classes/java/awt/Cursor.java
index c340532b20d..d022a647869 100644
--- a/jdk/src/share/classes/java/awt/Cursor.java
+++ b/jdk/src/share/classes/java/awt/Cursor.java
@@ -163,11 +163,11 @@ public class Cursor implements java.io.Serializable {
* hashtable, filesystem dir prefix, filename, and properties for custom cursors support
*/
- private static final Hashtable systemCustomCursors = new Hashtable(1);
+ private static final Hashtable systemCustomCursors = new Hashtable<>(1);
private static final String systemCustomCursorDirPrefix = initCursorDir();
private static String initCursorDir() {
- String jhome = (String) java.security.AccessController.doPrivileged(
+ String jhome = java.security.AccessController.doPrivileged(
new sun.security.action.GetPropertyAction("java.home"));
return jhome +
File.separator + "lib" + File.separator + "images" +
@@ -298,7 +298,7 @@ public class Cursor implements java.io.Serializable {
static public Cursor getSystemCustomCursor(final String name)
throws AWTException, HeadlessException {
GraphicsEnvironment.checkHeadless();
- Cursor cursor = (Cursor)systemCustomCursors.get(name);
+ Cursor cursor = systemCustomCursors.get(name);
if (cursor == null) {
synchronized(systemCustomCursors) {
@@ -319,11 +319,11 @@ public class Cursor implements java.io.Serializable {
final String fileName =
systemCustomCursorProperties.getProperty(key);
- String localized = (String)systemCustomCursorProperties.getProperty(prefix + DotNameSuffix);
+ String localized = systemCustomCursorProperties.getProperty(prefix + DotNameSuffix);
if (localized == null) localized = name;
- String hotspot = (String)systemCustomCursorProperties.getProperty(prefix + DotHotspotSuffix);
+ String hotspot = systemCustomCursorProperties.getProperty(prefix + DotHotspotSuffix);
if (hotspot == null)
throw new AWTException("no hotspot property defined for cursor: " + name);
@@ -348,9 +348,9 @@ public class Cursor implements java.io.Serializable {
final int fy = y;
final String flocalized = localized;
- cursor = (Cursor) java.security.AccessController.doPrivileged(
- new java.security.PrivilegedExceptionAction() {
- public Object run() throws Exception {
+ cursor = java.security.AccessController.doPrivileged(
+ new java.security.PrivilegedExceptionAction() {
+ public Cursor run() throws Exception {
Toolkit toolkit = Toolkit.getDefaultToolkit();
Image image = toolkit.getImage(
systemCustomCursorDirPrefix + fileName);
@@ -447,8 +447,8 @@ public class Cursor implements java.io.Serializable {
systemCustomCursorProperties = new Properties();
try {
- AccessController.doPrivileged(
- new java.security.PrivilegedExceptionAction() {
+ AccessController.