Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_jdk
提交
2ff3b4e4
D
dragonwell8_jdk
项目概览
openanolis
/
dragonwell8_jdk
通知
4
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_jdk
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
2ff3b4e4
编写于
5月 10, 2013
作者:
M
mduigou
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
9a61dcd4
46ca7e07
变更
60
显示空白变更内容
内联
并排
Showing
60 changed file
with
1541 addition
and
1341 deletion
+1541
-1341
.hgtags
.hgtags
+1
-0
makefiles/CompileNativeLibraries.gmk
makefiles/CompileNativeLibraries.gmk
+73
-48
makefiles/GensrcX11Wrappers.gmk
makefiles/GensrcX11Wrappers.gmk
+6
-1
makefiles/Images.gmk
makefiles/Images.gmk
+9
-3
src/macosx/classes/sun/awt/CGraphicsDevice.java
src/macosx/classes/sun/awt/CGraphicsDevice.java
+38
-12
src/macosx/classes/sun/awt/CGraphicsEnvironment.java
src/macosx/classes/sun/awt/CGraphicsEnvironment.java
+44
-35
src/macosx/classes/sun/lwawt/LWComponentPeer.java
src/macosx/classes/sun/lwawt/LWComponentPeer.java
+20
-25
src/macosx/classes/sun/lwawt/LWWindowPeer.java
src/macosx/classes/sun/lwawt/LWWindowPeer.java
+29
-7
src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
+5
-1
src/macosx/native/sun/awt/AWTEvent.h
src/macosx/native/sun/awt/AWTEvent.h
+2
-1
src/macosx/native/sun/awt/AWTEvent.m
src/macosx/native/sun/awt/AWTEvent.m
+2
-3
src/macosx/native/sun/awt/CGraphicsEnv.m
src/macosx/native/sun/awt/CGraphicsEnv.m
+4
-3
src/macosx/native/sun/awt/CMenuItem.m
src/macosx/native/sun/awt/CMenuItem.m
+11
-2
src/macosx/native/sun/awt/CTextPipe.m
src/macosx/native/sun/awt/CTextPipe.m
+11
-0
src/macosx/native/sun/awt/awt.m
src/macosx/native/sun/awt/awt.m
+4
-1
src/macosx/native/sun/java2d/opengl/CGLLayer.m
src/macosx/native/sun/java2d/opengl/CGLLayer.m
+5
-1
src/share/classes/java/awt/Component.java
src/share/classes/java/awt/Component.java
+5
-5
src/share/classes/java/awt/Window.java
src/share/classes/java/awt/Window.java
+1
-1
src/share/classes/java/beans/MetaData.java
src/share/classes/java/beans/MetaData.java
+77
-70
src/share/classes/java/beans/XMLEncoder.java
src/share/classes/java/beans/XMLEncoder.java
+15
-1
src/share/classes/java/lang/reflect/Executable.java
src/share/classes/java/lang/reflect/Executable.java
+25
-19
src/share/classes/java/lang/reflect/Field.java
src/share/classes/java/lang/reflect/Field.java
+1
-1
src/share/classes/java/lang/reflect/Modifier.java
src/share/classes/java/lang/reflect/Modifier.java
+42
-8
src/share/classes/java/lang/reflect/Parameter.java
src/share/classes/java/lang/reflect/Parameter.java
+13
-0
src/share/classes/java/util/regex/Pattern.java
src/share/classes/java/util/regex/Pattern.java
+87
-4
src/share/classes/javax/swing/JDesktopPane.java
src/share/classes/javax/swing/JDesktopPane.java
+9
-0
src/share/classes/sun/java2d/pipe/AAShapePipe.java
src/share/classes/sun/java2d/pipe/AAShapePipe.java
+2
-2
src/share/classes/sun/reflect/annotation/TypeAnnotation.java
src/share/classes/sun/reflect/annotation/TypeAnnotation.java
+7
-6
src/share/classes/sun/reflect/annotation/TypeAnnotationParser.java
.../classes/sun/reflect/annotation/TypeAnnotationParser.java
+33
-34
src/share/classes/sun/security/provider/certpath/CertPathHelper.java
...lasses/sun/security/provider/certpath/CertPathHelper.java
+1
-1
src/share/classes/sun/security/provider/certpath/DistributionPointFetcher.java
.../security/provider/certpath/DistributionPointFetcher.java
+9
-8
src/share/classes/sun/security/provider/certpath/OCSP.java
src/share/classes/sun/security/provider/certpath/OCSP.java
+4
-5
src/share/classes/sun/security/provider/certpath/OCSPResponse.java
.../classes/sun/security/provider/certpath/OCSPResponse.java
+27
-4
src/share/classes/sun/security/provider/certpath/URICertStore.java
.../classes/sun/security/provider/certpath/URICertStore.java
+30
-1
src/solaris/classes/sun/awt/X11/XWindowPeer.java
src/solaris/classes/sun/awt/X11/XWindowPeer.java
+3
-1
src/windows/classes/sun/awt/windows/WComponentPeer.java
src/windows/classes/sun/awt/windows/WComponentPeer.java
+12
-3
src/windows/classes/sun/awt/windows/WWindowPeer.java
src/windows/classes/sun/awt/windows/WWindowPeer.java
+6
-0
src/windows/classes/sun/nio/fs/WindowsFileCopy.java
src/windows/classes/sun/nio/fs/WindowsFileCopy.java
+2
-16
src/windows/classes/sun/nio/fs/WindowsLinkSupport.java
src/windows/classes/sun/nio/fs/WindowsLinkSupport.java
+1
-15
src/windows/classes/sun/nio/fs/WindowsPath.java
src/windows/classes/sun/nio/fs/WindowsPath.java
+1
-1
test/java/awt/Focus/SimpleWindowActivationTest/SimpleWindowActivationTest.java
...impleWindowActivationTest/SimpleWindowActivationTest.java
+5
-5
test/java/awt/Toolkit/BadDisplayTest/BadDisplayTest.sh
test/java/awt/Toolkit/BadDisplayTest/BadDisplayTest.sh
+3
-2
test/java/awt/WMSpecificTests/Metacity/FullscreenDialogModality.java
...wt/WMSpecificTests/Metacity/FullscreenDialogModality.java
+144
-0
test/java/beans/XMLEncoder/AbstractTest.java
test/java/beans/XMLEncoder/AbstractTest.java
+22
-4
test/java/beans/XMLEncoder/BeanValidator.java
test/java/beans/XMLEncoder/BeanValidator.java
+15
-22
test/java/beans/XMLEncoder/Test4631471.java
test/java/beans/XMLEncoder/Test4631471.java
+0
-5
test/java/beans/XMLEncoder/Test4679556.java
test/java/beans/XMLEncoder/Test4679556.java
+0
-1
test/java/beans/XMLEncoder/java_awt_BorderLayout.java
test/java/beans/XMLEncoder/java_awt_BorderLayout.java
+2
-4
test/java/beans/XMLEncoder/java_awt_CardLayout.java
test/java/beans/XMLEncoder/java_awt_CardLayout.java
+83
-0
test/java/beans/XMLEncoder/java_awt_GridBagLayout.java
test/java/beans/XMLEncoder/java_awt_GridBagLayout.java
+101
-0
test/java/beans/XMLEncoder/javax_swing_DefaultCellEditor.java
.../java/beans/XMLEncoder/javax_swing_DefaultCellEditor.java
+6
-0
test/java/lang/Math/DivModTests.java
test/java/lang/Math/DivModTests.java
+5
-4
test/java/lang/annotation/TypeAnnotationReflection.java
test/java/lang/annotation/TypeAnnotationReflection.java
+151
-1
test/java/nio/file/Files/NameLimits.java
test/java/nio/file/Files/NameLimits.java
+103
-0
test/java/util/regex/RegExTest.java
test/java/util/regex/RegExTest.java
+19
-2
test/javax/swing/JInternalFrame/InternalFrameIsNotCollectedTest.java
...swing/JInternalFrame/InternalFrameIsNotCollectedTest.java
+138
-0
test/javax/swing/JMenuItem/ActionListenerCalledTwice/ActionListenerCalledTwiceTest.java
...ionListenerCalledTwice/ActionListenerCalledTwiceTest.java
+67
-18
test/sun/security/provider/certpath/X509CertPath/ForwardBuildCompromised.java
...ovider/certpath/X509CertPath/ForwardBuildCompromised.java
+0
-312
test/sun/security/provider/certpath/X509CertPath/ReverseBuildCompromised.java
...ovider/certpath/X509CertPath/ReverseBuildCompromised.java
+0
-315
test/sun/security/provider/certpath/X509CertPath/ValidateCompromised.java
...y/provider/certpath/X509CertPath/ValidateCompromised.java
+0
-297
未找到文件。
.hgtags
浏览文件 @
2ff3b4e4
...
...
@@ -209,3 +209,4 @@ ac519af51769e92c51b597a730974e8607357709 jdk8-b83
296676d534c52888c36e305a2bf7f345c4ca70f8 jdk8-b85
7989cd0cc3a9149864589438ee2c949015d8aa9a jdk8-b86
d5228e624826a10ccc5b05f30ad8d839b58fe48d jdk8-b87
8dbb4b159e04de3c447c9242c70505e71f8624c7 jdk8-b88
makefiles/CompileNativeLibraries.gmk
浏览文件 @
2ff3b4e4
...
...
@@ -63,7 +63,12 @@ WIN_AWT_LIB := $(JDK_OUTPUTDIR)/objs/libawt/awt.lib
# Use this variable to set DEBUG_SYMBOLS true on windows for all libraries, but
# not on other platforms.
ifeq ($(OPENJDK_TARGET_OS), windows)
WINDOWS_ONLY := true
DEBUG_ALL_BINARIES := true
endif
# Build everything with debugging on OpenJDK
ifdef OPENJDK
DEBUG_ALL_BINARIES := true
endif
#
...
...
@@ -91,7 +96,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM,\
-I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include,\
CFLAGS_windows_debug:=-DLOGGING,\
ARFLAGS:=$(ARFLAGS),\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
else
...
...
@@ -105,7 +111,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBFDLIBM_MAC,\
CFLAGS:=$(CFLAGS_JDKLIB) \
-I$(JDK_TOPDIR)/src/share/native/java/lang/fdlibm/include,\
LDFLAGS:=-nostdlib -r -arch x86_64,\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfdlibm,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
BUILD_LIBFDLIBM := $(JDK_OUTPUTDIR)/objs/$(LIBRARY_PREFIX)fdlibm$(STATIC_LIBRARY_SUFFIX)
$(BUILD_LIBFDLIBM) : $(BUILD_LIBFDLIBM_MAC)
...
...
@@ -257,7 +264,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJAVA,\
-D "JDK_FTYPE=0x2L",\
REORDER:=$(LIBJAVA_REORDER), \
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjava,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
BUILD_LIBRARIES += $(BUILD_LIBJAVA)
...
...
@@ -308,7 +315,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBMLIB_IMAGE,\
-D "JDK_INTERNAL_NAME=mlib_image" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libmlib_image,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
$(BUILD_LIBMLIB_IMAGE) : $(BUILD_LIBJAVA)
...
...
@@ -431,7 +438,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBMLIB_IMAGE_V,\
$(BUILD_LIBMLIB_LDLIBS) -ljava -ljvm \
$(call SET_SHARED_LIBRARY_ORIGIN),\
LDFLAGS_SUFFIX_solaris:=-lc,\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libmlib_image_v))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libmlib_image_v,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
$(BUILD_LIBMLIB_IMAGE_V): $(BUILD_LIBJAVA)
...
...
@@ -739,7 +747,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBAWT,\
-D "JDK_INTERNAL_NAME=awt" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
$(BUILD_LIBAWT) : $(BUILD_LIBJAVA)
...
...
@@ -895,7 +903,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBAWT_XAWT,\
-D "JDK_FNAME=xawt.dll" \
-D "JDK_INTERNAL_NAME=xawt" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_xawt))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_xawt,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
$(BUILD_LIBAWT_XAWT) : $(BUILD_LIBJAVA)
...
...
@@ -956,7 +965,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBZIP,\
-D "JDK_INTERNAL_NAME=zip" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libzip,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
$(BUILD_LIBZIP) : $(BUILD_LIBJAVA)
...
...
@@ -986,7 +995,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBUNPACK,\
-D "JDK_FNAME=unpack.dll" \
-D "JDK_INTERNAL_NAME=unpack" \
-D "JDK_FTYPE=0x2L",\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
$(BUILD_LIBUNPACK) : $(BUILD_LIBJAVA)
...
...
@@ -1100,7 +1109,7 @@ ifeq ($(OPENJDK_TARGET_OS),windows)
-D "JDK_INTERNAL_NAME=dt_shmem" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libdt_shmem,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
BUILD_LIBRARIES += $(BUILD_LIBDT_SHMEM)
...
...
@@ -1134,7 +1143,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJDWP,\
-D "JDK_INTERNAL_NAME=jdwp" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjdwp,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
$(BUILD_LIBJDWP) : $(BUILD_LIBJAVA)
...
...
@@ -1175,7 +1184,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJAAS,\
-D "JDK_INTERNAL_NAME=$(LIBJAAS_NAME)" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjaas,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
$(BUILD_LIBJAAS) : $(BUILD_LIBJAVA)
...
...
@@ -1240,7 +1249,7 @@ BUILD_LIBRARIES += $(BUILD_LIBJSDT)
-D "JDK_INTERNAL_NAME=lcms" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/liblcms,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
BUILD_LIBRARIES += $(BUILD_LIBLCMS)
...
...
@@ -1300,7 +1309,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJPEG,\
-D "JDK_FTYPE=0x2L",\
REORDER:=$(BUILD_LIBJPEG_REORDER),\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjpeg,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
$(BUILD_LIBJPEG) : $(BUILD_LIBJAVA)
...
...
@@ -1377,7 +1386,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBFONTMANAGER,\
-D "JDK_INTERNAL_NAME=fontmanager" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libfontmanager,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
$(BUILD_LIBFONTMANAGER) : $(BUILD_LIBAWT)
...
...
@@ -1434,7 +1443,7 @@ ifndef OPENJDK
-D "JDK_INTERNAL_NAME=t2k" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libt2k,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
# t2k is linked against fontmanager
$(BUILD_LIBT2K) : $(BUILD_LIBFONTMANAGER)
...
...
@@ -1472,7 +1481,7 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
-D "JDK_INTERNAL_NAME=jawt" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjawt,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
$(BUILD_LIBJAWT) : $(BUILD_LIBAWT)
...
...
@@ -1521,7 +1530,8 @@ else # OPENJDK_TARGET_OS not windows
LDFLAGS_SUFFIX_solaris:=$(JAWT_LIBS) $(LDFLAGS_JDKLIB_SUFFIX) -lXrender,\
LDFLAGS_SUFFIX_macosx:=-Xlinker -rpath -Xlinker @loader_path $(JAWT_LIBS) \
-framework Cocoa $(LDFLAGS_JDKLIB_SUFFIX),\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjawt))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjawt,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
ifndef BUILD_HEADLESS_ONLY
$(BUILD_LIBJAWT) : $(BUILD_LIBAWT_XAWT)
...
...
@@ -1828,7 +1838,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBNET,\
-D "JDK_INTERNAL_NAME=net" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libnet,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
$(BUILD_LIBNET) : $(BUILD_LIBJAVA)
...
...
@@ -1965,7 +1975,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBNIO,\
-D "JDK_INTERNAL_NAME=nio" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libnio,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
BUILD_LIBRARIES += $(BUILD_LIBNIO)
...
...
@@ -2002,7 +2012,8 @@ ifeq ($(OPENJDK_TARGET_OS_API),posix)
LDFLAGS_SUFFIX_posix:=-lnio -lnet,\
LDFLAGS_SUFFIX_solaris:=-lsocket -ljava -ljvm -lc,\
LDFLAGS_SUFFIX_macosx:=-ljava -ljvm,\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsctp))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsctp,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
BUILD_LIBRARIES += $(BUILD_LIBSCTP)
...
...
@@ -2126,7 +2137,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJLI,\
-D "JDK_INTERNAL_NAME=jli" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
BUILD_LIBRARIES += $(BUILD_LIBJLI)
...
...
@@ -2143,7 +2154,8 @@ ifeq ($(OPENJDK_TARGET_OS), windows)
OPTIMIZATION:=HIGH, \
CFLAGS:=$(STATIC_LIBRARY_FLAGS) $(LIBJLI_CFLAGS),\
ARFLAGS:=$(ARFLAGS),\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli_static))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli_static,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
BUILD_LIBRARIES += $(BUILD_LIBJLI_STATIC)
...
...
@@ -2161,7 +2173,8 @@ else ifeq ($(OPENJDK_TARGET_OS),macosx)
OPTIMIZATION:=HIGH, \
CFLAGS:=$(CFLAGS_JDKLIB) $(LIBJLI_CFLAGS),\
LDFLAGS:=-nostdlib -r,\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli_static))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjli_static,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
$(JDK_OUTPUTDIR)/objs/libjli_static.a : $(BUILD_LIBJLI_STATIC)
$(call install-file)
...
...
@@ -2192,7 +2205,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJFR,\
-D "JDK_INTERNAL_NAME=jfr" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjfr,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
BUILD_LIBRARIES += $(BUILD_LIBJFR)
...
...
@@ -2244,7 +2257,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBKCMS,\
-D "JDK_INTERNAL_NAME=kcms" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libkcms,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
$(BUILD_LIBKCMS) : $(BUILD_LIBJAVA)
...
...
@@ -2279,7 +2292,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBSUNWJDGA, \
LDFLAGS:=$(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN), \
LDFLAGS_SUFFIX:=-L$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR) -R$(OPENWIN_LIB)$(OPENJDK_TARGET_CPU_ISADIR) -ldga -lX11 $(LIBDL) -lc, \
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunwjdga))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunwjdga,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
BUILD_LIBRARIES += $(BUILD_LIBSUNWJDGA)
...
...
@@ -2369,7 +2383,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBAWT_HEADLESS,\
LDFLAGS_SUFFIX_linux:=-ljvm -lawt -lm $(LIBDL) -ljava,\
LDFLAGS_SUFFIX_solaris:=$(LIBDL) -ljvm -lawt -lm -ljava $(LIBCXX) -lc,\
LDFLAGS_SUFFIX_macosx:=-ljvm $(LIBCXX) -lawt $(LIBDL) -ljava,\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_headless))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_headless,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
$(BUILD_LIBAWT_HEADLESS) : $(BUILD_LIBAWT)
...
...
@@ -2462,7 +2477,7 @@ $(eval $(call SetupNativeCompilation,LIBSPLASHSCREEN,\
-D "JDK_INTERNAL_NAME=splashscreen" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsplashscreen,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
BUILD_LIBRARIES += $(LIBSPLASHSCREEN)
...
...
@@ -2504,7 +2519,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBDCPR,\
-D "JDK_INTERNAL_NAME=dcpr" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libdcpr,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
$(BUILD_LIBDCPR) : $(BUILD_LIBJAVA)
...
...
@@ -2538,7 +2553,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJ2PCSC,\
-D "JDK_INTERNAL_NAME=j2pcsc" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2pcsc,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
BUILD_LIBRARIES += $(BUILD_LIBJ2PCSC)
...
...
@@ -2560,7 +2575,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJ2GSS,\
$(call SET_SHARED_LIBRARY_ORIGIN),\
LDFLAGS_SUFFIX:=$(LIBDL),\
LDFLAGS_SUFFIX_solaris:=-lc,\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2gss))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2gss,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
BUILD_LIBRARIES += $(BUILD_LIBJ2GSS)
endif
...
...
@@ -2599,7 +2615,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBKRB5,\
-D "JDK_INTERNAL_NAME=$(BUILD_LIBKRB5_NAME)" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libkrb5,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
BUILD_LIBRARIES += $(BUILD_LIBKRB5)
endif
...
...
@@ -2625,7 +2641,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBSUNMSCAPI,\
-D "JDK_INTERNAL_NAME=sunmscapi" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunmscapi,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
BUILD_LIBRARIES += $(BUILD_LIBSUNMSCAPI)
endif
...
...
@@ -2657,7 +2673,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJ2PKCS11,\
-D "JDK_INTERNAL_NAME=j2pkcs11" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2pkcs11,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
BUILD_LIBRARIES += $(BUILD_LIBJ2PKCS11)
...
...
@@ -2703,7 +2719,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBSUNEC,\
-D "JDK_INTERNAL_NAME=sunec" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libsunec,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
BUILD_LIBRARIES += $(BUILD_LIBSUNEC)
endif
...
...
@@ -2847,7 +2863,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJSOUND,\
-D "JDK_INTERNAL_NAME=jsound" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsound,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
$(BUILD_LIBJSOUND) : $(BUILD_LIBJAVA)
...
...
@@ -2882,7 +2898,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJSOUNDALSA,\
LDFLAGS:=$(LDFLAGS_JDKLIB)\
$(call SET_SHARED_LIBRARY_ORIGIN),\
LDFLAGS_SUFFIX:=-lasound -ljava -ljvm,\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsoundalsa))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsoundalsa,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
$(BUILD_LIBJSOUNDALSA) : $(BUILD_LIBJAVA)
...
...
@@ -2915,7 +2932,7 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJSOUNDDS,\
-D "JDK_INTERNAL_NAME=jsoundds" \
-D "JDK_FTYPE=0x2L",\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjsoundds,\
DEBUG_SYMBOLS:=$(
WINDOWS_ONLY
)))
DEBUG_SYMBOLS:=$(
DEBUG_ALL_BINARIES
)))
$(BUILD_LIBJSOUNDDS) : $(BUILD_LIBJAVA)
...
...
@@ -2940,7 +2957,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJ2UCRYPTO,\
LDFLAGS:=$(LDFLAGS_JDKLIB),\
LDFLAGS_SUFFIX:=$(LIBDL),\
LDFLAGS_SUFFIX_solaris:=-lc,\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2ucrypto))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libj2ucrypto,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
$(BUILD_LIBJ2UCRYPTO) : $(BUILD_LIBJAVA)
...
...
@@ -2970,7 +2988,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBAPPLESCRIPTENGINE,\
-F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation \
$(LDFLAGS_JDKLIB_SUFFIX),\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libAppleScriptEngine))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libAppleScriptEngine,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
$(BUILD_LIBAPPLESCRIPTENGINE) : $(BUILD_LIBJAVA)
...
...
@@ -3009,7 +3028,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBOSXAPP,\
-framework OpenGL \
-framework IOSurface \
-framework QuartzCore, \
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosxapp))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosxapp,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
BUILD_LIBRARIES += $(BUILD_LIBOSXAPP)
...
...
@@ -3049,7 +3069,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBOSX,\
-framework Security \
-framework SystemConfiguration \
$(LDFLAGS_JDKLIB_SUFFIX), \
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosx))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosx,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
BUILD_LIBRARIES += $(BUILD_LIBOSX)
...
...
@@ -3182,7 +3203,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBAWT_LWAWT,\
-framework JavaRuntimeSupport \
-framework OpenGL \
-framework QuartzCore -ljava,\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_lwawt))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libawt_lwawt,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
BUILD_LIBRARIES += $(BUILD_LIBAWT_LWAWT)
...
...
@@ -3222,7 +3244,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBOSXUI,\
-framework JavaNativeFoundation \
-framework JavaRuntimeSupport \
-ljava -ljvm,\
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosxui))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libosxui,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
BUILD_LIBRARIES += $(BUILD_LIBOSXUI)
...
...
@@ -3262,7 +3285,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJOBJC32,\
-F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation \
-lffi, \
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjobjc32))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjobjc32,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
$(eval $(call SetupNativeCompilation,BUILD_LIBJOBJC64,\
LIBRARY:=JObjC,\
...
...
@@ -3286,7 +3310,8 @@ $(eval $(call SetupNativeCompilation,BUILD_LIBJOBJC64,\
-F/System/Library/Frameworks/JavaVM.framework/Frameworks \
-framework JavaNativeFoundation \
-lffi, \
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjobjc64))
OBJECT_DIR:=$(JDK_OUTPUTDIR)/objs/libjobjc64,\
DEBUG_SYMBOLS:=$(DEBUG_ALL_BINARIES)))
$(INSTALL_LIBRARIES_HERE)/$(LIBRARY_PREFIX)JObjC$(SHARED_LIBRARY_SUFFIX): $(BUILD_LIBJOBJC32) $(BUILD_LIBJOBJC64)
$(LIPO) -create -output $@ $(BUILD_LIBJOBJC32) $(BUILD_LIBJOBJC64)
...
...
makefiles/GensrcX11Wrappers.gmk
浏览文件 @
2ff3b4e4
...
...
@@ -86,10 +86,15 @@ ifneq ($(COMPILE_TYPE),cross)
$(MKDIR) -p $(@D)
$(TOOL_WRAPPERGENERATOR) $(@D) $(GENSRC_SIZER_DIR)/xlibtypes.txt "sizer" $*
# use -m32/-m64 only if the compiler supports it
ifeq ($(COMPILER_SUPPORTS_TARGET_BITS_FLAG),true)
MEMORY_MODEL_FLAG="-m$*"
endif
# Compile the C code into an executable.
$(GENSRC_X11WRAPPERS_TMP)/sizer.%.exe : $(GENSRC_X11WRAPPERS_TMP)/sizer.%.c
$(MKDIR) -p $(@D)
(cd $(@D) && $(CC)
-m$*
-o $@ $< \
(cd $(@D) && $(CC)
$(MEMORY_MODEL_FLAG)
-o $@ $< \
$(X_CFLAGS) \
$(X_LIBS) \
-I$(JDK_OUTPUTDIR)/include \
...
...
makefiles/Images.gmk
浏览文件 @
2ff3b4e4
...
...
@@ -352,16 +352,22 @@ ifneq ($(OPENJDK_TARGET_OS),windows)
JDK_MAN_PAGES += jvisualvm.1
endif
ifndef OPENJDK
MAN_SRC_BASEDIR:=$(JDK_TOPDIR)/src/closed
else
MAN_SRC_BASEDIR:=$(JDK_TOPDIR)/src
endif
ifeq ($(OPENJDK_TARGET_OS), linux)
MAN_SRC_DIR:=$(
JDK_TOPDIR)/src
/linux/doc
MAN_SRC_DIR:=$(
MAN_SRC_BASEDIR)
/linux/doc
MAN1_SUBDIR:=man
endif
ifeq ($(OPENJDK_TARGET_OS), solaris)
MAN_SRC_DIR:=$(
JDK_TOPDIR)/src
/solaris/doc
MAN_SRC_DIR:=$(
MAN_SRC_BASEDIR)
/solaris/doc
MAN1_SUBDIR:=sun/man/man1
endif
ifeq ($(OPENJDK_TARGET_OS), macosx)
MAN_SRC_DIR:=$(
JDK_TOPDIR)/src
/bsd/doc
MAN_SRC_DIR:=$(
MAN_SRC_BASEDIR)
/bsd/doc
MAN1_SUBDIR:=man
JDK_MAN_PAGES := $(filter-out jcmd.1, $(JDK_MAN_PAGES))
JDK_MAN_PAGES := $(filter-out jvisualvm.1, $(JDK_MAN_PAGES))
...
...
src/macosx/classes/sun/awt/CGraphicsDevice.java
浏览文件 @
2ff3b4e4
...
...
@@ -35,10 +35,18 @@ import java.util.Objects;
import
sun.java2d.opengl.CGLGraphicsConfig
;
public
final
class
CGraphicsDevice
extends
GraphicsDevice
{
public
final
class
CGraphicsDevice
extends
GraphicsDevice
implements
DisplayChangedListener
{
// CoreGraphics display ID
private
final
int
displayID
;
/**
* CoreGraphics display ID. This identifier can become non-valid at any time
* therefore methods, which is using this id should be ready to it.
*/
private
volatile
int
displayID
;
private
volatile
Insets
screenInsets
;
private
volatile
double
xResolution
;
private
volatile
double
yResolution
;
private
volatile
int
scale
;
// Array of all GraphicsConfig instances for this device
private
final
GraphicsConfiguration
[]
configs
;
...
...
@@ -51,7 +59,7 @@ public final class CGraphicsDevice extends GraphicsDevice {
// Save/restore DisplayMode for the Full Screen mode
private
DisplayMode
originalMode
;
public
CGraphicsDevice
(
int
displayID
)
{
public
CGraphicsDevice
(
final
int
displayID
)
{
this
.
displayID
=
displayID
;
configs
=
new
GraphicsConfiguration
[]
{
CGLGraphicsConfig
.
getConfig
(
this
,
0
)
...
...
@@ -89,7 +97,7 @@ public final class CGraphicsDevice extends GraphicsDevice {
*/
@Override
public
String
getIDstring
()
{
return
"Display "
+
this
.
displayID
;
return
"Display "
+
displayID
;
}
/**
...
...
@@ -104,15 +112,37 @@ public final class CGraphicsDevice extends GraphicsDevice {
}
public
double
getXResolution
()
{
return
nativeGetXResolution
(
displayID
)
;
return
xResolution
;
}
public
double
getYResolution
()
{
return
nativeGetYResolution
(
displayID
)
;
return
yResolution
;
}
public
Insets
getScreenInsets
()
{
return
nativeGetScreenInsets
(
displayID
);
return
screenInsets
;
}
public
int
getScaleFactor
()
{
return
scale
;
}
public
void
invalidate
(
final
int
defaultDisplayID
)
{
displayID
=
defaultDisplayID
;
}
@Override
public
void
displayChanged
()
{
xResolution
=
nativeGetXResolution
(
displayID
);
yResolution
=
nativeGetYResolution
(
displayID
);
screenInsets
=
nativeGetScreenInsets
(
displayID
);
scale
=
(
int
)
nativeGetScaleFactor
(
displayID
);
//TODO configs/fullscreenWindow/modes?
}
@Override
public
void
paletteChanged
()
{
// devices do not need to react to this event.
}
/**
...
...
@@ -219,10 +249,6 @@ public final class CGraphicsDevice extends GraphicsDevice {
return
nativeGetDisplayModes
(
displayID
);
}
public
int
getScaleFactor
()
{
return
(
int
)
nativeGetScaleFactor
(
displayID
);
}
private
static
native
double
nativeGetScaleFactor
(
int
displayID
);
private
static
native
void
nativeSetDisplayMode
(
int
displayID
,
int
w
,
int
h
,
int
bpp
,
int
refrate
);
...
...
src/macosx/classes/sun/awt/CGraphicsEnvironment.java
浏览文件 @
2ff3b4e4
/*
* 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
...
...
@@ -26,19 +26,20 @@
package
sun.awt
;
import
java.awt.*
;
import
java.awt.print.*
;
import
java.util.*
;
import
sun.java2d.*
;
/**
* This is an implementation of a GraphicsEnvironment object for the default local GraphicsEnvironment used by the Java
* Runtime Environment for Mac OS X GUI environments.
* This is an implementation of a GraphicsEnvironment object for the default
* local GraphicsEnvironment used by the Java Runtime Environment for Mac OS X
* GUI environments.
*
* @see GraphicsDevice
* @see GraphicsConfiguration
*/
public
class
CGraphicsEnvironment
extends
SunGraphicsEnvironment
{
public
final
class
CGraphicsEnvironment
extends
SunGraphicsEnvironment
{
// Global initialization of the Cocoa runtime.
private
static
native
void
initCocoa
();
...
...
@@ -53,7 +54,8 @@ public class CGraphicsEnvironment extends SunGraphicsEnvironment {
private
static
native
int
getMainDisplayID
();
/**
* Noop function that just acts as an entry point for someone to force a static initialization of this class.
* Noop function that just acts as an entry point for someone to force a
* static initialization of this class.
*/
public
static
void
init
()
{
}
...
...
@@ -78,8 +80,9 @@ public class CGraphicsEnvironment extends SunGraphicsEnvironment {
}
/**
* Register the instance with CGDisplayRegisterReconfigurationCallback()
* The registration uses a weak global reference -- if our instance is garbage collected, the reference will be dropped.
* Register the instance with CGDisplayRegisterReconfigurationCallback().
* The registration uses a weak global reference -- if our instance is
* garbage collected, the reference will be dropped.
*
* @return Return the registration context (a pointer).
*/
...
...
@@ -91,7 +94,7 @@ public class CGraphicsEnvironment extends SunGraphicsEnvironment {
private
native
void
deregisterDisplayReconfiguration
(
long
context
);
/** Available CoreGraphics displays. */
private
final
Map
<
Integer
,
CGraphicsDevice
>
devices
=
new
HashMap
<
Integer
,
CGraphicsDevice
>(
);
private
final
Map
<
Integer
,
CGraphicsDevice
>
devices
=
new
HashMap
<
>(
5
);
/** Reference to the display reconfiguration callback context. */
private
final
long
displayReconfigContext
;
...
...
@@ -118,11 +121,18 @@ public class CGraphicsEnvironment extends SunGraphicsEnvironment {
/**
* Called by the CoreGraphics Display Reconfiguration Callback.
*
* @param displayId
*
CoreGraphics displayId
* @param displayId
CoreGraphics displayId
*
@param removed true if displayId was removed, false otherwise.
*/
void
_displayReconfiguration
(
long
displayId
)
{
displayChanged
();
void
_displayReconfiguration
(
final
int
displayId
,
final
boolean
removed
)
{
synchronized
(
this
)
{
if
(
removed
&&
devices
.
containsKey
(
displayId
))
{
final
CGraphicsDevice
gd
=
devices
.
remove
(
displayId
);
gd
.
invalidate
(
getMainDisplayID
());
gd
.
displayChanged
();
}
}
initDevices
();
}
@Override
...
...
@@ -135,11 +145,11 @@ public class CGraphicsEnvironment extends SunGraphicsEnvironment {
}
/**
* (Re)create all CGraphicsDevices
*
* @return
* (Re)create all CGraphicsDevices, reuses a devices if it is possible.
*/
private
synchronized
void
initDevices
()
{
private
void
initDevices
()
{
synchronized
(
this
)
{
final
Map
<
Integer
,
CGraphicsDevice
>
old
=
new
HashMap
<>(
devices
);
devices
.
clear
();
int
mainID
=
getMainDisplayID
();
...
...
@@ -149,17 +159,16 @@ public class CGraphicsEnvironment extends SunGraphicsEnvironment {
// of discrete video.
// So, we initialize the main display first, and then
// retrieve actual list of displays.
CGraphicsDevice
mainDevice
=
new
CGraphicsDevice
(
mainID
);
final
int
[]
displayIDs
=
getDisplayIDs
();
if
(!
old
.
containsKey
(
mainID
))
{
old
.
put
(
mainID
,
new
CGraphicsDevice
(
mainID
));
}
for
(
int
displayID
:
displayIDs
)
{
if
(
displayID
!=
mainID
)
{
devices
.
put
(
displayID
,
new
CGraphicsDevice
(
displayID
));
}
else
{
devices
.
put
(
mainID
,
mainDevice
);
for
(
final
int
id
:
getDisplayIDs
())
{
devices
.
put
(
id
,
old
.
containsKey
(
id
)
?
old
.
get
(
id
)
:
new
CGraphicsDevice
(
id
));
}
}
displayChanged
();
}
@Override
...
...
@@ -167,7 +176,7 @@ public class CGraphicsEnvironment extends SunGraphicsEnvironment {
final
int
mainDisplayID
=
getMainDisplayID
();
CGraphicsDevice
d
=
devices
.
get
(
mainDisplayID
);
if
(
d
==
null
)
{
// we do not ex
epct that this may happen, the only responc
e
// we do not ex
pect that this may happen, the only respons
e
// is to re-initialize the list of devices
initDevices
();
...
...
src/macosx/classes/sun/lwawt/LWComponentPeer.java
浏览文件 @
2ff3b4e4
...
...
@@ -87,18 +87,22 @@ public abstract class LWComponentPeer<T extends Component, D extends JComponent>
private
final
T
target
;
// Container peer. It may not be the peer of the target's direct
// parent, for example, in the case of hw/lw mixing. However,
// let's skip this scenario for the time being. We also assume
// the container peer is not null, which might also be false if
// addNotify() is called for a component outside of the hierarchy.
// The exception is LWWindowPeers: their parents are always null
private
LWContainerPeer
containerPeer
;
// Handy reference to the top-level window peer. Window peer is
// borrowed from the containerPeer in constructor, and should also
// be updated when the component is reparented to another container
private
LWWindowPeer
windowPeer
;
/**
* Container peer. It may not be the peer of the target's direct parent, for
* example, in the case of hw/lw mixing. However, let's skip this scenario
* for the time being. We also assume the container peer is not null, which
* might also be false if addNotify() is called for a component outside of
* the hierarchy. The exception is LWWindowPeers: their containers are
* always null
*/
private
final
LWContainerPeer
containerPeer
;
/**
* Handy reference to the top-level window peer. Window peer is borrowed
* from the containerPeer in constructor, and should also be updated when
* the component is reparented to another container
*/
private
final
LWWindowPeer
windowPeer
;
private
final
AtomicBoolean
disposed
=
new
AtomicBoolean
(
false
);
...
...
@@ -183,13 +187,13 @@ public abstract class LWComponentPeer<T extends Component, D extends JComponent>
this
.
target
=
target
;
this
.
platformComponent
=
platformComponent
;
initializeContainerPeer
();
// Container peer is always null for LWWindowPeers, so
// windowPeer is always null for them as well. On the other
// hand, LWWindowPeer shouldn't use windowPeer at all
if
(
containerPeer
!=
null
)
{
windowPeer
=
containerPeer
.
getWindowPeerOrSelf
();
}
final
Container
container
=
SunToolkit
.
getNativeContainer
(
target
);
containerPeer
=
(
LWContainerPeer
)
LWToolkit
.
targetToPeer
(
container
);
windowPeer
=
containerPeer
!=
null
?
containerPeer
.
getWindowPeerOrSelf
()
:
null
;
// don't bother about z-order here as updateZOrder()
// will be called from addNotify() later anyway
if
(
containerPeer
!=
null
)
{
...
...
@@ -356,15 +360,6 @@ public abstract class LWComponentPeer<T extends Component, D extends JComponent>
return
containerPeer
;
}
// Just a helper method
// Overridden in LWWindowPeer to skip containerPeer initialization
protected
void
initializeContainerPeer
()
{
Container
parent
=
LWToolkit
.
getNativeContainer
(
target
);
if
(
parent
!=
null
)
{
containerPeer
=
(
LWContainerPeer
)
LWToolkit
.
targetToPeer
(
parent
);
}
}
public
PlatformWindow
getPlatformWindow
()
{
LWWindowPeer
windowPeer
=
getWindowPeer
();
return
windowPeer
.
getPlatformWindow
();
...
...
src/macosx/classes/sun/lwawt/LWWindowPeer.java
浏览文件 @
2ff3b4e4
...
...
@@ -41,7 +41,7 @@ import sun.util.logging.PlatformLogger;
public
class
LWWindowPeer
extends
LWContainerPeer
<
Window
,
JComponent
>
implements
WindowPeer
,
FramePeer
,
DialogPeer
,
FullScreenCapable
implements
FramePeer
,
DialogPeer
,
FullScreenCapable
,
DisplayChangedListener
{
public
static
enum
PeerType
{
SIMPLEWINDOW
,
...
...
@@ -189,6 +189,7 @@ public class LWWindowPeer
if
(
getSurfaceData
()
==
null
)
{
replaceSurfaceData
(
false
);
}
activateDisplayListener
();
}
// Just a helper method
...
...
@@ -201,15 +202,11 @@ public class LWWindowPeer
return
this
;
}
@Override
protected
void
initializeContainerPeer
()
{
// No-op as LWWindowPeer doesn't have any containerPeer
}
// ---- PEER METHODS ---- //
@Override
protected
void
disposeImpl
()
{
deactivateDisplayListener
();
SurfaceData
oldData
=
getSurfaceData
();
synchronized
(
surfaceDataLock
){
surfaceData
=
null
;
...
...
@@ -880,6 +877,18 @@ public class LWWindowPeer
// ---- UTILITY METHODS ---- //
private
void
activateDisplayListener
()
{
final
GraphicsEnvironment
ge
=
GraphicsEnvironment
.
getLocalGraphicsEnvironment
();
((
SunGraphicsEnvironment
)
ge
).
addDisplayChangedListener
(
this
);
}
private
void
deactivateDisplayListener
()
{
final
GraphicsEnvironment
ge
=
GraphicsEnvironment
.
getLocalGraphicsEnvironment
();
((
SunGraphicsEnvironment
)
ge
).
removeDisplayChangedListener
(
this
);
}
private
void
postWindowStateChangedEvent
(
int
newWindowState
)
{
if
(
getTarget
()
instanceof
Frame
)
{
AWTAccessor
.
getFrameAccessor
().
setExtendedState
(
...
...
@@ -941,7 +950,6 @@ public class LWWindowPeer
graphicsDevice
=
newGraphicsDevice
;
}
// TODO: DisplayChangedListener stuff
final
GraphicsConfiguration
newGC
=
newGraphicsDevice
.
getDefaultConfiguration
();
if
(!
setGraphicsConfig
(
newGC
))
return
false
;
...
...
@@ -954,6 +962,20 @@ public class LWWindowPeer
return
true
;
}
@Override
public
final
void
displayChanged
()
{
updateGraphicsDevice
();
// Replace surface unconditionally, because internal state of the
// GraphicsDevice could be changed.
replaceSurfaceData
();
repaintPeer
();
}
@Override
public
final
void
paletteChanged
()
{
// components do not need to react to this event.
}
/*
* May be called by delegate to provide SD to Java2D code.
*/
...
...
src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java
浏览文件 @
2ff3b4e4
...
...
@@ -32,6 +32,7 @@ import java.awt.peer.WindowPeer;
import
java.beans.*
;
import
java.lang.reflect.InvocationTargetException
;
import
java.util.List
;
import
java.util.Objects
;
import
javax.swing.*
;
...
...
@@ -916,9 +917,12 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
final
Rectangle
oldB
=
nativeBounds
;
nativeBounds
=
new
Rectangle
(
x
,
y
,
width
,
height
);
final
GraphicsConfiguration
oldGC
=
peer
.
getGraphicsConfiguration
();
peer
.
notifyReshape
(
x
,
y
,
width
,
height
);
final
GraphicsConfiguration
newGC
=
peer
.
getGraphicsConfiguration
();
// System-dependent appearance optimization.
if
((
byUser
&&
!
oldB
.
getSize
().
equals
(
nativeBounds
.
getSize
()))
||
isFullScreenAnimationOn
)
{
||
isFullScreenAnimationOn
||
!
Objects
.
equals
(
newGC
,
oldGC
)
)
{
flushBuffers
();
}
}
...
...
src/macosx/native/sun/awt/AWTEvent.h
浏览文件 @
2ff3b4e4
/*
* 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
...
...
@@ -35,5 +35,6 @@ void SendAdditionalJavaEvents(JNIEnv *env, NSEvent *nsEvent, jobject peer);
jint
GetJavaMouseModifiers
(
NSInteger
button
,
NSUInteger
modifierFlags
);
jint
NsKeyModifiersToJavaModifiers
(
NSUInteger
nsFlags
,
BOOL
isExtMods
);
NSUInteger
JavaModifiersToNsKeyModifiers
(
jint
javaModifiers
,
BOOL
isExtMods
);
unichar
NsCharToJavaChar
(
unichar
nsChar
,
NSUInteger
modifiers
);
#endif
/* __AWTEVENT_H */
src/macosx/native/sun/awt/AWTEvent.m
浏览文件 @
2ff3b4e4
/*
*
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
...
...
@@ -341,8 +341,7 @@ const charTable[] = {
{
0
,
0
,
0
}
}
;
static
unichar
NsCharToJavaChar
(
unichar
nsChar
,
NSUInteger
modifiers
)
unichar
NsCharToJavaChar
(
unichar
nsChar
,
NSUInteger
modifiers
)
{
const
struct
_
char
*
cur
;
//
Mask
off
just
the
keyboard
modifiers
from
the
event
modifier
mask
.
...
...
src/macosx/native/sun/awt/CGraphicsEnv.m
浏览文件 @
2ff3b4e4
...
...
@@ -124,10 +124,11 @@ static void displaycb_handle
jobject graphicsEnv = [wrapper jObjectWithEnv:env];
if (graphicsEnv == NULL) return; // ref already GC'd
static JNF_CLASS_CACHE(jc_CGraphicsEnvironment, "sun/awt/CGraphicsEnvironment");
static JNF_MEMBER_CACHE(jm_displayReconfiguration, jc_CGraphicsEnvironment, "_displayReconfiguration", "(J)V");
JNFCallVoidMethod(env, graphicsEnv, jm_displayReconfiguration);
static JNF_MEMBER_CACHE(jm_displayReconfiguration, jc_CGraphicsEnvironment, "_displayReconfiguration", "(IZ)V");
JNFCallVoidMethod(env, graphicsEnv, jm_displayReconfiguration,
(jint) display,
(jboolean) flags & kCGDisplayRemoveFlag);
});
}
...
...
src/macosx/native/sun/awt/CMenuItem.m
浏览文件 @
2ff3b4e4
/*
* 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
...
...
@@ -77,6 +77,15 @@ JNF_COCOA_ENTER(env);
if
([
currEvent
type
]
==
NSKeyDown
)
{
NSString
*
menuKey
=
[
sender
keyEquivalent
];
NSString
*
eventKey
=
[
currEvent
charactersIgnoringModifiers
];
// Apple uses characters from private Unicode range for some of the
// keys, so we need to do the same translation here that we do
// for the regular key down events
if
([
eventKey
length
]
==
1
)
{
unichar
ch
=
NsCharToJavaChar
([
eventKey
characterAtIndex
:
0
],
0
);
eventKey
=
[
NSString
stringWithCharacters
:
&
ch
length
:
1
];
}
if
([
menuKey
isEqualToString
:
eventKey
])
{
return
;
}
...
...
src/macosx/native/sun/awt/CTextPipe.m
浏览文件 @
2ff3b4e4
...
...
@@ -143,6 +143,8 @@ void JavaCT_DrawGlyphVector
CGContextRef
cgRef
=
qsdo
->
cgRef
;
CGAffineTransform
ctmText
=
CGContextGetTextMatrix
(
cgRef
);
BOOL
saved
=
false
;
/* Save and restore of graphics context is done before the iteration.
This seems to work using our test case (see bug ID 7158350) so we are restoring it at
the end of the for loop. If we find out that save/restore outside the loop
...
...
@@ -175,10 +177,19 @@ void JavaCT_DrawGlyphVector
CFRelease
(
fallback
);
if
(
cgFallback
)
{
if
(
!
saved
)
{
CGContextSaveGState
(
cgRef
);
saved
=
true
;
}
CGContextSetFont
(
cgRef
,
cgFallback
);
CFRelease
(
cgFallback
);
}
}
}
else
{
if
(
saved
)
{
CGContextRestoreGState
(
cgRef
);
saved
=
false
;
}
}
// if we have per-glyph transformations
...
...
src/macosx/native/sun/awt/awt.m
浏览文件 @
2ff3b4e4
...
...
@@ -316,7 +316,10 @@ AWT_ASSERT_APPKIT_THREAD;
// its finishLaunching has initialized it.
// ApplicationDelegate is the support code for com.apple.eawt.
[
ThreadUtilities
performOnMainThreadWaiting
:
YES
block
:
^
(){
OSXAPP_SetApplicationDelegate
([
ApplicationDelegate
sharedDelegate
]);
id
<
NSApplicationDelegate
>
delegate
=
[
ApplicationDelegate
sharedDelegate
];
if
(
delegate
!=
nil
)
{
OSXAPP_SetApplicationDelegate
(
delegate
);
}
}];
}
...
...
src/macosx/native/sun/java2d/opengl/CGLLayer.m
浏览文件 @
2ff3b4e4
...
...
@@ -216,7 +216,11 @@ Java_sun_java2d_opengl_CGLLayer_nativeSetScale
{
JNF_COCOA_ENTER
(
env
);
CGLLayer
*
layer
=
jlong_to_ptr
(
layerPtr
);
[
ThreadUtilities
performOnMainThreadWaiting
:
NO
block
:
^
(){
// We always call all setXX methods asynchronously, exception is only in
// this method where we need to change native texture size and layer's scale
// in one call on appkit, otherwise we'll get window's contents blinking,
// during screen-2-screen moving.
[
ThreadUtilities
performOnMainThreadWaiting
:[
NSThread
isMainThread
]
block
:
^
(){
layer
.
contentsScale
=
scale
;
}];
JNF_COCOA_EXIT
(
env
);
...
...
src/share/classes/java/awt/Component.java
浏览文件 @
2ff3b4e4
...
...
@@ -1051,11 +1051,11 @@ public abstract class Component implements ImageObserver, MenuContainer,
return
parent
;
}
// This method is overriden in the Window class to return null,
// This method is overrid
d
en in the Window class to return null,
// because the parent field of the Window object contains
// the owner of the window, not its parent.
Container
getContainer
()
{
return
getParent
();
return
getParent
_NoClientCode
();
}
/**
...
...
@@ -8194,10 +8194,10 @@ public abstract class Component implements ImageObserver, MenuContainer,
* Fetches the native container somewhere higher up in the component
* tree that contains this component.
*/
Container
getNativeContainer
()
{
Container
p
=
parent
;
final
Container
getNativeContainer
()
{
Container
p
=
getContainer
()
;
while
(
p
!=
null
&&
p
.
peer
instanceof
LightweightPeer
)
{
p
=
p
.
get
Parent_NoClientCode
();
p
=
p
.
get
Container
();
}
return
p
;
}
...
...
src/share/classes/java/awt/Window.java
浏览文件 @
2ff3b4e4
...
...
@@ -3914,7 +3914,7 @@ public class Window extends Container implements Accessible {
// ************************** MIXING CODE *******************************
// A window has a
parent
, but it does NOT have a container
// A window has a
n owner
, but it does NOT have a container
@Override
final
Container
getContainer
()
{
return
null
;
...
...
src/share/classes/java/beans/MetaData.java
浏览文件 @
2ff3b4e4
...
...
@@ -69,8 +69,9 @@ import java.util.Objects;
* @author Philip Milne
* @author Steve Langley
*/
class
MetaData
{
class
NullPersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
NullPersistenceDelegate
extends
PersistenceDelegate
{
// Note this will be called by all classes when they reach the
// top of their superclass chain.
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
...
...
@@ -87,7 +88,7 @@ class NullPersistenceDelegate extends PersistenceDelegate {
*
* @author Sergey A. Malenkov
*/
class
EnumPersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
EnumPersistenceDelegate
extends
PersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
oldInstance
==
newInstance
;
}
...
...
@@ -98,7 +99,7 @@ class EnumPersistenceDelegate extends PersistenceDelegate {
}
}
class
PrimitivePersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
PrimitivePersistenceDelegate
extends
PersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
oldInstance
.
equals
(
newInstance
);
}
...
...
@@ -109,7 +110,7 @@ class PrimitivePersistenceDelegate extends PersistenceDelegate {
}
}
class
ArrayPersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
ArrayPersistenceDelegate
extends
PersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
(
newInstance
!=
null
&&
oldInstance
.
getClass
()
==
newInstance
.
getClass
()
&&
// Also ensures the subtype is correct.
...
...
@@ -150,7 +151,7 @@ class ArrayPersistenceDelegate extends PersistenceDelegate {
}
}
class
ProxyPersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
ProxyPersistenceDelegate
extends
PersistenceDelegate
{
protected
Expression
instantiate
(
Object
oldInstance
,
Encoder
out
)
{
Class
<?>
type
=
oldInstance
.
getClass
();
java
.
lang
.
reflect
.
Proxy
p
=
(
java
.
lang
.
reflect
.
Proxy
)
oldInstance
;
...
...
@@ -185,7 +186,7 @@ class ProxyPersistenceDelegate extends PersistenceDelegate {
}
// Strings
class
java_lang_String_PersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
java_lang_String_PersistenceDelegate
extends
PersistenceDelegate
{
protected
Expression
instantiate
(
Object
oldInstance
,
Encoder
out
)
{
return
null
;
}
public
void
writeObject
(
Object
oldInstance
,
Encoder
out
)
{
...
...
@@ -194,7 +195,7 @@ class java_lang_String_PersistenceDelegate extends PersistenceDelegate {
}
// Classes
class
java_lang_Class_PersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
java_lang_Class_PersistenceDelegate
extends
PersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
oldInstance
.
equals
(
newInstance
);
}
...
...
@@ -228,7 +229,7 @@ class java_lang_Class_PersistenceDelegate extends PersistenceDelegate {
}
// Fields
class
java_lang_reflect_Field_PersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
java_lang_reflect_Field_PersistenceDelegate
extends
PersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
oldInstance
.
equals
(
newInstance
);
}
...
...
@@ -243,7 +244,7 @@ class java_lang_reflect_Field_PersistenceDelegate extends PersistenceDelegate {
}
// Methods
class
java_lang_reflect_Method_PersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
java_lang_reflect_Method_PersistenceDelegate
extends
PersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
oldInstance
.
equals
(
newInstance
);
}
...
...
@@ -267,7 +268,7 @@ class java_lang_reflect_Method_PersistenceDelegate extends PersistenceDelegate {
*
* @author Sergey A. Malenkov
*/
class
java_util_Date_PersistenceDelegate
extends
PersistenceDelegate
{
static
class
java_util_Date_PersistenceDelegate
extends
PersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
if
(!
super
.
mutatesTo
(
oldInstance
,
newInstance
))
{
return
false
;
...
...
@@ -290,7 +291,7 @@ class java_util_Date_PersistenceDelegate extends PersistenceDelegate {
*
* @author Sergey A. Malenkov
*/
final
class
java_sql_Timestamp_PersistenceDelegate
extends
java_util_Date_PersistenceDelegate
{
static
final
class
java_sql_Timestamp_PersistenceDelegate
extends
java_util_Date_PersistenceDelegate
{
private
static
final
Method
getNanosMethod
=
getNanosMethod
();
private
static
Method
getNanosMethod
()
{
...
...
@@ -354,7 +355,7 @@ delegates to be registered with concrete classes.
*
* @author Sergey A. Malenkov
*/
abstract
class
java_util_Collections
extends
PersistenceDelegate
{
private
static
abstract
class
java_util_Collections
extends
PersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
if
(!
super
.
mutatesTo
(
oldInstance
,
newInstance
))
{
return
false
;
...
...
@@ -367,6 +368,10 @@ abstract class java_util_Collections extends PersistenceDelegate {
return
(
oldC
.
size
()
==
newC
.
size
())
&&
oldC
.
containsAll
(
newC
);
}
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
// do not initialize these custom collections in default way
}
static
final
class
EmptyList_PersistenceDelegate
extends
java_util_Collections
{
protected
Expression
instantiate
(
Object
oldInstance
,
Encoder
out
)
{
return
new
Expression
(
oldInstance
,
Collections
.
class
,
"emptyList"
,
null
);
...
...
@@ -569,7 +574,7 @@ abstract class java_util_Collections extends PersistenceDelegate {
*
* @author Sergey A. Malenkov
*/
class
java_util_EnumMap_PersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
java_util_EnumMap_PersistenceDelegate
extends
PersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
super
.
mutatesTo
(
oldInstance
,
newInstance
)
&&
(
getType
(
oldInstance
)
==
getType
(
newInstance
));
}
...
...
@@ -588,7 +593,7 @@ class java_util_EnumMap_PersistenceDelegate extends PersistenceDelegate {
*
* @author Sergey A. Malenkov
*/
class
java_util_EnumSet_PersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
java_util_EnumSet_PersistenceDelegate
extends
PersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
super
.
mutatesTo
(
oldInstance
,
newInstance
)
&&
(
getType
(
oldInstance
)
==
getType
(
newInstance
));
}
...
...
@@ -603,7 +608,7 @@ class java_util_EnumSet_PersistenceDelegate extends PersistenceDelegate {
}
// Collection
class
java_util_Collection_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
class
java_util_Collection_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
java
.
util
.
Collection
<?>
oldO
=
(
java
.
util
.
Collection
)
oldInstance
;
java
.
util
.
Collection
<?>
newO
=
(
java
.
util
.
Collection
)
newInstance
;
...
...
@@ -618,7 +623,7 @@ class java_util_Collection_PersistenceDelegate extends DefaultPersistenceDelegat
}
// List
class
java_util_List_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
class
java_util_List_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
java
.
util
.
List
<?>
oldO
=
(
java
.
util
.
List
<?>)
oldInstance
;
java
.
util
.
List
<?>
newO
=
(
java
.
util
.
List
<?>)
newInstance
;
...
...
@@ -653,7 +658,7 @@ class java_util_List_PersistenceDelegate extends DefaultPersistenceDelegate {
// Map
class
java_util_Map_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
class
java_util_Map_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
// System.out.println("Initializing: " + newInstance);
java
.
util
.
Map
<?,?>
oldMap
=
(
java
.
util
.
Map
)
oldInstance
;
...
...
@@ -691,14 +696,14 @@ class java_util_Map_PersistenceDelegate extends DefaultPersistenceDelegate {
}
}
class
java_util_AbstractCollection_PersistenceDelegate
extends
java_util_Collection_PersistenceDelegate
{}
class
java_util_AbstractList_PersistenceDelegate
extends
java_util_List_PersistenceDelegate
{}
class
java_util_AbstractMap_PersistenceDelegate
extends
java_util_Map_PersistenceDelegate
{}
class
java_util_Hashtable_PersistenceDelegate
extends
java_util_Map_PersistenceDelegate
{}
static
final
class
java_util_AbstractCollection_PersistenceDelegate
extends
java_util_Collection_PersistenceDelegate
{}
static
final
class
java_util_AbstractList_PersistenceDelegate
extends
java_util_List_PersistenceDelegate
{}
static
final
class
java_util_AbstractMap_PersistenceDelegate
extends
java_util_Map_PersistenceDelegate
{}
static
final
class
java_util_Hashtable_PersistenceDelegate
extends
java_util_Map_PersistenceDelegate
{}
// Beans
class
java_beans_beancontext_BeanContextSupport_PersistenceDelegate
extends
java_util_Collection_PersistenceDelegate
{}
static
final
class
java_beans_beancontext_BeanContextSupport_PersistenceDelegate
extends
java_util_Collection_PersistenceDelegate
{}
// AWT
...
...
@@ -709,7 +714,7 @@ class java_beans_beancontext_BeanContextSupport_PersistenceDelegate extends java
*
* @author Sergey A. Malenkov
*/
final
class
java_awt_Insets_PersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
java_awt_Insets_PersistenceDelegate
extends
PersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
oldInstance
.
equals
(
newInstance
);
}
...
...
@@ -733,7 +738,7 @@ final class java_awt_Insets_PersistenceDelegate extends PersistenceDelegate {
*
* @author Sergey A. Malenkov
*/
final
class
java_awt_Font_PersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
java_awt_Font_PersistenceDelegate
extends
PersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
oldInstance
.
equals
(
newInstance
);
}
...
...
@@ -802,7 +807,7 @@ final class java_awt_Font_PersistenceDelegate extends PersistenceDelegate {
*
* @author Sergey A. Malenkov
*/
final
class
java_awt_AWTKeyStroke_PersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
java_awt_AWTKeyStroke_PersistenceDelegate
extends
PersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
oldInstance
.
equals
(
newInstance
);
}
...
...
@@ -843,7 +848,7 @@ final class java_awt_AWTKeyStroke_PersistenceDelegate extends PersistenceDelegat
}
}
class
StaticFieldsPersistenceDelegate
extends
PersistenceDelegate
{
static
class
StaticFieldsPersistenceDelegate
extends
PersistenceDelegate
{
protected
void
installFields
(
Encoder
out
,
Class
<?>
cls
)
{
Field
fields
[]
=
cls
.
getFields
();
for
(
int
i
=
0
;
i
<
fields
.
length
;
i
++)
{
...
...
@@ -870,13 +875,13 @@ class StaticFieldsPersistenceDelegate extends PersistenceDelegate {
}
// SystemColor
class
java_awt_SystemColor_PersistenceDelegate
extends
StaticFieldsPersistenceDelegate
{}
static
final
class
java_awt_SystemColor_PersistenceDelegate
extends
StaticFieldsPersistenceDelegate
{}
// TextAttribute
class
java_awt_font_TextAttribute_PersistenceDelegate
extends
StaticFieldsPersistenceDelegate
{}
static
final
class
java_awt_font_TextAttribute_PersistenceDelegate
extends
StaticFieldsPersistenceDelegate
{}
// MenuShortcut
class
java_awt_MenuShortcut_PersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
java_awt_MenuShortcut_PersistenceDelegate
extends
PersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
oldInstance
.
equals
(
newInstance
);
}
...
...
@@ -889,7 +894,7 @@ class java_awt_MenuShortcut_PersistenceDelegate extends PersistenceDelegate {
}
// Component
class
java_awt_Component_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
java_awt_Component_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
super
.
initialize
(
type
,
oldInstance
,
newInstance
,
out
);
java
.
awt
.
Component
c
=
(
java
.
awt
.
Component
)
oldInstance
;
...
...
@@ -936,7 +941,7 @@ class java_awt_Component_PersistenceDelegate extends DefaultPersistenceDelegate
}
// Container
class
java_awt_Container_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
java_awt_Container_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
super
.
initialize
(
type
,
oldInstance
,
newInstance
,
out
);
// Ignore the children of a JScrollPane.
...
...
@@ -971,7 +976,7 @@ class java_awt_Container_PersistenceDelegate extends DefaultPersistenceDelegate
}
// Choice
class
java_awt_Choice_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
java_awt_Choice_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
super
.
initialize
(
type
,
oldInstance
,
newInstance
,
out
);
java
.
awt
.
Choice
m
=
(
java
.
awt
.
Choice
)
oldInstance
;
...
...
@@ -983,7 +988,7 @@ class java_awt_Choice_PersistenceDelegate extends DefaultPersistenceDelegate {
}
// Menu
class
java_awt_Menu_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
java_awt_Menu_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
super
.
initialize
(
type
,
oldInstance
,
newInstance
,
out
);
java
.
awt
.
Menu
m
=
(
java
.
awt
.
Menu
)
oldInstance
;
...
...
@@ -995,7 +1000,7 @@ class java_awt_Menu_PersistenceDelegate extends DefaultPersistenceDelegate {
}
// MenuBar
class
java_awt_MenuBar_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
java_awt_MenuBar_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
super
.
initialize
(
type
,
oldInstance
,
newInstance
,
out
);
java
.
awt
.
MenuBar
m
=
(
java
.
awt
.
MenuBar
)
oldInstance
;
...
...
@@ -1007,7 +1012,7 @@ class java_awt_MenuBar_PersistenceDelegate extends DefaultPersistenceDelegate {
}
// List
class
java_awt_List_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
java_awt_List_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
super
.
initialize
(
type
,
oldInstance
,
newInstance
,
out
);
java
.
awt
.
List
m
=
(
java
.
awt
.
List
)
oldInstance
;
...
...
@@ -1022,7 +1027,7 @@ class java_awt_List_PersistenceDelegate extends DefaultPersistenceDelegate {
// LayoutManagers
// BorderLayout
class
java_awt_BorderLayout_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
java_awt_BorderLayout_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
private
static
final
String
[]
CONSTRAINTS
=
{
BorderLayout
.
NORTH
,
BorderLayout
.
SOUTH
,
...
...
@@ -1053,40 +1058,43 @@ class java_awt_BorderLayout_PersistenceDelegate extends DefaultPersistenceDelega
}
// CardLayout
class
java_awt_CardLayout_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
java_awt_CardLayout_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
super
.
initialize
(
type
,
oldInstance
,
newInstance
,
out
);
Hashtable
<?,?>
tab
=
(
Hashtable
<?,?>)
ReflectionUtils
.
getPrivateField
(
oldInstance
,
java
.
awt
.
CardLayout
.
class
,
"tab"
,
out
.
getExceptionListener
());
if
(
tab
!=
null
)
{
for
(
Enumeration
<?>
e
=
tab
.
keys
();
e
.
hasMoreElements
();)
{
Object
child
=
e
.
nextElement
();
invokeStatement
(
oldInstance
,
"addLayoutComponent"
,
new
Object
[]{
child
,
(
String
)
tab
.
get
(
child
)},
out
);
if
(
getVector
(
newInstance
).
isEmpty
())
{
for
(
Object
card
:
getVector
(
oldInstance
))
{
Object
[]
args
=
{
MetaData
.
getPrivateFieldValue
(
card
,
"java.awt.CardLayout$Card.name"
),
MetaData
.
getPrivateFieldValue
(
card
,
"java.awt.CardLayout$Card.comp"
)};
invokeStatement
(
oldInstance
,
"addLayoutComponent"
,
args
,
out
);
}
}
}
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
super
.
mutatesTo
(
oldInstance
,
newInstance
)
&&
getVector
(
newInstance
).
isEmpty
();
}
private
static
Vector
<?>
getVector
(
Object
instance
)
{
return
(
Vector
<?>)
MetaData
.
getPrivateFieldValue
(
instance
,
"java.awt.CardLayout.vector"
);
}
}
// GridBagLayout
class
java_awt_GridBagLayout_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
java_awt_GridBagLayout_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
super
.
initialize
(
type
,
oldInstance
,
newInstance
,
out
);
Hashtable
<?,?>
comptable
=
(
Hashtable
<?,?>)
ReflectionUtils
.
getPrivateField
(
oldInstance
,
java
.
awt
.
GridBagLayout
.
class
,
"comptable"
,
out
.
getExceptionListener
());
if
(
comptable
!=
null
)
{
for
(
Enumeration
<?>
e
=
comptable
.
keys
();
e
.
hasMoreElements
();)
{
Object
child
=
e
.
nextElement
();
invokeStatement
(
oldInstance
,
"addLayoutComponent"
,
new
Object
[]{
child
,
comptable
.
get
(
child
)},
out
);
if
(
getHashtable
(
newInstance
).
isEmpty
())
{
for
(
Map
.
Entry
<?,?>
entry
:
getHashtable
(
oldInstance
).
entrySet
())
{
Object
[]
args
=
{
entry
.
getKey
(),
entry
.
getValue
()};
invokeStatement
(
oldInstance
,
"addLayoutComponent"
,
args
,
out
);
}
}
}
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
super
.
mutatesTo
(
oldInstance
,
newInstance
)
&&
getHashtable
(
newInstance
).
isEmpty
();
}
private
static
Hashtable
<?,?>
getHashtable
(
Object
instance
)
{
return
(
Hashtable
<?,?>)
MetaData
.
getPrivateFieldValue
(
instance
,
"java.awt.GridBagLayout.comptable"
);
}
}
...
...
@@ -1095,7 +1103,7 @@ class java_awt_GridBagLayout_PersistenceDelegate extends DefaultPersistenceDeleg
// JFrame (If we do this for Window instead of JFrame, the setVisible call
// will be issued before we have added all the children to the JFrame and
// will appear blank).
class
javax_swing_JFrame_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
javax_swing_JFrame_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
super
.
initialize
(
type
,
oldInstance
,
newInstance
,
out
);
java
.
awt
.
Window
oldC
=
(
java
.
awt
.
Window
)
oldInstance
;
...
...
@@ -1115,7 +1123,7 @@ class javax_swing_JFrame_PersistenceDelegate extends DefaultPersistenceDelegate
// Models
// DefaultListModel
class
javax_swing_DefaultListModel_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
javax_swing_DefaultListModel_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
// Note, the "size" property will be set here.
super
.
initialize
(
type
,
oldInstance
,
newInstance
,
out
);
...
...
@@ -1129,7 +1137,7 @@ class javax_swing_DefaultListModel_PersistenceDelegate extends DefaultPersistenc
}
// DefaultComboBoxModel
class
javax_swing_DefaultComboBoxModel_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
javax_swing_DefaultComboBoxModel_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
super
.
initialize
(
type
,
oldInstance
,
newInstance
,
out
);
javax
.
swing
.
DefaultComboBoxModel
<?>
m
=
(
javax
.
swing
.
DefaultComboBoxModel
<?>)
oldInstance
;
...
...
@@ -1141,7 +1149,7 @@ class javax_swing_DefaultComboBoxModel_PersistenceDelegate extends DefaultPersis
// DefaultMutableTreeNode
class
javax_swing_tree_DefaultMutableTreeNode_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
javax_swing_tree_DefaultMutableTreeNode_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
super
.
initialize
(
type
,
oldInstance
,
newInstance
,
out
);
...
...
@@ -1157,7 +1165,7 @@ class javax_swing_tree_DefaultMutableTreeNode_PersistenceDelegate extends Defaul
}
// ToolTipManager
class
javax_swing_ToolTipManager_PersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
javax_swing_ToolTipManager_PersistenceDelegate
extends
PersistenceDelegate
{
protected
Expression
instantiate
(
Object
oldInstance
,
Encoder
out
)
{
return
new
Expression
(
oldInstance
,
javax
.
swing
.
ToolTipManager
.
class
,
"sharedInstance"
,
new
Object
[]{});
...
...
@@ -1165,7 +1173,7 @@ class javax_swing_ToolTipManager_PersistenceDelegate extends PersistenceDelegate
}
// JTabbedPane
class
javax_swing_JTabbedPane_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
javax_swing_JTabbedPane_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
super
.
initialize
(
type
,
oldInstance
,
newInstance
,
out
);
javax
.
swing
.
JTabbedPane
p
=
(
javax
.
swing
.
JTabbedPane
)
oldInstance
;
...
...
@@ -1180,7 +1188,7 @@ class javax_swing_JTabbedPane_PersistenceDelegate extends DefaultPersistenceDele
}
// Box
class
javax_swing_Box_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
javax_swing_Box_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
super
.
mutatesTo
(
oldInstance
,
newInstance
)
&&
getAxis
(
oldInstance
).
equals
(
getAxis
(
newInstance
));
}
...
...
@@ -1201,7 +1209,7 @@ class javax_swing_Box_PersistenceDelegate extends DefaultPersistenceDelegate {
// Container will return all of the sub menu items that
// need to be added to the menu item.
// Not so for JMenu apparently.
class
javax_swing_JMenu_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
static
final
class
javax_swing_JMenu_PersistenceDelegate
extends
DefaultPersistenceDelegate
{
protected
void
initialize
(
Class
<?>
type
,
Object
oldInstance
,
Object
newInstance
,
Encoder
out
)
{
super
.
initialize
(
type
,
oldInstance
,
newInstance
,
out
);
javax
.
swing
.
JMenu
m
=
(
javax
.
swing
.
JMenu
)
oldInstance
;
...
...
@@ -1219,7 +1227,7 @@ class javax_swing_JMenu_PersistenceDelegate extends DefaultPersistenceDelegate {
*
* @author Sergey A. Malenkov
*/
final
class
javax_swing_border_MatteBorder_PersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
javax_swing_border_MatteBorder_PersistenceDelegate
extends
PersistenceDelegate
{
protected
Expression
instantiate
(
Object
oldInstance
,
Encoder
out
)
{
MatteBorder
border
=
(
MatteBorder
)
oldInstance
;
Insets
insets
=
border
.
getBorderInsets
();
...
...
@@ -1239,7 +1247,7 @@ final class javax_swing_border_MatteBorder_PersistenceDelegate extends Persisten
}
/* XXX - doens't seem to work. Debug later.
class javax_swing_JMenu_PersistenceDelegate extends DefaultPersistenceDelegate {
static final
class javax_swing_JMenu_PersistenceDelegate extends DefaultPersistenceDelegate {
protected void initialize(Class<?> type, Object oldInstance, Object newInstance, Encoder out) {
super.initialize(type, oldInstance, newInstance, out);
javax.swing.JMenu m = (javax.swing.JMenu)oldInstance;
...
...
@@ -1261,7 +1269,7 @@ class javax_swing_JMenu_PersistenceDelegate extends DefaultPersistenceDelegate {
*
* @author Sergey A. Malenkov
*/
final
class
sun_swing_PrintColorUIResource_PersistenceDelegate
extends
PersistenceDelegate
{
static
final
class
sun_swing_PrintColorUIResource_PersistenceDelegate
extends
PersistenceDelegate
{
protected
boolean
mutatesTo
(
Object
oldInstance
,
Object
newInstance
)
{
return
oldInstance
.
equals
(
newInstance
);
}
...
...
@@ -1273,7 +1281,6 @@ final class sun_swing_PrintColorUIResource_PersistenceDelegate extends Persisten
}
}
class
MetaData
{
private
static
final
Map
<
String
,
Field
>
fields
=
Collections
.
synchronizedMap
(
new
WeakHashMap
<
String
,
Field
>());
private
static
Hashtable
<
String
,
PersistenceDelegate
>
internalPersistenceDelegates
=
new
Hashtable
<>();
...
...
@@ -1316,7 +1323,7 @@ class MetaData {
if
(
Enum
.
class
.
isAssignableFrom
(
type
))
{
return
enumPersistenceDelegate
;
}
if
(
ReflectionUtils
.
isPrimitive
(
type
))
{
if
(
null
!=
XMLEncoder
.
primitiveTypeFor
(
type
))
{
return
primitivePersistenceDelegate
;
}
// The persistence delegate for arrays is non-trivial; instantiate it lazily.
...
...
@@ -1350,7 +1357,7 @@ class MetaData {
internalPersistenceDelegates
.
put
(
typeName
,
defaultPersistenceDelegate
);
try
{
String
name
=
type
.
getName
();
Class
c
=
Class
.
forName
(
"java.beans."
+
name
.
replace
(
'.'
,
'_'
)
Class
c
=
Class
.
forName
(
"java.beans.
MetaData$
"
+
name
.
replace
(
'.'
,
'_'
)
+
"_PersistenceDelegate"
);
pd
=
(
PersistenceDelegate
)
c
.
newInstance
();
internalPersistenceDelegates
.
put
(
typeName
,
pd
);
...
...
src/share/classes/java/beans/XMLEncoder.java
浏览文件 @
2ff3b4e4
...
...
@@ -604,7 +604,7 @@ public class XMLEncoder extends Encoder implements AutoCloseable {
return
;
}
Class
<?>
primitiveType
=
ReflectionUtils
.
primitiveTypeFor
(
value
.
getClass
());
Class
<?>
primitiveType
=
primitiveTypeFor
(
value
.
getClass
());
if
(
primitiveType
!=
null
&&
target
==
value
.
getClass
()
&&
methodName
.
equals
(
"new"
))
{
String
primitiveTypeName
=
primitiveType
.
getName
();
...
...
@@ -778,4 +778,18 @@ public class XMLEncoder extends Encoder implements AutoCloseable {
indentation
--;
writeln
(
"</"
+
tag
+
">"
);
}
@SuppressWarnings
(
"rawtypes"
)
static
Class
primitiveTypeFor
(
Class
wrapper
)
{
if
(
wrapper
==
Boolean
.
class
)
return
Boolean
.
TYPE
;
if
(
wrapper
==
Byte
.
class
)
return
Byte
.
TYPE
;
if
(
wrapper
==
Character
.
class
)
return
Character
.
TYPE
;
if
(
wrapper
==
Short
.
class
)
return
Short
.
TYPE
;
if
(
wrapper
==
Integer
.
class
)
return
Integer
.
TYPE
;
if
(
wrapper
==
Long
.
class
)
return
Long
.
TYPE
;
if
(
wrapper
==
Float
.
class
)
return
Float
.
TYPE
;
if
(
wrapper
==
Double
.
class
)
return
Double
.
TYPE
;
if
(
wrapper
==
Void
.
class
)
return
Void
.
TYPE
;
return
null
;
}
}
src/share/classes/java/lang/reflect/Executable.java
浏览文件 @
2ff3b4e4
...
...
@@ -515,7 +515,7 @@ public abstract class Executable extends AccessibleObject
this
,
getDeclaringClass
(),
returnType
,
TypeAnnotation
.
TypeAnnotationTarget
.
METHOD_RETURN_TYPE
);
TypeAnnotation
.
TypeAnnotationTarget
.
METHOD_RETURN
);
}
/**
...
...
@@ -540,7 +540,7 @@ public abstract class Executable extends AccessibleObject
this
,
getDeclaringClass
(),
getDeclaringClass
(),
TypeAnnotation
.
TypeAnnotationTarget
.
METHOD_RECEIVER_TYPE
);
TypeAnnotation
.
TypeAnnotationTarget
.
METHOD_RECEIVER
);
}
/**
...
...
@@ -556,7 +556,13 @@ public abstract class Executable extends AccessibleObject
* @since 1.8
*/
public
AnnotatedType
[]
getAnnotatedParameterTypes
()
{
throw
new
UnsupportedOperationException
(
"Not yet"
);
return
TypeAnnotationParser
.
buildAnnotatedTypes
(
getTypeAnnotationBytes
(),
sun
.
misc
.
SharedSecrets
.
getJavaLangAccess
().
getConstantPool
(
getDeclaringClass
()),
this
,
getDeclaringClass
(),
getParameterTypes
(),
TypeAnnotation
.
TypeAnnotationTarget
.
METHOD_FORMAL_PARAMETER
);
}
/**
...
...
src/share/classes/java/lang/reflect/Field.java
浏览文件 @
2ff3b4e4
...
...
@@ -1161,6 +1161,6 @@ class Field extends AccessibleObject implements Member {
this
,
getDeclaringClass
(),
getGenericType
(),
TypeAnnotation
.
TypeAnnotationTarget
.
FIELD
_TYPE
);
TypeAnnotation
.
TypeAnnotationTarget
.
FIELD
);
}
}
src/share/classes/java/lang/reflect/Modifier.java
浏览文件 @
2ff3b4e4
...
...
@@ -350,8 +350,19 @@ public class Modifier {
return
(
mod
&
MANDATED
)
!=
0
;
}
/**
* See JLSv3 section 8.1.1.
// Note on the FOO_MODIFIERS fields and fooModifiers() methods:
// the sets of modifiers are not guaranteed to be constants
// across time and Java SE releases. Therefore, it would not be
// appropriate to expose an external interface to this information
// that would allow the values to be treated as Java-level
// constants since the values could be constant folded and updates
// to the sets of modifiers missed. Thus, the fooModifiers()
// methods return an unchanging values for a given release, but a
// value that can potentially change over time.
/**
* The Java source modifiers that can be applied to a class.
* @jls 8.1.1 Class Modifiers
*/
private
static
final
int
CLASS_MODIFIERS
=
Modifier
.
PUBLIC
|
Modifier
.
PROTECTED
|
Modifier
.
PRIVATE
|
...
...
@@ -359,7 +370,8 @@ public class Modifier {
Modifier
.
STRICT
;
/**
* See JLSv3 section 9.1.1.
* The Java source modifiers that can be applied to an interface.
* @jls 9.1.1 Interface Modifiers
*/
private
static
final
int
INTERFACE_MODIFIERS
=
Modifier
.
PUBLIC
|
Modifier
.
PROTECTED
|
Modifier
.
PRIVATE
|
...
...
@@ -367,13 +379,15 @@ public class Modifier {
/**
* See JLSv3 section 8.8.3.
* The Java source modifiers that can be applied to a constructor.
* @jls 8.8.3 Constructor Modifiers
*/
private
static
final
int
CONSTRUCTOR_MODIFIERS
=
Modifier
.
PUBLIC
|
Modifier
.
PROTECTED
|
Modifier
.
PRIVATE
;
/**
* See JLSv3 section 8.4.3.
* The Java source modifiers that can be applied to a method.
* @jls8.4.3 Method Modifiers
*/
private
static
final
int
METHOD_MODIFIERS
=
Modifier
.
PUBLIC
|
Modifier
.
PROTECTED
|
Modifier
.
PRIVATE
|
...
...
@@ -381,13 +395,21 @@ public class Modifier {
Modifier
.
SYNCHRONIZED
|
Modifier
.
NATIVE
|
Modifier
.
STRICT
;
/**
* See JLSv3 section 8.3.1.
* The Java source modifiers that can be applied to a field.
* @jls 8.3.1 Field Modifiers
*/
private
static
final
int
FIELD_MODIFIERS
=
Modifier
.
PUBLIC
|
Modifier
.
PROTECTED
|
Modifier
.
PRIVATE
|
Modifier
.
STATIC
|
Modifier
.
FINAL
|
Modifier
.
TRANSIENT
|
Modifier
.
VOLATILE
;
/**
* The Java source modifiers that can be applied to a method or constructor parameter.
* @jls 8.4.1 Formal Parameters
*/
private
static
final
int
PARAMETER_MODIFIERS
=
Modifier
.
FINAL
;
/**
*
*/
...
...
@@ -411,7 +433,7 @@ public class Modifier {
* Return an {@code int} value OR-ing together the source language
* modifiers that can be applied to an interface.
* @return an {@code int} value OR-ing together the source language
* modifiers that can be applied to an inteface.
* modifiers that can be applied to an inte
r
face.
*
* @jls 9.1.1 Interface Modifiers
* @since 1.7
...
...
@@ -446,7 +468,6 @@ public class Modifier {
return
METHOD_MODIFIERS
;
}
/**
* Return an {@code int} value OR-ing together the source language
* modifiers that can be applied to a field.
...
...
@@ -459,4 +480,17 @@ public class Modifier {
public
static
int
fieldModifiers
()
{
return
FIELD_MODIFIERS
;
}
/**
* Return an {@code int} value OR-ing together the source language
* modifiers that can be applied to a parameter.
* @return an {@code int} value OR-ing together the source language
* modifiers that can be applied to a parameter.
*
* @jls 8.4.1 Formal Parameters
* @since 1.8
*/
public
static
int
parameterModifiers
()
{
return
PARAMETER_MODIFIERS
;
}
}
src/share/classes/java/lang/reflect/Parameter.java
浏览文件 @
2ff3b4e4
...
...
@@ -200,6 +200,19 @@ public final class Parameter implements AnnotatedElement {
return
tmp
;
}
/**
* Returns an AnnotatedType object that represents the use of a type to
* specify the type of the formal parameter represented by this Parameter.
*
* @return an {@code AnnotatedType} object representing the use of a type
* to specify the type of the formal parameter represented by this
* Parameter
*/
public
AnnotatedType
getAnnotatedType
()
{
// no caching for now
return
executable
.
getAnnotatedParameterTypes
()[
index
];
}
private
transient
volatile
Class
<?>
parameterClassCache
=
null
;
/**
...
...
src/share/classes/java/util/regex/Pattern.java
浏览文件 @
2ff3b4e4
/*
* Copyright (c) 1999, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
3
, 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,15 +25,19 @@
package
java.util.regex
;
import
java.security.AccessController
;
import
java.security.PrivilegedAction
;
import
java.text.CharacterIterator
;
import
java.text.Normalizer
;
import
java.util.Locale
;
import
java.util.Iterator
;
import
java.util.Map
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.Arrays
;
import
java.util.NoSuchElementException
;
import
java.util.Spliterator
;
import
java.util.Spliterators
;
import
java.util.function.Predicate
;
import
java.util.stream.Stream
;
import
java.util.stream.StreamSupport
;
/**
...
...
@@ -5742,4 +5746,83 @@ NEXT: while (i <= last) {
return
Character
.
isMirrored
(
ch
);}});
}
}
/**
* Creates a predicate which can be used to match a string.
*
* @return The predicate which can be used for matching on a string
* @since 1.8
*/
public
Predicate
<
String
>
asPredicate
()
{
return
s
->
matcher
(
s
).
find
();
}
/**
* Creates a stream from the given input sequence around matches of this
* pattern.
*
* <p> The stream returned by this method contains each substring of the
* input sequence that is terminated by another subsequence that matches
* this pattern or is terminated by the end of the input sequence. The
* substrings in the stream are in the order in which they occur in the
* input.
*
* <p> If this pattern does not match any subsequence of the input then
* the resulting stream has just one element, namely the input sequence in
* string form.
*
* <p> If the input sequence is mutable, it must remain constant during the
* execution of the terminal stream operation. Otherwise, the result of the
* terminal stream operation is undefined.
*
* @param input
* The character sequence to be split
*
* @return The stream of strings computed by splitting the input
* around matches of this pattern
* @see #split(CharSequence)
* @since 1.8
*/
public
Stream
<
String
>
splitAsStream
(
final
CharSequence
input
)
{
class
MatcherIterator
implements
Iterator
<
String
>
{
private
final
Matcher
matcher
;
// The start position of the next sub-sequence of input
// when current == input.length there are no more elements
private
int
current
;
// null if the next element, if any, needs to obtained
private
String
nextElement
;
MatcherIterator
()
{
this
.
matcher
=
matcher
(
input
);
}
public
String
next
()
{
if
(!
hasNext
())
throw
new
NoSuchElementException
();
String
n
=
nextElement
;
nextElement
=
null
;
return
n
;
}
public
boolean
hasNext
()
{
if
(
nextElement
!=
null
)
return
true
;
if
(
current
==
input
.
length
())
return
false
;
if
(
matcher
.
find
())
{
nextElement
=
input
.
subSequence
(
current
,
matcher
.
start
()).
toString
();
current
=
matcher
.
end
();
}
else
{
nextElement
=
input
.
subSequence
(
current
,
input
.
length
()).
toString
();
current
=
input
.
length
();
}
return
true
;
}
}
return
StreamSupport
.
stream
(
Spliterators
.
spliteratorUnknownSize
(
new
MatcherIterator
(),
Spliterator
.
ORDERED
|
Spliterator
.
NONNULL
));
}
}
src/share/classes/javax/swing/JDesktopPane.java
浏览文件 @
2ff3b4e4
...
...
@@ -427,6 +427,15 @@ public class JDesktopPane extends JLayeredPane implements Accessible
}
}
/**
* {@inheritDoc}
*/
@Override
public
void
remove
(
Component
comp
)
{
super
.
remove
(
comp
);
updateFramesCache
();
}
/**
* Selects the next <code>JInternalFrame</code> in this desktop pane.
*
...
...
src/share/classes/sun/java2d/pipe/AAShapePipe.java
浏览文件 @
2ff3b4e4
...
...
@@ -127,7 +127,7 @@ public class AAShapePipe
private
static
byte
[]
theTile
;
p
ublic
synchronized
static
byte
[]
getAlphaTile
(
int
len
)
{
p
rivate
synchronized
static
byte
[]
getAlphaTile
(
int
len
)
{
byte
[]
t
=
theTile
;
if
(
t
==
null
||
t
.
length
<
len
)
{
t
=
new
byte
[
len
];
...
...
@@ -137,7 +137,7 @@ public class AAShapePipe
return
t
;
}
p
ublic
synchronized
static
void
dropAlphaTile
(
byte
[]
t
)
{
p
rivate
synchronized
static
void
dropAlphaTile
(
byte
[]
t
)
{
theTile
=
t
;
}
...
...
src/share/classes/sun/reflect/annotation/TypeAnnotation.java
浏览文件 @
2ff3b4e4
...
...
@@ -83,12 +83,13 @@ public class TypeAnnotation {
CLASS_TYPE_PARAMETER
,
METHOD_TYPE_PARAMETER
,
CLASS_EXTENDS
,
CLASS_IMPLEMENTS
,
CLASS_PARAMETER_BOUND
,
METHOD_PARAMETER_BOUND
,
METHOD_RETURN_TYPE
,
METHOD_RECEIVER_TYPE
,
FIELD_TYPE
,
CLASS_IMPLEMENTS
,
// Not in the spec
CLASS_TYPE_PARAMETER_BOUND
,
METHOD_TYPE_PARAMETER_BOUND
,
FIELD
,
METHOD_RETURN
,
METHOD_RECEIVER
,
METHOD_FORMAL_PARAMETER
,
THROWS
;
}
public
static
class
TypeAnnotationTargetInfo
{
...
...
src/share/classes/sun/reflect/annotation/TypeAnnotationParser.java
浏览文件 @
2ff3b4e4
...
...
@@ -282,10 +282,10 @@ public class TypeAnnotationParser {
AnnotatedElement
boundsDecl
;
TypeAnnotationTarget
target
;
if
(
decl
instanceof
Class
)
{
target
=
TypeAnnotationTarget
.
CLASS_PARAMETER_BOUND
;
target
=
TypeAnnotationTarget
.
CLASS_
TYPE_
PARAMETER_BOUND
;
boundsDecl
=
(
Class
)
decl
;
}
else
{
target
=
TypeAnnotationTarget
.
METHOD_PARAMETER_BOUND
;
target
=
TypeAnnotationTarget
.
METHOD_
TYPE_
PARAMETER_BOUND
;
boundsDecl
=
(
Executable
)
decl
;
}
return
TypeAnnotation
.
filter
(
TypeAnnotationParser
.
parseAllTypeAnnotations
(
boundsDecl
),
target
);
...
...
@@ -371,14 +371,15 @@ public class TypeAnnotationParser {
private
static
final
byte
LOCAL_VARIABLE
=
(
byte
)
0x40
;
private
static
final
byte
RESOURCE_VARIABLE
=
(
byte
)
0x41
;
private
static
final
byte
EXCEPTION_PARAMETER
=
(
byte
)
0x42
;
private
static
final
byte
CAST
=
(
byte
)
0x43
;
private
static
final
byte
INSTANCEOF
=
(
byte
)
0x44
;
private
static
final
byte
NEW
=
(
byte
)
0x45
;
private
static
final
byte
CONSTRUCTOR_REFERENCE_RECEIVER
=
(
byte
)
0x46
;
private
static
final
byte
METHOD_REFERENCE_RECEIVER
=
(
byte
)
0x47
;
private
static
final
byte
LAMBDA_FORMAL_PARAMETER
=
(
byte
)
0x48
;
private
static
final
byte
METHOD_REFERENCE
=
(
byte
)
0x49
;
private
static
final
byte
METHOD_REFERENCE_TYPE_ARGUMENT
=
(
byte
)
0x50
;
private
static
final
byte
INSTANCEOF
=
(
byte
)
0x43
;
private
static
final
byte
NEW
=
(
byte
)
0x44
;
private
static
final
byte
CONSTRUCTOR_REFERENCE
=
(
byte
)
0x45
;
private
static
final
byte
METHOD_REFERENCE
=
(
byte
)
0x46
;
private
static
final
byte
CAST
=
(
byte
)
0x47
;
private
static
final
byte
CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT
=
(
byte
)
0x48
;
private
static
final
byte
METHOD_INVOCATION_TYPE_ARGUMENT
=
(
byte
)
0x49
;
private
static
final
byte
CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT
=
(
byte
)
0x4A
;
private
static
final
byte
METHOD_REFERENCE_TYPE_ARGUMENT
=
(
byte
)
0x4B
;
private
static
TypeAnnotation
parseTypeAnnotation
(
ByteBuffer
buf
,
ConstantPool
cp
,
...
...
@@ -417,19 +418,20 @@ public class TypeAnnotationParser {
return
res
;
}}
break
;
case
CLASS_TYPE_PARAMETER_BOUND:
return
parse2ByteTarget
(
TypeAnnotationTarget
.
CLASS_PARAMETER_BOUND
,
buf
);
return
parse2ByteTarget
(
TypeAnnotationTarget
.
CLASS_
TYPE_
PARAMETER_BOUND
,
buf
);
case
METHOD_TYPE_PARAMETER_BOUND:
return
parse2ByteTarget
(
TypeAnnotationTarget
.
METHOD_PARAMETER_BOUND
,
buf
);
return
parse2ByteTarget
(
TypeAnnotationTarget
.
METHOD_
TYPE_
PARAMETER_BOUND
,
buf
);
case
FIELD:
return
new
TypeAnnotationTargetInfo
(
TypeAnnotationTarget
.
FIELD
_TYPE
);
return
new
TypeAnnotationTargetInfo
(
TypeAnnotationTarget
.
FIELD
);
case
METHOD_RETURN:
return
new
TypeAnnotationTargetInfo
(
TypeAnnotationTarget
.
METHOD_RETURN
_TYPE
);
return
new
TypeAnnotationTargetInfo
(
TypeAnnotationTarget
.
METHOD_RETURN
);
case
METHOD_RECEIVER:
return
new
TypeAnnotationTargetInfo
(
TypeAnnotationTarget
.
METHOD_RECEIVER
_TYPE
);
return
new
TypeAnnotationTargetInfo
(
TypeAnnotationTarget
.
METHOD_RECEIVER
);
case
METHOD_FORMAL_PARAMETER:
{
// Todo
byte
index
=
buf
.
get
();
}
break
;
return
new
TypeAnnotationTargetInfo
(
TypeAnnotationTarget
.
METHOD_FORMAL_PARAMETER
,
index
);
}
//unreachable break;
case
THROWS:
return
parseShortTarget
(
TypeAnnotationTarget
.
THROWS
,
buf
);
...
...
@@ -445,30 +447,27 @@ public class TypeAnnotationParser {
short
varLength
=
buf
.
getShort
();
short
index
=
buf
.
getShort
();
}
break
;
return
null
;
case
EXCEPTION_PARAMETER:
{
byte
index
=
buf
.
get
();
}
break
;
case
CAST:
}
return
null
;
case
INSTANCEOF:
case
NEW:
{
case
NEW:
case
CONSTRUCTOR_REFERENCE:
case
METHOD_REFERENCE:
{
short
offset
=
buf
.
getShort
();
}
break
;
case
CONSTRUCTOR_REFERENCE_RECEIVER:
case
METHOD_REFERENCE_RECEIVER:
{
short
offset
=
buf
.
getShort
();
byte
index
=
buf
.
get
();
}
break
;
case
LAMBDA_FORMAL_PARAMETER:
{
byte
index
=
buf
.
get
();
}
break
;
case
METHOD_REFERENCE:
// This one isn't in the spec yet
break
;
}
return
null
;
case
CAST:
case
CONSTRUCTOR_INVOCATION_TYPE_ARGUMENT:
case
METHOD_INVOCATION_TYPE_ARGUMENT:
case
CONSTRUCTOR_REFERENCE_TYPE_ARGUMENT:
case
METHOD_REFERENCE_TYPE_ARGUMENT:
{
short
offset
=
buf
.
getShort
();
byte
index
=
buf
.
get
();
}
break
;
}
return
null
;
default
:
// will throw error below
...
...
src/share/classes/sun/security/provider/certpath/CertPathHelper.java
浏览文件 @
2ff3b4e4
...
...
@@ -64,7 +64,7 @@ public abstract class CertPathHelper {
instance
.
implSetPathToNames
(
sel
,
names
);
}
static
void
setDateAndTime
(
X509CRLSelector
sel
,
Date
date
,
long
skew
)
{
public
static
void
setDateAndTime
(
X509CRLSelector
sel
,
Date
date
,
long
skew
)
{
instance
.
implSetDateAndTime
(
sel
,
date
,
skew
);
}
}
src/share/classes/sun/security/provider/certpath/DistributionPointFetcher.java
浏览文件 @
2ff3b4e4
...
...
@@ -50,7 +50,7 @@ import sun.security.x509.*;
* @author Sean Mullan
* @since 1.4.2
*/
class
DistributionPointFetcher
{
public
class
DistributionPointFetcher
{
private
static
final
Debug
debug
=
Debug
.
getInstance
(
"certpath"
);
...
...
@@ -66,8 +66,9 @@ class DistributionPointFetcher {
* Return the X509CRLs matching this selector. The selector must be
* an X509CRLSelector with certificateChecking set.
*/
static
Collection
<
X509CRL
>
getCRLs
(
X509CRLSelector
selector
,
boolean
signFlag
,
PublicKey
prevKey
,
public
static
Collection
<
X509CRL
>
getCRLs
(
X509CRLSelector
selector
,
boolean
signFlag
,
PublicKey
prevKey
,
String
provider
,
List
<
CertStore
>
certStores
,
boolean
[]
reasonsMask
,
...
...
src/share/classes/sun/security/provider/certpath/OCSP.java
浏览文件 @
2ff3b4e4
/*
* Copyright (c) 2009, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009, 201
3
, 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
...
...
@@ -85,10 +85,9 @@ public final class OCSP {
* value is negative, set the timeout length to the default.
*/
private
static
int
initializeTimeout
()
{
int
tmp
=
java
.
security
.
AccessController
.
doPrivileged
(
new
GetIntegerAction
(
"com.sun.security.ocsp.timeout"
,
DEFAULT_CONNECT_TIMEOUT
));
if
(
tmp
<
0
)
{
Integer
tmp
=
java
.
security
.
AccessController
.
doPrivileged
(
new
GetIntegerAction
(
"com.sun.security.ocsp.timeout"
));
if
(
tmp
==
null
||
tmp
<
0
)
{
return
DEFAULT_CONNECT_TIMEOUT
;
}
// Convert to milliseconds, as the system property will be
...
...
src/share/classes/sun/security/provider/certpath/OCSPResponse.java
浏览文件 @
2ff3b4e4
/*
* Copyright (c) 2003, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2003, 201
3
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -43,6 +43,7 @@ import java.util.Map;
import
javax.security.auth.x500.X500Principal
;
import
sun.misc.HexDumpEncoder
;
import
sun.security.action.GetIntegerAction
;
import
sun.security.x509.*
;
import
sun.security.util.*
;
...
...
@@ -144,9 +145,31 @@ public final class OCSPResponse {
// Object identifier for the OCSPSigning key purpose
private
static
final
String
KP_OCSP_SIGNING_OID
=
"1.3.6.1.5.5.7.3.9"
;
// Maximum clock skew in milliseconds (15 minutes) allowed when checking
// validity of OCSP responses
private
static
final
long
MAX_CLOCK_SKEW
=
900000
;
// Default maximum clock skew in milliseconds (15 minutes)
// allowed when checking validity of OCSP responses
private
static
final
int
DEFAULT_MAX_CLOCK_SKEW
=
900000
;
/**
* Integer value indicating the maximum allowable clock skew, in seconds,
* to be used for the OCSP check.
*/
private
static
final
int
MAX_CLOCK_SKEW
=
initializeClockSkew
();
/**
* Initialize the maximum allowable clock skew by getting the OCSP
* clock skew system property. If the property has not been set, or if its
* value is negative, set the skew to the default.
*/
private
static
int
initializeClockSkew
()
{
Integer
tmp
=
java
.
security
.
AccessController
.
doPrivileged
(
new
GetIntegerAction
(
"com.sun.security.ocsp.clockSkew"
));
if
(
tmp
==
null
||
tmp
<
0
)
{
return
DEFAULT_MAX_CLOCK_SKEW
;
}
// Convert to milliseconds, as the system property will be
// specified in seconds
return
tmp
*
1000
;
}
// an array of all of the CRLReasons (used in SingleResponse)
private
static
CRLReason
[]
values
=
CRLReason
.
values
();
...
...
src/share/classes/sun/security/provider/certpath/URICertStore.java
浏览文件 @
2ff3b4e4
/*
* Copyright (c) 2006, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2006, 201
3
, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
...
...
@@ -51,6 +51,7 @@ import java.util.Collection;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Locale
;
import
sun.security.action.GetIntegerAction
;
import
sun.security.x509.AccessDescription
;
import
sun.security.x509.GeneralNameInterface
;
import
sun.security.x509.URIName
;
...
...
@@ -121,6 +122,33 @@ class URICertStore extends CertStoreSpi {
private
CertStore
ldapCertStore
;
private
String
ldapPath
;
// Default maximum connect timeout in milliseconds (15 seconds)
// allowed when downloading CRLs
private
static
final
int
DEFAULT_CRL_CONNECT_TIMEOUT
=
15000
;
/**
* Integer value indicating the connect timeout, in seconds, to be
* used for the CRL download. A timeout of zero is interpreted as
* an infinite timeout.
*/
private
static
final
int
CRL_CONNECT_TIMEOUT
=
initializeTimeout
();
/**
* Initialize the timeout length by getting the CRL timeout
* system property. If the property has not been set, or if its
* value is negative, set the timeout length to the default.
*/
private
static
int
initializeTimeout
()
{
Integer
tmp
=
java
.
security
.
AccessController
.
doPrivileged
(
new
GetIntegerAction
(
"com.sun.security.crl.timeout"
));
if
(
tmp
==
null
||
tmp
<
0
)
{
return
DEFAULT_CRL_CONNECT_TIMEOUT
;
}
// Convert to milliseconds, as the system property will be
// specified in seconds
return
tmp
*
1000
;
}
/**
* Creates a URICertStore.
*
...
...
@@ -364,6 +392,7 @@ class URICertStore extends CertStoreSpi {
connection
.
setIfModifiedSince
(
lastModified
);
}
long
oldLastModified
=
lastModified
;
connection
.
setConnectTimeout
(
CRL_CONNECT_TIMEOUT
);
try
(
InputStream
in
=
connection
.
getInputStream
())
{
lastModified
=
connection
.
getLastModified
();
if
(
oldLastModified
!=
0
)
{
...
...
src/solaris/classes/sun/awt/X11/XWindowPeer.java
浏览文件 @
2ff3b4e4
...
...
@@ -1887,7 +1887,9 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
switch
(
getWindowType
())
{
case
NORMAL:
typeAtom
=
protocol
.
XA_NET_WM_WINDOW_TYPE_NORMAL
;
typeAtom
=
(
ownerPeer
==
null
)
?
protocol
.
XA_NET_WM_WINDOW_TYPE_NORMAL
:
protocol
.
XA_NET_WM_WINDOW_TYPE_DIALOG
;
break
;
case
UTILITY:
typeAtom
=
protocol
.
XA_NET_WM_WINDOW_TYPE_UTILITY
;
...
...
src/windows/classes/sun/awt/windows/WComponentPeer.java
浏览文件 @
2ff3b4e4
...
...
@@ -759,9 +759,7 @@ public abstract class WComponentPeer extends WObjectPeer
WComponentPeer
(
Component
target
)
{
this
.
target
=
target
;
this
.
paintArea
=
new
RepaintArea
();
Container
parent
=
WToolkit
.
getNativeContainer
(
target
);
WComponentPeer
parentPeer
=
(
WComponentPeer
)
WToolkit
.
targetToPeer
(
parent
);
create
(
parentPeer
);
create
(
getNativeParent
());
// fix for 5088782: check if window object is created successfully
checkCreation
();
...
...
@@ -771,6 +769,17 @@ public abstract class WComponentPeer extends WObjectPeer
}
abstract
void
create
(
WComponentPeer
parent
);
/**
* Gets the native parent of this peer. We use the term "parent" explicitly,
* because we override the method in top-level window peer implementations.
*
* @return the parent container/owner of this peer.
*/
WComponentPeer
getNativeParent
()
{
Container
parent
=
SunToolkit
.
getNativeContainer
((
Component
)
target
);
return
(
WComponentPeer
)
WToolkit
.
targetToPeer
(
parent
);
}
protected
void
checkCreation
()
{
if
((
hwnd
==
0
)
||
(
pData
==
0
))
...
...
src/windows/classes/sun/awt/windows/WWindowPeer.java
浏览文件 @
2ff3b4e4
...
...
@@ -215,6 +215,12 @@ public class WWindowPeer extends WPanelPeer implements WindowPeer,
createAwtWindow
(
parent
);
}
@Override
final
WComponentPeer
getNativeParent
()
{
final
Container
owner
=
((
Window
)
target
).
getOwner
();
return
(
WComponentPeer
)
WToolkit
.
targetToPeer
(
owner
);
}
// should be overriden in WDialogPeer
protected
void
realShow
()
{
super
.
show
();
...
...
src/windows/classes/sun/nio/fs/WindowsFileCopy.java
浏览文件 @
2ff3b4e4
...
...
@@ -224,7 +224,7 @@ class WindowsFileCopy {
String
linkTarget
=
WindowsLinkSupport
.
readLink
(
source
);
int
flags
=
SYMBOLIC_LINK_FLAG_DIRECTORY
;
CreateSymbolicLink
(
targetPath
,
addPrefixIfNeeded
(
linkTarget
),
WindowsPath
.
addPrefixIfNeeded
(
linkTarget
),
flags
);
}
}
catch
(
WindowsException
x
)
{
...
...
@@ -414,7 +414,7 @@ class WindowsFileCopy {
}
else
{
String
linkTarget
=
WindowsLinkSupport
.
readLink
(
source
);
CreateSymbolicLink
(
targetPath
,
addPrefixIfNeeded
(
linkTarget
),
WindowsPath
.
addPrefixIfNeeded
(
linkTarget
),
SYMBOLIC_LINK_FLAG_DIRECTORY
);
}
}
catch
(
WindowsException
x
)
{
...
...
@@ -502,18 +502,4 @@ class WindowsFileCopy {
priv
.
drop
();
}
}
/**
* Add long path prefix to path if required
*/
private
static
String
addPrefixIfNeeded
(
String
path
)
{
if
(
path
.
length
()
>
248
)
{
if
(
path
.
startsWith
(
"\\\\"
))
{
path
=
"\\\\?\\UNC"
+
path
.
substring
(
1
,
path
.
length
());
}
else
{
path
=
"\\\\?\\"
+
path
;
}
}
return
path
;
}
}
src/windows/classes/sun/nio/fs/WindowsLinkSupport.java
浏览文件 @
2ff3b4e4
...
...
@@ -231,7 +231,7 @@ class WindowsLinkSupport {
int
end
=
(
next
==
-
1
)
?
path
.
length
()
:
next
;
String
search
=
sb
.
toString
()
+
path
.
substring
(
curr
,
end
);
try
{
FirstFile
fileData
=
FindFirstFile
(
addLongPath
PrefixIfNeeded
(
search
));
FirstFile
fileData
=
FindFirstFile
(
WindowsPath
.
add
PrefixIfNeeded
(
search
));
FindClose
(
fileData
.
handle
());
// if a reparse point is encountered then we must return the
...
...
@@ -405,20 +405,6 @@ class WindowsLinkSupport {
return
path
;
}
/**
* Add long path prefix to path if required.
*/
private
static
String
addLongPathPrefixIfNeeded
(
String
path
)
{
if
(
path
.
length
()
>
248
)
{
if
(
path
.
startsWith
(
"\\\\"
))
{
path
=
"\\\\?\\UNC"
+
path
.
substring
(
1
,
path
.
length
());
}
else
{
path
=
"\\\\?\\"
+
path
;
}
}
return
path
;
}
/**
* Strip long path or symbolic link prefix from path
*/
...
...
src/windows/classes/sun/nio/fs/WindowsPath.java
浏览文件 @
2ff3b4e4
...
...
@@ -283,7 +283,7 @@ class WindowsPath extends AbstractPath {
// Add long path prefix to path if required
static
String
addPrefixIfNeeded
(
String
path
)
{
if
(
path
.
length
()
>
248
)
{
if
(
path
.
length
()
>
MAX_PATH
)
{
if
(
path
.
startsWith
(
"\\\\"
))
{
path
=
"\\\\?\\UNC"
+
path
.
substring
(
1
,
path
.
length
());
}
else
{
...
...
test/java/awt/Focus/
OverrideRedirectWindowActivationTest/OverrideRedirect
WindowActivationTest.java
→
test/java/awt/Focus/
SimpleWindowActivationTest/Simple
WindowActivationTest.java
浏览文件 @
2ff3b4e4
/*
* 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
...
...
@@ -28,7 +28,7 @@
* @author anton.tarasov@sun.com: area=awt.focus
* @library ../../regtesthelpers
* @build Util
* @run main
OverrideRedirect
WindowActivationTest
* @run main
Simple
WindowActivationTest
*/
import
java.awt.*
;
import
java.awt.event.*
;
...
...
@@ -37,7 +37,7 @@ import javax.swing.SwingUtilities;
import
sun.awt.SunToolkit
;
import
test.java.awt.regtesthelpers.Util
;
public
class
OverrideRedirect
WindowActivationTest
{
public
class
Simple
WindowActivationTest
{
private
static
Frame
frame
;
private
static
Window
window
;
...
...
@@ -115,7 +115,7 @@ public class OverrideRedirectWindowActivationTest {
wbutton
=
new
Button
(
"wbutton"
);
label
=
new
Label
(
"label"
);
window
.
setBounds
(
800
,
200
,
2
00
,
100
);
window
.
setBounds
(
800
,
200
,
3
00
,
100
);
window
.
setLayout
(
new
FlowLayout
());
window
.
add
(
wbutton
);
window
.
add
(
label
);
...
...
@@ -126,7 +126,7 @@ public class OverrideRedirectWindowActivationTest {
private
static
void
createAndShowFrame
()
{
fbutton
=
new
Button
(
"fbutton"
);
frame
.
setBounds
(
800
,
0
,
2
00
,
100
);
frame
.
setBounds
(
800
,
0
,
3
00
,
100
);
frame
.
setLayout
(
new
FlowLayout
());
frame
.
add
(
fbutton
);
frame
.
setVisible
(
true
);
...
...
test/java/awt/Toolkit/BadDisplayTest/BadDisplayTest.sh
浏览文件 @
2ff3b4e4
# 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
...
...
@@ -22,7 +22,8 @@
${
TESTJAVA
}
/bin/javac
-cp
${
TESTSRC
}
-d
.
${
TESTSRC
}
/BadDisplayTest.java
export
DISPLAY
=
DISPLAY
=
export
DISPLAY
OS
=
`
uname
-s
`
case
"
$OS
"
in
...
...
test/java/awt/WMSpecificTests/Metacity/FullscreenDialogModality.java
0 → 100644
浏览文件 @
2ff3b4e4
/*
* 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.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8012586
* @summary verify that modal dialog will appeared above fullscreen window under Metacity WM.
* @run main FullscreenDialogModality
* @run main/othervm FullscreenDialogModality
* @author vkravets
*/
import
test.java.awt.regtesthelpers.Util
;
import
java.awt.*
;
import
java.lang.reflect.InvocationTargetException
;
public
class
FullscreenDialogModality
extends
Frame
{
static
Robot
robot
=
null
;
public
void
enterFS
()
{
GraphicsDevice
gd
=
getGraphicsConfiguration
().
getDevice
();
final
boolean
fs
=
gd
.
isFullScreenSupported
();
System
.
out
.
println
(
"FullscreenSupported: "
+
(
fs
?
"yes"
:
"no"
));
gd
.
setFullScreenWindow
(
this
);
try
{
// Give the system time to set the FS window and display it
// properly
Thread
.
sleep
(
2000
);
}
catch
(
Exception
e
)
{}
}
public
void
exitFS
()
{
GraphicsDevice
gd
=
getGraphicsConfiguration
().
getDevice
();
// reset window
gd
.
setFullScreenWindow
(
null
);
try
{
// Give the system time to set the FS window and display it
// properly
Thread
.
sleep
(
2000
);
}
catch
(
Exception
e
)
{}
}
public
void
checkDialogModality
()
throws
InvocationTargetException
,
InterruptedException
{
// Dialog
final
Dialog
d
=
new
Dialog
(
FullscreenDialogModality
.
this
,
"Modal dialog"
,
Dialog
.
ModalityType
.
APPLICATION_MODAL
);
d
.
setBounds
(
500
,
500
,
160
,
160
);
d
.
setModal
(
true
);
d
.
setBackground
(
Color
.
red
);
EventQueue
.
invokeLater
(
new
Runnable
()
{
public
void
run
()
{
d
.
setVisible
(
true
);
}
});
// Wait until the dialog is shown
EventQueue
.
invokeLater
(
new
Runnable
()
{
public
void
run
()
{
// Empty
}
});
Util
.
waitForIdle
(
robot
);
try
{
//Check color
Point
checkPoint
=
new
Point
(
d
.
getX
()
+
d
.
getWidth
()
/
2
,
d
.
getY
()
+
d
.
getHeight
()
/
2
);
Color
actual
=
robot
.
getPixelColor
(
checkPoint
.
x
,
checkPoint
.
y
);
System
.
out
.
println
(
"Color = "
+
actual
);
if
(
actual
.
getRGB
()
==
Color
.
GREEN
.
getRGB
())
{
throw
new
RuntimeException
(
"Test FAILED: Modal dialog shown below fullscreen window"
);
}
else
if
(
actual
.
getRGB
()
==
Color
.
RED
.
getRGB
())
{
System
.
out
.
println
(
"Test PASSED: Modal dialog shown above fullscreen window"
);
}
else
{
System
.
out
.
println
(
"pixelColor "
+
Integer
.
toHexString
(
actual
.
getRGB
())
+
" at coordinates ("
+
checkPoint
.
x
+
", "
+
checkPoint
.
y
+
")"
);
throw
new
RuntimeException
(
"Test FAILED: Unexpected behavior"
);
}
robot
.
delay
(
2000
);
Util
.
waitForIdle
(
robot
);
}
finally
{
d
.
dispose
();
}
}
public
static
void
main
(
String
args
[])
throws
InvocationTargetException
,
InterruptedException
{
if
(
Util
.
getWMID
()
!=
Util
.
METACITY_WM
)
{
System
.
out
.
println
(
"This test is only useful on Metacity"
);
return
;
}
robot
=
Util
.
createRobot
();
Util
.
waitForIdle
(
robot
);
final
FullscreenDialogModality
frame
=
new
FullscreenDialogModality
();
frame
.
setUndecorated
(
true
);
frame
.
setBackground
(
Color
.
green
);
frame
.
setSize
(
500
,
500
);
frame
.
setVisible
(
true
);
try
{
robot
.
delay
(
100
);
Util
.
waitForIdle
(
robot
);
EventQueue
.
invokeAndWait
(
new
Runnable
()
{
public
void
run
()
{
frame
.
enterFS
();
}
});
robot
.
delay
(
200
);
Util
.
waitForIdle
(
robot
);
frame
.
checkDialogModality
();
EventQueue
.
invokeAndWait
(
new
Runnable
()
{
public
void
run
()
{
frame
.
exitFS
();
}
});
}
finally
{
frame
.
dispose
();
}
}
}
test/java/beans/XMLEncoder/AbstractTest.java
浏览文件 @
2ff3b4e4
...
...
@@ -30,8 +30,10 @@ import java.io.ByteArrayOutputStream;
import
java.nio.charset.Charset
;
import
java.lang.reflect.Field
;
abstract
class
AbstractTest
<
T
>
implements
ExceptionListener
{
private
final
BeanValidator
validator
=
new
BeanValidator
();
final
BeanValidator
validator
=
new
BeanValidator
();
public
final
void
exceptionThrown
(
Exception
exception
)
{
throw
new
Error
(
"unexpected exception"
,
exception
);
...
...
@@ -59,7 +61,7 @@ abstract class AbstractTest<T> implements ExceptionListener {
}
/**
* This method should be overriden
* This method should be overrid
d
en
* if specified encoder should be initialized.
*
* @param encoder the XML encoder to initialize
...
...
@@ -68,7 +70,7 @@ abstract class AbstractTest<T> implements ExceptionListener {
}
/**
* This method should be overriden
* This method should be overrid
d
en
* if specified decoder should be initialized.
*
* @param decoder the XML decoder to initialize
...
...
@@ -77,7 +79,7 @@ abstract class AbstractTest<T> implements ExceptionListener {
}
/**
* This method should be overriden
* This method should be overrid
d
en
* for test-specific comparison.
*
* @param before the object before encoding
...
...
@@ -134,6 +136,7 @@ abstract class AbstractTest<T> implements ExceptionListener {
private
byte
[]
writeObject
(
Object
object
)
{
ByteArrayOutputStream
output
=
new
ByteArrayOutputStream
();
XMLEncoder
encoder
=
new
XMLEncoder
(
output
);
encoder
.
setExceptionListener
(
this
);
initialize
(
encoder
);
encoder
.
writeObject
(
object
);
encoder
.
close
();
...
...
@@ -143,9 +146,24 @@ abstract class AbstractTest<T> implements ExceptionListener {
private
Object
readObject
(
byte
[]
array
)
{
ByteArrayInputStream
input
=
new
ByteArrayInputStream
(
array
);
XMLDecoder
decoder
=
new
XMLDecoder
(
input
);
decoder
.
setExceptionListener
(
this
);
initialize
(
decoder
);
Object
object
=
decoder
.
readObject
();
decoder
.
close
();
return
object
;
}
static
Field
getField
(
String
name
)
{
try
{
int
index
=
name
.
lastIndexOf
(
'.'
);
String
className
=
name
.
substring
(
0
,
index
);
String
fieldName
=
name
.
substring
(
1
+
index
);
Field
field
=
Class
.
forName
(
className
).
getDeclaredField
(
fieldName
);
field
.
setAccessible
(
true
);
return
field
;
}
catch
(
Exception
exception
)
{
throw
new
Error
(
exception
);
}
}
}
test/java/beans/XMLEncoder/BeanValidator.java
浏览文件 @
2ff3b4e4
...
...
@@ -63,6 +63,15 @@ final class BeanValidator {
}
Class
type
=
object1
.
getClass
();
if
(!
type
.
equals
(
object2
.
getClass
()))
{
// resolve different implementations of the Map.Entry interface
if
((
object1
instanceof
Map
.
Entry
)
&&
(
object2
instanceof
Map
.
Entry
))
{
log
(
"!!! special case"
,
"Map.Entry"
);
Map
.
Entry
entry1
=
(
Map
.
Entry
)
object1
;
Map
.
Entry
entry2
=
(
Map
.
Entry
)
object2
;
validate
(
entry1
.
getKey
(),
entry2
.
getKey
());
validate
(
entry1
.
getValue
(),
entry2
.
getValue
());
return
;
}
throw
new
IllegalStateException
(
"could not compare objects with different types"
);
}
// validate elements of arrays
...
...
@@ -82,10 +91,14 @@ final class BeanValidator {
}
return
;
}
// special case for collections: do not use equals
boolean
ignore
=
Collection
.
class
.
isAssignableFrom
(
type
)
||
Map
.
Entry
.
class
.
isAssignableFrom
(
type
)
||
Map
.
class
.
isAssignableFrom
(
type
);
// validate objects using equals()
// we assume that the method equals(Object) can be called,
// if the class declares such method
if
(
isDefined
(
type
,
"equals"
,
Object
.
class
))
{
if
(
!
ignore
&&
isDefined
(
type
,
"equals"
,
Object
.
class
))
{
if
(
object1
.
equals
(
object2
))
{
return
;
}
...
...
@@ -205,27 +218,7 @@ final class BeanValidator {
}
private
void
validate
(
Map
map1
,
Map
map2
,
boolean
sorted
)
{
if
(
map1
.
size
()
!=
map2
.
size
())
{
throw
new
IllegalStateException
(
"could not compare maps with different sizes"
);
}
if
(
sorted
)
{
Iterator
first
=
map1
.
entrySet
().
iterator
();
Iterator
second
=
map2
.
entrySet
().
iterator
();
int
index
=
0
;
while
(
first
.
hasNext
()
&&
second
.
hasNext
())
{
log
(
"validate map entry"
,
Integer
.
valueOf
(
index
++));
validate
(
first
.
next
(),
second
.
next
());
}
if
(
first
.
hasNext
()
||
second
.
hasNext
())
{
throw
new
IllegalStateException
(
"one map contains more entries than another one"
);
}
}
else
{
// assume that equals() can be used for keys
for
(
Object
key
:
map1
.
keySet
())
{
log
(
"validate map value for key"
,
key
);
validate
(
map1
.
get
(
key
),
map2
.
get
(
key
));
}
}
validate
(
map1
.
entrySet
(),
map2
.
entrySet
(),
sorted
);
}
private
boolean
isCyclic
(
Object
object1
,
Object
object2
)
{
...
...
test/java/beans/XMLEncoder/Test4631471.java
浏览文件 @
2ff3b4e4
...
...
@@ -28,7 +28,6 @@
* @author Sergey Malenkov, Mark Davidson
*/
import
java.beans.XMLEncoder
;
import
javax.swing.JTree
;
import
javax.swing.tree.DefaultMutableTreeNode
;
import
javax.swing.tree.DefaultTreeModel
;
...
...
@@ -78,10 +77,6 @@ public abstract class Test4631471 extends AbstractTest {
// do not any validation
}
protected
final
void
initialize
(
XMLEncoder
encoder
)
{
encoder
.
setExceptionListener
(
this
);
}
public
static
TreeNode
getRoot
()
{
DefaultMutableTreeNode
node
=
new
DefaultMutableTreeNode
(
"root"
);
DefaultMutableTreeNode
first
=
new
DefaultMutableTreeNode
(
"first"
);
...
...
test/java/beans/XMLEncoder/Test4679556.java
浏览文件 @
2ff3b4e4
...
...
@@ -103,7 +103,6 @@ public class Test4679556 extends AbstractTest {
}
protected
void
initialize
(
XMLEncoder
encoder
)
{
encoder
.
setExceptionListener
(
this
);
encoder
.
setPersistenceDelegate
(
C
.
class
,
new
DefaultPersistenceDelegate
()
{
protected
Expression
instantiate
(
Object
oldInstance
,
Encoder
out
)
{
C
c
=
(
C
)
oldInstance
;
...
...
test/java/beans/XMLEncoder/java_awt_BorderLayout.java
浏览文件 @
2ff3b4e4
...
...
@@ -68,10 +68,8 @@ public final class java_awt_BorderLayout extends AbstractTest<BorderLayout> {
@Override
protected
void
validate
(
BorderLayout
before
,
BorderLayout
after
)
{
super
.
validate
(
before
,
after
);
BeanValidator
validator
=
new
BeanValidator
();
for
(
String
constraint
:
CONSTRAINTS
)
{
validator
.
validate
(
before
.
getLayoutComponent
(
constraint
),
super
.
validator
.
validate
(
before
.
getLayoutComponent
(
constraint
),
after
.
getLayoutComponent
(
constraint
));
}
}
...
...
src/share/classes/java/beans/ReflectionUtils
.java
→
test/java/beans/XMLEncoder/java_awt_CardLayout
.java
浏览文件 @
2ff3b4e4
/*
* Copyright (c) 20
03, 2009
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 20
13
, 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.
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
...
...
@@ -22,57 +20,64 @@
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package
java.beans
;
/*
* @test
* @bug 8007458
* @summary Tests CardLayout encoding
* @author Sergey Malenkov
*/
import
java.awt.CardLayout
;
import
java.lang.reflect.Field
;
import
java.util.Vector
;
import
javax.swing.JLabel
;
/**
* A utility class for reflectively finding methods, constuctors and fields
* using reflection.
*/
class
ReflectionUtils
{
public
final
class
java_awt_CardLayout
extends
AbstractTest
<
CardLayout
>
{
private
static
final
Field
VECTOR
=
getField
(
"java.awt.CardLayout.vector"
);
private
static
final
Field
NAME
=
getField
(
"java.awt.CardLayout$Card.name"
);
private
static
final
Field
COMP
=
getField
(
"java.awt.CardLayout$Card.comp"
);
@SuppressWarnings
(
"rawtypes"
)
public
static
boolean
isPrimitive
(
Class
type
)
{
return
primitiveTypeFor
(
type
)
!=
null
;
public
static
void
main
(
String
[]
args
)
throws
Exception
{
new
java_awt_CardLayout
().
test
(
true
);
}
@SuppressWarnings
(
"rawtypes"
)
public
static
Class
primitiveTypeFor
(
Class
wrapper
)
{
if
(
wrapper
==
Boolean
.
class
)
return
Boolean
.
TYPE
;
if
(
wrapper
==
Byte
.
class
)
return
Byte
.
TYPE
;
if
(
wrapper
==
Character
.
class
)
return
Character
.
TYPE
;
if
(
wrapper
==
Short
.
class
)
return
Short
.
TYPE
;
if
(
wrapper
==
Integer
.
class
)
return
Integer
.
TYPE
;
if
(
wrapper
==
Long
.
class
)
return
Long
.
TYPE
;
if
(
wrapper
==
Float
.
class
)
return
Float
.
TYPE
;
if
(
wrapper
==
Double
.
class
)
return
Double
.
TYPE
;
if
(
wrapper
==
Void
.
class
)
return
Void
.
TYPE
;
return
null
;
@Override
protected
CardLayout
getObject
()
{
CardLayout
layout
=
new
CardLayout
();
layout
.
addLayoutComponent
(
new
JLabel
(
"a"
),
"a"
);
layout
.
addLayoutComponent
(
new
JLabel
(
"b"
),
"b"
);
layout
.
addLayoutComponent
(
new
JLabel
(
"c"
),
"c"
);
return
layout
;
}
/**
* Returns the value of a private field.
*
* @param instance object instance
* @param cls class
* @param name name of the field
* @param el an exception listener to handle exceptions; or null
* @return value of the field; null if not found or an error is encountered
*/
@SuppressWarnings
(
"rawtypes"
)
public
static
Object
getPrivateField
(
Object
instance
,
Class
cls
,
String
name
,
ExceptionListener
el
)
{
@Override
protected
CardLayout
getAnotherObject
()
{
CardLayout
layout
=
new
CardLayout
();
layout
.
addLayoutComponent
(
new
JLabel
(
"a"
),
"a"
);
layout
.
addLayoutComponent
(
new
JLabel
(
"b"
),
"b"
);
layout
.
addLayoutComponent
(
new
JLabel
(
"c"
),
"c"
);
layout
.
addLayoutComponent
(
new
JLabel
(
"d"
),
"d"
);
return
layout
;
}
@Override
protected
void
validate
(
CardLayout
before
,
CardLayout
after
)
{
super
.
validate
(
before
,
after
);
try
{
Field
f
=
cls
.
getDeclaredField
(
name
);
f
.
setAccessible
(
true
);
return
f
.
get
(
instance
);
Vector
a
=
(
Vector
)
VECTOR
.
get
(
after
);
Vector
b
=
(
Vector
)
VECTOR
.
get
(
before
);
int
size
=
a
.
size
();
if
(
size
!=
b
.
size
())
{
throw
new
Error
(
"different content"
);
}
for
(
int
i
=
0
;
i
<
size
;
i
++)
{
super
.
validator
.
validate
(
NAME
.
get
(
a
.
get
(
i
)),
NAME
.
get
(
b
.
get
(
i
)));
super
.
validator
.
validate
(
COMP
.
get
(
a
.
get
(
i
)),
COMP
.
get
(
b
.
get
(
i
)));
}
catch
(
Exception
e
)
{
if
(
el
!=
null
)
{
el
.
exceptionThrown
(
e
);
}
catch
(
Exception
exception
)
{
throw
new
Error
(
exception
);
}
return
null
;
}
}
test/java/beans/XMLEncoder/java_awt_GridBagLayout.java
0 → 100644
浏览文件 @
2ff3b4e4
/*
* 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.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 8007458
* @summary Tests GridBagLayout encoding
* @author Sergey Malenkov
*/
import
java.awt.Component
;
import
java.awt.GridBagConstraints
;
import
java.awt.GridBagLayout
;
import
java.lang.reflect.Field
;
import
java.util.Hashtable
;
import
java.util.Map
;
import
javax.swing.JLabel
;
public
final
class
java_awt_GridBagLayout
extends
AbstractTest
<
GridBagLayout
>
{
private
static
final
Field
HASHTABLE
=
getField
(
"java.awt.GridBagLayout.comptable"
);
public
static
void
main
(
String
[]
args
)
{
new
java_awt_GridBagLayout
().
test
(
true
);
}
@Override
protected
GridBagLayout
getObject
()
{
GridBagLayout
layout
=
new
GridBagLayout
();
update
(
layout
,
"1"
,
1
,
1
);
update
(
layout
,
"2"
,
2
,
2
);
update
(
layout
,
"3"
,
3
,
3
);
return
layout
;
}
@Override
protected
GridBagLayout
getAnotherObject
()
{
GridBagLayout
layout
=
new
GridBagLayout
();
update
(
layout
,
"11"
,
1
,
1
);
update
(
layout
,
"12"
,
1
,
2
);
update
(
layout
,
"21"
,
2
,
1
);
update
(
layout
,
"22"
,
2
,
2
);
return
layout
;
}
@Override
protected
void
validate
(
GridBagLayout
before
,
GridBagLayout
after
)
{
super
.
validate
(
before
,
after
);
try
{
Hashtable
a
=
(
Hashtable
)
HASHTABLE
.
get
(
after
);
Hashtable
b
=
(
Hashtable
)
HASHTABLE
.
get
(
before
);
super
.
validator
.
validate
(
a
,
b
);
// for (int i = 0; i < size; i++) {
// validator.validate(NAME.get(a.get(i)), NAME.get(b.get(i)));
// validator.validate(COMP.get(a.get(i)), COMP.get(b.get(i)));
// }
}
catch
(
Exception
exception
)
{
throw
new
Error
(
exception
);
}
// for (String name : names) {
// validator.validate(getConstraints(before, name), getConstraints(after, name));
// }
}
private
static
void
update
(
GridBagLayout
layout
,
String
id
,
int
x
,
int
y
)
{
GridBagConstraints
gbc
=
new
GridBagConstraints
();
gbc
.
gridx
=
x
;
gbc
.
gridy
=
y
;
layout
.
addLayoutComponent
(
new
JLabel
(
id
),
gbc
);
}
/*
private static GridBagConstraints getConstraints(GridBagLayout layout, String id) {
return (layout == null) ? null : ((MyGridBagLayout) layout).getConstraints(id);
}
*/
}
test/java/beans/XMLEncoder/javax_swing_DefaultCellEditor.java
浏览文件 @
2ff3b4e4
...
...
@@ -28,6 +28,7 @@
* @author Sergey Malenkov
*/
import
java.beans.XMLEncoder
;
import
javax.swing.DefaultCellEditor
;
import
javax.swing.JTextField
;
import
javax.swing.text.JTextComponent
;
...
...
@@ -46,6 +47,11 @@ public final class javax_swing_DefaultCellEditor extends AbstractTest<DefaultCel
// return new DefaultCellEditor(new JTextField("Second"));
}
@Override
protected
void
initialize
(
XMLEncoder
encoder
)
{
encoder
.
setExceptionListener
(
null
);
// TODO: ignore non-public listener because of 4808251
}
protected
void
validate
(
DefaultCellEditor
before
,
DefaultCellEditor
after
)
{
String
text
=
((
JTextComponent
)
after
.
getComponent
()).
getText
();
if
(!
text
.
equals
(((
JTextComponent
)
before
.
getComponent
()).
getText
()))
...
...
test/java/lang/Math/DivModTests.java
浏览文件 @
2ff3b4e4
/*
* 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
...
...
@@ -137,7 +137,8 @@ public class DivModTests {
int
tmp
=
x
/
y
;
// Force ArithmeticException for divide by zero
double
ff
=
x
-
Math
.
floor
((
double
)
x
/
(
double
)
y
)
*
y
;
int
fr
=
(
int
)
ff
;
if
(
fr
!=
result
)
{
boolean
t
=
(
fr
==
((
Integer
)
result
));
if
(!
result
.
equals
(
fr
))
{
fail
(
"FAIL: Math.floorMod(%d, %d) = %s differs from Math.floor(x, y): %d%n"
,
x
,
y
,
result
,
fr
);
}
}
catch
(
ArithmeticException
ae
)
{
...
...
@@ -240,8 +241,8 @@ public class DivModTests {
resultD
=
resultD
.
multiply
(
yD
);
resultD
=
xD
.
subtract
(
resultD
);
long
fr
=
resultD
.
longValue
();
if
(
fr
!=
result
)
{
fail
(
"FAIL: Long.floorMod(%d, %d) = %d is different than BigDecimal result: %d%n"
,
x
,
y
,
result
,
fr
);
if
(
!
result
.
equals
(
fr
)
)
{
fail
(
"FAIL: Long.floorMod(%d, %d) = %d is different than BigDecimal result: %d%n"
,
x
,
y
,
result
,
fr
);
}
}
catch
(
ArithmeticException
ae
)
{
...
...
test/java/lang/annotation/TypeAnnotationReflection.java
浏览文件 @
2ff3b4e4
...
...
@@ -23,7 +23,7 @@
/*
* @test
* @bug 8004698
* @bug 8004698
8007073
* @summary Unit test for type annotations
*/
...
...
@@ -48,6 +48,8 @@ public class TypeAnnotationReflection {
testParameterizedType
();
testNestedParameterizedType
();
testWildcardType
();
testParameterTypes
();
testParameterType
();
}
private
static
void
check
(
boolean
b
)
{
...
...
@@ -359,6 +361,154 @@ public class TypeAnnotationReflection {
t
=
w
.
getAnnotatedLowerBounds
();
check
(
t
.
length
==
1
);
}
private
static
void
testParameterTypes
()
throws
Exception
{
// NO PARAMS
Method
m
=
Params
.
class
.
getDeclaredMethod
(
"noParams"
,
(
Class
<?>[])
null
);
AnnotatedType
[]
t
=
m
.
getAnnotatedParameterTypes
();
check
(
t
.
length
==
0
);
// ONLY ANNOTATED PARAM TYPES
Class
[]
argsArr
=
{
String
.
class
,
String
.
class
,
String
.
class
};
m
=
Params
.
class
.
getDeclaredMethod
(
"onlyAnnotated"
,
(
Class
<?>[])
argsArr
);
t
=
m
.
getAnnotatedParameterTypes
();
check
(
t
.
length
==
3
);
check
(
t
[
0
].
getAnnotations
().
length
==
1
);
check
(
t
[
0
].
getAnnotation
(
TypeAnno
.
class
)
!=
null
);
check
(
t
[
0
].
getAnnotationsByType
(
TypeAnno
.
class
)[
0
].
value
().
equals
(
"1"
));
check
(
t
[
1
].
getAnnotations
().
length
==
1
);
check
(
t
[
1
].
getAnnotation
(
TypeAnno
.
class
)
!=
null
);
check
(
t
[
1
].
getAnnotationsByType
(
TypeAnno
.
class
)[
0
].
value
().
equals
(
"2"
));
check
(
t
[
2
].
getAnnotations
().
length
==
2
);
check
(
t
[
2
].
getAnnotations
()[
0
].
annotationType
().
equals
(
TypeAnno
.
class
));
check
(
t
[
2
].
getAnnotation
(
TypeAnno
.
class
)
!=
null
);
check
(
t
[
2
].
getAnnotation
(
TypeAnno2
.
class
)
!=
null
);
check
(
t
[
2
].
getAnnotationsByType
(
TypeAnno
.
class
)[
0
].
value
().
equals
(
"3a"
));
check
(
t
[
2
].
getAnnotationsByType
(
TypeAnno2
.
class
)[
0
].
value
().
equals
(
"3b"
));
// MIXED ANNOTATED PARAM TYPES
m
=
Params
.
class
.
getDeclaredMethod
(
"mixed"
,
(
Class
<?>[])
argsArr
);
t
=
m
.
getAnnotatedParameterTypes
();
check
(
t
.
length
==
3
);
check
(
t
[
0
].
getAnnotations
().
length
==
1
);
check
(
t
[
0
].
getAnnotation
(
TypeAnno
.
class
)
!=
null
);
check
(
t
[
0
].
getAnnotationsByType
(
TypeAnno
.
class
)[
0
].
value
().
equals
(
"1"
));
check
(
t
[
1
].
getAnnotations
().
length
==
0
);
check
(
t
[
1
].
getAnnotation
(
TypeAnno
.
class
)
==
null
);
check
(
t
[
1
].
getAnnotation
(
TypeAnno2
.
class
)
==
null
);
check
(
t
[
2
].
getAnnotations
().
length
==
2
);
check
(
t
[
2
].
getAnnotations
()[
0
].
annotationType
().
equals
(
TypeAnno
.
class
));
check
(
t
[
2
].
getAnnotation
(
TypeAnno
.
class
)
!=
null
);
check
(
t
[
2
].
getAnnotation
(
TypeAnno2
.
class
)
!=
null
);
check
(
t
[
2
].
getAnnotationsByType
(
TypeAnno
.
class
)[
0
].
value
().
equals
(
"3a"
));
check
(
t
[
2
].
getAnnotationsByType
(
TypeAnno2
.
class
)[
0
].
value
().
equals
(
"3b"
));
// NO ANNOTATED PARAM TYPES
m
=
Params
.
class
.
getDeclaredMethod
(
"unAnnotated"
,
(
Class
<?>[])
argsArr
);
t
=
m
.
getAnnotatedParameterTypes
();
check
(
t
.
length
==
3
);
check
(
t
[
0
].
getAnnotations
().
length
==
0
);
check
(
t
[
0
].
getAnnotation
(
TypeAnno
.
class
)
==
null
);
check
(
t
[
0
].
getAnnotation
(
TypeAnno2
.
class
)
==
null
);
check
(
t
[
1
].
getAnnotations
().
length
==
0
);
check
(
t
[
1
].
getAnnotation
(
TypeAnno
.
class
)
==
null
);
check
(
t
[
1
].
getAnnotation
(
TypeAnno2
.
class
)
==
null
);
check
(
t
[
2
].
getAnnotations
().
length
==
0
);
check
(
t
[
2
].
getAnnotation
(
TypeAnno
.
class
)
==
null
);
check
(
t
[
2
].
getAnnotation
(
TypeAnno2
.
class
)
==
null
);
}
private
static
void
testParameterType
()
throws
Exception
{
// NO PARAMS
Method
m
=
Params
.
class
.
getDeclaredMethod
(
"noParams"
,
(
Class
<?>[])
null
);
Parameter
[]
p
=
m
.
getParameters
();
check
(
p
.
length
==
0
);
// ONLY ANNOTATED PARAM TYPES
Class
[]
argsArr
=
{
String
.
class
,
String
.
class
,
String
.
class
};
m
=
Params
.
class
.
getDeclaredMethod
(
"onlyAnnotated"
,
(
Class
<?>[])
argsArr
);
p
=
m
.
getParameters
();
check
(
p
.
length
==
3
);
AnnotatedType
t0
=
p
[
0
].
getAnnotatedType
();
AnnotatedType
t1
=
p
[
1
].
getAnnotatedType
();
AnnotatedType
t2
=
p
[
2
].
getAnnotatedType
();
check
(
t0
.
getAnnotations
().
length
==
1
);
check
(
t0
.
getAnnotation
(
TypeAnno
.
class
)
!=
null
);
check
(
t0
.
getAnnotationsByType
(
TypeAnno
.
class
)[
0
].
value
().
equals
(
"1"
));
check
(
t1
.
getAnnotations
().
length
==
1
);
check
(
t1
.
getAnnotation
(
TypeAnno
.
class
)
!=
null
);
check
(
t1
.
getAnnotationsByType
(
TypeAnno
.
class
)[
0
].
value
().
equals
(
"2"
));
check
(
t2
.
getAnnotations
().
length
==
2
);
check
(
t2
.
getAnnotations
()[
0
].
annotationType
().
equals
(
TypeAnno
.
class
));
check
(
t2
.
getAnnotation
(
TypeAnno
.
class
)
!=
null
);
check
(
t2
.
getAnnotation
(
TypeAnno2
.
class
)
!=
null
);
check
(
t2
.
getAnnotationsByType
(
TypeAnno
.
class
)[
0
].
value
().
equals
(
"3a"
));
check
(
t2
.
getAnnotationsByType
(
TypeAnno2
.
class
)[
0
].
value
().
equals
(
"3b"
));
// MIXED ANNOTATED PARAM TYPES
m
=
Params
.
class
.
getDeclaredMethod
(
"mixed"
,
(
Class
<?>[])
argsArr
);
p
=
m
.
getParameters
();
check
(
p
.
length
==
3
);
t0
=
p
[
0
].
getAnnotatedType
();
t1
=
p
[
1
].
getAnnotatedType
();
t2
=
p
[
2
].
getAnnotatedType
();
check
(
t0
.
getAnnotations
().
length
==
1
);
check
(
t0
.
getAnnotation
(
TypeAnno
.
class
)
!=
null
);
check
(
t0
.
getAnnotationsByType
(
TypeAnno
.
class
)[
0
].
value
().
equals
(
"1"
));
check
(
t1
.
getAnnotations
().
length
==
0
);
check
(
t1
.
getAnnotation
(
TypeAnno
.
class
)
==
null
);
check
(
t1
.
getAnnotation
(
TypeAnno2
.
class
)
==
null
);
check
(
t2
.
getAnnotations
().
length
==
2
);
check
(
t2
.
getAnnotations
()[
0
].
annotationType
().
equals
(
TypeAnno
.
class
));
check
(
t2
.
getAnnotation
(
TypeAnno
.
class
)
!=
null
);
check
(
t2
.
getAnnotation
(
TypeAnno2
.
class
)
!=
null
);
check
(
t2
.
getAnnotationsByType
(
TypeAnno
.
class
)[
0
].
value
().
equals
(
"3a"
));
check
(
t2
.
getAnnotationsByType
(
TypeAnno2
.
class
)[
0
].
value
().
equals
(
"3b"
));
// NO ANNOTATED PARAM TYPES
m
=
Params
.
class
.
getDeclaredMethod
(
"unAnnotated"
,
(
Class
<?>[])
argsArr
);
p
=
m
.
getParameters
();
check
(
p
.
length
==
3
);
t0
=
p
[
0
].
getAnnotatedType
();
t1
=
p
[
1
].
getAnnotatedType
();
t2
=
p
[
2
].
getAnnotatedType
();
check
(
t0
.
getAnnotations
().
length
==
0
);
check
(
t0
.
getAnnotation
(
TypeAnno
.
class
)
==
null
);
check
(
t0
.
getAnnotation
(
TypeAnno2
.
class
)
==
null
);
check
(
t1
.
getAnnotations
().
length
==
0
);
check
(
t1
.
getAnnotation
(
TypeAnno
.
class
)
==
null
);
check
(
t1
.
getAnnotation
(
TypeAnno2
.
class
)
==
null
);
check
(
t2
.
getAnnotations
().
length
==
0
);
check
(
t2
.
getAnnotation
(
TypeAnno
.
class
)
==
null
);
check
(
t2
.
getAnnotation
(
TypeAnno2
.
class
)
==
null
);
}
}
class
Params
{
public
void
noParams
()
{}
public
void
onlyAnnotated
(
@TypeAnno
(
"1"
)
String
s1
,
@TypeAnno
(
"2"
)
String
s2
,
@TypeAnno
(
"3a"
)
@TypeAnno2
(
"3b"
)
String
s3
)
{}
public
void
mixed
(
@TypeAnno
(
"1"
)
String
s1
,
String
s2
,
@TypeAnno
(
"3a"
)
@TypeAnno2
(
"3b"
)
String
s3
)
{}
public
void
unAnnotated
(
String
s1
,
String
s2
,
String
s3
)
{}
}
abstract
class
TestWildcardType
{
...
...
test/java/nio/file/Files/NameLimits.java
0 → 100644
浏览文件 @
2ff3b4e4
/*
* 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.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
* @bug 8011128
* @summary Test file and directory name limits. This test is primarily
* intended to test Files.createDirectory on resolved paths at or around
* the short path limit of 248 on Windows.
*/
import
java.io.IOException
;
import
java.nio.file.Files
;
import
java.nio.file.Path
;
import
java.nio.file.Paths
;
public
class
NameLimits
{
static
final
int
MAX_PATH
=
255
;
static
final
int
MIN_PATH
=
8
;
// arbitrarily chosen
static
Path
generatePath
(
int
len
)
{
if
(
len
<
MIN_PATH
)
throw
new
RuntimeException
(
"Attempting to generate path less than MIN_PATH"
);
StringBuilder
sb
=
new
StringBuilder
(
len
);
sb
.
append
(
"name"
);
while
(
sb
.
length
()
<
len
)
{
sb
.
append
(
'X'
);
}
return
Paths
.
get
(
sb
.
toString
());
}
static
boolean
tryCreateFile
(
int
len
)
throws
IOException
{
Path
name
=
generatePath
(
len
);
try
{
Files
.
createFile
(
name
);
}
catch
(
IOException
ioe
)
{
System
.
err
.
format
(
"Unable to create file of length %d (full path %d), %s%n"
,
name
.
toString
().
length
(),
name
.
toAbsolutePath
().
toString
().
length
(),
ioe
);
return
false
;
}
Files
.
delete
(
name
);
return
true
;
}
static
boolean
tryCreateDirectory
(
int
len
)
throws
IOException
{
Path
name
=
generatePath
(
len
);
try
{
Files
.
createDirectory
(
name
);
}
catch
(
IOException
ioe
)
{
System
.
err
.
format
(
"Unable to create directory of length %d (full path %d), %s%n"
,
name
.
toString
().
length
(),
name
.
toAbsolutePath
().
toString
().
length
(),
ioe
);
return
false
;
}
Files
.
delete
(
name
);
return
true
;
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
int
len
;
// find the maximum file name if MAX_PATH or less
len
=
MAX_PATH
;
while
(!
tryCreateFile
(
len
))
{
len
--;
}
System
.
out
.
format
(
"Testing createFile on paths %d .. %d%n"
,
MIN_PATH
,
len
);
while
(
len
>=
MIN_PATH
)
{
if
(!
tryCreateFile
(
len
--))
throw
new
RuntimeException
(
"Test failed"
);
}
// find the maximum directory name if MAX_PATH or less
len
=
MAX_PATH
;
while
(!
tryCreateDirectory
(
len
))
{
len
--;
}
System
.
out
.
format
(
"Testing createDirectory on paths %d .. %d%n"
,
MIN_PATH
,
len
);
while
(
len
>=
MIN_PATH
)
{
if
(!
tryCreateDirectory
(
len
--))
throw
new
RuntimeException
(
"Test failed"
);
}
}
}
test/java/util/regex/RegExTest.java
浏览文件 @
2ff3b4e4
/*
* Copyright (c) 1999, 201
2
, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1999, 201
3
, 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
...
...
@@ -33,7 +33,7 @@
* 5013885 5003322 4988891 5098443 5110268 6173522 4829857 5027748 6376940
* 6358731 6178785 6284152 6231989 6497148 6486934 6233084 6504326 6635133
* 6350801 6676425 6878475 6919132 6931676 6948903 6990617 7014645 7039066
* 7067045 7014640 7189363 8007395 8013252 8013254
* 7067045 7014640 7189363 8007395 8013252 8013254
8012646
*/
import
java.util.regex.*
;
...
...
@@ -41,6 +41,7 @@ import java.util.Random;
import
java.io.*
;
import
java.util.*
;
import
java.nio.CharBuffer
;
import
java.util.function.Predicate
;
/**
* This is a test class created to check the operation of
...
...
@@ -145,6 +146,7 @@ public class RegExTest {
linebreakTest
();
branchTest
();
groupCurlyNotFoundSuppTest
();
patternAsPredicate
();
if
(
failure
)
{
throw
new
RuntimeException
(
"RegExTest failed, 1st failure: "
+
...
...
@@ -3997,4 +3999,19 @@ public class RegExTest {
report
(
"GroupCurly NotFoundSupp"
);
}
// This test is for 8012646
private
static
void
patternAsPredicate
()
throws
Exception
{
Predicate
<
String
>
p
=
Pattern
.
compile
(
"[a-z]+"
).
asPredicate
();
if
(
p
.
test
(
""
))
{
failCount
++;
}
if
(!
p
.
test
(
"word"
))
{
failCount
++;
}
if
(
p
.
test
(
"1234"
))
{
failCount
++;
}
report
(
"Pattern.asPredicate"
);
}
}
test/javax/swing/JInternalFrame/InternalFrameIsNotCollectedTest.java
0 → 100644
浏览文件 @
2ff3b4e4
/*
* 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.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
@bug 8012004
@summary JINTERNALFRAME NOT BEING FINALIZED AFTER CLOSING
@author mcherkas
@run main InternalFrameIsNotCollectedTest
*/
import
sun.awt.SunToolkit
;
import
javax.swing.*
;
import
java.awt.*
;
import
java.awt.event.KeyEvent
;
import
java.beans.PropertyVetoException
;
import
java.util.Date
;
public
class
InternalFrameIsNotCollectedTest
{
public
static
final
int
waitTime
=
10000
;
private
static
Robot
robot
;
public
static
void
sync
()
{
SunToolkit
toolkit
=
(
SunToolkit
)
Toolkit
.
getDefaultToolkit
();
toolkit
.
realSync
();
}
public
static
void
main
(
String
[]
args
)
throws
Exception
{
initRobot
();
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
@Override
public
void
run
()
{
initUI
();
try
{
closeInternalFrame
();
}
catch
(
PropertyVetoException
e
)
{
throw
new
RuntimeException
(
e
);
}
}
});
sync
();
invokeGC
();
Thread
.
sleep
(
1000
);
// it's better to wait 1 sec now then 10 sec later
Date
startWaiting
=
new
Date
();
synchronized
(
CustomInternalFrame
.
waiter
)
{
// Sync with finalization thread.
Date
now
=
new
Date
();
while
(
now
.
getTime
()
-
startWaiting
.
getTime
()
<
waitTime
&&
!
CustomInternalFrame
.
finalized
)
{
CustomInternalFrame
.
waiter
.
wait
(
waitTime
);
now
=
new
Date
();
}
}
if
(!
CustomInternalFrame
.
finalized
)
{
throw
new
RuntimeException
(
"Closed internal frame wasn't collected"
);
}
}
private
static
void
initRobot
()
throws
AWTException
{
robot
=
new
Robot
();
robot
.
setAutoDelay
(
100
);
}
private
static
void
closeInternalFrame
()
throws
PropertyVetoException
{
robot
.
keyPress
(
KeyEvent
.
VK_CONTROL
);
robot
.
keyPress
(
KeyEvent
.
VK_F4
);
robot
.
keyRelease
(
KeyEvent
.
VK_F4
);
robot
.
keyRelease
(
KeyEvent
.
VK_CONTROL
);
}
private
static
void
initUI
()
{
JFrame
frame
=
new
JFrame
(
"Internal Frame Test"
);
frame
.
getContentPane
().
setLayout
(
new
BorderLayout
());
JDesktopPane
desktopPane
=
new
JDesktopPane
();
desktopPane
.
setDesktopManager
(
new
DefaultDesktopManager
());
frame
.
getContentPane
().
add
(
desktopPane
,
BorderLayout
.
CENTER
);
CustomInternalFrame
iFrame
=
new
CustomInternalFrame
(
"Dummy Frame"
);
iFrame
.
setSize
(
200
,
200
);
iFrame
.
setDefaultCloseOperation
(
WindowConstants
.
DISPOSE_ON_CLOSE
);
desktopPane
.
add
(
iFrame
);
frame
.
setSize
(
800
,
600
);
frame
.
setDefaultCloseOperation
(
WindowConstants
.
DISPOSE_ON_CLOSE
);
frame
.
setVisible
(
true
);
iFrame
.
setVisible
(
true
);
}
private
static
void
invokeGC
()
{
System
.
out
.
println
(
"Firing garbage collection!"
);
try
{
StringBuilder
sb
=
new
StringBuilder
();
while
(
true
)
{
sb
.
append
(
"any string. some test. a little bit more text."
+
sb
.
toString
());
}
}
catch
(
Throwable
e
)
{
// do nothing
}
}
public
static
class
CustomInternalFrame
extends
JInternalFrame
{
public
static
volatile
boolean
finalized
=
false
;
public
static
Object
waiter
=
new
Object
();
public
CustomInternalFrame
(
String
title
)
{
super
(
title
,
true
,
true
,
true
,
true
);
}
protected
void
finalize
()
{
System
.
out
.
println
(
"Finalized!"
);
finalized
=
true
;
waiter
.
notifyAll
();
}
}
}
\ No newline at end of file
test/javax/swing/JMenuItem/ActionListenerCalledTwice/ActionListenerCalledTwiceTest.java
浏览文件 @
2ff3b4e4
/*
* 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
...
...
@@ -35,34 +35,62 @@ import java.awt.event.*;
import
javax.swing.*
;
public
class
ActionListenerCalledTwiceTest
{
static
String
menuItems
[]
=
{
"Item1"
,
"Item2"
};
static
KeyStroke
keyStrokes
[]
=
{
KeyStroke
.
getKeyStroke
(
KeyEvent
.
VK_E
,
InputEvent
.
META_MASK
),
KeyStroke
.
getKeyStroke
(
KeyEvent
.
VK_DELETE
,
0
)
};
static
volatile
int
listenerCallCounter
=
0
;
public
static
void
main
(
String
[]
args
)
throws
Exception
{
if
(
sun
.
awt
.
OSInfo
.
getOSType
()
!=
sun
.
awt
.
OSInfo
.
OSType
.
MACOSX
)
{
System
.
out
.
println
(
"This test is for MacOS only. Automatically passed on other platforms."
);
return
;
}
System
.
setProperty
(
"apple.laf.useScreenMenuBar"
,
"true"
);
SwingUtilities
.
invokeAndWait
(
new
Runnable
()
{
public
void
run
()
{
createAndShowGUI
();
}
});
SunToolkit
toolkit
=
(
SunToolkit
)
Toolkit
.
getDefaultToolkit
();
Robot
robot
=
new
Robot
();
robot
.
setAutoDelay
(
100
);
robot
.
keyPress
(
KeyEvent
.
VK_META
);
robot
.
keyPress
(
KeyEvent
.
VK_E
);
robot
.
keyRelease
(
KeyEvent
.
VK_E
);
robot
.
keyRelease
(
KeyEvent
.
VK_META
);
for
(
int
i
=
0
;
i
<
menuItems
.
length
;
++
i
)
{
KeyStroke
ks
=
keyStrokes
[
i
];
int
modKeyCode
=
getModKeyCode
(
ks
.
getModifiers
());
if
(
modKeyCode
!=
0
)
{
robot
.
keyPress
(
modKeyCode
);
}
robot
.
keyPress
(
ks
.
getKeyCode
());
robot
.
keyRelease
(
ks
.
getKeyCode
());
if
(
modKeyCode
!=
0
)
{
robot
.
keyRelease
(
modKeyCode
);
}
toolkit
.
realSync
();
if
(
listenerCallCounter
!=
1
)
{
throw
new
Exception
(
"Test failed: ActionListener called "
+
listenerCallCounter
+
" times instead of 1!"
);
throw
new
Exception
(
"Test failed: ActionListener for "
+
menuItems
[
i
]
+
" called "
+
listenerCallCounter
+
" times instead of 1!"
);
}
listenerCallCounter
=
0
;
}
}
private
static
void
createAndShowGUI
()
{
JMenuItem
newItem
=
new
JMenuItem
(
"Exit"
);
newItem
.
setAccelerator
(
KeyStroke
.
getKeyStroke
(
KeyEvent
.
VK_E
,
InputEvent
.
META_MASK
));
JMenu
menu
=
new
JMenu
(
"Menu"
);
for
(
int
i
=
0
;
i
<
menuItems
.
length
;
++
i
)
{
JMenuItem
newItem
=
new
JMenuItem
(
menuItems
[
i
]);
newItem
.
setAccelerator
(
keyStrokes
[
i
]);
newItem
.
addActionListener
(
new
ActionListener
(){
public
void
actionPerformed
(
ActionEvent
e
)
{
...
...
@@ -70,8 +98,9 @@ public class ActionListenerCalledTwiceTest {
}
}
);
JMenu
menu
=
new
JMenu
(
"Menu"
);
menu
.
add
(
newItem
);
}
JMenuBar
bar
=
new
JMenuBar
();
bar
.
add
(
menu
);
JFrame
frame
=
new
JFrame
(
"Test"
);
...
...
@@ -80,4 +109,24 @@ public class ActionListenerCalledTwiceTest {
frame
.
pack
();
frame
.
setVisible
(
true
);
}
private
static
int
getModKeyCode
(
int
mod
)
{
if
((
mod
&
(
InputEvent
.
SHIFT_DOWN_MASK
|
InputEvent
.
SHIFT_MASK
))
!=
0
)
{
return
KeyEvent
.
VK_SHIFT
;
}
if
((
mod
&
(
InputEvent
.
CTRL_DOWN_MASK
|
InputEvent
.
CTRL_MASK
))
!=
0
)
{
return
KeyEvent
.
VK_CONTROL
;
}
if
((
mod
&
(
InputEvent
.
ALT_DOWN_MASK
|
InputEvent
.
ALT_MASK
))
!=
0
)
{
return
KeyEvent
.
VK_ALT
;
}
if
((
mod
&
(
InputEvent
.
META_DOWN_MASK
|
InputEvent
.
META_MASK
))
!=
0
)
{
return
KeyEvent
.
VK_META
;
}
return
0
;
}
}
test/sun/security/provider/certpath/X509CertPath/ForwardBuildCompromised.java
已删除
100644 → 0
浏览文件 @
9a61dcd4
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 7123519
* @summary Problem with java/classes_security
*/
import
java.net.*
;
import
java.util.*
;
import
java.io.*
;
import
javax.net.ssl.*
;
import
java.security.KeyStore
;
import
java.security.cert.*
;
import
java.security.spec.*
;
import
java.security.interfaces.*
;
public
class
ForwardBuildCompromised
{
// DigiNotar Root CA, untrusted root certificate
static
String
trustedCertStr
=
"-----BEGIN CERTIFICATE-----\n"
+
"MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n"
+
"VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n"
+
"ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n"
+
"KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n"
+
"ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1\n"
+
"MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE\n"
+
"ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j\n"
+
"b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF\n"
+
"bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg\n"
+
"U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA\n"
+
"A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/\n"
+
"I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3\n"
+
"wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC\n"
+
"AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb\n"
+
"oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5\n"
+
"BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p\n"
+
"dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk\n"
+
"MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp\n"
+
"b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu\n"
+
"dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0\n"
+
"MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi\n"
+
"E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa\n"
+
"MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI\n"
+
"hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN\n"
+
"95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd\n"
+
"2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=\n"
+
"-----END CERTIFICATE-----"
;
// DigiNotar Root CA, untrusted cross-certificate
static
String
untrustedCrossCertStr
=
"-----BEGIN CERTIFICATE-----\n"
+
"MIIFSDCCBLGgAwIBAgIERpwsrzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n"
+
"VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n"
+
"ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n"
+
"KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n"
+
"ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3\n"
+
"MjYxNTU3MzlaFw0xMzA4MjYxNjI3MzlaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK\n"
+
"EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI\n"
+
"hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n"
+
"ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt\n"
+
"OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx\n"
+
"hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7\n"
+
"gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D\n"
+
"IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T\n"
+
"BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs\n"
+
"Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8\n"
+
"5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf\n"
+
"DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX\n"
+
"9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e\n"
+
"7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj\n"
+
"ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB\n"
+
"BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF\n"
+
"BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD\n"
+
"VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy\n"
+
"bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G\n"
+
"A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob\n"
+
"BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAEa6RcDNcEIGUlkDJUY/pWTds4zh\n"
+
"xbVkp3wSmpwPFhx5fxTyF4HD2L60jl3aqjTB7gPpsL2Pk5QZlNsi3t4UkCV70UOd\n"
+
"ueJRN3o/LOtk4+bjXY2lC0qTHbN80VMLqPjmaf9ghSA9hwhskdtMgRsgfd90q5QP\n"
+
"ZFdYf+hthc3m6IcJ\n"
+
"-----END CERTIFICATE-----"
;
// DigiNotar Root CA, compromised certificate
static
String
compromisedCertStr
=
"-----BEGIN CERTIFICATE-----\n"
+
"MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBf\n"
+
"MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp\n"
+
"Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww\n"
+
"HhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgxOTIxWjBfMQswCQYDVQQGEwJOTDES\n"
+
"MBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEg\n"
+
"MB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3DQEB\n"
+
"AQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B\n"
+
"8cp86Yxq7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXY\n"
+
"tsMW2YiwsYcdcNqGtA8Ui3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIl\n"
+
"HgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8ZkqQfioLBQftFl9VkHXYRskbg+IIvvEj\n"
+
"zJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEqbYRAhU52mXyC8/O3AlnU\n"
+
"JgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4iHomGgVM\n"
+
"ktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXv\n"
+
"a5pkXuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57p\n"
+
"K6kwe6AYHw4YC+VbqdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMi\n"
+
"puih2TkGl/VujQKQjBR7P4DNG5y6xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovT\n"
+
"yD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHcBmfFlHqabWJMfczgZICynkeO\n"
+
"owIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV\n"
+
"HQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC\n"
+
"jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXy\n"
+
"fJ9oHbtdzno5wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBo\n"
+
"Y6pFITlIYXg23PFDk9Qlx/KAZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHo\n"
+
"M/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedTFLJgQT2EkTFoPSdE2+Xe9PpjRchM\n"
+
"Ppj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKfyvBovWsdst+Nbwed\n"
+
"2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoAZbwH\n"
+
"/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQl\n"
+
"nQ7KN+ZQ/YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jE\n"
+
"O1hZibCMjFCz2IbLaKPECudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU\n"
+
"9jQZjHkJNsphFyUXC4KYcwx3dMPVDceoEkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9\n"
+
"j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr\n"
+
"-----END CERTIFICATE-----"
;
// DigiNotar Public CA 2025, intermediate certificate
static
String
intermediateCertStr
=
"-----BEGIN CERTIFICATE-----\n"
+
"MIIGAzCCA+ugAwIBAgIQHn16Uz1FMEGWQA9xSB9FBDANBgkqhkiG9w0BAQUFADBf\n"
+
"MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp\n"
+
"Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww\n"
+
"HhcNMDYwMjA2MTYwNzAyWhcNMjUwMzI4MTYwNzAyWjBmMQswCQYDVQQGEwJOTDES\n"
+
"MBAGA1UEChMJRGlnaU5vdGFyMSEwHwYDVQQDExhEaWdpTm90YXIgUHVibGljIENB\n"
+
"IDIwMjUxIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5vdGFyLm5sMIIBIjANBgkq\n"
+
"hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/2eu/I5fMG8lbvPph3e8zfJpZQtg/72\n"
+
"Yx29+ivtKehiF6A3n785XyoY6IT3vlCrhy1CbMOY3M0x1n4YQlv17B0XZ/DqHyBA\n"
+
"SQvnDNbkM9j4NoSy/sRtGsP6PetIFFjrhE9whZuvuSUC1PY4PruEEJp8zOCx4+wU\n"
+
"Zt9xvjy4Xra+bSia5rwccQ/R5FYTGKrYCthOy9C9ud5Fhd++rlVhgdA/78w+Cs2s\n"
+
"xS4i0MAxG75P3/e/bATJKepbydHdDjkyz9o3RW/wdPUXhzEw4EwUjYg6XJrDzMad\n"
+
"6aL9M/eaxDjgz6o48EaWRDrGptaE2uJRuErVz7oOO0p/wYKq/BU+/wIDAQABo4IB\n"
+
"sjCCAa4wOgYIKwYBBQUHAQEELjAsMCoGCCsGAQUFBzABhh5odHRwOi8vdmFsaWRh\n"
+
"dGlvbi5kaWdpbm90YXIubmwwHwYDVR0jBBgwFoAUiGi/4I41xDs4a2L3KDuEgcgM\n"
+
"100wEgYDVR0TAQH/BAgwBgEB/wIBADCBxgYDVR0gBIG+MIG7MIG4Bg5ghBABh2kB\n"
+
"AQEBBQIGBDCBpTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpbm90YXIubmwv\n"
+
"Y3BzMHoGCCsGAQUFBwICMG4abENvbmRpdGlvbnMsIGFzIG1lbnRpb25lZCBvbiBv\n"
+
"dXIgd2Vic2l0ZSAod3d3LmRpZ2lub3Rhci5ubCksIGFyZSBhcHBsaWNhYmxlIHRv\n"
+
"IGFsbCBvdXIgcHJvZHVjdHMgYW5kIHNlcnZpY2VzLjBDBgNVHR8EPDA6MDigNqA0\n"
+
"hjJodHRwOi8vc2VydmljZS5kaWdpbm90YXIubmwvY3JsL3Jvb3QvbGF0ZXN0Q1JM\n"
+
"LmNybDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFN8zwK+S/jf8ttgWFtDZsZHV\n"
+
"+m6lMA0GCSqGSIb3DQEBBQUAA4ICAQCfV1rmBd9QStEyQ40lT0tqby0/3ez0STuJ\n"
+
"ESBQLQD56XYdb4VFSuqA6xTtiuSVHLoiv2xyISN9FvX3A5VtifkJ00JEaLQJiSsE\n"
+
"wGDkYGl1DT7SsqtAVKdMAuCM+e0j0/RV3hZ6kcrM7/wFccHwM+/TiurR9lgZDzB4\n"
+
"a7++A4XrYyKx9vc9ZwBEnD1nrAe7++gg9cuZgP7e+QL0FBHMjpw+gnCDjr2dzBZC\n"
+
"4r+b8SOqlbPRPexBuNghlc7PfcPIyFis2LJXDRMWiAd3TcfdALwRsuKMR/T+cwyr\n"
+
"asy69OEGHplLT57otQ524BDctDXNzlH9bHEh52QzqkWvIDqs42910IUy1nYNPIUG\n"
+
"yYJV/T7H8Jb6vfMZWe47iUFvtNZCi8+b542gRUwdi+ca+hGviBC9Qr4Wv1pl7CBQ\n"
+
"Hy1axTkHiQawUo/hgmoetCpftugl9yJTfvsBorUV1ZMxn9B1JLSGtWnbUsFRla7G\n"
+
"fNa0IsUkzmmha8XCzvNu0d1PDGtcQyUqmDOE1Hx4cIBeuF8ipuIXkrVCr9zAZ4ZC\n"
+
"hgz6aA1gDTW8whSRJqYEYEQ0pcMEFLyXE+Nz3O8NinO2AuxqKhjMk13203xA7lPY\n"
+
"MnBQ0v7S3qqbp/pvPMiUhOz/VaYted6QmOY5EATBnFiLCuw87JXoAyp382eJ3WX1\n"
+
"hOiR4IX9Tg==\n"
+
"-----END CERTIFICATE-----"
;
// The fraudulent certificate issued by above compromised CA
static
String
targetCertStr
=
"-----BEGIN CERTIFICATE-----\n"
+
"MIIFKDCCBBCgAwIBAgIQBeLmpM0J6lTWZbB1/iKiVjANBgkqhkiG9w0BAQUFADBm\n"
+
"MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMSEwHwYDVQQDExhEaWdp\n"
+
"Tm90YXIgUHVibGljIENBIDIwMjUxIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5v\n"
+
"dGFyLm5sMB4XDTExMDcxMDE5MDYzMFoXDTEzMDcwOTE5MDYzMFowajELMAkGA1UE\n"
+
"BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxFjAUBgNVBAcTDU1vdW50YWluIFZp\n"
+
"ZXcxFzAVBgNVBAUTDlBLMDAwMjI5MjAwMDAyMRUwEwYDVQQDEwwqLmdvb2dsZS5j\n"
+
"b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNbeKubCV0aCxhOiOS\n"
+
"CSQ/w9HXTYuD5BLKuiqXNw3setdTymeJz2L8aWOHo3nicFNDVwWTgwWomGNr2J6Q\n"
+
"7g1iINNSW0rR4E1l2szRkcnAY6c6i/Eke93nF4i2hDsnIBveolF5yjpuRm73uQQD\n"
+
"ulHjA3BFRF/PTi0fw2/Yt+8ieoMuNcMWN6Eou5Gqt5YZkWv176ofeCbsBmMrP87x\n"
+
"OhhtTDckCapk4VQZG2XrfzZcV6tdzCp5TI8uHdu17cdzXm1imZ8tyvzFeiCEOQN8\n"
+
"vPNzB/fIr3CJQ5q4uM5aKT3DD5PeVzf4rfJKQNgCTWiIBc9XcWEUuszwAsnmg7e2\n"
+
"EJRdAgMBAAGjggHMMIIByDA6BggrBgEFBQcBAQQuMCwwKgYIKwYBBQUHMAGGHmh0\n"
+
"dHA6Ly92YWxpZGF0aW9uLmRpZ2lub3Rhci5ubDAfBgNVHSMEGDAWgBTfM8Cvkv43\n"
+
"/LbYFhbQ2bGR1fpupTAJBgNVHRMEAjAAMIHGBgNVHSAEgb4wgbswgbgGDmCEEAGH\n"
+
"aQEBAQIEAQICMIGlMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2lub3Rhci5u\n"
+
"bC9jcHMwegYIKwYBBQUHAgIwbhpsQ29uZGl0aW9ucywgYXMgbWVudGlvbmVkIG9u\n"
+
"IG91ciB3ZWJzaXRlICh3d3cuZGlnaW5vdGFyLm5sKSwgYXJlIGFwcGxpY2FibGUg\n"
+
"dG8gYWxsIG91ciBwcm9kdWN0cyBhbmQgc2VydmljZXMuMEkGA1UdHwRCMEAwPqA8\n"
+
"oDqGOGh0dHA6Ly9zZXJ2aWNlLmRpZ2lub3Rhci5ubC9jcmwvcHVibGljMjAyNS9s\n"
+
"YXRlc3RDUkwuY3JsMA4GA1UdDwEB/wQEAwIEsDAbBgNVHREEFDASgRBhZG1pbkBn\n"
+
"b29nbGUuY29tMB0GA1UdDgQWBBQHSn0WJzIo0eMBMQUNsMqN6eF/7TANBgkqhkiG\n"
+
"9w0BAQUFAAOCAQEAAs5dL7N9wzRJkI4Aq4lC5t8j5ZadqnqUcgYLADzSv4ExytNH\n"
+
"UY2nH6iVTihC0UPSsILWraoeApdT7Rphz/8DLQEBRGdeKWAptNM3EbiXtQaZT2uB\n"
+
"pidL8UoafX0kch3f71Y1scpBEjvu5ZZLnjg0A8AL0tnsereOVdDpU98bKqdbbrnM\n"
+
"FRmBlSf7xdaNca6JJHeEpga4E9Ty683CmccrSGXdU2tTCuHEJww+iOAUtPIZcsum\n"
+
"U7/eYeY1pMyGLyIjbNgRY7nDzRwvM/BsbL9eh4/mSQj/4nncqJd22sVQpCggQiVK\n"
+
"baB2sVGcVNBkK55bT8gPqnx8JypubyUvayzZGg==\n"
+
"-----END CERTIFICATE-----"
;
public
static
void
main
(
String
args
[])
throws
Exception
{
Exception
reservedException
=
null
;
try
{
build
();
}
catch
(
CertPathBuilderException
cpbe
)
{
reservedException
=
cpbe
;
}
if
(
reservedException
==
null
)
{
throw
new
Exception
(
"Unable to block fraudulent certificate"
);
}
System
.
out
.
println
(
"The expected untrusted cert exception: "
+
reservedException
);
}
private
static
X509CertSelector
generateSelector
()
throws
Exception
{
// generate certificate from cert strings
CertificateFactory
cf
=
CertificateFactory
.
getInstance
(
"X.509"
);
X509Certificate
target
=
null
;
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
targetCertStr
.
getBytes
()))
{
target
=
(
X509Certificate
)
cf
.
generateCertificate
(
is
);
}
X509CertSelector
selector
=
new
X509CertSelector
();
selector
.
setCertificate
(
target
);
return
selector
;
}
private
static
CertStore
generateCertificateStore
()
throws
Exception
{
// generate certificate from cert strings
CertificateFactory
cf
=
CertificateFactory
.
getInstance
(
"X.509"
);
// generate certification path
Set
<
Certificate
>
entries
=
new
HashSet
();
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
targetCertStr
.
getBytes
()))
{
entries
.
add
(
cf
.
generateCertificate
(
is
));
}
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
intermediateCertStr
.
getBytes
()))
{
entries
.
add
(
cf
.
generateCertificate
(
is
));
}
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
compromisedCertStr
.
getBytes
()))
{
entries
.
add
(
cf
.
generateCertificate
(
is
));
}
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
untrustedCrossCertStr
.
getBytes
()))
{
entries
.
add
(
cf
.
generateCertificate
(
is
));
}
return
CertStore
.
getInstance
(
"Collection"
,
new
CollectionCertStoreParameters
(
entries
));
}
private
static
Set
<
TrustAnchor
>
generateTrustAnchors
()
throws
CertificateException
,
IOException
{
// generate certificate from cert string
CertificateFactory
cf
=
CertificateFactory
.
getInstance
(
"X.509"
);
Certificate
trustedCert
=
null
;
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
trustedCertStr
.
getBytes
()))
{
trustedCert
=
cf
.
generateCertificate
(
is
);
}
// generate a trust anchor
TrustAnchor
anchor
=
new
TrustAnchor
((
X509Certificate
)
trustedCert
,
null
);
return
Collections
.
singleton
(
anchor
);
}
private
static
void
build
()
throws
Exception
{
X509CertSelector
selector
=
generateSelector
();
Set
<
TrustAnchor
>
anchors
=
generateTrustAnchors
();
CertStore
certs
=
generateCertificateStore
();
PKIXBuilderParameters
params
=
new
PKIXBuilderParameters
(
anchors
,
selector
);
params
.
addCertStore
(
certs
);
params
.
setRevocationEnabled
(
false
);
params
.
setDate
(
new
Date
(
111
,
11
,
25
));
// 2011-12-25
CertPathBuilder
builder
=
CertPathBuilder
.
getInstance
(
"PKIX"
);
PKIXCertPathBuilderResult
result
=
(
PKIXCertPathBuilderResult
)
builder
.
build
(
params
);
}
}
test/sun/security/provider/certpath/X509CertPath/ReverseBuildCompromised.java
已删除
100644 → 0
浏览文件 @
9a61dcd4
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 7123519
* @summary Problem with java/classes_security
*/
import
java.net.*
;
import
java.util.*
;
import
java.io.*
;
import
javax.net.ssl.*
;
import
java.security.KeyStore
;
import
java.security.cert.*
;
import
java.security.spec.*
;
import
java.security.interfaces.*
;
import
sun.security.provider.certpath.SunCertPathBuilderParameters
;
public
class
ReverseBuildCompromised
{
// DigiNotar Root CA, untrusted root certificate
static
String
trustedCertStr
=
"-----BEGIN CERTIFICATE-----\n"
+
"MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n"
+
"VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n"
+
"ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n"
+
"KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n"
+
"ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1\n"
+
"MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE\n"
+
"ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j\n"
+
"b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF\n"
+
"bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg\n"
+
"U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA\n"
+
"A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/\n"
+
"I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3\n"
+
"wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC\n"
+
"AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb\n"
+
"oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5\n"
+
"BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p\n"
+
"dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk\n"
+
"MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp\n"
+
"b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu\n"
+
"dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0\n"
+
"MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi\n"
+
"E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa\n"
+
"MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI\n"
+
"hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN\n"
+
"95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd\n"
+
"2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=\n"
+
"-----END CERTIFICATE-----"
;
// DigiNotar Root CA, untrusted cross-certificate
static
String
untrustedCrossCertStr
=
"-----BEGIN CERTIFICATE-----\n"
+
"MIIFSDCCBLGgAwIBAgIERpwsrzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n"
+
"VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n"
+
"ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n"
+
"KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n"
+
"ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3\n"
+
"MjYxNTU3MzlaFw0xMzA4MjYxNjI3MzlaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK\n"
+
"EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI\n"
+
"hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n"
+
"ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt\n"
+
"OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx\n"
+
"hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7\n"
+
"gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D\n"
+
"IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T\n"
+
"BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs\n"
+
"Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8\n"
+
"5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf\n"
+
"DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX\n"
+
"9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e\n"
+
"7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj\n"
+
"ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB\n"
+
"BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF\n"
+
"BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD\n"
+
"VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy\n"
+
"bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G\n"
+
"A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob\n"
+
"BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAEa6RcDNcEIGUlkDJUY/pWTds4zh\n"
+
"xbVkp3wSmpwPFhx5fxTyF4HD2L60jl3aqjTB7gPpsL2Pk5QZlNsi3t4UkCV70UOd\n"
+
"ueJRN3o/LOtk4+bjXY2lC0qTHbN80VMLqPjmaf9ghSA9hwhskdtMgRsgfd90q5QP\n"
+
"ZFdYf+hthc3m6IcJ\n"
+
"-----END CERTIFICATE-----"
;
// DigiNotar Root CA, compromised certificate
static
String
compromisedCertStr
=
"-----BEGIN CERTIFICATE-----\n"
+
"MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBf\n"
+
"MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp\n"
+
"Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww\n"
+
"HhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgxOTIxWjBfMQswCQYDVQQGEwJOTDES\n"
+
"MBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEg\n"
+
"MB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3DQEB\n"
+
"AQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B\n"
+
"8cp86Yxq7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXY\n"
+
"tsMW2YiwsYcdcNqGtA8Ui3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIl\n"
+
"HgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8ZkqQfioLBQftFl9VkHXYRskbg+IIvvEj\n"
+
"zJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEqbYRAhU52mXyC8/O3AlnU\n"
+
"JgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4iHomGgVM\n"
+
"ktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXv\n"
+
"a5pkXuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57p\n"
+
"K6kwe6AYHw4YC+VbqdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMi\n"
+
"puih2TkGl/VujQKQjBR7P4DNG5y6xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovT\n"
+
"yD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHcBmfFlHqabWJMfczgZICynkeO\n"
+
"owIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV\n"
+
"HQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC\n"
+
"jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXy\n"
+
"fJ9oHbtdzno5wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBo\n"
+
"Y6pFITlIYXg23PFDk9Qlx/KAZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHo\n"
+
"M/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedTFLJgQT2EkTFoPSdE2+Xe9PpjRchM\n"
+
"Ppj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKfyvBovWsdst+Nbwed\n"
+
"2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoAZbwH\n"
+
"/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQl\n"
+
"nQ7KN+ZQ/YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jE\n"
+
"O1hZibCMjFCz2IbLaKPECudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU\n"
+
"9jQZjHkJNsphFyUXC4KYcwx3dMPVDceoEkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9\n"
+
"j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr\n"
+
"-----END CERTIFICATE-----"
;
// DigiNotar Public CA 2025, intermediate certificate
static
String
intermediateCertStr
=
"-----BEGIN CERTIFICATE-----\n"
+
"MIIGAzCCA+ugAwIBAgIQHn16Uz1FMEGWQA9xSB9FBDANBgkqhkiG9w0BAQUFADBf\n"
+
"MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp\n"
+
"Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww\n"
+
"HhcNMDYwMjA2MTYwNzAyWhcNMjUwMzI4MTYwNzAyWjBmMQswCQYDVQQGEwJOTDES\n"
+
"MBAGA1UEChMJRGlnaU5vdGFyMSEwHwYDVQQDExhEaWdpTm90YXIgUHVibGljIENB\n"
+
"IDIwMjUxIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5vdGFyLm5sMIIBIjANBgkq\n"
+
"hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/2eu/I5fMG8lbvPph3e8zfJpZQtg/72\n"
+
"Yx29+ivtKehiF6A3n785XyoY6IT3vlCrhy1CbMOY3M0x1n4YQlv17B0XZ/DqHyBA\n"
+
"SQvnDNbkM9j4NoSy/sRtGsP6PetIFFjrhE9whZuvuSUC1PY4PruEEJp8zOCx4+wU\n"
+
"Zt9xvjy4Xra+bSia5rwccQ/R5FYTGKrYCthOy9C9ud5Fhd++rlVhgdA/78w+Cs2s\n"
+
"xS4i0MAxG75P3/e/bATJKepbydHdDjkyz9o3RW/wdPUXhzEw4EwUjYg6XJrDzMad\n"
+
"6aL9M/eaxDjgz6o48EaWRDrGptaE2uJRuErVz7oOO0p/wYKq/BU+/wIDAQABo4IB\n"
+
"sjCCAa4wOgYIKwYBBQUHAQEELjAsMCoGCCsGAQUFBzABhh5odHRwOi8vdmFsaWRh\n"
+
"dGlvbi5kaWdpbm90YXIubmwwHwYDVR0jBBgwFoAUiGi/4I41xDs4a2L3KDuEgcgM\n"
+
"100wEgYDVR0TAQH/BAgwBgEB/wIBADCBxgYDVR0gBIG+MIG7MIG4Bg5ghBABh2kB\n"
+
"AQEBBQIGBDCBpTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpbm90YXIubmwv\n"
+
"Y3BzMHoGCCsGAQUFBwICMG4abENvbmRpdGlvbnMsIGFzIG1lbnRpb25lZCBvbiBv\n"
+
"dXIgd2Vic2l0ZSAod3d3LmRpZ2lub3Rhci5ubCksIGFyZSBhcHBsaWNhYmxlIHRv\n"
+
"IGFsbCBvdXIgcHJvZHVjdHMgYW5kIHNlcnZpY2VzLjBDBgNVHR8EPDA6MDigNqA0\n"
+
"hjJodHRwOi8vc2VydmljZS5kaWdpbm90YXIubmwvY3JsL3Jvb3QvbGF0ZXN0Q1JM\n"
+
"LmNybDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFN8zwK+S/jf8ttgWFtDZsZHV\n"
+
"+m6lMA0GCSqGSIb3DQEBBQUAA4ICAQCfV1rmBd9QStEyQ40lT0tqby0/3ez0STuJ\n"
+
"ESBQLQD56XYdb4VFSuqA6xTtiuSVHLoiv2xyISN9FvX3A5VtifkJ00JEaLQJiSsE\n"
+
"wGDkYGl1DT7SsqtAVKdMAuCM+e0j0/RV3hZ6kcrM7/wFccHwM+/TiurR9lgZDzB4\n"
+
"a7++A4XrYyKx9vc9ZwBEnD1nrAe7++gg9cuZgP7e+QL0FBHMjpw+gnCDjr2dzBZC\n"
+
"4r+b8SOqlbPRPexBuNghlc7PfcPIyFis2LJXDRMWiAd3TcfdALwRsuKMR/T+cwyr\n"
+
"asy69OEGHplLT57otQ524BDctDXNzlH9bHEh52QzqkWvIDqs42910IUy1nYNPIUG\n"
+
"yYJV/T7H8Jb6vfMZWe47iUFvtNZCi8+b542gRUwdi+ca+hGviBC9Qr4Wv1pl7CBQ\n"
+
"Hy1axTkHiQawUo/hgmoetCpftugl9yJTfvsBorUV1ZMxn9B1JLSGtWnbUsFRla7G\n"
+
"fNa0IsUkzmmha8XCzvNu0d1PDGtcQyUqmDOE1Hx4cIBeuF8ipuIXkrVCr9zAZ4ZC\n"
+
"hgz6aA1gDTW8whSRJqYEYEQ0pcMEFLyXE+Nz3O8NinO2AuxqKhjMk13203xA7lPY\n"
+
"MnBQ0v7S3qqbp/pvPMiUhOz/VaYted6QmOY5EATBnFiLCuw87JXoAyp382eJ3WX1\n"
+
"hOiR4IX9Tg==\n"
+
"-----END CERTIFICATE-----"
;
// The fraudulent certificate issued by above compromised CA
static
String
targetCertStr
=
"-----BEGIN CERTIFICATE-----\n"
+
"MIIFKDCCBBCgAwIBAgIQBeLmpM0J6lTWZbB1/iKiVjANBgkqhkiG9w0BAQUFADBm\n"
+
"MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMSEwHwYDVQQDExhEaWdp\n"
+
"Tm90YXIgUHVibGljIENBIDIwMjUxIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5v\n"
+
"dGFyLm5sMB4XDTExMDcxMDE5MDYzMFoXDTEzMDcwOTE5MDYzMFowajELMAkGA1UE\n"
+
"BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxFjAUBgNVBAcTDU1vdW50YWluIFZp\n"
+
"ZXcxFzAVBgNVBAUTDlBLMDAwMjI5MjAwMDAyMRUwEwYDVQQDEwwqLmdvb2dsZS5j\n"
+
"b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNbeKubCV0aCxhOiOS\n"
+
"CSQ/w9HXTYuD5BLKuiqXNw3setdTymeJz2L8aWOHo3nicFNDVwWTgwWomGNr2J6Q\n"
+
"7g1iINNSW0rR4E1l2szRkcnAY6c6i/Eke93nF4i2hDsnIBveolF5yjpuRm73uQQD\n"
+
"ulHjA3BFRF/PTi0fw2/Yt+8ieoMuNcMWN6Eou5Gqt5YZkWv176ofeCbsBmMrP87x\n"
+
"OhhtTDckCapk4VQZG2XrfzZcV6tdzCp5TI8uHdu17cdzXm1imZ8tyvzFeiCEOQN8\n"
+
"vPNzB/fIr3CJQ5q4uM5aKT3DD5PeVzf4rfJKQNgCTWiIBc9XcWEUuszwAsnmg7e2\n"
+
"EJRdAgMBAAGjggHMMIIByDA6BggrBgEFBQcBAQQuMCwwKgYIKwYBBQUHMAGGHmh0\n"
+
"dHA6Ly92YWxpZGF0aW9uLmRpZ2lub3Rhci5ubDAfBgNVHSMEGDAWgBTfM8Cvkv43\n"
+
"/LbYFhbQ2bGR1fpupTAJBgNVHRMEAjAAMIHGBgNVHSAEgb4wgbswgbgGDmCEEAGH\n"
+
"aQEBAQIEAQICMIGlMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2lub3Rhci5u\n"
+
"bC9jcHMwegYIKwYBBQUHAgIwbhpsQ29uZGl0aW9ucywgYXMgbWVudGlvbmVkIG9u\n"
+
"IG91ciB3ZWJzaXRlICh3d3cuZGlnaW5vdGFyLm5sKSwgYXJlIGFwcGxpY2FibGUg\n"
+
"dG8gYWxsIG91ciBwcm9kdWN0cyBhbmQgc2VydmljZXMuMEkGA1UdHwRCMEAwPqA8\n"
+
"oDqGOGh0dHA6Ly9zZXJ2aWNlLmRpZ2lub3Rhci5ubC9jcmwvcHVibGljMjAyNS9s\n"
+
"YXRlc3RDUkwuY3JsMA4GA1UdDwEB/wQEAwIEsDAbBgNVHREEFDASgRBhZG1pbkBn\n"
+
"b29nbGUuY29tMB0GA1UdDgQWBBQHSn0WJzIo0eMBMQUNsMqN6eF/7TANBgkqhkiG\n"
+
"9w0BAQUFAAOCAQEAAs5dL7N9wzRJkI4Aq4lC5t8j5ZadqnqUcgYLADzSv4ExytNH\n"
+
"UY2nH6iVTihC0UPSsILWraoeApdT7Rphz/8DLQEBRGdeKWAptNM3EbiXtQaZT2uB\n"
+
"pidL8UoafX0kch3f71Y1scpBEjvu5ZZLnjg0A8AL0tnsereOVdDpU98bKqdbbrnM\n"
+
"FRmBlSf7xdaNca6JJHeEpga4E9Ty683CmccrSGXdU2tTCuHEJww+iOAUtPIZcsum\n"
+
"U7/eYeY1pMyGLyIjbNgRY7nDzRwvM/BsbL9eh4/mSQj/4nncqJd22sVQpCggQiVK\n"
+
"baB2sVGcVNBkK55bT8gPqnx8JypubyUvayzZGg==\n"
+
"-----END CERTIFICATE-----"
;
public
static
void
main
(
String
args
[])
throws
Exception
{
Exception
reservedException
=
null
;
try
{
build
();
}
catch
(
CertPathBuilderException
cpbe
)
{
reservedException
=
cpbe
;
}
if
(
reservedException
==
null
)
{
throw
new
Exception
(
"Unable to block fraudulent certificate"
);
}
System
.
out
.
println
(
"The expected untrusted cert exception: "
+
reservedException
);
}
private
static
X509CertSelector
generateSelector
()
throws
Exception
{
// generate certificate from cert strings
CertificateFactory
cf
=
CertificateFactory
.
getInstance
(
"X.509"
);
X509Certificate
target
=
null
;
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
targetCertStr
.
getBytes
()))
{
target
=
(
X509Certificate
)
cf
.
generateCertificate
(
is
);
}
X509CertSelector
selector
=
new
X509CertSelector
();
selector
.
setCertificate
(
target
);
selector
.
setSubject
(
target
.
getSubjectX500Principal
());
return
selector
;
}
private
static
CertStore
generateCertificateStore
()
throws
Exception
{
// generate certificate from cert strings
CertificateFactory
cf
=
CertificateFactory
.
getInstance
(
"X.509"
);
// generate certification path
Set
<
Certificate
>
entries
=
new
HashSet
();
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
targetCertStr
.
getBytes
()))
{
entries
.
add
(
cf
.
generateCertificate
(
is
));
}
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
intermediateCertStr
.
getBytes
()))
{
entries
.
add
(
cf
.
generateCertificate
(
is
));
}
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
compromisedCertStr
.
getBytes
()))
{
entries
.
add
(
cf
.
generateCertificate
(
is
));
}
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
untrustedCrossCertStr
.
getBytes
()))
{
entries
.
add
(
cf
.
generateCertificate
(
is
));
}
return
CertStore
.
getInstance
(
"Collection"
,
new
CollectionCertStoreParameters
(
entries
));
}
private
static
Set
<
TrustAnchor
>
generateTrustAnchors
()
throws
CertificateException
,
IOException
{
// generate certificate from cert string
CertificateFactory
cf
=
CertificateFactory
.
getInstance
(
"X.509"
);
Certificate
trustedCert
=
null
;
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
trustedCertStr
.
getBytes
()))
{
trustedCert
=
cf
.
generateCertificate
(
is
);
}
// generate a trust anchor
TrustAnchor
anchor
=
new
TrustAnchor
((
X509Certificate
)
trustedCert
,
null
);
return
Collections
.
singleton
(
anchor
);
}
private
static
void
build
()
throws
Exception
{
X509CertSelector
selector
=
generateSelector
();
Set
<
TrustAnchor
>
anchors
=
generateTrustAnchors
();
CertStore
certs
=
generateCertificateStore
();
SunCertPathBuilderParameters
params
=
new
SunCertPathBuilderParameters
(
anchors
,
selector
);
params
.
setBuildForward
(
false
);
params
.
addCertStore
(
certs
);
params
.
setRevocationEnabled
(
false
);
params
.
setDate
(
new
Date
(
111
,
11
,
25
));
// 2011-12-25
CertPathBuilder
builder
=
CertPathBuilder
.
getInstance
(
"PKIX"
);
PKIXCertPathBuilderResult
result
=
(
PKIXCertPathBuilderResult
)
builder
.
build
(
params
);
}
}
test/sun/security/provider/certpath/X509CertPath/ValidateCompromised.java
已删除
100644 → 0
浏览文件 @
9a61dcd4
/*
* Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 7123519
* @summary Problem with java/classes_security
*/
import
java.net.*
;
import
java.util.*
;
import
java.io.*
;
import
javax.net.ssl.*
;
import
java.security.KeyStore
;
import
java.security.cert.*
;
import
java.security.spec.*
;
import
java.security.interfaces.*
;
public
class
ValidateCompromised
{
// DigiNotar Root CA, untrusted root certificate
static
String
trustedCertStr
=
"-----BEGIN CERTIFICATE-----\n"
+
"MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n"
+
"VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n"
+
"ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n"
+
"KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n"
+
"ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1\n"
+
"MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE\n"
+
"ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j\n"
+
"b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF\n"
+
"bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg\n"
+
"U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA\n"
+
"A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/\n"
+
"I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3\n"
+
"wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC\n"
+
"AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb\n"
+
"oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5\n"
+
"BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p\n"
+
"dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk\n"
+
"MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp\n"
+
"b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu\n"
+
"dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0\n"
+
"MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi\n"
+
"E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa\n"
+
"MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI\n"
+
"hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN\n"
+
"95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd\n"
+
"2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=\n"
+
"-----END CERTIFICATE-----"
;
// DigiNotar Root CA, untrusted cross-certificate
static
String
untrustedCrossCertStr
=
"-----BEGIN CERTIFICATE-----\n"
+
"MIIFSDCCBLGgAwIBAgIERpwsrzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC\n"
+
"VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u\n"
+
"ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc\n"
+
"KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u\n"
+
"ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzA3\n"
+
"MjYxNTU3MzlaFw0xMzA4MjYxNjI3MzlaMF8xCzAJBgNVBAYTAk5MMRIwEAYDVQQK\n"
+
"EwlEaWdpTm90YXIxGjAYBgNVBAMTEURpZ2lOb3RhciBSb290IENBMSAwHgYJKoZI\n"
+
"hvcNAQkBFhFpbmZvQGRpZ2lub3Rhci5ubDCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n"
+
"ADCCAgoCggIBAKywWMEAvdghCAsrmv5uVjAFnxt3kBBBXMMNhxF3joHxynzpjGrt\n"
+
"OHQ1u9rf+bvACTe0lnOBfTMamDn3k2+Vfz25sXWHulFI6ItwPpUExdi2wxbZiLCx\n"
+
"hx1w2oa0DxSLes8Q0XQ2ohJ7d4ZKeeZ73wIRaKVOhq40WJskE3hWIiUeAYtLUXH7\n"
+
"gsxZlmmIWmhTxbkNAjfLS7xmSpB+KgsFB+0WX1WQddhGyRuD4gi+8SPMmR3WKg+D\n"
+
"IBVYJ4Iu+uIiwkmxuQGBap1tnUB3aHZOISpthECFTnaZfILz87cCWdQmARuO361T\n"
+
"BtGuGN3isjrL14g4jqxbKbkZ05j5GAPPSIKGZgsbaQ/J6ziIeiYaBUyS1yTUlvKs\n"
+
"Ui2jR9VS9j/+zoQGcKaqPqLytlY0GFei5IFt58rwatPHkWsCg0F8Fe9rmmRe49A8\n"
+
"5bHre12G+8vmd0nNo2Xc97mcuOQLX5PPzDAaMhzOHGOVpfnq4XSLnukrqTB7oBgf\n"
+
"DhgL5Vup09FsHgdnj5FLqYq80maqkwGIspH6MVzVpsFSCAnNCmOi0yKm6KHZOQaX\n"
+
"9W6NApCMFHs/gM0bnLrEWHIjr7ZWn8Z6QjMpBz+CyeYfBQ3NTCg2i9PIPhzGiO9e\n"
+
"7olk6R3r2ol+MqZp0d3MiJ/R0MlmIdwGZ8WUepptYkx9zOBkgLKeR46jAgMBAAGj\n"
+
"ggEmMIIBIjASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMB\n"
+
"BggrBgEFBQcDAgYIKwYBBQUHAwQwEQYDVR0gBAowCDAGBgRVHSAAMDMGCCsGAQUF\n"
+
"BwEBBCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD\n"
+
"VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9zZXJ2ZXIxLmNy\n"
+
"bDAdBgNVHQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wCwYDVR0PBAQDAgEGMB8G\n"
+
"A1UdIwQYMBaAFPAXYhNVPbP/CgBr+1CEl/PtYtAaMBkGCSqGSIb2fQdBAAQMMAob\n"
+
"BFY3LjEDAgCBMA0GCSqGSIb3DQEBBQUAA4GBAEa6RcDNcEIGUlkDJUY/pWTds4zh\n"
+
"xbVkp3wSmpwPFhx5fxTyF4HD2L60jl3aqjTB7gPpsL2Pk5QZlNsi3t4UkCV70UOd\n"
+
"ueJRN3o/LOtk4+bjXY2lC0qTHbN80VMLqPjmaf9ghSA9hwhskdtMgRsgfd90q5QP\n"
+
"ZFdYf+hthc3m6IcJ\n"
+
"-----END CERTIFICATE-----"
;
// DigiNotar Root CA, compromised certificate
static
String
compromisedCertStr
=
"-----BEGIN CERTIFICATE-----\n"
+
"MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBf\n"
+
"MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp\n"
+
"Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww\n"
+
"HhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgxOTIxWjBfMQswCQYDVQQGEwJOTDES\n"
+
"MBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEg\n"
+
"MB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3DQEB\n"
+
"AQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B\n"
+
"8cp86Yxq7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXY\n"
+
"tsMW2YiwsYcdcNqGtA8Ui3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIl\n"
+
"HgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8ZkqQfioLBQftFl9VkHXYRskbg+IIvvEj\n"
+
"zJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEqbYRAhU52mXyC8/O3AlnU\n"
+
"JgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4iHomGgVM\n"
+
"ktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXv\n"
+
"a5pkXuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57p\n"
+
"K6kwe6AYHw4YC+VbqdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMi\n"
+
"puih2TkGl/VujQKQjBR7P4DNG5y6xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovT\n"
+
"yD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHcBmfFlHqabWJMfczgZICynkeO\n"
+
"owIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV\n"
+
"HQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC\n"
+
"jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXy\n"
+
"fJ9oHbtdzno5wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBo\n"
+
"Y6pFITlIYXg23PFDk9Qlx/KAZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHo\n"
+
"M/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedTFLJgQT2EkTFoPSdE2+Xe9PpjRchM\n"
+
"Ppj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKfyvBovWsdst+Nbwed\n"
+
"2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoAZbwH\n"
+
"/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQl\n"
+
"nQ7KN+ZQ/YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jE\n"
+
"O1hZibCMjFCz2IbLaKPECudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU\n"
+
"9jQZjHkJNsphFyUXC4KYcwx3dMPVDceoEkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9\n"
+
"j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr\n"
+
"-----END CERTIFICATE-----"
;
// DigiNotar Public CA 2025, intermediate certificate
static
String
intermediateCertStr
=
"-----BEGIN CERTIFICATE-----\n"
+
"MIIGAzCCA+ugAwIBAgIQHn16Uz1FMEGWQA9xSB9FBDANBgkqhkiG9w0BAQUFADBf\n"
+
"MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp\n"
+
"Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww\n"
+
"HhcNMDYwMjA2MTYwNzAyWhcNMjUwMzI4MTYwNzAyWjBmMQswCQYDVQQGEwJOTDES\n"
+
"MBAGA1UEChMJRGlnaU5vdGFyMSEwHwYDVQQDExhEaWdpTm90YXIgUHVibGljIENB\n"
+
"IDIwMjUxIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5vdGFyLm5sMIIBIjANBgkq\n"
+
"hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/2eu/I5fMG8lbvPph3e8zfJpZQtg/72\n"
+
"Yx29+ivtKehiF6A3n785XyoY6IT3vlCrhy1CbMOY3M0x1n4YQlv17B0XZ/DqHyBA\n"
+
"SQvnDNbkM9j4NoSy/sRtGsP6PetIFFjrhE9whZuvuSUC1PY4PruEEJp8zOCx4+wU\n"
+
"Zt9xvjy4Xra+bSia5rwccQ/R5FYTGKrYCthOy9C9ud5Fhd++rlVhgdA/78w+Cs2s\n"
+
"xS4i0MAxG75P3/e/bATJKepbydHdDjkyz9o3RW/wdPUXhzEw4EwUjYg6XJrDzMad\n"
+
"6aL9M/eaxDjgz6o48EaWRDrGptaE2uJRuErVz7oOO0p/wYKq/BU+/wIDAQABo4IB\n"
+
"sjCCAa4wOgYIKwYBBQUHAQEELjAsMCoGCCsGAQUFBzABhh5odHRwOi8vdmFsaWRh\n"
+
"dGlvbi5kaWdpbm90YXIubmwwHwYDVR0jBBgwFoAUiGi/4I41xDs4a2L3KDuEgcgM\n"
+
"100wEgYDVR0TAQH/BAgwBgEB/wIBADCBxgYDVR0gBIG+MIG7MIG4Bg5ghBABh2kB\n"
+
"AQEBBQIGBDCBpTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpbm90YXIubmwv\n"
+
"Y3BzMHoGCCsGAQUFBwICMG4abENvbmRpdGlvbnMsIGFzIG1lbnRpb25lZCBvbiBv\n"
+
"dXIgd2Vic2l0ZSAod3d3LmRpZ2lub3Rhci5ubCksIGFyZSBhcHBsaWNhYmxlIHRv\n"
+
"IGFsbCBvdXIgcHJvZHVjdHMgYW5kIHNlcnZpY2VzLjBDBgNVHR8EPDA6MDigNqA0\n"
+
"hjJodHRwOi8vc2VydmljZS5kaWdpbm90YXIubmwvY3JsL3Jvb3QvbGF0ZXN0Q1JM\n"
+
"LmNybDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFN8zwK+S/jf8ttgWFtDZsZHV\n"
+
"+m6lMA0GCSqGSIb3DQEBBQUAA4ICAQCfV1rmBd9QStEyQ40lT0tqby0/3ez0STuJ\n"
+
"ESBQLQD56XYdb4VFSuqA6xTtiuSVHLoiv2xyISN9FvX3A5VtifkJ00JEaLQJiSsE\n"
+
"wGDkYGl1DT7SsqtAVKdMAuCM+e0j0/RV3hZ6kcrM7/wFccHwM+/TiurR9lgZDzB4\n"
+
"a7++A4XrYyKx9vc9ZwBEnD1nrAe7++gg9cuZgP7e+QL0FBHMjpw+gnCDjr2dzBZC\n"
+
"4r+b8SOqlbPRPexBuNghlc7PfcPIyFis2LJXDRMWiAd3TcfdALwRsuKMR/T+cwyr\n"
+
"asy69OEGHplLT57otQ524BDctDXNzlH9bHEh52QzqkWvIDqs42910IUy1nYNPIUG\n"
+
"yYJV/T7H8Jb6vfMZWe47iUFvtNZCi8+b542gRUwdi+ca+hGviBC9Qr4Wv1pl7CBQ\n"
+
"Hy1axTkHiQawUo/hgmoetCpftugl9yJTfvsBorUV1ZMxn9B1JLSGtWnbUsFRla7G\n"
+
"fNa0IsUkzmmha8XCzvNu0d1PDGtcQyUqmDOE1Hx4cIBeuF8ipuIXkrVCr9zAZ4ZC\n"
+
"hgz6aA1gDTW8whSRJqYEYEQ0pcMEFLyXE+Nz3O8NinO2AuxqKhjMk13203xA7lPY\n"
+
"MnBQ0v7S3qqbp/pvPMiUhOz/VaYted6QmOY5EATBnFiLCuw87JXoAyp382eJ3WX1\n"
+
"hOiR4IX9Tg==\n"
+
"-----END CERTIFICATE-----"
;
// The fraudulent certificate issued by above compromised CA
static
String
targetCertStr
=
"-----BEGIN CERTIFICATE-----\n"
+
"MIIFKDCCBBCgAwIBAgIQBeLmpM0J6lTWZbB1/iKiVjANBgkqhkiG9w0BAQUFADBm\n"
+
"MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMSEwHwYDVQQDExhEaWdp\n"
+
"Tm90YXIgUHVibGljIENBIDIwMjUxIDAeBgkqhkiG9w0BCQEWEWluZm9AZGlnaW5v\n"
+
"dGFyLm5sMB4XDTExMDcxMDE5MDYzMFoXDTEzMDcwOTE5MDYzMFowajELMAkGA1UE\n"
+
"BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxFjAUBgNVBAcTDU1vdW50YWluIFZp\n"
+
"ZXcxFzAVBgNVBAUTDlBLMDAwMjI5MjAwMDAyMRUwEwYDVQQDEwwqLmdvb2dsZS5j\n"
+
"b20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNbeKubCV0aCxhOiOS\n"
+
"CSQ/w9HXTYuD5BLKuiqXNw3setdTymeJz2L8aWOHo3nicFNDVwWTgwWomGNr2J6Q\n"
+
"7g1iINNSW0rR4E1l2szRkcnAY6c6i/Eke93nF4i2hDsnIBveolF5yjpuRm73uQQD\n"
+
"ulHjA3BFRF/PTi0fw2/Yt+8ieoMuNcMWN6Eou5Gqt5YZkWv176ofeCbsBmMrP87x\n"
+
"OhhtTDckCapk4VQZG2XrfzZcV6tdzCp5TI8uHdu17cdzXm1imZ8tyvzFeiCEOQN8\n"
+
"vPNzB/fIr3CJQ5q4uM5aKT3DD5PeVzf4rfJKQNgCTWiIBc9XcWEUuszwAsnmg7e2\n"
+
"EJRdAgMBAAGjggHMMIIByDA6BggrBgEFBQcBAQQuMCwwKgYIKwYBBQUHMAGGHmh0\n"
+
"dHA6Ly92YWxpZGF0aW9uLmRpZ2lub3Rhci5ubDAfBgNVHSMEGDAWgBTfM8Cvkv43\n"
+
"/LbYFhbQ2bGR1fpupTAJBgNVHRMEAjAAMIHGBgNVHSAEgb4wgbswgbgGDmCEEAGH\n"
+
"aQEBAQIEAQICMIGlMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3LmRpZ2lub3Rhci5u\n"
+
"bC9jcHMwegYIKwYBBQUHAgIwbhpsQ29uZGl0aW9ucywgYXMgbWVudGlvbmVkIG9u\n"
+
"IG91ciB3ZWJzaXRlICh3d3cuZGlnaW5vdGFyLm5sKSwgYXJlIGFwcGxpY2FibGUg\n"
+
"dG8gYWxsIG91ciBwcm9kdWN0cyBhbmQgc2VydmljZXMuMEkGA1UdHwRCMEAwPqA8\n"
+
"oDqGOGh0dHA6Ly9zZXJ2aWNlLmRpZ2lub3Rhci5ubC9jcmwvcHVibGljMjAyNS9s\n"
+
"YXRlc3RDUkwuY3JsMA4GA1UdDwEB/wQEAwIEsDAbBgNVHREEFDASgRBhZG1pbkBn\n"
+
"b29nbGUuY29tMB0GA1UdDgQWBBQHSn0WJzIo0eMBMQUNsMqN6eF/7TANBgkqhkiG\n"
+
"9w0BAQUFAAOCAQEAAs5dL7N9wzRJkI4Aq4lC5t8j5ZadqnqUcgYLADzSv4ExytNH\n"
+
"UY2nH6iVTihC0UPSsILWraoeApdT7Rphz/8DLQEBRGdeKWAptNM3EbiXtQaZT2uB\n"
+
"pidL8UoafX0kch3f71Y1scpBEjvu5ZZLnjg0A8AL0tnsereOVdDpU98bKqdbbrnM\n"
+
"FRmBlSf7xdaNca6JJHeEpga4E9Ty683CmccrSGXdU2tTCuHEJww+iOAUtPIZcsum\n"
+
"U7/eYeY1pMyGLyIjbNgRY7nDzRwvM/BsbL9eh4/mSQj/4nncqJd22sVQpCggQiVK\n"
+
"baB2sVGcVNBkK55bT8gPqnx8JypubyUvayzZGg==\n"
+
"-----END CERTIFICATE-----"
;
public
static
void
main
(
String
args
[])
throws
Exception
{
Exception
reservedException
=
null
;
try
{
validate
();
}
catch
(
CertPathValidatorException
cpve
)
{
reservedException
=
cpve
;
}
if
(
reservedException
==
null
)
{
throw
new
Exception
(
"Unable to block fraudulent certificate"
);
}
System
.
out
.
println
(
"The expected untrusted cert exception: "
+
reservedException
);
}
private
static
CertPath
generateCertificatePath
()
throws
CertificateException
,
IOException
{
// generate certificate from cert strings
CertificateFactory
cf
=
CertificateFactory
.
getInstance
(
"X.509"
);
// generate certification path
List
<
Certificate
>
list
=
new
ArrayList
();
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
targetCertStr
.
getBytes
()))
{
list
.
add
(
cf
.
generateCertificate
(
is
));
}
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
intermediateCertStr
.
getBytes
()))
{
list
.
add
(
cf
.
generateCertificate
(
is
));
}
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
compromisedCertStr
.
getBytes
()))
{
list
.
add
(
cf
.
generateCertificate
(
is
));
}
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
untrustedCrossCertStr
.
getBytes
()))
{
list
.
add
(
cf
.
generateCertificate
(
is
));
}
return
cf
.
generateCertPath
(
list
);
}
private
static
Set
<
TrustAnchor
>
generateTrustAnchors
()
throws
CertificateException
,
IOException
{
// generate certificate from cert string
CertificateFactory
cf
=
CertificateFactory
.
getInstance
(
"X.509"
);
Certificate
trustedCert
=
null
;
try
(
ByteArrayInputStream
is
=
new
ByteArrayInputStream
(
trustedCertStr
.
getBytes
()))
{
trustedCert
=
cf
.
generateCertificate
(
is
);
}
// generate a trust anchor
TrustAnchor
anchor
=
new
TrustAnchor
((
X509Certificate
)
trustedCert
,
null
);
return
Collections
.
singleton
(
anchor
);
}
private
static
void
validate
()
throws
CertPathValidatorException
,
Exception
{
CertPath
path
=
generateCertificatePath
();
Set
<
TrustAnchor
>
anchors
=
generateTrustAnchors
();
PKIXParameters
params
=
new
PKIXParameters
(
anchors
);
// disable certificate revocation checking
params
.
setRevocationEnabled
(
false
);
// set the validation time
params
.
setDate
(
new
Date
(
111
,
11
,
25
));
// 2011-12-25
CertPathValidator
validator
=
CertPathValidator
.
getInstance
(
"PKIX"
);
validator
.
validate
(
path
,
params
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录