# HG changeset patch # User duke # Date 1499266271 -7200 # Node ID c8b275d62d6b0a980c510e839b70292245863e85 # Parent b036058aeedf5f94989219653bb80c693ca85b6d# Parent c27d5e6924b285fb713a4502a6055d915ac93b60 Merge diff -r c27d5e6924b2 -r c8b275d62d6b .hgtags-top-repo --- a/.hgtags-top-repo Wed Jul 05 16:50:37 2017 +0200 +++ b/.hgtags-top-repo Wed Jul 05 16:51:11 2017 +0200 @@ -28,3 +28,4 @@ 0f0189d55ce4a1f7840da7582ac7d970b3b7ab15 jdk7-b51 4264c2fe66493e57c411045a1b61377796641e45 jdk7-b52 c235f4a8559d196879c56af80159f67ee5d0e720 jdk7-b53 +2ef382b1bbd58a68e668391c6145a4b2066c5b96 jdk7-b54 diff -r c27d5e6924b2 -r c8b275d62d6b corba/.hgtags --- a/corba/.hgtags Wed Jul 05 16:50:37 2017 +0200 +++ b/corba/.hgtags Wed Jul 05 16:51:11 2017 +0200 @@ -28,3 +28,4 @@ 3eb8f1047a7402a9a79937d1c39560e931e91da2 jdk7-b51 bec82237d694f9802b820fa11bbb4f7fa9bf8e77 jdk7-b52 3c4d73194f6f89f040ae3b2d257335dfa8a1b2b5 jdk7-b53 +8130ac858d6789d5853d23044ba4a992afda574a jdk7-b54 diff -r c27d5e6924b2 -r c8b275d62d6b hotspot/.hgtags --- a/hotspot/.hgtags Wed Jul 05 16:50:37 2017 +0200 +++ b/hotspot/.hgtags Wed Jul 05 16:51:11 2017 +0200 @@ -28,3 +28,4 @@ 2581d90c6c9b2012da930eb4742add94a03069a0 jdk7-b51 1b1e8f1a4fe8cebc01c022484f78148e17b62a0d jdk7-b52 032c6af894dae8d939b3dd31d82042549e7793e0 jdk7-b53 +fafab5d5349c7c066d677538db67a1ee0fb33bd2 jdk7-b54 diff -r c27d5e6924b2 -r c8b275d62d6b jaxp/.hgtags --- a/jaxp/.hgtags Wed Jul 05 16:50:37 2017 +0200 +++ b/jaxp/.hgtags Wed Jul 05 16:51:11 2017 +0200 @@ -28,3 +28,4 @@ ae890d80d5dffcd4dc77a1f17d768e192d1852c7 jdk7-b51 69ad87dc25cbcaaaded4727199395ad0c78bc427 jdk7-b52 e8837366d3fd72f7c7a47ebfdbd5106c16156f12 jdk7-b53 +946a9f0c493261fa6a010dc33e61b9b535ba80c1 jdk7-b54 diff -r c27d5e6924b2 -r c8b275d62d6b jaxws/.hgtags --- a/jaxws/.hgtags Wed Jul 05 16:50:37 2017 +0200 +++ b/jaxws/.hgtags Wed Jul 05 16:51:11 2017 +0200 @@ -28,3 +28,4 @@ 41a66a42791ba90bff489af72cbfea71be9b40a5 jdk7-b51 e646890d18b770f625f14ed4ad5c50554d8d3d8b jdk7-b52 b250218eb2e534384667ec73e3713e684667fd4c jdk7-b53 +50ea00dc5f143fe00025233e704903c37f8464aa jdk7-b54 diff -r c27d5e6924b2 -r c8b275d62d6b jdk/.hgtags --- a/jdk/.hgtags Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/.hgtags Wed Jul 05 16:51:11 2017 +0200 @@ -28,3 +28,4 @@ fea0898259ae41c73620b1815aa48f036216155c jdk7-b51 bcbeadb4a5d759b29e876ee2c83401e91ff22f60 jdk7-b52 a2033addca678f9e4c0d92ffa1e389171cc9321d jdk7-b53 +d1c43d1f5676a24ba86221ac7cad5694f3a9afda jdk7-b54 diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/java/java/mapfile-vers --- a/jdk/make/java/java/mapfile-vers Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/java/java/mapfile-vers Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -135,7 +135,8 @@ Java_java_lang_ClassLoader_00024NativeLibrary_find; Java_java_lang_ClassLoader_00024NativeLibrary_load; Java_java_lang_ClassLoader_00024NativeLibrary_unload; - Java_java_lang_ClassLoader_registerNatives; + Java_java_lang_ClassLoader_getCaller; + Java_java_lang_ClassLoader_registerNatives; Java_java_lang_Compiler_registerNatives; Java_java_lang_Double_longBitsToDouble; Java_java_lang_Double_doubleToRawLongBits; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/java/net/FILES_c.gmk --- a/jdk/make/java/net/FILES_c.gmk Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/java/net/FILES_c.gmk Wed Jul 05 16:51:11 2017 +0200 @@ -39,6 +39,10 @@ ResolverConfigurationImpl.c \ DefaultProxySelector.c +ifeq ($(PLATFORM), solaris) + FILES_c += SdpProvider.c +endif + ifeq ($(PLATFORM), linux) FILES_c += linux_close.c endif diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/java/net/Makefile --- a/jdk/make/java/net/Makefile Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/java/net/Makefile Wed Jul 05 16:51:11 2017 +0200 @@ -108,11 +108,24 @@ # LOCALE_SET_DEFINITION = jre -properties: $(LIBDIR) $(LIBDIR)/net.properties +MISC_FILES = $(LIBDIR) $(LIBDIR)/net.properties $(LIBDIR)/net.properties: $(SHARE_SRC)/lib/net.properties @$(RM) $@ $(CP) $< $@ -build: properties +# +# SDP configuration template +# +ifeq ($(PLATFORM), solaris) +SDP_PATH = sdp/sdp.conf.template +SDP_CONF = $(LIBDIR)/$(SDP_PATH) +$(SDP_CONF): $(PLATFORM_SRC)/lib/$(SDP_PATH) + @$(RM) $* + $(install-file) +MISC_FILES += $(SDP_CONF) +endif + +build: $(MISC_FILES) + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/java/net/mapfile-vers --- a/jdk/make/java/net/mapfile-vers Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/java/net/mapfile-vers Wed Jul 05 16:51:11 2017 +0200 @@ -90,6 +90,7 @@ Java_sun_net_dns_ResolverConfigurationImpl_fallbackDomain0; Java_sun_net_spi_DefaultProxySelector_init; Java_sun_net_spi_DefaultProxySelector_getSystemProxy; + Java_sun_net_spi_SdpProvider_convert; NET_AllocSockaddr; NET_SockaddrToInetAddress; NET_SockaddrEqualsInetAddress; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/java/text/FILES_java.gmk --- a/jdk/make/java/text/FILES_java.gmk Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/java/text/FILES_java.gmk Wed Jul 05 16:51:11 2017 +0200 @@ -92,11 +92,11 @@ sun/text/normalizer/SymbolTable.java \ sun/text/normalizer/Trie.java \ sun/text/normalizer/TrieIterator.java \ + sun/text/normalizer/UBiDiProps.java \ sun/text/normalizer/UCharacter.java \ sun/text/normalizer/UCharacterIterator.java \ sun/text/normalizer/UCharacterProperty.java \ sun/text/normalizer/UCharacterPropertyReader.java \ - sun/text/normalizer/UProperty.java \ sun/text/normalizer/UTF16.java \ sun/text/normalizer/UnicodeMatcher.java \ sun/text/normalizer/UnicodeSet.java \ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/java/text/Makefile --- a/jdk/make/java/text/Makefile Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/java/text/Makefile Wed Jul 05 16:51:11 2017 +0200 @@ -64,7 +64,8 @@ $(TEXT_CLASSDIR)/SentenceBreakIteratorData ICU_FILES = $(TEXT_CLASSDIR)/unorm.icu \ - $(TEXT_CLASSDIR)/uprops.icu + $(TEXT_CLASSDIR)/uprops.icu \ + $(TEXT_CLASSDIR)/ubidi.icu # builder GENERATEBREAKITERATORDATA_JARFILE = \ @@ -89,7 +90,7 @@ build: $(BIFILES) $(ICU_FILES) # -# Extra rules to copy unorm.icu and uprops.icu +# Extra rules to copy unorm.icu, uprops.icu, and ubidi.icu # $(TEXT_CLASSDIR)/unorm.icu: $(TEXT_SRCDIR)/unorm.icu $(install-file) @@ -97,6 +98,9 @@ $(TEXT_CLASSDIR)/uprops.icu: $(TEXT_SRCDIR)/uprops.icu $(install-file) +$(TEXT_CLASSDIR)/ubidi.icu: $(TEXT_SRCDIR)/ubidi.icu + $(install-file) + clean clobber:: $(RM) -r $(TEXT_CLASSES) $(RM) -r $(BIFILES) diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/sun/awt/Depend.mak --- a/jdk/make/sun/awt/Depend.mak Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/sun/awt/Depend.mak Wed Jul 05 16:51:11 2017 +0200 @@ -71,6 +71,7 @@ $(STUBDIR)/Ole2.h \ $(STUBDIR)/Zmouse.h \ $(STUBDIR)/cderr.h \ + $(STUBDIR)/commctrl.h \ $(STUBDIR)/commdlg.h \ $(STUBDIR)/direct.h \ $(STUBDIR)/d3dcom.h \ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/sun/awt/FILES_c_windows.gmk --- a/jdk/make/sun/awt/FILES_c_windows.gmk Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/sun/awt/FILES_c_windows.gmk Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -104,7 +104,8 @@ OGLVertexCache.c \ WGLGraphicsConfig.c \ WGLSurfaceData.c \ - AccelGlyphCache.c + AccelGlyphCache.c \ + rect.c FILES_cpp = \ CmdIDList.cpp \ @@ -199,5 +200,6 @@ ShellFolder2.cpp \ ThemeReader.cpp \ ComCtl32Util.cpp \ + DllUtil.cpp \ initIDs.cpp \ MouseInfo.cpp diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/sun/awt/FILES_export_unix.gmk --- a/jdk/make/sun/awt/FILES_export_unix.gmk Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/sun/awt/FILES_export_unix.gmk Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -107,7 +107,8 @@ sun/java2d/x11/X11Renderer.java \ sun/java2d/x11/X11SurfaceData.java \ com/sun/java/swing/plaf/gtk/GTKEngine.java \ - com/sun/java/swing/plaf/gtk/GTKStyle.java + com/sun/java/swing/plaf/gtk/GTKStyle.java \ + sun/awt/ExtendedKeyCodes.java FILES_export2 = \ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/sun/awt/FILES_export_windows.gmk --- a/jdk/make/sun/awt/FILES_export_windows.gmk Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/sun/awt/FILES_export_windows.gmk Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright 2000-2008 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -154,7 +154,7 @@ sun/awt/datatransfer/DataTransferer.java \ sun/awt/datatransfer/SunClipboard.java \ sun/awt/dnd/SunDragSourceContextPeer.java \ - sun/awt/windows/WToolkitThreadBlockedHandler.java + sun/awt/windows/WToolkitThreadBlockedHandler.java FILES_export3 = \ java/awt/CheckboxMenuItem.java \ @@ -214,6 +214,7 @@ sun/awt/windows/WBufferStrategy.java \ sun/awt/windows/WTrayIconPeer.java \ sun/awt/image/ImagingLib.java \ + sun/awt/ExtendedKeyCodes.java \ sun/java2d/pipe/hw/AccelSurface.java \ sun/java2d/pipe/hw/AccelDeviceEventNotifier.java \ sun/java2d/pipe/hw/ContextCapabilities.java \ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/sun/awt/Makefile --- a/jdk/make/sun/awt/Makefile Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/sun/awt/Makefile Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright 1995-2008 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -219,6 +219,7 @@ vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/shell vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/medialib vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/debug +vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/utility vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d/loops vpath %.c $(SHARE_SRC)/native/$(PKGDIR)/../java2d/pipe diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/sun/awt/README --- a/jdk/make/sun/awt/README Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/sun/awt/README Wed Jul 05 16:51:11 2017 +0200 @@ -6,11 +6,9 @@ Included in this project is a generated file, make.depend, which lists all interdependencies of the source files. This file is generated *on -Solaris* with the following commands: +Solaris or Linux* with the following command: - % sccs edit make.depend % gnumake -f Depend.mak - % sccs delget make.depend This step only needs to be run when new files are added to the project, or include statements are changed. diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/sun/awt/make.depend --- a/jdk/make/sun/awt/make.depend Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/sun/awt/make.depend Wed Jul 05 16:51:11 2017 +0200 @@ -1,4 +1,4 @@ -$(OBJDIR)/AccelGlyphCache.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h +$(OBJDIR)/AccelGlyphCache.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h $(OBJDIR)/AlphaMacros.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h @@ -14,143 +14,143 @@ $(OBJDIR)/AnyShort.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/awt_AWTEvent.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_AWTEvent.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_BitmapUtil.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_BitmapUtil.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Brush.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Brush.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Button.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Button.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WButtonPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Button.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Button.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Button.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WButtonPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Button.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Canvas.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsConfig.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Canvas.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsConfig.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Checkbox.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Checkbox.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Checkbox.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Checkbox.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Checkbox.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Checkbox.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Choice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Choice.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WChoicePeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Choice.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Choice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Choice.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WChoicePeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Choice.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Clipboard.obj:: $(CLASSHDRDIR)/sun_awt_windows_WClipboard.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Clipboard.obj:: $(CLASSHDRDIR)/sun_awt_windows_WClipboard.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Color.obj:: $(CLASSHDRDIR)/sun_awt_windows_WColor.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Color.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Color.obj:: $(CLASSHDRDIR)/sun_awt_windows_WColor.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Color.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Component.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Color.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_MouseWheelEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_KeyboardFocusManager.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPanelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Component.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Color.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_MouseWheelEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPanelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Container.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Container.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Cursor.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Cursor.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCustomCursor.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WGlobalCursorManager.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Cursor.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Cursor.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WCustomCursor.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WGlobalCursorManager.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_DataTransferer.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_datatransfer_DataTransferer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDataTransferer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_DataTransferer.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_datatransfer_DataTransferer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDataTransferer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Debug.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Debug.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Desktop.obj:: ../../../src/share/javavm/export/jni.h ../../../src/windows/javavm/export/jni_md.h +$(OBJDIR)/awt_Desktop.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_DesktopProperties.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDesktopProperties.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_DesktopProperties.obj:: $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_windows_WDesktopProperties.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Dialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Dialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Dimension.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Dimension.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_DnDDS.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_dnd_DnDConstants.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_dnd_SunDragSourceContextPeer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDragSourceContextPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_DnDDS.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_dnd_DnDConstants.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_dnd_SunDragSourceContextPeer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDragSourceContextPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_DnDDT.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_dnd_DnDConstants.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDropTargetContextPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_DnDDT.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_dnd_DnDConstants.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDropTargetContextPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_DataTransferer.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_DrawingSurface.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_DrawingSurface.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Event.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Event.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_FileDialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_FileDialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Font.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDefaultFontCharset.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFontPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Font.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDefaultFontCharset.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFontPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Frame.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/java_lang_Integer.h $(CLASSHDRDIR)/sun_awt_EmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Frame.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/java_lang_Integer.h $(CLASSHDRDIR)/sun_awt_EmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFrame.h $(CLASSHDRDIR)/sun_awt_windows_WEmbeddedFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_GDIObject.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_GDIObject.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_IconCursor.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_IconCursor.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/awt_ImageRep.obj:: $(CLASSHDRDIR)/sun_awt_image_ImageRepresentation.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/awt_parseImage.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h $(OBJDIR)/awt_ImagingLib.obj:: $(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_image_BufferedImage.h $(CLASSHDRDIR)/java_awt_image_ConvolveOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_image_ImagingLib.h $(CLASSHDRDIR)/sun_awt_image_IntegerComponentRaster.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/awt_parseImage.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/share/native/sun/awt/medialib/awt_ImagingLib.h ../../../src/share/native/sun/awt/medialib/mlib_image_get.h ../../../src/share/native/sun/awt/medialib/mlib_image_types.h ../../../src/share/native/sun/awt/medialib/mlib_status.h ../../../src/share/native/sun/awt/medialib/mlib_types.h ../../../src/share/native/sun/awt/medialib/safe_alloc.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/awt_Mlib.h -$(OBJDIR)/awt_InputEvent.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_InputEvent.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_InputMethod.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethodDescriptor.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_InputMethod.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethodDescriptor.h $(CLASSHDRDIR)/sun_awt_windows_WInputMethod.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/common/locale_str.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_InputTextInfor.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_InputTextInfor.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_InputTextInfor.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Insets.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Insets.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_KeyboardFocusManager.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_KeyboardFocusManager.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_KeyboardFocusManager.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_KeyboardFocusManager.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_KeyEvent.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_KeyEvent.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Label.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Label.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WLabelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Label.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Label.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Label.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WLabelPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Label.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_List.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_List.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dimension.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Menu.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_MenuBar.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_MenuBar.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_MenuItem.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_CheckboxMenuItem.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_MenuItem.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_CheckboxMenuItem.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCheckboxMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Menu.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/awt_Mlib.obj:: $(CLASSHDRDIR)/java_awt_image_BufferedImage.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/medialib/awt_ImagingLib.h ../../../src/share/native/sun/awt/medialib/mlib_image_get.h ../../../src/share/native/sun/awt/medialib/mlib_image_types.h ../../../src/share/native/sun/awt/medialib/mlib_status.h ../../../src/share/native/sun/awt/medialib/mlib_types.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Mlib.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_MouseEvent.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_MouseEvent.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MouseEvent.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_new.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_new.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Object.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Object.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Palette.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_CustomPaletteDef.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/img_util_md.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Palette.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_CustomPaletteDef.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/img_util_md.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Panel.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Panel.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/awt_parseImage.obj:: $(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_image_BufferedImage.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_image_ImagingLib.h $(CLASSHDRDIR)/sun_awt_image_IntegerComponentRaster.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/awt_parseImage.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/share/native/sun/awt/medialib/awt_ImagingLib.h ../../../src/share/native/sun/awt/medialib/mlib_image_get.h ../../../src/share/native/sun/awt/medialib/mlib_image_types.h ../../../src/share/native/sun/awt/medialib/mlib_status.h ../../../src/share/native/sun/awt/medialib/mlib_types.h ../../../src/share/native/sun/awt/medialib/safe_alloc.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/awt_Mlib.h -$(OBJDIR)/awt_Pen.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Pen.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_PopupMenu.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_PopupMenu.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Event.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_PrintControl.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_PrintControl.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_PrintDialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialog.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_PrintDialog.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialog.h $(CLASSHDRDIR)/sun_awt_windows_WPrintDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_PrintJob.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrinterJob.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_PrintJob.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPrinterJob.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Rectangle.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Rectangle.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Rectangle.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Rectangle.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Robot.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WRobotPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Robot.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Robot.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WRobotPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Robot.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Scrollbar.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Scrollbar.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollbarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Scrollbar.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Scrollbar.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Scrollbar.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollbarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Scrollbar.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_ScrollPane.obj:: $(CLASSHDRDIR)/java_awt_Adjustable.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_AdjustmentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Scrollbar.h $(CLASSHDRDIR)/java_awt_ScrollPane.h $(CLASSHDRDIR)/java_awt_ScrollPaneAdjustable.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollbarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollPanePeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Scrollbar.h ../../../src/windows/native/sun/windows/awt_ScrollPane.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_ScrollPane.obj:: $(CLASSHDRDIR)/java_awt_Adjustable.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_AdjustmentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Scrollbar.h $(CLASSHDRDIR)/java_awt_ScrollPaneAdjustable.h $(CLASSHDRDIR)/java_awt_ScrollPane.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollbarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WScrollPanePeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Scrollbar.h ../../../src/windows/native/sun/windows/awt_ScrollPane.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_TextArea.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_TextArea.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextAreaPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_TextArea.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_TextArea.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_TextArea.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextAreaPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextArea.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_TextComponent.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_TextComponent.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_TextField.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_TextField.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextFieldPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_KeyboardFocusManager.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_TextField.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_TextField.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TextComponent.h $(CLASSHDRDIR)/java_awt_TextField.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WTextFieldPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_TextComponent.h ../../../src/windows/native/sun/windows/awt_TextField.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Toolkit.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_ComponentPeer.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Toolkit.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputMethodEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_List.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_ComponentPeer.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_PopupMenu.h $(CLASSHDRDIR)/java_awt_Toolkit.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WListPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WPopupMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jawt.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jawt_md.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Clipboard.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Cursor.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_DesktopProperties.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_DnDDS.h ../../../src/windows/native/sun/windows/awt_DnDDT.h ../../../src/windows/native/sun/windows/awt_DrawingSurface.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_InputEvent.h ../../../src/windows/native/sun/windows/awt_KeyEvent.h ../../../src/windows/native/sun/windows/awt_List.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_new.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PopupMenu.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/DllUtil.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h + +$(OBJDIR)/awt_TrayIcon.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_ActionEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TrayIcon.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WTrayIconPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_TrayIcon.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_TrayIcon.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_ActionEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_InputEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_TrayIcon.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WTrayIconPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_AWTEvent.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_TrayIcon.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Win32GraphicsConfig.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_DataBuffer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsConfig.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsConfig.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Win32GraphicsConfig.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_DataBuffer.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsConfig.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsConfig.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Win32GraphicsDevice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_DataBuffer.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsDevice.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/awt/image/dither.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/img_util_md.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Win32GraphicsDevice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_image_DataBuffer.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsDevice.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/awt/image/dither.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/img_util_md.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Win32GraphicsEnv.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsEnvironment.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/DllUtil.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Win32GraphicsEnv.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsEnvironment.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/awt_Window.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Container.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_ComponentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/awt_Window.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Container.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_ComponentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/BlitBg.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_BlitBg.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h $(OBJDIR)/Blit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_Blit.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/BlitBg.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_BlitBg.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/BufferedMaskBlit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedMaskBlit.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/BufferedMaskBlit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedMaskBlit.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h - -$(OBJDIR)/BufferedRenderPipe.obj:: $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h +$(OBJDIR)/BufferedRenderPipe.obj:: $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h $(OBJDIR)/BufImgSurfaceData.obj:: $(CLASSHDRDIR)/sun_awt_image_BufImgSurfaceData.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/BufImgSurfaceData.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/img_util_md.h @@ -160,62 +160,64 @@ $(OBJDIR)/ByteBinary4Bit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByteBinary.h ../../../src/share/native/sun/java2d/loops/ByteBinary4Bit.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/ByteGray.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/ByteGray.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/ByteIndexed.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/ByteIndexed.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/CmdIDList.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/CmdIDList.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/CmdIDList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/ComCtl32Util.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/ComCtl32Util.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DBlitLoops.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DBlitLoops.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgb.h ../../../src/share/native/sun/java2d/loops/Ushort565Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBlitLoops.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/D3DBlitLoops.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DBlitLoops.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgb.h ../../../src/share/native/sun/java2d/loops/Ushort565Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBlitLoops.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DBufImgOps.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/D3DBufImgOps.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DContext.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DShaders.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/D3DContext.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DShaders.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DGlyphCache.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/D3DGlyphCache.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DGraphicsDevice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DGraphicsDevice.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGraphicsDevice.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/D3DGraphicsDevice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DGraphicsDevice.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGraphicsDevice.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DMaskBlit.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskBlit.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/D3DMaskBlit.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskBlit.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DMaskCache.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/D3DMaskCache.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DMaskFill.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DMaskFill.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskFill.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/D3DMaskFill.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DMaskFill.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskFill.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DPaints.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/D3DPaints.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DPipelineManager.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBadHardware.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/D3DPipelineManager.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBadHardware.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DRenderer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/D3DRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DRenderer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DRenderQueue.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DBlitLoops.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBlitLoops.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskBlit.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskFill.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/D3DRenderQueue.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DBlitLoops.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DBlitLoops.h ../../../src/windows/native/sun/java2d/d3d/D3DBufImgOps.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskBlit.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskFill.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DResourceManager.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/D3DResourceManager.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/D3DSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DTextRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DTextRenderer.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/D3DTextRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DTextRenderer.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DGlyphCache.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DRenderQueue.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DTextRenderer.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/D3DVertexCacher.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/D3DVertexCacher.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPaints.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/DataBufferNative.obj:: $(CLASSHDRDIR)/sun_awt_image_DataBufferNative.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h +$(OBJDIR)/DataBufferNative.obj:: $(CLASSHDRDIR)/sun_awt_image_DataBufferNative.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h -$(OBJDIR)/debug_assert.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h +$(OBJDIR)/debug_assert.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h -$(OBJDIR)/debug_mem.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h +$(OBJDIR)/debug_mem.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h -$(OBJDIR)/debug_trace.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h +$(OBJDIR)/debug_trace.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h -$(OBJDIR)/debug_util.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h +$(OBJDIR)/debug_util.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h -$(OBJDIR)/Devices.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/Devices.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DContext.h $(CLASSHDRDIR)/sun_java2d_d3d_D3DSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelDeviceEventNotifier.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/ShaderList.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/d3d/D3DContext.h ../../../src/windows/native/sun/java2d/d3d/D3DMaskCache.h ../../../src/windows/native/sun/java2d/d3d/D3DPipeline.h ../../../src/windows/native/sun/java2d/d3d/D3DPipelineManager.h ../../../src/windows/native/sun/java2d/d3d/D3DResourceManager.h ../../../src/windows/native/sun/java2d/d3d/D3DSurfaceData.h ../../../src/windows/native/sun/java2d/d3d/D3DVertexCacher.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/Disposer.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h $(OBJDIR)/dither.obj:: ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/awt/image/dither.h ../../../src/windows/native/sun/windows/colordata.h +$(OBJDIR)/DllUtil.obj:: ../../../src/windows/native/sun/windows/DllUtil.h + $(OBJDIR)/DrawLine.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_DrawLine.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h $(OBJDIR)/DrawPath.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_DrawPath.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/DrawPath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/ProcessPath.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h @@ -230,27 +232,27 @@ $(OBJDIR)/FillSpans.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_FillSpans.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/FourByteAbgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any4Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/FourByteAbgr.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/FourByteAbgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any4Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/FourByteAbgr.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/FourByteAbgrPre.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any4Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/FourByteAbgrPre.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/FourByteAbgrPre.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any4Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/FourByteAbgrPre.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/GDIBlitLoops.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIBlitLoops.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/GDIBlitLoops.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIBlitLoops.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/GDIHashtable.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/GDIHashtable.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/GDIRenderer.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_geom_PathIterator.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIRenderer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/GDIRenderer.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_geom_PathIterator.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIRenderer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/GDIWindowSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIWindowSurfaceData.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/GDIWindowSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_java2d_windows_GDIWindowSurfaceData.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/gifdecoder.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h $(OBJDIR)/GraphicsPrimitiveMgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_GraphicsPrimitiveMgr.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/Hashtable.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/Hashtable.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/imageInitIDs.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/image/imageInitIDs.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h -$(OBJDIR)/img_colors.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h +$(OBJDIR)/img_colors.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h $(OBJDIR)/img_globals.obj:: $(CLASSHDRDIR)/java_awt_image_DirectColorModel.h $(CLASSHDRDIR)/java_awt_image_IndexColorModel.h $(CLASSHDRDIR)/java_awt_Transparency.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/windows/javavm/export/jni_md.h @@ -260,49 +262,49 @@ $(OBJDIR)/initIDs.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h -$(OBJDIR)/IntArgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/IntArgbBm.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/IntArgbBm.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/IntArgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h $(OBJDIR)/IntArgbPre.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/IntBgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/IntBgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/Index8Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntBgr.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/IntRgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/IntRgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/IntRgbx.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/IntRgbx.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/IntRgbx.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyInt.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/IntRgbx.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h $(OBJDIR)/MaskBlit.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_MaskBlit.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h $(OBJDIR)/MaskFill.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/sun_java2d_loops_MaskFill.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/MouseInfo.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/MouseInfo.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/ObjectList.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/ObjectList.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/OGLBlitLoops.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLBlitLoops.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLBlitLoops.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h +$(OBJDIR)/OGLBlitLoops.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLBlitLoops.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLBlitLoops.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h -$(OBJDIR)/OGLBufImgOps.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLBufImgOps.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h +$(OBJDIR)/OGLBufImgOps.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLBufImgOps.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h -$(OBJDIR)/OGLContext.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h +$(OBJDIR)/OGLContext.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h -$(OBJDIR)/OGLFuncs.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h +$(OBJDIR)/OGLFuncs.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h -$(OBJDIR)/OGLMaskBlit.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskBlit.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h +$(OBJDIR)/OGLMaskBlit.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskBlit.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h -$(OBJDIR)/OGLMaskFill.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLMaskFill.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskFill.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h +$(OBJDIR)/OGLMaskFill.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLMaskFill.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskFill.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h -$(OBJDIR)/OGLPaints.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedPaints.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h +$(OBJDIR)/OGLPaints.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedPaints.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h -$(OBJDIR)/OGLRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLRenderer.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h +$(OBJDIR)/OGLRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLRenderer.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h -$(OBJDIR)/OGLRenderQueue.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLBlitLoops.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLBlitLoops.h ../../../src/share/native/sun/java2d/opengl/OGLBufImgOps.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskBlit.h ../../../src/share/native/sun/java2d/opengl/OGLMaskFill.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLTextRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h +$(OBJDIR)/OGLRenderQueue.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLBlitLoops.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedOpCodes.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedRenderPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLBlitLoops.h ../../../src/share/native/sun/java2d/opengl/OGLBufImgOps.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLMaskBlit.h ../../../src/share/native/sun/java2d/opengl/OGLMaskFill.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLTextRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h -$(OBJDIR)/OGLSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h +$(OBJDIR)/OGLSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h -$(OBJDIR)/OGLTextRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLTextRenderer.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLTextRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h +$(OBJDIR)/OGLTextRenderer.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLTextRenderer.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedTextPipe.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/font/AccelGlyphCache.h ../../../src/share/native/sun/font/fontscalerdefs.h ../../../src/share/native/sun/font/sunfontids.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLTextRenderer.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h -$(OBJDIR)/OGLVertexCache.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h +$(OBJDIR)/OGLVertexCache.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h $(CLASSHDRDIR)/sun_java2d_SunGraphics2D.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLPaints.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/opengl/OGLVertexCache.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h $(OBJDIR)/ProcessPath.obj:: $(CLASSHDRDIR)/java_awt_geom_PathIterator.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/ProcessPath.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h @@ -314,36 +316,36 @@ $(OBJDIR)/ShapeSpanIterator.obj:: $(CLASSHDRDIR)/java_awt_geom_PathIterator.h $(CLASSHDRDIR)/sun_java2d_pipe_ShapeSpanIterator.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/pipe/PathConsumer2D.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/ShellFolder2.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/ShellFolder2.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h $(OBJDIR)/SpanClipRenderer.obj:: $(CLASSHDRDIR)/sun_java2d_pipe_RegionIterator.h $(CLASSHDRDIR)/sun_java2d_pipe_SpanClipRenderer.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h $(OBJDIR)/SurfaceData.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/Disposer.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/jlong_md.h -$(OBJDIR)/ThemeReader.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_ThemeReader.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/ThemeReader.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_ThemeReader.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/ThreeByteBgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any3Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/ThreeByteBgr.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/Any3Byte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/Trace.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h +$(OBJDIR)/Trace.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h $(OBJDIR)/TransformHelper.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_loops_TransformHelper.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/pipe/Region.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/Ushort4444Argb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort4444Argb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/Ushort4444Argb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort4444Argb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/Ushort555Rgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/Ushort555Rgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/Ushort555Rgbx.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgbx.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/Ushort555Rgbx.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort555Rgbx.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/Ushort565Rgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort4444Argb.h ../../../src/share/native/sun/java2d/loops/Ushort565Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/Ushort565Rgb.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/Ushort4444Argb.h ../../../src/share/native/sun/java2d/loops/Ushort565Rgb.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/UshortGray.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/UshortGray.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyShort.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/UshortIndexed.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/loops/UshortIndexed.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h +$(OBJDIR)/UshortIndexed.obj:: $(CLASSHDRDIR)/java_awt_AlphaComposite.h ../../../src/share/javavm/export/jni.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/sun/java2d/loops/AlphaMacros.h ../../../src/share/native/sun/java2d/loops/AlphaMath.h ../../../src/share/native/sun/java2d/loops/AnyByte.h ../../../src/share/native/sun/java2d/loops/ByteGray.h ../../../src/share/native/sun/java2d/loops/ByteIndexed.h ../../../src/share/native/sun/java2d/loops/GlyphImageRef.h ../../../src/share/native/sun/java2d/loops/GraphicsPrimitiveMgr.h ../../../src/share/native/sun/java2d/loops/Index12Gray.h ../../../src/share/native/sun/java2d/loops/IntArgbBm.h ../../../src/share/native/sun/java2d/loops/IntArgb.h ../../../src/share/native/sun/java2d/loops/IntArgbPre.h ../../../src/share/native/sun/java2d/loops/IntDcm.h ../../../src/share/native/sun/java2d/loops/IntRgb.h ../../../src/share/native/sun/java2d/loops/LineUtils.h ../../../src/share/native/sun/java2d/loops/LoopMacros.h ../../../src/share/native/sun/java2d/loops/ThreeByteBgr.h ../../../src/share/native/sun/java2d/loops/UshortGray.h ../../../src/share/native/sun/java2d/loops/UshortIndexed.h ../../../src/share/native/sun/java2d/pipe/SpanIterator.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/sun/java2d/j2d_md.h -$(OBJDIR)/WGLGraphicsConfig.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_WGLGraphicsConfig.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h ../../../src/windows/native/sun/java2d/opengl/WGLGraphicsConfig.h ../../../src/windows/native/sun/java2d/opengl/WGLSurfaceData.h +$(OBJDIR)/WGLGraphicsConfig.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_WGLGraphicsConfig.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h ../../../src/windows/native/sun/java2d/opengl/WGLGraphicsConfig.h ../../../src/windows/native/sun/java2d/opengl/WGLSurfaceData.h -$(OBJDIR)/WGLSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_WGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h ../../../src/windows/native/sun/java2d/opengl/WGLGraphicsConfig.h ../../../src/windows/native/sun/java2d/opengl/WGLSurfaceData.h +$(OBJDIR)/WGLSurfaceData.obj:: $(CLASSHDRDIR)/java_awt_image_AffineTransformOp.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLContext.h $(CLASSHDRDIR)/sun_java2d_opengl_OGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_opengl_WGLSurfaceData.h $(CLASSHDRDIR)/sun_java2d_pipe_BufferedContext.h $(CLASSHDRDIR)/sun_java2d_pipe_hw_AccelSurface.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/gdefs.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/glext.h ../../../src/share/native/sun/java2d/opengl/J2D_GL/gl.h ../../../src/share/native/sun/java2d/opengl/OGLContext.h ../../../src/share/native/sun/java2d/opengl/OGLFuncMacros.h ../../../src/share/native/sun/java2d/opengl/OGLFuncs.h ../../../src/share/native/sun/java2d/opengl/OGLRenderQueue.h ../../../src/share/native/sun/java2d/opengl/OGLSurfaceData.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/gdefs_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/j2d_md.h ../../../src/windows/native/sun/java2d/opengl/J2D_GL/wglext.h ../../../src/windows/native/sun/java2d/opengl/OGLFuncs_md.h ../../../src/windows/native/sun/java2d/opengl/WGLGraphicsConfig.h ../../../src/windows/native/sun/java2d/opengl/WGLSurfaceData.h -$(OBJDIR)/WindowsFlags.obj:: ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/WindowsFlags.obj:: ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/stdhdrs.h -$(OBJDIR)/WPrinterJob.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_FileDialog.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFileDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_FileDialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_PrintDialog.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h +$(OBJDIR)/WPrinterJob.obj:: $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_PrintControl.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/stdhdrs.h diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/sun/awt/mapfile-mawt-vers --- a/jdk/make/sun/awt/mapfile-mawt-vers Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/sun/awt/mapfile-mawt-vers Wed Jul 05 16:51:11 2017 +0200 @@ -291,6 +291,7 @@ Java_sun_awt_X11GraphicsConfig_createBackBuffer; Java_sun_awt_X11GraphicsConfig_destroyBackBuffer; Java_sun_awt_X11GraphicsConfig_swapBuffers; + Java_sun_awt_X11GraphicsConfig_isTranslucencyCapable; Java_sun_awt_X11GraphicsDevice_isDBESupported; Java_sun_awt_X11GraphicsDevice_getDisplay; Java_sun_awt_X11GraphicsDevice_getDoubleBufferVisuals; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/sun/awt/mapfile-vers-linux --- a/jdk/make/sun/awt/mapfile-vers-linux Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/sun/awt/mapfile-vers-linux Wed Jul 05 16:51:11 2017 +0200 @@ -407,6 +407,7 @@ Java_sun_awt_X11GraphicsConfig_getNumColors; Java_sun_awt_X11GraphicsConfig_getXResolution; Java_sun_awt_X11GraphicsConfig_getYResolution; + Java_sun_awt_X11GraphicsConfig_isTranslucencyCapable; Java_sun_awt_X11GraphicsDevice_isDBESupported; Java_sun_awt_X11GraphicsDevice_getDisplay; Java_sun_awt_X11GraphicsDevice_getDoubleBufferVisuals; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/sun/net/FILES_java.gmk --- a/jdk/make/sun/net/FILES_java.gmk Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/sun/net/FILES_java.gmk Wed Jul 05 16:51:11 2017 +0200 @@ -39,6 +39,7 @@ sun/net/TransferProtocolClient.java \ sun/net/ConnectionResetException.java \ sun/net/NetProperties.java \ + sun/net/NetHooks.java \ sun/net/util/IPAddressUtil.java \ sun/net/dns/ResolverConfiguration.java \ sun/net/dns/ResolverConfigurationImpl.java \ @@ -123,3 +124,7 @@ ifeq ($(PLATFORM), windows) FILES_java += sun/net/www/protocol/http/NTLMAuthSequence.java endif + +ifeq ($(PLATFORM), solaris) + FILES_java += sun/net/spi/SdpProvider.java +endif diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/sun/xawt/FILES_c_unix.gmk --- a/jdk/make/sun/xawt/FILES_c_unix.gmk Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/sun/xawt/FILES_c_unix.gmk Wed Jul 05 16:51:11 2017 +0200 @@ -78,4 +78,5 @@ awt_Plugin.c \ gtk2_interface.c \ swing_GTKEngine.c \ - swing_GTKStyle.c + swing_GTKStyle.c \ + rect.c diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/sun/xawt/Makefile --- a/jdk/make/sun/xawt/Makefile Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/sun/xawt/Makefile Wed Jul 05 16:51:11 2017 +0200 @@ -79,6 +79,7 @@ vpath %.c $(SHARE_SRC)/native/sun/java2d/loops vpath %.c $(SHARE_SRC)/native/sun/java2d/pipe vpath %.c $(SHARE_SRC)/native/sun/awt/medialib +vpath %.c $(SHARE_SRC)/native/sun/awt/utility vpath %.cpp $(SHARE_SRC)/native/sun/image vpath %.c $(SHARE_SRC)/native/sun/font vpath %.c $(PLATFORM_SRC)/native/sun/awt/robot_child @@ -274,6 +275,23 @@ $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon32.png \ $(ICONS_PATH_PREFIX)/classes/sun/awt/X11/java-icon48.png + +ICONPATH=$(PLATFORM_SRC)/classes/sun/awt/X11 + +ICONS += \ + $(ICONPATH)/security-icon-bw16.png \ + $(ICONPATH)/security-icon-interim16.png \ + $(ICONPATH)/security-icon-yellow16.png \ + $(ICONPATH)/security-icon-bw24.png \ + $(ICONPATH)/security-icon-interim24.png \ + $(ICONPATH)/security-icon-yellow24.png \ + $(ICONPATH)/security-icon-bw32.png \ + $(ICONPATH)/security-icon-interim32.png \ + $(ICONPATH)/security-icon-yellow32.png \ + $(ICONPATH)/security-icon-bw48.png \ + $(ICONPATH)/security-icon-interim48.png \ + $(ICONPATH)/security-icon-yellow48.png + TEMPDIR_CLASSES = $(TEMPDIR)/classes $(TEMPDIR_CLASSES)/sun/awt/X11/ToBin.class: ToBin.java diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/sun/xawt/mapfile-vers --- a/jdk/make/sun/xawt/mapfile-vers Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/sun/xawt/mapfile-vers Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ # -# Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved. +# Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -93,6 +93,9 @@ Java_sun_awt_X11_XlibWrapper_XGetWMHints; Java_sun_awt_X11_XlibWrapper_XShapeQueryExtension; Java_sun_awt_X11_XlibWrapper_SetRectangularShape; + Java_sun_awt_X11_XlibWrapper_SetBitmapShape; + Java_sun_awt_X11_XlibWrapper_XConfigureWindow; + Java_sun_awt_X11_XlibWrapper_SetZOrder; Java_sun_awt_X11_XToolkit_initIDs; Java_sun_awt_X11_XWindow_getNativeColor; Java_sun_awt_X11_XWindow_getWMInsets; @@ -217,6 +220,7 @@ Java_sun_awt_X11GraphicsConfig_createBackBuffer; Java_sun_awt_X11GraphicsConfig_destroyBackBuffer; Java_sun_awt_X11GraphicsConfig_swapBuffers; + Java_sun_awt_X11GraphicsConfig_isTranslucencyCapable; Java_java_awt_Insets_initIDs; Java_java_awt_KeyboardFocusManager_initIDs; Java_java_awt_Font_initIDs; @@ -289,16 +293,26 @@ Java_sun_awt_X11_XlibWrapper_XGetIconSizes; Java_sun_awt_X11_XlibWrapper_XKeycodeToKeysym; Java_sun_awt_X11_XlibWrapper_XKeysymToKeycode; - Java_sun_awt_X11_XlibWrapper_XQueryKeymap; + Java_sun_awt_X11_XlibWrapper_XQueryKeymap; + Java_sun_awt_X11_XlibWrapper_XkbGetEffectiveGroup; + Java_sun_awt_X11_XlibWrapper_XkbSelectEvents; + Java_sun_awt_X11_XlibWrapper_XkbSelectEventDetails; + Java_sun_awt_X11_XlibWrapper_XkbKeycodeToKeysym; + Java_sun_awt_X11_XlibWrapper_XkbLibraryVersion; + Java_sun_awt_X11_XlibWrapper_XkbQueryExtension; + Java_sun_awt_X11_XlibWrapper_XkbGetMap; + Java_sun_awt_X11_XlibWrapper_XkbGetUpdatedMap; + Java_sun_awt_X11_XlibWrapper_XkbFreeKeyboard; + Java_sun_awt_X11_XlibWrapper_XkbTranslateKeyCode; Java_sun_awt_X11_XlibWrapper_XGetModifierMapping; - Java_sun_awt_X11_XlibWrapper_XFreeModifiermap; + Java_sun_awt_X11_XlibWrapper_XFreeModifiermap; Java_sun_awt_X11_XlibWrapper_XChangeActivePointerGrab; Java_sun_awt_X11_XlibWrapper_XNextSecondaryLoopEvent; Java_sun_awt_X11_XlibWrapper_ExitSecondaryLoop; Java_sun_awt_X11_XlibWrapper_XTextPropertyToStringList; Java_sun_awt_X11_XlibWrapper_XGrabServer; Java_sun_awt_X11_XlibWrapper_XUngrabServer; - Java_sun_awt_X11_XlibWrapper_XPutBackEvent; + Java_sun_awt_X11_XlibWrapper_XPutBackEvent; Java_sun_awt_X11_XlibWrapper_XConvertCase; Java_sun_awt_X11_XlibWrapper_XSynchronize; Java_java_awt_FileDialog_initIDs; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/tools/GenerateCharacter/CharacterData00.java.template --- a/jdk/make/tools/GenerateCharacter/CharacterData00.java.template Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/tools/GenerateCharacter/CharacterData00.java.template Wed Jul 05 16:51:11 2017 +0200 @@ -144,6 +144,55 @@ case 0x1FBC : mapChar = 0x1FB3; break; case 0x1FCC : mapChar = 0x1FC3; break; case 0x1FFC : mapChar = 0x1FF3; break; + + case 0x023A : mapChar = 0x2C65; break; + case 0x023E : mapChar = 0x2C66; break; + case 0x10A0 : mapChar = 0x2D00; break; + case 0x10A1 : mapChar = 0x2D01; break; + case 0x10A2 : mapChar = 0x2D02; break; + case 0x10A3 : mapChar = 0x2D03; break; + case 0x10A4 : mapChar = 0x2D04; break; + case 0x10A5 : mapChar = 0x2D05; break; + case 0x10A6 : mapChar = 0x2D06; break; + case 0x10A7 : mapChar = 0x2D07; break; + case 0x10A8 : mapChar = 0x2D08; break; + case 0x10A9 : mapChar = 0x2D09; break; + case 0x10AA : mapChar = 0x2D0A; break; + case 0x10AB : mapChar = 0x2D0B; break; + case 0x10AC : mapChar = 0x2D0C; break; + case 0x10AD : mapChar = 0x2D0D; break; + case 0x10AE : mapChar = 0x2D0E; break; + case 0x10AF : mapChar = 0x2D0F; break; + case 0x10B0 : mapChar = 0x2D10; break; + case 0x10B1 : mapChar = 0x2D11; break; + case 0x10B2 : mapChar = 0x2D12; break; + case 0x10B3 : mapChar = 0x2D13; break; + case 0x10B4 : mapChar = 0x2D14; break; + case 0x10B5 : mapChar = 0x2D15; break; + case 0x10B6 : mapChar = 0x2D16; break; + case 0x10B7 : mapChar = 0x2D17; break; + case 0x10B8 : mapChar = 0x2D18; break; + case 0x10B9 : mapChar = 0x2D19; break; + case 0x10BA : mapChar = 0x2D1A; break; + case 0x10BB : mapChar = 0x2D1B; break; + case 0x10BC : mapChar = 0x2D1C; break; + case 0x10BD : mapChar = 0x2D1D; break; + case 0x10BE : mapChar = 0x2D1E; break; + case 0x10BF : mapChar = 0x2D1F; break; + case 0x10C0 : mapChar = 0x2D20; break; + case 0x10C1 : mapChar = 0x2D21; break; + case 0x10C2 : mapChar = 0x2D22; break; + case 0x10C3 : mapChar = 0x2D23; break; + case 0x10C4 : mapChar = 0x2D24; break; + case 0x10C5 : mapChar = 0x2D25; break; + case 0x1E9E : mapChar = 0x00DF; break; + case 0x2C62 : mapChar = 0x026B; break; + case 0x2C63 : mapChar = 0x1D7D; break; + case 0x2C64 : mapChar = 0x027D; break; + case 0x2C6D : mapChar = 0x0251; break; + case 0x2C6E : mapChar = 0x0271; break; + case 0x2C6F : mapChar = 0x0250; break; + case 0xA77D : mapChar = 0x1D79; break; // default mapChar is already set, so no // need to redo it here. // default : mapChar = ch; @@ -196,6 +245,54 @@ case 0x1FB3 : mapChar = 0x1FBC; break; case 0x1FC3 : mapChar = 0x1FCC; break; case 0x1FF3 : mapChar = 0x1FFC; break; + + case 0x0250 : mapChar = 0x2C6F; break; + case 0x0251 : mapChar = 0x2C6D; break; + case 0x026B : mapChar = 0x2C62; break; + case 0x0271 : mapChar = 0x2C6E; break; + case 0x027D : mapChar = 0x2C64; break; + case 0x1D79 : mapChar = 0xA77D; break; + case 0x1D7D : mapChar = 0x2C63; break; + case 0x2C65 : mapChar = 0x023A; break; + case 0x2C66 : mapChar = 0x023E; break; + case 0x2D00 : mapChar = 0x10A0; break; + case 0x2D01 : mapChar = 0x10A1; break; + case 0x2D02 : mapChar = 0x10A2; break; + case 0x2D03 : mapChar = 0x10A3; break; + case 0x2D04 : mapChar = 0x10A4; break; + case 0x2D05 : mapChar = 0x10A5; break; + case 0x2D06 : mapChar = 0x10A6; break; + case 0x2D07 : mapChar = 0x10A7; break; + case 0x2D08 : mapChar = 0x10A8; break; + case 0x2D09 : mapChar = 0x10A9; break; + case 0x2D0A : mapChar = 0x10AA; break; + case 0x2D0B : mapChar = 0x10AB; break; + case 0x2D0C : mapChar = 0x10AC; break; + case 0x2D0D : mapChar = 0x10AD; break; + case 0x2D0E : mapChar = 0x10AE; break; + case 0x2D0F : mapChar = 0x10AF; break; + case 0x2D10 : mapChar = 0x10B0; break; + case 0x2D11 : mapChar = 0x10B1; break; + case 0x2D12 : mapChar = 0x10B2; break; + case 0x2D13 : mapChar = 0x10B3; break; + case 0x2D14 : mapChar = 0x10B4; break; + case 0x2D15 : mapChar = 0x10B5; break; + case 0x2D16 : mapChar = 0x10B6; break; + case 0x2D17 : mapChar = 0x10B7; break; + case 0x2D18 : mapChar = 0x10B8; break; + case 0x2D19 : mapChar = 0x10B9; break; + case 0x2D1A : mapChar = 0x10BA; break; + case 0x2D1B : mapChar = 0x10BB; break; + case 0x2D1C : mapChar = 0x10BC; break; + case 0x2D1D : mapChar = 0x10BD; break; + case 0x2D1E : mapChar = 0x10BE; break; + case 0x2D1F : mapChar = 0x10BF; break; + case 0x2D20 : mapChar = 0x10C0; break; + case 0x2D21 : mapChar = 0x10C1; break; + case 0x2D22 : mapChar = 0x10C2; break; + case 0x2D23 : mapChar = 0x10C3; break; + case 0x2D24 : mapChar = 0x10C4; break; + case 0x2D25 : mapChar = 0x10C5; break; // ch must have a 1:M case mapping, but we // can't handle it here. Return ch. // since mapChar is already set, no need @@ -315,6 +412,12 @@ case 0x32BE: retval = 49; break; // CIRCLED NUMBER FORTY NINE case 0x32BF: retval = 50; break; // CIRCLED NUMBER FIFTY + case 0x0D71: retval = 100; break; // MALAYALAM NUMBER ONE HUNDRED + case 0x0D72: retval = 1000; break; // MALAYALAM NUMBER ONE THOUSAND + case 0x2186: retval = 50; break; // ROMAN NUMERAL FIFTY EARLY FORM + case 0x2187: retval = 50000; break; // ROMAN NUMERAL FIFTY THOUSAND + case 0x2188: retval = 100000; break; // ROMAN NUMERAL ONE HUNDRED THOUSAND + default: retval = -2; break; } break; @@ -383,6 +486,54 @@ case 0x00B5 : mapChar = 0x039C; break; case 0x017F : mapChar = 0x0053; break; case 0x1FBE : mapChar = 0x0399; break; + + case 0x0250 : mapChar = 0x2C6F; break; + case 0x0251 : mapChar = 0x2C6D; break; + case 0x026B : mapChar = 0x2C62; break; + case 0x0271 : mapChar = 0x2C6E; break; + case 0x027D : mapChar = 0x2C64; break; + case 0x1D79 : mapChar = 0xA77D; break; + case 0x1D7D : mapChar = 0x2C63; break; + case 0x2C65 : mapChar = 0x023A; break; + case 0x2C66 : mapChar = 0x023E; break; + case 0x2D00 : mapChar = 0x10A0; break; + case 0x2D01 : mapChar = 0x10A1; break; + case 0x2D02 : mapChar = 0x10A2; break; + case 0x2D03 : mapChar = 0x10A3; break; + case 0x2D04 : mapChar = 0x10A4; break; + case 0x2D05 : mapChar = 0x10A5; break; + case 0x2D06 : mapChar = 0x10A6; break; + case 0x2D07 : mapChar = 0x10A7; break; + case 0x2D08 : mapChar = 0x10A8; break; + case 0x2D09 : mapChar = 0x10A9; break; + case 0x2D0A : mapChar = 0x10AA; break; + case 0x2D0B : mapChar = 0x10AB; break; + case 0x2D0C : mapChar = 0x10AC; break; + case 0x2D0D : mapChar = 0x10AD; break; + case 0x2D0E : mapChar = 0x10AE; break; + case 0x2D0F : mapChar = 0x10AF; break; + case 0x2D10 : mapChar = 0x10B0; break; + case 0x2D11 : mapChar = 0x10B1; break; + case 0x2D12 : mapChar = 0x10B2; break; + case 0x2D13 : mapChar = 0x10B3; break; + case 0x2D14 : mapChar = 0x10B4; break; + case 0x2D15 : mapChar = 0x10B5; break; + case 0x2D16 : mapChar = 0x10B6; break; + case 0x2D17 : mapChar = 0x10B7; break; + case 0x2D18 : mapChar = 0x10B8; break; + case 0x2D19 : mapChar = 0x10B9; break; + case 0x2D1A : mapChar = 0x10BA; break; + case 0x2D1B : mapChar = 0x10BB; break; + case 0x2D1C : mapChar = 0x10BC; break; + case 0x2D1D : mapChar = 0x10BD; break; + case 0x2D1E : mapChar = 0x10BE; break; + case 0x2D1F : mapChar = 0x10BF; break; + case 0x2D20 : mapChar = 0x10C0; break; + case 0x2D21 : mapChar = 0x10C1; break; + case 0x2D22 : mapChar = 0x10C2; break; + case 0x2D23 : mapChar = 0x10C3; break; + case 0x2D24 : mapChar = 0x10C4; break; + case 0x2D25 : mapChar = 0x10C5; break; default : mapChar = Character.ERROR; break; } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/tools/GenerateCharacter/CharacterData01.java.template --- a/jdk/make/tools/GenerateCharacter/CharacterData01.java.template Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/tools/GenerateCharacter/CharacterData01.java.template Wed Jul 05 16:51:11 2017 +0200 @@ -218,6 +218,48 @@ case 0x10132: retval = 80000; break; // AEGEAN NUMBER EIGHTY THOUSAND case 0x10133: retval = 90000; break; // AEGEAN NUMBER NINETY THOUSAND case 0x10323: retval = 50; break; // OLD ITALIC NUMERAL FIFTY + + case 0x010144: retval = 50; break; // ACROPHONIC ATTIC FIFTY + case 0x010145: retval = 500; break; // ACROPHONIC ATTIC FIVE HUNDRED + case 0x010146: retval = 5000; break; // ACROPHONIC ATTIC FIVE THOUSAND + case 0x010147: retval = 50000; break; // ACROPHONIC ATTIC FIFTY THOUSAND + case 0x01014A: retval = 50; break; // ACROPHONIC ATTIC FIFTY TALENTS + case 0x01014B: retval = 100; break; // ACROPHONIC ATTIC ONE HUNDRED TALENTS + case 0x01014C: retval = 500; break; // ACROPHONIC ATTIC FIVE HUNDRED TALENTS + case 0x01014D: retval = 1000; break; // ACROPHONIC ATTIC ONE THOUSAND TALENTS + case 0x01014E: retval = 5000; break; // ACROPHONIC ATTIC FIVE THOUSAND TALENTS + case 0x010151: retval = 50; break; // ACROPHONIC ATTIC FIFTY STATERS + case 0x010152: retval = 100; break; // ACROPHONIC ATTIC ONE HUNDRED STATERS + case 0x010153: retval = 500; break; // ACROPHONIC ATTIC FIVE HUNDRED STATERS + case 0x010154: retval = 1000; break; // ACROPHONIC ATTIC ONE THOUSAND STATERS + case 0x010155: retval = 10000; break; // ACROPHONIC ATTIC TEN THOUSAND STATERS + case 0x010156: retval = 50000; break; // ACROPHONIC ATTIC FIFTY THOUSAND STATERS + case 0x010166: retval = 50; break; // ACROPHONIC TROEZENIAN FIFTY + case 0x010167: retval = 50; break; // ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM + case 0x010168: retval = 50; break; // ACROPHONIC HERMIONIAN FIFTY + case 0x010169: retval = 50; break; // ACROPHONIC THESPIAN FIFTY + case 0x01016A: retval = 100; break; // ACROPHONIC THESPIAN ONE HUNDRED + case 0x01016B: retval = 300; break; // ACROPHONIC THESPIAN THREE HUNDRED + case 0x01016C: retval = 500; break; // ACROPHONIC EPIDAUREAN FIVE HUNDRED + case 0x01016D: retval = 500; break; // ACROPHONIC TROEZENIAN FIVE HUNDRED + case 0x01016E: retval = 500; break; // ACROPHONIC THESPIAN FIVE HUNDRED + case 0x01016F: retval = 500; break; // ACROPHONIC CARYSTIAN FIVE HUNDRED + case 0x010170: retval = 500; break; // ACROPHONIC NAXIAN FIVE HUNDRED + case 0x010171: retval = 1000; break; // ACROPHONIC THESPIAN ONE THOUSAND + case 0x010172: retval = 5000; break; // ACROPHONIC THESPIAN FIVE THOUSAND + case 0x010174: retval = 50; break; // ACROPHONIC STRATIAN FIFTY MNAS + case 0x010341: retval = 90; break; // GOTHIC LETTER NINETY + case 0x01034A: retval = 900; break; // GOTHIC LETTER NINE HUNDRED + case 0x0103D5: retval = 100; break; // OLD PERSIAN NUMBER HUNDRED + case 0x010919: retval = 100; break; // PHOENICIAN NUMBER ONE HUNDRED + case 0x010A46: retval = 100; break; // KHAROSHTHI NUMBER ONE HUNDRED + case 0x010A47: retval = 1000; break; // KHAROSHTHI NUMBER ONE THOUSAND + case 0x01D36C: retval = 40; break; // COUNTING ROD TENS DIGIT FOUR + case 0x01D36D: retval = 50; break; // COUNTING ROD TENS DIGIT FIVE + case 0x01D36E: retval = 60; break; // COUNTING ROD TENS DIGIT SIX + case 0x01D36F: retval = 70; break; // COUNTING ROD TENS DIGIT SEVEN + case 0x01D370: retval = 80; break; // COUNTING ROD TENS DIGIT EIGHT + case 0x01D371: retval = 90; break; // COUNTING ROD TENS DIGIT NINE default: retval = -2; break; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/tools/UnicodeData/SpecialCasing.txt --- a/jdk/make/tools/UnicodeData/SpecialCasing.txt Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/tools/UnicodeData/SpecialCasing.txt Wed Jul 05 16:51:11 2017 +0200 @@ -1,12 +1,17 @@ -# SpecialCasing-4.0.0.txt -# Date: 2003-03-14, 20:22:04 GMT [MD] +# SpecialCasing-5.1.0.txt +# Date: 2008-03-03, 21:58:10 GMT [MD] +# +# Unicode Character Database +# Copyright (c) 1991-2008 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see UCD.html # # Special Casing Properties # # This file is a supplement to the UnicodeData file. # It contains additional information about the casing of Unicode characters. # (For compatibility, the UnicodeData.txt file only contains case mappings for -# characters where they are 1-1, and does not have locale-specific mappings.) +# characters where they are 1-1, and independent of context and language. # For more information, see the discussion of Case Mappings in the Unicode Standard. # # All code points not listed in this file that do not have a simple case mappings @@ -18,31 +23,31 @@ # # ; ; ; <upper> ; (<condition_list> ;)? # <comment> # -# <code>, <lower>, <title>, and <upper> provide character values in hex. If there is more than -# one character, they are separated by spaces. Other than as used to separate elements, -# spaces are to be ignored. +# <code>, <lower>, <title>, and <upper> provide character values in hex. If there is more +# than one character, they are separated by spaces. Other than as used to separate +# elements, spaces are to be ignored. # -# The <condition_list> is optional. Where present, it consists of one or more locales or contexts, -# separated by spaces. In these conditions: +# The <condition_list> is optional. Where present, it consists of one or more language IDs +# or contexts, separated by spaces. In these conditions: # - A condition list overrides the normal behavior if all of the listed conditions are true. # - The context is always the context of the characters in the original string, # NOT in the resulting string. # - Case distinctions in the condition list are not significant. # - Conditions preceded by "Not_" represent the negation of the condition. +# The condition list is not represented in the UCD as a formal property. # -# A locale is defined as: -# <locale> := <ISO_639_code> ( "_" <ISO_3166_code> ( "_" <variant> )? )? -# <ISO_3166_code> := 2-letter ISO country code, -# <ISO_639_code> := 2-letter ISO language code +# A language ID is defined by BCP 47, with '-' and '_' treated equivalently. # -# A context is one of the following, as defined in the Unicode Standard: -# Final_Sigma, After_Soft_Dotted, More_Above, Before_Dot, Not_Before_Dot, After_I +# A context for a character C is defined by Section 3.13 Default Case +# Operations, of The Unicode Standard, Version 5.0. +# (This is identical to the context defined by Unicode 4.1.0, +# as specified in http://www.unicode.org/versions/Unicode4.1.0/) # # Parsers of this file must be prepared to deal with future additions to this format: # * Additional contexts # * Additional fields # ================================================================================ - +# @missing 0000..10FFFF; <slc>; <stc>; <suc> # ================================================================================ # Unconditional mappings # ================================================================================ @@ -170,7 +175,7 @@ 1FF3; 1FF3; 1FFC; 03A9 0399; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI 1FFC; 1FF3; 1FFC; 03A9 0399; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI -# Some characters with YPOGEGRAMMENI are also have no corresponding titlecases +# Some characters with YPOGEGRAMMENI also have no corresponding titlecases 1FB2; 1FB2; 1FBA 0345; 1FBA 0399; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI 1FB4; 1FB4; 0386 0345; 0386 0399; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI @@ -184,7 +189,14 @@ 1FF7; 1FF7; 03A9 0342 0345; 03A9 0342 0399; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI # ================================================================================ -# Conditional mappings +# Conditional Mappings +# The remainder of this file provides conditional casing data used to produce +# full case mappings. +# ================================================================================ +# Language-Insensitive Mappings +# These are characters whose full case mappings do not depend on language, but do +# depend on context (which characters come before or after). For more information +# see the header of this file and the Unicode Standard. # ================================================================================ # Special case for final form of sigma @@ -203,7 +215,10 @@ # 03C2; 03C3; 03A3; 03A3; Not_Final_Sigma; # GREEK SMALL LETTER FINAL SIGMA # ================================================================================ -# Locale-sensitive mappings +# Language-Sensitive Mappings +# These are characters whose full case mappings depend on language and perhaps also +# context (which characters come before or after). For more information +# see the header of this file and the Unicode Standard. # ================================================================================ # Lithuanian @@ -254,3 +269,6 @@ # Note: the following case is already in the UnicodeData file. # 0131; 0131; 0049; 0049; tr; # LATIN SMALL LETTER DOTLESS I + +# EOF + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/tools/UnicodeData/UnicodeData.txt --- a/jdk/make/tools/UnicodeData/UnicodeData.txt Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/make/tools/UnicodeData/UnicodeData.txt Wed Jul 05 16:51:11 2017 +0200 @@ -41,11 +41,11 @@ 0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;; 0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;; 002A;ASTERISK;Po;0;ON;;;;;N;;;;; -002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;; +002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;; 002C;COMMA;Po;0;CS;;;;;N;;;;; -002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;; +002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;; 002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;; -002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;; +002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;; 0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;; 0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;; 0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;; @@ -171,7 +171,7 @@ 00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;; 00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;; 00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;; -00AD;SOFT HYPHEN;Cf;0;ON;;;;;N;;;;; +00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;; 00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;; 00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;; 00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;; @@ -382,7 +382,7 @@ 017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E; 017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D 017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053 -0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;; +0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;0243;;0243 0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253; 0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183; 0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182 @@ -408,7 +408,7 @@ 0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268; 0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199; 0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198 -019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;; +019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D 019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;; 019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F; 019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272; @@ -565,8 +565,33 @@ 0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;; 0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;; 0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;; -0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;; -0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;; +0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;; +0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;; +0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;; +023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;2C65; +023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C; +023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B +023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A; +023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;2C66; +023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;;; +0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;;; +0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0242; +0242;LATIN SMALL LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241 +0243;LATIN CAPITAL LETTER B WITH STROKE;Lu;0;L;;;;;N;;;;0180; +0244;LATIN CAPITAL LETTER U BAR;Lu;0;L;;;;;N;;;;0289; +0245;LATIN CAPITAL LETTER TURNED V;Lu;0;L;;;;;N;;;;028C; +0246;LATIN CAPITAL LETTER E WITH STROKE;Lu;0;L;;;;;N;;;;0247; +0247;LATIN SMALL LETTER E WITH STROKE;Ll;0;L;;;;;N;;;0246;;0246 +0248;LATIN CAPITAL LETTER J WITH STROKE;Lu;0;L;;;;;N;;;;0249; +0249;LATIN SMALL LETTER J WITH STROKE;Ll;0;L;;;;;N;;;0248;;0248 +024A;LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL;Lu;0;L;;;;;N;;;;024B; +024B;LATIN SMALL LETTER Q WITH HOOK TAIL;Ll;0;L;;;;;N;;;024A;;024A +024C;LATIN CAPITAL LETTER R WITH STROKE;Lu;0;L;;;;;N;;;;024D; +024D;LATIN SMALL LETTER R WITH STROKE;Ll;0;L;;;;;N;;;024C;;024C +024E;LATIN CAPITAL LETTER Y WITH STROKE;Lu;0;L;;;;;N;;;;024F; +024F;LATIN SMALL LETTER Y WITH STROKE;Ll;0;L;;;;;N;;;024E;;024E +0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;2C6F;;2C6F +0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;2C6D;;2C6D 0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;; 0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181 0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186 @@ -592,13 +617,13 @@ 0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197 0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196 026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;; -026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62 026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;; 026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;; 026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;; 026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C 0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;; -0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;; +0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;2C6E;;2C6E 0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D 0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;; 0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;; @@ -610,7 +635,7 @@ 027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;; 027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;; 027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;; -027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;; +027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;2C64;;2C64 027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;; 027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;; 0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;*;01A6;;01A6 @@ -622,10 +647,10 @@ 0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;; 0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;; 0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE -0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;; +0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;0244;;0244 028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1 028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2 -028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;; +028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;0245;;0245 028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;; 028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;; 028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;; @@ -633,7 +658,7 @@ 0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;; 0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7 0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;; -0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;; +0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; 0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;; 0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;; 0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;; @@ -659,7 +684,7 @@ 02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;; 02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; 02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;; -02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK ;Ll;0;L;;;;;N;;;;; +02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK;Ll;0;L;;;;;N;;;;; 02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;; 02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;; 02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;; @@ -721,7 +746,7 @@ 02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;; 02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; 02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;; -02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;; +02EC;MODIFIER LETTER VOICING;Lm;0;ON;;;;;N;;;;; 02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;; 02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;; 02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;; @@ -829,6 +854,11 @@ 0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;; +0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;; +0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;; +035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; +035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;; +035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;; 035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;; 035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;; 035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;; @@ -848,9 +878,18 @@ 036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;; 036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;; 036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;; -0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;; +0370;GREEK CAPITAL LETTER HETA;Lu;0;L;;;;;N;;;;0371; +0371;GREEK SMALL LETTER HETA;Ll;0;L;;;;;N;;;0370;;0370 +0372;GREEK CAPITAL LETTER ARCHAIC SAMPI;Lu;0;L;;;;;N;;;;0373; +0373;GREEK SMALL LETTER ARCHAIC SAMPI;Ll;0;L;;;;;N;;;0372;;0372 +0374;GREEK NUMERAL SIGN;Lm;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;; 0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;; +0376;GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA;Lu;0;L;;;;;N;;;;0377; +0377;GREEK SMALL LETTER PAMPHYLIAN DIGAMMA;Ll;0;L;;;;;N;;;0376;;0376 037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;; +037B;GREEK SMALL REVERSED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FD;;03FD +037C;GREEK SMALL DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FE;;03FE +037D;GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FF;;03FF 037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;; 0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;; 0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;; @@ -924,6 +963,7 @@ 03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C 03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E 03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F +03CF;GREEK CAPITAL KAI SYMBOL;Lu;0;L;;;;;N;;;;03D7; 03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392 03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398 03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;; @@ -931,7 +971,7 @@ 03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;; 03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6 03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0 -03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;; +03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;03CF;;03CF 03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;*;;03D9; 03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;*;03D8;;03D8 03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB; @@ -968,6 +1008,10 @@ 03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L;<compat> 03A3;;;;N;;;;03F2; 03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB; 03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA +03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;; +03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037B; +03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037C; +03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037D; 0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450; 0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451; 0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452; @@ -1103,6 +1147,7 @@ 0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;; 0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;; 0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;; +0487;COMBINING CYRILLIC POKRYTIE;Mn;230;NSM;;;;;N;;;;; 0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;; 0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; 048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B; @@ -1159,7 +1204,7 @@ 04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC 04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF; 04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE -04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;; +04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;04CF; 04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2; 04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1 04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4; @@ -1174,6 +1219,7 @@ 04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB 04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE; 04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD +04CF;CYRILLIC SMALL LETTER PALOCHKA;Ll;0;L;;;;;N;;;04C0;;04C0 04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1; 04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0 04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3; @@ -1212,8 +1258,16 @@ 04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2 04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5; 04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4 +04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7; +04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6 04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9; 04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8 +04FA;CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK;Lu;0;L;;;;;N;;;;04FB; +04FB;CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK;Ll;0;L;;;;;N;;;04FA;;04FA +04FC;CYRILLIC CAPITAL LETTER HA WITH HOOK;Lu;0;L;;;;;N;;;;04FD; +04FD;CYRILLIC SMALL LETTER HA WITH HOOK;Ll;0;L;;;;;N;;;04FC;;04FC +04FE;CYRILLIC CAPITAL LETTER HA WITH STROKE;Lu;0;L;;;;;N;;;;04FF; +04FF;CYRILLIC SMALL LETTER HA WITH STROKE;Ll;0;L;;;;;N;;;04FE;;04FE 0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501; 0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500 0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503; @@ -1230,6 +1284,26 @@ 050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C 050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F; 050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E +0510;CYRILLIC CAPITAL LETTER REVERSED ZE;Lu;0;L;;;;;N;;;;0511; +0511;CYRILLIC SMALL LETTER REVERSED ZE;Ll;0;L;;;;;N;;;0510;;0510 +0512;CYRILLIC CAPITAL LETTER EL WITH HOOK;Lu;0;L;;;;;N;;;;0513; +0513;CYRILLIC SMALL LETTER EL WITH HOOK;Ll;0;L;;;;;N;;;0512;;0512 +0514;CYRILLIC CAPITAL LETTER LHA;Lu;0;L;;;;;N;;;;0515; +0515;CYRILLIC SMALL LETTER LHA;Ll;0;L;;;;;N;;;0514;;0514 +0516;CYRILLIC CAPITAL LETTER RHA;Lu;0;L;;;;;N;;;;0517; +0517;CYRILLIC SMALL LETTER RHA;Ll;0;L;;;;;N;;;0516;;0516 +0518;CYRILLIC CAPITAL LETTER YAE;Lu;0;L;;;;;N;;;;0519; +0519;CYRILLIC SMALL LETTER YAE;Ll;0;L;;;;;N;;;0518;;0518 +051A;CYRILLIC CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;051B; +051B;CYRILLIC SMALL LETTER QA;Ll;0;L;;;;;N;;;051A;;051A +051C;CYRILLIC CAPITAL LETTER WE;Lu;0;L;;;;;N;;;;051D; +051D;CYRILLIC SMALL LETTER WE;Ll;0;L;;;;;N;;;051C;;051C +051E;CYRILLIC CAPITAL LETTER ALEUT KA;Lu;0;L;;;;;N;;;;051F; +051F;CYRILLIC SMALL LETTER ALEUT KA;Ll;0;L;;;;;N;;;051E;;051E +0520;CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0521; +0521;CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0520;;0520 +0522;CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;0523; +0523;CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;0522;;0522 0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561; 0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562; 0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563; @@ -1333,6 +1407,7 @@ 059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;; 05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;; 05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;; +05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;; 05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;; 05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;; 05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;; @@ -1356,16 +1431,20 @@ 05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;; 05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;; 05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;; +05BA;HEBREW POINT HOLAM HASER FOR VAV;Mn;19;NSM;;;;;N;;;;; 05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;; 05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;; 05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;; -05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;; +05BE;HEBREW PUNCTUATION MAQAF;Pd;0;R;;;;;N;;;;; 05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;; 05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;; 05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;; 05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;; 05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;; 05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;; +05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;; +05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;; +05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;; 05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;; 05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;; 05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;; @@ -1398,10 +1477,16 @@ 05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;; 05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;; 05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;; -0600;ARABIC NUMBER SIGN;Cf;0;AL;;;;;N;;;;; -0601;ARABIC SIGN SANAH;Cf;0;AL;;;;;N;;;;; -0602;ARABIC FOOTNOTE MARKER;Cf;0;AL;;;;;N;;;;; -0603;ARABIC SIGN SAFHA;Cf;0;AL;;;;;N;;;;; +0600;ARABIC NUMBER SIGN;Cf;0;AN;;;;;N;;;;; +0601;ARABIC SIGN SANAH;Cf;0;AN;;;;;N;;;;; +0602;ARABIC FOOTNOTE MARKER;Cf;0;AN;;;;;N;;;;; +0603;ARABIC SIGN SAFHA;Cf;0;AN;;;;;N;;;;; +0606;ARABIC-INDIC CUBE ROOT;Sm;0;ON;;;;;N;;;;; +0607;ARABIC-INDIC FOURTH ROOT;Sm;0;ON;;;;;N;;;;; +0608;ARABIC RAY;Sm;0;AL;;;;;N;;;;; +0609;ARABIC-INDIC PER MILLE SIGN;Po;0;ET;;;;;N;;;;; +060A;ARABIC-INDIC PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; +060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;; 060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;; 060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;; 060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;; @@ -1411,8 +1496,14 @@ 0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;; 0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;; 0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;; -0615;ARABIC SMALL HIGH TAH ;Mn;230;NSM;;;;;N;;;;; +0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;; +0616;ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH;Mn;230;NSM;;;;;N;;;;; +0617;ARABIC SMALL HIGH ZAIN;Mn;230;NSM;;;;;N;;;;; +0618;ARABIC SMALL FATHA;Mn;30;NSM;;;;;N;;;;; +0619;ARABIC SMALL DAMMA;Mn;31;NSM;;;;;N;;;;; +061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;; 061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;; +061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;; 061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;; 0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;; 0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;; @@ -1440,6 +1531,11 @@ 0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;; 0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;; 063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;; +063B;ARABIC LETTER KEHEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +063C;ARABIC LETTER KEHEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; +063D;ARABIC LETTER FARSI YEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;; +063E;ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +063F;ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;; 0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;; 0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;; @@ -1465,6 +1561,12 @@ 0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;; 0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;; 0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;; +0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;; +065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; +065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;; +065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; +065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;; +065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;; 0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;; 0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;; 0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;; @@ -1590,7 +1692,7 @@ 06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;; 06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;; 06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;; -06DD;ARABIC END OF AYAH;Cf;0;AL;;;;;N;;;;; +06DD;ARABIC END OF AYAH;Cf;0;AN;;;;;N;;;;; 06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;; 06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;; 06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;; @@ -1702,6 +1804,54 @@ 074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;; 074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;; 074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;; +0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;; +0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; +0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;; +0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;; +075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; +075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;; +075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;; +075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; +0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; +0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;; +0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;; +0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;; +076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;; +076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; +076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; +076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;; +076E;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW;Lo;0;AL;;;;;N;;;;; +076F;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; +0770;ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; +0771;ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS;Lo;0;AL;;;;;N;;;;; +0772;ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;; +0773;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; +0774;ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; +0775;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; +0776;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; +0777;ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;; +0778;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; +0779;ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; +077A;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE;Lo;0;AL;;;;;N;;;;; +077B;ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE;Lo;0;AL;;;;;N;;;;; +077C;ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW;Lo;0;AL;;;;;N;;;;; +077D;ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE;Lo;0;AL;;;;;N;;;;; +077E;ARABIC LETTER SEEN WITH INVERTED V;Lo;0;AL;;;;;N;;;;; +077F;ARABIC LETTER KAF WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;; 0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;; 0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;; @@ -1752,6 +1902,65 @@ 07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;; 07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;; 07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;; +07C0;NKO DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;; +07C1;NKO DIGIT ONE;Nd;0;R;;1;1;1;N;;;;; +07C2;NKO DIGIT TWO;Nd;0;R;;2;2;2;N;;;;; +07C3;NKO DIGIT THREE;Nd;0;R;;3;3;3;N;;;;; +07C4;NKO DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;; +07C5;NKO DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;; +07C6;NKO DIGIT SIX;Nd;0;R;;6;6;6;N;;;;; +07C7;NKO DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;; +07C8;NKO DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;; +07C9;NKO DIGIT NINE;Nd;0;R;;9;9;9;N;;;;; +07CA;NKO LETTER A;Lo;0;R;;;;;N;;;;; +07CB;NKO LETTER EE;Lo;0;R;;;;;N;;;;; +07CC;NKO LETTER I;Lo;0;R;;;;;N;;;;; +07CD;NKO LETTER E;Lo;0;R;;;;;N;;;;; +07CE;NKO LETTER U;Lo;0;R;;;;;N;;;;; +07CF;NKO LETTER OO;Lo;0;R;;;;;N;;;;; +07D0;NKO LETTER O;Lo;0;R;;;;;N;;;;; +07D1;NKO LETTER DAGBASINNA;Lo;0;R;;;;;N;;;;; +07D2;NKO LETTER N;Lo;0;R;;;;;N;;;;; +07D3;NKO LETTER BA;Lo;0;R;;;;;N;;;;; +07D4;NKO LETTER PA;Lo;0;R;;;;;N;;;;; +07D5;NKO LETTER TA;Lo;0;R;;;;;N;;;;; +07D6;NKO LETTER JA;Lo;0;R;;;;;N;;;;; +07D7;NKO LETTER CHA;Lo;0;R;;;;;N;;;;; +07D8;NKO LETTER DA;Lo;0;R;;;;;N;;;;; +07D9;NKO LETTER RA;Lo;0;R;;;;;N;;;;; +07DA;NKO LETTER RRA;Lo;0;R;;;;;N;;;;; +07DB;NKO LETTER SA;Lo;0;R;;;;;N;;;;; +07DC;NKO LETTER GBA;Lo;0;R;;;;;N;;;;; +07DD;NKO LETTER FA;Lo;0;R;;;;;N;;;;; +07DE;NKO LETTER KA;Lo;0;R;;;;;N;;;;; +07DF;NKO LETTER LA;Lo;0;R;;;;;N;;;;; +07E0;NKO LETTER NA WOLOSO;Lo;0;R;;;;;N;;;;; +07E1;NKO LETTER MA;Lo;0;R;;;;;N;;;;; +07E2;NKO LETTER NYA;Lo;0;R;;;;;N;;;;; +07E3;NKO LETTER NA;Lo;0;R;;;;;N;;;;; +07E4;NKO LETTER HA;Lo;0;R;;;;;N;;;;; +07E5;NKO LETTER WA;Lo;0;R;;;;;N;;;;; +07E6;NKO LETTER YA;Lo;0;R;;;;;N;;;;; +07E7;NKO LETTER NYA WOLOSO;Lo;0;R;;;;;N;;;;; +07E8;NKO LETTER JONA JA;Lo;0;R;;;;;N;;;;; +07E9;NKO LETTER JONA CHA;Lo;0;R;;;;;N;;;;; +07EA;NKO LETTER JONA RA;Lo;0;R;;;;;N;;;;; +07EB;NKO COMBINING SHORT HIGH TONE;Mn;230;NSM;;;;;N;;;;; +07EC;NKO COMBINING SHORT LOW TONE;Mn;230;NSM;;;;;N;;;;; +07ED;NKO COMBINING SHORT RISING TONE;Mn;230;NSM;;;;;N;;;;; +07EE;NKO COMBINING LONG DESCENDING TONE;Mn;230;NSM;;;;;N;;;;; +07EF;NKO COMBINING LONG HIGH TONE;Mn;230;NSM;;;;;N;;;;; +07F0;NKO COMBINING LONG LOW TONE;Mn;230;NSM;;;;;N;;;;; +07F1;NKO COMBINING LONG RISING TONE;Mn;230;NSM;;;;;N;;;;; +07F2;NKO COMBINING NASALIZATION MARK;Mn;220;NSM;;;;;N;;;;; +07F3;NKO COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;; +07F4;NKO HIGH TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; +07F5;NKO LOW TONE APOSTROPHE;Lm;0;R;;;;;N;;;;; +07F6;NKO SYMBOL OO DENNEN;So;0;ON;;;;;N;;;;; +07F7;NKO SYMBOL GBAKURUNEN;Po;0;ON;;;;;N;;;;; +07F8;NKO COMMA;Po;0;ON;;;;;N;;;;; +07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;; 0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;; @@ -1857,6 +2066,13 @@ 096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; +0971;DEVANAGARI SIGN HIGH SPACING DOT;Lm;0;L;;;;;N;;;;; +0972;DEVANAGARI LETTER CANDRA A;Lo;0;L;;;;;N;;;;; +097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;; +097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;; +097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;; +097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;; +097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;; 0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;; @@ -1918,6 +2134,7 @@ 09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;; 09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;; 09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;; 09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;; 09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;; @@ -2004,6 +2221,7 @@ 0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;; 0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; 0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0A51;GURMUKHI SIGN UDAAT;Mn;0;NSM;;;;;N;;;;; 0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;; 0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;; 0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;; @@ -2024,6 +2242,7 @@ 0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;; 0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;; 0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;; +0A75;GURMUKHI SIGN YAKASH;Mn;0;NSM;;;;;N;;;;; 0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;; @@ -2164,6 +2383,7 @@ 0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +0B44;ORIYA VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;; 0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;; @@ -2176,6 +2396,8 @@ 0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;; 0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0B62;ORIYA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0B63;ORIYA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -2221,6 +2443,7 @@ 0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;; 0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;; 0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;; +0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;; 0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;; 0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;; 0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;; @@ -2236,7 +2459,9 @@ 0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;; 0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;; 0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +0BD0;TAMIL OM;Lo;0;L;;;;;N;;;;; 0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;; +0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; 0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; @@ -2309,6 +2534,7 @@ 0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;; 0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;; 0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;; +0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; @@ -2325,8 +2551,12 @@ 0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;; 0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;; +0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;; +0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;; 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0C63;TELUGU VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -2337,6 +2567,14 @@ 0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0C78;TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR;No;0;ON;;;;0;N;;;;; +0C79;TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR;No;0;ON;;;;1;N;;;;; +0C7A;TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR;No;0;ON;;;;2;N;;;;; +0C7B;TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR;No;0;ON;;;;3;N;;;;; +0C7C;TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR;No;0;ON;;;;1;N;;;;; +0C7D;TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR;No;0;ON;;;;2;N;;;;; +0C7E;TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR;No;0;ON;;;;3;N;;;;; +0C7F;TELUGU SIGN TUUMU;So;0;L;;;;;N;;;;; 0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;; @@ -2409,6 +2647,8 @@ 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -2419,6 +2659,8 @@ 0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0CF1;KANNADA SIGN JIHVAMULIYA;So;0;ON;;;;;N;;;;; +0CF2;KANNADA SIGN UPADHMANIYA;So;0;ON;;;;;N;;;;; 0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; 0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;; 0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;; @@ -2471,12 +2713,14 @@ 0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;; 0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;; 0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;; +0D3D;MALAYALAM SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;; 0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;; 0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +0D44;MALAYALAM VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;; 0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; 0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; @@ -2487,6 +2731,8 @@ 0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;; 0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +0D62;MALAYALAM VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; +0D63;MALAYALAM VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; 0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -2497,6 +2743,19 @@ 0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +0D70;MALAYALAM NUMBER TEN;No;0;L;;;;10;N;;;;; +0D71;MALAYALAM NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;; +0D72;MALAYALAM NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;; +0D73;MALAYALAM FRACTION ONE QUARTER;No;0;L;;;;1/4;N;;;;; +0D74;MALAYALAM FRACTION ONE HALF;No;0;L;;;;1/2;N;;;;; +0D75;MALAYALAM FRACTION THREE QUARTERS;No;0;L;;;;3/4;N;;;;; +0D79;MALAYALAM DATE MARK;So;0;L;;;;;N;;;;; +0D7A;MALAYALAM LETTER CHILLU NN;Lo;0;L;;;;;N;;;;; +0D7B;MALAYALAM LETTER CHILLU N;Lo;0;L;;;;;N;;;;; +0D7C;MALAYALAM LETTER CHILLU RR;Lo;0;L;;;;;N;;;;; +0D7D;MALAYALAM LETTER CHILLU L;Lo;0;L;;;;;N;;;;; +0D7E;MALAYALAM LETTER CHILLU LL;Lo;0;L;;;;;N;;;;; +0D7F;MALAYALAM LETTER CHILLU K;Lo;0;L;;;;;N;;;;; 0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;; 0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;; 0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;; @@ -2787,10 +3046,10 @@ 0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;; 0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;; 0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;; -0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;; -0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;; -0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;TIBETAN LEFT BRACE;ang kang yun;;; -0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;TIBETAN RIGHT BRACE;ang kang ye;;; +0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;gug ta yun;;; +0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;gug ta ye;;; +0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;ang kang yun;;; +0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;ang kang ye;;; 0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;; 0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;; 0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;; @@ -2835,6 +3094,8 @@ 0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;; 0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;; 0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;; +0F6B;TIBETAN LETTER KKA;Lo;0;L;;;;;N;;;;; +0F6C;TIBETAN LETTER RRA;Lo;0;L;;;;;N;;;;; 0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;; 0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;; 0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;; @@ -2921,7 +3182,13 @@ 0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;; 0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;; 0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;; +0FCE;TIBETAN SIGN RDEL NAG RDEL DKAR;So;0;L;;;;;N;;dena deka;;; 0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;dena sum;;; +0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;ka shog gi go gyen;;; +0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;nyam yig gi go gyen;;; +0FD2;TIBETAN MARK NYIS TSHEG;Po;0;L;;;;;N;;nyi tsek;;; +0FD3;TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA;Po;0;L;;;;;N;;da nying yik go dun ma;;; +0FD4;TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA;Po;0;L;;;;;N;;da nying yik go kab ma;;; 1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;; 1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;; 1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;; @@ -2956,13 +3223,16 @@ 101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;; 1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;; 1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;; +1022;MYANMAR LETTER SHAN A;Lo;0;L;;;;;N;;;;; 1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;; 1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;; 1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;; 1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;; 1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;; +1028;MYANMAR LETTER MON E;Lo;0;L;;;;;N;;;;; 1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;; 102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;; +102B;MYANMAR VOWEL SIGN TALL AA;Mc;0;L;;;;;N;;;;; 102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; 102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; @@ -2970,10 +3240,19 @@ 1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;; 1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;; 1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +1033;MYANMAR VOWEL SIGN MON II;Mn;0;NSM;;;;;N;;;;; +1034;MYANMAR VOWEL SIGN MON O;Mn;0;NSM;;;;;N;;;;; +1035;MYANMAR VOWEL SIGN E ABOVE;Mn;0;NSM;;;;;N;;;;; 1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; 1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;; 1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;; 1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +103A;MYANMAR SIGN ASAT;Mn;9;NSM;;;;;N;;;;; +103B;MYANMAR CONSONANT SIGN MEDIAL YA;Mc;0;L;;;;;N;;;;; +103C;MYANMAR CONSONANT SIGN MEDIAL RA;Mc;0;L;;;;;N;;;;; +103D;MYANMAR CONSONANT SIGN MEDIAL WA;Mn;0;NSM;;;;;N;;;;; +103E;MYANMAR CONSONANT SIGN MEDIAL HA;Mn;0;NSM;;;;;N;;;;; +103F;MYANMAR LETTER GREAT SA;Lo;0;L;;;;;N;;;;; 1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -3000,44 +3279,110 @@ 1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; 1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; 1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;; -10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;; -10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;; -10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;; -10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;; -10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;; -10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;; -10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;; -10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;; -10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;; -10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;; -10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;; -10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;; -10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;; -10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;; -10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;; -10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;; -10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;; -10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;; -10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;; -10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;; -10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;; -10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;; -10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;; -10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;; -10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;; -10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;; -10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;; -10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;; -10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;; -10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;; -10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;; -10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;; -10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;; -10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;; -10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;; -10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;; -10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;; -10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;; +105A;MYANMAR LETTER MON NGA;Lo;0;L;;;;;N;;;;; +105B;MYANMAR LETTER MON JHA;Lo;0;L;;;;;N;;;;; +105C;MYANMAR LETTER MON BBA;Lo;0;L;;;;;N;;;;; +105D;MYANMAR LETTER MON BBE;Lo;0;L;;;;;N;;;;; +105E;MYANMAR CONSONANT SIGN MON MEDIAL NA;Mn;0;NSM;;;;;N;;;;; +105F;MYANMAR CONSONANT SIGN MON MEDIAL MA;Mn;0;NSM;;;;;N;;;;; +1060;MYANMAR CONSONANT SIGN MON MEDIAL LA;Mn;0;NSM;;;;;N;;;;; +1061;MYANMAR LETTER SGAW KAREN SHA;Lo;0;L;;;;;N;;;;; +1062;MYANMAR VOWEL SIGN SGAW KAREN EU;Mc;0;L;;;;;N;;;;; +1063;MYANMAR TONE MARK SGAW KAREN HATHI;Mc;0;L;;;;;N;;;;; +1064;MYANMAR TONE MARK SGAW KAREN KE PHO;Mc;0;L;;;;;N;;;;; +1065;MYANMAR LETTER WESTERN PWO KAREN THA;Lo;0;L;;;;;N;;;;; +1066;MYANMAR LETTER WESTERN PWO KAREN PWA;Lo;0;L;;;;;N;;;;; +1067;MYANMAR VOWEL SIGN WESTERN PWO KAREN EU;Mc;0;L;;;;;N;;;;; +1068;MYANMAR VOWEL SIGN WESTERN PWO KAREN UE;Mc;0;L;;;;;N;;;;; +1069;MYANMAR SIGN WESTERN PWO KAREN TONE-1;Mc;0;L;;;;;N;;;;; +106A;MYANMAR SIGN WESTERN PWO KAREN TONE-2;Mc;0;L;;;;;N;;;;; +106B;MYANMAR SIGN WESTERN PWO KAREN TONE-3;Mc;0;L;;;;;N;;;;; +106C;MYANMAR SIGN WESTERN PWO KAREN TONE-4;Mc;0;L;;;;;N;;;;; +106D;MYANMAR SIGN WESTERN PWO KAREN TONE-5;Mc;0;L;;;;;N;;;;; +106E;MYANMAR LETTER EASTERN PWO KAREN NNA;Lo;0;L;;;;;N;;;;; +106F;MYANMAR LETTER EASTERN PWO KAREN YWA;Lo;0;L;;;;;N;;;;; +1070;MYANMAR LETTER EASTERN PWO KAREN GHWA;Lo;0;L;;;;;N;;;;; +1071;MYANMAR VOWEL SIGN GEBA KAREN I;Mn;0;NSM;;;;;N;;;;; +1072;MYANMAR VOWEL SIGN KAYAH OE;Mn;0;NSM;;;;;N;;;;; +1073;MYANMAR VOWEL SIGN KAYAH U;Mn;0;NSM;;;;;N;;;;; +1074;MYANMAR VOWEL SIGN KAYAH EE;Mn;0;NSM;;;;;N;;;;; +1075;MYANMAR LETTER SHAN KA;Lo;0;L;;;;;N;;;;; +1076;MYANMAR LETTER SHAN KHA;Lo;0;L;;;;;N;;;;; +1077;MYANMAR LETTER SHAN GA;Lo;0;L;;;;;N;;;;; +1078;MYANMAR LETTER SHAN CA;Lo;0;L;;;;;N;;;;; +1079;MYANMAR LETTER SHAN ZA;Lo;0;L;;;;;N;;;;; +107A;MYANMAR LETTER SHAN NYA;Lo;0;L;;;;;N;;;;; +107B;MYANMAR LETTER SHAN DA;Lo;0;L;;;;;N;;;;; +107C;MYANMAR LETTER SHAN NA;Lo;0;L;;;;;N;;;;; +107D;MYANMAR LETTER SHAN PHA;Lo;0;L;;;;;N;;;;; +107E;MYANMAR LETTER SHAN FA;Lo;0;L;;;;;N;;;;; +107F;MYANMAR LETTER SHAN BA;Lo;0;L;;;;;N;;;;; +1080;MYANMAR LETTER SHAN THA;Lo;0;L;;;;;N;;;;; +1081;MYANMAR LETTER SHAN HA;Lo;0;L;;;;;N;;;;; +1082;MYANMAR CONSONANT SIGN SHAN MEDIAL WA;Mn;0;NSM;;;;;N;;;;; +1083;MYANMAR VOWEL SIGN SHAN AA;Mc;0;L;;;;;N;;;;; +1084;MYANMAR VOWEL SIGN SHAN E;Mc;0;L;;;;;N;;;;; +1085;MYANMAR VOWEL SIGN SHAN E ABOVE;Mn;0;NSM;;;;;N;;;;; +1086;MYANMAR VOWEL SIGN SHAN FINAL Y;Mn;0;NSM;;;;;N;;;;; +1087;MYANMAR SIGN SHAN TONE-2;Mc;0;L;;;;;N;;;;; +1088;MYANMAR SIGN SHAN TONE-3;Mc;0;L;;;;;N;;;;; +1089;MYANMAR SIGN SHAN TONE-5;Mc;0;L;;;;;N;;;;; +108A;MYANMAR SIGN SHAN TONE-6;Mc;0;L;;;;;N;;;;; +108B;MYANMAR SIGN SHAN COUNCIL TONE-2;Mc;0;L;;;;;N;;;;; +108C;MYANMAR SIGN SHAN COUNCIL TONE-3;Mc;0;L;;;;;N;;;;; +108D;MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE;Mn;220;NSM;;;;;N;;;;; +108E;MYANMAR LETTER RUMAI PALAUNG FA;Lo;0;L;;;;;N;;;;; +108F;MYANMAR SIGN RUMAI PALAUNG TONE-5;Mc;0;L;;;;;N;;;;; +1090;MYANMAR SHAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1091;MYANMAR SHAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1092;MYANMAR SHAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1093;MYANMAR SHAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1094;MYANMAR SHAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1095;MYANMAR SHAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1096;MYANMAR SHAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1097;MYANMAR SHAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1098;MYANMAR SHAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1099;MYANMAR SHAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +109E;MYANMAR SYMBOL SHAN ONE;So;0;L;;;;;N;;;;; +109F;MYANMAR SYMBOL SHAN EXCLAMATION;So;0;L;;;;;N;;;;; +10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;2D00; +10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;2D01; +10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;2D02; +10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;2D03; +10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;2D04; +10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;2D05; +10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;2D06; +10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;2D07; +10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;2D08; +10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;2D09; +10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;2D0A; +10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;2D0B; +10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;2D0C; +10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;2D0D; +10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;2D0E; +10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;2D0F; +10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;2D10; +10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;2D11; +10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;2D12; +10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;2D13; +10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;2D14; +10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;2D15; +10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;2D16; +10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;2D17; +10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;2D18; +10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;2D19; +10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;2D1A; +10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;2D1B; +10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;2D1C; +10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;2D1D; +10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;2D1E; +10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;2D1F; +10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;2D20; +10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;2D21; +10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;2D22; +10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;2D23; +10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;2D24; +10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;2D25; 10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;; 10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;; 10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;; @@ -3079,7 +3424,10 @@ 10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;; 10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;; 10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;; +10F9;GEORGIAN LETTER TURNED GAN;Lo;0;L;;;;;N;;;;; +10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;; 10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; +10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L;<super> 10DC;;;;N;;;;; 1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;; 1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;; 1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;; @@ -3327,6 +3675,7 @@ 1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;; 1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;; 1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;; +1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;; 1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;; 1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;; 120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;; @@ -3390,6 +3739,7 @@ 1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;; 1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;; 1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;; +1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;; 1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;; 124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;; 124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;; @@ -3446,6 +3796,7 @@ 1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;; 1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;; 1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;; +1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;; 1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;; 128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;; 128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;; @@ -3482,6 +3833,7 @@ 12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;; 12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;; 12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;; +12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;; 12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;; 12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;; 12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;; @@ -3506,6 +3858,7 @@ 12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;; 12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;; 12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;; +12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;; 12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;; 12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;; 12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;; @@ -3536,6 +3889,7 @@ 12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;; 12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;; 12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;; +12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;; 12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;; 12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;; 12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;; @@ -3567,6 +3921,7 @@ 130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;; 130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;; 130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;; +130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;; 1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;; 1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;; 1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;; @@ -3579,6 +3934,7 @@ 131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;; 131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;; 131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;; +131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;; 1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;; 1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;; 1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;; @@ -3618,6 +3974,7 @@ 1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;; 1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;; 1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;; +1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;; 1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;; 1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;; 134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;; @@ -3637,6 +3994,8 @@ 1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;; 1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;; 135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;; +135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;; +1360;ETHIOPIC SECTION MARK;So;0;L;;;;;N;;;;; 1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;; 1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;; 1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;; @@ -3645,15 +4004,15 @@ 1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;; 1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;; 1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;; -1369;ETHIOPIC DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; -136A;ETHIOPIC DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; -136B;ETHIOPIC DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; -136C;ETHIOPIC DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; -136D;ETHIOPIC DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; -136E;ETHIOPIC DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; -136F;ETHIOPIC DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; -1370;ETHIOPIC DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; -1371;ETHIOPIC DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;; +136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;; +136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;; +136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;; +136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;; +136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;; +136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;; +1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;; +1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;; 1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;; 1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;; 1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;; @@ -3665,6 +4024,32 @@ 137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;; 137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;; 137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;; +1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;; +1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;; +1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;; +1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;; +1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;; +1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;; +1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;; +1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;; +1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;; +1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;; +138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;; +138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;; +138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;; +138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;; +138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;; +138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;; +1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;; +1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;; +1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;; +1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;; +1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;; +1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;; +1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;; +1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;; +1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;; +1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;; 13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;; 13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;; 13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;; @@ -4407,8 +4792,8 @@ 1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;; 1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;; 169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;; -169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;N;;;;; -169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;N;;;;; +169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;Y;;;;; +169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;Y;;;;; 16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;; 16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;; 16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;; @@ -4840,6 +5225,7 @@ 18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;; 18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;; 18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;; +18AA;MONGOLIAN LETTER MANCHU ALI GALI LHA;Lo;0;L;;;;;N;;;;; 1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;; 1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;; 1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;; @@ -4878,9 +5264,9 @@ 1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; 1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; 1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; -1929;LIMBU SUBJOINED LETTER YA;Mc;0;NSM;;;;;N;;;;; -192A;LIMBU SUBJOINED LETTER RA;Mc;0;NSM;;;;;N;;;;; -192B;LIMBU SUBJOINED LETTER WA;Mc;0;NSM;;;;;N;;;;; +1929;LIMBU SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;; +192A;LIMBU SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;; +192B;LIMBU SUBJOINED LETTER WA;Mc;0;L;;;;;N;;;;; 1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;; 1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;; 1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;; @@ -4941,6 +5327,86 @@ 1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;; 1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;; 1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;; +1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;; +1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;; +1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;; +1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;; +1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;; +1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;; +1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;; +1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;; +1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;; +1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;; +198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;; +198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;; +198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;; +198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;; +198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;; +198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;; +1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;; +1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;; +1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;; +1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;; +1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;; +1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;; +1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;; +1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;; +1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;; +1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;; +199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;; +199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;; +199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;; +199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;; +199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;; +199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;; +19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;; +19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;; +19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;; +19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;; +19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;; +19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;; +19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;; +19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;; +19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;; +19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;; +19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Mc;0;L;;;;;N;;;;; +19B1;NEW TAI LUE VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +19B2;NEW TAI LUE VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +19B3;NEW TAI LUE VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +19B4;NEW TAI LUE VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +19B5;NEW TAI LUE VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +19B6;NEW TAI LUE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; +19B7;NEW TAI LUE VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +19B8;NEW TAI LUE VOWEL SIGN OA;Mc;0;L;;;;;N;;;;; +19B9;NEW TAI LUE VOWEL SIGN UE;Mc;0;L;;;;;N;;;;; +19BA;NEW TAI LUE VOWEL SIGN AY;Mc;0;L;;;;;N;;;;; +19BB;NEW TAI LUE VOWEL SIGN AAY;Mc;0;L;;;;;N;;;;; +19BC;NEW TAI LUE VOWEL SIGN UY;Mc;0;L;;;;;N;;;;; +19BD;NEW TAI LUE VOWEL SIGN OY;Mc;0;L;;;;;N;;;;; +19BE;NEW TAI LUE VOWEL SIGN OAY;Mc;0;L;;;;;N;;;;; +19BF;NEW TAI LUE VOWEL SIGN UEY;Mc;0;L;;;;;N;;;;; +19C0;NEW TAI LUE VOWEL SIGN IY;Mc;0;L;;;;;N;;;;; +19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;; +19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;; +19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;; +19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;; +19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;; +19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;; +19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;; +19C8;NEW TAI LUE TONE MARK-1;Mc;0;L;;;;;N;;;;; +19C9;NEW TAI LUE TONE MARK-2;Mc;0;L;;;;;N;;;;; +19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +19DE;NEW TAI LUE SIGN LAE;Po;0;ON;;;;;N;;;;; +19DF;NEW TAI LUE SIGN LAEV;Po;0;ON;;;;;N;;;;; 19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;; 19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;; 19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;; @@ -4973,6 +5439,334 @@ 19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;; 19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;; 19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;; +1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;; +1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;; +1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;; +1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;; +1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;; +1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;; +1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;; +1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;; +1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;; +1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;; +1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;; +1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;; +1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;; +1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;; +1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;; +1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;; +1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;; +1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;; +1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;; +1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;; +1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;; +1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;; +1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;; +1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;; +1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;; +1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +1A1B;BUGINESE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;; +1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;; +1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;; +1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;ardhacandra;;; +1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;candrabindu;;; +1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;anusvara;;; +1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;repha;;; +1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;visarga;;; +1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;a;;; +1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;aa;;; +1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;i;;; +1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;ii;;; +1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;u;;; +1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;uu;;; +1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;vocalic r;;; +1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;vocalic rr;;; +1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;vocalic l;;; +1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;vocalic ll;;; +1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;e;;; +1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;ai;;; +1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;o;;; +1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;au;;; +1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;; +1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;kha;;; +1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;; +1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;gha;;; +1B17;BALINESE LETTER NGA;Lo;0;L;;;;;N;;;;; +1B18;BALINESE LETTER CA;Lo;0;L;;;;;N;;;;; +1B19;BALINESE LETTER CA LACA;Lo;0;L;;;;;N;;cha;;; +1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;; +1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;jha;;; +1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;; +1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;tta;;; +1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ttha;;; +1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;dda;;; +1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ddha;;; +1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;nna;;; +1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;; +1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;tha;;; +1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;; +1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;dha;;; +1B26;BALINESE LETTER NA;Lo;0;L;;;;;N;;;;; +1B27;BALINESE LETTER PA;Lo;0;L;;;;;N;;;;; +1B28;BALINESE LETTER PA KAPAL;Lo;0;L;;;;;N;;pha;;; +1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;; +1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;bha;;; +1B2B;BALINESE LETTER MA;Lo;0;L;;;;;N;;;;; +1B2C;BALINESE LETTER YA;Lo;0;L;;;;;N;;;;; +1B2D;BALINESE LETTER RA;Lo;0;L;;;;;N;;;;; +1B2E;BALINESE LETTER LA;Lo;0;L;;;;;N;;;;; +1B2F;BALINESE LETTER WA;Lo;0;L;;;;;N;;;;; +1B30;BALINESE LETTER SA SAGA;Lo;0;L;;;;;N;;sha;;; +1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;ssa;;; +1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;; +1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;; +1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;nukta;;; +1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;aa;;; +1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;i;;; +1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;ii;;; +1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;u;;; +1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;uu;;; +1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;vocalic r;;; +1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;vocalic rr;;; +1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;vocalic l;;; +1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;vocalic ll;;; +1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;e;;; +1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;ai;;; +1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;o;;; +1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;au;;; +1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;ae;;; +1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;oe;;; +1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;virama;;; +1B45;BALINESE LETTER KAF SASAK;Lo;0;L;;;;;N;;;;; +1B46;BALINESE LETTER KHOT SASAK;Lo;0;L;;;;;N;;;;; +1B47;BALINESE LETTER TZIR SASAK;Lo;0;L;;;;;N;;;;; +1B48;BALINESE LETTER EF SASAK;Lo;0;L;;;;;N;;;;; +1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;; +1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;; +1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;; +1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1B53;BALINESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1B54;BALINESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1B55;BALINESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1B56;BALINESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1B57;BALINESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1B58;BALINESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1B59;BALINESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1B5A;BALINESE PANTI;Po;0;L;;;;;N;;section;;; +1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;honorific section;;; +1B5C;BALINESE WINDU;Po;0;L;;;;;N;;punctuation ring;;; +1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;colon;;; +1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;danda;;; +1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;double danda;;; +1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;line-breaking hyphen;;; +1B61;BALINESE MUSICAL SYMBOL DONG;So;0;L;;;;;N;;;;; +1B62;BALINESE MUSICAL SYMBOL DENG;So;0;L;;;;;N;;;;; +1B63;BALINESE MUSICAL SYMBOL DUNG;So;0;L;;;;;N;;;;; +1B64;BALINESE MUSICAL SYMBOL DANG;So;0;L;;;;;N;;;;; +1B65;BALINESE MUSICAL SYMBOL DANG SURANG;So;0;L;;;;;N;;;;; +1B66;BALINESE MUSICAL SYMBOL DING;So;0;L;;;;;N;;;;; +1B67;BALINESE MUSICAL SYMBOL DAENG;So;0;L;;;;;N;;;;; +1B68;BALINESE MUSICAL SYMBOL DEUNG;So;0;L;;;;;N;;;;; +1B69;BALINESE MUSICAL SYMBOL DAING;So;0;L;;;;;N;;;;; +1B6A;BALINESE MUSICAL SYMBOL DANG GEDE;So;0;L;;;;;N;;;;; +1B6B;BALINESE MUSICAL SYMBOL COMBINING TEGEH;Mn;230;NSM;;;;;N;;;;; +1B6C;BALINESE MUSICAL SYMBOL COMBINING ENDEP;Mn;220;NSM;;;;;N;;;;; +1B6D;BALINESE MUSICAL SYMBOL COMBINING KEMPUL;Mn;230;NSM;;;;;N;;;;; +1B6E;BALINESE MUSICAL SYMBOL COMBINING KEMPLI;Mn;230;NSM;;;;;N;;;;; +1B6F;BALINESE MUSICAL SYMBOL COMBINING JEGOGAN;Mn;230;NSM;;;;;N;;;;; +1B70;BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; +1B71;BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;; +1B72;BALINESE MUSICAL SYMBOL COMBINING BENDE;Mn;230;NSM;;;;;N;;;;; +1B73;BALINESE MUSICAL SYMBOL COMBINING GONG;Mn;230;NSM;;;;;N;;;;; +1B74;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG;So;0;L;;;;;N;;;;; +1B75;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG;So;0;L;;;;;N;;;;; +1B76;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK;So;0;L;;;;;N;;;;; +1B77;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK;So;0;L;;;;;N;;;;; +1B78;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG;So;0;L;;;;;N;;;;; +1B79;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG;So;0;L;;;;;N;;;;; +1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;; +1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;; +1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;; +1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;; +1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;; +1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;; +1B83;SUNDANESE LETTER A;Lo;0;L;;;;;N;;;;; +1B84;SUNDANESE LETTER I;Lo;0;L;;;;;N;;;;; +1B85;SUNDANESE LETTER U;Lo;0;L;;;;;N;;;;; +1B86;SUNDANESE LETTER AE;Lo;0;L;;;;;N;;;;; +1B87;SUNDANESE LETTER O;Lo;0;L;;;;;N;;;;; +1B88;SUNDANESE LETTER E;Lo;0;L;;;;;N;;;;; +1B89;SUNDANESE LETTER EU;Lo;0;L;;;;;N;;;;; +1B8A;SUNDANESE LETTER KA;Lo;0;L;;;;;N;;;;; +1B8B;SUNDANESE LETTER QA;Lo;0;L;;;;;N;;;;; +1B8C;SUNDANESE LETTER GA;Lo;0;L;;;;;N;;;;; +1B8D;SUNDANESE LETTER NGA;Lo;0;L;;;;;N;;;;; +1B8E;SUNDANESE LETTER CA;Lo;0;L;;;;;N;;;;; +1B8F;SUNDANESE LETTER JA;Lo;0;L;;;;;N;;;;; +1B90;SUNDANESE LETTER ZA;Lo;0;L;;;;;N;;;;; +1B91;SUNDANESE LETTER NYA;Lo;0;L;;;;;N;;;;; +1B92;SUNDANESE LETTER TA;Lo;0;L;;;;;N;;;;; +1B93;SUNDANESE LETTER DA;Lo;0;L;;;;;N;;;;; +1B94;SUNDANESE LETTER NA;Lo;0;L;;;;;N;;;;; +1B95;SUNDANESE LETTER PA;Lo;0;L;;;;;N;;;;; +1B96;SUNDANESE LETTER FA;Lo;0;L;;;;;N;;;;; +1B97;SUNDANESE LETTER VA;Lo;0;L;;;;;N;;;;; +1B98;SUNDANESE LETTER BA;Lo;0;L;;;;;N;;;;; +1B99;SUNDANESE LETTER MA;Lo;0;L;;;;;N;;;;; +1B9A;SUNDANESE LETTER YA;Lo;0;L;;;;;N;;;;; +1B9B;SUNDANESE LETTER RA;Lo;0;L;;;;;N;;;;; +1B9C;SUNDANESE LETTER LA;Lo;0;L;;;;;N;;;;; +1B9D;SUNDANESE LETTER WA;Lo;0;L;;;;;N;;;;; +1B9E;SUNDANESE LETTER SA;Lo;0;L;;;;;N;;;;; +1B9F;SUNDANESE LETTER XA;Lo;0;L;;;;;N;;;;; +1BA0;SUNDANESE LETTER HA;Lo;0;L;;;;;N;;;;; +1BA1;SUNDANESE CONSONANT SIGN PAMINGKAL;Mc;0;L;;;;;N;;;;; +1BA2;SUNDANESE CONSONANT SIGN PANYAKRA;Mn;0;NSM;;;;;N;;;;; +1BA3;SUNDANESE CONSONANT SIGN PANYIKU;Mn;0;NSM;;;;;N;;;;; +1BA4;SUNDANESE VOWEL SIGN PANGHULU;Mn;0;NSM;;;;;N;;;;; +1BA5;SUNDANESE VOWEL SIGN PANYUKU;Mn;0;NSM;;;;;N;;;;; +1BA6;SUNDANESE VOWEL SIGN PANAELAENG;Mc;0;L;;;;;N;;;;; +1BA7;SUNDANESE VOWEL SIGN PANOLONG;Mc;0;L;;;;;N;;;;; +1BA8;SUNDANESE VOWEL SIGN PAMEPET;Mn;0;NSM;;;;;N;;;;; +1BA9;SUNDANESE VOWEL SIGN PANEULEUNG;Mn;0;NSM;;;;;N;;;;; +1BAA;SUNDANESE SIGN PAMAAEH;Mc;9;L;;;;;N;;;;; +1BAE;SUNDANESE LETTER KHA;Lo;0;L;;;;;N;;;;; +1BAF;SUNDANESE LETTER SYA;Lo;0;L;;;;;N;;;;; +1BB0;SUNDANESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1BB1;SUNDANESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1BB2;SUNDANESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1BB3;SUNDANESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1BB4;SUNDANESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1BB5;SUNDANESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1BB6;SUNDANESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1BB7;SUNDANESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1BB8;SUNDANESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1BB9;SUNDANESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1C00;LEPCHA LETTER KA;Lo;0;L;;;;;N;;;;; +1C01;LEPCHA LETTER KLA;Lo;0;L;;;;;N;;;;; +1C02;LEPCHA LETTER KHA;Lo;0;L;;;;;N;;;;; +1C03;LEPCHA LETTER GA;Lo;0;L;;;;;N;;;;; +1C04;LEPCHA LETTER GLA;Lo;0;L;;;;;N;;;;; +1C05;LEPCHA LETTER NGA;Lo;0;L;;;;;N;;;;; +1C06;LEPCHA LETTER CA;Lo;0;L;;;;;N;;;;; +1C07;LEPCHA LETTER CHA;Lo;0;L;;;;;N;;;;; +1C08;LEPCHA LETTER JA;Lo;0;L;;;;;N;;;;; +1C09;LEPCHA LETTER NYA;Lo;0;L;;;;;N;;;;; +1C0A;LEPCHA LETTER TA;Lo;0;L;;;;;N;;;;; +1C0B;LEPCHA LETTER THA;Lo;0;L;;;;;N;;;;; +1C0C;LEPCHA LETTER DA;Lo;0;L;;;;;N;;;;; +1C0D;LEPCHA LETTER NA;Lo;0;L;;;;;N;;;;; +1C0E;LEPCHA LETTER PA;Lo;0;L;;;;;N;;;;; +1C0F;LEPCHA LETTER PLA;Lo;0;L;;;;;N;;;;; +1C10;LEPCHA LETTER PHA;Lo;0;L;;;;;N;;;;; +1C11;LEPCHA LETTER FA;Lo;0;L;;;;;N;;;;; +1C12;LEPCHA LETTER FLA;Lo;0;L;;;;;N;;;;; +1C13;LEPCHA LETTER BA;Lo;0;L;;;;;N;;;;; +1C14;LEPCHA LETTER BLA;Lo;0;L;;;;;N;;;;; +1C15;LEPCHA LETTER MA;Lo;0;L;;;;;N;;;;; +1C16;LEPCHA LETTER MLA;Lo;0;L;;;;;N;;;;; +1C17;LEPCHA LETTER TSA;Lo;0;L;;;;;N;;;;; +1C18;LEPCHA LETTER TSHA;Lo;0;L;;;;;N;;;;; +1C19;LEPCHA LETTER DZA;Lo;0;L;;;;;N;;;;; +1C1A;LEPCHA LETTER YA;Lo;0;L;;;;;N;;;;; +1C1B;LEPCHA LETTER RA;Lo;0;L;;;;;N;;;;; +1C1C;LEPCHA LETTER LA;Lo;0;L;;;;;N;;;;; +1C1D;LEPCHA LETTER HA;Lo;0;L;;;;;N;;;;; +1C1E;LEPCHA LETTER HLA;Lo;0;L;;;;;N;;;;; +1C1F;LEPCHA LETTER VA;Lo;0;L;;;;;N;;;;; +1C20;LEPCHA LETTER SA;Lo;0;L;;;;;N;;;;; +1C21;LEPCHA LETTER SHA;Lo;0;L;;;;;N;;;;; +1C22;LEPCHA LETTER WA;Lo;0;L;;;;;N;;;;; +1C23;LEPCHA LETTER A;Lo;0;L;;;;;N;;;;; +1C24;LEPCHA SUBJOINED LETTER YA;Mc;0;L;;;;;N;;;;; +1C25;LEPCHA SUBJOINED LETTER RA;Mc;0;L;;;;;N;;;;; +1C26;LEPCHA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +1C27;LEPCHA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +1C28;LEPCHA VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +1C29;LEPCHA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +1C2A;LEPCHA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +1C2B;LEPCHA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +1C2C;LEPCHA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +1C2D;LEPCHA CONSONANT SIGN K;Mn;0;NSM;;;;;N;;;;; +1C2E;LEPCHA CONSONANT SIGN M;Mn;0;NSM;;;;;N;;;;; +1C2F;LEPCHA CONSONANT SIGN L;Mn;0;NSM;;;;;N;;;;; +1C30;LEPCHA CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;; +1C31;LEPCHA CONSONANT SIGN P;Mn;0;NSM;;;;;N;;;;; +1C32;LEPCHA CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;; +1C33;LEPCHA CONSONANT SIGN T;Mn;0;NSM;;;;;N;;;;; +1C34;LEPCHA CONSONANT SIGN NYIN-DO;Mc;0;L;;;;;N;;;;; +1C35;LEPCHA CONSONANT SIGN KANG;Mc;0;L;;;;;N;;;;; +1C36;LEPCHA SIGN RAN;Mn;0;NSM;;;;;N;;;;; +1C37;LEPCHA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; +1C3B;LEPCHA PUNCTUATION TA-ROL;Po;0;L;;;;;N;;;;; +1C3C;LEPCHA PUNCTUATION NYET THYOOM TA-ROL;Po;0;L;;;;;N;;;;; +1C3D;LEPCHA PUNCTUATION CER-WA;Po;0;L;;;;;N;;;;; +1C3E;LEPCHA PUNCTUATION TSHOOK CER-WA;Po;0;L;;;;;N;;;;; +1C3F;LEPCHA PUNCTUATION TSHOOK;Po;0;L;;;;;N;;;;; +1C40;LEPCHA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1C41;LEPCHA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1C42;LEPCHA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1C43;LEPCHA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1C44;LEPCHA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1C45;LEPCHA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1C46;LEPCHA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1C47;LEPCHA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1C48;LEPCHA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1C49;LEPCHA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1C4D;LEPCHA LETTER TTA;Lo;0;L;;;;;N;;;;; +1C4E;LEPCHA LETTER TTHA;Lo;0;L;;;;;N;;;;; +1C4F;LEPCHA LETTER DDA;Lo;0;L;;;;;N;;;;; +1C50;OL CHIKI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +1C51;OL CHIKI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +1C52;OL CHIKI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +1C53;OL CHIKI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +1C54;OL CHIKI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +1C55;OL CHIKI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +1C56;OL CHIKI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +1C57;OL CHIKI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +1C58;OL CHIKI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +1C59;OL CHIKI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +1C5A;OL CHIKI LETTER LA;Lo;0;L;;;;;N;;;;; +1C5B;OL CHIKI LETTER AT;Lo;0;L;;;;;N;;;;; +1C5C;OL CHIKI LETTER AG;Lo;0;L;;;;;N;;;;; +1C5D;OL CHIKI LETTER ANG;Lo;0;L;;;;;N;;;;; +1C5E;OL CHIKI LETTER AL;Lo;0;L;;;;;N;;;;; +1C5F;OL CHIKI LETTER LAA;Lo;0;L;;;;;N;;;;; +1C60;OL CHIKI LETTER AAK;Lo;0;L;;;;;N;;;;; +1C61;OL CHIKI LETTER AAJ;Lo;0;L;;;;;N;;;;; +1C62;OL CHIKI LETTER AAM;Lo;0;L;;;;;N;;;;; +1C63;OL CHIKI LETTER AAW;Lo;0;L;;;;;N;;;;; +1C64;OL CHIKI LETTER LI;Lo;0;L;;;;;N;;;;; +1C65;OL CHIKI LETTER IS;Lo;0;L;;;;;N;;;;; +1C66;OL CHIKI LETTER IH;Lo;0;L;;;;;N;;;;; +1C67;OL CHIKI LETTER INY;Lo;0;L;;;;;N;;;;; +1C68;OL CHIKI LETTER IR;Lo;0;L;;;;;N;;;;; +1C69;OL CHIKI LETTER LU;Lo;0;L;;;;;N;;;;; +1C6A;OL CHIKI LETTER UC;Lo;0;L;;;;;N;;;;; +1C6B;OL CHIKI LETTER UD;Lo;0;L;;;;;N;;;;; +1C6C;OL CHIKI LETTER UNN;Lo;0;L;;;;;N;;;;; +1C6D;OL CHIKI LETTER UY;Lo;0;L;;;;;N;;;;; +1C6E;OL CHIKI LETTER LE;Lo;0;L;;;;;N;;;;; +1C6F;OL CHIKI LETTER EP;Lo;0;L;;;;;N;;;;; +1C70;OL CHIKI LETTER EDD;Lo;0;L;;;;;N;;;;; +1C71;OL CHIKI LETTER EN;Lo;0;L;;;;;N;;;;; +1C72;OL CHIKI LETTER ERR;Lo;0;L;;;;;N;;;;; +1C73;OL CHIKI LETTER LO;Lo;0;L;;;;;N;;;;; +1C74;OL CHIKI LETTER OTT;Lo;0;L;;;;;N;;;;; +1C75;OL CHIKI LETTER OB;Lo;0;L;;;;;N;;;;; +1C76;OL CHIKI LETTER OV;Lo;0;L;;;;;N;;;;; +1C77;OL CHIKI LETTER OH;Lo;0;L;;;;;N;;;;; +1C78;OL CHIKI MU TTUDDAG;Lm;0;L;;;;;N;;;;; +1C79;OL CHIKI GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;; +1C7A;OL CHIKI MU-GAAHLAA TTUDDAAG;Lm;0;L;;;;;N;;;;; +1C7B;OL CHIKI RELAA;Lm;0;L;;;;;N;;;;; +1C7C;OL CHIKI PHAARKAA;Lm;0;L;;;;;N;;;;; +1C7D;OL CHIKI AHAD;Lm;0;L;;;;;N;;;;; +1C7E;OL CHIKI PUNCTUATION MUCAAD;Po;0;L;;;;;N;;;;; +1C7F;OL CHIKI PUNCTUATION DOUBLE MUCAAD;Po;0;L;;;;;N;;;;; 1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;; 1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;; 1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;; @@ -5081,6 +5875,131 @@ 1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Ll;0;L;<sub> 03C6;;;;N;;;;; 1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Ll;0;L;<sub> 03C7;;;;N;;;;; 1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;; +1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;; +1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;; +1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L;<super> 043D;;;;N;;;;; +1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;A77D;;A77D +1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;; +1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;; +1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;; +1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;2C63;;2C63 +1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;; +1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;; +1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;; +1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L;<super> 0252;;;;N;;;;; +1D9C;MODIFIER LETTER SMALL C;Lm;0;L;<super> 0063;;;;N;;;;; +1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L;<super> 0255;;;;N;;;;; +1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L;<super> 00F0;;;;N;;;;; +1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;; +1DA0;MODIFIER LETTER SMALL F;Lm;0;L;<super> 0066;;;;N;;;;; +1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L;<super> 025F;;;;N;;;;; +1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L;<super> 0261;;;;N;;;;; +1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L;<super> 0265;;;;N;;;;; +1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L;<super> 0268;;;;N;;;;; +1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L;<super> 0269;;;;N;;;;; +1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L;<super> 026A;;;;N;;;;; +1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L;<super> 1D7B;;;;N;;;;; +1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L;<super> 029D;;;;N;;;;; +1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L;<super> 026D;;;;N;;;;; +1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L;<super> 1D85;;;;N;;;;; +1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L;<super> 029F;;;;N;;;;; +1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L;<super> 0271;;;;N;;;;; +1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L;<super> 0270;;;;N;;;;; +1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L;<super> 0272;;;;N;;;;; +1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L;<super> 0273;;;;N;;;;; +1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L;<super> 0274;;;;N;;;;; +1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L;<super> 0275;;;;N;;;;; +1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L;<super> 0278;;;;N;;;;; +1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L;<super> 0282;;;;N;;;;; +1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L;<super> 0283;;;;N;;;;; +1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L;<super> 01AB;;;;N;;;;; +1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L;<super> 0289;;;;N;;;;; +1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L;<super> 028A;;;;N;;;;; +1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L;<super> 1D1C;;;;N;;;;; +1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L;<super> 028B;;;;N;;;;; +1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L;<super> 028C;;;;N;;;;; +1DBB;MODIFIER LETTER SMALL Z;Lm;0;L;<super> 007A;;;;N;;;;; +1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L;<super> 0290;;;;N;;;;; +1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L;<super> 0291;;;;N;;;;; +1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L;<super> 0292;;;;N;;;;; +1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L;<super> 03B8;;;;N;;;;; +1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;; +1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; +1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;; +1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;; +1DC4;COMBINING MACRON-ACUTE;Mn;230;NSM;;;;;N;;;;; +1DC5;COMBINING GRAVE-MACRON;Mn;230;NSM;;;;;N;;;;; +1DC6;COMBINING MACRON-GRAVE;Mn;230;NSM;;;;;N;;;;; +1DC7;COMBINING ACUTE-MACRON;Mn;230;NSM;;;;;N;;;;; +1DC8;COMBINING GRAVE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;; +1DC9;COMBINING ACUTE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;; +1DCA;COMBINING LATIN SMALL LETTER R BELOW;Mn;220;NSM;;;;;N;;;;; +1DCB;COMBINING BREVE-MACRON;Mn;230;NSM;;;;;N;;;;; +1DCC;COMBINING MACRON-BREVE;Mn;230;NSM;;;;;N;;;;; +1DCD;COMBINING DOUBLE CIRCUMFLEX ABOVE;Mn;234;NSM;;;;;N;;;;; +1DCE;COMBINING OGONEK ABOVE;Mn;214;NSM;;;;;N;;;;; +1DCF;COMBINING ZIGZAG BELOW;Mn;220;NSM;;;;;N;;;;; +1DD0;COMBINING IS BELOW;Mn;202;NSM;;;;;N;;;;; +1DD1;COMBINING UR ABOVE;Mn;230;NSM;;;;;N;;;;; +1DD2;COMBINING US ABOVE;Mn;230;NSM;;;;;N;;;;; +1DD3;COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE;Mn;230;NSM;;;;;N;;;;; +1DD4;COMBINING LATIN SMALL LETTER AE;Mn;230;NSM;;;;;N;;;;; +1DD5;COMBINING LATIN SMALL LETTER AO;Mn;230;NSM;;;;;N;;;;; +1DD6;COMBINING LATIN SMALL LETTER AV;Mn;230;NSM;;;;;N;;;;; +1DD7;COMBINING LATIN SMALL LETTER C CEDILLA;Mn;230;NSM;;;;;N;;;;; +1DD8;COMBINING LATIN SMALL LETTER INSULAR D;Mn;230;NSM;;;;;N;;;;; +1DD9;COMBINING LATIN SMALL LETTER ETH;Mn;230;NSM;;;;;N;;;;; +1DDA;COMBINING LATIN SMALL LETTER G;Mn;230;NSM;;;;;N;;;;; +1DDB;COMBINING LATIN LETTER SMALL CAPITAL G;Mn;230;NSM;;;;;N;;;;; +1DDC;COMBINING LATIN SMALL LETTER K;Mn;230;NSM;;;;;N;;;;; +1DDD;COMBINING LATIN SMALL LETTER L;Mn;230;NSM;;;;;N;;;;; +1DDE;COMBINING LATIN LETTER SMALL CAPITAL L;Mn;230;NSM;;;;;N;;;;; +1DDF;COMBINING LATIN LETTER SMALL CAPITAL M;Mn;230;NSM;;;;;N;;;;; +1DE0;COMBINING LATIN SMALL LETTER N;Mn;230;NSM;;;;;N;;;;; +1DE1;COMBINING LATIN LETTER SMALL CAPITAL N;Mn;230;NSM;;;;;N;;;;; +1DE2;COMBINING LATIN LETTER SMALL CAPITAL R;Mn;230;NSM;;;;;N;;;;; +1DE3;COMBINING LATIN SMALL LETTER R ROTUNDA;Mn;230;NSM;;;;;N;;;;; +1DE4;COMBINING LATIN SMALL LETTER S;Mn;230;NSM;;;;;N;;;;; +1DE5;COMBINING LATIN SMALL LETTER LONG S;Mn;230;NSM;;;;;N;;;;; +1DE6;COMBINING LATIN SMALL LETTER Z;Mn;230;NSM;;;;;N;;;;; +1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;; +1DFF;COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;; 1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01; 1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00 1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03; @@ -5237,6 +6156,10 @@ 1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;; 1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;; 1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60 +1E9C;LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;;; +1E9D;LATIN SMALL LETTER LONG S WITH HIGH STROKE;Ll;0;L;;;;;N;;;;; +1E9E;LATIN CAPITAL LETTER SHARP S;Lu;0;L;;;;;N;;;;00DF; +1E9F;LATIN SMALL LETTER DELTA;Ll;0;L;;;;;N;;;;; 1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1; 1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0 1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3; @@ -5327,6 +6250,12 @@ 1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6 1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9; 1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8 +1EFA;LATIN CAPITAL LETTER MIDDLE-WELSH LL;Lu;0;L;;;;;N;;;;1EFB; +1EFB;LATIN SMALL LETTER MIDDLE-WELSH LL;Ll;0;L;;;;;N;;;1EFA;;1EFA +1EFC;LATIN CAPITAL LETTER MIDDLE-WELSH V;Lu;0;L;;;;;N;;;;1EFD; +1EFD;LATIN SMALL LETTER MIDDLE-WELSH V;Ll;0;L;;;;;N;;;1EFC;;1EFC +1EFE;LATIN CAPITAL LETTER Y WITH LOOP;Lu;0;L;;;;;N;;;;1EFF; +1EFF;LATIN SMALL LETTER Y WITH LOOP;Ll;0;L;;;;;N;;;1EFE;;1EFE 1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08 1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09 1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A @@ -5571,7 +6500,7 @@ 2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; 2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; 200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; -200B;ZERO WIDTH SPACE;Zs;0;BN;;;;;N;;;;; +200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;; 200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;; 200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;; 200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;; @@ -5607,7 +6536,7 @@ 202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;; 202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;; 202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;; -202F;NARROW NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;; +202F;NARROW NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;; 2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;; 2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;; 2032;PRIME;Po;0;ET;;;;;N;;;;; @@ -5628,7 +6557,7 @@ 2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;; 2042;ASTERISM;Po;0;ON;;;;;N;;;;; 2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;; -2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;; +2044;FRACTION SLASH;Sm;0;CS;;;;;N;;;;; 2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;; 2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;; 2047;DOUBLE QUESTION MARK;Po;0;ON;<compat> 003F 003F;;;;N;;;;; @@ -5645,12 +6574,22 @@ 2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;; 2053;SWUNG DASH;Po;0;ON;;;;;N;;;;; 2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;; +2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;; +2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; 2057;QUADRUPLE PRIME;Po;0;ON;<compat> 2032 2032 2032 2032;;;;N;;;;; +2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;; +205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;; +205D;TRICOLON;Po;0;ON;;;;;N;;;;; +205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;; 205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;; 2060;WORD JOINER;Cf;0;BN;;;;;N;;;;; 2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;; 2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;; 2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;; +2064;INVISIBLE PLUS;Cf;0;BN;;;;;N;;;;; 206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; 206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;; 206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;; @@ -5665,8 +6604,8 @@ 2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;; 2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;; 2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;; -207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;; -207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;; +207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES;<super> 002B;;;;N;;;;; +207B;SUPERSCRIPT MINUS;Sm;0;ES;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;; 207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;; 207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;; 207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;; @@ -5681,11 +6620,16 @@ 2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;; 2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;; 2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;; -208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;; -208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;; +208A;SUBSCRIPT PLUS SIGN;Sm;0;ES;<sub> 002B;;;;N;;;;; +208B;SUBSCRIPT MINUS;Sm;0;ES;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;; 208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;; 208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;; 208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;; +2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L;<sub> 0061;;;;N;;;;; +2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L;<sub> 0065;;;;N;;;;; +2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L;<sub> 006F;;;;N;;;;; +2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L;<sub> 0078;;;;N;;;;; +2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L;<sub> 0259;;;;N;;;;; 20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;; 20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;; 20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;; @@ -5704,6 +6648,10 @@ 20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;; 20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;; 20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;; +20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;; +20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;; +20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;; +20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;; 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; @@ -5731,6 +6679,12 @@ 20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;; 20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;; 20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;; +20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;; +20EC;COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; +20ED;COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;; +20EE;COMBINING LEFT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; +20EF;COMBINING RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;; +20F0;COMBINING ASTERISK ABOVE;Mn;230;NSM;;;;;N;;;;; 2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;; 2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;; 2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;; @@ -5781,7 +6735,7 @@ 212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;; 2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;; 2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;; -2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;; +2132;TURNED CAPITAL F;Lu;0;L;;;;;N;TURNED F;;;214E; 2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;; 2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;; 2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;; @@ -5791,6 +6745,7 @@ 2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;; 213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;; 213B;FACSIMILE SIGN;So;0;ON;<compat> 0046 0041 0058;;;;N;;;;; +213C;DOUBLE-STRUCK SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;; 213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;; 213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; 213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;; @@ -5806,6 +6761,10 @@ 2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;; 214A;PROPERTY LINE;So;0;ON;;;;;N;;;;; 214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;; +214C;PER SIGN;So;0;ON;;;;;N;;;;; +214D;AKTIESELSKAB;So;0;ON;;;;;N;;;;; +214E;TURNED SMALL F;Ll;0;L;;;;;N;;;2132;;2132 +214F;SYMBOL FOR SAMARITAN SOURCE;So;0;L;;;;;N;;;;; 2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;; 2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;; 2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;; @@ -5854,7 +6813,12 @@ 2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;; 2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;; 2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;; -2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Nl;0;L;;;;;N;;;;; +2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L;;;;;N;;;;2184; +2184;LATIN SMALL LETTER REVERSED C;Ll;0;L;;;;;N;;;2183;;2183 +2185;ROMAN NUMERAL SIX LATE FORM;Nl;0;L;;;;6;N;;;;; +2186;ROMAN NUMERAL FIFTY EARLY FORM;Nl;0;L;;;;50;N;;;;; +2187;ROMAN NUMERAL FIFTY THOUSAND;Nl;0;L;;;;50000;N;;;;; +2188;ROMAN NUMERAL ONE HUNDRED THOUSAND;Nl;0;L;;;;100000;N;;;;; 2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;; 2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;; 2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;; @@ -5985,7 +6949,7 @@ 220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;; 2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;; 2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;; -2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;; +2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;; 2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;; 2214;DOT PLUS;Sm;0;ON;;;;;N;;;;; 2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;; @@ -6403,9 +7367,9 @@ 23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;; 23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;; 23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;; -23B4;TOP SQUARE BRACKET;Ps;0;ON;;;;;N;;;;; -23B5;BOTTOM SQUARE BRACKET;Pe;0;ON;;;;;N;;;;; -23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;Po;0;ON;;;;;N;;;;; +23B4;TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; +23B5;BOTTOM SQUARE BRACKET;So;0;ON;;;;;N;;;;; +23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;; 23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;; 23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; 23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;; @@ -6432,6 +7396,29 @@ 23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;; 23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;; 23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;; +23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;; +23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;; +23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;; +23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;; +23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;; +23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;; +23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;; +23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;; +23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;; +23DA;EARTH GROUND;So;0;ON;;;;;N;;;;; +23DB;FUSE;So;0;ON;;;;;N;;;;; +23DC;TOP PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;; +23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;; +23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;; +23E2;WHITE TRAPEZIUM;So;0;ON;;;;;N;;;;; +23E3;BENZENE RING WITH CIRCLE;So;0;ON;;;;;N;;;;; +23E4;STRAIGHTNESS;So;0;ON;;;;;N;;;;; +23E5;FLATNESS;So;0;ON;;;;;N;;;;; +23E6;AC CURRENT;So;0;ON;;;;;N;;;;; +23E7;ELECTRICAL INTERSECTION;So;0;ON;;;;;N;;;;; 2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;; 2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;; 2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;; @@ -6482,46 +7469,46 @@ 2448;OCR DASH;So;0;ON;;;;;N;;;;; 2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;; 244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;; -2460;CIRCLED DIGIT ONE;No;0;EN;<circle> 0031;;1;1;N;;;;; -2461;CIRCLED DIGIT TWO;No;0;EN;<circle> 0032;;2;2;N;;;;; -2462;CIRCLED DIGIT THREE;No;0;EN;<circle> 0033;;3;3;N;;;;; -2463;CIRCLED DIGIT FOUR;No;0;EN;<circle> 0034;;4;4;N;;;;; -2464;CIRCLED DIGIT FIVE;No;0;EN;<circle> 0035;;5;5;N;;;;; -2465;CIRCLED DIGIT SIX;No;0;EN;<circle> 0036;;6;6;N;;;;; -2466;CIRCLED DIGIT SEVEN;No;0;EN;<circle> 0037;;7;7;N;;;;; -2467;CIRCLED DIGIT EIGHT;No;0;EN;<circle> 0038;;8;8;N;;;;; -2468;CIRCLED DIGIT NINE;No;0;EN;<circle> 0039;;9;9;N;;;;; -2469;CIRCLED NUMBER TEN;No;0;EN;<circle> 0031 0030;;;10;N;;;;; -246A;CIRCLED NUMBER ELEVEN;No;0;EN;<circle> 0031 0031;;;11;N;;;;; -246B;CIRCLED NUMBER TWELVE;No;0;EN;<circle> 0031 0032;;;12;N;;;;; -246C;CIRCLED NUMBER THIRTEEN;No;0;EN;<circle> 0031 0033;;;13;N;;;;; -246D;CIRCLED NUMBER FOURTEEN;No;0;EN;<circle> 0031 0034;;;14;N;;;;; -246E;CIRCLED NUMBER FIFTEEN;No;0;EN;<circle> 0031 0035;;;15;N;;;;; -246F;CIRCLED NUMBER SIXTEEN;No;0;EN;<circle> 0031 0036;;;16;N;;;;; -2470;CIRCLED NUMBER SEVENTEEN;No;0;EN;<circle> 0031 0037;;;17;N;;;;; -2471;CIRCLED NUMBER EIGHTEEN;No;0;EN;<circle> 0031 0038;;;18;N;;;;; -2472;CIRCLED NUMBER NINETEEN;No;0;EN;<circle> 0031 0039;;;19;N;;;;; -2473;CIRCLED NUMBER TWENTY;No;0;EN;<circle> 0032 0030;;;20;N;;;;; -2474;PARENTHESIZED DIGIT ONE;No;0;EN;<compat> 0028 0031 0029;;1;1;N;;;;; -2475;PARENTHESIZED DIGIT TWO;No;0;EN;<compat> 0028 0032 0029;;2;2;N;;;;; -2476;PARENTHESIZED DIGIT THREE;No;0;EN;<compat> 0028 0033 0029;;3;3;N;;;;; -2477;PARENTHESIZED DIGIT FOUR;No;0;EN;<compat> 0028 0034 0029;;4;4;N;;;;; -2478;PARENTHESIZED DIGIT FIVE;No;0;EN;<compat> 0028 0035 0029;;5;5;N;;;;; -2479;PARENTHESIZED DIGIT SIX;No;0;EN;<compat> 0028 0036 0029;;6;6;N;;;;; -247A;PARENTHESIZED DIGIT SEVEN;No;0;EN;<compat> 0028 0037 0029;;7;7;N;;;;; -247B;PARENTHESIZED DIGIT EIGHT;No;0;EN;<compat> 0028 0038 0029;;8;8;N;;;;; -247C;PARENTHESIZED DIGIT NINE;No;0;EN;<compat> 0028 0039 0029;;9;9;N;;;;; -247D;PARENTHESIZED NUMBER TEN;No;0;EN;<compat> 0028 0031 0030 0029;;;10;N;;;;; -247E;PARENTHESIZED NUMBER ELEVEN;No;0;EN;<compat> 0028 0031 0031 0029;;;11;N;;;;; -247F;PARENTHESIZED NUMBER TWELVE;No;0;EN;<compat> 0028 0031 0032 0029;;;12;N;;;;; -2480;PARENTHESIZED NUMBER THIRTEEN;No;0;EN;<compat> 0028 0031 0033 0029;;;13;N;;;;; -2481;PARENTHESIZED NUMBER FOURTEEN;No;0;EN;<compat> 0028 0031 0034 0029;;;14;N;;;;; -2482;PARENTHESIZED NUMBER FIFTEEN;No;0;EN;<compat> 0028 0031 0035 0029;;;15;N;;;;; -2483;PARENTHESIZED NUMBER SIXTEEN;No;0;EN;<compat> 0028 0031 0036 0029;;;16;N;;;;; -2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;EN;<compat> 0028 0031 0037 0029;;;17;N;;;;; -2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;EN;<compat> 0028 0031 0038 0029;;;18;N;;;;; -2486;PARENTHESIZED NUMBER NINETEEN;No;0;EN;<compat> 0028 0031 0039 0029;;;19;N;;;;; -2487;PARENTHESIZED NUMBER TWENTY;No;0;EN;<compat> 0028 0032 0030 0029;;;20;N;;;;; +2460;CIRCLED DIGIT ONE;No;0;ON;<circle> 0031;;1;1;N;;;;; +2461;CIRCLED DIGIT TWO;No;0;ON;<circle> 0032;;2;2;N;;;;; +2462;CIRCLED DIGIT THREE;No;0;ON;<circle> 0033;;3;3;N;;;;; +2463;CIRCLED DIGIT FOUR;No;0;ON;<circle> 0034;;4;4;N;;;;; +2464;CIRCLED DIGIT FIVE;No;0;ON;<circle> 0035;;5;5;N;;;;; +2465;CIRCLED DIGIT SIX;No;0;ON;<circle> 0036;;6;6;N;;;;; +2466;CIRCLED DIGIT SEVEN;No;0;ON;<circle> 0037;;7;7;N;;;;; +2467;CIRCLED DIGIT EIGHT;No;0;ON;<circle> 0038;;8;8;N;;;;; +2468;CIRCLED DIGIT NINE;No;0;ON;<circle> 0039;;9;9;N;;;;; +2469;CIRCLED NUMBER TEN;No;0;ON;<circle> 0031 0030;;;10;N;;;;; +246A;CIRCLED NUMBER ELEVEN;No;0;ON;<circle> 0031 0031;;;11;N;;;;; +246B;CIRCLED NUMBER TWELVE;No;0;ON;<circle> 0031 0032;;;12;N;;;;; +246C;CIRCLED NUMBER THIRTEEN;No;0;ON;<circle> 0031 0033;;;13;N;;;;; +246D;CIRCLED NUMBER FOURTEEN;No;0;ON;<circle> 0031 0034;;;14;N;;;;; +246E;CIRCLED NUMBER FIFTEEN;No;0;ON;<circle> 0031 0035;;;15;N;;;;; +246F;CIRCLED NUMBER SIXTEEN;No;0;ON;<circle> 0031 0036;;;16;N;;;;; +2470;CIRCLED NUMBER SEVENTEEN;No;0;ON;<circle> 0031 0037;;;17;N;;;;; +2471;CIRCLED NUMBER EIGHTEEN;No;0;ON;<circle> 0031 0038;;;18;N;;;;; +2472;CIRCLED NUMBER NINETEEN;No;0;ON;<circle> 0031 0039;;;19;N;;;;; +2473;CIRCLED NUMBER TWENTY;No;0;ON;<circle> 0032 0030;;;20;N;;;;; +2474;PARENTHESIZED DIGIT ONE;No;0;ON;<compat> 0028 0031 0029;;1;1;N;;;;; +2475;PARENTHESIZED DIGIT TWO;No;0;ON;<compat> 0028 0032 0029;;2;2;N;;;;; +2476;PARENTHESIZED DIGIT THREE;No;0;ON;<compat> 0028 0033 0029;;3;3;N;;;;; +2477;PARENTHESIZED DIGIT FOUR;No;0;ON;<compat> 0028 0034 0029;;4;4;N;;;;; +2478;PARENTHESIZED DIGIT FIVE;No;0;ON;<compat> 0028 0035 0029;;5;5;N;;;;; +2479;PARENTHESIZED DIGIT SIX;No;0;ON;<compat> 0028 0036 0029;;6;6;N;;;;; +247A;PARENTHESIZED DIGIT SEVEN;No;0;ON;<compat> 0028 0037 0029;;7;7;N;;;;; +247B;PARENTHESIZED DIGIT EIGHT;No;0;ON;<compat> 0028 0038 0029;;8;8;N;;;;; +247C;PARENTHESIZED DIGIT NINE;No;0;ON;<compat> 0028 0039 0029;;9;9;N;;;;; +247D;PARENTHESIZED NUMBER TEN;No;0;ON;<compat> 0028 0031 0030 0029;;;10;N;;;;; +247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON;<compat> 0028 0031 0031 0029;;;11;N;;;;; +247F;PARENTHESIZED NUMBER TWELVE;No;0;ON;<compat> 0028 0031 0032 0029;;;12;N;;;;; +2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON;<compat> 0028 0031 0033 0029;;;13;N;;;;; +2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON;<compat> 0028 0031 0034 0029;;;14;N;;;;; +2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON;<compat> 0028 0031 0035 0029;;;15;N;;;;; +2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON;<compat> 0028 0031 0036 0029;;;16;N;;;;; +2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON;<compat> 0028 0031 0037 0029;;;17;N;;;;; +2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON;<compat> 0028 0031 0038 0029;;;18;N;;;;; +2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON;<compat> 0028 0031 0039 0029;;;19;N;;;;; +2487;PARENTHESIZED NUMBER TWENTY;No;0;ON;<compat> 0028 0032 0030 0029;;;20;N;;;;; 2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;; 2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;; 248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;; @@ -6620,7 +7607,7 @@ 24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD 24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE 24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF -24EA;CIRCLED DIGIT ZERO;No;0;EN;<circle> 0030;;0;0;N;;;;; +24EA;CIRCLED DIGIT ZERO;No;0;ON;<circle> 0030;;0;0;N;;;;; 24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;; 24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;; 24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;; @@ -6922,6 +7909,7 @@ 2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;; 2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;; 2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;; +2618;SHAMROCK;So;0;ON;;;;;N;;;;; 2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;; 261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;; 261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;; @@ -7023,6 +8011,8 @@ 267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;; 267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; 267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;; +267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;; +267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;; 2680;DIE FACE-1;So;0;ON;;;;;N;;;;; 2681;DIE FACE-2;So;0;ON;;;;;N;;;;; 2682;DIE FACE-3;So;0;ON;;;;;N;;;;; @@ -7041,8 +8031,51 @@ 268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;; 2690;WHITE FLAG;So;0;ON;;;;;N;;;;; 2691;BLACK FLAG;So;0;ON;;;;;N;;;;; +2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;; +2693;ANCHOR;So;0;ON;;;;;N;;;;; +2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;; +2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;; +2696;SCALES;So;0;ON;;;;;N;;;;; +2697;ALEMBIC;So;0;ON;;;;;N;;;;; +2698;FLOWER;So;0;ON;;;;;N;;;;; +2699;GEAR;So;0;ON;;;;;N;;;;; +269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;; +269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;; +269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;; +269D;OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;; 26A0;WARNING SIGN;So;0;ON;;;;;N;;;;; 26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;; +26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;; +26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;; +26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;; +26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; +26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; +26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;; +26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; +26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;; +26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;; +26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;; +26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;; +26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;; +26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;; +26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;; +26B0;COFFIN;So;0;ON;;;;;N;;;;; +26B1;FUNERAL URN;So;0;ON;;;;;N;;;;; +26B2;NEUTER;So;0;ON;;;;;N;;;;; +26B3;CERES;So;0;ON;;;;;N;;;;; +26B4;PALLAS;So;0;ON;;;;;N;;;;; +26B5;JUNO;So;0;ON;;;;;N;;;;; +26B6;VESTA;So;0;ON;;;;;N;;;;; +26B7;CHIRON;So;0;ON;;;;;N;;;;; +26B8;BLACK MOON LILITH;So;0;ON;;;;;N;;;;; +26B9;SEXTILE;So;0;ON;;;;;N;;;;; +26BA;SEMISEXTILE;So;0;ON;;;;;N;;;;; +26BB;QUINCUNX;So;0;ON;;;;;N;;;;; +26BC;SESQUIQUADRATE;So;0;ON;;;;;N;;;;; +26C0;WHITE DRAUGHTS MAN;So;0;ON;;;;;N;;;;; +26C1;WHITE DRAUGHTS KING;So;0;ON;;;;;N;;;;; +26C2;BLACK DRAUGHTS MAN;So;0;ON;;;;;N;;;;; +26C3;BLACK DRAUGHTS KING;So;0;ON;;;;;N;;;;; 2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;; 2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;; 2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;; @@ -7217,6 +8250,18 @@ 27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;; 27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;; 27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;; +27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;; +27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;; +27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;; +27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;; +27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;; +27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;; +27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;; +27C7;OR WITH DOT INSIDE;Sm;0;ON;;;;;N;;;;; +27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;Y;;;;; +27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;Y;;;;; +27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;; +27CC;LONG DIVISION;Sm;0;ON;;;;;Y;;;;; 27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;; 27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;; 27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;; @@ -7245,6 +8290,10 @@ 27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; 27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;; 27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;; +27EC;MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;; +27ED;MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;; +27EE;MATHEMATICAL LEFT FLATTENED PARENTHESIS;Ps;0;ON;;;;;Y;;;;; +27EF;MATHEMATICAL RIGHT FLATTENED PARENTHESIS;Pe;0;ON;;;;;Y;;;;; 27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;; 27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;; 27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;; @@ -7261,262 +8310,262 @@ 27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; 27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;; -2800;BRAILLE PATTERN BLANK;So;0;ON;;;;;N;;;;; -2801;BRAILLE PATTERN DOTS-1;So;0;ON;;;;;N;;;;; -2802;BRAILLE PATTERN DOTS-2;So;0;ON;;;;;N;;;;; -2803;BRAILLE PATTERN DOTS-12;So;0;ON;;;;;N;;;;; -2804;BRAILLE PATTERN DOTS-3;So;0;ON;;;;;N;;;;; -2805;BRAILLE PATTERN DOTS-13;So;0;ON;;;;;N;;;;; -2806;BRAILLE PATTERN DOTS-23;So;0;ON;;;;;N;;;;; -2807;BRAILLE PATTERN DOTS-123;So;0;ON;;;;;N;;;;; -2808;BRAILLE PATTERN DOTS-4;So;0;ON;;;;;N;;;;; -2809;BRAILLE PATTERN DOTS-14;So;0;ON;;;;;N;;;;; -280A;BRAILLE PATTERN DOTS-24;So;0;ON;;;;;N;;;;; -280B;BRAILLE PATTERN DOTS-124;So;0;ON;;;;;N;;;;; -280C;BRAILLE PATTERN DOTS-34;So;0;ON;;;;;N;;;;; -280D;BRAILLE PATTERN DOTS-134;So;0;ON;;;;;N;;;;; -280E;BRAILLE PATTERN DOTS-234;So;0;ON;;;;;N;;;;; -280F;BRAILLE PATTERN DOTS-1234;So;0;ON;;;;;N;;;;; -2810;BRAILLE PATTERN DOTS-5;So;0;ON;;;;;N;;;;; -2811;BRAILLE PATTERN DOTS-15;So;0;ON;;;;;N;;;;; -2812;BRAILLE PATTERN DOTS-25;So;0;ON;;;;;N;;;;; -2813;BRAILLE PATTERN DOTS-125;So;0;ON;;;;;N;;;;; -2814;BRAILLE PATTERN DOTS-35;So;0;ON;;;;;N;;;;; -2815;BRAILLE PATTERN DOTS-135;So;0;ON;;;;;N;;;;; -2816;BRAILLE PATTERN DOTS-235;So;0;ON;;;;;N;;;;; -2817;BRAILLE PATTERN DOTS-1235;So;0;ON;;;;;N;;;;; -2818;BRAILLE PATTERN DOTS-45;So;0;ON;;;;;N;;;;; -2819;BRAILLE PATTERN DOTS-145;So;0;ON;;;;;N;;;;; -281A;BRAILLE PATTERN DOTS-245;So;0;ON;;;;;N;;;;; -281B;BRAILLE PATTERN DOTS-1245;So;0;ON;;;;;N;;;;; -281C;BRAILLE PATTERN DOTS-345;So;0;ON;;;;;N;;;;; -281D;BRAILLE PATTERN DOTS-1345;So;0;ON;;;;;N;;;;; -281E;BRAILLE PATTERN DOTS-2345;So;0;ON;;;;;N;;;;; -281F;BRAILLE PATTERN DOTS-12345;So;0;ON;;;;;N;;;;; -2820;BRAILLE PATTERN DOTS-6;So;0;ON;;;;;N;;;;; -2821;BRAILLE PATTERN DOTS-16;So;0;ON;;;;;N;;;;; -2822;BRAILLE PATTERN DOTS-26;So;0;ON;;;;;N;;;;; -2823;BRAILLE PATTERN DOTS-126;So;0;ON;;;;;N;;;;; -2824;BRAILLE PATTERN DOTS-36;So;0;ON;;;;;N;;;;; -2825;BRAILLE PATTERN DOTS-136;So;0;ON;;;;;N;;;;; -2826;BRAILLE PATTERN DOTS-236;So;0;ON;;;;;N;;;;; -2827;BRAILLE PATTERN DOTS-1236;So;0;ON;;;;;N;;;;; -2828;BRAILLE PATTERN DOTS-46;So;0;ON;;;;;N;;;;; -2829;BRAILLE PATTERN DOTS-146;So;0;ON;;;;;N;;;;; -282A;BRAILLE PATTERN DOTS-246;So;0;ON;;;;;N;;;;; -282B;BRAILLE PATTERN DOTS-1246;So;0;ON;;;;;N;;;;; -282C;BRAILLE PATTERN DOTS-346;So;0;ON;;;;;N;;;;; -282D;BRAILLE PATTERN DOTS-1346;So;0;ON;;;;;N;;;;; -282E;BRAILLE PATTERN DOTS-2346;So;0;ON;;;;;N;;;;; -282F;BRAILLE PATTERN DOTS-12346;So;0;ON;;;;;N;;;;; -2830;BRAILLE PATTERN DOTS-56;So;0;ON;;;;;N;;;;; -2831;BRAILLE PATTERN DOTS-156;So;0;ON;;;;;N;;;;; -2832;BRAILLE PATTERN DOTS-256;So;0;ON;;;;;N;;;;; -2833;BRAILLE PATTERN DOTS-1256;So;0;ON;;;;;N;;;;; -2834;BRAILLE PATTERN DOTS-356;So;0;ON;;;;;N;;;;; -2835;BRAILLE PATTERN DOTS-1356;So;0;ON;;;;;N;;;;; -2836;BRAILLE PATTERN DOTS-2356;So;0;ON;;;;;N;;;;; -2837;BRAILLE PATTERN DOTS-12356;So;0;ON;;;;;N;;;;; -2838;BRAILLE PATTERN DOTS-456;So;0;ON;;;;;N;;;;; -2839;BRAILLE PATTERN DOTS-1456;So;0;ON;;;;;N;;;;; -283A;BRAILLE PATTERN DOTS-2456;So;0;ON;;;;;N;;;;; -283B;BRAILLE PATTERN DOTS-12456;So;0;ON;;;;;N;;;;; -283C;BRAILLE PATTERN DOTS-3456;So;0;ON;;;;;N;;;;; -283D;BRAILLE PATTERN DOTS-13456;So;0;ON;;;;;N;;;;; -283E;BRAILLE PATTERN DOTS-23456;So;0;ON;;;;;N;;;;; -283F;BRAILLE PATTERN DOTS-123456;So;0;ON;;;;;N;;;;; -2840;BRAILLE PATTERN DOTS-7;So;0;ON;;;;;N;;;;; -2841;BRAILLE PATTERN DOTS-17;So;0;ON;;;;;N;;;;; -2842;BRAILLE PATTERN DOTS-27;So;0;ON;;;;;N;;;;; -2843;BRAILLE PATTERN DOTS-127;So;0;ON;;;;;N;;;;; -2844;BRAILLE PATTERN DOTS-37;So;0;ON;;;;;N;;;;; -2845;BRAILLE PATTERN DOTS-137;So;0;ON;;;;;N;;;;; -2846;BRAILLE PATTERN DOTS-237;So;0;ON;;;;;N;;;;; -2847;BRAILLE PATTERN DOTS-1237;So;0;ON;;;;;N;;;;; -2848;BRAILLE PATTERN DOTS-47;So;0;ON;;;;;N;;;;; -2849;BRAILLE PATTERN DOTS-147;So;0;ON;;;;;N;;;;; -284A;BRAILLE PATTERN DOTS-247;So;0;ON;;;;;N;;;;; -284B;BRAILLE PATTERN DOTS-1247;So;0;ON;;;;;N;;;;; -284C;BRAILLE PATTERN DOTS-347;So;0;ON;;;;;N;;;;; -284D;BRAILLE PATTERN DOTS-1347;So;0;ON;;;;;N;;;;; -284E;BRAILLE PATTERN DOTS-2347;So;0;ON;;;;;N;;;;; -284F;BRAILLE PATTERN DOTS-12347;So;0;ON;;;;;N;;;;; -2850;BRAILLE PATTERN DOTS-57;So;0;ON;;;;;N;;;;; -2851;BRAILLE PATTERN DOTS-157;So;0;ON;;;;;N;;;;; -2852;BRAILLE PATTERN DOTS-257;So;0;ON;;;;;N;;;;; -2853;BRAILLE PATTERN DOTS-1257;So;0;ON;;;;;N;;;;; -2854;BRAILLE PATTERN DOTS-357;So;0;ON;;;;;N;;;;; -2855;BRAILLE PATTERN DOTS-1357;So;0;ON;;;;;N;;;;; -2856;BRAILLE PATTERN DOTS-2357;So;0;ON;;;;;N;;;;; -2857;BRAILLE PATTERN DOTS-12357;So;0;ON;;;;;N;;;;; -2858;BRAILLE PATTERN DOTS-457;So;0;ON;;;;;N;;;;; -2859;BRAILLE PATTERN DOTS-1457;So;0;ON;;;;;N;;;;; -285A;BRAILLE PATTERN DOTS-2457;So;0;ON;;;;;N;;;;; -285B;BRAILLE PATTERN DOTS-12457;So;0;ON;;;;;N;;;;; -285C;BRAILLE PATTERN DOTS-3457;So;0;ON;;;;;N;;;;; -285D;BRAILLE PATTERN DOTS-13457;So;0;ON;;;;;N;;;;; -285E;BRAILLE PATTERN DOTS-23457;So;0;ON;;;;;N;;;;; -285F;BRAILLE PATTERN DOTS-123457;So;0;ON;;;;;N;;;;; -2860;BRAILLE PATTERN DOTS-67;So;0;ON;;;;;N;;;;; -2861;BRAILLE PATTERN DOTS-167;So;0;ON;;;;;N;;;;; -2862;BRAILLE PATTERN DOTS-267;So;0;ON;;;;;N;;;;; -2863;BRAILLE PATTERN DOTS-1267;So;0;ON;;;;;N;;;;; -2864;BRAILLE PATTERN DOTS-367;So;0;ON;;;;;N;;;;; -2865;BRAILLE PATTERN DOTS-1367;So;0;ON;;;;;N;;;;; -2866;BRAILLE PATTERN DOTS-2367;So;0;ON;;;;;N;;;;; -2867;BRAILLE PATTERN DOTS-12367;So;0;ON;;;;;N;;;;; -2868;BRAILLE PATTERN DOTS-467;So;0;ON;;;;;N;;;;; -2869;BRAILLE PATTERN DOTS-1467;So;0;ON;;;;;N;;;;; -286A;BRAILLE PATTERN DOTS-2467;So;0;ON;;;;;N;;;;; -286B;BRAILLE PATTERN DOTS-12467;So;0;ON;;;;;N;;;;; -286C;BRAILLE PATTERN DOTS-3467;So;0;ON;;;;;N;;;;; -286D;BRAILLE PATTERN DOTS-13467;So;0;ON;;;;;N;;;;; -286E;BRAILLE PATTERN DOTS-23467;So;0;ON;;;;;N;;;;; -286F;BRAILLE PATTERN DOTS-123467;So;0;ON;;;;;N;;;;; -2870;BRAILLE PATTERN DOTS-567;So;0;ON;;;;;N;;;;; -2871;BRAILLE PATTERN DOTS-1567;So;0;ON;;;;;N;;;;; -2872;BRAILLE PATTERN DOTS-2567;So;0;ON;;;;;N;;;;; -2873;BRAILLE PATTERN DOTS-12567;So;0;ON;;;;;N;;;;; -2874;BRAILLE PATTERN DOTS-3567;So;0;ON;;;;;N;;;;; -2875;BRAILLE PATTERN DOTS-13567;So;0;ON;;;;;N;;;;; -2876;BRAILLE PATTERN DOTS-23567;So;0;ON;;;;;N;;;;; -2877;BRAILLE PATTERN DOTS-123567;So;0;ON;;;;;N;;;;; -2878;BRAILLE PATTERN DOTS-4567;So;0;ON;;;;;N;;;;; -2879;BRAILLE PATTERN DOTS-14567;So;0;ON;;;;;N;;;;; -287A;BRAILLE PATTERN DOTS-24567;So;0;ON;;;;;N;;;;; -287B;BRAILLE PATTERN DOTS-124567;So;0;ON;;;;;N;;;;; -287C;BRAILLE PATTERN DOTS-34567;So;0;ON;;;;;N;;;;; -287D;BRAILLE PATTERN DOTS-134567;So;0;ON;;;;;N;;;;; -287E;BRAILLE PATTERN DOTS-234567;So;0;ON;;;;;N;;;;; -287F;BRAILLE PATTERN DOTS-1234567;So;0;ON;;;;;N;;;;; -2880;BRAILLE PATTERN DOTS-8;So;0;ON;;;;;N;;;;; -2881;BRAILLE PATTERN DOTS-18;So;0;ON;;;;;N;;;;; -2882;BRAILLE PATTERN DOTS-28;So;0;ON;;;;;N;;;;; -2883;BRAILLE PATTERN DOTS-128;So;0;ON;;;;;N;;;;; -2884;BRAILLE PATTERN DOTS-38;So;0;ON;;;;;N;;;;; -2885;BRAILLE PATTERN DOTS-138;So;0;ON;;;;;N;;;;; -2886;BRAILLE PATTERN DOTS-238;So;0;ON;;;;;N;;;;; -2887;BRAILLE PATTERN DOTS-1238;So;0;ON;;;;;N;;;;; -2888;BRAILLE PATTERN DOTS-48;So;0;ON;;;;;N;;;;; -2889;BRAILLE PATTERN DOTS-148;So;0;ON;;;;;N;;;;; -288A;BRAILLE PATTERN DOTS-248;So;0;ON;;;;;N;;;;; -288B;BRAILLE PATTERN DOTS-1248;So;0;ON;;;;;N;;;;; -288C;BRAILLE PATTERN DOTS-348;So;0;ON;;;;;N;;;;; -288D;BRAILLE PATTERN DOTS-1348;So;0;ON;;;;;N;;;;; -288E;BRAILLE PATTERN DOTS-2348;So;0;ON;;;;;N;;;;; -288F;BRAILLE PATTERN DOTS-12348;So;0;ON;;;;;N;;;;; -2890;BRAILLE PATTERN DOTS-58;So;0;ON;;;;;N;;;;; -2891;BRAILLE PATTERN DOTS-158;So;0;ON;;;;;N;;;;; -2892;BRAILLE PATTERN DOTS-258;So;0;ON;;;;;N;;;;; -2893;BRAILLE PATTERN DOTS-1258;So;0;ON;;;;;N;;;;; -2894;BRAILLE PATTERN DOTS-358;So;0;ON;;;;;N;;;;; -2895;BRAILLE PATTERN DOTS-1358;So;0;ON;;;;;N;;;;; -2896;BRAILLE PATTERN DOTS-2358;So;0;ON;;;;;N;;;;; -2897;BRAILLE PATTERN DOTS-12358;So;0;ON;;;;;N;;;;; -2898;BRAILLE PATTERN DOTS-458;So;0;ON;;;;;N;;;;; -2899;BRAILLE PATTERN DOTS-1458;So;0;ON;;;;;N;;;;; -289A;BRAILLE PATTERN DOTS-2458;So;0;ON;;;;;N;;;;; -289B;BRAILLE PATTERN DOTS-12458;So;0;ON;;;;;N;;;;; -289C;BRAILLE PATTERN DOTS-3458;So;0;ON;;;;;N;;;;; -289D;BRAILLE PATTERN DOTS-13458;So;0;ON;;;;;N;;;;; -289E;BRAILLE PATTERN DOTS-23458;So;0;ON;;;;;N;;;;; -289F;BRAILLE PATTERN DOTS-123458;So;0;ON;;;;;N;;;;; -28A0;BRAILLE PATTERN DOTS-68;So;0;ON;;;;;N;;;;; -28A1;BRAILLE PATTERN DOTS-168;So;0;ON;;;;;N;;;;; -28A2;BRAILLE PATTERN DOTS-268;So;0;ON;;;;;N;;;;; -28A3;BRAILLE PATTERN DOTS-1268;So;0;ON;;;;;N;;;;; -28A4;BRAILLE PATTERN DOTS-368;So;0;ON;;;;;N;;;;; -28A5;BRAILLE PATTERN DOTS-1368;So;0;ON;;;;;N;;;;; -28A6;BRAILLE PATTERN DOTS-2368;So;0;ON;;;;;N;;;;; -28A7;BRAILLE PATTERN DOTS-12368;So;0;ON;;;;;N;;;;; -28A8;BRAILLE PATTERN DOTS-468;So;0;ON;;;;;N;;;;; -28A9;BRAILLE PATTERN DOTS-1468;So;0;ON;;;;;N;;;;; -28AA;BRAILLE PATTERN DOTS-2468;So;0;ON;;;;;N;;;;; -28AB;BRAILLE PATTERN DOTS-12468;So;0;ON;;;;;N;;;;; -28AC;BRAILLE PATTERN DOTS-3468;So;0;ON;;;;;N;;;;; -28AD;BRAILLE PATTERN DOTS-13468;So;0;ON;;;;;N;;;;; -28AE;BRAILLE PATTERN DOTS-23468;So;0;ON;;;;;N;;;;; -28AF;BRAILLE PATTERN DOTS-123468;So;0;ON;;;;;N;;;;; -28B0;BRAILLE PATTERN DOTS-568;So;0;ON;;;;;N;;;;; -28B1;BRAILLE PATTERN DOTS-1568;So;0;ON;;;;;N;;;;; -28B2;BRAILLE PATTERN DOTS-2568;So;0;ON;;;;;N;;;;; -28B3;BRAILLE PATTERN DOTS-12568;So;0;ON;;;;;N;;;;; -28B4;BRAILLE PATTERN DOTS-3568;So;0;ON;;;;;N;;;;; -28B5;BRAILLE PATTERN DOTS-13568;So;0;ON;;;;;N;;;;; -28B6;BRAILLE PATTERN DOTS-23568;So;0;ON;;;;;N;;;;; -28B7;BRAILLE PATTERN DOTS-123568;So;0;ON;;;;;N;;;;; -28B8;BRAILLE PATTERN DOTS-4568;So;0;ON;;;;;N;;;;; -28B9;BRAILLE PATTERN DOTS-14568;So;0;ON;;;;;N;;;;; -28BA;BRAILLE PATTERN DOTS-24568;So;0;ON;;;;;N;;;;; -28BB;BRAILLE PATTERN DOTS-124568;So;0;ON;;;;;N;;;;; -28BC;BRAILLE PATTERN DOTS-34568;So;0;ON;;;;;N;;;;; -28BD;BRAILLE PATTERN DOTS-134568;So;0;ON;;;;;N;;;;; -28BE;BRAILLE PATTERN DOTS-234568;So;0;ON;;;;;N;;;;; -28BF;BRAILLE PATTERN DOTS-1234568;So;0;ON;;;;;N;;;;; -28C0;BRAILLE PATTERN DOTS-78;So;0;ON;;;;;N;;;;; -28C1;BRAILLE PATTERN DOTS-178;So;0;ON;;;;;N;;;;; -28C2;BRAILLE PATTERN DOTS-278;So;0;ON;;;;;N;;;;; -28C3;BRAILLE PATTERN DOTS-1278;So;0;ON;;;;;N;;;;; -28C4;BRAILLE PATTERN DOTS-378;So;0;ON;;;;;N;;;;; -28C5;BRAILLE PATTERN DOTS-1378;So;0;ON;;;;;N;;;;; -28C6;BRAILLE PATTERN DOTS-2378;So;0;ON;;;;;N;;;;; -28C7;BRAILLE PATTERN DOTS-12378;So;0;ON;;;;;N;;;;; -28C8;BRAILLE PATTERN DOTS-478;So;0;ON;;;;;N;;;;; -28C9;BRAILLE PATTERN DOTS-1478;So;0;ON;;;;;N;;;;; -28CA;BRAILLE PATTERN DOTS-2478;So;0;ON;;;;;N;;;;; -28CB;BRAILLE PATTERN DOTS-12478;So;0;ON;;;;;N;;;;; -28CC;BRAILLE PATTERN DOTS-3478;So;0;ON;;;;;N;;;;; -28CD;BRAILLE PATTERN DOTS-13478;So;0;ON;;;;;N;;;;; -28CE;BRAILLE PATTERN DOTS-23478;So;0;ON;;;;;N;;;;; -28CF;BRAILLE PATTERN DOTS-123478;So;0;ON;;;;;N;;;;; -28D0;BRAILLE PATTERN DOTS-578;So;0;ON;;;;;N;;;;; -28D1;BRAILLE PATTERN DOTS-1578;So;0;ON;;;;;N;;;;; -28D2;BRAILLE PATTERN DOTS-2578;So;0;ON;;;;;N;;;;; -28D3;BRAILLE PATTERN DOTS-12578;So;0;ON;;;;;N;;;;; -28D4;BRAILLE PATTERN DOTS-3578;So;0;ON;;;;;N;;;;; -28D5;BRAILLE PATTERN DOTS-13578;So;0;ON;;;;;N;;;;; -28D6;BRAILLE PATTERN DOTS-23578;So;0;ON;;;;;N;;;;; -28D7;BRAILLE PATTERN DOTS-123578;So;0;ON;;;;;N;;;;; -28D8;BRAILLE PATTERN DOTS-4578;So;0;ON;;;;;N;;;;; -28D9;BRAILLE PATTERN DOTS-14578;So;0;ON;;;;;N;;;;; -28DA;BRAILLE PATTERN DOTS-24578;So;0;ON;;;;;N;;;;; -28DB;BRAILLE PATTERN DOTS-124578;So;0;ON;;;;;N;;;;; -28DC;BRAILLE PATTERN DOTS-34578;So;0;ON;;;;;N;;;;; -28DD;BRAILLE PATTERN DOTS-134578;So;0;ON;;;;;N;;;;; -28DE;BRAILLE PATTERN DOTS-234578;So;0;ON;;;;;N;;;;; -28DF;BRAILLE PATTERN DOTS-1234578;So;0;ON;;;;;N;;;;; -28E0;BRAILLE PATTERN DOTS-678;So;0;ON;;;;;N;;;;; -28E1;BRAILLE PATTERN DOTS-1678;So;0;ON;;;;;N;;;;; -28E2;BRAILLE PATTERN DOTS-2678;So;0;ON;;;;;N;;;;; -28E3;BRAILLE PATTERN DOTS-12678;So;0;ON;;;;;N;;;;; -28E4;BRAILLE PATTERN DOTS-3678;So;0;ON;;;;;N;;;;; -28E5;BRAILLE PATTERN DOTS-13678;So;0;ON;;;;;N;;;;; -28E6;BRAILLE PATTERN DOTS-23678;So;0;ON;;;;;N;;;;; -28E7;BRAILLE PATTERN DOTS-123678;So;0;ON;;;;;N;;;;; -28E8;BRAILLE PATTERN DOTS-4678;So;0;ON;;;;;N;;;;; -28E9;BRAILLE PATTERN DOTS-14678;So;0;ON;;;;;N;;;;; -28EA;BRAILLE PATTERN DOTS-24678;So;0;ON;;;;;N;;;;; -28EB;BRAILLE PATTERN DOTS-124678;So;0;ON;;;;;N;;;;; -28EC;BRAILLE PATTERN DOTS-34678;So;0;ON;;;;;N;;;;; -28ED;BRAILLE PATTERN DOTS-134678;So;0;ON;;;;;N;;;;; -28EE;BRAILLE PATTERN DOTS-234678;So;0;ON;;;;;N;;;;; -28EF;BRAILLE PATTERN DOTS-1234678;So;0;ON;;;;;N;;;;; -28F0;BRAILLE PATTERN DOTS-5678;So;0;ON;;;;;N;;;;; -28F1;BRAILLE PATTERN DOTS-15678;So;0;ON;;;;;N;;;;; -28F2;BRAILLE PATTERN DOTS-25678;So;0;ON;;;;;N;;;;; -28F3;BRAILLE PATTERN DOTS-125678;So;0;ON;;;;;N;;;;; -28F4;BRAILLE PATTERN DOTS-35678;So;0;ON;;;;;N;;;;; -28F5;BRAILLE PATTERN DOTS-135678;So;0;ON;;;;;N;;;;; -28F6;BRAILLE PATTERN DOTS-235678;So;0;ON;;;;;N;;;;; -28F7;BRAILLE PATTERN DOTS-1235678;So;0;ON;;;;;N;;;;; -28F8;BRAILLE PATTERN DOTS-45678;So;0;ON;;;;;N;;;;; -28F9;BRAILLE PATTERN DOTS-145678;So;0;ON;;;;;N;;;;; -28FA;BRAILLE PATTERN DOTS-245678;So;0;ON;;;;;N;;;;; -28FB;BRAILLE PATTERN DOTS-1245678;So;0;ON;;;;;N;;;;; -28FC;BRAILLE PATTERN DOTS-345678;So;0;ON;;;;;N;;;;; -28FD;BRAILLE PATTERN DOTS-1345678;So;0;ON;;;;;N;;;;; -28FE;BRAILLE PATTERN DOTS-2345678;So;0;ON;;;;;N;;;;; -28FF;BRAILLE PATTERN DOTS-12345678;So;0;ON;;;;;N;;;;; +2800;BRAILLE PATTERN BLANK;So;0;L;;;;;N;;;;; +2801;BRAILLE PATTERN DOTS-1;So;0;L;;;;;N;;;;; +2802;BRAILLE PATTERN DOTS-2;So;0;L;;;;;N;;;;; +2803;BRAILLE PATTERN DOTS-12;So;0;L;;;;;N;;;;; +2804;BRAILLE PATTERN DOTS-3;So;0;L;;;;;N;;;;; +2805;BRAILLE PATTERN DOTS-13;So;0;L;;;;;N;;;;; +2806;BRAILLE PATTERN DOTS-23;So;0;L;;;;;N;;;;; +2807;BRAILLE PATTERN DOTS-123;So;0;L;;;;;N;;;;; +2808;BRAILLE PATTERN DOTS-4;So;0;L;;;;;N;;;;; +2809;BRAILLE PATTERN DOTS-14;So;0;L;;;;;N;;;;; +280A;BRAILLE PATTERN DOTS-24;So;0;L;;;;;N;;;;; +280B;BRAILLE PATTERN DOTS-124;So;0;L;;;;;N;;;;; +280C;BRAILLE PATTERN DOTS-34;So;0;L;;;;;N;;;;; +280D;BRAILLE PATTERN DOTS-134;So;0;L;;;;;N;;;;; +280E;BRAILLE PATTERN DOTS-234;So;0;L;;;;;N;;;;; +280F;BRAILLE PATTERN DOTS-1234;So;0;L;;;;;N;;;;; +2810;BRAILLE PATTERN DOTS-5;So;0;L;;;;;N;;;;; +2811;BRAILLE PATTERN DOTS-15;So;0;L;;;;;N;;;;; +2812;BRAILLE PATTERN DOTS-25;So;0;L;;;;;N;;;;; +2813;BRAILLE PATTERN DOTS-125;So;0;L;;;;;N;;;;; +2814;BRAILLE PATTERN DOTS-35;So;0;L;;;;;N;;;;; +2815;BRAILLE PATTERN DOTS-135;So;0;L;;;;;N;;;;; +2816;BRAILLE PATTERN DOTS-235;So;0;L;;;;;N;;;;; +2817;BRAILLE PATTERN DOTS-1235;So;0;L;;;;;N;;;;; +2818;BRAILLE PATTERN DOTS-45;So;0;L;;;;;N;;;;; +2819;BRAILLE PATTERN DOTS-145;So;0;L;;;;;N;;;;; +281A;BRAILLE PATTERN DOTS-245;So;0;L;;;;;N;;;;; +281B;BRAILLE PATTERN DOTS-1245;So;0;L;;;;;N;;;;; +281C;BRAILLE PATTERN DOTS-345;So;0;L;;;;;N;;;;; +281D;BRAILLE PATTERN DOTS-1345;So;0;L;;;;;N;;;;; +281E;BRAILLE PATTERN DOTS-2345;So;0;L;;;;;N;;;;; +281F;BRAILLE PATTERN DOTS-12345;So;0;L;;;;;N;;;;; +2820;BRAILLE PATTERN DOTS-6;So;0;L;;;;;N;;;;; +2821;BRAILLE PATTERN DOTS-16;So;0;L;;;;;N;;;;; +2822;BRAILLE PATTERN DOTS-26;So;0;L;;;;;N;;;;; +2823;BRAILLE PATTERN DOTS-126;So;0;L;;;;;N;;;;; +2824;BRAILLE PATTERN DOTS-36;So;0;L;;;;;N;;;;; +2825;BRAILLE PATTERN DOTS-136;So;0;L;;;;;N;;;;; +2826;BRAILLE PATTERN DOTS-236;So;0;L;;;;;N;;;;; +2827;BRAILLE PATTERN DOTS-1236;So;0;L;;;;;N;;;;; +2828;BRAILLE PATTERN DOTS-46;So;0;L;;;;;N;;;;; +2829;BRAILLE PATTERN DOTS-146;So;0;L;;;;;N;;;;; +282A;BRAILLE PATTERN DOTS-246;So;0;L;;;;;N;;;;; +282B;BRAILLE PATTERN DOTS-1246;So;0;L;;;;;N;;;;; +282C;BRAILLE PATTERN DOTS-346;So;0;L;;;;;N;;;;; +282D;BRAILLE PATTERN DOTS-1346;So;0;L;;;;;N;;;;; +282E;BRAILLE PATTERN DOTS-2346;So;0;L;;;;;N;;;;; +282F;BRAILLE PATTERN DOTS-12346;So;0;L;;;;;N;;;;; +2830;BRAILLE PATTERN DOTS-56;So;0;L;;;;;N;;;;; +2831;BRAILLE PATTERN DOTS-156;So;0;L;;;;;N;;;;; +2832;BRAILLE PATTERN DOTS-256;So;0;L;;;;;N;;;;; +2833;BRAILLE PATTERN DOTS-1256;So;0;L;;;;;N;;;;; +2834;BRAILLE PATTERN DOTS-356;So;0;L;;;;;N;;;;; +2835;BRAILLE PATTERN DOTS-1356;So;0;L;;;;;N;;;;; +2836;BRAILLE PATTERN DOTS-2356;So;0;L;;;;;N;;;;; +2837;BRAILLE PATTERN DOTS-12356;So;0;L;;;;;N;;;;; +2838;BRAILLE PATTERN DOTS-456;So;0;L;;;;;N;;;;; +2839;BRAILLE PATTERN DOTS-1456;So;0;L;;;;;N;;;;; +283A;BRAILLE PATTERN DOTS-2456;So;0;L;;;;;N;;;;; +283B;BRAILLE PATTERN DOTS-12456;So;0;L;;;;;N;;;;; +283C;BRAILLE PATTERN DOTS-3456;So;0;L;;;;;N;;;;; +283D;BRAILLE PATTERN DOTS-13456;So;0;L;;;;;N;;;;; +283E;BRAILLE PATTERN DOTS-23456;So;0;L;;;;;N;;;;; +283F;BRAILLE PATTERN DOTS-123456;So;0;L;;;;;N;;;;; +2840;BRAILLE PATTERN DOTS-7;So;0;L;;;;;N;;;;; +2841;BRAILLE PATTERN DOTS-17;So;0;L;;;;;N;;;;; +2842;BRAILLE PATTERN DOTS-27;So;0;L;;;;;N;;;;; +2843;BRAILLE PATTERN DOTS-127;So;0;L;;;;;N;;;;; +2844;BRAILLE PATTERN DOTS-37;So;0;L;;;;;N;;;;; +2845;BRAILLE PATTERN DOTS-137;So;0;L;;;;;N;;;;; +2846;BRAILLE PATTERN DOTS-237;So;0;L;;;;;N;;;;; +2847;BRAILLE PATTERN DOTS-1237;So;0;L;;;;;N;;;;; +2848;BRAILLE PATTERN DOTS-47;So;0;L;;;;;N;;;;; +2849;BRAILLE PATTERN DOTS-147;So;0;L;;;;;N;;;;; +284A;BRAILLE PATTERN DOTS-247;So;0;L;;;;;N;;;;; +284B;BRAILLE PATTERN DOTS-1247;So;0;L;;;;;N;;;;; +284C;BRAILLE PATTERN DOTS-347;So;0;L;;;;;N;;;;; +284D;BRAILLE PATTERN DOTS-1347;So;0;L;;;;;N;;;;; +284E;BRAILLE PATTERN DOTS-2347;So;0;L;;;;;N;;;;; +284F;BRAILLE PATTERN DOTS-12347;So;0;L;;;;;N;;;;; +2850;BRAILLE PATTERN DOTS-57;So;0;L;;;;;N;;;;; +2851;BRAILLE PATTERN DOTS-157;So;0;L;;;;;N;;;;; +2852;BRAILLE PATTERN DOTS-257;So;0;L;;;;;N;;;;; +2853;BRAILLE PATTERN DOTS-1257;So;0;L;;;;;N;;;;; +2854;BRAILLE PATTERN DOTS-357;So;0;L;;;;;N;;;;; +2855;BRAILLE PATTERN DOTS-1357;So;0;L;;;;;N;;;;; +2856;BRAILLE PATTERN DOTS-2357;So;0;L;;;;;N;;;;; +2857;BRAILLE PATTERN DOTS-12357;So;0;L;;;;;N;;;;; +2858;BRAILLE PATTERN DOTS-457;So;0;L;;;;;N;;;;; +2859;BRAILLE PATTERN DOTS-1457;So;0;L;;;;;N;;;;; +285A;BRAILLE PATTERN DOTS-2457;So;0;L;;;;;N;;;;; +285B;BRAILLE PATTERN DOTS-12457;So;0;L;;;;;N;;;;; +285C;BRAILLE PATTERN DOTS-3457;So;0;L;;;;;N;;;;; +285D;BRAILLE PATTERN DOTS-13457;So;0;L;;;;;N;;;;; +285E;BRAILLE PATTERN DOTS-23457;So;0;L;;;;;N;;;;; +285F;BRAILLE PATTERN DOTS-123457;So;0;L;;;;;N;;;;; +2860;BRAILLE PATTERN DOTS-67;So;0;L;;;;;N;;;;; +2861;BRAILLE PATTERN DOTS-167;So;0;L;;;;;N;;;;; +2862;BRAILLE PATTERN DOTS-267;So;0;L;;;;;N;;;;; +2863;BRAILLE PATTERN DOTS-1267;So;0;L;;;;;N;;;;; +2864;BRAILLE PATTERN DOTS-367;So;0;L;;;;;N;;;;; +2865;BRAILLE PATTERN DOTS-1367;So;0;L;;;;;N;;;;; +2866;BRAILLE PATTERN DOTS-2367;So;0;L;;;;;N;;;;; +2867;BRAILLE PATTERN DOTS-12367;So;0;L;;;;;N;;;;; +2868;BRAILLE PATTERN DOTS-467;So;0;L;;;;;N;;;;; +2869;BRAILLE PATTERN DOTS-1467;So;0;L;;;;;N;;;;; +286A;BRAILLE PATTERN DOTS-2467;So;0;L;;;;;N;;;;; +286B;BRAILLE PATTERN DOTS-12467;So;0;L;;;;;N;;;;; +286C;BRAILLE PATTERN DOTS-3467;So;0;L;;;;;N;;;;; +286D;BRAILLE PATTERN DOTS-13467;So;0;L;;;;;N;;;;; +286E;BRAILLE PATTERN DOTS-23467;So;0;L;;;;;N;;;;; +286F;BRAILLE PATTERN DOTS-123467;So;0;L;;;;;N;;;;; +2870;BRAILLE PATTERN DOTS-567;So;0;L;;;;;N;;;;; +2871;BRAILLE PATTERN DOTS-1567;So;0;L;;;;;N;;;;; +2872;BRAILLE PATTERN DOTS-2567;So;0;L;;;;;N;;;;; +2873;BRAILLE PATTERN DOTS-12567;So;0;L;;;;;N;;;;; +2874;BRAILLE PATTERN DOTS-3567;So;0;L;;;;;N;;;;; +2875;BRAILLE PATTERN DOTS-13567;So;0;L;;;;;N;;;;; +2876;BRAILLE PATTERN DOTS-23567;So;0;L;;;;;N;;;;; +2877;BRAILLE PATTERN DOTS-123567;So;0;L;;;;;N;;;;; +2878;BRAILLE PATTERN DOTS-4567;So;0;L;;;;;N;;;;; +2879;BRAILLE PATTERN DOTS-14567;So;0;L;;;;;N;;;;; +287A;BRAILLE PATTERN DOTS-24567;So;0;L;;;;;N;;;;; +287B;BRAILLE PATTERN DOTS-124567;So;0;L;;;;;N;;;;; +287C;BRAILLE PATTERN DOTS-34567;So;0;L;;;;;N;;;;; +287D;BRAILLE PATTERN DOTS-134567;So;0;L;;;;;N;;;;; +287E;BRAILLE PATTERN DOTS-234567;So;0;L;;;;;N;;;;; +287F;BRAILLE PATTERN DOTS-1234567;So;0;L;;;;;N;;;;; +2880;BRAILLE PATTERN DOTS-8;So;0;L;;;;;N;;;;; +2881;BRAILLE PATTERN DOTS-18;So;0;L;;;;;N;;;;; +2882;BRAILLE PATTERN DOTS-28;So;0;L;;;;;N;;;;; +2883;BRAILLE PATTERN DOTS-128;So;0;L;;;;;N;;;;; +2884;BRAILLE PATTERN DOTS-38;So;0;L;;;;;N;;;;; +2885;BRAILLE PATTERN DOTS-138;So;0;L;;;;;N;;;;; +2886;BRAILLE PATTERN DOTS-238;So;0;L;;;;;N;;;;; +2887;BRAILLE PATTERN DOTS-1238;So;0;L;;;;;N;;;;; +2888;BRAILLE PATTERN DOTS-48;So;0;L;;;;;N;;;;; +2889;BRAILLE PATTERN DOTS-148;So;0;L;;;;;N;;;;; +288A;BRAILLE PATTERN DOTS-248;So;0;L;;;;;N;;;;; +288B;BRAILLE PATTERN DOTS-1248;So;0;L;;;;;N;;;;; +288C;BRAILLE PATTERN DOTS-348;So;0;L;;;;;N;;;;; +288D;BRAILLE PATTERN DOTS-1348;So;0;L;;;;;N;;;;; +288E;BRAILLE PATTERN DOTS-2348;So;0;L;;;;;N;;;;; +288F;BRAILLE PATTERN DOTS-12348;So;0;L;;;;;N;;;;; +2890;BRAILLE PATTERN DOTS-58;So;0;L;;;;;N;;;;; +2891;BRAILLE PATTERN DOTS-158;So;0;L;;;;;N;;;;; +2892;BRAILLE PATTERN DOTS-258;So;0;L;;;;;N;;;;; +2893;BRAILLE PATTERN DOTS-1258;So;0;L;;;;;N;;;;; +2894;BRAILLE PATTERN DOTS-358;So;0;L;;;;;N;;;;; +2895;BRAILLE PATTERN DOTS-1358;So;0;L;;;;;N;;;;; +2896;BRAILLE PATTERN DOTS-2358;So;0;L;;;;;N;;;;; +2897;BRAILLE PATTERN DOTS-12358;So;0;L;;;;;N;;;;; +2898;BRAILLE PATTERN DOTS-458;So;0;L;;;;;N;;;;; +2899;BRAILLE PATTERN DOTS-1458;So;0;L;;;;;N;;;;; +289A;BRAILLE PATTERN DOTS-2458;So;0;L;;;;;N;;;;; +289B;BRAILLE PATTERN DOTS-12458;So;0;L;;;;;N;;;;; +289C;BRAILLE PATTERN DOTS-3458;So;0;L;;;;;N;;;;; +289D;BRAILLE PATTERN DOTS-13458;So;0;L;;;;;N;;;;; +289E;BRAILLE PATTERN DOTS-23458;So;0;L;;;;;N;;;;; +289F;BRAILLE PATTERN DOTS-123458;So;0;L;;;;;N;;;;; +28A0;BRAILLE PATTERN DOTS-68;So;0;L;;;;;N;;;;; +28A1;BRAILLE PATTERN DOTS-168;So;0;L;;;;;N;;;;; +28A2;BRAILLE PATTERN DOTS-268;So;0;L;;;;;N;;;;; +28A3;BRAILLE PATTERN DOTS-1268;So;0;L;;;;;N;;;;; +28A4;BRAILLE PATTERN DOTS-368;So;0;L;;;;;N;;;;; +28A5;BRAILLE PATTERN DOTS-1368;So;0;L;;;;;N;;;;; +28A6;BRAILLE PATTERN DOTS-2368;So;0;L;;;;;N;;;;; +28A7;BRAILLE PATTERN DOTS-12368;So;0;L;;;;;N;;;;; +28A8;BRAILLE PATTERN DOTS-468;So;0;L;;;;;N;;;;; +28A9;BRAILLE PATTERN DOTS-1468;So;0;L;;;;;N;;;;; +28AA;BRAILLE PATTERN DOTS-2468;So;0;L;;;;;N;;;;; +28AB;BRAILLE PATTERN DOTS-12468;So;0;L;;;;;N;;;;; +28AC;BRAILLE PATTERN DOTS-3468;So;0;L;;;;;N;;;;; +28AD;BRAILLE PATTERN DOTS-13468;So;0;L;;;;;N;;;;; +28AE;BRAILLE PATTERN DOTS-23468;So;0;L;;;;;N;;;;; +28AF;BRAILLE PATTERN DOTS-123468;So;0;L;;;;;N;;;;; +28B0;BRAILLE PATTERN DOTS-568;So;0;L;;;;;N;;;;; +28B1;BRAILLE PATTERN DOTS-1568;So;0;L;;;;;N;;;;; +28B2;BRAILLE PATTERN DOTS-2568;So;0;L;;;;;N;;;;; +28B3;BRAILLE PATTERN DOTS-12568;So;0;L;;;;;N;;;;; +28B4;BRAILLE PATTERN DOTS-3568;So;0;L;;;;;N;;;;; +28B5;BRAILLE PATTERN DOTS-13568;So;0;L;;;;;N;;;;; +28B6;BRAILLE PATTERN DOTS-23568;So;0;L;;;;;N;;;;; +28B7;BRAILLE PATTERN DOTS-123568;So;0;L;;;;;N;;;;; +28B8;BRAILLE PATTERN DOTS-4568;So;0;L;;;;;N;;;;; +28B9;BRAILLE PATTERN DOTS-14568;So;0;L;;;;;N;;;;; +28BA;BRAILLE PATTERN DOTS-24568;So;0;L;;;;;N;;;;; +28BB;BRAILLE PATTERN DOTS-124568;So;0;L;;;;;N;;;;; +28BC;BRAILLE PATTERN DOTS-34568;So;0;L;;;;;N;;;;; +28BD;BRAILLE PATTERN DOTS-134568;So;0;L;;;;;N;;;;; +28BE;BRAILLE PATTERN DOTS-234568;So;0;L;;;;;N;;;;; +28BF;BRAILLE PATTERN DOTS-1234568;So;0;L;;;;;N;;;;; +28C0;BRAILLE PATTERN DOTS-78;So;0;L;;;;;N;;;;; +28C1;BRAILLE PATTERN DOTS-178;So;0;L;;;;;N;;;;; +28C2;BRAILLE PATTERN DOTS-278;So;0;L;;;;;N;;;;; +28C3;BRAILLE PATTERN DOTS-1278;So;0;L;;;;;N;;;;; +28C4;BRAILLE PATTERN DOTS-378;So;0;L;;;;;N;;;;; +28C5;BRAILLE PATTERN DOTS-1378;So;0;L;;;;;N;;;;; +28C6;BRAILLE PATTERN DOTS-2378;So;0;L;;;;;N;;;;; +28C7;BRAILLE PATTERN DOTS-12378;So;0;L;;;;;N;;;;; +28C8;BRAILLE PATTERN DOTS-478;So;0;L;;;;;N;;;;; +28C9;BRAILLE PATTERN DOTS-1478;So;0;L;;;;;N;;;;; +28CA;BRAILLE PATTERN DOTS-2478;So;0;L;;;;;N;;;;; +28CB;BRAILLE PATTERN DOTS-12478;So;0;L;;;;;N;;;;; +28CC;BRAILLE PATTERN DOTS-3478;So;0;L;;;;;N;;;;; +28CD;BRAILLE PATTERN DOTS-13478;So;0;L;;;;;N;;;;; +28CE;BRAILLE PATTERN DOTS-23478;So;0;L;;;;;N;;;;; +28CF;BRAILLE PATTERN DOTS-123478;So;0;L;;;;;N;;;;; +28D0;BRAILLE PATTERN DOTS-578;So;0;L;;;;;N;;;;; +28D1;BRAILLE PATTERN DOTS-1578;So;0;L;;;;;N;;;;; +28D2;BRAILLE PATTERN DOTS-2578;So;0;L;;;;;N;;;;; +28D3;BRAILLE PATTERN DOTS-12578;So;0;L;;;;;N;;;;; +28D4;BRAILLE PATTERN DOTS-3578;So;0;L;;;;;N;;;;; +28D5;BRAILLE PATTERN DOTS-13578;So;0;L;;;;;N;;;;; +28D6;BRAILLE PATTERN DOTS-23578;So;0;L;;;;;N;;;;; +28D7;BRAILLE PATTERN DOTS-123578;So;0;L;;;;;N;;;;; +28D8;BRAILLE PATTERN DOTS-4578;So;0;L;;;;;N;;;;; +28D9;BRAILLE PATTERN DOTS-14578;So;0;L;;;;;N;;;;; +28DA;BRAILLE PATTERN DOTS-24578;So;0;L;;;;;N;;;;; +28DB;BRAILLE PATTERN DOTS-124578;So;0;L;;;;;N;;;;; +28DC;BRAILLE PATTERN DOTS-34578;So;0;L;;;;;N;;;;; +28DD;BRAILLE PATTERN DOTS-134578;So;0;L;;;;;N;;;;; +28DE;BRAILLE PATTERN DOTS-234578;So;0;L;;;;;N;;;;; +28DF;BRAILLE PATTERN DOTS-1234578;So;0;L;;;;;N;;;;; +28E0;BRAILLE PATTERN DOTS-678;So;0;L;;;;;N;;;;; +28E1;BRAILLE PATTERN DOTS-1678;So;0;L;;;;;N;;;;; +28E2;BRAILLE PATTERN DOTS-2678;So;0;L;;;;;N;;;;; +28E3;BRAILLE PATTERN DOTS-12678;So;0;L;;;;;N;;;;; +28E4;BRAILLE PATTERN DOTS-3678;So;0;L;;;;;N;;;;; +28E5;BRAILLE PATTERN DOTS-13678;So;0;L;;;;;N;;;;; +28E6;BRAILLE PATTERN DOTS-23678;So;0;L;;;;;N;;;;; +28E7;BRAILLE PATTERN DOTS-123678;So;0;L;;;;;N;;;;; +28E8;BRAILLE PATTERN DOTS-4678;So;0;L;;;;;N;;;;; +28E9;BRAILLE PATTERN DOTS-14678;So;0;L;;;;;N;;;;; +28EA;BRAILLE PATTERN DOTS-24678;So;0;L;;;;;N;;;;; +28EB;BRAILLE PATTERN DOTS-124678;So;0;L;;;;;N;;;;; +28EC;BRAILLE PATTERN DOTS-34678;So;0;L;;;;;N;;;;; +28ED;BRAILLE PATTERN DOTS-134678;So;0;L;;;;;N;;;;; +28EE;BRAILLE PATTERN DOTS-234678;So;0;L;;;;;N;;;;; +28EF;BRAILLE PATTERN DOTS-1234678;So;0;L;;;;;N;;;;; +28F0;BRAILLE PATTERN DOTS-5678;So;0;L;;;;;N;;;;; +28F1;BRAILLE PATTERN DOTS-15678;So;0;L;;;;;N;;;;; +28F2;BRAILLE PATTERN DOTS-25678;So;0;L;;;;;N;;;;; +28F3;BRAILLE PATTERN DOTS-125678;So;0;L;;;;;N;;;;; +28F4;BRAILLE PATTERN DOTS-35678;So;0;L;;;;;N;;;;; +28F5;BRAILLE PATTERN DOTS-135678;So;0;L;;;;;N;;;;; +28F6;BRAILLE PATTERN DOTS-235678;So;0;L;;;;;N;;;;; +28F7;BRAILLE PATTERN DOTS-1235678;So;0;L;;;;;N;;;;; +28F8;BRAILLE PATTERN DOTS-45678;So;0;L;;;;;N;;;;; +28F9;BRAILLE PATTERN DOTS-145678;So;0;L;;;;;N;;;;; +28FA;BRAILLE PATTERN DOTS-245678;So;0;L;;;;;N;;;;; +28FB;BRAILLE PATTERN DOTS-1245678;So;0;L;;;;;N;;;;; +28FC;BRAILLE PATTERN DOTS-345678;So;0;L;;;;;N;;;;; +28FD;BRAILLE PATTERN DOTS-1345678;So;0;L;;;;;N;;;;; +28FE;BRAILLE PATTERN DOTS-2345678;So;0;L;;;;;N;;;;; +28FF;BRAILLE PATTERN DOTS-12345678;So;0;L;;;;;N;;;;; 2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; 2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; @@ -8043,6 +9092,564 @@ 2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;; 2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;; +2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; +2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; +2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;; +2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;; +2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; +2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; +2B14;SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +2B15;SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;; +2B16;DIAMOND WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;; +2B17;DIAMOND WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;; +2B18;DIAMOND WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;; +2B19;DIAMOND WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;; +2B1A;DOTTED SQUARE;So;0;ON;;;;;N;;;;; +2B1B;BLACK LARGE SQUARE;So;0;ON;;;;;N;;;;; +2B1C;WHITE LARGE SQUARE;So;0;ON;;;;;N;;;;; +2B1D;BLACK VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; +2B1E;WHITE VERY SMALL SQUARE;So;0;ON;;;;;N;;;;; +2B1F;BLACK PENTAGON;So;0;ON;;;;;N;;;;; +2B20;WHITE PENTAGON;So;0;ON;;;;;N;;;;; +2B21;WHITE HEXAGON;So;0;ON;;;;;N;;;;; +2B22;BLACK HEXAGON;So;0;ON;;;;;N;;;;; +2B23;HORIZONTAL BLACK HEXAGON;So;0;ON;;;;;N;;;;; +2B24;BLACK LARGE CIRCLE;So;0;ON;;;;;N;;;;; +2B25;BLACK MEDIUM DIAMOND;So;0;ON;;;;;N;;;;; +2B26;WHITE MEDIUM DIAMOND;So;0;ON;;;;;N;;;;; +2B27;BLACK MEDIUM LOZENGE;So;0;ON;;;;;N;;;;; +2B28;WHITE MEDIUM LOZENGE;So;0;ON;;;;;N;;;;; +2B29;BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;; +2B2A;BLACK SMALL LOZENGE;So;0;ON;;;;;N;;;;; +2B2B;WHITE SMALL LOZENGE;So;0;ON;;;;;N;;;;; +2B2C;BLACK HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;; +2B2D;WHITE HORIZONTAL ELLIPSE;So;0;ON;;;;;N;;;;; +2B2E;BLACK VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;; +2B2F;WHITE VERTICAL ELLIPSE;So;0;ON;;;;;N;;;;; +2B30;LEFT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;; +2B31;THREE LEFTWARDS ARROWS;Sm;0;ON;;;;;N;;;;; +2B32;LEFT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;; +2B33;LONG LEFTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;; +2B34;LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B35;LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B36;LEFTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;; +2B37;LEFTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;; +2B38;LEFTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;; +2B39;LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B3A;LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B3B;LEFTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;; +2B3C;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B3D;LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;; +2B3E;LEFTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;; +2B3F;WAVE ARROW POINTING DIRECTLY LEFT;Sm;0;ON;;;;;N;;;;; +2B40;EQUALS SIGN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2B41;REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2B42;LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; +2B43;RIGHTWARDS ARROW THROUGH GREATER-THAN;Sm;0;ON;;;;;N;;;;; +2B44;RIGHTWARDS ARROW THROUGH SUPERSET;Sm;0;ON;;;;;N;;;;; +2B45;LEFTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;; +2B46;RIGHTWARDS QUADRUPLE ARROW;So;0;ON;;;;;N;;;;; +2B47;REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2B48;RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; +2B49;TILDE OPERATOR ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;; +2B4A;LEFTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;; +2B4B;LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; +2B4C;RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;; +2B50;WHITE MEDIUM STAR;So;0;ON;;;;;N;;;;; +2B51;BLACK SMALL STAR;So;0;ON;;;;;N;;;;; +2B52;WHITE SMALL STAR;So;0;ON;;;;;N;;;;; +2B53;BLACK RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;; +2B54;WHITE RIGHT-POINTING PENTAGON;So;0;ON;;;;;N;;;;; +2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30; +2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31; +2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32; +2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33; +2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34; +2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35; +2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36; +2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37; +2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38; +2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39; +2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A; +2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B; +2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C; +2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D; +2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E; +2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F; +2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40; +2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41; +2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42; +2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43; +2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44; +2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45; +2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46; +2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47; +2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48; +2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49; +2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A; +2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B; +2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C; +2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D; +2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E; +2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F; +2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50; +2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51; +2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52; +2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53; +2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54; +2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55; +2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56; +2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57; +2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58; +2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59; +2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A; +2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B; +2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C; +2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D; +2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E; +2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00 +2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01 +2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02 +2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03 +2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04 +2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05 +2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06 +2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07 +2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08 +2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09 +2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A +2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B +2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C +2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D +2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E +2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F +2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10 +2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11 +2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12 +2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13 +2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14 +2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15 +2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16 +2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17 +2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18 +2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19 +2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A +2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B +2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C +2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D +2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E +2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F +2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20 +2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21 +2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22 +2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23 +2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24 +2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25 +2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26 +2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27 +2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28 +2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29 +2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A +2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B +2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C +2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D +2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E +2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61; +2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60 +2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B; +2C63;LATIN CAPITAL LETTER P WITH STROKE;Lu;0;L;;;;;N;;;;1D7D; +2C64;LATIN CAPITAL LETTER R WITH TAIL;Lu;0;L;;;;;N;;;;027D; +2C65;LATIN SMALL LETTER A WITH STROKE;Ll;0;L;;;;;N;;;023A;;023A +2C66;LATIN SMALL LETTER T WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;023E;;023E +2C67;LATIN CAPITAL LETTER H WITH DESCENDER;Lu;0;L;;;;;N;;;;2C68; +2C68;LATIN SMALL LETTER H WITH DESCENDER;Ll;0;L;;;;;N;;;2C67;;2C67 +2C69;LATIN CAPITAL LETTER K WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6A; +2C6A;LATIN SMALL LETTER K WITH DESCENDER;Ll;0;L;;;;;N;;;2C69;;2C69 +2C6B;LATIN CAPITAL LETTER Z WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6C; +2C6C;LATIN SMALL LETTER Z WITH DESCENDER;Ll;0;L;;;;;N;;;2C6B;;2C6B +2C6D;LATIN CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;0251; +2C6E;LATIN CAPITAL LETTER M WITH HOOK;Lu;0;L;;;;;N;;;;0271; +2C6F;LATIN CAPITAL LETTER TURNED A;Lu;0;L;;;;;N;;;;0250; +2C71;LATIN SMALL LETTER V WITH RIGHT HOOK;Ll;0;L;;;;;N;;;;; +2C72;LATIN CAPITAL LETTER W WITH HOOK;Lu;0;L;;;;;N;;;;2C73; +2C73;LATIN SMALL LETTER W WITH HOOK;Ll;0;L;;;;;N;;;2C72;;2C72 +2C74;LATIN SMALL LETTER V WITH CURL;Ll;0;L;;;;;N;;;;; +2C75;LATIN CAPITAL LETTER HALF H;Lu;0;L;;;;;N;;;;2C76; +2C76;LATIN SMALL LETTER HALF H;Ll;0;L;;;;;N;;;2C75;;2C75 +2C77;LATIN SMALL LETTER TAILLESS PHI;Ll;0;L;;;;;N;;;;; +2C78;LATIN SMALL LETTER E WITH NOTCH;Ll;0;L;;;;;N;;;;; +2C79;LATIN SMALL LETTER TURNED R WITH TAIL;Ll;0;L;;;;;N;;;;; +2C7A;LATIN SMALL LETTER O WITH LOW RING INSIDE;Ll;0;L;;;;;N;;;;; +2C7B;LATIN LETTER SMALL CAPITAL TURNED E;Ll;0;L;;;;;N;;;;; +2C7C;LATIN SUBSCRIPT SMALL LETTER J;Ll;0;L;<sub> 006A;;;;N;;;;; +2C7D;MODIFIER LETTER CAPITAL V;Lm;0;L;<super> 0056;;;;N;;;;; +2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81; +2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80 +2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83; +2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82 +2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85; +2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84 +2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87; +2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86 +2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89; +2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88 +2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B; +2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A +2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D; +2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C +2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F; +2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E +2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91; +2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90 +2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93; +2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92 +2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95; +2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94 +2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97; +2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96 +2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99; +2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98 +2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B; +2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A +2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D; +2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C +2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F; +2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E +2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1; +2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0 +2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3; +2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2 +2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5; +2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4 +2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7; +2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6 +2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9; +2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8 +2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB; +2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA +2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD; +2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC +2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF; +2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE +2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1; +2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0 +2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3; +2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2 +2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5; +2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4 +2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7; +2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6 +2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9; +2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8 +2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB; +2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA +2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD; +2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC +2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF; +2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE +2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1; +2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0 +2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3; +2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2 +2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5; +2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4 +2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7; +2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6 +2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9; +2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8 +2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB; +2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA +2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD; +2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC +2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF; +2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE +2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1; +2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0 +2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3; +2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2 +2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5; +2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4 +2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7; +2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6 +2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9; +2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8 +2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB; +2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA +2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD; +2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC +2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF; +2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE +2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1; +2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0 +2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3; +2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2 +2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;; +2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;; +2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;; +2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;; +2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;; +2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;; +2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;; +2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;; +2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; +2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;; +2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;; +2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;; +2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;; +2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;; +2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;Khutsuri;10A0;;10A0 +2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;Khutsuri;10A1;;10A1 +2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;Khutsuri;10A2;;10A2 +2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;Khutsuri;10A3;;10A3 +2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;Khutsuri;10A4;;10A4 +2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;Khutsuri;10A5;;10A5 +2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;Khutsuri;10A6;;10A6 +2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;Khutsuri;10A7;;10A7 +2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;Khutsuri;10A8;;10A8 +2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;Khutsuri;10A9;;10A9 +2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;Khutsuri;10AA;;10AA +2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;Khutsuri;10AB;;10AB +2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;Khutsuri;10AC;;10AC +2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;Khutsuri;10AD;;10AD +2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;Khutsuri;10AE;;10AE +2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;Khutsuri;10AF;;10AF +2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;Khutsuri;10B0;;10B0 +2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;Khutsuri;10B1;;10B1 +2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;Khutsuri;10B2;;10B2 +2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;Khutsuri;10B3;;10B3 +2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;Khutsuri;10B4;;10B4 +2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;Khutsuri;10B5;;10B5 +2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;Khutsuri;10B6;;10B6 +2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;Khutsuri;10B7;;10B7 +2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;Khutsuri;10B8;;10B8 +2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;Khutsuri;10B9;;10B9 +2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;Khutsuri;10BA;;10BA +2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;Khutsuri;10BB;;10BB +2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;Khutsuri;10BC;;10BC +2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;Khutsuri;10BD;;10BD +2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;Khutsuri;10BE;;10BE +2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;Khutsuri;10BF;;10BF +2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;Khutsuri;10C0;;10C0 +2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;Khutsuri;10C1;;10C1 +2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;Khutsuri;10C2;;10C2 +2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;Khutsuri;10C3;;10C3 +2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;Khutsuri;10C4;;10C4 +2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;Khutsuri;10C5;;10C5 +2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;; +2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;; +2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;; +2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;; +2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;; +2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;; +2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;; +2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;; +2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;; +2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;; +2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;; +2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;; +2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;; +2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;; +2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;; +2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;; +2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;Tuareg yab;;; +2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;; +2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;; +2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;; +2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;; +2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;; +2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;; +2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;; +2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;; +2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;; +2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;; +2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;; +2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;; +2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;; +2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;; +2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;; +2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;; +2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;; +2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;; +2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;Tuareg yaw;;; +2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;; +2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;; +2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;; +2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;; +2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;Adrar yaj;;; +2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;; +2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;; +2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;; +2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;; +2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;; +2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;; +2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;; +2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;; +2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;; +2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;; +2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;; +2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;harpoon yaz;;; +2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;; +2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L;<super> 2D61;;;;N;;tamatart;;; +2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;; +2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;; +2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;; +2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;; +2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;; +2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;; +2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;; +2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;; +2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;; +2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;; +2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;; +2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;; +2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;; +2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;; +2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;; +2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;; +2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;; +2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;; +2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;; +2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;; +2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;; +2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;; +2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;; +2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;; +2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;; +2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;; +2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;; +2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;; +2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;; +2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;; +2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;; +2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;; +2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;; +2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;; +2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;; +2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;; +2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;; +2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;; +2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;; +2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;; +2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;; +2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;; +2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;; +2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;; +2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;; +2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;; +2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;; +2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;; +2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;; +2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;; +2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;; +2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;; +2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;; +2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;; +2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;; +2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;; +2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;; +2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;; +2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;; +2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;; +2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;; +2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;; +2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;; +2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;; +2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;; +2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;; +2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;; +2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;; +2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;; +2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;; +2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;; +2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;; +2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;; +2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;; +2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;; +2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;; +2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;; +2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;; +2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;; +2DE0;COMBINING CYRILLIC LETTER BE;Mn;230;NSM;;;;;N;;;;; +2DE1;COMBINING CYRILLIC LETTER VE;Mn;230;NSM;;;;;N;;;;; +2DE2;COMBINING CYRILLIC LETTER GHE;Mn;230;NSM;;;;;N;;;;; +2DE3;COMBINING CYRILLIC LETTER DE;Mn;230;NSM;;;;;N;;;;; +2DE4;COMBINING CYRILLIC LETTER ZHE;Mn;230;NSM;;;;;N;;;;; +2DE5;COMBINING CYRILLIC LETTER ZE;Mn;230;NSM;;;;;N;;;;; +2DE6;COMBINING CYRILLIC LETTER KA;Mn;230;NSM;;;;;N;;;;; +2DE7;COMBINING CYRILLIC LETTER EL;Mn;230;NSM;;;;;N;;;;; +2DE8;COMBINING CYRILLIC LETTER EM;Mn;230;NSM;;;;;N;;;;; +2DE9;COMBINING CYRILLIC LETTER EN;Mn;230;NSM;;;;;N;;;;; +2DEA;COMBINING CYRILLIC LETTER O;Mn;230;NSM;;;;;N;;;;; +2DEB;COMBINING CYRILLIC LETTER PE;Mn;230;NSM;;;;;N;;;;; +2DEC;COMBINING CYRILLIC LETTER ER;Mn;230;NSM;;;;;N;;;;; +2DED;COMBINING CYRILLIC LETTER ES;Mn;230;NSM;;;;;N;;;;; +2DEE;COMBINING CYRILLIC LETTER TE;Mn;230;NSM;;;;;N;;;;; +2DEF;COMBINING CYRILLIC LETTER HA;Mn;230;NSM;;;;;N;;;;; +2DF0;COMBINING CYRILLIC LETTER TSE;Mn;230;NSM;;;;;N;;;;; +2DF1;COMBINING CYRILLIC LETTER CHE;Mn;230;NSM;;;;;N;;;;; +2DF2;COMBINING CYRILLIC LETTER SHA;Mn;230;NSM;;;;;N;;;;; +2DF3;COMBINING CYRILLIC LETTER SHCHA;Mn;230;NSM;;;;;N;;;;; +2DF4;COMBINING CYRILLIC LETTER FITA;Mn;230;NSM;;;;;N;;;;; +2DF5;COMBINING CYRILLIC LETTER ES-TE;Mn;230;NSM;;;;;N;;;;; +2DF6;COMBINING CYRILLIC LETTER A;Mn;230;NSM;;;;;N;;;;; +2DF7;COMBINING CYRILLIC LETTER IE;Mn;230;NSM;;;;;N;;;;; +2DF8;COMBINING CYRILLIC LETTER DJERV;Mn;230;NSM;;;;;N;;;;; +2DF9;COMBINING CYRILLIC LETTER MONOGRAPH UK;Mn;230;NSM;;;;;N;;;;; +2DFA;COMBINING CYRILLIC LETTER YAT;Mn;230;NSM;;;;;N;;;;; +2DFB;COMBINING CYRILLIC LETTER YU;Mn;230;NSM;;;;;N;;;;; +2DFC;COMBINING CYRILLIC LETTER IOTIFIED A;Mn;230;NSM;;;;;N;;;;; +2DFD;COMBINING CYRILLIC LETTER LITTLE YUS;Mn;230;NSM;;;;;N;;;;; +2DFE;COMBINING CYRILLIC LETTER BIG YUS;Mn;230;NSM;;;;;N;;;;; +2DFF;COMBINING CYRILLIC LETTER IOTIFIED BIG YUS;Mn;230;NSM;;;;;N;;;;; +2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; +2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;; +2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; +2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;; +2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;; +2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;; +2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;; +2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;; +2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;; +2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;; +2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; +2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;; +2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;; +2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;; +2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;; +2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;; +2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;; +2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;; +2E18;INVERTED INTERROBANG;Po;0;ON;;;;;N;;;;; +2E19;PALM BRANCH;Po;0;ON;;;;;N;;;;; +2E1A;HYPHEN WITH DIAERESIS;Pd;0;ON;;;;;N;;;;; +2E1B;TILDE WITH RING ABOVE;Po;0;ON;;;;;N;;;;; +2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;; +2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;; +2E1E;TILDE WITH DOT ABOVE;Po;0;ON;;;;;N;;;;; +2E1F;TILDE WITH DOT BELOW;Po;0;ON;;;;;N;;;;; +2E20;LEFT VERTICAL BAR WITH QUILL;Pi;0;ON;;;;;Y;;;;; +2E21;RIGHT VERTICAL BAR WITH QUILL;Pf;0;ON;;;;;Y;;;;; +2E22;TOP LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;; +2E23;TOP RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;; +2E24;BOTTOM LEFT HALF BRACKET;Ps;0;ON;;;;;Y;;;;; +2E25;BOTTOM RIGHT HALF BRACKET;Pe;0;ON;;;;;Y;;;;; +2E26;LEFT SIDEWAYS U BRACKET;Ps;0;ON;;;;;Y;;;;; +2E27;RIGHT SIDEWAYS U BRACKET;Pe;0;ON;;;;;Y;;;;; +2E28;LEFT DOUBLE PARENTHESIS;Ps;0;ON;;;;;Y;;;;; +2E29;RIGHT DOUBLE PARENTHESIS;Pe;0;ON;;;;;Y;;;;; +2E2A;TWO DOTS OVER ONE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +2E2B;ONE DOT OVER TWO DOTS PUNCTUATION;Po;0;ON;;;;;N;;;;; +2E2C;SQUARED FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;; +2E2D;FIVE DOT MARK;Po;0;ON;;;;;N;;;;; +2E2E;REVERSED QUESTION MARK;Po;0;ON;;;;;N;;;;; +2E2F;VERTICAL TILDE;Lm;0;ON;;;;;N;;;;; +2E30;RING POINT;Po;0;ON;;;;;N;;;;; 2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;; 2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;; 2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;; @@ -8632,7 +10239,7 @@ 30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;; 30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;; 30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;; -30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;; +30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;; 30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;; 30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;; 30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;; @@ -8677,6 +10284,7 @@ 312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;; 312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;; 312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;; +312D;BOPOMOFO LETTER IH;Lo;0;L;;;;;N;;;;; 3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;; 3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;; 3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;; @@ -8811,6 +10419,42 @@ 31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;; 31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;; 31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;; +31C0;CJK STROKE T;So;0;ON;;;;;N;;;;; +31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;; +31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;; +31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;; +31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;; +31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;; +31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;; +31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;; +31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;; +31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;; +31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;; +31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;; +31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;; +31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;; +31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;; +31CF;CJK STROKE N;So;0;ON;;;;;N;;;;; +31D0;CJK STROKE H;So;0;ON;;;;;N;;;;; +31D1;CJK STROKE S;So;0;ON;;;;;N;;;;; +31D2;CJK STROKE P;So;0;ON;;;;;N;;;;; +31D3;CJK STROKE SP;So;0;ON;;;;;N;;;;; +31D4;CJK STROKE D;So;0;ON;;;;;N;;;;; +31D5;CJK STROKE HZ;So;0;ON;;;;;N;;;;; +31D6;CJK STROKE HG;So;0;ON;;;;;N;;;;; +31D7;CJK STROKE SZ;So;0;ON;;;;;N;;;;; +31D8;CJK STROKE SWZ;So;0;ON;;;;;N;;;;; +31D9;CJK STROKE ST;So;0;ON;;;;;N;;;;; +31DA;CJK STROKE SG;So;0;ON;;;;;N;;;;; +31DB;CJK STROKE PD;So;0;ON;;;;;N;;;;; +31DC;CJK STROKE PZ;So;0;ON;;;;;N;;;;; +31DD;CJK STROKE TN;So;0;ON;;;;;N;;;;; +31DE;CJK STROKE SZZ;So;0;ON;;;;;N;;;;; +31DF;CJK STROKE SWG;So;0;ON;;;;;N;;;;; +31E0;CJK STROKE HXWG;So;0;ON;;;;;N;;;;; +31E1;CJK STROKE HZZZG;So;0;ON;;;;;N;;;;; +31E2;CJK STROKE PG;So;0;ON;;;;;N;;;;; +31E3;CJK STROKE Q;So;0;ON;;;;;N;;;;; 31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;; 31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;; 31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;; @@ -8940,6 +10584,7 @@ 327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;; 327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON;<circle> 110E 1161 11B7 1100 1169;;;;N;;;;; 327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON;<circle> 110C 116E 110B 1174;;;;N;;;;; +327E;CIRCLED HANGUL IEUNG U;So;0;ON;<circle> 110B 116E;;;;N;;;;; 327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;; 3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;; 3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;; @@ -9391,7 +11036,7 @@ 4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;; 4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;; 4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;; -9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;; +9FC3;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;; A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;; A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;; A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;; @@ -9413,7 +11058,7 @@ A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;; A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;; A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;; -A015;YI SYLLABLE WU;Lo;0;L;;;;;N;;;;; +A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;; A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;; A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;; A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;; @@ -10612,6 +12257,879 @@ A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;; A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;; A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;; +A500;VAI SYLLABLE EE;Lo;0;L;;;;;N;;;;; +A501;VAI SYLLABLE EEN;Lo;0;L;;;;;N;;;;; +A502;VAI SYLLABLE HEE;Lo;0;L;;;;;N;;;;; +A503;VAI SYLLABLE WEE;Lo;0;L;;;;;N;;;;; +A504;VAI SYLLABLE WEEN;Lo;0;L;;;;;N;;;;; +A505;VAI SYLLABLE PEE;Lo;0;L;;;;;N;;;;; +A506;VAI SYLLABLE BHEE;Lo;0;L;;;;;N;;;;; +A507;VAI SYLLABLE BEE;Lo;0;L;;;;;N;;;;; +A508;VAI SYLLABLE MBEE;Lo;0;L;;;;;N;;;;; +A509;VAI SYLLABLE KPEE;Lo;0;L;;;;;N;;;;; +A50A;VAI SYLLABLE MGBEE;Lo;0;L;;;;;N;;;;; +A50B;VAI SYLLABLE GBEE;Lo;0;L;;;;;N;;;;; +A50C;VAI SYLLABLE FEE;Lo;0;L;;;;;N;;;;; +A50D;VAI SYLLABLE VEE;Lo;0;L;;;;;N;;;;; +A50E;VAI SYLLABLE TEE;Lo;0;L;;;;;N;;;;; +A50F;VAI SYLLABLE THEE;Lo;0;L;;;;;N;;;;; +A510;VAI SYLLABLE DHEE;Lo;0;L;;;;;N;;;;; +A511;VAI SYLLABLE DHHEE;Lo;0;L;;;;;N;;;;; +A512;VAI SYLLABLE LEE;Lo;0;L;;;;;N;;;;; +A513;VAI SYLLABLE REE;Lo;0;L;;;;;N;;;;; +A514;VAI SYLLABLE DEE;Lo;0;L;;;;;N;;;;; +A515;VAI SYLLABLE NDEE;Lo;0;L;;;;;N;;;;; +A516;VAI SYLLABLE SEE;Lo;0;L;;;;;N;;;;; +A517;VAI SYLLABLE SHEE;Lo;0;L;;;;;N;;;;; +A518;VAI SYLLABLE ZEE;Lo;0;L;;;;;N;;;;; +A519;VAI SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;; +A51A;VAI SYLLABLE CEE;Lo;0;L;;;;;N;;;;; +A51B;VAI SYLLABLE JEE;Lo;0;L;;;;;N;;;;; +A51C;VAI SYLLABLE NJEE;Lo;0;L;;;;;N;;;;; +A51D;VAI SYLLABLE YEE;Lo;0;L;;;;;N;;;;; +A51E;VAI SYLLABLE KEE;Lo;0;L;;;;;N;;;;; +A51F;VAI SYLLABLE NGGEE;Lo;0;L;;;;;N;;;;; +A520;VAI SYLLABLE GEE;Lo;0;L;;;;;N;;;;; +A521;VAI SYLLABLE MEE;Lo;0;L;;;;;N;;;;; +A522;VAI SYLLABLE NEE;Lo;0;L;;;;;N;;;;; +A523;VAI SYLLABLE NYEE;Lo;0;L;;;;;N;;;;; +A524;VAI SYLLABLE I;Lo;0;L;;;;;N;;;;; +A525;VAI SYLLABLE IN;Lo;0;L;;;;;N;;;;; +A526;VAI SYLLABLE HI;Lo;0;L;;;;;N;;;;; +A527;VAI SYLLABLE HIN;Lo;0;L;;;;;N;;;;; +A528;VAI SYLLABLE WI;Lo;0;L;;;;;N;;;;; +A529;VAI SYLLABLE WIN;Lo;0;L;;;;;N;;;;; +A52A;VAI SYLLABLE PI;Lo;0;L;;;;;N;;;;; +A52B;VAI SYLLABLE BHI;Lo;0;L;;;;;N;;;;; +A52C;VAI SYLLABLE BI;Lo;0;L;;;;;N;;;;; +A52D;VAI SYLLABLE MBI;Lo;0;L;;;;;N;;;;; +A52E;VAI SYLLABLE KPI;Lo;0;L;;;;;N;;;;; +A52F;VAI SYLLABLE MGBI;Lo;0;L;;;;;N;;;;; +A530;VAI SYLLABLE GBI;Lo;0;L;;;;;N;;;;; +A531;VAI SYLLABLE FI;Lo;0;L;;;;;N;;;;; +A532;VAI SYLLABLE VI;Lo;0;L;;;;;N;;;;; +A533;VAI SYLLABLE TI;Lo;0;L;;;;;N;;;;; +A534;VAI SYLLABLE THI;Lo;0;L;;;;;N;;;;; +A535;VAI SYLLABLE DHI;Lo;0;L;;;;;N;;;;; +A536;VAI SYLLABLE DHHI;Lo;0;L;;;;;N;;;;; +A537;VAI SYLLABLE LI;Lo;0;L;;;;;N;;;;; +A538;VAI SYLLABLE RI;Lo;0;L;;;;;N;;;;; +A539;VAI SYLLABLE DI;Lo;0;L;;;;;N;;;;; +A53A;VAI SYLLABLE NDI;Lo;0;L;;;;;N;;;;; +A53B;VAI SYLLABLE SI;Lo;0;L;;;;;N;;;;; +A53C;VAI SYLLABLE SHI;Lo;0;L;;;;;N;;;;; +A53D;VAI SYLLABLE ZI;Lo;0;L;;;;;N;;;;; +A53E;VAI SYLLABLE ZHI;Lo;0;L;;;;;N;;;;; +A53F;VAI SYLLABLE CI;Lo;0;L;;;;;N;;;;; +A540;VAI SYLLABLE JI;Lo;0;L;;;;;N;;;;; +A541;VAI SYLLABLE NJI;Lo;0;L;;;;;N;;;;; +A542;VAI SYLLABLE YI;Lo;0;L;;;;;N;;;;; +A543;VAI SYLLABLE KI;Lo;0;L;;;;;N;;;;; +A544;VAI SYLLABLE NGGI;Lo;0;L;;;;;N;;;;; +A545;VAI SYLLABLE GI;Lo;0;L;;;;;N;;;;; +A546;VAI SYLLABLE MI;Lo;0;L;;;;;N;;;;; +A547;VAI SYLLABLE NI;Lo;0;L;;;;;N;;;;; +A548;VAI SYLLABLE NYI;Lo;0;L;;;;;N;;;;; +A549;VAI SYLLABLE A;Lo;0;L;;;;;N;;;;; +A54A;VAI SYLLABLE AN;Lo;0;L;;;;;N;;;;; +A54B;VAI SYLLABLE NGAN;Lo;0;L;;;;;N;;;;; +A54C;VAI SYLLABLE HA;Lo;0;L;;;;;N;;;;; +A54D;VAI SYLLABLE HAN;Lo;0;L;;;;;N;;;;; +A54E;VAI SYLLABLE WA;Lo;0;L;;;;;N;;;;; +A54F;VAI SYLLABLE WAN;Lo;0;L;;;;;N;;;;; +A550;VAI SYLLABLE PA;Lo;0;L;;;;;N;;;;; +A551;VAI SYLLABLE BHA;Lo;0;L;;;;;N;;;;; +A552;VAI SYLLABLE BA;Lo;0;L;;;;;N;;;;; +A553;VAI SYLLABLE MBA;Lo;0;L;;;;;N;;;;; +A554;VAI SYLLABLE KPA;Lo;0;L;;;;;N;;;;; +A555;VAI SYLLABLE KPAN;Lo;0;L;;;;;N;;;;; +A556;VAI SYLLABLE MGBA;Lo;0;L;;;;;N;;;;; +A557;VAI SYLLABLE GBA;Lo;0;L;;;;;N;;;;; +A558;VAI SYLLABLE FA;Lo;0;L;;;;;N;;;;; +A559;VAI SYLLABLE VA;Lo;0;L;;;;;N;;;;; +A55A;VAI SYLLABLE TA;Lo;0;L;;;;;N;;;;; +A55B;VAI SYLLABLE THA;Lo;0;L;;;;;N;;;;; +A55C;VAI SYLLABLE DHA;Lo;0;L;;;;;N;;;;; +A55D;VAI SYLLABLE DHHA;Lo;0;L;;;;;N;;;;; +A55E;VAI SYLLABLE LA;Lo;0;L;;;;;N;;;;; +A55F;VAI SYLLABLE RA;Lo;0;L;;;;;N;;;;; +A560;VAI SYLLABLE DA;Lo;0;L;;;;;N;;;;; +A561;VAI SYLLABLE NDA;Lo;0;L;;;;;N;;;;; +A562;VAI SYLLABLE SA;Lo;0;L;;;;;N;;;;; +A563;VAI SYLLABLE SHA;Lo;0;L;;;;;N;;;;; +A564;VAI SYLLABLE ZA;Lo;0;L;;;;;N;;;;; +A565;VAI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;; +A566;VAI SYLLABLE CA;Lo;0;L;;;;;N;;;;; +A567;VAI SYLLABLE JA;Lo;0;L;;;;;N;;;;; +A568;VAI SYLLABLE NJA;Lo;0;L;;;;;N;;;;; +A569;VAI SYLLABLE YA;Lo;0;L;;;;;N;;;;; +A56A;VAI SYLLABLE KA;Lo;0;L;;;;;N;;;;; +A56B;VAI SYLLABLE KAN;Lo;0;L;;;;;N;;;;; +A56C;VAI SYLLABLE NGGA;Lo;0;L;;;;;N;;;;; +A56D;VAI SYLLABLE GA;Lo;0;L;;;;;N;;;;; +A56E;VAI SYLLABLE MA;Lo;0;L;;;;;N;;;;; +A56F;VAI SYLLABLE NA;Lo;0;L;;;;;N;;;;; +A570;VAI SYLLABLE NYA;Lo;0;L;;;;;N;;;;; +A571;VAI SYLLABLE OO;Lo;0;L;;;;;N;;;;; +A572;VAI SYLLABLE OON;Lo;0;L;;;;;N;;;;; +A573;VAI SYLLABLE HOO;Lo;0;L;;;;;N;;;;; +A574;VAI SYLLABLE WOO;Lo;0;L;;;;;N;;;;; +A575;VAI SYLLABLE WOON;Lo;0;L;;;;;N;;;;; +A576;VAI SYLLABLE POO;Lo;0;L;;;;;N;;;;; +A577;VAI SYLLABLE BHOO;Lo;0;L;;;;;N;;;;; +A578;VAI SYLLABLE BOO;Lo;0;L;;;;;N;;;;; +A579;VAI SYLLABLE MBOO;Lo;0;L;;;;;N;;;;; +A57A;VAI SYLLABLE KPOO;Lo;0;L;;;;;N;;;;; +A57B;VAI SYLLABLE MGBOO;Lo;0;L;;;;;N;;;;; +A57C;VAI SYLLABLE GBOO;Lo;0;L;;;;;N;;;;; +A57D;VAI SYLLABLE FOO;Lo;0;L;;;;;N;;;;; +A57E;VAI SYLLABLE VOO;Lo;0;L;;;;;N;;;;; +A57F;VAI SYLLABLE TOO;Lo;0;L;;;;;N;;;;; +A580;VAI SYLLABLE THOO;Lo;0;L;;;;;N;;;;; +A581;VAI SYLLABLE DHOO;Lo;0;L;;;;;N;;;;; +A582;VAI SYLLABLE DHHOO;Lo;0;L;;;;;N;;;;; +A583;VAI SYLLABLE LOO;Lo;0;L;;;;;N;;;;; +A584;VAI SYLLABLE ROO;Lo;0;L;;;;;N;;;;; +A585;VAI SYLLABLE DOO;Lo;0;L;;;;;N;;;;; +A586;VAI SYLLABLE NDOO;Lo;0;L;;;;;N;;;;; +A587;VAI SYLLABLE SOO;Lo;0;L;;;;;N;;;;; +A588;VAI SYLLABLE SHOO;Lo;0;L;;;;;N;;;;; +A589;VAI SYLLABLE ZOO;Lo;0;L;;;;;N;;;;; +A58A;VAI SYLLABLE ZHOO;Lo;0;L;;;;;N;;;;; +A58B;VAI SYLLABLE COO;Lo;0;L;;;;;N;;;;; +A58C;VAI SYLLABLE JOO;Lo;0;L;;;;;N;;;;; +A58D;VAI SYLLABLE NJOO;Lo;0;L;;;;;N;;;;; +A58E;VAI SYLLABLE YOO;Lo;0;L;;;;;N;;;;; +A58F;VAI SYLLABLE KOO;Lo;0;L;;;;;N;;;;; +A590;VAI SYLLABLE NGGOO;Lo;0;L;;;;;N;;;;; +A591;VAI SYLLABLE GOO;Lo;0;L;;;;;N;;;;; +A592;VAI SYLLABLE MOO;Lo;0;L;;;;;N;;;;; +A593;VAI SYLLABLE NOO;Lo;0;L;;;;;N;;;;; +A594;VAI SYLLABLE NYOO;Lo;0;L;;;;;N;;;;; +A595;VAI SYLLABLE U;Lo;0;L;;;;;N;;;;; +A596;VAI SYLLABLE UN;Lo;0;L;;;;;N;;;;; +A597;VAI SYLLABLE HU;Lo;0;L;;;;;N;;;;; +A598;VAI SYLLABLE HUN;Lo;0;L;;;;;N;;;;; +A599;VAI SYLLABLE WU;Lo;0;L;;;;;N;;;;; +A59A;VAI SYLLABLE WUN;Lo;0;L;;;;;N;;;;; +A59B;VAI SYLLABLE PU;Lo;0;L;;;;;N;;;;; +A59C;VAI SYLLABLE BHU;Lo;0;L;;;;;N;;;;; +A59D;VAI SYLLABLE BU;Lo;0;L;;;;;N;;;;; +A59E;VAI SYLLABLE MBU;Lo;0;L;;;;;N;;;;; +A59F;VAI SYLLABLE KPU;Lo;0;L;;;;;N;;;;; +A5A0;VAI SYLLABLE MGBU;Lo;0;L;;;;;N;;;;; +A5A1;VAI SYLLABLE GBU;Lo;0;L;;;;;N;;;;; +A5A2;VAI SYLLABLE FU;Lo;0;L;;;;;N;;;;; +A5A3;VAI SYLLABLE VU;Lo;0;L;;;;;N;;;;; +A5A4;VAI SYLLABLE TU;Lo;0;L;;;;;N;;;;; +A5A5;VAI SYLLABLE THU;Lo;0;L;;;;;N;;;;; +A5A6;VAI SYLLABLE DHU;Lo;0;L;;;;;N;;;;; +A5A7;VAI SYLLABLE DHHU;Lo;0;L;;;;;N;;;;; +A5A8;VAI SYLLABLE LU;Lo;0;L;;;;;N;;;;; +A5A9;VAI SYLLABLE RU;Lo;0;L;;;;;N;;;;; +A5AA;VAI SYLLABLE DU;Lo;0;L;;;;;N;;;;; +A5AB;VAI SYLLABLE NDU;Lo;0;L;;;;;N;;;;; +A5AC;VAI SYLLABLE SU;Lo;0;L;;;;;N;;;;; +A5AD;VAI SYLLABLE SHU;Lo;0;L;;;;;N;;;;; +A5AE;VAI SYLLABLE ZU;Lo;0;L;;;;;N;;;;; +A5AF;VAI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;; +A5B0;VAI SYLLABLE CU;Lo;0;L;;;;;N;;;;; +A5B1;VAI SYLLABLE JU;Lo;0;L;;;;;N;;;;; +A5B2;VAI SYLLABLE NJU;Lo;0;L;;;;;N;;;;; +A5B3;VAI SYLLABLE YU;Lo;0;L;;;;;N;;;;; +A5B4;VAI SYLLABLE KU;Lo;0;L;;;;;N;;;;; +A5B5;VAI SYLLABLE NGGU;Lo;0;L;;;;;N;;;;; +A5B6;VAI SYLLABLE GU;Lo;0;L;;;;;N;;;;; +A5B7;VAI SYLLABLE MU;Lo;0;L;;;;;N;;;;; +A5B8;VAI SYLLABLE NU;Lo;0;L;;;;;N;;;;; +A5B9;VAI SYLLABLE NYU;Lo;0;L;;;;;N;;;;; +A5BA;VAI SYLLABLE O;Lo;0;L;;;;;N;;;;; +A5BB;VAI SYLLABLE ON;Lo;0;L;;;;;N;;;;; +A5BC;VAI SYLLABLE NGON;Lo;0;L;;;;;N;;;;; +A5BD;VAI SYLLABLE HO;Lo;0;L;;;;;N;;;;; +A5BE;VAI SYLLABLE HON;Lo;0;L;;;;;N;;;;; +A5BF;VAI SYLLABLE WO;Lo;0;L;;;;;N;;;;; +A5C0;VAI SYLLABLE WON;Lo;0;L;;;;;N;;;;; +A5C1;VAI SYLLABLE PO;Lo;0;L;;;;;N;;;;; +A5C2;VAI SYLLABLE BHO;Lo;0;L;;;;;N;;;;; +A5C3;VAI SYLLABLE BO;Lo;0;L;;;;;N;;;;; +A5C4;VAI SYLLABLE MBO;Lo;0;L;;;;;N;;;;; +A5C5;VAI SYLLABLE KPO;Lo;0;L;;;;;N;;;;; +A5C6;VAI SYLLABLE MGBO;Lo;0;L;;;;;N;;;;; +A5C7;VAI SYLLABLE GBO;Lo;0;L;;;;;N;;;;; +A5C8;VAI SYLLABLE GBON;Lo;0;L;;;;;N;;;;; +A5C9;VAI SYLLABLE FO;Lo;0;L;;;;;N;;;;; +A5CA;VAI SYLLABLE VO;Lo;0;L;;;;;N;;;;; +A5CB;VAI SYLLABLE TO;Lo;0;L;;;;;N;;;;; +A5CC;VAI SYLLABLE THO;Lo;0;L;;;;;N;;;;; +A5CD;VAI SYLLABLE DHO;Lo;0;L;;;;;N;;;;; +A5CE;VAI SYLLABLE DHHO;Lo;0;L;;;;;N;;;;; +A5CF;VAI SYLLABLE LO;Lo;0;L;;;;;N;;;;; +A5D0;VAI SYLLABLE RO;Lo;0;L;;;;;N;;;;; +A5D1;VAI SYLLABLE DO;Lo;0;L;;;;;N;;;;; +A5D2;VAI SYLLABLE NDO;Lo;0;L;;;;;N;;;;; +A5D3;VAI SYLLABLE SO;Lo;0;L;;;;;N;;;;; +A5D4;VAI SYLLABLE SHO;Lo;0;L;;;;;N;;;;; +A5D5;VAI SYLLABLE ZO;Lo;0;L;;;;;N;;;;; +A5D6;VAI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;; +A5D7;VAI SYLLABLE CO;Lo;0;L;;;;;N;;;;; +A5D8;VAI SYLLABLE JO;Lo;0;L;;;;;N;;;;; +A5D9;VAI SYLLABLE NJO;Lo;0;L;;;;;N;;;;; +A5DA;VAI SYLLABLE YO;Lo;0;L;;;;;N;;;;; +A5DB;VAI SYLLABLE KO;Lo;0;L;;;;;N;;;;; +A5DC;VAI SYLLABLE NGGO;Lo;0;L;;;;;N;;;;; +A5DD;VAI SYLLABLE GO;Lo;0;L;;;;;N;;;;; +A5DE;VAI SYLLABLE MO;Lo;0;L;;;;;N;;;;; +A5DF;VAI SYLLABLE NO;Lo;0;L;;;;;N;;;;; +A5E0;VAI SYLLABLE NYO;Lo;0;L;;;;;N;;;;; +A5E1;VAI SYLLABLE E;Lo;0;L;;;;;N;;;;; +A5E2;VAI SYLLABLE EN;Lo;0;L;;;;;N;;;;; +A5E3;VAI SYLLABLE NGEN;Lo;0;L;;;;;N;;;;; +A5E4;VAI SYLLABLE HE;Lo;0;L;;;;;N;;;;; +A5E5;VAI SYLLABLE HEN;Lo;0;L;;;;;N;;;;; +A5E6;VAI SYLLABLE WE;Lo;0;L;;;;;N;;;;; +A5E7;VAI SYLLABLE WEN;Lo;0;L;;;;;N;;;;; +A5E8;VAI SYLLABLE PE;Lo;0;L;;;;;N;;;;; +A5E9;VAI SYLLABLE BHE;Lo;0;L;;;;;N;;;;; +A5EA;VAI SYLLABLE BE;Lo;0;L;;;;;N;;;;; +A5EB;VAI SYLLABLE MBE;Lo;0;L;;;;;N;;;;; +A5EC;VAI SYLLABLE KPE;Lo;0;L;;;;;N;;;;; +A5ED;VAI SYLLABLE KPEN;Lo;0;L;;;;;N;;;;; +A5EE;VAI SYLLABLE MGBE;Lo;0;L;;;;;N;;;;; +A5EF;VAI SYLLABLE GBE;Lo;0;L;;;;;N;;;;; +A5F0;VAI SYLLABLE GBEN;Lo;0;L;;;;;N;;;;; +A5F1;VAI SYLLABLE FE;Lo;0;L;;;;;N;;;;; +A5F2;VAI SYLLABLE VE;Lo;0;L;;;;;N;;;;; +A5F3;VAI SYLLABLE TE;Lo;0;L;;;;;N;;;;; +A5F4;VAI SYLLABLE THE;Lo;0;L;;;;;N;;;;; +A5F5;VAI SYLLABLE DHE;Lo;0;L;;;;;N;;;;; +A5F6;VAI SYLLABLE DHHE;Lo;0;L;;;;;N;;;;; +A5F7;VAI SYLLABLE LE;Lo;0;L;;;;;N;;;;; +A5F8;VAI SYLLABLE RE;Lo;0;L;;;;;N;;;;; +A5F9;VAI SYLLABLE DE;Lo;0;L;;;;;N;;;;; +A5FA;VAI SYLLABLE NDE;Lo;0;L;;;;;N;;;;; +A5FB;VAI SYLLABLE SE;Lo;0;L;;;;;N;;;;; +A5FC;VAI SYLLABLE SHE;Lo;0;L;;;;;N;;;;; +A5FD;VAI SYLLABLE ZE;Lo;0;L;;;;;N;;;;; +A5FE;VAI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;; +A5FF;VAI SYLLABLE CE;Lo;0;L;;;;;N;;;;; +A600;VAI SYLLABLE JE;Lo;0;L;;;;;N;;;;; +A601;VAI SYLLABLE NJE;Lo;0;L;;;;;N;;;;; +A602;VAI SYLLABLE YE;Lo;0;L;;;;;N;;;;; +A603;VAI SYLLABLE KE;Lo;0;L;;;;;N;;;;; +A604;VAI SYLLABLE NGGE;Lo;0;L;;;;;N;;;;; +A605;VAI SYLLABLE NGGEN;Lo;0;L;;;;;N;;;;; +A606;VAI SYLLABLE GE;Lo;0;L;;;;;N;;;;; +A607;VAI SYLLABLE GEN;Lo;0;L;;;;;N;;;;; +A608;VAI SYLLABLE ME;Lo;0;L;;;;;N;;;;; +A609;VAI SYLLABLE NE;Lo;0;L;;;;;N;;;;; +A60A;VAI SYLLABLE NYE;Lo;0;L;;;;;N;;;;; +A60B;VAI SYLLABLE NG;Lo;0;L;;;;;N;;;;; +A60C;VAI SYLLABLE LENGTHENER;Lm;0;L;;;;;N;;;;; +A60D;VAI COMMA;Po;0;ON;;;;;N;;;;; +A60E;VAI FULL STOP;Po;0;ON;;;;;N;;;;; +A60F;VAI QUESTION MARK;Po;0;ON;;;;;N;;;;; +A610;VAI SYLLABLE NDOLE FA;Lo;0;L;;;;;N;;;;; +A611;VAI SYLLABLE NDOLE KA;Lo;0;L;;;;;N;;;;; +A612;VAI SYLLABLE NDOLE SOO;Lo;0;L;;;;;N;;;;; +A613;VAI SYMBOL FEENG;Lo;0;L;;;;;N;;;;; +A614;VAI SYMBOL KEENG;Lo;0;L;;;;;N;;;;; +A615;VAI SYMBOL TING;Lo;0;L;;;;;N;;;;; +A616;VAI SYMBOL NII;Lo;0;L;;;;;N;;;;; +A617;VAI SYMBOL BANG;Lo;0;L;;;;;N;;;;; +A618;VAI SYMBOL FAA;Lo;0;L;;;;;N;;;;; +A619;VAI SYMBOL TAA;Lo;0;L;;;;;N;;;;; +A61A;VAI SYMBOL DANG;Lo;0;L;;;;;N;;;;; +A61B;VAI SYMBOL DOONG;Lo;0;L;;;;;N;;;;; +A61C;VAI SYMBOL KUNG;Lo;0;L;;;;;N;;;;; +A61D;VAI SYMBOL TONG;Lo;0;L;;;;;N;;;;; +A61E;VAI SYMBOL DO-O;Lo;0;L;;;;;N;;;;; +A61F;VAI SYMBOL JONG;Lo;0;L;;;;;N;;;;; +A620;VAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +A621;VAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +A622;VAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +A623;VAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +A624;VAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +A625;VAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +A626;VAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +A627;VAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +A628;VAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +A629;VAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +A62A;VAI SYLLABLE NDOLE MA;Lo;0;L;;;;;N;;;;; +A62B;VAI SYLLABLE NDOLE DO;Lo;0;L;;;;;N;;;;; +A640;CYRILLIC CAPITAL LETTER ZEMLYA;Lu;0;L;;;;;N;;;;A641; +A641;CYRILLIC SMALL LETTER ZEMLYA;Ll;0;L;;;;;N;;;A640;;A640 +A642;CYRILLIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;A643; +A643;CYRILLIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;A642;;A642 +A644;CYRILLIC CAPITAL LETTER REVERSED DZE;Lu;0;L;;;;;N;;;;A645; +A645;CYRILLIC SMALL LETTER REVERSED DZE;Ll;0;L;;;;;N;;;A644;;A644 +A646;CYRILLIC CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;A647; +A647;CYRILLIC SMALL LETTER IOTA;Ll;0;L;;;;;N;;;A646;;A646 +A648;CYRILLIC CAPITAL LETTER DJERV;Lu;0;L;;;;;N;;;;A649; +A649;CYRILLIC SMALL LETTER DJERV;Ll;0;L;;;;;N;;;A648;;A648 +A64A;CYRILLIC CAPITAL LETTER MONOGRAPH UK;Lu;0;L;;;;;N;;;;A64B; +A64B;CYRILLIC SMALL LETTER MONOGRAPH UK;Ll;0;L;;;;;N;;;A64A;;A64A +A64C;CYRILLIC CAPITAL LETTER BROAD OMEGA;Lu;0;L;;;;;N;;;;A64D; +A64D;CYRILLIC SMALL LETTER BROAD OMEGA;Ll;0;L;;;;;N;;;A64C;;A64C +A64E;CYRILLIC CAPITAL LETTER NEUTRAL YER;Lu;0;L;;;;;N;;;;A64F; +A64F;CYRILLIC SMALL LETTER NEUTRAL YER;Ll;0;L;;;;;N;;;A64E;;A64E +A650;CYRILLIC CAPITAL LETTER YERU WITH BACK YER;Lu;0;L;;;;;N;;;;A651; +A651;CYRILLIC SMALL LETTER YERU WITH BACK YER;Ll;0;L;;;;;N;;;A650;;A650 +A652;CYRILLIC CAPITAL LETTER IOTIFIED YAT;Lu;0;L;;;;;N;;;;A653; +A653;CYRILLIC SMALL LETTER IOTIFIED YAT;Ll;0;L;;;;;N;;;A652;;A652 +A654;CYRILLIC CAPITAL LETTER REVERSED YU;Lu;0;L;;;;;N;;;;A655; +A655;CYRILLIC SMALL LETTER REVERSED YU;Ll;0;L;;;;;N;;;A654;;A654 +A656;CYRILLIC CAPITAL LETTER IOTIFIED A;Lu;0;L;;;;;N;;;;A657; +A657;CYRILLIC SMALL LETTER IOTIFIED A;Ll;0;L;;;;;N;;;A656;;A656 +A658;CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A659; +A659;CYRILLIC SMALL LETTER CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A658;;A658 +A65A;CYRILLIC CAPITAL LETTER BLENDED YUS;Lu;0;L;;;;;N;;;;A65B; +A65B;CYRILLIC SMALL LETTER BLENDED YUS;Ll;0;L;;;;;N;;;A65A;;A65A +A65C;CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS;Lu;0;L;;;;;N;;;;A65D; +A65D;CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS;Ll;0;L;;;;;N;;;A65C;;A65C +A65E;CYRILLIC CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;A65F; +A65F;CYRILLIC SMALL LETTER YN;Ll;0;L;;;;;N;;;A65E;;A65E +A662;CYRILLIC CAPITAL LETTER SOFT DE;Lu;0;L;;;;;N;;;;A663; +A663;CYRILLIC SMALL LETTER SOFT DE;Ll;0;L;;;;;N;;;A662;;A662 +A664;CYRILLIC CAPITAL LETTER SOFT EL;Lu;0;L;;;;;N;;;;A665; +A665;CYRILLIC SMALL LETTER SOFT EL;Ll;0;L;;;;;N;;;A664;;A664 +A666;CYRILLIC CAPITAL LETTER SOFT EM;Lu;0;L;;;;;N;;;;A667; +A667;CYRILLIC SMALL LETTER SOFT EM;Ll;0;L;;;;;N;;;A666;;A666 +A668;CYRILLIC CAPITAL LETTER MONOCULAR O;Lu;0;L;;;;;N;;;;A669; +A669;CYRILLIC SMALL LETTER MONOCULAR O;Ll;0;L;;;;;N;;;A668;;A668 +A66A;CYRILLIC CAPITAL LETTER BINOCULAR O;Lu;0;L;;;;;N;;;;A66B; +A66B;CYRILLIC SMALL LETTER BINOCULAR O;Ll;0;L;;;;;N;;;A66A;;A66A +A66C;CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O;Lu;0;L;;;;;N;;;;A66D; +A66D;CYRILLIC SMALL LETTER DOUBLE MONOCULAR O;Ll;0;L;;;;;N;;;A66C;;A66C +A66E;CYRILLIC LETTER MULTIOCULAR O;Lo;0;L;;;;;N;;;;; +A66F;COMBINING CYRILLIC VZMET;Mn;230;NSM;;;;;N;;;;; +A670;COMBINING CYRILLIC TEN MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; +A671;COMBINING CYRILLIC HUNDRED MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; +A672;COMBINING CYRILLIC THOUSAND MILLIONS SIGN;Me;0;NSM;;;;;N;;;;; +A673;SLAVONIC ASTERISK;Po;0;ON;;;;;N;;;;; +A67C;COMBINING CYRILLIC KAVYKA;Mn;230;NSM;;;;;N;;;;; +A67D;COMBINING CYRILLIC PAYEROK;Mn;230;NSM;;;;;N;;;;; +A67E;CYRILLIC KAVYKA;Po;0;ON;;;;;N;;;;; +A67F;CYRILLIC PAYEROK;Lm;0;ON;;;;;N;;;;; +A680;CYRILLIC CAPITAL LETTER DWE;Lu;0;L;;;;;N;;;;A681; +A681;CYRILLIC SMALL LETTER DWE;Ll;0;L;;;;;N;;;A680;;A680 +A682;CYRILLIC CAPITAL LETTER DZWE;Lu;0;L;;;;;N;;;;A683; +A683;CYRILLIC SMALL LETTER DZWE;Ll;0;L;;;;;N;;;A682;;A682 +A684;CYRILLIC CAPITAL LETTER ZHWE;Lu;0;L;;;;;N;;;;A685; +A685;CYRILLIC SMALL LETTER ZHWE;Ll;0;L;;;;;N;;;A684;;A684 +A686;CYRILLIC CAPITAL LETTER CCHE;Lu;0;L;;;;;N;;;;A687; +A687;CYRILLIC SMALL LETTER CCHE;Ll;0;L;;;;;N;;;A686;;A686 +A688;CYRILLIC CAPITAL LETTER DZZE;Lu;0;L;;;;;N;;;;A689; +A689;CYRILLIC SMALL LETTER DZZE;Ll;0;L;;;;;N;;;A688;;A688 +A68A;CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK;Lu;0;L;;;;;N;;;;A68B; +A68B;CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK;Ll;0;L;;;;;N;;;A68A;;A68A +A68C;CYRILLIC CAPITAL LETTER TWE;Lu;0;L;;;;;N;;;;A68D; +A68D;CYRILLIC SMALL LETTER TWE;Ll;0;L;;;;;N;;;A68C;;A68C +A68E;CYRILLIC CAPITAL LETTER TSWE;Lu;0;L;;;;;N;;;;A68F; +A68F;CYRILLIC SMALL LETTER TSWE;Ll;0;L;;;;;N;;;A68E;;A68E +A690;CYRILLIC CAPITAL LETTER TSSE;Lu;0;L;;;;;N;;;;A691; +A691;CYRILLIC SMALL LETTER TSSE;Ll;0;L;;;;;N;;;A690;;A690 +A692;CYRILLIC CAPITAL LETTER TCHE;Lu;0;L;;;;;N;;;;A693; +A693;CYRILLIC SMALL LETTER TCHE;Ll;0;L;;;;;N;;;A692;;A692 +A694;CYRILLIC CAPITAL LETTER HWE;Lu;0;L;;;;;N;;;;A695; +A695;CYRILLIC SMALL LETTER HWE;Ll;0;L;;;;;N;;;A694;;A694 +A696;CYRILLIC CAPITAL LETTER SHWE;Lu;0;L;;;;;N;;;;A697; +A697;CYRILLIC SMALL LETTER SHWE;Ll;0;L;;;;;N;;;A696;;A696 +A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;; +A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;; +A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;; +A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;; +A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;; +A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;; +A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;; +A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;; +A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;; +A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;; +A717;MODIFIER LETTER DOT VERTICAL BAR;Lm;0;ON;;;;;N;;;;; +A718;MODIFIER LETTER DOT SLASH;Lm;0;ON;;;;;N;;;;; +A719;MODIFIER LETTER DOT HORIZONTAL BAR;Lm;0;ON;;;;;N;;;;; +A71A;MODIFIER LETTER LOWER RIGHT CORNER ANGLE;Lm;0;ON;;;;;N;;;;; +A71B;MODIFIER LETTER RAISED UP ARROW;Lm;0;ON;;;;;N;;;;; +A71C;MODIFIER LETTER RAISED DOWN ARROW;Lm;0;ON;;;;;N;;;;; +A71D;MODIFIER LETTER RAISED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; +A71E;MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; +A71F;MODIFIER LETTER LOW INVERTED EXCLAMATION MARK;Lm;0;ON;;;;;N;;;;; +A720;MODIFIER LETTER STRESS AND HIGH TONE;Sk;0;ON;;;;;N;;;;; +A721;MODIFIER LETTER STRESS AND LOW TONE;Sk;0;ON;;;;;N;;;;; +A722;LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF;Lu;0;L;;;;;N;;;;A723; +A723;LATIN SMALL LETTER EGYPTOLOGICAL ALEF;Ll;0;L;;;;;N;;;A722;;A722 +A724;LATIN CAPITAL LETTER EGYPTOLOGICAL AIN;Lu;0;L;;;;;N;;;;A725; +A725;LATIN SMALL LETTER EGYPTOLOGICAL AIN;Ll;0;L;;;;;N;;;A724;;A724 +A726;LATIN CAPITAL LETTER HENG;Lu;0;L;;;;;N;;;;A727; +A727;LATIN SMALL LETTER HENG;Ll;0;L;;;;;N;;;A726;;A726 +A728;LATIN CAPITAL LETTER TZ;Lu;0;L;;;;;N;;;;A729; +A729;LATIN SMALL LETTER TZ;Ll;0;L;;;;;N;;;A728;;A728 +A72A;LATIN CAPITAL LETTER TRESILLO;Lu;0;L;;;;;N;;;;A72B; +A72B;LATIN SMALL LETTER TRESILLO;Ll;0;L;;;;;N;;;A72A;;A72A +A72C;LATIN CAPITAL LETTER CUATRILLO;Lu;0;L;;;;;N;;;;A72D; +A72D;LATIN SMALL LETTER CUATRILLO;Ll;0;L;;;;;N;;;A72C;;A72C +A72E;LATIN CAPITAL LETTER CUATRILLO WITH COMMA;Lu;0;L;;;;;N;;;;A72F; +A72F;LATIN SMALL LETTER CUATRILLO WITH COMMA;Ll;0;L;;;;;N;;;A72E;;A72E +A730;LATIN LETTER SMALL CAPITAL F;Ll;0;L;;;;;N;;;;; +A731;LATIN LETTER SMALL CAPITAL S;Ll;0;L;;;;;N;;;;; +A732;LATIN CAPITAL LETTER AA;Lu;0;L;;;;;N;;;;A733; +A733;LATIN SMALL LETTER AA;Ll;0;L;;;;;N;;;A732;;A732 +A734;LATIN CAPITAL LETTER AO;Lu;0;L;;;;;N;;;;A735; +A735;LATIN SMALL LETTER AO;Ll;0;L;;;;;N;;;A734;;A734 +A736;LATIN CAPITAL LETTER AU;Lu;0;L;;;;;N;;;;A737; +A737;LATIN SMALL LETTER AU;Ll;0;L;;;;;N;;;A736;;A736 +A738;LATIN CAPITAL LETTER AV;Lu;0;L;;;;;N;;;;A739; +A739;LATIN SMALL LETTER AV;Ll;0;L;;;;;N;;;A738;;A738 +A73A;LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR;Lu;0;L;;;;;N;;;;A73B; +A73B;LATIN SMALL LETTER AV WITH HORIZONTAL BAR;Ll;0;L;;;;;N;;;A73A;;A73A +A73C;LATIN CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;A73D; +A73D;LATIN SMALL LETTER AY;Ll;0;L;;;;;N;;;A73C;;A73C +A73E;LATIN CAPITAL LETTER REVERSED C WITH DOT;Lu;0;L;;;;;N;;;;A73F; +A73F;LATIN SMALL LETTER REVERSED C WITH DOT;Ll;0;L;;;;;N;;;A73E;;A73E +A740;LATIN CAPITAL LETTER K WITH STROKE;Lu;0;L;;;;;N;;;;A741; +A741;LATIN SMALL LETTER K WITH STROKE;Ll;0;L;;;;;N;;;A740;;A740 +A742;LATIN CAPITAL LETTER K WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A743; +A743;LATIN SMALL LETTER K WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A742;;A742 +A744;LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A745; +A745;LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE;Ll;0;L;;;;;N;;;A744;;A744 +A746;LATIN CAPITAL LETTER BROKEN L;Lu;0;L;;;;;N;;;;A747; +A747;LATIN SMALL LETTER BROKEN L;Ll;0;L;;;;;N;;;A746;;A746 +A748;LATIN CAPITAL LETTER L WITH HIGH STROKE;Lu;0;L;;;;;N;;;;A749; +A749;LATIN SMALL LETTER L WITH HIGH STROKE;Ll;0;L;;;;;N;;;A748;;A748 +A74A;LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY;Lu;0;L;;;;;N;;;;A74B; +A74B;LATIN SMALL LETTER O WITH LONG STROKE OVERLAY;Ll;0;L;;;;;N;;;A74A;;A74A +A74C;LATIN CAPITAL LETTER O WITH LOOP;Lu;0;L;;;;;N;;;;A74D; +A74D;LATIN SMALL LETTER O WITH LOOP;Ll;0;L;;;;;N;;;A74C;;A74C +A74E;LATIN CAPITAL LETTER OO;Lu;0;L;;;;;N;;;;A74F; +A74F;LATIN SMALL LETTER OO;Ll;0;L;;;;;N;;;A74E;;A74E +A750;LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A751; +A751;LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A750;;A750 +A752;LATIN CAPITAL LETTER P WITH FLOURISH;Lu;0;L;;;;;N;;;;A753; +A753;LATIN SMALL LETTER P WITH FLOURISH;Ll;0;L;;;;;N;;;A752;;A752 +A754;LATIN CAPITAL LETTER P WITH SQUIRREL TAIL;Lu;0;L;;;;;N;;;;A755; +A755;LATIN SMALL LETTER P WITH SQUIRREL TAIL;Ll;0;L;;;;;N;;;A754;;A754 +A756;LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A757; +A757;LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A756;;A756 +A758;LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A759; +A759;LATIN SMALL LETTER Q WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A758;;A758 +A75A;LATIN CAPITAL LETTER R ROTUNDA;Lu;0;L;;;;;N;;;;A75B; +A75B;LATIN SMALL LETTER R ROTUNDA;Ll;0;L;;;;;N;;;A75A;;A75A +A75C;LATIN CAPITAL LETTER RUM ROTUNDA;Lu;0;L;;;;;N;;;;A75D; +A75D;LATIN SMALL LETTER RUM ROTUNDA;Ll;0;L;;;;;N;;;A75C;;A75C +A75E;LATIN CAPITAL LETTER V WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;A75F; +A75F;LATIN SMALL LETTER V WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;A75E;;A75E +A760;LATIN CAPITAL LETTER VY;Lu;0;L;;;;;N;;;;A761; +A761;LATIN SMALL LETTER VY;Ll;0;L;;;;;N;;;A760;;A760 +A762;LATIN CAPITAL LETTER VISIGOTHIC Z;Lu;0;L;;;;;N;;;;A763; +A763;LATIN SMALL LETTER VISIGOTHIC Z;Ll;0;L;;;;;N;;;A762;;A762 +A764;LATIN CAPITAL LETTER THORN WITH STROKE;Lu;0;L;;;;;N;;;;A765; +A765;LATIN SMALL LETTER THORN WITH STROKE;Ll;0;L;;;;;N;;;A764;;A764 +A766;LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER;Lu;0;L;;;;;N;;;;A767; +A767;LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER;Ll;0;L;;;;;N;;;A766;;A766 +A768;LATIN CAPITAL LETTER VEND;Lu;0;L;;;;;N;;;;A769; +A769;LATIN SMALL LETTER VEND;Ll;0;L;;;;;N;;;A768;;A768 +A76A;LATIN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;A76B; +A76B;LATIN SMALL LETTER ET;Ll;0;L;;;;;N;;;A76A;;A76A +A76C;LATIN CAPITAL LETTER IS;Lu;0;L;;;;;N;;;;A76D; +A76D;LATIN SMALL LETTER IS;Ll;0;L;;;;;N;;;A76C;;A76C +A76E;LATIN CAPITAL LETTER CON;Lu;0;L;;;;;N;;;;A76F; +A76F;LATIN SMALL LETTER CON;Ll;0;L;;;;;N;;;A76E;;A76E +A770;MODIFIER LETTER US;Lm;0;L;<super> A76F;;;;N;;;;; +A771;LATIN SMALL LETTER DUM;Ll;0;L;;;;;N;;;;; +A772;LATIN SMALL LETTER LUM;Ll;0;L;;;;;N;;;;; +A773;LATIN SMALL LETTER MUM;Ll;0;L;;;;;N;;;;; +A774;LATIN SMALL LETTER NUM;Ll;0;L;;;;;N;;;;; +A775;LATIN SMALL LETTER RUM;Ll;0;L;;;;;N;;;;; +A776;LATIN LETTER SMALL CAPITAL RUM;Ll;0;L;;;;;N;;;;; +A777;LATIN SMALL LETTER TUM;Ll;0;L;;;;;N;;;;; +A778;LATIN SMALL LETTER UM;Ll;0;L;;;;;N;;;;; +A779;LATIN CAPITAL LETTER INSULAR D;Lu;0;L;;;;;N;;;;A77A; +A77A;LATIN SMALL LETTER INSULAR D;Ll;0;L;;;;;N;;;A779;;A779 +A77B;LATIN CAPITAL LETTER INSULAR F;Lu;0;L;;;;;N;;;;A77C; +A77C;LATIN SMALL LETTER INSULAR F;Ll;0;L;;;;;N;;;A77B;;A77B +A77D;LATIN CAPITAL LETTER INSULAR G;Lu;0;L;;;;;N;;;;1D79; +A77E;LATIN CAPITAL LETTER TURNED INSULAR G;Lu;0;L;;;;;N;;;;A77F; +A77F;LATIN SMALL LETTER TURNED INSULAR G;Ll;0;L;;;;;N;;;A77E;;A77E +A780;LATIN CAPITAL LETTER TURNED L;Lu;0;L;;;;;N;;;;A781; +A781;LATIN SMALL LETTER TURNED L;Ll;0;L;;;;;N;;;A780;;A780 +A782;LATIN CAPITAL LETTER INSULAR R;Lu;0;L;;;;;N;;;;A783; +A783;LATIN SMALL LETTER INSULAR R;Ll;0;L;;;;;N;;;A782;;A782 +A784;LATIN CAPITAL LETTER INSULAR S;Lu;0;L;;;;;N;;;;A785; +A785;LATIN SMALL LETTER INSULAR S;Ll;0;L;;;;;N;;;A784;;A784 +A786;LATIN CAPITAL LETTER INSULAR T;Lu;0;L;;;;;N;;;;A787; +A787;LATIN SMALL LETTER INSULAR T;Ll;0;L;;;;;N;;;A786;;A786 +A788;MODIFIER LETTER LOW CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;;;;; +A789;MODIFIER LETTER COLON;Sk;0;L;;;;;N;;;;; +A78A;MODIFIER LETTER SHORT EQUALS SIGN;Sk;0;L;;;;;N;;;;; +A78B;LATIN CAPITAL LETTER SALTILLO;Lu;0;L;;;;;N;;;;A78C; +A78C;LATIN SMALL LETTER SALTILLO;Ll;0;L;;;;;N;;;A78B;;A78B +A7FB;LATIN EPIGRAPHIC LETTER REVERSED F;Lo;0;L;;;;;N;;;;; +A7FC;LATIN EPIGRAPHIC LETTER REVERSED P;Lo;0;L;;;;;N;;;;; +A7FD;LATIN EPIGRAPHIC LETTER INVERTED M;Lo;0;L;;;;;N;;;;; +A7FE;LATIN EPIGRAPHIC LETTER I LONGA;Lo;0;L;;;;;N;;;;; +A7FF;LATIN EPIGRAPHIC LETTER ARCHAIC M;Lo;0;L;;;;;N;;;;; +A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;; +A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;; +A802;SYLOTI NAGRI SIGN DVISVARA;Mn;0;NSM;;;;;N;;;;; +A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;; +A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;; +A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;; +A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;; +A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;; +A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;; +A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;; +A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;; +A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;; +A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;; +A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;; +A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;; +A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;; +A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;; +A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;; +A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;; +A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;; +A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;; +A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;; +A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;; +A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;; +A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;; +A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;; +A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;; +A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;; +A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;; +A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;; +A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;; +A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;; +A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;; +A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;; +A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;; +A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;; +A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;; +A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;; +A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;; +A840;PHAGS-PA LETTER KA;Lo;0;L;;;;;N;;;;; +A841;PHAGS-PA LETTER KHA;Lo;0;L;;;;;N;;;;; +A842;PHAGS-PA LETTER GA;Lo;0;L;;;;;N;;;;; +A843;PHAGS-PA LETTER NGA;Lo;0;L;;;;;N;;;;; +A844;PHAGS-PA LETTER CA;Lo;0;L;;;;;N;;;;; +A845;PHAGS-PA LETTER CHA;Lo;0;L;;;;;N;;;;; +A846;PHAGS-PA LETTER JA;Lo;0;L;;;;;N;;;;; +A847;PHAGS-PA LETTER NYA;Lo;0;L;;;;;N;;;;; +A848;PHAGS-PA LETTER TA;Lo;0;L;;;;;N;;;;; +A849;PHAGS-PA LETTER THA;Lo;0;L;;;;;N;;;;; +A84A;PHAGS-PA LETTER DA;Lo;0;L;;;;;N;;;;; +A84B;PHAGS-PA LETTER NA;Lo;0;L;;;;;N;;;;; +A84C;PHAGS-PA LETTER PA;Lo;0;L;;;;;N;;;;; +A84D;PHAGS-PA LETTER PHA;Lo;0;L;;;;;N;;;;; +A84E;PHAGS-PA LETTER BA;Lo;0;L;;;;;N;;;;; +A84F;PHAGS-PA LETTER MA;Lo;0;L;;;;;N;;;;; +A850;PHAGS-PA LETTER TSA;Lo;0;L;;;;;N;;;;; +A851;PHAGS-PA LETTER TSHA;Lo;0;L;;;;;N;;;;; +A852;PHAGS-PA LETTER DZA;Lo;0;L;;;;;N;;;;; +A853;PHAGS-PA LETTER WA;Lo;0;L;;;;;N;;;;; +A854;PHAGS-PA LETTER ZHA;Lo;0;L;;;;;N;;;;; +A855;PHAGS-PA LETTER ZA;Lo;0;L;;;;;N;;;;; +A856;PHAGS-PA LETTER SMALL A;Lo;0;L;;;;;N;;;;; +A857;PHAGS-PA LETTER YA;Lo;0;L;;;;;N;;;;; +A858;PHAGS-PA LETTER RA;Lo;0;L;;;;;N;;;;; +A859;PHAGS-PA LETTER LA;Lo;0;L;;;;;N;;;;; +A85A;PHAGS-PA LETTER SHA;Lo;0;L;;;;;N;;;;; +A85B;PHAGS-PA LETTER SA;Lo;0;L;;;;;N;;;;; +A85C;PHAGS-PA LETTER HA;Lo;0;L;;;;;N;;;;; +A85D;PHAGS-PA LETTER A;Lo;0;L;;;;;N;;;;; +A85E;PHAGS-PA LETTER I;Lo;0;L;;;;;N;;;;; +A85F;PHAGS-PA LETTER U;Lo;0;L;;;;;N;;;;; +A860;PHAGS-PA LETTER E;Lo;0;L;;;;;N;;;;; +A861;PHAGS-PA LETTER O;Lo;0;L;;;;;N;;;;; +A862;PHAGS-PA LETTER QA;Lo;0;L;;;;;N;;;;; +A863;PHAGS-PA LETTER XA;Lo;0;L;;;;;N;;;;; +A864;PHAGS-PA LETTER FA;Lo;0;L;;;;;N;;;;; +A865;PHAGS-PA LETTER GGA;Lo;0;L;;;;;N;;;;; +A866;PHAGS-PA LETTER EE;Lo;0;L;;;;;N;;;;; +A867;PHAGS-PA SUBJOINED LETTER WA;Lo;0;L;;;;;N;;;;; +A868;PHAGS-PA SUBJOINED LETTER YA;Lo;0;L;;;;;N;;;;; +A869;PHAGS-PA LETTER TTA;Lo;0;L;;;;;N;;;;; +A86A;PHAGS-PA LETTER TTHA;Lo;0;L;;;;;N;;;;; +A86B;PHAGS-PA LETTER DDA;Lo;0;L;;;;;N;;;;; +A86C;PHAGS-PA LETTER NNA;Lo;0;L;;;;;N;;;;; +A86D;PHAGS-PA LETTER ALTERNATE YA;Lo;0;L;;;;;N;;;;; +A86E;PHAGS-PA LETTER VOICELESS SHA;Lo;0;L;;;;;N;;;;; +A86F;PHAGS-PA LETTER VOICED HA;Lo;0;L;;;;;N;;;;; +A870;PHAGS-PA LETTER ASPIRATED FA;Lo;0;L;;;;;N;;;;; +A871;PHAGS-PA SUBJOINED LETTER RA;Lo;0;L;;;;;N;;;;; +A872;PHAGS-PA SUPERFIXED LETTER RA;Lo;0;L;;;;;N;;;;; +A873;PHAGS-PA LETTER CANDRABINDU;Lo;0;L;;;;;N;;;;; +A874;PHAGS-PA SINGLE HEAD MARK;Po;0;ON;;;;;N;;;;; +A875;PHAGS-PA DOUBLE HEAD MARK;Po;0;ON;;;;;N;;;;; +A876;PHAGS-PA MARK SHAD;Po;0;ON;;;;;N;;;;; +A877;PHAGS-PA MARK DOUBLE SHAD;Po;0;ON;;;;;N;;;;; +A880;SAURASHTRA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;; +A881;SAURASHTRA SIGN VISARGA;Mc;0;L;;;;;N;;;;; +A882;SAURASHTRA LETTER A;Lo;0;L;;;;;N;;;;; +A883;SAURASHTRA LETTER AA;Lo;0;L;;;;;N;;;;; +A884;SAURASHTRA LETTER I;Lo;0;L;;;;;N;;;;; +A885;SAURASHTRA LETTER II;Lo;0;L;;;;;N;;;;; +A886;SAURASHTRA LETTER U;Lo;0;L;;;;;N;;;;; +A887;SAURASHTRA LETTER UU;Lo;0;L;;;;;N;;;;; +A888;SAURASHTRA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;; +A889;SAURASHTRA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; +A88A;SAURASHTRA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;; +A88B;SAURASHTRA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; +A88C;SAURASHTRA LETTER E;Lo;0;L;;;;;N;;;;; +A88D;SAURASHTRA LETTER EE;Lo;0;L;;;;;N;;;;; +A88E;SAURASHTRA LETTER AI;Lo;0;L;;;;;N;;;;; +A88F;SAURASHTRA LETTER O;Lo;0;L;;;;;N;;;;; +A890;SAURASHTRA LETTER OO;Lo;0;L;;;;;N;;;;; +A891;SAURASHTRA LETTER AU;Lo;0;L;;;;;N;;;;; +A892;SAURASHTRA LETTER KA;Lo;0;L;;;;;N;;;;; +A893;SAURASHTRA LETTER KHA;Lo;0;L;;;;;N;;;;; +A894;SAURASHTRA LETTER GA;Lo;0;L;;;;;N;;;;; +A895;SAURASHTRA LETTER GHA;Lo;0;L;;;;;N;;;;; +A896;SAURASHTRA LETTER NGA;Lo;0;L;;;;;N;;;;; +A897;SAURASHTRA LETTER CA;Lo;0;L;;;;;N;;;;; +A898;SAURASHTRA LETTER CHA;Lo;0;L;;;;;N;;;;; +A899;SAURASHTRA LETTER JA;Lo;0;L;;;;;N;;;;; +A89A;SAURASHTRA LETTER JHA;Lo;0;L;;;;;N;;;;; +A89B;SAURASHTRA LETTER NYA;Lo;0;L;;;;;N;;;;; +A89C;SAURASHTRA LETTER TTA;Lo;0;L;;;;;N;;;;; +A89D;SAURASHTRA LETTER TTHA;Lo;0;L;;;;;N;;;;; +A89E;SAURASHTRA LETTER DDA;Lo;0;L;;;;;N;;;;; +A89F;SAURASHTRA LETTER DDHA;Lo;0;L;;;;;N;;;;; +A8A0;SAURASHTRA LETTER NNA;Lo;0;L;;;;;N;;;;; +A8A1;SAURASHTRA LETTER TA;Lo;0;L;;;;;N;;;;; +A8A2;SAURASHTRA LETTER THA;Lo;0;L;;;;;N;;;;; +A8A3;SAURASHTRA LETTER DA;Lo;0;L;;;;;N;;;;; +A8A4;SAURASHTRA LETTER DHA;Lo;0;L;;;;;N;;;;; +A8A5;SAURASHTRA LETTER NA;Lo;0;L;;;;;N;;;;; +A8A6;SAURASHTRA LETTER PA;Lo;0;L;;;;;N;;;;; +A8A7;SAURASHTRA LETTER PHA;Lo;0;L;;;;;N;;;;; +A8A8;SAURASHTRA LETTER BA;Lo;0;L;;;;;N;;;;; +A8A9;SAURASHTRA LETTER BHA;Lo;0;L;;;;;N;;;;; +A8AA;SAURASHTRA LETTER MA;Lo;0;L;;;;;N;;;;; +A8AB;SAURASHTRA LETTER YA;Lo;0;L;;;;;N;;;;; +A8AC;SAURASHTRA LETTER RA;Lo;0;L;;;;;N;;;;; +A8AD;SAURASHTRA LETTER LA;Lo;0;L;;;;;N;;;;; +A8AE;SAURASHTRA LETTER VA;Lo;0;L;;;;;N;;;;; +A8AF;SAURASHTRA LETTER SHA;Lo;0;L;;;;;N;;;;; +A8B0;SAURASHTRA LETTER SSA;Lo;0;L;;;;;N;;;;; +A8B1;SAURASHTRA LETTER SA;Lo;0;L;;;;;N;;;;; +A8B2;SAURASHTRA LETTER HA;Lo;0;L;;;;;N;;;;; +A8B3;SAURASHTRA LETTER LLA;Lo;0;L;;;;;N;;;;; +A8B4;SAURASHTRA CONSONANT SIGN HAARU;Mc;0;L;;;;;N;;;;; +A8B5;SAURASHTRA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;; +A8B6;SAURASHTRA VOWEL SIGN I;Mc;0;L;;;;;N;;;;; +A8B7;SAURASHTRA VOWEL SIGN II;Mc;0;L;;;;;N;;;;; +A8B8;SAURASHTRA VOWEL SIGN U;Mc;0;L;;;;;N;;;;; +A8B9;SAURASHTRA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;; +A8BA;SAURASHTRA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;; +A8BB;SAURASHTRA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;; +A8BC;SAURASHTRA VOWEL SIGN VOCALIC L;Mc;0;L;;;;;N;;;;; +A8BD;SAURASHTRA VOWEL SIGN VOCALIC LL;Mc;0;L;;;;;N;;;;; +A8BE;SAURASHTRA VOWEL SIGN E;Mc;0;L;;;;;N;;;;; +A8BF;SAURASHTRA VOWEL SIGN EE;Mc;0;L;;;;;N;;;;; +A8C0;SAURASHTRA VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +A8C1;SAURASHTRA VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +A8C2;SAURASHTRA VOWEL SIGN OO;Mc;0;L;;;;;N;;;;; +A8C3;SAURASHTRA VOWEL SIGN AU;Mc;0;L;;;;;N;;;;; +A8C4;SAURASHTRA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +A8CE;SAURASHTRA DANDA;Po;0;L;;;;;N;;;;; +A8CF;SAURASHTRA DOUBLE DANDA;Po;0;L;;;;;N;;;;; +A8D0;SAURASHTRA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +A8D1;SAURASHTRA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +A8D2;SAURASHTRA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +A8D3;SAURASHTRA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +A8D4;SAURASHTRA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +A8D5;SAURASHTRA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +A8D6;SAURASHTRA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +A8D7;SAURASHTRA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +A8D8;SAURASHTRA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +A8D9;SAURASHTRA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +A900;KAYAH LI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +A901;KAYAH LI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +A902;KAYAH LI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +A903;KAYAH LI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +A904;KAYAH LI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +A905;KAYAH LI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +A906;KAYAH LI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +A907;KAYAH LI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +A908;KAYAH LI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +A909;KAYAH LI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +A90A;KAYAH LI LETTER KA;Lo;0;L;;;;;N;;;;; +A90B;KAYAH LI LETTER KHA;Lo;0;L;;;;;N;;;;; +A90C;KAYAH LI LETTER GA;Lo;0;L;;;;;N;;;;; +A90D;KAYAH LI LETTER NGA;Lo;0;L;;;;;N;;;;; +A90E;KAYAH LI LETTER SA;Lo;0;L;;;;;N;;;;; +A90F;KAYAH LI LETTER SHA;Lo;0;L;;;;;N;;;;; +A910;KAYAH LI LETTER ZA;Lo;0;L;;;;;N;;;;; +A911;KAYAH LI LETTER NYA;Lo;0;L;;;;;N;;;;; +A912;KAYAH LI LETTER TA;Lo;0;L;;;;;N;;;;; +A913;KAYAH LI LETTER HTA;Lo;0;L;;;;;N;;;;; +A914;KAYAH LI LETTER NA;Lo;0;L;;;;;N;;;;; +A915;KAYAH LI LETTER PA;Lo;0;L;;;;;N;;;;; +A916;KAYAH LI LETTER PHA;Lo;0;L;;;;;N;;;;; +A917;KAYAH LI LETTER MA;Lo;0;L;;;;;N;;;;; +A918;KAYAH LI LETTER DA;Lo;0;L;;;;;N;;;;; +A919;KAYAH LI LETTER BA;Lo;0;L;;;;;N;;;;; +A91A;KAYAH LI LETTER RA;Lo;0;L;;;;;N;;;;; +A91B;KAYAH LI LETTER YA;Lo;0;L;;;;;N;;;;; +A91C;KAYAH LI LETTER LA;Lo;0;L;;;;;N;;;;; +A91D;KAYAH LI LETTER WA;Lo;0;L;;;;;N;;;;; +A91E;KAYAH LI LETTER THA;Lo;0;L;;;;;N;;;;; +A91F;KAYAH LI LETTER HA;Lo;0;L;;;;;N;;;;; +A920;KAYAH LI LETTER VA;Lo;0;L;;;;;N;;;;; +A921;KAYAH LI LETTER CA;Lo;0;L;;;;;N;;;;; +A922;KAYAH LI LETTER A;Lo;0;L;;;;;N;;;;; +A923;KAYAH LI LETTER OE;Lo;0;L;;;;;N;;;;; +A924;KAYAH LI LETTER I;Lo;0;L;;;;;N;;;;; +A925;KAYAH LI LETTER OO;Lo;0;L;;;;;N;;;;; +A926;KAYAH LI VOWEL UE;Mn;0;NSM;;;;;N;;;;; +A927;KAYAH LI VOWEL E;Mn;0;NSM;;;;;N;;;;; +A928;KAYAH LI VOWEL U;Mn;0;NSM;;;;;N;;;;; +A929;KAYAH LI VOWEL EE;Mn;0;NSM;;;;;N;;;;; +A92A;KAYAH LI VOWEL O;Mn;0;NSM;;;;;N;;;;; +A92B;KAYAH LI TONE PLOPHU;Mn;220;NSM;;;;;N;;;;; +A92C;KAYAH LI TONE CALYA;Mn;220;NSM;;;;;N;;;;; +A92D;KAYAH LI TONE CALYA PLOPHU;Mn;220;NSM;;;;;N;;;;; +A92E;KAYAH LI SIGN CWI;Po;0;L;;;;;N;;;;; +A92F;KAYAH LI SIGN SHYA;Po;0;L;;;;;N;;;;; +A930;REJANG LETTER KA;Lo;0;L;;;;;N;;;;; +A931;REJANG LETTER GA;Lo;0;L;;;;;N;;;;; +A932;REJANG LETTER NGA;Lo;0;L;;;;;N;;;;; +A933;REJANG LETTER TA;Lo;0;L;;;;;N;;;;; +A934;REJANG LETTER DA;Lo;0;L;;;;;N;;;;; +A935;REJANG LETTER NA;Lo;0;L;;;;;N;;;;; +A936;REJANG LETTER PA;Lo;0;L;;;;;N;;;;; +A937;REJANG LETTER BA;Lo;0;L;;;;;N;;;;; +A938;REJANG LETTER MA;Lo;0;L;;;;;N;;;;; +A939;REJANG LETTER CA;Lo;0;L;;;;;N;;;;; +A93A;REJANG LETTER JA;Lo;0;L;;;;;N;;;;; +A93B;REJANG LETTER NYA;Lo;0;L;;;;;N;;;;; +A93C;REJANG LETTER SA;Lo;0;L;;;;;N;;;;; +A93D;REJANG LETTER RA;Lo;0;L;;;;;N;;;;; +A93E;REJANG LETTER LA;Lo;0;L;;;;;N;;;;; +A93F;REJANG LETTER YA;Lo;0;L;;;;;N;;;;; +A940;REJANG LETTER WA;Lo;0;L;;;;;N;;;;; +A941;REJANG LETTER HA;Lo;0;L;;;;;N;;;;; +A942;REJANG LETTER MBA;Lo;0;L;;;;;N;;;;; +A943;REJANG LETTER NGGA;Lo;0;L;;;;;N;;;;; +A944;REJANG LETTER NDA;Lo;0;L;;;;;N;;;;; +A945;REJANG LETTER NYJA;Lo;0;L;;;;;N;;;;; +A946;REJANG LETTER A;Lo;0;L;;;;;N;;;;; +A947;REJANG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +A948;REJANG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +A949;REJANG VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +A94A;REJANG VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;; +A94B;REJANG VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +A94C;REJANG VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +A94D;REJANG VOWEL SIGN EU;Mn;0;NSM;;;;;N;;;;; +A94E;REJANG VOWEL SIGN EA;Mn;0;NSM;;;;;N;;;;; +A94F;REJANG CONSONANT SIGN NG;Mn;0;NSM;;;;;N;;;;; +A950;REJANG CONSONANT SIGN N;Mn;0;NSM;;;;;N;;;;; +A951;REJANG CONSONANT SIGN R;Mn;0;NSM;;;;;N;;;;; +A952;REJANG CONSONANT SIGN H;Mc;0;L;;;;;N;;;;; +A953;REJANG VIRAMA;Mc;9;L;;;;;N;;;;; +A95F;REJANG SECTION MARK;Po;0;L;;;;;N;;;;; +AA00;CHAM LETTER A;Lo;0;L;;;;;N;;;;; +AA01;CHAM LETTER I;Lo;0;L;;;;;N;;;;; +AA02;CHAM LETTER U;Lo;0;L;;;;;N;;;;; +AA03;CHAM LETTER E;Lo;0;L;;;;;N;;;;; +AA04;CHAM LETTER AI;Lo;0;L;;;;;N;;;;; +AA05;CHAM LETTER O;Lo;0;L;;;;;N;;;;; +AA06;CHAM LETTER KA;Lo;0;L;;;;;N;;;;; +AA07;CHAM LETTER KHA;Lo;0;L;;;;;N;;;;; +AA08;CHAM LETTER GA;Lo;0;L;;;;;N;;;;; +AA09;CHAM LETTER GHA;Lo;0;L;;;;;N;;;;; +AA0A;CHAM LETTER NGUE;Lo;0;L;;;;;N;;;;; +AA0B;CHAM LETTER NGA;Lo;0;L;;;;;N;;;;; +AA0C;CHAM LETTER CHA;Lo;0;L;;;;;N;;;;; +AA0D;CHAM LETTER CHHA;Lo;0;L;;;;;N;;;;; +AA0E;CHAM LETTER JA;Lo;0;L;;;;;N;;;;; +AA0F;CHAM LETTER JHA;Lo;0;L;;;;;N;;;;; +AA10;CHAM LETTER NHUE;Lo;0;L;;;;;N;;;;; +AA11;CHAM LETTER NHA;Lo;0;L;;;;;N;;;;; +AA12;CHAM LETTER NHJA;Lo;0;L;;;;;N;;;;; +AA13;CHAM LETTER TA;Lo;0;L;;;;;N;;;;; +AA14;CHAM LETTER THA;Lo;0;L;;;;;N;;;;; +AA15;CHAM LETTER DA;Lo;0;L;;;;;N;;;;; +AA16;CHAM LETTER DHA;Lo;0;L;;;;;N;;;;; +AA17;CHAM LETTER NUE;Lo;0;L;;;;;N;;;;; +AA18;CHAM LETTER NA;Lo;0;L;;;;;N;;;;; +AA19;CHAM LETTER DDA;Lo;0;L;;;;;N;;;;; +AA1A;CHAM LETTER PA;Lo;0;L;;;;;N;;;;; +AA1B;CHAM LETTER PPA;Lo;0;L;;;;;N;;;;; +AA1C;CHAM LETTER PHA;Lo;0;L;;;;;N;;;;; +AA1D;CHAM LETTER BA;Lo;0;L;;;;;N;;;;; +AA1E;CHAM LETTER BHA;Lo;0;L;;;;;N;;;;; +AA1F;CHAM LETTER MUE;Lo;0;L;;;;;N;;;;; +AA20;CHAM LETTER MA;Lo;0;L;;;;;N;;;;; +AA21;CHAM LETTER BBA;Lo;0;L;;;;;N;;;;; +AA22;CHAM LETTER YA;Lo;0;L;;;;;N;;;;; +AA23;CHAM LETTER RA;Lo;0;L;;;;;N;;;;; +AA24;CHAM LETTER LA;Lo;0;L;;;;;N;;;;; +AA25;CHAM LETTER VA;Lo;0;L;;;;;N;;;;; +AA26;CHAM LETTER SSA;Lo;0;L;;;;;N;;;;; +AA27;CHAM LETTER SA;Lo;0;L;;;;;N;;;;; +AA28;CHAM LETTER HA;Lo;0;L;;;;;N;;;;; +AA29;CHAM VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; +AA2A;CHAM VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +AA2B;CHAM VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;; +AA2C;CHAM VOWEL SIGN EI;Mn;0;NSM;;;;;N;;;;; +AA2D;CHAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +AA2E;CHAM VOWEL SIGN OE;Mn;0;NSM;;;;;N;;;;; +AA2F;CHAM VOWEL SIGN O;Mc;0;L;;;;;N;;;;; +AA30;CHAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;; +AA31;CHAM VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;; +AA32;CHAM VOWEL SIGN UE;Mn;0;NSM;;;;;N;;;;; +AA33;CHAM CONSONANT SIGN YA;Mc;0;L;;;;;N;;;;; +AA34;CHAM CONSONANT SIGN RA;Mc;0;L;;;;;N;;;;; +AA35;CHAM CONSONANT SIGN LA;Mn;0;NSM;;;;;N;;;;; +AA36;CHAM CONSONANT SIGN WA;Mn;0;NSM;;;;;N;;;;; +AA40;CHAM LETTER FINAL K;Lo;0;L;;;;;N;;;;; +AA41;CHAM LETTER FINAL G;Lo;0;L;;;;;N;;;;; +AA42;CHAM LETTER FINAL NG;Lo;0;L;;;;;N;;;;; +AA43;CHAM CONSONANT SIGN FINAL NG;Mn;0;NSM;;;;;N;;;;; +AA44;CHAM LETTER FINAL CH;Lo;0;L;;;;;N;;;;; +AA45;CHAM LETTER FINAL T;Lo;0;L;;;;;N;;;;; +AA46;CHAM LETTER FINAL N;Lo;0;L;;;;;N;;;;; +AA47;CHAM LETTER FINAL P;Lo;0;L;;;;;N;;;;; +AA48;CHAM LETTER FINAL Y;Lo;0;L;;;;;N;;;;; +AA49;CHAM LETTER FINAL R;Lo;0;L;;;;;N;;;;; +AA4A;CHAM LETTER FINAL L;Lo;0;L;;;;;N;;;;; +AA4B;CHAM LETTER FINAL SS;Lo;0;L;;;;;N;;;;; +AA4C;CHAM CONSONANT SIGN FINAL M;Mn;0;NSM;;;;;N;;;;; +AA4D;CHAM CONSONANT SIGN FINAL H;Mc;0;L;;;;;N;;;;; +AA50;CHAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +AA51;CHAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +AA52;CHAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +AA53;CHAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +AA54;CHAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +AA55;CHAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +AA56;CHAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +AA57;CHAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +AA58;CHAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +AA59;CHAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +AA5C;CHAM PUNCTUATION SPIRAL;Po;0;L;;;;;N;;;;; +AA5D;CHAM PUNCTUATION DANDA;Po;0;L;;;;;N;;;;; +AA5E;CHAM PUNCTUATION DOUBLE DANDA;Po;0;L;;;;;N;;;;; +AA5F;CHAM PUNCTUATION TRIPLE DANDA;Po;0;L;;;;;N;;;;; AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;; D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;; D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;; @@ -10729,7 +13247,7 @@ F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;; F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;; F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;; -F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;; +F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;3;N;;;;; F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;; F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;; F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;; @@ -10737,12 +13255,12 @@ F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;; F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;; F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;; -F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;; +F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;10;N;;;;; F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;; F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;; F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;; F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;; -F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;; +F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;2;N;;;;; F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;; F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;; F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;; @@ -10800,7 +13318,7 @@ F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;; F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;; F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;; -F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;; +F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;0;N;;;;; F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;; F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;; F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;; @@ -10831,9 +13349,9 @@ F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;; F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;; F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;; -F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;; +F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;6;N;;;;; F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;; -F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;; +F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;6;N;;;;; F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;; F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;; F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;; @@ -10875,7 +13393,7 @@ F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;; F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;; F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;; -F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;; +F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;10;N;;;;; F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;; F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;; FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;; @@ -10983,6 +13501,112 @@ FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;; FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;; FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;; +FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;; +FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;; +FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;; +FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;; +FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;; +FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;; +FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;; +FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;; +FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;; +FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;; +FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;; +FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;; +FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;; +FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;; +FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;; +FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;; +FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;; +FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;; +FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;; +FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;; +FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;; +FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;; +FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;; +FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;; +FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;; +FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;; +FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;; +FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;; +FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;; +FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;; +FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;; +FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;; +FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;; +FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;; +FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;; +FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;; +FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;; +FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;; +FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;; +FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;; +FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;; +FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;; +FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;; +FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;; +FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;; +FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;; +FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;; +FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;; +FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;; +FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;; +FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;; +FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;; +FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;; +FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;; +FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;; +FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;; +FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;; +FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;; +FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;; +FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;; +FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;; +FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;; +FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;; +FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;; +FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;; +FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;; +FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;; +FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;; +FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;; +FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;; +FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;; +FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;; +FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;; +FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;; +FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;; +FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;; +FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;; +FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;; +FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;; +FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;; +FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;; +FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;; +FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;; +FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;; +FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;; +FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;; +FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;; +FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;; +FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;; +FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;; +FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;; +FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;; +FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;; +FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;; +FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;; +FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;; +FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;; +FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;; +FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;; +FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;; +FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;; +FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;; +FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;; +FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;; +FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;; +FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;; FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;; FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;; FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;; @@ -11007,7 +13631,7 @@ FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;; FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;; FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;; -FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET;<font> 002B;;;;N;;;;; +FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES;<font> 002B;;;;N;;;;; FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;; FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;; FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;; @@ -11652,10 +14276,23 @@ FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;; FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;; FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;; +FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON;<vertical> 002C;;;;N;;;;; +FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON;<vertical> 3001;;;;N;;;;; +FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON;<vertical> 3002;;;;N;;;;; +FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON;<vertical> 003A;;;;N;;;;; +FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON;<vertical> 003B;;;;N;;;;; +FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON;<vertical> 0021;;;;N;;;;; +FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON;<vertical> 003F;;;;N;;;;; +FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;<vertical> 3016;;;;N;;;;; +FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON;<vertical> 3017;;;;N;;;;; +FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON;<vertical> 2026;;;;N;;;;; FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;; FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;; +FE24;COMBINING MACRON LEFT HALF;Mn;230;NSM;;;;;N;;;;; +FE25;COMBINING MACRON RIGHT HALF;Mn;230;NSM;;;;;N;;;;; +FE26;COMBINING CONJOINING MACRON;Mn;230;NSM;;;;;N;;;;; FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;; FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;; FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;; @@ -11696,19 +14333,19 @@ FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;; FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;; FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;; -FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;; -FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;; -FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;; -FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;; -FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;; -FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;; +FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;Y;SMALL OPENING PARENTHESIS;;;; +FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;Y;SMALL CLOSING PARENTHESIS;;;; +FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;Y;SMALL OPENING CURLY BRACKET;;;; +FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;Y;SMALL CLOSING CURLY BRACKET;;;; +FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;Y;SMALL OPENING TORTOISE SHELL BRACKET;;;; +FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;Y;SMALL CLOSING TORTOISE SHELL BRACKET;;;; FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;; FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;; FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;; -FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;; -FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;; -FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;; -FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;; +FE62;SMALL PLUS SIGN;Sm;0;ES;<small> 002B;;;;N;;;;; +FE63;SMALL HYPHEN-MINUS;Pd;0;ES;<small> 002D;;;;N;;;;; +FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;Y;;;;; +FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;Y;;;;; FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;; FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;; FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;; @@ -11865,11 +14502,11 @@ FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;; FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;; FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;; -FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET;<wide> 002B;;;;N;;;;; +FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES;<wide> 002B;;;;N;;;;; FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;; -FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET;<wide> 002D;;;;N;;;;; +FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES;<wide> 002D;;;;N;;;;; FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;; -FF0F;FULLWIDTH SOLIDUS;Po;0;ES;<wide> 002F;;;;N;FULLWIDTH SLASH;;;; +FF0F;FULLWIDTH SOLIDUS;Po;0;CS;<wide> 002F;;;;N;FULLWIDTH SLASH;;;; FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;; FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;; FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;; @@ -11955,7 +14592,7 @@ FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;; FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;; FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;; -FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;ON;<narrow> 30FB;;;;N;;;;; +FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON;<narrow> 30FB;;;;N;;;;; FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;; FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;; FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;; @@ -12080,9 +14717,9 @@ FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;; FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;; FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;; -FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;BN;;;;;N;;;;; -FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;BN;;;;;N;;;;; -FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;BN;;;;;N;;;;; +FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;ON;;;;;N;;;;; +FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;ON;;;;;N;;;;; +FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;ON;;;;;N;;;;; FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;; @@ -12353,6 +14990,217 @@ 1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;; 1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;; 1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;; +10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;; +10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;; +10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;; +10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;; +10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;; +10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; +10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;; +10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;; +10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;; +1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;; +1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;; +1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;; +1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;; +1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;; +1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;; +10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;; +10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;; +10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;; +10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;; +10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;; +10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;; +10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;; +10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;; +10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;; +10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;; +1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;; +1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;; +1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;; +1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; +1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;; +1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;; +10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;; +10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;; +10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;; +10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;; +10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;; +10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;; +10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;; +10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;; +10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;; +10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;; +1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;; +1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;; +1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;; +10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;; +10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;; +10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;; +10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;; +10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;; +10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;; +10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;; +10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;; +10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;; +1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;; +1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;; +1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;; +1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;; +1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;; +1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;; +10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;; +10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;; +10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;; +10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;; +10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;; +10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;; +10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;; +10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;; +10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;; +10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;; +1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;; +10190;ROMAN SEXTANS SIGN;So;0;ON;;;;;N;;;;; +10191;ROMAN UNCIA SIGN;So;0;ON;;;;;N;;;;; +10192;ROMAN SEMUNCIA SIGN;So;0;ON;;;;;N;;;;; +10193;ROMAN SEXTULA SIGN;So;0;ON;;;;;N;;;;; +10194;ROMAN DIMIDIA SEXTULA SIGN;So;0;ON;;;;;N;;;;; +10195;ROMAN SILIQUA SIGN;So;0;ON;;;;;N;;;;; +10196;ROMAN DENARIUS SIGN;So;0;ON;;;;;N;;;;; +10197;ROMAN QUINARIUS SIGN;So;0;ON;;;;;N;;;;; +10198;ROMAN SESTERTIUS SIGN;So;0;ON;;;;;N;;;;; +10199;ROMAN DUPONDIUS SIGN;So;0;ON;;;;;N;;;;; +1019A;ROMAN AS SIGN;So;0;ON;;;;;N;;;;; +1019B;ROMAN CENTURIAL SIGN;So;0;ON;;;;;N;;;;; +101D0;PHAISTOS DISC SIGN PEDESTRIAN;So;0;L;;;;;N;;;;; +101D1;PHAISTOS DISC SIGN PLUMED HEAD;So;0;L;;;;;N;;;;; +101D2;PHAISTOS DISC SIGN TATTOOED HEAD;So;0;L;;;;;N;;;;; +101D3;PHAISTOS DISC SIGN CAPTIVE;So;0;L;;;;;N;;;;; +101D4;PHAISTOS DISC SIGN CHILD;So;0;L;;;;;N;;;;; +101D5;PHAISTOS DISC SIGN WOMAN;So;0;L;;;;;N;;;;; +101D6;PHAISTOS DISC SIGN HELMET;So;0;L;;;;;N;;;;; +101D7;PHAISTOS DISC SIGN GAUNTLET;So;0;L;;;;;N;;;;; +101D8;PHAISTOS DISC SIGN TIARA;So;0;L;;;;;N;;;;; +101D9;PHAISTOS DISC SIGN ARROW;So;0;L;;;;;N;;;;; +101DA;PHAISTOS DISC SIGN BOW;So;0;L;;;;;N;;;;; +101DB;PHAISTOS DISC SIGN SHIELD;So;0;L;;;;;N;;;;; +101DC;PHAISTOS DISC SIGN CLUB;So;0;L;;;;;N;;;;; +101DD;PHAISTOS DISC SIGN MANACLES;So;0;L;;;;;N;;;;; +101DE;PHAISTOS DISC SIGN MATTOCK;So;0;L;;;;;N;;;;; +101DF;PHAISTOS DISC SIGN SAW;So;0;L;;;;;N;;;;; +101E0;PHAISTOS DISC SIGN LID;So;0;L;;;;;N;;;;; +101E1;PHAISTOS DISC SIGN BOOMERANG;So;0;L;;;;;N;;;;; +101E2;PHAISTOS DISC SIGN CARPENTRY PLANE;So;0;L;;;;;N;;;;; +101E3;PHAISTOS DISC SIGN DOLIUM;So;0;L;;;;;N;;;;; +101E4;PHAISTOS DISC SIGN COMB;So;0;L;;;;;N;;;;; +101E5;PHAISTOS DISC SIGN SLING;So;0;L;;;;;N;;;;; +101E6;PHAISTOS DISC SIGN COLUMN;So;0;L;;;;;N;;;;; +101E7;PHAISTOS DISC SIGN BEEHIVE;So;0;L;;;;;N;;;;; +101E8;PHAISTOS DISC SIGN SHIP;So;0;L;;;;;N;;;;; +101E9;PHAISTOS DISC SIGN HORN;So;0;L;;;;;N;;;;; +101EA;PHAISTOS DISC SIGN HIDE;So;0;L;;;;;N;;;;; +101EB;PHAISTOS DISC SIGN BULLS LEG;So;0;L;;;;;N;;;;; +101EC;PHAISTOS DISC SIGN CAT;So;0;L;;;;;N;;;;; +101ED;PHAISTOS DISC SIGN RAM;So;0;L;;;;;N;;;;; +101EE;PHAISTOS DISC SIGN EAGLE;So;0;L;;;;;N;;;;; +101EF;PHAISTOS DISC SIGN DOVE;So;0;L;;;;;N;;;;; +101F0;PHAISTOS DISC SIGN TUNNY;So;0;L;;;;;N;;;;; +101F1;PHAISTOS DISC SIGN BEE;So;0;L;;;;;N;;;;; +101F2;PHAISTOS DISC SIGN PLANE TREE;So;0;L;;;;;N;;;;; +101F3;PHAISTOS DISC SIGN VINE;So;0;L;;;;;N;;;;; +101F4;PHAISTOS DISC SIGN PAPYRUS;So;0;L;;;;;N;;;;; +101F5;PHAISTOS DISC SIGN ROSETTE;So;0;L;;;;;N;;;;; +101F6;PHAISTOS DISC SIGN LILY;So;0;L;;;;;N;;;;; +101F7;PHAISTOS DISC SIGN OX BACK;So;0;L;;;;;N;;;;; +101F8;PHAISTOS DISC SIGN FLUTE;So;0;L;;;;;N;;;;; +101F9;PHAISTOS DISC SIGN GRATER;So;0;L;;;;;N;;;;; +101FA;PHAISTOS DISC SIGN STRAINER;So;0;L;;;;;N;;;;; +101FB;PHAISTOS DISC SIGN SMALL AXE;So;0;L;;;;;N;;;;; +101FC;PHAISTOS DISC SIGN WAVY BAND;So;0;L;;;;;N;;;;; +101FD;PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE;Mn;220;NSM;;;;;N;;;;; +10280;LYCIAN LETTER A;Lo;0;L;;;;;N;;;;; +10281;LYCIAN LETTER E;Lo;0;L;;;;;N;;;;; +10282;LYCIAN LETTER B;Lo;0;L;;;;;N;;;;; +10283;LYCIAN LETTER BH;Lo;0;L;;;;;N;;;;; +10284;LYCIAN LETTER G;Lo;0;L;;;;;N;;;;; +10285;LYCIAN LETTER D;Lo;0;L;;;;;N;;;;; +10286;LYCIAN LETTER I;Lo;0;L;;;;;N;;;;; +10287;LYCIAN LETTER W;Lo;0;L;;;;;N;;;;; +10288;LYCIAN LETTER Z;Lo;0;L;;;;;N;;;;; +10289;LYCIAN LETTER TH;Lo;0;L;;;;;N;;;;; +1028A;LYCIAN LETTER J;Lo;0;L;;;;;N;;;;; +1028B;LYCIAN LETTER K;Lo;0;L;;;;;N;;;;; +1028C;LYCIAN LETTER Q;Lo;0;L;;;;;N;;;;; +1028D;LYCIAN LETTER L;Lo;0;L;;;;;N;;;;; +1028E;LYCIAN LETTER M;Lo;0;L;;;;;N;;;;; +1028F;LYCIAN LETTER N;Lo;0;L;;;;;N;;;;; +10290;LYCIAN LETTER MM;Lo;0;L;;;;;N;;;;; +10291;LYCIAN LETTER NN;Lo;0;L;;;;;N;;;;; +10292;LYCIAN LETTER U;Lo;0;L;;;;;N;;;;; +10293;LYCIAN LETTER P;Lo;0;L;;;;;N;;;;; +10294;LYCIAN LETTER KK;Lo;0;L;;;;;N;;;;; +10295;LYCIAN LETTER R;Lo;0;L;;;;;N;;;;; +10296;LYCIAN LETTER S;Lo;0;L;;;;;N;;;;; +10297;LYCIAN LETTER T;Lo;0;L;;;;;N;;;;; +10298;LYCIAN LETTER TT;Lo;0;L;;;;;N;;;;; +10299;LYCIAN LETTER AN;Lo;0;L;;;;;N;;;;; +1029A;LYCIAN LETTER EN;Lo;0;L;;;;;N;;;;; +1029B;LYCIAN LETTER H;Lo;0;L;;;;;N;;;;; +1029C;LYCIAN LETTER X;Lo;0;L;;;;;N;;;;; +102A0;CARIAN LETTER A;Lo;0;L;;;;;N;;;;; +102A1;CARIAN LETTER P2;Lo;0;L;;;;;N;;;;; +102A2;CARIAN LETTER D;Lo;0;L;;;;;N;;;;; +102A3;CARIAN LETTER L;Lo;0;L;;;;;N;;;;; +102A4;CARIAN LETTER UUU;Lo;0;L;;;;;N;;;;; +102A5;CARIAN LETTER R;Lo;0;L;;;;;N;;;;; +102A6;CARIAN LETTER LD;Lo;0;L;;;;;N;;;;; +102A7;CARIAN LETTER A2;Lo;0;L;;;;;N;;;;; +102A8;CARIAN LETTER Q;Lo;0;L;;;;;N;;;;; +102A9;CARIAN LETTER B;Lo;0;L;;;;;N;;;;; +102AA;CARIAN LETTER M;Lo;0;L;;;;;N;;;;; +102AB;CARIAN LETTER O;Lo;0;L;;;;;N;;;;; +102AC;CARIAN LETTER D2;Lo;0;L;;;;;N;;;;; +102AD;CARIAN LETTER T;Lo;0;L;;;;;N;;;;; +102AE;CARIAN LETTER SH;Lo;0;L;;;;;N;;;;; +102AF;CARIAN LETTER SH2;Lo;0;L;;;;;N;;;;; +102B0;CARIAN LETTER S;Lo;0;L;;;;;N;;;;; +102B1;CARIAN LETTER C-18;Lo;0;L;;;;;N;;;;; +102B2;CARIAN LETTER U;Lo;0;L;;;;;N;;;;; +102B3;CARIAN LETTER NN;Lo;0;L;;;;;N;;;;; +102B4;CARIAN LETTER X;Lo;0;L;;;;;N;;;;; +102B5;CARIAN LETTER N;Lo;0;L;;;;;N;;;;; +102B6;CARIAN LETTER TT2;Lo;0;L;;;;;N;;;;; +102B7;CARIAN LETTER P;Lo;0;L;;;;;N;;;;; +102B8;CARIAN LETTER SS;Lo;0;L;;;;;N;;;;; +102B9;CARIAN LETTER I;Lo;0;L;;;;;N;;;;; +102BA;CARIAN LETTER E;Lo;0;L;;;;;N;;;;; +102BB;CARIAN LETTER UUUU;Lo;0;L;;;;;N;;;;; +102BC;CARIAN LETTER K;Lo;0;L;;;;;N;;;;; +102BD;CARIAN LETTER K2;Lo;0;L;;;;;N;;;;; +102BE;CARIAN LETTER ND;Lo;0;L;;;;;N;;;;; +102BF;CARIAN LETTER UU;Lo;0;L;;;;;N;;;;; +102C0;CARIAN LETTER G;Lo;0;L;;;;;N;;;;; +102C1;CARIAN LETTER G2;Lo;0;L;;;;;N;;;;; +102C2;CARIAN LETTER ST;Lo;0;L;;;;;N;;;;; +102C3;CARIAN LETTER ST2;Lo;0;L;;;;;N;;;;; +102C4;CARIAN LETTER NG;Lo;0;L;;;;;N;;;;; +102C5;CARIAN LETTER II;Lo;0;L;;;;;N;;;;; +102C6;CARIAN LETTER C-39;Lo;0;L;;;;;N;;;;; +102C7;CARIAN LETTER TT;Lo;0;L;;;;;N;;;;; +102C8;CARIAN LETTER UUU2;Lo;0;L;;;;;N;;;;; +102C9;CARIAN LETTER RR;Lo;0;L;;;;;N;;;;; +102CA;CARIAN LETTER MB;Lo;0;L;;;;;N;;;;; +102CB;CARIAN LETTER MB2;Lo;0;L;;;;;N;;;;; +102CC;CARIAN LETTER MB3;Lo;0;L;;;;;N;;;;; +102CD;CARIAN LETTER MB4;Lo;0;L;;;;;N;;;;; +102CE;CARIAN LETTER LD2;Lo;0;L;;;;;N;;;;; +102CF;CARIAN LETTER E2;Lo;0;L;;;;;N;;;;; +102D0;CARIAN LETTER UUU3;Lo;0;L;;;;;N;;;;; 10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;; 10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;; 10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;; @@ -12405,7 +15253,7 @@ 1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;; 1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;; 10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;; -10341;GOTHIC LETTER NINETY;Lo;0;L;;;;;N;;;;; +10341;GOTHIC LETTER NINETY;Nl;0;L;;;;90;N;;;;; 10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;; 10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;; 10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;; @@ -12414,7 +15262,7 @@ 10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;; 10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;; 10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;; -1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;;N;;;;; +1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;; 10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;; 10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;; 10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;; @@ -12446,6 +15294,56 @@ 1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;; 1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;; 1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;; +103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;; +103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;; +103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;; +103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;; +103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;; +103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;; +103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;; +103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;; +103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;; +103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;; +103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;; +103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;; +103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;; +103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;; +103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;; +103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;; +103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;; +103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;; +103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;; +103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;; +103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;; +103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;; +103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;; +103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;; +103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;; +103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;; +103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;; +103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;; +103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;; +103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;; +103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;; +103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;; +103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;; +103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;; +103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;; +103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;; +103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;; +103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;; +103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;; +103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;; +103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;; +103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;; +103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;; +103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;; +103D0;OLD PERSIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; +103D1;OLD PERSIAN NUMBER ONE;Nl;0;L;;;;1;N;;;;; +103D2;OLD PERSIAN NUMBER TWO;Nl;0;L;;;;2;N;;;;; +103D3;OLD PERSIAN NUMBER TEN;Nl;0;L;;;;10;N;;;;; +103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;L;;;;20;N;;;;; +103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;L;;;;100;N;;;;; 10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428; 10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429; 10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A; @@ -12669,6 +15567,1107 @@ 10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;; 1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;; 1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;; +10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;; +10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;; +10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;; +10903;PHOENICIAN LETTER DELT;Lo;0;R;;;;;N;;;;; +10904;PHOENICIAN LETTER HE;Lo;0;R;;;;;N;;;;; +10905;PHOENICIAN LETTER WAU;Lo;0;R;;;;;N;;;;; +10906;PHOENICIAN LETTER ZAI;Lo;0;R;;;;;N;;;;; +10907;PHOENICIAN LETTER HET;Lo;0;R;;;;;N;;;;; +10908;PHOENICIAN LETTER TET;Lo;0;R;;;;;N;;;;; +10909;PHOENICIAN LETTER YOD;Lo;0;R;;;;;N;;;;; +1090A;PHOENICIAN LETTER KAF;Lo;0;R;;;;;N;;;;; +1090B;PHOENICIAN LETTER LAMD;Lo;0;R;;;;;N;;;;; +1090C;PHOENICIAN LETTER MEM;Lo;0;R;;;;;N;;;;; +1090D;PHOENICIAN LETTER NUN;Lo;0;R;;;;;N;;;;; +1090E;PHOENICIAN LETTER SEMK;Lo;0;R;;;;;N;;;;; +1090F;PHOENICIAN LETTER AIN;Lo;0;R;;;;;N;;;;; +10910;PHOENICIAN LETTER PE;Lo;0;R;;;;;N;;;;; +10911;PHOENICIAN LETTER SADE;Lo;0;R;;;;;N;;;;; +10912;PHOENICIAN LETTER QOF;Lo;0;R;;;;;N;;;;; +10913;PHOENICIAN LETTER ROSH;Lo;0;R;;;;;N;;;;; +10914;PHOENICIAN LETTER SHIN;Lo;0;R;;;;;N;;;;; +10915;PHOENICIAN LETTER TAU;Lo;0;R;;;;;N;;;;; +10916;PHOENICIAN NUMBER ONE;No;0;R;;;;1;N;;;;; +10917;PHOENICIAN NUMBER TEN;No;0;R;;;;10;N;;;;; +10918;PHOENICIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;; +10919;PHOENICIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; +1091F;PHOENICIAN WORD SEPARATOR;Po;0;ON;;;;;N;;;;; +10920;LYDIAN LETTER A;Lo;0;R;;;;;N;;;;; +10921;LYDIAN LETTER B;Lo;0;R;;;;;N;;;;; +10922;LYDIAN LETTER G;Lo;0;R;;;;;N;;;;; +10923;LYDIAN LETTER D;Lo;0;R;;;;;N;;;;; +10924;LYDIAN LETTER E;Lo;0;R;;;;;N;;;;; +10925;LYDIAN LETTER V;Lo;0;R;;;;;N;;;;; +10926;LYDIAN LETTER I;Lo;0;R;;;;;N;;;;; +10927;LYDIAN LETTER Y;Lo;0;R;;;;;N;;;;; +10928;LYDIAN LETTER K;Lo;0;R;;;;;N;;;;; +10929;LYDIAN LETTER L;Lo;0;R;;;;;N;;;;; +1092A;LYDIAN LETTER M;Lo;0;R;;;;;N;;;;; +1092B;LYDIAN LETTER N;Lo;0;R;;;;;N;;;;; +1092C;LYDIAN LETTER O;Lo;0;R;;;;;N;;;;; +1092D;LYDIAN LETTER R;Lo;0;R;;;;;N;;;;; +1092E;LYDIAN LETTER SS;Lo;0;R;;;;;N;;;;; +1092F;LYDIAN LETTER T;Lo;0;R;;;;;N;;;;; +10930;LYDIAN LETTER U;Lo;0;R;;;;;N;;;;; +10931;LYDIAN LETTER F;Lo;0;R;;;;;N;;;;; +10932;LYDIAN LETTER Q;Lo;0;R;;;;;N;;;;; +10933;LYDIAN LETTER S;Lo;0;R;;;;;N;;;;; +10934;LYDIAN LETTER TT;Lo;0;R;;;;;N;;;;; +10935;LYDIAN LETTER AN;Lo;0;R;;;;;N;;;;; +10936;LYDIAN LETTER EN;Lo;0;R;;;;;N;;;;; +10937;LYDIAN LETTER LY;Lo;0;R;;;;;N;;;;; +10938;LYDIAN LETTER NN;Lo;0;R;;;;;N;;;;; +10939;LYDIAN LETTER C;Lo;0;R;;;;;N;;;;; +1093F;LYDIAN TRIANGULAR MARK;Po;0;R;;;;;N;;;;; +10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;; +10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; +10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; +10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; +10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;; +10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;; +10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;; +10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;; +10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; +10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;; +10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;; +10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;; +10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;; +10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;; +10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;; +10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;; +10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;; +10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;; +10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;; +10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;; +10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;; +10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;; +10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;; +10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;; +10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;; +10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;; +10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;; +10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;; +10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;; +10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;; +10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;; +10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;; +10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;; +10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;; +10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;; +10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;; +10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;; +10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;; +10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;; +10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;; +10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;; +10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;; +10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;; +10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;; +10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;; +10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;; +10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;; +10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;; +10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;; +10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;; +10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;; +10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;; +10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;; +10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;; +10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;; +10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;; +10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;; +10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;; +10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;; +10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;; +10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;; +10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;; +10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;; +10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;; +10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;; +12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;; +12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;; +12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;; +12003;CUNEIFORM SIGN A TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12004;CUNEIFORM SIGN A TIMES HA;Lo;0;L;;;;;N;;;;; +12005;CUNEIFORM SIGN A TIMES IGI;Lo;0;L;;;;;N;;;;; +12006;CUNEIFORM SIGN A TIMES LAGAR GUNU;Lo;0;L;;;;;N;;;;; +12007;CUNEIFORM SIGN A TIMES MUSH;Lo;0;L;;;;;N;;;;; +12008;CUNEIFORM SIGN A TIMES SAG;Lo;0;L;;;;;N;;;;; +12009;CUNEIFORM SIGN A2;Lo;0;L;;;;;N;;;;; +1200A;CUNEIFORM SIGN AB;Lo;0;L;;;;;N;;;;; +1200B;CUNEIFORM SIGN AB TIMES ASH2;Lo;0;L;;;;;N;;;;; +1200C;CUNEIFORM SIGN AB TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; +1200D;CUNEIFORM SIGN AB TIMES GAL;Lo;0;L;;;;;N;;;;; +1200E;CUNEIFORM SIGN AB TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1200F;CUNEIFORM SIGN AB TIMES HA;Lo;0;L;;;;;N;;;;; +12010;CUNEIFORM SIGN AB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +12011;CUNEIFORM SIGN AB TIMES IMIN;Lo;0;L;;;;;N;;;;; +12012;CUNEIFORM SIGN AB TIMES LAGAB;Lo;0;L;;;;;N;;;;; +12013;CUNEIFORM SIGN AB TIMES SHESH;Lo;0;L;;;;;N;;;;; +12014;CUNEIFORM SIGN AB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; +12015;CUNEIFORM SIGN AB GUNU;Lo;0;L;;;;;N;;;;; +12016;CUNEIFORM SIGN AB2;Lo;0;L;;;;;N;;;;; +12017;CUNEIFORM SIGN AB2 TIMES BALAG;Lo;0;L;;;;;N;;;;; +12018;CUNEIFORM SIGN AB2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12019;CUNEIFORM SIGN AB2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +1201A;CUNEIFORM SIGN AB2 TIMES SHA3;Lo;0;L;;;;;N;;;;; +1201B;CUNEIFORM SIGN AB2 TIMES TAK4;Lo;0;L;;;;;N;;;;; +1201C;CUNEIFORM SIGN AD;Lo;0;L;;;;;N;;;;; +1201D;CUNEIFORM SIGN AK;Lo;0;L;;;;;N;;;;; +1201E;CUNEIFORM SIGN AK TIMES ERIN2;Lo;0;L;;;;;N;;;;; +1201F;CUNEIFORM SIGN AK TIMES SHITA PLUS GISH;Lo;0;L;;;;;N;;;;; +12020;CUNEIFORM SIGN AL;Lo;0;L;;;;;N;;;;; +12021;CUNEIFORM SIGN AL TIMES AL;Lo;0;L;;;;;N;;;;; +12022;CUNEIFORM SIGN AL TIMES DIM2;Lo;0;L;;;;;N;;;;; +12023;CUNEIFORM SIGN AL TIMES GISH;Lo;0;L;;;;;N;;;;; +12024;CUNEIFORM SIGN AL TIMES HA;Lo;0;L;;;;;N;;;;; +12025;CUNEIFORM SIGN AL TIMES KAD3;Lo;0;L;;;;;N;;;;; +12026;CUNEIFORM SIGN AL TIMES KI;Lo;0;L;;;;;N;;;;; +12027;CUNEIFORM SIGN AL TIMES SHE;Lo;0;L;;;;;N;;;;; +12028;CUNEIFORM SIGN AL TIMES USH;Lo;0;L;;;;;N;;;;; +12029;CUNEIFORM SIGN ALAN;Lo;0;L;;;;;N;;;;; +1202A;CUNEIFORM SIGN ALEPH;Lo;0;L;;;;;N;;;;; +1202B;CUNEIFORM SIGN AMAR;Lo;0;L;;;;;N;;;;; +1202C;CUNEIFORM SIGN AMAR TIMES SHE;Lo;0;L;;;;;N;;;;; +1202D;CUNEIFORM SIGN AN;Lo;0;L;;;;;N;;;;; +1202E;CUNEIFORM SIGN AN OVER AN;Lo;0;L;;;;;N;;;;; +1202F;CUNEIFORM SIGN AN THREE TIMES;Lo;0;L;;;;;N;;;;; +12030;CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA;Lo;0;L;;;;;N;;;;; +12031;CUNEIFORM SIGN AN PLUS NAGA SQUARED;Lo;0;L;;;;;N;;;;; +12032;CUNEIFORM SIGN ANSHE;Lo;0;L;;;;;N;;;;; +12033;CUNEIFORM SIGN APIN;Lo;0;L;;;;;N;;;;; +12034;CUNEIFORM SIGN ARAD;Lo;0;L;;;;;N;;;;; +12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;; +12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;; +12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;; +12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;; +12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; +1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;; +1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;; +1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; +1203D;CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;; +1203E;CUNEIFORM SIGN ASH2;Lo;0;L;;;;;N;;;;; +1203F;CUNEIFORM SIGN ASHGAB;Lo;0;L;;;;;N;;;;; +12040;CUNEIFORM SIGN BA;Lo;0;L;;;;;N;;;;; +12041;CUNEIFORM SIGN BAD;Lo;0;L;;;;;N;;;;; +12042;CUNEIFORM SIGN BAG3;Lo;0;L;;;;;N;;;;; +12043;CUNEIFORM SIGN BAHAR2;Lo;0;L;;;;;N;;;;; +12044;CUNEIFORM SIGN BAL;Lo;0;L;;;;;N;;;;; +12045;CUNEIFORM SIGN BAL OVER BAL;Lo;0;L;;;;;N;;;;; +12046;CUNEIFORM SIGN BALAG;Lo;0;L;;;;;N;;;;; +12047;CUNEIFORM SIGN BAR;Lo;0;L;;;;;N;;;;; +12048;CUNEIFORM SIGN BARA2;Lo;0;L;;;;;N;;;;; +12049;CUNEIFORM SIGN BI;Lo;0;L;;;;;N;;;;; +1204A;CUNEIFORM SIGN BI TIMES A;Lo;0;L;;;;;N;;;;; +1204B;CUNEIFORM SIGN BI TIMES GAR;Lo;0;L;;;;;N;;;;; +1204C;CUNEIFORM SIGN BI TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +1204D;CUNEIFORM SIGN BU;Lo;0;L;;;;;N;;;;; +1204E;CUNEIFORM SIGN BU OVER BU AB;Lo;0;L;;;;;N;;;;; +1204F;CUNEIFORM SIGN BU OVER BU UN;Lo;0;L;;;;;N;;;;; +12050;CUNEIFORM SIGN BU CROSSING BU;Lo;0;L;;;;;N;;;;; +12051;CUNEIFORM SIGN BULUG;Lo;0;L;;;;;N;;;;; +12052;CUNEIFORM SIGN BULUG OVER BULUG;Lo;0;L;;;;;N;;;;; +12053;CUNEIFORM SIGN BUR;Lo;0;L;;;;;N;;;;; +12054;CUNEIFORM SIGN BUR2;Lo;0;L;;;;;N;;;;; +12055;CUNEIFORM SIGN DA;Lo;0;L;;;;;N;;;;; +12056;CUNEIFORM SIGN DAG;Lo;0;L;;;;;N;;;;; +12057;CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH;Lo;0;L;;;;;N;;;;; +12058;CUNEIFORM SIGN DAG KISIM5 TIMES AMAR;Lo;0;L;;;;;N;;;;; +12059;CUNEIFORM SIGN DAG KISIM5 TIMES BALAG;Lo;0;L;;;;;N;;;;; +1205A;CUNEIFORM SIGN DAG KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; +1205B;CUNEIFORM SIGN DAG KISIM5 TIMES GA;Lo;0;L;;;;;N;;;;; +1205C;CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH;Lo;0;L;;;;;N;;;;; +1205D;CUNEIFORM SIGN DAG KISIM5 TIMES GI;Lo;0;L;;;;;N;;;;; +1205E;CUNEIFORM SIGN DAG KISIM5 TIMES GIR2;Lo;0;L;;;;;N;;;;; +1205F;CUNEIFORM SIGN DAG KISIM5 TIMES GUD;Lo;0;L;;;;;N;;;;; +12060;CUNEIFORM SIGN DAG KISIM5 TIMES HA;Lo;0;L;;;;;N;;;;; +12061;CUNEIFORM SIGN DAG KISIM5 TIMES IR;Lo;0;L;;;;;N;;;;; +12062;CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU;Lo;0;L;;;;;N;;;;; +12063;CUNEIFORM SIGN DAG KISIM5 TIMES KAK;Lo;0;L;;;;;N;;;;; +12064;CUNEIFORM SIGN DAG KISIM5 TIMES LA;Lo;0;L;;;;;N;;;;; +12065;CUNEIFORM SIGN DAG KISIM5 TIMES LU;Lo;0;L;;;;;N;;;;; +12066;CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2;Lo;0;L;;;;;N;;;;; +12067;CUNEIFORM SIGN DAG KISIM5 TIMES LUM;Lo;0;L;;;;;N;;;;; +12068;CUNEIFORM SIGN DAG KISIM5 TIMES NE;Lo;0;L;;;;;N;;;;; +12069;CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;; +1206A;CUNEIFORM SIGN DAG KISIM5 TIMES SI;Lo;0;L;;;;;N;;;;; +1206B;CUNEIFORM SIGN DAG KISIM5 TIMES TAK4;Lo;0;L;;;;;N;;;;; +1206C;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2;Lo;0;L;;;;;N;;;;; +1206D;CUNEIFORM SIGN DAG KISIM5 TIMES USH;Lo;0;L;;;;;N;;;;; +1206E;CUNEIFORM SIGN DAM;Lo;0;L;;;;;N;;;;; +1206F;CUNEIFORM SIGN DAR;Lo;0;L;;;;;N;;;;; +12070;CUNEIFORM SIGN DARA3;Lo;0;L;;;;;N;;;;; +12071;CUNEIFORM SIGN DARA4;Lo;0;L;;;;;N;;;;; +12072;CUNEIFORM SIGN DI;Lo;0;L;;;;;N;;;;; +12073;CUNEIFORM SIGN DIB;Lo;0;L;;;;;N;;;;; +12074;CUNEIFORM SIGN DIM;Lo;0;L;;;;;N;;;;; +12075;CUNEIFORM SIGN DIM TIMES SHE;Lo;0;L;;;;;N;;;;; +12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;; +12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;; +12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;; +12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;; +1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;; +1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;; +1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;; +1207D;CUNEIFORM SIGN DU SHESHIG;Lo;0;L;;;;;N;;;;; +1207E;CUNEIFORM SIGN DUB;Lo;0;L;;;;;N;;;;; +1207F;CUNEIFORM SIGN DUB TIMES ESH2;Lo;0;L;;;;;N;;;;; +12080;CUNEIFORM SIGN DUB2;Lo;0;L;;;;;N;;;;; +12081;CUNEIFORM SIGN DUG;Lo;0;L;;;;;N;;;;; +12082;CUNEIFORM SIGN DUGUD;Lo;0;L;;;;;N;;;;; +12083;CUNEIFORM SIGN DUH;Lo;0;L;;;;;N;;;;; +12084;CUNEIFORM SIGN DUN;Lo;0;L;;;;;N;;;;; +12085;CUNEIFORM SIGN DUN3;Lo;0;L;;;;;N;;;;; +12086;CUNEIFORM SIGN DUN3 GUNU;Lo;0;L;;;;;N;;;;; +12087;CUNEIFORM SIGN DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; +12088;CUNEIFORM SIGN DUN4;Lo;0;L;;;;;N;;;;; +12089;CUNEIFORM SIGN DUR2;Lo;0;L;;;;;N;;;;; +1208A;CUNEIFORM SIGN E;Lo;0;L;;;;;N;;;;; +1208B;CUNEIFORM SIGN E TIMES PAP;Lo;0;L;;;;;N;;;;; +1208C;CUNEIFORM SIGN E OVER E NUN OVER NUN;Lo;0;L;;;;;N;;;;; +1208D;CUNEIFORM SIGN E2;Lo;0;L;;;;;N;;;;; +1208E;CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA;Lo;0;L;;;;;N;;;;; +1208F;CUNEIFORM SIGN E2 TIMES GAR;Lo;0;L;;;;;N;;;;; +12090;CUNEIFORM SIGN E2 TIMES MI;Lo;0;L;;;;;N;;;;; +12091;CUNEIFORM SIGN E2 TIMES SAL;Lo;0;L;;;;;N;;;;; +12092;CUNEIFORM SIGN E2 TIMES SHE;Lo;0;L;;;;;N;;;;; +12093;CUNEIFORM SIGN E2 TIMES U;Lo;0;L;;;;;N;;;;; +12094;CUNEIFORM SIGN EDIN;Lo;0;L;;;;;N;;;;; +12095;CUNEIFORM SIGN EGIR;Lo;0;L;;;;;N;;;;; +12096;CUNEIFORM SIGN EL;Lo;0;L;;;;;N;;;;; +12097;CUNEIFORM SIGN EN;Lo;0;L;;;;;N;;;;; +12098;CUNEIFORM SIGN EN TIMES GAN2;Lo;0;L;;;;;N;;;;; +12099;CUNEIFORM SIGN EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1209A;CUNEIFORM SIGN EN TIMES ME;Lo;0;L;;;;;N;;;;; +1209B;CUNEIFORM SIGN EN CROSSING EN;Lo;0;L;;;;;N;;;;; +1209C;CUNEIFORM SIGN EN OPPOSING EN;Lo;0;L;;;;;N;;;;; +1209D;CUNEIFORM SIGN EN SQUARED;Lo;0;L;;;;;N;;;;; +1209E;CUNEIFORM SIGN EREN;Lo;0;L;;;;;N;;;;; +1209F;CUNEIFORM SIGN ERIN2;Lo;0;L;;;;;N;;;;; +120A0;CUNEIFORM SIGN ESH2;Lo;0;L;;;;;N;;;;; +120A1;CUNEIFORM SIGN EZEN;Lo;0;L;;;;;N;;;;; +120A2;CUNEIFORM SIGN EZEN TIMES A;Lo;0;L;;;;;N;;;;; +120A3;CUNEIFORM SIGN EZEN TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; +120A4;CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL;Lo;0;L;;;;;N;;;;; +120A5;CUNEIFORM SIGN EZEN TIMES AN;Lo;0;L;;;;;N;;;;; +120A6;CUNEIFORM SIGN EZEN TIMES BAD;Lo;0;L;;;;;N;;;;; +120A7;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;; +120A8;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;; +120A9;CUNEIFORM SIGN EZEN TIMES HA;Lo;0;L;;;;;N;;;;; +120AA;CUNEIFORM SIGN EZEN TIMES HA GUNU;Lo;0;L;;;;;N;;;;; +120AB;CUNEIFORM SIGN EZEN TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +120AC;CUNEIFORM SIGN EZEN TIMES KASKAL;Lo;0;L;;;;;N;;;;; +120AD;CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED;Lo;0;L;;;;;N;;;;; +120AE;CUNEIFORM SIGN EZEN TIMES KU3;Lo;0;L;;;;;N;;;;; +120AF;CUNEIFORM SIGN EZEN TIMES LA;Lo;0;L;;;;;N;;;;; +120B0;CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL;Lo;0;L;;;;;N;;;;; +120B1;CUNEIFORM SIGN EZEN TIMES LI;Lo;0;L;;;;;N;;;;; +120B2;CUNEIFORM SIGN EZEN TIMES LU;Lo;0;L;;;;;N;;;;; +120B3;CUNEIFORM SIGN EZEN TIMES U2;Lo;0;L;;;;;N;;;;; +120B4;CUNEIFORM SIGN EZEN TIMES UD;Lo;0;L;;;;;N;;;;; +120B5;CUNEIFORM SIGN GA;Lo;0;L;;;;;N;;;;; +120B6;CUNEIFORM SIGN GA GUNU;Lo;0;L;;;;;N;;;;; +120B7;CUNEIFORM SIGN GA2;Lo;0;L;;;;;N;;;;; +120B8;CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; +120B9;CUNEIFORM SIGN GA2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; +120BA;CUNEIFORM SIGN GA2 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; +120BB;CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB;Lo;0;L;;;;;N;;;;; +120BC;CUNEIFORM SIGN GA2 TIMES AN;Lo;0;L;;;;;N;;;;; +120BD;CUNEIFORM SIGN GA2 TIMES ASH;Lo;0;L;;;;;N;;;;; +120BE;CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL;Lo;0;L;;;;;N;;;;; +120BF;CUNEIFORM SIGN GA2 TIMES BAD;Lo;0;L;;;;;N;;;;; +120C0;CUNEIFORM SIGN GA2 TIMES BAR PLUS RA;Lo;0;L;;;;;N;;;;; +120C1;CUNEIFORM SIGN GA2 TIMES BUR;Lo;0;L;;;;;N;;;;; +120C2;CUNEIFORM SIGN GA2 TIMES BUR PLUS RA;Lo;0;L;;;;;N;;;;; +120C3;CUNEIFORM SIGN GA2 TIMES DA;Lo;0;L;;;;;N;;;;; +120C4;CUNEIFORM SIGN GA2 TIMES DI;Lo;0;L;;;;;N;;;;; +120C5;CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE;Lo;0;L;;;;;N;;;;; +120C6;CUNEIFORM SIGN GA2 TIMES DUB;Lo;0;L;;;;;N;;;;; +120C7;CUNEIFORM SIGN GA2 TIMES EL;Lo;0;L;;;;;N;;;;; +120C8;CUNEIFORM SIGN GA2 TIMES EL PLUS LA;Lo;0;L;;;;;N;;;;; +120C9;CUNEIFORM SIGN GA2 TIMES EN;Lo;0;L;;;;;N;;;;; +120CA;CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +120CB;CUNEIFORM SIGN GA2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +120CC;CUNEIFORM SIGN GA2 TIMES GAR;Lo;0;L;;;;;N;;;;; +120CD;CUNEIFORM SIGN GA2 TIMES GI;Lo;0;L;;;;;N;;;;; +120CE;CUNEIFORM SIGN GA2 TIMES GI4;Lo;0;L;;;;;N;;;;; +120CF;CUNEIFORM SIGN GA2 TIMES GI4 PLUS A;Lo;0;L;;;;;N;;;;; +120D0;CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU;Lo;0;L;;;;;N;;;;; +120D1;CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2;Lo;0;L;;;;;N;;;;; +120D2;CUNEIFORM SIGN GA2 TIMES HAL;Lo;0;L;;;;;N;;;;; +120D3;CUNEIFORM SIGN GA2 TIMES HAL PLUS LA;Lo;0;L;;;;;N;;;;; +120D4;CUNEIFORM SIGN GA2 TIMES HI PLUS LI;Lo;0;L;;;;;N;;;;; +120D5;CUNEIFORM SIGN GA2 TIMES HUB2;Lo;0;L;;;;;N;;;;; +120D6;CUNEIFORM SIGN GA2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +120D7;CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH;Lo;0;L;;;;;N;;;;; +120D8;CUNEIFORM SIGN GA2 TIMES KAK;Lo;0;L;;;;;N;;;;; +120D9;CUNEIFORM SIGN GA2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; +120DA;CUNEIFORM SIGN GA2 TIMES KID;Lo;0;L;;;;;N;;;;; +120DB;CUNEIFORM SIGN GA2 TIMES KID PLUS LAL;Lo;0;L;;;;;N;;;;; +120DC;CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN;Lo;0;L;;;;;N;;;;; +120DD;CUNEIFORM SIGN GA2 TIMES LA;Lo;0;L;;;;;N;;;;; +120DE;CUNEIFORM SIGN GA2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +120DF;CUNEIFORM SIGN GA2 TIMES MI;Lo;0;L;;;;;N;;;;; +120E0;CUNEIFORM SIGN GA2 TIMES NUN;Lo;0;L;;;;;N;;;;; +120E1;CUNEIFORM SIGN GA2 TIMES NUN OVER NUN;Lo;0;L;;;;;N;;;;; +120E2;CUNEIFORM SIGN GA2 TIMES PA;Lo;0;L;;;;;N;;;;; +120E3;CUNEIFORM SIGN GA2 TIMES SAL;Lo;0;L;;;;;N;;;;; +120E4;CUNEIFORM SIGN GA2 TIMES SAR;Lo;0;L;;;;;N;;;;; +120E5;CUNEIFORM SIGN GA2 TIMES SHE;Lo;0;L;;;;;N;;;;; +120E6;CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR;Lo;0;L;;;;;N;;;;; +120E7;CUNEIFORM SIGN GA2 TIMES SHID;Lo;0;L;;;;;N;;;;; +120E8;CUNEIFORM SIGN GA2 TIMES SUM;Lo;0;L;;;;;N;;;;; +120E9;CUNEIFORM SIGN GA2 TIMES TAK4;Lo;0;L;;;;;N;;;;; +120EA;CUNEIFORM SIGN GA2 TIMES U;Lo;0;L;;;;;N;;;;; +120EB;CUNEIFORM SIGN GA2 TIMES UD;Lo;0;L;;;;;N;;;;; +120EC;CUNEIFORM SIGN GA2 TIMES UD PLUS DU;Lo;0;L;;;;;N;;;;; +120ED;CUNEIFORM SIGN GA2 OVER GA2;Lo;0;L;;;;;N;;;;; +120EE;CUNEIFORM SIGN GABA;Lo;0;L;;;;;N;;;;; +120EF;CUNEIFORM SIGN GABA CROSSING GABA;Lo;0;L;;;;;N;;;;; +120F0;CUNEIFORM SIGN GAD;Lo;0;L;;;;;N;;;;; +120F1;CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +120F2;CUNEIFORM SIGN GAL;Lo;0;L;;;;;N;;;;; +120F3;CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +120F4;CUNEIFORM SIGN GALAM;Lo;0;L;;;;;N;;;;; +120F5;CUNEIFORM SIGN GAM;Lo;0;L;;;;;N;;;;; +120F6;CUNEIFORM SIGN GAN;Lo;0;L;;;;;N;;;;; +120F7;CUNEIFORM SIGN GAN2;Lo;0;L;;;;;N;;;;; +120F8;CUNEIFORM SIGN GAN2 TENU;Lo;0;L;;;;;N;;;;; +120F9;CUNEIFORM SIGN GAN2 OVER GAN2;Lo;0;L;;;;;N;;;;; +120FA;CUNEIFORM SIGN GAN2 CROSSING GAN2;Lo;0;L;;;;;N;;;;; +120FB;CUNEIFORM SIGN GAR;Lo;0;L;;;;;N;;;;; +120FC;CUNEIFORM SIGN GAR3;Lo;0;L;;;;;N;;;;; +120FD;CUNEIFORM SIGN GASHAN;Lo;0;L;;;;;N;;;;; +120FE;CUNEIFORM SIGN GESHTIN;Lo;0;L;;;;;N;;;;; +120FF;CUNEIFORM SIGN GESHTIN TIMES KUR;Lo;0;L;;;;;N;;;;; +12100;CUNEIFORM SIGN GI;Lo;0;L;;;;;N;;;;; +12101;CUNEIFORM SIGN GI TIMES E;Lo;0;L;;;;;N;;;;; +12102;CUNEIFORM SIGN GI TIMES U;Lo;0;L;;;;;N;;;;; +12103;CUNEIFORM SIGN GI CROSSING GI;Lo;0;L;;;;;N;;;;; +12104;CUNEIFORM SIGN GI4;Lo;0;L;;;;;N;;;;; +12105;CUNEIFORM SIGN GI4 OVER GI4;Lo;0;L;;;;;N;;;;; +12106;CUNEIFORM SIGN GI4 CROSSING GI4;Lo;0;L;;;;;N;;;;; +12107;CUNEIFORM SIGN GIDIM;Lo;0;L;;;;;N;;;;; +12108;CUNEIFORM SIGN GIR2;Lo;0;L;;;;;N;;;;; +12109;CUNEIFORM SIGN GIR2 GUNU;Lo;0;L;;;;;N;;;;; +1210A;CUNEIFORM SIGN GIR3;Lo;0;L;;;;;N;;;;; +1210B;CUNEIFORM SIGN GIR3 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;; +1210C;CUNEIFORM SIGN GIR3 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1210D;CUNEIFORM SIGN GIR3 TIMES IGI;Lo;0;L;;;;;N;;;;; +1210E;CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI;Lo;0;L;;;;;N;;;;; +1210F;CUNEIFORM SIGN GIR3 TIMES PA;Lo;0;L;;;;;N;;;;; +12110;CUNEIFORM SIGN GISAL;Lo;0;L;;;;;N;;;;; +12111;CUNEIFORM SIGN GISH;Lo;0;L;;;;;N;;;;; +12112;CUNEIFORM SIGN GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; +12113;CUNEIFORM SIGN GISH TIMES BAD;Lo;0;L;;;;;N;;;;; +12114;CUNEIFORM SIGN GISH TIMES TAK4;Lo;0;L;;;;;N;;;;; +12115;CUNEIFORM SIGN GISH TENU;Lo;0;L;;;;;N;;;;; +12116;CUNEIFORM SIGN GU;Lo;0;L;;;;;N;;;;; +12117;CUNEIFORM SIGN GU CROSSING GU;Lo;0;L;;;;;N;;;;; +12118;CUNEIFORM SIGN GU2;Lo;0;L;;;;;N;;;;; +12119;CUNEIFORM SIGN GU2 TIMES KAK;Lo;0;L;;;;;N;;;;; +1211A;CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +1211B;CUNEIFORM SIGN GU2 TIMES NUN;Lo;0;L;;;;;N;;;;; +1211C;CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2;Lo;0;L;;;;;N;;;;; +1211D;CUNEIFORM SIGN GU2 GUNU;Lo;0;L;;;;;N;;;;; +1211E;CUNEIFORM SIGN GUD;Lo;0;L;;;;;N;;;;; +1211F;CUNEIFORM SIGN GUD TIMES A PLUS KUR;Lo;0;L;;;;;N;;;;; +12120;CUNEIFORM SIGN GUD TIMES KUR;Lo;0;L;;;;;N;;;;; +12121;CUNEIFORM SIGN GUD OVER GUD LUGAL;Lo;0;L;;;;;N;;;;; +12122;CUNEIFORM SIGN GUL;Lo;0;L;;;;;N;;;;; +12123;CUNEIFORM SIGN GUM;Lo;0;L;;;;;N;;;;; +12124;CUNEIFORM SIGN GUM TIMES SHE;Lo;0;L;;;;;N;;;;; +12125;CUNEIFORM SIGN GUR;Lo;0;L;;;;;N;;;;; +12126;CUNEIFORM SIGN GUR7;Lo;0;L;;;;;N;;;;; +12127;CUNEIFORM SIGN GURUN;Lo;0;L;;;;;N;;;;; +12128;CUNEIFORM SIGN GURUSH;Lo;0;L;;;;;N;;;;; +12129;CUNEIFORM SIGN HA;Lo;0;L;;;;;N;;;;; +1212A;CUNEIFORM SIGN HA TENU;Lo;0;L;;;;;N;;;;; +1212B;CUNEIFORM SIGN HA GUNU;Lo;0;L;;;;;N;;;;; +1212C;CUNEIFORM SIGN HAL;Lo;0;L;;;;;N;;;;; +1212D;CUNEIFORM SIGN HI;Lo;0;L;;;;;N;;;;; +1212E;CUNEIFORM SIGN HI TIMES ASH;Lo;0;L;;;;;N;;;;; +1212F;CUNEIFORM SIGN HI TIMES ASH2;Lo;0;L;;;;;N;;;;; +12130;CUNEIFORM SIGN HI TIMES BAD;Lo;0;L;;;;;N;;;;; +12131;CUNEIFORM SIGN HI TIMES DISH;Lo;0;L;;;;;N;;;;; +12132;CUNEIFORM SIGN HI TIMES GAD;Lo;0;L;;;;;N;;;;; +12133;CUNEIFORM SIGN HI TIMES KIN;Lo;0;L;;;;;N;;;;; +12134;CUNEIFORM SIGN HI TIMES NUN;Lo;0;L;;;;;N;;;;; +12135;CUNEIFORM SIGN HI TIMES SHE;Lo;0;L;;;;;N;;;;; +12136;CUNEIFORM SIGN HI TIMES U;Lo;0;L;;;;;N;;;;; +12137;CUNEIFORM SIGN HU;Lo;0;L;;;;;N;;;;; +12138;CUNEIFORM SIGN HUB2;Lo;0;L;;;;;N;;;;; +12139;CUNEIFORM SIGN HUB2 TIMES AN;Lo;0;L;;;;;N;;;;; +1213A;CUNEIFORM SIGN HUB2 TIMES HAL;Lo;0;L;;;;;N;;;;; +1213B;CUNEIFORM SIGN HUB2 TIMES KASKAL;Lo;0;L;;;;;N;;;;; +1213C;CUNEIFORM SIGN HUB2 TIMES LISH;Lo;0;L;;;;;N;;;;; +1213D;CUNEIFORM SIGN HUB2 TIMES UD;Lo;0;L;;;;;N;;;;; +1213E;CUNEIFORM SIGN HUL2;Lo;0;L;;;;;N;;;;; +1213F;CUNEIFORM SIGN I;Lo;0;L;;;;;N;;;;; +12140;CUNEIFORM SIGN I A;Lo;0;L;;;;;N;;;;; +12141;CUNEIFORM SIGN IB;Lo;0;L;;;;;N;;;;; +12142;CUNEIFORM SIGN IDIM;Lo;0;L;;;;;N;;;;; +12143;CUNEIFORM SIGN IDIM OVER IDIM BUR;Lo;0;L;;;;;N;;;;; +12144;CUNEIFORM SIGN IDIM OVER IDIM SQUARED;Lo;0;L;;;;;N;;;;; +12145;CUNEIFORM SIGN IG;Lo;0;L;;;;;N;;;;; +12146;CUNEIFORM SIGN IGI;Lo;0;L;;;;;N;;;;; +12147;CUNEIFORM SIGN IGI DIB;Lo;0;L;;;;;N;;;;; +12148;CUNEIFORM SIGN IGI RI;Lo;0;L;;;;;N;;;;; +12149;CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD;Lo;0;L;;;;;N;;;;; +1214A;CUNEIFORM SIGN IGI GUNU;Lo;0;L;;;;;N;;;;; +1214B;CUNEIFORM SIGN IL;Lo;0;L;;;;;N;;;;; +1214C;CUNEIFORM SIGN IL TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1214D;CUNEIFORM SIGN IL2;Lo;0;L;;;;;N;;;;; +1214E;CUNEIFORM SIGN IM;Lo;0;L;;;;;N;;;;; +1214F;CUNEIFORM SIGN IM TIMES TAK4;Lo;0;L;;;;;N;;;;; +12150;CUNEIFORM SIGN IM CROSSING IM;Lo;0;L;;;;;N;;;;; +12151;CUNEIFORM SIGN IM OPPOSING IM;Lo;0;L;;;;;N;;;;; +12152;CUNEIFORM SIGN IM SQUARED;Lo;0;L;;;;;N;;;;; +12153;CUNEIFORM SIGN IMIN;Lo;0;L;;;;;N;;;;; +12154;CUNEIFORM SIGN IN;Lo;0;L;;;;;N;;;;; +12155;CUNEIFORM SIGN IR;Lo;0;L;;;;;N;;;;; +12156;CUNEIFORM SIGN ISH;Lo;0;L;;;;;N;;;;; +12157;CUNEIFORM SIGN KA;Lo;0;L;;;;;N;;;;; +12158;CUNEIFORM SIGN KA TIMES A;Lo;0;L;;;;;N;;;;; +12159;CUNEIFORM SIGN KA TIMES AD;Lo;0;L;;;;;N;;;;; +1215A;CUNEIFORM SIGN KA TIMES AD PLUS KU3;Lo;0;L;;;;;N;;;;; +1215B;CUNEIFORM SIGN KA TIMES ASH2;Lo;0;L;;;;;N;;;;; +1215C;CUNEIFORM SIGN KA TIMES BAD;Lo;0;L;;;;;N;;;;; +1215D;CUNEIFORM SIGN KA TIMES BALAG;Lo;0;L;;;;;N;;;;; +1215E;CUNEIFORM SIGN KA TIMES BAR;Lo;0;L;;;;;N;;;;; +1215F;CUNEIFORM SIGN KA TIMES BI;Lo;0;L;;;;;N;;;;; +12160;CUNEIFORM SIGN KA TIMES ERIN2;Lo;0;L;;;;;N;;;;; +12161;CUNEIFORM SIGN KA TIMES ESH2;Lo;0;L;;;;;N;;;;; +12162;CUNEIFORM SIGN KA TIMES GA;Lo;0;L;;;;;N;;;;; +12163;CUNEIFORM SIGN KA TIMES GAL;Lo;0;L;;;;;N;;;;; +12164;CUNEIFORM SIGN KA TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12165;CUNEIFORM SIGN KA TIMES GAR;Lo;0;L;;;;;N;;;;; +12166;CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A;Lo;0;L;;;;;N;;;;; +12167;CUNEIFORM SIGN KA TIMES GI;Lo;0;L;;;;;N;;;;; +12168;CUNEIFORM SIGN KA TIMES GIR2;Lo;0;L;;;;;N;;;;; +12169;CUNEIFORM SIGN KA TIMES GISH PLUS SAR;Lo;0;L;;;;;N;;;;; +1216A;CUNEIFORM SIGN KA TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;; +1216B;CUNEIFORM SIGN KA TIMES GU;Lo;0;L;;;;;N;;;;; +1216C;CUNEIFORM SIGN KA TIMES GUR7;Lo;0;L;;;;;N;;;;; +1216D;CUNEIFORM SIGN KA TIMES IGI;Lo;0;L;;;;;N;;;;; +1216E;CUNEIFORM SIGN KA TIMES IM;Lo;0;L;;;;;N;;;;; +1216F;CUNEIFORM SIGN KA TIMES KAK;Lo;0;L;;;;;N;;;;; +12170;CUNEIFORM SIGN KA TIMES KI;Lo;0;L;;;;;N;;;;; +12171;CUNEIFORM SIGN KA TIMES KID;Lo;0;L;;;;;N;;;;; +12172;CUNEIFORM SIGN KA TIMES LI;Lo;0;L;;;;;N;;;;; +12173;CUNEIFORM SIGN KA TIMES LU;Lo;0;L;;;;;N;;;;; +12174;CUNEIFORM SIGN KA TIMES ME;Lo;0;L;;;;;N;;;;; +12175;CUNEIFORM SIGN KA TIMES ME PLUS DU;Lo;0;L;;;;;N;;;;; +12176;CUNEIFORM SIGN KA TIMES ME PLUS GI;Lo;0;L;;;;;N;;;;; +12177;CUNEIFORM SIGN KA TIMES ME PLUS TE;Lo;0;L;;;;;N;;;;; +12178;CUNEIFORM SIGN KA TIMES MI;Lo;0;L;;;;;N;;;;; +12179;CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ;Lo;0;L;;;;;N;;;;; +1217A;CUNEIFORM SIGN KA TIMES NE;Lo;0;L;;;;;N;;;;; +1217B;CUNEIFORM SIGN KA TIMES NUN;Lo;0;L;;;;;N;;;;; +1217C;CUNEIFORM SIGN KA TIMES PI;Lo;0;L;;;;;N;;;;; +1217D;CUNEIFORM SIGN KA TIMES RU;Lo;0;L;;;;;N;;;;; +1217E;CUNEIFORM SIGN KA TIMES SA;Lo;0;L;;;;;N;;;;; +1217F;CUNEIFORM SIGN KA TIMES SAR;Lo;0;L;;;;;N;;;;; +12180;CUNEIFORM SIGN KA TIMES SHA;Lo;0;L;;;;;N;;;;; +12181;CUNEIFORM SIGN KA TIMES SHE;Lo;0;L;;;;;N;;;;; +12182;CUNEIFORM SIGN KA TIMES SHID;Lo;0;L;;;;;N;;;;; +12183;CUNEIFORM SIGN KA TIMES SHU;Lo;0;L;;;;;N;;;;; +12184;CUNEIFORM SIGN KA TIMES SIG;Lo;0;L;;;;;N;;;;; +12185;CUNEIFORM SIGN KA TIMES SUHUR;Lo;0;L;;;;;N;;;;; +12186;CUNEIFORM SIGN KA TIMES TAR;Lo;0;L;;;;;N;;;;; +12187;CUNEIFORM SIGN KA TIMES U;Lo;0;L;;;;;N;;;;; +12188;CUNEIFORM SIGN KA TIMES U2;Lo;0;L;;;;;N;;;;; +12189;CUNEIFORM SIGN KA TIMES UD;Lo;0;L;;;;;N;;;;; +1218A;CUNEIFORM SIGN KA TIMES UMUM TIMES PA;Lo;0;L;;;;;N;;;;; +1218B;CUNEIFORM SIGN KA TIMES USH;Lo;0;L;;;;;N;;;;; +1218C;CUNEIFORM SIGN KA TIMES ZI;Lo;0;L;;;;;N;;;;; +1218D;CUNEIFORM SIGN KA2;Lo;0;L;;;;;N;;;;; +1218E;CUNEIFORM SIGN KA2 CROSSING KA2;Lo;0;L;;;;;N;;;;; +1218F;CUNEIFORM SIGN KAB;Lo;0;L;;;;;N;;;;; +12190;CUNEIFORM SIGN KAD2;Lo;0;L;;;;;N;;;;; +12191;CUNEIFORM SIGN KAD3;Lo;0;L;;;;;N;;;;; +12192;CUNEIFORM SIGN KAD4;Lo;0;L;;;;;N;;;;; +12193;CUNEIFORM SIGN KAD5;Lo;0;L;;;;;N;;;;; +12194;CUNEIFORM SIGN KAD5 OVER KAD5;Lo;0;L;;;;;N;;;;; +12195;CUNEIFORM SIGN KAK;Lo;0;L;;;;;N;;;;; +12196;CUNEIFORM SIGN KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +12197;CUNEIFORM SIGN KAL;Lo;0;L;;;;;N;;;;; +12198;CUNEIFORM SIGN KAL TIMES BAD;Lo;0;L;;;;;N;;;;; +12199;CUNEIFORM SIGN KAL CROSSING KAL;Lo;0;L;;;;;N;;;;; +1219A;CUNEIFORM SIGN KAM2;Lo;0;L;;;;;N;;;;; +1219B;CUNEIFORM SIGN KAM4;Lo;0;L;;;;;N;;;;; +1219C;CUNEIFORM SIGN KASKAL;Lo;0;L;;;;;N;;;;; +1219D;CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; +1219E;CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;; +1219F;CUNEIFORM SIGN KESH2;Lo;0;L;;;;;N;;;;; +121A0;CUNEIFORM SIGN KI;Lo;0;L;;;;;N;;;;; +121A1;CUNEIFORM SIGN KI TIMES BAD;Lo;0;L;;;;;N;;;;; +121A2;CUNEIFORM SIGN KI TIMES U;Lo;0;L;;;;;N;;;;; +121A3;CUNEIFORM SIGN KI TIMES UD;Lo;0;L;;;;;N;;;;; +121A4;CUNEIFORM SIGN KID;Lo;0;L;;;;;N;;;;; +121A5;CUNEIFORM SIGN KIN;Lo;0;L;;;;;N;;;;; +121A6;CUNEIFORM SIGN KISAL;Lo;0;L;;;;;N;;;;; +121A7;CUNEIFORM SIGN KISH;Lo;0;L;;;;;N;;;;; +121A8;CUNEIFORM SIGN KISIM5;Lo;0;L;;;;;N;;;;; +121A9;CUNEIFORM SIGN KISIM5 OVER KISIM5;Lo;0;L;;;;;N;;;;; +121AA;CUNEIFORM SIGN KU;Lo;0;L;;;;;N;;;;; +121AB;CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2;Lo;0;L;;;;;N;;;;; +121AC;CUNEIFORM SIGN KU3;Lo;0;L;;;;;N;;;;; +121AD;CUNEIFORM SIGN KU4;Lo;0;L;;;;;N;;;;; +121AE;CUNEIFORM SIGN KU4 VARIANT FORM;Lo;0;L;;;;;N;;;;; +121AF;CUNEIFORM SIGN KU7;Lo;0;L;;;;;N;;;;; +121B0;CUNEIFORM SIGN KUL;Lo;0;L;;;;;N;;;;; +121B1;CUNEIFORM SIGN KUL GUNU;Lo;0;L;;;;;N;;;;; +121B2;CUNEIFORM SIGN KUN;Lo;0;L;;;;;N;;;;; +121B3;CUNEIFORM SIGN KUR;Lo;0;L;;;;;N;;;;; +121B4;CUNEIFORM SIGN KUR OPPOSING KUR;Lo;0;L;;;;;N;;;;; +121B5;CUNEIFORM SIGN KUSHU2;Lo;0;L;;;;;N;;;;; +121B6;CUNEIFORM SIGN KWU318;Lo;0;L;;;;;N;;;;; +121B7;CUNEIFORM SIGN LA;Lo;0;L;;;;;N;;;;; +121B8;CUNEIFORM SIGN LAGAB;Lo;0;L;;;;;N;;;;; +121B9;CUNEIFORM SIGN LAGAB TIMES A;Lo;0;L;;;;;N;;;;; +121BA;CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;; +121BB;CUNEIFORM SIGN LAGAB TIMES A PLUS GAR;Lo;0;L;;;;;N;;;;; +121BC;CUNEIFORM SIGN LAGAB TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;; +121BD;CUNEIFORM SIGN LAGAB TIMES AL;Lo;0;L;;;;;N;;;;; +121BE;CUNEIFORM SIGN LAGAB TIMES AN;Lo;0;L;;;;;N;;;;; +121BF;CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU;Lo;0;L;;;;;N;;;;; +121C0;CUNEIFORM SIGN LAGAB TIMES BAD;Lo;0;L;;;;;N;;;;; +121C1;CUNEIFORM SIGN LAGAB TIMES BI;Lo;0;L;;;;;N;;;;; +121C2;CUNEIFORM SIGN LAGAB TIMES DAR;Lo;0;L;;;;;N;;;;; +121C3;CUNEIFORM SIGN LAGAB TIMES EN;Lo;0;L;;;;;N;;;;; +121C4;CUNEIFORM SIGN LAGAB TIMES GA;Lo;0;L;;;;;N;;;;; +121C5;CUNEIFORM SIGN LAGAB TIMES GAR;Lo;0;L;;;;;N;;;;; +121C6;CUNEIFORM SIGN LAGAB TIMES GUD;Lo;0;L;;;;;N;;;;; +121C7;CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD;Lo;0;L;;;;;N;;;;; +121C8;CUNEIFORM SIGN LAGAB TIMES HA;Lo;0;L;;;;;N;;;;; +121C9;CUNEIFORM SIGN LAGAB TIMES HAL;Lo;0;L;;;;;N;;;;; +121CA;CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN;Lo;0;L;;;;;N;;;;; +121CB;CUNEIFORM SIGN LAGAB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +121CC;CUNEIFORM SIGN LAGAB TIMES IM;Lo;0;L;;;;;N;;;;; +121CD;CUNEIFORM SIGN LAGAB TIMES IM PLUS HA;Lo;0;L;;;;;N;;;;; +121CE;CUNEIFORM SIGN LAGAB TIMES IM PLUS LU;Lo;0;L;;;;;N;;;;; +121CF;CUNEIFORM SIGN LAGAB TIMES KI;Lo;0;L;;;;;N;;;;; +121D0;CUNEIFORM SIGN LAGAB TIMES KIN;Lo;0;L;;;;;N;;;;; +121D1;CUNEIFORM SIGN LAGAB TIMES KU3;Lo;0;L;;;;;N;;;;; +121D2;CUNEIFORM SIGN LAGAB TIMES KUL;Lo;0;L;;;;;N;;;;; +121D3;CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A;Lo;0;L;;;;;N;;;;; +121D4;CUNEIFORM SIGN LAGAB TIMES LAGAB;Lo;0;L;;;;;N;;;;; +121D5;CUNEIFORM SIGN LAGAB TIMES LISH;Lo;0;L;;;;;N;;;;; +121D6;CUNEIFORM SIGN LAGAB TIMES LU;Lo;0;L;;;;;N;;;;; +121D7;CUNEIFORM SIGN LAGAB TIMES LUL;Lo;0;L;;;;;N;;;;; +121D8;CUNEIFORM SIGN LAGAB TIMES ME;Lo;0;L;;;;;N;;;;; +121D9;CUNEIFORM SIGN LAGAB TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +121DA;CUNEIFORM SIGN LAGAB TIMES MUSH;Lo;0;L;;;;;N;;;;; +121DB;CUNEIFORM SIGN LAGAB TIMES NE;Lo;0;L;;;;;N;;;;; +121DC;CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; +121DD;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2;Lo;0;L;;;;;N;;;;; +121DE;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU;Lo;0;L;;;;;N;;;;; +121DF;CUNEIFORM SIGN LAGAB TIMES SHU2;Lo;0;L;;;;;N;;;;; +121E0;CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2;Lo;0;L;;;;;N;;;;; +121E1;CUNEIFORM SIGN LAGAB TIMES SUM;Lo;0;L;;;;;N;;;;; +121E2;CUNEIFORM SIGN LAGAB TIMES TAG;Lo;0;L;;;;;N;;;;; +121E3;CUNEIFORM SIGN LAGAB TIMES TAK4;Lo;0;L;;;;;N;;;;; +121E4;CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA;Lo;0;L;;;;;N;;;;; +121E5;CUNEIFORM SIGN LAGAB TIMES U;Lo;0;L;;;;;N;;;;; +121E6;CUNEIFORM SIGN LAGAB TIMES U PLUS A;Lo;0;L;;;;;N;;;;; +121E7;CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; +121E8;CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; +121E9;CUNEIFORM SIGN LAGAB TIMES UD;Lo;0;L;;;;;N;;;;; +121EA;CUNEIFORM SIGN LAGAB TIMES USH;Lo;0;L;;;;;N;;;;; +121EB;CUNEIFORM SIGN LAGAB SQUARED;Lo;0;L;;;;;N;;;;; +121EC;CUNEIFORM SIGN LAGAR;Lo;0;L;;;;;N;;;;; +121ED;CUNEIFORM SIGN LAGAR TIMES SHE;Lo;0;L;;;;;N;;;;; +121EE;CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;; +121EF;CUNEIFORM SIGN LAGAR GUNU;Lo;0;L;;;;;N;;;;; +121F0;CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE;Lo;0;L;;;;;N;;;;; +121F1;CUNEIFORM SIGN LAHSHU;Lo;0;L;;;;;N;;;;; +121F2;CUNEIFORM SIGN LAL;Lo;0;L;;;;;N;;;;; +121F3;CUNEIFORM SIGN LAL TIMES LAL;Lo;0;L;;;;;N;;;;; +121F4;CUNEIFORM SIGN LAM;Lo;0;L;;;;;N;;;;; +121F5;CUNEIFORM SIGN LAM TIMES KUR;Lo;0;L;;;;;N;;;;; +121F6;CUNEIFORM SIGN LAM TIMES KUR PLUS RU;Lo;0;L;;;;;N;;;;; +121F7;CUNEIFORM SIGN LI;Lo;0;L;;;;;N;;;;; +121F8;CUNEIFORM SIGN LIL;Lo;0;L;;;;;N;;;;; +121F9;CUNEIFORM SIGN LIMMU2;Lo;0;L;;;;;N;;;;; +121FA;CUNEIFORM SIGN LISH;Lo;0;L;;;;;N;;;;; +121FB;CUNEIFORM SIGN LU;Lo;0;L;;;;;N;;;;; +121FC;CUNEIFORM SIGN LU TIMES BAD;Lo;0;L;;;;;N;;;;; +121FD;CUNEIFORM SIGN LU2;Lo;0;L;;;;;N;;;;; +121FE;CUNEIFORM SIGN LU2 TIMES AL;Lo;0;L;;;;;N;;;;; +121FF;CUNEIFORM SIGN LU2 TIMES BAD;Lo;0;L;;;;;N;;;;; +12200;CUNEIFORM SIGN LU2 TIMES ESH2;Lo;0;L;;;;;N;;;;; +12201;CUNEIFORM SIGN LU2 TIMES ESH2 TENU;Lo;0;L;;;;;N;;;;; +12202;CUNEIFORM SIGN LU2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12203;CUNEIFORM SIGN LU2 TIMES HI TIMES BAD;Lo;0;L;;;;;N;;;;; +12204;CUNEIFORM SIGN LU2 TIMES IM;Lo;0;L;;;;;N;;;;; +12205;CUNEIFORM SIGN LU2 TIMES KAD2;Lo;0;L;;;;;N;;;;; +12206;CUNEIFORM SIGN LU2 TIMES KAD3;Lo;0;L;;;;;N;;;;; +12207;CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH;Lo;0;L;;;;;N;;;;; +12208;CUNEIFORM SIGN LU2 TIMES KI;Lo;0;L;;;;;N;;;;; +12209;CUNEIFORM SIGN LU2 TIMES LA PLUS ASH;Lo;0;L;;;;;N;;;;; +1220A;CUNEIFORM SIGN LU2 TIMES LAGAB;Lo;0;L;;;;;N;;;;; +1220B;CUNEIFORM SIGN LU2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;; +1220C;CUNEIFORM SIGN LU2 TIMES NE;Lo;0;L;;;;;N;;;;; +1220D;CUNEIFORM SIGN LU2 TIMES NU;Lo;0;L;;;;;N;;;;; +1220E;CUNEIFORM SIGN LU2 TIMES SI PLUS ASH;Lo;0;L;;;;;N;;;;; +1220F;CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU;Lo;0;L;;;;;N;;;;; +12210;CUNEIFORM SIGN LU2 TIMES TUG2;Lo;0;L;;;;;N;;;;; +12211;CUNEIFORM SIGN LU2 TENU;Lo;0;L;;;;;N;;;;; +12212;CUNEIFORM SIGN LU2 CROSSING LU2;Lo;0;L;;;;;N;;;;; +12213;CUNEIFORM SIGN LU2 OPPOSING LU2;Lo;0;L;;;;;N;;;;; +12214;CUNEIFORM SIGN LU2 SQUARED;Lo;0;L;;;;;N;;;;; +12215;CUNEIFORM SIGN LU2 SHESHIG;Lo;0;L;;;;;N;;;;; +12216;CUNEIFORM SIGN LU3;Lo;0;L;;;;;N;;;;; +12217;CUNEIFORM SIGN LUGAL;Lo;0;L;;;;;N;;;;; +12218;CUNEIFORM SIGN LUGAL OVER LUGAL;Lo;0;L;;;;;N;;;;; +12219;CUNEIFORM SIGN LUGAL OPPOSING LUGAL;Lo;0;L;;;;;N;;;;; +1221A;CUNEIFORM SIGN LUGAL SHESHIG;Lo;0;L;;;;;N;;;;; +1221B;CUNEIFORM SIGN LUH;Lo;0;L;;;;;N;;;;; +1221C;CUNEIFORM SIGN LUL;Lo;0;L;;;;;N;;;;; +1221D;CUNEIFORM SIGN LUM;Lo;0;L;;;;;N;;;;; +1221E;CUNEIFORM SIGN LUM OVER LUM;Lo;0;L;;;;;N;;;;; +1221F;CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR;Lo;0;L;;;;;N;;;;; +12220;CUNEIFORM SIGN MA;Lo;0;L;;;;;N;;;;; +12221;CUNEIFORM SIGN MA TIMES TAK4;Lo;0;L;;;;;N;;;;; +12222;CUNEIFORM SIGN MA GUNU;Lo;0;L;;;;;N;;;;; +12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;; +12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;; +12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;; +12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;; +12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;; +12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;; +12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;; +1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;; +1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;; +1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;; +1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;; +1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;; +1222F;CUNEIFORM SIGN MUG GUNU;Lo;0;L;;;;;N;;;;; +12230;CUNEIFORM SIGN MUNSUB;Lo;0;L;;;;;N;;;;; +12231;CUNEIFORM SIGN MURGU2;Lo;0;L;;;;;N;;;;; +12232;CUNEIFORM SIGN MUSH;Lo;0;L;;;;;N;;;;; +12233;CUNEIFORM SIGN MUSH TIMES A;Lo;0;L;;;;;N;;;;; +12234;CUNEIFORM SIGN MUSH TIMES KUR;Lo;0;L;;;;;N;;;;; +12235;CUNEIFORM SIGN MUSH TIMES ZA;Lo;0;L;;;;;N;;;;; +12236;CUNEIFORM SIGN MUSH OVER MUSH;Lo;0;L;;;;;N;;;;; +12237;CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; +12238;CUNEIFORM SIGN MUSH CROSSING MUSH;Lo;0;L;;;;;N;;;;; +12239;CUNEIFORM SIGN MUSH3;Lo;0;L;;;;;N;;;;; +1223A;CUNEIFORM SIGN MUSH3 TIMES A;Lo;0;L;;;;;N;;;;; +1223B;CUNEIFORM SIGN MUSH3 TIMES A PLUS DI;Lo;0;L;;;;;N;;;;; +1223C;CUNEIFORM SIGN MUSH3 TIMES DI;Lo;0;L;;;;;N;;;;; +1223D;CUNEIFORM SIGN MUSH3 GUNU;Lo;0;L;;;;;N;;;;; +1223E;CUNEIFORM SIGN NA;Lo;0;L;;;;;N;;;;; +1223F;CUNEIFORM SIGN NA2;Lo;0;L;;;;;N;;;;; +12240;CUNEIFORM SIGN NAGA;Lo;0;L;;;;;N;;;;; +12241;CUNEIFORM SIGN NAGA INVERTED;Lo;0;L;;;;;N;;;;; +12242;CUNEIFORM SIGN NAGA TIMES SHU TENU;Lo;0;L;;;;;N;;;;; +12243;CUNEIFORM SIGN NAGA OPPOSING NAGA;Lo;0;L;;;;;N;;;;; +12244;CUNEIFORM SIGN NAGAR;Lo;0;L;;;;;N;;;;; +12245;CUNEIFORM SIGN NAM NUTILLU;Lo;0;L;;;;;N;;;;; +12246;CUNEIFORM SIGN NAM;Lo;0;L;;;;;N;;;;; +12247;CUNEIFORM SIGN NAM2;Lo;0;L;;;;;N;;;;; +12248;CUNEIFORM SIGN NE;Lo;0;L;;;;;N;;;;; +12249;CUNEIFORM SIGN NE TIMES A;Lo;0;L;;;;;N;;;;; +1224A;CUNEIFORM SIGN NE TIMES UD;Lo;0;L;;;;;N;;;;; +1224B;CUNEIFORM SIGN NE SHESHIG;Lo;0;L;;;;;N;;;;; +1224C;CUNEIFORM SIGN NI;Lo;0;L;;;;;N;;;;; +1224D;CUNEIFORM SIGN NI TIMES E;Lo;0;L;;;;;N;;;;; +1224E;CUNEIFORM SIGN NI2;Lo;0;L;;;;;N;;;;; +1224F;CUNEIFORM SIGN NIM;Lo;0;L;;;;;N;;;;; +12250;CUNEIFORM SIGN NIM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +12251;CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; +12252;CUNEIFORM SIGN NINDA2;Lo;0;L;;;;;N;;;;; +12253;CUNEIFORM SIGN NINDA2 TIMES AN;Lo;0;L;;;;;N;;;;; +12254;CUNEIFORM SIGN NINDA2 TIMES ASH;Lo;0;L;;;;;N;;;;; +12255;CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH;Lo;0;L;;;;;N;;;;; +12256;CUNEIFORM SIGN NINDA2 TIMES GUD;Lo;0;L;;;;;N;;;;; +12257;CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;; +12258;CUNEIFORM SIGN NINDA2 TIMES NE;Lo;0;L;;;;;N;;;;; +12259;CUNEIFORM SIGN NINDA2 TIMES NUN;Lo;0;L;;;;;N;;;;; +1225A;CUNEIFORM SIGN NINDA2 TIMES SHE;Lo;0;L;;;;;N;;;;; +1225B;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN;Lo;0;L;;;;;N;;;;; +1225C;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH;Lo;0;L;;;;;N;;;;; +1225D;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH;Lo;0;L;;;;;N;;;;; +1225E;CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; +1225F;CUNEIFORM SIGN NINDA2 TIMES USH;Lo;0;L;;;;;N;;;;; +12260;CUNEIFORM SIGN NISAG;Lo;0;L;;;;;N;;;;; +12261;CUNEIFORM SIGN NU;Lo;0;L;;;;;N;;;;; +12262;CUNEIFORM SIGN NU11;Lo;0;L;;;;;N;;;;; +12263;CUNEIFORM SIGN NUN;Lo;0;L;;;;;N;;;;; +12264;CUNEIFORM SIGN NUN LAGAR TIMES GAR;Lo;0;L;;;;;N;;;;; +12265;CUNEIFORM SIGN NUN LAGAR TIMES MASH;Lo;0;L;;;;;N;;;;; +12266;CUNEIFORM SIGN NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; +12267;CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;; +12268;CUNEIFORM SIGN NUN LAGAR TIMES USH;Lo;0;L;;;;;N;;;;; +12269;CUNEIFORM SIGN NUN TENU;Lo;0;L;;;;;N;;;;; +1226A;CUNEIFORM SIGN NUN OVER NUN;Lo;0;L;;;;;N;;;;; +1226B;CUNEIFORM SIGN NUN CROSSING NUN;Lo;0;L;;;;;N;;;;; +1226C;CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR;Lo;0;L;;;;;N;;;;; +1226D;CUNEIFORM SIGN NUNUZ;Lo;0;L;;;;;N;;;;; +1226E;CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB;Lo;0;L;;;;;N;;;;; +1226F;CUNEIFORM SIGN NUNUZ AB2 TIMES BI;Lo;0;L;;;;;N;;;;; +12270;CUNEIFORM SIGN NUNUZ AB2 TIMES DUG;Lo;0;L;;;;;N;;;;; +12271;CUNEIFORM SIGN NUNUZ AB2 TIMES GUD;Lo;0;L;;;;;N;;;;; +12272;CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +12273;CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3;Lo;0;L;;;;;N;;;;; +12274;CUNEIFORM SIGN NUNUZ AB2 TIMES LA;Lo;0;L;;;;;N;;;;; +12275;CUNEIFORM SIGN NUNUZ AB2 TIMES NE;Lo;0;L;;;;;N;;;;; +12276;CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3;Lo;0;L;;;;;N;;;;; +12277;CUNEIFORM SIGN NUNUZ AB2 TIMES U2;Lo;0;L;;;;;N;;;;; +12278;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;; +12279;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U;Lo;0;L;;;;;N;;;;; +1227A;CUNEIFORM SIGN PA;Lo;0;L;;;;;N;;;;; +1227B;CUNEIFORM SIGN PAD;Lo;0;L;;;;;N;;;;; +1227C;CUNEIFORM SIGN PAN;Lo;0;L;;;;;N;;;;; +1227D;CUNEIFORM SIGN PAP;Lo;0;L;;;;;N;;;;; +1227E;CUNEIFORM SIGN PESH2;Lo;0;L;;;;;N;;;;; +1227F;CUNEIFORM SIGN PI;Lo;0;L;;;;;N;;;;; +12280;CUNEIFORM SIGN PI TIMES A;Lo;0;L;;;;;N;;;;; +12281;CUNEIFORM SIGN PI TIMES AB;Lo;0;L;;;;;N;;;;; +12282;CUNEIFORM SIGN PI TIMES BI;Lo;0;L;;;;;N;;;;; +12283;CUNEIFORM SIGN PI TIMES BU;Lo;0;L;;;;;N;;;;; +12284;CUNEIFORM SIGN PI TIMES E;Lo;0;L;;;;;N;;;;; +12285;CUNEIFORM SIGN PI TIMES I;Lo;0;L;;;;;N;;;;; +12286;CUNEIFORM SIGN PI TIMES IB;Lo;0;L;;;;;N;;;;; +12287;CUNEIFORM SIGN PI TIMES U;Lo;0;L;;;;;N;;;;; +12288;CUNEIFORM SIGN PI TIMES U2;Lo;0;L;;;;;N;;;;; +12289;CUNEIFORM SIGN PI CROSSING PI;Lo;0;L;;;;;N;;;;; +1228A;CUNEIFORM SIGN PIRIG;Lo;0;L;;;;;N;;;;; +1228B;CUNEIFORM SIGN PIRIG TIMES KAL;Lo;0;L;;;;;N;;;;; +1228C;CUNEIFORM SIGN PIRIG TIMES UD;Lo;0;L;;;;;N;;;;; +1228D;CUNEIFORM SIGN PIRIG TIMES ZA;Lo;0;L;;;;;N;;;;; +1228E;CUNEIFORM SIGN PIRIG OPPOSING PIRIG;Lo;0;L;;;;;N;;;;; +1228F;CUNEIFORM SIGN RA;Lo;0;L;;;;;N;;;;; +12290;CUNEIFORM SIGN RAB;Lo;0;L;;;;;N;;;;; +12291;CUNEIFORM SIGN RI;Lo;0;L;;;;;N;;;;; +12292;CUNEIFORM SIGN RU;Lo;0;L;;;;;N;;;;; +12293;CUNEIFORM SIGN SA;Lo;0;L;;;;;N;;;;; +12294;CUNEIFORM SIGN SAG NUTILLU;Lo;0;L;;;;;N;;;;; +12295;CUNEIFORM SIGN SAG;Lo;0;L;;;;;N;;;;; +12296;CUNEIFORM SIGN SAG TIMES A;Lo;0;L;;;;;N;;;;; +12297;CUNEIFORM SIGN SAG TIMES DU;Lo;0;L;;;;;N;;;;; +12298;CUNEIFORM SIGN SAG TIMES DUB;Lo;0;L;;;;;N;;;;; +12299;CUNEIFORM SIGN SAG TIMES HA;Lo;0;L;;;;;N;;;;; +1229A;CUNEIFORM SIGN SAG TIMES KAK;Lo;0;L;;;;;N;;;;; +1229B;CUNEIFORM SIGN SAG TIMES KUR;Lo;0;L;;;;;N;;;;; +1229C;CUNEIFORM SIGN SAG TIMES LUM;Lo;0;L;;;;;N;;;;; +1229D;CUNEIFORM SIGN SAG TIMES MI;Lo;0;L;;;;;N;;;;; +1229E;CUNEIFORM SIGN SAG TIMES NUN;Lo;0;L;;;;;N;;;;; +1229F;CUNEIFORM SIGN SAG TIMES SAL;Lo;0;L;;;;;N;;;;; +122A0;CUNEIFORM SIGN SAG TIMES SHID;Lo;0;L;;;;;N;;;;; +122A1;CUNEIFORM SIGN SAG TIMES TAB;Lo;0;L;;;;;N;;;;; +122A2;CUNEIFORM SIGN SAG TIMES U2;Lo;0;L;;;;;N;;;;; +122A3;CUNEIFORM SIGN SAG TIMES UB;Lo;0;L;;;;;N;;;;; +122A4;CUNEIFORM SIGN SAG TIMES UM;Lo;0;L;;;;;N;;;;; +122A5;CUNEIFORM SIGN SAG TIMES UR;Lo;0;L;;;;;N;;;;; +122A6;CUNEIFORM SIGN SAG TIMES USH;Lo;0;L;;;;;N;;;;; +122A7;CUNEIFORM SIGN SAG OVER SAG;Lo;0;L;;;;;N;;;;; +122A8;CUNEIFORM SIGN SAG GUNU;Lo;0;L;;;;;N;;;;; +122A9;CUNEIFORM SIGN SAL;Lo;0;L;;;;;N;;;;; +122AA;CUNEIFORM SIGN SAL LAGAB TIMES ASH2;Lo;0;L;;;;;N;;;;; +122AB;CUNEIFORM SIGN SANGA2;Lo;0;L;;;;;N;;;;; +122AC;CUNEIFORM SIGN SAR;Lo;0;L;;;;;N;;;;; +122AD;CUNEIFORM SIGN SHA;Lo;0;L;;;;;N;;;;; +122AE;CUNEIFORM SIGN SHA3;Lo;0;L;;;;;N;;;;; +122AF;CUNEIFORM SIGN SHA3 TIMES A;Lo;0;L;;;;;N;;;;; +122B0;CUNEIFORM SIGN SHA3 TIMES BAD;Lo;0;L;;;;;N;;;;; +122B1;CUNEIFORM SIGN SHA3 TIMES GISH;Lo;0;L;;;;;N;;;;; +122B2;CUNEIFORM SIGN SHA3 TIMES NE;Lo;0;L;;;;;N;;;;; +122B3;CUNEIFORM SIGN SHA3 TIMES SHU2;Lo;0;L;;;;;N;;;;; +122B4;CUNEIFORM SIGN SHA3 TIMES TUR;Lo;0;L;;;;;N;;;;; +122B5;CUNEIFORM SIGN SHA3 TIMES U;Lo;0;L;;;;;N;;;;; +122B6;CUNEIFORM SIGN SHA3 TIMES U PLUS A;Lo;0;L;;;;;N;;;;; +122B7;CUNEIFORM SIGN SHA6;Lo;0;L;;;;;N;;;;; +122B8;CUNEIFORM SIGN SHAB6;Lo;0;L;;;;;N;;;;; +122B9;CUNEIFORM SIGN SHAR2;Lo;0;L;;;;;N;;;;; +122BA;CUNEIFORM SIGN SHE;Lo;0;L;;;;;N;;;;; +122BB;CUNEIFORM SIGN SHE HU;Lo;0;L;;;;;N;;;;; +122BC;CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +122BD;CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR;Lo;0;L;;;;;N;;;;; +122BE;CUNEIFORM SIGN SHEG9;Lo;0;L;;;;;N;;;;; +122BF;CUNEIFORM SIGN SHEN;Lo;0;L;;;;;N;;;;; +122C0;CUNEIFORM SIGN SHESH;Lo;0;L;;;;;N;;;;; +122C1;CUNEIFORM SIGN SHESH2;Lo;0;L;;;;;N;;;;; +122C2;CUNEIFORM SIGN SHESHLAM;Lo;0;L;;;;;N;;;;; +122C3;CUNEIFORM SIGN SHID;Lo;0;L;;;;;N;;;;; +122C4;CUNEIFORM SIGN SHID TIMES A;Lo;0;L;;;;;N;;;;; +122C5;CUNEIFORM SIGN SHID TIMES IM;Lo;0;L;;;;;N;;;;; +122C6;CUNEIFORM SIGN SHIM;Lo;0;L;;;;;N;;;;; +122C7;CUNEIFORM SIGN SHIM TIMES A;Lo;0;L;;;;;N;;;;; +122C8;CUNEIFORM SIGN SHIM TIMES BAL;Lo;0;L;;;;;N;;;;; +122C9;CUNEIFORM SIGN SHIM TIMES BULUG;Lo;0;L;;;;;N;;;;; +122CA;CUNEIFORM SIGN SHIM TIMES DIN;Lo;0;L;;;;;N;;;;; +122CB;CUNEIFORM SIGN SHIM TIMES GAR;Lo;0;L;;;;;N;;;;; +122CC;CUNEIFORM SIGN SHIM TIMES IGI;Lo;0;L;;;;;N;;;;; +122CD;CUNEIFORM SIGN SHIM TIMES IGI GUNU;Lo;0;L;;;;;N;;;;; +122CE;CUNEIFORM SIGN SHIM TIMES KUSHU2;Lo;0;L;;;;;N;;;;; +122CF;CUNEIFORM SIGN SHIM TIMES LUL;Lo;0;L;;;;;N;;;;; +122D0;CUNEIFORM SIGN SHIM TIMES MUG;Lo;0;L;;;;;N;;;;; +122D1;CUNEIFORM SIGN SHIM TIMES SAL;Lo;0;L;;;;;N;;;;; +122D2;CUNEIFORM SIGN SHINIG;Lo;0;L;;;;;N;;;;; +122D3;CUNEIFORM SIGN SHIR;Lo;0;L;;;;;N;;;;; +122D4;CUNEIFORM SIGN SHIR TENU;Lo;0;L;;;;;N;;;;; +122D5;CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR;Lo;0;L;;;;;N;;;;; +122D6;CUNEIFORM SIGN SHITA;Lo;0;L;;;;;N;;;;; +122D7;CUNEIFORM SIGN SHU;Lo;0;L;;;;;N;;;;; +122D8;CUNEIFORM SIGN SHU OVER INVERTED SHU;Lo;0;L;;;;;N;;;;; +122D9;CUNEIFORM SIGN SHU2;Lo;0;L;;;;;N;;;;; +122DA;CUNEIFORM SIGN SHUBUR;Lo;0;L;;;;;N;;;;; +122DB;CUNEIFORM SIGN SI;Lo;0;L;;;;;N;;;;; +122DC;CUNEIFORM SIGN SI GUNU;Lo;0;L;;;;;N;;;;; +122DD;CUNEIFORM SIGN SIG;Lo;0;L;;;;;N;;;;; +122DE;CUNEIFORM SIGN SIG4;Lo;0;L;;;;;N;;;;; +122DF;CUNEIFORM SIGN SIG4 OVER SIG4 SHU2;Lo;0;L;;;;;N;;;;; +122E0;CUNEIFORM SIGN SIK2;Lo;0;L;;;;;N;;;;; +122E1;CUNEIFORM SIGN SILA3;Lo;0;L;;;;;N;;;;; +122E2;CUNEIFORM SIGN SU;Lo;0;L;;;;;N;;;;; +122E3;CUNEIFORM SIGN SU OVER SU;Lo;0;L;;;;;N;;;;; +122E4;CUNEIFORM SIGN SUD;Lo;0;L;;;;;N;;;;; +122E5;CUNEIFORM SIGN SUD2;Lo;0;L;;;;;N;;;;; +122E6;CUNEIFORM SIGN SUHUR;Lo;0;L;;;;;N;;;;; +122E7;CUNEIFORM SIGN SUM;Lo;0;L;;;;;N;;;;; +122E8;CUNEIFORM SIGN SUMASH;Lo;0;L;;;;;N;;;;; +122E9;CUNEIFORM SIGN SUR;Lo;0;L;;;;;N;;;;; +122EA;CUNEIFORM SIGN SUR9;Lo;0;L;;;;;N;;;;; +122EB;CUNEIFORM SIGN TA;Lo;0;L;;;;;N;;;;; +122EC;CUNEIFORM SIGN TA ASTERISK;Lo;0;L;;;;;N;;;;; +122ED;CUNEIFORM SIGN TA TIMES HI;Lo;0;L;;;;;N;;;;; +122EE;CUNEIFORM SIGN TA TIMES MI;Lo;0;L;;;;;N;;;;; +122EF;CUNEIFORM SIGN TA GUNU;Lo;0;L;;;;;N;;;;; +122F0;CUNEIFORM SIGN TAB;Lo;0;L;;;;;N;;;;; +122F1;CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH;Lo;0;L;;;;;N;;;;; +122F2;CUNEIFORM SIGN TAB SQUARED;Lo;0;L;;;;;N;;;;; +122F3;CUNEIFORM SIGN TAG;Lo;0;L;;;;;N;;;;; +122F4;CUNEIFORM SIGN TAG TIMES BI;Lo;0;L;;;;;N;;;;; +122F5;CUNEIFORM SIGN TAG TIMES GUD;Lo;0;L;;;;;N;;;;; +122F6;CUNEIFORM SIGN TAG TIMES SHE;Lo;0;L;;;;;N;;;;; +122F7;CUNEIFORM SIGN TAG TIMES SHU;Lo;0;L;;;;;N;;;;; +122F8;CUNEIFORM SIGN TAG TIMES TUG2;Lo;0;L;;;;;N;;;;; +122F9;CUNEIFORM SIGN TAG TIMES UD;Lo;0;L;;;;;N;;;;; +122FA;CUNEIFORM SIGN TAK4;Lo;0;L;;;;;N;;;;; +122FB;CUNEIFORM SIGN TAR;Lo;0;L;;;;;N;;;;; +122FC;CUNEIFORM SIGN TE;Lo;0;L;;;;;N;;;;; +122FD;CUNEIFORM SIGN TE GUNU;Lo;0;L;;;;;N;;;;; +122FE;CUNEIFORM SIGN TI;Lo;0;L;;;;;N;;;;; +122FF;CUNEIFORM SIGN TI TENU;Lo;0;L;;;;;N;;;;; +12300;CUNEIFORM SIGN TIL;Lo;0;L;;;;;N;;;;; +12301;CUNEIFORM SIGN TIR;Lo;0;L;;;;;N;;;;; +12302;CUNEIFORM SIGN TIR TIMES TAK4;Lo;0;L;;;;;N;;;;; +12303;CUNEIFORM SIGN TIR OVER TIR;Lo;0;L;;;;;N;;;;; +12304;CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;; +12305;CUNEIFORM SIGN TU;Lo;0;L;;;;;N;;;;; +12306;CUNEIFORM SIGN TUG2;Lo;0;L;;;;;N;;;;; +12307;CUNEIFORM SIGN TUK;Lo;0;L;;;;;N;;;;; +12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;; +12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;; +1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;; +1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;; +1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;; +1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;; +1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;; +1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;; +12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;; +12311;CUNEIFORM SIGN U2;Lo;0;L;;;;;N;;;;; +12312;CUNEIFORM SIGN UB;Lo;0;L;;;;;N;;;;; +12313;CUNEIFORM SIGN UD;Lo;0;L;;;;;N;;;;; +12314;CUNEIFORM SIGN UD KUSHU2;Lo;0;L;;;;;N;;;;; +12315;CUNEIFORM SIGN UD TIMES BAD;Lo;0;L;;;;;N;;;;; +12316;CUNEIFORM SIGN UD TIMES MI;Lo;0;L;;;;;N;;;;; +12317;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;; +12318;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU;Lo;0;L;;;;;N;;;;; +12319;CUNEIFORM SIGN UD GUNU;Lo;0;L;;;;;N;;;;; +1231A;CUNEIFORM SIGN UD SHESHIG;Lo;0;L;;;;;N;;;;; +1231B;CUNEIFORM SIGN UD SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;; +1231C;CUNEIFORM SIGN UDUG;Lo;0;L;;;;;N;;;;; +1231D;CUNEIFORM SIGN UM;Lo;0;L;;;;;N;;;;; +1231E;CUNEIFORM SIGN UM TIMES LAGAB;Lo;0;L;;;;;N;;;;; +1231F;CUNEIFORM SIGN UM TIMES ME PLUS DA;Lo;0;L;;;;;N;;;;; +12320;CUNEIFORM SIGN UM TIMES SHA3;Lo;0;L;;;;;N;;;;; +12321;CUNEIFORM SIGN UM TIMES U;Lo;0;L;;;;;N;;;;; +12322;CUNEIFORM SIGN UMBIN;Lo;0;L;;;;;N;;;;; +12323;CUNEIFORM SIGN UMUM;Lo;0;L;;;;;N;;;;; +12324;CUNEIFORM SIGN UMUM TIMES KASKAL;Lo;0;L;;;;;N;;;;; +12325;CUNEIFORM SIGN UMUM TIMES PA;Lo;0;L;;;;;N;;;;; +12326;CUNEIFORM SIGN UN;Lo;0;L;;;;;N;;;;; +12327;CUNEIFORM SIGN UN GUNU;Lo;0;L;;;;;N;;;;; +12328;CUNEIFORM SIGN UR;Lo;0;L;;;;;N;;;;; +12329;CUNEIFORM SIGN UR CROSSING UR;Lo;0;L;;;;;N;;;;; +1232A;CUNEIFORM SIGN UR SHESHIG;Lo;0;L;;;;;N;;;;; +1232B;CUNEIFORM SIGN UR2;Lo;0;L;;;;;N;;;;; +1232C;CUNEIFORM SIGN UR2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;; +1232D;CUNEIFORM SIGN UR2 TIMES A PLUS NA;Lo;0;L;;;;;N;;;;; +1232E;CUNEIFORM SIGN UR2 TIMES AL;Lo;0;L;;;;;N;;;;; +1232F;CUNEIFORM SIGN UR2 TIMES HA;Lo;0;L;;;;;N;;;;; +12330;CUNEIFORM SIGN UR2 TIMES NUN;Lo;0;L;;;;;N;;;;; +12331;CUNEIFORM SIGN UR2 TIMES U2;Lo;0;L;;;;;N;;;;; +12332;CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;; +12333;CUNEIFORM SIGN UR2 TIMES U2 PLUS BI;Lo;0;L;;;;;N;;;;; +12334;CUNEIFORM SIGN UR4;Lo;0;L;;;;;N;;;;; +12335;CUNEIFORM SIGN URI;Lo;0;L;;;;;N;;;;; +12336;CUNEIFORM SIGN URI3;Lo;0;L;;;;;N;;;;; +12337;CUNEIFORM SIGN URU;Lo;0;L;;;;;N;;;;; +12338;CUNEIFORM SIGN URU TIMES A;Lo;0;L;;;;;N;;;;; +12339;CUNEIFORM SIGN URU TIMES ASHGAB;Lo;0;L;;;;;N;;;;; +1233A;CUNEIFORM SIGN URU TIMES BAR;Lo;0;L;;;;;N;;;;; +1233B;CUNEIFORM SIGN URU TIMES DUN;Lo;0;L;;;;;N;;;;; +1233C;CUNEIFORM SIGN URU TIMES GA;Lo;0;L;;;;;N;;;;; +1233D;CUNEIFORM SIGN URU TIMES GAL;Lo;0;L;;;;;N;;;;; +1233E;CUNEIFORM SIGN URU TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;; +1233F;CUNEIFORM SIGN URU TIMES GAR;Lo;0;L;;;;;N;;;;; +12340;CUNEIFORM SIGN URU TIMES GU;Lo;0;L;;;;;N;;;;; +12341;CUNEIFORM SIGN URU TIMES HA;Lo;0;L;;;;;N;;;;; +12342;CUNEIFORM SIGN URU TIMES IGI;Lo;0;L;;;;;N;;;;; +12343;CUNEIFORM SIGN URU TIMES IM;Lo;0;L;;;;;N;;;;; +12344;CUNEIFORM SIGN URU TIMES ISH;Lo;0;L;;;;;N;;;;; +12345;CUNEIFORM SIGN URU TIMES KI;Lo;0;L;;;;;N;;;;; +12346;CUNEIFORM SIGN URU TIMES LUM;Lo;0;L;;;;;N;;;;; +12347;CUNEIFORM SIGN URU TIMES MIN;Lo;0;L;;;;;N;;;;; +12348;CUNEIFORM SIGN URU TIMES PA;Lo;0;L;;;;;N;;;;; +12349;CUNEIFORM SIGN URU TIMES SHE;Lo;0;L;;;;;N;;;;; +1234A;CUNEIFORM SIGN URU TIMES SIG4;Lo;0;L;;;;;N;;;;; +1234B;CUNEIFORM SIGN URU TIMES TU;Lo;0;L;;;;;N;;;;; +1234C;CUNEIFORM SIGN URU TIMES U PLUS GUD;Lo;0;L;;;;;N;;;;; +1234D;CUNEIFORM SIGN URU TIMES UD;Lo;0;L;;;;;N;;;;; +1234E;CUNEIFORM SIGN URU TIMES URUDA;Lo;0;L;;;;;N;;;;; +1234F;CUNEIFORM SIGN URUDA;Lo;0;L;;;;;N;;;;; +12350;CUNEIFORM SIGN URUDA TIMES U;Lo;0;L;;;;;N;;;;; +12351;CUNEIFORM SIGN USH;Lo;0;L;;;;;N;;;;; +12352;CUNEIFORM SIGN USH TIMES A;Lo;0;L;;;;;N;;;;; +12353;CUNEIFORM SIGN USH TIMES KU;Lo;0;L;;;;;N;;;;; +12354;CUNEIFORM SIGN USH TIMES KUR;Lo;0;L;;;;;N;;;;; +12355;CUNEIFORM SIGN USH TIMES TAK4;Lo;0;L;;;;;N;;;;; +12356;CUNEIFORM SIGN USHX;Lo;0;L;;;;;N;;;;; +12357;CUNEIFORM SIGN USH2;Lo;0;L;;;;;N;;;;; +12358;CUNEIFORM SIGN USHUMX;Lo;0;L;;;;;N;;;;; +12359;CUNEIFORM SIGN UTUKI;Lo;0;L;;;;;N;;;;; +1235A;CUNEIFORM SIGN UZ3;Lo;0;L;;;;;N;;;;; +1235B;CUNEIFORM SIGN UZ3 TIMES KASKAL;Lo;0;L;;;;;N;;;;; +1235C;CUNEIFORM SIGN UZU;Lo;0;L;;;;;N;;;;; +1235D;CUNEIFORM SIGN ZA;Lo;0;L;;;;;N;;;;; +1235E;CUNEIFORM SIGN ZA TENU;Lo;0;L;;;;;N;;;;; +1235F;CUNEIFORM SIGN ZA SQUARED TIMES KUR;Lo;0;L;;;;;N;;;;; +12360;CUNEIFORM SIGN ZAG;Lo;0;L;;;;;N;;;;; +12361;CUNEIFORM SIGN ZAMX;Lo;0;L;;;;;N;;;;; +12362;CUNEIFORM SIGN ZE2;Lo;0;L;;;;;N;;;;; +12363;CUNEIFORM SIGN ZI;Lo;0;L;;;;;N;;;;; +12364;CUNEIFORM SIGN ZI OVER ZI;Lo;0;L;;;;;N;;;;; +12365;CUNEIFORM SIGN ZI3;Lo;0;L;;;;;N;;;;; +12366;CUNEIFORM SIGN ZIB;Lo;0;L;;;;;N;;;;; +12367;CUNEIFORM SIGN ZIB KABA TENU;Lo;0;L;;;;;N;;;;; +12368;CUNEIFORM SIGN ZIG;Lo;0;L;;;;;N;;;;; +12369;CUNEIFORM SIGN ZIZ2;Lo;0;L;;;;;N;;;;; +1236A;CUNEIFORM SIGN ZU;Lo;0;L;;;;;N;;;;; +1236B;CUNEIFORM SIGN ZU5;Lo;0;L;;;;;N;;;;; +1236C;CUNEIFORM SIGN ZU5 TIMES A;Lo;0;L;;;;;N;;;;; +1236D;CUNEIFORM SIGN ZUBUR;Lo;0;L;;;;;N;;;;; +1236E;CUNEIFORM SIGN ZUM;Lo;0;L;;;;;N;;;;; +12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;; +12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;; +12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;; +12403;CUNEIFORM NUMERIC SIGN FIVE ASH;Nl;0;L;;;;5;N;;;;; +12404;CUNEIFORM NUMERIC SIGN SIX ASH;Nl;0;L;;;;6;N;;;;; +12405;CUNEIFORM NUMERIC SIGN SEVEN ASH;Nl;0;L;;;;7;N;;;;; +12406;CUNEIFORM NUMERIC SIGN EIGHT ASH;Nl;0;L;;;;8;N;;;;; +12407;CUNEIFORM NUMERIC SIGN NINE ASH;Nl;0;L;;;;9;N;;;;; +12408;CUNEIFORM NUMERIC SIGN THREE DISH;Nl;0;L;;;;3;N;;;;; +12409;CUNEIFORM NUMERIC SIGN FOUR DISH;Nl;0;L;;;;4;N;;;;; +1240A;CUNEIFORM NUMERIC SIGN FIVE DISH;Nl;0;L;;;;5;N;;;;; +1240B;CUNEIFORM NUMERIC SIGN SIX DISH;Nl;0;L;;;;6;N;;;;; +1240C;CUNEIFORM NUMERIC SIGN SEVEN DISH;Nl;0;L;;;;7;N;;;;; +1240D;CUNEIFORM NUMERIC SIGN EIGHT DISH;Nl;0;L;;;;8;N;;;;; +1240E;CUNEIFORM NUMERIC SIGN NINE DISH;Nl;0;L;;;;9;N;;;;; +1240F;CUNEIFORM NUMERIC SIGN FOUR U;Nl;0;L;;;;4;N;;;;; +12410;CUNEIFORM NUMERIC SIGN FIVE U;Nl;0;L;;;;5;N;;;;; +12411;CUNEIFORM NUMERIC SIGN SIX U;Nl;0;L;;;;6;N;;;;; +12412;CUNEIFORM NUMERIC SIGN SEVEN U;Nl;0;L;;;;7;N;;;;; +12413;CUNEIFORM NUMERIC SIGN EIGHT U;Nl;0;L;;;;8;N;;;;; +12414;CUNEIFORM NUMERIC SIGN NINE U;Nl;0;L;;;;9;N;;;;; +12415;CUNEIFORM NUMERIC SIGN ONE GESH2;Nl;0;L;;;;1;N;;;;; +12416;CUNEIFORM NUMERIC SIGN TWO GESH2;Nl;0;L;;;;2;N;;;;; +12417;CUNEIFORM NUMERIC SIGN THREE GESH2;Nl;0;L;;;;3;N;;;;; +12418;CUNEIFORM NUMERIC SIGN FOUR GESH2;Nl;0;L;;;;4;N;;;;; +12419;CUNEIFORM NUMERIC SIGN FIVE GESH2;Nl;0;L;;;;5;N;;;;; +1241A;CUNEIFORM NUMERIC SIGN SIX GESH2;Nl;0;L;;;;6;N;;;;; +1241B;CUNEIFORM NUMERIC SIGN SEVEN GESH2;Nl;0;L;;;;7;N;;;;; +1241C;CUNEIFORM NUMERIC SIGN EIGHT GESH2;Nl;0;L;;;;8;N;;;;; +1241D;CUNEIFORM NUMERIC SIGN NINE GESH2;Nl;0;L;;;;9;N;;;;; +1241E;CUNEIFORM NUMERIC SIGN ONE GESHU;Nl;0;L;;;;1;N;;;;; +1241F;CUNEIFORM NUMERIC SIGN TWO GESHU;Nl;0;L;;;;2;N;;;;; +12420;CUNEIFORM NUMERIC SIGN THREE GESHU;Nl;0;L;;;;3;N;;;;; +12421;CUNEIFORM NUMERIC SIGN FOUR GESHU;Nl;0;L;;;;4;N;;;;; +12422;CUNEIFORM NUMERIC SIGN FIVE GESHU;Nl;0;L;;;;5;N;;;;; +12423;CUNEIFORM NUMERIC SIGN TWO SHAR2;Nl;0;L;;;;2;N;;;;; +12424;CUNEIFORM NUMERIC SIGN THREE SHAR2;Nl;0;L;;;;3;N;;;;; +12425;CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM;Nl;0;L;;;;3;N;;;;; +12426;CUNEIFORM NUMERIC SIGN FOUR SHAR2;Nl;0;L;;;;4;N;;;;; +12427;CUNEIFORM NUMERIC SIGN FIVE SHAR2;Nl;0;L;;;;5;N;;;;; +12428;CUNEIFORM NUMERIC SIGN SIX SHAR2;Nl;0;L;;;;6;N;;;;; +12429;CUNEIFORM NUMERIC SIGN SEVEN SHAR2;Nl;0;L;;;;7;N;;;;; +1242A;CUNEIFORM NUMERIC SIGN EIGHT SHAR2;Nl;0;L;;;;8;N;;;;; +1242B;CUNEIFORM NUMERIC SIGN NINE SHAR2;Nl;0;L;;;;9;N;;;;; +1242C;CUNEIFORM NUMERIC SIGN ONE SHARU;Nl;0;L;;;;1;N;;;;; +1242D;CUNEIFORM NUMERIC SIGN TWO SHARU;Nl;0;L;;;;2;N;;;;; +1242E;CUNEIFORM NUMERIC SIGN THREE SHARU;Nl;0;L;;;;3;N;;;;; +1242F;CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM;Nl;0;L;;;;3;N;;;;; +12430;CUNEIFORM NUMERIC SIGN FOUR SHARU;Nl;0;L;;;;4;N;;;;; +12431;CUNEIFORM NUMERIC SIGN FIVE SHARU;Nl;0;L;;;;5;N;;;;; +12432;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH;Nl;0;L;;;;;N;;;;; +12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;;N;;;;; +12434;CUNEIFORM NUMERIC SIGN ONE BURU;Nl;0;L;;;;1;N;;;;; +12435;CUNEIFORM NUMERIC SIGN TWO BURU;Nl;0;L;;;;2;N;;;;; +12436;CUNEIFORM NUMERIC SIGN THREE BURU;Nl;0;L;;;;3;N;;;;; +12437;CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM;Nl;0;L;;;;3;N;;;;; +12438;CUNEIFORM NUMERIC SIGN FOUR BURU;Nl;0;L;;;;4;N;;;;; +12439;CUNEIFORM NUMERIC SIGN FIVE BURU;Nl;0;L;;;;5;N;;;;; +1243A;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16;Nl;0;L;;;;3;N;;;;; +1243B;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21;Nl;0;L;;;;3;N;;;;; +1243C;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU;Nl;0;L;;;;4;N;;;;; +1243D;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4;Nl;0;L;;;;4;N;;;;; +1243E;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A;Nl;0;L;;;;4;N;;;;; +1243F;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B;Nl;0;L;;;;4;N;;;;; +12440;CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9;Nl;0;L;;;;6;N;;;;; +12441;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3;Nl;0;L;;;;7;N;;;;; +12442;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A;Nl;0;L;;;;7;N;;;;; +12443;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B;Nl;0;L;;;;7;N;;;;; +12444;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU;Nl;0;L;;;;8;N;;;;; +12445;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3;Nl;0;L;;;;8;N;;;;; +12446;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU;Nl;0;L;;;;9;N;;;;; +12447;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3;Nl;0;L;;;;9;N;;;;; +12448;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4;Nl;0;L;;;;9;N;;;;; +12449;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A;Nl;0;L;;;;9;N;;;;; +1244A;CUNEIFORM NUMERIC SIGN TWO ASH TENU;Nl;0;L;;;;2;N;;;;; +1244B;CUNEIFORM NUMERIC SIGN THREE ASH TENU;Nl;0;L;;;;3;N;;;;; +1244C;CUNEIFORM NUMERIC SIGN FOUR ASH TENU;Nl;0;L;;;;4;N;;;;; +1244D;CUNEIFORM NUMERIC SIGN FIVE ASH TENU;Nl;0;L;;;;5;N;;;;; +1244E;CUNEIFORM NUMERIC SIGN SIX ASH TENU;Nl;0;L;;;;6;N;;;;; +1244F;CUNEIFORM NUMERIC SIGN ONE BAN2;Nl;0;L;;;;1;N;;;;; +12450;CUNEIFORM NUMERIC SIGN TWO BAN2;Nl;0;L;;;;2;N;;;;; +12451;CUNEIFORM NUMERIC SIGN THREE BAN2;Nl;0;L;;;;3;N;;;;; +12452;CUNEIFORM NUMERIC SIGN FOUR BAN2;Nl;0;L;;;;4;N;;;;; +12453;CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM;Nl;0;L;;;;4;N;;;;; +12454;CUNEIFORM NUMERIC SIGN FIVE BAN2;Nl;0;L;;;;5;N;;;;; +12455;CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM;Nl;0;L;;;;5;N;;;;; +12456;CUNEIFORM NUMERIC SIGN NIGIDAMIN;Nl;0;L;;;;;N;;;;; +12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;;N;;;;; +12458;CUNEIFORM NUMERIC SIGN ONE ESHE3;Nl;0;L;;;;1;N;;;;; +12459;CUNEIFORM NUMERIC SIGN TWO ESHE3;Nl;0;L;;;;2;N;;;;; +1245A;CUNEIFORM NUMERIC SIGN ONE THIRD DISH;Nl;0;L;;;;1/3;N;;;;; +1245B;CUNEIFORM NUMERIC SIGN TWO THIRDS DISH;Nl;0;L;;;;2/3;N;;;;; +1245C;CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH;Nl;0;L;;;;5/6;N;;;;; +1245D;CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A;Nl;0;L;;;;1/3;N;;;;; +1245E;CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A;Nl;0;L;;;;2/3;N;;;;; +1245F;CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH;Nl;0;L;;;;1/8;N;;;;; +12460;CUNEIFORM NUMERIC SIGN ONE QUARTER ASH;Nl;0;L;;;;1/4;N;;;;; +12461;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH;Nl;0;L;;;;1/6;N;;;;; +12462;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER;Nl;0;L;;;;1/4;N;;;;; +12470;CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER;Po;0;L;;;;;N;;;;; +12471;CUNEIFORM PUNCTUATION SIGN VERTICAL COLON;Po;0;L;;;;;N;;;;; +12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;; +12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;; 1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;; 1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;; 1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;; @@ -12954,6 +16953,7 @@ 1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;; 1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;; 1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;; +1D129;MUSICAL SYMBOL MULTIPLE MEASURE REST;So;0;L;;;;;N;;;;; 1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;; 1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;; 1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;; @@ -13134,12 +17134,82 @@ 1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;; 1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;; 1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;; -1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;;;; -1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;;;; -1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;;;; -1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;;;; -1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;;;; -1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;;;; +1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; +1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; +1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;; +1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; +1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; +1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;; +1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; +1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; +1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;; +1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;; +1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; +1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; +1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; +1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; +1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;; +1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;; +1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; +1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; +1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; +1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;; +1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;; +1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;; +1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; +1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; +1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; +1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; +1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; +1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; +1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; +1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; +1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; +1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;; +1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;; +1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;; +1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;; +1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;; +1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;; +1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;; +1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;; +1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;; +1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;; +1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;; +1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;; +1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;; +1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;; +1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;; +1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;; +1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;; +1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;; +1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;; +1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;; +1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;; +1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;; +1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;; +1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;; +1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;; +1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;; +1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;; +1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;; +1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;; +1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;; +1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;; +1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;; +1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;; +1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;; +1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;; +1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;; +1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;; +1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;; +1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;; +1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;ren *;;; +1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;tian ren *;;; +1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;di ren *;;; +1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;ren tian *;;; +1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;ren di *;;; +1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;ren ren *;;; 1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;; 1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;; 1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;; @@ -13221,6 +17291,24 @@ 1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;; 1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;; 1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;; +1D360;COUNTING ROD UNIT DIGIT ONE;No;0;L;;;;1;N;;;;; +1D361;COUNTING ROD UNIT DIGIT TWO;No;0;L;;;;2;N;;;;; +1D362;COUNTING ROD UNIT DIGIT THREE;No;0;L;;;;3;N;;;;; +1D363;COUNTING ROD UNIT DIGIT FOUR;No;0;L;;;;4;N;;;;; +1D364;COUNTING ROD UNIT DIGIT FIVE;No;0;L;;;;5;N;;;;; +1D365;COUNTING ROD UNIT DIGIT SIX;No;0;L;;;;6;N;;;;; +1D366;COUNTING ROD UNIT DIGIT SEVEN;No;0;L;;;;7;N;;;;; +1D367;COUNTING ROD UNIT DIGIT EIGHT;No;0;L;;;;8;N;;;;; +1D368;COUNTING ROD UNIT DIGIT NINE;No;0;L;;;;9;N;;;;; +1D369;COUNTING ROD TENS DIGIT ONE;No;0;L;;;;10;N;;;;; +1D36A;COUNTING ROD TENS DIGIT TWO;No;0;L;;;;20;N;;;;; +1D36B;COUNTING ROD TENS DIGIT THREE;No;0;L;;;;30;N;;;;; +1D36C;COUNTING ROD TENS DIGIT FOUR;No;0;L;;;;40;N;;;;; +1D36D;COUNTING ROD TENS DIGIT FIVE;No;0;L;;;;50;N;;;;; +1D36E;COUNTING ROD TENS DIGIT SIX;No;0;L;;;;60;N;;;;; +1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;; +1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;; +1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;; 1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;; 1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;; 1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;; @@ -13873,6 +17961,8 @@ 1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L;<font> 0078;;;;N;;;;; 1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;; 1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;; +1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L;<font> 0131;;;;N;;;;; +1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L;<font> 0237;;;;N;;;;; 1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;; 1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;; 1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;; @@ -13924,7 +18014,7 @@ 1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; 1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; 1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; -1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;; +1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;; 1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; 1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; 1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; @@ -13982,7 +18072,7 @@ 1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; 1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; 1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; -1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;; +1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;; 1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; 1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; 1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; @@ -14040,7 +18130,7 @@ 1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; 1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; 1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; -1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;; +1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;; 1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; 1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; 1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; @@ -14098,7 +18188,7 @@ 1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; 1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; 1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; -1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;; +1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;; 1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; 1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; 1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; @@ -14156,13 +18246,15 @@ 1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;; 1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;; 1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;; -1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;N;;;;; +1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;; 1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;; 1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;; 1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;; 1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;; 1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;; 1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;; +1D7CA;MATHEMATICAL BOLD CAPITAL DIGAMMA;Lu;0;L;<font> 03DC;;;;N;;;;; +1D7CB;MATHEMATICAL BOLD SMALL DIGAMMA;Ll;0;L;<font> 03DD;;;;N;;;;; 1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;; 1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;; 1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;; @@ -14213,6 +18305,150 @@ 1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;; 1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;; 1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;; +1F000;MAHJONG TILE EAST WIND;So;0;ON;;;;;N;;;;; +1F001;MAHJONG TILE SOUTH WIND;So;0;ON;;;;;N;;;;; +1F002;MAHJONG TILE WEST WIND;So;0;ON;;;;;N;;;;; +1F003;MAHJONG TILE NORTH WIND;So;0;ON;;;;;N;;;;; +1F004;MAHJONG TILE RED DRAGON;So;0;ON;;;;;N;;;;; +1F005;MAHJONG TILE GREEN DRAGON;So;0;ON;;;;;N;;;;; +1F006;MAHJONG TILE WHITE DRAGON;So;0;ON;;;;;N;;;;; +1F007;MAHJONG TILE ONE OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F008;MAHJONG TILE TWO OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F009;MAHJONG TILE THREE OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00A;MAHJONG TILE FOUR OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00B;MAHJONG TILE FIVE OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00C;MAHJONG TILE SIX OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00D;MAHJONG TILE SEVEN OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00E;MAHJONG TILE EIGHT OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F00F;MAHJONG TILE NINE OF CHARACTERS;So;0;ON;;;;;N;;;;; +1F010;MAHJONG TILE ONE OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F011;MAHJONG TILE TWO OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F012;MAHJONG TILE THREE OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F013;MAHJONG TILE FOUR OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F014;MAHJONG TILE FIVE OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F015;MAHJONG TILE SIX OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F016;MAHJONG TILE SEVEN OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F017;MAHJONG TILE EIGHT OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F018;MAHJONG TILE NINE OF BAMBOOS;So;0;ON;;;;;N;;;;; +1F019;MAHJONG TILE ONE OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01A;MAHJONG TILE TWO OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01B;MAHJONG TILE THREE OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01C;MAHJONG TILE FOUR OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01D;MAHJONG TILE FIVE OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01E;MAHJONG TILE SIX OF CIRCLES;So;0;ON;;;;;N;;;;; +1F01F;MAHJONG TILE SEVEN OF CIRCLES;So;0;ON;;;;;N;;;;; +1F020;MAHJONG TILE EIGHT OF CIRCLES;So;0;ON;;;;;N;;;;; +1F021;MAHJONG TILE NINE OF CIRCLES;So;0;ON;;;;;N;;;;; +1F022;MAHJONG TILE PLUM;So;0;ON;;;;;N;;;;; +1F023;MAHJONG TILE ORCHID;So;0;ON;;;;;N;;;;; +1F024;MAHJONG TILE BAMBOO;So;0;ON;;;;;N;;;;; +1F025;MAHJONG TILE CHRYSANTHEMUM;So;0;ON;;;;;N;;;;; +1F026;MAHJONG TILE SPRING;So;0;ON;;;;;N;;;;; +1F027;MAHJONG TILE SUMMER;So;0;ON;;;;;N;;;;; +1F028;MAHJONG TILE AUTUMN;So;0;ON;;;;;N;;;;; +1F029;MAHJONG TILE WINTER;So;0;ON;;;;;N;;;;; +1F02A;MAHJONG TILE JOKER;So;0;ON;;;;;N;;;;; +1F02B;MAHJONG TILE BACK;So;0;ON;;;;;N;;;;; +1F030;DOMINO TILE HORIZONTAL BACK;So;0;ON;;;;;N;;;;; +1F031;DOMINO TILE HORIZONTAL-00-00;So;0;ON;;;;;N;;;;; +1F032;DOMINO TILE HORIZONTAL-00-01;So;0;ON;;;;;N;;;;; +1F033;DOMINO TILE HORIZONTAL-00-02;So;0;ON;;;;;N;;;;; +1F034;DOMINO TILE HORIZONTAL-00-03;So;0;ON;;;;;N;;;;; +1F035;DOMINO TILE HORIZONTAL-00-04;So;0;ON;;;;;N;;;;; +1F036;DOMINO TILE HORIZONTAL-00-05;So;0;ON;;;;;N;;;;; +1F037;DOMINO TILE HORIZONTAL-00-06;So;0;ON;;;;;N;;;;; +1F038;DOMINO TILE HORIZONTAL-01-00;So;0;ON;;;;;N;;;;; +1F039;DOMINO TILE HORIZONTAL-01-01;So;0;ON;;;;;N;;;;; +1F03A;DOMINO TILE HORIZONTAL-01-02;So;0;ON;;;;;N;;;;; +1F03B;DOMINO TILE HORIZONTAL-01-03;So;0;ON;;;;;N;;;;; +1F03C;DOMINO TILE HORIZONTAL-01-04;So;0;ON;;;;;N;;;;; +1F03D;DOMINO TILE HORIZONTAL-01-05;So;0;ON;;;;;N;;;;; +1F03E;DOMINO TILE HORIZONTAL-01-06;So;0;ON;;;;;N;;;;; +1F03F;DOMINO TILE HORIZONTAL-02-00;So;0;ON;;;;;N;;;;; +1F040;DOMINO TILE HORIZONTAL-02-01;So;0;ON;;;;;N;;;;; +1F041;DOMINO TILE HORIZONTAL-02-02;So;0;ON;;;;;N;;;;; +1F042;DOMINO TILE HORIZONTAL-02-03;So;0;ON;;;;;N;;;;; +1F043;DOMINO TILE HORIZONTAL-02-04;So;0;ON;;;;;N;;;;; +1F044;DOMINO TILE HORIZONTAL-02-05;So;0;ON;;;;;N;;;;; +1F045;DOMINO TILE HORIZONTAL-02-06;So;0;ON;;;;;N;;;;; +1F046;DOMINO TILE HORIZONTAL-03-00;So;0;ON;;;;;N;;;;; +1F047;DOMINO TILE HORIZONTAL-03-01;So;0;ON;;;;;N;;;;; +1F048;DOMINO TILE HORIZONTAL-03-02;So;0;ON;;;;;N;;;;; +1F049;DOMINO TILE HORIZONTAL-03-03;So;0;ON;;;;;N;;;;; +1F04A;DOMINO TILE HORIZONTAL-03-04;So;0;ON;;;;;N;;;;; +1F04B;DOMINO TILE HORIZONTAL-03-05;So;0;ON;;;;;N;;;;; +1F04C;DOMINO TILE HORIZONTAL-03-06;So;0;ON;;;;;N;;;;; +1F04D;DOMINO TILE HORIZONTAL-04-00;So;0;ON;;;;;N;;;;; +1F04E;DOMINO TILE HORIZONTAL-04-01;So;0;ON;;;;;N;;;;; +1F04F;DOMINO TILE HORIZONTAL-04-02;So;0;ON;;;;;N;;;;; +1F050;DOMINO TILE HORIZONTAL-04-03;So;0;ON;;;;;N;;;;; +1F051;DOMINO TILE HORIZONTAL-04-04;So;0;ON;;;;;N;;;;; +1F052;DOMINO TILE HORIZONTAL-04-05;So;0;ON;;;;;N;;;;; +1F053;DOMINO TILE HORIZONTAL-04-06;So;0;ON;;;;;N;;;;; +1F054;DOMINO TILE HORIZONTAL-05-00;So;0;ON;;;;;N;;;;; +1F055;DOMINO TILE HORIZONTAL-05-01;So;0;ON;;;;;N;;;;; +1F056;DOMINO TILE HORIZONTAL-05-02;So;0;ON;;;;;N;;;;; +1F057;DOMINO TILE HORIZONTAL-05-03;So;0;ON;;;;;N;;;;; +1F058;DOMINO TILE HORIZONTAL-05-04;So;0;ON;;;;;N;;;;; +1F059;DOMINO TILE HORIZONTAL-05-05;So;0;ON;;;;;N;;;;; +1F05A;DOMINO TILE HORIZONTAL-05-06;So;0;ON;;;;;N;;;;; +1F05B;DOMINO TILE HORIZONTAL-06-00;So;0;ON;;;;;N;;;;; +1F05C;DOMINO TILE HORIZONTAL-06-01;So;0;ON;;;;;N;;;;; +1F05D;DOMINO TILE HORIZONTAL-06-02;So;0;ON;;;;;N;;;;; +1F05E;DOMINO TILE HORIZONTAL-06-03;So;0;ON;;;;;N;;;;; +1F05F;DOMINO TILE HORIZONTAL-06-04;So;0;ON;;;;;N;;;;; +1F060;DOMINO TILE HORIZONTAL-06-05;So;0;ON;;;;;N;;;;; +1F061;DOMINO TILE HORIZONTAL-06-06;So;0;ON;;;;;N;;;;; +1F062;DOMINO TILE VERTICAL BACK;So;0;ON;;;;;N;;;;; +1F063;DOMINO TILE VERTICAL-00-00;So;0;ON;;;;;N;;;;; +1F064;DOMINO TILE VERTICAL-00-01;So;0;ON;;;;;N;;;;; +1F065;DOMINO TILE VERTICAL-00-02;So;0;ON;;;;;N;;;;; +1F066;DOMINO TILE VERTICAL-00-03;So;0;ON;;;;;N;;;;; +1F067;DOMINO TILE VERTICAL-00-04;So;0;ON;;;;;N;;;;; +1F068;DOMINO TILE VERTICAL-00-05;So;0;ON;;;;;N;;;;; +1F069;DOMINO TILE VERTICAL-00-06;So;0;ON;;;;;N;;;;; +1F06A;DOMINO TILE VERTICAL-01-00;So;0;ON;;;;;N;;;;; +1F06B;DOMINO TILE VERTICAL-01-01;So;0;ON;;;;;N;;;;; +1F06C;DOMINO TILE VERTICAL-01-02;So;0;ON;;;;;N;;;;; +1F06D;DOMINO TILE VERTICAL-01-03;So;0;ON;;;;;N;;;;; +1F06E;DOMINO TILE VERTICAL-01-04;So;0;ON;;;;;N;;;;; +1F06F;DOMINO TILE VERTICAL-01-05;So;0;ON;;;;;N;;;;; +1F070;DOMINO TILE VERTICAL-01-06;So;0;ON;;;;;N;;;;; +1F071;DOMINO TILE VERTICAL-02-00;So;0;ON;;;;;N;;;;; +1F072;DOMINO TILE VERTICAL-02-01;So;0;ON;;;;;N;;;;; +1F073;DOMINO TILE VERTICAL-02-02;So;0;ON;;;;;N;;;;; +1F074;DOMINO TILE VERTICAL-02-03;So;0;ON;;;;;N;;;;; +1F075;DOMINO TILE VERTICAL-02-04;So;0;ON;;;;;N;;;;; +1F076;DOMINO TILE VERTICAL-02-05;So;0;ON;;;;;N;;;;; +1F077;DOMINO TILE VERTICAL-02-06;So;0;ON;;;;;N;;;;; +1F078;DOMINO TILE VERTICAL-03-00;So;0;ON;;;;;N;;;;; +1F079;DOMINO TILE VERTICAL-03-01;So;0;ON;;;;;N;;;;; +1F07A;DOMINO TILE VERTICAL-03-02;So;0;ON;;;;;N;;;;; +1F07B;DOMINO TILE VERTICAL-03-03;So;0;ON;;;;;N;;;;; +1F07C;DOMINO TILE VERTICAL-03-04;So;0;ON;;;;;N;;;;; +1F07D;DOMINO TILE VERTICAL-03-05;So;0;ON;;;;;N;;;;; +1F07E;DOMINO TILE VERTICAL-03-06;So;0;ON;;;;;N;;;;; +1F07F;DOMINO TILE VERTICAL-04-00;So;0;ON;;;;;N;;;;; +1F080;DOMINO TILE VERTICAL-04-01;So;0;ON;;;;;N;;;;; +1F081;DOMINO TILE VERTICAL-04-02;So;0;ON;;;;;N;;;;; +1F082;DOMINO TILE VERTICAL-04-03;So;0;ON;;;;;N;;;;; +1F083;DOMINO TILE VERTICAL-04-04;So;0;ON;;;;;N;;;;; +1F084;DOMINO TILE VERTICAL-04-05;So;0;ON;;;;;N;;;;; +1F085;DOMINO TILE VERTICAL-04-06;So;0;ON;;;;;N;;;;; +1F086;DOMINO TILE VERTICAL-05-00;So;0;ON;;;;;N;;;;; +1F087;DOMINO TILE VERTICAL-05-01;So;0;ON;;;;;N;;;;; +1F088;DOMINO TILE VERTICAL-05-02;So;0;ON;;;;;N;;;;; +1F089;DOMINO TILE VERTICAL-05-03;So;0;ON;;;;;N;;;;; +1F08A;DOMINO TILE VERTICAL-05-04;So;0;ON;;;;;N;;;;; +1F08B;DOMINO TILE VERTICAL-05-05;So;0;ON;;;;;N;;;;; +1F08C;DOMINO TILE VERTICAL-05-06;So;0;ON;;;;;N;;;;; +1F08D;DOMINO TILE VERTICAL-06-00;So;0;ON;;;;;N;;;;; +1F08E;DOMINO TILE VERTICAL-06-01;So;0;ON;;;;;N;;;;; +1F08F;DOMINO TILE VERTICAL-06-02;So;0;ON;;;;;N;;;;; +1F090;DOMINO TILE VERTICAL-06-03;So;0;ON;;;;;N;;;;; +1F091;DOMINO TILE VERTICAL-06-04;So;0;ON;;;;;N;;;;; +1F092;DOMINO TILE VERTICAL-06-05;So;0;ON;;;;;N;;;;; +1F093;DOMINO TILE VERTICAL-06-06;So;0;ON;;;;;N;;;;; 20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;; 2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;; 2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;; @@ -14359,7 +18595,7 @@ 2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;; 2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;; 2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;; -2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;;N;;;;; +2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;9;N;;;;; 2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;; 2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;; 2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/make/tools/UnicodeData/VERSION --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/make/tools/UnicodeData/VERSION Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,1 @@ +5.1.0 diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/com/sun/awt/AWTUtilities.java --- a/jdk/src/share/classes/com/sun/awt/AWTUtilities.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/com/sun/awt/AWTUtilities.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,17 +26,37 @@ package com.sun.awt; import java.awt.*; + import sun.awt.AWTAccessor; - +import sun.awt.SunToolkit; /** * A collection of utility methods for AWT. * * The functionality provided by the static methods of the class includes: * <ul> + * <li>Setting shapes on top-level windows + * <li>Setting a constant alpha value for each pixel of a top-level window + * <li>Making a window non-opaque, after that it paints only explicitly + * painted pixels on the screen, with arbitrary alpha values for every pixel. * <li>Setting a 'mixing-cutout' shape for a component. * </ul> * <p> + * A "top-level window" is an instance of the {@code Window} class (or its + * descendant, such as {@code JFrame}). + * <p> + * Some of the mentioned features may not be supported by the native platform. + * To determine whether a particular feature is supported, the user must use + * the {@code isTranslucencySupported()} method of the class passing a desired + * translucency kind (a member of the {@code Translucency} enum) as an + * argument. + * <p> + * The per-pixel alpha feature also requires the user to create her/his + * windows using a translucency-capable graphics configuration. + * The {@code isTranslucencyCapable()} method must + * be used to verify whether any given GraphicsConfiguration supports + * the trasnlcency effects. + * <p> * <b>WARNING</b>: This class is an implementation detail and only meant * for limited use outside of the core platform. This API may change * drastically between update release, and it may even be @@ -50,6 +70,344 @@ private AWTUtilities() { } + /** Kinds of translucency supported by the underlying system. + * @see #isTranslucencySupported + */ + public static enum Translucency { + /** + * Represents support in the underlying system for windows each pixel + * of which is guaranteed to be either completely opaque, with + * an alpha value of 1.0, or completely transparent, with an alpha + * value of 0.0. + */ + PERPIXEL_TRANSPARENT, + + /** + * Represents support in the underlying system for windows all of + * the pixels of which have the same alpha value between or including + * 0.0 and 1.0. + */ + TRANSLUCENT, + + /** + * Represents support in the underlying system for windows that + * contain or might contain pixels with arbitrary alpha values + * between and including 0.0 and 1.0. + */ + PERPIXEL_TRANSLUCENT; + } + + + /** + * Returns whether the given level of translucency is supported by + * the underlying system. + * + * Note that this method may sometimes return the value + * indicating that the particular level is supported, but + * the native windowing system may still not support the + * given level of translucency (due to the bugs in + * the windowing system). + * + * @param translucencyKind a kind of translucency support + * (either PERPIXEL_TRANSPARENT, + * TRANSLUCENT, or PERPIXEL_TRANSLUCENT) + * @return whether the given translucency kind is supported + */ + public static boolean isTranslucencySupported(Translucency translucencyKind) { + switch (translucencyKind) { + case PERPIXEL_TRANSPARENT: + return isWindowShapingSupported(); + case TRANSLUCENT: + return isWindowOpacitySupported(); + case PERPIXEL_TRANSLUCENT: + return isWindowTranslucencySupported(); + } + return false; + } + + + /** + * Returns whether the windowing system supports changing the opacity + * value of top-level windows. + * Note that this method may sometimes return true, but the native + * windowing system may still not support the concept of + * translucency (due to the bugs in the windowing system). + */ + private static boolean isWindowOpacitySupported() { + Toolkit curToolkit = Toolkit.getDefaultToolkit(); + if (!(curToolkit instanceof SunToolkit)) { + return false; + } + return ((SunToolkit)curToolkit).isWindowOpacitySupported(); + } + + /** + * Set the opacity of the window. The opacity is at the range [0..1]. + * Note that setting the opacity level of 0 may or may not disable + * the mouse event handling on this window. This is + * a platform-dependent behavior. + * + * In order for this method to enable the translucency effect, + * the isTranslucencySupported() method should indicate that the + * TRANSLUCENT level of translucency is supported. + * + * <p>Also note that the window must not be in the full-screen mode + * when setting the opacity value < 1.0f. Otherwise + * the IllegalArgumentException is thrown. + * + * @param window the window to set the opacity level to + * @param opacity the opacity level to set to the window + * @throws NullPointerException if the window argument is null + * @throws IllegalArgumentException if the opacity is out of + * the range [0..1] + * @throws IllegalArgumentException if the window is in full screen mode, + * and the opacity is less than 1.0f + * @throws UnsupportedOperationException if the TRANSLUCENT translucency + * kind is not supported + */ + public static void setWindowOpacity(Window window, float opacity) { + if (window == null) { + throw new NullPointerException( + "The window argument should not be null."); + } + + AWTAccessor.getWindowAccessor().setOpacity(window, opacity); + } + + /** + * Get the opacity of the window. If the opacity has not + * yet being set, this method returns 1.0. + * + * @param window the window to get the opacity level from + * @throws NullPointerException if the window argument is null + */ + public static float getWindowOpacity(Window window) { + if (window == null) { + throw new NullPointerException( + "The window argument should not be null."); + } + + return AWTAccessor.getWindowAccessor().getOpacity(window); + } + + /** + * Returns whether the windowing system supports changing the shape + * of top-level windows. + * Note that this method may sometimes return true, but the native + * windowing system may still not support the concept of + * shaping (due to the bugs in the windowing system). + */ + public static boolean isWindowShapingSupported() { + Toolkit curToolkit = Toolkit.getDefaultToolkit(); + if (!(curToolkit instanceof SunToolkit)) { + return false; + } + return ((SunToolkit)curToolkit).isWindowShapingSupported(); + } + + /** + * Returns an object that implements the Shape interface and represents + * the shape previously set with the call to the setWindowShape() method. + * If no shape has been set yet, or the shape has been reset to null, + * this method returns null. + * + * @param window the window to get the shape from + * @return the current shape of the window + * @throws NullPointerException if the window argument is null + */ + public static Shape getWindowShape(Window window) { + if (window == null) { + throw new NullPointerException( + "The window argument should not be null."); + } + return AWTAccessor.getWindowAccessor().getShape(window); + } + + /** + * Sets a shape for the given window. + * If the shape argument is null, this methods restores + * the default shape making the window rectangular. + * <p>Note that in order to set a shape, the window must be undecorated. + * If the window is decorated, this method ignores the {@code shape} + * argument and resets the shape to null. + * <p>Also note that the window must not be in the full-screen mode + * when setting a non-null shape. Otherwise the IllegalArgumentException + * is thrown. + * <p>Depending on the platform, the method may return without + * effecting the shape of the window if the window has a non-null warning + * string ({@link Window#getWarningString()}). In this case the passed + * shape object is ignored. + * + * @param window the window to set the shape to + * @param shape the shape to set to the window + * @throws NullPointerException if the window argument is null + * @throws IllegalArgumentException if the window is in full screen mode, + * and the shape is not null + * @throws UnsupportedOperationException if the PERPIXEL_TRANSPARENT + * translucency kind is not supported + */ + public static void setWindowShape(Window window, Shape shape) { + if (window == null) { + throw new NullPointerException( + "The window argument should not be null."); + } + AWTAccessor.getWindowAccessor().setShape(window, shape); + } + + private static boolean isWindowTranslucencySupported() { + /* + * Per-pixel alpha is supported if all the conditions are TRUE: + * 1. The toolkit is a sort of SunToolkit + * 2. The toolkit supports translucency in general + * (isWindowTranslucencySupported()) + * 3. There's at least one translucency-capable + * GraphicsConfiguration + */ + + Toolkit curToolkit = Toolkit.getDefaultToolkit(); + if (!(curToolkit instanceof SunToolkit)) { + return false; + } + + if (!((SunToolkit)curToolkit).isWindowTranslucencySupported()) { + return false; + } + + GraphicsEnvironment env = + GraphicsEnvironment.getLocalGraphicsEnvironment(); + + // If the default GC supports translucency return true. + // It is important to optimize the verification this way, + // see CR 6661196 for more details. + if (isTranslucencyCapable(env.getDefaultScreenDevice() + .getDefaultConfiguration())) + { + return true; + } + + // ... otherwise iterate through all the GCs. + GraphicsDevice[] devices = env.getScreenDevices(); + + for (int i = 0; i < devices.length; i++) { + GraphicsConfiguration[] configs = devices[i].getConfigurations(); + for (int j = 0; j < configs.length; j++) { + if (isTranslucencyCapable(configs[j])) { + return true; + } + } + } + + return false; + } + + /** + * Enables the per-pixel alpha support for the given window. + * Once the window becomes non-opaque (the isOpaque is set to false), + * the drawing sub-system is starting to respect the alpha value of each + * separate pixel. If a pixel gets painted with alpha color component + * equal to zero, it becomes visually transparent, if the alpha of the + * pixel is equal to 255, the pixel is fully opaque. Interim values + * of the alpha color component make the pixel semi-transparent (i.e. + * translucent). + * <p>Note that in order for the window to support the per-pixel alpha + * mode, the window must be created using the GraphicsConfiguration + * for which the {@link #isTranslucencyCapable} + * method returns true. + * <p>Also note that some native systems enable the per-pixel translucency + * mode for any window created using the translucency-compatible + * graphics configuration. However, it is highly recommended to always + * invoke the setWindowOpaque() method for these windows, at least for + * the sake of cross-platform compatibility reasons. + * <p>Also note that the window must not be in the full-screen mode + * when making it non-opaque. Otherwise the IllegalArgumentException + * is thrown. + * <p>If the window is a {@code Frame} or a {@code Dialog}, the window must + * be undecorated prior to enabling the per-pixel translucency effect (see + * {@link Frame#setUndecorated()} and/or {@link Dialog#setUndecorated()}). + * If the window becomes decorated through a subsequent call to the + * corresponding {@code setUndecorated()} method, the per-pixel + * translucency effect will be disabled and the opaque property reset to + * {@code true}. + * <p>Depending on the platform, the method may return without + * effecting the opaque property of the window if the window has a non-null + * warning string ({@link Window#getWarningString()}). In this case + * the passed 'isOpaque' value is ignored. + * + * @param window the window to set the shape to + * @param isOpaque whether the window must be opaque (true), + * or translucent (false) + * @throws NullPointerException if the window argument is null + * @throws IllegalArgumentException if the window uses + * a GraphicsConfiguration for which the + * {@code isTranslucencyCapable()} + * method returns false + * @throws IllegalArgumentException if the window is in full screen mode, + * and the isOpaque is false + * @throws IllegalArgumentException if the window is decorated and the + * isOpaque argument is {@code false}. + * @throws UnsupportedOperationException if the PERPIXEL_TRANSLUCENT + * translucency kind is not supported + */ + public static void setWindowOpaque(Window window, boolean isOpaque) { + if (window == null) { + throw new NullPointerException( + "The window argument should not be null."); + } + if (!isOpaque && !isTranslucencySupported(Translucency.PERPIXEL_TRANSLUCENT)) { + throw new UnsupportedOperationException( + "The PERPIXEL_TRANSLUCENT translucency kind is not supported"); + } + AWTAccessor.getWindowAccessor().setOpaque(window, isOpaque); + } + + /** + * Returns whether the window is opaque or translucent. + * + * @param window the window to set the shape to + * @return whether the window is currently opaque (true) + * or translucent (false) + * @throws NullPointerException if the window argument is null + */ + public static boolean isWindowOpaque(Window window) { + if (window == null) { + throw new NullPointerException( + "The window argument should not be null."); + } + + return AWTAccessor.getWindowAccessor().isOpaque(window); + } + + /** + * Verifies whether a given GraphicsConfiguration supports + * the PERPIXEL_TRANSLUCENT kind of translucency. + * All windows that are intended to be used with the {@link #setWindowOpaque} + * method must be created using a GraphicsConfiguration for which this method + * returns true. + * <p>Note that some native systems enable the per-pixel translucency + * mode for any window created using a translucency-capable + * graphics configuration. However, it is highly recommended to always + * invoke the setWindowOpaque() method for these windows, at least + * for the sake of cross-platform compatibility reasons. + * + * @param gc GraphicsConfiguration + * @throws NullPointerException if the gc argument is null + * @return whether the given GraphicsConfiguration supports + * the translucency effects. + */ + public static boolean isTranslucencyCapable(GraphicsConfiguration gc) { + if (gc == null) { + throw new NullPointerException("The gc argument should not be null"); + } + /* + return gc.isTranslucencyCapable(); + */ + Toolkit curToolkit = Toolkit.getDefaultToolkit(); + if (!(curToolkit instanceof SunToolkit)) { + return false; + } + return ((SunToolkit)curToolkit).isTranslucencyCapable(gc); + } + /** * Sets a 'mixing-cutout' shape for the given component. * diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/com/sun/awt/SecurityWarning.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/com/sun/awt/SecurityWarning.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,169 @@ +/* + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +package com.sun.awt; + +import java.awt.*; +import java.awt.geom.*; + +import sun.awt.AWTAccessor; + + +/** + * Security Warning control interface. + * + * This class provides a couple of methods that help a developer relocate + * the AWT security warning to an appropriate position relative to the current + * window size. A "top-level window" is an instance of the {@code Window} + * class (or its descendant, such as {@code JFrame}). The security warning + * is applied to all windows created by an untrusted code. All such windows + * have a non-null "warning string" (see {@link Window#getWarningString()}). + * <p> + * <b>WARNING</b>: This class is an implementation detail and only meant + * for limited use outside of the core platform. This API may change + * drastically between update release, and it may even be + * removed or be moved to some other packages or classes. + */ +public final class SecurityWarning { + + /** + * The SecurityWarning class should not be instantiated + */ + private SecurityWarning() { + } + + /** + * Gets the size of the security warning. + * + * The returned value is not valid until the peer has been created. Before + * invoking this method a developer must call the {@link Window#pack()}, + * {@link Window#setVisible()}, or some other method that creates the peer. + * + * @param window the window to get the security warning size for + * + * @throws NullPointerException if the window argument is null + * @throws IllegalArgumentException if the window is trusted (i.e. + * the {@code getWarningString()} returns null) + */ + public static Dimension getSize(Window window) { + if (window == null) { + throw new NullPointerException( + "The window argument should not be null."); + } + if (window.getWarningString() == null) { + throw new IllegalArgumentException( + "The window must have a non-null warning string."); + } + // We don't check for a non-null peer since it may be destroyed + // after assigning a valid value to the security warning size. + + return AWTAccessor.getWindowAccessor().getSecurityWarningSize(window); + } + + /** + * Sets the position of the security warning. + * <p> + * The {@code alignmentX} and {@code alignmentY} arguments specify the + * origin of the coordinate system used to calculate the position of the + * security warning. The values must be in the range [0.0f...1.0f]. The + * {@code 0.0f} value represents the left (top) edge of the rectangular + * bounds of the window. The {@code 1.0f} value represents the right + * (bottom) edge of the bounds. Whenever the size of the window changes, + * the origin of the coordinate system gets relocated accordingly. For + * convenience a developer may use the {@code Component.*_ALIGNMENT} + * constants to pass predefined values for these arguments. + * <p> + * The {@code point} argument specifies the location of the security + * warning in the coordinate system described above. If both {@code x} and + * {@code y} coordinates of the point are equal to zero, the warning will + * be located right in the origin of the coordinate system. On the other + * hand, if both {@code alignmentX} and {@code alignmentY} are equal to + * zero (i.e. the origin of the coordinate system is placed at the top-left + * corner of the window), then the {@code point} argument represents the + * absolute location of the security warning relative to the location of + * the window. The "absolute" in this case means that the position of the + * security warning is not effected by resizing of the window. + * <p> + * Note that the security warning managment code guarantees that: + * <ul> + * <li>The security warning cannot be located farther than two pixels from + * the rectangular bounds of the window (see {@link Window#getBounds}), and + * <li>The security warning is always visible on the screen. + * </ul> + * If either of the conditions is violated, the calculated position of the + * security warning is adjusted by the system to meet both these + * conditions. + * <p> + * The default position of the security warning is in the upper-right + * corner of the window, two pixels to the right from the right edge. This + * corresponds to the following arguments passed to this method: + * <ul> + * <li>{@code alignmentX = Component.RIGHT_ALIGNMENT} + * <li>{@code alignmentY = Component.TOP_ALIGNMENT} + * <li>{@code point = (2, 0)} + * </ul> + * + * @param window the window to set the position of the security warning for + * @param alignmentX the horizontal origin of the coordinate system + * @param alignmentY the vertical origin of the coordinate system + * @param point the position of the security warning in the specified + * coordinate system + * + * @throws NullPointerException if the window argument is null + * @throws NullPointerException if the point argument is null + * @throws IllegalArgumentException if the window is trusted (i.e. + * the {@code getWarningString()} returns null + * @throws IllegalArgumentException if the alignmentX or alignmentY + * arguments are not within the range [0.0f ... 1.0f] + */ + public static void setPosition(Window window, Point2D point, + float alignmentX, float alignmentY) + { + if (window == null) { + throw new NullPointerException( + "The window argument should not be null."); + } + if (window.getWarningString() == null) { + throw new IllegalArgumentException( + "The window must have a non-null warning string."); + } + if (point == null) { + throw new NullPointerException( + "The point argument must not be null"); + } + if (alignmentX < 0.0f || alignmentX > 1.0f) { + throw new IllegalArgumentException( + "alignmentX must be in the range [0.0f ... 1.0f]."); + } + if (alignmentY < 0.0f || alignmentY > 1.0f) { + throw new IllegalArgumentException( + "alignmentY must be in the range [0.0f ... 1.0f]."); + } + + AWTAccessor.getWindowAccessor().setSecurityWarningPosition(window, + point, alignmentX, alignmentY); + } +} + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKIconFactory.java --- a/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKIconFactory.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/gtk/GTKIconFactory.java Wed Jul 05 16:51:11 2017 +0200 @@ -279,20 +279,22 @@ public void paintIcon(SynthContext context, Graphics g, int x, int y, int w, int h) { - JToolBar toolbar = (JToolBar)context.getComponent(); - Orientation orientation = - (toolbar.getOrientation() == JToolBar.HORIZONTAL ? - Orientation.HORIZONTAL : Orientation.VERTICAL); + if (context != null) { + JToolBar toolbar = (JToolBar)context.getComponent(); + Orientation orientation = + (toolbar.getOrientation() == JToolBar.HORIZONTAL ? + Orientation.HORIZONTAL : Orientation.VERTICAL); - if (style == null) { - style = SynthLookAndFeel.getStyleFactory().getStyle( - context.getComponent(), GTKRegion.HANDLE_BOX); + if (style == null) { + style = SynthLookAndFeel.getStyleFactory().getStyle( + context.getComponent(), GTKRegion.HANDLE_BOX); + } + context = new SynthContext(toolbar, GTKRegion.HANDLE_BOX, + style, SynthConstants.ENABLED); + + GTKPainter.INSTANCE.paintIcon(context, g, + getMethod(), x, y, w, h, orientation); } - context = new SynthContext(toolbar, GTKRegion.HANDLE_BOX, - style, SynthConstants.ENABLED); - - GTKPainter.INSTANCE.paintIcon(context, g, - getMethod(), x, y, w, h, orientation); } public int getIconWidth(SynthContext context) { @@ -336,12 +338,14 @@ public void paintIcon(SynthContext context, Graphics g, int x, int y, int w, int h) { - ArrowType arrowDir = ArrowType.RIGHT; - if (!context.getComponent().getComponentOrientation().isLeftToRight()) { - arrowDir = ArrowType.LEFT; + if (context != null) { + ArrowType arrowDir = ArrowType.RIGHT; + if (!context.getComponent().getComponentOrientation().isLeftToRight()) { + arrowDir = ArrowType.LEFT; + } + GTKPainter.INSTANCE.paintIcon(context, g, + getMethod(), x, y, w, h, arrowDir); } - GTKPainter.INSTANCE.paintIcon(context, g, - getMethod(), x, y, w, h, arrowDir); } } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java --- a/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/com/sun/java/swing/plaf/windows/WindowsFileChooserUI.java Wed Jul 05 16:51:11 2017 +0200 @@ -39,6 +39,8 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.util.*; +import java.security.AccessController; +import java.security.PrivilegedAction; import sun.awt.shell.ShellFolder; import sun.awt.OSInfo; @@ -1143,7 +1145,11 @@ File[] baseFolders; if (useShellFolder) { - baseFolders = (File[])ShellFolder.get("fileChooserComboBoxFolders"); + baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() { + public File[] run() { + return (File[]) ShellFolder.get("fileChooserComboBoxFolders"); + } + }); } else { baseFolders = fsv.getRoots(); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/AWTKeyStroke.java --- a/jdk/src/share/classes/java/awt/AWTKeyStroke.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/AWTKeyStroke.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -329,6 +329,9 @@ * <li><code>java.awt.event.KeyEvent.VK_TAB</code> * <li><code>java.awt.event.KeyEvent.VK_SPACE</code> * </ul> + * Alternatively, the key code may be obtained by calling + * <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code>. + * * The modifiers consist of any combination of:<ul> * <li>java.awt.event.InputEvent.SHIFT_DOWN_MASK * <li>java.awt.event.InputEvent.CTRL_DOWN_MASK diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/Canvas.java --- a/jdk/src/share/classes/java/awt/Canvas.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/Canvas.java Wed Jul 05 16:51:11 2017 +0200 @@ -25,6 +25,7 @@ package java.awt; import java.awt.image.BufferStrategy; +import java.awt.peer.CanvasPeer; import javax.accessibility.*; /** @@ -65,7 +66,17 @@ */ public Canvas(GraphicsConfiguration config) { this(); - graphicsConfig = config; + setGraphicsConfiguration(config); + } + + @Override + void setGraphicsConfiguration(GraphicsConfiguration gc) { + CanvasPeer peer = (CanvasPeer)getPeer(); + if (peer != null) { + gc = peer.getAppropriateGraphicsConfiguration(gc); + } + + super.setGraphicsConfiguration(gc); } /** diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/Component.java --- a/jdk/src/share/classes/java/awt/Component.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/Component.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -300,7 +300,7 @@ * @see GraphicsConfiguration * @see #getGraphicsConfiguration */ - transient GraphicsConfiguration graphicsConfig = null; + private transient GraphicsConfiguration graphicsConfig = null; /** * A reference to a <code>BufferStrategy</code> object @@ -799,8 +799,24 @@ } } + // Whether this Component has had the background erase flag + // specified via SunToolkit.disableBackgroundErase(). This is + // needed in order to make this function work on X11 platforms, + // where currently there is no chance to interpose on the creation + // of the peer and therefore the call to XSetBackground. + transient boolean backgroundEraseDisabled; + static { AWTAccessor.setComponentAccessor(new AWTAccessor.ComponentAccessor() { + public void setBackgroundEraseDisabled(Component comp, boolean disabled) { + comp.backgroundEraseDisabled = disabled; + } + public boolean getBackgroundEraseDisabled(Component comp) { + return comp.backgroundEraseDisabled; + } + public Rectangle getBounds(Component comp) { + return new Rectangle(comp.x, comp.y, comp.width, comp.height); + } public void setMixingCutoutShape(Component comp, Shape shape) { Region region = shape == null ? null : Region.getInstance(shape, null); @@ -829,6 +845,22 @@ } } } + + public void setGraphicsConfiguration(Component comp, + GraphicsConfiguration gc) + { + comp.setGraphicsConfiguration(gc); + } + public boolean requestFocus(Component comp, CausedFocusEvent.Cause cause) { + return comp.requestFocus(cause); + } + public boolean canBeFocusOwner(Component comp) { + return comp.canBeFocusOwner(); + } + + public boolean isVisible_NoClientCode(Component comp) { + return comp.isVisible_NoClientCode(); + } }); } @@ -996,50 +1028,21 @@ */ public GraphicsConfiguration getGraphicsConfiguration() { synchronized(getTreeLock()) { - if (graphicsConfig != null) { - return graphicsConfig; - } else if (getParent() != null) { - return getParent().getGraphicsConfiguration(); - } else { - return null; - } + return getGraphicsConfiguration_NoClientCode(); } } final GraphicsConfiguration getGraphicsConfiguration_NoClientCode() { - GraphicsConfiguration graphicsConfig = this.graphicsConfig; - Container parent = this.parent; - if (graphicsConfig != null) { - return graphicsConfig; - } else if (parent != null) { - return parent.getGraphicsConfiguration_NoClientCode(); - } else { - return null; - } - } - - /** - * Resets this <code>Component</code>'s - * <code>GraphicsConfiguration</code> back to a default - * value. For most componenets, this is <code>null</code>. - * Called from the Toolkit thread, so NO CLIENT CODE. - */ - void resetGC() { + return graphicsConfig; + } + + void setGraphicsConfiguration(GraphicsConfiguration gc) { synchronized(getTreeLock()) { - graphicsConfig = null; - } - } - - /* - * Not called on Component, but needed for Canvas and Window - */ - void setGCFromPeer() { - synchronized(getTreeLock()) { - if (peer != null) { // can't imagine how this will be false, - // but just in case - graphicsConfig = peer.getGraphicsConfiguration(); - } else { - graphicsConfig = null; + graphicsConfig = gc; + + ComponentPeer peer = getPeer(); + if (peer != null) { + peer.updateGraphicsData(gc); } } } @@ -6663,23 +6666,7 @@ // Update stacking order - if (parent != null && parent.peer != null) { - ContainerPeer parentContPeer = (ContainerPeer) parent.peer; - // if our parent is lightweight and we are not - // we should call restack on nearest heavyweight - // container. - if (parentContPeer instanceof LightweightPeer - && ! (peer instanceof LightweightPeer)) - { - Container hwParent = getNativeContainer(); - if (hwParent != null && hwParent.peer != null) { - parentContPeer = (ContainerPeer) hwParent.peer; - } - } - if (parentContPeer.isRestackSupported()) { - parentContPeer.restack(); - } - } + peer.setZOrder(getHWPeerAboveMe()); if (!isAddNotifyComplete) { mixOnShowing(); @@ -7170,8 +7157,8 @@ requestFocusHelper(false, true); } - void requestFocus(CausedFocusEvent.Cause cause) { - requestFocusHelper(false, true, cause); + boolean requestFocus(CausedFocusEvent.Cause cause) { + return requestFocusHelper(false, true, cause); } /** @@ -7456,7 +7443,7 @@ // sometimes most recent focus owner may be null, but focus owner is not // e.g. we reset most recent focus owner if user removes focus owner focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); - if (focusOwner != null && getContainingWindow(focusOwner) != window) { + if (focusOwner != null && focusOwner.getContainingWindow() != window) { focusOwner = null; } } @@ -8689,30 +8676,8 @@ * null, if component is not a part of window hierarchy */ Window getContainingWindow() { - return getContainingWindow(this); - } - /** - * Returns the <code>Window</code> ancestor of the component <code>comp</code>. - * @return Window ancestor of the component or component by itself if it is Window; - * null, if component is not a part of window hierarchy - */ - static Window getContainingWindow(Component comp) { - while (comp != null && !(comp instanceof Window)) { - comp = comp.getParent(); - } - - return (Window)comp; - } - - - - - - - - - - + return SunToolkit.getContainingWindow(this); + } /** * Initialize JNI field and method IDs @@ -9575,6 +9540,27 @@ return nextAbove < 0 ? -1 : nextAbove; } + final ComponentPeer getHWPeerAboveMe() { + checkTreeLock(); + + Container cont = getContainer(); + int indexAbove = getSiblingIndexAbove(); + + while (cont != null) { + for (int i = indexAbove; i > -1; i--) { + Component comp = cont.getComponent(i); + if (comp != null && comp.isDisplayable() && !comp.isLightweight()) { + return comp.getPeer(); + } + } + + indexAbove = cont.getSiblingIndexAbove(); + cont = cont.getContainer(); + } + + return null; + } + final int getSiblingIndexBelow() { checkTreeLock(); Container parent = getContainer(); @@ -9827,4 +9813,29 @@ } // ****************** END OF MIXING CODE ******************************** + + private static boolean doesClassImplement(Class cls, String interfaceName) { + if (cls == null) return false; + + for (Class c : cls.getInterfaces()) { + if (c.getName().equals(interfaceName)) { + return true; + } + } + return doesClassImplement(cls.getSuperclass(), interfaceName); + } + + /** + * Checks that the given object implements the given interface. + * @param obj Object to be checked + * @param interfaceName The name of the interface. Must be fully-qualified interface name. + * @return true, if this object implements the given interface, + * false, otherwise, or if obj or interfaceName is null + */ + static boolean doesImplement(Object obj, String interfaceName) { + if (obj == null) return false; + if (interfaceName == null) return false; + + return doesClassImplement(obj.getClass(), interfaceName); + } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/Container.java --- a/jdk/src/share/classes/java/awt/Container.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/Container.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -167,6 +167,9 @@ transient int listeningBoundsChildren; transient int descendantsCount; + /* Non-opaque window support -- see Window.setLayersOpaque */ + transient Color preserveBackgroundColor = null; + /** * JDK 1.1 serialVersionUID */ @@ -267,9 +270,13 @@ /** * Gets the number of components in this panel. + * <p> + * Note: This method should be called under AWT tree lock. + * * @return the number of components in this panel. * @see #getComponent * @since JDK1.1 + * @see Component#getTreeLock() */ public int getComponentCount() { return countComponents(); @@ -281,43 +288,65 @@ */ @Deprecated public int countComponents() { - synchronized (getTreeLock()) { - return component.size(); - } + // This method is not synchronized under AWT tree lock. + // Instead, the calling code is responsible for the + // synchronization. See 6784816 for details. + return component.size(); } /** * Gets the nth component in this container. + * <p> + * Note: This method should be called under AWT tree lock. + * * @param n the index of the component to get. * @return the n<sup>th</sup> component in this container. * @exception ArrayIndexOutOfBoundsException * if the n<sup>th</sup> value does not exist. + * @see Component#getTreeLock() */ public Component getComponent(int n) { - synchronized (getTreeLock()) { - if ((n < 0) || (n >= component.size())) { - throw new ArrayIndexOutOfBoundsException("No such child: " + n); - } + // This method is not synchronized under AWT tree lock. + // Instead, the calling code is responsible for the + // synchronization. See 6784816 for details. + try { return component.get(n); + } catch (IndexOutOfBoundsException z) { + throw new ArrayIndexOutOfBoundsException("No such child: " + n); } } /** * Gets all the components in this container. + * <p> + * Note: This method should be called under AWT tree lock. + * * @return an array of all the components in this container. + * @see Component#getTreeLock() */ public Component[] getComponents() { + // This method is not synchronized under AWT tree lock. + // Instead, the calling code is responsible for the + // synchronization. See 6784816 for details. return getComponents_NoClientCode(); } + // NOTE: This method may be called by privileged threads. // This functionality is implemented in a package-private method // to insure that it cannot be overridden by client subclasses. // DO NOT INVOKE CLIENT CODE ON THIS THREAD! final Component[] getComponents_NoClientCode() { + return component.toArray(EMPTY_ARRAY); + } + + /* + * Wrapper for getComponents() method with a proper synchronization. + */ + Component[] getComponentsSync() { synchronized (getTreeLock()) { - return component.toArray(EMPTY_ARRAY); + return getComponents(); } - } // getComponents_NoClientCode() + } /** * Determines the insets of this container, which indicate the size @@ -503,6 +532,9 @@ adjustDescendants(-(comp.countHierarchyMembers())); comp.parent = null; + if (needRemoveNotify) { + comp.setGraphicsConfiguration(null); + } component.remove(index); invalidateIfValid(); @@ -643,10 +675,7 @@ // each HW descendant independently. return !comp.peer.isReparentSupported(); } else { - // if container didn't change we still might need to recreate component's window as - // changes to zorder should be reflected in native window stacking order and it might - // not be supported by the platform. This is important only for heavyweight child - return !((ContainerPeer)(newNativeContainer.peer)).isRestackSupported(); + return false; } } @@ -786,6 +815,7 @@ component.add(index, comp); } comp.parent = this; + comp.setGraphicsConfiguration(getGraphicsConfiguration()); adjustListeningChildren(AWTEvent.HIERARCHY_EVENT_MASK, comp.numListening(AWTEvent.HIERARCHY_EVENT_MASK)); @@ -802,11 +832,6 @@ if (peer != null) { if (comp.peer == null) { // Remove notify was called or it didn't have peer - create new one comp.addNotify(); - // New created peer creates component on top of the stacking order - Container newNativeContainer = getHeavyweightContainer(); - if (((ContainerPeer)newNativeContainer.getPeer()).isRestackSupported()) { - ((ContainerPeer)newNativeContainer.getPeer()).restack(); - } } else { // Both container and child have peers, it means child peer should be reparented. // In both cases we need to reparent native widgets. Container newNativeContainer = getHeavyweightContainer(); @@ -815,13 +840,8 @@ // Native container changed - need to reparent native widgets newNativeContainer.reparentChild(comp); } - // If component still has a peer and it is either container or heavyweight - // and restack is supported we have to restack native windows since order might have changed - if ((!comp.isLightweight() || (comp instanceof Container)) - && ((ContainerPeer)newNativeContainer.getPeer()).isRestackSupported()) - { - ((ContainerPeer)newNativeContainer.getPeer()).restack(); - } + comp.peer.setZOrder(comp.getHWPeerAboveMe()); + if (!comp.isLightweight() && isLightweight()) { // If component is heavyweight and one of the containers is lightweight // the location of the component should be fixed. @@ -1034,9 +1054,9 @@ } checkAddToSelf(comp); checkNotAWindow(comp); - if (thisGC != null) { - comp.checkGD(thisGC.getDevice().getIDstring()); - } + if (thisGC != null) { + comp.checkGD(thisGC.getDevice().getIDstring()); + } /* Reparent the component and tidy up the tree's state. */ if (comp.parent != null) { @@ -1053,6 +1073,7 @@ component.add(index, comp); } comp.parent = this; + comp.setGraphicsConfiguration(thisGC); adjustListeningChildren(AWTEvent.HIERARCHY_EVENT_MASK, comp.numListening(AWTEvent.HIERARCHY_EVENT_MASK)); @@ -1091,6 +1112,19 @@ } } + @Override + void setGraphicsConfiguration(GraphicsConfiguration gc) { + synchronized (getTreeLock()) { + super.setGraphicsConfiguration(gc); + + for (Component comp : component) { + if (comp != null) { + comp.setGraphicsConfiguration(gc); + } + } + } + } + /** * Checks that all Components that this Container contains are on * the same GraphicsDevice as this Container. If not, throws an @@ -1148,6 +1182,7 @@ comp.parent = null; component.remove(index); + comp.setGraphicsConfiguration(null); invalidateIfValid(); if (containerListener != null || @@ -1224,6 +1259,7 @@ layoutMgr.removeLayoutComponent(comp); } comp.parent = null; + comp.setGraphicsConfiguration(null); if (containerListener != null || (eventMask & AWTEvent.CONTAINER_EVENT_MASK) != 0 || Toolkit.enabledOnToolkit(AWTEvent.CONTAINER_EVENT_MASK)) { @@ -1339,7 +1375,7 @@ } private int getListenersCount(int id, boolean enabledOnToolkit) { - assert Thread.holdsLock(getTreeLock()); + checkTreeLock(); if (enabledOnToolkit) { return descendantsCount; } @@ -1357,7 +1393,7 @@ final int createHierarchyEvents(int id, Component changed, Container changedParent, long changeFlags, boolean enabledOnToolkit) { - assert Thread.holdsLock(getTreeLock()); + checkTreeLock(); int listeners = getListenersCount(id, enabledOnToolkit); for (int count = listeners, i = 0; count > 0; i++) { @@ -1372,7 +1408,7 @@ final void createChildHierarchyEvents(int id, long changeFlags, boolean enabledOnToolkit) { - assert Thread.holdsLock(getTreeLock()); + checkTreeLock(); if (component.isEmpty()) { return; } @@ -1507,6 +1543,7 @@ * @see #validate */ protected void validateTree() { + checkTreeLock(); if (!isValid()) { if (peer instanceof ContainerPeer) { ((ContainerPeer)peer).beginLayout(); @@ -1783,7 +1820,7 @@ // super.paint(); -- Don't bother, since it's a NOP. GraphicsCallback.PaintCallback.getInstance(). - runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.LIGHTWEIGHTS); + runComponents(getComponentsSync(), g, GraphicsCallback.LIGHTWEIGHTS); } } @@ -1838,7 +1875,7 @@ } GraphicsCallback.PrintCallback.getInstance(). - runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.LIGHTWEIGHTS); + runComponents(getComponentsSync(), g, GraphicsCallback.LIGHTWEIGHTS); } } @@ -1851,7 +1888,7 @@ public void paintComponents(Graphics g) { if (isShowing()) { GraphicsCallback.PaintAllCallback.getInstance(). - runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.TWO_PASSES); + runComponents(getComponentsSync(), g, GraphicsCallback.TWO_PASSES); } } @@ -1873,8 +1910,8 @@ void paintHeavyweightComponents(Graphics g) { if (isShowing()) { GraphicsCallback.PaintHeavyweightComponentsCallback.getInstance(). - runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.LIGHTWEIGHTS | - GraphicsCallback.HEAVYWEIGHTS); + runComponents(getComponentsSync(), g, + GraphicsCallback.LIGHTWEIGHTS | GraphicsCallback.HEAVYWEIGHTS); } } @@ -1887,7 +1924,7 @@ public void printComponents(Graphics g) { if (isShowing()) { GraphicsCallback.PrintAllCallback.getInstance(). - runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.TWO_PASSES); + runComponents(getComponentsSync(), g, GraphicsCallback.TWO_PASSES); } } @@ -1909,8 +1946,8 @@ void printHeavyweightComponents(Graphics g) { if (isShowing()) { GraphicsCallback.PrintHeavyweightComponentsCallback.getInstance(). - runComponents(component.toArray(EMPTY_ARRAY), g, GraphicsCallback.LIGHTWEIGHTS | - GraphicsCallback.HEAVYWEIGHTS); + runComponents(getComponentsSync(), g, + GraphicsCallback.LIGHTWEIGHTS | GraphicsCallback.HEAVYWEIGHTS); } } @@ -2460,9 +2497,7 @@ * @since 1.2 */ public Component findComponentAt(int x, int y) { - synchronized (getTreeLock()) { - return findComponentAt(x, y, true); - } + return findComponentAt(x, y, true); } /** @@ -2475,58 +2510,60 @@ * The addition of this feature is temporary, pending the * adoption of new, public API which exports this feature. */ - final Component findComponentAt(int x, int y, boolean ignoreEnabled) - { - if (isRecursivelyVisible()){ - return findComponentAtImpl(x, y, ignoreEnabled); + final Component findComponentAt(int x, int y, boolean ignoreEnabled) { + synchronized (getTreeLock()) { + if (isRecursivelyVisible()){ + return findComponentAtImpl(x, y, ignoreEnabled); + } } return null; } final Component findComponentAtImpl(int x, int y, boolean ignoreEnabled){ + checkTreeLock(); + if (!(contains(x, y) && visible && (ignoreEnabled || enabled))) { return null; } // Two passes: see comment in sun.awt.SunGraphicsCallback - synchronized (getTreeLock()) { - for (int i = 0; i < component.size(); i++) { - Component comp = component.get(i); - if (comp != null && - !(comp.peer instanceof LightweightPeer)) { - if (comp instanceof Container) { - comp = ((Container)comp).findComponentAtImpl(x - comp.x, - y - comp.y, - ignoreEnabled); - } else { - comp = comp.locate(x - comp.x, y - comp.y); - } - if (comp != null && comp.visible && - (ignoreEnabled || comp.enabled)) - { - return comp; - } + for (int i = 0; i < component.size(); i++) { + Component comp = component.get(i); + if (comp != null && + !(comp.peer instanceof LightweightPeer)) { + if (comp instanceof Container) { + comp = ((Container)comp).findComponentAtImpl(x - comp.x, + y - comp.y, + ignoreEnabled); + } else { + comp = comp.locate(x - comp.x, y - comp.y); } - } - for (int i = 0; i < component.size(); i++) { - Component comp = component.get(i); - if (comp != null && - comp.peer instanceof LightweightPeer) { - if (comp instanceof Container) { - comp = ((Container)comp).findComponentAtImpl(x - comp.x, - y - comp.y, - ignoreEnabled); - } else { - comp = comp.locate(x - comp.x, y - comp.y); - } - if (comp != null && comp.visible && - (ignoreEnabled || comp.enabled)) - { - return comp; - } + if (comp != null && comp.visible && + (ignoreEnabled || comp.enabled)) + { + return comp; } } } + for (int i = 0; i < component.size(); i++) { + Component comp = component.get(i); + if (comp != null && + comp.peer instanceof LightweightPeer) { + if (comp instanceof Container) { + comp = ((Container)comp).findComponentAtImpl(x - comp.x, + y - comp.y, + ignoreEnabled); + } else { + comp = comp.locate(x - comp.x, y - comp.y); + } + if (comp != null && comp.visible && + (ignoreEnabled || comp.enabled)) + { + return comp; + } + } + } + return this; } @@ -2584,13 +2621,6 @@ for (int i = 0; i < component.size(); i++) { component.get(i).addNotify(); } - // Update stacking order if native platform allows - ContainerPeer cpeer = (ContainerPeer)peer; - if (cpeer.isRestackSupported()) { - cpeer.restack(); - } - - } } @@ -3488,7 +3518,7 @@ private void writeObject(ObjectOutputStream s) throws IOException { ObjectOutputStream.PutField f = s.putFields(); f.put("ncomponents", component.size()); - f.put("component", component.toArray(EMPTY_ARRAY)); + f.put("component", getComponentsSync()); f.put("layoutMgr", layoutMgr); f.put("dispatcher", dispatcher); f.put("maxSize", maxSize); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java --- a/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/DefaultKeyboardFocusManager.java Wed Jul 05 16:51:11 2017 +0200 @@ -479,7 +479,7 @@ // that a Component outside of the focused Window receives a // FOCUS_GAINED event. We synthesize a WINDOW_GAINED_FOCUS // event in that case. - final Window newFocusedWindow = Component.getContainingWindow(newFocusOwner); + final Window newFocusedWindow = SunToolkit.getContainingWindow(newFocusOwner); final Window currentFocusedWindow = getGlobalFocusedWindow(); if (newFocusedWindow != null && newFocusedWindow != currentFocusedWindow) diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/Dialog.java --- a/jdk/src/share/classes/java/awt/Dialog.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/Dialog.java Wed Jul 05 16:51:11 2017 +0200 @@ -1226,7 +1226,7 @@ synchronized (getTreeLock()) { if (keepBlockingEDT) { keepBlockingEDT = false; - PeerEvent wakingEvent = new PeerEvent(this, new WakingRunnable(), PeerEvent.PRIORITY_EVENT); + PeerEvent wakingEvent = new PeerEvent(getToolkit(), new WakingRunnable(), PeerEvent.PRIORITY_EVENT); AppContext curAppContext = AppContext.getAppContext(); if (showAppContext != curAppContext) { // Wake up event dispatch thread on which the dialog was diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/Frame.java --- a/jdk/src/share/classes/java/awt/Frame.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/Frame.java Wed Jul 05 16:51:11 2017 +0200 @@ -36,6 +36,7 @@ import java.io.IOException; import sun.awt.AppContext; import sun.awt.SunToolkit; +import sun.awt.AWTAccessor; import java.lang.ref.WeakReference; import javax.accessibility.*; @@ -738,11 +739,15 @@ * @since 1.4 * @see java.awt.Window#addWindowStateListener */ - public synchronized void setExtendedState(int state) { + public void setExtendedState(int state) { if ( !isFrameStateSupported( state ) ) { return; } - this.state = state; + synchronized (getObjectLock()) { + this.state = state; + } + // peer.setState must be called outside of object lock + // synchronization block to avoid possible deadlock FramePeer peer = (FramePeer)this.peer; if (peer != null) { peer.setState(state); @@ -804,12 +809,27 @@ * @see #setExtendedState(int) * @since 1.4 */ - public synchronized int getExtendedState() { - FramePeer peer = (FramePeer)this.peer; - if (peer != null) { - state = peer.getState(); + public int getExtendedState() { + synchronized (getObjectLock()) { + return state; } - return state; + } + + static { + AWTAccessor.setFrameAccessor( + new AWTAccessor.FrameAccessor() { + public void setExtendedState(Frame frame, int state) { + synchronized(frame.getObjectLock()) { + frame.state = state; + } + } + public int getExtendedState(Frame frame) { + synchronized(frame.getObjectLock()) { + return frame.state; + } + } + } + ); } /** @@ -967,7 +987,7 @@ if (resizable) { str += ",resizable"; } - getExtendedState(); // sync with peer + int state = getExtendedState(); if (state == NORMAL) { str += ",normal"; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/GraphicsConfiguration.java --- a/jdk/src/share/classes/java/awt/GraphicsConfiguration.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/GraphicsConfiguration.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -434,4 +434,20 @@ } return defaultImageCaps; } + + /** + * Returns whether this GraphicsConfiguration supports + * the {@link GraphicsDevice.WindowTranslucency#PERPIXEL_TRANSLUCENT + * PERPIXEL_TRANSLUCENT} kind of translucency. + * + * @param gc GraphicsConfiguration + * @throws NullPointerException if the gc argument is null + * @return whether the given GraphicsConfiguration supports + * the translucency effects. + * @see Window#setBackground(Color) + */ + /*public */boolean isTranslucencyCapable() { + // Overridden in subclasses + return false; } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/GraphicsDevice.java --- a/jdk/src/share/classes/java/awt/GraphicsDevice.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/GraphicsDevice.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,10 @@ package java.awt; import java.awt.image.ColorModel; + +import sun.awt.AWTAccessor; import sun.awt.AppContext; +import sun.awt.SunToolkit; /** * The <code>GraphicsDevice</code> class describes the graphics devices @@ -109,6 +112,31 @@ */ public final static int TYPE_IMAGE_BUFFER = 2; + /** Kinds of translucency supported by the underlying system. + * @see #isTranslucencySupported + */ + /*public */static enum WindowTranslucency { + /** + * Represents support in the underlying system for windows each pixel + * of which is guaranteed to be either completely opaque, with + * an alpha value of 1.0, or completely transparent, with an alpha + * value of 0.0. + */ + PERPIXEL_TRANSPARENT, + /** + * Represents support in the underlying system for windows all of + * the pixels of which have the same alpha value between or including + * 0.0 and 1.0. + */ + TRANSLUCENT, + /** + * Represents support in the underlying system for windows that + * contain or might contain pixels with arbitrary alpha values + * between and including 0.0 and 1.0. + */ + PERPIXEL_TRANSLUCENT; + } + /** * Returns the type of this <code>GraphicsDevice</code>. * @return the type of this <code>GraphicsDevice</code>, which can @@ -235,6 +263,21 @@ * @since 1.4 */ public void setFullScreenWindow(Window w) { + if (w != null) { + //XXX: The actions should be documented in some non-update release. + /* + if (w.getShape() != null) { + w.setShape(w, null); + } + if (!w.isOpaque()) { + w.setOpaque(false); + } + if (w.getOpacity() < 1.0f) { + w.setOpacity(1.0f); + } + */ + } + if (fullScreenWindow != null && windowedModeBounds != null) { // if the window went into fs mode before it was realized it may // have (0,0) dimensions @@ -424,4 +467,94 @@ public int getAvailableAcceleratedMemory() { return -1; } + + /** + * Returns whether the given level of translucency is supported + * this graphics device. + * + * @param translucencyKind a kind of translucency support + * @return whether the given translucency kind is supported + */ + /*public */boolean isWindowTranslucencySupported(WindowTranslucency translucencyKind) { + switch (translucencyKind) { + case PERPIXEL_TRANSPARENT: + return isWindowShapingSupported(); + case TRANSLUCENT: + return isWindowOpacitySupported(); + case PERPIXEL_TRANSLUCENT: + return isWindowPerpixelTranslucencySupported(); + } + return false; + } + + /** + * Returns whether the windowing system supports changing the shape + * of top-level windows. + * Note that this method may sometimes return true, but the native + * windowing system may still not support the concept of + * shaping (due to the bugs in the windowing system). + */ + static boolean isWindowShapingSupported() { + Toolkit curToolkit = Toolkit.getDefaultToolkit(); + if (!(curToolkit instanceof SunToolkit)) { + return false; + } + return ((SunToolkit)curToolkit).isWindowShapingSupported(); + } + + /** + * Returns whether the windowing system supports changing the opacity + * value of top-level windows. + * Note that this method may sometimes return true, but the native + * windowing system may still not support the concept of + * translucency (due to the bugs in the windowing system). + */ + static boolean isWindowOpacitySupported() { + Toolkit curToolkit = Toolkit.getDefaultToolkit(); + if (!(curToolkit instanceof SunToolkit)) { + return false; + } + return ((SunToolkit)curToolkit).isWindowOpacitySupported(); + } + + boolean isWindowPerpixelTranslucencySupported() { + /* + * Per-pixel alpha is supported if all the conditions are TRUE: + * 1. The toolkit is a sort of SunToolkit + * 2. The toolkit supports translucency in general + * (isWindowTranslucencySupported()) + * 3. There's at least one translucency-capable + * GraphicsConfiguration + */ + Toolkit curToolkit = Toolkit.getDefaultToolkit(); + if (!(curToolkit instanceof SunToolkit)) { + return false; + } + if (!((SunToolkit)curToolkit).isWindowTranslucencySupported()) { + return false; + } + + // TODO: cache translucency capable GC + return getTranslucencyCapableGC() != null; + } + + GraphicsConfiguration getTranslucencyCapableGC() { + // If the default GC supports translucency return true. + // It is important to optimize the verification this way, + // see CR 6661196 for more details. + GraphicsConfiguration defaultGC = getDefaultConfiguration(); + if (defaultGC.isTranslucencyCapable()) { + return defaultGC; + } + + // ... otherwise iterate through all the GCs. + GraphicsConfiguration[] configs = getConfigurations(); + for (int j = 0; j < configs.length; j++) { + if (configs[j].isTranslucencyCapable()) { + return configs[j]; + } + } + + return null; + } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/KeyboardFocusManager.java --- a/jdk/src/share/classes/java/awt/KeyboardFocusManager.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/KeyboardFocusManager.java Wed Jul 05 16:51:11 2017 +0200 @@ -61,6 +61,7 @@ import sun.awt.SunToolkit; import sun.awt.CausedFocusEvent; import sun.awt.KeyboardFocusManagerPeerProvider; +import sun.awt.AWTAccessor; /** * The KeyboardFocusManager is responsible for managing the active and focused @@ -118,6 +119,32 @@ if (!GraphicsEnvironment.isHeadless()) { initIDs(); } + AWTAccessor.setKeyboardFocusManagerAccessor( + new AWTAccessor.KeyboardFocusManagerAccessor() { + public int shouldNativelyFocusHeavyweight(Component heavyweight, + Component descendant, + boolean temporary, + boolean focusedWindowChangeAllowed, + long time, + CausedFocusEvent.Cause cause) + { + return KeyboardFocusManager.shouldNativelyFocusHeavyweight( + heavyweight, descendant, temporary, focusedWindowChangeAllowed, time, cause); + } + public boolean processSynchronousLightweightTransfer(Component heavyweight, + Component descendant, + boolean temporary, + boolean focusedWindowChangeAllowed, + long time) + { + return KeyboardFocusManager.processSynchronousLightweightTransfer( + heavyweight, descendant, temporary, focusedWindowChangeAllowed, time); + } + public void removeLastFocusRequest(Component heavyweight) { + KeyboardFocusManager.removeLastFocusRequest(heavyweight); + } + } + ); } transient KeyboardFocusManagerPeer peer; @@ -2208,7 +2235,7 @@ boolean temporary, boolean focusedWindowChangeAllowed, long time) { - Window parentWindow = Component.getContainingWindow(heavyweight); + Window parentWindow = SunToolkit.getContainingWindow(heavyweight); if (parentWindow == null || !parentWindow.syncLWRequests) { return false; } @@ -2443,79 +2470,7 @@ } } } - static void heavyweightButtonDown(Component heavyweight, long time) { - heavyweightButtonDown(heavyweight, time, false); - } - static void heavyweightButtonDown(Component heavyweight, long time, boolean acceptDuplicates) { - if (log.isLoggable(Level.FINE)) { - if (heavyweight == null) { - log.log(Level.FINE, "Assertion (heavyweight != null) failed"); - } - if (time == 0) { - log.log(Level.FINE, "Assertion (time != 0) failed"); - } - } - KeyboardFocusManager manager = getCurrentKeyboardFocusManager(SunToolkit.targetToAppContext(heavyweight)); - synchronized (heavyweightRequests) { - HeavyweightFocusRequest hwFocusRequest = getLastHWRequest(); - Component currentNativeFocusOwner = (hwFocusRequest == null) - ? manager.getNativeFocusOwner() - : hwFocusRequest.heavyweight; - - // Behavior for all use cases: - // 1. Heavyweight leaf Components (e.g., Button, Checkbox, Choice, - // List, TextComponent, Canvas) that respond to button down. - // - // Native platform will generate a FOCUS_GAINED if and only if - // the Component is not the focus owner (or, will not be the - // focus owner when all outstanding focus requests are - // processed). - // - // 2. Panel with no descendants. - // - // Same as (1). - // - // 3. Panel with at least one heavyweight descendant. - // - // This function should NOT be called for this case! - // - // 4. Panel with only lightweight descendants. - // - // Native platform will generate a FOCUS_GAINED if and only if - // neither the Panel, nor any of its recursive, lightweight - // descendants, is the focus owner. However, we want a - // requestFocus() for any lightweight descendant to win out over - // the focus request for the Panel. To accomplish this, we - // differ from the algorithm for shouldNativelyFocusHeavyweight - // as follows: - // a. If the requestFocus() for a lightweight descendant has - // been fully handled by the time this function is invoked, - // then 'hwFocusRequest' will be null and 'heavyweight' - // will be the native focus owner. Do *not* synthesize a - // focus transfer to the Panel. - // b. If the requestFocus() for a lightweight descendant has - // been recorded, but not handled, then 'hwFocusRequest' - // will be non-null and 'hwFocusRequest.heavyweight' will - // equal 'heavyweight'. Do *not* append 'heavyweight' to - // hwFocusRequest.lightweightRequests. - // c. If the requestFocus() for a lightweight descendant is - // yet to be made, then post a new HeavyweightFocusRequest. - // If no lightweight descendant ever requests focus, then - // the Panel will get focus. If some descendant does, then - // the descendant will get focus by either a synthetic - // focus transfer, or a lightweightRequests focus transfer. - - if (acceptDuplicates || heavyweight != currentNativeFocusOwner) { - getCurrentKeyboardFocusManager - (SunToolkit.targetToAppContext(heavyweight)). - enqueueKeyEvents(time, heavyweight); - heavyweightRequests.add - (new HeavyweightFocusRequest(heavyweight, heavyweight, - false, CausedFocusEvent.Cause.MOUSE_EVENT)); - } - } - } /** * Returns the Window which will be active after processing this request, * or null if this is a duplicate request. The active Window is useful @@ -2542,7 +2497,7 @@ (HeavyweightFocusRequest.CLEAR_GLOBAL_FOCUS_OWNER); Component activeWindow = ((hwFocusRequest != null) - ? Component.getContainingWindow(hwFocusRequest.heavyweight) + ? SunToolkit.getContainingWindow(hwFocusRequest.heavyweight) : nativeFocusedWindow); while (activeWindow != null && !((activeWindow instanceof Frame) || @@ -3013,8 +2968,8 @@ } private static boolean focusedWindowChanged(Component to, Component from) { - Window wto = Component.getContainingWindow(to); - Window wfrom = Component.getContainingWindow(from); + Window wto = SunToolkit.getContainingWindow(to); + Window wfrom = SunToolkit.getContainingWindow(from); if (wto == null && wfrom == null) { return true; } @@ -3028,8 +2983,8 @@ } private static boolean isTemporary(Component to, Component from) { - Window wto = Component.getContainingWindow(to); - Window wfrom = Component.getContainingWindow(from); + Window wto = SunToolkit.getContainingWindow(to); + Window wfrom = SunToolkit.getContainingWindow(from); if (wto == null && wfrom == null) { return false; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/MenuItem.java --- a/jdk/src/share/classes/java/awt/MenuItem.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/MenuItem.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -398,9 +398,11 @@ boolean handleShortcut(KeyEvent e) { MenuShortcut s = new MenuShortcut(e.getKeyCode(), (e.getModifiers() & InputEvent.SHIFT_MASK) > 0); + MenuShortcut sE = new MenuShortcut(e.getExtendedKeyCode(), + (e.getModifiers() & InputEvent.SHIFT_MASK) > 0); // Fix For 6185151: Menu shortcuts of all menuitems within a menu // should be disabled when the menu itself is disabled - if (s.equals(shortcut) && isItemEnabled()) { + if ((s.equals(shortcut) || sE.equals(shortcut)) && isItemEnabled()) { // MenuShortcut match -- issue an event on keydown. if (e.getID() == KeyEvent.KEY_PRESSED) { doMenuEvent(e.getWhen(), e.getModifiers()); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/MenuShortcut.java --- a/jdk/src/share/classes/java/awt/MenuShortcut.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/MenuShortcut.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2003 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,21 @@ * For example, a menu shortcut for Ctrl-a (assuming that Control is * the accelerator key) would be created with code like the following: * <p> - * MenuShortcut ms = new MenuShortcut(KeyEvent.VK_A, false); + * <code>MenuShortcut ms = new MenuShortcut(KeyEvent.VK_A, false);</code> + * <p> or alternatively + * <p> + * <code>MenuShortcut ms = new MenuShortcut(KeyEvent.getExtendedKeyCodeForChar('A'), false);</code> + * <p> + * Menu shortcuts may also be constructed for a wider set of keycodes + * using the <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code> call. + * For example, a menu shortcut for "Ctrl+cyrillic ef" is created by + * <p> + * <code>MenuShortcut ms = new MenuShortcut(KeyEvent.getExtendedKeyCodeForChar('\u0444'), false);</code> + * <p> + * Note that shortcuts created with a keycode or an extended keycode defined as a constant in <code>KeyEvent</code> + * work regardless of the current keyboard layout. However, a shortcut made of + * an extended keycode not listed in <code>KeyEvent</code> + * only work if the current keyboard layout produces a corresponding letter. * <p> * The accelerator key is platform-dependent and may be obtained * via {@link Toolkit#getMenuShortcutKeyMask}. diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/Window.java --- a/jdk/src/share/classes/java/awt/Window.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/Window.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,10 @@ package java.awt; import java.awt.event.*; +import java.awt.geom.Point2D; import java.awt.im.InputContext; import java.awt.image.BufferStrategy; +import java.awt.image.BufferedImage; import java.awt.peer.ComponentPeer; import java.awt.peer.WindowPeer; import java.beans.PropertyChangeListener; @@ -49,6 +51,7 @@ import java.util.logging.Logger; import java.util.concurrent.atomic.AtomicBoolean; import javax.accessibility.*; +import sun.awt.AWTAccessor; import sun.awt.AppContext; import sun.awt.CausedFocusEvent; import sun.awt.SunToolkit; @@ -291,6 +294,25 @@ */ transient boolean isInShow = false; + /* + * Opacity level of the window + * + * @see #setOpacity(float) + * @see #getOpacity() + * @since 1.7 + */ + private float opacity = 1.0f; + + /* + * The shape assigned to this window. This field is set to null if + * no shape is set (rectangular window). + * + * @see #getShape() + * @see #setShape(Shape) + * @since 1.7 + */ + private Shape shape = null; + private static final String base = "win"; private static int nameCounter = 0; @@ -305,6 +327,23 @@ transient boolean isTrayIconWindow = false; + /** + * These fields are initialized in the native peer code + * or via AWTAccessor's WindowAccessor. + */ + private transient volatile int securityWarningWidth = 0; + private transient volatile int securityWarningHeight = 0; + + /** + * These fields represent the desired location for the security + * warning if this window is untrusted. + * See com.sun.awt.SecurityWarning for more details. + */ + private transient double securityWarningPointX = 2.0; + private transient double securityWarningPointY = 0.0; + private transient float securityWarningAlignmentX = RIGHT_ALIGNMENT; + private transient float securityWarningAlignmentY = TOP_ALIGNMENT; + static { /* ensure that the necessary native libraries are loaded */ Toolkit.loadLibraries(); @@ -373,6 +412,18 @@ } } + private GraphicsConfiguration initGC(GraphicsConfiguration gc) { + GraphicsEnvironment.checkHeadless(); + + if (gc == null) { + gc = GraphicsEnvironment.getLocalGraphicsEnvironment(). + getDefaultScreenDevice().getDefaultConfiguration(); + } + setGraphicsConfiguration(gc); + + return gc; + } + private void init(GraphicsConfiguration gc) { GraphicsEnvironment.checkHeadless(); @@ -384,14 +435,10 @@ setWarningString(); this.cursor = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR); this.visible = false; - if (gc == null) { - this.graphicsConfig = - GraphicsEnvironment.getLocalGraphicsEnvironment(). - getDefaultScreenDevice().getDefaultConfiguration(); - } else { - this.graphicsConfig = gc; - } - if (graphicsConfig.getDevice().getType() != + + gc = initGC(gc); + + if (gc.getDevice().getType() != GraphicsDevice.TYPE_RASTER_SCREEN) { throw new IllegalArgumentException("not a screen device"); } @@ -399,8 +446,8 @@ /* offset the initial location with the original of the screen */ /* and any insets */ - Rectangle screenBounds = graphicsConfig.getBounds(); - Insets screenInsets = getToolkit().getScreenInsets(graphicsConfig); + Rectangle screenBounds = gc.getBounds(); + Insets screenInsets = getToolkit().getScreenInsets(gc); int x = getX() + screenBounds.x + screenInsets.left; int y = getY() + screenBounds.y + screenInsets.top; if (x != this.x || y != this.y) { @@ -2744,7 +2791,7 @@ sun.java2d.Disposer.addRecord(anchor, new WindowDisposerRecord(appContext, this)); addToWindowList(); - + initGC(null); } private void deserializeResources(ObjectInputStream s) @@ -2849,6 +2896,15 @@ if(aot) { setAlwaysOnTop(aot); // since 1.5; subject to permission check } + shape = (Shape)f.get("shape", null); + opacity = (Float)f.get("opacity", 1.0f); + + this.securityWarningWidth = 0; + this.securityWarningHeight = 0; + this.securityWarningPointX = 2.0; + this.securityWarningPointY = 0.0; + this.securityWarningAlignmentX = RIGHT_ALIGNMENT; + this.securityWarningAlignmentY = TOP_ALIGNMENT; deserializeResources(s); } @@ -2916,41 +2972,18 @@ } // inner class AccessibleAWTWindow - /** - * This method returns the GraphicsConfiguration used by this Window. - * @since 1.3 - */ - public GraphicsConfiguration getGraphicsConfiguration() { - //NOTE: for multiscreen, this will need to take into account - //which screen the window is on/mostly on instead of returning the - //default or constructor argument config. - synchronized(getTreeLock()) { - if (graphicsConfig == null && !GraphicsEnvironment.isHeadless()) { - graphicsConfig = - GraphicsEnvironment. getLocalGraphicsEnvironment(). - getDefaultScreenDevice(). - getDefaultConfiguration(); - } - return graphicsConfig; - } - } - - /** - * Reset this Window's GraphicsConfiguration to match its peer. - */ - void resetGC() { - if (!GraphicsEnvironment.isHeadless()) { - // use the peer's GC - setGCFromPeer(); - // if it's still null, use the default - if (graphicsConfig == null) { - graphicsConfig = GraphicsEnvironment. + @Override + void setGraphicsConfiguration(GraphicsConfiguration gc) { + if (gc == null) { + gc = GraphicsEnvironment. getLocalGraphicsEnvironment(). getDefaultScreenDevice(). getDefaultConfiguration(); - } + } + synchronized (getTreeLock()) { + super.setGraphicsConfiguration(gc); if (log.isLoggable(Level.FINER)) { - log.finer("+ Window.resetGC(): new GC is \n+ " + graphicsConfig + "\n+ this is " + this); + log.finer("+ Window.setGraphicsConfiguration(): new GC is \n+ " + getGraphicsConfiguration_NoClientCode() + "\n+ this is " + this); } } } @@ -3010,13 +3043,13 @@ // target location int dx = 0, dy = 0; // target GC - GraphicsConfiguration gc = this.graphicsConfig; + GraphicsConfiguration gc = getGraphicsConfiguration_NoClientCode(); Rectangle gcBounds = gc.getBounds(); Dimension windowSize = getSize(); // search a top-level of c - Window componentWindow = Component.getContainingWindow(c); + Window componentWindow = SunToolkit.getContainingWindow(c); if ((c == null) || (componentWindow == null)) { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); gc = ge.getDefaultScreenDevice().getDefaultConfiguration(); @@ -3304,6 +3337,225 @@ } + // ******************** SHAPES & TRANSPARENCY CODE ******************** + + /** + * JavaDoc + */ + /*public */float getOpacity() { + synchronized (getTreeLock()) { + return opacity; + } + } + + /** + * JavaDoc + */ + /*public */void setOpacity(float opacity) { + synchronized (getTreeLock()) { + if (opacity < 0.0f || opacity > 1.0f) { + throw new IllegalArgumentException( + "The value of opacity should be in the range [0.0f .. 1.0f]."); + } + GraphicsConfiguration gc = getGraphicsConfiguration(); + GraphicsDevice gd = gc.getDevice(); + if (!gd.isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency.TRANSLUCENT)) { + throw new UnsupportedOperationException( + "TRANSLUCENT translucency is not supported."); + } + if ((gc.getDevice().getFullScreenWindow() == this) && (opacity < 1.0f)) { + throw new IllegalArgumentException( + "Setting opacity for full-screen window is not supported."); + } + this.opacity = opacity; + WindowPeer peer = (WindowPeer)getPeer(); + if (peer != null) { + peer.setOpacity(opacity); + } + } + } + + /** + * JavaDoc + */ + /*public */Shape getShape() { + synchronized (getTreeLock()) { + return shape; + } + } + + /** + * JavaDoc + * + * @param window the window to set the shape to + * @param shape the shape to set to the window + * @throws IllegalArgumentException if the window is in full screen mode, + * and the shape is not null + */ + /*public */void setShape(Shape shape) { + synchronized (getTreeLock()) { + GraphicsConfiguration gc = getGraphicsConfiguration(); + GraphicsDevice gd = gc.getDevice(); + if (!gd.isWindowTranslucencySupported( + GraphicsDevice.WindowTranslucency.PERPIXEL_TRANSPARENT)) + { + throw new UnsupportedOperationException( + "PERPIXEL_TRANSPARENT translucency is not supported."); + } + if ((gc.getDevice().getFullScreenWindow() == this) && (shape != null)) { + throw new IllegalArgumentException( + "Setting shape for full-screen window is not supported."); + } + this.shape = shape; + WindowPeer peer = (WindowPeer)getPeer(); + if (peer != null) { + peer.applyShape(shape == null ? null : Region.getInstance(shape, null)); + } + } + } + + /** + * JavaDoc + */ +/* + @Override + public void setBackground(Color bgColor) { + int alpha = bgColor.getAlpha(); + if (alpha < 255) { // non-opaque window + GraphicsConfiguration gc = getGraphicsConfiguration(); + GraphicsDevice gd = gc.getDevice(); + if (gc.getDevice().getFullScreenWindow() == this) { + throw new IllegalArgumentException( + "Making full-screen window non opaque is not supported."); + } + if (!gc.isTranslucencyCapable()) { + GraphicsConfiguration capableGC = gd.getTranslucencyCapableGC(); + if (capableGC == null) { + throw new IllegalArgumentException( + "PERPIXEL_TRANSLUCENT translucency is not supported"); + } + // TODO: change GC + } + setLayersOpaque(this, false); + } + + super.setBackground(bgColor); + + WindowPeer peer = (WindowPeer)getPeer(); + if (peer != null) { + peer.setOpaque(alpha == 255); + } + } +*/ + + private transient boolean opaque = true; + + void setOpaque(boolean opaque) { + synchronized (getTreeLock()) { + GraphicsConfiguration gc = getGraphicsConfiguration(); + if (!opaque && !com.sun.awt.AWTUtilities.isTranslucencyCapable(gc)) { + throw new IllegalArgumentException( + "The window must use a translucency-compatible graphics configuration"); + } + if (!com.sun.awt.AWTUtilities.isTranslucencySupported( + com.sun.awt.AWTUtilities.Translucency.PERPIXEL_TRANSLUCENT)) + { + throw new UnsupportedOperationException( + "PERPIXEL_TRANSLUCENT translucency is not supported."); + } + if ((gc.getDevice().getFullScreenWindow() == this) && !opaque) { + throw new IllegalArgumentException( + "Making full-screen window non opaque is not supported."); + } + setLayersOpaque(this, opaque); + this.opaque = opaque; + WindowPeer peer = (WindowPeer)getPeer(); + if (peer != null) { + peer.setOpaque(opaque); + } + } + } + + private void updateWindow(BufferedImage backBuffer) { + synchronized (getTreeLock()) { + WindowPeer peer = (WindowPeer)getPeer(); + if (peer != null) { + peer.updateWindow(backBuffer); + } + } + } + + private static final Color TRANSPARENT_BACKGROUND_COLOR = new Color(0, 0, 0, 0); + + private static void setLayersOpaque(Component component, boolean isOpaque) { + // Shouldn't use instanceof to avoid loading Swing classes + // if it's a pure AWT application. + if (Component.doesImplement(component, "javax.swing.RootPaneContainer")) { + javax.swing.RootPaneContainer rpc = (javax.swing.RootPaneContainer)component; + javax.swing.JRootPane root = rpc.getRootPane(); + javax.swing.JLayeredPane lp = root.getLayeredPane(); + Container c = root.getContentPane(); + javax.swing.JComponent content = + (c instanceof javax.swing.JComponent) ? (javax.swing.JComponent)c : null; + javax.swing.JComponent gp = + (rpc.getGlassPane() instanceof javax.swing.JComponent) ? + (javax.swing.JComponent)rpc.getGlassPane() : null; + if (gp != null) { + gp.setDoubleBuffered(isOpaque); + } + lp.setOpaque(isOpaque); + root.setOpaque(isOpaque); + root.setDoubleBuffered(isOpaque); //XXX: the "white rect" workaround + if (content != null) { + content.setOpaque(isOpaque); + content.setDoubleBuffered(isOpaque); //XXX: the "white rect" workaround + + // Iterate down one level to see whether we have a JApplet + // (which is also a RootPaneContainer) which requires processing + int numChildren = content.getComponentCount(); + if (numChildren > 0) { + Component child = content.getComponent(0); + // It's OK to use instanceof here because we've + // already loaded the RootPaneContainer class by now + if (child instanceof javax.swing.RootPaneContainer) { + setLayersOpaque(child, isOpaque); + } + } + } + } + + Color bg = component.getBackground(); + boolean hasTransparentBg = TRANSPARENT_BACKGROUND_COLOR.equals(bg); + + Container container = null; + if (component instanceof Container) { + container = (Container) component; + } + + if (isOpaque) { + if (hasTransparentBg) { + // Note: we use the SystemColor.window color as the default. + // This color is used in the WindowPeer implementations to + // initialize the background color of the window if it is null. + // (This might not be the right thing to do for other + // RootPaneContainers we might be invoked with) + Color newColor = null; + if (container != null && container.preserveBackgroundColor != null) { + newColor = container.preserveBackgroundColor; + } else { + newColor = SystemColor.window; + } + component.setBackground(newColor); + } + } else { + if (!hasTransparentBg && container != null) { + container.preserveBackgroundColor = bg; + } + component.setBackground(TRANSPARENT_BACKGROUND_COLOR); + } + } + + // ************************** MIXING CODE ******************************* // A window has a parent, but it does NOT have a container @@ -3341,6 +3593,87 @@ // ****************** END OF MIXING CODE ******************************** + // This method gets the window location/size as reported by the native + // system since the locally cached values may represent outdated data. + // NOTE: this method is invoked on the toolkit thread, and therefore + // is not supposed to become public/user-overridable. + private Point2D calculateSecurityWarningPosition(double x, double y, + double w, double h) + { + return new Point2D.Double( + x + w * securityWarningAlignmentX + securityWarningPointX, + y + h * securityWarningAlignmentY + securityWarningPointY); + } + + static { + AWTAccessor.setWindowAccessor(new AWTAccessor.WindowAccessor() { + public float getOpacity(Window window) { + return window.opacity; + } + public void setOpacity(Window window, float opacity) { + window.setOpacity(opacity); + } + public Shape getShape(Window window) { + return window.getShape(); + } + public void setShape(Window window, Shape shape) { + window.setShape(shape); + } + public boolean isOpaque(Window window) { + /* + return window.getBackground().getAlpha() < 255; + */ + synchronized (window.getTreeLock()) { + return window.opaque; + } + } + public void setOpaque(Window window, boolean opaque) { + /* + Color bg = window.getBackground(); + window.setBackground(new Color(bg.getRed(), bg.getGreen(), bg.getBlue(), + opaque ? 255 : 0)); + */ + window.setOpaque(opaque); + } + public void updateWindow(Window window, BufferedImage backBuffer) { + window.updateWindow(backBuffer); + } + + public Dimension getSecurityWarningSize(Window window) { + return new Dimension(window.securityWarningWidth, + window.securityWarningHeight); + } + + public void setSecurityWarningSize(Window window, int width, int height) + { + window.securityWarningWidth = width; + window.securityWarningHeight = height; + } + + public void setSecurityWarningPosition(Window window, + Point2D point, float alignmentX, float alignmentY) + { + window.securityWarningPointX = point.getX(); + window.securityWarningPointY = point.getY(); + window.securityWarningAlignmentX = alignmentX; + window.securityWarningAlignmentY = alignmentY; + + synchronized (window.getTreeLock()) { + WindowPeer peer = (WindowPeer)window.getPeer(); + if (peer != null) { + peer.repositionSecurityWarning(); + } + } + } + + public Point2D calculateSecurityWarningPosition(Window window, + double x, double y, double w, double h) + { + return window.calculateSecurityWarningPosition(x, y, w, h); + } + }); // WindowAccessor + } // static + } // class Window diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/event/KeyEvent.java --- a/jdk/src/share/classes/java/awt/event/KeyEvent.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/event/KeyEvent.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -65,15 +65,16 @@ * <p> * For key pressed and key released events, the getKeyCode method returns * the event's keyCode. For key typed events, the getKeyCode method - * always returns VK_UNDEFINED. + * always returns {@code VK_UNDEFINED}. The {@code getExtendedKeyCode} method + * may also be used with many international keyboard layouts. * * <p> * <em>"Key pressed" and "key released" events</em> are lower-level and depend * on the platform and keyboard layout. They are generated whenever a key is * pressed or released, and are the only way to find out about keys that don't * generate character input (e.g., action keys, modifier keys, etc.). The key - * being pressed or released is indicated by the getKeyCode method, which returns - * a virtual key code. + * being pressed or released is indicated by the {@code getKeyCode} and {@code getExtendedKeyCode} + * methods, which return a virtual key code. * * <p> * <em>Virtual key codes</em> are used to report which keyboard key has @@ -111,6 +112,11 @@ * platform and keyboard layout. For example, the key that generates VK_Q * when using a U.S. keyboard layout will generate VK_A when using a French * keyboard layout. + * <li>The key that generates {@code VK_Q} when using a U.S. keyboard layout also + * generates a unique code for Russian or Hebrew layout. There is no a + * {@code VK_} constant for these and many other codes in various layouts. These codes + * may be obtained by using {@code getExtendedKeyCode} and are used whenever + * a {@code VK_} constant is used. * <li>Not all characters have a keycode associated with them. For example, * there is no keycode for the question mark because there is no keyboard * for which it appears on the primary layer. @@ -891,6 +897,12 @@ */ int keyLocation; + //set from native code. + private transient long rawCode = 0; + private transient long primaryLevelUnicode = 0; + private transient long scancode = 0; // for MS Windows only + private transient long extendedKeyCode = 0; + /* * JDK 1.1 serialVersionUID */ @@ -1315,6 +1327,9 @@ return numpad + "-" + c; } + if ((keyCode & 0x01000000) != 0) { + return String.valueOf((char)(keyCode ^ 0x01000000 )); + } String unknown = Toolkit.getProperty("AWT.unknown", "Unknown"); return unknown + " keyCode: 0x" + Integer.toString(keyCode, 16); } @@ -1551,9 +1566,44 @@ str.append("KEY_LOCATION_UNKNOWN"); break; } + str.append(",rawCode=").append(rawCode); + str.append(",primaryLevelUnicode=").append(primaryLevelUnicode); + str.append(",scancode=").append(scancode); + str.append(",extendedKeyCode=0x").append(Long.toHexString(extendedKeyCode)); return str.toString(); } + /** + * Returns an extended key code for the event. + * The extended key code is a unique id assigned to a key on the keyboard + * just like {@code keyCode}. However, unlike {@code keyCode}, this value depends on the + * current keyboard layout. For instance, pressing the left topmost letter key + * in a common English layout produces the same value as {@code keyCode}, {@code VK_Q}. + * Pressing the same key in a regular Russian layout gives another code, unique for the + * letter "Cyrillic I short". + * + * @since 1.7 + * + */ + public int getExtendedKeyCode() { + return (int)extendedKeyCode; + } + /** + * Returns an extended key code for a unicode character. + * + * @return for a unicode character with a corresponding {@code VK_} constant -- this + * {@code VK_} constant; for a character appearing on the primary + * level of a known keyboard layout -- a unique integer. + * If a character does not appear on the primary level of a known keyboard, + * {@code VK_UNDEFINED} is returned. + * + * @since 1.7 + * + */ + public static int getExtendedKeyCodeForChar(int c) { + // Return a keycode (if any) associated with a character. + return sun.awt.ExtendedKeyCodes.getExtendedKeyCodeForChar(c); + } /** * Sets new modifiers by the old ones. The key modifiers diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/peer/CanvasPeer.java --- a/jdk/src/share/classes/java/awt/peer/CanvasPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/peer/CanvasPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -25,6 +25,7 @@ package java.awt.peer; import java.awt.Canvas; +import java.awt.GraphicsConfiguration; /** * The peer interface for {@link Canvas}. @@ -36,4 +37,13 @@ * instances. */ public interface CanvasPeer extends ComponentPeer { + /** + * Requests a GC that best suits this Canvas. The returned GC may differ + * from the requested GC passed as the argument to this method. This method + * must return a non-null value (given the argument is non-null as well). + * + * @since 1.7 + */ + GraphicsConfiguration getAppropriateGraphicsConfiguration( + GraphicsConfiguration gc); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/peer/ComponentPeer.java --- a/jdk/src/share/classes/java/awt/peer/ComponentPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/peer/ComponentPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -539,4 +539,16 @@ */ void applyShape(Region shape); + /** + * Lowers this component at the bottom of the above HW peer. If the above parameter + * is null then the method places this component at the top of the Z-order. + */ + void setZOrder(ComponentPeer above); + + /** + * Updates internal data structures related to the component's GC. + * + * @since 1.7 + */ + void updateGraphicsData(GraphicsConfiguration gc); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/peer/ContainerPeer.java --- a/jdk/src/share/classes/java/awt/peer/ContainerPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/peer/ContainerPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -76,21 +76,4 @@ * @see Container#validateTree() */ void endLayout(); - - /** - * Restacks native windows - children of this native window - according to - * Java container order. - * - * @since 1.5 - */ - void restack(); - - /** - * Indicates availability of restacking operation in this container. - * - * @return Returns true if restack is supported, false otherwise - * - * @since 1.5 - */ - boolean isRestackSupported(); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/awt/peer/WindowPeer.java --- a/jdk/src/share/classes/java/awt/peer/WindowPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/awt/peer/WindowPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,8 @@ import java.awt.*; +import java.awt.image.BufferedImage; + /** * The peer interface for {@link Window}. * @@ -92,4 +94,31 @@ * @see Window#setIconImages(java.util.List) */ void updateIconImages(); + + /** + * Sets the level of opacity for the window. + * + * @see Window#setOpacity(float) + */ + void setOpacity(float opacity); + + /** + * Enables the per-pixel alpha support for the window. + * + * @see Window#setBackground(Color) + */ + void setOpaque(boolean isOpaque); + + /** + * Updates the native part of non-opaque window using + * the given image with color+alpha values for each pixel. + * + * @see Window#setBackground(Color) + */ + void updateWindow(BufferedImage backBuffer); + + /** + * Instructs the peer to update the position of the security warning. + */ + void repositionSecurityWarning(); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/beans/Beans.java --- a/jdk/src/share/classes/java/beans/Beans.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/beans/Beans.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,26 +27,41 @@ import com.sun.beans.finder.ClassFinder; -import java.applet.*; +import java.applet.Applet; +import java.applet.AppletContext; +import java.applet.AppletStub; +import java.applet.AudioClip; -import java.awt.*; - -import java.beans.AppletInitializer; +import java.awt.GraphicsEnvironment; +import java.awt.Image; import java.beans.beancontext.BeanContext; -import java.io.*; - -import java.lang.reflect.Constructor; +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.io.ObjectStreamClass; +import java.io.StreamCorruptedException; import java.net.URL; -import java.lang.reflect.Array; + +import java.security.AccessController; +import java.security.PrivilegedAction; + +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.Vector; + +import sun.awt.AppContext; /** * This class provides some general purpose beans control methods. */ public class Beans { + private static final Object DESIGN_TIME = new Object(); + private static final Object GUI_AVAILABLE = new Object(); /** * <p> @@ -59,12 +74,12 @@ * @param beanName the name of the bean within the class-loader. * For example "sun.beanbox.foobah" * - * @exception java.lang.ClassNotFoundException if the class of a serialized + * @exception ClassNotFoundException if the class of a serialized * object could not be found. - * @exception java.io.IOException if an I/O error occurs. + * @exception IOException if an I/O error occurs. */ - public static Object instantiate(ClassLoader cls, String beanName) throws java.io.IOException, ClassNotFoundException { + public static Object instantiate(ClassLoader cls, String beanName) throws IOException, ClassNotFoundException { return Beans.instantiate(cls, beanName, null, null); } @@ -80,12 +95,12 @@ * For example "sun.beanbox.foobah" * @param beanContext The BeanContext in which to nest the new bean * - * @exception java.lang.ClassNotFoundException if the class of a serialized + * @exception ClassNotFoundException if the class of a serialized * object could not be found. - * @exception java.io.IOException if an I/O error occurs. + * @exception IOException if an I/O error occurs. */ - public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext) throws java.io.IOException, ClassNotFoundException { + public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext) throws IOException, ClassNotFoundException { return Beans.instantiate(cls, beanName, beanContext, null); } @@ -135,19 +150,19 @@ * @param beanContext The BeanContext in which to nest the new bean * @param initializer The AppletInitializer for the new bean * - * @exception java.lang.ClassNotFoundException if the class of a serialized + * @exception ClassNotFoundException if the class of a serialized * object could not be found. - * @exception java.io.IOException if an I/O error occurs. + * @exception IOException if an I/O error occurs. */ public static Object instantiate(ClassLoader cls, String beanName, BeanContext beanContext, AppletInitializer initializer) - throws java.io.IOException, ClassNotFoundException { + throws IOException, ClassNotFoundException { - java.io.InputStream ins; - java.io.ObjectInputStream oins = null; + InputStream ins; + ObjectInputStream oins = null; Object result = null; boolean serialized = false; - java.io.IOException serex = null; + IOException serex = null; // If the given classloader is null, we check if an // system classloader is available and (if so) @@ -166,8 +181,8 @@ // Try to find a serialized object with this name final String serName = beanName.replace('.','/').concat(".ser"); final ClassLoader loader = cls; - ins = (InputStream)java.security.AccessController.doPrivileged - (new java.security.PrivilegedAction() { + ins = (InputStream)AccessController.doPrivileged + (new PrivilegedAction() { public Object run() { if (loader == null) return ClassLoader.getSystemResourceAsStream(serName); @@ -185,7 +200,7 @@ result = oins.readObject(); serialized = true; oins.close(); - } catch (java.io.IOException ex) { + } catch (IOException ex) { ins.close(); // Drop through and try opening the class. But remember // the exception in case we can't find the class either. @@ -264,8 +279,8 @@ final ClassLoader cloader = cls; objectUrl = (URL) - java.security.AccessController.doPrivileged - (new java.security.PrivilegedAction() { + AccessController.doPrivileged + (new PrivilegedAction() { public Object run() { if (cloader == null) return ClassLoader.getSystemResource @@ -377,10 +392,11 @@ * @return True if we are running in an application construction * environment. * - * @see java.beans.DesignMode + * @see DesignMode */ public static boolean isDesignTime() { - return designTime; + Object value = AppContext.getAppContext().get(DESIGN_TIME); + return (value instanceof Boolean) && (Boolean) value; } /** @@ -393,11 +409,12 @@ * false in a server environment or if an application is * running as part of a batch job. * - * @see java.beans.Visibility + * @see Visibility * */ public static boolean isGuiAvailable() { - return guiAvailable; + Object value = AppContext.getAppContext().get(GUI_AVAILABLE); + return (value instanceof Boolean) ? (Boolean) value : !GraphicsEnvironment.isHeadless(); } /** @@ -423,7 +440,7 @@ if (sm != null) { sm.checkPropertiesAccess(); } - designTime = isDesignTime; + AppContext.getAppContext().put(DESIGN_TIME, Boolean.valueOf(isDesignTime)); } /** @@ -449,14 +466,7 @@ if (sm != null) { sm.checkPropertiesAccess(); } - guiAvailable = isGuiAvailable; - } - - - private static boolean designTime; - private static boolean guiAvailable; - static { - guiAvailable = !GraphicsEnvironment.isHeadless(); + AppContext.getAppContext().put(GUI_AVAILABLE, Boolean.valueOf(isGuiAvailable)); } } @@ -501,7 +511,7 @@ class BeansAppletContext implements AppletContext { Applet target; - java.util.Hashtable imageCache = new java.util.Hashtable(); + Hashtable imageCache = new Hashtable(); BeansAppletContext(Applet target) { this.target = target; @@ -546,8 +556,8 @@ return null; } - public java.util.Enumeration getApplets() { - java.util.Vector applets = new java.util.Vector(); + public Enumeration getApplets() { + Vector applets = new Vector(); applets.addElement(target); return applets.elements(); } @@ -573,7 +583,7 @@ return null; } - public java.util.Iterator getStreamKeys(){ + public Iterator getStreamKeys(){ // We do nothing. return null; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/beans/IndexedPropertyChangeEvent.java --- a/jdk/src/share/classes/java/beans/IndexedPropertyChangeEvent.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/beans/IndexedPropertyChangeEvent.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,6 +41,7 @@ * @author Mark Davidson */ public class IndexedPropertyChangeEvent extends PropertyChangeEvent { + private static final long serialVersionUID = -320227448495806870L; private int index; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/beans/IntrospectionException.java --- a/jdk/src/share/classes/java/beans/IntrospectionException.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/beans/IntrospectionException.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-1998 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,6 +36,7 @@ public class IntrospectionException extends Exception { + private static final long serialVersionUID = -3728150539969542619L; /** * Constructs an <code>IntrospectionException</code> with a diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/beans/PropertyChangeEvent.java --- a/jdk/src/share/classes/java/beans/PropertyChangeEvent.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/beans/PropertyChangeEvent.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,6 +44,7 @@ */ public class PropertyChangeEvent extends java.util.EventObject { + private static final long serialVersionUID = 7042693688939648123L; /** * Constructs a new <code>PropertyChangeEvent</code>. diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/beans/PropertyVetoException.java --- a/jdk/src/share/classes/java/beans/PropertyVetoException.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/beans/PropertyVetoException.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-1998 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,7 +33,7 @@ public class PropertyVetoException extends Exception { - + private static final long serialVersionUID = 129596057694162164L; /** * Constructs a <code>PropertyVetoException</code> with a diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/beans/beancontext/BeanContextEvent.java --- a/jdk/src/share/classes/java/beans/beancontext/BeanContextEvent.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/beans/beancontext/BeanContextEvent.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2003 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,6 +48,7 @@ */ public abstract class BeanContextEvent extends EventObject { + private static final long serialVersionUID = 7267998073569045052L; /** * Contruct a BeanContextEvent diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/beans/beancontext/BeanContextMembershipEvent.java --- a/jdk/src/share/classes/java/beans/beancontext/BeanContextMembershipEvent.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/beans/beancontext/BeanContextMembershipEvent.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2004 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -55,6 +55,7 @@ * @see java.beans.beancontext.BeanContextMembershipListener */ public class BeanContextMembershipEvent extends BeanContextEvent { + private static final long serialVersionUID = 3499346510334590959L; /** * Contruct a BeanContextMembershipEvent diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/beans/beancontext/BeanContextServiceAvailableEvent.java --- a/jdk/src/share/classes/java/beans/beancontext/BeanContextServiceAvailableEvent.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/beans/beancontext/BeanContextServiceAvailableEvent.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1998-2004 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,6 +40,7 @@ */ public class BeanContextServiceAvailableEvent extends BeanContextEvent { + private static final long serialVersionUID = -5333985775656400778L; /** * Construct a <code>BeanContextAvailableServiceEvent</code>. diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/beans/beancontext/BeanContextServiceRevokedEvent.java --- a/jdk/src/share/classes/java/beans/beancontext/BeanContextServiceRevokedEvent.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/beans/beancontext/BeanContextServiceRevokedEvent.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1998-2004 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,6 +37,7 @@ * </p> */ public class BeanContextServiceRevokedEvent extends BeanContextEvent { + private static final long serialVersionUID = -1295543154724961754L; /** * Construct a <code>BeanContextServiceEvent</code>. diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/beans/beancontext/BeanContextServicesSupport.java --- a/jdk/src/share/classes/java/beans/beancontext/BeanContextServicesSupport.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/beans/beancontext/BeanContextServicesSupport.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1998-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -60,6 +60,7 @@ public class BeanContextServicesSupport extends BeanContextSupport implements BeanContextServices { + private static final long serialVersionUID = -8494482757288719206L; /** * <p> @@ -594,6 +595,7 @@ */ protected static class BCSSServiceProvider implements Serializable { + private static final long serialVersionUID = 861278251667444782L; BCSSServiceProvider(Class sc, BeanContextServiceProvider bcsp) { super(); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/lang/Character.java --- a/jdk/src/share/classes/java/lang/Character.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/lang/Character.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -920,9 +920,9 @@ */ public static final UnicodeBlock COMBINING_MARKS_FOR_SYMBOLS = new UnicodeBlock("COMBINING_MARKS_FOR_SYMBOLS", new String[] {"Combining Diacritical Marks for Symbols", - "CombiningDiacriticalMarksforSymbols", - "Combining Marks for Symbols", - "CombiningMarksforSymbols" }); + "CombiningDiacriticalMarksforSymbols", + "Combining Marks for Symbols", + "CombiningMarksforSymbols" }); /** * Constant for the "Letterlike Symbols" Unicode character block. @@ -1332,8 +1332,11 @@ * @since 1.5 */ public static final UnicodeBlock CYRILLIC_SUPPLEMENTARY = - new UnicodeBlock("CYRILLIC_SUPPLEMENTARY", new String[] {"Cyrillic Supplementary", - "CyrillicSupplementary"}); + new UnicodeBlock("CYRILLIC_SUPPLEMENTARY", + new String[] {"Cyrillic Supplementary", + "CyrillicSupplementary", + "Cyrillic Supplement", + "CyrillicSupplement"}); /** * Constant for the "Tagalog" Unicode character block. @@ -1641,157 +1644,579 @@ public static final UnicodeBlock LOW_SURROGATES = new UnicodeBlock("LOW_SURROGATES", new String[] {"Low Surrogates", "LowSurrogates"}); + /** + * Constant for the "Arabic Supplement" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock ARABIC_SUPPLEMENT = + new UnicodeBlock("ARABIC_SUPPLEMENT", + new String[] { "Arabic Supplement", + "ArabicSupplement"}); + + /** + * Constant for the "NKo" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock NKO = new UnicodeBlock("NKO"); + + /** + * Constant for the "Ethiopic Supplement" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock ETHIOPIC_SUPPLEMENT = + new UnicodeBlock("ETHIOPIC_SUPPLEMENT", + new String[] { "Ethiopic Supplement", + "EthiopicSupplement"}); + + /** + * Constant for the "New Tai Lue" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock NEW_TAI_LUE = + new UnicodeBlock("NEW_TAI_LUE", + new String[] { "New Tai Lue", + "NewTaiLue"}); + + /** + * Constant for the "Buginese" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock BUGINESE = + new UnicodeBlock("BUGINESE"); + + /** + * Constant for the "Balinese" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock BALINESE = + new UnicodeBlock("BALINESE"); + + /** + * Constant for the "Sundanese" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock SUNDANESE = + new UnicodeBlock("SUNDANESE"); + + /** + * Constant for the "Lepcha" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock LEPCHA = new UnicodeBlock("LEPCHA"); + + /** + * Constant for the "Ol Chiki" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock OL_CHIKI = + new UnicodeBlock("OL_CHIKI", + new String[] { "Ol Chiki", + "OlChiki"}); + + /** + * Constant for the "Phonetic Extensions Supplement" Unicode character + * block. + * @since 1.7 + */ + public static final UnicodeBlock PHONETIC_EXTENSIONS_SUPPLEMENT = + new UnicodeBlock("PHONETIC_EXTENSIONS_SUPPLEMENT", + new String[] { "Phonetic Extensions Supplement", + "PhoneticExtensionsSupplement"}); + + /** + * Constant for the "Combining Diacritical Marks Supplement" Unicode + * character block. + * @since 1.7 + */ + public static final UnicodeBlock COMBINING_DIACRITICAL_MARKS_SUPPLEMENT = + new UnicodeBlock("COMBINING_DIACRITICAL_MARKS_SUPPLEMENT", + new String[] { "Combining Diacritical Marks Supplement", + "CombiningDiacriticalMarksSupplement"}); + + /** + * Constant for the "Glagolitic" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock GLAGOLITIC = + new UnicodeBlock("GLAGOLITIC"); + + /** + * Constant for the "Latin Extended-C" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock LATIN_EXTENDED_C = + new UnicodeBlock("LATIN_EXTENDED_C", + new String[] { "Latin Extended-C", + "LatinExtended-C"}); + + /** + * Constant for the "Coptic" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock COPTIC = new UnicodeBlock("COPTIC"); + + /** + * Constant for the "Georgian Supplement" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock GEORGIAN_SUPPLEMENT = + new UnicodeBlock("GEORGIAN_SUPPLEMENT", + new String[] { "Georgian Supplement", + "GeorgianSupplement"}); + + /** + * Constant for the "Tifinagh" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock TIFINAGH = + new UnicodeBlock("TIFINAGH"); + + /** + * Constant for the "Ethiopic Extended" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock ETHIOPIC_EXTENDED = + new UnicodeBlock("ETHIOPIC_EXTENDED", + new String[] { "Ethiopic Extended", + "EthiopicExtended"}); + + /** + * Constant for the "Cyrillic Extended-A" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock CYRILLIC_EXTENDED_A = + new UnicodeBlock("CYRILLIC_EXTENDED_A", + new String[] { "Cyrillic Extended-A", + "CyrillicExtended-A"}); + + /** + * Constant for the "Supplemental Punctuation" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock SUPPLEMENTAL_PUNCTUATION = + new UnicodeBlock("SUPPLEMENTAL_PUNCTUATION", + new String[] { "Supplemental Punctuation", + "SupplementalPunctuation"}); + + /** + * Constant for the "CJK Strokes" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock CJK_STROKES = + new UnicodeBlock("CJK_STROKES", + new String[] { "CJK Strokes", + "CJKStrokes"}); + + /** + * Constant for the "Vai" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock VAI = new UnicodeBlock("VAI"); + + /** + * Constant for the "Cyrillic Extended-B" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock CYRILLIC_EXTENDED_B = + new UnicodeBlock("CYRILLIC_EXTENDED_B", + new String[] { "Cyrillic Extended-B", + "CyrillicExtended-B"}); + + /** + * Constant for the "Modifier Tone Letters" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock MODIFIER_TONE_LETTERS = + new UnicodeBlock("MODIFIER_TONE_LETTERS", + new String[] { "Modifier Tone Letters", + "ModifierToneLetters"}); + + /** + * Constant for the "Latin Extended-D" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock LATIN_EXTENDED_D = + new UnicodeBlock("LATIN_EXTENDED_D", + new String[] { "Latin Extended-D", + "LatinExtended-D"}); + + /** + * Constant for the "Syloti Nagri" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock SYLOTI_NAGRI = + new UnicodeBlock("SYLOTI_NAGRI", + new String[] { "Syloti Nagri", + "SylotiNagri"}); + + /** + * Constant for the "Phags-pa" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock PHAGS_PA = + new UnicodeBlock("PHAGS_PA", new String[] { "Phags-pa"}); + + /** + * Constant for the "Saurashtra" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock SAURASHTRA = + new UnicodeBlock("SAURASHTRA"); + + /** + * Constant for the "Kayah Li" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock KAYAH_LI = + new UnicodeBlock("KAYAH_LI", + new String[] { "Kayah Li", + "KayahLi"}); + + /** + * Constant for the "Rejang" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock REJANG = new UnicodeBlock("REJANG"); + + /** + * Constant for the "Cham" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock CHAM = new UnicodeBlock("CHAM"); + + /** + * Constant for the "Vertical Forms" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock VERTICAL_FORMS = + new UnicodeBlock("VERTICAL_FORMS", + new String[] { "Vertical Forms", + "VerticalForms"}); + + /** + * Constant for the "Ancient Greek Numbers" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock ANCIENT_GREEK_NUMBERS = + new UnicodeBlock("ANCIENT_GREEK_NUMBERS", + new String[] { "Ancient Greek Numbers", + "AncientGreekNumbers"}); + + /** + * Constant for the "Ancient Symbols" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock ANCIENT_SYMBOLS = + new UnicodeBlock("ANCIENT_SYMBOLS", + new String[] { "Ancient Symbols", + "AncientSymbols"}); + + /** + * Constant for the "Phaistos Disc" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock PHAISTOS_DISC = + new UnicodeBlock("PHAISTOS_DISC", + new String[] { "Phaistos Disc", + "PhaistosDisc"}); + + /** + * Constant for the "Lycian" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock LYCIAN = new UnicodeBlock("LYCIAN"); + + /** + * Constant for the "Carian" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock CARIAN = new UnicodeBlock("CARIAN"); + + /** + * Constant for the "Old Persian" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock OLD_PERSIAN = + new UnicodeBlock("OLD_PERSIAN", + new String[] { "Old Persian", + "OldPersian"}); + + /** + * Constant for the "Phoenician" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock PHOENICIAN = + new UnicodeBlock("PHOENICIAN"); + + /** + * Constant for the "Lydian" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock LYDIAN = new UnicodeBlock("LYDIAN"); + + /** + * Constant for the "Kharoshthi" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock KHAROSHTHI = + new UnicodeBlock("KHAROSHTHI"); + + /** + * Constant for the "Cuneiform" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock CUNEIFORM = + new UnicodeBlock("CUNEIFORM"); + + /** + * Constant for the "Cuneiform Numbers and Punctuation" Unicode + * character block. + * @since 1.7 + */ + public static final UnicodeBlock CUNEIFORM_NUMBERS_AND_PUNCTUATION = + new UnicodeBlock("CUNEIFORM_NUMBERS_AND_PUNCTUATION", + new String[] { "Cuneiform Numbers and Punctuation", + "CuneiformNumbersandPunctuation"}); + + /** + * Constant for the "Ancient Greek Musical Notation" Unicode character + * block. + * @since 1.7 + */ + public static final UnicodeBlock ANCIENT_GREEK_MUSICAL_NOTATION = + new UnicodeBlock("ANCIENT_GREEK_MUSICAL_NOTATION", + new String[] { "Ancient Greek Musical Notation", + "AncientGreekMusicalNotation"}); + + /** + * Constant for the "Counting Rod Numerals" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock COUNTING_ROD_NUMERALS = + new UnicodeBlock("COUNTING_ROD_NUMERALS", + new String[] { "Counting Rod Numerals", + "CountingRodNumerals"}); + + /** + * Constant for the "Mahjong Tiles" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock MAHJONG_TILES = + new UnicodeBlock("MAHJONG_TILES", + new String[] { "Mahjong Tiles", + "MahjongTiles"}); + + /** + * Constant for the "Domino Tiles" Unicode character block. + * @since 1.7 + */ + public static final UnicodeBlock DOMINO_TILES = + new UnicodeBlock("DOMINO_TILES", + new String[] { "Domino Tiles", + "DominoTiles"}); + private static final int blockStarts[] = { - 0x0000, // Basic Latin - 0x0080, // Latin-1 Supplement - 0x0100, // Latin Extended-A - 0x0180, // Latin Extended-B - 0x0250, // IPA Extensions - 0x02B0, // Spacing Modifier Letters - 0x0300, // Combining Diacritical Marks - 0x0370, // Greek and Coptic - 0x0400, // Cyrillic - 0x0500, // Cyrillic Supplementary - 0x0530, // Armenian - 0x0590, // Hebrew - 0x0600, // Arabic - 0x0700, // Syriac - 0x0750, // unassigned - 0x0780, // Thaana - 0x07C0, // unassigned - 0x0900, // Devanagari - 0x0980, // Bengali - 0x0A00, // Gurmukhi - 0x0A80, // Gujarati - 0x0B00, // Oriya - 0x0B80, // Tamil - 0x0C00, // Telugu - 0x0C80, // Kannada - 0x0D00, // Malayalam - 0x0D80, // Sinhala - 0x0E00, // Thai - 0x0E80, // Lao - 0x0F00, // Tibetan - 0x1000, // Myanmar - 0x10A0, // Georgian - 0x1100, // Hangul Jamo - 0x1200, // Ethiopic - 0x1380, // unassigned - 0x13A0, // Cherokee - 0x1400, // Unified Canadian Aboriginal Syllabics - 0x1680, // Ogham - 0x16A0, // Runic - 0x1700, // Tagalog - 0x1720, // Hanunoo - 0x1740, // Buhid - 0x1760, // Tagbanwa - 0x1780, // Khmer - 0x1800, // Mongolian - 0x18B0, // unassigned - 0x1900, // Limbu - 0x1950, // Tai Le - 0x1980, // unassigned - 0x19E0, // Khmer Symbols - 0x1A00, // unassigned - 0x1D00, // Phonetic Extensions - 0x1D80, // unassigned - 0x1E00, // Latin Extended Additional - 0x1F00, // Greek Extended - 0x2000, // General Punctuation - 0x2070, // Superscripts and Subscripts - 0x20A0, // Currency Symbols - 0x20D0, // Combining Diacritical Marks for Symbols - 0x2100, // Letterlike Symbols - 0x2150, // Number Forms - 0x2190, // Arrows - 0x2200, // Mathematical Operators - 0x2300, // Miscellaneous Technical - 0x2400, // Control Pictures - 0x2440, // Optical Character Recognition - 0x2460, // Enclosed Alphanumerics - 0x2500, // Box Drawing - 0x2580, // Block Elements - 0x25A0, // Geometric Shapes - 0x2600, // Miscellaneous Symbols - 0x2700, // Dingbats - 0x27C0, // Miscellaneous Mathematical Symbols-A - 0x27F0, // Supplemental Arrows-A - 0x2800, // Braille Patterns - 0x2900, // Supplemental Arrows-B - 0x2980, // Miscellaneous Mathematical Symbols-B - 0x2A00, // Supplemental Mathematical Operators - 0x2B00, // Miscellaneous Symbols and Arrows - 0x2C00, // unassigned - 0x2E80, // CJK Radicals Supplement - 0x2F00, // Kangxi Radicals - 0x2FE0, // unassigned - 0x2FF0, // Ideographic Description Characters - 0x3000, // CJK Symbols and Punctuation - 0x3040, // Hiragana - 0x30A0, // Katakana - 0x3100, // Bopomofo - 0x3130, // Hangul Compatibility Jamo - 0x3190, // Kanbun - 0x31A0, // Bopomofo Extended - 0x31C0, // unassigned - 0x31F0, // Katakana Phonetic Extensions - 0x3200, // Enclosed CJK Letters and Months - 0x3300, // CJK Compatibility - 0x3400, // CJK Unified Ideographs Extension A - 0x4DC0, // Yijing Hexagram Symbols - 0x4E00, // CJK Unified Ideographs - 0xA000, // Yi Syllables - 0xA490, // Yi Radicals - 0xA4D0, // unassigned - 0xAC00, // Hangul Syllables - 0xD7B0, // unassigned - 0xD800, // High Surrogates - 0xDB80, // High Private Use Surrogates - 0xDC00, // Low Surrogates - 0xE000, // Private Use - 0xF900, // CJK Compatibility Ideographs - 0xFB00, // Alphabetic Presentation Forms - 0xFB50, // Arabic Presentation Forms-A - 0xFE00, // Variation Selectors - 0xFE10, // unassigned - 0xFE20, // Combining Half Marks - 0xFE30, // CJK Compatibility Forms - 0xFE50, // Small Form Variants - 0xFE70, // Arabic Presentation Forms-B - 0xFF00, // Halfwidth and Fullwidth Forms - 0xFFF0, // Specials - 0x10000, // Linear B Syllabary - 0x10080, // Linear B Ideograms - 0x10100, // Aegean Numbers - 0x10140, // unassigned - 0x10300, // Old Italic - 0x10330, // Gothic - 0x10350, // unassigned - 0x10380, // Ugaritic - 0x103A0, // unassigned - 0x10400, // Deseret - 0x10450, // Shavian - 0x10480, // Osmanya - 0x104B0, // unassigned - 0x10800, // Cypriot Syllabary - 0x10840, // unassigned - 0x1D000, // Byzantine Musical Symbols - 0x1D100, // Musical Symbols - 0x1D200, // unassigned - 0x1D300, // Tai Xuan Jing Symbols - 0x1D360, // unassigned - 0x1D400, // Mathematical Alphanumeric Symbols - 0x1D800, // unassigned - 0x20000, // CJK Unified Ideographs Extension B - 0x2A6E0, // unassigned - 0x2F800, // CJK Compatibility Ideographs Supplement - 0x2FA20, // unassigned - 0xE0000, // Tags - 0xE0080, // unassigned - 0xE0100, // Variation Selectors Supplement - 0xE01F0, // unassigned - 0xF0000, // Supplementary Private Use Area-A - 0x100000, // Supplementary Private Use Area-B + 0x0000, // 0000..007F; Basic Latin + 0x0080, // 0080..00FF; Latin-1 Supplement + 0x0100, // 0100..017F; Latin Extended-A + 0x0180, // 0180..024F; Latin Extended-B + 0x0250, // 0250..02AF; IPA Extensions + 0x02B0, // 02B0..02FF; Spacing Modifier Letters + 0x0300, // 0300..036F; Combining Diacritical Marks + 0x0370, // 0370..03FF; Greek and Coptic + 0x0400, // 0400..04FF; Cyrillic + 0x0500, // 0500..052F; Cyrillic Supplement + 0x0530, // 0530..058F; Armenian + 0x0590, // 0590..05FF; Hebrew + 0x0600, // 0600..06FF; Arabic + 0x0700, // 0700..074F; Syria + 0x0750, // 0750..077F; Arabic Supplement + 0x0780, // 0780..07BF; Thaana + 0x07C0, // 07C0..07FF; NKo + 0x0800, // unassigned + 0x0900, // 0900..097F; Devanagari + 0x0980, // 0980..09FF; Bengali + 0x0A00, // 0A00..0A7F; Gurmukhi + 0x0A80, // 0A80..0AFF; Gujarati + 0x0B00, // 0B00..0B7F; Oriya + 0x0B80, // 0B80..0BFF; Tamil + 0x0C00, // 0C00..0C7F; Telugu + 0x0C80, // 0C80..0CFF; Kannada + 0x0D00, // 0D00..0D7F; Malayalam + 0x0D80, // 0D80..0DFF; Sinhala + 0x0E00, // 0E00..0E7F; Thai + 0x0E80, // 0E80..0EFF; Lao + 0x0F00, // 0F00..0FFF; Tibetan + 0x1000, // 1000..109F; Myanmar + 0x10A0, // 10A0..10FF; Georgian + 0x1100, // 1100..11FF; Hangul Jamo + 0x1200, // 1200..137F; Ethiopic + 0x1380, // 1380..139F; Ethiopic Supplement + 0x13A0, // 13A0..13FF; Cherokee + 0x1400, // 1400..167F; Unified Canadian Aboriginal Syllabics + 0x1680, // 1680..169F; Ogham + 0x16A0, // 16A0..16FF; Runic + 0x1700, // 1700..171F; Tagalog + 0x1720, // 1720..173F; Hanunoo + 0x1740, // 1740..175F; Buhid + 0x1760, // 1760..177F; Tagbanwa + 0x1780, // 1780..17FF; Khmer + 0x1800, // 1800..18AF; Mongolian + 0x18B0, // unassigned + 0x1900, // 1900..194F; Limbu + 0x1950, // 1950..197F; Tai Le + 0x1980, // 1980..19DF; New Tai Lue + 0x19E0, // 19E0..19FF; Khmer Symbols + 0x1A00, // 1A00..1A1F; Buginese + 0x1A20, // unassigned + 0x1B00, // 1B00..1B7F; Balinese + 0x1B80, // 1B80..1BBF; Sundanese + 0x1BC0, // unassigned + 0x1C00, // 1C00..1C4F; Lepcha + 0x1C50, // 1C50..1C7F; Ol Chiki + 0x1C80, // unassigned + 0x1D00, // 1D00..1D7F; Phonetic Extensions + 0x1D80, // 1D80..1DBF; Phonetic Extensions Supplement + 0x1DC0, // 1DC0..1DFF; Combining Diacritical Marks Supplement + 0x1E00, // 1E00..1EFF; Latin Extended Additional + 0x1F00, // 1F00..1FFF; Greek Extended + 0x2000, // 2000..206F; General Punctuation + 0x2070, // 2070..209F; Superscripts and Subscripts + 0x20A0, // 20A0..20CF; Currency Symbols + 0x20D0, // 20D0..20FF; Combining Diacritical Marks for Symbols + 0x2100, // 2100..214F; Letterlike Symbols + 0x2150, // 2150..218F; Number Forms + 0x2190, // 2190..21FF; Arrows + 0x2200, // 2200..22FF; Mathematical Operators + 0x2300, // 2300..23FF; Miscellaneous Technical + 0x2400, // 2400..243F; Control Pictures + 0x2440, // 2440..245F; Optical Character Recognition + 0x2460, // 2460..24FF; Enclosed Alphanumerics + 0x2500, // 2500..257F; Box Drawing + 0x2580, // 2580..259F; Block Elements + 0x25A0, // 25A0..25FF; Geometric Shapes + 0x2600, // 2600..26FF; Miscellaneous Symbols + 0x2700, // 2700..27BF; Dingbats + 0x27C0, // 27C0..27EF; Miscellaneous Mathematical Symbols-A + 0x27F0, // 27F0..27FF; Supplemental Arrows-A + 0x2800, // 2800..28FF; Braille Patterns + 0x2900, // 2900..297F; Supplemental Arrows-B + 0x2980, // 2980..29FF; Miscellaneous Mathematical Symbols-B + 0x2A00, // 2A00..2AFF; Supplemental Mathematical Operators + 0x2B00, // 2B00..2BFF; Miscellaneous Symbols and Arrows + 0x2C00, // 2C00..2C5F; Glagolitic + 0x2C60, // 2C60..2C7F; Latin Extended-C + 0x2C80, // 2C80..2CFF; Coptic + 0x2D00, // 2D00..2D2F; Georgian Supplement + 0x2D30, // 2D30..2D7F; Tifinagh + 0x2D80, // 2D80..2DDF; Ethiopic Extended + 0x2DE0, // 2DE0..2DFF; Cyrillic Extended-A + 0x2E00, // 2E00..2E7F; Supplemental Punctuation + 0x2E80, // 2E80..2EFF; CJK Radicals Supplement + 0x2F00, // 2F00..2FDF; Kangxi Radicals + 0x2FE0, // unassigned + 0x2FF0, // 2FF0..2FFF; Ideographic Description Characters + 0x3000, // 3000..303F; CJK Symbols and Punctuation + 0x3040, // 3040..309F; Hiragana + 0x30A0, // 30A0..30FF; Katakana + 0x3100, // 3100..312F; Bopomofo + 0x3130, // 3130..318F; Hangul Compatibility Jamo + 0x3190, // 3190..319F; Kanbun + 0x31A0, // 31A0..31BF; Bopomofo Extended + 0x31C0, // 31C0..31EF; CJK Strokes + 0x31F0, // 31F0..31FF; Katakana Phonetic Extensions + 0x3200, // 3200..32FF; Enclosed CJK Letters and Months + 0x3300, // 3300..33FF; CJK Compatibility + 0x3400, // 3400..4DBF; CJK Unified Ideographs Extension A + 0x4DC0, // 4DC0..4DFF; Yijing Hexagram Symbols + 0x4E00, // 4E00..9FFF; CJK Unified Ideograph + 0xA000, // A000..A48F; Yi Syllables + 0xA490, // A490..A4CF; Yi Radicals + 0xA4D0, // unassigned + 0xA500, // A500..A63F; Vai + 0xA640, // A640..A69F; Cyrillic Extended-B + 0xA6A0, // unassigned + 0xA700, // A700..A71F; Modifier Tone Letters + 0xA720, // A720..A7FF; Latin Extended-D + 0xA800, // A800..A82F; Syloti Nagri + 0xA830, // unassigned + 0xA840, // A840..A87F; Phags-pa + 0xA880, // A880..A8DF; Saurashtra + 0xA8E0, // unassigned + 0xA900, // A900..A92F; Kayah Li + 0xA930, // A930..A95F; Rejang + 0xA960, // unassigned + 0xAA00, // AA00..AA5F; Cham + 0xAA60, // unassigned + 0xAC00, // AC00..D7AF; Hangul Syllables + 0xD7B0, // unassigned + 0xD800, // D800..DB7F; High Surrogates + 0xDB80, // DB80..DBFF; High Private Use Surrogates + 0xDC00, // DC00..DFFF; Low Surrogates + 0xE000, // E000..F8FF; Private Use Area + 0xF900, // F900..FAFF; CJK Compatibility Ideographs + 0xFB00, // FB00..FB4F; Alphabetic Presentation Forms + 0xFB50, // FB50..FDFF; Arabic Presentation Forms-A + 0xFE00, // FE00..FE0F; Variation Selectors + 0xFE10, // FE10..FE1F; Vertical Forms + 0xFE20, // FE20..FE2F; Combining Half Marks + 0xFE30, // FE30..FE4F; CJK Compatibility Forms + 0xFE50, // FE50..FE6F; Small Form Variants + 0xFE70, // FE70..FEFF; Arabic Presentation Forms-B + 0xFF00, // FF00..FFEF; Halfwidth and Fullwidth Forms + 0xFFF0, // FFF0..FFFF; Specials + 0x10000, // 10000..1007F; Linear B Syllabary + 0x10080, // 10080..100FF; Linear B Ideograms + 0x10100, // 10100..1013F; Aegean Numbers + 0x10140, // 10140..1018F; Ancient Greek Numbers + 0x10190, // 10190..101CF; Ancient Symbols + 0x101D0, // 101D0..101FF; Phaistos Disc + 0x10200, // unassigned + 0x10280, // 10280..1029F; Lycian + 0x102A0, // 102A0..102DF; Carian + 0x102E0, // unassigned + 0x10300, // 10300..1032F; Old Italic + 0x10330, // 10330..1034F; Gothic + 0x10350, // unassigned + 0x10380, // 10380..1039F; Ugaritic + 0x103A0, // 103A0..103DF; Old Persian + 0x103E0, // unassigned + 0x10400, // 10400..1044F; Desere + 0x10450, // 10450..1047F; Shavian + 0x10480, // 10480..104AF; Osmanya + 0x104B0, // unassigned + 0x10800, // 10800..1083F; Cypriot Syllabary + 0x10840, // unassigned + 0x10900, // 10900..1091F; Phoenician + 0x10920, // 10920..1093F; Lydian + 0x10940, // unassigned + 0x10A00, // 10A00..10A5F; Kharoshthi + 0x10A60, // unassigned + 0x12000, // 12000..123FF; Cuneiform + 0x12400, // 12400..1247F; Cuneiform Numbers and Punctuation + 0x12480, // unassigned + 0x1D000, // 1D000..1D0FF; Byzantine Musical Symbols + 0x1D100, // 1D100..1D1FF; Musical Symbols + 0x1D200, // 1D200..1D24F; Ancient Greek Musical Notation + 0x1D250, // unassigned + 0x1D300, // 1D300..1D35F; Tai Xuan Jing Symbols + 0x1D360, // 1D360..1D37F; Counting Rod Numerals + 0x1D380, // unassigned + 0x1D400, // 1D400..1D7FF; Mathematical Alphanumeric Symbols + 0x1D800, // unassigned + 0x1F000, // 1F000..1F02F; Mahjong Tiles + 0x1F030, // 1F030..1F09F; Domino Tiles + 0x1F0A0, // unassigned + 0x20000, // 20000..2A6DF; CJK Unified Ideographs Extension B + 0x2A6E0, // unassigned + 0x2F800, // 2F800..2FA1F; CJK Compatibility Ideographs Supplement + 0x2FA20, // unassigned + 0xE0000, // E0000..E007F; Tags + 0xE0080, // unassigned + 0xE0100, // E0100..E01EF; Variation Selectors Supplement + 0xE01F0, // unassigned + 0xF0000, // F0000..FFFFF; Supplementary Private Use Area-A + 0x100000, // 100000..10FFFF; Supplementary Private Use Area-B }; private static final UnicodeBlock[] blocks = { @@ -1809,8 +2234,9 @@ HEBREW, ARABIC, SYRIAC, - null, + ARABIC_SUPPLEMENT, THAANA, + NKO, null, DEVANAGARI, BENGALI, @@ -1829,7 +2255,7 @@ GEORGIAN, HANGUL_JAMO, ETHIOPIC, - null, + ETHIOPIC_SUPPLEMENT, CHEROKEE, UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS, OGHAM, @@ -1843,11 +2269,19 @@ null, LIMBU, TAI_LE, + NEW_TAI_LUE, + KHMER_SYMBOLS, + BUGINESE, null, - KHMER_SYMBOLS, + BALINESE, + SUNDANESE, + null, + LEPCHA, + OL_CHIKI, null, PHONETIC_EXTENSIONS, - null, + PHONETIC_EXTENSIONS_SUPPLEMENT, + COMBINING_DIACRITICAL_MARKS_SUPPLEMENT, LATIN_EXTENDED_ADDITIONAL, GREEK_EXTENDED, GENERAL_PUNCTUATION, @@ -1874,7 +2308,14 @@ MISCELLANEOUS_MATHEMATICAL_SYMBOLS_B, SUPPLEMENTAL_MATHEMATICAL_OPERATORS, MISCELLANEOUS_SYMBOLS_AND_ARROWS, - null, + GLAGOLITIC, + LATIN_EXTENDED_C, + COPTIC, + GEORGIAN_SUPPLEMENT, + TIFINAGH, + ETHIOPIC_EXTENDED, + CYRILLIC_EXTENDED_A, + SUPPLEMENTAL_PUNCTUATION, CJK_RADICALS_SUPPLEMENT, KANGXI_RADICALS, null, @@ -1886,7 +2327,7 @@ HANGUL_COMPATIBILITY_JAMO, KANBUN, BOPOMOFO_EXTENDED, - null, + CJK_STROKES, KATAKANA_PHONETIC_EXTENSIONS, ENCLOSED_CJK_LETTERS_AND_MONTHS, CJK_COMPATIBILITY, @@ -1896,6 +2337,21 @@ YI_SYLLABLES, YI_RADICALS, null, + VAI, + CYRILLIC_EXTENDED_B, + null, + MODIFIER_TONE_LETTERS, + LATIN_EXTENDED_D, + SYLOTI_NAGRI, + null, + PHAGS_PA, + SAURASHTRA, + null, + KAYAH_LI, + REJANG, + null, + CHAM, + null, HANGUL_SYLLABLES, null, HIGH_SURROGATES, @@ -1906,7 +2362,7 @@ ALPHABETIC_PRESENTATION_FORMS, ARABIC_PRESENTATION_FORMS_A, VARIATION_SELECTORS, - null, + VERTICAL_FORMS, COMBINING_HALF_MARKS, CJK_COMPATIBILITY_FORMS, SMALL_FORM_VARIANTS, @@ -1916,11 +2372,18 @@ LINEAR_B_SYLLABARY, LINEAR_B_IDEOGRAMS, AEGEAN_NUMBERS, + ANCIENT_GREEK_NUMBERS, + ANCIENT_SYMBOLS, + PHAISTOS_DISC, + null, + LYCIAN, + CARIAN, null, OLD_ITALIC, GOTHIC, null, UGARITIC, + OLD_PERSIAN, null, DESERET, SHAVIAN, @@ -1928,13 +2391,26 @@ null, CYPRIOT_SYLLABARY, null, + PHOENICIAN, + LYDIAN, + null, + KHAROSHTHI, + null, + CUNEIFORM, + CUNEIFORM_NUMBERS_AND_PUNCTUATION, + null, BYZANTINE_MUSICAL_SYMBOLS, MUSICAL_SYMBOLS, + ANCIENT_GREEK_MUSICAL_NOTATION, null, TAI_XUAN_JING_SYMBOLS, + COUNTING_ROD_NUMERALS, null, MATHEMATICAL_ALPHANUMERIC_SYMBOLS, null, + MAHJONG_TILES, + DOMINO_TILES, + null, CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B, null, CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT, diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/lang/Class.java --- a/jdk/src/share/classes/java/lang/Class.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/lang/Class.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1994-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1994-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -2846,14 +2846,14 @@ if (loader == null) return desiredAssertionStatus0(this); - synchronized(loader) { - // If the classloader has been initialized with - // the assertion directives, ask it. Otherwise, - // ask the VM. - return (loader.classAssertionStatus == null ? - desiredAssertionStatus0(this) : - loader.desiredAssertionStatus(getName())); + // If the classloader has been initialized with the assertion + // directives, ask it. Otherwise, ask the VM. + synchronized(loader.assertionLock) { + if (loader.classAssertionStatus != null) { + return loader.desiredAssertionStatus(getName()); + } } + return desiredAssertionStatus0(this); } // Retrieves the desired assertion status of this class from the VM diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/lang/ClassLoader.java --- a/jdk/src/share/classes/java/lang/ClassLoader.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/lang/ClassLoader.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1994-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1994-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -40,14 +40,17 @@ import java.security.PrivilegedExceptionAction; import java.security.ProtectionDomain; import java.security.cert.Certificate; +import java.util.Collections; import java.util.Enumeration; -import java.util.Hashtable; import java.util.HashMap; import java.util.HashSet; import java.util.Set; import java.util.Stack; import java.util.Map; import java.util.Vector; +import java.util.Hashtable; +import java.util.WeakHashMap; +import java.util.concurrent.ConcurrentHashMap; import sun.misc.ClassFileTransformer; import sun.misc.CompoundEnumeration; import sun.misc.Resource; @@ -91,6 +94,17 @@ * called the "bootstrap class loader", does not itself have a parent but may * serve as the parent of a <tt>ClassLoader</tt> instance. * + * <p> Class loaders that support concurrent loading of classes are known as + * <em>parallel capable</em> class loaders and are required to register + * themselves at their class initialization time by invoking the + * {@link + * #registerAsParallelCapable <tt>ClassLoader.registerAsParallelCapable</tt>} + * method. In environments in which the delegation model is not strictly + * hierarchical, class loaders need to be parallel capable, otherise class + * loading can lead to deadlocks because the loader lock is held for the + * duration of the class loading process (see {@link #loadClass + * <tt>loadClass</tt>} methods). + * * <p> Normally, the Java virtual machine loads classes from the local file * system in a platform-dependent manner. For example, on UNIX systems, the * virtual machine loads classes from the directory defined by the @@ -160,31 +174,51 @@ public abstract class ClassLoader { private static native void registerNatives(); + + // Set of classes which are registered as parallel capable class loaders + private static final Set<Class<? extends ClassLoader>> parallelLoaders + = Collections.newSetFromMap(Collections.synchronizedMap + (new WeakHashMap<Class<? extends ClassLoader>, Boolean>())); + static { registerNatives(); + parallelLoaders.add(ClassLoader.class); } // If initialization succeed this is set to true and security checks will // succeed. Otherwise the object is not initialized and the object is // useless. - private boolean initialized = false; + private final boolean initialized; // The parent class loader for delegation - private ClassLoader parent; + // Note: VM hardcoded the offset of this field, thus all new fields + // must be added *after* it. + private final ClassLoader parent; + + // Maps class name to the corresponding lock object when the current + // class loader is parallel capable. + // Note: VM also uses this field to decide if the current class loader + // is parallel capable and the appropriate lock object for class loading. + private final ConcurrentHashMap<String, Object> parallelLockMap; // Hashtable that maps packages to certs - private Hashtable<String, Certificate[]> package2certs - = new Hashtable<String, Certificate[]>(11); + private final Map <String, Certificate[]> package2certs; // Shared among all packages with unsigned classes - Certificate[] nocerts; + private static final Certificate[] nocerts = new Certificate[0]; + + // The classes loaded by this class loader. The only purpose of this table + // is to keep the classes from being GC'ed until the loader is GC'ed. + private final Vector<Class<?>> classes = new Vector<Class<?>>(); - // The classes loaded by this class loader. The only purpose of this table - // is to keep the classes from being GC'ed until the loader is GC'ed. - private Vector<Class<?>> classes = new Vector<Class<?>>(); + // The "default" domain. Set as the default ProtectionDomain on newly + // created classes. + private final ProtectionDomain defaultDomain = + new ProtectionDomain(new CodeSource(null, (Certificate[]) null), + null, this, null); // The initiating protection domains for all classes loaded by this loader - private Set<ProtectionDomain> domains = new HashSet<ProtectionDomain>(); + private final Set<ProtectionDomain> domains; // Invoked by the VM to record every loaded class with this loader. void addClass(Class c) { @@ -193,7 +227,9 @@ // The packages defined in this class loader. Each package name is mapped // to its corresponding Package object. - private HashMap<String, Package> packages = new HashMap<String, Package>(); + // @GuardedBy("itself") + private final HashMap<String, Package> packages = + new HashMap<String, Package>(); /** * Creates a new class loader using the specified parent class loader for @@ -220,6 +256,19 @@ security.checkCreateClassLoader(); } this.parent = parent; + if (parallelLoaders.contains(this.getClass())) { + parallelLockMap = new ConcurrentHashMap<String, Object>(); + package2certs = new ConcurrentHashMap<String, Certificate[]>(); + domains = + Collections.synchronizedSet(new HashSet<ProtectionDomain>()); + assertionLock = new Object(); + } else { + // no finer-grained lock; lock on the classloader instance + parallelLockMap = null; + package2certs = new Hashtable<String, Certificate[]>(); + domains = new HashSet<ProtectionDomain>(); + assertionLock = this; + } initialized = true; } @@ -244,10 +293,22 @@ security.checkCreateClassLoader(); } this.parent = getSystemClassLoader(); + if (parallelLoaders.contains(this.getClass())) { + parallelLockMap = new ConcurrentHashMap<String, Object>(); + package2certs = new ConcurrentHashMap<String, Certificate[]>(); + domains = + Collections.synchronizedSet(new HashSet<ProtectionDomain>()); + assertionLock = new Object(); + } else { + // no finer-grained lock; lock on the classloader instance + parallelLockMap = null; + package2certs = new Hashtable<String, Certificate[]>(); + domains = new HashSet<ProtectionDomain>(); + assertionLock = this; + } initialized = true; } - // -- Class -- /** @@ -296,6 +357,10 @@ * <p> Subclasses of <tt>ClassLoader</tt> are encouraged to override {@link * #findClass(String)}, rather than this method. </p> * + * <p> Unless overridden, this method synchronizes on the result of + * {@link #getClassLoadingLock <tt>getClassLoadingLock</tt>} method + * during the entire class loading process. + * * @param name * The <a href="#name">binary name</a> of the class * @@ -307,37 +372,80 @@ * @throws ClassNotFoundException * If the class could not be found */ - protected synchronized Class<?> loadClass(String name, boolean resolve) + protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException { - // First, check if the class has already been loaded - Class c = findLoadedClass(name); - if (c == null) { - try { - if (parent != null) { - c = parent.loadClass(name, false); - } else { - c = findBootstrapClass0(name); + synchronized (getClassLoadingLock(name)) { + // First, check if the class has already been loaded + Class c = findLoadedClass(name); + if (c == null) { + try { + if (parent != null) { + c = parent.loadClass(name, false); + } else { + c = findBootstrapClass0(name); + } + } catch (ClassNotFoundException e) { + // If still not found, then invoke findClass in order + // to find the class. + c = findClass(name); } - } catch (ClassNotFoundException e) { - // If still not found, then invoke findClass in order - // to find the class. - c = findClass(name); + } + if (resolve) { + resolveClass(c); + } + return c; + } + } + + /** + * Returns the lock object for class loading operations. + * For backward compatibility, the default implementation of this method + * behaves as follows. If this ClassLoader object is registered as + * parallel capable, the method returns a dedicated object associated + * with the specified class name. Otherwise, the method returns this + * ClassLoader object. </p> + * + * @param className + * The name of the to-be-loaded class + * + * @return the lock for class loading operations + * + * @throws NullPointerException + * If registered as parallel capable and <tt>className</tt> is null + * + * @see #loadClass(String, boolean) + * + * @since 1.7 + */ + protected Object getClassLoadingLock(String className) { + Object lock = this; + if (parallelLockMap != null) { + Object newLock = new Object(); + lock = parallelLockMap.putIfAbsent(className, newLock); + if (lock == null) { + lock = newLock; } } - if (resolve) { - resolveClass(c); - } - return c; + return lock; } // This method is invoked by the virtual machine to load a class. - private synchronized Class loadClassInternal(String name) + private Class loadClassInternal(String name) throws ClassNotFoundException { - return loadClass(name); + // For backward compatibility, explicitly lock on 'this' when + // the current class loader is not parallel capable. + if (parallelLockMap == null) { + synchronized (this) { + return loadClass(name); + } + } else { + return loadClass(name); + } } + // Invoked by the VM after loading class with this loader. private void checkPackageAccess(Class cls, ProtectionDomain pd) { final SecurityManager sm = System.getSecurityManager(); if (sm != null) { @@ -486,31 +594,32 @@ /* Determine protection domain, and check that: - not define java.* class, - - signer of this class matches signers for the rest of the classes in package. + - signer of this class matches signers for the rest of the classes in + package. */ private ProtectionDomain preDefineClass(String name, - ProtectionDomain protectionDomain) + ProtectionDomain pd) { if (!checkName(name)) throw new NoClassDefFoundError("IllegalName: " + name); if ((name != null) && name.startsWith("java.")) { - throw new SecurityException("Prohibited package name: " + - name.substring(0, name.lastIndexOf('.'))); + throw new SecurityException + ("Prohibited package name: " + + name.substring(0, name.lastIndexOf('.'))); } - if (protectionDomain == null) { - protectionDomain = getDefaultDomain(); + if (pd == null) { + pd = defaultDomain; } - if (name != null) - checkCerts(name, protectionDomain.getCodeSource()); + if (name != null) checkCerts(name, pd.getCodeSource()); - return protectionDomain; + return pd; } - private String defineClassSourceLocation(ProtectionDomain protectionDomain) + private String defineClassSourceLocation(ProtectionDomain pd) { - CodeSource cs = protectionDomain.getCodeSource(); + CodeSource cs = pd.getCodeSource(); String source = null; if (cs != null && cs.getLocation() != null) { source = cs.getLocation().toString(); @@ -519,14 +628,15 @@ } private Class defineTransformedClass(String name, byte[] b, int off, int len, - ProtectionDomain protectionDomain, + ProtectionDomain pd, ClassFormatError cfe, String source) throws ClassFormatError { // Class format error - try to transform the bytecode and // define the class again // - ClassFileTransformer[] transformers = ClassFileTransformer.getTransformers(); + ClassFileTransformer[] transformers = + ClassFileTransformer.getTransformers(); Class c = null; if (transformers != null) { @@ -535,7 +645,7 @@ // Transform byte code using transformer byte[] tb = transformer.transform(b, off, len); c = defineClass1(name, tb, 0, tb.length, - protectionDomain, source); + pd, source); break; } catch (ClassFormatError cfe2) { // If ClassFormatError occurs, try next transformer @@ -552,11 +662,10 @@ return c; } - private void postDefineClass(Class c, ProtectionDomain protectionDomain) + private void postDefineClass(Class c, ProtectionDomain pd) { - if (protectionDomain.getCodeSource() != null) { - Certificate certs[] = - protectionDomain.getCodeSource().getCertificates(); + if (pd.getCodeSource() != null) { + Certificate certs[] = pd.getCodeSource().getCertificates(); if (certs != null) setSigners(c, certs); } @@ -641,7 +750,8 @@ try { c = defineClass1(name, b, off, len, protectionDomain, source); } catch (ClassFormatError cfe) { - c = defineTransformedClass(name, b, off, len, protectionDomain, cfe, source); + c = defineTransformedClass(name, b, off, len, protectionDomain, cfe, + source); } postDefineClass(c, protectionDomain); @@ -656,10 +766,10 @@ * specified in the documentation for {@link #defineClass(String, byte[], * int, int)}. Before the class can be used it must be resolved. * - * <p>The rules about the first class defined in a package determining the set of - * certificates for the package, and the restrictions on class names are identical - * to those specified in the documentation for {@link #defineClass(String, byte[], - * int, int, ProtectionDomain)}. + * <p>The rules about the first class defined in a package determining the + * set of certificates for the package, and the restrictions on class names + * are identical to those specified in the documentation for {@link + * #defineClass(String, byte[], int, int, ProtectionDomain)}. * * <p> An invocation of this method of the form * <i>cl</i><tt>.defineClass(</tt><i>name</i><tt>,</tt> @@ -668,12 +778,13 @@ * * <blockquote><tt> * ...<br> - * byte[] temp = new byte[</tt><i>bBuffer</i><tt>.{@link java.nio.ByteBuffer#remaining - * remaining}()];<br> + * byte[] temp = new byte[</tt><i>bBuffer</i><tt>.{@link + * java.nio.ByteBuffer#remaining remaining}()];<br> * </tt><i>bBuffer</i><tt>.{@link java.nio.ByteBuffer#get(byte[]) * get}(temp);<br> * return {@link #defineClass(String, byte[], int, int, ProtectionDomain) - * </tt><i>cl</i><tt>.defineClass}(</tt><i>name</i><tt>, temp, 0, temp.length, </tt><i>pd</i><tt>);<br> + * </tt><i>cl</i><tt>.defineClass}(</tt><i>name</i><tt>, temp, 0, + * temp.length, </tt><i>pd</i><tt>);<br> * </tt></blockquote> * * @param name @@ -682,9 +793,9 @@ * * @param b * The bytes that make up the class data. The bytes from positions - * <tt>b.position()</tt> through <tt>b.position() + b.limit() -1 </tt> - * should have the format of a valid class file as defined by the <a - * href="http://java.sun.com/docs/books/vmspec/">Java Virtual + * <tt>b.position()</tt> through <tt>b.position() + b.limit() -1 + * </tt> should have the format of a valid class file as defined by + * the <a href="http://java.sun.com/docs/books/vmspec/">Java Virtual * Machine Specification</a>. * * @param protectionDomain @@ -738,11 +849,13 @@ String source = defineClassSourceLocation(protectionDomain); try { - c = defineClass2(name, b, b.position(), len, protectionDomain, source); + c = defineClass2(name, b, b.position(), len, protectionDomain, + source); } catch (ClassFormatError cfe) { byte[] tb = new byte[len]; b.get(tb); // get bytes out of byte buffer. - c = defineTransformedClass(name, tb, 0, len, protectionDomain, cfe, source); + c = defineTransformedClass(name, tb, 0, len, protectionDomain, cfe, + source); } postDefineClass(c, protectionDomain); @@ -769,33 +882,29 @@ return true; } - private synchronized void checkCerts(String name, CodeSource cs) { + private void checkCerts(String name, CodeSource cs) { int i = name.lastIndexOf('.'); String pname = (i == -1) ? "" : name.substring(0, i); - Certificate[] pcerts = package2certs.get(pname); - if (pcerts == null) { - // first class in this package gets to define which - // certificates must be the same for all other classes - // in this package - if (cs != null) { - pcerts = cs.getCertificates(); + + Certificate[] certs = null; + if (cs != null) { + certs = cs.getCertificates(); + } + Certificate[] pcerts = null; + if (parallelLockMap == null) { + synchronized (this) { + pcerts = package2certs.get(pname); + if (pcerts == null) { + package2certs.put(pname, (certs == null? nocerts:certs)); + } } - if (pcerts == null) { - if (nocerts == null) - nocerts = new Certificate[0]; - pcerts = nocerts; - } - package2certs.put(pname, pcerts); } else { - Certificate[] certs = null; - if (cs != null) { - certs = cs.getCertificates(); - } - - if (!compareCerts(pcerts, certs)) { - throw new SecurityException("class \""+ name + - "\"'s signer information does not match signer information of other classes in the same package"); - } + pcerts = ((ConcurrentHashMap<String, Certificate[]>)package2certs). + putIfAbsent(pname, (certs == null? nocerts:certs)); + } + if (pcerts != null && !compareCerts(pcerts, certs)) { + throw new SecurityException("class \""+ name + + "\"'s signer information does not match signer information of other classes in the same package"); } } @@ -1075,6 +1184,47 @@ return java.util.Collections.emptyEnumeration(); } + // index 0: java.lang.ClassLoader.class + // index 1: the immediate caller of index 0. + // index 2: the immediate caller of index 1. + private static native Class<? extends ClassLoader> getCaller(int index); + + /** + * Registers the caller class loader as parallel capable. + * In order for the registration to succeed, all super classes + * of the caller class loader must also be registered as + * parallel capable when this method is called. </p> + * Note that once a class loader is registered as + * parallel capable, there is no way to change it back. + * In addition, registration should be done statically before + * any instance of the caller classloader being constructed. </p> + * + * @return true if the caller is successfully registered as + * parallel capable and false if otherwise. + * + * @since 1.7 + */ + protected static boolean registerAsParallelCapable() { + Class<? extends ClassLoader> caller = getCaller(1); + Class superCls = caller.getSuperclass(); + boolean result = false; + // Explicit synchronization needed for composite action + synchronized (parallelLoaders) { + if (!parallelLoaders.contains(caller)) { + if (parallelLoaders.contains(superCls)) { + // register the immediate caller as parallel capable + // if and only if all of its super classes are. + // Note: given current classloading sequence, if + // the immediate super class is parallel capable, + // all the super classes higher up must be too. + result = true; + parallelLoaders.add(caller); + } + } else result = true; + } + return result; + } + /** * Find a resource of the specified name from the search path used to load * classes. This method locates the resource through the system class @@ -1141,7 +1291,8 @@ private static Enumeration<URL> getBootstrapResources(String name) throws IOException { - final Enumeration<Resource> e = getBootstrapClassPath().getResources(name); + final Enumeration<Resource> e = + getBootstrapClassPath().getResources(name); return new Enumeration<URL> () { public URL nextElement() { return e.nextElement().getURL(); @@ -1377,9 +1528,11 @@ } // The class loader for the system + // @GuardedBy("ClassLoader.class") private static ClassLoader scl; // Set to true once the system class loader has been set + // @GuardedBy("ClassLoader.class") private static boolean sclSet; @@ -1592,19 +1745,6 @@ } } - // The "default" domain. Set as the default ProtectionDomain on newly - // created classes. - private ProtectionDomain defaultDomain = null; - - // Returns (and initializes) the default domain. - private synchronized ProtectionDomain getDefaultDomain() { - if (defaultDomain == null) { - CodeSource cs = new CodeSource(null, (Certificate[]) null); - defaultDomain = new ProtectionDomain(cs, null, this, null); - } - return defaultDomain; - } - // All native library names we've loaded. private static Vector<String> loadedLibraryNames = new Vector<String>(); @@ -1622,8 +1762,8 @@ = new Stack<NativeLibrary>(); // The paths searched for libraries - static private String usr_paths[]; - static private String sys_paths[]; + private static String usr_paths[]; + private static String sys_paths[]; private static String[] initializePath(String propname) { String ldpath = System.getProperty(propname, ""); @@ -1803,7 +1943,10 @@ // -- Assertion management -- + final Object assertionLock; + // The default toggle for assertion checking. + // @GuardedBy("assertionLock") private boolean defaultAssertionStatus = false; // Maps String packageName to Boolean package default assertion status Note @@ -1811,12 +1954,14 @@ // is null then we are delegating assertion status queries to the VM, i.e., // none of this ClassLoader's assertion status modification methods have // been invoked. + // @GuardedBy("assertionLock") private Map<String, Boolean> packageAssertionStatus = null; // Maps String fullyQualifiedClassName to Boolean assertionStatus If this // field is null then we are delegating assertion status queries to the VM, // i.e., none of this ClassLoader's assertion status modification methods // have been invoked. + // @GuardedBy("assertionLock") Map<String, Boolean> classAssertionStatus = null; /** @@ -1834,11 +1979,13 @@ * * @since 1.4 */ - public synchronized void setDefaultAssertionStatus(boolean enabled) { - if (classAssertionStatus == null) - initializeJavaAssertionMaps(); + public void setDefaultAssertionStatus(boolean enabled) { + synchronized (assertionLock) { + if (classAssertionStatus == null) + initializeJavaAssertionMaps(); - defaultAssertionStatus = enabled; + defaultAssertionStatus = enabled; + } } /** @@ -1878,13 +2025,14 @@ * * @since 1.4 */ - public synchronized void setPackageAssertionStatus(String packageName, - boolean enabled) - { - if (packageAssertionStatus == null) - initializeJavaAssertionMaps(); + public void setPackageAssertionStatus(String packageName, + boolean enabled) { + synchronized (assertionLock) { + if (packageAssertionStatus == null) + initializeJavaAssertionMaps(); - packageAssertionStatus.put(packageName, enabled); + packageAssertionStatus.put(packageName, enabled); + } } /** @@ -1909,13 +2057,13 @@ * * @since 1.4 */ - public synchronized void setClassAssertionStatus(String className, - boolean enabled) - { - if (classAssertionStatus == null) - initializeJavaAssertionMaps(); + public void setClassAssertionStatus(String className, boolean enabled) { + synchronized (assertionLock) { + if (classAssertionStatus == null) + initializeJavaAssertionMaps(); - classAssertionStatus.put(className, enabled); + classAssertionStatus.put(className, enabled); + } } /** @@ -1928,15 +2076,16 @@ * * @since 1.4 */ - public synchronized void clearAssertionStatus() { + public void clearAssertionStatus() { /* * Whether or not "Java assertion maps" are initialized, set * them to empty maps, effectively ignoring any present settings. */ - classAssertionStatus = new HashMap<String, Boolean>(); - packageAssertionStatus = new HashMap<String, Boolean>(); - - defaultAssertionStatus = false; + synchronized (assertionLock) { + classAssertionStatus = new HashMap<String, Boolean>(); + packageAssertionStatus = new HashMap<String, Boolean>(); + defaultAssertionStatus = false; + } } /** @@ -1961,39 +2110,40 @@ * * @since 1.4 */ - synchronized boolean desiredAssertionStatus(String className) { - Boolean result; - - // assert classAssertionStatus != null; - // assert packageAssertionStatus != null; + boolean desiredAssertionStatus(String className) { + synchronized (assertionLock) { + // assert classAssertionStatus != null; + // assert packageAssertionStatus != null; - // Check for a class entry - result = classAssertionStatus.get(className); - if (result != null) - return result.booleanValue(); - - // Check for most specific package entry - int dotIndex = className.lastIndexOf("."); - if (dotIndex < 0) { // default package - result = packageAssertionStatus.get(null); + // Check for a class entry + Boolean result = classAssertionStatus.get(className); if (result != null) return result.booleanValue(); + + // Check for most specific package entry + int dotIndex = className.lastIndexOf("."); + if (dotIndex < 0) { // default package + result = packageAssertionStatus.get(null); + if (result != null) + return result.booleanValue(); + } + while(dotIndex > 0) { + className = className.substring(0, dotIndex); + result = packageAssertionStatus.get(className); + if (result != null) + return result.booleanValue(); + dotIndex = className.lastIndexOf(".", dotIndex-1); + } + + // Return the classloader default + return defaultAssertionStatus; } - while(dotIndex > 0) { - className = className.substring(0, dotIndex); - result = packageAssertionStatus.get(className); - if (result != null) - return result.booleanValue(); - dotIndex = className.lastIndexOf(".", dotIndex-1); - } - - // Return the classloader default - return defaultAssertionStatus; } // Set up the assertions with information provided by the VM. + // Note: Should only be called inside a synchronized block private void initializeJavaAssertionMaps() { - // assert Thread.holdsLock(this); + // assert Thread.holdsLock(assertionLock); classAssertionStatus = new HashMap<String, Boolean>(); packageAssertionStatus = new HashMap<String, Boolean>(); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java --- a/jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/lang/ConditionalSpecialCasing.java Wed Jul 05 16:51:11 2017 +0200 @@ -74,6 +74,7 @@ new Entry(0x00CC, new char[]{0x0069, 0x0307, 0x0300}, new char[]{0x00CC}, "lt", 0), // # LATIN CAPITAL LETTER I WITH GRAVE new Entry(0x00CD, new char[]{0x0069, 0x0307, 0x0301}, new char[]{0x00CD}, "lt", 0), // # LATIN CAPITAL LETTER I WITH ACUTE new Entry(0x0128, new char[]{0x0069, 0x0307, 0x0303}, new char[]{0x0128}, "lt", 0), // # LATIN CAPITAL LETTER I WITH TILDE + new Entry(0x0130, new char[]{0x0069, 0x0307}, new char[]{0x0130}, "lt", 0), // # LATIN CAPITAL LETTER I WITH DOT ABOVE //# ================================================================================ //# Turkish and Azeri @@ -84,7 +85,10 @@ new Entry(0x0049, new char[]{0x0131}, new char[]{0x0049}, "tr", NOT_BEFORE_DOT), // # LATIN CAPITAL LETTER I new Entry(0x0049, new char[]{0x0131}, new char[]{0x0049}, "az", NOT_BEFORE_DOT), // # LATIN CAPITAL LETTER I new Entry(0x0069, new char[]{0x0069}, new char[]{0x0130}, "tr", 0), // # LATIN SMALL LETTER I - new Entry(0x0069, new char[]{0x0069}, new char[]{0x0130}, "az", 0) // # LATIN SMALL LETTER I + new Entry(0x0069, new char[]{0x0069}, new char[]{0x0130}, "az", 0), // # LATIN SMALL LETTER I + //# ================================================================================ + //# Other + new Entry(0x0130, new char[]{0x0069, 0x0307}, new char[]{0x0130}, "en", 0), // # LATIN CAPITALLETTER I WITH DOT ABOVE }; // A hash table that contains the above entries diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/lang/Integer.java --- a/jdk/src/share/classes/java/lang/Integer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/lang/Integer.java Wed Jul 05 16:51:11 2017 +0200 @@ -25,6 +25,8 @@ package java.lang; +import java.util.Properties; + /** * The {@code Integer} class wraps a value of the primitive type * {@code int} in an object. An object of type {@code Integer} @@ -442,6 +444,12 @@ public static int parseInt(String s, int radix) throws NumberFormatException { + /* + * WARNING: This method may be invoked early during VM initialization + * before IntegerCache is initialized. Care must be taken to not use + * the valueOf method. + */ + if (s == null) { throw new NumberFormatException("null"); } @@ -545,7 +553,7 @@ * does not contain a parsable {@code int}. */ public static Integer valueOf(String s, int radix) throws NumberFormatException { - return new Integer(parseInt(s,radix)); + return Integer.valueOf(parseInt(s,radix)); } /** @@ -570,20 +578,56 @@ * @exception NumberFormatException if the string cannot be parsed * as an integer. */ - public static Integer valueOf(String s) throws NumberFormatException - { - return new Integer(parseInt(s, 10)); + public static Integer valueOf(String s) throws NumberFormatException { + return Integer.valueOf(parseInt(s, 10)); + } + + /** + * Cache to support the object identity semantics of autoboxing for values between + * -128 and 127 (inclusive) as required by JLS. + * + * The cache is initialized on first usage. During VM initialization the + * getAndRemoveCacheProperties method may be used to get and remove any system + * properites that configure the cache size. At this time, the size of the + * cache may be controlled by the -XX:AutoBoxCacheMax=<size> option. + */ + + // value of java.lang.Integer.IntegerCache.high property (obtained during VM init) + private static String integerCacheHighPropValue; + + static void getAndRemoveCacheProperties() { + if (!sun.misc.VM.isBooted()) { + Properties props = System.getProperties(); + integerCacheHighPropValue = + (String)props.remove("java.lang.Integer.IntegerCache.high"); + if (integerCacheHighPropValue != null) + System.setProperties(props); // remove from system props + } } private static class IntegerCache { - private IntegerCache(){} - - static final Integer cache[] = new Integer[-(-128) + 127 + 1]; + static final int low = -128; + static final int high; + static final Integer cache[]; static { - for(int i = 0; i < cache.length; i++) - cache[i] = new Integer(i - 128); + // high value may be configured by property + int h = 127; + if (integerCacheHighPropValue != null) { + int i = parseInt(integerCacheHighPropValue); + i = Math.max(i, 127); + // Maximum array size is Integer.MAX_VALUE + h = Math.min(i, Integer.MAX_VALUE - (-low)); + } + high = h; + + cache = new Integer[(high - low) + 1]; + int j = low; + for(int k = 0; k < cache.length; k++) + cache[k] = new Integer(j++); } + + private IntegerCache() {} } /** @@ -599,10 +643,9 @@ * @since 1.5 */ public static Integer valueOf(int i) { - final int offset = 128; - if (i >= -128 && i <= 127) { // must cache - return IntegerCache.cache[i + offset]; - } + assert IntegerCache.high >= 127; + if (i >= IntegerCache.low && i <= IntegerCache.high) + return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } @@ -806,7 +849,7 @@ */ public static Integer getInteger(String nm, int val) { Integer result = getInteger(nm, null); - return (result == null) ? new Integer(val) : result; + return (result == null) ? Integer.valueOf(val) : result; } /** @@ -938,7 +981,7 @@ try { result = Integer.valueOf(nm.substring(index), radix); - result = negative ? new Integer(-result.intValue()) : result; + result = negative ? Integer.valueOf(-result.intValue()) : result; } catch (NumberFormatException e) { // If number is Integer.MIN_VALUE, we'll end up here. The next line // handles this case, and causes any genuine format error to be diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/lang/Long.java --- a/jdk/src/share/classes/java/lang/Long.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/lang/Long.java Wed Jul 05 16:51:11 2017 +0200 @@ -510,7 +510,7 @@ * contain a parsable {@code long}. */ public static Long valueOf(String s, int radix) throws NumberFormatException { - return new Long(parseLong(s, radix)); + return Long.valueOf(parseLong(s, radix)); } /** @@ -537,7 +537,7 @@ */ public static Long valueOf(String s) throws NumberFormatException { - return new Long(parseLong(s, 10)); + return Long.valueOf(parseLong(s, 10)); } private static class LongCache { @@ -650,7 +650,7 @@ try { result = Long.valueOf(nm.substring(index), radix); - result = negative ? new Long(-result.longValue()) : result; + result = negative ? Long.valueOf(-result.longValue()) : result; } catch (NumberFormatException e) { // If number is Long.MIN_VALUE, we'll end up here. The next line // handles this case, and causes any genuine format error to be @@ -869,7 +869,7 @@ */ public static Long getLong(String nm, long val) { Long result = Long.getLong(nm, null); - return (result == null) ? new Long(val) : result; + return (result == null) ? Long.valueOf(val) : result; } /** diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/lang/String.java --- a/jdk/src/share/classes/java/lang/String.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/lang/String.java Wed Jul 05 16:51:11 2017 +0200 @@ -2451,14 +2451,21 @@ } if (localeDependent || srcChar == '\u03A3') { // GREEK CAPITAL LETTER SIGMA lowerChar = ConditionalSpecialCasing.toLowerCaseEx(this, i, locale); + } else if (srcChar == '\u0130') { // LATIN CAPITAL LETTER I DOT + lowerChar = Character.ERROR; } else { lowerChar = Character.toLowerCase(srcChar); } if ((lowerChar == Character.ERROR) || (lowerChar >= Character.MIN_SUPPLEMENTARY_CODE_POINT)) { if (lowerChar == Character.ERROR) { - lowerCharArray = - ConditionalSpecialCasing.toLowerCaseCharArray(this, i, locale); + if (!localeDependent && srcChar == '\u0130') { + lowerCharArray = + ConditionalSpecialCasing.toLowerCaseCharArray(this, i, Locale.ENGLISH); + } else { + lowerCharArray = + ConditionalSpecialCasing.toLowerCaseCharArray(this, i, locale); + } } else if (srcCount == 2) { resultOffset += Character.toChars(lowerChar, result, i + resultOffset) - srcCount; continue; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/lang/System.java --- a/jdk/src/share/classes/java/lang/System.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/lang/System.java Wed Jul 05 16:51:11 2017 +0200 @@ -1105,6 +1105,13 @@ props = new Properties(); initProperties(props); sun.misc.Version.init(); + + // Gets and removes system properties that configure the Integer + // cache used to support the object identity semantics of autoboxing. + // At this time, the size of the cache may be controlled by the + // -XX:AutoBoxCacheMax=<size> option. + Integer.getAndRemoveCacheProperties(); + FileInputStream fdIn = new FileInputStream(FileDescriptor.in); FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out); FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/lang/ref/ReferenceQueue.java --- a/jdk/src/share/classes/java/lang/ref/ReferenceQueue.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/lang/ref/ReferenceQueue.java Wed Jul 05 16:51:11 2017 +0200 @@ -51,7 +51,7 @@ static private class Lock { }; private Lock lock = new Lock(); - private Reference<? extends T> head = null; + private volatile Reference<? extends T> head = null; private long queueLength = 0; boolean enqueue(Reference<? extends T> r) { /* Called only by Reference class */ @@ -95,6 +95,8 @@ * otherwise <code>null</code> */ public Reference<? extends T> poll() { + if (head == null) + return null; synchronized (lock) { return reallyPoll(); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/lang/ref/SoftReference.java --- a/jdk/src/share/classes/java/lang/ref/SoftReference.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/lang/ref/SoftReference.java Wed Jul 05 16:51:11 2017 +0200 @@ -63,11 +63,13 @@ public class SoftReference<T> extends Reference<T> { - /* Timestamp clock, updated by the garbage collector + /** + * Timestamp clock, updated by the garbage collector */ static private long clock; - /* Timestamp updated by each invocation of the get method. The VM may use + /** + * Timestamp updated by each invocation of the get method. The VM may use * this field when selecting soft references to be cleared, but it is not * required to do so. */ @@ -108,7 +110,8 @@ */ public T get() { T o = super.get(); - if (o != null) this.timestamp = clock; + if (o != null && this.timestamp != clock) + this.timestamp = clock; return o; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/net/AbstractPlainSocketImpl.java --- a/jdk/src/share/classes/java/net/AbstractPlainSocketImpl.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/net/AbstractPlainSocketImpl.java Wed Jul 05 16:51:11 2017 +0200 @@ -33,6 +33,7 @@ import java.io.ByteArrayOutputStream; import sun.net.ConnectionResetException; +import sun.net.NetHooks; /** * Default Socket Implementation. This implementation does @@ -304,6 +305,11 @@ */ synchronized void doConnect(InetAddress address, int port, int timeout) throws IOException { + synchronized (fdLock) { + if (!closePending && (socket == null || !socket.isBound())) { + NetHooks.beforeTcpConnect(fd, address, port); + } + } try { FileDescriptor fd = acquireFD(); try { @@ -339,6 +345,11 @@ protected synchronized void bind(InetAddress address, int lport) throws IOException { + synchronized (fdLock) { + if (!closePending && (socket == null || !socket.isBound())) { + NetHooks.beforeTcpBind(fd, address, lport); + } + } socketBind(address, lport); if (socket != null) socket.setBound(); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/net/URLClassLoader.java --- a/jdk/src/share/classes/java/net/URLClassLoader.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/net/URLClassLoader.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -74,10 +74,10 @@ */ public class URLClassLoader extends SecureClassLoader implements Closeable { /* The search path for classes and resources */ - URLClassPath ucp; + private final URLClassPath ucp; /* The context to be used when loading classes and resources */ - private AccessControlContext acc; + private final AccessControlContext acc; /** * Constructs a new URLClassLoader for the given URLs. The URLs will be @@ -105,7 +105,19 @@ security.checkCreateClassLoader(); } ucp = new URLClassPath(urls); - acc = AccessController.getContext(); + this.acc = AccessController.getContext(); + } + + URLClassLoader(URL[] urls, ClassLoader parent, + AccessControlContext acc) { + super(parent); + // this is to make the stack depth consistent with 1.1 + SecurityManager security = System.getSecurityManager(); + if (security != null) { + security.checkCreateClassLoader(); + } + ucp = new URLClassPath(urls); + this.acc = acc; } /** @@ -136,7 +148,18 @@ security.checkCreateClassLoader(); } ucp = new URLClassPath(urls); - acc = AccessController.getContext(); + this.acc = AccessController.getContext(); + } + + URLClassLoader(URL[] urls, AccessControlContext acc) { + super(); + // this is to make the stack depth consistent with 1.1 + SecurityManager security = System.getSecurityManager(); + if (security != null) { + security.checkCreateClassLoader(); + } + ucp = new URLClassPath(urls); + this.acc = acc; } /** @@ -599,17 +622,14 @@ public static URLClassLoader newInstance(final URL[] urls, final ClassLoader parent) { // Save the caller's context - AccessControlContext acc = AccessController.getContext(); + final AccessControlContext acc = AccessController.getContext(); // Need a privileged block to create the class loader URLClassLoader ucl = AccessController.doPrivileged( new PrivilegedAction<URLClassLoader>() { public URLClassLoader run() { - return new FactoryURLClassLoader(urls, parent); + return new FactoryURLClassLoader(urls, parent, acc); } }); - // Now set the context on the loader using the one we saved, - // not the one inside the privileged block... - ucl.acc = acc; return ucl; } @@ -626,18 +646,14 @@ */ public static URLClassLoader newInstance(final URL[] urls) { // Save the caller's context - AccessControlContext acc = AccessController.getContext(); + final AccessControlContext acc = AccessController.getContext(); // Need a privileged block to create the class loader URLClassLoader ucl = AccessController.doPrivileged( new PrivilegedAction<URLClassLoader>() { public URLClassLoader run() { - return new FactoryURLClassLoader(urls); + return new FactoryURLClassLoader(urls, acc); } }); - - // Now set the context on the loader using the one we saved, - // not the one inside the privileged block... - ucl.acc = acc; return ucl; } @@ -649,20 +665,26 @@ } } ); + ClassLoader.registerAsParallelCapable(); } } final class FactoryURLClassLoader extends URLClassLoader { - FactoryURLClassLoader(URL[] urls, ClassLoader parent) { - super(urls, parent); + static { + ClassLoader.registerAsParallelCapable(); } - FactoryURLClassLoader(URL[] urls) { - super(urls); + FactoryURLClassLoader(URL[] urls, ClassLoader parent, + AccessControlContext acc) { + super(urls, parent, acc); } - public final synchronized Class loadClass(String name, boolean resolve) + FactoryURLClassLoader(URL[] urls, AccessControlContext acc) { + super(urls, acc); + } + + public final Class loadClass(String name, boolean resolve) throws ClassNotFoundException { // First check if we have permission to access the package. This diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/nio/channels/DatagramChannel.java --- a/jdk/src/share/classes/java/nio/channels/DatagramChannel.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/nio/channels/DatagramChannel.java Wed Jul 05 16:51:11 2017 +0200 @@ -261,7 +261,10 @@ * * <p> This method may be invoked at any time. It will not have any effect * on read or write operations that are already in progress at the moment - * that it is invoked. </p> + * that it is invoked. If this channel's socket is not bound then this method + * will first cause the socket to be bound to an address that is assigned + * automatically, as if invoking the {@link #bind bind} method with a + * parameter of {@code null}. </p> * * @param remote * The remote address to which this channel is to be connected @@ -356,7 +359,10 @@ * <p> This method may be invoked at any time. If another thread has * already initiated a read operation upon this channel, however, then an * invocation of this method will block until the first operation is - * complete. </p> + * complete. If this channel's socket is not bound then this method will + * first cause the socket to be bound to an address that is assigned + * automatically, as if invoking the {@link #bind bind} method with a + * parameter of {@code null}. </p> * * @param dst * The buffer into which the datagram is to be transferred @@ -413,7 +419,10 @@ * <p> This method may be invoked at any time. If another thread has * already initiated a write operation upon this channel, however, then an * invocation of this method will block until the first operation is - * complete. </p> + * complete. If this channel's socket is not bound then this method will + * first cause the socket to be bound to an address that is assigned + * automatically, as if by invoking the {@link #bind bind) method with a + * parameter of {@code null}. </p> * * @param src * The buffer containing the datagram to be sent diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/security/SecureClassLoader.java --- a/jdk/src/share/classes/java/security/SecureClassLoader.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/security/SecureClassLoader.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,14 +45,19 @@ * succeed. Otherwise the object is not initialized and the object is * useless. */ - private boolean initialized = false; + private final boolean initialized; // HashMap that maps CodeSource to ProtectionDomain - private HashMap<CodeSource, ProtectionDomain> pdcache = + // @GuardedBy("pdcache") + private final HashMap<CodeSource, ProtectionDomain> pdcache = new HashMap<CodeSource, ProtectionDomain>(11); private static final Debug debug = Debug.getInstance("scl"); + static { + ClassLoader.registerAsParallelCapable(); + } + /** * Creates a new SecureClassLoader using the specified parent * class loader for delegation. @@ -136,10 +141,7 @@ byte[] b, int off, int len, CodeSource cs) { - if (cs == null) - return defineClass(name, b, off, len); - else - return defineClass(name, b, off, len, getProtectionDomain(cs)); + return defineClass(name, b, off, len, getProtectionDomain(cs)); } /** @@ -172,10 +174,7 @@ protected final Class<?> defineClass(String name, java.nio.ByteBuffer b, CodeSource cs) { - if (cs == null) - return defineClass(name, b, (ProtectionDomain)null); - else - return defineClass(name, b, getProtectionDomain(cs)); + return defineClass(name, b, getProtectionDomain(cs)); } /** @@ -209,12 +208,10 @@ if (pd == null) { PermissionCollection perms = getPermissions(cs); pd = new ProtectionDomain(cs, perms, this, null); - if (pd != null) { - pdcache.put(cs, pd); - if (debug != null) { - debug.println(" getPermissions "+ pd); - debug.println(""); - } + pdcache.put(cs, pd); + if (debug != null) { + debug.println(" getPermissions "+ pd); + debug.println(""); } } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/util/TreeMap.java --- a/jdk/src/share/classes/java/util/TreeMap.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/util/TreeMap.java Wed Jul 05 16:51:11 2017 +0200 @@ -1068,14 +1068,14 @@ } public NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { - return new TreeSet<E>(m.subMap(fromElement, fromInclusive, - toElement, toInclusive)); + return new KeySet<E>(m.subMap(fromElement, fromInclusive, + toElement, toInclusive)); } public NavigableSet<E> headSet(E toElement, boolean inclusive) { - return new TreeSet<E>(m.headMap(toElement, inclusive)); + return new KeySet<E>(m.headMap(toElement, inclusive)); } public NavigableSet<E> tailSet(E fromElement, boolean inclusive) { - return new TreeSet<E>(m.tailMap(fromElement, inclusive)); + return new KeySet<E>(m.tailMap(fromElement, inclusive)); } public SortedSet<E> subSet(E fromElement, E toElement) { return subSet(fromElement, true, toElement, false); @@ -1087,7 +1087,7 @@ return tailSet(fromElement, true); } public NavigableSet<E> descendingSet() { - return new TreeSet(m.descendingMap()); + return new KeySet(m.descendingMap()); } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java --- a/jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/util/concurrent/ConcurrentSkipListMap.java Wed Jul 05 16:51:11 2017 +0200 @@ -2394,15 +2394,14 @@ boolean fromInclusive, E toElement, boolean toInclusive) { - return new ConcurrentSkipListSet<E> - (m.subMap(fromElement, fromInclusive, - toElement, toInclusive)); + return new KeySet<E>(m.subMap(fromElement, fromInclusive, + toElement, toInclusive)); } public NavigableSet<E> headSet(E toElement, boolean inclusive) { - return new ConcurrentSkipListSet<E>(m.headMap(toElement, inclusive)); + return new KeySet<E>(m.headMap(toElement, inclusive)); } public NavigableSet<E> tailSet(E fromElement, boolean inclusive) { - return new ConcurrentSkipListSet<E>(m.tailMap(fromElement, inclusive)); + return new KeySet<E>(m.tailMap(fromElement, inclusive)); } public NavigableSet<E> subSet(E fromElement, E toElement) { return subSet(fromElement, true, toElement, false); @@ -2414,7 +2413,7 @@ return tailSet(fromElement, true); } public NavigableSet<E> descendingSet() { - return new ConcurrentSkipListSet(m.descendingMap()); + return new KeySet(m.descendingMap()); } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java --- a/jdk/src/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.java Wed Jul 05 16:51:11 2017 +0200 @@ -166,6 +166,11 @@ static final int SIGNAL = -1; /** waitStatus value to indicate thread is waiting on condition */ static final int CONDITION = -2; + /** + * waitStatus value to indicate the next acquireShared should + * unconditionally propagate + */ + static final int PROPAGATE = -3; /** * Status field, taking on only the values: @@ -180,10 +185,16 @@ * Nodes never leave this state. In particular, * a thread with cancelled node never again blocks. * CONDITION: This node is currently on a condition queue. - * It will not be used as a sync queue node until - * transferred. (Use of this value here - * has nothing to do with the other uses - * of the field, but simplifies mechanics.) + * It will not be used as a sync queue node + * until transferred, at which time the status + * will be set to 0. (Use of this value here has + * nothing to do with the other uses of the + * field, but simplifies mechanics.) + * PROPAGATE: A releaseShared should be propagated to other + * nodes. This is set (for head node only) in + * doReleaseShared to ensure propagation + * continues, even if other operations have + * since intervened. * 0: None of the above * * The values are arranged numerically to simplify use. @@ -403,10 +414,13 @@ */ private void unparkSuccessor(Node node) { /* - * Try to clear status in anticipation of signalling. It is - * OK if this fails or if status is changed by waiting thread. + * If status is negative (i.e., possibly needing signal) try + * to clear in anticipation of signalling. It is OK if this + * fails or if status is changed by waiting thread. */ - compareAndSetWaitStatus(node, Node.SIGNAL, 0); + int ws = node.waitStatus; + if (ws < 0) + compareAndSetWaitStatus(node, ws, 0); /* * Thread to unpark is held in successor, which is normally @@ -426,23 +440,70 @@ } /** + * Release action for shared mode -- signal successor and ensure + * propagation. (Note: For exclusive mode, release just amounts + * to calling unparkSuccessor of head if it needs signal.) + */ + private void doReleaseShared() { + /* + * Ensure that a release propagates, even if there are other + * in-progress acquires/releases. This proceeds in the usual + * way of trying to unparkSuccessor of head if it needs + * signal. But if it does not, status is set to PROPAGATE to + * ensure that upon release, propagation continues. + * Additionally, we must loop in case a new node is added + * while we are doing this. Also, unlike other uses of + * unparkSuccessor, we need to know if CAS to reset status + * fails, if so rechecking. + */ + for (;;) { + Node h = head; + if (h != null && h != tail) { + int ws = h.waitStatus; + if (ws == Node.SIGNAL) { + if (!compareAndSetWaitStatus(h, Node.SIGNAL, 0)) + continue; // loop to recheck cases + unparkSuccessor(h); + } + else if (ws == 0 && + !compareAndSetWaitStatus(h, 0, Node.PROPAGATE)) + continue; // loop on failed CAS + } + if (h == head) // loop if head changed + break; + } + } + + /** * Sets head of queue, and checks if successor may be waiting - * in shared mode, if so propagating if propagate > 0. + * in shared mode, if so propagating if either propagate > 0 or + * PROPAGATE status was set. * - * @param pred the node holding waitStatus for node * @param node the node * @param propagate the return value from a tryAcquireShared */ private void setHeadAndPropagate(Node node, long propagate) { + Node h = head; // Record old head for check below setHead(node); - if (propagate > 0 && node.waitStatus != 0) { - /* - * Don't bother fully figuring out successor. If it - * looks null, call unparkSuccessor anyway to be safe. - */ + /* + * Try to signal next queued node if: + * Propagation was indicated by caller, + * or was recorded (as h.waitStatus) by a previous operation + * (note: this uses sign-check of waitStatus because + * PROPAGATE status may transition to SIGNAL.) + * and + * The next node is waiting in shared mode, + * or we don't know, because it appears null + * + * The conservatism in both of these checks may cause + * unnecessary wake-ups, but only when there are multiple + * racing acquires/releases, so most need signals now or soon + * anyway. + */ + if (propagate > 0 || h == null || h.waitStatus < 0) { Node s = node.next; if (s == null || s.isShared()) - unparkSuccessor(node); + doReleaseShared(); } } @@ -465,23 +526,27 @@ while (pred.waitStatus > 0) node.prev = pred = pred.prev; - // Getting this before setting waitStatus ensures staleness + // predNext is the apparent node to unsplice. CASes below will + // fail if not, in which case, we lost race vs another cancel + // or signal, so no further action is necessary. Node predNext = pred.next; - // Can use unconditional write instead of CAS here + // Can use unconditional write instead of CAS here. + // After this atomic step, other Nodes can skip past us. + // Before, we are free of interference from other threads. node.waitStatus = Node.CANCELLED; - // If we are the tail, remove ourselves + // If we are the tail, remove ourselves. if (node == tail && compareAndSetTail(node, pred)) { compareAndSetNext(pred, predNext, null); } else { - // If "active" predecessor found... - if (pred != head - && (pred.waitStatus == Node.SIGNAL - || compareAndSetWaitStatus(pred, 0, Node.SIGNAL)) - && pred.thread != null) { - - // If successor is active, set predecessor's next link + // If successor needs signal, try to set pred's next-link + // so it will get one. Otherwise wake it up to propagate. + int ws; + if (pred != head && + ((ws = pred.waitStatus) == Node.SIGNAL || + (ws <= 0 && compareAndSetWaitStatus(pred, ws, Node.SIGNAL))) && + pred.thread != null) { Node next = node.next; if (next != null && next.waitStatus <= 0) compareAndSetNext(pred, predNext, next); @@ -503,14 +568,14 @@ * @return {@code true} if thread should block */ private static boolean shouldParkAfterFailedAcquire(Node pred, Node node) { - int s = pred.waitStatus; - if (s < 0) + int ws = pred.waitStatus; + if (ws == Node.SIGNAL) /* * This node has already set status asking a release * to signal it, so it can safely park. */ return true; - if (s > 0) { + if (ws > 0) { /* * Predecessor was cancelled. Skip over predecessors and * indicate retry. @@ -519,14 +584,14 @@ node.prev = pred = pred.prev; } while (pred.waitStatus > 0); pred.next = node; - } - else + } else { /* - * Indicate that we need a signal, but don't park yet. Caller - * will need to retry to make sure it cannot acquire before - * parking. + * waitStatus must be 0 or PROPAGATE. Indicate that we + * need a signal, but don't park yet. Caller will need to + * retry to make sure it cannot acquire before parking. */ - compareAndSetWaitStatus(pred, 0, Node.SIGNAL); + compareAndSetWaitStatus(pred, ws, Node.SIGNAL); + } return false; } @@ -1046,9 +1111,7 @@ */ public final boolean releaseShared(long arg) { if (tryReleaseShared(arg)) { - Node h = head; - if (h != null && h.waitStatus != 0) - unparkSuccessor(h); + doReleaseShared(); return true; } return false; @@ -1390,8 +1453,8 @@ * case the waitStatus can be transiently and harmlessly wrong). */ Node p = enq(node); - int c = p.waitStatus; - if (c > 0 || !compareAndSetWaitStatus(p, c, Node.SIGNAL)) + int ws = p.waitStatus; + if (ws > 0 || !compareAndSetWaitStatus(p, ws, Node.SIGNAL)) LockSupport.unpark(node.thread); return true; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/util/concurrent/locks/AbstractQueuedSynchronizer.java --- a/jdk/src/share/classes/java/util/concurrent/locks/AbstractQueuedSynchronizer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/util/concurrent/locks/AbstractQueuedSynchronizer.java Wed Jul 05 16:51:11 2017 +0200 @@ -389,6 +389,11 @@ static final int SIGNAL = -1; /** waitStatus value to indicate thread is waiting on condition */ static final int CONDITION = -2; + /** + * waitStatus value to indicate the next acquireShared should + * unconditionally propagate + */ + static final int PROPAGATE = -3; /** * Status field, taking on only the values: @@ -403,10 +408,16 @@ * Nodes never leave this state. In particular, * a thread with cancelled node never again blocks. * CONDITION: This node is currently on a condition queue. - * It will not be used as a sync queue node until - * transferred. (Use of this value here - * has nothing to do with the other uses - * of the field, but simplifies mechanics.) + * It will not be used as a sync queue node + * until transferred, at which time the status + * will be set to 0. (Use of this value here has + * nothing to do with the other uses of the + * field, but simplifies mechanics.) + * PROPAGATE: A releaseShared should be propagated to other + * nodes. This is set (for head node only) in + * doReleaseShared to ensure propagation + * continues, even if other operations have + * since intervened. * 0: None of the above * * The values are arranged numerically to simplify use. @@ -626,10 +637,13 @@ */ private void unparkSuccessor(Node node) { /* - * Try to clear status in anticipation of signalling. It is - * OK if this fails or if status is changed by waiting thread. + * If status is negative (i.e., possibly needing signal) try + * to clear in anticipation of signalling. It is OK if this + * fails or if status is changed by waiting thread. */ - compareAndSetWaitStatus(node, Node.SIGNAL, 0); + int ws = node.waitStatus; + if (ws < 0) + compareAndSetWaitStatus(node, ws, 0); /* * Thread to unpark is held in successor, which is normally @@ -649,23 +663,70 @@ } /** + * Release action for shared mode -- signal successor and ensure + * propagation. (Note: For exclusive mode, release just amounts + * to calling unparkSuccessor of head if it needs signal.) + */ + private void doReleaseShared() { + /* + * Ensure that a release propagates, even if there are other + * in-progress acquires/releases. This proceeds in the usual + * way of trying to unparkSuccessor of head if it needs + * signal. But if it does not, status is set to PROPAGATE to + * ensure that upon release, propagation continues. + * Additionally, we must loop in case a new node is added + * while we are doing this. Also, unlike other uses of + * unparkSuccessor, we need to know if CAS to reset status + * fails, if so rechecking. + */ + for (;;) { + Node h = head; + if (h != null && h != tail) { + int ws = h.waitStatus; + if (ws == Node.SIGNAL) { + if (!compareAndSetWaitStatus(h, Node.SIGNAL, 0)) + continue; // loop to recheck cases + unparkSuccessor(h); + } + else if (ws == 0 && + !compareAndSetWaitStatus(h, 0, Node.PROPAGATE)) + continue; // loop on failed CAS + } + if (h == head) // loop if head changed + break; + } + } + + /** * Sets head of queue, and checks if successor may be waiting - * in shared mode, if so propagating if propagate > 0. + * in shared mode, if so propagating if either propagate > 0 or + * PROPAGATE status was set. * - * @param pred the node holding waitStatus for node * @param node the node * @param propagate the return value from a tryAcquireShared */ private void setHeadAndPropagate(Node node, int propagate) { + Node h = head; // Record old head for check below setHead(node); - if (propagate > 0 && node.waitStatus != 0) { - /* - * Don't bother fully figuring out successor. If it - * looks null, call unparkSuccessor anyway to be safe. - */ + /* + * Try to signal next queued node if: + * Propagation was indicated by caller, + * or was recorded (as h.waitStatus) by a previous operation + * (note: this uses sign-check of waitStatus because + * PROPAGATE status may transition to SIGNAL.) + * and + * The next node is waiting in shared mode, + * or we don't know, because it appears null + * + * The conservatism in both of these checks may cause + * unnecessary wake-ups, but only when there are multiple + * racing acquires/releases, so most need signals now or soon + * anyway. + */ + if (propagate > 0 || h == null || h.waitStatus < 0) { Node s = node.next; if (s == null || s.isShared()) - unparkSuccessor(node); + doReleaseShared(); } } @@ -688,23 +749,27 @@ while (pred.waitStatus > 0) node.prev = pred = pred.prev; - // Getting this before setting waitStatus ensures staleness + // predNext is the apparent node to unsplice. CASes below will + // fail if not, in which case, we lost race vs another cancel + // or signal, so no further action is necessary. Node predNext = pred.next; - // Can use unconditional write instead of CAS here + // Can use unconditional write instead of CAS here. + // After this atomic step, other Nodes can skip past us. + // Before, we are free of interference from other threads. node.waitStatus = Node.CANCELLED; - // If we are the tail, remove ourselves + // If we are the tail, remove ourselves. if (node == tail && compareAndSetTail(node, pred)) { compareAndSetNext(pred, predNext, null); } else { - // If "active" predecessor found... - if (pred != head - && (pred.waitStatus == Node.SIGNAL - || compareAndSetWaitStatus(pred, 0, Node.SIGNAL)) - && pred.thread != null) { - - // If successor is active, set predecessor's next link + // If successor needs signal, try to set pred's next-link + // so it will get one. Otherwise wake it up to propagate. + int ws; + if (pred != head && + ((ws = pred.waitStatus) == Node.SIGNAL || + (ws <= 0 && compareAndSetWaitStatus(pred, ws, Node.SIGNAL))) && + pred.thread != null) { Node next = node.next; if (next != null && next.waitStatus <= 0) compareAndSetNext(pred, predNext, next); @@ -726,14 +791,14 @@ * @return {@code true} if thread should block */ private static boolean shouldParkAfterFailedAcquire(Node pred, Node node) { - int s = pred.waitStatus; - if (s < 0) + int ws = pred.waitStatus; + if (ws == Node.SIGNAL) /* * This node has already set status asking a release * to signal it, so it can safely park. */ return true; - if (s > 0) { + if (ws > 0) { /* * Predecessor was cancelled. Skip over predecessors and * indicate retry. @@ -742,14 +807,14 @@ node.prev = pred = pred.prev; } while (pred.waitStatus > 0); pred.next = node; - } - else + } else { /* - * Indicate that we need a signal, but don't park yet. Caller - * will need to retry to make sure it cannot acquire before - * parking. + * waitStatus must be 0 or PROPAGATE. Indicate that we + * need a signal, but don't park yet. Caller will need to + * retry to make sure it cannot acquire before parking. */ - compareAndSetWaitStatus(pred, 0, Node.SIGNAL); + compareAndSetWaitStatus(pred, ws, Node.SIGNAL); + } return false; } @@ -1269,9 +1334,7 @@ */ public final boolean releaseShared(int arg) { if (tryReleaseShared(arg)) { - Node h = head; - if (h != null && h.waitStatus != 0) - unparkSuccessor(h); + doReleaseShared(); return true; } return false; @@ -1613,8 +1676,8 @@ * case the waitStatus can be transiently and harmlessly wrong). */ Node p = enq(node); - int c = p.waitStatus; - if (c > 0 || !compareAndSetWaitStatus(p, c, Node.SIGNAL)) + int ws = p.waitStatus; + if (ws > 0 || !compareAndSetWaitStatus(p, ws, Node.SIGNAL)) LockSupport.unpark(node.thread); return true; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/util/concurrent/locks/ReentrantReadWriteLock.java --- a/jdk/src/share/classes/java/util/concurrent/locks/ReentrantReadWriteLock.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/util/concurrent/locks/ReentrantReadWriteLock.java Wed Jul 05 16:51:11 2017 +0200 @@ -276,7 +276,7 @@ * Maintained as a ThreadLocal; cached in cachedHoldCounter */ static final class HoldCounter { - int count; + int count = 0; // Use id, not reference, to avoid garbage retention final long tid = Thread.currentThread().getId(); } @@ -293,8 +293,9 @@ } /** - * The number of read locks held by current thread. + * The number of reentrant read locks held by current thread. * Initialized only in constructor and readObject. + * Removed whenever a thread's read hold count drops to 0. */ private transient ThreadLocalHoldCounter readHolds; @@ -304,17 +305,35 @@ * where the next thread to release is the last one to * acquire. This is non-volatile since it is just used * as a heuristic, and would be great for threads to cache. + * + * <p>Can outlive the Thread for which it is caching the read + * hold count, but avoids garbage retention by not retaining a + * reference to the Thread. + * + * <p>Accessed via a benign data race; relies on the memory + * model's final field and out-of-thin-air guarantees. */ private transient HoldCounter cachedHoldCounter; /** * firstReader is the first thread to have acquired the read lock. * firstReaderHoldCount is firstReader's hold count. - * This allows tracking of read holds for uncontended read + * + * <p>More precisely, firstReader is the unique thread that last + * changed the shared count from 0 to 1, and has not released the + * read lock since then; null if there is no such thread. + * + * <p>Cannot cause garbage retention unless the thread terminated + * without relinquishing its read locks, since tryReleaseShared + * sets it to null. + * + * <p>Accessed via a benign data race; relies on the memory + * model's out-of-thin-air guarantees for references. + * + * <p>This allows tracking of read holds for uncontended read * locks to be very cheap. */ - private final static long INVALID_THREAD_ID = -1; - private transient long firstReader = INVALID_THREAD_ID; + private transient Thread firstReader = null; private transient int firstReaderHoldCount; Sync() { @@ -393,16 +412,16 @@ } protected final boolean tryReleaseShared(int unused) { - long tid = Thread.currentThread().getId(); - if (firstReader == tid) { + Thread current = Thread.currentThread(); + if (firstReader == current) { // assert firstReaderHoldCount > 0; if (firstReaderHoldCount == 1) - firstReader = INVALID_THREAD_ID; + firstReader = null; else firstReaderHoldCount--; } else { HoldCounter rh = cachedHoldCounter; - if (rh == null || rh.tid != tid) + if (rh == null || rh.tid != current.getId()) rh = readHolds.get(); int count = rh.count; if (count <= 1) { @@ -416,6 +435,9 @@ int c = getState(); int nextc = c - SHARED_UNIT; if (compareAndSetState(c, nextc)) + // Releasing the read lock has no effect on readers, + // but it may allow waiting writers to proceed if + // both read and write locks are now free. return nextc == 0; } } @@ -450,15 +472,14 @@ if (!readerShouldBlock() && r < MAX_COUNT && compareAndSetState(c, c + SHARED_UNIT)) { - long tid = current.getId(); if (r == 0) { - firstReader = tid; + firstReader = current; firstReaderHoldCount = 1; - } else if (firstReader == tid) { + } else if (firstReader == current) { firstReaderHoldCount++; } else { HoldCounter rh = cachedHoldCounter; - if (rh == null || rh.tid != tid) + if (rh == null || rh.tid != current.getId()) cachedHoldCounter = rh = readHolds.get(); else if (rh.count == 0) readHolds.set(rh); @@ -485,19 +506,17 @@ int c = getState(); if (exclusiveCount(c) != 0) { if (getExclusiveOwnerThread() != current) - //if (removeNeeded) readHolds.remove(); return -1; // else we hold the exclusive lock; blocking here // would cause deadlock. } else if (readerShouldBlock()) { // Make sure we're not acquiring read lock reentrantly - long tid = current.getId(); - if (firstReader == tid) { + if (firstReader == current) { // assert firstReaderHoldCount > 0; } else { if (rh == null) { rh = cachedHoldCounter; - if (rh == null || rh.tid != tid) { + if (rh == null || rh.tid != current.getId()) { rh = readHolds.get(); if (rh.count == 0) readHolds.remove(); @@ -510,25 +529,20 @@ if (sharedCount(c) == MAX_COUNT) throw new Error("Maximum lock count exceeded"); if (compareAndSetState(c, c + SHARED_UNIT)) { - long tid = current.getId(); if (sharedCount(c) == 0) { - firstReader = tid; + firstReader = current; firstReaderHoldCount = 1; - } else if (firstReader == tid) { + } else if (firstReader == current) { firstReaderHoldCount++; } else { - if (rh == null) { + if (rh == null) rh = cachedHoldCounter; - if (rh != null && rh.tid == tid) { - if (rh.count == 0) - readHolds.set(rh); - } else { - rh = readHolds.get(); - } - } else if (rh.count == 0) + if (rh == null || rh.tid != current.getId()) + rh = readHolds.get(); + else if (rh.count == 0) readHolds.set(rh); + rh.count++; cachedHoldCounter = rh; // cache for release - rh.count++; } return 1; } @@ -572,15 +586,14 @@ if (r == MAX_COUNT) throw new Error("Maximum lock count exceeded"); if (compareAndSetState(c, c + SHARED_UNIT)) { - long tid = current.getId(); if (r == 0) { - firstReader = tid; + firstReader = current; firstReaderHoldCount = 1; - } else if (firstReader == tid) { + } else if (firstReader == current) { firstReaderHoldCount++; } else { HoldCounter rh = cachedHoldCounter; - if (rh == null || rh.tid != tid) + if (rh == null || rh.tid != current.getId()) cachedHoldCounter = rh = readHolds.get(); else if (rh.count == 0) readHolds.set(rh); @@ -626,12 +639,12 @@ if (getReadLockCount() == 0) return 0; - long tid = Thread.currentThread().getId(); - if (firstReader == tid) + Thread current = Thread.currentThread(); + if (firstReader == current) return firstReaderHoldCount; HoldCounter rh = cachedHoldCounter; - if (rh != null && rh.tid == tid) + if (rh != null && rh.tid == current.getId()) return rh.count; int count = readHolds.get().count; @@ -647,7 +660,6 @@ throws java.io.IOException, ClassNotFoundException { s.defaultReadObject(); readHolds = new ThreadLocalHoldCounter(); - firstReader = INVALID_THREAD_ID; setState(0); // reset to unlocked state } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/util/zip/ZipConstants64.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/java/util/zip/ZipConstants64.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,77 @@ +/* + * Copyright 1995-1996 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +package java.util.zip; + +/* + * This class defines the constants that are used by the classes + * which manipulate Zip64 files. + */ + +class ZipConstants64 { + + /* + * ZIP64 constants + */ + static final long ZIP64_ENDSIG = 0x06064b50L; // "PK\006\006" + static final long ZIP64_LOCSIG = 0x07064b50L; // "PK\006\007" + static final int ZIP64_ENDHDR = 56; // ZIP64 end header size + static final int ZIP64_LOCHDR = 20; // ZIP64 end loc header size + static final int ZIP64_EXTHDR = 24; // EXT header size + static final int ZIP64_EXTID = 0x0001; // Extra field Zip64 header ID + + static final int ZIP64_MAGICCOUNT = 0xFFFF; + static final long ZIP64_MAGICVAL = 0xFFFFFFFFL; + + /* + * Zip64 End of central directory (END) header field offsets + */ + static final int ZIP64_ENDLEN = 4; // size of zip64 end of central dir + static final int ZIP64_ENDVEM = 12; // version made by + static final int ZIP64_ENDVER = 14; // version needed to extract + static final int ZIP64_ENDNMD = 16; // number of this disk + static final int ZIP64_ENDDSK = 20; // disk number of start + static final int ZIP64_ENDTOD = 24; // total number of entries on this disk + static final int ZIP64_ENDTOT = 32; // total number of entries + static final int ZIP64_ENDSIZ = 40; // central directory size in bytes + static final int ZIP64_ENDOFF = 48; // offset of first CEN header + static final int ZIP64_ENDEXT = 56; // zip64 extensible data sector + + /* + * Zip64 End of central directory locator field offsets + */ + static final int ZIP64_LOCDSK = 4; // disk number start + static final int ZIP64_LOCOFF = 8; // offset of zip64 end + static final int ZIP64_LOCTOT = 16; // total number of disks + + /* + * Zip64 Extra local (EXT) header field offsets + */ + static final int ZIP64_EXTCRC = 4; // uncompressed file crc-32 value + static final int ZIP64_EXTSIZ = 8; // compressed size, 8-byte + static final int ZIP64_EXTLEN = 16; // uncompressed size, 8-byte + + private ZipConstants64() {} +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/util/zip/ZipEntry.java --- a/jdk/src/share/classes/java/util/zip/ZipEntry.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/util/zip/ZipEntry.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -144,11 +144,13 @@ * Sets the uncompressed size of the entry data. * @param size the uncompressed size in bytes * @exception IllegalArgumentException if the specified size is less - * than 0 or greater than 0xFFFFFFFF bytes + * than 0, is greater than 0xFFFFFFFF when + * <a href="package-summary.html#zip64">ZIP64 format</a> is not supported, + * or is less than 0 when ZIP64 is supported * @see #getSize() */ public void setSize(long size) { - if (size < 0 || size > 0xFFFFFFFFL) { + if (size < 0) { throw new IllegalArgumentException("invalid entry size"); } this.size = size; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/util/zip/ZipInputStream.java --- a/jdk/src/share/classes/java/util/zip/ZipInputStream.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/util/zip/ZipInputStream.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ import java.io.IOException; import java.io.EOFException; import java.io.PushbackInputStream; +import static java.util.zip.ZipConstants64.*; /** * This class implements an input stream filter for reading files in the @@ -285,6 +286,29 @@ byte[] bb = new byte[len]; readFully(bb, 0, len); e.setExtra(bb); + // extra fields are in "HeaderID(2)DataSize(2)Data... format + if (e.csize == ZIP64_MAGICVAL || e.size == ZIP64_MAGICVAL) { + int off = 0; + while (off + 4 < len) { + int sz = get16(bb, off + 2); + if (get16(bb, off) == ZIP64_EXTID) { + off += 4; + // LOC extra zip64 entry MUST include BOTH original and + // compressed file size fields + if (sz < 16 || (off + sz) > len ) { + // Invalid zip64 extra fields, simply skip. Even it's + // rare, it's possible the entry size happens to be + // the magic value and it "accidnetly" has some bytes + // in extra match the id. + return e; + } + e.size = get64(bb, off); + e.csize = get64(bb, off + 8); + break; + } + off += (sz + 4); + } + } } return e; } @@ -375,18 +399,36 @@ } if ((flag & 8) == 8) { /* "Data Descriptor" present */ - readFully(tmpbuf, 0, EXTHDR); - long sig = get32(tmpbuf, 0); - if (sig != EXTSIG) { // no EXTSIG present - e.crc = sig; - e.csize = get32(tmpbuf, EXTSIZ - EXTCRC); - e.size = get32(tmpbuf, EXTLEN - EXTCRC); - ((PushbackInputStream)in).unread( - tmpbuf, EXTHDR - EXTCRC - 1, EXTCRC); + if (inf.getBytesWritten() > ZIP64_MAGICVAL || + inf.getBytesRead() > ZIP64_MAGICVAL) { + // ZIP64 format + readFully(tmpbuf, 0, ZIP64_EXTHDR); + long sig = get32(tmpbuf, 0); + if (sig != EXTSIG) { // no EXTSIG present + e.crc = sig; + e.csize = get64(tmpbuf, ZIP64_EXTSIZ - ZIP64_EXTCRC); + e.size = get64(tmpbuf, ZIP64_EXTLEN - ZIP64_EXTCRC); + ((PushbackInputStream)in).unread( + tmpbuf, ZIP64_EXTHDR - ZIP64_EXTCRC - 1, ZIP64_EXTCRC); + } else { + e.crc = get32(tmpbuf, ZIP64_EXTCRC); + e.csize = get64(tmpbuf, ZIP64_EXTSIZ); + e.size = get64(tmpbuf, ZIP64_EXTLEN); + } } else { - e.crc = get32(tmpbuf, EXTCRC); - e.csize = get32(tmpbuf, EXTSIZ); - e.size = get32(tmpbuf, EXTLEN); + readFully(tmpbuf, 0, EXTHDR); + long sig = get32(tmpbuf, 0); + if (sig != EXTSIG) { // no EXTSIG present + e.crc = sig; + e.csize = get32(tmpbuf, EXTSIZ - EXTCRC); + e.size = get32(tmpbuf, EXTLEN - EXTCRC); + ((PushbackInputStream)in).unread( + tmpbuf, EXTHDR - EXTCRC - 1, EXTCRC); + } else { + e.crc = get32(tmpbuf, EXTCRC); + e.csize = get32(tmpbuf, EXTSIZ); + e.size = get32(tmpbuf, EXTLEN); + } } } if (e.size != inf.getBytesWritten()) { @@ -433,6 +475,14 @@ * The bytes are assumed to be in Intel (little-endian) byte order. */ private static final long get32(byte b[], int off) { - return get16(b, off) | ((long)get16(b, off+2) << 16); + return (get16(b, off) | ((long)get16(b, off+2) << 16)) & 0xffffffffL; + } + + /* + * Fetches signed 64-bit value from byte array at specified offset. + * The bytes are assumed to be in Intel (little-endian) byte order. + */ + private static final long get64(byte b[], int off) { + return get32(b, off) | (get32(b, off+4) << 32); } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/util/zip/ZipOutputStream.java --- a/jdk/src/share/classes/java/util/zip/ZipOutputStream.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/util/zip/ZipOutputStream.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ import java.io.IOException; import java.util.Vector; import java.util.HashSet; +import static java.util.zip.ZipConstants64.*; /** * This class implements an output stream filter for writing files in the @@ -343,26 +344,52 @@ private void writeLOC(XEntry xentry) throws IOException { ZipEntry e = xentry.entry; int flag = xentry.flag; + int elen = (e.extra != null) ? e.extra.length : 0; + boolean hasZip64 = false; + writeInt(LOCSIG); // LOC header signature - writeShort(version(e)); // version needed to extract - writeShort(flag); // general purpose bit flag - writeShort(e.method); // compression method - writeInt(e.time); // last modification time + if ((flag & 8) == 8) { + writeShort(version(e)); // version needed to extract + writeShort(flag); // general purpose bit flag + writeShort(e.method); // compression method + writeInt(e.time); // last modification time + // store size, uncompressed size, and crc-32 in data descriptor // immediately following compressed entry data writeInt(0); writeInt(0); writeInt(0); } else { - writeInt(e.crc); // crc-32 - writeInt(e.csize); // compressed size - writeInt(e.size); // uncompressed size + if (e.csize >= ZIP64_MAGICVAL || e.size >= ZIP64_MAGICVAL) { + hasZip64 = true; + writeShort(45); // ver 4.5 for zip64 + } else { + writeShort(version(e)); // version needed to extract + } + writeShort(flag); // general purpose bit flag + writeShort(e.method); // compression method + writeInt(e.time); // last modification time + writeInt(e.crc); // crc-32 + if (hasZip64) { + writeInt(ZIP64_MAGICVAL); + writeInt(ZIP64_MAGICVAL); + elen += 20; //headid(2) + size(2) + size(8) + csize(8) + } else { + writeInt(e.csize); // compressed size + writeInt(e.size); // uncompressed size + } } byte[] nameBytes = getUTF8Bytes(e.name); writeShort(nameBytes.length); - writeShort(e.extra != null ? e.extra.length : 0); + writeShort(elen); writeBytes(nameBytes, 0, nameBytes.length); + if (hasZip64) { + writeShort(ZIP64_EXTID); + writeShort(16); + writeLong(e.size); + writeLong(e.csize); + } if (e.extra != null) { writeBytes(e.extra, 0, e.extra.length); } @@ -375,8 +402,13 @@ private void writeEXT(ZipEntry e) throws IOException { writeInt(EXTSIG); // EXT header signature writeInt(e.crc); // crc-32 - writeInt(e.csize); // compressed size - writeInt(e.size); // uncompressed size + if (e.csize >= ZIP64_MAGICVAL || e.size >= ZIP64_MAGICVAL) { + writeLong(e.csize); + writeLong(e.size); + } else { + writeInt(e.csize); // compressed size + writeInt(e.size); // uncompressed size + } } /* @@ -387,18 +419,49 @@ ZipEntry e = xentry.entry; int flag = xentry.flag; int version = version(e); + + long csize = e.csize; + long size = e.size; + long offset = xentry.offset; + int e64len = 0; + boolean hasZip64 = false; + if (e.csize >= ZIP64_MAGICVAL) { + csize = ZIP64_MAGICVAL; + e64len += 8; // csize(8) + hasZip64 = true; + } + if (e.size >= ZIP64_MAGICVAL) { + size = ZIP64_MAGICVAL; // size(8) + e64len += 8; + hasZip64 = true; + } + if (xentry.offset >= ZIP64_MAGICVAL) { + offset = ZIP64_MAGICVAL; + e64len += 8; // offset(8) + hasZip64 = true; + } writeInt(CENSIG); // CEN header signature - writeShort(version); // version made by - writeShort(version); // version needed to extract + if (hasZip64) { + writeShort(45); // ver 4.5 for zip64 + writeShort(45); + } else { + writeShort(version); // version made by + writeShort(version); // version needed to extract + } writeShort(flag); // general purpose bit flag writeShort(e.method); // compression method writeInt(e.time); // last modification time writeInt(e.crc); // crc-32 - writeInt(e.csize); // compressed size - writeInt(e.size); // uncompressed size + writeInt(csize); // compressed size + writeInt(size); // uncompressed size byte[] nameBytes = getUTF8Bytes(e.name); writeShort(nameBytes.length); - writeShort(e.extra != null ? e.extra.length : 0); + if (hasZip64) { + // + headid(2) + datasize(2) + writeShort(e64len + 4 + (e.extra != null ? e.extra.length : 0)); + } else { + writeShort(e.extra != null ? e.extra.length : 0); + } byte[] commentBytes; if (e.comment != null) { commentBytes = getUTF8Bytes(e.comment); @@ -410,8 +473,18 @@ writeShort(0); // starting disk number writeShort(0); // internal file attributes (unused) writeInt(0); // external file attributes (unused) - writeInt(xentry.offset); // relative offset of local header + writeInt(offset); // relative offset of local header writeBytes(nameBytes, 0, nameBytes.length); + if (hasZip64) { + writeShort(ZIP64_EXTID);// Zip64 extra + writeShort(e64len); + if (size == ZIP64_MAGICVAL) + writeLong(e.size); + if (csize == ZIP64_MAGICVAL) + writeLong(e.csize); + if (offset == ZIP64_MAGICVAL) + writeLong(xentry.offset); + } if (e.extra != null) { writeBytes(e.extra, 0, e.extra.length); } @@ -424,15 +497,50 @@ * Writes end of central directory (END) header. */ private void writeEND(long off, long len) throws IOException { + boolean hasZip64 = false; + long xlen = len; + long xoff = off; + if (xlen >= ZIP64_MAGICVAL) { + xlen = ZIP64_MAGICVAL; + hasZip64 = true; + } + if (xoff >= ZIP64_MAGICVAL) { + xoff = ZIP64_MAGICVAL; + hasZip64 = true; + } int count = xentries.size(); - writeInt(ENDSIG); // END record signature - writeShort(0); // number of this disk - writeShort(0); // central directory start disk - writeShort(count); // number of directory entries on disk - writeShort(count); // total number of directory entries - writeInt(len); // length of central directory - writeInt(off); // offset of central directory - if (comment != null) { // zip file comment + if (count >= ZIP64_MAGICCOUNT) { + count = ZIP64_MAGICCOUNT; + hasZip64 = true; + } + if (hasZip64) { + long off64 = written; + //zip64 end of central directory record + writeInt(ZIP64_ENDSIG); // zip64 END record signature + writeLong(ZIP64_ENDHDR - 12); // size of zip64 end + writeShort(45); // version made by + writeShort(45); // version needed to extract + writeInt(0); // number of this disk + writeInt(0); // central directory start disk + writeLong(xentries.size()); // number of directory entires on disk + writeLong(xentries.size()); // number of directory entires + writeLong(len); // length of central directory + writeLong(off); // offset of central directory + + //zip64 end of central directory locator + writeInt(ZIP64_LOCSIG); // zip64 END locator signature + writeInt(0); // zip64 END start disk + writeLong(off64); // offset of zip64 END + writeInt(1); // total number of disks (?) + } + writeInt(ENDSIG); // END record signature + writeShort(0); // number of this disk + writeShort(0); // central directory start disk + writeShort(count); // number of directory entries on disk + writeShort(count); // total number of directory entries + writeInt(xlen); // length of central directory + writeInt(xoff); // offset of central directory + if (comment != null) { // zip file comment byte[] b = getUTF8Bytes(comment); writeShort(b.length); writeBytes(b, 0, b.length); @@ -464,6 +572,22 @@ } /* + * Writes a 64-bit int to the output stream in little-endian byte order. + */ + private void writeLong(long v) throws IOException { + OutputStream out = this.out; + out.write((int)((v >>> 0) & 0xff)); + out.write((int)((v >>> 8) & 0xff)); + out.write((int)((v >>> 16) & 0xff)); + out.write((int)((v >>> 24) & 0xff)); + out.write((int)((v >>> 32) & 0xff)); + out.write((int)((v >>> 40) & 0xff)); + out.write((int)((v >>> 48) & 0xff)); + out.write((int)((v >>> 56) & 0xff)); + written += 8; + } + + /* * Writes an array of bytes to the output stream. */ private void writeBytes(byte[] b, int off, int len) throws IOException { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/java/util/zip/package.html --- a/jdk/src/share/classes/java/util/zip/package.html Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/java/util/zip/package.html Wed Jul 05 16:51:11 2017 +0200 @@ -46,6 +46,13 @@ </a> - a detailed description of the Info-ZIP format upon which the <code>java.util.zip</code> classes are based. <p> + <a name="zip64"> + <li>An implementation may optionally support the ZIP64(tm) format extensions + defined by the + <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT"> + PKWARE ZIP File Format Specification</a>. The ZIP64(tm) format extensions + are used to overcome the size limitations of the original ZIP format. +<p> <li><a href="http://www.isi.edu/in-notes/rfc1950.txt"> ZLIB Compressed Data Format Specification version 3.3</a>   @@ -70,7 +77,6 @@ <li>CRC-32 checksum is described in RFC 1952 (above) <p> <li>Adler-32 checksum is described in RFC 1950 (above) - </ul> diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/AbstractButton.java --- a/jdk/src/share/classes/javax/swing/AbstractButton.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/AbstractButton.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1545,6 +1545,9 @@ * A mnemonic must correspond to a single key on the keyboard * and should be specified using one of the <code>VK_XXX</code> * keycodes defined in <code>java.awt.event.KeyEvent</code>. + * These codes and the wider array of codes for international + * keyboards may be obtained through + * <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code>. * Mnemonics are case-insensitive, therefore a key event * with the corresponding keycode would cause the button to be * activated whether or not the Shift modifier was pressed. diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/Action.java --- a/jdk/src/share/classes/javax/swing/Action.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/Action.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -272,7 +272,9 @@ * one of the <code>KeyEvent</code> key codes. The value is * commonly used to specify a mnemonic. For example: * <code>myAction.putValue(Action.MNEMONIC_KEY, KeyEvent.VK_A)</code> - * sets the mnemonic of <code>myAction</code> to 'a'. + * sets the mnemonic of <code>myAction</code> to 'a', while + * <code>myAction.putValue(Action.MNEMONIC_KEY, KeyEvent.getExtendedKeyCodeForChar('\u0444'))</code> + * sets the mnemonic of <code>myAction</code> to Cyrillic letter "Ef". * * @since 1.3 */ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/JComponent.java --- a/jdk/src/share/classes/javax/swing/JComponent.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/JComponent.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -2888,7 +2888,10 @@ return false; } // Get the KeyStroke + // There may be two keystrokes associated with a low-level key event; + // in this case a keystroke made of an extended key code has a priority. KeyStroke ks; + KeyStroke ksE = null; if (e.getID() == KeyEvent.KEY_TYPED) { ks = KeyStroke.getKeyStroke(e.getKeyChar()); @@ -2896,9 +2899,18 @@ else { ks = KeyStroke.getKeyStroke(e.getKeyCode(),e.getModifiers(), (pressed ? false:true)); + if (e.getKeyCode() != e.getExtendedKeyCode()) { + ksE = KeyStroke.getKeyStroke(e.getExtendedKeyCode(),e.getModifiers(), + (pressed ? false:true)); + } } - /* Do we have a key binding for e? */ + // Do we have a key binding for e? + // If we have a binding by an extended code, use it. + // If not, check for regular code binding. + if(ksE != null && processKeyBinding(ksE, e, WHEN_FOCUSED, pressed)) { + return true; + } if(processKeyBinding(ks, e, WHEN_FOCUSED, pressed)) return true; @@ -2910,6 +2922,9 @@ while (parent != null && !(parent instanceof Window) && !(parent instanceof Applet)) { if(parent instanceof JComponent) { + if(ksE != null && ((JComponent)parent).processKeyBinding(ksE, e, + WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, pressed)) + return true; if(((JComponent)parent).processKeyBinding(ks, e, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, pressed)) return true; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/JLabel.java --- a/jdk/src/share/classes/javax/swing/JLabel.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/JLabel.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -503,10 +503,10 @@ * @see #setDisplayedMnemonic(int) */ public void setDisplayedMnemonic(char aChar) { - int vk = (int) aChar; - if(vk >= 'a' && vk <='z') - vk -= ('a' - 'A'); - setDisplayedMnemonic(vk); + int vk = java.awt.event.KeyEvent.getExtendedKeyCodeForChar(aChar); + if (vk != java.awt.event.KeyEvent.VK_UNDEFINED) { + setDisplayedMnemonic(vk); + } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/JTabbedPane.java --- a/jdk/src/share/classes/javax/swing/JTabbedPane.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/JTabbedPane.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1628,7 +1628,9 @@ * <p> * A mnemonic must correspond to a single key on the keyboard * and should be specified using one of the <code>VK_XXX</code> - * keycodes defined in <code>java.awt.event.KeyEvent</code>. + * keycodes defined in <code>java.awt.event.KeyEvent</code> + * or one of the extended keycodes obtained through + * <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code>. * Mnemonics are case-insensitive, therefore a key event * with the corresponding keycode would cause the button to be * activated whether or not the Shift modifier was pressed. diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/KeyStroke.java --- a/jdk/src/share/classes/javax/swing/KeyStroke.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/KeyStroke.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -162,6 +162,9 @@ * <li>java.awt.event.KeyEvent.VK_TAB * <li>java.awt.event.KeyEvent.VK_SPACE * </ul> + * Alternatively, the key code may be obtained by calling + * <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code>. + * * The modifiers consist of any combination of:<ul> * <li>java.awt.event.InputEvent.SHIFT_DOWN_MASK * <li>java.awt.event.InputEvent.CTRL_DOWN_MASK @@ -210,6 +213,9 @@ * <li>java.awt.event.KeyEvent.VK_TAB * <li>java.awt.event.KeyEvent.VK_SPACE * </ul> + * Alternatively, the key code may be obtained by calling + * <code>java.awt.event.KeyEvent.getExtendedKeyCodeForChar</code>. + * * The modifiers consist of any combination of:<ul> * <li>java.awt.event.InputEvent.SHIFT_DOWN_MASK * <li>java.awt.event.InputEvent.CTRL_DOWN_MASK diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/KeyboardManager.java --- a/jdk/src/share/classes/javax/swing/KeyboardManager.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/KeyboardManager.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1998-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -212,19 +212,35 @@ Thread.dumpStack(); } + // There may be two keystrokes associated with a low-level key event; + // in this case a keystroke made of an extended key code has a priority. KeyStroke ks; + KeyStroke ksE = null; if(e.getID() == KeyEvent.KEY_TYPED) { ks=KeyStroke.getKeyStroke(e.getKeyChar()); } else { + if(e.getKeyCode() != e.getExtendedKeyCode()) { + ksE=KeyStroke.getKeyStroke(e.getExtendedKeyCode(), e.getModifiers(), !pressed); + } ks=KeyStroke.getKeyStroke(e.getKeyCode(), e.getModifiers(), !pressed); } Hashtable keyMap = containerMap.get(topAncestor); if (keyMap != null) { // this container isn't registered, so bail - Object tmp = keyMap.get(ks); + Object tmp = null; + // extended code has priority + if( ksE != null ) { + tmp = keyMap.get(ksE); + if( tmp != null ) { + ks = ksE; + } + } + if( tmp == null ) { + tmp = keyMap.get(ks); + } if (tmp == null) { // don't do anything @@ -269,7 +285,12 @@ while (iter.hasMoreElements()) { JMenuBar mb = (JMenuBar)iter.nextElement(); if ( mb.isShowing() && mb.isEnabled() ) { // don't want to give these out - fireBinding(mb, ks, e, pressed); + if( !(ks.equals(ksE)) ) { + fireBinding(mb, ksE, e, pressed); + } + if(ks.equals(ksE) || !e.isConsumed()) { + fireBinding(mb, ks, e, pressed); + } if (e.isConsumed()) { return true; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/PopupFactory.java --- a/jdk/src/share/classes/javax/swing/PopupFactory.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/PopupFactory.java Wed Jul 05 16:51:11 2017 +0200 @@ -552,14 +552,15 @@ boolean result = false; Component component = getComponent(); if (owner != null && component != null) { - Container parent = (Container) SwingUtilities.getRoot(owner); int popupWidth = component.getWidth(); int popupHeight = component.getHeight(); - Rectangle parentBounds = parent.getBounds(); + + Container parent = (Container) SwingUtilities.getRoot(owner); if (parent instanceof JFrame || parent instanceof JDialog || parent instanceof JWindow) { + Rectangle parentBounds = parent.getBounds(); Insets i = parent.getInsets(); parentBounds.x += i.left; parentBounds.y += i.top; @@ -577,11 +578,11 @@ .contains(x, y, popupWidth, popupHeight); } } else if (parent instanceof JApplet) { + Rectangle parentBounds = parent.getBounds(); Point p = parent.getLocationOnScreen(); parentBounds.x = p.x; parentBounds.y = p.y; - result = parentBounds - .contains(x, y, popupWidth, popupHeight); + result = parentBounds.contains(x, y, popupWidth, popupHeight); } } return result; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/RepaintManager.java --- a/jdk/src/share/classes/javax/swing/RepaintManager.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/RepaintManager.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,6 +34,7 @@ import java.util.*; import java.applet.*; +import sun.awt.AWTAccessor; import sun.awt.AppContext; import sun.awt.DisplayChangedListener; import sun.awt.SunToolkit; @@ -716,6 +717,44 @@ } } + private Map<Component,Rectangle> + updateWindows(Map<Component,Rectangle> dirtyComponents) + { + Toolkit toolkit = Toolkit.getDefaultToolkit(); + if (!(toolkit instanceof SunToolkit && + ((SunToolkit)toolkit).needUpdateWindow())) + { + return dirtyComponents; + } + + Set<Window> windows = new HashSet<Window>(); + Set<Component> dirtyComps = dirtyComponents.keySet(); + for (Iterator<Component> it = dirtyComps.iterator(); it.hasNext();) { + Component dirty = it.next(); + Window window = dirty instanceof Window ? + (Window)dirty : + SwingUtilities.getWindowAncestor(dirty); + + if (window != null && + !AWTAccessor.getWindowAccessor().isOpaque(window)) + { + // if this component's toplevel is perpixel translucent, it will + // be repainted below + it.remove(); + // add to the set of windows to update (so that we don't update + // the window many times for each component to be repainted that + // belongs to this window) + windows.add(window); + } + } + + for (Window window : windows) { + AWTAccessor.getWindowAccessor().updateWindow(window, null); + } + + return dirtyComponents; + } + /** * Paint all of the components that have been marked dirty. * @@ -749,6 +788,10 @@ int localBoundsW; Enumeration keys; + // the components belonging to perpixel-translucent windows will be + // removed from the list + tmpDirtyComponents = updateWindows(tmpDirtyComponents); + roots = new ArrayList<Component>(count); for (Component dirty : tmpDirtyComponents.keySet()) { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/SwingUtilities.java --- a/jdk/src/share/classes/javax/swing/SwingUtilities.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/SwingUtilities.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1589,15 +1589,6 @@ * processing the key bindings associated with JComponents. */ static boolean isValidKeyEventForKeyBindings(KeyEvent e) { - if (e.getID() == KeyEvent.KEY_TYPED) { - int mod = e.getModifiers(); - if (((mod & ActionEvent.ALT_MASK) != 0) && - ((mod & ActionEvent.CTRL_MASK) == 0)) { - // filter out typed "alt-?" keys, but not those created - // with AltGr, and not control characters - return false; - } - } return true; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/SwingWorker.java --- a/jdk/src/share/classes/javax/swing/SwingWorker.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/SwingWorker.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -778,35 +778,33 @@ threadFactory); appContext.put(SwingWorker.class, executorService); - //register shutdown hook for this executor service + // Don't use ShutdownHook here as it's not enough. We should track + // AppContext disposal instead of JVM shutdown, see 6799345 for details final ExecutorService es = executorService; - final Runnable shutdownHook = - new Runnable() { - final WeakReference<ExecutorService> executorServiceRef = - new WeakReference<ExecutorService>(es); - public void run() { - final ExecutorService executorService = - executorServiceRef.get(); - if (executorService != null) { - AccessController.doPrivileged( - new PrivilegedAction<Void>() { - public Void run() { - executorService.shutdown(); - return null; + appContext.addPropertyChangeListener(AppContext.DISPOSED_PROPERTY_NAME, + new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent pce) { + boolean disposed = (Boolean)pce.getNewValue(); + if (disposed) { + final WeakReference<ExecutorService> executorServiceRef = + new WeakReference<ExecutorService>(es); + final ExecutorService executorService = + executorServiceRef.get(); + if (executorService != null) { + AccessController.doPrivileged( + new PrivilegedAction<Void>() { + public Void run() { + executorService.shutdown(); + return null; + } } - }); + ); + } } } - }; - - AccessController.doPrivileged( - new PrivilegedAction<Void>() { - public Void run() { - Runtime.getRuntime().addShutdownHook( - new Thread(shutdownHook)); - return null; - } - }); + } + ); } return executorService; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/TimerQueue.java --- a/jdk/src/share/classes/javax/swing/TimerQueue.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/TimerQueue.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -191,7 +191,12 @@ } finally { timer.getLock().unlock(); } - } catch (InterruptedException ignore) { + } catch (InterruptedException ie) { + // Shouldn't ignore InterruptedExceptions here, so AppContext + // is disposed gracefully, see 6799345 for details + if (AppContext.getAppContext().isDisposed()) { + break; + } } } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/UIManager.java --- a/jdk/src/share/classes/javax/swing/UIManager.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/UIManager.java Wed Jul 05 16:51:11 2017 +0200 @@ -58,6 +58,8 @@ import sun.security.action.GetPropertyAction; import sun.swing.SwingUtilities2; import java.lang.reflect.Method; +import java.util.HashMap; +import sun.awt.AppContext; /** @@ -1323,19 +1325,29 @@ return; } - String metalLnf = getCrossPlatformLookAndFeelClassName(); - String lnfDefault = metalLnf; + // Try to get default LAF from system property, then from AppContext + // (6653395), then use cross-platform one by default. + String lafName = null; + HashMap lafData = + (HashMap) AppContext.getAppContext().remove("swing.lafdata"); + if (lafData != null) { + lafName = (String) lafData.remove("defaultlaf"); + } + if (lafName == null) { + lafName = getCrossPlatformLookAndFeelClassName(); + } + lafName = swingProps.getProperty(defaultLAFKey, lafName); - String lnfName = "<undefined>" ; try { - lnfName = swingProps.getProperty(defaultLAFKey, lnfDefault); - setLookAndFeel(lnfName); + setLookAndFeel(lafName); } catch (Exception e) { - try { - lnfName = swingProps.getProperty(defaultLAFKey, metalLnf); - setLookAndFeel(lnfName); - } catch (Exception e2) { - throw new Error("can't load " + lnfName); + throw new Error("Cannot load " + lafName); + } + + // Set any properties passed through AppContext (6653395). + if (lafData != null) { + for (Object key: lafData.keySet()) { + UIManager.put(key, lafData.get(key)); } } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java Wed Jul 05 16:51:11 2017 +0200 @@ -27,6 +27,7 @@ import java.io.File; import java.util.*; +import java.util.concurrent.Callable; import javax.swing.*; import javax.swing.filechooser.*; import javax.swing.event.*; @@ -223,113 +224,115 @@ this.fid = fid; } - private void invokeLater(DoChangeContents runnable) { - runnables.addElement(runnable); - SwingUtilities.invokeLater(runnable); - } - public void run() { run0(); setBusy(false, fid); } public void run0() { - FileSystemView fileSystem = filechooser.getFileSystemView(); + DoChangeContents doChangeContents = ShellFolder.getInvoker().invoke(new Callable<DoChangeContents>() { + public DoChangeContents call() throws Exception { + FileSystemView fileSystem = filechooser.getFileSystemView(); - File[] list = fileSystem.getFiles(currentDirectory, filechooser.isFileHidingEnabled()); + File[] list = fileSystem.getFiles(currentDirectory, filechooser.isFileHidingEnabled()); - Vector<File> acceptsList = new Vector<File>(); + Vector<File> acceptsList = new Vector<File>(); - if (isInterrupted()) { - return; - } + if (isInterrupted()) { + return null; + } - // run through the file list, add directories and selectable files to fileCache - for (File file : list) { - if (filechooser.accept(file)) { - acceptsList.addElement(file); - } - } + // run through the file list, add directories and selectable files to fileCache + for (File file : list) { + if (filechooser.accept(file)) { + acceptsList.addElement(file); + } + } - if (isInterrupted()) { - return; - } + if (isInterrupted()) { + return null; + } - // First sort alphabetically by filename - sort(acceptsList); + // First sort alphabetically by filename + sort(acceptsList); - Vector<File> newDirectories = new Vector<File>(50); - Vector<File> newFiles = new Vector<File>(); - // run through list grabbing directories in chunks of ten - for(int i = 0; i < acceptsList.size(); i++) { - File f = acceptsList.elementAt(i); - boolean isTraversable = filechooser.isTraversable(f); - if (isTraversable) { - newDirectories.addElement(f); - } else if (!isTraversable && filechooser.isFileSelectionEnabled()) { - newFiles.addElement(f); - } - if(isInterrupted()) { - return; - } - } + Vector<File> newDirectories = new Vector<File>(50); + Vector<File> newFiles = new Vector<File>(); + // run through list grabbing directories in chunks of ten + for (int i = 0; i < acceptsList.size(); i++) { + File f = acceptsList.elementAt(i); + boolean isTraversable = filechooser.isTraversable(f); + if (isTraversable) { + newDirectories.addElement(f); + } else if (!isTraversable && filechooser.isFileSelectionEnabled()) { + newFiles.addElement(f); + } + if (isInterrupted()) { + return null; + } + } - Vector<File> newFileCache = new Vector<File>(newDirectories); - newFileCache.addAll(newFiles); + Vector<File> newFileCache = new Vector<File>(newDirectories); + newFileCache.addAll(newFiles); - int newSize = newFileCache.size(); - int oldSize = fileCache.size(); + int newSize = newFileCache.size(); + int oldSize = fileCache.size(); - if (newSize > oldSize) { - //see if interval is added - int start = oldSize; - int end = newSize; - for (int i = 0; i < oldSize; i++) { - if (!newFileCache.get(i).equals(fileCache.get(i))) { - start = i; - for (int j = i; j < newSize; j++) { - if (newFileCache.get(j).equals(fileCache.get(i))) { - end = j; + if (newSize > oldSize) { + //see if interval is added + int start = oldSize; + int end = newSize; + for (int i = 0; i < oldSize; i++) { + if (!newFileCache.get(i).equals(fileCache.get(i))) { + start = i; + for (int j = i; j < newSize; j++) { + if (newFileCache.get(j).equals(fileCache.get(i))) { + end = j; + break; + } + } break; } } - break; + if (start >= 0 && end > start + && newFileCache.subList(end, newSize).equals(fileCache.subList(start, oldSize))) { + if (isInterrupted()) { + return null; + } + return new DoChangeContents(newFileCache.subList(start, end), start, null, 0, fid); + } + } else if (newSize < oldSize) { + //see if interval is removed + int start = -1; + int end = -1; + for (int i = 0; i < newSize; i++) { + if (!newFileCache.get(i).equals(fileCache.get(i))) { + start = i; + end = i + oldSize - newSize; + break; + } + } + if (start >= 0 && end > start + && fileCache.subList(end, oldSize).equals(newFileCache.subList(start, newSize))) { + if (isInterrupted()) { + return null; + } + return new DoChangeContents(null, 0, new Vector(fileCache.subList(start, end)), start, fid); + } } - } - if (start >= 0 && end > start - && newFileCache.subList(end, newSize).equals(fileCache.subList(start, oldSize))) { - if(isInterrupted()) { - return; + if (!fileCache.equals(newFileCache)) { + if (isInterrupted()) { + cancelRunnables(runnables); + } + return new DoChangeContents(newFileCache, 0, fileCache, 0, fid); } - invokeLater(new DoChangeContents(newFileCache.subList(start, end), start, null, 0, fid)); - newFileCache = null; + return null; } - } else if (newSize < oldSize) { - //see if interval is removed - int start = -1; - int end = -1; - for (int i = 0; i < newSize; i++) { - if (!newFileCache.get(i).equals(fileCache.get(i))) { - start = i; - end = i + oldSize - newSize; - break; - } - } - if (start >= 0 && end > start - && fileCache.subList(end, oldSize).equals(newFileCache.subList(start, newSize))) { - if(isInterrupted()) { - return; - } - invokeLater(new DoChangeContents(null, 0, new Vector<File>(fileCache.subList(start, end)), - start, fid)); - newFileCache = null; - } - } - if (newFileCache != null && !fileCache.equals(newFileCache)) { - if (isInterrupted()) { - cancelRunnables(runnables); - } - invokeLater(new DoChangeContents(newFileCache, 0, fileCache, 0, fid)); + }); + + if (doChangeContents != null) { + runnables.addElement(doChangeContents); + SwingUtilities.invokeLater(doChangeContents); } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java --- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicSliderUI.java Wed Jul 05 16:51:11 2017 +0200 @@ -1004,47 +1004,62 @@ g.setColor(DefaultLookup.getColor(slider, this, "Slider.tickColor", Color.black)); if ( slider.getOrientation() == JSlider.HORIZONTAL ) { - g.translate( 0, tickBounds.y); + g.translate(0, tickBounds.y); - int value = slider.getMinimum(); - int xPos; + if (slider.getMinorTickSpacing() > 0) { + int value = slider.getMinimum(); - if ( slider.getMinorTickSpacing() > 0 ) { while ( value <= slider.getMaximum() ) { - xPos = xPositionForValue( value ); + int xPos = xPositionForValue(value); paintMinorTickForHorizSlider( g, tickBounds, xPos ); + + // Overflow checking + if (Integer.MAX_VALUE - slider.getMinorTickSpacing() < value) { + break; + } + value += slider.getMinorTickSpacing(); } } - if ( slider.getMajorTickSpacing() > 0 ) { - value = slider.getMinimum(); + if (slider.getMajorTickSpacing() > 0) { + int value = slider.getMinimum(); while ( value <= slider.getMaximum() ) { - xPos = xPositionForValue( value ); + int xPos = xPositionForValue(value); paintMajorTickForHorizSlider( g, tickBounds, xPos ); + + // Overflow checking + if (Integer.MAX_VALUE - slider.getMajorTickSpacing() < value) { + break; + } + value += slider.getMajorTickSpacing(); } } g.translate( 0, -tickBounds.y); - } - else { - g.translate(tickBounds.x, 0); + } else { + g.translate(tickBounds.x, 0); - int value = slider.getMinimum(); - int yPos; - - if ( slider.getMinorTickSpacing() > 0 ) { + if (slider.getMinorTickSpacing() > 0) { int offset = 0; if(!BasicGraphicsUtils.isLeftToRight(slider)) { offset = tickBounds.width - tickBounds.width / 2; g.translate(offset, 0); } - while ( value <= slider.getMaximum() ) { - yPos = yPositionForValue( value ); + int value = slider.getMinimum(); + + while (value <= slider.getMaximum()) { + int yPos = yPositionForValue(value); paintMinorTickForVertSlider( g, tickBounds, yPos ); + + // Overflow checking + if (Integer.MAX_VALUE - slider.getMinorTickSpacing() < value) { + break; + } + value += slider.getMinorTickSpacing(); } @@ -1053,15 +1068,22 @@ } } - if ( slider.getMajorTickSpacing() > 0 ) { - value = slider.getMinimum(); + if (slider.getMajorTickSpacing() > 0) { if(!BasicGraphicsUtils.isLeftToRight(slider)) { g.translate(2, 0); } - while ( value <= slider.getMaximum() ) { - yPos = yPositionForValue( value ); + int value = slider.getMinimum(); + + while (value <= slider.getMaximum()) { + int yPos = yPositionForValue(value); paintMajorTickForVertSlider( g, tickBounds, yPos ); + + // Overflow checking + if (Integer.MAX_VALUE - slider.getMajorTickSpacing() < value) { + break; + } + value += slider.getMajorTickSpacing(); } @@ -1775,8 +1797,6 @@ thumbMiddle = thumbLeft + halfThumbWidth; slider.setValue(valueForXPosition(thumbMiddle)); break; - default: - return; } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java --- a/jdk/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/plaf/metal/MetalFileChooserUI.java Wed Jul 05 16:51:11 2017 +0200 @@ -38,6 +38,8 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.util.*; +import java.security.AccessController; +import java.security.PrivilegedAction; import javax.accessibility.*; import sun.awt.shell.ShellFolder; @@ -937,7 +939,11 @@ File[] baseFolders; if (useShellFolder) { - baseFolders = (File[])ShellFolder.get("fileChooserComboBoxFolders"); + baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() { + public File[] run() { + return (File[]) ShellFolder.get("fileChooserComboBoxFolders"); + } + }); } else { baseFolders = fsv.getRoots(); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthTabbedPaneUI.java Wed Jul 05 16:51:11 2017 +0200 @@ -233,7 +233,7 @@ tabContext.getStyle().getGraphicsUtils(tabContext).layoutText( tabContext, metrics, title, icon, SwingUtilities.CENTER, SwingUtilities.CENTER, SwingUtilities.LEADING, - SwingUtilities.TRAILING, calcRect, + SwingUtilities.CENTER, calcRect, iconRect, textRect, textIconGap); return textRect.y + metrics.getAscent() + getBaselineOffset(); } @@ -426,7 +426,7 @@ ss.getStyle().getGraphicsUtils(ss).layoutText(ss, metrics, title, icon, SwingUtilities.CENTER, SwingUtilities.CENTER, - SwingUtilities.LEADING, SwingUtilities.TRAILING, + SwingUtilities.LEADING, SwingUtilities.CENTER, tabRect, iconRect, textRect, textIconGap); tabPane.putClientProperty("html", null); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/text/GlyphView.java --- a/jdk/src/share/classes/javax/swing/text/GlyphView.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/text/GlyphView.java Wed Jul 05 16:51:11 2017 +0200 @@ -30,6 +30,7 @@ import java.util.BitSet; import java.util.Locale; +import javax.swing.UIManager; import sun.swing.SwingUtilities2; /** @@ -382,11 +383,10 @@ Color bg = getBackground(); Color fg = getForeground(); - if (c instanceof JTextComponent) { - JTextComponent tc = (JTextComponent) c; - if (!tc.isEnabled()) { - fg = tc.getDisabledTextColor(); - } + if (c != null && ! c.isEnabled()) { + fg = (c instanceof JTextComponent ? + ((JTextComponent)c).getDisabledTextColor() : + UIManager.getColor("textInactiveText")); } if (bg != null) { g.setColor(bg); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/text/LayoutQueue.java diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/text/html/ImageView.java --- a/jdk/src/share/classes/javax/swing/text/html/ImageView.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/text/html/ImageView.java Wed Jul 05 16:51:11 2017 +0200 @@ -25,9 +25,7 @@ package javax.swing.text.html; import java.awt.*; -import java.awt.event.*; import java.awt.image.ImageObserver; -import java.io.*; import java.net.*; import java.util.Dictionary; import javax.swing.*; @@ -97,6 +95,7 @@ private AttributeSet attr; private Image image; + private Image disabledImage; private int width; private int height; /** Bitmask containing some of the above bitmask values. Because the @@ -193,6 +192,17 @@ return image; } + private Image getImage(boolean enabled) { + Image img = getImage(); + if (! enabled) { + if (disabledImage == null) { + disabledImage = GrayFilter.createDisabledImage(img); + } + img = disabledImage; + } + return img; + } + /** * Sets how the image is loaded. If <code>newValue</code> is true, * the image we be loaded when first asked for, otherwise it will @@ -338,8 +348,6 @@ Rectangle rect = (a instanceof Rectangle) ? (Rectangle)a : a.getBounds(); - - Image image = getImage(); Rectangle clip = g.getClipBounds(); fBounds.setBounds(rect); @@ -350,29 +358,29 @@ rect.width - leftInset - rightInset, rect.height - topInset - bottomInset); } - if (image != null) { - if (!hasPixels(image)) { + + Container host = getContainer(); + Image img = getImage(host == null || host.isEnabled()); + if (img != null) { + if (! hasPixels(img)) { // No pixels yet, use the default - Icon icon = (image == null) ? getNoImageIcon() : - getLoadingImageIcon(); - + Icon icon = getLoadingImageIcon(); if (icon != null) { - icon.paintIcon(getContainer(), g, rect.x + leftInset, - rect.y + topInset); + icon.paintIcon(host, g, + rect.x + leftInset, rect.y + topInset); } } else { // Draw the image - g.drawImage(image, rect.x + leftInset, rect.y + topInset, + g.drawImage(img, rect.x + leftInset, rect.y + topInset, width, height, imageObserver); } } else { Icon icon = getNoImageIcon(); - if (icon != null) { - icon.paintIcon(getContainer(), g, rect.x + leftInset, - rect.y + topInset); + icon.paintIcon(host, g, + rect.x + leftInset, rect.y + topInset); } View view = getAltView(); // Paint the view representing the alt text, if its non-null @@ -855,7 +863,9 @@ // it will pick up the new height/width, if necessary. public boolean imageUpdate(Image img, int flags, int x, int y, int newWidth, int newHeight ) { - if (image == null || image != img || getParent() == null) { + if (img != image && img != disabledImage || + image == null || getParent() == null) { + return false; } @@ -873,6 +883,8 @@ if ((state & HEIGHT_FLAG) != HEIGHT_FLAG) { height = DEFAULT_HEIGHT; } + } else { + disabledImage = null; } if ((state & LOADING_FLAG) == LOADING_FLAG) { // No need to resize or repaint, still in the process @@ -885,38 +897,37 @@ return false; } - // Resize image if necessary: - short changed = 0; - if ((flags & ImageObserver.HEIGHT) != 0 && !getElement(). - getAttributes().isDefined(HTML.Attribute.HEIGHT)) { - changed |= 1; - } - if ((flags & ImageObserver.WIDTH) != 0 && !getElement(). - getAttributes().isDefined(HTML.Attribute.WIDTH)) { - changed |= 2; - } + if (image == img) { + // Resize image if necessary: + short changed = 0; + if ((flags & ImageObserver.HEIGHT) != 0 && !getElement(). + getAttributes().isDefined(HTML.Attribute.HEIGHT)) { + changed |= 1; + } + if ((flags & ImageObserver.WIDTH) != 0 && !getElement(). + getAttributes().isDefined(HTML.Attribute.WIDTH)) { + changed |= 2; + } - synchronized(ImageView.this) { - if (image != img) { - return false; - } - if ((changed & 1) == 1 && (state & WIDTH_FLAG) == 0) { - width = newWidth; + synchronized(ImageView.this) { + if ((changed & 1) == 1 && (state & WIDTH_FLAG) == 0) { + width = newWidth; + } + if ((changed & 2) == 2 && (state & HEIGHT_FLAG) == 0) { + height = newHeight; + } + if ((state & LOADING_FLAG) == LOADING_FLAG) { + // No need to resize or repaint, still in the process of + // loading. + return true; + } } - if ((changed & 2) == 2 && (state & HEIGHT_FLAG) == 0) { - height = newHeight; - } - if ((state & LOADING_FLAG) == LOADING_FLAG) { - // No need to resize or repaint, still in the process of - // loading. + if (changed != 0) { + // May need to resize myself, asynchronously: + safePreferenceChanged(); return true; } } - if (changed != 0) { - // May need to resize myself, asynchronously: - safePreferenceChanged(); - return true; - } // Repaint when done or when new pixels arrive: if ((flags & (FRAMEBITS|ALLBITS)) != 0) { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/javax/swing/text/html/StyleSheet.java --- a/jdk/src/share/classes/javax/swing/text/html/StyleSheet.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/javax/swing/text/html/StyleSheet.java Wed Jul 05 16:51:11 2017 +0200 @@ -31,6 +31,7 @@ import java.net.*; import javax.swing.Icon; import javax.swing.ImageIcon; +import javax.swing.UIManager; import javax.swing.border.*; import javax.swing.event.ChangeListener; import javax.swing.text.*; @@ -2161,6 +2162,7 @@ */ public void paint(Graphics g, float x, float y, float w, float h, View v, int item) { View cv = v.getView(item); + Container host = v.getContainer(); Object name = cv.getElement().getAttributes().getAttribute (StyleConstants.NameAttribute); // Only draw something if the View is a list item. This won't @@ -2171,7 +2173,7 @@ } // deside on what side draw bullets, etc. isLeftToRight = - cv.getContainer().getComponentOrientation().isLeftToRight(); + host.getComponentOrientation().isLeftToRight(); // How the list indicator is aligned is not specified, it is // left up to the UA. IE and NS differ on this behavior. @@ -2200,15 +2202,15 @@ } // set the color of a decoration - if (ss != null) { - g.setColor(ss.getForeground(cv.getAttributes())); - } else { - g.setColor(Color.black); - } + Color c = (host.isEnabled() + ? (ss != null + ? ss.getForeground(cv.getAttributes()) + : host.getForeground()) + : UIManager.getColor("textInactiveText")); + g.setColor(c); if (img != null) { - drawIcon(g, (int) x, (int) y, (int) w, (int) h, align, - v.getContainer()); + drawIcon(g, (int) x, (int) y, (int) w, (int) h, align, host); return; } CSS.Value childtype = getChildType(cv); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/awt/AWTAccessor.java --- a/jdk/src/share/classes/sun/awt/AWTAccessor.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/awt/AWTAccessor.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,46 +26,229 @@ package sun.awt; import java.awt.*; +import java.awt.geom.Point2D; +import java.awt.image.BufferedImage; + import sun.misc.Unsafe; -/** The AWTAccessor utility class. +/** + * The AWTAccessor utility class. * The main purpose of this class is to enable accessing * private and package-private fields of classes from * different classes/packages. See sun.misc.SharedSecretes * for another example. */ public final class AWTAccessor { + private static final Unsafe unsafe = Unsafe.getUnsafe(); - /** We don't need any objects of this class. + /* + * We don't need any objects of this class. * It's rather a collection of static methods * and interfaces. */ private AWTAccessor() { } - /** An accessor for the java.awt.Component class. + /* + * An interface of accessor for the java.awt.Component class. */ public interface ComponentAccessor { - // See 6797587 - // Also see: 6776743, 6768307, and 6768332. - /** + /* + * Sets whether the native background erase for a component + * has been disabled via SunToolkit.disableBackgroundErase(). + */ + void setBackgroundEraseDisabled(Component comp, boolean disabled); + /* + * Indicates whether the native background erase for a + * component has been disabled via + * SunToolkit.disableBackgroundErase(). + */ + boolean getBackgroundEraseDisabled(Component comp); + /* + * + * Gets the bounds of this component in the form of a + * <code>Rectangle</code> object. The bounds specify this + * component's width, height, and location relative to + * its parent. + */ + Rectangle getBounds(Component comp); + /* * Sets the shape of a lw component to cut out from hw components. + * + * See 6797587, 6776743, 6768307, and 6768332 for details */ void setMixingCutoutShape(Component comp, Shape shape); + + /** + * Sets GraphicsConfiguration value for the component. + */ + void setGraphicsConfiguration(Component comp, GraphicsConfiguration gc); + /* + * Requests focus to the component. + */ + boolean requestFocus(Component comp, CausedFocusEvent.Cause cause); + /* + * Determines if the component can gain focus. + */ + boolean canBeFocusOwner(Component comp); + + /** + * Returns whether the component is visible without invoking + * any client code. + */ + boolean isVisible_NoClientCode(Component comp); } - /* The java.awt.Component class accessor object. + /* + * An interface of accessor for java.awt.Window class. + */ + public interface WindowAccessor { + /* + * Get opacity level of the given window. + */ + float getOpacity(Window window); + /* + * Set opacity level to the given window. + */ + void setOpacity(Window window, float opacity); + /* + * Get a shape assigned to the given window. + */ + Shape getShape(Window window); + /* + * Set a shape to the given window. + */ + void setShape(Window window, Shape shape); + /* + * Identify whether the given window is opaque (true) + * or translucent (false). + */ + boolean isOpaque(Window window); + /* + * Set the opaque preoperty to the given window. + */ + void setOpaque(Window window, boolean isOpaque); + /* + * Update the image of a non-opaque (translucent) window. + */ + void updateWindow(Window window, BufferedImage backBuffer); + + /** Get the size of the security warning. + */ + Dimension getSecurityWarningSize(Window w); + + /** + * Set the size of the security warning. + */ + void setSecurityWarningSize(Window w, int width, int height); + + /** Set the position of the security warning. + */ + void setSecurityWarningPosition(Window w, Point2D point, + float alignmentX, float alignmentY); + + /** Request to recalculate the new position of the security warning for + * the given window size/location as reported by the native system. + */ + Point2D calculateSecurityWarningPosition(Window window, + double x, double y, double w, double h); + } + + /* + * An accessor for the AWTEvent class. + */ + public interface AWTEventAccessor { + /* + * + * Sets the flag on this AWTEvent indicating that it was + * generated by the system. + */ + void setSystemGenerated(AWTEvent ev); + /* + * + * Indicates whether this AWTEvent was generated by the system. + */ + boolean isSystemGenerated(AWTEvent ev); + } + + /* + * An accessor for the java.awt.Frame class. + */ + public interface FrameAccessor { + /* + * Sets the state of this frame. + */ + void setExtendedState(Frame frame, int state); + /* + * Gets the state of this frame. + */ + int getExtendedState(Frame frame); + } + + /* + * An interface of accessor for the java.awt.KeyboardFocusManager class. + */ + public interface KeyboardFocusManagerAccessor { + /* + * Indicates whether the native implementation should + * proceed with a pending focus request for the heavyweight. + */ + int shouldNativelyFocusHeavyweight(Component heavyweight, + Component descendant, + boolean temporary, + boolean focusedWindowChangeAllowed, + long time, + CausedFocusEvent.Cause cause); + /* + * Delivers focus for the lightweight descendant of the heavyweight + * synchronously. + */ + boolean processSynchronousLightweightTransfer(Component heavyweight, + Component descendant, + boolean temporary, + boolean focusedWindowChangeAllowed, + long time); + /* + * Removes the last focus request for the heavyweight from the queue. + */ + void removeLastFocusRequest(Component heavyweight); + } + + /* + * The java.awt.Component class accessor object. */ private static ComponentAccessor componentAccessor; - /** Set an accessor object for the java.awt.Component class. + /* + * The java.awt.Window class accessor object. + */ + private static WindowAccessor windowAccessor; + + /* + * The java.awt.AWTEvent class accessor object. + */ + private static AWTEventAccessor awtEventAccessor; + + /* + * The java.awt.Frame class accessor object. + */ + private static FrameAccessor frameAccessor; + + /* + * The java.awt.KeyboardFocusManager class accessor object. + */ + private static KeyboardFocusManagerAccessor kfmAccessor; + + /* + * Set an accessor object for the java.awt.Component class. */ public static void setComponentAccessor(ComponentAccessor ca) { componentAccessor = ca; } - /** Retrieve the accessor object for the java.awt.Window class. + /* + * Retrieve the accessor object for the java.awt.Window class. */ public static ComponentAccessor getComponentAccessor() { if (componentAccessor == null) { @@ -74,4 +257,69 @@ return componentAccessor; } + + /* + * Set an accessor object for the java.awt.Window class. + */ + public static void setWindowAccessor(WindowAccessor wa) { + windowAccessor = wa; + } + + /* + * Retrieve the accessor object for the java.awt.Window class. + */ + public static WindowAccessor getWindowAccessor() { + if (windowAccessor == null) { + unsafe.ensureClassInitialized(Window.class); + } + return windowAccessor; + } + + /* + * Set an accessor object for the java.awt.AWTEvent class. + */ + public static void setAWTEventAccessor(AWTEventAccessor aea) { + awtEventAccessor = aea; + } + + /* + * Retrieve the accessor object for the java.awt.AWTEvent class. + */ + public static AWTEventAccessor getAWTEventAccessor() { + return awtEventAccessor; + } + + /* + * Set an accessor object for the java.awt.Frame class. + */ + public static void setFrameAccessor(FrameAccessor fa) { + frameAccessor = fa; + } + + /* + * Retrieve the accessor object for the java.awt.Frame class. + */ + public static FrameAccessor getFrameAccessor() { + if (frameAccessor == null) { + unsafe.ensureClassInitialized(Frame.class); + } + return frameAccessor; + } + + /* + * Set an accessor object for the java.awt.KeyboardFocusManager class. + */ + public static void setKeyboardFocusManagerAccessor(KeyboardFocusManagerAccessor kfma) { + kfmAccessor = kfma; + } + + /* + * Retrieve the accessor object for the java.awt.KeyboardFocusManager class. + */ + public static KeyboardFocusManagerAccessor getKeyboardFocusManagerAccessor() { + if (kfmAccessor == null) { + unsafe.ensureClassInitialized(KeyboardFocusManager.class); + } + return kfmAccessor; + } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/awt/ComponentAccessor.java --- a/jdk/src/share/classes/sun/awt/ComponentAccessor.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/awt/ComponentAccessor.java Wed Jul 05 16:51:11 2017 +0200 @@ -73,7 +73,6 @@ private static Field fieldPacked; private static Field fieldIgnoreRepaint; private static Field fieldPeer; - private static Method methodResetGC; private static Field fieldVisible; private static Method methodIsEnabledImpl; private static Method methodGetCursorNoClientCode; @@ -124,9 +123,6 @@ fieldPeer = componentClass.getDeclaredField("peer"); fieldPeer.setAccessible(true); - methodResetGC = componentClass.getDeclaredMethod("resetGC", (Class[]) null); - methodResetGC.setAccessible(true); - fieldVisible = componentClass.getDeclaredField("visible"); fieldVisible.setAccessible(true); @@ -425,18 +421,6 @@ return false; } - public static void resetGC(Component c) { - try { - methodResetGC.invoke(c, (Object[]) null); - } - catch (IllegalAccessException e) { - log.log(Level.FINE, "Unable to access the Component object", e); - } - catch (InvocationTargetException e) { - log.log(Level.FINE, "Unable to invoke on the Component object", e); - } - } - public static boolean getVisible(Component c) { try { return fieldVisible.getBoolean(c); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/awt/EmbeddedFrame.java --- a/jdk/src/share/classes/sun/awt/EmbeddedFrame.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/awt/EmbeddedFrame.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -585,5 +585,14 @@ } public void updateMinimumSize() { } - } + + public void setOpacity(float opacity) { + } + public void setOpaque(boolean isOpaque) { + } + public void updateWindow(BufferedImage backBuffer) { + } + public void repositionSecurityWarning() { + } + } } // class EmbeddedFrame diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/awt/ExtendedKeyCodes.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/sun/awt/ExtendedKeyCodes.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,670 @@ +package sun.awt; + +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.awt.event.KeyEvent; + +public class ExtendedKeyCodes { + /** + * ATTN: These are the readonly hashes with load factor == 1; + * adding a value, please set the inital capacity to exact number of items + * or higher. + */ + // Keycodes declared in KeyEvent.java with corresponding Unicode values. + private final static HashMap<Integer, Integer> regularKeyCodesMap = + new HashMap<Integer,Integer>(122, 1.0f); + + // Keycodes derived from Unicode values. Here should be collected codes + // for characters appearing on the primary layer of at least one + // known keyboard layout. For instance, sterling sign is on the primary layer + // of the Mac Italian layout. + private final static HashSet<Integer> extendedKeyCodesSet = + new HashSet<Integer>(501, 1.0f); + final public static int getExtendedKeyCodeForChar( int c ) { + int rc = KeyEvent.VK_UNDEFINED; + int uc = Character.toUpperCase( c ); + int lc = Character.toLowerCase( c ); + if (regularKeyCodesMap.containsKey( c )) { + if(regularKeyCodesMap.containsKey(uc)) { + return regularKeyCodesMap.get( uc ); + } + return regularKeyCodesMap.get( c ); + } + uc += 0x01000000; + lc += 0x01000000; + if (extendedKeyCodesSet.contains( uc )) { + return uc; + }else if (extendedKeyCodesSet.contains( lc )) { + return lc; + } + return rc; + } + static { + regularKeyCodesMap.put(0x0a, KeyEvent.VK_ENTER); + regularKeyCodesMap.put(0x08, KeyEvent.VK_BACK_SPACE); + regularKeyCodesMap.put(0x09, KeyEvent.VK_TAB); + regularKeyCodesMap.put(0x1B, KeyEvent.VK_ESCAPE); + regularKeyCodesMap.put(0x20, KeyEvent.VK_SPACE); + regularKeyCodesMap.put(0x21, KeyEvent.VK_PAGE_UP); + regularKeyCodesMap.put(0x22, KeyEvent.VK_PAGE_DOWN); + regularKeyCodesMap.put(0x23, KeyEvent.VK_END); + regularKeyCodesMap.put(0x24, KeyEvent.VK_HOME); + regularKeyCodesMap.put(0x25, KeyEvent.VK_LEFT); + regularKeyCodesMap.put(0x26, KeyEvent.VK_UP); + regularKeyCodesMap.put(0x27, KeyEvent.VK_RIGHT); + regularKeyCodesMap.put(0x28, KeyEvent.VK_DOWN); + regularKeyCodesMap.put(0x2C, KeyEvent.VK_COMMA); + regularKeyCodesMap.put(0x2D, KeyEvent.VK_MINUS); + regularKeyCodesMap.put(0x2E, KeyEvent.VK_PERIOD); + regularKeyCodesMap.put(0x2F, KeyEvent.VK_SLASH); + regularKeyCodesMap.put(0x30, KeyEvent.VK_0); + regularKeyCodesMap.put(0x31, KeyEvent.VK_1); + regularKeyCodesMap.put(0x32, KeyEvent.VK_2); + regularKeyCodesMap.put(0x33, KeyEvent.VK_3); + regularKeyCodesMap.put(0x34, KeyEvent.VK_4); + regularKeyCodesMap.put(0x35, KeyEvent.VK_5); + regularKeyCodesMap.put(0x36, KeyEvent.VK_6); + regularKeyCodesMap.put(0x37, KeyEvent.VK_7); + regularKeyCodesMap.put(0x38, KeyEvent.VK_8); + regularKeyCodesMap.put(0x39, KeyEvent.VK_9); + regularKeyCodesMap.put(0x3B, KeyEvent.VK_SEMICOLON); + regularKeyCodesMap.put(0x3D, KeyEvent.VK_EQUALS); + regularKeyCodesMap.put(0x41, KeyEvent.VK_A); + regularKeyCodesMap.put(0x61, KeyEvent.VK_A); + regularKeyCodesMap.put(0x42, KeyEvent.VK_B); + regularKeyCodesMap.put(0x62, KeyEvent.VK_B); + regularKeyCodesMap.put(0x43, KeyEvent.VK_C); + regularKeyCodesMap.put(0x63, KeyEvent.VK_C); + regularKeyCodesMap.put(0x44, KeyEvent.VK_D); + regularKeyCodesMap.put(0x64, KeyEvent.VK_D); + regularKeyCodesMap.put(0x45, KeyEvent.VK_E); + regularKeyCodesMap.put(0x65, KeyEvent.VK_E); + regularKeyCodesMap.put(0x46, KeyEvent.VK_F); + regularKeyCodesMap.put(0x66, KeyEvent.VK_F); + regularKeyCodesMap.put(0x47, KeyEvent.VK_G); + regularKeyCodesMap.put(0x67, KeyEvent.VK_G); + regularKeyCodesMap.put(0x48, KeyEvent.VK_H); + regularKeyCodesMap.put(0x68, KeyEvent.VK_H); + regularKeyCodesMap.put(0x49, KeyEvent.VK_I); + regularKeyCodesMap.put(0x69, KeyEvent.VK_I); + regularKeyCodesMap.put(0x4A, KeyEvent.VK_J); + regularKeyCodesMap.put(0x6A, KeyEvent.VK_J); + regularKeyCodesMap.put(0x4B, KeyEvent.VK_K); + regularKeyCodesMap.put(0x6B, KeyEvent.VK_K); + regularKeyCodesMap.put(0x4C, KeyEvent.VK_L); + regularKeyCodesMap.put(0x6C, KeyEvent.VK_L); + regularKeyCodesMap.put(0x4D, KeyEvent.VK_M); + regularKeyCodesMap.put(0x6D, KeyEvent.VK_M); + regularKeyCodesMap.put(0x4E, KeyEvent.VK_N); + regularKeyCodesMap.put(0x6E, KeyEvent.VK_N); + regularKeyCodesMap.put(0x4F, KeyEvent.VK_O); + regularKeyCodesMap.put(0x6F, KeyEvent.VK_O); + regularKeyCodesMap.put(0x50, KeyEvent.VK_P); + regularKeyCodesMap.put(0x70, KeyEvent.VK_P); + regularKeyCodesMap.put(0x51, KeyEvent.VK_Q); + regularKeyCodesMap.put(0x71, KeyEvent.VK_Q); + regularKeyCodesMap.put(0x52, KeyEvent.VK_R); + regularKeyCodesMap.put(0x72, KeyEvent.VK_R); + regularKeyCodesMap.put(0x53, KeyEvent.VK_S); + regularKeyCodesMap.put(0x73, KeyEvent.VK_S); + regularKeyCodesMap.put(0x54, KeyEvent.VK_T); + regularKeyCodesMap.put(0x74, KeyEvent.VK_T); + regularKeyCodesMap.put(0x55, KeyEvent.VK_U); + regularKeyCodesMap.put(0x75, KeyEvent.VK_U); + regularKeyCodesMap.put(0x56, KeyEvent.VK_V); + regularKeyCodesMap.put(0x76, KeyEvent.VK_V); + regularKeyCodesMap.put(0x57, KeyEvent.VK_W); + regularKeyCodesMap.put(0x77, KeyEvent.VK_W); + regularKeyCodesMap.put(0x58, KeyEvent.VK_X); + regularKeyCodesMap.put(0x78, KeyEvent.VK_X); + regularKeyCodesMap.put(0x59, KeyEvent.VK_Y); + regularKeyCodesMap.put(0x79, KeyEvent.VK_Y); + regularKeyCodesMap.put(0x5A, KeyEvent.VK_Z); + regularKeyCodesMap.put(0x7A, KeyEvent.VK_Z); + regularKeyCodesMap.put(0x5B, KeyEvent.VK_OPEN_BRACKET); + regularKeyCodesMap.put(0x5C, KeyEvent.VK_BACK_SLASH); + regularKeyCodesMap.put(0x5D, KeyEvent.VK_CLOSE_BRACKET); +// regularKeyCodesMap.put(0x60, KeyEvent.VK_NUMPAD0); +// regularKeyCodesMap.put(0x61, KeyEvent.VK_NUMPAD1); +// regularKeyCodesMap.put(0x62, KeyEvent.VK_NUMPAD2); +// regularKeyCodesMap.put(0x63, KeyEvent.VK_NUMPAD3); +// regularKeyCodesMap.put(0x64, KeyEvent.VK_NUMPAD4); +// regularKeyCodesMap.put(0x65, KeyEvent.VK_NUMPAD5); +// regularKeyCodesMap.put(0x66, KeyEvent.VK_NUMPAD6); +// regularKeyCodesMap.put(0x67, KeyEvent.VK_NUMPAD7); +// regularKeyCodesMap.put(0x68, KeyEvent.VK_NUMPAD8); +// regularKeyCodesMap.put(0x69, KeyEvent.VK_NUMPAD9); + regularKeyCodesMap.put(0x6A, KeyEvent.VK_MULTIPLY); + regularKeyCodesMap.put(0x6B, KeyEvent.VK_ADD); + regularKeyCodesMap.put(0x6C, KeyEvent.VK_SEPARATER); + regularKeyCodesMap.put(0x6D, KeyEvent.VK_SUBTRACT); + regularKeyCodesMap.put(0x6E, KeyEvent.VK_DECIMAL); + regularKeyCodesMap.put(0x6F, KeyEvent.VK_DIVIDE); + regularKeyCodesMap.put(0x7F, KeyEvent.VK_DELETE); + regularKeyCodesMap.put(0xC0, KeyEvent.VK_BACK_QUOTE); + regularKeyCodesMap.put(0xDE, KeyEvent.VK_QUOTE); + regularKeyCodesMap.put(0x26, KeyEvent.VK_AMPERSAND); + regularKeyCodesMap.put(0x2A, KeyEvent.VK_ASTERISK); + regularKeyCodesMap.put(0x22, KeyEvent.VK_QUOTEDBL); + regularKeyCodesMap.put(0x3C, KeyEvent.VK_LESS); + regularKeyCodesMap.put(0x3E, KeyEvent.VK_GREATER); + regularKeyCodesMap.put(0x7B, KeyEvent.VK_BRACELEFT); + regularKeyCodesMap.put(0x7D, KeyEvent.VK_BRACERIGHT); + regularKeyCodesMap.put(0x40, KeyEvent.VK_AT); + regularKeyCodesMap.put(0x3A, KeyEvent.VK_COLON); + regularKeyCodesMap.put(0x5E, KeyEvent.VK_CIRCUMFLEX); + regularKeyCodesMap.put(0x24, KeyEvent.VK_DOLLAR); + regularKeyCodesMap.put(0x20AC, KeyEvent.VK_EURO_SIGN); + regularKeyCodesMap.put(0x21, KeyEvent.VK_EXCLAMATION_MARK); + regularKeyCodesMap.put(0xA1, KeyEvent.VK_INVERTED_EXCLAMATION_MARK); + regularKeyCodesMap.put(0x28, KeyEvent.VK_LEFT_PARENTHESIS); + regularKeyCodesMap.put(0x23, KeyEvent.VK_NUMBER_SIGN); + regularKeyCodesMap.put(0x2B, KeyEvent.VK_PLUS); + regularKeyCodesMap.put(0x29, KeyEvent.VK_RIGHT_PARENTHESIS); + regularKeyCodesMap.put(0x5F, KeyEvent.VK_UNDERSCORE); + + + extendedKeyCodesSet.add(0x01000000+0x0060); + extendedKeyCodesSet.add(0x01000000+0x007C); + extendedKeyCodesSet.add(0x01000000+0x007E); + extendedKeyCodesSet.add(0x01000000+0x00A2); + extendedKeyCodesSet.add(0x01000000+0x00A3); + extendedKeyCodesSet.add(0x01000000+0x00A5); + extendedKeyCodesSet.add(0x01000000+0x00A7); + extendedKeyCodesSet.add(0x01000000+0x00A8); + extendedKeyCodesSet.add(0x01000000+0x00AB); + extendedKeyCodesSet.add(0x01000000+0x00B0); + extendedKeyCodesSet.add(0x01000000+0x00B1); + extendedKeyCodesSet.add(0x01000000+0x00B2); + extendedKeyCodesSet.add(0x01000000+0x00B3); + extendedKeyCodesSet.add(0x01000000+0x00B4); + extendedKeyCodesSet.add(0x01000000+0x00B5); + extendedKeyCodesSet.add(0x01000000+0x00B6); + extendedKeyCodesSet.add(0x01000000+0x00B7); + extendedKeyCodesSet.add(0x01000000+0x00B9); + extendedKeyCodesSet.add(0x01000000+0x00BA); + extendedKeyCodesSet.add(0x01000000+0x00BB); + extendedKeyCodesSet.add(0x01000000+0x00BC); + extendedKeyCodesSet.add(0x01000000+0x00BD); + extendedKeyCodesSet.add(0x01000000+0x00BE); + extendedKeyCodesSet.add(0x01000000+0x00BF); + extendedKeyCodesSet.add(0x01000000+0x00C4); + extendedKeyCodesSet.add(0x01000000+0x00C5); + extendedKeyCodesSet.add(0x01000000+0x00C6); + extendedKeyCodesSet.add(0x01000000+0x00C7); + extendedKeyCodesSet.add(0x01000000+0x00D1); + extendedKeyCodesSet.add(0x01000000+0x00D6); + extendedKeyCodesSet.add(0x01000000+0x00D7); + extendedKeyCodesSet.add(0x01000000+0x00D8); + extendedKeyCodesSet.add(0x01000000+0x00DF); + extendedKeyCodesSet.add(0x01000000+0x00E0); + extendedKeyCodesSet.add(0x01000000+0x00E1); + extendedKeyCodesSet.add(0x01000000+0x00E2); + extendedKeyCodesSet.add(0x01000000+0x00E4); + extendedKeyCodesSet.add(0x01000000+0x00E5); + extendedKeyCodesSet.add(0x01000000+0x00E6); + extendedKeyCodesSet.add(0x01000000+0x00E7); + extendedKeyCodesSet.add(0x01000000+0x00E8); + extendedKeyCodesSet.add(0x01000000+0x00E9); + extendedKeyCodesSet.add(0x01000000+0x00EA); + extendedKeyCodesSet.add(0x01000000+0x00EB); + extendedKeyCodesSet.add(0x01000000+0x00EC); + extendedKeyCodesSet.add(0x01000000+0x00ED); + extendedKeyCodesSet.add(0x01000000+0x00EE); + extendedKeyCodesSet.add(0x01000000+0x00F0); + extendedKeyCodesSet.add(0x01000000+0x00F1); + extendedKeyCodesSet.add(0x01000000+0x00F2); + extendedKeyCodesSet.add(0x01000000+0x00F3); + extendedKeyCodesSet.add(0x01000000+0x00F4); + extendedKeyCodesSet.add(0x01000000+0x00F5); + extendedKeyCodesSet.add(0x01000000+0x00F6); + extendedKeyCodesSet.add(0x01000000+0x00F7); + extendedKeyCodesSet.add(0x01000000+0x00F8); + extendedKeyCodesSet.add(0x01000000+0x00F9); + extendedKeyCodesSet.add(0x01000000+0x00FA); + extendedKeyCodesSet.add(0x01000000+0x00FB); + extendedKeyCodesSet.add(0x01000000+0x00FC); + extendedKeyCodesSet.add(0x01000000+0x00FD); + extendedKeyCodesSet.add(0x01000000+0x00FE); + extendedKeyCodesSet.add(0x01000000+0x0105); + extendedKeyCodesSet.add(0x01000000+0x02DB); + extendedKeyCodesSet.add(0x01000000+0x0142); + extendedKeyCodesSet.add(0x01000000+0x013E); + extendedKeyCodesSet.add(0x01000000+0x015B); + extendedKeyCodesSet.add(0x01000000+0x0161); + extendedKeyCodesSet.add(0x01000000+0x015F); + extendedKeyCodesSet.add(0x01000000+0x0165); + extendedKeyCodesSet.add(0x01000000+0x017E); + extendedKeyCodesSet.add(0x01000000+0x017C); + extendedKeyCodesSet.add(0x01000000+0x0103); + extendedKeyCodesSet.add(0x01000000+0x0107); + extendedKeyCodesSet.add(0x01000000+0x010D); + extendedKeyCodesSet.add(0x01000000+0x0119); + extendedKeyCodesSet.add(0x01000000+0x011B); + extendedKeyCodesSet.add(0x01000000+0x0111); + extendedKeyCodesSet.add(0x01000000+0x0148); + extendedKeyCodesSet.add(0x01000000+0x0151); + extendedKeyCodesSet.add(0x01000000+0x0171); + extendedKeyCodesSet.add(0x01000000+0x0159); + extendedKeyCodesSet.add(0x01000000+0x016F); + extendedKeyCodesSet.add(0x01000000+0x0163); + extendedKeyCodesSet.add(0x01000000+0x02D9); + extendedKeyCodesSet.add(0x01000000+0x0130); + extendedKeyCodesSet.add(0x01000000+0x0127); + extendedKeyCodesSet.add(0x01000000+0x0125); + extendedKeyCodesSet.add(0x01000000+0x0131); + extendedKeyCodesSet.add(0x01000000+0x011F); + extendedKeyCodesSet.add(0x01000000+0x0135); + extendedKeyCodesSet.add(0x01000000+0x010B); + extendedKeyCodesSet.add(0x01000000+0x0109); + extendedKeyCodesSet.add(0x01000000+0x0121); + extendedKeyCodesSet.add(0x01000000+0x011D); + extendedKeyCodesSet.add(0x01000000+0x016D); + extendedKeyCodesSet.add(0x01000000+0x015D); + extendedKeyCodesSet.add(0x01000000+0x0138); + extendedKeyCodesSet.add(0x01000000+0x0157); + extendedKeyCodesSet.add(0x01000000+0x013C); + extendedKeyCodesSet.add(0x01000000+0x0113); + extendedKeyCodesSet.add(0x01000000+0x0123); + extendedKeyCodesSet.add(0x01000000+0x0167); + extendedKeyCodesSet.add(0x01000000+0x014B); + extendedKeyCodesSet.add(0x01000000+0x0101); + extendedKeyCodesSet.add(0x01000000+0x012F); + extendedKeyCodesSet.add(0x01000000+0x0117); + extendedKeyCodesSet.add(0x01000000+0x012B); + extendedKeyCodesSet.add(0x01000000+0x0146); + extendedKeyCodesSet.add(0x01000000+0x014D); + extendedKeyCodesSet.add(0x01000000+0x0137); + extendedKeyCodesSet.add(0x01000000+0x0173); + extendedKeyCodesSet.add(0x01000000+0x016B); + extendedKeyCodesSet.add(0x01000000+0x0153); + extendedKeyCodesSet.add(0x01000000+0x30FC); + extendedKeyCodesSet.add(0x01000000+0x30A2); + extendedKeyCodesSet.add(0x01000000+0x30A4); + extendedKeyCodesSet.add(0x01000000+0x30A6); + extendedKeyCodesSet.add(0x01000000+0x30A8); + extendedKeyCodesSet.add(0x01000000+0x30AA); + extendedKeyCodesSet.add(0x01000000+0x30AB); + extendedKeyCodesSet.add(0x01000000+0x30AD); + extendedKeyCodesSet.add(0x01000000+0x30AF); + extendedKeyCodesSet.add(0x01000000+0x30B1); + extendedKeyCodesSet.add(0x01000000+0x30B3); + extendedKeyCodesSet.add(0x01000000+0x30B5); + extendedKeyCodesSet.add(0x01000000+0x30B7); + extendedKeyCodesSet.add(0x01000000+0x30B9); + extendedKeyCodesSet.add(0x01000000+0x30BB); + extendedKeyCodesSet.add(0x01000000+0x30BD); + extendedKeyCodesSet.add(0x01000000+0x30BF); + extendedKeyCodesSet.add(0x01000000+0x30C1); + extendedKeyCodesSet.add(0x01000000+0x30C4); + extendedKeyCodesSet.add(0x01000000+0x30C6); + extendedKeyCodesSet.add(0x01000000+0x30C8); + extendedKeyCodesSet.add(0x01000000+0x30CA); + extendedKeyCodesSet.add(0x01000000+0x30CB); + extendedKeyCodesSet.add(0x01000000+0x30CC); + extendedKeyCodesSet.add(0x01000000+0x30CD); + extendedKeyCodesSet.add(0x01000000+0x30CE); + extendedKeyCodesSet.add(0x01000000+0x30CF); + extendedKeyCodesSet.add(0x01000000+0x30D2); + extendedKeyCodesSet.add(0x01000000+0x30D5); + extendedKeyCodesSet.add(0x01000000+0x30D8); + extendedKeyCodesSet.add(0x01000000+0x30DB); + extendedKeyCodesSet.add(0x01000000+0x30DE); + extendedKeyCodesSet.add(0x01000000+0x30DF); + extendedKeyCodesSet.add(0x01000000+0x30E0); + extendedKeyCodesSet.add(0x01000000+0x30E1); + extendedKeyCodesSet.add(0x01000000+0x30E2); + extendedKeyCodesSet.add(0x01000000+0x30E4); + extendedKeyCodesSet.add(0x01000000+0x30E6); + extendedKeyCodesSet.add(0x01000000+0x30E8); + extendedKeyCodesSet.add(0x01000000+0x30E9); + extendedKeyCodesSet.add(0x01000000+0x30EA); + extendedKeyCodesSet.add(0x01000000+0x30EB); + extendedKeyCodesSet.add(0x01000000+0x30EC); + extendedKeyCodesSet.add(0x01000000+0x30ED); + extendedKeyCodesSet.add(0x01000000+0x30EF); + extendedKeyCodesSet.add(0x01000000+0x30F3); + extendedKeyCodesSet.add(0x01000000+0x309B); + extendedKeyCodesSet.add(0x01000000+0x309C); + extendedKeyCodesSet.add(0x01000000+0x06F0); + extendedKeyCodesSet.add(0x01000000+0x06F1); + extendedKeyCodesSet.add(0x01000000+0x06F2); + extendedKeyCodesSet.add(0x01000000+0x06F3); + extendedKeyCodesSet.add(0x01000000+0x06F4); + extendedKeyCodesSet.add(0x01000000+0x06F5); + extendedKeyCodesSet.add(0x01000000+0x06F6); + extendedKeyCodesSet.add(0x01000000+0x06F7); + extendedKeyCodesSet.add(0x01000000+0x06F8); + extendedKeyCodesSet.add(0x01000000+0x06F9); + extendedKeyCodesSet.add(0x01000000+0x0670); + extendedKeyCodesSet.add(0x01000000+0x067E); + extendedKeyCodesSet.add(0x01000000+0x0686); + extendedKeyCodesSet.add(0x01000000+0x060C); + extendedKeyCodesSet.add(0x01000000+0x06D4); + extendedKeyCodesSet.add(0x01000000+0x0660); + extendedKeyCodesSet.add(0x01000000+0x0661); + extendedKeyCodesSet.add(0x01000000+0x0662); + extendedKeyCodesSet.add(0x01000000+0x0663); + extendedKeyCodesSet.add(0x01000000+0x0664); + extendedKeyCodesSet.add(0x01000000+0x0665); + extendedKeyCodesSet.add(0x01000000+0x0666); + extendedKeyCodesSet.add(0x01000000+0x0667); + extendedKeyCodesSet.add(0x01000000+0x0668); + extendedKeyCodesSet.add(0x01000000+0x0669); + extendedKeyCodesSet.add(0x01000000+0x061B); + extendedKeyCodesSet.add(0x01000000+0x0621); + extendedKeyCodesSet.add(0x01000000+0x0624); + extendedKeyCodesSet.add(0x01000000+0x0626); + extendedKeyCodesSet.add(0x01000000+0x0627); + extendedKeyCodesSet.add(0x01000000+0x0628); + extendedKeyCodesSet.add(0x01000000+0x0629); + extendedKeyCodesSet.add(0x01000000+0x062A); + extendedKeyCodesSet.add(0x01000000+0x062B); + extendedKeyCodesSet.add(0x01000000+0x062C); + extendedKeyCodesSet.add(0x01000000+0x062D); + extendedKeyCodesSet.add(0x01000000+0x062E); + extendedKeyCodesSet.add(0x01000000+0x062F); + extendedKeyCodesSet.add(0x01000000+0x0630); + extendedKeyCodesSet.add(0x01000000+0x0631); + extendedKeyCodesSet.add(0x01000000+0x0632); + extendedKeyCodesSet.add(0x01000000+0x0633); + extendedKeyCodesSet.add(0x01000000+0x0634); + extendedKeyCodesSet.add(0x01000000+0x0635); + extendedKeyCodesSet.add(0x01000000+0x0636); + extendedKeyCodesSet.add(0x01000000+0x0637); + extendedKeyCodesSet.add(0x01000000+0x0638); + extendedKeyCodesSet.add(0x01000000+0x0639); + extendedKeyCodesSet.add(0x01000000+0x063A); + extendedKeyCodesSet.add(0x01000000+0x0641); + extendedKeyCodesSet.add(0x01000000+0x0642); + extendedKeyCodesSet.add(0x01000000+0x0643); + extendedKeyCodesSet.add(0x01000000+0x0644); + extendedKeyCodesSet.add(0x01000000+0x0645); + extendedKeyCodesSet.add(0x01000000+0x0646); + extendedKeyCodesSet.add(0x01000000+0x0647); + extendedKeyCodesSet.add(0x01000000+0x0648); + extendedKeyCodesSet.add(0x01000000+0x0649); + extendedKeyCodesSet.add(0x01000000+0x064A); + extendedKeyCodesSet.add(0x01000000+0x064E); + extendedKeyCodesSet.add(0x01000000+0x064F); + extendedKeyCodesSet.add(0x01000000+0x0650); + extendedKeyCodesSet.add(0x01000000+0x0652); + extendedKeyCodesSet.add(0x01000000+0x0698); + extendedKeyCodesSet.add(0x01000000+0x06A4); + extendedKeyCodesSet.add(0x01000000+0x06A9); + extendedKeyCodesSet.add(0x01000000+0x06AF); + extendedKeyCodesSet.add(0x01000000+0x06BE); + extendedKeyCodesSet.add(0x01000000+0x06CC); + extendedKeyCodesSet.add(0x01000000+0x06CC); + extendedKeyCodesSet.add(0x01000000+0x06D2); + extendedKeyCodesSet.add(0x01000000+0x0493); + extendedKeyCodesSet.add(0x01000000+0x0497); + extendedKeyCodesSet.add(0x01000000+0x049B); + extendedKeyCodesSet.add(0x01000000+0x049D); + extendedKeyCodesSet.add(0x01000000+0x04A3); + extendedKeyCodesSet.add(0x01000000+0x04AF); + extendedKeyCodesSet.add(0x01000000+0x04B1); + extendedKeyCodesSet.add(0x01000000+0x04B3); + extendedKeyCodesSet.add(0x01000000+0x04B9); + extendedKeyCodesSet.add(0x01000000+0x04BB); + extendedKeyCodesSet.add(0x01000000+0x04D9); + extendedKeyCodesSet.add(0x01000000+0x04E9); + extendedKeyCodesSet.add(0x01000000+0x0452); + extendedKeyCodesSet.add(0x01000000+0x0453); + extendedKeyCodesSet.add(0x01000000+0x0451); + extendedKeyCodesSet.add(0x01000000+0x0454); + extendedKeyCodesSet.add(0x01000000+0x0455); + extendedKeyCodesSet.add(0x01000000+0x0456); + extendedKeyCodesSet.add(0x01000000+0x0457); + extendedKeyCodesSet.add(0x01000000+0x0458); + extendedKeyCodesSet.add(0x01000000+0x0459); + extendedKeyCodesSet.add(0x01000000+0x045A); + extendedKeyCodesSet.add(0x01000000+0x045B); + extendedKeyCodesSet.add(0x01000000+0x045C); + extendedKeyCodesSet.add(0x01000000+0x0491); + extendedKeyCodesSet.add(0x01000000+0x045E); + extendedKeyCodesSet.add(0x01000000+0x045F); + extendedKeyCodesSet.add(0x01000000+0x2116); + extendedKeyCodesSet.add(0x01000000+0x044E); + extendedKeyCodesSet.add(0x01000000+0x0430); + extendedKeyCodesSet.add(0x01000000+0x0431); + extendedKeyCodesSet.add(0x01000000+0x0446); + extendedKeyCodesSet.add(0x01000000+0x0434); + extendedKeyCodesSet.add(0x01000000+0x0435); + extendedKeyCodesSet.add(0x01000000+0x0444); + extendedKeyCodesSet.add(0x01000000+0x0433); + extendedKeyCodesSet.add(0x01000000+0x0445); + extendedKeyCodesSet.add(0x01000000+0x0438); + extendedKeyCodesSet.add(0x01000000+0x0439); + extendedKeyCodesSet.add(0x01000000+0x043A); + extendedKeyCodesSet.add(0x01000000+0x043B); + extendedKeyCodesSet.add(0x01000000+0x043C); + extendedKeyCodesSet.add(0x01000000+0x043D); + extendedKeyCodesSet.add(0x01000000+0x043E); + extendedKeyCodesSet.add(0x01000000+0x043F); + extendedKeyCodesSet.add(0x01000000+0x044F); + extendedKeyCodesSet.add(0x01000000+0x0440); + extendedKeyCodesSet.add(0x01000000+0x0441); + extendedKeyCodesSet.add(0x01000000+0x0442); + extendedKeyCodesSet.add(0x01000000+0x0443); + extendedKeyCodesSet.add(0x01000000+0x0436); + extendedKeyCodesSet.add(0x01000000+0x0432); + extendedKeyCodesSet.add(0x01000000+0x044C); + extendedKeyCodesSet.add(0x01000000+0x044B); + extendedKeyCodesSet.add(0x01000000+0x0437); + extendedKeyCodesSet.add(0x01000000+0x0448); + extendedKeyCodesSet.add(0x01000000+0x044D); + extendedKeyCodesSet.add(0x01000000+0x0449); + extendedKeyCodesSet.add(0x01000000+0x0447); + extendedKeyCodesSet.add(0x01000000+0x044A); + extendedKeyCodesSet.add(0x01000000+0x2015); + extendedKeyCodesSet.add(0x01000000+0x03B1); + extendedKeyCodesSet.add(0x01000000+0x03B2); + extendedKeyCodesSet.add(0x01000000+0x03B3); + extendedKeyCodesSet.add(0x01000000+0x03B4); + extendedKeyCodesSet.add(0x01000000+0x03B5); + extendedKeyCodesSet.add(0x01000000+0x03B6); + extendedKeyCodesSet.add(0x01000000+0x03B7); + extendedKeyCodesSet.add(0x01000000+0x03B8); + extendedKeyCodesSet.add(0x01000000+0x03B9); + extendedKeyCodesSet.add(0x01000000+0x03BA); + extendedKeyCodesSet.add(0x01000000+0x03BB); + extendedKeyCodesSet.add(0x01000000+0x03BC); + extendedKeyCodesSet.add(0x01000000+0x03BD); + extendedKeyCodesSet.add(0x01000000+0x03BE); + extendedKeyCodesSet.add(0x01000000+0x03BF); + extendedKeyCodesSet.add(0x01000000+0x03C0); + extendedKeyCodesSet.add(0x01000000+0x03C1); + extendedKeyCodesSet.add(0x01000000+0x03C3); + extendedKeyCodesSet.add(0x01000000+0x03C2); + extendedKeyCodesSet.add(0x01000000+0x03C4); + extendedKeyCodesSet.add(0x01000000+0x03C5); + extendedKeyCodesSet.add(0x01000000+0x03C6); + extendedKeyCodesSet.add(0x01000000+0x03C7); + extendedKeyCodesSet.add(0x01000000+0x03C8); + extendedKeyCodesSet.add(0x01000000+0x03C9); + extendedKeyCodesSet.add(0x01000000+0x2190); + extendedKeyCodesSet.add(0x01000000+0x2192); + extendedKeyCodesSet.add(0x01000000+0x2193); + extendedKeyCodesSet.add(0x01000000+0x2013); + extendedKeyCodesSet.add(0x01000000+0x201C); + extendedKeyCodesSet.add(0x01000000+0x201D); + extendedKeyCodesSet.add(0x01000000+0x201E); + extendedKeyCodesSet.add(0x01000000+0x05D0); + extendedKeyCodesSet.add(0x01000000+0x05D1); + extendedKeyCodesSet.add(0x01000000+0x05D2); + extendedKeyCodesSet.add(0x01000000+0x05D3); + extendedKeyCodesSet.add(0x01000000+0x05D4); + extendedKeyCodesSet.add(0x01000000+0x05D5); + extendedKeyCodesSet.add(0x01000000+0x05D6); + extendedKeyCodesSet.add(0x01000000+0x05D7); + extendedKeyCodesSet.add(0x01000000+0x05D8); + extendedKeyCodesSet.add(0x01000000+0x05D9); + extendedKeyCodesSet.add(0x01000000+0x05DA); + extendedKeyCodesSet.add(0x01000000+0x05DB); + extendedKeyCodesSet.add(0x01000000+0x05DC); + extendedKeyCodesSet.add(0x01000000+0x05DD); + extendedKeyCodesSet.add(0x01000000+0x05DE); + extendedKeyCodesSet.add(0x01000000+0x05DF); + extendedKeyCodesSet.add(0x01000000+0x05E0); + extendedKeyCodesSet.add(0x01000000+0x05E1); + extendedKeyCodesSet.add(0x01000000+0x05E2); + extendedKeyCodesSet.add(0x01000000+0x05E3); + extendedKeyCodesSet.add(0x01000000+0x05E4); + extendedKeyCodesSet.add(0x01000000+0x05E5); + extendedKeyCodesSet.add(0x01000000+0x05E6); + extendedKeyCodesSet.add(0x01000000+0x05E7); + extendedKeyCodesSet.add(0x01000000+0x05E8); + extendedKeyCodesSet.add(0x01000000+0x05E9); + extendedKeyCodesSet.add(0x01000000+0x05EA); + extendedKeyCodesSet.add(0x01000000+0x0E01); + extendedKeyCodesSet.add(0x01000000+0x0E02); + extendedKeyCodesSet.add(0x01000000+0x0E03); + extendedKeyCodesSet.add(0x01000000+0x0E04); + extendedKeyCodesSet.add(0x01000000+0x0E05); + extendedKeyCodesSet.add(0x01000000+0x0E07); + extendedKeyCodesSet.add(0x01000000+0x0E08); + extendedKeyCodesSet.add(0x01000000+0x0E0A); + extendedKeyCodesSet.add(0x01000000+0x0E0C); + extendedKeyCodesSet.add(0x01000000+0x0E14); + extendedKeyCodesSet.add(0x01000000+0x0E15); + extendedKeyCodesSet.add(0x01000000+0x0E16); + extendedKeyCodesSet.add(0x01000000+0x0E17); + extendedKeyCodesSet.add(0x01000000+0x0E19); + extendedKeyCodesSet.add(0x01000000+0x0E1A); + extendedKeyCodesSet.add(0x01000000+0x0E1B); + extendedKeyCodesSet.add(0x01000000+0x0E1C); + extendedKeyCodesSet.add(0x01000000+0x0E1D); + extendedKeyCodesSet.add(0x01000000+0x0E1E); + extendedKeyCodesSet.add(0x01000000+0x0E1F); + extendedKeyCodesSet.add(0x01000000+0x0E20); + extendedKeyCodesSet.add(0x01000000+0x0E21); + extendedKeyCodesSet.add(0x01000000+0x0E22); + extendedKeyCodesSet.add(0x01000000+0x0E23); + extendedKeyCodesSet.add(0x01000000+0x0E25); + extendedKeyCodesSet.add(0x01000000+0x0E27); + extendedKeyCodesSet.add(0x01000000+0x0E2A); + extendedKeyCodesSet.add(0x01000000+0x0E2B); + extendedKeyCodesSet.add(0x01000000+0x0E2D); + extendedKeyCodesSet.add(0x01000000+0x0E30); + extendedKeyCodesSet.add(0x01000000+0x0E31); + extendedKeyCodesSet.add(0x01000000+0x0E32); + extendedKeyCodesSet.add(0x01000000+0x0E33); + extendedKeyCodesSet.add(0x01000000+0x0E34); + extendedKeyCodesSet.add(0x01000000+0x0E35); + extendedKeyCodesSet.add(0x01000000+0x0E36); + extendedKeyCodesSet.add(0x01000000+0x0E37); + extendedKeyCodesSet.add(0x01000000+0x0E38); + extendedKeyCodesSet.add(0x01000000+0x0E39); + extendedKeyCodesSet.add(0x01000000+0x0E3F); + extendedKeyCodesSet.add(0x01000000+0x0E40); + extendedKeyCodesSet.add(0x01000000+0x0E41); + extendedKeyCodesSet.add(0x01000000+0x0E43); + extendedKeyCodesSet.add(0x01000000+0x0E44); + extendedKeyCodesSet.add(0x01000000+0x0E45); + extendedKeyCodesSet.add(0x01000000+0x0E46); + extendedKeyCodesSet.add(0x01000000+0x0E47); + extendedKeyCodesSet.add(0x01000000+0x0E48); + extendedKeyCodesSet.add(0x01000000+0x0E49); + extendedKeyCodesSet.add(0x01000000+0x0E50); + extendedKeyCodesSet.add(0x01000000+0x0E51); + extendedKeyCodesSet.add(0x01000000+0x0E52); + extendedKeyCodesSet.add(0x01000000+0x0E53); + extendedKeyCodesSet.add(0x01000000+0x0E54); + extendedKeyCodesSet.add(0x01000000+0x0E55); + extendedKeyCodesSet.add(0x01000000+0x0E56); + extendedKeyCodesSet.add(0x01000000+0x0E57); + extendedKeyCodesSet.add(0x01000000+0x0E58); + extendedKeyCodesSet.add(0x01000000+0x0E59); + extendedKeyCodesSet.add(0x01000000+0x0587); + extendedKeyCodesSet.add(0x01000000+0x0589); + extendedKeyCodesSet.add(0x01000000+0x0589); + extendedKeyCodesSet.add(0x01000000+0x055D); + extendedKeyCodesSet.add(0x01000000+0x055D); + extendedKeyCodesSet.add(0x01000000+0x055B); + extendedKeyCodesSet.add(0x01000000+0x055B); + extendedKeyCodesSet.add(0x01000000+0x055E); + extendedKeyCodesSet.add(0x01000000+0x055E); + extendedKeyCodesSet.add(0x01000000+0x0561); + extendedKeyCodesSet.add(0x01000000+0x0562); + extendedKeyCodesSet.add(0x01000000+0x0563); + extendedKeyCodesSet.add(0x01000000+0x0564); + extendedKeyCodesSet.add(0x01000000+0x0565); + extendedKeyCodesSet.add(0x01000000+0x0566); + extendedKeyCodesSet.add(0x01000000+0x0567); + extendedKeyCodesSet.add(0x01000000+0x0568); + extendedKeyCodesSet.add(0x01000000+0x0569); + extendedKeyCodesSet.add(0x01000000+0x056A); + extendedKeyCodesSet.add(0x01000000+0x056B); + extendedKeyCodesSet.add(0x01000000+0x056C); + extendedKeyCodesSet.add(0x01000000+0x056D); + extendedKeyCodesSet.add(0x01000000+0x056E); + extendedKeyCodesSet.add(0x01000000+0x056F); + extendedKeyCodesSet.add(0x01000000+0x0570); + extendedKeyCodesSet.add(0x01000000+0x0571); + extendedKeyCodesSet.add(0x01000000+0x0572); + extendedKeyCodesSet.add(0x01000000+0x0573); + extendedKeyCodesSet.add(0x01000000+0x0574); + extendedKeyCodesSet.add(0x01000000+0x0575); + extendedKeyCodesSet.add(0x01000000+0x0576); + extendedKeyCodesSet.add(0x01000000+0x0577); + extendedKeyCodesSet.add(0x01000000+0x0578); + extendedKeyCodesSet.add(0x01000000+0x0579); + extendedKeyCodesSet.add(0x01000000+0x057A); + extendedKeyCodesSet.add(0x01000000+0x057B); + extendedKeyCodesSet.add(0x01000000+0x057C); + extendedKeyCodesSet.add(0x01000000+0x057D); + extendedKeyCodesSet.add(0x01000000+0x057E); + extendedKeyCodesSet.add(0x01000000+0x057F); + extendedKeyCodesSet.add(0x01000000+0x0580); + extendedKeyCodesSet.add(0x01000000+0x0581); + extendedKeyCodesSet.add(0x01000000+0x0582); + extendedKeyCodesSet.add(0x01000000+0x0583); + extendedKeyCodesSet.add(0x01000000+0x0584); + extendedKeyCodesSet.add(0x01000000+0x0585); + extendedKeyCodesSet.add(0x01000000+0x0586); + extendedKeyCodesSet.add(0x01000000+0x10D0); + extendedKeyCodesSet.add(0x01000000+0x10D1); + extendedKeyCodesSet.add(0x01000000+0x10D2); + extendedKeyCodesSet.add(0x01000000+0x10D3); + extendedKeyCodesSet.add(0x01000000+0x10D4); + extendedKeyCodesSet.add(0x01000000+0x10D5); + extendedKeyCodesSet.add(0x01000000+0x10D6); + extendedKeyCodesSet.add(0x01000000+0x10D7); + extendedKeyCodesSet.add(0x01000000+0x10D8); + extendedKeyCodesSet.add(0x01000000+0x10D9); + extendedKeyCodesSet.add(0x01000000+0x10DA); + extendedKeyCodesSet.add(0x01000000+0x10DB); + extendedKeyCodesSet.add(0x01000000+0x10DC); + extendedKeyCodesSet.add(0x01000000+0x10DD); + extendedKeyCodesSet.add(0x01000000+0x10DE); + extendedKeyCodesSet.add(0x01000000+0x10DF); + extendedKeyCodesSet.add(0x01000000+0x10E0); + extendedKeyCodesSet.add(0x01000000+0x10E1); + extendedKeyCodesSet.add(0x01000000+0x10E2); + extendedKeyCodesSet.add(0x01000000+0x10E3); + extendedKeyCodesSet.add(0x01000000+0x10E4); + extendedKeyCodesSet.add(0x01000000+0x10E5); + extendedKeyCodesSet.add(0x01000000+0x10E6); + extendedKeyCodesSet.add(0x01000000+0x10E7); + extendedKeyCodesSet.add(0x01000000+0x10E8); + extendedKeyCodesSet.add(0x01000000+0x10E9); + extendedKeyCodesSet.add(0x01000000+0x10EA); + extendedKeyCodesSet.add(0x01000000+0x10EB); + extendedKeyCodesSet.add(0x01000000+0x10EC); + extendedKeyCodesSet.add(0x01000000+0x10ED); + extendedKeyCodesSet.add(0x01000000+0x10EE); + extendedKeyCodesSet.add(0x01000000+0x10EF); + extendedKeyCodesSet.add(0x01000000+0x10F0); + extendedKeyCodesSet.add(0x01000000+0x01E7); + extendedKeyCodesSet.add(0x01000000+0x0259); + extendedKeyCodesSet.add(0x01000000+0x1EB9); + extendedKeyCodesSet.add(0x01000000+0x1ECB); + extendedKeyCodesSet.add(0x01000000+0x1ECD); + extendedKeyCodesSet.add(0x01000000+0x1EE5); + extendedKeyCodesSet.add(0x01000000+0x01A1); + extendedKeyCodesSet.add(0x01000000+0x01B0); + extendedKeyCodesSet.add(0x01000000+0x20AB); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/awt/HeadlessToolkit.java --- a/jdk/src/share/classes/sun/awt/HeadlessToolkit.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/awt/HeadlessToolkit.java Wed Jul 05 16:51:11 2017 +0200 @@ -179,9 +179,9 @@ throw new HeadlessException(); } - public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager) throws HeadlessException { - KeyboardFocusManagerPeerImpl peer = new KeyboardFocusManagerPeerImpl(manager); - return peer; + public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager) + throws HeadlessException { + throw new HeadlessException(); } public TrayIconPeer createTrayIcon(TrayIcon target) diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java --- a/jdk/src/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,47 +27,150 @@ import java.awt.Component; import java.awt.KeyboardFocusManager; import java.awt.Window; +import java.awt.Canvas; +import java.awt.Scrollbar; +import java.awt.Panel; + +import java.awt.event.FocusEvent; import java.awt.peer.KeyboardFocusManagerPeer; +import java.awt.peer.ComponentPeer; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.logging.Level; +import java.util.logging.Logger; -public class KeyboardFocusManagerPeerImpl implements KeyboardFocusManagerPeer { - static native Window getNativeFocusedWindow(); - static native Component getNativeFocusOwner(); - static native void clearNativeGlobalFocusOwner(Window activeWindow); +public abstract class KeyboardFocusManagerPeerImpl implements KeyboardFocusManagerPeer { + + private static final Logger focusLog = Logger.getLogger("sun.awt.focus.KeyboardFocusManagerPeerImpl"); + + private static AWTAccessor.KeyboardFocusManagerAccessor kfmAccessor = + AWTAccessor.getKeyboardFocusManagerAccessor(); - KeyboardFocusManagerPeerImpl(KeyboardFocusManager manager) { + // The constants are copied from java.awt.KeyboardFocusManager + public static final int SNFH_FAILURE = 0; + public static final int SNFH_SUCCESS_HANDLED = 1; + public static final int SNFH_SUCCESS_PROCEED = 2; + + protected KeyboardFocusManager manager; + + public KeyboardFocusManagerPeerImpl(KeyboardFocusManager manager) { + this.manager = manager; } - public Window getCurrentFocusedWindow() { - return getNativeFocusedWindow(); + @Override + public void clearGlobalFocusOwner(Window activeWindow) { + if (activeWindow != null) { + Component focusOwner = activeWindow.getFocusOwner(); + if (focusLog.isLoggable(Level.FINE)) focusLog.fine("Clearing global focus owner " + focusOwner); + if (focusOwner != null) { + FocusEvent fl = new CausedFocusEvent(focusOwner, FocusEvent.FOCUS_LOST, false, null, + CausedFocusEvent.Cause.CLEAR_GLOBAL_FOCUS_OWNER); + SunToolkit.postPriorityEvent(fl); + } + } } - public void setCurrentFocusOwner(Component comp) { + /* + * WARNING: Don't call it on the Toolkit thread. + * + * Checks if the component: + * 1) accepts focus on click (in general) + * 2) may be a focus owner (in particular) + */ + public static boolean shouldFocusOnClick(Component component) { + boolean acceptFocusOnClick = false; + + // A component is generally allowed to accept focus on click + // if its peer is focusable. There're some exceptions though. + + + // CANVAS & SCROLLBAR accept focus on click + if (component instanceof Canvas || + component instanceof Scrollbar) + { + acceptFocusOnClick = true; + + // PANEL, empty only, accepts focus on click + } else if (component instanceof Panel) { + acceptFocusOnClick = (((Panel)component).getComponentCount() == 0); + + + // Other components + } else { + ComponentPeer peer = (component != null ? component.getPeer() : null); + acceptFocusOnClick = (peer != null ? peer.isFocusable() : false); + } + return acceptFocusOnClick && + AWTAccessor.getComponentAccessor().canBeFocusOwner(component); } - public Component getCurrentFocusOwner() { - return getNativeFocusOwner(); - } - public void clearGlobalFocusOwner(Window activeWindow) { - clearNativeGlobalFocusOwner(activeWindow); + /* + * Posts proper lost/gain focus events to the event queue. + */ + public static boolean deliverFocus(Component lightweightChild, + Component target, + boolean temporary, + boolean focusedWindowChangeAllowed, + long time, + CausedFocusEvent.Cause cause, + Component currentFocusOwner) // provided by the descendant peers + { + if (lightweightChild == null) { + lightweightChild = (Component)target; + } + + Component currentOwner = currentFocusOwner; + if (currentOwner != null && currentOwner.getPeer() == null) { + currentOwner = null; + } + if (currentOwner != null) { + FocusEvent fl = new CausedFocusEvent(currentOwner, FocusEvent.FOCUS_LOST, + false, lightweightChild, cause); + + if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Posting focus event: " + fl); + SunToolkit.postPriorityEvent(fl); + } + + FocusEvent fg = new CausedFocusEvent(lightweightChild, FocusEvent.FOCUS_GAINED, + false, currentOwner, cause); + + if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Posting focus event: " + fg); + SunToolkit.postPriorityEvent(fg); + return true; } - static Method m_removeLastFocusRequest = null; + // WARNING: Don't call it on the Toolkit thread. + public static boolean requestFocusFor(Component target, CausedFocusEvent.Cause cause) { + return AWTAccessor.getComponentAccessor().requestFocus(target, cause); + } + + // WARNING: Don't call it on the Toolkit thread. + public static int shouldNativelyFocusHeavyweight(Component heavyweight, + Component descendant, + boolean temporary, + boolean focusedWindowChangeAllowed, + long time, + CausedFocusEvent.Cause cause) + { + return kfmAccessor.shouldNativelyFocusHeavyweight( + heavyweight, descendant, temporary, focusedWindowChangeAllowed, time, cause); + } + public static void removeLastFocusRequest(Component heavyweight) { - try { - if (m_removeLastFocusRequest == null) { - m_removeLastFocusRequest = SunToolkit.getMethod(KeyboardFocusManager.class, "removeLastFocusRequest", - new Class[] {Component.class}); - } - m_removeLastFocusRequest.invoke(null, new Object[]{heavyweight}); - } catch (InvocationTargetException ite) { - ite.printStackTrace(); - } catch (IllegalAccessException ex) { - ex.printStackTrace(); - } + kfmAccessor.removeLastFocusRequest(heavyweight); + } + + // WARNING: Don't call it on the Toolkit thread. + public static boolean processSynchronousLightweightTransfer(Component heavyweight, + Component descendant, + boolean temporary, + boolean focusedWindowChangeAllowed, + long time) + { + return kfmAccessor.processSynchronousLightweightTransfer( + heavyweight, descendant, temporary, focusedWindowChangeAllowed, time); } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/awt/NullComponentPeer.java --- a/jdk/src/share/classes/sun/awt/NullComponentPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/awt/NullComponentPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -278,19 +278,6 @@ throw new UnsupportedOperationException(); } - /** - * @see java.awt.peer.ContainerPeer#restack - */ - public void restack() { - throw new UnsupportedOperationException(); - } - - /** - * @see java.awt.peer.ContainerPeer#isRestackSupported - */ - public boolean isRestackSupported() { - return false; - } public void layout() { } @@ -305,4 +292,19 @@ */ public void applyShape(Region shape) { } + + /** + * Lowers this component at the bottom of the above HW peer. If the above parameter + * is null then the method places this component at the top of the Z-order. + */ + public void setZOrder(ComponentPeer above) { + } + + public void updateGraphicsData(GraphicsConfiguration gc) {} + + public GraphicsConfiguration getAppropriateGraphicsConfiguration( + GraphicsConfiguration gc) + { + return gc; + } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/awt/SunToolkit.java --- a/jdk/src/share/classes/sun/awt/SunToolkit.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/awt/SunToolkit.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,14 +32,10 @@ import java.awt.peer.*; import java.awt.event.WindowEvent; import java.awt.event.KeyEvent; -import java.awt.im.spi.InputMethodDescriptor; import java.awt.image.*; -import java.awt.geom.AffineTransform; import java.awt.TrayIcon; import java.awt.SystemTray; -import java.io.*; import java.net.URL; -import java.net.JarURLConnection; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; @@ -49,7 +45,6 @@ import sun.misc.SoftCache; import sun.font.FontDesignMetrics; import sun.awt.im.InputContext; -import sun.awt.im.SimpleInputMethodWindow; import sun.awt.image.*; import sun.security.action.GetPropertyAction; import sun.security.action.GetBooleanAction; @@ -225,10 +220,8 @@ public abstract RobotPeer createRobot(Robot target, GraphicsDevice screen) throws AWTException; - public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager) throws HeadlessException { - KeyboardFocusManagerPeerImpl peer = new KeyboardFocusManagerPeerImpl(manager); - return peer; - } + public abstract KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager) + throws HeadlessException; /** * The AWT lock is typically only used on Unix platforms to synchronize @@ -824,16 +817,31 @@ } /** - * Disables erasing of background on the canvas before painting - * if this is supported by the current toolkit. - * - * @throws IllegalStateException if the canvas is not displayable - * @see java.awt.Component#isDisplayable + * Disables erasing of background on the canvas before painting if + * this is supported by the current toolkit. It is recommended to + * call this method early, before the Canvas becomes displayable, + * because some Toolkit implementations do not support changing + * this property once the Canvas becomes displayable. */ public void disableBackgroundErase(Canvas canvas) { - if (!canvas.isDisplayable()) { - throw new IllegalStateException("Canvas must have a valid peer"); - } + disableBackgroundEraseImpl(canvas); + } + + /** + * Disables the native erasing of the background on the given + * component before painting if this is supported by the current + * toolkit. This only has an effect for certain components such as + * Canvas, Panel and Window. It is recommended to call this method + * early, before the Component becomes displayable, because some + * Toolkit implementations do not support changing this property + * once the Component becomes displayable. + */ + public void disableBackgroundErase(Component component) { + disableBackgroundEraseImpl(component); + } + + private void disableBackgroundEraseImpl(Component component) { + AWTAccessor.getComponentAccessor().setBackgroundEraseDisabled(component, true); } /** @@ -1972,6 +1980,18 @@ AWTAutoShutdown.getInstance().dumpPeers(aLog); } + /** + * Returns the <code>Window</code> ancestor of the component <code>comp</code>. + * @return Window ancestor of the component or component by itself if it is Window; + * null, if component is not a part of window hierarchy + */ + public static Window getContainingWindow(Component comp) { + while (comp != null && !(comp instanceof Window)) { + comp = comp.getParent(); + } + return (Window)comp; + } + private static Boolean sunAwtDisableMixing = null; /** @@ -1995,6 +2015,73 @@ public boolean isNativeGTKAvailable() { return false; } + + // Cosntant alpha + public boolean isWindowOpacitySupported() { + return false; + } + + // Shaping + public boolean isWindowShapingSupported() { + return false; + } + + // Per-pixel alpha + public boolean isWindowTranslucencySupported() { + return false; + } + + public boolean isTranslucencyCapable(GraphicsConfiguration gc) { + return false; + } + + /** + * Returns whether or not a containing top level window for the passed + * component is + * {@link com.sun.awt.AWTUtilities.Translucency#PERPIXEL_TRANSLUCENT PERPIXEL_TRANSLUCENT}. + * + * @param c a Component which toplevel's to check + * @return {@code true} if the passed component is not null and has a + * containing toplevel window which is opaque (so per-pixel translucency + * is not enabled), {@code false} otherwise + * @see com.sun.awt.AWTUtilities.Translucency#PERPIXEL_TRANSLUCENT + * @see com.sun.awt.AWTUtilities#isWindowOpaque(Window) + */ + public static boolean isContainingTopLevelOpaque(Component c) { + Window w = getContainingWindow(c); + // return w != null && (w).isOpaque(); + return w != null && com.sun.awt.AWTUtilities.isWindowOpaque(w); + } + + /** + * Returns whether or not a containing top level window for the passed + * component is + * {@link com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT TRANSLUCENT}. + * + * @param c a Component which toplevel's to check + * @return {@code true} if the passed component is not null and has a + * containing toplevel window which has opacity less than + * 1.0f (which means that it is translucent), {@code false} otherwise + * @see com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT + * @see com.sun.awt.AWTUtilities#getWindowOpacity(Window) + */ + public static boolean isContainingTopLevelTranslucent(Component c) { + Window w = getContainingWindow(c); + // return w != null && (w).getOpacity() < 1.0f; + return w != null && com.sun.awt.AWTUtilities.getWindowOpacity((Window)w) < 1.0f; + } + + /** + * Returns whether the native system requires using the peer.updateWindow() + * method to update the contents of a non-opaque window, or if usual + * painting procedures are sufficient. The default return value covers + * the X11 systems. On MS Windows this method is overriden in WToolkit + * to return true. + */ + public boolean needUpdateWindow() { + return false; + } + } // class SunToolkit diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/awt/shell/ShellFolder.java --- a/jdk/src/share/classes/sun/awt/shell/ShellFolder.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/awt/shell/ShellFolder.java Wed Jul 05 16:51:11 2017 +0200 @@ -31,6 +31,7 @@ import java.io.*; import java.io.FileNotFoundException; import java.util.*; +import java.util.concurrent.Callable; /** * @author Michael Martak @@ -461,6 +462,35 @@ return null; } + private static Invoker invoker; + + /** + * Provides the single access point to the {@link Invoker}. It is guaranteed that the value + * returned by this method will be always the same. + * + * @return the singleton instance of {@link Invoker} + */ + public static Invoker getInvoker() { + if (invoker == null) { + invoker = shellFolderManager.createInvoker(); + } + return invoker; + } + + /** + * Interface allowing to invoke tasks in different environments on different platforms. + */ + public static interface Invoker { + /** + * Invokes a callable task. If the {@code task} throws a checked exception, + * it will be wrapped into a {@link RuntimeException} + * + * @param task a task to invoke + * @return the result of {@code task}'s invokation + */ + <T> T invoke(Callable<T> task); + } + /** * Provides a default comparator for the default column set */ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/awt/shell/ShellFolderManager.java --- a/jdk/src/share/classes/sun/awt/shell/ShellFolderManager.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/awt/shell/ShellFolderManager.java Wed Jul 05 16:51:11 2017 +0200 @@ -27,6 +27,7 @@ import java.io.File; import java.io.FileNotFoundException; +import java.util.concurrent.Callable; /** * @author Michael Martak @@ -96,9 +97,23 @@ } public boolean isFileSystemRoot(File dir) { - if (dir instanceof ShellFolder && !((ShellFolder)dir).isFileSystem()) { + if (dir instanceof ShellFolder && !((ShellFolder) dir).isFileSystem()) { return false; } return (dir.getParentFile() == null); } + + protected ShellFolder.Invoker createInvoker() { + return new DirectInvoker(); + } + + private static class DirectInvoker implements ShellFolder.Invoker { + public <T> T invoke(Callable<T> task) { + try { + return task.call(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/beans/editors/ColorEditor.java --- a/jdk/src/share/classes/sun/beans/editors/ColorEditor.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/beans/editors/ColorEditor.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,8 @@ import java.beans.*; public class ColorEditor extends Panel implements PropertyEditor { + private static final long serialVersionUID = 1781257185164716054L; + public ColorEditor() { setLayout(null); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/beans/editors/FontEditor.java --- a/jdk/src/share/classes/sun/beans/editors/FontEditor.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/beans/editors/FontEditor.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ import java.beans.*; public class FontEditor extends Panel implements java.beans.PropertyEditor { + private static final long serialVersionUID = 6732704486002715933L; public FontEditor() { setLayout(null); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/misc/Launcher.java --- a/jdk/src/share/classes/sun/misc/Launcher.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/misc/Launcher.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1998-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -120,7 +120,10 @@ * The class loader used for loading installed extensions. */ static class ExtClassLoader extends URLClassLoader { - private File[] dirs; + + static { + ClassLoader.registerAsParallelCapable(); + } /** * create an ExtClassLoader. The ExtClassLoader is created @@ -146,12 +149,12 @@ } }); } catch (java.security.PrivilegedActionException e) { - throw (IOException) e.getException(); + throw (IOException) e.getException(); } } void addExtURL(URL url) { - super.addURL(url); + super.addURL(url); } /* @@ -159,7 +162,6 @@ */ public ExtClassLoader(File[] dirs) throws IOException { super(getExtURLs(dirs), null, factory); - this.dirs = dirs; } private static File[] getExtDirs() { @@ -206,20 +208,27 @@ */ public String findLibrary(String name) { name = System.mapLibraryName(name); - for (int i = 0; i < dirs.length; i++) { - // Look in architecture-specific subdirectory first - String arch = System.getProperty("os.arch"); - if (arch != null) { - File file = new File(new File(dirs[i], arch), name); + URL[] urls = super.getURLs(); + File prevDir = null; + for (int i = 0; i < urls.length; i++) { + // Get the ext directory from the URL + File dir = new File(urls[i].getPath()).getParentFile(); + if (dir != null && !dir.equals(prevDir)) { + // Look in architecture-specific subdirectory first + String arch = System.getProperty("os.arch"); + if (arch != null) { + File file = new File(new File(dir, arch), name); + if (file.exists()) { + return file.getAbsolutePath(); + } + } + // Then check the extension directory + File file = new File(dir, name); if (file.exists()) { return file.getAbsolutePath(); } } - // Then check the extension directory - File file = new File(dirs[i], name); - if (file.exists()) { - return file.getAbsolutePath(); - } + prevDir = dir; } return null; } @@ -248,6 +257,10 @@ */ static class AppClassLoader extends URLClassLoader { + static { + ClassLoader.registerAsParallelCapable(); + } + public static ClassLoader getAppClassLoader(final ClassLoader extcl) throws IOException { @@ -281,7 +294,7 @@ /** * Override loadClass so we can checkPackageAccess. */ - public synchronized Class loadClass(String name, boolean resolve) + public Class loadClass(String name, boolean resolve) throws ClassNotFoundException { int i = name.lastIndexOf('.'); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/net/spi/DefaultProxySelector.java --- a/jdk/src/share/classes/sun/net/spi/DefaultProxySelector.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/net/spi/DefaultProxySelector.java Wed Jul 05 16:51:11 2017 +0200 @@ -78,7 +78,6 @@ }; private static boolean hasSystemProxies = false; - private static Properties defprops = new Properties(); static { final String key = "java.net.useSystemProxies"; @@ -107,6 +106,9 @@ RegexpPool hostsPool; String property; + static NonProxyInfo ftpNonProxyInfo = new NonProxyInfo("ftp.nonProxyHosts", null, null); + static NonProxyInfo httpNonProxyInfo = new NonProxyInfo("http.nonProxyHosts", null, null); + NonProxyInfo(String p, String s, RegexpPool pool) { property = p; hostsSource = s; @@ -114,8 +116,6 @@ } } - private static NonProxyInfo ftpNonProxyInfo = new NonProxyInfo("ftp.nonProxyHosts", null, null); - private static NonProxyInfo httpNonProxyInfo = new NonProxyInfo("http.nonProxyHosts", null, null); /** * select() method. Where all the hard work is done. @@ -175,13 +175,13 @@ NonProxyInfo pinfo = null; if ("http".equalsIgnoreCase(protocol)) { - pinfo = httpNonProxyInfo; + pinfo = NonProxyInfo.httpNonProxyInfo; } else if ("https".equalsIgnoreCase(protocol)) { // HTTPS uses the same property as HTTP, for backward // compatibility - pinfo = httpNonProxyInfo; + pinfo = NonProxyInfo.httpNonProxyInfo; } else if ("ftp".equalsIgnoreCase(protocol)) { - pinfo = ftpNonProxyInfo; + pinfo = NonProxyInfo.ftpNonProxyInfo; } /** @@ -334,7 +334,6 @@ } } - private static final Pattern p6 = Pattern.compile("::1|(0:){7}1|(0:){1,6}:1"); private boolean isLoopback(String host) { if (host == null || host.length() == 0) return false; @@ -364,6 +363,7 @@ } if (host.endsWith(":1")) { + final Pattern p6 = Pattern.compile("::1|(0:){7}1|(0:){1,6}:1"); return p6.matcher(host).matches(); } return false; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java --- a/jdk/src/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/nio/ch/AsynchronousServerSocketChannelImpl.java Wed Jul 05 16:51:11 2017 +0200 @@ -37,6 +37,7 @@ import java.util.Collections; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; +import sun.net.NetHooks; /** * Base implementation of AsynchronousServerSocketChannel. @@ -131,6 +132,7 @@ synchronized (stateLock) { if (localAddress != null) throw new AlreadyBoundException(); + NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort()); Net.bind(fd, isa.getAddress(), isa.getPort()); Net.listen(fd, backlog < 1 ? 50 : backlog); localAddress = Net.localAddress(fd); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java --- a/jdk/src/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/nio/ch/AsynchronousSocketChannelImpl.java Wed Jul 05 16:51:11 2017 +0200 @@ -38,6 +38,7 @@ import java.util.Collections; import java.util.concurrent.*; import java.util.concurrent.locks.*; +import sun.net.NetHooks; /** * Base implementation of AsynchronousSocketChannel @@ -387,6 +388,7 @@ throw new AlreadyBoundException(); InetSocketAddress isa = (local == null) ? new InetSocketAddress(0) : Net.checkAddress(local); + NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort()); Net.bind(fd, isa.getAddress(), isa.getPort()); localAddress = Net.localAddress(fd); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java --- a/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java Wed Jul 05 16:51:11 2017 +0200 @@ -313,11 +313,9 @@ throw new NullPointerException(); synchronized (readLock) { ensureOpen(); - // If socket is not bound then behave as if nothing received - // Will be fixed by 6621699 - if (localAddress() == null) { - return null; - } + // Socket was not bound before attempting receive + if (localAddress() == null) + bind(null); int n = 0; ByteBuffer bb = null; try { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java --- a/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/nio/ch/FileChannelImpl.java Wed Jul 05 16:51:11 2017 +0200 @@ -128,9 +128,10 @@ throw new NonReadableChannelException(); synchronized (positionLock) { int n = 0; - int ti = threads.add(); + int ti = -1; try { begin(); + ti = threads.add(); if (!isOpen()) return 0; do { @@ -151,9 +152,10 @@ throw new NonReadableChannelException(); synchronized (positionLock) { long n = 0; - int ti = threads.add(); + int ti = -1; try { begin(); + ti = threads.add(); if (!isOpen()) return 0; do { @@ -183,9 +185,10 @@ throw new NonWritableChannelException(); synchronized (positionLock) { int n = 0; - int ti = threads.add(); + int ti = -1; try { begin(); + ti = threads.add(); if (!isOpen()) return 0; do { @@ -206,9 +209,10 @@ throw new NonWritableChannelException(); synchronized (positionLock) { long n = 0; - int ti = threads.add(); + int ti = -1; try { begin(); + ti = threads.add(); if (!isOpen()) return 0; do { @@ -239,9 +243,10 @@ ensureOpen(); synchronized (positionLock) { long p = -1; - int ti = threads.add(); + int ti = -1; try { begin(); + ti = threads.add(); if (!isOpen()) return 0; do { @@ -262,9 +267,10 @@ throw new IllegalArgumentException(); synchronized (positionLock) { long p = -1; - int ti = threads.add(); + int ti = -1; try { begin(); + ti = threads.add(); if (!isOpen()) return null; do { @@ -283,9 +289,10 @@ ensureOpen(); synchronized (positionLock) { long s = -1; - int ti = threads.add(); + int ti = -1; try { begin(); + ti = threads.add(); if (!isOpen()) return -1; do { @@ -311,9 +318,10 @@ synchronized (positionLock) { int rv = -1; long p = -1; - int ti = threads.add(); + int ti = -1; try { begin(); + ti = threads.add(); if (!isOpen()) return null; @@ -350,9 +358,10 @@ public void force(boolean metaData) throws IOException { ensureOpen(); int rv = -1; - int ti = threads.add(); + int ti = -1; try { begin(); + ti = threads.add(); if (!isOpen()) return; do { @@ -406,9 +415,10 @@ return IOStatus.UNSUPPORTED; long n = -1; - int ti = threads.add(); + int ti = -1; try { begin(); + ti = threads.add(); if (!isOpen()) return -1; do { @@ -612,9 +622,10 @@ throw new NonReadableChannelException(); ensureOpen(); int n = 0; - int ti = threads.add(); + int ti = -1; try { begin(); + ti = threads.add(); if (!isOpen()) return -1; do { @@ -637,9 +648,10 @@ throw new NonWritableChannelException(); ensureOpen(); int n = 0; - int ti = threads.add(); + int ti = -1; try { begin(); + ti = threads.add(); if (!isOpen()) return -1; do { @@ -731,9 +743,10 @@ throw new NonReadableChannelException(); long addr = -1; - int ti = threads.add(); + int ti = -1; try { begin(); + ti = threads.add(); if (!isOpen()) return null; if (size() < position + size) { // Extend file size @@ -900,9 +913,10 @@ FileLockTable flt = fileLockTable(); flt.add(fli); boolean i = true; - int ti = threads.add(); + int ti = -1; try { begin(); + ti = threads.add(); if (!isOpen()) return null; int result = nd.lock(fd, true, position, size, shared); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/nio/ch/SelChImpl.java --- a/jdk/src/share/classes/sun/nio/ch/SelChImpl.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/nio/ch/SelChImpl.java Wed Jul 05 16:51:11 2017 +0200 @@ -25,6 +25,7 @@ package sun.nio.ch; +import java.nio.channels.Channel; import java.io.FileDescriptor; import java.io.IOException; @@ -35,7 +36,7 @@ * @since 1.4 */ -interface SelChImpl { +interface SelChImpl extends Channel { FileDescriptor getFD(); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java --- a/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java Wed Jul 05 16:51:11 2017 +0200 @@ -31,6 +31,7 @@ import java.nio.channels.*; import java.nio.channels.spi.*; import java.util.*; +import sun.net.NetHooks; /** @@ -191,6 +192,7 @@ SecurityManager sm = System.getSecurityManager(); if (sm != null) sm.checkListen(isa.getPort()); + NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort()); Net.bind(fd, isa.getAddress(), isa.getPort()); Net.listen(fd, backlog < 1 ? 50 : backlog); synchronized (stateLock) { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java --- a/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java Wed Jul 05 16:51:11 2017 +0200 @@ -32,6 +32,7 @@ import java.nio.channels.*; import java.nio.channels.spi.*; import java.util.*; +import sun.net.NetHooks; /** @@ -526,6 +527,7 @@ throw new AlreadyBoundException(); InetSocketAddress isa = (local == null) ? new InetSocketAddress(0) : Net.checkAddress(local); + NetHooks.beforeTcpBind(fd, isa.getAddress(), isa.getPort()); Net.bind(fd, isa.getAddress(), isa.getPort()); localAddress = Net.localAddress(fd); } @@ -577,6 +579,12 @@ if (!isOpen()) { return false; } + // notify hook only if unbound + if (localAddress == null) { + NetHooks.beforeTcpConnect(fd, + isa.getAddress(), + isa.getPort()); + } readerThread = NativeThread.current(); } for (;;) { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/security/jca/ProviderConfig.java --- a/jdk/src/share/classes/sun/security/jca/ProviderConfig.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/security/jca/ProviderConfig.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -60,37 +60,6 @@ // use by doLoadProvider() private final static Class[] CL_STRING = { String.class }; - // lock to use while loading a provider. it ensures that each provider - // is loaded only once and that we can detect recursion. - // NOTE that because of 4944382 we use the system classloader as lock. - // By using the same lock to load classes as to load providers we avoid - // deadlock due to lock ordering. However, this class may be initialized - // early in the startup when the system classloader has not yet been set - // up. Use a temporary lock object if that is the case. - // Any of this may break if the class loading implementation is changed. - private static volatile Object LOCK = new Object(); - - private static Object getLock() { - Object o = LOCK; - // check if lock is already set to the class loader - if (o instanceof ClassLoader) { - return o; - } - Object cl = AccessController.doPrivileged( - new PrivilegedAction<Object>() { - public Object run() { - return ClassLoader.getSystemClassLoader(); - } - }); - // check if class loader initialized now (non-null) - if (cl != null) { - LOCK = cl; - o = cl; - } - return o; - } - - // name of the provider class private final String className; @@ -194,7 +163,7 @@ /** * Get the provider object. Loads the provider if it is not already loaded. */ - Provider getProvider() { + synchronized Provider getProvider() { // volatile variable load Provider p = provider; if (p != null) { @@ -203,30 +172,23 @@ if (shouldLoad() == false) { return null; } - synchronized (getLock()) { - p = provider; - if (p != null) { - // loaded by another thread while we were blocked on lock - return p; + if (isLoading) { + // because this method is synchronized, this can only + // happen if there is recursion. + if (debug != null) { + debug.println("Recursion loading provider: " + this); + new Exception("Call trace").printStackTrace(); } - if (isLoading) { - // because this method is synchronized, this can only - // happen if there is recursion. - if (debug != null) { - debug.println("Recursion loading provider: " + this); - new Exception("Call trace").printStackTrace(); - } - return null; - } - try { - isLoading = true; - tries++; - p = doLoadProvider(); - } finally { - isLoading = false; - } - provider = p; + return null; } + try { + isLoading = true; + tries++; + p = doLoadProvider(); + } finally { + isLoading = false; + } + provider = p; return p; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/security/tools/JarSigner.java --- a/jdk/src/share/classes/sun/security/tools/JarSigner.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/security/tools/JarSigner.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,28 +32,44 @@ import java.math.BigInteger; import java.net.URI; import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLClassLoader; -import java.net.SocketTimeoutException; import java.text.Collator; import java.text.MessageFormat; import java.security.cert.Certificate; import java.security.cert.X509Certificate; import java.security.cert.CertificateException; -import java.security.cert.CertificateExpiredException; -import java.security.cert.CertificateNotYetValidException; import java.security.*; import java.lang.reflect.Constructor; import com.sun.jarsigner.ContentSigner; import com.sun.jarsigner.ContentSignerParameters; +import java.net.SocketTimeoutException; +import java.net.URL; +import java.net.URLClassLoader; +import java.security.cert.CertPath; +import java.security.cert.CertPathValidator; +import java.security.cert.CertificateExpiredException; +import java.security.cert.CertificateFactory; +import java.security.cert.CertificateNotYetValidException; +import java.security.cert.PKIXParameters; +import java.security.cert.TrustAnchor; +import java.util.Map.Entry; import sun.security.x509.*; import sun.security.util.*; import sun.misc.BASE64Encoder; + /** * <p>The jarsigner utility. * + * The exit codes for the main method are: + * + * 0: success + * 1: any error that the jar cannot be signed or verified, including: + * keystore loading error + * TSP communciation error + * jarsigner command line error... + * otherwise: error codes from -strict + * * @author Roland Schemers * @author Jan Luehe */ @@ -84,8 +100,6 @@ // Attention: // This is the entry that get launched by the security tool jarsigner. - // It's marked as exported private per AppServer Team's request. - // See http://ccc.sfbay/6428446 public static void main(String args[]) throws Exception { JarSigner js = new JarSigner(); js.run(args); @@ -93,31 +107,32 @@ static final String VERSION = "1.0"; - static final int IN_KEYSTORE = 0x01; + static final int IN_KEYSTORE = 0x01; // signer is in keystore static final int IN_SCOPE = 0x02; - - // signer's certificate chain (when composing) - X509Certificate[] certChain; + static final int NOT_ALIAS = 0x04; // alias list is NOT empty and + // signer is not in alias list + static final int SIGNED_BY_ALIAS = 0x08; // signer is in alias list - /* - * private key - */ - PrivateKey privateKey; - KeyStore store; + X509Certificate[] certChain; // signer's cert chain (when composing) + PrivateKey privateKey; // private key + KeyStore store; // the keystore specified by -keystore + // or the default keystore, never null IdentityScope scope; String keystore; // key store file boolean nullStream = false; // null keystore input stream (NONE) boolean token = false; // token-based keystore - String jarfile; // jar file to sign + String jarfile; // jar file to sign or verify String alias; // alias to sign jar with + List<String> ckaliases = new ArrayList<String>(); // aliases in -verify char[] storepass; // keystore password boolean protectedPath; // protected authentication path String storetype; // keystore type String providerName; // provider name Vector<String> providers = null; // list of providers - HashMap<String,String> providerArgs = new HashMap<String, String>(); // arguments for provider constructors + // arguments for provider constructors + HashMap<String,String> providerArgs = new HashMap<String, String>(); char[] keypass; // private key password String sigfile; // name of .SF file String sigalg; // name of signature algorithm @@ -125,12 +140,14 @@ String signedjar; // output filename String tsaUrl; // location of the Timestamping Authority String tsaAlias; // alias for the Timestamping Authority's certificate + String altCertChain; // file to read alternative cert chain from boolean verify = false; // verify the jar - boolean verbose = false; // verbose output when signing/verifying + String verbose = null; // verbose output when signing/verifying boolean showcerts = false; // show certs when verifying boolean debug = false; // debug boolean signManifest = true; // "sign" the whole manifest boolean externalSF = true; // leave the .SF out of the PKCS7 block + boolean strict = false; // treat warnings as error // read zip entry raw bytes private ByteArrayOutputStream baos = new ByteArrayOutputStream(2048); @@ -139,14 +156,22 @@ private String altSignerClass = null; private String altSignerClasspath = null; private ZipFile zipFile = null; + private boolean hasExpiredCert = false; private boolean hasExpiringCert = false; private boolean notYetValidCert = false; - + private boolean chainNotValidated = false; + private boolean notSignedByAlias = false; + private boolean aliasNotInStore = false; + private boolean hasUnsignedEntry = false; private boolean badKeyUsage = false; private boolean badExtendedKeyUsage = false; private boolean badNetscapeCertType = false; + CertificateFactory certificateFactory; + CertPathValidator validator; + PKIXParameters pkixParameters; + public void run(String args[]) { try { parseArgs(args); @@ -184,14 +209,6 @@ } } - hasExpiredCert = false; - hasExpiringCert = false; - notYetValidCert = false; - - badKeyUsage = false; - badExtendedKeyUsage = false; - badNetscapeCertType = false; - if (verify) { try { loadKeyStore(keystore, false); @@ -238,6 +255,29 @@ storepass = null; } } + + if (strict) { + int exitCode = 0; + if (hasExpiringCert) { + exitCode |= 2; + } + if (chainNotValidated) { + // hasExpiredCert and notYetValidCert included in this case + exitCode |= 4; + } + if (badKeyUsage || badExtendedKeyUsage || badNetscapeCertType) { + exitCode |= 8; + } + if (hasUnsignedEntry) { + exitCode |= 16; + } + if (notSignedByAlias || aliasNotInStore) { + exitCode |= 32; + } + if (exitCode != 0) { + System.exit(exitCode); + } + } } /* @@ -247,25 +287,26 @@ /* parse flags */ int n = 0; - for (n=0; (n < args.length) && args[n].startsWith("-"); n++) { + if (args.length == 0) fullusage(); + for (n=0; n < args.length; n++) { String flags = args[n]; if (collator.compare(flags, "-keystore") == 0) { - if (++n == args.length) usage(); + if (++n == args.length) usageNoArg(); keystore = args[n]; } else if (collator.compare(flags, "-storepass") ==0) { - if (++n == args.length) usage(); + if (++n == args.length) usageNoArg(); storepass = args[n].toCharArray(); } else if (collator.compare(flags, "-storetype") ==0) { - if (++n == args.length) usage(); + if (++n == args.length) usageNoArg(); storetype = args[n]; } else if (collator.compare(flags, "-providerName") ==0) { - if (++n == args.length) usage(); + if (++n == args.length) usageNoArg(); providerName = args[n]; } else if ((collator.compare(flags, "-provider") == 0) || (collator.compare(flags, "-providerClass") == 0)) { - if (++n == args.length) usage(); + if (++n == args.length) usageNoArg(); if (providers == null) { providers = new Vector<String>(3); } @@ -274,35 +315,38 @@ if (args.length > (n+1)) { flags = args[n+1]; if (collator.compare(flags, "-providerArg") == 0) { - if (args.length == (n+2)) usage(); + if (args.length == (n+2)) usageNoArg(); providerArgs.put(args[n], args[n+2]); n += 2; } } } else if (collator.compare(flags, "-protected") ==0) { protectedPath = true; + } else if (collator.compare(flags, "-certchain") ==0) { + if (++n == args.length) usageNoArg(); + altCertChain = args[n]; } else if (collator.compare(flags, "-debug") ==0) { debug = true; } else if (collator.compare(flags, "-keypass") ==0) { - if (++n == args.length) usage(); + if (++n == args.length) usageNoArg(); keypass = args[n].toCharArray(); } else if (collator.compare(flags, "-sigfile") ==0) { - if (++n == args.length) usage(); + if (++n == args.length) usageNoArg(); sigfile = args[n]; } else if (collator.compare(flags, "-signedjar") ==0) { - if (++n == args.length) usage(); + if (++n == args.length) usageNoArg(); signedjar = args[n]; } else if (collator.compare(flags, "-tsa") ==0) { - if (++n == args.length) usage(); + if (++n == args.length) usageNoArg(); tsaUrl = args[n]; } else if (collator.compare(flags, "-tsacert") ==0) { - if (++n == args.length) usage(); + if (++n == args.length) usageNoArg(); tsaAlias = args[n]; } else if (collator.compare(flags, "-altsigner") ==0) { - if (++n == args.length) usage(); + if (++n == args.length) usageNoArg(); altSignerClass = args[n]; } else if (collator.compare(flags, "-altsignerpath") ==0) { - if (++n == args.length) usage(); + if (++n == args.length) usageNoArg(); altSignerClasspath = args[n]; } else if (collator.compare(flags, "-sectionsonly") ==0) { signManifest = false; @@ -311,30 +355,56 @@ } else if (collator.compare(flags, "-verify") ==0) { verify = true; } else if (collator.compare(flags, "-verbose") ==0) { - verbose = true; + verbose = "all"; + } else if (collator.compare(flags, "-verbose:all") ==0) { + verbose = "all"; + } else if (collator.compare(flags, "-verbose:summary") ==0) { + verbose = "summary"; + } else if (collator.compare(flags, "-verbose:grouped") ==0) { + verbose = "grouped"; } else if (collator.compare(flags, "-sigalg") ==0) { - if (++n == args.length) usage(); + if (++n == args.length) usageNoArg(); sigalg = args[n]; } else if (collator.compare(flags, "-digestalg") ==0) { - if (++n == args.length) usage(); + if (++n == args.length) usageNoArg(); digestalg = args[n]; } else if (collator.compare(flags, "-certs") ==0) { showcerts = true; + } else if (collator.compare(flags, "-strict") ==0) { + strict = true; } else if (collator.compare(flags, "-h") == 0 || collator.compare(flags, "-help") == 0) { - usage(); + fullusage(); } else { - System.err.println(rb.getString("Illegal option: ") + flags); - usage(); + if (!flags.startsWith("-")) { + if (jarfile == null) { + jarfile = flags; + } else { + alias = flags; + ckaliases.add(alias); + } + } else { + System.err.println( + rb.getString("Illegal option: ") + flags); + usage(); + } } } - if (n == args.length) usage(); - jarfile = args[n++]; + // -certs must always be specified with -verbose + if (verbose == null) showcerts = false; - if (!verify) { - if (n == args.length) usage(); - alias = args[n++]; + if (jarfile == null) { + System.err.println(rb.getString("Please specify jarfile name")); + usage(); + } + if (!verify && alias == null) { + System.err.println(rb.getString("Please specify alias name")); + usage(); + } + if (!verify && ckaliases.size() > 1) { + System.err.println(rb.getString("Only one alias can be specified")); + usage(); } if (storetype == null) { @@ -357,7 +427,6 @@ if (token && !nullStream) { System.err.println(MessageFormat.format(rb.getString ("-keystore must be NONE if -storetype is {0}"), storetype)); - System.err.println(); usage(); } @@ -365,7 +434,6 @@ System.err.println(MessageFormat.format(rb.getString ("-keypass can not be specified " + "if -storetype is {0}"), storetype)); - System.err.println(); usage(); } @@ -374,7 +442,6 @@ System.err.println(rb.getString ("If -protected is specified, " + "then -storepass and -keypass must not be specified")); - System.err.println(); usage(); } } @@ -383,17 +450,27 @@ System.err.println(rb.getString ("If keystore is not password protected, " + "then -storepass and -keypass must not be specified")); - System.err.println(); usage(); } } } + void usageNoArg() { + System.out.println(rb.getString("Option lacks argument")); + usage(); + } + void usage() { + System.out.println(); + System.out.println(rb.getString("Please type jarsigner -help for usage")); + System.exit(1); + } + + void fullusage() { System.out.println(rb.getString ("Usage: jarsigner [options] jar-file alias")); System.out.println(rb.getString - (" jarsigner -verify [options] jar-file")); + (" jarsigner -verify [options] jar-file [alias...]")); System.out.println(); System.out.println(rb.getString ("[-keystore <url>] keystore location")); @@ -408,6 +485,9 @@ ("[-keypass <password>] password for private key (if different)")); System.out.println(); System.out.println(rb.getString + ("[-certchain <file>] name of alternative certchain file")); + System.out.println(); + System.out.println(rb.getString ("[-sigfile <file>] name of .SF/.DSA file")); System.out.println(); System.out.println(rb.getString @@ -423,7 +503,9 @@ ("[-verify] verify a signed JAR file")); System.out.println(); System.out.println(rb.getString - ("[-verbose] verbose output when signing/verifying")); + ("[-verbose[:suboptions]] verbose output when signing/verifying.")); + System.out.println(rb.getString + (" suboptions can be all, grouped or summary")); System.out.println(); System.out.println(rb.getString ("[-certs] display certificates when verbose and verifying")); @@ -457,15 +539,17 @@ System.out.println(rb.getString (" [-providerArg <arg>]] ... master class file and constructor argument")); System.out.println(); + System.out.println(rb.getString + ("[-strict] treat warnings as errors")); + System.out.println(); - System.exit(1); + System.exit(0); } void verifyJar(String jarName) throws Exception { - boolean anySigned = false; - boolean hasUnsignedEntry = false; + boolean anySigned = false; // if there exists entry inside jar signed JarFile jf = null; try { @@ -494,11 +578,18 @@ Manifest man = jf.getManifest(); + // The map to record display info, only used when -verbose provided + // key: signer info string + // value: the list of files with common key + Map<String,List<String>> output = + new LinkedHashMap<String,List<String>>(); + if (man != null) { - if (verbose) System.out.println(); + if (verbose != null) System.out.println(); Enumeration<JarEntry> e = entriesVec.elements(); long now = System.currentTimeMillis(); + String tab = rb.getString(" "); while (e.hasMoreElements()) { JarEntry je = e.nextElement(); @@ -509,77 +600,118 @@ hasUnsignedEntry |= !je.isDirectory() && !isSigned && !signatureRelated(name); - if (verbose) { - int inStoreOrScope = inKeyStore(signers); - boolean inStore = (inStoreOrScope & IN_KEYSTORE) != 0; - boolean inScope = (inStoreOrScope & IN_SCOPE) != 0; + int inStoreOrScope = inKeyStore(signers); + + boolean inStore = (inStoreOrScope & IN_KEYSTORE) != 0; + boolean inScope = (inStoreOrScope & IN_SCOPE) != 0; + + notSignedByAlias |= (inStoreOrScope & NOT_ALIAS) != 0; + aliasNotInStore |= isSigned && (!inStore && !inScope); + + // Only used when -verbose provided + StringBuffer sb = null; + if (verbose != null) { + sb = new StringBuffer(); boolean inManifest = ((man.getAttributes(name) != null) || (man.getAttributes("./"+name) != null) || (man.getAttributes("/"+name) != null)); - System.out.print( + sb.append( (isSigned ? rb.getString("s") : rb.getString(" ")) + (inManifest ? rb.getString("m") : rb.getString(" ")) + (inStore ? rb.getString("k") : rb.getString(" ")) + (inScope ? rb.getString("i") : rb.getString(" ")) + - rb.getString(" ")); - StringBuffer sb = new StringBuffer(); - String s = Long.toString(je.getSize()); - for (int i = 6 - s.length(); i > 0; --i) { - sb.append(' '); - } - sb.append(s).append(' '). - append(new Date(je.getTime()).toString()); - sb.append(' ').append(je.getName()); - System.out.println(sb.toString()); + ((inStoreOrScope & NOT_ALIAS) != 0 ?"X":" ") + + rb.getString(" ")); + sb.append("|"); + } - if (signers != null && showcerts) { - String tab = rb.getString(" "); - for (int i = 0; i < signers.length; i++) { - System.out.println(); - List<? extends Certificate> certs = - signers[i].getSignerCertPath() - .getCertificates(); - // display the signature timestamp, if present - Timestamp timestamp = signers[i].getTimestamp(); - if (timestamp != null) { - System.out.println( - printTimestamp(tab, timestamp)); - } - // display the certificate(s) - for (Certificate c : certs) { - System.out.println( - printCert(tab, c, true, now)); - } + // When -certs provided, display info has extra empty + // lines at the beginning and end. + if (isSigned) { + if (showcerts) sb.append('\n'); + for (CodeSigner signer: signers) { + // signerInfo() must be called even if -verbose + // not provided. The method updates various + // warning flags. + String si = signerInfo(signer, tab, now); + if (showcerts) { + sb.append(si); + sb.append('\n'); } - System.out.println(); } - - } - if (isSigned) { - for (int i = 0; i < signers.length; i++) { - Certificate cert = - signers[i].getSignerCertPath() - .getCertificates().get(0); - if (cert instanceof X509Certificate) { - checkCertUsage((X509Certificate)cert, null); - if (!showcerts) { - long notAfter = ((X509Certificate)cert) - .getNotAfter().getTime(); - - if (notAfter < now) { - hasExpiredCert = true; - } else if (notAfter < now + SIX_MONTHS) { - hasExpiringCert = true; - } - } - } + } else if (showcerts && !verbose.equals("all")) { + // Print no info for unsigned entries when -verbose:all, + // to be consistent with old behavior. + if (signatureRelated(name)) { + sb.append("\n" + tab + rb.getString( + "(Signature related entries)") + "\n\n"); + } else { + sb.append("\n" + tab + rb.getString( + "(Unsigned entries)") + "\n\n"); } } + if (verbose != null) { + String label = sb.toString(); + if (signatureRelated(name)) { + // Entries inside META-INF and other unsigned + // entries are grouped separately. + label = "-" + label.substring(1); + } + + // The label finally contains 2 parts separated by '|': + // The legend displayed before the entry names, and + // the cert info (if -certs specfied). + + if (!output.containsKey(label)) { + output.put(label, new ArrayList<String>()); + } + + StringBuffer fb = new StringBuffer(); + String s = Long.toString(je.getSize()); + for (int i = 6 - s.length(); i > 0; --i) { + fb.append(' '); + } + fb.append(s).append(' '). + append(new Date(je.getTime()).toString()); + fb.append(' ').append(name); + + output.get(label).add(fb.toString()); + } } } - if (verbose) { + if (verbose != null) { + for (Entry<String,List<String>> s: output.entrySet()) { + List<String> files = s.getValue(); + String key = s.getKey(); + if (key.charAt(0) == '-') { // the signature-related group + key = ' ' + key.substring(1); + } + int pipe = key.indexOf('|'); + if (verbose.equals("all")) { + for (String f: files) { + System.out.println(key.substring(0, pipe) + f); + System.out.printf(key.substring(pipe+1)); + } + } else { + if (verbose.equals("grouped")) { + for (String f: files) { + System.out.println(key.substring(0, pipe) + f); + } + } else if (verbose.equals("summary")) { + System.out.print(key.substring(0, pipe)); + if (files.size() > 1) { + System.out.println(files.get(0) + " " + + String.format(rb.getString( + "(and %d more)"), files.size()-1)); + } else { + System.out.println(files.get(0)); + } + } + System.out.printf(key.substring(pipe+1)); + } + } System.out.println(); System.out.println(rb.getString( " s = signature was verified ")); @@ -589,9 +721,12 @@ " k = at least one certificate was found in keystore")); System.out.println(rb.getString( " i = at least one certificate was found in identity scope")); + if (ckaliases.size() > 0) { + System.out.println(( + " X = not signed by specified alias(es)")); + } System.out.println(); } - if (man == null) System.out.println(rb.getString("no manifest.")); @@ -602,7 +737,8 @@ System.out.println(rb.getString("jar verified.")); if (hasUnsignedEntry || hasExpiredCert || hasExpiringCert || badKeyUsage || badExtendedKeyUsage || badNetscapeCertType || - notYetValidCert) { + notYetValidCert || chainNotValidated || + aliasNotInStore || notSignedByAlias) { System.out.println(); System.out.println(rb.getString("Warning: ")); @@ -638,14 +774,27 @@ "This jar contains entries whose signer certificate is not yet valid. ")); } - if (! (verbose && showcerts)) { + if (chainNotValidated) { + System.out.println( + rb.getString("This jar contains entries whose certificate chain is not validated.")); + } + + if (notSignedByAlias) { + System.out.println( + rb.getString("This jar contains signed entries which is not signed by the specified alias(es).")); + } + + if (aliasNotInStore) { + System.out.println(rb.getString("This jar contains signed entries that's not signed by alias in this keystore.")); + } + if (! (verbose != null && showcerts)) { System.out.println(); System.out.println(rb.getString( "Re-run with the -verbose and -certs options for more details.")); } } } - System.exit(0); + return; } catch (Exception e) { System.out.println(rb.getString("jarsigner: ") + e); if (debug) { @@ -660,15 +809,6 @@ System.exit(1); } - /* - * Display some details about a certificate: - * - * <cert-type> [", " <subject-DN>] [" (" <keystore-entry-alias> ")"] - */ - String printCert(Certificate c) { - return printCert("", c, false, 0); - } - private static MessageFormat validityTimeForm = null; private static MessageFormat notYetTimeForm = null; private static MessageFormat expiredTimeForm = null; @@ -679,6 +819,8 @@ * * [<tab>] <cert-type> [", " <subject-DN>] [" (" <keystore-entry-alias> ")"] * [<validity-period> | <expiry-warning>] + * + * Note: no newline character at the end */ String printCert(String tab, Certificate c, boolean checkValidityPeriod, long now) { @@ -788,54 +930,75 @@ .append(signTimeForm.format(source)).append("]").toString(); } + private Map<CodeSigner,Integer> cacheForInKS = + new IdentityHashMap<CodeSigner,Integer>(); + + private int inKeyStoreForOneSigner(CodeSigner signer) { + if (cacheForInKS.containsKey(signer)) { + return cacheForInKS.get(signer); + } + + boolean found = false; + int result = 0; + List<? extends Certificate> certs = signer.getSignerCertPath().getCertificates(); + for (Certificate c : certs) { + String alias = storeHash.get(c); + if (alias != null) { + if (alias.startsWith("(")) { + result |= IN_KEYSTORE; + } else if (alias.startsWith("[")) { + result |= IN_SCOPE; + } + if (ckaliases.contains(alias.substring(1, alias.length() - 1))) { + result |= SIGNED_BY_ALIAS; + } + } else { + if (store != null) { + try { + alias = store.getCertificateAlias(c); + } catch (KeyStoreException kse) { + // never happens, because keystore has been loaded + } + if (alias != null) { + storeHash.put(c, "(" + alias + ")"); + found = true; + result |= IN_KEYSTORE; + } + } + if (!found && (scope != null)) { + Identity id = scope.getIdentity(c.getPublicKey()); + if (id != null) { + result |= IN_SCOPE; + storeHash.put(c, "[" + id.getName() + "]"); + } + } + if (ckaliases.contains(alias)) { + result |= SIGNED_BY_ALIAS; + } + } + } + cacheForInKS.put(signer, result); + return result; + } + Hashtable<Certificate, String> storeHash = new Hashtable<Certificate, String>(); int inKeyStore(CodeSigner[] signers) { - int result = 0; if (signers == null) return 0; - boolean found = false; - - for (int i = 0; i < signers.length; i++) { - found = false; - List<? extends Certificate> certs = - signers[i].getSignerCertPath().getCertificates(); - - for (Certificate c : certs) { - String alias = storeHash.get(c); + int output = 0; - if (alias != null) { - if (alias.startsWith("(")) - result |= IN_KEYSTORE; - else if (alias.startsWith("[")) - result |= IN_SCOPE; - } else { - if (store != null) { - try { - alias = store.getCertificateAlias(c); - } catch (KeyStoreException kse) { - // never happens, because keystore has been loaded - } - if (alias != null) { - storeHash.put(c, "("+alias+")"); - found = true; - result |= IN_KEYSTORE; - } - } - if (!found && (scope != null)) { - Identity id = scope.getIdentity(c.getPublicKey()); - if (id != null) { - result |= IN_SCOPE; - storeHash.put(c, "["+id.getName()+"]"); - } - } - } - } + for (CodeSigner signer: signers) { + int result = inKeyStoreForOneSigner(signer); + output |= result; } - return result; + if (ckaliases.size() > 0 && (output & SIGNED_BY_ALIAS) == 0) { + output |= NOT_ALIAS; + } + return output; } void signJar(String jarName, String alias, String[] args) @@ -1025,7 +1188,7 @@ // manifest file has new length mfFile = new ZipEntry(JarFile.MANIFEST_NAME); } - if (verbose) { + if (verbose != null) { if (mfCreated) { System.out.println(rb.getString(" adding: ") + mfFile.getName()); @@ -1076,7 +1239,7 @@ // signature file zos.putNextEntry(sfFile); sf.write(zos); - if (verbose) { + if (verbose != null) { if (zipFile.getEntry(sfFilename) != null) { System.out.println(rb.getString(" updating: ") + sfFilename); @@ -1086,7 +1249,7 @@ } } - if (verbose) { + if (verbose != null) { if (tsaUrl != null || tsaCert != null) { System.out.println( rb.getString("requesting a signature timestamp")); @@ -1101,8 +1264,8 @@ System.out.println(rb.getString("TSA location: ") + certUrl); } - System.out.println( - rb.getString("TSA certificate: ") + printCert(tsaCert)); + System.out.println(rb.getString("TSA certificate: ") + + printCert("", tsaCert, false, 0)); } if (signingMechanism != null) { System.out.println( @@ -1113,7 +1276,7 @@ // signature block file zos.putNextEntry(bkFile); block.write(zos); - if (verbose) { + if (verbose != null) { if (zipFile.getEntry(bkFilename) != null) { System.out.println(rb.getString(" updating: ") + bkFilename); @@ -1140,7 +1303,7 @@ ZipEntry ze = enum_.nextElement(); if (!ze.getName().startsWith(META_INF)) { - if (verbose) { + if (verbose != null) { if (manifest.getAttributes(ze.getName()) != null) System.out.println(rb.getString(" signing: ") + ze.getName()); @@ -1194,7 +1357,8 @@ } if (hasExpiredCert || hasExpiringCert || notYetValidCert - || badKeyUsage || badExtendedKeyUsage || badNetscapeCertType) { + || badKeyUsage || badExtendedKeyUsage + || badNetscapeCertType || chainNotValidated) { System.out.println(); System.out.println(rb.getString("Warning: ")); @@ -1223,6 +1387,11 @@ System.out.println( rb.getString("The signer certificate is not yet valid.")); } + + if (chainNotValidated) { + System.out.println( + rb.getString("The signer's certificate chain is not validated.")); + } } // no IOException thrown in the above try clause, so disable @@ -1274,6 +1443,40 @@ return false; } + Map<CodeSigner,String> cacheForSignerInfo = new IdentityHashMap<CodeSigner,String>(); + + /** + * Returns a string of singer info, with a newline at the end + */ + private String signerInfo(CodeSigner signer, String tab, long now) { + if (cacheForSignerInfo.containsKey(signer)) { + return cacheForSignerInfo.get(signer); + } + StringBuffer s = new StringBuffer(); + List<? extends Certificate> certs = signer.getSignerCertPath().getCertificates(); + // display the signature timestamp, if present + Timestamp timestamp = signer.getTimestamp(); + if (timestamp != null) { + s.append(printTimestamp(tab, timestamp)); + } + // display the certificate(s) + for (Certificate c : certs) { + s.append(printCert(tab, c, true, now)); + s.append('\n'); + } + try { + CertPath cp = certificateFactory.generateCertPath(certs); + validator.validate(cp, pkixParameters); + } catch (Exception e) { + chainNotValidated = true; + s.append(tab + rb.getString("[CertPath not validated: ") + + e.getLocalizedMessage() + "]\n"); // TODO + } + String result = s.toString(); + cacheForSignerInfo.put(signer, result); + return result; + } + private void writeEntry(ZipFile zf, ZipOutputStream os, ZipEntry ze) throws IOException { @@ -1360,6 +1563,48 @@ } } } + Set<TrustAnchor> tas = new HashSet<TrustAnchor>(); + try { + KeyStore caks = KeyTool.getCacertsKeyStore(); + if (caks != null) { + Enumeration<String> aliases = caks.aliases(); + while (aliases.hasMoreElements()) { + String a = aliases.nextElement(); + try { + tas.add(new TrustAnchor((X509Certificate)caks.getCertificate(a), null)); + } catch (Exception e2) { + // ignore, when a SecretkeyEntry does not include a cert + } + } + } + } catch (Exception e) { + // Ignore, if cacerts cannot be loaded + } + if (store != null) { + Enumeration<String> aliases = store.aliases(); + while (aliases.hasMoreElements()) { + String a = aliases.nextElement(); + try { + X509Certificate c = (X509Certificate)store.getCertificate(a); + // Only add TrustedCertificateEntry and self-signed + // PrivateKeyEntry + if (store.isCertificateEntry(a) || + c.getSubjectDN().equals(c.getIssuerDN())) { + tas.add(new TrustAnchor(c, null)); + } + } catch (Exception e2) { + // ignore, when a SecretkeyEntry does not include a cert + } + } + } + certificateFactory = CertificateFactory.getInstance("X.509"); + validator = CertPathValidator.getInstance("PKIX"); + try { + pkixParameters = new PKIXParameters(tas); + pkixParameters.setRevocationEnabled(false); + } catch (InvalidAlgorithmParameterException ex) { + // Only if tas is empty + } } catch (IOException ioe) { throw new RuntimeException(rb.getString("keystore load: ") + ioe.getMessage()); @@ -1408,7 +1653,8 @@ void checkCertUsage(X509Certificate userCert, boolean[] bad) { // Can act as a signer? - // 1. if KeyUsage, then [0] should be true + // 1. if KeyUsage, then [0:digitalSignature] or + // [1:nonRepudiation] should be true // 2. if ExtendedKeyUsage, then should contains ANY or CODE_SIGNING // 3. if NetscapeCertType, then should contains OBJECT_SIGNING // 1,2,3 must be true @@ -1419,10 +1665,10 @@ boolean[] keyUsage = userCert.getKeyUsage(); if (keyUsage != null) { - if (keyUsage.length < 1 || !keyUsage[0]) { + keyUsage = Arrays.copyOf(keyUsage, 9); + if (!keyUsage[0] && !keyUsage[1]) { if (bad != null) { bad[0] = true; - } else { badKeyUsage = true; } } @@ -1435,7 +1681,6 @@ && !xKeyUsage.contains("1.3.6.1.5.5.7.3.3")) { // codeSigning if (bad != null) { bad[1] = true; - } else { badExtendedKeyUsage = true; } } @@ -1462,7 +1707,6 @@ if (!val) { if (bad != null) { bad[2] = true; - } else { badNetscapeCertType = true; } } @@ -1477,19 +1721,36 @@ Key key = null; try { - java.security.cert.Certificate[] cs = null; - - try { - cs = store.getCertificateChain(alias); - } catch (KeyStoreException kse) { - // this never happens, because keystore has been loaded + if (altCertChain != null) { + try { + cs = CertificateFactory.getInstance("X.509"). + generateCertificates(new FileInputStream(altCertChain)). + toArray(new Certificate[0]); + } catch (CertificateException ex) { + error(rb.getString("Cannot restore certchain from file specified")); + } catch (FileNotFoundException ex) { + error(rb.getString("File specified by -certchain does not exist")); + } + } else { + try { + cs = store.getCertificateChain(alias); + } catch (KeyStoreException kse) { + // this never happens, because keystore has been loaded + } } - if (cs == null) { - MessageFormat form = new MessageFormat(rb.getString - ("Certificate chain not found for: alias. alias must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain.")); - Object[] source = {alias, alias}; - error(form.format(source)); + if (cs == null || cs.length == 0) { + if (altCertChain != null) { + error(rb.getString + ("Certificate chain not found in the file specified.")); + } else { + MessageFormat form = new MessageFormat(rb.getString + ("Certificate chain not found for: alias. alias must" + + " reference a valid KeyStore key entry containing a" + + " private key and corresponding public key certificate chain.")); + Object[] source = {alias, alias}; + error(form.format(source)); + } } certChain = new X509Certificate[cs.length]; @@ -1501,56 +1762,15 @@ certChain[i] = (X509Certificate)cs[i]; } - // order the cert chain if necessary (put user cert first, - // root-cert last in the chain) - X509Certificate userCert - = (X509Certificate)store.getCertificate(alias); - - // check validity of signer certificate - try { - userCert.checkValidity(); - - if (userCert.getNotAfter().getTime() < - System.currentTimeMillis() + SIX_MONTHS) { - - hasExpiringCert = true; - } - } catch (CertificateExpiredException cee) { - hasExpiredCert = true; - - } catch (CertificateNotYetValidException cnyve) { - notYetValidCert = true; - } - - checkCertUsage(userCert, null); + // We don't meant to print anything, the next call + // checks validity and keyUsage etc + printCert("", certChain[0], true, 0); - if (!userCert.equals(certChain[0])) { - // need to order ... - X509Certificate[] certChainTmp - = new X509Certificate[certChain.length]; - certChainTmp[0] = userCert; - Principal issuer = userCert.getIssuerDN(); - for (int i=1; i<certChain.length; i++) { - int j; - // look for the cert whose subject corresponds to the - // given issuer - for (j=0; j<certChainTmp.length; j++) { - if (certChainTmp[j] == null) - continue; - Principal subject = certChainTmp[j].getSubjectDN(); - if (issuer.equals(subject)) { - certChain[i] = certChainTmp[j]; - issuer = certChainTmp[j].getIssuerDN(); - certChainTmp[j] = null; - break; - } - } - if (j == certChainTmp.length) { - error(rb.getString("incomplete certificate chain")); - } - - } - certChain = certChainTmp; // ordered + try { + CertPath cp = certificateFactory.generateCertPath(Arrays.asList(certChain)); + validator.validate(cp, pkixParameters); + } catch (Exception e) { + chainNotValidated = true; } try { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/security/tools/JarSignerResources.java --- a/jdk/src/share/classes/sun/security/tools/JarSignerResources.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/security/tools/JarSignerResources.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -54,8 +54,8 @@ "If keystore is not password protected, then -storepass and -keypass must not be specified"}, {"Usage: jarsigner [options] jar-file alias", "Usage: jarsigner [options] jar-file alias"}, - {" jarsigner -verify [options] jar-file", - " jarsigner -verify [options] jar-file"}, + {" jarsigner -verify [options] jar-file [alias...]", + " jarsigner -verify [options] jar-file [alias...]"}, {"[-keystore <url>] keystore location", "[-keystore <url>] keystore location"}, {"[-storepass <password>] password for keystore integrity", @@ -64,6 +64,8 @@ "[-storetype <type>] keystore type"}, {"[-keypass <password>] password for private key (if different)", "[-keypass <password>] password for private key (if different)"}, + {"[-certchain <file>] name of alternative certchain file", + "[-certchain <file>] name of alternative certchain file"}, {"[-sigfile <file>] name of .SF/.DSA file", "[-sigfile <file>] name of .SF/.DSA file"}, {"[-signedjar <file>] name of signed JAR file", @@ -74,8 +76,10 @@ "[-sigalg <algorithm>] name of signature algorithm"}, {"[-verify] verify a signed JAR file", "[-verify] verify a signed JAR file"}, - {"[-verbose] verbose output when signing/verifying", - "[-verbose] verbose output when signing/verifying"}, + {"[-verbose[:suboptions]] verbose output when signing/verifying.", + "[-verbose[:suboptions]] verbose output when signing/verifying."}, + {" suboptions can be all, grouped or summary", + " suboptions can be all, grouped or summary"}, {"[-certs] display certificates when verbose and verifying", "[-certs] display certificates when verbose and verifying"}, {"[-tsa <url>] location of the Timestamping Authority", @@ -98,10 +102,22 @@ "[-providerClass <class> name of cryptographic service provider's"}, {" [-providerArg <arg>]] ... master class file and constructor argument", " [-providerArg <arg>]] ... master class file and constructor argument"}, + {"[-strict] treat warnings as errors", + "[-strict] treat warnings as errors"}, + {"Option lacks argument", "Option lacks argument"}, + {"Please type jarsigner -help for usage", "Please type jarsigner -help for usage"}, + {"Please specify jarfile name", "Please specify jarfile name"}, + {"Please specify alias name", "Please specify alias name"}, + {"Only one alias can be specified", "Only one alias can be specified"}, + {"This jar contains signed entries which is not signed by the specified alias(es).", + "This jar contains signed entries which is not signed by the specified alias(es)."}, + {"This jar contains signed entries that's not signed by alias in this keystore.", + "This jar contains signed entries that's not signed by alias in this keystore."}, {"s", "s"}, {"m", "m"}, {"k", "k"}, {"i", "i"}, + {"(and %d more)", "(and %d more)"}, {" s = signature was verified ", " s = signature was verified "}, {" m = entry is listed in manifest", @@ -110,7 +126,11 @@ " k = at least one certificate was found in keystore"}, {" i = at least one certificate was found in identity scope", " i = at least one certificate was found in identity scope"}, + {" X = not signed by specified alias(es)", + " X = not signed by specified alias(es)"}, {"no manifest.", "no manifest."}, + {"(Signature related entries)","(Signature related entries)"}, + {"(Unsigned entries)", "(Unsigned entries)"}, {"jar is unsigned. (signatures missing or not parsable)", "jar is unsigned. (signatures missing or not parsable)"}, {"jar verified.", "jar verified."}, @@ -134,6 +154,12 @@ "unable to instantiate keystore class: "}, {"Certificate chain not found for: alias. alias must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain.", "Certificate chain not found for: {0}. {1} must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain."}, + {"File specified by -certchain does not exist", + "File specified by -certchain does not exist"}, + {"Cannot restore certchain from file specified", + "Cannot restore certchain from file specified"}, + {"Certificate chain not found in the file specified.", + "Certificate chain not found in the file specified."}, {"found non-X.509 certificate in signer's chain", "found non-X.509 certificate in signer's chain"}, {"incomplete certificate chain", "incomplete certificate chain"}, @@ -149,6 +175,7 @@ {"certificate is not valid until", "certificate is not valid until {0}"}, {"certificate will expire on", "certificate will expire on {0}"}, + {"[CertPath not validated: ", "[CertPath not validated: "}, {"requesting a signature timestamp", "requesting a signature timestamp"}, {"TSA location: ", "TSA location: "}, @@ -189,14 +216,18 @@ "The signer certificate's ExtendedKeyUsage extension doesn't allow code signing."}, {"The signer certificate's NetscapeCertType extension doesn't allow code signing.", "The signer certificate's NetscapeCertType extension doesn't allow code signing."}, - {"This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing.", - "This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing."}, - {"This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing.", - "This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing."}, - {"This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing.", - "This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing."}, + {"This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing.", + "This jar contains entries whose signer certificate's KeyUsage extension doesn't allow code signing."}, + {"This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing.", + "This jar contains entries whose signer certificate's ExtendedKeyUsage extension doesn't allow code signing."}, + {"This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing.", + "This jar contains entries whose signer certificate's NetscapeCertType extension doesn't allow code signing."}, {"[{0} extension does not support code signing]", "[{0} extension does not support code signing]"}, + {"The signer's certificate chain is not validated.", + "The signer's certificate chain is not validated."}, + {"This jar contains entries whose certificate chain is not validated.", + "This jar contains entries whose certificate chain is not validated."}, }; /** diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/security/tools/KeyTool.java --- a/jdk/src/share/classes/sun/security/tools/KeyTool.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/security/tools/KeyTool.java Wed Jul 05 16:51:11 2017 +0200 @@ -2545,7 +2545,19 @@ * Returns true if the certificate is self-signed, false otherwise. */ private boolean isSelfSigned(X509Certificate cert) { - return cert.getSubjectDN().equals(cert.getIssuerDN()); + return signedBy(cert, cert); + } + + private boolean signedBy(X509Certificate end, X509Certificate ca) { + if (!ca.getSubjectDN().equals(end.getIssuerDN())) { + return false; + } + try { + end.verify(ca.getPublicKey()); + return true; + } catch (Exception e) { + return false; + } } /** @@ -2869,20 +2881,18 @@ Certificate tmpCert = replyCerts[0]; replyCerts[0] = replyCerts[i]; replyCerts[i] = tmpCert; - Principal issuer = ((X509Certificate)replyCerts[0]).getIssuerDN(); + + X509Certificate thisCert = (X509Certificate)replyCerts[0]; for (i=1; i < replyCerts.length-1; i++) { - // find a cert in the reply whose "subject" is the same as the - // given "issuer" + // find a cert in the reply who signs thisCert int j; for (j=i; j<replyCerts.length; j++) { - Principal subject; - subject = ((X509Certificate)replyCerts[j]).getSubjectDN(); - if (subject.equals(issuer)) { + if (signedBy(thisCert, (X509Certificate)replyCerts[j])) { tmpCert = replyCerts[i]; replyCerts[i] = replyCerts[j]; replyCerts[j] = tmpCert; - issuer = ((X509Certificate)replyCerts[i]).getIssuerDN(); + thisCert = (X509Certificate)replyCerts[i]; break; } } @@ -2892,18 +2902,6 @@ } } - // now verify each cert in the ordered chain - for (i=0; i<replyCerts.length-1; i++) { - PublicKey pubKey = replyCerts[i+1].getPublicKey(); - try { - replyCerts[i].verify(pubKey); - } catch (Exception e) { - throw new Exception(rb.getString - ("Certificate chain in reply does not verify: ") + - e.getMessage()); - } - } - if (noprompt) { return replyCerts; } @@ -3035,9 +3033,8 @@ private boolean buildChain(X509Certificate certToVerify, Vector<Certificate> chain, Hashtable<Principal, Vector<Certificate>> certs) { - Principal subject = certToVerify.getSubjectDN(); Principal issuer = certToVerify.getIssuerDN(); - if (subject.equals(issuer)) { + if (isSelfSigned(certToVerify)) { // reached self-signed root cert; // no verification needed because it's trusted. chain.addElement(certToVerify); @@ -3108,7 +3105,7 @@ /** * Returns the keystore with the configured CA certificates. */ - private KeyStore getCacertsKeyStore() + public static KeyStore getCacertsKeyStore() throws Exception { String sep = File.separator; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/security/util/ManifestEntryVerifier.java --- a/jdk/src/share/classes/sun/security/util/ManifestEntryVerifier.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/security/util/ManifestEntryVerifier.java Wed Jul 05 16:51:11 2017 +0200 @@ -44,8 +44,6 @@ private static final Debug debug = Debug.getInstance("jar"); - private static final Provider digestProvider = Providers.getSunProvider(); - /** the created digest objects */ HashMap<String, MessageDigest> createdDigests; @@ -127,7 +125,7 @@ try { digest = MessageDigest.getInstance - (algorithm, digestProvider); + (algorithm, Providers.getSunProvider()); createdDigests.put(algorithm, digest); } catch (NoSuchAlgorithmException nsae) { // ignore diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/swing/FilePane.java --- a/jdk/src/share/classes/sun/swing/FilePane.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/swing/FilePane.java Wed Jul 05 16:51:11 2017 +0200 @@ -34,6 +34,7 @@ import java.text.MessageFormat; import java.util.*; import java.util.List; +import java.util.concurrent.Callable; import javax.swing.*; import javax.swing.border.*; @@ -900,6 +901,16 @@ } } + @Override + public void sort() { + ShellFolder.getInvoker().invoke(new Callable<Void>() { + public Void call() throws Exception { + DetailsTableRowSorter.super.sort(); + return null; + } + }); + } + public void modelStructureChanged() { super.modelStructureChanged(); updateComparators(detailsTableModel.getColumns()); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java --- a/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/swing/plaf/synth/SynthFileChooserUIImpl.java Wed Jul 05 16:51:11 2017 +0200 @@ -29,6 +29,8 @@ import java.beans.*; import java.io.*; import java.util.*; +import java.security.AccessController; +import java.security.PrivilegedAction; import javax.swing.*; import javax.swing.event.*; @@ -749,7 +751,11 @@ File[] baseFolders; if (useShellFolder) { - baseFolders = (File[])ShellFolder.get("fileChooserComboBoxFolders"); + baseFolders = AccessController.doPrivileged(new PrivilegedAction<File[]>() { + public File[] run() { + return (File[]) ShellFolder.get("fileChooserComboBoxFolders"); + } + }); } else { baseFolders = fsv.getRoots(); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/CharTrie.java --- a/jdk/src/share/classes/sun/text/normalizer/CharTrie.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/text/normalizer/CharTrie.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Portions Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,9 @@ * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ - /* ******************************************************************************* - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved * * * * The original version of this source code and documentation is copyrighted * * and owned by IBM, These materials are provided under terms of a License * @@ -78,6 +77,66 @@ } /** + * Make a dummy CharTrie. + * A dummy trie is an empty runtime trie, used when a real data trie cannot + * be loaded. + * + * The trie always returns the initialValue, + * or the leadUnitValue for lead surrogate code points. + * The Latin-1 part is always set up to be linear. + * + * @param initialValue the initial value that is set for all code points + * @param leadUnitValue the value for lead surrogate code _units_ that do not + * have associated supplementary data + * @param dataManipulate object which provides methods to parse the char data + */ + public CharTrie(int initialValue, int leadUnitValue, DataManipulate dataManipulate) { + super(new char[BMP_INDEX_LENGTH+SURROGATE_BLOCK_COUNT], HEADER_OPTIONS_LATIN1_IS_LINEAR_MASK_, dataManipulate); + + int dataLength, latin1Length, i, limit; + char block; + + /* calculate the actual size of the dummy trie data */ + + /* max(Latin-1, block 0) */ + dataLength=latin1Length= INDEX_STAGE_1_SHIFT_<=8 ? 256 : DATA_BLOCK_LENGTH; + if(leadUnitValue!=initialValue) { + dataLength+=DATA_BLOCK_LENGTH; + } + m_data_=new char[dataLength]; + m_dataLength_=dataLength; + + m_initialValue_=(char)initialValue; + + /* fill the index and data arrays */ + + /* indexes are preset to 0 (block 0) */ + + /* Latin-1 data */ + for(i=0; i<latin1Length; ++i) { + m_data_[i]=(char)initialValue; + } + + if(leadUnitValue!=initialValue) { + /* indexes for lead surrogate code units to the block after Latin-1 */ + block=(char)(latin1Length>>INDEX_STAGE_2_SHIFT_); + i=0xd800>>INDEX_STAGE_1_SHIFT_; + limit=0xdc00>>INDEX_STAGE_1_SHIFT_; + for(; i<limit; ++i) { + m_index_[i]=block; + } + + /* data for lead surrogate code units */ + limit=latin1Length+DATA_BLOCK_LENGTH; + for(i=latin1Length; i<limit; ++i) { + m_data_[i]=(char)leadUnitValue; + } + } + + m_friendAgent_ = new FriendAgent(); + } + + /** * Java friend implementation */ public class FriendAgent @@ -130,7 +189,18 @@ */ public final char getCodePointValue(int ch) { - int offset = getCodePointOffset(ch); + int offset; + + // fastpath for U+0000..U+D7FF + if(0 <= ch && ch < UTF16.LEAD_SURROGATE_MIN_VALUE) { + // copy of getRawOffset() + offset = (m_index_[ch >> INDEX_STAGE_1_SHIFT_] << INDEX_STAGE_2_SHIFT_) + + (ch & INDEX_STAGE_3_MASK_); + return m_data_[offset]; + } + + // handle U+D800..U+10FFFF + offset = getCodePointOffset(ch); // return -1 if there is an error, in this case we return the default // value: m_initialValue_ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/NormalizerBase.java --- a/jdk/src/share/classes/sun/text/normalizer/NormalizerBase.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/text/normalizer/NormalizerBase.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Portions Copyright 2001-2006 Sun Microsystems, Inc. All Rights Reserved. + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,9 @@ * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ - /* ******************************************************************************* - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved * * * * The original version of this source code and documentation is copyrighted * * and owned by IBM, These materials are provided under terms of a License * @@ -127,7 +126,7 @@ * normalize(FCD) may be implemented with NFD. * * For more details on FCD see the collation design document: - * http://oss.software.ibm.com/cvs/icu/~checkout~/icuhtml/design/collation/ICU_collation_design.htm + * http://source.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm * * ICU collation performs either NFD or FCD normalization automatically if * normalization is turned on for the collator object. Beyond collation and diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/NormalizerDataReader.java --- a/jdk/src/share/classes/sun/text/normalizer/NormalizerDataReader.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/text/normalizer/NormalizerDataReader.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Portions Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved. + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,9 @@ * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ - /* ******************************************************************************* - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved * * * * The original version of this source code and documentation is copyrighted * * and owned by IBM, These materials are provided under terms of a License * @@ -331,7 +330,7 @@ throws IOException{ //Read the bytes that make up the normTrie - dataInputStream.read(normBytes); + dataInputStream.readFully(normBytes); //normTrieStream= new ByteArrayInputStream(normBytes); @@ -346,11 +345,11 @@ } //Read the fcdTrie - dataInputStream.read(fcdBytes); + dataInputStream.readFully(fcdBytes); //Read the AuxTrie - dataInputStream.read(auxBytes); + dataInputStream.readFully(auxBytes); } public byte[] getDataFormatVersion(){ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/NormalizerImpl.java --- a/jdk/src/share/classes/sun/text/normalizer/NormalizerImpl.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/text/normalizer/NormalizerImpl.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Portions Copyright 2003-2006 Sun Microsystems, Inc. All Rights Reserved. + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,9 @@ * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ - /* ******************************************************************************* - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved * * * * The original version of this source code and documentation is copyrighted * * and owned by IBM, These materials are provided under terms of a License * @@ -102,7 +101,7 @@ private static final long MIN_SPECIAL = (long)(0xfc000000 & UNSIGNED_INT_MASK); private static final long SURROGATES_TOP = (long)(0xfff00000 & UNSIGNED_INT_MASK); private static final long MIN_HANGUL = (long)(0xfff00000 & UNSIGNED_INT_MASK); - private static final long MIN_JAMO_V = (long)(0xfff20000 & UNSIGNED_INT_MASK); +// private static final long MIN_JAMO_V = (long)(0xfff20000 & UNSIGNED_INT_MASK); private static final long JAMO_V_TOP = (long)(0xfff30000 & UNSIGNED_INT_MASK); @@ -908,7 +907,7 @@ buffer = composePart(args,prevStarter,src,srcStart,srcLimit,options,nx); // compare the normalized version with the original - if(0!=strCompare(buffer,0,args.length,src,prevStarter,(srcStart-prevStarter), false)) { + if(0!=strCompare(buffer,0,args.length,src,prevStarter,srcStart, false)) { result=NormalizerBase.NO; // normalization differs break; } @@ -2291,7 +2290,7 @@ private static final int OPTIONS_NX_MASK=0x1f; private static final int OPTIONS_UNICODE_MASK=0xe0; public static final int OPTIONS_SETS_MASK=0xff; - private static final int OPTIONS_UNICODE_SHIFT=5; +// private static final int OPTIONS_UNICODE_SHIFT=5; private static final UnicodeSet[] nxCache = new UnicodeSet[OPTIONS_SETS_MASK+1]; /* Constants for options flags for normalization.*/ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/Trie.java --- a/jdk/src/share/classes/sun/text/normalizer/Trie.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/text/normalizer/Trie.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Portions Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,9 @@ * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ - /* ******************************************************************************* - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved * * * * The original version of this source code and documentation is copyrighted * * and owned by IBM, These materials are provided under terms of a License * @@ -37,10 +36,9 @@ package sun.text.normalizer; +import java.io.DataInputStream; import java.io.InputStream; -import java.io.DataInputStream; import java.io.IOException; -import java.util.Arrays; /** * <p>A trie is a kind of compressed, serializable table of values @@ -81,7 +79,6 @@ * This interface specifies methods to be implemented in order for * com.ibm.impl.Trie, to surrogate offset information encapsulated within * the data. - * @draft 2.1 */ public static interface DataManipulate { @@ -92,11 +89,17 @@ * @param value data value for a surrogate from the trie, including the * folding offset * @return data offset or 0 if there is no data for the lead surrogate - * @draft 2.1 */ public int getFoldingOffset(int value); } + // default implementation + private static class DefaultGetFoldingOffset implements DataManipulate { + public int getFoldingOffset(int value) { + return value; + } + } + // protected constructor ------------------------------------------- /** @@ -107,7 +110,6 @@ * trie data * @throws IOException thrown when input stream does not have the * right header. - * @draft 2.1 */ protected Trie(InputStream inputStream, DataManipulate dataManipulate) throws IOException @@ -121,7 +123,11 @@ throw new IllegalArgumentException("ICU data file error: Trie header authentication failed, please check if you have the most updated ICU data file"); } - m_dataManipulate_ = dataManipulate; + if(dataManipulate != null) { + m_dataManipulate_ = dataManipulate; + } else { + m_dataManipulate_ = new DefaultGetFoldingOffset(); + } m_isLatin1Linear_ = (m_options_ & HEADER_OPTIONS_LATIN1_IS_LINEAR_MASK_) != 0; m_dataOffset_ = input.readInt(); @@ -135,19 +141,21 @@ * @param options used by the trie * @param dataManipulate object containing the information to parse the * trie data - * @draft 2.2 */ protected Trie(char index[], int options, DataManipulate dataManipulate) { m_options_ = options; - m_dataManipulate_ = dataManipulate; + if(dataManipulate != null) { + m_dataManipulate_ = dataManipulate; + } else { + m_dataManipulate_ = new DefaultGetFoldingOffset(); + } m_isLatin1Linear_ = (m_options_ & HEADER_OPTIONS_LATIN1_IS_LINEAR_MASK_) != 0; m_index_ = index; m_dataOffset_ = m_index_.length; } - // protected data members ------------------------------------------ /** @@ -158,7 +166,6 @@ protected static final int LEAD_INDEX_OFFSET_ = 0x2800 >> 5; /** * Shift size for shifting right the input index. 1..9 - * @draft 2.1 */ protected static final int INDEX_STAGE_1_SHIFT_ = 5; /** @@ -168,31 +175,39 @@ * This requires blocks of stage 2 data to be aligned by * DATA_GRANULARITY. * 0..INDEX_STAGE_1_SHIFT - * @draft 2.1 */ protected static final int INDEX_STAGE_2_SHIFT_ = 2; /** + * Number of data values in a stage 2 (data array) block. + */ + protected static final int DATA_BLOCK_LENGTH=1<<INDEX_STAGE_1_SHIFT_; + /** * Mask for getting the lower bits from the input index. - * DATA_BLOCK_LENGTH_ - 1. - * @draft 2.1 + * DATA_BLOCK_LENGTH - 1. */ - protected static final int INDEX_STAGE_3_MASK_ = - (1 << INDEX_STAGE_1_SHIFT_) - 1; + protected static final int INDEX_STAGE_3_MASK_ = DATA_BLOCK_LENGTH - 1; + /** Number of bits of a trail surrogate that are used in index table lookups. */ + protected static final int SURROGATE_BLOCK_BITS=10-INDEX_STAGE_1_SHIFT_; + /** + * Number of index (stage 1) entries per lead surrogate. + * Same as number of index entries for 1024 trail surrogates, + * ==0x400>>INDEX_STAGE_1_SHIFT_ + */ + protected static final int SURROGATE_BLOCK_COUNT=(1<<SURROGATE_BLOCK_BITS); + /** Length of the BMP portion of the index (stage 1) array. */ + protected static final int BMP_INDEX_LENGTH=0x10000>>INDEX_STAGE_1_SHIFT_; /** * Surrogate mask to use when shifting offset to retrieve supplementary * values - * @draft 2.1 */ protected static final int SURROGATE_MASK_ = 0x3FF; /** * Index or UTF16 characters - * @draft 2.1 */ protected char m_index_[]; /** * Internal TrieValue which handles the parsing of the data value. * This class is to be implemented by the user - * @draft 2.1 */ protected DataManipulate m_dataManipulate_; /** @@ -200,7 +215,6 @@ * index and data into a char array, so this is used to indicate the * initial offset to the data portion. * Note this index always points to the initial value. - * @draft 2.1 */ protected int m_dataOffset_; /** @@ -215,7 +229,6 @@ * @param lead lead surrogate * @param trail trailing surrogate * @return offset to data - * @draft 2.1 */ protected abstract int getSurrogateOffset(char lead, char trail); @@ -223,14 +236,12 @@ * Gets the value at the argument index * @param index value at index will be retrieved * @return 32 bit value - * @draft 2.1 */ protected abstract int getValue(int index); /** * Gets the default initial value * @return 32 bit value - * @draft 2.1 */ protected abstract int getInitialValue(); @@ -247,7 +258,6 @@ * @param offset index offset which ch is to start from * @param ch index to be used after offset * @return offset to the data - * @draft 2.1 */ protected final int getRawOffset(int offset, char ch) { @@ -261,7 +271,6 @@ * Treats a lead surrogate as a normal code point. * @param ch BMP character * @return offset to data - * @draft 2.1 */ protected final int getBMPOffset(char ch) { @@ -279,7 +288,6 @@ * the next trailing surrogate character. * @param ch lead surrogate character * @return offset to data - * @draft 2.1 */ protected final int getLeadOffset(char ch) { @@ -293,26 +301,27 @@ * Gets the offset to data which the codepoint points to * @param ch codepoint * @return offset to data - * @draft 2.1 */ protected final int getCodePointOffset(int ch) { // if ((ch >> 16) == 0) slower - if (ch >= UTF16.CODEPOINT_MIN_VALUE - && ch < UTF16.SUPPLEMENTARY_MIN_VALUE) { + if (ch < 0) { + return -1; + } else if (ch < UTF16.LEAD_SURROGATE_MIN_VALUE) { + // fastpath for the part of the BMP below surrogates (D800) where getRawOffset() works + return getRawOffset(0, (char)ch); + } else if (ch < UTF16.SUPPLEMENTARY_MIN_VALUE) { // BMP codepoint return getBMPOffset((char)ch); - } - // for optimization - if (ch >= UTF16.CODEPOINT_MIN_VALUE - && ch <= UCharacter.MAX_VALUE) { + } else if (ch <= UCharacter.MAX_VALUE) { // look at the construction of supplementary characters // trail forms the ends of it. return getSurrogateOffset(UTF16.getLeadSurrogate(ch), (char)(ch & SURROGATE_MASK_)); + } else { + // return -1 // if there is an error, in this case we return + return -1; } - // return -1 if there is an error, in this case we return - return -1; } /** @@ -320,7 +329,6 @@ * <p>This is overwritten by the child classes. * @param inputStream input stream containing the trie information * @exception IOException thrown when data reading fails. - * @draft 2.1 */ protected void unserialize(InputStream inputStream) throws IOException { @@ -335,7 +343,6 @@ /** * Determines if this is a 32 bit trie * @return true if options specifies this is a 32 bit trie - * @draft 2.1 */ protected final boolean isIntTrie() { @@ -345,7 +352,6 @@ /** * Determines if this is a 16 bit trie * @return true if this is a 16 bit trie - * @draft 2.1 */ protected final boolean isCharTrie() { @@ -355,39 +361,19 @@ // private data members -------------------------------------------- /** - * Signature index - */ - private static final int HEADER_SIGNATURE_INDEX_ = 0; - /** - * Options index - */ - private static final int HEADER_OPTIONS_INDEX_ = 1 << 1; - /** - * Index length index - */ - private static final int HEADER_INDEX_LENGTH_INDEX_ = 2 << 1; - /** - * Data length index - */ - private static final int HEADER_DATA_LENGTH_INDEX_ = 3 << 1; - /** - * Size of header - */ - private static final int HEADER_LENGTH_ = 4 << 1; - /** * Latin 1 option mask */ - private static final int HEADER_OPTIONS_LATIN1_IS_LINEAR_MASK_ = 0x200; + protected static final int HEADER_OPTIONS_LATIN1_IS_LINEAR_MASK_ = 0x200; /** * Constant number to authenticate the byte block */ - private static final int HEADER_SIGNATURE_ = 0x54726965; + protected static final int HEADER_SIGNATURE_ = 0x54726965; /** * Header option formatting */ private static final int HEADER_OPTIONS_SHIFT_MASK_ = 0xF; - private static final int HEADER_OPTIONS_INDEX_SHIFT_ = 4; - private static final int HEADER_OPTIONS_DATA_IS_32_BIT_ = 0x100; + protected static final int HEADER_OPTIONS_INDEX_SHIFT_ = 4; + protected static final int HEADER_OPTIONS_DATA_IS_32_BIT_ = 0x100; /** * Flag indicator for Latin quick access data block @@ -409,9 +395,8 @@ /** * Authenticates raw data header. * Checking the header information, signature and options. - * @param rawdata array of char data to be checked + * @param signature This contains the options and type of a Trie * @return true if the header is authenticated valid - * @draft 2.1 */ private final boolean checkHeader(int signature) { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/TrieIterator.java --- a/jdk/src/share/classes/sun/text/normalizer/TrieIterator.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/text/normalizer/TrieIterator.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Portions Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,9 @@ * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ - /* ******************************************************************************* - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved * * * * The original version of this source code and documentation is copyrighted * * and owned by IBM, These materials are provided under terms of a License * @@ -108,15 +107,14 @@ * @since release 2.1, Jan 17 2002 */ public class TrieIterator implements RangeValueIterator +{ -{ // public constructor --------------------------------------------- /** * TrieEnumeration constructor * @param trie to be used * @exception IllegalArgumentException throw when argument is null. - * @draft 2.1 */ public TrieIterator(Trie trie) { @@ -141,7 +139,6 @@ * @return true if we are not at the end of the iteration, false otherwise. * @exception NoSuchElementException - if no more elements exist. * @see com.ibm.icu.util.RangeValueIterator.Element - * @draft 2.1 */ public final boolean next(Element element) { @@ -158,7 +155,6 @@ /** * Resets the iterator to the beginning of the iteration - * @draft 2.1 */ public final void reset() { @@ -186,7 +182,6 @@ * The default function is to return the value as it is. * @param value a value from the trie * @return extracted value - * @draft 2.1 */ protected int extract(int value) { @@ -278,7 +273,6 @@ * Note, if there are no more iterations, it will never get to here. * Blocked out by next(). * @param element return result object - * @draft 2.1 */ private final void calculateNextSupplementaryElement(Element element) { @@ -516,10 +510,6 @@ */ private static final int TRAIL_SURROGATE_MIN_VALUE_ = 0xDC00; /** - * Trail surrogate maximum value - */ - private static final int TRAIL_SURROGATE_MAX_VALUE_ = 0xDFFF; - /** * Number of trail surrogate */ private static final int TRAIL_SURROGATE_COUNT_ = 0x400; @@ -538,11 +528,6 @@ private static final int DATA_BLOCK_LENGTH_ = 1 << Trie.INDEX_STAGE_1_SHIFT_; /** - * Number of codepoints in a stage 2 block - */ - private static final int DATA_BLOCK_SUPPLEMENTARY_LENGTH_ = - DATA_BLOCK_LENGTH_ << 10; - /** * Trie instance */ private Trie m_trie_; @@ -560,10 +545,4 @@ private int m_nextBlock_; private int m_nextBlockIndex_; private int m_nextTrailIndexOffset_; - /** - * This is the return result element - */ - private int m_start_; - private int m_limit_; - private int m_value_; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/UBiDiProps.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/classes/sun/text/normalizer/UBiDiProps.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,179 @@ +/* + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ +/* + ******************************************************************************* + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved * + * * + * The original version of this source code and documentation is copyrighted * + * and owned by IBM, These materials are provided under terms of a License * + * Agreement between IBM and Sun. This technology is protected by multiple * + * US and International patents. This notice and attribution to IBM may not * + * to removed. * + ******************************************************************************* +* file name: UBiDiProps.java +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2005jan16 +* created by: Markus W. Scherer +* +* Low-level Unicode bidi/shaping properties access. +* Java port of ubidi_props.h/.c. +*/ + +package sun.text.normalizer; + +import java.io.BufferedInputStream; +import java.io.DataInputStream; +import java.io.InputStream; +import java.io.IOException; + +public final class UBiDiProps { + // constructors etc. --------------------------------------------------- *** + + // port of ubidi_openProps() + public UBiDiProps() throws IOException{ + InputStream is=ICUData.getStream(DATA_FILE_NAME); + BufferedInputStream b=new BufferedInputStream(is, 4096 /* data buffer size */); + readData(b); + b.close(); + is.close(); + + } + + private void readData(InputStream is) throws IOException { + DataInputStream inputStream=new DataInputStream(is); + + // read the header + ICUBinary.readHeader(inputStream, FMT, new IsAcceptable()); + + // read indexes[] + int i, count; + count=inputStream.readInt(); + if(count<IX_INDEX_TOP) { + throw new IOException("indexes[0] too small in "+DATA_FILE_NAME); + } + indexes=new int[count]; + + indexes[0]=count; + for(i=1; i<count; ++i) { + indexes[i]=inputStream.readInt(); + } + + // read the trie + trie=new CharTrie(inputStream, null); + + // read mirrors[] + count=indexes[IX_MIRROR_LENGTH]; + if(count>0) { + mirrors=new int[count]; + for(i=0; i<count; ++i) { + mirrors[i]=inputStream.readInt(); + } + } + + // read jgArray[] + count=indexes[IX_JG_LIMIT]-indexes[IX_JG_START]; + jgArray=new byte[count]; + for(i=0; i<count; ++i) { + jgArray[i]=inputStream.readByte(); + } + } + + // implement ICUBinary.Authenticate + private final class IsAcceptable implements ICUBinary.Authenticate { + public boolean isDataVersionAcceptable(byte version[]) { + return version[0]==1 && + version[2]==Trie.INDEX_STAGE_1_SHIFT_ && version[3]==Trie.INDEX_STAGE_2_SHIFT_; + } + } + + // UBiDiProps singleton + private static UBiDiProps gBdp=null; + + // port of ubidi_getSingleton() + public static final synchronized UBiDiProps getSingleton() throws IOException { + if(gBdp==null) { + gBdp=new UBiDiProps(); + } + return gBdp; + } + + // UBiDiProps dummy singleton + private static UBiDiProps gBdpDummy=null; + + private UBiDiProps(boolean makeDummy) { // ignore makeDummy, only creates a unique signature + indexes=new int[IX_TOP]; + indexes[0]=IX_TOP; + trie=new CharTrie(0, 0, null); // dummy trie, always returns 0 + } + + /** + * Get a singleton dummy object, one that works with no real data. + * This can be used when the real data is not available. + * Using the dummy can reduce checks for available data after an initial failure. + * Port of ucase_getDummy(). + */ + public static final synchronized UBiDiProps getDummy() { + if(gBdpDummy==null) { + gBdpDummy=new UBiDiProps(true); + } + return gBdpDummy; + } + + public final int getClass(int c) { + return getClassFromProps(trie.getCodePointValue(c)); + } + + // data members -------------------------------------------------------- *** + private int indexes[]; + private int mirrors[]; + private byte jgArray[]; + + private CharTrie trie; + + // data format constants ----------------------------------------------- *** + private static final String DATA_FILE_NAME = "/sun/text/resources/ubidi.icu"; + + /* format "BiDi" */ + private static final byte FMT[]={ 0x42, 0x69, 0x44, 0x69 }; + + /* indexes into indexes[] */ + private static final int IX_INDEX_TOP=0; + private static final int IX_MIRROR_LENGTH=3; + + private static final int IX_JG_START=4; + private static final int IX_JG_LIMIT=5; + + private static final int IX_TOP=16; + + private static final int CLASS_MASK= 0x0000001f; + + private static final int getClassFromProps(int props) { + return props&CLASS_MASK; + } + +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/UCharacter.java --- a/jdk/src/share/classes/sun/text/normalizer/UCharacter.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/text/normalizer/UCharacter.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Portions Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,7 @@ */ /* ******************************************************************************* - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved * * * * The original version of this source code and documentation is copyrighted * * and owned by IBM, These materials are provided under terms of a License * @@ -36,19 +36,18 @@ package sun.text.normalizer; -import java.lang.ref.SoftReference; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; +import java.io.IOException; +import java.util.MissingResourceException; /** * <p> * The UCharacter class provides extensions to the - * <a href=http://java.sun.com/j2se/1.3/docs/api/java/lang/Character.html> + * <a href="http://java.sun.com/j2se/1.5/docs/api/java/lang/Character.html"> * java.lang.Character</a> class. These extensions provide support for - * Unicode 3.2 properties and together with the <a href=../text/UTF16.html>UTF16</a> + * more Unicode properties and together with the <a href=../text/UTF16.html>UTF16</a> * class, provide support for supplementary characters (those with code * points above U+FFFF). + * Each ICU release supports the latest version of Unicode available at that time. * </p> * <p> * Code points are represented in these API using ints. While it would be @@ -67,7 +66,7 @@ * <i>$ICU4J_CLASS/com.ibm.icu.impl.data</i>. * </p> * <p> - * Aside from the additions for UTF-16 support, and the updated Unicode 3.1 + * Aside from the additions for UTF-16 support, and the updated Unicode * properties, the main differences between UCharacter and Character are: * <ul> * <li> UCharacter is not designed to be a char wrapper and does not have @@ -77,7 +76,7 @@ * <li> char charValue(), * <li> int compareTo(java.lang.Character, java.lang.Character), etc. * </ul> - * <li> UCharacter does not include Character APIs that are deprecated, not + * <li> UCharacter does not include Character APIs that are deprecated, nor * does it include the Java-specific character information, such as * boolean isJavaIdentifierPart(char ch). * <li> Character maps characters 'A' - 'Z' and 'a' - 'z' to the numeric @@ -89,10 +88,75 @@ * </ul> * <p> * Further detail differences can be determined from the program - * <a href = http://oss.software.ibm.com/developerworks/opensource/cvs/icu4j/~checkout~/icu4j/src/com/ibm/icu/dev/test/lang/UCharacterCompare.java> + * <a href="http://source.icu-project.org/repos/icu/icu4j/trunk/src/com/ibm/icu/dev/test/lang/UCharacterCompare.java"> * com.ibm.icu.dev.test.lang.UCharacterCompare</a> * </p> * <p> + * In addition to Java compatibility functions, which calculate derived properties, + * this API provides low-level access to the Unicode Character Database. + * </p> + * <p> + * Unicode assigns each code point (not just assigned character) values for + * many properties. + * Most of them are simple boolean flags, or constants from a small enumerated list. + * For some properties, values are strings or other relatively more complex types. + * </p> + * <p> + * For more information see + * "About the Unicode Character Database" (http://www.unicode.org/ucd/) + * and the ICU User Guide chapter on Properties (http://www.icu-project.org/userguide/properties.html). + * </p> + * <p> + * There are also functions that provide easy migration from C/POSIX functions + * like isblank(). Their use is generally discouraged because the C/POSIX + * standards do not define their semantics beyond the ASCII range, which means + * that different implementations exhibit very different behavior. + * Instead, Unicode properties should be used directly. + * </p> + * <p> + * There are also only a few, broad C/POSIX character classes, and they tend + * to be used for conflicting purposes. For example, the "isalpha()" class + * is sometimes used to determine word boundaries, while a more sophisticated + * approach would at least distinguish initial letters from continuation + * characters (the latter including combining marks). + * (In ICU, BreakIterator is the most sophisticated API for word boundaries.) + * Another example: There is no "istitle()" class for titlecase characters. + * </p> + * <p> + * ICU 3.4 and later provides API access for all twelve C/POSIX character classes. + * ICU implements them according to the Standard Recommendations in + * Annex C: Compatibility Properties of UTS #18 Unicode Regular Expressions + * (http://www.unicode.org/reports/tr18/#Compatibility_Properties). + * </p> + * <p> + * API access for C/POSIX character classes is as follows: + * - alpha: isUAlphabetic(c) or hasBinaryProperty(c, UProperty.ALPHABETIC) + * - lower: isULowercase(c) or hasBinaryProperty(c, UProperty.LOWERCASE) + * - upper: isUUppercase(c) or hasBinaryProperty(c, UProperty.UPPERCASE) + * - punct: ((1<<getType(c)) & ((1<<DASH_PUNCTUATION)|(1<<START_PUNCTUATION)|(1<<END_PUNCTUATION)|(1<<CONNECTOR_PUNCTUATION)|(1<<OTHER_PUNCTUATION)|(1<<INITIAL_PUNCTUATION)|(1<<FINAL_PUNCTUATION)))!=0 + * - digit: isDigit(c) or getType(c)==DECIMAL_DIGIT_NUMBER + * - xdigit: hasBinaryProperty(c, UProperty.POSIX_XDIGIT) + * - alnum: hasBinaryProperty(c, UProperty.POSIX_ALNUM) + * - space: isUWhiteSpace(c) or hasBinaryProperty(c, UProperty.WHITE_SPACE) + * - blank: hasBinaryProperty(c, UProperty.POSIX_BLANK) + * - cntrl: getType(c)==CONTROL + * - graph: hasBinaryProperty(c, UProperty.POSIX_GRAPH) + * - print: hasBinaryProperty(c, UProperty.POSIX_PRINT) + * </p> + * <p> + * The C/POSIX character classes are also available in UnicodeSet patterns, + * using patterns like [:graph:] or \p{graph}. + * </p> + * <p> + * Note: There are several ICU (and Java) whitespace functions. + * Comparison: + * - isUWhiteSpace=UCHAR_WHITE_SPACE: Unicode White_Space property; + * most of general categories "Z" (separators) + most whitespace ISO controls + * (including no-break spaces, but excluding IS1..IS4 and ZWSP) + * - isWhitespace: Java isWhitespace; Z + whitespace ISO controls but excluding no-break spaces + * - isSpaceChar: just Z (including no-break spaces) + * </p> + * <p> * This class is not subclassable * </p> * @author Syn Wee Quek @@ -113,92 +177,7 @@ /** * @stable ICU 2.4 */ - public static final int NONE = 0; - /** - * @stable ICU 2.4 - */ public static final int DECIMAL = 1; - /** - * @stable ICU 2.4 - */ - public static final int DIGIT = 2; - /** - * @stable ICU 2.4 - */ - public static final int NUMERIC = 3; - /** - * @stable ICU 2.4 - */ - public static final int COUNT = 4; - } - - /** - * Hangul Syllable Type constants. - * - * @see UProperty#HANGUL_SYLLABLE_TYPE - * @stable ICU 2.6 - */ - public static interface HangulSyllableType - { - /** - * @stable ICU 2.6 - */ - public static final int NOT_APPLICABLE = 0; /*[NA]*/ /*See note !!*/ - /** - * @stable ICU 2.6 - */ - public static final int LEADING_JAMO = 1; /*[L]*/ - /** - * @stable ICU 2.6 - */ - public static final int VOWEL_JAMO = 2; /*[V]*/ - /** - * @stable ICU 2.6 - */ - public static final int TRAILING_JAMO = 3; /*[T]*/ - /** - * @stable ICU 2.6 - */ - public static final int LV_SYLLABLE = 4; /*[LV]*/ - /** - * @stable ICU 2.6 - */ - public static final int LVT_SYLLABLE = 5; /*[LVT]*/ - /** - * @stable ICU 2.6 - */ - public static final int COUNT = 6; - } - - /** - * [Sun] This interface moved from UCharacterEnums.java. - * - * 'Enum' for the CharacterCategory constants. These constants are - * compatible in name <b>but not in value</b> with those defined in - * <code>java.lang.Character</code>. - * @see UCharacterCategory - * @draft ICU 3.0 - * @deprecated This is a draft API and might change in a future release of ICU. - */ - public static interface ECharacterCategory - { - /** - * Character type Lu - * @stable ICU 2.1 - */ - public static final int UPPERCASE_LETTER = 1; - - /** - * Character type Lt - * @stable ICU 2.1 - */ - public static final int TITLECASE_LETTER = 3; - - /** - * Character type Lo - * @stable ICU 2.1 - */ - public static final int OTHER_LETTER = 5; } // public data members ----------------------------------------------- @@ -225,14 +204,6 @@ public static final int SUPPLEMENTARY_MIN_VALUE = UTF16.SUPPLEMENTARY_MIN_VALUE; - /** - * Special value that is returned by getUnicodeNumericValue(int) when no - * numeric value is defined for a code point. - * @stable ICU 2.4 - * @see #getUnicodeNumericValue - */ - public static final double NO_NUMERIC_VALUE = -123456789; - // public methods ---------------------------------------------------- /** @@ -262,161 +233,16 @@ { // when ch is out of bounds getProperty == 0 int props = getProperty(ch); - if (getNumericType(props) != NumericType.DECIMAL) { - return (radix <= 10) ? -1 : getEuropeanDigit(ch); - } - // if props == 0, it will just fall through and return -1 - if (isNotExceptionIndicator(props)) { - // not contained in exception data - // getSignedValue is just shifting so we can check for the sign - // first - // Optimization - // int result = UCharacterProperty.getSignedValue(props); - // if (result >= 0) { - // return result; - // } - if (props >= 0) { - return UCharacterProperty.getSignedValue(props); - } + int value; + if (getNumericType(props) == NumericType.DECIMAL) { + value = UCharacterProperty.getUnsignedValue(props); + } else { + value = getEuropeanDigit(ch); } - else { - int index = UCharacterProperty.getExceptionIndex(props); - if (PROPERTY_.hasExceptionValue(index, - UCharacterProperty.EXC_NUMERIC_VALUE_)) { - int result = PROPERTY_.getException(index, - UCharacterProperty.EXC_NUMERIC_VALUE_); - if (result >= 0) { - return result; - } - } - } - - if (radix > 10) { - int result = getEuropeanDigit(ch); - if (result >= 0 && result < radix) { - return result; - } - } - return -1; + return (0 <= value && value < radix) ? value : -1; } /** - * <p>Get the numeric value for a Unicode code point as defined in the - * Unicode Character Database.</p> - * <p>A "double" return type is necessary because some numeric values are - * fractions, negative, or too large for int.</p> - * <p>For characters without any numeric values in the Unicode Character - * Database, this function will return NO_NUMERIC_VALUE.</p> - * <p><em>API Change:</em> In release 2.2 and prior, this API has a - * return type int and returns -1 when the argument ch does not have a - * corresponding numeric value. This has been changed to synch with ICU4C - * </p> - * This corresponds to the ICU4C function u_getNumericValue. - * @param ch Code point to get the numeric value for. - * @return numeric value of ch, or NO_NUMERIC_VALUE if none is defined. - * @stable ICU 2.4 - */ - public static double getUnicodeNumericValue(int ch) - { - // equivalent to c version double u_getNumericValue(UChar32 c) - int props = PROPERTY_.getProperty(ch); - int numericType = getNumericType(props); - if (numericType > NumericType.NONE && numericType < NumericType.COUNT) { - if (isNotExceptionIndicator(props)) { - return UCharacterProperty.getSignedValue(props); - } - else { - int index = UCharacterProperty.getExceptionIndex(props); - boolean nex = false; - boolean dex = false; - double numerator = 0; - if (PROPERTY_.hasExceptionValue(index, - UCharacterProperty.EXC_NUMERIC_VALUE_)) { - int num = PROPERTY_.getException(index, - UCharacterProperty.EXC_NUMERIC_VALUE_); - // There are special values for huge numbers that are - // powers of ten. genprops/store.c documents: - // if numericValue = 0x7fffff00 + x then - // numericValue = 10 ^ x - if (num >= NUMERATOR_POWER_LIMIT_) { - num &= 0xff; - // 10^x without math.h - numerator = Math.pow(10, num); - } - else { - numerator = num; - } - nex = true; - } - double denominator = 0; - if (PROPERTY_.hasExceptionValue(index, - UCharacterProperty.EXC_DENOMINATOR_VALUE_)) { - denominator = PROPERTY_.getException(index, - UCharacterProperty.EXC_DENOMINATOR_VALUE_); - // faster path not in c - if (numerator != 0) { - return numerator / denominator; - } - dex = true; - } - - if (nex) { - if (dex) { - return numerator / denominator; - } - return numerator; - } - if (dex) { - return 1 / denominator; - } - } - } - return NO_NUMERIC_VALUE; - } - - /** - * Returns a value indicating a code point's Unicode category. - * Up-to-date Unicode implementation of java.lang.Character.getType() - * except for the above mentioned code points that had their category - * changed.<br> - * Return results are constants from the interface - * <a href=UCharacterCategory.html>UCharacterCategory</a><br> - * <em>NOTE:</em> the UCharacterCategory values are <em>not</em> compatible with - * those returned by java.lang.Character.getType. UCharacterCategory values - * match the ones used in ICU4C, while java.lang.Character type - * values, though similar, skip the value 17.</p> - * @param ch code point whose type is to be determined - * @return category which is a value of UCharacterCategory - * @stable ICU 2.1 - */ - public static int getType(int ch) - { - return getProperty(ch) & UCharacterProperty.TYPE_MASK; - } - - //// for StringPrep - /** - * Returns a code point corresponding to the two UTF16 characters. - * @param lead the lead char - * @param trail the trail char - * @return code point if surrogate characters are valid. - * @exception IllegalArgumentException thrown when argument characters do - * not form a valid codepoint - * @stable ICU 2.1 - */ - public static int getCodePoint(char lead, char trail) - { - if (lead >= UTF16.LEAD_SURROGATE_MIN_VALUE && - lead <= UTF16.LEAD_SURROGATE_MAX_VALUE && - trail >= UTF16.TRAIL_SURROGATE_MIN_VALUE && - trail <= UTF16.TRAIL_SURROGATE_MAX_VALUE) { - return UCharacterProperty.getRawSupplementary(lead, trail); - } - throw new IllegalArgumentException("Illegal surrogate characters"); - } - - //// for StringPrep - /** * Returns the Bidirection property of a code point. * For example, 0x0041 (letter A) has the LEFT_TO_RIGHT directional * property.<br> @@ -428,111 +254,24 @@ */ public static int getDirection(int ch) { - // when ch is out of bounds getProperty == 0 - return (getProperty(ch) >> BIDI_SHIFT_) & BIDI_MASK_AFTER_SHIFT_; + return gBdp.getClass(ch); } /** - * The given string is mapped to its case folding equivalent according to - * UnicodeData.txt and CaseFolding.txt; if any character has no case - * folding equivalent, the character itself is returned. - * "Full", multiple-code point case folding mappings are returned here. - * For "simple" single-code point mappings use the API - * foldCase(int ch, boolean defaultmapping). - * @param str the String to be converted - * @param defaultmapping Indicates if all mappings defined in - * CaseFolding.txt is to be used, otherwise the - * mappings for dotted I and dotless i marked with - * 'I' in CaseFolding.txt will be skipped. - * @return the case folding equivalent of the character, if - * any; otherwise the character itself. - * @see #foldCase(int, boolean) + * Returns a code point corresponding to the two UTF16 characters. + * @param lead the lead char + * @param trail the trail char + * @return code point if surrogate characters are valid. + * @exception IllegalArgumentException thrown when argument characters do + * not form a valid codepoint * @stable ICU 2.1 */ - public static String foldCase(String str, boolean defaultmapping) + public static int getCodePoint(char lead, char trail) { - int size = str.length(); - StringBuffer result = new StringBuffer(size); - int offset = 0; - int ch; - - // case mapping loop - while (offset < size) { - ch = UTF16.charAt(str, offset); - offset += UTF16.getCharCount(ch); - int props = PROPERTY_.getProperty(ch); - if (isNotExceptionIndicator(props)) { - int type = UCharacterProperty.TYPE_MASK & props; - if (type == ECharacterCategory.UPPERCASE_LETTER || - type == ECharacterCategory.TITLECASE_LETTER) { - ch += UCharacterProperty.getSignedValue(props); - } - } - else { - int index = UCharacterProperty.getExceptionIndex(props); - if (PROPERTY_.hasExceptionValue(index, - UCharacterProperty.EXC_CASE_FOLDING_)) { - int exception = PROPERTY_.getException(index, - UCharacterProperty.EXC_CASE_FOLDING_); - if (exception != 0) { - PROPERTY_.getFoldCase(exception & LAST_CHAR_MASK_, - exception >> SHIFT_24_, result); - } - else { - // special case folding mappings, hardcoded - if (ch != 0x49 && ch != 0x130) { - // return ch itself because there is no special - // mapping for it - UTF16.append(result, ch); - continue; - } - if (defaultmapping) { - // default mappings - if (ch == 0x49) { - // 0049; C; 0069; # LATIN CAPITAL LETTER I - result.append( - UCharacterProperty.LATIN_SMALL_LETTER_I_); - } - else if (ch == 0x130) { - // 0130; F; 0069 0307; - // # LATIN CAPITAL LETTER I WITH DOT ABOVE - result.append( - UCharacterProperty.LATIN_SMALL_LETTER_I_); - result.append((char)0x307); - } - } - else { - // Turkic mappings - if (ch == 0x49) { - // 0049; T; 0131; # LATIN CAPITAL LETTER I - result.append((char)0x131); - } - else if (ch == 0x130) { - // 0130; T; 0069; - // # LATIN CAPITAL LETTER I WITH DOT ABOVE - result.append( - UCharacterProperty.LATIN_SMALL_LETTER_I_); - } - } - } - // do not fall through to the output of c - continue; - } - else { - if (PROPERTY_.hasExceptionValue(index, - UCharacterProperty.EXC_LOWERCASE_)) { - ch = PROPERTY_.getException(index, - UCharacterProperty.EXC_LOWERCASE_); - } - } - - } - - // handle 1:1 code point mappings from UnicodeData.txt - UTF16.append(result, ch); + if (UTF16.isLeadSurrogate(lead) && UTF16.isTrailSurrogate(trail)) { + return UCharacterProperty.getRawSupplementary(lead, trail); } - - return result.toString(); + throw new IllegalArgumentException("Illegal surrogate characters"); } /** @@ -555,83 +294,6 @@ return PROPERTY_.getAge(ch); } - /** - * <p>Gets the property value for an Unicode property type of a code point. - * Also returns binary and mask property values.</p> - * <p>Unicode, especially in version 3.2, defines many more properties than - * the original set in UnicodeData.txt.</p> - * <p>The properties APIs are intended to reflect Unicode properties as - * defined in the Unicode Character Database (UCD) and Unicode Technical - * Reports (UTR). For details about the properties see - * http://www.unicode.org/.</p> - * <p>For names of Unicode properties see the UCD file PropertyAliases.txt. - * </p> - * <pre> - * Sample usage: - * int ea = UCharacter.getIntPropertyValue(c, UProperty.EAST_ASIAN_WIDTH); - * int ideo = UCharacter.getIntPropertyValue(c, UProperty.IDEOGRAPHIC); - * boolean b = (ideo == 1) ? true : false; - * </pre> - * @param ch code point to test. - * @param type UProperty selector constant, identifies which binary - * property to check. Must be - * UProperty.BINARY_START <= type < UProperty.BINARY_LIMIT or - * UProperty.INT_START <= type < UProperty.INT_LIMIT or - * UProperty.MASK_START <= type < UProperty.MASK_LIMIT. - * @return numeric value that is directly the property value or, - * for enumerated properties, corresponds to the numeric value of - * the enumerated constant of the respective property value - * enumeration type (cast to enum type if necessary). - * Returns 0 or 1 (for false / true) for binary Unicode properties. - * Returns a bit-mask for mask properties. - * Returns 0 if 'type' is out of bounds or if the Unicode version - * does not have data for the property at all, or not for this code - * point. - * @see UProperty - * @see #hasBinaryProperty - * @see #getIntPropertyMinValue - * @see #getIntPropertyMaxValue - * @see #getUnicodeVersion - * @stable ICU 2.4 - */ - public static int getIntPropertyValue(int ch, int type) - { - /* - * For Normalizer with Unicode 3.2, this method is called only for - * HANGUL_SYLLABLE_TYPE in UnicodeSet.addPropertyStarts(). - */ - if (type == UProperty.HANGUL_SYLLABLE_TYPE) { - /* purely algorithmic; hardcode known characters, check for assigned new ones */ - if(ch<NormalizerImpl.JAMO_L_BASE) { - /* NA */ - } else if(ch<=0x11ff) { - /* Jamo range */ - if(ch<=0x115f) { - /* Jamo L range, HANGUL CHOSEONG ... */ - if(ch==0x115f || ch<=0x1159 || getType(ch)==ECharacterCategory.OTHER_LETTER) { - return HangulSyllableType.LEADING_JAMO; - } - } else if(ch<=0x11a7) { - /* Jamo V range, HANGUL JUNGSEONG ... */ - if(ch<=0x11a2 || getType(ch)==ECharacterCategory.OTHER_LETTER) { - return HangulSyllableType.VOWEL_JAMO; - } - } else { - /* Jamo T range */ - if(ch<=0x11f9 || getType(ch)==ECharacterCategory.OTHER_LETTER) { - return HangulSyllableType.TRAILING_JAMO; - } - } - } else if((ch-=NormalizerImpl.HANGUL_BASE)<0) { - /* NA */ - } else if(ch<NormalizerImpl.HANGUL_COUNT) { - /* Hangul syllable */ - return ch%NormalizerImpl.JAMO_T_COUNT==0 ? HangulSyllableType.LV_SYLLABLE : HangulSyllableType.LVT_SYLLABLE; - } - } - return 0; /* NA */ - } - // private variables ------------------------------------------------- /** @@ -643,143 +305,43 @@ */ private static final char[] PROPERTY_TRIE_INDEX_; private static final char[] PROPERTY_TRIE_DATA_; - private static final int[] PROPERTY_DATA_; private static final int PROPERTY_INITIAL_VALUE_; + private static final UBiDiProps gBdp; + // block to initialise character property database static { try { - PROPERTY_ = UCharacterProperty.getInstance(); - PROPERTY_TRIE_INDEX_ = PROPERTY_.m_trieIndex_; - PROPERTY_TRIE_DATA_ = PROPERTY_.m_trieData_; - PROPERTY_DATA_ = PROPERTY_.m_property_; - PROPERTY_INITIAL_VALUE_ - = PROPERTY_DATA_[PROPERTY_.m_trieInitialValue_]; + PROPERTY_ = UCharacterProperty.getInstance(); + PROPERTY_TRIE_INDEX_ = PROPERTY_.m_trieIndex_; + PROPERTY_TRIE_DATA_ = PROPERTY_.m_trieData_; + PROPERTY_INITIAL_VALUE_ = PROPERTY_.m_trieInitialValue_; } catch (Exception e) { - throw new RuntimeException(e.getMessage()); + throw new MissingResourceException(e.getMessage(),"",""); } - } - - /** - * To get the last character out from a data type - */ - private static final int LAST_CHAR_MASK_ = 0xFFFF; - /** - * To get the last byte out from a data type - */ -// private static final int LAST_BYTE_MASK_ = 0xFF; - - /** - * Shift 16 bits - */ -// private static final int SHIFT_16_ = 16; - - /** - * Shift 24 bits - */ - private static final int SHIFT_24_ = 24; + UBiDiProps bdp; + try { + bdp=UBiDiProps.getSingleton(); + } catch(IOException e) { + bdp=UBiDiProps.getDummy(); + } + gBdp=bdp; + } /** * Shift to get numeric type */ - private static final int NUMERIC_TYPE_SHIFT_ = 12; + private static final int NUMERIC_TYPE_SHIFT_ = 5; /** * Mask to get numeric type */ private static final int NUMERIC_TYPE_MASK_ = 0x7 << NUMERIC_TYPE_SHIFT_; - /** - * Shift to get bidi bits - */ - private static final int BIDI_SHIFT_ = 6; - /** - * Mask to be applied after shifting to get bidi bits - */ - private static final int BIDI_MASK_AFTER_SHIFT_ = 0x1F; - - /** - * <p>Numerator power limit. - * There are special values for huge numbers that are powers of ten.</p> - * <p>c version genprops/store.c documents: - * if numericValue = 0x7fffff00 + x then numericValue = 10 ^ x</p> - */ - private static final int NUMERATOR_POWER_LIMIT_ = 0x7fffff00; - /** - * Integer properties mask and shift values for joining type. - * Equivalent to icu4c UPROPS_JT_MASK. - */ - private static final int JOINING_TYPE_MASK_ = 0x00003800; - /** - * Integer properties mask and shift values for joining type. - * Equivalent to icu4c UPROPS_JT_SHIFT. - */ - private static final int JOINING_TYPE_SHIFT_ = 11; - /** - * Integer properties mask and shift values for joining group. - * Equivalent to icu4c UPROPS_JG_MASK. - */ - private static final int JOINING_GROUP_MASK_ = 0x000007e0; - /** - * Integer properties mask and shift values for joining group. - * Equivalent to icu4c UPROPS_JG_SHIFT. - */ - private static final int JOINING_GROUP_SHIFT_ = 5; - /** - * Integer properties mask for decomposition type. - * Equivalent to icu4c UPROPS_DT_MASK. - */ - private static final int DECOMPOSITION_TYPE_MASK_ = 0x0000001f; - /** - * Integer properties mask and shift values for East Asian cell width. - * Equivalent to icu4c UPROPS_EA_MASK - */ - private static final int EAST_ASIAN_MASK_ = 0x00038000; - /** - * Integer properties mask and shift values for East Asian cell width. - * Equivalent to icu4c UPROPS_EA_SHIFT - */ - private static final int EAST_ASIAN_SHIFT_ = 15; - - /** - * Integer properties mask and shift values for line breaks. - * Equivalent to icu4c UPROPS_LB_MASK - */ - private static final int LINE_BREAK_MASK_ = 0x007C0000; - /** - * Integer properties mask and shift values for line breaks. - * Equivalent to icu4c UPROPS_LB_SHIFT - */ - private static final int LINE_BREAK_SHIFT_ = 18; - /** - * Integer properties mask and shift values for blocks. - * Equivalent to icu4c UPROPS_BLOCK_MASK - */ - private static final int BLOCK_MASK_ = 0x00007f80; - /** - * Integer properties mask and shift values for blocks. - * Equivalent to icu4c UPROPS_BLOCK_SHIFT - */ - private static final int BLOCK_SHIFT_ = 7; - /** - * Integer properties mask and shift values for scripts. - * Equivalent to icu4c UPROPS_SHIFT_MASK - */ - private static final int SCRIPT_MASK_ = 0x0000007f; - - // private constructor ----------------------------------------------- - ///CLOVER:OFF - /** - * Private constructor to prevent instantiation - */ - private UCharacter() - { - } - ///CLOVER:ON // private methods --------------------------------------------------- /** @@ -819,17 +381,6 @@ } /** - * Checks if the property value has a exception indicator - * @param props 32 bit property value - * @return true if property does not have a exception indicator, false - * otherwise - */ - private static boolean isNotExceptionIndicator(int props) - { - return (props & UCharacterProperty.EXCEPTION_MASK) == 0; - } - - /** * Gets the property value at the index. * This is optimized. * Note this is alittle different from CharTrie the index m_trieData_ @@ -841,35 +392,34 @@ * @return property value of code point * @stable ICU 2.6 */ - private static int getProperty(int ch) + private static final int getProperty(int ch) { if (ch < UTF16.LEAD_SURROGATE_MIN_VALUE || (ch > UTF16.LEAD_SURROGATE_MAX_VALUE && ch < UTF16.SUPPLEMENTARY_MIN_VALUE)) { - // BMP codepoint - try { // using try for < 0 ch is faster than using an if statement - return PROPERTY_DATA_[ - PROPERTY_TRIE_DATA_[ + // BMP codepoint 0000..D7FF or DC00..FFFF + try { // using try for ch < 0 is faster than using an if statement + return PROPERTY_TRIE_DATA_[ (PROPERTY_TRIE_INDEX_[ch >> 5] << 2) - + (ch & 0x1f)]]; + + (ch & 0x1f)]; } catch (ArrayIndexOutOfBoundsException e) { return PROPERTY_INITIAL_VALUE_; } } if (ch <= UTF16.LEAD_SURROGATE_MAX_VALUE) { - // surrogate - return PROPERTY_DATA_[ - PROPERTY_TRIE_DATA_[ + // lead surrogate D800..DBFF + return PROPERTY_TRIE_DATA_[ (PROPERTY_TRIE_INDEX_[(0x2800 >> 5) + (ch >> 5)] << 2) - + (ch & 0x1f)]]; + + (ch & 0x1f)]; } // for optimization if (ch <= UTF16.CODEPOINT_MAX_VALUE) { + // supplementary code point 10000..10FFFF // look at the construction of supplementary characters // trail forms the ends of it. - return PROPERTY_DATA_[PROPERTY_.m_trie_.getSurrogateValue( + return PROPERTY_.m_trie_.getSurrogateValue( UTF16.getLeadSurrogate(ch), - (char)(ch & 0x3ff))]; + (char)(ch & 0x3ff)); } // return m_dataOffset_ if there is an error, in this case we return // the default value: m_initialValue_ @@ -877,4 +427,5 @@ // this is for optimization. return PROPERTY_INITIAL_VALUE_; } + } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/UCharacterProperty.java --- a/jdk/src/share/classes/sun/text/normalizer/UCharacterProperty.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/text/normalizer/UCharacterProperty.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Portions Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,9 @@ * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ - /* ******************************************************************************* - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved * * * * The original version of this source code and documentation is copyrighted * * and owned by IBM, These materials are provided under terms of a License * @@ -40,8 +39,7 @@ import java.io.BufferedInputStream; import java.io.InputStream; import java.io.IOException; -import java.text.BreakIterator; -import java.util.Locale; +import java.util.MissingResourceException; /** * <p>Internal class used for Unicode character property database.</p> @@ -56,10 +54,9 @@ * <a href=UCharacter.html>UCharacter</a>.</p> * @author Syn Wee Quek * @since release 2.1, february 1st 2002 -* @draft 2.1 */ -public final class UCharacterProperty implements Trie.DataManipulate +public final class UCharacterProperty { // public data members ----------------------------------------------- @@ -83,68 +80,16 @@ */ public int m_trieInitialValue_; /** - * Character property table - */ - public int m_property_[]; - /** * Unicode version */ public VersionInfo m_unicodeVersion_; - /** - * Exception indicator for uppercase type - */ - public static final int EXC_UPPERCASE_ = 0; - /** - * Exception indicator for lowercase type - */ - public static final int EXC_LOWERCASE_ = 1; - /** - * Exception indicator for titlecase type - */ - public static final int EXC_TITLECASE_ = 2; - /** - * Exception indicator for digit type - */ - public static final int EXC_UNUSED_ = 3; - /** - * Exception indicator for numeric type - */ - public static final int EXC_NUMERIC_VALUE_ = 4; - /** - * Exception indicator for denominator type - */ - public static final int EXC_DENOMINATOR_VALUE_ = 5; - /** - * Exception indicator for mirror type - */ - public static final int EXC_MIRROR_MAPPING_ = 6; - /** - * Exception indicator for special casing type - */ - public static final int EXC_SPECIAL_CASING_ = 7; - /** - * Exception indicator for case folding type - */ - public static final int EXC_CASE_FOLDING_ = 8; - /** - * EXC_COMBINING_CLASS_ is not found in ICU. - * Used to retrieve the combining class of the character in the exception - * value - */ - public static final int EXC_COMBINING_CLASS_ = 9; + + // uprops.h enum UPropertySource --------------------------------------- *** - /** - * Latin lowercase i - */ - public static final char LATIN_SMALL_LETTER_I_ = 0x69; - /** - * Character type mask - */ - public static final int TYPE_MASK = 0x1F; - /** - * Exception test mask - */ - public static final int EXCEPTION_MASK = 0x20; + /** From uchar.c/uprops.icu properties vectors trie */ + public static final int SRC_PROPSVEC=2; + /** One more than the highest UPropertySource (SRC_) constant. */ + public static final int SRC_COUNT=9; // public methods ---------------------------------------------------- @@ -159,23 +104,6 @@ } /** - * Called by com.ibm.icu.util.Trie to extract from a lead surrogate's - * data the index array offset of the indexes for that lead surrogate. - * @param value data value for a surrogate from the trie, including the - * folding offset - * @return data offset or 0 if there is no data for the lead surrogate - */ - public int getFoldingOffset(int value) - { - if ((value & SUPPLEMENTARY_FOLD_INDICATOR_MASK_) != 0) { - return (value & SUPPLEMENTARY_FOLD_OFFSET_MASK_); - } - else { - return 0; - } - } - - /** * Gets the property value at the index. * This is optimized. * Note this is alittle different from CharTrie the index m_trieData_ @@ -183,115 +111,57 @@ * @param ch code point whose property value is to be retrieved * @return property value of code point */ - public int getProperty(int ch) + public final int getProperty(int ch) { if (ch < UTF16.LEAD_SURROGATE_MIN_VALUE || (ch > UTF16.LEAD_SURROGATE_MAX_VALUE && ch < UTF16.SUPPLEMENTARY_MIN_VALUE)) { - // BMP codepoint + // BMP codepoint 0000..D7FF or DC00..FFFF // optimized - try { - return m_property_[ - m_trieData_[ + try { // using try for ch < 0 is faster than using an if statement + return m_trieData_[ (m_trieIndex_[ch >> Trie.INDEX_STAGE_1_SHIFT_] << Trie.INDEX_STAGE_2_SHIFT_) - + (ch & Trie.INDEX_STAGE_3_MASK_)]]; + + (ch & Trie.INDEX_STAGE_3_MASK_)]; } catch (ArrayIndexOutOfBoundsException e) { - return m_property_[m_trieInitialValue_]; + return m_trieInitialValue_; } } if (ch <= UTF16.LEAD_SURROGATE_MAX_VALUE) { - return m_property_[ - m_trieData_[ + // lead surrogate D800..DBFF + return m_trieData_[ (m_trieIndex_[Trie.LEAD_INDEX_OFFSET_ + (ch >> Trie.INDEX_STAGE_1_SHIFT_)] << Trie.INDEX_STAGE_2_SHIFT_) - + (ch & Trie.INDEX_STAGE_3_MASK_)]]; + + (ch & Trie.INDEX_STAGE_3_MASK_)]; } - // for optimization if (ch <= UTF16.CODEPOINT_MAX_VALUE) { + // supplementary code point 10000..10FFFF // look at the construction of supplementary characters // trail forms the ends of it. - return m_property_[m_trie_.getSurrogateValue( + return m_trie_.getSurrogateValue( UTF16.getLeadSurrogate(ch), - (char)(ch & Trie.SURROGATE_MASK_))]; + (char)(ch & Trie.SURROGATE_MASK_)); } + // ch is out of bounds // return m_dataOffset_ if there is an error, in this case we return // the default value: m_initialValue_ // we cannot assume that m_initialValue_ is at offset 0 // this is for optimization. - return m_property_[m_trieInitialValue_]; - // return m_property_[m_trie_.getCodePointValue(ch)]; - } + return m_trieInitialValue_; - /** - * Getting the signed numeric value of a character embedded in the property - * argument - * @param prop the character - * @return signed numberic value - */ - public static int getSignedValue(int prop) - { - return (prop >> VALUE_SHIFT_); - } - - /** - * Getting the exception index for argument property - * @param prop character property - * @return exception index - */ - public static int getExceptionIndex(int prop) - { - return (prop >> VALUE_SHIFT_) & UNSIGNED_VALUE_MASK_AFTER_SHIFT_; + // this all is an inlined form of return m_trie_.getCodePointValue(ch); } /** - * Determines if the exception value passed in has the kind of information - * which the indicator wants, e.g if the exception value contains the digit - * value of the character - * @param index exception index - * @param indicator type indicator - * @return true if type value exist + * Getting the unsigned numeric value of a character embedded in the property + * argument + * @param prop the character + * @return unsigned numberic value */ - public boolean hasExceptionValue(int index, int indicator) - { - return (m_exception_[index] & (1 << indicator)) != 0; - } - - /** - * Gets the exception value at the index, assuming that data type is - * available. Result is undefined if data is not available. Use - * hasExceptionValue() to determine data's availability. - * @param index - * @param etype exception data type - * @return exception data type value at index - */ - public int getException(int index, int etype) + public static int getUnsignedValue(int prop) { - // contained in exception data - if (etype == EXC_COMBINING_CLASS_) { - return m_exception_[index]; - } - // contained in the exception digit address - index = addExceptionOffset(m_exception_[index], etype, ++ index); - return m_exception_[index]; - } - - /** - * Gets the folded case value at the index - * @param index of the case value to be retrieved - * @param count number of characters to retrieve - * @param str string buffer to which to append the result - */ - public void getFoldCase(int index, int count, StringBuffer str) - { - // first 2 chars are for the simple mappings - index += 2; - while (count > 0) { - str.append(m_case_[index]); - index ++; - count --; - } + return (prop >> VALUE_SHIFT_) & UNSIGNED_VALUE_MASK_AFTER_SHIFT_; } /** @@ -299,13 +169,21 @@ * C version getUnicodeProperties. * @param codepoint codepoint whose additional properties is to be * retrieved + * @param column * @return unicode properties */ - public int getAdditional(int codepoint) { - return m_additionalVectors_[m_additionalTrie_.getCodePointValue(codepoint)]; + public int getAdditional(int codepoint, int column) { + if (column == -1) { + return getProperty(codepoint); + } + if (column < 0 || column >= m_additionalColumnsCount_) { + return 0; + } + return m_additionalVectors_[ + m_additionalTrie_.getCodePointValue(codepoint) + column]; } - /** + /** * <p>Get the "age" of the code point.</p> * <p>The "age" is the Unicode version when the code point was first * designated (as a non-character or for Private Use) or assigned a @@ -316,11 +194,10 @@ * <p>This API does not check the validity of the codepoint.</p> * @param codepoint The code point. * @return the Unicode version number - * @draft ICU 2.1 */ public VersionInfo getAge(int codepoint) { - int version = getAdditional(codepoint) >> AGE_SHIFT_; + int version = getAdditional(codepoint, 0) >> AGE_SHIFT_; return VersionInfo.getInstance( (version >> FIRST_NIBBLE_SHIFT_) & LAST_NIBBLE_MASK_, version & LAST_NIBBLE_MASK_, 0, 0); @@ -341,16 +218,16 @@ /** * Loads the property data and initialize the UCharacterProperty instance. - * @throws RuntimeException when data is missing or data has been corrupted + * @throws MissingResourceException when data is missing or data has been corrupted */ - public static UCharacterProperty getInstance() throws RuntimeException + public static UCharacterProperty getInstance() { - if (INSTANCE_ == null) { + if(INSTANCE_ == null) { try { INSTANCE_ = new UCharacterProperty(); } catch (Exception e) { - throw new RuntimeException(e.getMessage()); + throw new MissingResourceException(e.getMessage(),"",""); } } return INSTANCE_; @@ -359,6 +236,9 @@ /** * Checks if the argument c is to be treated as a white space in ICU * rules. Usually ICU rule white spaces are ignored unless quoted. + * Equivalent to test for Pattern_White_Space Unicode property. + * Stable set of characters, won't change. + * See UAX #31 Identifier and Pattern Syntax: http://www.unicode.org/reports/tr31/ * @param c codepoint to check * @return true if c is a ICU white space */ @@ -366,8 +246,9 @@ { /* "white space" in the sense of ICU rule parsers This is a FIXED LIST that is NOT DEPENDENT ON UNICODE PROPERTIES. - See UTR #31: http://www.unicode.org/reports/tr31/. + See UAX #31 Identifier and Pattern Syntax: http://www.unicode.org/reports/tr31/ U+0009..U+000D, U+0020, U+0085, U+200E..U+200F, and U+2028..U+2029 + Equivalent to test for Pattern_White_Space Unicode property. */ return (c >= 0x0009 && c <= 0x2029 && (c <= 0x000D || c == 0x0020 || c == 0x0085 || @@ -377,15 +258,6 @@ // protected variables ----------------------------------------------- /** - * Case table - */ - char m_case_[]; - - /** - * Exception property table - */ - int m_exception_[]; - /** * Extra property trie */ CharTrie m_additionalTrie_; @@ -427,77 +299,19 @@ private static final int DATA_BUFFER_SIZE_ = 25000; /** - * This, from what i infer is the max size of the indicators used for the - * exception values. - * Number of bits in an 8-bit integer value - */ - private static final int EXC_GROUP_ = 8; - - /** - * Mask to get the group - */ - private static final int EXC_GROUP_MASK_ = 255; - - /** - * Mask to get the digit value in the exception result - */ - private static final int EXC_DIGIT_MASK_ = 0xFFFF; - - /** - * Offset table for data in exception block.<br> - * Table formed by the number of bits used for the index, e.g. 0 = 0 bits, - * 1 = 1 bits. - */ - private static final byte FLAGS_OFFSET_[] = - { - 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, - 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 - }; - - /** * Numeric value shift */ - private static final int VALUE_SHIFT_ = 20; + private static final int VALUE_SHIFT_ = 8; /** * Mask to be applied after shifting to obtain an unsigned numeric value */ - private static final int UNSIGNED_VALUE_MASK_AFTER_SHIFT_ = 0x7FF; - - /** - * - */ - private static final int NUMERIC_TYPE_SHIFT = 12; - - /** - * Folding indicator mask - */ - private static final int SUPPLEMENTARY_FOLD_INDICATOR_MASK_ = 0x8000; - - /** - * Folding offset mask - */ - private static final int SUPPLEMENTARY_FOLD_OFFSET_MASK_ = 0x7FFF; + private static final int UNSIGNED_VALUE_MASK_AFTER_SHIFT_ = 0xFF; /** * Shift value for lead surrogate to form a supplementary character. */ private static final int LEAD_SURROGATE_SHIFT_ = 10; - /** * Offset to add to combined surrogate pair to avoid msking. */ @@ -507,16 +321,12 @@ LEAD_SURROGATE_SHIFT_) - UTF16.TRAIL_SURROGATE_MIN_VALUE; - /** - * To get the last character out from a data type - */ - private static final int LAST_CHAR_MASK_ = 0xFFFF; + // additional properties ---------------------------------------------- /** * First nibble shift */ private static final int FIRST_NIBBLE_SHIFT_ = 0x4; - /** * Second nibble mask */ @@ -530,7 +340,7 @@ /** * Constructor - * @exception thrown when data reading fails or data corrupted + * @exception IOException thrown when data reading fails or data corrupted */ private UCharacterProperty() throws IOException { @@ -544,275 +354,16 @@ m_trie_.putIndexData(this); } - /* Is followed by {case-ignorable}* cased ? */ - /** - * Getting the correct address for data in the exception value - * @param evalue exception value - * @param indicator type of data to retrieve - * @param address current address to move from - * @return the correct address - */ - private int addExceptionOffset(int evalue, int indicator, int address) - { - int result = address; - if (indicator >= EXC_GROUP_) { - result += FLAGS_OFFSET_[evalue & EXC_GROUP_MASK_]; - evalue >>= EXC_GROUP_; - indicator -= EXC_GROUP_; - } - int mask = (1 << indicator) - 1; - result += FLAGS_OFFSET_[evalue & mask]; - return result; - } - - private static final int TAB = 0x0009; - private static final int LF = 0x000a; - private static final int FF = 0x000c; - private static final int CR = 0x000d; - private static final int U_A = 0x0041; - private static final int U_Z = 0x005a; - private static final int U_a = 0x0061; - private static final int U_z = 0x007a; - private static final int DEL = 0x007f; - private static final int NL = 0x0085; - private static final int NBSP = 0x00a0; - private static final int CGJ = 0x034f; - private static final int FIGURESP= 0x2007; - private static final int HAIRSP = 0x200a; - private static final int ZWNJ = 0x200c; - private static final int ZWJ = 0x200d; - private static final int RLM = 0x200f; - private static final int NNBSP = 0x202f; - private static final int WJ = 0x2060; - private static final int INHSWAP = 0x206a; - private static final int NOMDIG = 0x206f; - private static final int ZWNBSP = 0xfeff; - - public UnicodeSet addPropertyStarts(UnicodeSet set) { - int c; - - /* add the start code point of each same-value range of each trie */ - //utrie_enum(&normTrie, NULL, _enumPropertyStartsRange, set); - TrieIterator propsIter = new TrieIterator(m_trie_); - RangeValueIterator.Element propsResult = new RangeValueIterator.Element(); - while(propsIter.next(propsResult)){ - set.add(propsResult.start); - } - //utrie_enum(&propsVectorsTrie, NULL, _enumPropertyStartsRange, set); - TrieIterator propsVectorsIter = new TrieIterator(m_additionalTrie_); - RangeValueIterator.Element propsVectorsResult = new RangeValueIterator.Element(); - while(propsVectorsIter.next(propsVectorsResult)){ - set.add(propsVectorsResult.start); - } - - - /* add code points with hardcoded properties, plus the ones following them */ - - /* add for IS_THAT_CONTROL_SPACE() */ - set.add(TAB); /* range TAB..CR */ - set.add(CR+1); - set.add(0x1c); - set.add(0x1f+1); - set.add(NL); - set.add(NL+1); - - /* add for u_isIDIgnorable() what was not added above */ - set.add(DEL); /* range DEL..NBSP-1, NBSP added below */ - set.add(HAIRSP); - set.add(RLM+1); - set.add(INHSWAP); - set.add(NOMDIG+1); - set.add(ZWNBSP); - set.add(ZWNBSP+1); - - /* add no-break spaces for u_isWhitespace() what was not added above */ - set.add(NBSP); - set.add(NBSP+1); - set.add(FIGURESP); - set.add(FIGURESP+1); - set.add(NNBSP); - set.add(NNBSP+1); - - /* add for u_charDigitValue() */ - set.add(0x3007); - set.add(0x3008); - set.add(0x4e00); - set.add(0x4e01); - set.add(0x4e8c); - set.add(0x4e8d); - set.add(0x4e09); - set.add(0x4e0a); - set.add(0x56db); - set.add(0x56dc); - set.add(0x4e94); - set.add(0x4e95); - set.add(0x516d); - set.add(0x516e); - set.add(0x4e03); - set.add(0x4e04); - set.add(0x516b); - set.add(0x516c); - set.add(0x4e5d); - set.add(0x4e5e); - - /* add for u_digit() */ - set.add(U_a); - set.add(U_z+1); - set.add(U_A); - set.add(U_Z+1); - - /* add for UCHAR_DEFAULT_IGNORABLE_CODE_POINT what was not added above */ - set.add(WJ); /* range WJ..NOMDIG */ - set.add(0xfff0); - set.add(0xfffb+1); - set.add(0xe0000); - set.add(0xe0fff+1); - - /* add for UCHAR_GRAPHEME_BASE and others */ - set.add(CGJ); - set.add(CGJ+1); - - /* add for UCHAR_JOINING_TYPE */ - set.add(ZWNJ); /* range ZWNJ..ZWJ */ - set.add(ZWJ+1); - - /* add Jamo type boundaries for UCHAR_HANGUL_SYLLABLE_TYPE */ - set.add(0x1100); - int value= UCharacter.HangulSyllableType.LEADING_JAMO; - int value2; - for(c=0x115a; c<=0x115f; ++c) { - value2= UCharacter.getIntPropertyValue(c, UProperty.HANGUL_SYLLABLE_TYPE); - if(value!=value2) { - value=value2; - set.add(c); + public void upropsvec_addPropertyStarts(UnicodeSet set) { + /* add the start code point of each same-value range of the properties vectors trie */ + if(m_additionalColumnsCount_>0) { + /* if m_additionalColumnsCount_==0 then the properties vectors trie may not be there at all */ + TrieIterator propsVectorsIter = new TrieIterator(m_additionalTrie_); + RangeValueIterator.Element propsVectorsResult = new RangeValueIterator.Element(); + while(propsVectorsIter.next(propsVectorsResult)){ + set.add(propsVectorsResult.start); } } - - set.add(0x1160); - value=UCharacter.HangulSyllableType.VOWEL_JAMO; - for(c=0x11a3; c<=0x11a7; ++c) { - value2=UCharacter.getIntPropertyValue(c, UProperty.HANGUL_SYLLABLE_TYPE); - if(value!=value2) { - value=value2; - set.add(c); - } - } - - set.add(0x11a8); - value=UCharacter.HangulSyllableType.TRAILING_JAMO; - for(c=0x11fa; c<=0x11ff; ++c) { - value2=UCharacter.getIntPropertyValue(c, UProperty.HANGUL_SYLLABLE_TYPE); - if(value!=value2) { - value=value2; - set.add(c); - } - } - - - /* - * Omit code points for u_charCellWidth() because - * - it is deprecated and not a real Unicode property - * - they are probably already set from the trie enumeration - */ - - /* - * Omit code points with hardcoded specialcasing properties - * because we do not build property UnicodeSets for them right now. - */ - return set; // for chaining - } -/*---------------------------------------------------------------- - * Inclusions list - *----------------------------------------------------------------*/ - - /* - * Return a set of characters for property enumeration. - * The set implicitly contains 0x110000 as well, which is one more than the highest - * Unicode code point. - * - * This set is used as an ordered list - its code points are ordered, and - * consecutive code points (in Unicode code point order) in the set define a range. - * For each two consecutive characters (start, limit) in the set, - * all of the UCD/normalization and related properties for - * all code points start..limit-1 are all the same, - * except for character names and ISO comments. - * - * All Unicode code points U+0000..U+10ffff are covered by these ranges. - * The ranges define a partition of the Unicode code space. - * ICU uses the inclusions set to enumerate properties for generating - * UnicodeSets containing all code points that have a certain property value. - * - * The Inclusion List is generated from the UCD. It is generated - * by enumerating the data tries, and code points for hardcoded properties - * are added as well. - * - * -------------------------------------------------------------------------- - * - * The following are ideas for getting properties-unique code point ranges, - * with possible optimizations beyond the current implementation. - * These optimizations would require more code and be more fragile. - * The current implementation generates one single list (set) for all properties. - * - * To enumerate properties efficiently, one needs to know ranges of - * repetitive values, so that the value of only each start code point - * can be applied to the whole range. - * This information is in principle available in the uprops.icu/unorm.icu data. - * - * There are two obstacles: - * - * 1. Some properties are computed from multiple data structures, - * making it necessary to get repetitive ranges by intersecting - * ranges from multiple tries. - * - * 2. It is not economical to write code for getting repetitive ranges - * that are precise for each of some 50 properties. - * - * Compromise ideas: - * - * - Get ranges per trie, not per individual property. - * Each range contains the same values for a whole group of properties. - * This would generate currently five range sets, two for uprops.icu tries - * and three for unorm.icu tries. - * - * - Combine sets of ranges for multiple tries to get sufficient sets - * for properties, e.g., the uprops.icu main and auxiliary tries - * for all non-normalization properties. - * - * Ideas for representing ranges and combining them: - * - * - A UnicodeSet could hold just the start code points of ranges. - * Multiple sets are easily combined by or-ing them together. - * - * - Alternatively, a UnicodeSet could hold each even-numbered range. - * All ranges could be enumerated by using each start code point - * (for the even-numbered ranges) as well as each limit (end+1) code point - * (for the odd-numbered ranges). - * It should be possible to combine two such sets by xor-ing them, - * but no more than two. - * - * The second way to represent ranges may(?!) yield smaller UnicodeSet arrays, - * but the first one is certainly simpler and applicable for combining more than - * two range sets. - * - * It is possible to combine all range sets for all uprops/unorm tries into one - * set that can be used for all properties. - * As an optimization, there could be less-combined range sets for certain - * groups of properties. - * The relationship of which less-combined range set to use for which property - * depends on the implementation of the properties and must be hardcoded - * - somewhat error-prone and higher maintenance but can be tested easily - * by building property sets "the simple way" in test code. - * - * --- - * - * Do not use a UnicodeSet pattern because that causes infinite recursion; - * UnicodeSet depends on the inclusions set. - */ - public UnicodeSet getInclusions() { - UnicodeSet set = new UnicodeSet(); - NormalizerImpl.addPropertyStarts(set); - addPropertyStarts(set); - return set; } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/UCharacterPropertyReader.java --- a/jdk/src/share/classes/sun/text/normalizer/UCharacterPropertyReader.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/text/normalizer/UCharacterPropertyReader.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Portions Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,9 @@ * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ - /* ******************************************************************************* - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved * * * * The original version of this source code and documentation is copyrighted * * and owned by IBM, These materials are provided under terms of a License * @@ -37,8 +36,8 @@ package sun.text.normalizer; +import java.io.DataInputStream; import java.io.InputStream; -import java.io.DataInputStream; import java.io.IOException; /** @@ -50,254 +49,13 @@ * </p> * <p>uprops.icu which is in big-endian format is jared together with this * package.</p> +* +* Unicode character properties file format see +* (ICU4C)/source/tools/genprops/store.c +* * @author Syn Wee Quek * @since release 2.1, February 1st 2002 -* @draft 2.1 */ -/* Unicode character properties file format ------------------------------------ - -The file format prepared and written here contains several data -structures that store indexes or data. - - - -The following is a description of format version 3 . - -Data contents: - -The contents is a parsed, binary form of several Unicode character -database files, most prominently UnicodeData.txt. - -Any Unicode code point from 0 to 0x10ffff can be looked up to get -the properties, if any, for that code point. This means that the input -to the lookup are 21-bit unsigned integers, with not all of the -21-bit range used. - -It is assumed that client code keeps a uint32_t pointer -to the beginning of the data: - - const uint32_t *p32; - -Formally, the file contains the following structures: - - const int32_t indexes[16] with values i0..i15: - - i0 propsIndex; -- 32-bit unit index to the table of 32-bit properties words - i1 exceptionsIndex; -- 32-bit unit index to the table of 32-bit exception words - i2 exceptionsTopIndex; -- 32-bit unit index to the array of UChars for special mappings - - i3 additionalTrieIndex; -- 32-bit unit index to the additional trie for more properties - i4 additionalVectorsIndex; -- 32-bit unit index to the table of properties vectors - i5 additionalVectorsColumns; -- number of 32-bit words per properties vector - - i6 reservedItemIndex; -- 32-bit unit index to the top of the properties vectors table - i7..i9 reservedIndexes; -- reserved values; 0 for now - - i10 maxValues; -- maximum code values for vector word 0, see uprops.h (format version 3.1+) - i11 maxValues2; -- maximum code values for vector word 2, see uprops.h (format version 3.2) - i12..i15 reservedIndexes; -- reserved values; 0 for now - - PT serialized properties trie, see utrie.h (byte size: 4*(i0-16)) - - P const uint32_t props32[i1-i0]; - E const uint32_t exceptions[i2-i1]; - U const UChar uchars[2*(i3-i2)]; - - AT serialized trie for additional properties (byte size: 4*(i4-i3)) - PV const uint32_t propsVectors[(i6-i4)/i5][i5]==uint32_t propsVectors[i6-i4]; - -Trie lookup and properties: - -In order to condense the data for the 21-bit code space, several properties of -the Unicode code assignment are exploited: -- The code space is sparse. -- There are several 10k of consecutive codes with the same properties. -- Characters and scripts are allocated in groups of 16 code points. -- Inside blocks for scripts the properties are often repetitive. -- The 21-bit space is not fully used for Unicode. - -The lookup of properties for a given code point is done with a trie lookup, -using the UTrie implementation. -The trie lookup result is a 16-bit index in the props32[] table where the -actual 32-bit properties word is stored. This is done to save space. - -(There are thousands of 16-bit entries in the trie data table, but -only a few hundred unique 32-bit properties words. -If the trie data table contained 32-bit words directly, then that would be -larger because the length of the table would be the same as now but the -width would be 32 bits instead of 16. This saves more than 10kB.) - -With a given Unicode code point - - UChar32 c; - -and 0<=c<0x110000, the lookup is done like this: - - uint16_t i; - UTRIE_GET16(c, i); - uint32_t props=p32[i]; - -For some characters, not all of the properties can be efficiently encoded -using 32 bits. For them, the 32-bit word contains an index into the exceptions[] -array: - - if(props&EXCEPTION_BIT)) { - uint16_t e=(uint16_t)(props>>VALUE_SHIFT); - ... - } - -The exception values are a variable number of uint32_t starting at - - const uint32_t *pe=p32+exceptionsIndex+e; - -The first uint32_t there contains flags about what values actually follow it. -Some of the exception values are UChar32 code points for the case mappings, -others are numeric values etc. - -32-bit properties sets: - -Each 32-bit properties word contains: - - 0.. 4 general category - 5 has exception values - 6..10 BiDi category -11 is mirrored -12..14 numericType: - 0 no numeric value - 1 decimal digit value - 2 digit value - 3 numeric value - ### TODO: type 4 for Han digits & numbers?! -15..19 reserved -20..31 value according to bits 0..5: - if(has exception) { - exception index; - } else switch(general category) { - case Ll: delta to uppercase; -- same as titlecase - case Lu: -delta to lowercase; -- titlecase is same as c - case Lt: -delta to lowercase; -- uppercase is same as c - default: - if(is mirrored) { - delta to mirror; - } else if(numericType!=0) { - numericValue; - } else { - 0; - }; - } - -Exception values: - -In the first uint32_t exception word for a code point, -bits -31..16 reserved -15..0 flags that indicate which values follow: - -bit - 0 has uppercase mapping - 1 has lowercase mapping - 2 has titlecase mapping - 3 unused - 4 has numeric value (numerator) - if numericValue=0x7fffff00+x then numericValue=10^x - 5 has denominator value - 6 has a mirror-image Unicode code point - 7 has SpecialCasing.txt entries - 8 has CaseFolding.txt entries - -According to the flags in this word, one or more uint32_t words follow it -in the sequence of the bit flags in the flags word; if a flag is not set, -then the value is missing or 0: - -For the case mappings and the mirror-image Unicode code point, -one uint32_t or UChar32 each is the code point. -If the titlecase mapping is missing, then it is the same as the uppercase mapping. - -For the digit values, bits 31..16 contain the decimal digit value, and -bits 15..0 contain the digit value. A value of -1 indicates that -this value is missing. - -For the numeric/numerator value, an int32_t word contains the value directly, -except for when there is no numerator but a denominator, then the numerator -is implicitly 1. This means: - numerator denominator result - none none none - x none x - none y 1/y - x y x/y - -If the numerator value is 0x7fffff00+x then it is replaced with 10^x. - -For the denominator value, a uint32_t word contains the value directly. - -For special casing mappings, the 32-bit exception word contains: -31 if set, this character has complex, conditional mappings - that are not stored; - otherwise, the mappings are stored according to the following bits -30..24 number of UChars used for mappings -23..16 reserved -15.. 0 UChar offset from the beginning of the UChars array where the - UChars for the special case mappings are stored in the following format: - -Format of special casing UChars: -One UChar value with lengths as follows: -14..10 number of UChars for titlecase mapping - 9.. 5 number of UChars for uppercase mapping - 4.. 0 number of UChars for lowercase mapping - -Followed by the UChars for lowercase, uppercase, titlecase mappings in this order. - -For case folding mappings, the 32-bit exception word contains: -31..24 number of UChars used for the full mapping -23..16 reserved -15.. 0 UChar offset from the beginning of the UChars array where the - UChars for the special case mappings are stored in the following format: - -Format of case folding UChars: -Two UChars contain the simple mapping as follows: - 0, 0 no simple mapping - BMP,0 a simple mapping to a BMP code point - s1, s2 a simple mapping to a supplementary code point stored as two surrogates -This is followed by the UChars for the full case folding mappings. - -Example: -U+2160, ROMAN NUMERAL ONE, needs an exception because it has a lowercase -mapping and a numeric value. -Its exception values would be stored as 3 uint32_t words: - -- flags=0x0a (see above) with combining class 0 -- lowercase mapping 0x2170 -- numeric value=1 - ---- Additional properties (new in format version 2.1) --- - -The second trie for additional properties (AT) is also a UTrie with 16-bit data. -The data words consist of 32-bit unit indexes (not row indexes!) into the -table of unique properties vectors (PV). -Each vector contains a set of properties. -The width of a vector (number of uint32_t per row) may change -with the formatVersion, it is stored in i5. - -Current properties: see icu/source/common/uprops.h - ---- Changes in format version 3.1 --- - -See i10 maxValues above, contains only UBLOCK_COUNT and USCRIPT_CODE_LIMIT. - ---- Changes in format version 3.2 --- - -- The tries use linear Latin-1 ranges. -- The additional properties bits store full properties XYZ instead - of partial Other_XYZ, so that changes in the derivation formulas - need not be tracked in runtime library code. -- Joining Type and Line Break are also stored completely, so that uprops.c - needs no runtime formulas for enumerated properties either. -- Store the case-sensitive flag in the main properties word. -- i10 also contains U_LB_COUNT and U_EA_COUNT. -- i11 contains maxValues2 for vector word 2. - ------------------------------------------------------------------------------ */ - final class UCharacterPropertyReader implements ICUBinary.Authenticate { // public methods ---------------------------------------------------- @@ -315,7 +73,6 @@ * <p>Protected constructor.</p> * @param inputStream ICU uprop.dat file input stream * @exception IOException throw if data file fails authentication - * @draft 2.1 */ protected UCharacterPropertyReader(InputStream inputStream) throws IOException @@ -331,8 +88,7 @@ * <p>Reads uprops.icu, parse it into blocks of data to be stored in * UCharacterProperty.</P * @param ucharppty UCharacterProperty instance - * @exception thrown when data reading fails - * @draft 2.1 + * @exception IOException thrown when data reading fails */ protected void read(UCharacterProperty ucharppty) throws IOException { @@ -362,38 +118,30 @@ // read the trie index block // m_props_index_ in terms of ints - ucharppty.m_trie_ = new CharTrie(m_dataInputStream_, ucharppty); + ucharppty.m_trie_ = new CharTrie(m_dataInputStream_, null); - // reads the 32 bit properties block + // skip the 32 bit properties block int size = m_exceptionOffset_ - m_propertyOffset_; - ucharppty.m_property_ = new int[size]; - for (int i = 0; i < size; i ++) { - ucharppty.m_property_[i] = m_dataInputStream_.readInt(); - } + m_dataInputStream_.skipBytes(size * 4); // reads the 32 bit exceptions block size = m_caseOffset_ - m_exceptionOffset_; - ucharppty.m_exception_ = new int[size]; - for (int i = 0; i < size; i ++) { - ucharppty.m_exception_[i] = m_dataInputStream_.readInt(); - } + m_dataInputStream_.skipBytes(size * 4); // reads the 32 bit case block size = (m_additionalOffset_ - m_caseOffset_) << 1; - ucharppty.m_case_ = new char[size]; - for (int i = 0; i < size; i ++) { - ucharppty.m_case_[i] = m_dataInputStream_.readChar(); - } + m_dataInputStream_.skipBytes(size * 2); + + if(m_additionalColumnsCount_ > 0) { + // reads the additional property block + ucharppty.m_additionalTrie_ = new CharTrie(m_dataInputStream_, null); - // reads the additional property block - ucharppty.m_additionalTrie_ = new CharTrie(m_dataInputStream_, - ucharppty); - - // additional properties - size = m_reservedOffset_ - m_additionalVectorsOffset_; - ucharppty.m_additionalVectors_ = new int[size]; - for (int i = 0; i < size; i ++) { - ucharppty.m_additionalVectors_[i] = m_dataInputStream_.readInt(); + // additional properties + size = m_reservedOffset_ - m_additionalVectorsOffset_; + ucharppty.m_additionalVectors_ = new int[size]; + for (int i = 0; i < size; i ++) { + ucharppty.m_additionalVectors_[i] = m_dataInputStream_.readInt(); + } } m_dataInputStream_.close(); @@ -428,12 +176,15 @@ private byte m_unicodeVersion_[]; /** - * File format version that this class understands. - * No guarantees are made if a older version is used + * Data format "UPro". */ private static final byte DATA_FORMAT_ID_[] = {(byte)0x55, (byte)0x50, (byte)0x72, (byte)0x6F}; - private static final byte DATA_FORMAT_VERSION_[] = {(byte)0x3, (byte)0x1, + /** + * Format version; this code works with all versions with the same major + * version number and the same Trie bit distribution. + */ + private static final byte DATA_FORMAT_VERSION_[] = {(byte)0x5, (byte)0, (byte)Trie.INDEX_STAGE_1_SHIFT_, (byte)Trie.INDEX_STAGE_2_SHIFT_}; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/UProperty.java --- a/jdk/src/share/classes/sun/text/normalizer/UProperty.java Wed Jul 05 16:50:37 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* - * Portions Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - */ - -/* - ******************************************************************************* - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * - * * - * The original version of this source code and documentation is copyrighted * - * and owned by IBM, These materials are provided under terms of a License * - * Agreement between IBM and Sun. This technology is protected by multiple * - * US and International patents. This notice and attribution to IBM may not * - * to removed. * - ******************************************************************************* - */ - -package sun.text.normalizer; - -/** - * <p>Selection constants for Unicode properties. </p> - * <p>These constants are used in functions like - * UCharacter.hasBinaryProperty(int) to select one of the Unicode properties. - * </p> - * <p>The properties APIs are intended to reflect Unicode properties as - * defined in the Unicode Character Database (UCD) and Unicode Technical - * Reports (UTR).</p> - * <p>For details about the properties see <a href=http://www.unicode.org> - * http://www.unicode.org</a>.</p> - * <p>For names of Unicode properties see the UCD file PropertyAliases.txt. - * </p> - * <p>Important: If ICU is built with UCD files from Unicode versions below - * 3.2, then properties marked with "new" are not or not fully - * available. Check UCharacter.getUnicodeVersion() to be sure.</p> - * @author Syn Wee Quek - * @stable ICU 2.6 - * @see com.ibm.icu.lang.UCharacter - */ -public interface UProperty -{ - // public data member -------------------------------------------------- - - /** - * Enumerated property Hangul_Syllable_Type, new in Unicode 4. - * Returns HangulSyllableType values. - * @stable ICU 2.6 - */ - public static final int HANGUL_SYLLABLE_TYPE = 0x100B; - - /** - * Bitmask property General_Category_Mask. - * This is the General_Category property returned as a bit mask. - * When used in UCharacter.getIntPropertyValue(c), - * returns bit masks for UCharacterCategory values where exactly one bit is set. - * When used with UCharacter.getPropertyValueName() and UCharacter.getPropertyValueEnum(), - * a multi-bit mask is used for sets of categories like "Letters". - * @stable ICU 2.4 - */ - public static final int GENERAL_CATEGORY_MASK = 0x2000; -} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/UTF16.java --- a/jdk/src/share/classes/sun/text/normalizer/UTF16.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/text/normalizer/UTF16.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Portions Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,9 @@ * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ - /* ******************************************************************************* - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved * * * * The original version of this source code and documentation is copyrighted * * and owned by IBM, These materials are provided under terms of a License * @@ -184,15 +183,16 @@ * bounds. * @stable ICU 2.1 */ - public static int charAt(String source, int offset16) - { - if (offset16 < 0 || offset16 >= source.length()) { - throw new StringIndexOutOfBoundsException(offset16); + public static int charAt(String source, int offset16) { + char single = source.charAt(offset16); + if (single < LEAD_SURROGATE_MIN_VALUE) { + return single; } + return _charAt(source, offset16, single); + } - char single = source.charAt(offset16); - if (single < LEAD_SURROGATE_MIN_VALUE || - single > TRAIL_SURROGATE_MAX_VALUE) { + private static int _charAt(String source, int offset16, char single) { + if (single > TRAIL_SURROGATE_MAX_VALUE) { return single; } @@ -201,29 +201,23 @@ // low, look both directions. if (single <= LEAD_SURROGATE_MAX_VALUE) { - ++ offset16; + ++offset16; if (source.length() != offset16) { char trail = source.charAt(offset16); - if (trail >= TRAIL_SURROGATE_MIN_VALUE && - trail <= TRAIL_SURROGATE_MAX_VALUE) { - return UCharacterProperty.getRawSupplementary(single, - trail); + if (trail >= TRAIL_SURROGATE_MIN_VALUE && trail <= TRAIL_SURROGATE_MAX_VALUE) { + return UCharacterProperty.getRawSupplementary(single, trail); + } + } + } else { + --offset16; + if (offset16 >= 0) { + // single is a trail surrogate so + char lead = source.charAt(offset16); + if (lead >= LEAD_SURROGATE_MIN_VALUE && lead <= LEAD_SURROGATE_MAX_VALUE) { + return UCharacterProperty.getRawSupplementary(lead, single); } } } - else - { - -- offset16; - if (offset16 >= 0) { - // single is a trail surrogate so - char lead = source.charAt(offset16); - if (lead >= LEAD_SURROGATE_MIN_VALUE && - lead <= LEAD_SURROGATE_MAX_VALUE) { - return UCharacterProperty.getRawSupplementary(lead, - single); - } - } - } return single; // return unmatched surrogate } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/UnicodeSet.java --- a/jdk/src/share/classes/sun/text/normalizer/UnicodeSet.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/text/normalizer/UnicodeSet.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Portions Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved. + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,9 @@ * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ - /* ******************************************************************************* - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved * * * * The original version of this source code and documentation is copyrighted * * and owned by IBM, These materials are provided under terms of a License * @@ -38,11 +37,8 @@ package sun.text.normalizer; import java.text.ParsePosition; -import java.util.Map; -import java.util.HashMap; +import java.util.Iterator; import java.util.TreeSet; -import java.util.Iterator; -import java.util.Collection; /** * A mutable set of Unicode characters and multicharacter strings. Objects of this class @@ -130,8 +126,8 @@ * "[:Lu:]" and the Perl-like syntax "\p{Lu}" are recognized. For a * complete list of supported property patterns, see the User's Guide * for UnicodeSet at - * <a href="http://oss.software.ibm.com/icu/userguide/unicodeSet.html"> - * http://oss.software.ibm.com/icu/userguide/unicodeSet.html</a>. + * <a href="http://www.icu-project.org/userguide/unicodeSet.html"> + * http://www.icu-project.org/userguide/unicodeSet.html</a>. * Actual determination of property data is defined by the underlying * Unicode database as implemented by UCharacter. * @@ -271,9 +267,11 @@ * </tr> * </table> * </blockquote> + * <p>To iterate over contents of UnicodeSet, use UnicodeSetIterator class. * * @author Alan Liu * @stable ICU 2.0 + * @see UnicodeSetIterator */ public class UnicodeSet implements UnicodeMatcher { @@ -322,7 +320,7 @@ * properties are all exactly alike, e.g. CJK Ideographs from * U+4E00 to U+9FA5. */ - private static UnicodeSet INCLUSIONS = null; + private static UnicodeSet INCLUSIONS[] = null; //---------------------------------------------------------------- // Public API @@ -471,17 +469,18 @@ return result; } - return _generatePattern(result, escapeUnprintable); + return _generatePattern(result, escapeUnprintable, true); } /** * Generate and append a string representation of this set to result. * This does not use this.pat, the cleaned up copy of the string * passed to applyPattern(). - * @stable ICU 2.0 + * @param includeStrings if false, doesn't include the strings. + * @stable ICU 3.8 */ public StringBuffer _generatePattern(StringBuffer result, - boolean escapeUnprintable) { + boolean escapeUnprintable, boolean includeStrings) { result.append('['); int count = getRangeCount(); @@ -524,7 +523,7 @@ } } - if (strings.size() > 0) { + if (includeStrings && strings.size() > 0) { Iterator it = strings.iterator(); while (it.hasNext()) { result.append('{'); @@ -535,19 +534,8 @@ return result.append(']'); } - /** - * Adds the specified range to this set if it is not already - * present. If this set already contains the specified range, - * the call leaves this set unchanged. If <code>end > start</code> - * then an empty range is added, leaving the set unchanged. - * - * @param start first character, inclusive, of range to be added - * to this set. - * @param end last character, inclusive, of range to be added - * to this set. - * @stable ICU 2.0 - */ - public UnicodeSet add(int start, int end) { + // for internal use, after checkFrozen has been called + private UnicodeSet add_unchecked(int start, int end) { if (start < MIN_VALUE || start > MAX_VALUE) { throw new IllegalArgumentException("Invalid code point U+" + Utility.hex(start, 6)); } @@ -569,6 +557,11 @@ * @stable ICU 2.0 */ public final UnicodeSet add(int c) { + return add_unchecked(c); + } + + // for internal use only, after checkFrozen has been called + private final UnicodeSet add_unchecked(int c) { if (c < MIN_VALUE || c > MAX_VALUE) { throw new IllegalArgumentException("Invalid code point U+" + Utility.hex(c, 6)); } @@ -663,13 +656,12 @@ * @stable ICU 2.0 */ public final UnicodeSet add(String s) { - int cp = getSingleCP(s); if (cp < 0) { strings.add(s); pat = null; } else { - add(cp, cp); + add_unchecked(cp, cp); } return this; } @@ -981,7 +973,6 @@ */ void applyPattern(RuleCharacterIterator chars, SymbolTable symbols, StringBuffer rebuiltPat, int options) { - // Syntax characters: [ ] ^ - & { } // Recognized special forms for chars, sets: c-c s-s s&s @@ -992,7 +983,7 @@ opts |= RuleCharacterIterator.SKIP_WHITESPACE; } - StringBuffer pat = new StringBuffer(), buf = null; + StringBuffer patBuf = new StringBuffer(), buf = null; boolean usePat = false; UnicodeSet scratch = null; Object backup = null; @@ -1049,13 +1040,13 @@ } else { // Handle opening '[' delimiter mode = 1; - pat.append('['); + patBuf.append('['); backup = chars.getPos(backup); // prepare to backup c = chars.next(opts); literal = chars.isEscaped(); if (c == '^' && !literal) { invert = true; - pat.append('^'); + patBuf.append('^'); backup = chars.getPos(backup); // prepare to backup c = chars.next(opts); literal = chars.isEscaped(); @@ -1093,13 +1084,13 @@ if (op != 0) { syntaxError(chars, "Char expected after operator"); } - add(lastChar, lastChar); - _appendToPat(pat, lastChar, false); + add_unchecked(lastChar, lastChar); + _appendToPat(patBuf, lastChar, false); lastItem = op = 0; } if (op == '-' || op == '&') { - pat.append(op); + patBuf.append(op); } if (nested == null) { @@ -1108,14 +1099,14 @@ } switch (setMode) { case 1: - nested.applyPattern(chars, symbols, pat, options); + nested.applyPattern(chars, symbols, patBuf, options); break; case 2: chars.skipIgnored(opts); - nested.applyPropertyPattern(chars, pat, symbols); + nested.applyPropertyPattern(chars, patBuf, symbols); break; case 3: // `nested' already parsed - nested._toPattern(pat, false); + nested._toPattern(patBuf, false); break; } @@ -1158,17 +1149,17 @@ switch (c) { case ']': if (lastItem == 1) { - add(lastChar, lastChar); - _appendToPat(pat, lastChar, false); + add_unchecked(lastChar, lastChar); + _appendToPat(patBuf, lastChar, false); } // Treat final trailing '-' as a literal if (op == '-') { - add(op, op); - pat.append(op); + add_unchecked(op, op); + patBuf.append(op); } else if (op == '&') { syntaxError(chars, "Trailing '&'"); } - pat.append(']'); + patBuf.append(']'); mode = 2; continue; case '-': @@ -1178,11 +1169,11 @@ continue; } else { // Treat final trailing '-' as a literal - add(c, c); + add_unchecked(c, c); c = chars.next(opts); literal = chars.isEscaped(); if (c == ']' && !literal) { - pat.append("-]"); + patBuf.append("-]"); mode = 2; continue; } @@ -1202,8 +1193,8 @@ syntaxError(chars, "Missing operand after operator"); } if (lastItem == 1) { - add(lastChar, lastChar); - _appendToPat(pat, lastChar, false); + add_unchecked(lastChar, lastChar); + _appendToPat(patBuf, lastChar, false); } lastItem = 0; if (buf == null) { @@ -1228,9 +1219,9 @@ // we don't need to drop through to the further // processing add(buf.toString()); - pat.append('{'); - _appendToPat(pat, buf.toString(), false); - pat.append('}'); + patBuf.append('{'); + _appendToPat(patBuf, buf.toString(), false); + patBuf.append('}'); continue; case SymbolTable.SYMBOL_REF: // symbols nosymbols @@ -1250,12 +1241,12 @@ } if (anchor && op == 0) { if (lastItem == 1) { - add(lastChar, lastChar); - _appendToPat(pat, lastChar, false); + add_unchecked(lastChar, lastChar); + _appendToPat(patBuf, lastChar, false); } - add(UnicodeMatcher.ETHER); + add_unchecked(UnicodeMatcher.ETHER); usePat = true; - pat.append(SymbolTable.SYMBOL_REF).append(']'); + patBuf.append(SymbolTable.SYMBOL_REF).append(']'); mode = 2; continue; } @@ -1281,14 +1272,14 @@ // these are most likely typos. syntaxError(chars, "Invalid range"); } - add(lastChar, c); - _appendToPat(pat, lastChar, false); - pat.append(op); - _appendToPat(pat, c, false); + add_unchecked(lastChar, c); + _appendToPat(patBuf, lastChar, false); + patBuf.append(op); + _appendToPat(patBuf, c, false); lastItem = op = 0; } else { - add(lastChar, lastChar); - _appendToPat(pat, lastChar, false); + add_unchecked(lastChar, lastChar); + _appendToPat(patBuf, lastChar, false); lastChar = c; } break; @@ -1315,9 +1306,9 @@ // Use the rebuilt pattern (pat) only if necessary. Prefer the // generated pattern. if (usePat) { - rebuiltPat.append(pat.toString()); + rebuiltPat.append(patBuf.toString()); } else { - _generatePattern(rebuiltPat, false); + _generatePattern(rebuiltPat, false, true); } } @@ -1590,7 +1581,9 @@ private static class VersionFilter implements Filter { VersionInfo version; + VersionFilter(VersionInfo version) { this.version = version; } + public boolean contains(int ch) { VersionInfo v = UCharacter.getAge(ch); // Reference comparison ok; VersionInfo caches and reuses @@ -1600,18 +1593,28 @@ } } - private static synchronized UnicodeSet getInclusions() { + private static synchronized UnicodeSet getInclusions(int src) { if (INCLUSIONS == null) { - UCharacterProperty property = UCharacterProperty.getInstance(); - INCLUSIONS = property.getInclusions(); + INCLUSIONS = new UnicodeSet[UCharacterProperty.SRC_COUNT]; } - return INCLUSIONS; + if(INCLUSIONS[src] == null) { + UnicodeSet incl = new UnicodeSet(); + switch(src) { + case UCharacterProperty.SRC_PROPSVEC: + UCharacterProperty.getInstance().upropsvec_addPropertyStarts(incl); + break; + default: + throw new IllegalStateException("UnicodeSet.getInclusions(unknown src "+src+")"); + } + INCLUSIONS[src] = incl; + } + return INCLUSIONS[src]; } /** * Generic filter-based scanning code for UCD property UnicodeSets. */ - private UnicodeSet applyFilter(Filter filter) { + private UnicodeSet applyFilter(Filter filter, int src) { // Walk through all Unicode characters, noting the start // and end of each range for which filter.contain(c) is // true. Add each range to a set. @@ -1629,7 +1632,7 @@ clear(); int startHasProperty = -1; - UnicodeSet inclusions = getInclusions(); + UnicodeSet inclusions = getInclusions(src); int limitRange = inclusions.getRangeCount(); for (int j=0; j<limitRange; ++j) { @@ -1646,19 +1649,18 @@ startHasProperty = ch; } } else if (startHasProperty >= 0) { - add(startHasProperty, ch-1); + add_unchecked(startHasProperty, ch-1); startHasProperty = -1; } } } if (startHasProperty >= 0) { - add(startHasProperty, 0x10FFFF); + add_unchecked(startHasProperty, 0x10FFFF); } return this; } - /** * Remove leading and trailing rule white space and compress * internal rule white space to a single space character. @@ -1686,10 +1688,6 @@ return buf.toString(); } - //---------------------------------------------------------------- - // Property set API - //---------------------------------------------------------------- - /** * Modifies this set to contain those code points which have the * given value for the given property. Prior contents of this @@ -1699,22 +1697,21 @@ * @param symbols if not null, then symbols are first called to see if a property * is available. If true, then everything else is skipped. * @return this set - * @draft ICU 3.2 - * @deprecated This is a draft API and might change in a future release of ICU. + * @stable ICU 3.2 */ public UnicodeSet applyPropertyAlias(String propertyAlias, String valueAlias, SymbolTable symbols) { - if (propertyAlias.equals("Age")) - { - // Must munge name, since - // VersionInfo.getInstance() does not do - // 'loose' matching. - VersionInfo version = VersionInfo.getInstance(mungeCharName(valueAlias)); - applyFilter(new VersionFilter(version)); - return this; - } - else - throw new IllegalArgumentException("Unsupported property"); + if (valueAlias.length() > 0) { + if (propertyAlias.equals("Age")) { + // Must munge name, since + // VersionInfo.getInstance() does not do + // 'loose' matching. + VersionInfo version = VersionInfo.getInstance(mungeCharName(valueAlias)); + applyFilter(new VersionFilter(version), UCharacterProperty.SRC_PROPSVEC); + return this; + } + } + throw new IllegalArgumentException("Unsupported property: " + propertyAlias); } /** @@ -1840,14 +1837,14 @@ */ private void applyPropertyPattern(RuleCharacterIterator chars, StringBuffer rebuiltPat, SymbolTable symbols) { - String pat = chars.lookahead(); + String patStr = chars.lookahead(); ParsePosition pos = new ParsePosition(0); - applyPropertyPattern(pat, pos, symbols); + applyPropertyPattern(patStr, pos, symbols); if (pos.getIndex() == 0) { syntaxError(chars, "Invalid property pattern"); } chars.jumpahead(pos.getIndex()); - rebuiltPat.append(pat.substring(0, pos.getIndex())); + rebuiltPat.append(patStr.substring(0, pos.getIndex())); } //---------------------------------------------------------------- @@ -1860,8 +1857,9 @@ * which UCharacterProperty.isRuleWhiteSpace() returns true, * unless they are quoted or escaped. This may be ORed together * with other selectors. - * @internal + * @stable ICU 3.8 */ public static final int IGNORE_SPACE = 1; } + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/UnicodeSetIterator.java --- a/jdk/src/share/classes/sun/text/normalizer/UnicodeSetIterator.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/text/normalizer/UnicodeSetIterator.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Portions Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,10 +22,9 @@ * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ - /* ******************************************************************************* - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved * * * * The original version of this source code and documentation is copyrighted * * and owned by IBM, These materials are provided under terms of a License * @@ -167,8 +166,8 @@ * @param set the set to iterate over. * @stable ICU 2.0 */ - public void reset(UnicodeSet set) { - this.set = set; + public void reset(UnicodeSet uset) { + set = uset; reset(); } @@ -213,8 +212,8 @@ /** * @internal */ - protected void loadRange(int range) { - nextElement = set.getRangeStart(range); - endElement = set.getRangeEnd(range); + protected void loadRange(int aRange) { + nextElement = set.getRangeStart(aRange); + endElement = set.getRangeEnd(aRange); } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/Utility.java --- a/jdk/src/share/classes/sun/text/normalizer/Utility.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/text/normalizer/Utility.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Portions Copyright 2005 Sun Microsystems, Inc. All Rights Reserved. + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,7 @@ */ /* ******************************************************************************* - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved * * * * The original version of this source code and documentation is copyrighted * * and owned by IBM, These materials are provided under terms of a License * @@ -36,11 +36,28 @@ package sun.text.normalizer; -// This class contains utility functions so testing not needed -///CLOVER:OFF public final class Utility { /** + * Convenience utility to compare two Object[]s + * Ought to be in System. + * @param len the length to compare. + * The start indices and start+len must be valid. + */ + public final static boolean arrayRegionMatches(char[] source, int sourceStart, + char[] target, int targetStart, + int len) + { + int sourceEnd = sourceStart + len; + int delta = targetStart - sourceStart; + for (int i = sourceStart; i < sourceEnd; i++) { + if (source[i]!=target[i + delta]) + return false; + } + return true; + } + + /** * Convert characters outside the range U+0020 to U+007F to * Unicode escapes, and convert backslash to a double backslash. */ @@ -344,7 +361,6 @@ return false; } - //// for StringPrep /** * Similar to StringBuffer.getChars, version 1.3. * Since JDK 1.2 implements StringBuffer.getChars differently, this method @@ -356,7 +372,6 @@ * @param dst char array to store the retrieved chars * @param dstBegin offset to the start of the destination char array to * store the retrieved chars - * @draft since ICU4J 2.0 */ public static void getChars(StringBuffer src, int srcBegin, int srcEnd, char dst[], int dstBegin) @@ -367,23 +382,4 @@ src.getChars(srcBegin, srcEnd, dst, dstBegin); } - /** - * Convenience utility to compare two char[]s. - * @param len the length to compare. - * The start indices and start+len must be valid. - */ - public final static boolean arrayRegionMatches(char[] source, int sourceStart, - char[] target, int targetStart, - int len) - { - int sourceEnd = sourceStart + len; - int delta = targetStart - sourceStart; - for (int i = sourceStart; i < sourceEnd; i++) { - if (source[i] != target[i + delta]) - return false; - } - return true; - } - } -///CLOVER:ON diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/normalizer/VersionInfo.java --- a/jdk/src/share/classes/sun/text/normalizer/VersionInfo.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/classes/sun/text/normalizer/VersionInfo.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Portions Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved. + * Portions Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,7 @@ */ /* ******************************************************************************* - * (C) Copyright IBM Corp. 1996-2005 - All Rights Reserved * + * (C) Copyright IBM Corp. and others, 1996-2009 - All Rights Reserved * * * * The original version of this source code and documentation is copyrighted * * and owned by IBM, These materials are provided under terms of a License * diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/resources/ubidi.icu Binary file jdk/src/share/classes/sun/text/resources/ubidi.icu has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/resources/unorm.icu Binary file jdk/src/share/classes/sun/text/resources/unorm.icu has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/classes/sun/text/resources/uprops.icu Binary file jdk/src/share/classes/sun/text/resources/uprops.icu has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/native/java/lang/ClassLoader.c --- a/jdk/src/share/native/java/lang/ClassLoader.c Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/native/java/lang/ClassLoader.c Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -437,3 +437,21 @@ (*env)->ReleaseStringUTFChars(env, name, cname); return res; } + +JNIEXPORT jobject JNICALL +Java_java_lang_ClassLoader_getCaller(JNIEnv *env, jclass cls, jint index) +{ + jobjectArray jcallerStack; + int len; + + jcallerStack = JVM_GetClassContext(env); + if ((*env)->ExceptionCheck(env)) { + return NULL; + } + len = (*env)->GetArrayLength(env, jcallerStack); + if (index < len) { + return (*env)->GetObjectArrayElement(env, jcallerStack, index); + } + return NULL; +} + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/native/java/util/zip/zip_util.c --- a/jdk/src/share/native/java/util/zip/zip_util.c Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/native/java/util/zip/zip_util.c Wed Jul 05 16:51:11 2017 +0200 @@ -313,6 +313,38 @@ } /* + * Searches for the ZIP64 end of central directory (END) header. The + * contents of the ZIP64 END header will be read and placed in end64buf. + * Returns the file position of the ZIP64 END header, otherwise returns + * -1 if the END header was not found or an error occurred. + * + * The ZIP format specifies the "position" of each related record as + * ... + * [central directory] + * [zip64 end of central directory record] + * [zip64 end of central directory locator] + * [end of central directory record] + * + * The offset of zip64 end locator can be calculated from endpos as + * "endpos - ZIP64_LOCHDR". + * The "offset" of zip64 end record is stored in zip64 end locator. + */ +static jlong +findEND64(jzfile *zip, void *end64buf, jlong endpos) +{ + char loc64[ZIP64_LOCHDR]; + jlong end64pos; + if (readFullyAt(zip->zfd, loc64, ZIP64_LOCHDR, endpos - ZIP64_LOCHDR) == -1) { + return -1; // end64 locator not found + } + end64pos = ZIP64_LOCOFF(loc64); + if (readFullyAt(zip->zfd, end64buf, ZIP64_ENDHDR, end64pos) == -1) { + return -1; // end64 record not found + } + return end64pos; +} + +/* * Returns a hash code value for a C-style NUL-terminated string. */ static unsigned int @@ -463,7 +495,7 @@ readCEN(jzfile *zip, jint knownTotal) { /* Following are unsigned 32-bit */ - jlong endpos, cenpos, cenlen; + jlong endpos, end64pos, cenpos, cenlen, cenoff; /* Following are unsigned 16-bit */ jint total, tablelen, i, j; unsigned char *cenbuf = NULL; @@ -474,6 +506,7 @@ jlong offset; #endif unsigned char endbuf[ENDHDR]; + jint endhdrlen = ENDHDR; jzcell *entries; jint *table; @@ -490,13 +523,27 @@ /* Get position and length of central directory */ cenlen = ENDSIZ(endbuf); + cenoff = ENDOFF(endbuf); + total = ENDTOT(endbuf); + if (cenlen == ZIP64_MAGICVAL || cenoff == ZIP64_MAGICVAL || + total == ZIP64_MAGICCOUNT) { + unsigned char end64buf[ZIP64_ENDHDR]; + if ((end64pos = findEND64(zip, end64buf, endpos)) != -1) { + cenlen = ZIP64_ENDSIZ(end64buf); + cenoff = ZIP64_ENDOFF(end64buf); + total = (jint)ZIP64_ENDTOT(end64buf); + endpos = end64pos; + endhdrlen = ZIP64_ENDHDR; + } + } + if (cenlen > endpos) ZIP_FORMAT_ERROR("invalid END header (bad central directory size)"); cenpos = endpos - cenlen; /* Get position of first local file (LOC) header, taking into * account that there may be a stub prefixed to the zip file. */ - zip->locpos = cenpos - ENDOFF(endbuf); + zip->locpos = cenpos - cenoff; if (zip->locpos < 0) ZIP_FORMAT_ERROR("invalid END header (bad central directory offset)"); @@ -527,7 +574,7 @@ out the page size in order to make offset to be multiples of page size. */ - zip->mlen = cenpos - offset + cenlen + ENDHDR; + zip->mlen = cenpos - offset + cenlen + endhdrlen; zip->offset = offset; mappedAddr = mmap64(0, zip->mlen, PROT_READ, MAP_SHARED, zip->zfd, (off64_t) offset); zip->maddr = (mappedAddr == (void*) MAP_FAILED) ? NULL : @@ -551,8 +598,13 @@ * is a 2-byte field, but we (and other zip implementations) * support approx. 2**31 entries, we do not trust ENDTOT, but * treat it only as a strong hint. When we call ourselves - * recursively, knownTotal will have the "true" value. */ - total = (knownTotal != -1) ? knownTotal : ENDTOT(endbuf); + * recursively, knownTotal will have the "true" value. + * + * Keep this path alive even with the Zip64 END support added, just + * for zip files that have more than 0xffff entries but don't have + * the Zip64 enabled. + */ + total = (knownTotal != -1) ? knownTotal : total; entries = zip->entries = calloc(total, sizeof(entries[0])); tablelen = zip->tablelen = ((total/2) | 1); // Odd -> fewer collisions table = zip->table = malloc(tablelen * sizeof(table[0])); @@ -854,6 +906,7 @@ static jzentry * newEntry(jzfile *zip, jzcell *zc, AccessHint accessHint) { + jlong locoff; jint nlen, elen, clen; jzentry *ze; char *cen; @@ -880,18 +933,55 @@ ze->size = CENLEN(cen); ze->csize = (CENHOW(cen) == STORED) ? 0 : CENSIZ(cen); ze->crc = CENCRC(cen); - ze->pos = -(zip->locpos + CENOFF(cen)); + locoff = CENOFF(cen); + ze->pos = -(zip->locpos + locoff); if ((ze->name = malloc(nlen + 1)) == NULL) goto Catch; memcpy(ze->name, cen + CENHDR, nlen); ze->name[nlen] = '\0'; if (elen > 0) { + char *extra = cen + CENHDR + nlen; + /* This entry has "extra" data */ if ((ze->extra = malloc(elen + 2)) == NULL) goto Catch; ze->extra[0] = (unsigned char) elen; ze->extra[1] = (unsigned char) (elen >> 8); - memcpy(ze->extra+2, cen + CENHDR + nlen, elen); + memcpy(ze->extra+2, extra, elen); + if (ze->csize == ZIP64_MAGICVAL || ze->size == ZIP64_MAGICVAL || + locoff == ZIP64_MAGICVAL) { + jint off = 0; + while ((off + 4) < elen) { // spec: HeaderID+DataSize+Data + jint sz = SH(extra, off + 2); + if (SH(extra, off) == ZIP64_EXTID) { + off += 4; + if (ze->size == ZIP64_MAGICVAL) { + // if invalid zip64 extra fields, just skip + if (sz < 8 || (off + 8) > elen) + break; + ze->size = LL(extra, off); + sz -= 8; + off += 8; + } + if (ze->csize == ZIP64_MAGICVAL) { + if (sz < 8 || (off + 8) > elen) + break; + ze->csize = LL(extra, off); + sz -= 8; + off += 8; + } + if (locoff == ZIP64_MAGICVAL) { + if (sz < 8 || (off + 8) > elen) + break; + ze->pos = -(zip->locpos + LL(extra, off)); + sz -= 8; + off += 8; + } + break; + } + off += (sz + 4); + } + } } if (clen > 0) { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/native/java/util/zip/zip_util.h --- a/jdk/src/share/native/java/util/zip/zip_util.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/native/java/util/zip/zip_util.h Wed Jul 05 16:51:11 2017 +0200 @@ -38,9 +38,13 @@ #define CENSIG 0x02014b50L /* "PK\001\002" */ #define ENDSIG 0x06054b50L /* "PK\005\006" */ +#define ZIP64_ENDSIG 0x06064b50L /* "PK\006\006" */ +#define ZIP64_LOCSIG 0x07064b50L /* "PK\006\007" */ + /* * Header sizes including signatures */ + #ifdef USE_MMAP #define SIGSIZ 4 #endif @@ -49,12 +53,22 @@ #define CENHDR 46 #define ENDHDR 22 +#define ZIP64_ENDHDR 56 // ZIP64 end header size +#define ZIP64_LOCHDR 20 // ZIP64 end loc header size +#define ZIP64_EXTHDR 24 // EXT header size +#define ZIP64_EXTID 1 // Extra field Zip64 header ID + +#define ZIP64_MAGICVAL 0xffffffffLL +#define ZIP64_MAGICCOUNT 0xffff + + /* * Header field access macros */ #define CH(b, n) (((unsigned char *)(b))[n]) #define SH(b, n) (CH(b, n) | (CH(b, n+1) << 8)) -#define LG(b, n) (SH(b, n) | (SH(b, n+2) << 16)) +#define LG(b, n) ((SH(b, n) | (SH(b, n+2) << 16)) &0xffffffffUL) +#define LL(b, n) (((jlong)LG(b, n)) | (((jlong)LG(b, n+4)) << 32)) #define GETSIG(b) LG(b, 0) /* @@ -106,6 +120,26 @@ #define ENDCOM(b) SH(b, 20) /* size of zip file comment */ /* + * Macros for getting Zip64 end of central directory header fields + */ +#define ZIP64_ENDLEN(b) LL(b, 4) /* size of zip64 end of central dir */ +#define ZIP64_ENDVEM(b) SH(b, 12) /* version made by */ +#define ZIP64_ENDVER(b) SH(b, 14) /* version needed to extract */ +#define ZIP64_ENDNMD(b) LG(b, 16) /* number of this disk */ +#define ZIP64_ENDDSK(b) LG(b, 20) /* disk number of start */ +#define ZIP64_ENDTOD(b) LL(b, 24) /* total number of entries on this disk */ +#define ZIP64_ENDTOT(b) LL(b, 32) /* total number of entries */ +#define ZIP64_ENDSIZ(b) LL(b, 40) /* central directory size in bytes */ +#define ZIP64_ENDOFF(b) LL(b, 48) /* offset of first CEN header */ + +/* + * Macros for getting Zip64 end of central directory locator fields + */ +#define ZIP64_LOCDSK(b) LG(b, 4) /* disk number start */ +#define ZIP64_LOCOFF(b) LL(b, 8) /* offset of zip64 end */ +#define ZIP64_LOCTOT(b) LG(b, 16) /* total number of disks */ + +/* * Supported compression methods */ #define STORED 0 @@ -145,7 +179,7 @@ */ typedef struct jzcell { unsigned int hash; /* 32 bit hashcode on name */ - unsigned int cenpos; /* Offset of central directory file header */ + jlong cenpos; /* Offset of central directory file header */ unsigned int next; /* hash chain: index into jzfile->entries */ } jzcell; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/native/java/util/zip/zlib-1.1.3/zlib.h --- a/jdk/src/share/native/java/util/zip/zlib-1.1.3/zlib.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/share/native/java/util/zip/zlib-1.1.3/zlib.h Wed Jul 05 16:51:11 2017 +0200 @@ -106,11 +106,11 @@ typedef struct z_stream_s { Bytef *next_in; /* next input byte */ uInt avail_in; /* number of bytes available at next_in */ - uLong total_in; /* total nb of input bytes read so far */ + long long total_in; /* total nb of input bytes read so far */ Bytef *next_out; /* next output byte should be put there */ uInt avail_out; /* remaining free space at next_out */ - uLong total_out; /* total nb of bytes output so far */ + long long total_out; /* total nb of bytes output so far */ char *msg; /* last error message, NULL if no error */ struct internal_state FAR *state; /* not visible by applications */ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/share/native/sun/awt/utility/rect.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/share/native/sun/awt/utility/rect.c Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,102 @@ +/* + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +#include "utility/rect.h" + +#if defined(__cplusplus) +extern "C" { +#endif + +/** + * bitsPerPixel must be 32 for now. + * outBuf must be large enough to conatin all the rectangles. + */ +int BitmapToYXBandedRectangles(int bitsPerPixel, int width, int height, unsigned char * buf, RECT_T * outBuf) +{ + //XXX: we might want to reuse the code in the splashscreen library, + // though we'd have to deal with the ALPHA_THRESHOLD and different + // image formats in this case. + int widthBytes = width * bitsPerPixel / 8; + int alignedWidth = (((widthBytes - 1) / 4) + 1) * 4; + + RECT_T * out = outBuf; + + RECT_T *pPrevLine = NULL, *pFirst = out, *pThis = pFirst; + int i, j, i0; + int length; + + for (j = 0; j < height; j++) { + /* generate data for a scanline */ + + unsigned char *pSrc = (unsigned char *) buf + j * alignedWidth; + RECT_T *pLine = pThis; + + i = 0; + + do { + // pSrc[0,1,2] == B,G,R; pSrc[3] == Alpha + while (i < width && !pSrc[3]) { + pSrc += 4; + ++i; + } + if (i >= width) + break; + i0 = i; + while (i < width && pSrc[3]) { + pSrc += 4; + ++i; + } + RECT_SET(*pThis, i0, j, i - i0, 1); + ++pThis; + } while (i < width); + + /* check if the previous scanline is exactly the same, merge if so + (this is the only optimization we can use for YXBanded rectangles, + and win32 supports YXBanded only */ + + length = pThis - pLine; + if (pPrevLine && pLine - pPrevLine == length) { + for (i = 0; i < length && RECT_EQ_X(pPrevLine[i], pLine[i]); ++i) { + } + if (i == pLine - pPrevLine) { + // do merge + for (i = 0; i < length; i++) { + RECT_INC_HEIGHT(pPrevLine[i]); + } + pThis = pLine; + continue; + } + } + /* or else use the generated scanline */ + + pPrevLine = pLine; + } + + return pThis - pFirst; +} + +#if defined(__cplusplus) +} +#endif diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/InfoWindow.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/solaris/classes/sun/awt/X11/InfoWindow.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,495 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +package sun.awt.X11; + +import java.awt.*; +import java.awt.event.*; +import java.awt.peer.TrayIconPeer; +import sun.awt.*; +import java.awt.image.*; +import java.text.BreakIterator; +import java.util.logging.Logger; +import java.util.logging.Level; +import java.util.concurrent.ArrayBlockingQueue; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.lang.reflect.InvocationTargetException; + +/** + * An utility window class. This is a base class for Tooltip and Balloon. + */ +public abstract class InfoWindow extends Window { + private Container container; + private Closer closer; + + protected InfoWindow(Frame parent, Color borderColor) { + super(parent); + container = new Container() { + @Override + public Insets getInsets() { + return new Insets(1, 1, 1, 1); + } + }; + setLayout(new BorderLayout()); + setBackground(borderColor); + add(container, BorderLayout.CENTER); + container.setLayout(new BorderLayout()); + + closer = new Closer(); + } + + public Component add(Component c) { + container.add(c, BorderLayout.CENTER); + return c; + } + + protected void setCloser(Runnable action, int time) { + closer.set(action, time); + } + + // Must be executed on EDT. + protected void show(Point corner, int indent) { + assert SunToolkit.isDispatchThreadForAppContext(this); + + pack(); + + Dimension size = getSize(); + // TODO: When 6356322 is fixed we should get screen bounds in + // this way: eframe.getGraphicsConfiguration().getBounds(). + Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize(); + + if (corner.x < scrSize.width/2 && corner.y < scrSize.height/2) { // 1st square + setLocation(corner.x + indent, corner.y + indent); + + } else if (corner.x >= scrSize.width/2 && corner.y < scrSize.height/2) { // 2nd square + setLocation(corner.x - indent - size.width, corner.y + indent); + + } else if (corner.x < scrSize.width/2 && corner.y >= scrSize.height/2) { // 3rd square + setLocation(corner.x + indent, corner.y - indent - size.height); + + } else if (corner.x >= scrSize.width/2 && corner.y >= scrSize.height/2) { // 4th square + setLocation(corner.x - indent - size.width, corner.y - indent - size.height); + } + + super.show(); + closer.schedule(); + } + + public void hide() { + closer.close(); + } + + private class Closer implements Runnable { + Runnable action; + int time; + + public void run() { + doClose(); + } + + void set(Runnable action, int time) { + this.action = action; + this.time = time; + } + + void schedule() { + XToolkit.schedule(this, time); + } + + void close() { + XToolkit.remove(this); + doClose(); + } + + // WARNING: this method may be executed on Toolkit thread. + private void doClose() { + SunToolkit.executeOnEventHandlerThread(InfoWindow.this, new Runnable() { + public void run() { + InfoWindow.super.hide(); + invalidate(); + if (action != null) { + action.run(); + } + } + }); + } + } + + + private interface LiveArguments { + /** Whether the target of the InfoWindow is disposed. */ + boolean isDisposed(); + + /** The bounds of the target of the InfoWindow. */ + Rectangle getBounds(); + } + + public static class Tooltip extends InfoWindow { + + public interface LiveArguments extends InfoWindow.LiveArguments { + /** The tooltip to be displayed. */ + String getTooltipString(); + } + + private final Object target; + private final LiveArguments liveArguments; + + private final Label textLabel = new Label(""); + private final Runnable starter = new Runnable() { + public void run() { + display(); + }}; + + private final static int TOOLTIP_SHOW_TIME = 10000; + private final static int TOOLTIP_START_DELAY_TIME = 1000; + private final static int TOOLTIP_MAX_LENGTH = 64; + private final static int TOOLTIP_MOUSE_CURSOR_INDENT = 5; + private final static Color TOOLTIP_BACKGROUND_COLOR = new Color(255, 255, 220); + private final static Font TOOLTIP_TEXT_FONT = XWindow.getDefaultFont(); + + public Tooltip(Frame parent, Object target, + LiveArguments liveArguments) + { + super(parent, Color.black); + + this.target = target; + this.liveArguments = liveArguments; + + XTrayIconPeer.suppressWarningString(this); + + setCloser(null, TOOLTIP_SHOW_TIME); + textLabel.setBackground(TOOLTIP_BACKGROUND_COLOR); + textLabel.setFont(TOOLTIP_TEXT_FONT); + add(textLabel); + } + + /* + * WARNING: this method is executed on Toolkit thread! + */ + private void display() { + String tooltipString = liveArguments.getTooltipString(); + if (tooltipString == null) { + return; + } else if (tooltipString.length() > TOOLTIP_MAX_LENGTH) { + textLabel.setText(tooltipString.substring(0, TOOLTIP_MAX_LENGTH)); + } else { + textLabel.setText(tooltipString); + } + + // Execute on EDT to avoid deadlock (see 6280857). + SunToolkit.executeOnEventHandlerThread(target, new Runnable() { + public void run() { + if (liveArguments.isDisposed()) { + return; + } + Point pointer = (Point)AccessController.doPrivileged(new PrivilegedAction() { + public Object run() { + if (!isPointerOverTrayIcon(liveArguments.getBounds())) { + return null; + } + return MouseInfo.getPointerInfo().getLocation(); + } + }); + if (pointer == null) { + return; + } + show(new Point(pointer.x, pointer.y), TOOLTIP_MOUSE_CURSOR_INDENT); + } + }); + } + + public void enter() { + XToolkit.schedule(starter, TOOLTIP_START_DELAY_TIME); + } + + public void exit() { + XToolkit.remove(starter); + if (isVisible()) { + hide(); + } + } + + private boolean isPointerOverTrayIcon(Rectangle trayRect) { + Point p = MouseInfo.getPointerInfo().getLocation(); + return !(p.x < trayRect.x || p.x > (trayRect.x + trayRect.width) || + p.y < trayRect.y || p.y > (trayRect.y + trayRect.height)); + } + } + + public static class Balloon extends InfoWindow { + + public interface LiveArguments extends InfoWindow.LiveArguments { + /** The action to be performed upon clicking the baloon. */ + String getActionCommand(); + } + + private final LiveArguments liveArguments; + private final Object target; + + private final static int BALLOON_SHOW_TIME = 10000; + private final static int BALLOON_TEXT_MAX_LENGTH = 256; + private final static int BALLOON_WORD_LINE_MAX_LENGTH = 16; + private final static int BALLOON_WORD_LINE_MAX_COUNT = 4; + private final static int BALLOON_ICON_WIDTH = 32; + private final static int BALLOON_ICON_HEIGHT = 32; + private final static int BALLOON_TRAY_ICON_INDENT = 0; + private final static Color BALLOON_CAPTION_BACKGROUND_COLOR = new Color(200, 200 ,255); + private final static Font BALLOON_CAPTION_FONT = new Font(Font.DIALOG, Font.BOLD, 12); + + private Panel mainPanel = new Panel(); + private Panel captionPanel = new Panel(); + private Label captionLabel = new Label(""); + private Button closeButton = new Button("X"); + private Panel textPanel = new Panel(); + private XTrayIconPeer.IconCanvas iconCanvas = new XTrayIconPeer.IconCanvas(BALLOON_ICON_WIDTH, BALLOON_ICON_HEIGHT); + private Label[] lineLabels = new Label[BALLOON_WORD_LINE_MAX_COUNT]; + private ActionPerformer ap = new ActionPerformer(); + + private Image iconImage; + private Image errorImage; + private Image warnImage; + private Image infoImage; + private boolean gtkImagesLoaded; + + private Displayer displayer = new Displayer(); + + public Balloon(Frame parent, Object target, LiveArguments liveArguments) { + super(parent, new Color(90, 80 ,190)); + this.liveArguments = liveArguments; + this.target = target; + + XTrayIconPeer.suppressWarningString(this); + + setCloser(new Runnable() { + public void run() { + if (textPanel != null) { + textPanel.removeAll(); + textPanel.setSize(0, 0); + iconCanvas.setSize(0, 0); + XToolkit.awtLock(); + try { + displayer.isDisplayed = false; + XToolkit.awtLockNotifyAll(); + } finally { + XToolkit.awtUnlock(); + } + } + } + }, BALLOON_SHOW_TIME); + + add(mainPanel); + + captionLabel.setFont(BALLOON_CAPTION_FONT); + captionLabel.addMouseListener(ap); + + captionPanel.setLayout(new BorderLayout()); + captionPanel.add(captionLabel, BorderLayout.WEST); + captionPanel.add(closeButton, BorderLayout.EAST); + captionPanel.setBackground(BALLOON_CAPTION_BACKGROUND_COLOR); + captionPanel.addMouseListener(ap); + + closeButton.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + hide(); + } + }); + + mainPanel.setLayout(new BorderLayout()); + mainPanel.setBackground(Color.white); + mainPanel.add(captionPanel, BorderLayout.NORTH); + mainPanel.add(iconCanvas, BorderLayout.WEST); + mainPanel.add(textPanel, BorderLayout.CENTER); + + iconCanvas.addMouseListener(ap); + + for (int i = 0; i < BALLOON_WORD_LINE_MAX_COUNT; i++) { + lineLabels[i] = new Label(); + lineLabels[i].addMouseListener(ap); + lineLabels[i].setBackground(Color.white); + } + + displayer.start(); + } + + public void display(String caption, String text, String messageType) { + if (!gtkImagesLoaded) { + loadGtkImages(); + } + displayer.display(caption, text, messageType); + } + + private void _display(String caption, String text, String messageType) { + captionLabel.setText(caption); + + BreakIterator iter = BreakIterator.getWordInstance(); + if (text != null) { + iter.setText(text); + int start = iter.first(), end; + int nLines = 0; + + do { + end = iter.next(); + + if (end == BreakIterator.DONE || + text.substring(start, end).length() >= 50) + { + lineLabels[nLines].setText(text.substring(start, end == BreakIterator.DONE ? + iter.last() : end)); + textPanel.add(lineLabels[nLines++]); + start = end; + } + if (nLines == BALLOON_WORD_LINE_MAX_COUNT) { + if (end != BreakIterator.DONE) { + lineLabels[nLines - 1].setText( + new String(lineLabels[nLines - 1].getText() + " ...")); + } + break; + } + } while (end != BreakIterator.DONE); + + + textPanel.setLayout(new GridLayout(nLines, 1)); + } + + if ("ERROR".equals(messageType)) { + iconImage = errorImage; + } else if ("WARNING".equals(messageType)) { + iconImage = warnImage; + } else if ("INFO".equals(messageType)) { + iconImage = infoImage; + } else { + iconImage = null; + } + + if (iconImage != null) { + Dimension tpSize = textPanel.getSize(); + iconCanvas.setSize(BALLOON_ICON_WIDTH, (BALLOON_ICON_HEIGHT > tpSize.height ? + BALLOON_ICON_HEIGHT : tpSize.height)); + iconCanvas.validate(); + } + + SunToolkit.executeOnEventHandlerThread(target, new Runnable() { + public void run() { + if (liveArguments.isDisposed()) { + return; + } + Point parLoc = getParent().getLocationOnScreen(); + Dimension parSize = getParent().getSize(); + show(new Point(parLoc.x + parSize.width/2, parLoc.y + parSize.height/2), + BALLOON_TRAY_ICON_INDENT); + if (iconImage != null) { + iconCanvas.updateImage(iconImage); // call it after the show(..) above + } + } + }); + } + + public void dispose() { + displayer.interrupt(); + super.dispose(); + } + + private void loadGtkImages() { + if (!gtkImagesLoaded) { + errorImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty( + "gtk.icon.gtk-dialog-error.6.rtl"); + warnImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty( + "gtk.icon.gtk-dialog-warning.6.rtl"); + infoImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty( + "gtk.icon.gtk-dialog-info.6.rtl"); + gtkImagesLoaded = true; + } + } + + private class ActionPerformer extends MouseAdapter { + public void mouseClicked(MouseEvent e) { + // hide the balloon by any click + hide(); + if (e.getButton() == MouseEvent.BUTTON1) { + ActionEvent aev = new ActionEvent(target, ActionEvent.ACTION_PERFORMED, + liveArguments.getActionCommand(), + e.getWhen(), e.getModifiers()); + Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(aev); + } + } + } + + private class Displayer extends Thread { + final int MAX_CONCURRENT_MSGS = 10; + + ArrayBlockingQueue<Message> messageQueue = new ArrayBlockingQueue<Message>(MAX_CONCURRENT_MSGS); + boolean isDisplayed; + + Displayer() { + setDaemon(true); + } + + public void run() { + while (true) { + Message msg = null; + try { + msg = (Message)messageQueue.take(); + } catch (InterruptedException e) { + return; + } + + /* + * Wait till the previous message is displayed if any + */ + XToolkit.awtLock(); + try { + while (isDisplayed) { + try { + XToolkit.awtLockWait(); + } catch (InterruptedException e) { + return; + } + } + isDisplayed = true; + } finally { + XToolkit.awtUnlock(); + } + _display(msg.caption, msg.text, msg.messageType); + } + } + + void display(String caption, String text, String messageType) { + messageQueue.offer(new Message(caption, text, messageType)); + } + } + + private static class Message { + String caption, text, messageType; + + Message(String caption, String text, String messageType) { + this.caption = caption; + this.text = text; + this.messageType = messageType; + } + } + } +} + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java --- a/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XBaseWindow.java Wed Jul 05 16:51:11 2017 +0200 @@ -842,27 +842,35 @@ | XConstants.ButtonMotionMask); final int ownerEvents = 1; - int ptrGrab = XlibWrapper.XGrabPointer(XToolkit.getDisplay(), - getContentWindow(), ownerEvents, eventMask, XConstants.GrabModeAsync, - XConstants.GrabModeAsync, XConstants.None, (XWM.isMotif() ? XToolkit.arrowCursor : XConstants.None), - XConstants.CurrentTime); - // Check grab results to be consistent with X server grab - if (ptrGrab != XConstants.GrabSuccess) { - XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime); - XAwtState.setGrabWindow(null); - grabLog.fine(" Grab Failure - mouse"); - return false; - } - int keyGrab = XlibWrapper.XGrabKeyboard(XToolkit.getDisplay(), - getContentWindow(), ownerEvents, XConstants.GrabModeAsync, XConstants.GrabModeAsync, - XConstants.CurrentTime); - if (keyGrab != XConstants.GrabSuccess) { - XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime); - XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime); - XAwtState.setGrabWindow(null); - grabLog.fine(" Grab Failure - keyboard"); - return false; + //6714678: IDE (Netbeans, Eclipse, JDeveloper) Debugger hangs + //process on Linux + //The user must pass the sun.awt.disablegrab property to disable + //taking grabs. This prevents hanging of the GUI when a breakpoint + //is hit while a popup window taking the grab is open. + if (!XToolkit.getSunAwtDisableGrab()) { + int ptrGrab = XlibWrapper.XGrabPointer(XToolkit.getDisplay(), + getContentWindow(), ownerEvents, eventMask, XConstants.GrabModeAsync, + XConstants.GrabModeAsync, XConstants.None, (XWM.isMotif() ? XToolkit.arrowCursor : XConstants.None), + XConstants.CurrentTime); + // Check grab results to be consistent with X server grab + if (ptrGrab != XConstants.GrabSuccess) { + XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime); + XAwtState.setGrabWindow(null); + grabLog.fine(" Grab Failure - mouse"); + return false; + } + + int keyGrab = XlibWrapper.XGrabKeyboard(XToolkit.getDisplay(), + getContentWindow(), ownerEvents, XConstants.GrabModeAsync, XConstants.GrabModeAsync, + XConstants.CurrentTime); + if (keyGrab != XConstants.GrabSuccess) { + XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime); + XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime); + XAwtState.setGrabWindow(null); + grabLog.fine(" Grab Failure - keyboard"); + return false; + } } if (prevGrabWindow != null) { prevGrabWindow.ungrabInputImpl(); @@ -882,8 +890,10 @@ grabLog.log(Level.FINE, "UnGrab input on {0}", new Object[] {grabWindow}); if (grabWindow != null) { grabWindow.ungrabInputImpl(); - XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime); - XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime); + if (!XToolkit.getSunAwtDisableGrab()) { + XlibWrapper.XUngrabPointer(XToolkit.getDisplay(), XConstants.CurrentTime); + XlibWrapper.XUngrabKeyboard(XToolkit.getDisplay(), XConstants.CurrentTime); + } XAwtState.setGrabWindow(null); // we need to call XFlush() here to force ungrab // see 6384219 for details diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XCanvasPeer.java --- a/jdk/src/solaris/classes/sun/awt/X11/XCanvasPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XCanvasPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -27,7 +27,6 @@ import java.awt.*; import java.awt.peer.*; -import sun.awt.ComponentAccessor; import sun.awt.SunToolkit; import sun.awt.X11GraphicsConfig; @@ -54,60 +53,45 @@ } } - void resetTargetGC(Component target) { - ComponentAccessor.resetGC(target); - } + /* Get a GraphicsConfig with the same visual on the new + * screen, which should be easy in Xinerama mode. + */ + public GraphicsConfiguration getAppropriateGraphicsConfiguration( + GraphicsConfiguration gc) + { + if (graphicsConfig == null || gc == null) { + return gc; + } + // Opt: Only need to do if we're not using the default GC + + int screenNum = ((X11GraphicsDevice)gc.getDevice()).getScreen(); + + X11GraphicsConfig parentgc; + // save vis id of current gc + int visual = graphicsConfig.getVisual(); - /* - * Called when the Window this - * Canvas is on is moved onto another Xinerama screen. - * - * Canvases can be created with a non-defulat GraphicsConfiguration. The - * GraphicsConfiguration needs to be changed to one on the new screen, - * preferably with the same visual ID. - * - * Up-called for other windows peer instances (XPanelPeer, XWindowPeer). - * - * Should only be called from the event thread. - */ - public void displayChanged(int screenNum) { - resetLocalGC(screenNum); - resetTargetGC(target); + X11GraphicsDevice newDev = (X11GraphicsDevice) GraphicsEnvironment. + getLocalGraphicsEnvironment(). + getScreenDevices()[screenNum]; + + for (int i = 0; i < newDev.getNumConfigs(screenNum); i++) { + if (visual == newDev.getConfigVisualId(i, screenNum)) { + // use that + graphicsConfig = (X11GraphicsConfig)newDev.getConfigurations()[i]; + break; + } + } + // just in case... + if (graphicsConfig == null) { + graphicsConfig = (X11GraphicsConfig) GraphicsEnvironment. + getLocalGraphicsEnvironment(). + getScreenDevices()[screenNum]. + getDefaultConfiguration(); + } + + return graphicsConfig; } - /* Set graphicsConfig to a GraphicsConfig with the same visual on the new - * screen, which should be easy in Xinerama mode. - * - * Should only be called from displayChanged(), and therefore only from - * the event thread. - */ - void resetLocalGC(int screenNum) { - // Opt: Only need to do if we're not using the default GC - if (graphicsConfig != null) { - X11GraphicsConfig parentgc; - // save vis id of current gc - int visual = graphicsConfig.getVisual(); - - X11GraphicsDevice newDev = (X11GraphicsDevice) GraphicsEnvironment. - getLocalGraphicsEnvironment(). - getScreenDevices()[screenNum]; - - for (int i = 0; i < newDev.getNumConfigs(screenNum); i++) { - if (visual == newDev.getConfigVisualId(i, screenNum)) { - // use that - graphicsConfig = (X11GraphicsConfig)newDev.getConfigurations()[i]; - break; - } - } - // just in case... - if (graphicsConfig == null) { - graphicsConfig = (X11GraphicsConfig) GraphicsEnvironment. - getLocalGraphicsEnvironment(). - getScreenDevices()[screenNum]. - getDefaultConfiguration(); - } - } - } protected boolean shouldFocusOnClick() { // Canvas should always be able to be focused by mouse clicks. return true; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java --- a/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XComponentPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -35,6 +35,7 @@ import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; +import java.awt.GraphicsConfiguration; import java.awt.Image; import java.awt.Insets; import java.awt.KeyboardFocusManager; @@ -76,11 +77,6 @@ public class XComponentPeer extends XWindow implements ComponentPeer, DropTargetPeer, BackBufferCapsProvider { - /* FIX ME: these constants copied from java.awt.KeyboardFocusManager */ - static final int SNFH_FAILURE = 0; - static final int SNFH_SUCCESS_HANDLED = 1; - static final int SNFH_SUCCESS_PROCEED = 2; - private static final Logger log = Logger.getLogger("sun.awt.X11.XComponentPeer"); private static final Logger buffersLog = Logger.getLogger("sun.awt.X11.XComponentPeer.multibuffer"); private static final Logger focusLog = Logger.getLogger("sun.awt.X11.focus.XComponentPeer"); @@ -166,7 +162,7 @@ enableLog.log(Level.FINE, "Initial enable state: {0}", new Object[] {Boolean.valueOf(enabled)}); if (target.isVisible()) { - show(); + setVisible(true); } } @@ -314,113 +310,27 @@ return null; } - /** - * Returns whether or not this component should be given focus on mouse click. - * Default implementation return whether or not this peer is "focusable" - * Descendants might want to override it to extend/restrict conditions at which this - * component should be focused by click (see MCanvasPeer and MPanelPeer) - */ - protected boolean shouldFocusOnClick() { - return isFocusable(); - } - - /** - * Checks whether or not this component would be focused by native system if it would be allowed to do so. - * Currently it checks that it displayable, visible, enabled and focusable. - */ - static boolean canBeFocusedByClick(Component component) { - if (component == null) { - return false; - } else { - return component.isDisplayable() && component.isVisible() && component.isEnabled() && component.isFocusable(); - } - } - - static Window getContainingWindow(Component comp) { - while (comp != null && !(comp instanceof Window)) { - comp = comp.getParent(); - } - - return (Window)comp; - } - - static Method processSynchronousLightweightTransferMethod; - static boolean processSynchronousLightweightTransfer(Component heavyweight, Component descendant, - boolean temporary, boolean focusedWindowChangeAllowed, - long time) + // TODO: consider moving it to KeyboardFocusManagerPeerImpl + final public boolean requestFocus(Component lightweightChild, boolean temporary, + boolean focusedWindowChangeAllowed, long time, + CausedFocusEvent.Cause cause) { - try { - if (processSynchronousLightweightTransferMethod == null) { - processSynchronousLightweightTransferMethod = - (Method)AccessController.doPrivileged( - new PrivilegedExceptionAction() { - public Object run() throws IllegalAccessException, NoSuchMethodException - { - Method m = KeyboardFocusManager.class. - getDeclaredMethod("processSynchronousLightweightTransfer", - new Class[] {Component.class, Component.class, - Boolean.TYPE, Boolean.TYPE, - Long.TYPE}); - m.setAccessible(true); - return m; - } - }); - } - Object[] params = new Object[] { - heavyweight, - descendant, - Boolean.valueOf(temporary), - Boolean.valueOf(focusedWindowChangeAllowed), - Long.valueOf(time) - }; - return ((Boolean)processSynchronousLightweightTransferMethod.invoke(null, params)).booleanValue(); - } catch (PrivilegedActionException pae) { - pae.printStackTrace(); - return false; - } catch (IllegalAccessException iae) { - iae.printStackTrace(); - return false; - } catch (IllegalArgumentException iaee) { - iaee.printStackTrace(); - return false; - } catch (InvocationTargetException ite) { - ite.printStackTrace(); - return false; - } - } - - static Method requestFocusWithCause; - - static void callRequestFocus(Component target, CausedFocusEvent.Cause cause) { - if (requestFocusWithCause == null) { - requestFocusWithCause = SunToolkit.getMethod(Component.class, "requestFocus", new Class[] {CausedFocusEvent.Cause.class}); - } - if (requestFocusWithCause != null) { - try { - requestFocusWithCause.invoke(target, new Object[] {cause}); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - - final public boolean requestFocus(Component lightweightChild, boolean temporary, - boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause) - { - if (processSynchronousLightweightTransfer(target, lightweightChild, temporary, + if (XKeyboardFocusManagerPeer. + processSynchronousLightweightTransfer(target, lightweightChild, temporary, focusedWindowChangeAllowed, time)) { return true; } - int result = XKeyboardFocusManagerPeer - .shouldNativelyFocusHeavyweight(target, lightweightChild, - temporary, focusedWindowChangeAllowed, time, cause); + int result = XKeyboardFocusManagerPeer. + shouldNativelyFocusHeavyweight(target, lightweightChild, + temporary, focusedWindowChangeAllowed, + time, cause); switch (result) { - case SNFH_FAILURE: + case XKeyboardFocusManagerPeer.SNFH_FAILURE: return false; - case SNFH_SUCCESS_PROCEED: + case XKeyboardFocusManagerPeer.SNFH_SUCCESS_PROCEED: // Currently we just generate focus events like we deal with lightweight instead of calling // XSetInputFocus on native window if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Proceeding with request to " + @@ -433,7 +343,7 @@ * focus owner which had focus before WLF. So, we should not add request record for such requests * but store this component in mostRecent - and return true as before for compatibility. */ - Window parentWindow = getContainingWindow(target); + Window parentWindow = SunToolkit.getContainingWindow(target); if (parentWindow == null) { return rejectFocusRequestHelper("WARNING: Parent window is null"); } @@ -454,14 +364,13 @@ if (!(res && parentWindow.isFocused())) { return rejectFocusRequestHelper("Waiting for asynchronous processing of the request"); } - - // NOTE: We simulate heavyweight behavior of Motif - component receives focus right - // after request, not after event. Normally, we should better listen for event - // by listeners. - return XKeyboardFocusManagerPeer.simulateMotifRequestFocus(lightweightChild, target, temporary, - focusedWindowChangeAllowed, time, cause); + return XKeyboardFocusManagerPeer.deliverFocus(lightweightChild, + (Component)target, + temporary, + focusedWindowChangeAllowed, + time, cause); // Motif compatibility code - case SNFH_SUCCESS_HANDLED: + case XKeyboardFocusManagerPeer.SNFH_SUCCESS_HANDLED: // Either lightweight or excessive request - all events are generated. return true; } @@ -470,7 +379,7 @@ private boolean rejectFocusRequestHelper(String logMsg) { if (focusLog.isLoggable(Level.FINER)) focusLog.finer(logMsg); - KeyboardFocusManagerPeerImpl.removeLastFocusRequest(target); + XKeyboardFocusManagerPeer.removeLastFocusRequest(target); return false; } @@ -496,10 +405,6 @@ xSetVisible(b); } - public void show() { - setVisible(true); - } - public void hide() { setVisible(false); } @@ -618,8 +523,9 @@ void handleJavaMouseEvent(MouseEvent e) { switch (e.getID()) { case MouseEvent.MOUSE_PRESSED: - if (target == e.getSource() && shouldFocusOnClick() - && !target.isFocusOwner() && canBeFocusedByClick(target)) + if (target == e.getSource() && + !target.isFocusOwner() && + XKeyboardFocusManagerPeer.shouldFocusOnClick(target)) { XWindowPeer parentXWindow = getParentTopLevel(); Window parentWindow = ((Window)parentXWindow.getTarget()); @@ -633,7 +539,7 @@ // WindowEvent wfg = new WindowEvent(parentWindow, WindowEvent.WINDOW_GAINED_FOCUS); // parentWindow.dispatchEvent(wfg); // } - callRequestFocus(target, CausedFocusEvent.Cause.MOUSE_EVENT); + XKeyboardFocusManagerPeer.requestFocusFor(target, CausedFocusEvent.Cause.MOUSE_EVENT); } break; } @@ -1418,59 +1324,21 @@ } } - public void restack() { - synchronized(target.getTreeLock()) { - // Build the list of X windows in the window corresponding to this container - // This list is already in correct Java stacking order - Container cont = (Container)target; - Vector order = new Vector(cont.getComponentCount()); - HashSet set = new HashSet(); - - addTree(order, set, cont); + /** + * Lowers this component at the bottom of the above HW peer. If the above parameter + * is null then the method places this component at the top of the Z-order. + */ + public void setZOrder(ComponentPeer above) { + long aboveWindow = (above != null) ? ((XComponentPeer)above).getWindow() : 0; - XToolkit.awtLock(); - try { - // Get the current list of X window in X window. Some of the windows - // might be only native - XQueryTree qt = new XQueryTree(getContentWindow()); - try { - if (qt.execute() != 0) { - if (qt.get_nchildren() != 0) { - long pchildren = qt.get_children(); - int j = 0; // index to insert - for (int i = 0; i < qt.get_nchildren(); i++) { - Long w = Long.valueOf(Native.getLong(pchildren, i)); - if (!set.contains(w)) { - set.add(w); - order.add(j++, w); - } - } - } - } - - if (order.size() != 0) { - // Create native array of the windows - long windows = Native.allocateLongArray(order.size()); - Native.putLong(windows, order); - - // Restack native window according to the new order - XlibWrapper.XRestackWindows(XToolkit.getDisplay(), windows, order.size()); - - XlibWrapper.unsafe.freeMemory(windows); - } - } finally { - qt.dispose(); - } - } finally { - XToolkit.awtUnlock(); - } + XToolkit.awtLock(); + try{ + XlibWrapper.SetZOrder(XToolkit.getDisplay(), getWindow(), aboveWindow); + }finally{ + XToolkit.awtUnlock(); } } - public boolean isRestackSupported() { - return true; - } - private void addTree(Collection order, Set set, Container cont) { for (int i = 0; i < cont.getComponentCount(); i++) { Component comp = cont.getComponent(i); @@ -1560,4 +1428,8 @@ } } } + + public void updateGraphicsData(GraphicsConfiguration gc) { + initGraphicsConfiguration(); + } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XConstants.java --- a/jdk/src/solaris/classes/sun/awt/X11/XConstants.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XConstants.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -684,4 +684,19 @@ public static final int LSBFirst = 0 ; public static final int MSBFirst = 1 ; + + /* XKB support */ + public static final int XkbUseCoreKbd = 0x0100 ; + public static final int XkbNewKeyboardNotify = 0; + public static final int XkbMapNotify = 1; + public static final int XkbStateNotify = 2; + public static final long XkbNewKeyboardNotifyMask = (1L << 0); + public static final long XkbMapNotifyMask = (1L << 1); + public static final long XkbStateNotifyMask = (1L << 2); + public static final long XkbGroupStateMask = (1L << 4); + public static final long XkbKeyTypesMask = (1L<<0); + public static final long XkbKeySymsMask = (1L<<1); + public static final long XkbModifierMapMask = (1L<<2); + public static final long XkbVirtualModsMask = (1L<<6); //server map + } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java --- a/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XDecoratedPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -383,7 +383,7 @@ dimensions.setInsets(getRealInsets()); insets_corrected = true; - if (isMaximized() || isNull(correction)) { + if (isMaximized()) { return; } @@ -451,7 +451,7 @@ public Insets getInsets() { Insets in = copy(getRealInsets()); - in.top += getMenuBarHeight() + getWarningWindowHeight(); + in.top += getMenuBarHeight(); if (insLog.isLoggable(Level.FINEST)) { insLog.log(Level.FINEST, "Get insets returns {0}", new Object[] {in}); } @@ -802,6 +802,8 @@ } reconfigureContentWindow(newDimensions); updateChildrenSizes(); + + repositionSecurityWarning(); } private void checkShellRectSize(Rectangle shellRect) { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XEmbedChildProxyPeer.java --- a/jdk/src/solaris/classes/sun/awt/X11/XEmbedChildProxyPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XEmbedChildProxyPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -184,6 +184,7 @@ fl = new FocusEvent(currentOwner, FocusEvent.FOCUS_LOST, false, lightweightChild); } + // TODO: do we need to wrap in sequenced? if (fl != null) { postEvent(XComponentPeer.wrapInSequenced(fl)); } @@ -203,9 +204,9 @@ temporary, false, time, cause); switch (result) { - case XComponentPeer.SNFH_FAILURE: + case XKeyboardFocusManagerPeer.SNFH_FAILURE: return false; - case XComponentPeer.SNFH_SUCCESS_PROCEED: + case XKeyboardFocusManagerPeer.SNFH_SUCCESS_PROCEED: // Currently we just generate focus events like we deal with lightweight instead of calling // XSetInputFocus on native window @@ -235,9 +236,11 @@ // NOTE: We simulate heavyweight behavior of Motif - component receives focus right // after request, not after event. Normally, we should better listen for event // by listeners. + + // TODO: consider replacing with XKeyboardFocusManagerPeer.deliverFocus return simulateMotifRequestFocus(lightweightChild, temporary, focusedWindowChangeAllowed, time); // Motif compatibility code - case XComponentPeer.SNFH_SUCCESS_HANDLED: + case XKeyboardFocusManagerPeer.SNFH_SUCCESS_HANDLED: // Either lightweight or excessive requiest - all events are generated. return true; } @@ -379,4 +382,9 @@ public void applyShape(Region shape) { } + + public void setZOrder(ComponentPeer above) { + } + + public void updateGraphicsData(GraphicsConfiguration gc) {} } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java --- a/jdk/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XFileDialogPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -739,7 +739,17 @@ this.filter = filter; } - public void show() { + + public void dispose() { + FileDialog fd = (FileDialog)fileDialog; + if (fd != null) { + fd.removeAll(); + } + super.dispose(); + } + + // 03/02/2005 b5097243 Pressing 'ESC' on a file dlg does not dispose the dlg on Xtoolkit + public void setVisible(boolean b){ if (fileDialog == null) { init((FileDialog)target); } @@ -754,34 +764,20 @@ setFile(savedFile); } - super.show(); - selectionField.requestFocusInWindow(); - } - - public void dispose() { - FileDialog fd = (FileDialog)fileDialog; - if (fd != null) { - fd.removeAll(); - } - super.dispose(); - } - - // 03/02/2005 b5097243 Pressing 'ESC' on a file dlg does not dispose the dlg on Xtoolkit - public void setVisible(boolean b){ super.setVisible(b); if (b == true){ // See 6240074 for more information XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer(); choicePeer.addXChoicePeerListener(this); - KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this); }else{ // See 6240074 for more information XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer(); choicePeer.removeXChoicePeerListener(); - KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(this); } + + selectionField.requestFocusInWindow(); } /* diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java --- a/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XFramePeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -36,6 +36,7 @@ import java.awt.peer.FramePeer; import java.util.logging.Level; import java.util.logging.Logger; +import sun.awt.AWTAccessor; class XFramePeer extends XDecoratedPeer implements FramePeer { private static Logger log = Logger.getLogger("sun.awt.X11.XFramePeer"); @@ -231,13 +232,19 @@ } } - public int getState() { return state; } + public int getState() { + synchronized(getStateLock()) { + return state; + } + } public void setState(int newState) { - if (!isShowing()) { - stateLog.finer("Frame is not showing"); - state = newState; - return; + synchronized(getStateLock()) { + if (!isShowing()) { + stateLog.finer("Frame is not showing"); + state = newState; + return; + } } changeState(newState); } @@ -296,6 +303,9 @@ int old_state = state; state = newState; + // sync target with peer + AWTAccessor.getFrameAccessor().setExtendedState((Frame)target, state); + if ((changed & Frame.ICONIFIED) != 0) { if ((state & Frame.ICONIFIED) != 0) { stateLog.finer("Iconified"); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java --- a/jdk/src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -31,6 +31,7 @@ import java.awt.event.FocusEvent; import java.awt.peer.KeyboardFocusManagerPeer; +import java.awt.peer.ComponentPeer; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -40,136 +41,90 @@ import sun.awt.CausedFocusEvent; import sun.awt.SunToolkit; +import sun.awt.KeyboardFocusManagerPeerImpl; -public class XKeyboardFocusManagerPeer implements KeyboardFocusManagerPeer { +public class XKeyboardFocusManagerPeer extends KeyboardFocusManagerPeerImpl { private static final Logger focusLog = Logger.getLogger("sun.awt.X11.focus.XKeyboardFocusManagerPeer"); - KeyboardFocusManager manager; - - XKeyboardFocusManagerPeer(KeyboardFocusManager manager) { - this.manager = manager; - } private static Object lock = new Object() {}; private static Component currentFocusOwner; private static Window currentFocusedWindow; - static void setCurrentNativeFocusOwner(Component comp) { - if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Setting current native focus owner " + comp); - synchronized(lock) { + XKeyboardFocusManagerPeer(KeyboardFocusManager manager) { + super(manager); + } + + @Override + public void setCurrentFocusOwner(Component comp) { + setCurrentNativeFocusOwner(comp); + } + + @Override + public Component getCurrentFocusOwner() { + return getCurrentNativeFocusOwner(); + } + + @Override + public Window getCurrentFocusedWindow() { + return getCurrentNativeFocusedWindow(); + } + + public static void setCurrentNativeFocusOwner(Component comp) { + synchronized (lock) { currentFocusOwner = comp; } } - static void setCurrentNativeFocusedWindow(Window win) { - if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Setting current native focused window " + win); - synchronized(lock) { - currentFocusedWindow = win; - } - } - - static Component getCurrentNativeFocusOwner() { + public static Component getCurrentNativeFocusOwner() { synchronized(lock) { return currentFocusOwner; } } - static Window getCurrentNativeFocusedWindow() { + public static void setCurrentNativeFocusedWindow(Window win) { + if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Setting current native focused window " + win); + XWindowPeer from = null, to = null; + + synchronized(lock) { + if (currentFocusedWindow != null) { + from = (XWindowPeer)currentFocusedWindow.getPeer(); + } + + currentFocusedWindow = win; + + if (currentFocusedWindow != null) { + to = (XWindowPeer)currentFocusedWindow.getPeer(); + } + } + + if (from != null) { + from.updateSecurityWarningVisibility(); + } + if (to != null) { + to.updateSecurityWarningVisibility(); + } + } + + public static Window getCurrentNativeFocusedWindow() { synchronized(lock) { return currentFocusedWindow; } } - public Window getCurrentFocusedWindow() { - return getCurrentNativeFocusedWindow(); - } - - public void setCurrentFocusOwner(Component comp) { - setCurrentNativeFocusOwner(comp); - } - - public Component getCurrentFocusOwner() { - return getCurrentNativeFocusOwner(); - } - - public void clearGlobalFocusOwner(Window activeWindow) { - if (activeWindow != null) { - Component focusOwner = activeWindow.getFocusOwner(); - if (focusLog.isLoggable(Level.FINE)) focusLog.fine("Clearing global focus owner " + focusOwner); - if (focusOwner != null) { -// XComponentPeer nativePeer = XComponentPeer.getNativeContainer(focusOwner); -// if (nativePeer != null) { - FocusEvent fl = new CausedFocusEvent(focusOwner, FocusEvent.FOCUS_LOST, false, null, - CausedFocusEvent.Cause.CLEAR_GLOBAL_FOCUS_OWNER); - XWindow.sendEvent(fl); -// } - } - } - } - - static boolean simulateMotifRequestFocus(Component lightweightChild, Component target, boolean temporary, - boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause) + // TODO: do something to eliminate this forwarding + public static boolean deliverFocus(Component lightweightChild, + Component target, + boolean temporary, + boolean focusedWindowChangeAllowed, + long time, + CausedFocusEvent.Cause cause) { - if (lightweightChild == null) { - lightweightChild = (Component)target; - } - Component currentOwner = XKeyboardFocusManagerPeer.getCurrentNativeFocusOwner(); - if (currentOwner != null && currentOwner.getPeer() == null) { - currentOwner = null; - } - if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Simulating transfer from " + currentOwner + " to " + lightweightChild); - FocusEvent fg = new CausedFocusEvent(lightweightChild, FocusEvent.FOCUS_GAINED, false, currentOwner, cause); - FocusEvent fl = null; - if (currentOwner != null) { - fl = new CausedFocusEvent(currentOwner, FocusEvent.FOCUS_LOST, false, lightweightChild, cause); - } - - if (fl != null) { - XWindow.sendEvent(fl); - } - XWindow.sendEvent(fg); - return true; - } - - static Method shouldNativelyFocusHeavyweightMethod; - - static int shouldNativelyFocusHeavyweight(Component heavyweight, - Component descendant, boolean temporary, - boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause) - { - if (shouldNativelyFocusHeavyweightMethod == null) { - Class[] arg_types = - new Class[] { Component.class, - Component.class, - Boolean.TYPE, - Boolean.TYPE, - Long.TYPE, - CausedFocusEvent.Cause.class - }; - - shouldNativelyFocusHeavyweightMethod = - SunToolkit.getMethod(KeyboardFocusManager.class, - "shouldNativelyFocusHeavyweight", - arg_types); - } - Object[] args = new Object[] { heavyweight, - descendant, - Boolean.valueOf(temporary), - Boolean.valueOf(focusedWindowChangeAllowed), - Long.valueOf(time), cause}; - - int result = XComponentPeer.SNFH_FAILURE; - if (shouldNativelyFocusHeavyweightMethod != null) { - try { - result = ((Integer) shouldNativelyFocusHeavyweightMethod.invoke(null, args)).intValue(); - } - catch (IllegalAccessException e) { - assert false; - } - catch (InvocationTargetException e) { - assert false; - } - } - - return result; + return KeyboardFocusManagerPeerImpl.deliverFocus(lightweightChild, + target, + temporary, + focusedWindowChangeAllowed, + time, + cause, + getCurrentNativeFocusOwner()); } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XKeysym.java --- a/jdk/src/solaris/classes/sun/awt/X11/XKeysym.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XKeysym.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,7 +1,7 @@ // This is a generated file: do not edit! Edit keysym2ucs.h if necessary. /* - * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -89,14 +89,47 @@ Character ch = keysym2UCSHash.get(ks); return ch == null ? (char)0 : ch.charValue(); } + static long xkeycode2keysym_noxkb(XKeyEvent ev, int ndx) { + XToolkit.awtLock(); + try { + return XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx); + } finally { + XToolkit.awtUnlock(); + } + } + static long xkeycode2keysym_xkb(XKeyEvent ev, int ndx) { + XToolkit.awtLock(); + try { + int mods = ev.get_state(); + if ((ndx == 0) && ((mods & XConstants.ShiftMask) != 0)) { + // I don't know all possible meanings of 'ndx' in case of XKB + // and don't want to speculate. But this particular case + // clearly means that caller needs a so called primary keysym. + mods ^= XConstants.ShiftMask; + } + XlibWrapper.XkbTranslateKeyCode(XToolkit.getXKBKbdDesc(), ev.get_keycode(), + mods, XlibWrapper.iarg1, XlibWrapper.larg3); + //XXX unconsumed modifiers? + return Native.getLong(XlibWrapper.larg3); + } finally { + XToolkit.awtUnlock(); + } + } static long xkeycode2keysym(XKeyEvent ev, int ndx) { XToolkit.awtLock(); try { - return XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx ); + if (XToolkit.canUseXKBCalls()) { + return xkeycode2keysym_xkb(ev, ndx); + }else{ + return xkeycode2keysym_noxkb(ev, ndx); + } } finally { XToolkit.awtUnlock(); } } + static long xkeycode2primary_keysym(XKeyEvent ev) { + return xkeycode2keysym(ev, 0); + } public static boolean isKPEvent( XKeyEvent ev ) { // Xsun without XKB uses keysymarray[2] keysym to determine if it is KP event. @@ -198,6 +231,27 @@ Keysym2JavaKeycode jkc = getJavaKeycode( ev ); return jkc == null ? java.awt.event.KeyEvent.VK_UNDEFINED : jkc.getJavaKeycode(); } + /** + * Return an integer java keycode apprx as it was before extending keycodes range. + * This call would ignore for instance XKB and process whatever is on the bottom + * of keysym stack. Result will not depend on actual locale, will differ between + * dual/multiple keyboard setup systems (e.g. English+Russian vs French+Russian) + * but will be someway compatible with old releases. + */ + static int getLegacyJavaKeycodeOnly( XKeyEvent ev ) { + long keysym = XConstants.NoSymbol; + int ndx = 0; + if( (ev.get_state() & XToolkit.numLockMask) != 0 && + isKPEvent(ev)) { + keysym = getKeypadKeysym( ev ); + } else { + // we only need primary-layer keysym to derive a java keycode. + ndx = 0; + keysym = xkeycode2keysym_noxkb(ev, ndx); + } + Keysym2JavaKeycode jkc = keysym2JavaKeycodeHash.get( keysym ); + return jkc == null ? java.awt.event.KeyEvent.VK_UNDEFINED : jkc.getJavaKeycode(); + } static long javaKeycode2Keysym( int jkey ) { Long ks = javaKeycode2KeysymHash.get( jkey ); return (ks == null ? 0 : ks.longValue()); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java --- a/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XNETProtocol.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -169,6 +169,34 @@ return ((layer == LAYER_ALWAYS_ON_TOP) || (layer == LAYER_NORMAL)) && doLayerProtocol(); } + public void requestState(XWindow window, XAtom state, boolean isAdd) { + XClientMessageEvent req = new XClientMessageEvent(); + try { + req.set_type((int)XConstants.ClientMessage); + req.set_window(window.getWindow()); + req.set_message_type(XA_NET_WM_STATE.getAtom()); + req.set_format(32); + req.set_data(0, isAdd ? _NET_WM_STATE_ADD : _NET_WM_STATE_REMOVE); + req.set_data(1, state.getAtom()); + // Fix for 6735584: req.data[2] must be set to 0 when only one property is changed + req.set_data(2, 0); + log.log(Level.FINE, "Setting _NET_STATE atom {0} on {1} for {2}", new Object[] {state, window, Boolean.valueOf(isAdd)}); + XToolkit.awtLock(); + try { + XlibWrapper.XSendEvent(XToolkit.getDisplay(), + XlibWrapper.RootWindow(XToolkit.getDisplay(), window.getScreenNumber()), + false, + XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask, + req.pData); + } + finally { + XToolkit.awtUnlock(); + } + } finally { + req.dispose(); + } + } + /** * Helper function to set/reset one state in NET_WM_STATE * If window is showing then it uses ClientMessage, otherwise adjusts NET_WM_STATE list @@ -181,31 +209,7 @@ new Object[] {Boolean.valueOf(window.isWithdrawn()), Boolean.valueOf(window.isVisible()), Boolean.valueOf(window.isMapped()), Boolean.valueOf(window.isShowing())}); if (window.isShowing()) { - XClientMessageEvent req = new XClientMessageEvent(); - try { - req.set_type((int)XConstants.ClientMessage); - req.set_window(window.getWindow()); - req.set_message_type(XA_NET_WM_STATE.getAtom()); - req.set_format(32); - req.set_data(0, (!set) ? _NET_WM_STATE_REMOVE : _NET_WM_STATE_ADD); - req.set_data(1, state.getAtom()); - // Fix for 6735584: req.data[2] must be set to 0 when only one property is changed - req.set_data(2, 0); - log.log(Level.FINE, "Setting _NET_STATE atom {0} on {1} for {2}", new Object[] {state, window, Boolean.valueOf(set)}); - XToolkit.awtLock(); - try { - XlibWrapper.XSendEvent(XToolkit.getDisplay(), - XlibWrapper.RootWindow(XToolkit.getDisplay(), window.getScreenNumber()), - false, - XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask, - req.pData); - } - finally { - XToolkit.awtUnlock(); - } - } finally { - req.dispose(); - } + requestState(window, state, set); } else { XAtomList net_wm_state = window.getNETWMState(); log.log(Level.FINE, "Current state on {0} is {1}", new Object[] {window, net_wm_state}); @@ -252,6 +256,8 @@ XAtom XA_NET_WM_WINDOW_TYPE = XAtom.get("_NET_WM_WINDOW_TYPE"); XAtom XA_NET_WM_WINDOW_TYPE_DIALOG = XAtom.get("_NET_WM_WINDOW_TYPE_DIALOG"); + XAtom XA_NET_WM_WINDOW_OPACITY = XAtom.get("_NET_WM_WINDOW_OPACITY"); + /* For _NET_WM_STATE ClientMessage requests */ final static int _NET_WM_STATE_REMOVE =0; /* remove/unset property */ final static int _NET_WM_STATE_ADD =1; /* add/set property */ @@ -289,6 +295,12 @@ boolean res = active() && checkProtocol(XA_NET_SUPPORTED, XA_NET_WM_STATE_MODAL); return res; } + + boolean doOpacityProtocol() { + boolean res = active() && checkProtocol(XA_NET_SUPPORTED, XA_NET_WM_WINDOW_OPACITY); + return res; + } + boolean isWMName(String name) { if (!active()) { return false; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XPanelPeer.java --- a/jdk/src/solaris/classes/sun/awt/X11/XPanelPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XPanelPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -130,39 +130,6 @@ return getInsets(); } - /* - * This method is called from XWindowPeer.displayChanged, when - * the window this Panel is on is moved to the new screen, or - * display mode is changed. - * - * The notification is propagated to the child Canvas components. - * Top-level windows and other Panels are notified too as their - * peers are subclasses of XCanvasPeer. - */ - public void displayChanged(int screenNum) { - super.displayChanged(screenNum); - displayChanged((Container)target, screenNum); - } - - /* - * Recursively iterates through all the HW and LW children - * of the container and calls displayChanged() for HW peers. - * Iteration through children peers only is not enough as the - * displayChanged notification may not be propagated to HW - * components inside LW containers, see 4452373 for details. - */ - private static void displayChanged(Container target, int screenNum) { - Component children[] = ((Container)target).getComponents(); - for (Component child : children) { - ComponentPeer cpeer = child.getPeer(); - if (cpeer instanceof XCanvasPeer) { - ((XCanvasPeer)cpeer).displayChanged(screenNum); - } else if (child instanceof Container) { - displayChanged((Container)child, screenNum); - } - } - } - public void dispose() { if (embedder != null) { embedder.deinstall(); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XToolkit.java --- a/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -54,6 +54,7 @@ import sun.font.FontManager; import sun.misc.PerformanceLogger; import sun.print.PrintJob2D; +import sun.security.action.GetBooleanAction; public final class XToolkit extends UNIXToolkit implements Runnable { private static Logger log = Logger.getLogger("sun.awt.X11.XToolkit"); @@ -291,6 +292,7 @@ if (XlibWrapper.XSetLocaleModifiers("") == null) { log.finer("X locale modifiers are not supported, using default"); } + tryXKB(); AwtScreenData defaultScreen = new AwtScreenData(XToolkit.getDefaultScreenData()); awt_defaultFg = defaultScreen.get_blackpixel(); @@ -313,6 +315,7 @@ if (xs != null) { ((XAWTXSettings)xs).dispose(); } + freeXKB(); if (log.isLoggable(Level.FINE)) { dumpPeers(); } @@ -591,6 +594,9 @@ if (ev.get_type() != XConstants.NoExpose) { eventNumber++; } + if (awt_UseXKB_Calls && ev.get_type() == awt_XKBBaseEventCode) { + processXkbChanges(ev); + } if (XDropTargetEventProcessor.processEvent(ev) || XDragSourceContextPeer.processEvent(ev)) { @@ -2093,8 +2099,12 @@ static boolean awt_ServerInquired = false; static boolean awt_IsXsunServer = false; - static boolean awt_XKBInquired = false; static boolean awt_UseXKB = false; + static boolean awt_UseXKB_Calls = false; + static int awt_XKBBaseEventCode = 0; + static int awt_XKBEffectiveGroup = 0; // so far, I don't use it leaving all calculations + // to XkbTranslateKeyCode + static long awt_XKBDescPtr = 0; /** Try to understand if it is Xsun server. By now (2005) Sun is vendor of Xsun and Xorg servers; we only return true if Xsun is running. @@ -2124,23 +2134,143 @@ awtUnlock(); } } - /** - Query XKEYBOARD extension. - */ static boolean isXKBenabled() { awtLock(); try { - if( awt_XKBInquired ) { - return awt_UseXKB; + return awt_UseXKB; + } finally { + awtUnlock(); + } + } + + /** + Query XKEYBOARD extension. + If possible, initialize xkb library. + */ + static boolean tryXKB() { + awtLock(); + try { + String name = "XKEYBOARD"; + // First, if there is extension at all. + awt_UseXKB = XlibWrapper.XQueryExtension( getDisplay(), name, XlibWrapper.larg1, XlibWrapper.larg2, XlibWrapper.larg3); + if( awt_UseXKB ) { + // There is a keyboard extension. Check if a client library is compatible. + // If not, don't use xkb calls. + // In this case we still may be Xkb-capable application. + awt_UseXKB_Calls = XlibWrapper.XkbLibraryVersion( XlibWrapper.larg1, XlibWrapper.larg2); + if( awt_UseXKB_Calls ) { + awt_UseXKB_Calls = XlibWrapper.XkbQueryExtension( getDisplay(), XlibWrapper.larg1, XlibWrapper.larg2, + XlibWrapper.larg3, XlibWrapper.larg4, XlibWrapper.larg5); + if( awt_UseXKB_Calls ) { + awt_XKBBaseEventCode = Native.getInt(XlibWrapper.larg2); + XlibWrapper.XkbSelectEvents (getDisplay(), + XConstants.XkbUseCoreKbd, + XConstants.XkbNewKeyboardNotifyMask | + XConstants.XkbMapNotifyMask ,//| + //XConstants.XkbStateNotifyMask, + XConstants.XkbNewKeyboardNotifyMask | + XConstants.XkbMapNotifyMask );//| + //XConstants.XkbStateNotifyMask); + + XlibWrapper.XkbSelectEventDetails(getDisplay(), XConstants.XkbUseCoreKbd, + XConstants.XkbStateNotify, + XConstants.XkbGroupStateMask, + XConstants.XkbGroupStateMask); + //XXX ? XkbGroupLockMask last, XkbAllStateComponentsMask before last? + awt_XKBDescPtr = XlibWrapper.XkbGetMap(getDisplay(), + XConstants.XkbKeyTypesMask | + XConstants.XkbKeySymsMask | + XConstants.XkbModifierMapMask | + XConstants.XkbVirtualModsMask, + XConstants.XkbUseCoreKbd); + } + } } - awt_XKBInquired = true; - String name = "XKEYBOARD"; - awt_UseXKB = XlibWrapper.XQueryExtension( getDisplay(), name, XlibWrapper.larg1, XlibWrapper.larg2, XlibWrapper.larg3); return awt_UseXKB; } finally { awtUnlock(); } } + static boolean canUseXKBCalls() { + awtLock(); + try { + return awt_UseXKB_Calls; + } finally { + awtUnlock(); + } + } + static int getXKBEffectiveGroup() { + awtLock(); + try { + return awt_XKBEffectiveGroup; + } finally { + awtUnlock(); + } + } + static int getXKBBaseEventCode() { + awtLock(); + try { + return awt_XKBBaseEventCode; + } finally { + awtUnlock(); + } + } + static long getXKBKbdDesc() { + awtLock(); + try { + return awt_XKBDescPtr; + } finally { + awtUnlock(); + } + } + void freeXKB() { + awtLock(); + try { + if (awt_UseXKB_Calls && awt_XKBDescPtr != 0) { + XlibWrapper.XkbFreeKeyboard(awt_XKBDescPtr, 0xFF, true); + } + } finally { + awtUnlock(); + } + } + private void processXkbChanges(XEvent ev) { + // mapping change --> refresh kbd map + // state change --> get a new effective group; do I really need it + // or that should be left for XkbTranslateKeyCode? + XkbEvent xke = new XkbEvent( ev.getPData() ); + int xkb_type = xke.get_any().get_xkb_type(); + switch( xkb_type ) { + case XConstants.XkbNewKeyboardNotify : + if( awt_XKBDescPtr != 0 ) { + freeXKB(); + } + awt_XKBDescPtr = XlibWrapper.XkbGetMap(getDisplay(), + XConstants.XkbKeyTypesMask | + XConstants.XkbKeySymsMask | + XConstants.XkbModifierMapMask | + XConstants.XkbVirtualModsMask, + XConstants.XkbUseCoreKbd); + //System.out.println("XkbNewKeyboard:"+(xke.get_new_kbd())); + break; + case XConstants.XkbMapNotify : + //TODO: provide a simple unit test. + XlibWrapper.XkbGetUpdatedMap(getDisplay(), + XConstants.XkbKeyTypesMask | + XConstants.XkbKeySymsMask | + XConstants.XkbModifierMapMask | + XConstants.XkbVirtualModsMask, + awt_XKBDescPtr); + //System.out.println("XkbMap:"+(xke.get_map())); + break; + case XConstants.XkbStateNotify : + // May use it later e.g. to obtain an effective group etc. + //System.out.println("XkbState:"+(xke.get_state())); + break; + default: + //System.out.println("XkbEvent of xkb_type "+xkb_type); + break; + } + } private static long eventNumber; public static long getEventNumber() { @@ -2273,4 +2403,44 @@ public boolean areExtraMouseButtonsEnabled() throws HeadlessException { return areExtraMouseButtonsEnabled; } + + @Override + public boolean isWindowOpacitySupported() { + XNETProtocol net_protocol = XWM.getWM().getNETProtocol(); + + if (net_protocol == null) { + return false; + } + + return net_protocol.doOpacityProtocol(); + } + + @Override + public boolean isWindowShapingSupported() { + return XlibUtil.isShapingSupported(); + } + + @Override + public boolean isWindowTranslucencySupported() { + //NOTE: it may not be supported. The actual check is being performed + // at com.sun.awt.AWTUtilities(). In X11 we need to check + // whether there's any translucency-capable GC available. + return true; + } + + @Override + public boolean isTranslucencyCapable(GraphicsConfiguration gc) { + if (!(gc instanceof X11GraphicsConfig)) { + return false; + } + return ((X11GraphicsConfig)gc).isTranslucencyCapable(); + } + + /** + * Returns the value of "sun.awt.disablegrab" property. Default + * value is {@code false}. + */ + public static boolean getSunAwtDisableGrab() { + return AccessController.doPrivileged(new GetBooleanAction("sun.awt.disablegrab")); + } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java --- a/jdk/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XTrayIconPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -38,15 +38,18 @@ import java.security.PrivilegedAction; import java.lang.reflect.InvocationTargetException; -public class XTrayIconPeer implements TrayIconPeer { +public class XTrayIconPeer implements TrayIconPeer, + InfoWindow.Balloon.LiveArguments, + InfoWindow.Tooltip.LiveArguments +{ private static final Logger ctrLog = Logger.getLogger("sun.awt.X11.XTrayIconPeer.centering"); TrayIcon target; TrayIconEventProxy eventProxy; XTrayIconEmbeddedFrame eframe; TrayIconCanvas canvas; - Balloon balloon; - Tooltip tooltip; + InfoWindow.Balloon balloon; + InfoWindow.Tooltip tooltip; PopupMenu popup; String tooltipString; boolean isTrayIconDisplayed; @@ -255,8 +258,8 @@ eframe.setVisible(true); updateImage(); - balloon = new Balloon(this, eframe); - tooltip = new Tooltip(this, eframe); + balloon = new InfoWindow.Balloon(eframe, target, this); + tooltip = new InfoWindow.Tooltip(eframe, target, this); addListeners(); } @@ -300,6 +303,10 @@ tooltipString = tooltip; } + public String getTooltipString() { + return tooltipString; + } + public void updateImage() { Runnable r = new Runnable() { public void run() { @@ -385,7 +392,7 @@ return eframe.getLocationOnScreen(); } - private Rectangle getBounds() { + public Rectangle getBounds() { Point loc = getLocationOnScreen(); return new Rectangle(loc.x, loc.y, loc.x + TRAY_ICON_WIDTH, loc.y + TRAY_ICON_HEIGHT); } @@ -399,10 +406,14 @@ return ((XEmbeddedFramePeer)eframe.getPeer()).getWindow(); } - boolean isDisposed() { + public boolean isDisposed() { return isDisposed; } + public String getActionCommand() { + return target.getActionCommand(); + } + static class TrayIconEventProxy implements MouseListener, MouseMotionListener { XTrayIconPeer xtiPeer; @@ -474,8 +485,8 @@ } static boolean isTrayIconStuffWindow(Window w) { - return (w instanceof Tooltip) || - (w instanceof Balloon) || + return (w instanceof InfoWindow.Tooltip) || + (w instanceof InfoWindow.Balloon) || (w instanceof XTrayIconEmbeddedFrame); } @@ -530,7 +541,7 @@ } } - static class IconCanvas extends Canvas { + public static class IconCanvas extends Canvas { volatile Image image; IconObserver observer; int width, height; @@ -608,429 +619,4 @@ } } } - - // *************************************** - // Classes for toolitp and balloon windows - // *************************************** - - static class Tooltip extends InfoWindow { - XTrayIconPeer xtiPeer; - Label textLabel = new Label(""); - Runnable starter = new Runnable() { - public void run() { - display(); - }}; - - final static int TOOLTIP_SHOW_TIME = 10000; - final static int TOOLTIP_START_DELAY_TIME = 1000; - final static int TOOLTIP_MAX_LENGTH = 64; - final static int TOOLTIP_MOUSE_CURSOR_INDENT = 5; - final static Color TOOLTIP_BACKGROUND_COLOR = new Color(255, 255, 220); - final static Font TOOLTIP_TEXT_FONT = XWindow.getDefaultFont(); - - Tooltip(XTrayIconPeer xtiPeer, Frame parent) { - super(parent, Color.black); - this.xtiPeer = xtiPeer; - - suppressWarningString(this); - - setCloser(null, TOOLTIP_SHOW_TIME); - textLabel.setBackground(TOOLTIP_BACKGROUND_COLOR); - textLabel.setFont(TOOLTIP_TEXT_FONT); - add(textLabel); - } - - /* - * WARNING: this method is executed on Toolkit thread! - */ - void display() { - String tip = xtiPeer.tooltipString; - if (tip == null) { - return; - } else if (tip.length() > TOOLTIP_MAX_LENGTH) { - textLabel.setText(tip.substring(0, TOOLTIP_MAX_LENGTH)); - } else { - textLabel.setText(tip); - } - - // Execute on EDT to avoid deadlock (see 6280857). - SunToolkit.executeOnEventHandlerThread(xtiPeer.target, new Runnable() { - public void run() { - if (xtiPeer.isDisposed()) { - return; - } - Point pointer = (Point)AccessController.doPrivileged(new PrivilegedAction() { - public Object run() { - if (!isPointerOverTrayIcon(xtiPeer.getBounds())) { - return null; - } - return MouseInfo.getPointerInfo().getLocation(); - } - }); - if (pointer == null) { - return; - } - show(new Point(pointer.x, pointer.y), TOOLTIP_MOUSE_CURSOR_INDENT); - } - }); - } - - void enter() { - XToolkit.schedule(starter, TOOLTIP_START_DELAY_TIME); - } - - void exit() { - XToolkit.remove(starter); - if (isVisible()) { - hide(); - } - } - - boolean isPointerOverTrayIcon(Rectangle trayRect) { - Point p = MouseInfo.getPointerInfo().getLocation(); - return !(p.x < trayRect.x || p.x > (trayRect.x + trayRect.width) || - p.y < trayRect.y || p.y > (trayRect.y + trayRect.height)); - } - } - - static class Balloon extends InfoWindow { - final static int BALLOON_SHOW_TIME = 10000; - final static int BALLOON_TEXT_MAX_LENGTH = 256; - final static int BALLOON_WORD_LINE_MAX_LENGTH = 16; - final static int BALLOON_WORD_LINE_MAX_COUNT = 4; - final static int BALLOON_ICON_WIDTH = 32; - final static int BALLOON_ICON_HEIGHT = 32; - final static int BALLOON_TRAY_ICON_INDENT = 0; - final static Color BALLOON_CAPTION_BACKGROUND_COLOR = new Color(200, 200 ,255); - final static Font BALLOON_CAPTION_FONT = new Font(Font.DIALOG, Font.BOLD, 12); - - XTrayIconPeer xtiPeer; - Panel mainPanel = new Panel(); - Panel captionPanel = new Panel(); - Label captionLabel = new Label(""); - Button closeButton = new Button("X"); - Panel textPanel = new Panel(); - IconCanvas iconCanvas = new IconCanvas(BALLOON_ICON_WIDTH, BALLOON_ICON_HEIGHT); - Label[] lineLabels = new Label[BALLOON_WORD_LINE_MAX_COUNT]; - ActionPerformer ap = new ActionPerformer(); - - Image iconImage; - Image errorImage; - Image warnImage; - Image infoImage; - boolean gtkImagesLoaded; - - Displayer displayer = new Displayer(); - - Balloon(final XTrayIconPeer xtiPeer, Frame parent) { - super(parent, new Color(90, 80 ,190)); - this.xtiPeer = xtiPeer; - - suppressWarningString(this); - - setCloser(new Runnable() { - public void run() { - if (textPanel != null) { - textPanel.removeAll(); - textPanel.setSize(0, 0); - iconCanvas.setSize(0, 0); - XToolkit.awtLock(); - try { - displayer.isDisplayed = false; - XToolkit.awtLockNotifyAll(); - } finally { - XToolkit.awtUnlock(); - } - } - } - }, BALLOON_SHOW_TIME); - - add(mainPanel); - - captionLabel.setFont(BALLOON_CAPTION_FONT); - captionLabel.addMouseListener(ap); - - captionPanel.setLayout(new BorderLayout()); - captionPanel.add(captionLabel, BorderLayout.WEST); - captionPanel.add(closeButton, BorderLayout.EAST); - captionPanel.setBackground(BALLOON_CAPTION_BACKGROUND_COLOR); - captionPanel.addMouseListener(ap); - - closeButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - hide(); - } - }); - - mainPanel.setLayout(new BorderLayout()); - mainPanel.setBackground(Color.white); - mainPanel.add(captionPanel, BorderLayout.NORTH); - mainPanel.add(iconCanvas, BorderLayout.WEST); - mainPanel.add(textPanel, BorderLayout.CENTER); - - iconCanvas.addMouseListener(ap); - - for (int i = 0; i < BALLOON_WORD_LINE_MAX_COUNT; i++) { - lineLabels[i] = new Label(); - lineLabels[i].addMouseListener(ap); - lineLabels[i].setBackground(Color.white); - } - - displayer.start(); - } - - void display(String caption, String text, String messageType) { - if (!gtkImagesLoaded) { - loadGtkImages(); - } - displayer.display(caption, text, messageType); - } - - private void _display(String caption, String text, String messageType) { - captionLabel.setText(caption); - - BreakIterator iter = BreakIterator.getWordInstance(); - if (text != null) { - iter.setText(text); - int start = iter.first(), end; - int nLines = 0; - - do { - end = iter.next(); - - if (end == BreakIterator.DONE || - text.substring(start, end).length() >= 50) - { - lineLabels[nLines].setText(text.substring(start, end == BreakIterator.DONE ? - iter.last() : end)); - textPanel.add(lineLabels[nLines++]); - start = end; - } - if (nLines == BALLOON_WORD_LINE_MAX_COUNT) { - if (end != BreakIterator.DONE) { - lineLabels[nLines - 1].setText( - new String(lineLabels[nLines - 1].getText() + " ...")); - } - break; - } - } while (end != BreakIterator.DONE); - - - textPanel.setLayout(new GridLayout(nLines, 1)); - } - - if ("ERROR".equals(messageType)) { - iconImage = errorImage; - } else if ("WARNING".equals(messageType)) { - iconImage = warnImage; - } else if ("INFO".equals(messageType)) { - iconImage = infoImage; - } else { - iconImage = null; - } - - if (iconImage != null) { - Dimension tpSize = textPanel.getSize(); - iconCanvas.setSize(BALLOON_ICON_WIDTH, (BALLOON_ICON_HEIGHT > tpSize.height ? - BALLOON_ICON_HEIGHT : tpSize.height)); - iconCanvas.validate(); - } - - SunToolkit.executeOnEventHandlerThread(xtiPeer.target, new Runnable() { - public void run() { - if (xtiPeer.isDisposed()) { - return; - } - Point parLoc = getParent().getLocationOnScreen(); - Dimension parSize = getParent().getSize(); - show(new Point(parLoc.x + parSize.width/2, parLoc.y + parSize.height/2), - BALLOON_TRAY_ICON_INDENT); - if (iconImage != null) { - iconCanvas.updateImage(iconImage); // call it after the show(..) above - } - } - }); - } - - public void dispose() { - displayer.interrupt(); - super.dispose(); - } - - void loadGtkImages() { - if (!gtkImagesLoaded) { - errorImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty( - "gtk.icon.gtk-dialog-error.6.rtl"); - warnImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty( - "gtk.icon.gtk-dialog-warning.6.rtl"); - infoImage = (Image)Toolkit.getDefaultToolkit().getDesktopProperty( - "gtk.icon.gtk-dialog-info.6.rtl"); - gtkImagesLoaded = true; - } - } - - class ActionPerformer extends MouseAdapter { - public void mouseClicked(MouseEvent e) { - // hide the balloon by any click - hide(); - if (e.getButton() == MouseEvent.BUTTON1) { - ActionEvent aev = new ActionEvent(xtiPeer.target, ActionEvent.ACTION_PERFORMED, - xtiPeer.target.getActionCommand(), - e.getWhen(), e.getModifiers()); - Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(aev); - } - } - } - - class Displayer extends Thread { - final int MAX_CONCURRENT_MSGS = 10; - - ArrayBlockingQueue<Message> messageQueue = new ArrayBlockingQueue<Message>(MAX_CONCURRENT_MSGS); - boolean isDisplayed; - - Displayer() { - setDaemon(true); - } - - public void run() { - while (true) { - Message msg = null; - try { - msg = (Message)messageQueue.take(); - } catch (InterruptedException e) { - return; - } - - /* - * Wait till the previous message is displayed if any - */ - XToolkit.awtLock(); - try { - while (isDisplayed) { - try { - XToolkit.awtLockWait(); - } catch (InterruptedException e) { - return; - } - } - isDisplayed = true; - } finally { - XToolkit.awtUnlock(); - } - _display(msg.caption, msg.text, msg.messageType); - } - } - - void display(String caption, String text, String messageType) { - messageQueue.offer(new Message(caption, text, messageType)); - } - } - - class Message { - String caption, text, messageType; - - Message(String caption, String text, String messageType) { - this.caption = caption; - this.text = text; - this.messageType = messageType; - } - } - } - - static class InfoWindow extends Window { - Container container; - Closer closer; - - InfoWindow(Frame parent, Color borderColor) { - super(parent); - container = new Container() { - public Insets getInsets() { - return new Insets(1, 1, 1, 1); - } - }; - setLayout(new BorderLayout()); - setBackground(borderColor); - add(container, BorderLayout.CENTER); - container.setLayout(new BorderLayout()); - - closer = new Closer(); - } - - public Component add(Component c) { - container.add(c, BorderLayout.CENTER); - return c; - } - - void setCloser(Runnable action, int time) { - closer.set(action, time); - } - - // Must be executed on EDT. - protected void show(Point corner, int indent) { - assert SunToolkit.isDispatchThreadForAppContext(InfoWindow.this); - - pack(); - - Dimension size = getSize(); - // TODO: When 6356322 is fixed we should get screen bounds in - // this way: eframe.getGraphicsConfiguration().getBounds(). - Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize(); - - if (corner.x < scrSize.width/2 && corner.y < scrSize.height/2) { // 1st square - setLocation(corner.x + indent, corner.y + indent); - - } else if (corner.x >= scrSize.width/2 && corner.y < scrSize.height/2) { // 2nd square - setLocation(corner.x - indent - size.width, corner.y + indent); - - } else if (corner.x < scrSize.width/2 && corner.y >= scrSize.height/2) { // 3rd square - setLocation(corner.x + indent, corner.y - indent - size.height); - - } else if (corner.x >= scrSize.width/2 && corner.y >= scrSize.height/2) { // 4th square - setLocation(corner.x - indent - size.width, corner.y - indent - size.height); - } - - InfoWindow.super.show(); - InfoWindow.this.closer.schedule(); - } - - public void hide() { - closer.close(); - } - - class Closer implements Runnable { - Runnable action; - int time; - - public void run() { - doClose(); - } - - void set(Runnable action, int time) { - this.action = action; - this.time = time; - } - - void schedule() { - XToolkit.schedule(this, time); - } - - void close() { - XToolkit.remove(this); - doClose(); - } - - // WARNING: this method may be executed on Toolkit thread. - private void doClose() { - SunToolkit.executeOnEventHandlerThread(InfoWindow.this, new Runnable() { - public void run() { - InfoWindow.super.hide(); - invalidate(); - if (action != null) { - action.run(); - } - } - }); - } - } - } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XWM.java --- a/jdk/src/solaris/classes/sun/awt/X11/XWM.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XWM.java Wed Jul 05 16:51:11 2017 +0200 @@ -896,7 +896,7 @@ /* * Set MWM decorations. Set MWM functions depending on resizability. */ - static void setMotifDecor(XWindowPeer window, boolean resizable, int decorations, int functions) { + static void setMotifDecor(XWindow window, boolean resizable, int decorations, int functions) { /* Apparently some WMs don't implement MWM_*_ALL semantic correctly */ if ((decorations & MWMConstants.MWM_DECOR_ALL) != 0 && (decorations != MWMConstants.MWM_DECOR_ALL)) diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XWarningWindow.java --- a/jdk/src/solaris/classes/sun/awt/X11/XWarningWindow.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XWarningWindow.java Wed Jul 05 16:51:11 2017 +0200 @@ -25,16 +25,194 @@ package sun.awt.X11; import java.awt.*; +import java.awt.event.*; +import java.awt.geom.Point2D; +import java.lang.ref.WeakReference; +import sun.java2d.SunGraphics2D; +import sun.java2d.pipe.Region; +import sun.awt.AWTAccessor; +import sun.awt.SunToolkit; class XWarningWindow extends XWindow { - final static int defaultHeight = 27; + private final static int showingDelay = 330; + private final static int hidingDelay = 2000; + + private final Window ownerWindow; + private WeakReference<XWindowPeer> ownerPeer; + + public final Window getOwnerWindow() { + return ownerWindow; + } + private long parentWindow; + + private final static String OWNER = "OWNER"; + + private static XIconInfo[][] icons; + + private InfoWindow.Tooltip tooltip; + + private static synchronized XIconInfo getSecurityIconInfo(int size, int num) { + if (icons == null) { + icons = new XIconInfo[4][3]; + if (XlibWrapper.dataModel == 32) { + icons[0][0] = new XIconInfo(XAWTIcon32_security_icon_bw16_png.security_icon_bw16_png); + icons[0][1] = new XIconInfo(XAWTIcon32_security_icon_interim16_png.security_icon_interim16_png); + icons[0][2] = new XIconInfo(XAWTIcon32_security_icon_yellow16_png.security_icon_yellow16_png); + icons[1][0] = new XIconInfo(XAWTIcon32_security_icon_bw24_png.security_icon_bw24_png); + icons[1][1] = new XIconInfo(XAWTIcon32_security_icon_interim24_png.security_icon_interim24_png); + icons[1][2] = new XIconInfo(XAWTIcon32_security_icon_yellow24_png.security_icon_yellow24_png); + icons[2][0] = new XIconInfo(XAWTIcon32_security_icon_bw32_png.security_icon_bw32_png); + icons[2][1] = new XIconInfo(XAWTIcon32_security_icon_interim32_png.security_icon_interim32_png); + icons[2][2] = new XIconInfo(XAWTIcon32_security_icon_yellow32_png.security_icon_yellow32_png); + icons[3][0] = new XIconInfo(XAWTIcon32_security_icon_bw48_png.security_icon_bw48_png); + icons[3][1] = new XIconInfo(XAWTIcon32_security_icon_interim48_png.security_icon_interim48_png); + icons[3][2] = new XIconInfo(XAWTIcon32_security_icon_yellow48_png.security_icon_yellow48_png); + } else { + icons[0][0] = new XIconInfo(XAWTIcon64_security_icon_bw16_png.security_icon_bw16_png); + icons[0][1] = new XIconInfo(XAWTIcon64_security_icon_interim16_png.security_icon_interim16_png); + icons[0][2] = new XIconInfo(XAWTIcon64_security_icon_yellow16_png.security_icon_yellow16_png); + icons[1][0] = new XIconInfo(XAWTIcon64_security_icon_bw24_png.security_icon_bw24_png); + icons[1][1] = new XIconInfo(XAWTIcon64_security_icon_interim24_png.security_icon_interim24_png); + icons[1][2] = new XIconInfo(XAWTIcon64_security_icon_yellow24_png.security_icon_yellow24_png); + icons[2][0] = new XIconInfo(XAWTIcon64_security_icon_bw32_png.security_icon_bw32_png); + icons[2][1] = new XIconInfo(XAWTIcon64_security_icon_interim32_png.security_icon_interim32_png); + icons[2][2] = new XIconInfo(XAWTIcon64_security_icon_yellow32_png.security_icon_yellow32_png); + icons[3][0] = new XIconInfo(XAWTIcon64_security_icon_bw48_png.security_icon_bw48_png); + icons[3][1] = new XIconInfo(XAWTIcon64_security_icon_interim48_png.security_icon_interim48_png); + icons[3][2] = new XIconInfo(XAWTIcon64_security_icon_yellow48_png.security_icon_yellow48_png); + } + } + final int sizeIndex = size % icons.length; + return icons[sizeIndex][num % icons[sizeIndex].length]; + } + + private volatile int currentIcon = 0; + + /* -1 - uninitialized yet + * 0 - 16x16 + * 1 - 24x24 + * 2 - 32x32 + * 3 - 48x48 + */ + private volatile int currentSize = -1; + + /** Indicates whether the shape of the window must be updated + */ + private volatile boolean sizeUpdated = true; + + private synchronized boolean updateIconSize() { + int newSize = currentSize; + + if (ownerWindow != null) { + Insets insets = ownerWindow.getInsets(); + int max = Math.max(insets.top, Math.max(insets.bottom, + Math.max(insets.left, insets.right))); + if (max < 24) { + newSize = 0; + } else if (max < 32) { + newSize = 1; + } else if (max < 48) { + newSize = 2; + } else { + newSize = 3; + } + } + if (newSize != currentSize) { + currentSize = newSize; + sizeUpdated = true; + } + return sizeUpdated; + } - Window ownerWindow; - XWarningWindow(Window ownerWindow, long parentWindow) { - super(ownerWindow, parentWindow); + private synchronized XIconInfo getSecurityIconInfo() { + updateIconSize(); + return getSecurityIconInfo(currentSize, currentIcon); + } + + XWarningWindow(final Window ownerWindow, long parentWindow, XWindowPeer ownerPeer) { + super(new XCreateWindowParams(new Object[] { + TARGET, ownerWindow, + OWNER, Long.valueOf(parentWindow) + })); this.ownerWindow = ownerWindow; - xSetVisible(true); - toFront(); + this.parentWindow = parentWindow; + this.tooltip = new InfoWindow.Tooltip(null, getTarget(), + new InfoWindow.Tooltip.LiveArguments() { + public boolean isDisposed() { + return XWarningWindow.this.isDisposed(); + } + public Rectangle getBounds() { + return XWarningWindow.this.getBounds(); + } + public String getTooltipString() { + return XWarningWindow.this.ownerWindow.getWarningString(); + } + }); + this.ownerPeer = new WeakReference<XWindowPeer>(ownerPeer); + } + + private void requestNoTaskbar() { + XNETProtocol netProtocol = XWM.getWM().getNETProtocol(); + if (netProtocol != null) { + netProtocol.requestState(this, netProtocol.XA_NET_WM_STATE_SKIP_TASKBAR, true); + } + } + + @Override + void postInit(XCreateWindowParams params) { + super.postInit(params); + XToolkit.awtLock(); + try { + XWM.setMotifDecor(this, false, 0, 0); + XWM.setOLDecor(this, false, 0); + + long parentWindow = ((Long)params.get(OWNER)).longValue(); + XlibWrapper.XSetTransientFor(XToolkit.getDisplay(), + getWindow(), parentWindow); + + XWMHints hints = getWMHints(); + hints.set_flags(hints.get_flags() | (int)XUtilConstants.InputHint | (int)XUtilConstants.StateHint); + hints.set_input(false); + hints.set_initial_state(XUtilConstants.NormalState); + XlibWrapper.XSetWMHints(XToolkit.getDisplay(), getWindow(), hints.pData); + + initWMProtocols(); + requestNoTaskbar(); + } finally { + XToolkit.awtUnlock(); + } + } + + private void updateWarningWindowBounds() { + XWindowPeer peer = ownerPeer.get(); + if (peer != null) { + synchronized (this) { + if (updateIconSize()) { + XIconInfo ico = getSecurityIconInfo(); + XToolkit.awtLock(); + try { + XlibWrapper.SetBitmapShape(XToolkit.getDisplay(), getWindow(), + ico.getWidth(), ico.getHeight(), ico.getIntData()); + } finally { + XToolkit.awtUnlock(); + } + sizeUpdated = false; + AWTAccessor.getWindowAccessor().setSecurityWarningSize( + ownerWindow, ico.getWidth(), ico.getHeight()); + } + } + peer.repositionSecurityWarning(); + } + } + + /** + * @param x,y,w,h coordinates of the untrusted window + */ + public void reposition(int x, int y, int w, int h) { + Point2D point = AWTAccessor.getWindowAccessor(). + calculateSecurityWarningPosition(ownerWindow, + x, y, w, h); + reshape((int)point.getX(), (int)point.getY(), getWidth(), getHeight()); } protected String getWMName() { @@ -49,33 +227,19 @@ getFont()); } void paint(Graphics g, int x, int y, int width, int height) { - String warningString = getWarningString(); - Rectangle bounds = getBounds(); - bounds.x = 0; - bounds.y = 0; - Rectangle updateRect = new Rectangle(x, y, width, height); - if (updateRect.intersects(bounds)) { - Rectangle updateArea = updateRect.intersection(bounds); - g.setClip(updateArea); - g.setColor(getBackground()); - g.fillRect(updateArea.x, updateArea.y, updateArea.width, updateArea.height); - g.setColor(getColor()); - g.setFont(getFont()); - FontMetrics fm = g.getFontMetrics(); - int warningWidth = fm.stringWidth(warningString); - int w_x = (bounds.width - warningWidth)/2; - int w_y = (bounds.height + fm.getMaxAscent() - fm.getMaxDescent())/2; - g.drawString(warningString, w_x, w_y); - g.drawLine(bounds.x, bounds.y+bounds.height-1, bounds.x+bounds.width-1, bounds.y+bounds.height-1); - } + g.drawImage(getSecurityIconInfo().getImage(), 0, 0, null); } String getWarningString() { return ownerWindow.getWarningString(); } + int getWidth() { + return getSecurityIconInfo().getWidth(); + } + int getHeight() { - return defaultHeight; // should implement depending on Font + return getSecurityIconInfo().getHeight(); } Color getBackground() { @@ -97,6 +261,7 @@ } } + @Override public void handleExposeEvent(XEvent xev) { super.handleExposeEvent(xev); @@ -105,18 +270,156 @@ final int y = xe.get_y(); final int width = xe.get_width(); final int height = xe.get_height(); - EventQueue.invokeLater(new Runnable() { - public void run() { - Graphics g = getGraphics(); - try { - paint(g, x, y, width, height); - } finally { - g.dispose(); - } - } - }); + SunToolkit.executeOnEventHandlerThread(target, + new Runnable() { + public void run() { + Graphics g = getGraphics(); + try { + paint(g, x, y, width, height); + } finally { + g.dispose(); + } + } + }); } + + @Override protected boolean isEventDisabled(XEvent e) { return true; } + + /** Send a synthetic UnmapNotify in order to withdraw the window. + */ + private void withdraw() { + XEvent req = new XEvent(); + try { + long root; + XToolkit.awtLock(); + try { + root = XlibWrapper.RootWindow(XToolkit.getDisplay(), getScreenNumber()); + } + finally { + XToolkit.awtUnlock(); + } + + req.set_type(XConstants.UnmapNotify); + + XUnmapEvent umev = req.get_xunmap(); + + umev.set_event(root); + umev.set_window(getWindow()); + umev.set_from_configure(false); + + XToolkit.awtLock(); + try { + XlibWrapper.XSendEvent(XToolkit.getDisplay(), + root, + false, + XConstants.SubstructureRedirectMask | XConstants.SubstructureNotifyMask, + req.pData); + } + finally { + XToolkit.awtUnlock(); + } + } finally { + req.dispose(); + } + } + + @Override + protected void stateChanged(long time, int oldState, int newState) { + if (newState == XUtilConstants.IconicState) { + super.xSetVisible(false); + withdraw(); + } + } + + @Override + protected void setMouseAbove(boolean above) { + super.setMouseAbove(above); + XWindowPeer p = ownerPeer.get(); + if (p != null) { + p.updateSecurityWarningVisibility(); + } + } + + @Override + protected void enterNotify(long window) { + super.enterNotify(window); + if (window == getWindow()) { + tooltip.enter(); + } + } + + @Override + protected void leaveNotify(long window) { + super.leaveNotify(window); + if (window == getWindow()) { + tooltip.exit(); + } + } + + @Override + public void xSetVisible(boolean visible) { + super.xSetVisible(visible); + + // The _NET_WM_STATE_SKIP_TASKBAR got reset upon hiding/showing, + // so we request it every time whenever we change the visibility. + requestNoTaskbar(); + } + + private final Runnable hidingTask = new Runnable() { + public void run() { + xSetVisible(false); + } + }; + + private final Runnable showingTask = new Runnable() { + public void run() { + new Thread() { + public void run() { + if (!isVisible()) { + xSetVisible(true); + updateWarningWindowBounds(); + } + repaint(); + if (currentIcon > 0) { + currentIcon--; + XToolkit.schedule(showingTask, showingDelay); + } + }}.start(); + } + }; + + public void setSecurityWarningVisible(boolean visible) { + setSecurityWarningVisible(visible, true); + } + + public void setSecurityWarningVisible(boolean visible, boolean doSchedule) { + if (visible) { + XToolkit.remove(hidingTask); + XToolkit.remove(showingTask); + if (isVisible()) { + currentIcon = 0; + } else { + currentIcon = 3; + } + if (doSchedule) { + XToolkit.schedule(showingTask, 1); + } else { + showingTask.run(); + } + } else { + XToolkit.remove(showingTask); + XToolkit.remove(hidingTask); + if (!isVisible()) { + return; + } + if (doSchedule) { + XToolkit.schedule(hidingTask, hidingDelay); + } else { + hidingTask.run(); + } + } + } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XWindow.java --- a/jdk/src/solaris/classes/sun/awt/X11/XWindow.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XWindow.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -68,6 +68,15 @@ int oldWidth = -1; int oldHeight = -1; + protected PropMwmHints mwm_hints; + protected static XAtom wm_protocols; + protected static XAtom wm_delete_window; + protected static XAtom wm_take_focus; + + private boolean stateChanged; // Indicates whether the value on savedState is valid + private int savedState; // Holds last known state of the top-level window + + XWindowAttributesData winAttr; protected X11GraphicsConfig graphicsConfig; protected AwtGraphicsConfigData graphicsConfigData; @@ -119,6 +128,9 @@ private native static void initIDs(); private static Field isPostedField; + private static Field rawCodeField; + private static Field primaryLevelUnicodeField; + private static Field extendedKeyCodeField; static { initIDs(); } @@ -218,6 +230,20 @@ } params.putIfNull(BACKING_STORE, XToolkit.getBackingStoreType()); + + XToolkit.awtLock(); + try { + if (wm_protocols == null) { + wm_protocols = XAtom.get("WM_PROTOCOLS"); + wm_delete_window = XAtom.get("WM_DELETE_WINDOW"); + wm_take_focus = XAtom.get("WM_TAKE_FOCUS"); + } + } + finally { + XToolkit.awtUnlock(); + } + winAttr = new XWindowAttributesData(); + savedState = XUtilConstants.WithdrawnState; } void postInit(XCreateWindowParams params) { @@ -832,12 +858,42 @@ public native boolean x11inputMethodLookupString(long event, long [] keysymArray); native boolean haveCurrentX11InputMethodInstance(); + private boolean mouseAboveMe; + + public boolean isMouseAbove() { + synchronized (getStateLock()) { + return mouseAboveMe; + } + } + protected void setMouseAbove(boolean above) { + synchronized (getStateLock()) { + mouseAboveMe = above; + } + } + + protected void enterNotify(long window) { + if (window == getWindow()) { + setMouseAbove(true); + } + } + protected void leaveNotify(long window) { + if (window == getWindow()) { + setMouseAbove(false); + } + } + public void handleXCrossingEvent(XEvent xev) { super.handleXCrossingEvent(xev); XCrossingEvent xce = xev.get_xcrossing(); if (eventLog.isLoggable(Level.FINEST)) eventLog.finest(xce.toString()); + if (xce.get_type() == XConstants.EnterNotify) { + enterNotify(xce.get_window()); + } else { // LeaveNotify: + leaveNotify(xce.get_window()); + } + // Skip event If it was caused by a grab // This is needed because on displays with focus-follows-mouse on MousePress X system generates // two XCrossing events with mode != NormalNotify. First of them notifies that the mouse has left @@ -984,7 +1040,7 @@ Parameter is a keysym basically from keysymdef.h XXX: how about vendor keys? Is there some with Unicode value and not in the list? */ - char keysymToUnicode( long keysym, int state ) { + int keysymToUnicode( long keysym, int state ) { return XKeysym.convertKeysym( keysym, state ); } int keyEventType2Id( int xEventType ) { @@ -994,6 +1050,13 @@ static private long xkeycodeToKeysym(XKeyEvent ev) { return XKeysym.getKeysym( ev ); } + private long xkeycodeToPrimaryKeysym(XKeyEvent ev) { + return XKeysym.xkeycode2primary_keysym( ev ); + } + static private int primaryUnicode2JavaKeycode(int uni) { + return (uni > 0? sun.awt.ExtendedKeyCodes.getExtendedKeyCodeForChar(uni) : 0); + //return (uni > 0? uni + 0x01000000 : 0); + } void logIncomingKeyEvent(XKeyEvent ev) { keyEventLog.fine("--XWindow.java:handleKeyEvent:"+ev); dumpKeysymArray(ev); @@ -1012,7 +1075,7 @@ // un-final it if you need to override it in a subclass. final void handleKeyPress(XKeyEvent ev) { long keysym[] = new long[2]; - char unicodeKey = 0; + int unicodeKey = 0; keysym[0] = XConstants.NoSymbol; if (keyEventLog.isLoggable(Level.FINE)) { @@ -1057,19 +1120,36 @@ if( jkc == null ) { jkc = new XKeysym.Keysym2JavaKeycode(java.awt.event.KeyEvent.VK_UNDEFINED, java.awt.event.KeyEvent.KEY_LOCATION_UNKNOWN); } + + // Take the first keysym from a keysym array associated with the XKeyevent + // and convert it to Unicode. Then, even if a Java keycode for the keystroke + // is undefined, we still have a guess of what has been engraved on a keytop. + int unicodeFromPrimaryKeysym = keysymToUnicode( xkeycodeToPrimaryKeysym(ev) ,0); + if (keyEventLog.isLoggable(Level.FINE)) { keyEventLog.fine(">>>Fire Event:"+ (ev.get_type() == XConstants.KeyPress ? "KEY_PRESSED; " : "KEY_RELEASED; ")+ "jkeycode:decimal="+jkc.getJavaKeycode()+ - ", hex=0x"+Integer.toHexString(jkc.getJavaKeycode())+"; " + ", hex=0x"+Integer.toHexString(jkc.getJavaKeycode())+"; "+ + " legacy jkeycode: decimal="+XKeysym.getLegacyJavaKeycodeOnly(ev)+ + ", hex=0x"+Integer.toHexString(XKeysym.getLegacyJavaKeycodeOnly(ev))+"; " ); } + + int jkeyToReturn = XKeysym.getLegacyJavaKeycodeOnly(ev); // someway backward compatible + int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ? + primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) : + jkc.getJavaKeycode(); postKeyEvent( java.awt.event.KeyEvent.KEY_PRESSED, ev.get_time(), - jkc.getJavaKeycode(), + jkeyToReturn, (unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey), jkc.getKeyLocation(), - ev.get_state(),ev.getPData(), XKeyEvent.getSize()); + ev.get_state(),ev.getPData(), XKeyEvent.getSize(), (long)(ev.get_keycode()), + unicodeFromPrimaryKeysym, + jkeyExtended); + + if( unicodeKey > 0 ) { keyEventLog.fine("fire _TYPED on "+unicodeKey); postKeyEvent( java.awt.event.KeyEvent.KEY_TYPED, @@ -1077,7 +1157,10 @@ java.awt.event.KeyEvent.VK_UNDEFINED, unicodeKey, java.awt.event.KeyEvent.KEY_LOCATION_UNKNOWN, - ev.get_state(),ev.getPData(), XKeyEvent.getSize()); + ev.get_state(),ev.getPData(), XKeyEvent.getSize(), (long)0, + unicodeFromPrimaryKeysym, + java.awt.event.KeyEvent.VK_UNDEFINED); + } @@ -1095,7 +1178,7 @@ // un-private it if you need to call it from elsewhere private void handleKeyRelease(XKeyEvent ev) { long keysym[] = new long[2]; - char unicodeKey = 0; + int unicodeKey = 0; keysym[0] = XConstants.NoSymbol; if (keyEventLog.isLoggable(Level.FINE)) { @@ -1113,7 +1196,9 @@ keyEventLog.fine(">>>Fire Event:"+ (ev.get_type() == XConstants.KeyPress ? "KEY_PRESSED; " : "KEY_RELEASED; ")+ "jkeycode:decimal="+jkc.getJavaKeycode()+ - ", hex=0x"+Integer.toHexString(jkc.getJavaKeycode())+"; " + ", hex=0x"+Integer.toHexString(jkc.getJavaKeycode())+"; "+ + " legacy jkeycode: decimal="+XKeysym.getLegacyJavaKeycodeOnly(ev)+ + ", hex=0x"+Integer.toHexString(XKeysym.getLegacyJavaKeycodeOnly(ev))+"; " ); } // We obtain keysym from IM and derive unicodeKey from it for KeyPress only. @@ -1124,13 +1209,74 @@ // That's why we use the same procedure as if there was no IM instance: do-it-yourself unicode. unicodeKey = keysymToUnicode( xkeycodeToKeysym(ev), ev.get_state() ); + // Take a first keysym from a keysym array associated with the XKeyevent + // and convert it to Unicode. Then, even if Java keycode for the keystroke + // is undefined, we still will have a guess of what was engraved on a keytop. + int unicodeFromPrimaryKeysym = keysymToUnicode( xkeycodeToPrimaryKeysym(ev) ,0); + + int jkeyToReturn = XKeysym.getLegacyJavaKeycodeOnly(ev); // someway backward compatible + int jkeyExtended = jkc.getJavaKeycode() == java.awt.event.KeyEvent.VK_UNDEFINED ? + primaryUnicode2JavaKeycode( unicodeFromPrimaryKeysym ) : + jkc.getJavaKeycode(); postKeyEvent( java.awt.event.KeyEvent.KEY_RELEASED, ev.get_time(), - jkc.getJavaKeycode(), + jkeyToReturn, (unicodeKey == 0 ? java.awt.event.KeyEvent.CHAR_UNDEFINED : unicodeKey), jkc.getKeyLocation(), - ev.get_state(),ev.getPData(), XKeyEvent.getSize()); + ev.get_state(),ev.getPData(), XKeyEvent.getSize(), (long)(ev.get_keycode()), + unicodeFromPrimaryKeysym, + jkeyExtended); + + + } + + /* + * XmNiconic and Map/UnmapNotify (that XmNiconic relies on) are + * unreliable, since mapping changes can happen for a virtual desktop + * switch or MacOS style shading that became quite popular under X as + * well. Yes, it probably should not be this way, as it violates + * ICCCM, but reality is that quite a lot of window managers abuse + * mapping state. + */ + int getWMState() { + if (stateChanged) { + stateChanged = false; + WindowPropertyGetter getter = + new WindowPropertyGetter(window, XWM.XA_WM_STATE, 0, 1, false, + XWM.XA_WM_STATE); + try { + int status = getter.execute(); + if (status != XConstants.Success || getter.getData() == 0) { + return savedState = XUtilConstants.WithdrawnState; + } + if (getter.getActualType() != XWM.XA_WM_STATE.getAtom() && getter.getActualFormat() != 32) { + return savedState = XUtilConstants.WithdrawnState; + } + savedState = (int)Native.getCard32(getter.getData()); + } finally { + getter.dispose(); + } + } + return savedState; + } + + /** + * Override this methods to get notifications when top-level window state changes. The state is + * meant in terms of ICCCM: WithdrawnState, IconicState, NormalState + */ + protected void stateChanged(long time, int oldState, int newState) { + } + + @Override + public void handlePropertyNotify(XEvent xev) { + super.handlePropertyNotify(xev); + XPropertyEvent ev = xev.get_xproperty(); + if (ev.get_atom() == XWM.XA_WM_STATE.getAtom()) { + // State has changed, invalidate saved value + stateChanged = true; + stateChanged(ev.get_time(), savedState, getWMState()); + } } public void reshape(Rectangle bounds) { @@ -1277,20 +1423,77 @@ } } - public void postKeyEvent(int id, long when, int keyCode, char keyChar, - int keyLocation, int state, long event, int eventSize) + public void postKeyEvent(int id, long when, int keyCode, int keyChar, + int keyLocation, int state, long event, int eventSize, long rawCode, + int unicodeFromPrimaryKeysym, int extendedKeyCode) + { long jWhen = XToolkit.nowMillisUTC_offset(when); int modifiers = getModifiers(state, 0, keyCode); + if (rawCodeField == null) { + rawCodeField = XToolkit.getField(KeyEvent.class, "rawCode"); + } + if (primaryLevelUnicodeField == null) { + primaryLevelUnicodeField = XToolkit.getField(KeyEvent.class, "primaryLevelUnicode"); + } + if (extendedKeyCodeField == null) { + extendedKeyCodeField = XToolkit.getField(KeyEvent.class, "extendedKeyCode"); + } + KeyEvent ke = new KeyEvent((Component)getEventSource(), id, jWhen, - modifiers, keyCode, keyChar, keyLocation); + modifiers, keyCode, (char)keyChar, keyLocation); if (event != 0) { byte[] data = Native.toBytes(event, eventSize); setBData(ke, data); } + try { + rawCodeField.set(ke, rawCode); + primaryLevelUnicodeField.set(ke, (long)unicodeFromPrimaryKeysym); + extendedKeyCodeField.set(ke, (long)extendedKeyCode); + } catch (IllegalArgumentException e) { + assert(false); + } catch (IllegalAccessException e) { + assert(false); + } postEventToEventQueue(ke); } static native int getAWTKeyCodeForKeySym(int keysym); static native int getKeySymForAWTKeyCode(int keycode); + + /* These two methods are actually applicable to toplevel windows only. + * However, the functionality is required by both the XWindowPeer and + * XWarningWindow, both of which have the XWindow as a common ancestor. + * See XWM.setMotifDecor() for details. + */ + public PropMwmHints getMWMHints() { + if (mwm_hints == null) { + mwm_hints = new PropMwmHints(); + if (!XWM.XA_MWM_HINTS.getAtomData(getWindow(), mwm_hints.pData, MWMConstants.PROP_MWM_HINTS_ELEMENTS)) { + mwm_hints.zero(); + } + } + return mwm_hints; + } + + public void setMWMHints(PropMwmHints hints) { + mwm_hints = hints; + if (hints != null) { + XWM.XA_MWM_HINTS.setAtomData(getWindow(), mwm_hints.pData, MWMConstants.PROP_MWM_HINTS_ELEMENTS); + } + } + + protected final void initWMProtocols() { + wm_protocols.setAtomListProperty(this, getWMProtocols()); + } + + /** + * Returns list of protocols which should be installed on this window. + * Descendants can override this method to add class-specific protocols + */ + protected XAtomList getWMProtocols() { + // No protocols on simple window + return new XAtomList(); + } + } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java --- a/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XWindowPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,6 +30,8 @@ import java.awt.event.FocusEvent; import java.awt.event.WindowEvent; +import java.awt.image.BufferedImage; + import java.awt.peer.ComponentPeer; import java.awt.peer.WindowPeer; @@ -42,13 +44,17 @@ import java.util.logging.Level; import java.util.logging.Logger; +import sun.awt.AWTAccessor; import sun.awt.ComponentAccessor; import sun.awt.WindowAccessor; +import sun.awt.AWTAccessor; import sun.awt.DisplayChangedListener; import sun.awt.SunToolkit; import sun.awt.X11GraphicsDevice; import sun.awt.X11GraphicsEnvironment; +import sun.java2d.pipe.Region; + class XWindowPeer extends XPanelPeer implements WindowPeer, DisplayChangedListener { @@ -61,16 +67,11 @@ // should be synchronized on awtLock private static Set<XWindowPeer> windows = new HashSet<XWindowPeer>(); - static XAtom wm_protocols; - static XAtom wm_delete_window; - static XAtom wm_take_focus; - XWindowAttributesData winAttr; private boolean cachedFocusableWindow; XWarningWindow warningWindow; private boolean alwaysOnTop; - PropMwmHints mwm_hints; private boolean locationByPlatform; Dialog modalBlocker; @@ -87,8 +88,6 @@ private boolean grab = false; // Whether to do a grab during showing private boolean isMapped = false; // Is this window mapped or not - private boolean stateChanged; // Indicates whether the value on savedState is valid - private int savedState; // Holds last known state of the top-level window private boolean mustControlStackPosition = false; // Am override-redirect not on top private XEventDispatcher rootPropertyEventDispatcher = null; @@ -135,25 +134,18 @@ super.preInit(params); params.putIfNull(BIT_GRAVITY, Integer.valueOf(XConstants.NorthWestGravity)); - savedState = XUtilConstants.WithdrawnState; + long eventMask = 0; + if (params.containsKey(EVENT_MASK)) { + eventMask = ((Long)params.get(EVENT_MASK)); + } + eventMask |= XConstants.VisibilityChangeMask; + params.put(EVENT_MASK, eventMask); + XA_NET_WM_STATE = XAtom.get("_NET_WM_STATE"); - winAttr = new XWindowAttributesData(); params.put(OVERRIDE_REDIRECT, Boolean.valueOf(isOverrideRedirect())); - SunToolkit.awtLock(); - try { - windows.add(this); - if (wm_protocols == null) { - wm_protocols = XAtom.get("WM_PROTOCOLS"); - wm_delete_window = XAtom.get("WM_DELETE_WINDOW"); - wm_take_focus = XAtom.get("WM_TAKE_FOCUS"); - } - } - finally { - SunToolkit.awtUnlock(); - } cachedFocusableWindow = isFocusableWindow(); Font f = target.getFont(); @@ -186,20 +178,6 @@ params.put(BOUNDS, constrainBounds(bounds.x, bounds.y, bounds.width, bounds.height)); } - private void initWMProtocols() { - wm_protocols.setAtomListProperty(this, getWMProtocols()); - } - - /** - * Returns list of protocols which should be installed on this window. - * Descendants can override this method to add class-specific protocols - */ - protected XAtomList getWMProtocols() { - // No protocols on simple window - return new XAtomList(); - } - - protected String getWMName() { String name = target.getName(); if (name == null || name.trim().equals("")) { @@ -253,13 +231,17 @@ // accessSystemTray permission allows to display TrayIcon, TrayIcon tooltip // and TrayIcon balloon windows without a warning window. if (!WindowAccessor.isTrayIconWindow((Window)target)) { - warningWindow = new XWarningWindow((Window)target, getWindow()); + warningWindow = new XWarningWindow((Window)target, getWindow(), this); } } setSaveUnder(true); updateIconImages(); + + updateShape(); + updateOpacity(); + // no need in updateOpaque() as it is no-op } public void updateIconImages() { @@ -417,6 +399,22 @@ return defaultIconInfo; } + private void updateShape() { + // Shape shape = ((Window)target).getShape(); + Shape shape = AWTAccessor.getWindowAccessor().getShape((Window)target); + if (shape != null) { + applyShape(Region.getInstance(shape, null)); + } + } + + private void updateOpacity() { + // float opacity = ((Window)target).getOpacity(); + float opacity = AWTAccessor.getWindowAccessor().getOpacity((Window)target); + if (opacity < 1.0f) { + setOpacity(opacity); + } + } + public void updateMinimumSize() { //This function only saves minimumSize value in XWindowPeer //Setting WMSizeHints is implemented in XDecoratedPeer @@ -513,10 +511,15 @@ } - if (!bounds.getSize().equals(oldBounds.getSize())) { + boolean isResized = !bounds.getSize().equals(oldBounds.getSize()); + boolean isMoved = !bounds.getLocation().equals(oldBounds.getLocation()); + if (isMoved || isResized) { + repositionSecurityWarning(); + } + if (isResized) { postEventToEventQueue(new ComponentEvent(getEventSource(), ComponentEvent.COMPONENT_RESIZED)); } - if (!bounds.getLocation().equals(oldBounds.getLocation())) { + if (isMoved) { postEventToEventQueue(new ComponentEvent(getEventSource(), ComponentEvent.COMPONENT_MOVED)); } } finally { @@ -539,7 +542,7 @@ } public Insets getInsets() { - return new Insets(getWarningWindowHeight(), 0, 0, 0); + return new Insets(0, 0, 0, 0); } // NOTE: This method may be called by privileged threads. @@ -686,6 +689,7 @@ int curScreenNum = ((X11GraphicsDevice)getGraphicsConfiguration().getDevice()).getScreen(); int newScreenNum = 0; GraphicsDevice gds[] = XToolkit.localEnv.getScreenDevices(); + GraphicsConfiguration newGC = null; Rectangle screenBounds; for (int i = 0; i < gds.length; i++) { @@ -701,11 +705,13 @@ if (intAmt == area) { // Completely on this screen - done! newScreenNum = i; + newGC = gds[i].getDefaultConfiguration(); break; } if (intAmt > largestAmt) { largestAmt = intAmt; newScreenNum = i; + newGC = gds[i].getDefaultConfiguration(); } } } @@ -713,28 +719,20 @@ if (log.isLoggable(Level.FINEST)) { log.finest("XWindowPeer: Moved to a new screen"); } - draggedToNewScreen(newScreenNum); + executeDisplayChangedOnEDT(newGC); } } - /* Xinerama - * called to update our GC when dragged onto another screen - */ - public void draggedToNewScreen(int screenNum) { - executeDisplayChangedOnEDT(screenNum); - } - /** * Helper method that executes the displayChanged(screen) method on * the event dispatch thread. This method is used in the Xinerama case * and after display mode change events. */ - private void executeDisplayChangedOnEDT(final int screenNum) { + private void executeDisplayChangedOnEDT(final GraphicsConfiguration gc) { Runnable dc = new Runnable() { public void run() { - // Updates this window's GC and notifies all the children. - // See XPanelPeer/XCanvasPeer.displayChanged(int) for details. - displayChanged(screenNum); + AWTAccessor.getComponentAccessor(). + setGraphicsConfiguration((Component)target, gc); } }; SunToolkit.executeOnEventHandlerThread((Component)target, dc); @@ -745,9 +743,7 @@ * X11GraphicsDevice when the display mode has been changed. */ public void displayChanged() { - GraphicsConfiguration gc = getGraphicsConfiguration(); - int curScreenNum = ((X11GraphicsDevice)gc.getDevice()).getScreen(); - executeDisplayChangedOnEDT(curScreenNum); + executeDisplayChangedOnEDT(getGraphicsConfiguration()); } /** @@ -761,6 +757,7 @@ * Overridden to check if we need to update our GraphicsDevice/Config * Added for 4934052. */ + @Override public void handleConfigureNotifyEvent(XEvent xev) { // TODO: We create an XConfigureEvent every time we override // handleConfigureNotify() - too many! @@ -774,8 +771,7 @@ // there could be a race condition in which a ComponentListener could // see the old screen. super.handleConfigureNotifyEvent(xev); - // for 5085647: no applet warning window visible - updateChildrenSizes(); + repositionSecurityWarning(); } final void requestXFocus(long time) { @@ -1053,6 +1049,9 @@ } updateFocusability(); promoteDefaultPosition(); + if (!vis && warningWindow != null) { + warningWindow.setSecurityWarningVisible(false, false); + } super.setVisible(vis); if (!vis && !isWithdrawn()) { // ICCCM, 4.1.4. Changing Window State: @@ -1082,6 +1081,7 @@ if (isOverrideRedirect() && vis) { updateChildrenSizes(); } + repositionSecurityWarning(); } protected void suppressWmTakeFocus(boolean doSuppress) { @@ -1099,21 +1099,64 @@ return 0; } - // The height of area used to display Applet's warning about securit - int getWarningWindowHeight() { + // Called when shell changes its size and requires children windows + // to update their sizes appropriately + void updateChildrenSizes() { + } + + public void repositionSecurityWarning() { + // NOTE: On KWin if the window/border snapping option is enabled, + // the Java window may be swinging while it's being moved. + // This doesn't make the application unusable though looks quite ugly. + // Probobly we need to find some hint to assign to our Security + // Warning window in order to exclude it from the snapping option. + // We are not currently aware of existance of such a property. if (warningWindow != null) { - return warningWindow.getHeight(); - } else { - return 0; + // We can't use the coordinates stored in the XBaseWindow since + // they are zeros for decorated frames. + int x = ComponentAccessor.getX(target); + int y = ComponentAccessor.getY(target); + int width = ComponentAccessor.getWidth(target); + int height = ComponentAccessor.getHeight(target); + warningWindow.reposition(x, y, width, height); } } - // Called when shell changes its size and requires children windows - // to update their sizes appropriately - void updateChildrenSizes() { - if (warningWindow != null) { - warningWindow.reshape(0, getMenuBarHeight(), getSize().width, warningWindow.getHeight()); + @Override + protected void setMouseAbove(boolean above) { + super.setMouseAbove(above); + updateSecurityWarningVisibility(); + } + + public void updateSecurityWarningVisibility() { + if (warningWindow == null) { + return; + } + + boolean show = false; + + int state = getWMState(); + + if (!isVisible()) { + return; // The warning window should already be hidden. } + + // getWMState() always returns 0 (Withdrawn) for simple windows. Hence + // we ignore the state for such windows. + if (isVisible() && (state == XUtilConstants.NormalState || isSimpleWindow())) { + if (XKeyboardFocusManagerPeer.getCurrentNativeFocusedWindow() == + getTarget()) + { + show = true; + } + + if (isMouseAbove() || warningWindow.isMouseAbove()) + { + show = true; + } + } + + warningWindow.setSecurityWarningVisible(show); } boolean isOverrideRedirect() { @@ -1165,16 +1208,7 @@ // if (ve.get_state() == XlibWrapper.VisibilityUnobscured) { // // raiseInputMethodWindow // } - } - - public void handlePropertyNotify(XEvent xev) { - super.handlePropertyNotify(xev); - XPropertyEvent ev = xev.get_xproperty(); - if (ev.get_atom() == XWM.XA_WM_STATE.getAtom()) { - // State has changed, invalidate saved value - stateChanged = true; - stateChanged(ev.get_time(), savedState, getWMState()); - } + repositionSecurityWarning(); } void handleRootPropertyNotify(XEvent xev) { @@ -1275,6 +1309,7 @@ * Override this methods to get notifications when top-level window state changes. The state is * meant in terms of ICCCM: WithdrawnState, IconicState, NormalState */ + @Override protected void stateChanged(long time, int oldState, int newState) { // Fix for 6401700, 6412803 // If this window is modal blocked, it is put into the transient_for @@ -1288,38 +1323,8 @@ for (ToplevelStateListener topLevelListenerTmp : toplevelStateListeners) { topLevelListenerTmp.stateChangedICCCM(oldState, newState); } - } - - /* - * XmNiconic and Map/UnmapNotify (that XmNiconic relies on) are - * unreliable, since mapping changes can happen for a virtual desktop - * switch or MacOS style shading that became quite popular under X as - * well. Yes, it probably should not be this way, as it violates - * ICCCM, but reality is that quite a lot of window managers abuse - * mapping state. - */ - int getWMState() { - if (stateChanged) { - stateChanged = false; - WindowPropertyGetter getter = - new WindowPropertyGetter(window, XWM.XA_WM_STATE, 0, 1, false, - XWM.XA_WM_STATE); - try { - int status = getter.execute(); - if (status != XConstants.Success || getter.getData() == 0) { - return savedState = XUtilConstants.WithdrawnState; - } - - if (getter.getActualType() != XWM.XA_WM_STATE.getAtom() && getter.getActualFormat() != 32) { - return savedState = XUtilConstants.WithdrawnState; - } - savedState = (int)Native.getCard32(getter.getData()); - } finally { - getter.dispose(); - } - } - return savedState; + updateSecurityWarningVisibility(); } boolean isWithdrawn() { @@ -2064,4 +2069,44 @@ } super.handleButtonPressRelease(xev); } + + public void print(Graphics g) { + // We assume we print the whole frame, + // so we expect no clip was set previously + Shape shape = AWTAccessor.getWindowAccessor().getShape((Window)target); + if (shape != null) { + g.setClip(shape); + } + super.print(g); + } + + @Override + public void setOpacity(float opacity) { + final long maxOpacity = 0xffffffffl; + long iOpacity = (long)(opacity * maxOpacity); + if (iOpacity < 0) { + iOpacity = 0; + } + if (iOpacity > maxOpacity) { + iOpacity = maxOpacity; + } + + XAtom netWmWindowOpacityAtom = XAtom.get("_NET_WM_WINDOW_OPACITY"); + + if (iOpacity == maxOpacity) { + netWmWindowOpacityAtom.DeleteProperty(getWindow()); + } else { + netWmWindowOpacityAtom.setCard32Property(getWindow(), iOpacity); + } + } + + @Override + public void setOpaque(boolean isOpaque) { + // no-op + } + + @Override + public void updateWindow(BufferedImage backBuffer) { + // no-op + } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/XlibWrapper.java --- a/jdk/src/solaris/classes/sun/awt/X11/XlibWrapper.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/XlibWrapper.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -156,6 +156,8 @@ static native void XLowerWindow(long display, long window); static native void XRestackWindows(long display, long windows, int length); + static native void XConfigureWindow(long display, long window, + long value_mask, long values); static native void XSetInputFocus(long display, long window); static native void XSetInputFocus2(long display, long window, long time); static native long XGetInputFocus(long display); @@ -490,6 +492,21 @@ static native int XKeysymToKeycode(long display, long keysym); + // xkb-related + static native int XkbGetEffectiveGroup(long display); + static native long XkbKeycodeToKeysym(long display, int keycode, int group, int level); + static native void XkbSelectEvents(long display, long device, long bits_to_change, long values_for_bits); + static native void XkbSelectEventDetails(long display, long device, long event_type, + long bits_to_change, long values_for_bits); + static native boolean XkbQueryExtension(long display, long opcode_rtrn, long event_rtrn, + long error_rtrn, long major_in_out, long minor_in_out); + static native boolean XkbLibraryVersion(long lib_major_in_out, long lib_minor_in_out); + static native long XkbGetMap(long display, long which, long device_spec); + static native long XkbGetUpdatedMap(long display, long which, long xkb); + static native void XkbFreeKeyboard(long xkb, long which, boolean free_all); + static native boolean XkbTranslateKeyCode(long xkb, int keycode, long mods, long mods_rtrn, long keysym_rtrn); + + static native void XConvertCase(long keysym, long keysym_lowercase, long keysym_uppercase); @@ -533,6 +550,13 @@ static native void SetRectangularShape(long display, long window, int lox, int loy, int hix, int hiy, sun.java2d.pipe.Region region); + /** Each int in the bitmap array is one pixel with a 32-bit color: + * R, G, B, and Alpha. + */ + static native void SetBitmapShape(long display, long window, + int width, int height, int[] bitmap); + + static native void SetZOrder(long display, long window, long above); /* Global memory area used for X lib parameter passing */ @@ -608,6 +632,15 @@ } return buf.toString(); } + static String getEventToString( int type ) { + if( (type >= 0) && (type < eventToString.length)) { + return eventToString[type]; + }else if( type == XToolkit.getXKBBaseEventCode() ) { + //XXX TODO various xkb types + return "XkbEvent"; + } + return eventToString[0]; + } private static boolean getBuildInternal() { String javaVersion = XToolkit.getSystemProperty("java.version"); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/generator/WrapperGenerator.java --- a/jdk/src/solaris/classes/sun/awt/X11/generator/WrapperGenerator.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/generator/WrapperGenerator.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -859,14 +859,14 @@ pw.println("\n\tlong pData;"); pw.println("\n\tpublic long getPData() { return pData; }"); - pw.println("\n\n\t" + stp.getJavaClassName() + "(long addr) {"); + pw.println("\n\n\tpublic " + stp.getJavaClassName() + "(long addr) {"); if (generateLog) { pw.println("\t\tlog.finest(\"Creating\");"); } pw.println("\t\tpData=addr;"); pw.println("\t\tshould_free_memory = false;"); pw.println("\t}"); - pw.println("\n\n\t" + stp.getJavaClassName() + "() {"); + pw.println("\n\n\tpublic " + stp.getJavaClassName() + "() {"); if (generateLog) { pw.println("\t\tlog.finest(\"Creating\");"); } @@ -1138,6 +1138,7 @@ pw.println("/* This file is an automatically generated file, please do not edit this file, modify the XlibParser.java file instead !*/\n" ); pw.println("#include <X11/Xlib.h>\n#include <X11/Xutil.h>\n#include <X11/Xos.h>\n#include <X11/Xatom.h>\n#include <stdio.h>\n"); pw.println("#include <X11/extensions/Xdbe.h>"); + pw.println("#include <X11/XKBlib.h>"); pw.println("#include \"awt_p.h\""); pw.println("#include \"color.h\""); pw.println("#include \"colordata.h\""); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/generator/sizes.64-solaris-i386 --- a/jdk/src/solaris/classes/sun/awt/X11/generator/sizes.64-solaris-i386 Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/generator/sizes.64-solaris-i386 Wed Jul 05 16:51:11 2017 +0200 @@ -16,10 +16,38 @@ XIMStringConversionCallbackStruct.factor 10 XIMStringConversionCallbackStruct.text 16 XIMStringConversionCallbackStruct 24 +XkbNewKeyboardNotifyEvent.type 0 +XkbNewKeyboardNotifyEvent.serial 8 +XkbNewKeyboardNotifyEvent.send_event 16 +XkbNewKeyboardNotifyEvent.display 24 +XkbNewKeyboardNotifyEvent.time 32 +XkbNewKeyboardNotifyEvent.xkb_type 40 +XkbNewKeyboardNotifyEvent.device 44 +XkbNewKeyboardNotifyEvent.old_device 48 +XkbNewKeyboardNotifyEvent.min_key_code 52 +XkbNewKeyboardNotifyEvent.max_key_code 56 +XkbNewKeyboardNotifyEvent.old_min_key_code 60 +XkbNewKeyboardNotifyEvent.old_max_key_code 64 +XkbNewKeyboardNotifyEvent.changed 68 +XkbNewKeyboardNotifyEvent.req_major 72 +XkbNewKeyboardNotifyEvent.req_minor 73 +XkbNewKeyboardNotifyEvent 80 XTimeCoord.time 0 XTimeCoord.x 8 XTimeCoord.y 10 XTimeCoord 16 +XkbCompatMapNotifyEvent.type 0 +XkbCompatMapNotifyEvent.serial 8 +XkbCompatMapNotifyEvent.send_event 16 +XkbCompatMapNotifyEvent.display 24 +XkbCompatMapNotifyEvent.time 32 +XkbCompatMapNotifyEvent.xkb_type 40 +XkbCompatMapNotifyEvent.device 44 +XkbCompatMapNotifyEvent.changed_groups 48 +XkbCompatMapNotifyEvent.first_si 52 +XkbCompatMapNotifyEvent.num_si 56 +XkbCompatMapNotifyEvent.num_total_si 60 +XkbCompatMapNotifyEvent 64 XIMStatusDrawCallbackStruct.type 0 XIMStatusDrawCallbackStruct.data 8 XIMStatusDrawCallbackStruct 16 @@ -289,6 +317,22 @@ XVisualInfo.colormap_size 56 XVisualInfo.bits_per_rgb 60 XVisualInfo 64 +XkbControlsNotifyEvent.type 0 +XkbControlsNotifyEvent.serial 8 +XkbControlsNotifyEvent.send_event 16 +XkbControlsNotifyEvent.display 24 +XkbControlsNotifyEvent.time 32 +XkbControlsNotifyEvent.xkb_type 40 +XkbControlsNotifyEvent.device 44 +XkbControlsNotifyEvent.changed_ctrls 48 +XkbControlsNotifyEvent.enabled_ctrls 52 +XkbControlsNotifyEvent.enabled_ctrl_changes 56 +XkbControlsNotifyEvent.num_groups 60 +XkbControlsNotifyEvent.keycode 64 +XkbControlsNotifyEvent.event_type 65 +XkbControlsNotifyEvent.req_major 66 +XkbControlsNotifyEvent.req_minor 67 +XkbControlsNotifyEvent 72 PropMwmHints.flags 0 PropMwmHints.functions 8 PropMwmHints.decorations 16 @@ -310,8 +354,26 @@ XAnyEvent.display 24 XAnyEvent.window 32 XAnyEvent 40 +XkbIndicatorNotifyEvent.type 0 +XkbIndicatorNotifyEvent.serial 8 +XkbIndicatorNotifyEvent.send_event 16 +XkbIndicatorNotifyEvent.display 24 +XkbIndicatorNotifyEvent.time 32 +XkbIndicatorNotifyEvent.xkb_type 40 +XkbIndicatorNotifyEvent.device 44 +XkbIndicatorNotifyEvent.changed 48 +XkbIndicatorNotifyEvent.state 52 +XkbIndicatorNotifyEvent 56 XIMPreeditStateNotifyCallbackStruct.state 0 XIMPreeditStateNotifyCallbackStruct 8 +XkbAnyEvent.type 0 +XkbAnyEvent.serial 8 +XkbAnyEvent.send_event 16 +XkbAnyEvent.display 24 +XkbAnyEvent.time 32 +XkbAnyEvent.xkb_type 40 +XkbAnyEvent.device 44 +XkbAnyEvent 48 XMotionEvent.type 0 XMotionEvent.serial 8 XMotionEvent.send_event 16 @@ -334,6 +396,23 @@ XIMStyles.count_styles 0 XIMStyles.supported_styles 8 XIMStyles 16 +XkbExtensionDeviceNotifyEvent.type 0 +XkbExtensionDeviceNotifyEvent.serial 8 +XkbExtensionDeviceNotifyEvent.send_event 16 +XkbExtensionDeviceNotifyEvent.display 24 +XkbExtensionDeviceNotifyEvent.time 32 +XkbExtensionDeviceNotifyEvent.xkb_type 40 +XkbExtensionDeviceNotifyEvent.device 44 +XkbExtensionDeviceNotifyEvent.reason 48 +XkbExtensionDeviceNotifyEvent.supported 52 +XkbExtensionDeviceNotifyEvent.unsupported 56 +XkbExtensionDeviceNotifyEvent.first_btn 60 +XkbExtensionDeviceNotifyEvent.num_btns 64 +XkbExtensionDeviceNotifyEvent.leds_defined 68 +XkbExtensionDeviceNotifyEvent.led_state 72 +XkbExtensionDeviceNotifyEvent.led_class 76 +XkbExtensionDeviceNotifyEvent.led_id 80 +XkbExtensionDeviceNotifyEvent 88 XwcTextItem.chars 0 XwcTextItem.nchars 8 XwcTextItem.delta 12 @@ -419,6 +498,20 @@ XKeyEvent.keycode 84 XKeyEvent.same_screen 88 XKeyEvent 96 +XkbActionMessageEvent.type 0 +XkbActionMessageEvent.serial 8 +XkbActionMessageEvent.send_event 16 +XkbActionMessageEvent.display 24 +XkbActionMessageEvent.time 32 +XkbActionMessageEvent.xkb_type 40 +XkbActionMessageEvent.device 44 +XkbActionMessageEvent.keycode 48 +XkbActionMessageEvent.press 52 +XkbActionMessageEvent.key_event_follows 56 +XkbActionMessageEvent.group 60 +XkbActionMessageEvent.mods 64 +XkbActionMessageEvent.message 68 +XkbActionMessageEvent 80 XdbeSwapInfo.swap_window 0 XdbeSwapInfo.swap_action 8 XdbeSwapInfo 16 @@ -458,6 +551,18 @@ XOMOrientation.num_orientation 0 XOMOrientation.orientation 8 XOMOrientation 16 +XkbAccessXNotifyEvent.type 0 +XkbAccessXNotifyEvent.serial 8 +XkbAccessXNotifyEvent.send_event 16 +XkbAccessXNotifyEvent.display 24 +XkbAccessXNotifyEvent.time 32 +XkbAccessXNotifyEvent.xkb_type 40 +XkbAccessXNotifyEvent.device 44 +XkbAccessXNotifyEvent.detail 48 +XkbAccessXNotifyEvent.keycode 52 +XkbAccessXNotifyEvent.sk_delay 56 +XkbAccessXNotifyEvent.debounce_delay 60 +XkbAccessXNotifyEvent 64 XWindowAttributes.x 0 XWindowAttributes.y 4 XWindowAttributes.width 8 @@ -528,6 +633,33 @@ awtImageData.clrdata 16 awtImageData.convert 48 awtImageData 560 +XkbStateNotifyEvent.type 0 +XkbStateNotifyEvent.serial 8 +XkbStateNotifyEvent.send_event 16 +XkbStateNotifyEvent.display 24 +XkbStateNotifyEvent.time 32 +XkbStateNotifyEvent.xkb_type 40 +XkbStateNotifyEvent.device 44 +XkbStateNotifyEvent.changed 48 +XkbStateNotifyEvent.group 52 +XkbStateNotifyEvent.base_group 56 +XkbStateNotifyEvent.latched_group 60 +XkbStateNotifyEvent.locked_group 64 +XkbStateNotifyEvent.mods 68 +XkbStateNotifyEvent.base_mods 72 +XkbStateNotifyEvent.latched_mods 76 +XkbStateNotifyEvent.locked_mods 80 +XkbStateNotifyEvent.compat_state 84 +XkbStateNotifyEvent.grab_mods 88 +XkbStateNotifyEvent.compat_grab_mods 89 +XkbStateNotifyEvent.lookup_mods 90 +XkbStateNotifyEvent.compat_lookup_mods 91 +XkbStateNotifyEvent.ptr_buttons 92 +XkbStateNotifyEvent.keycode 96 +XkbStateNotifyEvent.event_type 97 +XkbStateNotifyEvent.req_major 98 +XkbStateNotifyEvent.req_minor 99 +XkbStateNotifyEvent 104 XExposeEvent.type 0 XExposeEvent.serial 8 XExposeEvent.send_event 16 @@ -539,6 +671,33 @@ XExposeEvent.height 52 XExposeEvent.count 56 XExposeEvent 64 +XkbMapNotifyEvent.type 0 +XkbMapNotifyEvent.serial 8 +XkbMapNotifyEvent.send_event 16 +XkbMapNotifyEvent.display 24 +XkbMapNotifyEvent.time 32 +XkbMapNotifyEvent.xkb_type 40 +XkbMapNotifyEvent.device 44 +XkbMapNotifyEvent.changed 48 +XkbMapNotifyEvent.flags 52 +XkbMapNotifyEvent.first_type 56 +XkbMapNotifyEvent.num_types 60 +XkbMapNotifyEvent.min_key_code 64 +XkbMapNotifyEvent.max_key_code 65 +XkbMapNotifyEvent.first_key_sym 66 +XkbMapNotifyEvent.first_key_act 67 +XkbMapNotifyEvent.first_key_behavior 68 +XkbMapNotifyEvent.first_key_explicit 69 +XkbMapNotifyEvent.first_modmap_key 70 +XkbMapNotifyEvent.first_vmodmap_key 71 +XkbMapNotifyEvent.num_key_syms 72 +XkbMapNotifyEvent.num_key_acts 76 +XkbMapNotifyEvent.num_key_behaviors 80 +XkbMapNotifyEvent.num_key_explicit 84 +XkbMapNotifyEvent.num_modmap_keys 88 +XkbMapNotifyEvent.num_vmodmap_keys 92 +XkbMapNotifyEvent.vmods 96 +XkbMapNotifyEvent 104 XGCValues.function 0 XGCValues.plane_mask 8 XGCValues.foreground 16 @@ -583,6 +742,22 @@ XMapEvent.window 40 XMapEvent.override_redirect 48 XMapEvent 56 +XkbBellNotifyEvent.type 0 +XkbBellNotifyEvent.serial 8 +XkbBellNotifyEvent.send_event 16 +XkbBellNotifyEvent.display 24 +XkbBellNotifyEvent.time 32 +XkbBellNotifyEvent.xkb_type 40 +XkbBellNotifyEvent.device 44 +XkbBellNotifyEvent.percent 48 +XkbBellNotifyEvent.pitch 52 +XkbBellNotifyEvent.duration 56 +XkbBellNotifyEvent.bell_class 60 +XkbBellNotifyEvent.bell_id 64 +XkbBellNotifyEvent.name 72 +XkbBellNotifyEvent.window 80 +XkbBellNotifyEvent.event_only 88 +XkbBellNotifyEvent 96 XIMStringConversionText.length 0 XIMStringConversionText.feedback 8 XIMStringConversionText.encoding_is_wchar 16 @@ -596,6 +771,21 @@ XKeyboardState.global_auto_repeat 24 XKeyboardState.auto_repeats 28 XKeyboardState 64 +XkbEvent.type 0 +XkbEvent.any 0 +XkbEvent.new_kbd 0 +XkbEvent.map 0 +XkbEvent.state 0 +XkbEvent.ctrls 0 +XkbEvent.indicators 0 +XkbEvent.names 0 +XkbEvent.compat 0 +XkbEvent.bell 0 +XkbEvent.message 0 +XkbEvent.accessx 0 +XkbEvent.device 0 +XkbEvent.core 0 +XkbEvent 192 XPoint.x 0 XPoint.y 2 XPoint 4 @@ -633,6 +823,26 @@ XRectangle.width 4 XRectangle.height 6 XRectangle 8 +XkbNamesNotifyEvent.type 0 +XkbNamesNotifyEvent.serial 8 +XkbNamesNotifyEvent.send_event 16 +XkbNamesNotifyEvent.display 24 +XkbNamesNotifyEvent.time 32 +XkbNamesNotifyEvent.xkb_type 40 +XkbNamesNotifyEvent.device 44 +XkbNamesNotifyEvent.changed 48 +XkbNamesNotifyEvent.first_type 52 +XkbNamesNotifyEvent.num_types 56 +XkbNamesNotifyEvent.first_lvl 60 +XkbNamesNotifyEvent.num_lvls 64 +XkbNamesNotifyEvent.num_aliases 68 +XkbNamesNotifyEvent.num_radio_groups 72 +XkbNamesNotifyEvent.changed_vmods 76 +XkbNamesNotifyEvent.changed_groups 80 +XkbNamesNotifyEvent.changed_indicators 84 +XkbNamesNotifyEvent.first_key 88 +XkbNamesNotifyEvent.num_keys 92 +XkbNamesNotifyEvent 96 XCreateWindowEvent.type 0 XCreateWindowEvent.serial 8 XCreateWindowEvent.send_event 16 @@ -774,7 +984,8 @@ AwtGraphicsConfigData.pixelStride 136 AwtGraphicsConfigData.color_data 144 AwtGraphicsConfigData.glxInfo 152 -AwtGraphicsConfigData 160 +AwtGraphicsConfigData.isTranslucencySupported 160 +AwtGraphicsConfigData 168 XColor.pixel 0 XColor.red 8 XColor.green 10 diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/generator/xlibtypes.txt --- a/jdk/src/solaris/classes/sun/awt/X11/generator/xlibtypes.txt Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/generator/xlibtypes.txt Wed Jul 05 16:51:11 2017 +0200 @@ -119,7 +119,7 @@ length short feedback pointer encoding_is_wchar Bool - string pointer + string pointer XKeymapEvent type int serial long @@ -574,7 +574,7 @@ f.get_pixel pointer f.put_pixel pointer f.sub_image pointer - f.add_pixel pointer + f.add_pixel pointer XIMValuesList count_values short supported_values pointer @@ -728,7 +728,7 @@ awt_icmLUT pointer int awt_icmLUT2Colors pointer byte img_grays pointer byte - img_clr_tbl pointer byte + img_clr_tbl pointer byte img_oda_red pointer byte img_oda_green pointer byte img_oda_blue pointer byte @@ -750,6 +750,7 @@ pixelStride int color_data pointer ColorData glxInfo pointer + isTranslucencySupported int AwtScreenData numConfigs int @@ -797,3 +798,227 @@ xerror struct XErrorEvent xkeymap struct XKeymapEvent pad array long 24 + +XkbAnyEvent + type int + serial ulong + send_event Bool + display long + time ulong + xkb_type int + device int + +XkbNewKeyboardNotifyEvent + type int + serial ulong + send_event Bool + display long + time ulong + xkb_type int + device int + old_device int + min_key_code int + max_key_code int + old_min_key_code int + old_max_key_code int + changed int + req_major byte + req_minor byte + +XkbMapNotifyEvent + type int + serial ulong + send_event Bool + display long + time ulong + xkb_type int + device int + changed int + flags int + first_type int + num_types int + min_key_code int + max_key_code int + first_key_sym int + first_key_act int + first_key_behavior int + first_key_explicit int + first_modmap_key int + first_vmodmap_key int + num_key_syms int + num_key_acts int + num_key_behaviors int + num_key_explicit int + num_modmap_keys int + num_vmodmap_keys int + vmods int + +XkbStateNotifyEvent + type int + serial ulong + send_event Bool + display long + time ulong + xkb_type int + device int + changed int + group int + base_group int + latched_group int + locked_group int + mods int + base_mods int + latched_mods int + locked_mods int + compat_state int + grab_mods byte + compat_grab_mods byte + lookup_mods byte + compat_lookup_mods byte + ptr_buttons int + keycode int + event_type byte + req_major byte + req_minor byte + +XkbControlsNotifyEvent + type int + serial ulong + send_event Bool + display long + time ulong + xkb_type int + device int + changed_ctrls int + enabled_ctrls int + enabled_ctrl_changes int + num_groups int + keycode int + event_type byte + req_major byte + req_minor byte + +XkbIndicatorNotifyEvent + type int + serial ulong + send_event Bool + display long + time ulong + xkb_type int + device int + changed int + state int + +XkbNamesNotifyEvent + type int + serial ulong + send_event Bool + display long + time ulong + xkb_type int + device int + changed int + first_type int + num_types int + first_lvl int + num_lvls int + num_aliases int + num_radio_groups int + changed_vmods int + changed_groups int + changed_indicators int + first_key int + num_keys int + + +XkbCompatMapNotifyEvent + type int + serial ulong + send_event Bool + display long + time ulong + xkb_type int + device int + changed_groups int + first_si int + num_si int + num_total_si int + +XkbBellNotifyEvent + type int + serial ulong + send_event Bool + display long + time ulong + xkb_type int + device int + percent int + pitch int + duration int + bell_class int + bell_id int + name Atom + window long + event_only Bool + +XkbActionMessageEvent + type int + serial ulong + send_event Bool + display long + time ulong + xkb_type int + device int + keycode int + press Bool + key_event_follows Bool + group int + mods int + message array byte 7 //XkbActionMessageLength+1 + +XkbAccessXNotifyEvent + type int + serial ulong + send_event Bool + display long + time ulong + xkb_type int + device int + detail int + keycode int + sk_delay int + debounce_delay int + +XkbExtensionDeviceNotifyEvent + type int + serial ulong + send_event Bool + display long + time ulong + xkb_type int + device int + reason int + supported int + unsupported int + first_btn int + num_btns int + leds_defined int + led_state int + led_class int + led_id int + +XkbEvent + type int + any struct XkbAnyEvent + new_kbd struct XkbNewKeyboardNotifyEvent + map struct XkbMapNotifyEvent + state struct XkbStateNotifyEvent + ctrls struct XkbControlsNotifyEvent + indicators struct XkbIndicatorNotifyEvent + names struct XkbNamesNotifyEvent + compat struct XkbCompatMapNotifyEvent + bell struct XkbBellNotifyEvent + message struct XkbActionMessageEvent + accessx struct XkbAccessXNotifyEvent + device struct XkbExtensionDeviceNotifyEvent + core struct XEvent diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h --- a/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,7 +39,7 @@ */ tojava /* -tojava * Copyright 2005-2008 Sun Microsystems, Inc. All Rights Reserved. +tojava * Copyright 2005-2009 Sun Microsystems, Inc. All Rights Reserved. tojava * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. tojava * tojava * This code is free software; you can redistribute it and/or modify it @@ -127,14 +127,47 @@ tojava Character ch = keysym2UCSHash.get(ks); tojava return ch == null ? (char)0 : ch.charValue(); tojava } +tojava static long xkeycode2keysym_noxkb(XKeyEvent ev, int ndx) { +tojava XToolkit.awtLock(); +tojava try { +tojava return XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx); +tojava } finally { +tojava XToolkit.awtUnlock(); +tojava } +tojava } +tojava static long xkeycode2keysym_xkb(XKeyEvent ev, int ndx) { +tojava XToolkit.awtLock(); +tojava try { +tojava int mods = ev.get_state(); +tojava if ((ndx == 0) && ((mods & XConstants.ShiftMask) != 0)) { +tojava // I don't know all possible meanings of 'ndx' in case of XKB +tojava // and don't want to speculate. But this particular case +tojava // clearly means that caller needs a so called primary keysym. +tojava mods ^= XConstants.ShiftMask; +tojava } +tojava XlibWrapper.XkbTranslateKeyCode(XToolkit.getXKBKbdDesc(), ev.get_keycode(), +tojava mods, XlibWrapper.iarg1, XlibWrapper.larg3); +tojava //XXX unconsumed modifiers? +tojava return Native.getLong(XlibWrapper.larg3); +tojava } finally { +tojava XToolkit.awtUnlock(); +tojava } +tojava } tojava static long xkeycode2keysym(XKeyEvent ev, int ndx) { tojava XToolkit.awtLock(); tojava try { -tojava return XlibWrapper.XKeycodeToKeysym(ev.get_display(), ev.get_keycode(), ndx ); +tojava if (XToolkit.canUseXKBCalls()) { +tojava return xkeycode2keysym_xkb(ev, ndx); +tojava }else{ +tojava return xkeycode2keysym_noxkb(ev, ndx); +tojava } tojava } finally { tojava XToolkit.awtUnlock(); tojava } tojava } +tojava static long xkeycode2primary_keysym(XKeyEvent ev) { +tojava return xkeycode2keysym(ev, 0); +tojava } tojava public static boolean isKPEvent( XKeyEvent ev ) tojava { tojava // Xsun without XKB uses keysymarray[2] keysym to determine if it is KP event. @@ -236,6 +269,27 @@ tojava Keysym2JavaKeycode jkc = getJavaKeycode( ev ); tojava return jkc == null ? java.awt.event.KeyEvent.VK_UNDEFINED : jkc.getJavaKeycode(); tojava } +tojava /** +tojava * Return an integer java keycode apprx as it was before extending keycodes range. +tojava * This call would ignore for instance XKB and process whatever is on the bottom +tojava * of keysym stack. Result will not depend on actual locale, will differ between +tojava * dual/multiple keyboard setup systems (e.g. English+Russian vs French+Russian) +tojava * but will be someway compatible with old releases. +tojava */ +tojava static int getLegacyJavaKeycodeOnly( XKeyEvent ev ) { +tojava long keysym = XConstants.NoSymbol; +tojava int ndx = 0; +tojava if( (ev.get_state() & XToolkit.numLockMask) != 0 && +tojava isKPEvent(ev)) { +tojava keysym = getKeypadKeysym( ev ); +tojava } else { +tojava // we only need primary-layer keysym to derive a java keycode. +tojava ndx = 0; +tojava keysym = xkeycode2keysym_noxkb(ev, ndx); +tojava } +tojava Keysym2JavaKeycode jkc = keysym2JavaKeycodeHash.get( keysym ); +tojava return jkc == null ? java.awt.event.KeyEvent.VK_UNDEFINED : jkc.getJavaKeycode(); +tojava } tojava static long javaKeycode2Keysym( int jkey ) { tojava Long ks = javaKeycode2KeysymHash.get( jkey ); tojava return (ks == null ? 0 : ks.longValue()); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/security-icon-bw16.png Binary file jdk/src/solaris/classes/sun/awt/X11/security-icon-bw16.png has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/security-icon-bw24.png Binary file jdk/src/solaris/classes/sun/awt/X11/security-icon-bw24.png has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/security-icon-bw32.png Binary file jdk/src/solaris/classes/sun/awt/X11/security-icon-bw32.png has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/security-icon-bw48.png Binary file jdk/src/solaris/classes/sun/awt/X11/security-icon-bw48.png has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/security-icon-interim16.png Binary file jdk/src/solaris/classes/sun/awt/X11/security-icon-interim16.png has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/security-icon-interim24.png Binary file jdk/src/solaris/classes/sun/awt/X11/security-icon-interim24.png has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/security-icon-interim32.png Binary file jdk/src/solaris/classes/sun/awt/X11/security-icon-interim32.png has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/security-icon-interim48.png Binary file jdk/src/solaris/classes/sun/awt/X11/security-icon-interim48.png has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/security-icon-yellow16.png Binary file jdk/src/solaris/classes/sun/awt/X11/security-icon-yellow16.png has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/security-icon-yellow24.png Binary file jdk/src/solaris/classes/sun/awt/X11/security-icon-yellow24.png has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/security-icon-yellow32.png Binary file jdk/src/solaris/classes/sun/awt/X11/security-icon-yellow32.png has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11/security-icon-yellow48.png Binary file jdk/src/solaris/classes/sun/awt/X11/security-icon-yellow48.png has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java --- a/jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/X11GraphicsConfig.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -450,4 +450,13 @@ return 0x00; // UNDEFINED } } + + /* + @Override + */ + public boolean isTranslucencyCapable() { + return isTranslucencyCapable(getAData()); + } + + private native boolean isTranslucencyCapable(long x11ConfigData); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/awt/motif/MToolkit.java --- a/jdk/src/solaris/classes/sun/awt/motif/MToolkit.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/awt/motif/MToolkit.java Wed Jul 05 16:51:11 2017 +0200 @@ -336,6 +336,10 @@ return null; } + public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager) { + return null; + } + //public MEmbeddedFramePeer createEmbeddedFrame(MEmbeddedFrame target) //{ //MEmbeddedFramePeer peer = new MEmbeddedFramePeer(target); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/net/NetHooks.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/solaris/classes/sun/net/NetHooks.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,122 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +package sun.net; + +import java.net.InetAddress; +import java.io.FileDescriptor; +import java.io.IOException; +import java.security.AccessController; +import java.security.PrivilegedAction; +import sun.security.action.GetPropertyAction; + +/** + * Defines static methods to be invoked prior to binding or connecting TCP sockets. + */ + +public final class NetHooks { + + /** + * A provider with hooks to allow sockets be converted prior to binding or + * connecting a TCP socket. + * + * <p> Concrete implementations of this class should define a zero-argument + * constructor and implement the abstract methods specified below. + */ + public static abstract class Provider { + /** + * Initializes a new instance of this class. + */ + protected Provider() {} + + /** + * Invoked prior to binding a TCP socket. + */ + public abstract void implBeforeTcpBind(FileDescriptor fdObj, + InetAddress address, + int port) + throws IOException; + + /** + * Invoked prior to connecting an unbound TCP socket. + */ + public abstract void implBeforeTcpConnect(FileDescriptor fdObj, + InetAddress address, + int port) + throws IOException; + } + + /** + * For now, we load the SDP provider on Solaris. In the future this may + * be changed to use the ServiceLoader facility to allow the deployment of + * other providers. + */ + private static Provider loadProvider(final String cn) { + return AccessController + .doPrivileged(new PrivilegedAction<Provider>() { + @Override public Provider run() { + Class<Provider> c; + try { + c = (Class<Provider>)Class.forName(cn, true, null); + } catch (ClassNotFoundException x) { + throw new AssertionError(x); + } + try { + return c.newInstance(); + } catch (IllegalAccessException x) { + throw new AssertionError(x); + } catch (InstantiationException x) { + throw new AssertionError(x); + } + }}); + } + private static final Provider provider = AccessController + .doPrivileged(new GetPropertyAction("os.name")).equals("SunOS") ? + loadProvider("sun.net.spi.SdpProvider") : null; + + /** + * Invoke prior to binding a TCP socket. + */ + public static void beforeTcpBind(FileDescriptor fdObj, + InetAddress address, + int port) + throws IOException + { + if (provider != null) + provider.implBeforeTcpBind(fdObj, address, port); + } + + /** + * Invoke prior to connecting an unbound TCP socket. + */ + public static void beforeTcpConnect(FileDescriptor fdObj, + InetAddress address, + int port) + throws IOException + { + if (provider != null) + provider.implBeforeTcpConnect(fdObj, address, port); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/net/spi/SdpProvider.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/solaris/classes/sun/net/spi/SdpProvider.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,339 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +package sun.net.spi; + +import sun.net.NetHooks; +import java.net.InetAddress; +import java.net.Inet4Address; +import java.net.UnknownHostException; +import java.util.*; +import java.io.File; +import java.io.FileDescriptor; +import java.io.IOException; +import java.io.PrintStream; + +import sun.misc.SharedSecrets; +import sun.misc.JavaIOFileDescriptorAccess; + +/** + * A NetHooks provider that converts sockets from the TCP to SDP protocol prior + * to binding or connecting. + */ + +public class SdpProvider extends NetHooks.Provider { + private static final JavaIOFileDescriptorAccess fdAccess = + SharedSecrets.getJavaIOFileDescriptorAccess(); + + // maximum port + private static final int MAX_PORT = 65535; + + // indicates if SDP is enabled and the rules for when the protocol is used + private final boolean enabled; + private final List<Rule> rules; + + // logging for debug purposes + private PrintStream log; + + public SdpProvider() { + // if this property is not defined then there is nothing to do. + String file = System.getProperty("com.sun.sdp.conf"); + if (file == null) { + this.enabled = false; + this.rules = null; + return; + } + + // load configuration file + List<Rule> list = null; + if (file != null) { + try { + list = loadRulesFromFile(file); + } catch (IOException e) { + fail("Error reading %s: %s", file, e.getMessage()); + } + } + + // check if debugging is enabled + PrintStream out = null; + String logfile = System.getProperty("com.sun.sdp.debug"); + if (logfile != null) { + out = System.out; + if (logfile.length() > 0) { + try { + out = new PrintStream(logfile); + } catch (IOException ignore) { } + } + } + + this.enabled = !list.isEmpty(); + this.rules = list; + this.log = out; + } + + // supported actions + private static enum Action { + BIND, + CONNECT; + } + + // a rule for matching a bind or connect request + private static interface Rule { + boolean match(Action action, InetAddress address, int port); + } + + // rule to match port[-end] + private static class PortRangeRule implements Rule { + private final Action action; + private final int portStart; + private final int portEnd; + PortRangeRule(Action action, int portStart, int portEnd) { + this.action = action; + this.portStart = portStart; + this.portEnd = portEnd; + } + Action action() { + return action; + } + @Override + public boolean match(Action action, InetAddress address, int port) { + return (action == this.action && + port >= this.portStart && + port <= this.portEnd); + } + } + + // rule to match address[/prefix] port[-end] + private static class AddressPortRangeRule extends PortRangeRule { + private final byte[] addressAsBytes; + private final int prefixByteCount; + private final byte mask; + AddressPortRangeRule(Action action, InetAddress address, + int prefix, int port, int end) + { + super(action, port, end); + this.addressAsBytes = address.getAddress(); + this.prefixByteCount = prefix >> 3; + this.mask = (byte)(0xff << (8 - (prefix % 8))); + } + @Override + public boolean match(Action action, InetAddress address, int port) { + if (action != action()) + return false; + byte[] candidate = address.getAddress(); + // same address type? + if (candidate.length != addressAsBytes.length) + return false; + // check bytes + for (int i=0; i<prefixByteCount; i++) { + if (candidate[i] != addressAsBytes[i]) + return false; + } + // check remaining bits + if ((prefixByteCount < addressAsBytes.length) && + ((candidate[prefixByteCount] & mask) != + (addressAsBytes[prefixByteCount] & mask))) + return false; + return super.match(action, address, port); + } + } + + // parses port:[-end] + private static int[] parsePortRange(String s) { + int pos = s.indexOf('-'); + try { + int[] result = new int[2]; + if (pos < 0) { + boolean all = s.equals("*"); + result[0] = all ? 0 : Integer.parseInt(s); + result[1] = all ? MAX_PORT : result[0]; + } else { + String low = s.substring(0, pos); + if (low.length() == 0) low = "*"; + String high = s.substring(pos+1); + if (high.length() == 0) high = "*"; + result[0] = low.equals("*") ? 0 : Integer.parseInt(low); + result[1] = high.equals("*") ? MAX_PORT : Integer.parseInt(high); + } + return result; + } catch (NumberFormatException e) { + return new int[0]; + } + } + + private static void fail(String msg, Object... args) { + Formatter f = new Formatter(); + f.format(msg, args); + throw new RuntimeException(f.out().toString()); + } + + // loads rules from the given file + // Each non-blank/non-comment line must have the format: + // ("bind" | "connect") 1*LWSP-char (hostname | ipaddress["/" prefix]) + // 1*LWSP-char ("*" | port) [ "-" ("*" | port) ] + private static List<Rule> loadRulesFromFile(String file) + throws IOException + { + Scanner scanner = new Scanner(new File(file)); + try { + List<Rule> result = new ArrayList<Rule>(); + while (scanner.hasNextLine()) { + String line = scanner.nextLine().trim(); + + // skip blank lines and comments + if (line.length() == 0 || line.charAt(0) == '#') + continue; + + // must have 3 fields + String[] s = line.split("\\s+"); + if (s.length != 3) { + fail("Malformed line '%s'", line); + continue; + } + + // first field is the action ("bind" or "connect") + Action action = null; + for (Action a: Action.values()) { + if (s[0].equalsIgnoreCase(a.name())) { + action = a; + break; + } + } + if (action == null) { + fail("Action '%s' not recognized", s[0]); + continue; + } + + // * port[-end] + int[] ports = parsePortRange(s[2]); + if (ports.length == 0) { + fail("Malformed port range '%s'", s[2]); + continue; + } + + // match all addresses + if (s[1].equals("*")) { + result.add(new PortRangeRule(action, ports[0], ports[1])); + continue; + } + + // hostname | ipaddress[/prefix] + int pos = s[1].indexOf('/'); + try { + if (pos < 0) { + // hostname or ipaddress (no prefix) + InetAddress[] addresses = InetAddress.getAllByName(s[1]); + for (InetAddress address: addresses) { + int prefix = + (address instanceof Inet4Address) ? 32 : 128; + result.add(new AddressPortRangeRule(action, address, + prefix, ports[0], ports[1])); + } + } else { + // ipaddress/prefix + InetAddress address = InetAddress + .getByName(s[1].substring(0, pos)); + int prefix = -1; + try { + prefix = Integer.parseInt(s[1].substring(pos+1)); + if (address instanceof Inet4Address) { + // must be 1-31 + if (prefix < 0 || prefix > 32) prefix = -1; + } else { + // must be 1-128 + if (prefix < 0 || prefix > 128) prefix = -1; + } + } catch (NumberFormatException e) { + } + + if (prefix > 0) { + result.add(new AddressPortRangeRule(action, + address, prefix, ports[0], ports[1])); + } else { + fail("Malformed prefix '%s'", s[1]); + continue; + } + } + } catch (UnknownHostException uhe) { + fail("Unknown host or malformed IP address '%s'", s[1]); + continue; + } + } + return result; + } finally { + scanner.close(); + } + } + + // converts unbound TCP socket to a SDP socket if it matches the rules + private void convertTcpToSdpIfMatch(FileDescriptor fdObj, + Action action, + InetAddress address, + int port) + throws IOException + { + boolean matched = false; + for (Rule rule: rules) { + if (rule.match(action, address, port)) { + int fd = fdAccess.get(fdObj); + convert(fd); + matched = true; + break; + } + } + if (log != null) { + String addr = (address instanceof Inet4Address) ? + address.getHostAddress() : "[" + address.getHostAddress() + "]"; + if (matched) { + log.format("%s to %s:%d (socket converted to SDP protocol)\n", action, addr, port); + } else { + log.format("%s to %s:%d (no match)\n", action, addr, port); + } + } + } + + @Override + public void implBeforeTcpBind(FileDescriptor fdObj, + InetAddress address, + int port) + throws IOException + { + if (enabled) + convertTcpToSdpIfMatch(fdObj, Action.BIND, address, port); + } + + @Override + public void implBeforeTcpConnect(FileDescriptor fdObj, + InetAddress address, + int port) + throws IOException + { + if (enabled) + convertTcpToSdpIfMatch(fdObj, Action.CONNECT, address, port); + } + + // -- native methods -- + private static native void convert(int fd) throws IOException; +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java --- a/jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java Wed Jul 05 16:51:11 2017 +0200 @@ -76,20 +76,19 @@ // Base address of the native pollArray private long pollArrayAddress; + // Array of pollfd structs used for driver updates + private AllocatedNativeObject updatePollArray; + // Maximum number of POLL_FD structs to update at once - private int MAX_UPDATE_SIZE = 10000; + private int MAX_UPDATE_SIZE = Math.min(OPEN_MAX, 10000); DevPollArrayWrapper() { int allocationSize = NUM_POLLFDS * SIZE_POLLFD; pollArray = new AllocatedNativeObject(allocationSize, true); pollArrayAddress = pollArray.address(); + allocationSize = MAX_UPDATE_SIZE * SIZE_POLLFD; + updatePollArray = new AllocatedNativeObject(allocationSize, true); wfd = init(); - - for (int i=0; i<NUM_POLLFDS; i++) { - putDescriptor(i, 0); - putEventOps(i, 0); - putReventOps(i, 0); - } } // Machinery for remembering fd registration changes @@ -129,21 +128,11 @@ register(wfd, fd0, POLLIN); } - void putEventOps(int i, int event) { - int offset = SIZE_POLLFD * i + EVENT_OFFSET; - pollArray.putShort(offset, (short)event); - } - void putReventOps(int i, int revent) { int offset = SIZE_POLLFD * i + REVENT_OFFSET; pollArray.putShort(offset, (short)revent); } - void putDescriptor(int i, int fd) { - int offset = SIZE_POLLFD * i + FD_OFFSET; - pollArray.putInt(offset, fd); - } - int getEventOps(int i) { int offset = SIZE_POLLFD * i + EVENT_OFFSET; return pollArray.getShort(offset); @@ -174,9 +163,10 @@ void closeDevPollFD() throws IOException { FileDispatcherImpl.closeIntFD(wfd); pollArray.free(); + updatePollArray.free(); } - int poll(long timeout) { + int poll(long timeout) throws IOException { updateRegistrations(); updated = poll0(pollArrayAddress, NUM_POLLFDS, timeout, wfd); for (int i=0; i<updated; i++) { @@ -189,60 +179,34 @@ return updated; } - void updateRegistrations() { - // take snapshot of the updateList size to see if there are - // any registrations to update - int updateSize; + void updateRegistrations() throws IOException { + // Populate pollfd array with updated masks synchronized (updateList) { - updateSize = updateList.size(); - } - if (updateSize > 0) { - // Construct a pollfd array with updated masks; we may overallocate - // by some amount because if the events are already POLLREMOVE - // then the second pollfd of that pair will not be needed. The - // number of entries is limited to a reasonable number to avoid - // allocating a lot of memory. - int maxUpdates = Math.min(updateSize * 2, MAX_UPDATE_SIZE); - int allocationSize = maxUpdates * SIZE_POLLFD; - AllocatedNativeObject updatePollArray = - new AllocatedNativeObject(allocationSize, true); + while (updateList.size() > 0) { + // We have to insert a dummy node in between each + // real update to use POLLREMOVE on the fd first because + // otherwise the changes are simply OR'd together + int index = 0; + Updator u = null; + while ((u = updateList.poll()) != null) { + // First add pollfd struct to clear out this fd + putPollFD(updatePollArray, index, u.fd, POLLREMOVE); + index++; + // Now add pollfd to update this fd, if necessary + if (u.mask != POLLREMOVE) { + putPollFD(updatePollArray, index, u.fd, (short)u.mask); + index++; + } - try { - synchronized (updateList) { - while (updateList.size() > 0) { - // We have to insert a dummy node in between each - // real update to use POLLREMOVE on the fd first because - // otherwise the changes are simply OR'd together - int index = 0; - Updator u = null; - while ((u = updateList.poll()) != null) { - // First add pollfd struct to clear out this fd - putPollFD(updatePollArray, index, u.fd, POLLREMOVE); - index++; - // Now add pollfd to update this fd, if necessary - if (u.mask != POLLREMOVE) { - putPollFD(updatePollArray, index, u.fd, - (short)u.mask); - index++; - } - - // Check against the max allocation size; these are - // all we will process. Valid index ranges from 0 to - // (maxUpdates - 1) and we can use up to 2 per loop - if (index > maxUpdates - 2) - break; - } - // Register the changes with /dev/poll - registerMultiple(wfd, updatePollArray.address(), index); - } + // Check against the max update size; these are + // all we will process. Valid index ranges from 0 to + // (MAX_UPDATE_SIZE - 1) and we can use up to 2 per loop + if (index > MAX_UPDATE_SIZE - 2) + break; } - } finally { - // Free the native array - updatePollArray.free(); - // BUG: If an exception was thrown then the selector now believes - // that the last set of changes was updated but it probably - // was not. This should not be a likely occurrence. - } + // Register the changes with /dev/poll + registerMultiple(wfd, updatePollArray.address(), index); + } } } @@ -275,7 +239,8 @@ private native int init(); private native void register(int wfd, int fd, int mask); - private native void registerMultiple(int wfd, long address, int len); + private native void registerMultiple(int wfd, long address, int len) + throws IOException; private native int poll0(long pollAddress, int numfds, long timeout, int wfd); private static native void interrupt(int fd); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java --- a/jdk/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/nio/ch/EPollArrayWrapper.java Wed Jul 05 16:51:11 2017 +0200 @@ -78,8 +78,8 @@ // Base address of the native pollArray private final long pollArrayAddress; - // Set of "idle" file descriptors - private final HashSet<Integer> idleSet; + // Set of "idle" channels + private final HashSet<SelChImpl> idleSet; EPollArrayWrapper() { // creates the epoll file descriptor @@ -96,19 +96,22 @@ } // create idle set - idleSet = new HashSet<Integer>(); + idleSet = new HashSet<SelChImpl>(); } // Used to update file description registrations private static class Updator { + SelChImpl channel; int opcode; - int fd; int events; - Updator(int opcode, int fd, int events) { + Updator(SelChImpl channel, int opcode, int events) { + this.channel = channel; this.opcode = opcode; - this.fd = fd; this.events = events; } + Updator(SelChImpl channel, int opcode) { + this(channel, opcode, 0); + } } private LinkedList<Updator> updateList = new LinkedList<Updator>(); @@ -163,60 +166,54 @@ } /** - * Update the events for a given file descriptor. + * Update the events for a given channel. */ - void setInterest(int fd, int mask) { + void setInterest(SelChImpl channel, int mask) { synchronized (updateList) { - - // if the interest events are 0 then add to idle set, and delete - // from epoll if registered (or pending) - if (mask == 0) { - if (idleSet.add(fd)) { - updateList.add(new Updator(EPOLL_CTL_DEL, fd, 0)); - } - return; - } - - // if file descriptor is idle then add to epoll - if (!idleSet.isEmpty() && idleSet.remove(fd)) { - updateList.add(new Updator(EPOLL_CTL_ADD, fd, mask)); - return; - } - // if the previous pending operation is to add this file descriptor // to epoll then update its event set if (updateList.size() > 0) { Updator last = updateList.getLast(); - if (last.fd == fd && last.opcode == EPOLL_CTL_ADD) { + if (last.channel == channel && last.opcode == EPOLL_CTL_ADD) { last.events = mask; return; } } // update existing registration - updateList.add(new Updator(EPOLL_CTL_MOD, fd, mask)); + updateList.add(new Updator(channel, EPOLL_CTL_MOD, mask)); + } + } + + /** + * Add a channel's file descriptor to epoll + */ + void add(SelChImpl channel) { + synchronized (updateList) { + updateList.add(new Updator(channel, EPOLL_CTL_ADD)); } } /** - * Add a new file descriptor to epoll + * Remove a channel's file descriptor from epoll */ - void add(int fd) { + void release(SelChImpl channel) { synchronized (updateList) { - updateList.add(new Updator(EPOLL_CTL_ADD, fd, 0)); - } - } + // flush any pending updates + int i = 0; + while (i < updateList.size()) { + if (updateList.get(i).channel == channel) { + updateList.remove(i); + } else { + i++; + } + } - /** - * Remove a file descriptor from epoll - */ - void release(int fd) { - synchronized (updateList) { - // if file descriptor is idle then remove from idle set, otherwise - // delete from epoll - if (!idleSet.remove(fd)) { - updateList.add(new Updator(EPOLL_CTL_DEL, fd, 0)); - } + // remove from the idle set (if present) + idleSet.remove(channel); + + // remove from epoll (if registered) + epollCtl(epfd, EPOLL_CTL_DEL, channel.getFDVal(), 0); } } @@ -248,7 +245,26 @@ synchronized (updateList) { Updator u = null; while ((u = updateList.poll()) != null) { - epollCtl(epfd, u.opcode, u.fd, u.events); + SelChImpl ch = u.channel; + if (!ch.isOpen()) + continue; + + // if the events are 0 then file descriptor is put into "idle + // set" to prevent it being polled + if (u.events == 0) { + boolean added = idleSet.add(u.channel); + // if added to idle set then remove from epoll if registered + if (added && (u.opcode == EPOLL_CTL_MOD)) + epollCtl(epfd, EPOLL_CTL_DEL, ch.getFDVal(), 0); + } else { + // events are specified. If file descriptor was in idle set + // it must be re-registered (by converting opcode to ADD) + boolean idle = false; + if (!idleSet.isEmpty()) + idle = idleSet.remove(u.channel); + int opcode = (idle) ? EPOLL_CTL_ADD : u.opcode; + epollCtl(epfd, opcode, ch.getFDVal(), u.events); + } } } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/nio/ch/EPollSelectorImpl.java --- a/jdk/src/solaris/classes/sun/nio/ch/EPollSelectorImpl.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/nio/ch/EPollSelectorImpl.java Wed Jul 05 16:51:11 2017 +0200 @@ -139,7 +139,6 @@ FileDispatcherImpl.closeIntFD(fd0); FileDispatcherImpl.closeIntFD(fd1); - pollWrapper.release(fd0); pollWrapper.closeEPollFD(); // it is possible selectedKeys = null; @@ -162,17 +161,18 @@ protected void implRegister(SelectionKeyImpl ski) { if (closed) throw new ClosedSelectorException(); - int fd = IOUtil.fdVal(ski.channel.getFD()); - fdToKey.put(Integer.valueOf(fd), ski); - pollWrapper.add(fd); + SelChImpl ch = ski.channel; + fdToKey.put(Integer.valueOf(ch.getFDVal()), ski); + pollWrapper.add(ch); keys.add(ski); } protected void implDereg(SelectionKeyImpl ski) throws IOException { assert (ski.getIndex() >= 0); - int fd = ski.channel.getFDVal(); + SelChImpl ch = ski.channel; + int fd = ch.getFDVal(); fdToKey.remove(Integer.valueOf(fd)); - pollWrapper.release(fd); + pollWrapper.release(ch); ski.setIndex(-1); keys.remove(ski); selectedKeys.remove(ski); @@ -185,8 +185,7 @@ void putEventOps(SelectionKeyImpl sk, int ops) { if (closed) throw new ClosedSelectorException(); - int fd = IOUtil.fdVal(sk.channel.getFD()); - pollWrapper.setInterest(fd, ops); + pollWrapper.setInterest(sk.channel, ops); } public Selector wakeup() { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java --- a/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/classes/sun/nio/ch/UnixAsynchronousSocketChannelImpl.java Wed Jul 05 16:51:11 2017 +0200 @@ -32,6 +32,7 @@ import java.io.IOException; import java.io.FileDescriptor; import java.security.AccessController; +import sun.net.NetHooks; import sun.security.action.GetPropertyAction; /** @@ -305,6 +306,7 @@ sm.checkConnect(isa.getAddress().getHostAddress(), isa.getPort()); // check and set state + boolean notifyBeforeTcpConnect; synchronized (stateLock) { if (state == ST_CONNECTED) throw new AlreadyConnectedException(); @@ -312,12 +314,16 @@ throw new ConnectionPendingException(); state = ST_PENDING; pendingRemote = remote; + notifyBeforeTcpConnect = (localAddress == null); } AbstractFuture<Void,A> result = null; Throwable e = null; try { begin(); + // notify hook if unbound + if (notifyBeforeTcpConnect) + NetHooks.beforeTcpConnect(fd, isa.getAddress(), isa.getPort()); int n = Net.connect(fd, isa.getAddress(), isa.getPort()); if (n == IOStatus.UNAVAILABLE) { // connection could not be established immediately diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/lib/sdp/sdp.conf.template --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/solaris/lib/sdp/sdp.conf.template Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,30 @@ +# +# Configuration file to enable InfiniBand Sockets Direct Protocol. +# +# Each line that does not start with a comment (#) is a rule to indicate when +# the SDP transport protocol should be used. The format of a rule is as follows: +# ("bind"|"connect") 1*LWSP-char (hostname|ipaddress["/"prefix]) 1*LWSP-char ("*"|port)["-"("*"|port)] +# +# A "bind" rule indicates that the SDP protocol transport should be used when +# a TCP socket binds to an address/port that matches the rule. A "connect" rule +# indicates that the SDP protocol transport should be used when an unbound +# TCP socket attempts to connect to an address/port that matches the rule. +# Addresses may be specified as hostnames or literal Internet Protocol (IP) +# addresses. When a literal IP address is used then a prefix length may be used +# to indicate the number of bits for matching (useful when a block of addresses +# or subnet is allocated to the InfiniBand fabric). + +# Use SDP for all sockets that bind to specific local addresses +#bind 192.168.1.1 * +#bind fe80::21b:24ff:fe3d:7896 * + +# Use SDP for all sockets that bind to the wildcard address in a port range +#bind 0.0.0.0 5000-5999 +#bind ::0 5000-5999 + +# Use SDP when connecting to all application services on 192.168.1.* +#connect 192.168.1.0/24 1024-* + +# Use SDP when connecting to the http server or MySQL database on hpccluster. +#connect hpccluster.foo.com 80 +#connect hpccluster.foo.com 3306 diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/native/sun/awt/awt_Component.h --- a/jdk/src/solaris/native/sun/awt/awt_Component.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/native/sun/awt/awt_Component.h Wed Jul 05 16:51:11 2017 +0200 @@ -41,7 +41,6 @@ jfieldID appContext; jmethodID getParent; jmethodID getLocationOnScreen; - jmethodID resetGCMID; }; /* field and method IDs for Container */ @@ -65,7 +64,3 @@ extern void processTree(Widget from, Widget to, Boolean action); #endif // HEADLESS -/* fieldIDs for Canvas fields that may be accessed from C */ -struct CanvasIDs { - jmethodID setGCFromPeerMID; -}; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c --- a/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/native/sun/awt/awt_GraphicsEnv.c Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -354,6 +354,48 @@ return NULL; } +/* Note: until we include the <X11/extensions/Xrender.h> explicitly + * we have to define a couple of things ourselves. + */ +typedef unsigned long PictFormat; +#define PictTypeIndexed 0 +#define PictTypeDirect 1 + +typedef struct { + short red; + short redMask; + short green; + short greenMask; + short blue; + short blueMask; + short alpha; + short alphaMask; +} XRenderDirectFormat; + +typedef struct { + PictFormat id; + int type; + int depth; + XRenderDirectFormat direct; + Colormap colormap; +} XRenderPictFormat; + +#define PictFormatID (1 << 0) +#define PictFormatType (1 << 1) +#define PictFormatDepth (1 << 2) +#define PictFormatRed (1 << 3) +#define PictFormatRedMask (1 << 4) +#define PictFormatGreen (1 << 5) +#define PictFormatGreenMask (1 << 6) +#define PictFormatBlue (1 << 7) +#define PictFormatBlueMask (1 << 8) +#define PictFormatAlpha (1 << 9) +#define PictFormatAlphaMask (1 << 10) +#define PictFormatColormap (1 << 11) + +typedef XRenderPictFormat * +XRenderFindVisualFormatFunc (Display *dpy, _Xconst Visual *visual); + static void getAllConfigs (JNIEnv *env, int screen, AwtScreenDataPtr screenDataPtr) { @@ -367,6 +409,9 @@ int ind; char errmsg[128]; int xinawareScreen; + void* xrenderLibHandle = NULL; + XRenderFindVisualFormatFunc *XRenderFindVisualFormat = NULL; + int major_opcode, first_event, first_error; if (usingXinerama) { xinawareScreen = 0; @@ -449,6 +494,26 @@ graphicsConfigs[0] = defaultConfig; nConfig = 1; /* reserve index 0 for default config */ + // Only use the RENDER extension if it is available on the X server + if (XQueryExtension(awt_display, "RENDER", + &major_opcode, &first_event, &first_error)) + { + xrenderLibHandle = dlopen("libXrender.so.1", RTLD_LAZY | RTLD_GLOBAL); + +#ifndef __linux__ /* SOLARIS */ + if (xrenderLibHandle == NULL) { + xrenderLibHandle = dlopen("/usr/sfw/lib/libXrender.so.1", + RTLD_LAZY | RTLD_GLOBAL); + } +#endif + + if (xrenderLibHandle != NULL) { + XRenderFindVisualFormat = + (XRenderFindVisualFormatFunc*)dlsym(xrenderLibHandle, + "XRenderFindVisualFormat"); + } + } + for (i = 0; i < nTrue; i++) { if (XVisualIDFromVisual(pVITrue[i].visual) == XVisualIDFromVisual(defaultConfig->awt_visInfo.visual) || @@ -462,6 +527,21 @@ graphicsConfigs [ind]->awt_depth = pVITrue [i].depth; memcpy (&graphicsConfigs [ind]->awt_visInfo, &pVITrue [i], sizeof (XVisualInfo)); + if (XRenderFindVisualFormat != NULL) { + XRenderPictFormat *format = XRenderFindVisualFormat (awt_display, + pVITrue [i].visual); + if (format && + format->type == PictTypeDirect && + format->direct.alphaMask) + { + graphicsConfigs [ind]->isTranslucencySupported = 1; + } + } + } + + if (xrenderLibHandle != NULL) { + dlclose(xrenderLibHandle); + xrenderLibHandle = NULL; } for (i = 0; i < n8p; i++) { @@ -1506,6 +1586,26 @@ } /* + * Class: sun_awt_X11GraphicsConfig + * Method: isTranslucencyCapable + * Signature: (J)V + */ +JNIEXPORT jboolean JNICALL +Java_sun_awt_X11GraphicsConfig_isTranslucencyCapable + (JNIEnv *env, jobject this, jlong configData) +{ +#ifdef HEADLESS + return JNI_FALSE; +#else + AwtGraphicsConfigDataPtr aData = (AwtGraphicsConfigDataPtr)jlong_to_ptr(configData); + if (aData == NULL) { + return JNI_FALSE; + } + return (jboolean)aData->isTranslucencySupported; +#endif +} + +/* * Class: sun_awt_X11GraphicsDevice * Method: isDBESupported * Signature: ()Z diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/native/sun/awt/awt_Window.h --- a/jdk/src/solaris/native/sun/awt/awt_Window.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/native/sun/awt/awt_Window.h Wed Jul 05 16:51:11 2017 +0200 @@ -28,7 +28,6 @@ /* fieldIDs for Window fields that may be accessed from C */ struct WindowIDs { jfieldID warningString; - jmethodID resetGCMID; jfieldID locationByPlatform; jfieldID isAutoRequestFocus; }; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/native/sun/awt/awt_p.h --- a/jdk/src/solaris/native/sun/awt/awt_p.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/native/sun/awt/awt_p.h Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1995-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -135,6 +135,7 @@ int pixelStride; /* Used in X11SurfaceData.c */ ColorData *color_data; struct _GLXGraphicsConfigInfo *glxInfo; + int isTranslucencySupported; /* Uses Xrender to find this out. */ } AwtGraphicsConfigData; typedef AwtGraphicsConfigData* AwtGraphicsConfigDataPtr; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/native/sun/awt/gtk2_interface.c --- a/jdk/src/solaris/native/sun/awt/gtk2_interface.c Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/native/sun/awt/gtk2_interface.c Wed Jul 05 16:51:11 2017 +0200 @@ -93,6 +93,7 @@ /* Static buffer for conversion from java.lang.String to UTF-8 */ static char convertionBuffer[CONV_BUFFER_SIZE]; +static gboolean new_combo = TRUE; const char ENV_PREFIX[] = "GTK_MODULES="; /*******************/ @@ -608,6 +609,7 @@ dlsym(gtk2_libhandle, "gtk_combo_box_entry_new"); if (fp_gtk_combo_box_entry_new == NULL) { fp_gtk_combo_box_entry_new = dl_symbol("gtk_combo_new"); + new_combo = FALSE; } fp_gtk_separator_tool_item_new = @@ -1423,17 +1425,13 @@ */ GtkWidget *combo = (*fp_gtk_combo_box_entry_new)(); - if (widget_type == COMBO_BOX_TEXT_FIELD) - (*fp_gtk_container_add)((GtkContainer *)combo, result); - else - { + if (new_combo && widget_type == COMBO_BOX_ARROW_BUTTON) { (*fp_gtk_widget_set_parent)(result, combo); ((GtkBin*)combo)->child = result; + } else { + (*fp_gtk_container_add)((GtkContainer *)combo, result); } - (*fp_gtk_container_add)((GtkContainer *)gtk2_fixed, combo); - (*fp_gtk_widget_realize)(result); - return result; } else if (widget_type != TOOL_TIP && widget_type != INTERNAL_FRAME && diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/native/sun/awt/utility/rect.h --- a/jdk/src/solaris/native/sun/awt/utility/rect.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/native/sun/awt/utility/rect.h Wed Jul 05 16:51:11 2017 +0200 @@ -43,4 +43,15 @@ #define RECT_INC_HEIGHT(r) (r).height++ +#if defined(__cplusplus) +extern "C" { +#endif + +int BitmapToYXBandedRectangles(int bitsPerPixel, int width, int height, + unsigned char * buf, RECT_T * outBuf); + +#if defined(__cplusplus) +} +#endif + #endif // _AWT_RECT_H diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/native/sun/net/spi/SdpProvider.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/solaris/native/sun/net/spi/SdpProvider.c Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,74 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +#include <sys/types.h> +#include <sys/socket.h> + +#if defined(__solaris__) && !defined(PROTO_SDP) +#define PROTO_SDP 257 +#endif + +#include "jni.h" +#include "jni_util.h" +#include "net_util.h" + +#define RESTARTABLE(_cmd, _result) do { \ + do { \ + _result = _cmd; \ + } while((_result == -1) && (errno == EINTR)); \ +} while(0) + +JNIEXPORT void JNICALL +Java_sun_net_spi_SdpProvider_convert(JNIEnv *env, jclass cls, jint fd) +{ +#ifdef PROTO_SDP + int domain = ipv6_available() ? AF_INET6 : AF_INET; + int s = socket(domain, SOCK_STREAM, PROTO_SDP); + if (s < 0) { + JNU_ThrowIOExceptionWithLastError(env, "socket"); + } else { + int arg, len, res; + struct linger linger; + + /* copy socket options that are relevant to SDP */ + len = sizeof(arg); + if (getsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&arg, &len) == 0) + setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char*)&arg, len); + len = sizeof(arg); + if (getsockopt(fd, SOL_SOCKET, SO_OOBINLINE, (char*)&arg, &len) == 0) + setsockopt(s, SOL_SOCKET, SO_OOBINLINE, (char*)&arg, len); + len = sizeof(linger); + if (getsockopt(fd, SOL_SOCKET, SO_LINGER, (void*)&linger, &len) == 0) + setsockopt(s, SOL_SOCKET, SO_LINGER, (char*)&linger, len); + + RESTARTABLE(dup2(s, fd), res); + if (res < 0) + JNU_ThrowIOExceptionWithLastError(env, "dup2"); + RESTARTABLE(close(s), res); + } +#else + JNU_ThrowInternalError(env, "should not reach here"); +#endif +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/native/sun/nio/ch/DevPollArrayWrapper.c --- a/jdk/src/solaris/native/sun/nio/ch/DevPollArrayWrapper.c Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/native/sun/nio/ch/DevPollArrayWrapper.c Wed Jul 05 16:51:11 2017 +0200 @@ -28,6 +28,7 @@ #include "jvm.h" #include "jlong.h" #include "sun_nio_ch_DevPollArrayWrapper.h" +#include "java_lang_Integer.h" #include <sys/poll.h> #include <sys/resource.h> #include <unistd.h> @@ -192,7 +193,11 @@ JNU_ThrowIOExceptionWithLastError(env, "getrlimit failed"); } - return (jint)rlp.rlim_max; + if (rlp.rlim_max < 0 || rlp.rlim_max > java_lang_Integer_MAX_VALUE) { + return java_lang_Integer_MAX_VALUE; + } else { + return (jint)rlp.rlim_max; + } } JNIEXPORT void JNICALL diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c --- a/jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/native/sun/nio/ch/FileChannelImpl.c Wed Jul 05 16:51:11 2017 +0200 @@ -231,6 +231,8 @@ if (result < 0) { if (errno == EAGAIN) return IOS_UNAVAILABLE; + if (errno == EOPNOTSUPP) + return IOS_UNSUPPORTED_CASE; if ((errno == EINVAL) && ((ssize_t)count >= 0)) return IOS_UNSUPPORTED_CASE; if (errno == EINTR) diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/native/sun/xawt/XToolkit.c --- a/jdk/src/solaris/native/sun/xawt/XToolkit.c Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/native/sun/xawt/XToolkit.c Wed Jul 05 16:51:11 2017 +0200 @@ -182,9 +182,6 @@ (*env)->GetMethodID(env, cls, "getLocationOnScreen_NoTreeLock", "()Ljava/awt/Point;"); - componentIDs.resetGCMID = - (*env)->GetMethodID(env, cls, "resetGC", "()V"); - keyclass = (*env)->FindClass(env, "java/awt/event/KeyEvent"); DASSERT (keyclass != NULL); @@ -197,9 +194,6 @@ "Lsun/awt/AppContext;"); (*env)->DeleteLocalRef(env, keyclass); - - DASSERT(componentIDs.resetGCMID); - } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/solaris/native/sun/xawt/XlibWrapper.c --- a/jdk/src/solaris/native/sun/xawt/XlibWrapper.c Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/solaris/native/sun/xawt/XlibWrapper.c Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2002-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -42,7 +42,9 @@ #include <jvm.h> #include <Region.h> +#include "utility/rect.h" +#include <X11/XKBlib.h> #if defined(DEBUG) || defined(INTERNAL_BUILD) static jmethodID lockIsHeldMID = NULL; @@ -305,6 +307,20 @@ /* * Class: XlibWrapper + * Method: XConfigureWindow + * Signature: (JJJJ)V + */ +JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XConfigureWindow +(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong value_mask, + jlong values) +{ + AWT_CHECK_HAVE_LOCK(); + XConfigureWindow((Display*)jlong_to_ptr(display), (Window)window, + (unsigned int)value_mask, (XWindowChanges*)jlong_to_ptr(values)); +} + +/* + * Class: XlibWrapper * Method: XSetInputFocus * Signature: (JJ)V */ @@ -434,6 +450,79 @@ XSelectInput((Display *) jlong_to_ptr(display), (Window) window, mask); } +JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSelectEvents +(JNIEnv *env, jclass clazz, jlong display, jlong device, jlong bits_to_change, jlong values_for_bits) +{ + AWT_CHECK_HAVE_LOCK(); + XkbSelectEvents((Display *) jlong_to_ptr(display), (unsigned int)device, + (unsigned long)bits_to_change, + (unsigned long)values_for_bits); +} +JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbSelectEventDetails +(JNIEnv *env, jclass clazz, jlong display, jlong device, jlong event_type, jlong bits_to_change, jlong values_for_bits) +{ + AWT_CHECK_HAVE_LOCK(); + XkbSelectEventDetails((Display *) jlong_to_ptr(display), (unsigned int)device, + (unsigned int) event_type, + (unsigned long)bits_to_change, + (unsigned long)values_for_bits); +} +JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbQueryExtension +(JNIEnv *env, jclass clazz, jlong display, jlong opcode_rtrn, jlong event_rtrn, + jlong error_rtrn, jlong major_in_out, jlong minor_in_out) +{ + AWT_CHECK_HAVE_LOCK(); + return XkbQueryExtension( (Display *) jlong_to_ptr(display), + (int *) jlong_to_ptr(opcode_rtrn), + (int *) jlong_to_ptr(event_rtrn), + (int *) jlong_to_ptr(error_rtrn), + (int *) jlong_to_ptr(major_in_out), + (int *) jlong_to_ptr(minor_in_out)); +} +JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbLibraryVersion +(JNIEnv *env, jclass clazz, jlong lib_major_in_out, jlong lib_minor_in_out) +{ + AWT_CHECK_HAVE_LOCK(); + *((int *)lib_major_in_out) = XkbMajorVersion; + *((int *)lib_minor_in_out) = XkbMinorVersion; + return XkbLibraryVersion((int *)jlong_to_ptr(lib_major_in_out), (int *)jlong_to_ptr(lib_minor_in_out)); +} + +JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetMap +(JNIEnv *env, jclass clazz, jlong display, jlong which, jlong device_spec) +{ + AWT_CHECK_HAVE_LOCK(); + return (jlong) XkbGetMap( (Display *) jlong_to_ptr(display), + (unsigned int) which, + (unsigned int) device_spec); +} +JNIEXPORT jlong JNICALL Java_sun_awt_X11_XlibWrapper_XkbGetUpdatedMap +(JNIEnv *env, jclass clazz, jlong display, jlong which, jlong xkb) +{ + AWT_CHECK_HAVE_LOCK(); + return (jlong) XkbGetUpdatedMap( (Display *) jlong_to_ptr(display), + (unsigned int) which, + (XkbDescPtr) jlong_to_ptr(xkb)); +} +JNIEXPORT void JNICALL Java_sun_awt_X11_XlibWrapper_XkbFreeKeyboard +(JNIEnv *env, jclass clazz, jlong xkb, jlong which, jboolean free_all) +{ + AWT_CHECK_HAVE_LOCK(); + XkbFreeKeyboard(jlong_to_ptr(xkb), (unsigned int)which, free_all); +} +JNIEXPORT jboolean JNICALL Java_sun_awt_X11_XlibWrapper_XkbTranslateKeyCode +(JNIEnv *env, jclass clazz, jlong xkb, jint keycode, jlong mods, jlong mods_rtrn, jlong keysym_rtrn) +{ + Bool b; + b = XkbTranslateKeyCode((XkbDescPtr)xkb, (unsigned int)keycode, (unsigned int)mods, + (unsigned int *)jlong_to_ptr(mods_rtrn), + (KeySym *)jlong_to_ptr(keysym_rtrn)); + //printf("native, input: keycode:0x%0X; mods:0x%0X\n", keycode, mods); + //printf("native, output: keysym:0x%0X; mods:0x%0X\n", *(unsigned int *)jlong_to_ptr(keysym_rtrn), *(unsigned int *)jlong_to_ptr(mods_rtrn)); + return b; +} + + /* * Class: sun_awt_X11_XlibWrapper * Method: XNextEvent @@ -1658,6 +1747,39 @@ } JNIEXPORT jint JNICALL +Java_sun_awt_X11_XlibWrapper_XkbGetEffectiveGroup(JNIEnv *env, jclass clazz, + jlong display) { + XkbStateRec sr; + AWT_CHECK_HAVE_LOCK(); + memset(&sr, 0, sizeof(XkbStateRec)); + XkbGetState((Display*) jlong_to_ptr(display), XkbUseCoreKbd, &sr); +// printf("-------------------------------------VVVV\n"); +// printf(" group:0x%0X\n",sr.group); +// printf(" base_group:0x%0X\n",sr.base_group); +// printf(" latched_group:0x%0X\n",sr.latched_group); +// printf(" locked_group:0x%0X\n",sr.locked_group); +// printf(" mods:0x%0X\n",sr.mods); +// printf(" base_mods:0x%0X\n",sr.base_mods); +// printf(" latched_mods:0x%0X\n",sr.latched_mods); +// printf(" locked_mods:0x%0X\n",sr.locked_mods); +// printf(" compat_state:0x%0X\n",sr.compat_state); +// printf(" grab_mods:0x%0X\n",sr.grab_mods); +// printf(" compat_grab_mods:0x%0X\n",sr.compat_grab_mods); +// printf(" lookup_mods:0x%0X\n",sr.lookup_mods); +// printf(" compat_lookup_mods:0x%0X\n",sr.compat_lookup_mods); +// printf(" ptr_buttons:0x%0X\n",sr.ptr_buttons); +// printf("-------------------------------------^^^^\n"); + return (jint)(sr.group); +} +JNIEXPORT jlong JNICALL +Java_sun_awt_X11_XlibWrapper_XkbKeycodeToKeysym(JNIEnv *env, jclass clazz, + jlong display, jint keycode, + jint group, jint level) { + AWT_CHECK_HAVE_LOCK(); + return XkbKeycodeToKeysym((Display*) jlong_to_ptr(display), (unsigned int)keycode, (unsigned int)group, (unsigned int)level); +} + +JNIEXPORT jint JNICALL Java_sun_awt_X11_XlibWrapper_XKeysymToKeycode(JNIEnv *env, jclass clazz, jlong display, jlong keysym) { AWT_CHECK_HAVE_LOCK(); @@ -1945,3 +2067,77 @@ ShapeBounding, 0, 0, None, ShapeSet); } } + +/* + * Class: XlibWrapper + * Method: SetZOrder + */ + +JNIEXPORT void JNICALL +Java_sun_awt_X11_XlibWrapper_SetZOrder +(JNIEnv *env, jclass clazz, jlong display, jlong window, jlong above) +{ + AWT_CHECK_HAVE_LOCK(); + + XWindowChanges wc; + wc.sibling = (Window)jlong_to_ptr(above); + + unsigned int value_mask = CWStackMode; + + if (above == 0) { + wc.stack_mode = Above; + } else { + wc.stack_mode = Below; + value_mask |= CWSibling; + } + + XConfigureWindow((Display *)jlong_to_ptr(display), + (Window)jlong_to_ptr(window), + value_mask, &wc ); +} + +/* + * Class: XlibWrapper + * Method: SetBitmapShape + */ +JNIEXPORT void JNICALL +Java_sun_awt_X11_XlibWrapper_SetBitmapShape +(JNIEnv *env, jclass clazz, jlong display, jlong window, + jint width, jint height, jintArray bitmap) +{ + jsize len; + jint *values; + jboolean isCopy = JNI_FALSE; + size_t worstBufferSize = (size_t)((width / 2 + 1) * height); + RECT_T * pRect; + + AWT_CHECK_HAVE_LOCK(); + + len = (*env)->GetArrayLength(env, bitmap); + if (len == 0 || len < width * height) { + return; + } + + values = (*env)->GetIntArrayElements(env, bitmap, &isCopy); + if (JNU_IsNull(env, values)) { + return; + } + + pRect = (RECT_T *)malloc(worstBufferSize * sizeof(RECT_T)); + + /* Note: the values[0] and values[1] are supposed to contain the width + * and height (see XIconInfo.getIntData() for details). So, we do +2. + */ + int numrects = BitmapToYXBandedRectangles(32, (int)width, (int)height, + (unsigned char *)(values + 2), pRect); + + XShapeCombineRectangles((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window), + ShapeClip, 0, 0, pRect, numrects, ShapeSet, YXBanded); + XShapeCombineRectangles((Display *)jlong_to_ptr(display), (Window)jlong_to_ptr(window), + ShapeBounding, 0, 0, pRect, numrects, ShapeSet, YXBanded); + + free(pRect); + + (*env)->ReleaseIntArrayElements(env, bitmap, values, JNI_ABORT); +} + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/Win32GraphicsConfig.java --- a/jdk/src/windows/classes/sun/awt/Win32GraphicsConfig.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/awt/Win32GraphicsConfig.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -331,4 +331,12 @@ } // the rest of the flip actions are not supported } + + /* + @Override + */ + public boolean isTranslucencyCapable() { + //XXX: worth checking if 8-bit? Anyway, it doesn't hurt. + return true; + } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/Win32GraphicsDevice.java --- a/jdk/src/windows/classes/sun/awt/Win32GraphicsDevice.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/awt/Win32GraphicsDevice.java Wed Jul 05 16:51:11 2017 +0200 @@ -380,7 +380,6 @@ // fix for 4868278 peer.updateGC(); - peer.resetTargetGC(); } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/Win32GraphicsEnvironment.java --- a/jdk/src/windows/classes/sun/awt/Win32GraphicsEnvironment.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/awt/Win32GraphicsEnvironment.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -398,4 +398,11 @@ public boolean isDisplayLocal() { return true; } + + /** + * Used to find out if the OS is Windows Vista or later. + * + * @return {@code true} if the OS is Vista or later, {@code false} otherwise + */ + public static native boolean isVistaOS(); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java --- a/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java Wed Jul 05 16:51:11 2017 +0200 @@ -32,6 +32,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.util.*; +import java.util.concurrent.*; import javax.swing.SwingConstants; // NOTE: This class supersedes Win32ShellFolder, which was removed from @@ -184,15 +185,20 @@ boolean disposed; public void dispose() { if (disposed) return; - if (relativePIDL != 0) { - releasePIDL(relativePIDL); - } - if (absolutePIDL != 0) { - releasePIDL(absolutePIDL); - } - if (pIShellFolder != 0) { - releaseIShellFolder(pIShellFolder); - } + ShellFolder.getInvoker().invoke(new Callable<Void>() { + public Void call() throws Exception { + if (relativePIDL != 0) { + releasePIDL(relativePIDL); + } + if (absolutePIDL != 0) { + releasePIDL(absolutePIDL); + } + if (pIShellFolder != 0) { + releaseIShellFolder(pIShellFolder); + } + return null; + } + }); disposed = true; } } @@ -218,50 +224,59 @@ */ private boolean isPersonal; + private static String composePathForCsidl(int csidl) throws IOException { + String path = getFileSystemPath(csidl); + return path == null + ? ("ShellFolder: 0x" + Integer.toHexString(csidl)) + : path; + } /** * Create a system special shell folder, such as the * desktop or Network Neighborhood. */ - Win32ShellFolder2(int csidl) throws IOException { + Win32ShellFolder2(final int csidl) throws IOException { // Desktop is parent of DRIVES and NETWORK, not necessarily // other special shell folders. - super(null, - (getFileSystemPath(csidl) == null) - ? ("ShellFolder: 0x"+Integer.toHexString(csidl)) : getFileSystemPath(csidl)); - if (csidl == DESKTOP) { - initDesktop(); - } else { - initSpecial(getDesktop().getIShellFolder(), csidl); - // At this point, the native method initSpecial() has set our relativePIDL - // relative to the Desktop, which may not be our immediate parent. We need - // to traverse this ID list and break it into a chain of shell folders from - // the top, with each one having an immediate parent and a relativePIDL - // relative to that parent. - long pIDL = disposer.relativePIDL; - parent = getDesktop(); - while (pIDL != 0) { - // Get a child pidl relative to 'parent' - long childPIDL = copyFirstPIDLEntry(pIDL); - if (childPIDL != 0) { - // Get a handle to the the rest of the ID list - // i,e, parent's grandchilren and down - pIDL = getNextPIDLEntry(pIDL); - if (pIDL != 0) { - // Now we know that parent isn't immediate to 'this' because it - // has a continued ID list. Create a shell folder for this child - // pidl and make it the new 'parent'. - parent = new Win32ShellFolder2((Win32ShellFolder2)parent, childPIDL); - } else { - // No grandchildren means we have arrived at the parent of 'this', - // and childPIDL is directly relative to parent. - disposer.relativePIDL = childPIDL; + super(null, composePathForCsidl(csidl)); + ShellFolder.getInvoker().invoke(new Callable<Void>() { + public Void call() throws Exception { + if (csidl == DESKTOP) { + initDesktop(); + } else { + initSpecial(getDesktop().getIShellFolder(), csidl); + // At this point, the native method initSpecial() has set our relativePIDL + // relative to the Desktop, which may not be our immediate parent. We need + // to traverse this ID list and break it into a chain of shell folders from + // the top, with each one having an immediate parent and a relativePIDL + // relative to that parent. + long pIDL = disposer.relativePIDL; + parent = getDesktop(); + while (pIDL != 0) { + // Get a child pidl relative to 'parent' + long childPIDL = copyFirstPIDLEntry(pIDL); + if (childPIDL != 0) { + // Get a handle to the the rest of the ID list + // i,e, parent's grandchilren and down + pIDL = getNextPIDLEntry(pIDL); + if (pIDL != 0) { + // Now we know that parent isn't immediate to 'this' because it + // has a continued ID list. Create a shell folder for this child + // pidl and make it the new 'parent'. + parent = new Win32ShellFolder2((Win32ShellFolder2) parent, childPIDL); + } else { + // No grandchildren means we have arrived at the parent of 'this', + // and childPIDL is directly relative to parent. + disposer.relativePIDL = childPIDL; + } + } else { + break; + } } - } else { - break; } + return null; } - } + }); sun.java2d.Disposer.addRecord(this, disposer); } @@ -281,17 +296,26 @@ /** * Creates a shell folder with a parent and relative PIDL */ - Win32ShellFolder2(Win32ShellFolder2 parent, long relativePIDL) { - super(parent, getFileSystemPath(parent.getIShellFolder(), relativePIDL)); + Win32ShellFolder2(final Win32ShellFolder2 parent, final long relativePIDL) { + super(parent, + ShellFolder.getInvoker().invoke(new Callable<String>() { + public String call() throws Exception { + return getFileSystemPath(parent.getIShellFolder(), relativePIDL); + } + }) + ); this.disposer.relativePIDL = relativePIDL; getAbsolutePath(); sun.java2d.Disposer.addRecord(this, disposer); } // Initializes the desktop shell folder + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private native void initDesktop(); + // Initializes a special, non-file system shell folder // from one of the above constants + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private native void initSpecial(long desktopIShellFolder, int csidl); /** Marks this folder as being the My Documents (Personal) folder */ @@ -311,26 +335,30 @@ * drive (normally "C:\"). */ protected Object writeReplace() throws java.io.ObjectStreamException { - if (isFileSystem()) { - return new File(getPath()); - } else { - Win32ShellFolder2 drives = Win32ShellFolderManager2.getDrives(); - if (drives != null) { - File[] driveRoots = drives.listFiles(); - if (driveRoots != null) { - for (int i = 0; i < driveRoots.length; i++) { - if (driveRoots[i] instanceof Win32ShellFolder2) { - Win32ShellFolder2 sf = (Win32ShellFolder2)driveRoots[i]; - if (sf.isFileSystem() && !sf.hasAttribute(ATTRIB_REMOVABLE)) { - return new File(sf.getPath()); + return ShellFolder.getInvoker().invoke(new Callable<File>() { + public File call() throws Exception { + if (isFileSystem()) { + return new File(getPath()); + } else { + Win32ShellFolder2 drives = Win32ShellFolderManager2.getDrives(); + if (drives != null) { + File[] driveRoots = drives.listFiles(); + if (driveRoots != null) { + for (int i = 0; i < driveRoots.length; i++) { + if (driveRoots[i] instanceof Win32ShellFolder2) { + Win32ShellFolder2 sf = (Win32ShellFolder2) driveRoots[i]; + if (sf.isFileSystem() && !sf.hasAttribute(ATTRIB_REMOVABLE)) { + return new File(sf.getPath()); + } + } } } } + // Ouch, we have no hard drives. Return something "valid" anyway. + return new File("C:\\"); } } - // Ouch, we have no hard drives. Return something "valid" anyway. - return new File("C:\\"); - } + }); } @@ -364,6 +392,7 @@ static native void releasePIDL(long pIDL); // Release an IShellFolder object + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private static native void releaseIShellFolder(long pIShellFolder); /** @@ -371,18 +400,28 @@ */ public long getIShellFolder() { if (disposer.pIShellFolder == 0) { - assert(isDirectory()); - assert(parent != null); - long parentIShellFolder = getParentIShellFolder(); - if (parentIShellFolder == 0) { - throw new InternalError("Parent IShellFolder was null for " + getAbsolutePath()); - } - // We are a directory with a parent and a relative PIDL. - // We want to bind to the parent so we get an IShellFolder instance associated with us. - disposer.pIShellFolder = bindToObject(parentIShellFolder, disposer.relativePIDL); - if (disposer.pIShellFolder == 0) { - throw new InternalError("Unable to bind " + getAbsolutePath() + " to parent"); - } + disposer.pIShellFolder = + ShellFolder.getInvoker().invoke(new Callable<Long>() { + public Long call() throws Exception { + assert(isDirectory()); + assert(parent != null); + long parentIShellFolder = getParentIShellFolder(); + if (parentIShellFolder == 0) { + throw new InternalError("Parent IShellFolder was null for " + + getAbsolutePath()); + } + // We are a directory with a parent and a relative PIDL. + // We want to bind to the parent so we get an + // IShellFolder instance associated with us. + long pIShellFolder = bindToObject(parentIShellFolder, + disposer.relativePIDL); + if (pIShellFolder == 0) { + throw new InternalError("Unable to bind " + + getAbsolutePath() + " to parent"); + } + return pIShellFolder; + } + }); } return disposer.pIShellFolder; } @@ -472,24 +511,42 @@ return false; } - private static boolean pidlsEqual(long pIShellFolder, long pidl1, long pidl2) { - return (compareIDs(pIShellFolder, pidl1, pidl2) == 0); + private static boolean pidlsEqual(final long pIShellFolder, final long pidl1, final long pidl2) { + return ShellFolder.getInvoker().invoke(new Callable<Boolean>() { + public Boolean call() throws Exception { + return (compareIDs(pIShellFolder, pidl1, pidl2) == 0); + } + }); } + + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private static native int compareIDs(long pParentIShellFolder, long pidl1, long pidl2); + private Boolean cachedIsFileSystem; + /** * @return Whether this is a file system shell folder */ - public boolean isFileSystem() { - return hasAttribute(ATTRIB_FILESYSTEM); + public synchronized boolean isFileSystem() { + if (cachedIsFileSystem == null) { + cachedIsFileSystem = hasAttribute(ATTRIB_FILESYSTEM); + } + + return cachedIsFileSystem; } /** * Return whether the given attribute flag is set for this object */ - public boolean hasAttribute(int attribute) { - // Caching at this point doesn't seem to be cost efficient - return (getAttributes0(getParentIShellFolder(), getRelativePIDL(), attribute) & attribute) != 0; + public boolean hasAttribute(final int attribute) { + return ShellFolder.getInvoker().invoke(new Callable<Boolean>() { + public Boolean call() throws Exception { + // Caching at this point doesn't seem to be cost efficient + return (getAttributes0(getParentIShellFolder(), + getRelativePIDL(), attribute) + & attribute) != 0; + } + }); } /** @@ -498,26 +555,42 @@ * Could plausibly be used for attribute caching but have to be * very careful not to touch network drives and file system roots * with a full attrsMask + * NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details */ + private static native int getAttributes0(long pParentIShellFolder, long pIDL, int attrsMask); // Return the path to the underlying file system object - private static String getFileSystemPath(long parentIShellFolder, long relativePIDL) { - int linkedFolder = ATTRIB_LINK | ATTRIB_FOLDER; - if (parentIShellFolder == Win32ShellFolderManager2.getNetwork().getIShellFolder() && - getAttributes0(parentIShellFolder, relativePIDL, linkedFolder) == linkedFolder) { + private static String getFileSystemPath(final long parentIShellFolder, final long relativePIDL) { + return ShellFolder.getInvoker().invoke(new Callable<String>() { + public String call() throws Exception { + int linkedFolder = ATTRIB_LINK | ATTRIB_FOLDER; + if (parentIShellFolder == Win32ShellFolderManager2.getNetwork().getIShellFolder() && + getAttributes0(parentIShellFolder, relativePIDL, linkedFolder) == linkedFolder) { - String s = - getFileSystemPath(Win32ShellFolderManager2.getDesktop().getIShellFolder(), - getLinkLocation(parentIShellFolder, relativePIDL, false)); - if (s != null && s.startsWith("\\\\")) { - return s; + String s = + getFileSystemPath(Win32ShellFolderManager2.getDesktop().getIShellFolder(), + getLinkLocation(parentIShellFolder, relativePIDL, false)); + if (s != null && s.startsWith("\\\\")) { + return s; + } + } + return getDisplayNameOf(parentIShellFolder, relativePIDL, SHGDN_FORPARSING); } - } - return getDisplayNameOf(parentIShellFolder, relativePIDL, SHGDN_NORMAL | SHGDN_FORPARSING); + }); } + // Needs to be accessible to Win32ShellFolderManager2 - static native String getFileSystemPath(int csidl) throws IOException; + static String getFileSystemPath(final int csidl) throws IOException { + return ShellFolder.getInvoker().invoke(new Callable<String>() { + public String call() throws Exception { + return getFileSystemPath0(csidl); + } + }); + } + + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details + private static native String getFileSystemPath0(int csidl) throws IOException; // Return whether the path is a network root. // Path is assumed to be non-null @@ -557,24 +630,33 @@ */ // Returns an IEnumIDList interface for an IShellFolder. The value // returned must be released using releaseEnumObjects(). - private long getEnumObjects(long pIShellFolder, boolean includeHiddenFiles) { - boolean isDesktop = (disposer.pIShellFolder == getDesktopIShellFolder()); - return getEnumObjects(disposer.pIShellFolder, isDesktop, includeHiddenFiles); + private long getEnumObjects(long pIShellFolder, final boolean includeHiddenFiles) { + final boolean isDesktop = (disposer.pIShellFolder == getDesktopIShellFolder()); + return ShellFolder.getInvoker().invoke(new Callable<Long>() { + public Long call() throws Exception { + return getEnumObjects(disposer.pIShellFolder, isDesktop, includeHiddenFiles); + } + }); } + // Returns an IEnumIDList interface for an IShellFolder. The value // returned must be released using releaseEnumObjects(). + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private native long getEnumObjects(long pIShellFolder, boolean isDesktop, boolean includeHiddenFiles); // Returns the next sequential child as a relative PIDL // from an IEnumIDList interface. The value returned must // be released using releasePIDL(). + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private native long getNextChild(long pEnumObjects); // Releases the IEnumIDList interface + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private native void releaseEnumObjects(long pEnumObjects); // Returns the IShellFolder of a child from a parent IShellFolder // and a relative PIDL. The value returned must be released // using releaseIShellFolder(). + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private static native long bindToObject(long parentIShellFolder, long pIDL); /** @@ -582,60 +664,64 @@ * object. The array will be empty if the folder is empty. Returns * <code>null</code> if this shellfolder does not denote a directory. */ - public File[] listFiles(boolean includeHiddenFiles) { + public File[] listFiles(final boolean includeHiddenFiles) { SecurityManager security = System.getSecurityManager(); if (security != null) { security.checkRead(getPath()); } - if (!isDirectory()) { - return null; - } - // Links to directories are not directories and cannot be parents. - // This does not apply to folders in My Network Places (NetHood) - // because they are both links and real directories! - if (isLink() && !hasAttribute(ATTRIB_FOLDER)) { - return new File[0]; - } - Win32ShellFolder2 desktop = Win32ShellFolderManager2.getDesktop(); - Win32ShellFolder2 personal = Win32ShellFolderManager2.getPersonal(); - - // If we are a directory, we have a parent and (at least) a - // relative PIDL. We must first ensure we are bound to the - // parent so we have an IShellFolder to query. - long pIShellFolder = getIShellFolder(); - // Now we can enumerate the objects in this folder. - ArrayList<Win32ShellFolder2> list = new ArrayList<Win32ShellFolder2>(); - long pEnumObjects = getEnumObjects(pIShellFolder, includeHiddenFiles); - if (pEnumObjects != 0) { - long childPIDL; - int testedAttrs = ATTRIB_FILESYSTEM | ATTRIB_FILESYSANCESTOR; - do { - if (Thread.currentThread().isInterrupted()) { + return ShellFolder.getInvoker().invoke(new Callable<File[]>() { + public File[] call() throws Exception { + if (!isDirectory()) { + return null; + } + // Links to directories are not directories and cannot be parents. + // This does not apply to folders in My Network Places (NetHood) + // because they are both links and real directories! + if (isLink() && !hasAttribute(ATTRIB_FOLDER)) { return new File[0]; } - childPIDL = getNextChild(pEnumObjects); - boolean releasePIDL = true; - if (childPIDL != 0 && - (getAttributes0(pIShellFolder, childPIDL, testedAttrs) & testedAttrs) != 0) { - Win32ShellFolder2 childFolder = null; - if (this.equals(desktop) - && personal != null - && pidlsEqual(pIShellFolder, childPIDL, personal.disposer.relativePIDL)) { - childFolder = personal; - } else { - childFolder = new Win32ShellFolder2(this, childPIDL); - releasePIDL = false; - } - list.add(childFolder); + + Win32ShellFolder2 desktop = Win32ShellFolderManager2.getDesktop(); + Win32ShellFolder2 personal = Win32ShellFolderManager2.getPersonal(); + + // If we are a directory, we have a parent and (at least) a + // relative PIDL. We must first ensure we are bound to the + // parent so we have an IShellFolder to query. + long pIShellFolder = getIShellFolder(); + // Now we can enumerate the objects in this folder. + ArrayList<Win32ShellFolder2> list = new ArrayList<Win32ShellFolder2>(); + long pEnumObjects = getEnumObjects(pIShellFolder, includeHiddenFiles); + if (pEnumObjects != 0) { + long childPIDL; + int testedAttrs = ATTRIB_FILESYSTEM | ATTRIB_FILESYSANCESTOR; + do { + childPIDL = getNextChild(pEnumObjects); + boolean releasePIDL = true; + if (childPIDL != 0 && + (getAttributes0(pIShellFolder, childPIDL, testedAttrs) & testedAttrs) != 0) { + Win32ShellFolder2 childFolder; + if (Win32ShellFolder2.this.equals(desktop) + && personal != null + && pidlsEqual(pIShellFolder, childPIDL, personal.disposer.relativePIDL)) { + childFolder = personal; + } else { + childFolder = new Win32ShellFolder2(Win32ShellFolder2.this, childPIDL); + releasePIDL = false; + } + list.add(childFolder); + } + if (releasePIDL) { + releasePIDL(childPIDL); + } + } while (childPIDL != 0 && !Thread.currentThread().isInterrupted()); + releaseEnumObjects(pEnumObjects); } - if (releasePIDL) { - releasePIDL(childPIDL); - } - } while (childPIDL != 0); - releaseEnumObjects(pEnumObjects); - } - return list.toArray(new ShellFolder[list.size()]); + return Thread.currentThread().isInterrupted() + ? new File[0] + : list.toArray(new ShellFolder[list.size()]); + } + }); } @@ -644,33 +730,43 @@ * * @return The child shellfolder, or null if not found. */ - Win32ShellFolder2 getChildByPath(String filePath) { - long pIShellFolder = getIShellFolder(); - long pEnumObjects = getEnumObjects(pIShellFolder, true); - Win32ShellFolder2 child = null; - long childPIDL; + Win32ShellFolder2 getChildByPath(final String filePath) { + return ShellFolder.getInvoker().invoke(new Callable<Win32ShellFolder2>() { + public Win32ShellFolder2 call() throws Exception { + long pIShellFolder = getIShellFolder(); + long pEnumObjects = getEnumObjects(pIShellFolder, true); + Win32ShellFolder2 child = null; + long childPIDL = 0; - while ((childPIDL = getNextChild(pEnumObjects)) != 0) { - if (getAttributes0(pIShellFolder, childPIDL, ATTRIB_FILESYSTEM) != 0) { - String path = getFileSystemPath(pIShellFolder, childPIDL); - if (path != null && path.equalsIgnoreCase(filePath)) { - long childIShellFolder = bindToObject(pIShellFolder, childPIDL); - child = new Win32ShellFolder2(this, childIShellFolder, childPIDL, path); - break; + while ((childPIDL = getNextChild(pEnumObjects)) != 0) { + if (getAttributes0(pIShellFolder, childPIDL, ATTRIB_FILESYSTEM) != 0) { + String path = getFileSystemPath(pIShellFolder, childPIDL); + if (path != null && path.equalsIgnoreCase(filePath)) { + long childIShellFolder = bindToObject(pIShellFolder, childPIDL); + child = new Win32ShellFolder2(Win32ShellFolder2.this, + childIShellFolder, childPIDL, path); + break; + } + } + releasePIDL(childPIDL); } + releaseEnumObjects(pEnumObjects); + return child; } - releasePIDL(childPIDL); - } - releaseEnumObjects(pEnumObjects); - return child; + }); } + private Boolean cachedIsLink; /** * @return Whether this shell folder is a link */ - public boolean isLink() { - return hasAttribute(ATTRIB_LINK); + public synchronized boolean isLink() { + if (cachedIsLink == null) { + cachedIsLink = hasAttribute(ATTRIB_LINK); + } + + return cachedIsLink; } /** @@ -682,6 +778,7 @@ // Return the link location of a shell folder + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private static native long getLinkLocation(long parentIShellFolder, long relativePIDL, boolean resolve); @@ -693,38 +790,52 @@ return getLinkLocation(true); } - private ShellFolder getLinkLocation(boolean resolve) { - if (!isLink()) { - return null; - } + private ShellFolder getLinkLocation(final boolean resolve) { + return ShellFolder.getInvoker().invoke(new Callable<ShellFolder>() { + public ShellFolder call() throws Exception { + if (!isLink()) { + return null; + } - ShellFolder location = null; - long linkLocationPIDL = getLinkLocation(getParentIShellFolder(), - getRelativePIDL(), resolve); - if (linkLocationPIDL != 0) { - try { - location = - Win32ShellFolderManager2.createShellFolderFromRelativePIDL(getDesktop(), - linkLocationPIDL); - } catch (InternalError e) { - // Could be a link to a non-bindable object, such as a network connection - // TODO: getIShellFolder() should throw FileNotFoundException instead + ShellFolder location = null; + long linkLocationPIDL = getLinkLocation(getParentIShellFolder(), + getRelativePIDL(), resolve); + if (linkLocationPIDL != 0) { + try { + location = + Win32ShellFolderManager2.createShellFolderFromRelativePIDL(getDesktop(), + linkLocationPIDL); + } catch (InternalError e) { + // Could be a link to a non-bindable object, such as a network connection + // TODO: getIShellFolder() should throw FileNotFoundException instead + } + } + return location; } - } - return location; + }); } // Parse a display name into a PIDL relative to the current IShellFolder. - long parseDisplayName(String name) throws FileNotFoundException { + long parseDisplayName(final String name) throws FileNotFoundException { try { - return parseDisplayName0(getIShellFolder(), name); - } catch (IOException e) { - throw new FileNotFoundException("Could not find file " + name); + return ShellFolder.getInvoker().invoke(new Callable<Long>() { + public Long call() throws Exception { + return parseDisplayName0(getIShellFolder(), name); + } + }); + } catch (RuntimeException e) { + if (e.getCause() instanceof IOException) { + throw new FileNotFoundException("Could not find file " + name); + } + throw e; } } + + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private static native long parseDisplayName0(long pIShellFolder, String name) throws IOException; // Return the display name of a shell folder + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private static native String getDisplayNameOf(long parentIShellFolder, long relativePIDL, int attrs); @@ -734,12 +845,19 @@ */ public String getDisplayName() { if (displayName == null) { - displayName = getDisplayNameOf(getParentIShellFolder(), getRelativePIDL(), SHGDN_NORMAL); + displayName = + ShellFolder.getInvoker().invoke(new Callable<String>() { + public String call() throws Exception { + return getDisplayNameOf(getParentIShellFolder(), + getRelativePIDL(), SHGDN_NORMAL); + } + }); } return displayName; } // Return the folder type of a shell folder + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private static native String getFolderType(long pIDL); /** @@ -747,7 +865,13 @@ */ public String getFolderType() { if (folderType == null) { - folderType = getFolderType(getAbsolutePIDL()); + final long absolutePIDL = getAbsolutePIDL(); + folderType = + ShellFolder.getInvoker().invoke(new Callable<String>() { + public String call() throws Exception { + return getFolderType(absolutePIDL); + } + }); } return folderType; } @@ -774,11 +898,16 @@ private static Map smallLinkedSystemImages = new HashMap(); private static Map largeLinkedSystemImages = new HashMap(); + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private static native long getIShellIcon(long pIShellFolder); + + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private static native int getIconIndex(long parentIShellIcon, long relativePIDL); // Return the icon of a file system shell folder in the form of an HICON private static native long getIcon(String absolutePath, boolean getLargeIcon); + + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private static native long extractIcon(long parentIShellFolder, long relativePIDL, boolean getLargeIcon); @@ -799,7 +928,12 @@ private long getIShellIcon() { if (pIShellIcon == -1L) { - pIShellIcon = getIShellIcon(getIShellFolder()); + pIShellIcon = + ShellFolder.getInvoker().invoke(new Callable<Long>() { + public Long call() throws Exception { + return getIShellIcon(getIShellFolder()); + } + }); } return pIShellIcon; } @@ -850,50 +984,60 @@ /** * @return The icon image used to display this shell folder */ - public Image getIcon(boolean getLargeIcon) { + public Image getIcon(final boolean getLargeIcon) { Image icon = getLargeIcon ? largeIcon : smallIcon; if (icon == null) { - long parentIShellIcon = (parent != null) ? ((Win32ShellFolder2)parent).getIShellIcon() : 0L; - long relativePIDL = getRelativePIDL(); + icon = + ShellFolder.getInvoker().invoke(new Callable<Image>() { + public Image call() throws Exception { + Image newIcon = null; + if (isFileSystem()) { + long parentIShellIcon = (parent != null) + ? ((Win32ShellFolder2) parent).getIShellIcon() + : 0L; + long relativePIDL = getRelativePIDL(); - if (isFileSystem()) { - // These are cached per type (using the index in the system image list) - int index = getIconIndex(parentIShellIcon, relativePIDL); - if (index > 0) { - Map imageCache; - if (isLink()) { - imageCache = getLargeIcon ? largeLinkedSystemImages : smallLinkedSystemImages; - } else { - imageCache = getLargeIcon ? largeSystemImages : smallSystemImages; + // These are cached per type (using the index in the system image list) + int index = getIconIndex(parentIShellIcon, relativePIDL); + if (index > 0) { + Map imageCache; + if (isLink()) { + imageCache = getLargeIcon ? largeLinkedSystemImages : smallLinkedSystemImages; + } else { + imageCache = getLargeIcon ? largeSystemImages : smallSystemImages; + } + newIcon = (Image) imageCache.get(Integer.valueOf(index)); + if (newIcon == null) { + long hIcon = getIcon(getAbsolutePath(), getLargeIcon); + newIcon = makeIcon(hIcon, getLargeIcon); + disposeIcon(hIcon); + if (newIcon != null) { + imageCache.put(Integer.valueOf(index), newIcon); + } + } + } + } + + if (newIcon == null) { + // These are only cached per object + long hIcon = extractIcon(getParentIShellFolder(), + getRelativePIDL(), getLargeIcon); + newIcon = makeIcon(hIcon, getLargeIcon); + disposeIcon(hIcon); + } + + if (newIcon == null) { + newIcon = Win32ShellFolder2.super.getIcon(getLargeIcon); + } + return newIcon; } - icon = (Image)imageCache.get(Integer.valueOf(index)); - if (icon == null) { - long hIcon = getIcon(getAbsolutePath(), getLargeIcon); - icon = makeIcon(hIcon, getLargeIcon); - disposeIcon(hIcon); - if (icon != null) { - imageCache.put(Integer.valueOf(index), icon); - } - } - } - } - - if (icon == null) { - // These are only cached per object - long hIcon = extractIcon(getParentIShellFolder(), getRelativePIDL(), getLargeIcon); - icon = makeIcon(hIcon, getLargeIcon); - disposeIcon(hIcon); - } - + }); if (getLargeIcon) { largeIcon = icon; } else { smallIcon = icon; } } - if (icon == null) { - icon = super.getIcon(getLargeIcon); - } return icon; } @@ -969,39 +1113,50 @@ private static final int LVCFMT_CENTER = 2; public ShellFolderColumnInfo[] getFolderColumns() { - ShellFolderColumnInfo[] columns = doGetColumnInfo(getIShellFolder()); + return ShellFolder.getInvoker().invoke(new Callable<ShellFolderColumnInfo[]>() { + public ShellFolderColumnInfo[] call() throws Exception { + ShellFolderColumnInfo[] columns = doGetColumnInfo(getIShellFolder()); - if (columns != null) { - List<ShellFolderColumnInfo> notNullColumns = - new ArrayList<ShellFolderColumnInfo>(); - for (int i = 0; i < columns.length; i++) { - ShellFolderColumnInfo column = columns[i]; - if (column != null) { - column.setAlignment(column.getAlignment() == LVCFMT_RIGHT - ? SwingConstants.RIGHT - : column.getAlignment() == LVCFMT_CENTER - ? SwingConstants.CENTER - : SwingConstants.LEADING); + if (columns != null) { + List<ShellFolderColumnInfo> notNullColumns = + new ArrayList<ShellFolderColumnInfo>(); + for (int i = 0; i < columns.length; i++) { + ShellFolderColumnInfo column = columns[i]; + if (column != null) { + column.setAlignment(column.getAlignment() == LVCFMT_RIGHT + ? SwingConstants.RIGHT + : column.getAlignment() == LVCFMT_CENTER + ? SwingConstants.CENTER + : SwingConstants.LEADING); - column.setComparator(new ColumnComparator(getIShellFolder(), i)); + column.setComparator(new ColumnComparator(getIShellFolder(), i)); - notNullColumns.add(column); + notNullColumns.add(column); + } + } + columns = new ShellFolderColumnInfo[notNullColumns.size()]; + notNullColumns.toArray(columns); } + return columns; } - columns = new ShellFolderColumnInfo[notNullColumns.size()]; - notNullColumns.toArray(columns); - } - return columns; + }); } - public Object getFolderColumnValue(int column) { - return doGetColumnValue(getParentIShellFolder(), getRelativePIDL(), column); + public Object getFolderColumnValue(final int column) { + return ShellFolder.getInvoker().invoke(new Callable<Object>() { + public Object call() throws Exception { + return doGetColumnValue(getParentIShellFolder(), getRelativePIDL(), column); + } + }); } + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private native ShellFolderColumnInfo[] doGetColumnInfo(long iShellFolder2); + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private native Object doGetColumnValue(long parentIShellFolder2, long childPIDL, int columnIdx); + // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private static native int compareIDsByColumn(long pParentIShellFolder, long pidl1, long pidl2, int columnIdx); @@ -1020,17 +1175,20 @@ } // compares 2 objects within this folder by the specified column - public int compare(File o, File o1) { - if (o instanceof Win32ShellFolder2 - && o1 instanceof Win32ShellFolder2) { - // delegates comparison to native method - return compareIDsByColumn(parentIShellFolder, - ((Win32ShellFolder2) o).getRelativePIDL(), - ((Win32ShellFolder2) o1).getRelativePIDL(), - columnIdx); - } - return 0; + public int compare(final File o, final File o1) { + return ShellFolder.getInvoker().invoke(new Callable<Integer>() { + public Integer call() throws Exception { + if (o instanceof Win32ShellFolder2 + && o1 instanceof Win32ShellFolder2) { + // delegates comparison to native method + return compareIDsByColumn(parentIShellFolder, + ((Win32ShellFolder2) o).getRelativePIDL(), + ((Win32ShellFolder2) o1).getRelativePIDL(), + columnIdx); + } + return 0; + } + }); } } - } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java --- a/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java Wed Jul 05 16:51:11 2017 +0200 @@ -31,7 +31,10 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.*; +import java.util.concurrent.*; + import sun.security.action.LoadLibraryAction; import static sun.awt.shell.Win32ShellFolder2.*; @@ -408,4 +411,102 @@ return name1.compareTo(name2); } } + + @Override + protected Invoker createInvoker() { + return new ComInvoker(); + } + + private static class ComInvoker extends ThreadPoolExecutor implements ThreadFactory, ShellFolder.Invoker { + private static Thread comThread; + + private ComInvoker() { + super(1, 1, 0, TimeUnit.DAYS, new LinkedBlockingQueue<Runnable>()); + allowCoreThreadTimeOut(false); + setThreadFactory(this); + final Runnable shutdownHook = new Runnable() { + public void run() { + AccessController.doPrivileged(new PrivilegedAction<Void>() { + public Void run() { + shutdownNow(); + return null; + } + }); + } + }; + AccessController.doPrivileged(new PrivilegedAction<Void>() { + public Void run() { + Runtime.getRuntime().addShutdownHook( + new Thread(shutdownHook) + ); + return null; + } + }); + } + + public synchronized Thread newThread(final Runnable task) { + final Runnable comRun = new Runnable() { + public void run() { + try { + initializeCom(); + task.run(); + } finally { + uninitializeCom(); + } + } + }; + comThread = + AccessController.doPrivileged( + new PrivilegedAction<Thread>() { + public Thread run() { + /* The thread must be a member of a thread group + * which will not get GCed before VM exit. + * Make its parent the top-level thread group. + */ + ThreadGroup tg = Thread.currentThread().getThreadGroup(); + for (ThreadGroup tgn = tg; + tgn != null; + tg = tgn, tgn = tg.getParent()); + Thread thread = new Thread(tg, comRun, "Swing-Shell"); + thread.setDaemon(true); + return thread; + } + } + ); + return comThread; + } + + public <T> T invoke(Callable<T> task) { + try { + T result; + if (Thread.currentThread() == comThread) { + // if it's already called from the COM + // thread, we don't need to delegate the task + result = task.call(); + } else { + Future<T> future = submit(task); + try { + result = future.get(); + } catch (InterruptedException e) { + result = null; + future.cancel(true); + } + } + return result; + } catch (Exception e) { + Throwable cause = (e instanceof ExecutionException) ? e.getCause() : e; + if (cause instanceof RuntimeException) { + throw (RuntimeException) cause; + } + if (cause instanceof Error) { + throw (Error) cause; + } + throw new RuntimeException(cause); + } + } + } + + static native void initializeCom(); + + static native void uninitializeCom(); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/windows/TranslucentWindowPainter.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/windows/classes/sun/awt/windows/TranslucentWindowPainter.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,398 @@ +/* + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ +package sun.awt.windows; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.GraphicsConfiguration; +import java.awt.Image; +import java.awt.Window; +import java.awt.image.BufferedImage; +import java.awt.image.DataBufferInt; +import java.awt.image.VolatileImage; +import java.lang.ref.WeakReference; +import java.security.AccessController; +import sun.awt.image.BufImgSurfaceData; +import sun.java2d.DestSurfaceProvider; +import sun.java2d.InvalidPipeException; +import sun.java2d.Surface; +import sun.java2d.pipe.RenderQueue; +import sun.java2d.pipe.hw.AccelGraphicsConfig; +import sun.java2d.pipe.hw.AccelSurface; +import sun.security.action.GetPropertyAction; + +import static java.awt.image.VolatileImage.*; +import static java.awt.Transparency.*; +import static sun.java2d.pipe.hw.AccelSurface.*; +import static sun.java2d.pipe.hw.ContextCapabilities.*; + +/** + * This class handles the updates of the non-opaque windows. + * The window associated with the peer is updated either given an image or + * the window is repainted to an internal buffer which is then used to update + * the window. + * + * Note: this class does not attempt to be thread safe, it is expected to be + * called from a single thread (EDT). + */ +public abstract class TranslucentWindowPainter { + + protected Window window; + protected WWindowPeer peer; + + // REMIND: we probably would want to remove this later + private static final boolean forceOpt = + Boolean.valueOf(AccessController.doPrivileged( + new GetPropertyAction("sun.java2d.twp.forceopt", "false"))); + private static final boolean forceSW = + Boolean.valueOf(AccessController.doPrivileged( + new GetPropertyAction("sun.java2d.twp.forcesw", "false"))); + + /** + * Creates an instance of the painter for particular peer. + */ + public static TranslucentWindowPainter createInstance(WWindowPeer peer) { + GraphicsConfiguration gc = peer.getGraphicsConfiguration(); + if (!forceSW && gc instanceof AccelGraphicsConfig) { + String gcName = gc.getClass().getSimpleName(); + AccelGraphicsConfig agc = (AccelGraphicsConfig)gc; + // this is a heuristic to check that we have a pcix board + // (those have higher transfer rate from gpu to cpu) + if ((agc.getContextCapabilities().getCaps() & CAPS_PS30) != 0 || + forceOpt) + { + // we check for name to avoid loading classes unnecessarily if + // a pipeline isn't enabled + if (gcName.startsWith("D3D")) { + return new VIOptD3DWindowPainter(peer); + } else if (forceOpt && gcName.startsWith("WGL")) { + // on some boards (namely, ATI, even on pcix bus) ogl is + // very slow reading pixels back so for now it is disabled + // unless forced + return new VIOptWGLWindowPainter(peer); + } + } + } + return new BIWindowPainter(peer); + } + + protected TranslucentWindowPainter(WWindowPeer peer) { + this.peer = peer; + this.window = (Window)peer.getTarget(); + } + + /** + * Creates (if needed), clears and returns the buffer for this painter. + */ + protected abstract Image getBackBuffer(); + + /** + * Updates the the window associated with this painter with the contents + * of the passed image. + * The image can not be null, and NPE will be thrown if it is. + */ + protected abstract boolean update(Image bb); + + /** + * Flushes the resources associated with the painter. They will be + * recreated as needed. + */ + public abstract void flush(); + + /** + * Updates the window associated with the painter given the passed image. + * If the passed image is null the painter will use its own buffer for + * rendering the contents of the window into it and updating the window. + * + * If the passed buffer has dimensions different from the window, it is + * copied into the internal buffer first and the latter is used to update + * the window. + * + * @param bb the image to update the non opaque window with, or null. + * If not null, the image must be of ARGB_PRE type. + */ + public void updateWindow(Image bb) { + boolean done = false; + if (bb != null && (window.getWidth() != bb.getWidth(null) || + window.getHeight() != bb.getHeight(null))) + { + Image ourBB = getBackBuffer(); + Graphics2D g = (Graphics2D)ourBB.getGraphics(); + g.drawImage(bb, 0, 0, null); + g.dispose(); + bb = ourBB; + } + do { + if (bb == null) { + bb = getBackBuffer(); + Graphics2D g = (Graphics2D)bb.getGraphics(); + try { + window.paintAll(g); + } finally { + g.dispose(); + } + } + + peer.paintAppletWarning((Graphics2D)bb.getGraphics(), + bb.getWidth(null), bb.getHeight(null)); + + done = update(bb); + // in case they passed us a lost VI, next time around we'll use our + // own bb because we can not validate and restore the contents of + // their VI + if (!done) { + bb = null; + } + } while (!done); + } + + private static final Image clearImage(Image bb) { + Graphics2D g = (Graphics2D)bb.getGraphics(); + int w = bb.getWidth(null); + int h = bb.getHeight(null); + + g.setComposite(AlphaComposite.Src); + g.setColor(new Color(0, 0, 0, 0)); + g.fillRect(0, 0, w, h); + + return bb; + } + + /** + * A painter which uses BufferedImage as the internal buffer. The window + * is painted into this buffer, and the contents then are uploaded + * into the layered window. + * + * This painter handles all types of images passed to its paint(Image) + * method (VI, BI, regular Images). + */ + private static class BIWindowPainter extends TranslucentWindowPainter { + private WeakReference<BufferedImage> biRef; + + protected BIWindowPainter(WWindowPeer peer) { + super(peer); + } + + private BufferedImage getBIBackBuffer() { + int w = window.getWidth(); + int h = window.getHeight(); + BufferedImage bb = biRef == null ? null : biRef.get(); + if (bb == null || bb.getWidth() != w || bb.getHeight() != h) { + if (bb != null) { + bb.flush(); + bb = null; + } + bb = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB_PRE); + biRef = new WeakReference<BufferedImage>(bb); + } + return (BufferedImage)clearImage(bb); + } + + @Override + protected Image getBackBuffer() { + return getBIBackBuffer(); + } + + @Override + protected boolean update(Image bb) { + VolatileImage viBB = null; + + if (bb instanceof BufferedImage) { + BufferedImage bi = (BufferedImage)bb; + int data[] = + ((DataBufferInt)bi.getRaster().getDataBuffer()).getData(); + peer.updateWindowImpl(data, bi.getWidth(), bi.getHeight()); + return true; + } else if (bb instanceof VolatileImage) { + viBB = (VolatileImage)bb; + if (bb instanceof DestSurfaceProvider) { + Surface s = ((DestSurfaceProvider)bb).getDestSurface(); + if (s instanceof BufImgSurfaceData) { + // the image is probably lost, upload the data from the + // backup surface to avoid creating another heap-based + // image (the parent's buffer) + int w = viBB.getWidth(); + int h = viBB.getHeight(); + BufImgSurfaceData bisd = (BufImgSurfaceData)s; + int data[] = ((DataBufferInt)bisd.getRaster(0,0,w,h). + getDataBuffer()).getData(); + peer.updateWindowImpl(data, w, h); + return true; + } + } + } + + // copy the passed image into our own buffer, then upload + BufferedImage bi = getBIBackBuffer(); + Graphics2D g = (Graphics2D)bi.getGraphics(); + g.setComposite(AlphaComposite.Src); + g.drawImage(bb, 0, 0, null); + + int data[] = + ((DataBufferInt)bi.getRaster().getDataBuffer()).getData(); + peer.updateWindowImpl(data, bi.getWidth(), bi.getHeight()); + + return (viBB != null ? !viBB.contentsLost() : true); + } + + public void flush() { + if (biRef != null) { + biRef.clear(); + } + } + } + + /** + * A version of the painter which uses VolatileImage as the internal buffer. + * The window is painted into this VI and then copied into the parent's + * Java heap-based buffer (which is then uploaded to the layered window) + */ + private static class VIWindowPainter extends BIWindowPainter { + private WeakReference<VolatileImage> viRef; + + protected VIWindowPainter(WWindowPeer peer) { + super(peer); + } + + @Override + protected Image getBackBuffer() { + int w = window.getWidth(); + int h = window.getHeight(); + GraphicsConfiguration gc = peer.getGraphicsConfiguration(); + + VolatileImage viBB = viRef == null ? null : viRef.get(); + + if (viBB == null || viBB.getWidth() != w || viBB.getHeight() != h || + viBB.validate(gc) == IMAGE_INCOMPATIBLE) + { + if (viBB != null) { + viBB.flush(); + viBB = null; + } + + if (gc instanceof AccelGraphicsConfig) { + AccelGraphicsConfig agc = ((AccelGraphicsConfig)gc); + viBB = agc.createCompatibleVolatileImage(w, h, + TRANSLUCENT, + RT_PLAIN); + } + if (viBB == null) { + viBB = gc.createCompatibleVolatileImage(w, h, TRANSLUCENT); + } + viBB.validate(gc); + viRef = new WeakReference<VolatileImage>(viBB); + } + + return clearImage(viBB); + } + + @Override + public void flush() { + if (viRef != null) { + VolatileImage viBB = viRef.get(); + if (viBB != null) { + viBB.flush(); + viBB = null; + } + viRef.clear(); + } + } + } + + /** + * Optimized version of hw painter. Uses VolatileImages for the + * buffer, and uses an optimized path to pull the data from those into + * the layered window, bypassing Java heap-based image. + */ + private abstract static class VIOptWindowPainter extends VIWindowPainter { + + protected VIOptWindowPainter(WWindowPeer peer) { + super(peer); + } + + protected abstract boolean updateWindowAccel(long psdops, int w, int h); + + @Override + protected boolean update(Image bb) { + if (bb instanceof DestSurfaceProvider) { + Surface s = ((DestSurfaceProvider)bb).getDestSurface(); + if (s instanceof AccelSurface) { + final int w = bb.getWidth(null); + final int h = bb.getHeight(null); + final boolean arr[] = { false }; + final AccelSurface as = (AccelSurface)s; + RenderQueue rq = as.getContext().getRenderQueue(); + rq.lock(); + try { + as.getContext().validateContext(as); + rq.flushAndInvokeNow(new Runnable() { + public void run() { + long psdops = as.getNativeOps(); + arr[0] = updateWindowAccel(psdops, w, h); + } + }); + } catch (InvalidPipeException e) { + // ignore, false will be returned + } finally { + rq.unlock(); + } + return arr[0]; + } + } + return super.update(bb); + } + } + + private static class VIOptD3DWindowPainter extends VIOptWindowPainter { + + protected VIOptD3DWindowPainter(WWindowPeer peer) { + super(peer); + } + + @Override + protected boolean updateWindowAccel(long psdops, int w, int h) { + // note: this method is executed on the toolkit thread, no sync is + // necessary at the native level, and a pointer to peer can be used + return sun.java2d.d3d.D3DSurfaceData. + updateWindowAccelImpl(psdops, peer.getData(), w, h); + } + } + + private static class VIOptWGLWindowPainter extends VIOptWindowPainter { + + protected VIOptWGLWindowPainter(WWindowPeer peer) { + super(peer); + } + + @Override + protected boolean updateWindowAccel(long psdops, int w, int h) { + // note: part of this method which deals with GDI will be on the + // toolkit thread + return sun.java2d.opengl.WGLSurfaceData. + updateWindowAccelImpl(psdops, peer, w, h); + } + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/windows/WCanvasPeer.java --- a/jdk/src/windows/classes/sun/awt/windows/WCanvasPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/awt/windows/WCanvasPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,6 +28,7 @@ import java.awt.peer.*; import java.lang.ref.WeakReference; import java.lang.reflect.Method; +import sun.awt.AWTAccessor; import sun.awt.ComponentAccessor; import sun.awt.SunToolkit; import sun.awt.Win32GraphicsDevice; @@ -37,44 +38,12 @@ private boolean eraseBackground; - Method resetGCMethod; - // Toolkit & peer internals WCanvasPeer(Component target) { super(target); } - /* - * From the DisplayChangedListener interface. - * - * Overrides WComponentPeer version because Canvases can be created with - * a non-defulat GraphicsConfiguration, which is no longer valid. - * Up-called for other windows peer instances (WPanelPeer, WWindowPeer). - */ - public void displayChanged() { - clearLocalGC(); - resetTargetGC(); - super.displayChanged(); - } - - /* - * Reset the graphicsConfiguration member of our target Component. - * Component.resetGC() is a package-private method, so we have to call it - * through reflection. - */ - public void resetTargetGC() { - ComponentAccessor.resetGC((Component)target); - } - - /* - * Clears the peer's winGraphicsConfig member. - * Overridden by WWindowPeer, which shouldn't have a null winGraphicsConfig. - */ - void clearLocalGC() { - winGraphicsConfig = null; - } - native void create(WComponentPeer parent); void initialize() { @@ -110,16 +79,20 @@ } public void print(Graphics g) { - Dimension d = ((Component)target).getSize(); - if (g instanceof Graphics2D || - g instanceof sun.awt.Graphics2Delegate) { - // background color is setup correctly, so just use clearRect - g.clearRect(0, 0, d.width, d.height); - } else { - // emulate clearRect - g.setColor(((Component)target).getBackground()); - g.fillRect(0, 0, d.width, d.height); - g.setColor(((Component)target).getForeground()); + if (!(target instanceof Window) || + AWTAccessor.getWindowAccessor().isOpaque((Window)target)) + { + Dimension d = ((Component)target).getSize(); + if (g instanceof Graphics2D || + g instanceof sun.awt.Graphics2Delegate) { + // background color is setup correctly, so just use clearRect + g.clearRect(0, 0, d.width, d.height); + } else { + // emulate clearRect + g.setColor(((Component)target).getBackground()); + g.fillRect(0, 0, d.width, d.height); + g.setColor(((Component)target).getForeground()); + } } super.print(g); } @@ -147,4 +120,10 @@ */ private native void setNativeBackgroundErase(boolean doErase, boolean doEraseOnResize); + + public GraphicsConfiguration getAppropriateGraphicsConfiguration( + GraphicsConfiguration gc) + { + return gc; + } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/windows/WChoicePeer.java --- a/jdk/src/windows/classes/sun/awt/windows/WChoicePeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/awt/windows/WChoicePeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -27,6 +27,10 @@ import java.awt.*; import java.awt.peer.*; import java.awt.event.ItemEvent; +import java.awt.event.WindowEvent; +import java.awt.event.WindowListener; +import java.awt.event.WindowAdapter; +import sun.awt.SunToolkit; class WChoicePeer extends WComponentPeer implements ChoicePeer { @@ -70,6 +74,8 @@ public synchronized native void reshape(int x, int y, int width, int height); + private WindowListener windowListener; + // Toolkit & peer internals WChoicePeer(Choice target) { @@ -91,9 +97,38 @@ select(opt.getSelectedIndex()); } } + + Window parentWindow = SunToolkit.getContainingWindow((Component)target); + if (parentWindow != null) { + WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer(); + if (wpeer != null) { + windowListener = new WindowAdapter() { + public void windowIconified(WindowEvent e) { + closeList(); + } + public void windowClosing(WindowEvent e) { + closeList(); + } + }; + wpeer.addWindowListener(windowListener); + } + } super.initialize(); } + protected void disposeImpl() { + // TODO: we should somehow reset the listener when the choice + // is moved to another toplevel without destroying its peer. + Window parentWindow = SunToolkit.getContainingWindow((Component)target); + if (parentWindow != null) { + WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer(); + if (wpeer != null) { + wpeer.removeWindowListener(windowListener); + } + } + super.disposeImpl(); + } + // native callbacks void handleAction(final int index) { @@ -121,4 +156,5 @@ return getMinimumSize(); } + native void closeList(); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/windows/WComponentPeer.java --- a/jdk/src/windows/classes/sun/awt/windows/WComponentPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/awt/windows/WComponentPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,27 +38,32 @@ import java.awt.event.PaintEvent; import java.awt.event.InvocationEvent; import java.awt.event.KeyEvent; +import java.awt.event.FocusEvent; +import java.awt.event.MouseEvent; +import java.awt.event.MouseWheelEvent; +import java.awt.event.InputEvent; import sun.awt.Win32GraphicsConfig; +import sun.awt.Win32GraphicsEnvironment; import sun.java2d.InvalidPipeException; import sun.java2d.SurfaceData; -import sun.java2d.d3d.D3DScreenUpdateManager; -import static sun.java2d.d3d.D3DSurfaceData.*; import sun.java2d.ScreenUpdateManager; +import sun.java2d.d3d.D3DSurfaceData; import sun.java2d.opengl.OGLSurfaceData; +import sun.java2d.pipe.Region; import sun.awt.DisplayChangedListener; import sun.awt.PaintEventDispatcher; +import sun.awt.SunToolkit; import sun.awt.event.IgnorePaintEvent; import java.awt.dnd.DropTarget; import java.awt.dnd.peer.DropTargetPeer; import sun.awt.ComponentAccessor; - import java.util.logging.*; public abstract class WComponentPeer extends WObjectPeer - implements ComponentPeer, DropTargetPeer, DisplayChangedListener + implements ComponentPeer, DropTargetPeer { /** * Handle to native window @@ -67,6 +72,7 @@ private static final Logger log = Logger.getLogger("sun.awt.windows.WComponentPeer"); private static final Logger shapeLog = Logger.getLogger("sun.awt.windows.shape.WComponentPeer"); + private static final Logger focusLog = Logger.getLogger("sun.awt.windows.focus.WComponentPeer"); // ComponentPeer implementation SurfaceData surfaceData; @@ -186,7 +192,7 @@ cont.invalidate(); cont.validate(); - if (surfaceData instanceof D3DWindowSurfaceData || + if (surfaceData instanceof D3DSurfaceData.D3DWindowSurfaceData || surfaceData instanceof OGLSurfaceData) { // When OGL or D3D is enabled, it is necessary to @@ -258,7 +264,7 @@ int[] pix = createPrintedPixels(0, startY, totalW, h); if (pix != null) { BufferedImage bim = new BufferedImage(totalW, h, - BufferedImage.TYPE_INT_RGB); + BufferedImage.TYPE_INT_ARGB); bim.setRGB(0, 0, totalW, h, pix, 0, totalW); g.drawImage(bim, 0, startY, null); bim.flush(); @@ -295,14 +301,35 @@ // on handling '\n' to prevent it from being passed to native code public boolean handleJavaKeyEvent(KeyEvent e) { return false; } + public void handleJavaMouseEvent(MouseEvent e) { + switch (e.getID()) { + case MouseEvent.MOUSE_PRESSED: + // Note that Swing requests focus in its own mouse event handler. + if (target == e.getSource() && + !((Component)target).isFocusOwner() && + WKeyboardFocusManagerPeer.shouldFocusOnClick((Component)target)) + { + WKeyboardFocusManagerPeer.requestFocusFor((Component)target, + CausedFocusEvent.Cause.MOUSE_EVENT); + } + break; + } + } + native void nativeHandleEvent(AWTEvent e); public void handleEvent(AWTEvent e) { int id = e.getID(); - if (((Component)target).isEnabled() && (e instanceof KeyEvent) && !((KeyEvent)e).isConsumed()) { - if (handleJavaKeyEvent((KeyEvent)e)) { - return; + if ((e instanceof InputEvent) && !((InputEvent)e).isConsumed() && + ((Component)target).isEnabled()) + { + if (e instanceof MouseEvent && !(e instanceof MouseWheelEvent)) { + handleJavaMouseEvent((MouseEvent) e); + } else if (e instanceof KeyEvent) { + if (handleJavaKeyEvent((KeyEvent)e)) { + return; + } } } @@ -318,6 +345,9 @@ paintArea.paint(target,shouldClearRectBeforePaint()); } return; + case FocusEvent.FOCUS_LOST: + case FocusEvent.FOCUS_GAINED: + handleJavaFocusEvent((FocusEvent)e); default: break; } @@ -326,6 +356,13 @@ nativeHandleEvent(e); } + void handleJavaFocusEvent(FocusEvent fe) { + if (focusLog.isLoggable(Level.FINER)) focusLog.finer(fe.toString()); + setFocus(fe.getID() == FocusEvent.FOCUS_GAINED); + } + + native void setFocus(boolean doSetFocus); + public Dimension getMinimumSize() { return ((Component)target).getSize(); } @@ -451,15 +488,8 @@ } } - /** - * From the DisplayChangedListener interface. - * - * Called after a change in the display mode. This event - * triggers replacing the surfaceData object (since that object - * reflects the current display depth information, which has - * just changed). - */ - public void displayChanged() { + public void updateGraphicsData(GraphicsConfiguration gc) { + winGraphicsConfig = (Win32GraphicsConfig)gc; try { replaceSurfaceData(); } catch (InvalidPipeException e) { @@ -467,13 +497,6 @@ } } - /** - * Part of the DisplayChangedListener interface: components - * do not need to react to this event - */ - public void paletteChanged() { - } - //This will return null for Components not yet added to a Container public ColorModel getColorModel() { GraphicsConfiguration gc = getGraphicsConfiguration(); @@ -585,22 +608,64 @@ WGlobalCursorManager.getCursorManager().updateCursorImmediately(); } - native static boolean processSynchronousLightweightTransfer(Component heavyweight, Component descendant, - boolean temporary, boolean focusedWindowChangeAllowed, - long time); - public boolean requestFocus - (Component lightweightChild, boolean temporary, - boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause) { - if (processSynchronousLightweightTransfer((Component)target, lightweightChild, temporary, - focusedWindowChangeAllowed, time)) { + // TODO: consider moving it to KeyboardFocusManagerPeerImpl + public boolean requestFocus(Component lightweightChild, boolean temporary, + boolean focusedWindowChangeAllowed, long time, + CausedFocusEvent.Cause cause) + { + if (WKeyboardFocusManagerPeer. + processSynchronousLightweightTransfer((Component)target, lightweightChild, temporary, + focusedWindowChangeAllowed, time)) + { return true; - } else { - return _requestFocus(lightweightChild, temporary, focusedWindowChangeAllowed, time, cause); } + + int result = WKeyboardFocusManagerPeer + .shouldNativelyFocusHeavyweight((Component)target, lightweightChild, + temporary, focusedWindowChangeAllowed, + time, cause); + + switch (result) { + case WKeyboardFocusManagerPeer.SNFH_FAILURE: + return false; + case WKeyboardFocusManagerPeer.SNFH_SUCCESS_PROCEED: + if (focusLog.isLoggable(Level.FINER)) { + focusLog.finer("Proceeding with request to " + lightweightChild + " in " + target); + } + Window parentWindow = SunToolkit.getContainingWindow((Component)target); + if (parentWindow == null) { + return rejectFocusRequestHelper("WARNING: Parent window is null"); + } + WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer(); + if (wpeer == null) { + return rejectFocusRequestHelper("WARNING: Parent window's peer is null"); + } + boolean res = wpeer.requestWindowFocus(cause); + + if (focusLog.isLoggable(Level.FINER)) focusLog.finer("Requested window focus: " + res); + // If parent window can be made focused and has been made focused(synchronously) + // then we can proceed with children, otherwise we retreat. + if (!(res && parentWindow.isFocused())) { + return rejectFocusRequestHelper("Waiting for asynchronous processing of the request"); + } + return WKeyboardFocusManagerPeer.deliverFocus(lightweightChild, + (Component)target, + temporary, + focusedWindowChangeAllowed, + time, cause); + + case WKeyboardFocusManagerPeer.SNFH_SUCCESS_HANDLED: + // Either lightweight or excessive request - all events are generated. + return true; + } + return false; } - public native boolean _requestFocus - (Component lightweightChild, boolean temporary, - boolean focusedWindowChangeAllowed, long time, CausedFocusEvent.Cause cause); + + private boolean rejectFocusRequestHelper(String logMsg) { + if (focusLog.isLoggable(Level.FINER)) focusLog.finer(logMsg); + WKeyboardFocusManagerPeer.removeLastFocusRequest((Component)target); + return false; + } public Image createImage(ImageProducer producer) { return new ToolkitImage(producer); @@ -713,7 +778,7 @@ * NOTE: This is called on the privileged toolkit thread. Do not * call directly into user code using this thread! */ - void handlePaint(int x, int y, int w, int h) { + public void handlePaint(int x, int y, int w, int h) { postPaintIfNecessary(x, y, w, h); } @@ -731,9 +796,12 @@ * Post an event. Queue it for execution by the callback thread. */ void postEvent(AWTEvent event) { + preprocessPostEvent(event); WToolkit.postEvent(WToolkit.targetToAppContext(target), event); } + void preprocessPostEvent(AWTEvent event) {} + // Routines to support deferred window positioning. public void beginLayout() { // Skip all painting till endLayout @@ -895,9 +963,29 @@ public void setBoundsOperation(int operation) { } + /** + * Returns whether this component is capable of being hw accelerated. + * More specifically, whether rendering to this component or a + * BufferStrategy's back-buffer for this component can be hw accelerated. + * + * Conditions which could prevent hw acceleration include the toplevel + * window containing this component being + * {@link com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT TRANSLUCENT}. + * + * @return {@code true} if this component is capable of being hw + * accelerated, {@code false} otherwise + * @see com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT + */ + public boolean isAccelCapable() { + boolean isTranslucent = + SunToolkit.isContainingTopLevelTranslucent((Component)target); + // D3D/OGL and translucent windows interacted poorly in Windows XP; + // these problems are no longer present in Vista + return !isTranslucent || Win32GraphicsEnvironment.isVistaOS(); + } native void setRectangularShape(int lox, int loy, int hix, int hiy, - sun.java2d.pipe.Region region); + Region region); // REMIND: Temp workaround for issues with using HW acceleration @@ -915,41 +1003,10 @@ } /** - * Returns whether this component is capable of being hw accelerated. - * More specifically, whether rendering to this component or a - * BufferStrategy's back-buffer for this component can be hw accelerated. - * - * Conditions which could prevent hw acceleration include the toplevel - * window containing this component being - * {@link com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT TRANSLUCENT}. - * - * @return {@code true} if this component is capable of being hw - * accelerated, {@code false} otherwise - * @see com.sun.awt.AWTUtilities.Translucency#TRANSLUCENT - */ - public boolean isAccelCapable() { - // REMIND: Temp workaround for issues with using HW acceleration - // in the browser on Vista when DWM is enabled - if (!isContainingTopLevelAccelCapable((Component)target)) { - return false; - } - - // REMIND: translucent windows support-related -/* - boolean isTranslucent = - SunToolkit.isContainingTopLevelTranslucent((Component)target); - // D3D/OGL and translucent windows interacted poorly in Windows XP; - // these problems are no longer present in Vista - return !isTranslucent || Win32GraphicsEnvironment.isVistaOS(); -*/ - return true; - } - - /** * Applies the shape to the native component window. * @since 1.7 */ - public void applyShape(sun.java2d.pipe.Region shape) { + public void applyShape(Region shape) { if (shapeLog.isLoggable(Level.FINER)) { shapeLog.finer( "*** INFO: Setting shape: PEER: " + this @@ -965,4 +1022,15 @@ } } + /** + * Lowers this component at the bottom of the above component. If the above parameter + * is null then the method places this component at the top of the Z-order. + */ + public void setZOrder(ComponentPeer above) { + long aboveHWND = (above != null) ? ((WComponentPeer)above).getHWnd() : 0; + + setZOrder(aboveHWND); + } + + private native void setZOrder(long above); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/windows/WFileDialogPeer.java --- a/jdk/src/windows/classes/sun/awt/windows/WFileDialogPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/awt/windows/WFileDialogPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -225,23 +225,16 @@ public void addDropTarget(DropTarget dt) {} public void removeDropTarget(DropTarget dt) {} public void updateFocusableWindowState() {} + public void setZOrder(ComponentPeer above) {} /** * Initialize JNI field and method ids */ private static native void initIDs(); - /** - * WFileDialogPeer doesn't have native pData so we don't do restack on it - * @see java.awt.peer.ContainerPeer#restack - */ - public void restack() { - } - - /** - * @see java.awt.peer.ContainerPeer#isRestackSupported - */ - public boolean isRestackSupported() { - return false; - } + // The effects are not supported for system dialogs. + public void applyShape(sun.java2d.pipe.Region shape) {} + public void setOpacity(float opacity) {} + public void setOpaque(boolean isOpaque) {} + public void updateWindow(java.awt.image.BufferedImage backBuffer) {} } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/windows/WFramePeer.java --- a/jdk/src/windows/classes/sun/awt/windows/WFramePeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/awt/windows/WFramePeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -25,27 +25,46 @@ package sun.awt.windows; import java.util.Vector; + import java.awt.*; import java.awt.peer.*; import java.awt.image.ImageObserver; -import sun.awt.image.ImageRepresentation; -import sun.awt.image.IntegerComponentRaster; -import sun.awt.image.ToolkitImage; + import java.awt.image.Raster; import java.awt.image.DataBuffer; import java.awt.image.DataBufferInt; import java.awt.image.BufferedImage; + +import java.awt.image.ColorModel; + +import sun.awt.image.ImageRepresentation; +import sun.awt.image.IntegerComponentRaster; +import sun.awt.image.ToolkitImage; import sun.awt.im.*; import sun.awt.Win32GraphicsDevice; -import java.awt.image.ColorModel; - +import sun.awt.AWTAccessor; class WFramePeer extends WWindowPeer implements FramePeer { + static { + initIDs(); + } + + // initialize JNI field and method IDs + private static native void initIDs(); + // FramePeer implementation public native void setState(int state); public native int getState(); + // sync target and peer + public void setExtendedState(int state) { + AWTAccessor.getFrameAccessor().setExtendedState((Frame)target, state); + } + public int getExtendedState() { + return AWTAccessor.getFrameAccessor().getExtendedState((Frame)target); + } + // Convenience methods to save us from trouble of extracting // Rectangle fields in native code. private native void setMaximizedBounds(int x, int y, int w, int h); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,75 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +package sun.awt.windows; + +import java.awt.KeyboardFocusManager; +import java.awt.Window; +import java.awt.Component; +import java.awt.peer.ComponentPeer; +import sun.awt.KeyboardFocusManagerPeerImpl; +import sun.awt.CausedFocusEvent; + +class WKeyboardFocusManagerPeer extends KeyboardFocusManagerPeerImpl { + static native void setNativeFocusOwner(ComponentPeer peer); + static native Component getNativeFocusOwner(); + static native Window getNativeFocusedWindow(); + + WKeyboardFocusManagerPeer(KeyboardFocusManager manager) { + super(manager); + } + + @Override + public void setCurrentFocusOwner(Component comp) { + setNativeFocusOwner(comp != null ? comp.getPeer() : null); + } + + @Override + public Component getCurrentFocusOwner() { + return getNativeFocusOwner(); + } + + @Override + public Window getCurrentFocusedWindow() { + return getNativeFocusedWindow(); + } + + public static boolean deliverFocus(Component lightweightChild, + Component target, + boolean temporary, + boolean focusedWindowChangeAllowed, + long time, + CausedFocusEvent.Cause cause) + { + // TODO: do something to eliminate this forwarding + return KeyboardFocusManagerPeerImpl.deliverFocus(lightweightChild, + target, + temporary, + focusedWindowChangeAllowed, + time, + cause, + getNativeFocusOwner()); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/windows/WPanelPeer.java --- a/jdk/src/windows/classes/sun/awt/windows/WPanelPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/awt/windows/WPanelPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -100,34 +100,6 @@ return getInsets(); } - /* - * From the DisplayChangedListener interface. Often is - * up-called from a WWindowPeer instance. - */ - public void displayChanged() { - super.displayChanged(); - displayChanged((Container)target); - } - - /* - * Recursively iterates through all the HW and LW children - * of the container and calls displayChanged() for HW peers. - * Iteration through children peers only is not enough as the - * displayChanged notification may not be propagated to HW - * components inside LW containers, see 4452373 for details. - */ - private static void displayChanged(Container target) { - Component children[] = ((Container)target).getComponents(); - for (Component child : children) { - ComponentPeer cpeer = child.getPeer(); - if (cpeer instanceof WComponentPeer) { - ((WComponentPeer)cpeer).displayChanged(); - } else if (child instanceof Container) { - displayChanged((Container)child); - } - } - } - private native void pRestack(Object[] peers); private void restack(Container cont, Vector peers) { for (int i = 0; i < cont.getComponentCount(); i++) { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/windows/WPrintDialogPeer.java --- a/jdk/src/windows/classes/sun/awt/windows/WPrintDialogPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/awt/windows/WPrintDialogPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1999-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1999-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ import java.awt.*; import java.awt.peer.DialogPeer; +import java.awt.peer.ComponentPeer; import java.awt.dnd.DropTarget; import java.util.Vector; import sun.awt.AppContext; @@ -137,23 +138,16 @@ void invalidate(int x, int y, int width, int height) {} public void addDropTarget(DropTarget dt) {} public void removeDropTarget(DropTarget dt) {} + public void setZOrder(ComponentPeer above) {} /** * Initialize JNI field and method ids */ private static native void initIDs(); - /** - * WPrintDialogPeer doesn't have native pData so we don't do restack on it - * @see java.awt.peer.ContainerPeer#restack - */ - public void restack() { - } - - /** - * @see java.awt.peer.ContainerPeer#isRestackSupported - */ - public boolean isRestackSupported() { - return false; - } + // The effects are not supported for system dialogs. + public void applyShape(sun.java2d.pipe.Region shape) {} + public void setOpacity(float opacity) {} + public void setOpaque(boolean isOpaque) {} + public void updateWindow(java.awt.image.BufferedImage backBuffer) {} } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/windows/WScrollPanePeer.java --- a/jdk/src/windows/classes/sun/awt/windows/WScrollPanePeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/awt/windows/WScrollPanePeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -269,10 +269,4 @@ } } - /** - * @see java.awt.peer.ContainerPeer#restack - */ - public void restack() { - // Since ScrollPane can only have one child its restacking does nothing. - } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/windows/WToolkit.java --- a/jdk/src/windows/classes/sun/awt/windows/WToolkit.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/awt/windows/WToolkit.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -494,6 +494,12 @@ return true; } + public KeyboardFocusManagerPeer createKeyboardFocusManagerPeer(KeyboardFocusManager manager) + throws HeadlessException + { + return new WKeyboardFocusManagerPeer(manager); + } + protected native void setDynamicLayoutNative(boolean b); public void setDynamicLayout(boolean b) { @@ -975,4 +981,34 @@ public boolean areExtraMouseButtonsEnabled() throws HeadlessException { return areExtraMouseButtonsEnabled; } + + @Override + public boolean isWindowOpacitySupported() { + // supported in Win2K and later + return true; + } + + @Override + public boolean isWindowShapingSupported() { + return true; + } + + @Override + public boolean isWindowTranslucencySupported() { + // supported in Win2K and later + return true; + } + + @Override + public boolean isTranslucencyCapable(GraphicsConfiguration gc) { + //XXX: worth checking if 8-bit? Anyway, it doesn't hurt. + return true; + } + + // On MS Windows one must use the peer.updateWindow() to implement + // non-opaque windows. + @Override + public boolean needUpdateWindow() { + return true; + } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/awt/windows/WWindowPeer.java --- a/jdk/src/windows/classes/sun/awt/windows/WWindowPeer.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/awt/windows/WWindowPeer.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,19 +31,19 @@ import java.beans.*; -import java.lang.ref.*; import java.lang.reflect.*; -import java.security.*; - import java.util.*; import java.util.List; import java.util.logging.*; import sun.awt.*; -import sun.awt.image.*; + +import sun.java2d.pipe.Region; -public class WWindowPeer extends WPanelPeer implements WindowPeer { +public class WWindowPeer extends WPanelPeer implements WindowPeer, + DisplayChangedListener +{ private static final Logger log = Logger.getLogger("sun.awt.windows.WWindowPeer"); private static final Logger screenLog = Logger.getLogger("sun.awt.windows.screen.WWindowPeer"); @@ -52,6 +52,10 @@ // extends WWindowPeer, not WDialogPeer private WWindowPeer modalBlocker = null; + private boolean isOpaque; + + private volatile TranslucentWindowPainter painter; + /* * A key used for storing a list of active windows in AppContext. The value * is a list of windows, sorted by the time of activation: later a window is @@ -73,6 +77,12 @@ private final static PropertyChangeListener guiDisposedListener = new GuiDisposedListener(); + /* + * Called (on the Toolkit thread) before the appropriate + * WindowStateEvent is posted to the EventQueue. + */ + private WindowListener windowListener; + /** * Initialize JNI field IDs */ @@ -91,9 +101,18 @@ l.remove(this); } } + // Remove ourself from the Map of DisplayChangeListeners GraphicsConfiguration gc = getGraphicsConfiguration(); ((Win32GraphicsDevice)gc.getDevice()).removeDisplayChangedListener(this); + + TranslucentWindowPainter currentPainter = painter; + if (currentPainter != null) { + currentPainter.flush(); + // don't set the current one to null here; reduces the chances of + // MT issues (like NPEs) + } + super.disposeImpl(); } @@ -158,6 +177,10 @@ initActiveWindowsTracking((Window)target); updateIconImages(); + + updateShape(); + updateOpacity(); + updateOpaque(); } native void createAwtWindow(WComponentPeer parent); @@ -183,7 +206,6 @@ // super.displayChanged() in WWindowPeer.displayChanged() regardless of whether // GraphicsDevice was really changed, or not. So we need to track it here. updateGC(); - resetTargetGC(); realShow(); updateMinimumSize(); @@ -191,6 +213,8 @@ if (((Window)target).isAlwaysOnTopSupported() && alwaysOnTop) { setAlwaysOnTop(alwaysOnTop); } + + updateWindow(null); } // Synchronize the insets members (here & in helper) with actual window @@ -214,25 +238,62 @@ int[] smallIconRaster, int smw, int smh); synchronized native void reshapeFrame(int x, int y, int width, int height); - public boolean requestWindowFocus() { - // Win32 window doesn't need this - return false; + + public boolean requestWindowFocus(CausedFocusEvent.Cause cause) { + if (!focusAllowedFor()) { + return false; + } + return requestWindowFocus(cause == CausedFocusEvent.Cause.MOUSE_EVENT); } + public native boolean requestWindowFocus(boolean isMouseEventCause); public boolean focusAllowedFor() { - Window target = (Window)this.target; - if (!target.isVisible() || - !target.isEnabled() || - !target.isFocusable()) + Window window = (Window)this.target; + if (!window.isVisible() || + !window.isEnabled() || + !window.isFocusableWindow()) { return false; } - if (isModalBlocked()) { return false; } + return true; + } - return true; + public void hide() { + WindowListener listener = windowListener; + if (listener != null) { + // We're not getting WINDOW_CLOSING from the native code when hiding + // the window programmatically. So, create it and notify the listener. + listener.windowClosing(new WindowEvent((Window)target, WindowEvent.WINDOW_CLOSING)); + } + super.hide(); + } + + // WARNING: it's called on the Toolkit thread! + void preprocessPostEvent(AWTEvent event) { + if (event instanceof WindowEvent) { + WindowListener listener = windowListener; + if (listener != null) { + switch(event.getID()) { + case WindowEvent.WINDOW_CLOSING: + listener.windowClosing((WindowEvent)event); + break; + case WindowEvent.WINDOW_ICONIFIED: + listener.windowIconified((WindowEvent)event); + break; + } + } + } + } + + synchronized void addWindowListener(WindowListener l) { + windowListener = AWTEventMulticaster.add(windowListener, l); + } + + synchronized void removeWindowListener(WindowListener l) { + windowListener = AWTEventMulticaster.remove(windowListener, l); } public void updateMinimumSize() { @@ -273,6 +334,31 @@ } } + private void updateShape() { + // Shape shape = ((Window)target).getShape(); + Shape shape = AWTAccessor.getWindowAccessor().getShape((Window)target); + if (shape != null) { + applyShape(Region.getInstance(shape, null)); + } + } + + private void updateOpacity() { + // float opacity = ((Window)target).getOpacity(); + float opacity = AWTAccessor.getWindowAccessor().getOpacity((Window)target); + if (opacity < 1.0f) { + setOpacity(opacity); + } + } + + private void updateOpaque() { + this.isOpaque = true; + // boolean opaque = ((Window)target).isOpaque(); + boolean opaque = AWTAccessor.getWindowAccessor().isOpaque((Window)target); + if (!opaque) { + setOpaque(opaque); + } + } + native void setMinSize(int width, int height); /* @@ -358,14 +444,6 @@ }); } - - /* - * Called from WCanvasPeer.displayChanged(). - * Override to do nothing - Window and WWindowPeer GC must never be set to - * null! - */ - void clearLocalGC() {} - public void updateGC() { int scrn = getScreenImOn(); if (screenLog.isLoggable(Level.FINER)) { @@ -404,18 +482,36 @@ oldDev.removeDisplayChangedListener(this); newDev.addDisplayChangedListener(this); } + + SunToolkit.executeOnEventHandlerThread((Component)target, + new Runnable() { + public void run() { + AWTAccessor.getComponentAccessor(). + setGraphicsConfiguration((Component)target, winGraphicsConfig); + } + }); } - /* - * From the DisplayChangedListener interface + /** + * From the DisplayChangedListener interface. * * This method handles a display change - either when the display settings * are changed, or when the window has been dragged onto a different * display. + * Called after a change in the display mode. This event + * triggers replacing the surfaceData object (since that object + * reflects the current display depth information, which has + * just changed). */ public void displayChanged() { updateGC(); - super.displayChanged(); + } + + /** + * Part of the DisplayChangedListener interface: components + * do not need to react to this event + */ + public void paletteChanged() { } private native int getScreenImOn(); @@ -451,8 +547,10 @@ private volatile int sysH = 0; Rectangle constrainBounds(int x, int y, int width, int height) { + GraphicsConfiguration gc = this.winGraphicsConfig; + // We don't restrict the setBounds() operation if the code is trusted. - if (!hasWarningWindow()) { + if (!hasWarningWindow() || gc == null) { return new Rectangle(x, y, width, height); } @@ -461,24 +559,24 @@ int newW = width; int newH = height; - GraphicsConfiguration gc = ((Window)target).getGraphicsConfiguration(); Rectangle sB = gc.getBounds(); - Insets sIn = ((Window)target).getToolkit().getScreenInsets(gc); + Insets sIn = Toolkit.getDefaultToolkit().getScreenInsets(gc); int screenW = sB.width - sIn.left - sIn.right; int screenH = sB.height - sIn.top - sIn.bottom; // If it's undecorated or is not currently visible - if (!((Window)target).isVisible() || isTargetUndecorated()) { + if (!AWTAccessor.getComponentAccessor().isVisible_NoClientCode( + (Component)target) || isTargetUndecorated()) + { // Now check each point is within the visible part of the screen int screenX = sB.x + sIn.left; int screenY = sB.y + sIn.top; - // First make sure the size is withing the visible part of the screen + // First make sure the size is within the visible part of the screen if (newW > screenW) { newW = screenW; } - if (newH > screenH) { newH = screenH; } @@ -489,7 +587,6 @@ } else if (newX + newW > screenX + screenW) { newX = screenX + screenW - newW; } - if (newY < screenY) { newY = screenY; } else if (newY + newH > screenY + screenH) { @@ -504,7 +601,6 @@ if (newW > maxW) { newW = maxW; } - if (newH > maxH) { newH = maxH; } @@ -513,6 +609,8 @@ return new Rectangle(newX, newY, newW, newH); } + public native void repositionSecurityWarning(); + @Override public void setBounds(int x, int y, int width, int height, int op) { Rectangle newBounds = constrainBounds(x, y, width, height); @@ -525,6 +623,135 @@ super.setBounds(newBounds.x, newBounds.y, newBounds.width, newBounds.height, op); } + @Override + public void print(Graphics g) { + // We assume we print the whole frame, + // so we expect no clip was set previously + Shape shape = AWTAccessor.getWindowAccessor().getShape((Window)target); + if (shape != null) { + g.setClip(shape); + } + super.print(g); + } + + private void replaceSurfaceDataRecursively(Component c) { + if (c instanceof Container) { + for (Component child : ((Container)c).getComponents()) { + replaceSurfaceDataRecursively(child); + } + } + ComponentPeer cp = c.getPeer(); + if (cp instanceof WComponentPeer) { + ((WComponentPeer)cp).replaceSurfaceDataLater(); + } + } + + private native void setOpacity(int iOpacity); + + public void setOpacity(float opacity) { + if (!((SunToolkit)((Window)target).getToolkit()). + isWindowOpacitySupported()) + { + return; + } + + replaceSurfaceDataRecursively((Component)getTarget()); + + final int maxOpacity = 0xff; + int iOpacity = (int)(opacity * maxOpacity); + if (iOpacity < 0) { + iOpacity = 0; + } + if (iOpacity > maxOpacity) { + iOpacity = maxOpacity; + } + + setOpacity(iOpacity); + updateWindow(null); + } + + private native void setOpaqueImpl(boolean isOpaque); + + public void setOpaque(boolean isOpaque) { + Window target = (Window)getTarget(); + + SunToolkit sunToolkit = (SunToolkit)target.getToolkit(); + if (!sunToolkit.isWindowTranslucencySupported() || + !sunToolkit.isTranslucencyCapable(target.getGraphicsConfiguration())) + { + return; + } + + boolean opaqueChanged = this.isOpaque != isOpaque; + boolean isVistaOS = Win32GraphicsEnvironment.isVistaOS(); + + if (opaqueChanged && !isVistaOS){ + // non-Vista OS: only replace the surface data if the opacity + // status changed (see WComponentPeer.isAccelCapable() for more) + replaceSurfaceDataRecursively(target); + } + + this.isOpaque = isOpaque; + + setOpaqueImpl(isOpaque); + + if (opaqueChanged) { + if (isOpaque) { + TranslucentWindowPainter currentPainter = painter; + if (currentPainter != null) { + currentPainter.flush(); + painter = null; + } + } else { + painter = TranslucentWindowPainter.createInstance(this); + } + } + + if (opaqueChanged && isVistaOS) { + // On Vista: setting the window non-opaque makes the window look + // rectangular, though still catching the mouse clicks within + // its shape only. To restore the correct visual appearance + // of the window (i.e. w/ the correct shape) we have to reset + // the shape. + Shape shape = AWTAccessor.getWindowAccessor().getShape(target); + if (shape != null) { + AWTAccessor.getWindowAccessor().setShape(target, shape); + } + } + + updateWindow(null); + } + + public native void updateWindowImpl(int[] data, int width, int height); + + public void updateWindow(BufferedImage backBuffer) { + if (isOpaque) { + return; + } + + TranslucentWindowPainter currentPainter = painter; + if (currentPainter != null) { + currentPainter.updateWindow(backBuffer); + } else if (log.isLoggable(Level.FINER)) { + log.log(Level.FINER, + "Translucent window painter is null in updateWindow"); + } + } + + /** + * Paints the Applet Warning into the passed Graphics2D. This method is + * called by the TranslucentWindowPainter before updating the layered + * window. + * + * @param g Graphics context to paint the warning to + * @param w the width of the area + * @param h the height of the area + * @see TranslucentWindowPainter + */ + public void paintAppletWarning(Graphics2D g, int w, int h) { + // REMIND: the applet warning needs to be painted here + } + /* * The method maps the list of the active windows to the window's AppContext, * then the method registers ActiveWindowListener, GuiDisposedListener listeners; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java --- a/jdk/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2007-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,6 +37,7 @@ import java.util.ArrayList; import java.util.HashMap; import sun.awt.SunToolkit; +import sun.awt.AWTAccessor; import sun.awt.Win32GraphicsConfig; import sun.awt.windows.WComponentPeer; import sun.java2d.InvalidPipeException; @@ -284,14 +285,12 @@ * @param peer for which target's the repaint should be issued */ private void repaintPeerTarget(WComponentPeer peer) { - // we don't want to call user code on our priveleged - // thread, delegate to EDT - final Component target = (Component)peer.getTarget(); - SunToolkit.executeOnEventHandlerThread(target, new Runnable() { - public void run() { - target.repaint(); - } - }); + Component target = (Component)peer.getTarget(); + Rectangle bounds = AWTAccessor.getComponentAccessor().getBounds(target); + // the system-level painting operations should call the handlePaint() + // method of the WComponentPeer class to repaint the component; + // calling repaint() forces AWT to make call to update() + peer.handlePaint(0, 0, bounds.width, bounds.height); } /** diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/java2d/opengl/WGLSurfaceData.java --- a/jdk/src/windows/classes/sun/java2d/opengl/WGLSurfaceData.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/java2d/opengl/WGLSurfaceData.java Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2004-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2004-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -72,9 +72,8 @@ // the OGL pipeline can render directly to the screen and interfere // with layered windows, which is why we don't allow accelerated // surfaces in this case - if (!peer.isAccelCapable()) - // REMIND: commented until toplevel translucency is implemented -// || !SunToolkit.isContainingTopLevelOpaque((Component)peer.getTarget())) + if (!peer.isAccelCapable() || + !SunToolkit.isContainingTopLevelOpaque((Component)peer.getTarget())) { return null; } @@ -93,9 +92,8 @@ // the OGL pipeline can render directly to the screen and interfere // with layered windows, which is why we don't allow accelerated // surfaces in this case - if (!peer.isAccelCapable()) - // REMIND: commented until toplevel translucency is implemented -// || !SunToolkit.isContainingTopLevelOpaque((Component)peer.getTarget())) + if (!peer.isAccelCapable() || + !SunToolkit.isContainingTopLevelOpaque((Component)peer.getTarget())) { return null; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/net/NetHooks.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/windows/classes/sun/net/NetHooks.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,59 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ +package sun.net; + +import java.net.InetAddress; +import java.io.FileDescriptor; +import java.io.IOException; + +/** + * Defines static methods to ensure that any installed net hooks are invoked + * prior to binding or connecting TCP sockets. + */ + +public final class NetHooks { + + /** + * Invoke prior to binding a TCP socket. + */ + public static void beforeTcpBind(FileDescriptor fdObj, + InetAddress address, + int port) + throws IOException + { + // nothing to do + } + + /** + * Invoke prior to connecting an unbound TCP socket. + */ + public static void beforeTcpConnect(FileDescriptor fdObj, + InetAddress address, + int port) + throws IOException + { + // nothing to do + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java --- a/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/classes/sun/nio/ch/WindowsSelectorImpl.java Wed Jul 05 16:51:11 2017 +0200 @@ -34,7 +34,6 @@ import java.nio.channels.ClosedSelectorException; import java.nio.channels.Pipe; import java.nio.channels.SelectableChannel; -import java.nio.channels.SelectionKey; import java.io.IOException; import java.util.List; import java.util.ArrayList; @@ -72,7 +71,7 @@ private int threadsCount = 0; // A list of helper threads for select. - private final List<Thread> threads = new ArrayList<Thread>(); + private final List<SelectThread> threads = new ArrayList<SelectThread>(); //Pipe used as a wakeup object. private final Pipe wakeupPipe; @@ -201,7 +200,7 @@ Thread.currentThread().interrupt(); } } - if (thread.index >= threads.size()) { // redundant thread + if (thread.isZombie()) { // redundant thread return true; // will cause run() to exit. } else { thread.lastRun = runsCounter; // update lastRun @@ -388,9 +387,10 @@ // Represents a helper thread used for select. private final class SelectThread extends Thread { - private int index; // index of this thread - SubSelector subSelector; + private final int index; // index of this thread + final SubSelector subSelector; private long lastRun = 0; // last run number + private volatile boolean zombie; // Creates a new thread private SelectThread(int i) { this.index = i; @@ -398,6 +398,12 @@ //make sure we wait for next round of poll this.lastRun = startLock.runsCounter; } + void makeZombie() { + zombie = true; + } + boolean isZombie() { + return zombie; + } public void run() { while (true) { // poll loop // wait for the start of poll. If this thread has become @@ -432,7 +438,7 @@ } else if (threadsCount < threads.size()) { // Some threads become redundant. Remove them from the threads List. for (int i = threads.size() - 1 ; i >= threadsCount; i--) - threads.remove(i); + threads.remove(i).makeZombie(); } } @@ -468,10 +474,9 @@ updateCount++; int numKeysUpdated = 0; numKeysUpdated += subSelector.processSelectedKeys(updateCount); - Iterator it = threads.iterator(); - while (it.hasNext()) - numKeysUpdated += ((SelectThread)it.next()).subSelector. - processSelectedKeys(updateCount); + for (SelectThread t: threads) { + numKeysUpdated += t.subSelector.processSelectedKeys(updateCount); + } return numKeysUpdated; } @@ -495,13 +500,13 @@ } pollWrapper.free(); pollWrapper = null; - selectedKeys = null; - channelArray = null; - threads.clear(); - // Call startThreads. All remaining helper threads now exit, - // since threads.size() = 0; - startLock.startThreads(); - } + selectedKeys = null; + channelArray = null; + // Make all remaining helper threads exit + for (SelectThread t: threads) + t.makeZombie(); + startLock.startThreads(); + } } } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/java/io/WinNTFileSystem_md.c --- a/jdk/src/windows/native/java/io/WinNTFileSystem_md.c Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/java/io/WinNTFileSystem_md.c Wed Jul 05 16:51:11 2017 +0200 @@ -309,12 +309,13 @@ /* No template file */ NULL); if (h != INVALID_HANDLE_VALUE) { - GetFileTime(h, NULL, NULL, &t); + if (GetFileTime(h, NULL, NULL, &t)) { + modTime.LowPart = (DWORD) t.dwLowDateTime; + modTime.HighPart = (LONG) t.dwHighDateTime; + rv = modTime.QuadPart / 10000; + rv -= 11644473600000; + } CloseHandle(h); - modTime.LowPart = (DWORD) t.dwLowDateTime; - modTime.HighPart = (LONG) t.dwHighDateTime; - rv = modTime.QuadPart / 10000; - rv -= 11644473600000; } free(pathbuf); return rv; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/java/lang/java_props_md.c --- a/jdk/src/windows/native/java/lang/java_props_md.c Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/java/lang/java_props_md.c Wed Jul 05 16:51:11 2017 +0200 @@ -717,6 +717,7 @@ * Windows Vista family 6 0 * Windows 2008 6 0 * where ((&ver.wServicePackMinor) + 2) = 1 + * Windows 7 6 1 * * This mapping will presumably be augmented as new Windows * versions are released. @@ -773,13 +774,18 @@ * and Windows Vista are identical, you must also test * whether the wProductType member is VER_NT_WORKSTATION. * If wProductType is VER_NT_WORKSTATION, the operating - * system is Windows Vista; otherwise, it is Windows + * system is Windows Vista or 7; otherwise, it is Windows * Server 2008." */ - if (ver.wProductType == VER_NT_WORKSTATION) - sprops.os_name = "Windows Vista"; - else + if (ver.wProductType == VER_NT_WORKSTATION) { + switch (ver.dwMinorVersion) { + case 0: sprops.os_name = "Windows Vista"; break; + case 1: sprops.os_name = "Windows 7"; break; + default: sprops.os_name = "Windows NT (unknown)"; + } + } else { sprops.os_name = "Windows Server 2008"; + } } else { sprops.os_name = "Windows NT (unknown)"; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/awt/utility/rect.h --- a/jdk/src/windows/native/sun/awt/utility/rect.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/awt/utility/rect.h Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2007-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -43,5 +43,15 @@ #define RECT_INC_HEIGHT(r) (r).bottom++ +#if defined(__cplusplus) +extern "C" { +#endif + +int BitmapToYXBandedRectangles(int bitsPerPixel, int width, int height, + unsigned char * buf, RECT_T * outBuf); + +#if defined(__cplusplus) +} +#endif #endif // _AWT_RECT_H diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/java2d/d3d/D3DSurfaceData.cpp --- a/jdk/src/windows/native/sun/java2d/d3d/D3DSurfaceData.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/java2d/d3d/D3DSurfaceData.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2007-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -613,17 +613,15 @@ res = pTmpSurface->LockRect(&lockedRect, NULL, D3DLOCK_NOSYSLOCK); if (SUCCEEDED(res)) { - // REMIND: commented until translucent window support is integrated -// hBitmap = -// BitmapUtil::CreateBitmapFromARGBPre(w, h, -// lockedRect.Pitch, -// (int*)lockedRect.pBits); + hBitmap = + BitmapUtil::CreateBitmapFromARGBPre(w, h, + lockedRect.Pitch, + (int*)lockedRect.pBits); pTmpSurface->UnlockRect(); } RETURN_STATUS_IF_NULL(hBitmap, JNI_FALSE); - // REMIND: commented until translucent window support is integrated -// window->UpdateWindow(env, NULL, w, h, hBitmap); + window->UpdateWindow(env, NULL, w, h, hBitmap); // hBitmap is released in UpdateWindow diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/java2d/opengl/WGLSurfaceData.c --- a/jdk/src/windows/native/sun/java2d/opengl/WGLSurfaceData.c Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/java2d/opengl/WGLSurfaceData.c Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2004-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2004-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -625,17 +625,15 @@ j2d_glPixelStorei(GL_PACK_ALIGNMENT, 4); // the pixels read from the surface are already premultiplied - // REMIND: commented until translucent window support is integrated -// hBitmap = BitmapUtil_CreateBitmapFromARGBPre(w, h, scanStride, -// (int*)pDst); + hBitmap = BitmapUtil_CreateBitmapFromARGBPre(w, h, scanStride, + (int*)pDst); free(pDst); if (hBitmap == NULL) { return JNI_FALSE; } - // REMIND: commented until translucent window support is integrated - // AwtWindow_UpdateWindow(env, peer, w, h, hBitmap); + AwtWindow_UpdateWindow(env, peer, w, h, hBitmap); // hBitmap is released in UpdateWindow diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/ComCtl32Util.cpp --- a/jdk/src/windows/native/sun/windows/ComCtl32Util.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/ComCtl32Util.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -27,6 +27,7 @@ #include "ComCtl32Util.h" ComCtl32Util::ComCtl32Util() { + m_bToolTipControlInitialized = FALSE; } ComCtl32Util::~ComCtl32Util() { @@ -36,7 +37,8 @@ INITCOMMONCONTROLSEX iccex; memset(&iccex, 0, sizeof(INITCOMMONCONTROLSEX)); iccex.dwSize = sizeof(INITCOMMONCONTROLSEX); - ::InitCommonControlsEx(&iccex); + iccex.dwICC = ICC_TAB_CLASSES; + m_bToolTipControlInitialized = ::InitCommonControlsEx(&iccex); } WNDPROC ComCtl32Util::SubclassHWND(HWND hwnd, WNDPROC _WindowProc) { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/ComCtl32Util.h --- a/jdk/src/windows/native/sun/windows/ComCtl32Util.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/ComCtl32Util.h Wed Jul 05 16:51:11 2017 +0200 @@ -40,6 +40,10 @@ void InitLibraries(); + INLINE BOOL IsToolTipControlInitialized() { + return m_bToolTipControlInitialized; + } + WNDPROC SubclassHWND(HWND hwnd, WNDPROC _WindowProc); // DefWindowProc is the same as returned from SubclassHWND void UnsubclassHWND(HWND hwnd, WNDPROC _WindowProc, WNDPROC _DefWindowProc); @@ -50,6 +54,8 @@ ComCtl32Util(); ~ComCtl32Util(); + BOOL m_bToolTipControlInitialized; + // comctl32.dll version 6 window proc static LRESULT CALLBACK SharedWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/DllUtil.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/windows/native/sun/windows/DllUtil.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,87 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + + +#include "DllUtil.h" + +// Disable warning about using this in the initializer list. +#pragma warning( disable : 4355) + +DllUtil::~DllUtil() +{ + if (module != NULL) { + ::FreeLibrary(module); + module = NULL; + } +} + +HMODULE DllUtil::GetModule() +{ + if (!module) { + module = ::LoadLibrary(name); + } + return module; +} + +FARPROC DllUtil::GetProcAddress(LPCSTR name) +{ + if (GetModule()) { + return ::GetProcAddress(GetModule(), name); + } + throw LibraryUnavailableException(); +} + +DwmAPI & DwmAPI::GetInstance() +{ + static DwmAPI dll; + return dll; +} + +DwmAPI::DwmAPI() : + DllUtil(_T("DWMAPI.DLL")), + DwmIsCompositionEnabledFunction((DllUtil*)this, "DwmIsCompositionEnabled"), + DwmGetWindowAttributeFunction((DllUtil*)this, "DwmGetWindowAttribute") +{ +} + +HRESULT DwmAPI::DwmIsCompositionEnabled(BOOL * pfEnabled) +{ + if (GetInstance().DwmIsCompositionEnabledFunction()) { + return GetInstance().DwmIsCompositionEnabledFunction()(pfEnabled); + } + throw FunctionUnavailableException(); +} + +HRESULT DwmAPI::DwmGetWindowAttribute(HWND hwnd, DWORD dwAttribute, + PVOID pvAttribute, DWORD cbAttribute) +{ + if (GetInstance().DwmGetWindowAttributeFunction()) { + return GetInstance().DwmGetWindowAttributeFunction()(hwnd, dwAttribute, + pvAttribute, cbAttribute); + } + throw FunctionUnavailableException(); +} + + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/DllUtil.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/src/windows/native/sun/windows/DllUtil.h Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,97 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +#ifndef DLLUTIL_H +#define DLLUTIL_H + +#include <tchar.h> +#include <windows.h> + +/** + * Utility class to handle dynamically loadable libraries. + * + * NOTE: THIS CLASS IS NOT THREAD-SAFE! + */ +class DllUtil { + public: + class Exception {}; + class LibraryUnavailableException : public Exception {}; + class FunctionUnavailableException : public Exception {}; + + FARPROC GetProcAddress(LPCSTR name); + + protected: + DllUtil(const TCHAR * name) : name(name), module(NULL) {} + virtual ~DllUtil(); + + HMODULE GetModule(); + + template <class FunctionType> class Function { + public: + Function(DllUtil * dll, LPCSTR name) : + dll(dll), name(name), function(NULL) {} + + inline FunctionType operator () () { + if (!function) { + function = (FunctionType)dll->GetProcAddress(name); + } + return function; + } + + private: + DllUtil * const dll; + LPCSTR name; + + FunctionType function; + }; + + private: + const TCHAR * const name; + HMODULE module; +}; + +class DwmAPI : public DllUtil { + public: + // See DWMWINDOWATTRIBUTE enum in dwmapi.h + static const DWORD DWMWA_EXTENDED_FRAME_BOUNDS = 9; + + static HRESULT DwmIsCompositionEnabled(BOOL * pfEnabled); + static HRESULT DwmGetWindowAttribute(HWND hwnd, DWORD dwAttribute, + PVOID pvAttribute, DWORD cbAttribute); + + private: + static DwmAPI & GetInstance(); + DwmAPI(); + + typedef HRESULT (WINAPI *DwmIsCompositionEnabledType)(BOOL*); + Function<DwmIsCompositionEnabledType> DwmIsCompositionEnabledFunction; + + typedef HRESULT (WINAPI *DwmGetWindowAttributeType)(HWND hwnd, DWORD dwAttribute, + PVOID pvAttribute, DWORD cbAttribute); + Function<DwmGetWindowAttributeType> DwmGetWindowAttributeFunction; +}; + +#endif // DLLUTIL_H + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/ShellFolder2.cpp --- a/jdk/src/windows/native/sun/windows/ShellFolder2.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/ShellFolder2.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -225,6 +225,34 @@ FID_folderType = env->GetFieldID(cls, "folderType", "Ljava/lang/String;"); } + +/* +* Class: sun_awt_shell_Win32ShellFolderManager2 +* Method: initializeCom +* Signature: ()V +*/ +JNIEXPORT void JNICALL Java_sun_awt_shell_Win32ShellFolderManager2_initializeCom + (JNIEnv* env, jclass cls) +{ + HRESULT hr = ::CoInitialize(NULL); + if (FAILED(hr)) { + char c[64]; + sprintf(c, "Could not initialize COM: HRESULT=0x%08X", hr); + JNU_ThrowInternalError(env, c); + } +} + +/* +* Class: sun_awt_shell_Win32ShellFolderManager2 +* Method: uninitializeCom +* Signature: ()V +*/ +JNIEXPORT void JNICALL Java_sun_awt_shell_Win32ShellFolderManager2_uninitializeCom + (JNIEnv* env, jclass cls) +{ + ::CoUninitialize(); +} + static IShellIcon* getIShellIcon(IShellFolder* pIShellFolder) { // http://msdn.microsoft.com/library/en-us/shellcc/platform/Shell/programmersguide/shell_int/shell_int_programming/std_ifaces.asp HRESULT hres; @@ -239,29 +267,6 @@ return (IShellIcon*)NULL; } -// Fixed 6263669 -// -// CoInitialize wrapper -// call CoInitialize to initialize COM in STA mode and check result -// RPC_E_CHANGED_MODE means COM has already been initialized in MTA mode, -// so don't set the flag to call CoUninitialize later - -BOOL CoInit(BOOL& doCoUninit) { // returns TRUE if initialized successfully - switch(::CoInitialize(NULL)) { - case S_OK: - case S_FALSE: - doCoUninit = TRUE; - return TRUE; - break; - case RPC_E_CHANGED_MODE: - doCoUninit = FALSE; - return TRUE; - break; - default: - return FALSE; - } -} - /* * Class: sun_awt_shell_Win32ShellFolder2 @@ -507,10 +512,10 @@ /* * Class: sun_awt_shell_Win32ShellFolder2 - * Method: getFileSystemPath + * Method: getFileSystemPath0 * Signature: (I)Ljava/lang/String; */ -JNIEXPORT jstring JNICALL Java_sun_awt_shell_Win32ShellFolder2_getFileSystemPath__I +JNIEXPORT jstring JNICALL Java_sun_awt_shell_Win32ShellFolder2_getFileSystemPath0 (JNIEnv* env, jclass cls, jint csidl) { LPITEMIDLIST relPIDL; @@ -611,18 +616,6 @@ if (SUCCEEDED (hr)) { return (jlong)pFolder; } - if (IS_WINVISTA) { - BOOL doCoUninit; - if (CoInit(doCoUninit)) { - hr = pParent->BindToObject(pidl, NULL, IID_IShellFolder, (void**)&pFolder); - if (doCoUninit) { - ::CoUninitialize(); - } - if (SUCCEEDED (hr)) { - return (jlong)pFolder; - } - } - } return 0; } @@ -650,7 +643,10 @@ return NULL; } - pParent->GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_FORPARSING, &strret); + hres = pParent->GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_FORPARSING, &strret); + if (FAILED(hres)) { + return NULL; + } switch (strret.uType) { case STRRET_CSTR : @@ -669,10 +665,6 @@ break; } - BOOL doCoUninit; - if (!CoInit(doCoUninit)) { - return 0; - } IShellLinkW* psl; hres = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (LPVOID *)&psl); if (SUCCEEDED(hres)) { @@ -692,10 +684,10 @@ } psl->Release(); } - if (doCoUninit) { - ::CoUninitialize(); + + if (strret.uType == STRRET_WSTR) { + CoTaskMemFree(strret.pOleStr); } - if (SUCCEEDED(hres)) { return (jlong)pidl; } else { @@ -741,7 +733,7 @@ /* * Class: sun_awt_shell_Win32ShellFolder2 * Method: getDisplayNameOf - * Signature: (JJ)Ljava/lang/String; + * Signature: (JJI)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_sun_awt_shell_Win32ShellFolder2_getDisplayNameOf (JNIEnv* env, jclass cls, jlong parentIShellFolder, jlong relativePIDL, jint attrs) @@ -758,7 +750,11 @@ if (pParent->GetDisplayNameOf(pidl, attrs, &strret) != S_OK) { return NULL; } - return jstringFromSTRRET(env, pidl, &strret); + jstring result = jstringFromSTRRET(env, pidl, &strret); + if (strret.uType == STRRET_WSTR) { + CoTaskMemFree(strret.pOleStr); + } + return result; } /* @@ -833,10 +829,6 @@ } INT index = -1; - BOOL doCoUninit; - if (!CoInit(doCoUninit)) { - return (jint)index; - } HRESULT hres; // http://msdn.microsoft.com/library/en-us/shellcc/platform/Shell/programmersguide/shell_int/shell_int_programming/std_ifaces.asp @@ -844,9 +836,6 @@ hres = pIShellIcon->GetIconOf(pidl, GIL_FORSHELL, &index); } - if (doCoUninit) { - ::CoUninitialize(); - } return (jint)index; } @@ -866,10 +855,6 @@ } HICON hIcon = NULL; - BOOL doCoUninit; - if (!CoInit(doCoUninit)) { - return (jlong)hIcon; - } HRESULT hres; IExtractIconW* pIcon; @@ -894,9 +879,6 @@ } pIcon->Release(); } - if (doCoUninit) { - ::CoUninitialize(); - } return (jlong)hIcon; } @@ -994,14 +976,10 @@ HINSTANCE libComCtl32; HINSTANCE libShell32; - libShell32 = LoadLibrary(TEXT("shell32.dll")); if (libShell32 != NULL) { - long osVersion = GetVersion(); - BOOL isVista = (!(osVersion & 0x80000000) && (LOBYTE(LOWORD(osVersion)) >= 6)); - hBitmap = (HBITMAP)LoadImage(libShell32, - isVista ? TEXT("IDB_TB_SH_DEF_16") : MAKEINTRESOURCE(216), + IS_WINVISTA ? TEXT("IDB_TB_SH_DEF_16") : MAKEINTRESOURCE(216), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION); } if (hBitmap == NULL) { @@ -1095,46 +1073,6 @@ } -// Helper functions for workaround COM initialization: - -static HRESULT GetDetailsOfFolder( - IShellFolder2 *folder, - LPCITEMIDLIST pidl, - UINT column, - SHELLDETAILS *psd) -{ - HRESULT hr = folder->GetDetailsOf(pidl, column, psd); - if (IS_WINVISTA && FAILED (hr)) { - BOOL doCoUninit; - if (CoInit(doCoUninit)) { - hr = folder->GetDetailsOf(pidl, column, psd); - if (doCoUninit) { - ::CoUninitialize(); - } - } - } - return hr; -} - -static HRESULT GetDetailsOf( - IShellDetails *details, - LPCITEMIDLIST pidl, - UINT column, - SHELLDETAILS *psd) -{ - HRESULT hr = details->GetDetailsOf(pidl, column, psd); - if (IS_WINVISTA && FAILED (hr)) { - BOOL doCoUninit; - if (CoInit(doCoUninit)) { - hr = details->GetDetailsOf(pidl, column, psd); - if (doCoUninit) { - ::CoUninitialize(); - } - } - } - return hr; -} - /* * Helper function for creating Java column info object */ @@ -1187,7 +1125,7 @@ int colNum = -1; hr = S_OK; do{ - hr = GetDetailsOfFolder(pIShellFolder2, NULL, ++colNum, &sd); + hr = pIShellFolder2->GetDetailsOf(NULL, ++colNum, &sd); } while (SUCCEEDED (hr)); jobjectArray columns = @@ -1202,7 +1140,7 @@ colNum = 0; hr = S_OK; while (SUCCEEDED (hr)) { - hr = GetDetailsOfFolder(pIShellFolder2, NULL, colNum, &sd); + hr = pIShellFolder2->GetDetailsOf(NULL, colNum, &sd); if (SUCCEEDED (hr)) { hr = pIShellFolder2->GetDefaultColumnState(colNum, &csFlags); @@ -1232,7 +1170,7 @@ int colNum = -1; hr = S_OK; do{ - hr = GetDetailsOf(pIShellDetails, NULL, ++colNum, &sd); + hr = pIShellDetails->GetDetailsOf(NULL, ++colNum, &sd); } while (SUCCEEDED (hr)); jobjectArray columns = @@ -1246,7 +1184,7 @@ colNum = 0; hr = S_OK; while (SUCCEEDED (hr)) { - hr = GetDetailsOf(pIShellDetails, NULL, colNum, &sd); + hr = pIShellDetails->GetDetailsOf(NULL, colNum, &sd); if (SUCCEEDED (hr)) { jobject column = CreateColumnInfo(env, &columnClass, &columnConstructor, @@ -1288,7 +1226,7 @@ if(SUCCEEDED (hr)) { // The folder exposes IShellFolder2 interface IShellFolder2 *pIShellFolder2 = (IShellFolder2*) pIUnknown; - hr = GetDetailsOfFolder(pIShellFolder2, pidl, (UINT)columnIdx, &sd); + hr = pIShellFolder2->GetDetailsOf(pidl, (UINT)columnIdx, &sd); pIShellFolder2->Release(); if (SUCCEEDED (hr)) { STRRET strRet = sd.str; @@ -1300,7 +1238,7 @@ if(SUCCEEDED (hr)) { // The folder exposes IShellDetails interface IShellDetails *pIShellDetails = (IShellDetails*) pIUnknown; - hr = GetDetailsOf(pIShellDetails, pidl, (UINT)columnIdx, &sd); + hr = pIShellDetails->GetDetailsOf(pidl, (UINT)columnIdx, &sd); pIShellDetails->Release(); if (SUCCEEDED (hr)) { STRRET strRet = sd.str; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt.rc --- a/jdk/src/windows/native/sun/windows/awt.rc Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt.rc Wed Jul 05 16:51:11 2017 +0200 @@ -35,6 +35,13 @@ AWT_ICON ICON DISCARDABLE "awt.ico" CHECK_BITMAP BITMAP DISCARDABLE "check.bmp" +// Note: the number of icons used is specified in the +// securityWarningIconCounter constant in awt_Toolkit.cpp. +SECURITY_WARNING_0 ICON DISCARDABLE "security_warning_bw.ico" +SECURITY_WARNING_1 ICON DISCARDABLE "security_warning_int.ico" +SECURITY_WARNING_2 ICON DISCARDABLE "security_warning.ico" + + ///////////////////////////////////////////////////////////////////////////// // // Version diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_BitmapUtil.cpp --- a/jdk/src/windows/native/sun/windows/awt_BitmapUtil.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_BitmapUtil.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2006-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -28,9 +28,14 @@ #include <windowsx.h> #include <zmouse.h> +#include "GraphicsPrimitiveMgr.h" + #include "awt.h" #include "awt_BitmapUtil.h" +// Platform-dependent RECT_[EQ | SET | INC_HEIGHT] macros +#include "utility/rect.h" + HBITMAP BitmapUtil::CreateTransparencyMaskFromARGB(int width, int height, int* imageData) { //Scan lines should be aligned to word boundary @@ -148,3 +153,222 @@ ::GdiFlush(); return hBitmap; } + +/* + * Creates 32-bit premultiplied ARGB bitmap from specified ARGBPre data. + * This function may not work on OS prior to Win95. + * See MSDN articles for CreateDIBitmap, BITMAPINFOHEADER, + * BITMAPV4HEADER, BITMAPV5HEADER for additional info. + */ +HBITMAP BitmapUtil::CreateBitmapFromARGBPre(int width, int height, + int srcStride, + int* imageData) +{ + BITMAPINFOHEADER bmi; + void *bitmapBits = NULL; + + ZeroMemory(&bmi, sizeof(bmi)); + bmi.biSize = sizeof(bmi); + bmi.biWidth = width; + bmi.biHeight = -height; + bmi.biPlanes = 1; + bmi.biBitCount = 32; + bmi.biCompression = BI_RGB; + + HBITMAP hBitmap = + ::CreateDIBSection(NULL, (BITMAPINFO *) & bmi, DIB_RGB_COLORS, + &bitmapBits, NULL, 0); + + if (!bitmapBits) { + return NULL; + } + + int dstStride = width * 4; + + if (srcStride == dstStride) { + memcpy(bitmapBits, (void*)imageData, srcStride * height); + } else if (height > 0) { + void *pSrcPixels = (void*)imageData; + void *pDstPixels = bitmapBits; + do { + memcpy(pDstPixels, pSrcPixels, dstStride); + pSrcPixels = PtrAddBytes(pSrcPixels, srcStride); + pDstPixels = PtrAddBytes(pDstPixels, dstStride); + } while (--height > 0); + } + + return hBitmap; +} + +extern "C" { + +/** + * This method is called from the WGL pipeline when it needs to create a bitmap + * needed to update the layered window. + */ +HBITMAP BitmapUtil_CreateBitmapFromARGBPre(int width, int height, + int srcStride, + int* imageData) +{ + return BitmapUtil::CreateBitmapFromARGBPre(width, height, + srcStride, imageData); + +} + +} /* extern "C" */ + + +/** + * Transforms the given bitmap into an HRGN representing the transparency + * of the bitmap. The bitmap MUST BE 32bpp. Alpha value == 0 is considered + * transparent, alpha > 0 - opaque. + */ +HRGN BitmapUtil::BitmapToRgn(HBITMAP hBitmap) +{ + HDC hdc = ::CreateCompatibleDC(NULL); + ::SelectObject(hdc, hBitmap); + + BITMAPINFOEX bi; + ::ZeroMemory(&bi, sizeof(bi)); + + bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + + BOOL r = ::GetDIBits(hdc, hBitmap, 0, 0, NULL, + reinterpret_cast<BITMAPINFO*>(&bi), DIB_RGB_COLORS); + + if (!r || bi.bmiHeader.biBitCount != 32) + { + ::DeleteDC(hdc); + return NULL; + } + + UINT width = bi.bmiHeader.biWidth; + UINT height = abs(bi.bmiHeader.biHeight); + + BYTE * buf = (BYTE*)safe_Malloc(bi.bmiHeader.biSizeImage); + bi.bmiHeader.biHeight = -height; + ::GetDIBits(hdc, hBitmap, 0, height, buf, + reinterpret_cast<BITMAPINFO*>(&bi), DIB_RGB_COLORS); + + /* reserving memory for the worst case */ + RGNDATA * pRgnData = (RGNDATA *) safe_Malloc(sizeof(RGNDATAHEADER) + + sizeof(RECT) * (width / 2 + 1) * height); + RGNDATAHEADER * pRgnHdr = (RGNDATAHEADER *) pRgnData; + pRgnHdr->dwSize = sizeof(RGNDATAHEADER); + pRgnHdr->iType = RDH_RECTANGLES; + pRgnHdr->nRgnSize = 0; + pRgnHdr->rcBound.top = 0; + pRgnHdr->rcBound.left = 0; + pRgnHdr->rcBound.bottom = height; + pRgnHdr->rcBound.right = width; + + pRgnHdr->nCount = BitmapToYXBandedRectangles(32, width, height, buf, + (RECT_T *) (((BYTE *) pRgnData) + sizeof(RGNDATAHEADER))); + + HRGN rgn = ::ExtCreateRegion(NULL, + sizeof(RGNDATAHEADER) + sizeof(RECT_T) * pRgnHdr->nCount, + pRgnData); + + free(pRgnData); + ::DeleteDC(hdc); + free(buf); + + return rgn; +} + +/** + * Makes a copy of the given bitmap. Blends every pixel of the source + * with the given blendColor and alpha. If alpha == 0, the function + * simply makes a plain copy of the source without any blending. + */ +HBITMAP BitmapUtil::BlendCopy(HBITMAP hSrcBitmap, COLORREF blendColor, + BYTE alpha) +{ + HDC hdc = ::CreateCompatibleDC(NULL); + HBITMAP oldBitmap = (HBITMAP)::SelectObject(hdc, hSrcBitmap); + + BITMAPINFOEX bi; + ::ZeroMemory(&bi, sizeof(bi)); + + bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + + BOOL r = ::GetDIBits(hdc, hSrcBitmap, 0, 0, NULL, + reinterpret_cast<BITMAPINFO*>(&bi), DIB_RGB_COLORS); + + if (!r || bi.bmiHeader.biBitCount != 32) + { + ::DeleteDC(hdc); + return NULL; + } + + UINT width = bi.bmiHeader.biWidth; + UINT height = abs(bi.bmiHeader.biHeight); + + BYTE * buf = (BYTE*)safe_Malloc(bi.bmiHeader.biSizeImage); + bi.bmiHeader.biHeight = -height; + ::GetDIBits(hdc, hSrcBitmap, 0, height, buf, + reinterpret_cast<BITMAPINFO*>(&bi), DIB_RGB_COLORS); + + UINT widthBytes = width * bi.bmiHeader.biBitCount / 8; + UINT alignedWidth = (((widthBytes - 1) / 4) + 1) * 4; + UINT i, j; + + for (j = 0; j < height; j++) { + BYTE *pSrc = (BYTE *) buf + j * alignedWidth; + for (i = 0; i < width; i++, pSrc += 4) { + // Note: if the current alpha is zero, the other three color + // components may (theoretically) contain some uninitialized + // data. The developer does not expect to display them, + // hence we handle this situation differently. + if (pSrc[3] == 0) { + pSrc[0] = GetBValue(blendColor) * alpha / 255; + pSrc[1] = GetGValue(blendColor) * alpha / 255; + pSrc[2] = GetRValue(blendColor) * alpha / 255; + pSrc[3] = alpha; + } else { + pSrc[0] = (GetBValue(blendColor) * alpha / 255) + + (pSrc[0] * (255 - alpha) / 255); + pSrc[1] = (GetGValue(blendColor) * alpha / 255) + + (pSrc[1] * (255 - alpha) / 255); + pSrc[2] = (GetRValue(blendColor) * alpha / 255) + + (pSrc[2] * (255 - alpha) / 255); + pSrc[3] = (alpha * alpha / 255) + + (pSrc[3] * (255 - alpha) / 255); + } + } + } + + HBITMAP hDstBitmap = ::CreateDIBitmap(hdc, + reinterpret_cast<BITMAPINFOHEADER*>(&bi), + CBM_INIT, + buf, + reinterpret_cast<BITMAPINFO*>(&bi), + DIB_RGB_COLORS + ); + + ::SelectObject(hdc, oldBitmap); + ::DeleteDC(hdc); + free(buf); + + return hDstBitmap; +} + +/** + * Creates a 32 bit ARGB bitmap. Returns the bitmap handle. The *bitmapBits + * contains the pointer to the bitmap data or NULL if an error occured. + */ +HBITMAP BitmapUtil::CreateARGBBitmap(int width, int height, void ** bitmapBitsPtr) +{ + BITMAPINFOHEADER bmi; + + ::ZeroMemory(&bmi, sizeof(bmi)); + bmi.biSize = sizeof(BITMAPINFOHEADER); + bmi.biWidth = width; + bmi.biHeight = -height; + bmi.biPlanes = 1; + bmi.biBitCount = 32; + bmi.biCompression = BI_RGB; + + return ::CreateDIBSection(NULL, (BITMAPINFO *) & bmi, DIB_RGB_COLORS, + bitmapBitsPtr, NULL, 0); +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_BitmapUtil.h --- a/jdk/src/windows/native/sun/windows/awt_BitmapUtil.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_BitmapUtil.h Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2006-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -45,6 +45,32 @@ */ static HBITMAP CreateV4BitmapFromARGB(int width, int height, int* imageData); + /** + * Creates 32-bit premultiplied ARGB V4 Bitmap (Win95-compatible) from + * specified ARGB Pre input data. + */ + static HBITMAP CreateBitmapFromARGBPre(int width, int height, + int srcStride, + int* imageData); + + /** + * Transforms the given bitmap into an HRGN representing the transparency + * of the bitmap. + */ + static HRGN BitmapToRgn(HBITMAP hBitmap); + + /** + * Makes a copy of the given bitmap. Blends every pixel of the source + * with the given blendColor and alpha. If alpha == 0, the function + * simply makes a plain copy of the source without any blending. + */ + static HBITMAP BlendCopy(HBITMAP hSrcBitmap, COLORREF blendColor, BYTE alpha); + + /** + * Creates a 32 bit ARGB bitmap. Returns the bitmap handle. + * The pointer to the bitmap data is stored into bitmapBitsPtr. + */ + static HBITMAP CreateARGBBitmap(int width, int height, void ** bitmapBitsPtr); }; #endif diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Button.cpp --- a/jdk/src/windows/native/sun/windows/awt_Button.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Button.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -30,7 +30,6 @@ #include "awt_Button.h" #include "awt_Canvas.h" #include "awt_Window.h" -#include "awt_KeyboardFocusManager.h" /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code. */ @@ -143,19 +142,6 @@ return c; } -BOOL AwtButton::ActMouseMessage(MSG * pMsg) { - if (!IsFocusingMessage(pMsg->message)) { - return FALSE; - } - - if (pMsg->message == WM_LBUTTONDOWN) { - SendMessage(BM_SETSTATE, TRUE, 0); - } else if (pMsg->message == WM_LBUTTONUP) { - SendMessage(BM_SETSTATE, FALSE, 0); - } - return TRUE; -} - MsgRouting AwtButton::WmMouseDown(UINT flags, int x, int y, int button) { @@ -204,23 +190,6 @@ (jint)AwtComponent::GetJavaModifiers()); } -/* 4531849 fix. Previous to 1.4, mouse clicks and typing space bar on a - * Button would notify ActionListeners via WM_COMMAND/WmNotify(). In 1.4, mouse - * grabs are done for all presses in order to correctly send drag and release - * events. However, WM_COMMAND message aren't sent when the mouse is grabbed, - * so ActionListeners for mouse clicks are sent via WmMouseUp/WmNotify(). - * For some reason, if the right mouse button is held down when left-clicking - * on a Button, WM_COMMAND _IS_ sent. This resulted in two ActionEvents being - * sent in this case. To fix the problem, we handle typing space bar similar to - * left clicks - in WmKeyUp(), and do nothing for WM_COMMAND. -bchristi - */ -MsgRouting -AwtButton::WmKeyUp(UINT wkey, UINT repCnt, UINT flags, BOOL system) -{ - MsgRouting mrResult = AwtComponent::WmKeyUp(wkey, repCnt, flags, system); - return mrResult; -} - MsgRouting AwtButton::OwnerDrawItem(UINT /*ctrlId*/, DRAWITEMSTRUCT& drawInfo) { @@ -293,18 +262,26 @@ return mrDoDefault; } +BOOL AwtButton::IsFocusingMouseMessage(MSG *pMsg) { + return pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONUP; +} + +BOOL AwtButton::IsFocusingKeyMessage(MSG *pMsg) { + return (pMsg->message == WM_KEYDOWN || pMsg->message == WM_KEYUP) && + pMsg->wParam == VK_SPACE; +} + MsgRouting AwtButton::HandleEvent(MSG *msg, BOOL synthetic) { - if (AwtComponent::sm_focusOwner != GetHWnd() && - (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK)) - { - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - jobject target = GetTarget(env); - env->CallStaticVoidMethod - (AwtKeyboardFocusManager::keyboardFocusManagerCls, - AwtKeyboardFocusManager::heavyweightButtonDownMID, - target, ((jlong)msg->time) & 0xFFFFFFFF); - env->DeleteLocalRef(target); + if (IsFocusingMouseMessage(msg)) { + SendMessage(BM_SETSTATE, msg->message == WM_LBUTTONDOWN ? TRUE : FALSE, 0); + delete msg; + return mrConsume; + } + if (IsFocusingKeyMessage(msg)) { + SendMessage(BM_SETSTATE, msg->message == WM_KEYDOWN ? TRUE : FALSE, 0); + delete msg; + return mrConsume; } return AwtComponent::HandleEvent(msg, synthetic); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Button.h --- a/jdk/src/windows/native/sun/windows/awt_Button.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Button.h Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2004 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -50,13 +50,13 @@ /* Windows message handler functions */ MsgRouting WmMouseDown(UINT flags, int x, int y, int button); MsgRouting WmMouseUp(UINT flags, int x, int y, int button); - MsgRouting WmKeyUp(UINT vkey, UINT repCnt, UINT flags, BOOL system); MsgRouting OwnerDrawItem(UINT ctrlId, DRAWITEMSTRUCT& drawInfo); MsgRouting WmPaint(HDC hDC); MsgRouting HandleEvent(MSG *msg, BOOL synthetic); - BOOL ActMouseMessage(MSG * pMsg); + BOOL IsFocusingMouseMessage(MSG *pMsg); + BOOL IsFocusingKeyMessage(MSG *pMsg); // called on Toolkit thread from JNI static void _SetLabel(void *param); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Canvas.cpp --- a/jdk/src/windows/native/sun/windows/awt_Canvas.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Canvas.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,6 @@ #include "awt_Toolkit.h" #include "awt_Canvas.h" #include "awt_Win32GraphicsConfig.h" -#include "awt_KeyboardFocusManager.h" #include "awt_Window.h" /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code. @@ -176,27 +175,9 @@ MsgRouting AwtCanvas::HandleEvent(MSG *msg, BOOL synthetic) { - if (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) { - /* - * Fix for BugTraq ID 4041703: keyDown not being invoked. - * Give the focus to a Canvas or Panel if it doesn't have heavyweight - * subcomponents so that they will behave the same way as on Solaris - * providing a possibility of giving keyboard focus to an empty Applet. - * Since ScrollPane doesn't receive focus on mouse press on Solaris, - * HandleEvent() is overriden there to do nothing with focus. - */ - if (AwtComponent::sm_focusOwner != GetHWnd() && - ::GetWindow(GetHWnd(), GW_CHILD) == NULL) - { - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - jobject target = GetTarget(env); - env->CallStaticVoidMethod - (AwtKeyboardFocusManager::keyboardFocusManagerCls, - AwtKeyboardFocusManager::heavyweightButtonDownMID, - target, ((jlong)msg->time) & 0xFFFFFFFF); - env->DeleteLocalRef(target); - AwtSetFocus(); - } + if (IsFocusingMouseMessage(msg)) { + delete msg; + return mrConsume; } return AwtComponent::HandleEvent(msg, synthetic); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Checkbox.cpp --- a/jdk/src/windows/native/sun/windows/awt_Checkbox.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Checkbox.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -26,7 +26,6 @@ #include "awt.h" #include "awt_Toolkit.h" #include "awt_Checkbox.h" -#include "awt_KeyboardFocusManager.h" #include "awt_Canvas.h" #include "awt_Window.h" @@ -143,17 +142,6 @@ return checkbox; } -BOOL AwtCheckbox::ActMouseMessage(MSG* pMsg) { - if (!IsFocusingMessage(pMsg->message)) { - return FALSE; - } - - if (pMsg->message == WM_LBUTTONDOWN) { - SendMessage(BM_SETSTATE, ~SendMessage(BM_GETSTATE, 0, 0), 0); - } - return TRUE; -} - MsgRouting AwtCheckbox::WmMouseUp(UINT flags, int x, int y, int button) { @@ -329,18 +317,32 @@ return mrDoDefault; } +BOOL AwtCheckbox::IsFocusingMouseMessage(MSG *pMsg) { + return pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONUP; +} + +BOOL AwtCheckbox::IsFocusingKeyMessage(MSG *pMsg) { + return (pMsg->message == WM_KEYDOWN || pMsg->message == WM_KEYUP) && + pMsg->wParam == VK_SPACE; +} + MsgRouting AwtCheckbox::HandleEvent(MSG *msg, BOOL synthetic) { - if (IsFocusable() && AwtComponent::sm_focusOwner != GetHWnd() && - (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK)) - { - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - jobject target = GetTarget(env); - env->CallStaticVoidMethod - (AwtKeyboardFocusManager::keyboardFocusManagerCls, - AwtKeyboardFocusManager::heavyweightButtonDownMID, - target, ((jlong)msg->time) & 0xFFFFFFFF); - env->DeleteLocalRef(target); + if (IsFocusingMouseMessage(msg)) { + SendMessage(BM_SETSTATE, (WPARAM)(msg->message == WM_LBUTTONDOWN ? TRUE : FALSE)); + delete msg; + return mrConsume; + } + if (IsFocusingKeyMessage(msg)) { + SendMessage(BM_SETSTATE, (WPARAM)(msg->message == WM_KEYDOWN ? TRUE : FALSE)); + if (msg->message == WM_KEYDOWN) { + m_fLButtonDowned = TRUE; + } else if (m_fLButtonDowned == TRUE) { + WmNotify(BN_CLICKED); + m_fLButtonDowned = TRUE; + } + delete msg; + return mrConsume; } return AwtComponent::HandleEvent(msg, synthetic); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Checkbox.h --- a/jdk/src/windows/native/sun/windows/awt_Checkbox.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Checkbox.h Wed Jul 05 16:51:11 2017 +0200 @@ -69,7 +69,8 @@ MsgRouting HandleEvent(MSG *msg, BOOL synthetic); - BOOL ActMouseMessage(MSG* pMsg); + BOOL IsFocusingMouseMessage(MSG *pMsg); + BOOL IsFocusingKeyMessage(MSG *pMsg); // called on Toolkit thread from JNI static void _SetLabel(void *param); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Choice.cpp --- a/jdk/src/windows/native/sun/windows/awt_Choice.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Choice.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -23,14 +23,17 @@ * have any questions. */ +#include <windowsx.h> + #include "awt_Toolkit.h" #include "awt_Choice.h" -#include "awt_KeyboardFocusManager.h" #include "awt_Canvas.h" #include "awt_Dimension.h" #include "awt_Container.h" +#include "ComCtl32Util.h" + #include <java_awt_Toolkit.h> #include <java_awt_FontMetrics.h> #include <java_awt_event_InputEvent.h> @@ -71,18 +74,31 @@ /* Bug #4338368: consume the spurious MouseUp when the choice loses focus */ BOOL AwtChoice::skipNextMouseUp = FALSE; + +BOOL AwtChoice::sm_isMouseMoveInList = FALSE; + +static const UINT MINIMUM_NUMBER_OF_VISIBLE_ITEMS = 8; + /************************************************************************* * AwtChoice class methods */ AwtChoice::AwtChoice() { - killFocusRouting = mrPassAlong; + m_hList = NULL; + m_listDefWindowProc = NULL; } LPCTSTR AwtChoice::GetClassName() { return TEXT("COMBOBOX"); /* System provided combobox class */ } +void AwtChoice::Dispose() { + if (m_hList != NULL && m_listDefWindowProc != NULL) { + ComCtl32Util::GetInstance().UnsubclassHWND(m_hList, ListWindowProc, m_listDefWindowProc); + } + AwtComponent::Dispose(); +} + AwtChoice* AwtChoice::Create(jobject peer, jobject parent) { @@ -162,6 +178,10 @@ env->SetIntField(target, AwtComponent::widthID, (jint) rc.right); env->SetIntField(target, AwtComponent::heightID, (jint) rc.bottom); + if (IS_WINXP) { + ::SendMessage(c->GetHWnd(), CB_SETMINVISIBLE, (WPARAM) MINIMUM_NUMBER_OF_VISIBLE_ITEMS, 0); + } + env->DeleteLocalRef(dimension); } } catch (...) { @@ -175,24 +195,13 @@ return c; } -BOOL AwtChoice::ActMouseMessage(MSG* pMsg) { - if (!IsFocusingMessage(pMsg->message)) { - return FALSE; - } - - if (pMsg->message == WM_LBUTTONDOWN) { - SendMessage(CB_SHOWDROPDOWN, ~SendMessage(CB_GETDROPPEDSTATE, 0, 0), 0); - } - return TRUE; -} - // calculate height of drop-down list part of the combobox // to show all the items up to a maximum of eight int AwtChoice::GetDropDownHeight() { int itemHeight =(int)::SendMessage(GetHWnd(), CB_GETITEMHEIGHT, (UINT)0,0); int numItemsToShow = (int)::SendMessage(GetHWnd(), CB_GETCOUNT, 0,0); - numItemsToShow = numItemsToShow > 8 ? 8 : numItemsToShow; + numItemsToShow = min(MINIMUM_NUMBER_OF_VISIBLE_ITEMS, numItemsToShow); // drop-down height snaps to nearest line, so add a // fudge factor of 1/2 line to ensure last line shows return itemHeight*numItemsToShow + itemHeight/2; @@ -253,6 +262,7 @@ } return; } + // don't want to interfere with other controls if (::GetCapture() == NULL) { ::SetCapture(GetHWnd()); @@ -370,6 +380,58 @@ env->DeleteLocalRef(target); } +static int lastClickX = -1; +static int lastClickY = -1; + +LRESULT CALLBACK AwtChoice::ListWindowProc(HWND hwnd, UINT message, + WPARAM wParam, LPARAM lParam) +{ + /* + * We don't pass the choice WM_LBUTTONDOWN message. As the result the choice's list + * doesn't forward mouse messages it captures. Below we do forward what we need. + */ + + TRY; + + DASSERT(::IsWindow(hwnd)); + + switch (message) { + case WM_LBUTTONDOWN: { + DWORD curPos = ::GetMessagePos(); + lastClickX = GET_X_LPARAM(curPos); + lastClickY = GET_Y_LPARAM(curPos); + break; + } + case WM_MOUSEMOVE: { + RECT rect; + ::GetClientRect(hwnd, &rect); + + POINT pt = {GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)}; + if (::PtInRect(&rect, pt)) { + sm_isMouseMoveInList = TRUE; + } + + POINT lastPt = {lastClickX, lastClickY}; + ::ScreenToClient(hwnd, &lastPt); + if (::PtInRect(&rect, lastPt)) { + break; // ignore when dragging inside the list + } + } + case WM_LBUTTONUP: { + lastClickX = -1; + lastClickY = -1; + + AwtChoice *c = (AwtChoice *)::GetWindowLongPtr(hwnd, GWLP_USERDATA); + if (c != NULL) { + // forward the msg to the choice + c->WindowProc(message, wParam, lParam); + } + } + } + return ComCtl32Util::GetInstance().DefWindowProc(NULL, hwnd, message, wParam, lParam); + + CATCH_BAD_ALLOC_RET(0); +} MsgRouting AwtChoice::WmNotify(UINT notifyCode) @@ -379,15 +441,24 @@ if (itemSelect != CB_ERR){ DoCallback("handleAction", "(I)V", itemSelect); } - } else if (notifyCode == CBN_DROPDOWN && !IsFocusable()) { - // While non-focusable Choice is shown all WM_KILLFOCUS messages should be consumed. - killFocusRouting = mrConsume; - } else if (notifyCode == CBN_CLOSEUP && !IsFocusable()) { - // When non-focusable Choice is about to close, send it synthetic WM_KILLFOCUS - // message that should be processed by the native widget only. This will allow - // the native widget to properly process WM_KILLFOCUS that was earlier consumed. - killFocusRouting = mrDoDefault; - ::PostMessage(GetHWnd(), WM_KILLFOCUS, (LPARAM)sm_focusOwner, 0); + } else if (notifyCode == CBN_DROPDOWN) { + + if (m_hList == NULL) { + COMBOBOXINFO cbi; + cbi.cbSize = sizeof(COMBOBOXINFO); + ::GetComboBoxInfo(GetHWnd(), &cbi); + m_hList = cbi.hwndList; + m_listDefWindowProc = ComCtl32Util::GetInstance().SubclassHWND(m_hList, ListWindowProc); + DASSERT(::GetWindowLongPtr(m_hList, GWLP_USERDATA) == NULL); + ::SetWindowLongPtr(m_hList, GWLP_USERDATA, (LONG_PTR)this); + } + sm_isMouseMoveInList = FALSE; + + // Clicking in the dropdown list steals focus from the proxy. + // So, set the focus-restore flag up. + SetRestoreFocus(TRUE); + } else if (notifyCode == CBN_CLOSEUP) { + SetRestoreFocus(FALSE); } return mrDoDefault; } @@ -414,19 +485,7 @@ AwtChoice::WmKillFocus(HWND hWndGotFocus) { skipNextMouseUp = TRUE; - - switch (killFocusRouting) { - case mrConsume: - return mrConsume; - case mrDoDefault: - killFocusRouting = mrPassAlong; - return mrDoDefault; - case mrPassAlong: - return AwtComponent::WmKillFocus(hWndGotFocus); - } - - DASSERT(false); // must never reach here - return mrDoDefault; + return AwtComponent::WmKillFocus(hWndGotFocus); } MsgRouting @@ -441,27 +500,17 @@ MsgRouting AwtChoice::HandleEvent(MSG *msg, BOOL synthetic) { - /* - * 6366006 - * Note: the event can be sent in two cases: - * 1) The Choice is closed and user clicks on it to drop it down. - * 2) The Choice is non-focusable, it's droped down, user - * clicks on it (or outside) to close it. - * So, if the Choice is in droped down state, we shouldn't call - * heavyweightButtonDown() method. Otherwise it will set a typeahead marker - * that won't be removed, because no focus events will be generated. - */ - if (AwtComponent::sm_focusOwner != GetHWnd() && - (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) && - !IsChoiceOpened()) + if (IsFocusingMouseMessage(msg)) { + SendMessage(CB_SHOWDROPDOWN, ~SendMessage(CB_GETDROPPEDSTATE, 0, 0), 0); + delete msg; + return mrConsume; + } + // To simulate the native behavior, we close the list on WM_LBUTTONUP if + // WM_MOUSEMOVE has been dedected on the list since it has been dropped down. + if (msg->message == WM_LBUTTONUP && SendMessage(CB_GETDROPPEDSTATE, 0, 0) && + sm_isMouseMoveInList) { - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - jobject target = GetTarget(env); - env->CallStaticVoidMethod - (AwtKeyboardFocusManager::keyboardFocusManagerCls, - AwtKeyboardFocusManager::heavyweightButtonDownMID, - target, ((jlong)msg->time) & 0xFFFFFFFF); - env->DeleteLocalRef(target); + SendMessage(CB_SHOWDROPDOWN, FALSE, 0); } return AwtComponent::HandleEvent(msg, synthetic); } @@ -618,6 +667,26 @@ env->DeleteGlobalRef(choice); } +void AwtChoice::_CloseList(void *param) +{ + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + + jobject choice = (jobject)param; + + AwtChoice *c = NULL; + + PDATA pData; + JNI_CHECK_PEER_GOTO(choice, done); + + c = (AwtChoice *)pData; + if (::IsWindow(c->GetHWnd()) && c->SendMessage(CB_GETDROPPEDSTATE, 0, 0)) { + c->SendMessage(CB_SHOWDROPDOWN, FALSE, 0); + } + +done: + env->DeleteGlobalRef(choice); +} + /************************************************************************ * WChoicePeer native methods */ @@ -752,6 +821,23 @@ CATCH_BAD_ALLOC; } +/* + * Class: sun_awt_windows_WChoicePeer + * Method: closeList + * Signature: ()V + */ +JNIEXPORT void JNICALL +Java_sun_awt_windows_WChoicePeer_closeList(JNIEnv *env, jobject self) +{ + TRY; + + jobject selfGlobalRef = env->NewGlobalRef(self); + + AwtToolkit::GetInstance().SyncCall(AwtChoice::_CloseList, (void *)selfGlobalRef); + // global ref is deleted in _CloseList + + CATCH_BAD_ALLOC; +} } /* extern "C" */ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Choice.h --- a/jdk/src/windows/native/sun/windows/awt_Choice.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Choice.h Wed Jul 05 16:51:11 2017 +0200 @@ -43,6 +43,8 @@ virtual LPCTSTR GetClassName(); static AwtChoice* Create(jobject peer, jobject hParent); + virtual void Dispose(); + virtual void Reshape(int x, int y, int w, int h); void ResetDropDownHeight(); int GetDropDownHeight(); @@ -75,9 +77,6 @@ virtual void SetDragCapture(UINT flags); virtual void ReleaseDragCapture(UINT flags); - BOOL ActMouseMessage(MSG * pMsg); - INLINE BOOL AwtChoice::IsChoiceOpened() {return SendMessage(CB_GETDROPPEDSTATE, 0, 0);} - static BOOL mouseCapture; static BOOL skipNextMouseUp; @@ -87,11 +86,16 @@ static void _AddItems(void *param); static void _Remove(void *param); static void _RemoveAll(void *param); + static void _CloseList(void *param); private: int GetFieldHeight(); int GetTotalHeight(); - MsgRouting killFocusRouting; + static BOOL sm_isMouseMoveInList; + HWND m_hList; + WNDPROC m_listDefWindowProc; + static LRESULT CALLBACK ListWindowProc(HWND hwnd, UINT message, + WPARAM wParam, LPARAM lParam); }; #endif /* AWT_CHOICE_H */ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Component.cpp --- a/jdk/src/windows/native/sun/windows/awt_Component.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Component.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,7 +38,6 @@ #include "awt_InputTextInfor.h" #include "awt_Insets.h" #include "awt_KeyEvent.h" -#include "awt_KeyboardFocusManager.h" #include "awt_MenuItem.h" #include "awt_MouseEvent.h" #include "awt_Palette.h" @@ -58,7 +57,6 @@ #include <java_awt_Event.h> #include <java_awt_event_KeyEvent.h> #include <java_awt_Insets.h> -#include <java_awt_KeyboardFocusManager.h> #include <sun_awt_windows_WPanelPeer.h> #include <java_awt_event_InputEvent.h> #include <java_awt_event_InputMethodEvent.h> @@ -94,12 +92,13 @@ BOOL g_bUserHasChangedInputLang = FALSE; } -BOOL AwtComponent::sm_suppressFocusAndActivation; -HWND AwtComponent::sm_focusOwner; -HWND AwtComponent::sm_focusedWindow; -HWND AwtComponent::sm_realFocusOpposite; +BOOL AwtComponent::sm_suppressFocusAndActivation = FALSE; +BOOL AwtComponent::sm_restoreFocusAndActivation = FALSE; +HWND AwtComponent::sm_focusOwner = NULL; +HWND AwtComponent::sm_focusedWindow = NULL; BOOL AwtComponent::sm_bMenuLoop = FALSE; AwtComponent* AwtComponent::sm_getComponentCache = NULL; +BOOL AwtComponent::sm_inSynthesizeFocus = FALSE; /************************************************************************/ // Struct for _Reshape() and ReshapeNoCheck() methods @@ -123,15 +122,6 @@ jobject component; jobject font; }; -// Struct for _RequestFocus() method -struct RequestFocusStruct { - jobject component; - jobject lightweightChild; - jboolean temporary; - jboolean focusedWindowChangeAllowed; - jlong time; - jobject cause; -}; // Struct for _CreatePrintedPixels() method struct CreatePrintedPixelsStruct { jobject component; @@ -149,6 +139,16 @@ jobject window; RECT *insets; }; +// Struct for _SetZOrder function +struct SetZOrderStruct { + jobject component; + jlong above; +}; +// Struct for _SetFocus function +struct SetFocusStruct { + jobject component; + jboolean doSetFocus; +}; /************************************************************************/ ////////////////////////////////////////////////////////////////////////// @@ -199,8 +199,7 @@ BOOL AwtComponent::sm_rtlReadingOrder = PRIMARYLANGID(GetInputLanguage()) == LANG_ARABIC; -UINT AwtComponent::sm_95WheelMessage = WM_NULL; -UINT AwtComponent::sm_95WheelSupport = WM_NULL; +BOOL AwtComponent::sm_PrimaryDynamicTableBuilt = FALSE; HWND AwtComponent::sm_cursorOn; BOOL AwtComponent::m_QueryNewPaletteCalled = FALSE; @@ -208,8 +207,6 @@ CriticalSection windowMoveLock; BOOL windowMoveLockHeld = FALSE; -int AwtComponent::sm_wheelRotationAmount = 0; - /************************************************************************ * AwtComponent methods */ @@ -237,7 +234,6 @@ m_InputMethod = NULL; m_useNativeCompWindow = TRUE; m_PendingLeadByte = 0; - m_skipNextSetFocus = FALSE; m_bitsCandType = 0; windowMoveLockPosX = 0; @@ -250,6 +246,12 @@ m_bSubclassed = FALSE; m_MessagesProcessing = 0; + m_wheelRotationAmount = 0; + if (!sm_PrimaryDynamicTableBuilt) { + // do it once. + AwtComponent::BuildPrimaryDynamicTable(); + sm_PrimaryDynamicTableBuilt = TRUE; + } } AwtComponent::~AwtComponent() @@ -265,8 +267,7 @@ * the native one anymore. So we can safely destroy component's * handle. */ - AwtToolkit::DestroyComponentHWND(m_hwnd); - m_hwnd = NULL; + DestroyHWnd(); if (sm_getComponentCache == this) { sm_getComponentCache = NULL; @@ -275,15 +276,8 @@ void AwtComponent::Dispose() { - if (sm_focusOwner == GetHWnd()) { - ::SetFocus(NULL); - } - if (sm_focusedWindow == GetHWnd()) { - sm_focusedWindow = NULL; - } - if (sm_realFocusOpposite == GetHWnd()) { - sm_realFocusOpposite = NULL; - } + // NOTE: in case the component/toplevel was focused, Java should + // have already taken care of proper transfering it or clearing. if (m_hdwp != NULL) { // end any deferred window positioning, regardless @@ -588,6 +582,17 @@ } /* + * Destroy this window's HWND + */ +void AwtComponent::DestroyHWnd() { + if (m_hwnd != NULL) { + AwtToolkit::DestroyComponentHWND(m_hwnd); + //AwtToolkit::DestroyComponent(this); + m_hwnd = NULL; + } +} + +/* * Returns hwnd for target on non Toolkit thread */ HWND @@ -888,27 +893,8 @@ void AwtComponent::Hide() { - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - jobject peer = GetPeer(env); - BOOL oldValue = sm_suppressFocusAndActivation; m_visible = false; - - // On disposal the focus owner actually loses focus at the moment of hiding. - // So, focus change suppression (if requested) should be made here. - if (GetHWnd() == sm_focusOwner && - !JNU_CallMethodByName(env, NULL, peer, "isAutoFocusTransferOnDisposal", "()Z").z) - { - sm_suppressFocusAndActivation = TRUE; - // The native system may autotransfer focus on hiding to the parent - // of the component. Nevertheless this focus change won't be posted - // to the Java level, we're better to avoid this. Anyway, after - // the disposal focus should be requested to the right component. - ::SetFocus(NULL); - sm_focusOwner = NULL; - } ::ShowWindow(GetHWnd(), SW_HIDE); - - sm_suppressFocusAndActivation = oldValue; } BOOL @@ -1252,6 +1238,7 @@ WIN_MSG(WM_AWT_COMPONENT_SHOW) WIN_MSG(WM_AWT_COMPONENT_HIDE) WIN_MSG(WM_AWT_COMPONENT_SETFOCUS) + WIN_MSG(WM_AWT_WINDOW_SETACTIVE) WIN_MSG(WM_AWT_LIST_SETMULTISELECT) WIN_MSG(WM_AWT_HANDLE_EVENT) WIN_MSG(WM_AWT_PRINT_COMPONENT) @@ -1503,67 +1490,54 @@ sm_bMenuLoop = FALSE; break; + // We don't expect any focus messages on non-proxy component, + // except those that came from Java. case WM_SETFOCUS: - mr = (!sm_suppressFocusAndActivation && !m_skipNextSetFocus) - ? WmSetFocus((HWND)wParam) : mrConsume; - m_skipNextSetFocus = FALSE; + if (sm_inSynthesizeFocus) { + mr = WmSetFocus((HWND)wParam); + } else { + mr = mrConsume; + } break; case WM_KILLFOCUS: - mr = (!sm_suppressFocusAndActivation) - ? WmKillFocus((HWND)wParam) : mrConsume; + if (sm_inSynthesizeFocus) { + mr = WmKillFocus((HWND)wParam); + } else { + mr = mrConsume; + } break; - case WM_ACTIVATE: - { + case WM_ACTIVATE: { UINT nState = LOWORD(wParam); BOOL fMinimized = (BOOL)HIWORD(wParam); + mr = mrConsume; + if (!sm_suppressFocusAndActivation && (!fMinimized || (nState == WA_INACTIVE))) { mr = WmActivate(nState, fMinimized, (HWND)lParam); - m_skipNextSetFocus = FALSE; + // When the window is deactivated, send WM_IME_ENDCOMPOSITION // message to deactivate the composition window so that // it won't receive keyboard input focus. if (ImmGetContext() != NULL) { DefWindowProc(WM_IME_ENDCOMPOSITION, 0, 0); } - } else { - if (!sm_suppressFocusAndActivation - && fMinimized && (nState != WA_INACTIVE)) - { - m_skipNextSetFocus = TRUE; - } - mr = mrConsume; } + break; } - break; - case WM_MOUSEACTIVATE: { - AwtWindow * window = (AwtWindow*)GetComponent((HWND)wParam); - if (window != NULL) { - if (!window->IsFocusableWindow()) { - // if it is non-focusable window we can return - // MA_NOACTIVATExxx and it will not be activated. We - // return NOACTIVATE for a client part of the window so we - // receive mouse event responsible for activation. We - // return NOACTIVEA for Frame's non-client so user be able - // to resize and move frames by title and borders. We - // return NOACTIVATEANDEAT for Window non-client area as - // there is noone to listen for this event. - mr = mrConsume; - if ((window == this) && LOWORD(lParam) != HTCLIENT ) { - if (window->IsSimpleWindow()) { - retValue = MA_NOACTIVATEANDEAT; - } else { - retValue = MA_NOACTIVATE; - } - } else { - retValue = MA_NOACTIVATE; - } - } - } - break; - } - + case WM_MOUSEACTIVATE: { + AwtWindow *window = GetContainer(); + if (window && window->IsFocusableWindow()) { + // AWT/Swing will later request focus to a proper component + // on handling the Java mouse event. Anyway, we have to + // activate the window here as it works both for AWT & Swing. + // Do it in our own fassion, + window->AwtSetActiveWindow(TRUE, LOWORD(lParam)/*hittest*/); + } + mr = mrConsume; + retValue = MA_NOACTIVATE; + break; + } case WM_CTLCOLORMSGBOX: case WM_CTLCOLOREDIT: case WM_CTLCOLORLISTBOX: @@ -1920,7 +1894,15 @@ break; case WM_AWT_COMPONENT_SETFOCUS: - retValue = (LRESULT)WmComponentSetFocus((WmComponentSetFocusData *)wParam); + if ((BOOL)wParam) { + retValue = SynthesizeWmSetFocus(GetHWnd(), NULL); + } else { + retValue = SynthesizeWmKillFocus(GetHWnd(), NULL); + } + mr = mrConsume; + break; + case WM_AWT_WINDOW_SETACTIVE: + retValue = (LRESULT)((AwtWindow*)this)->AwtSetActiveWindow((BOOL)wParam); mr = mrConsume; break; @@ -2048,188 +2030,16 @@ MsgRouting AwtComponent::WmSetFocus(HWND hWndLostFocus) { - if (sm_focusOwner == GetHWnd()) { - sm_realFocusOpposite = NULL; - return mrConsume; - } - - HWND toplevelHWnd = AwtComponent::GetTopLevelParentForWindow(GetHWnd()); - AwtComponent *comp = AwtComponent::GetComponent(toplevelHWnd); - - if (comp && comp->IsEmbeddedFrame() && - !((AwtFrame*)comp)->activateEmbeddedFrameOnSetFocus(hWndLostFocus)) - { - // Fix for 6562716. - // In order that AwtSetFocus() returns FALSE. - sm_suppressFocusAndActivation = TRUE; - ::SetFocus(NULL); - sm_suppressFocusAndActivation = FALSE; - - return mrConsume; - } - - sm_focusOwner = GetHWnd(); - sm_focusedWindow = toplevelHWnd; - - if (sm_realFocusOpposite != NULL) { - hWndLostFocus = sm_realFocusOpposite; - sm_realFocusOpposite = NULL; - } - - sm_wheelRotationAmount = 0; - - SendFocusEvent(java_awt_event_FocusEvent_FOCUS_GAINED, hWndLostFocus); - + m_wheelRotationAmount = 0; return mrDoDefault; } MsgRouting AwtComponent::WmKillFocus(HWND hWndGotFocus) { - if (sm_focusOwner != NULL && sm_focusOwner == hWndGotFocus) { - return mrConsume; - } - - if (sm_focusOwner != GetHWnd()) { - if (sm_focusOwner != NULL) { - if (hWndGotFocus != NULL && - AwtComponent::GetComponent(hWndGotFocus) != NULL) - { - sm_realFocusOpposite = sm_focusOwner; - } - ::SendMessage(sm_focusOwner, WM_KILLFOCUS, (WPARAM)hWndGotFocus, - 0); - } - return mrConsume; - } - - AwtComponent *comp = AwtComponent::GetComponent(sm_focusedWindow); - - if (comp && comp->IsEmbeddedFrame()) { - ((AwtFrame*)comp)->deactivateEmbeddedFrameOnKillFocus(hWndGotFocus); - } - - sm_focusOwner = NULL; - sm_wheelRotationAmount = 0; - - SendFocusEvent(java_awt_event_FocusEvent_FOCUS_LOST, hWndGotFocus); + m_wheelRotationAmount = 0; return mrDoDefault; } -jboolean -AwtComponent::WmComponentSetFocus(WmComponentSetFocusData *data) -{ - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - if (env->EnsureLocalCapacity(1) < 0) { - env->DeleteGlobalRef(data->lightweightChild); - delete data; - return JNI_FALSE; - } - - jboolean result = JNI_FALSE; - - BOOL setSuppressFocusAndActivation = FALSE; - - /* - * This is a fix for 4628933. - * If sm_suppressFocusAndActivation is TRUE here then - * this means that we dispatch WM_COMPONENT_SET_FOCUS inside - * dispatching bounce activation, this unlikely but possible. - * So we reset sm_suppressFocusAndActivation to give a chance - * to dispatch focus events which will generate due this focus - * request to Java. - * - * son@sparc.spb.su - */ - if (sm_suppressFocusAndActivation) { - sm_suppressFocusAndActivation = FALSE; - setSuppressFocusAndActivation = TRUE; - } - - jobject heavyweight = GetTarget(env); - jint retval = env->CallStaticIntMethod - (AwtKeyboardFocusManager::keyboardFocusManagerCls, - AwtKeyboardFocusManager::shouldNativelyFocusHeavyweightMID, - heavyweight, data->lightweightChild, data->temporary, - data->focusedWindowChangeAllowed, data->time, data->cause); - - if (retval == java_awt_KeyboardFocusManager_SNFH_SUCCESS_HANDLED) { - result = JNI_TRUE; - } else if (retval == java_awt_KeyboardFocusManager_SNFH_SUCCESS_PROCEED) { - result = (AwtSetFocus()) ? JNI_TRUE : JNI_FALSE; - if (result == JNI_FALSE) { - env->CallStaticVoidMethod - (AwtKeyboardFocusManager::keyboardFocusManagerCls, - AwtKeyboardFocusManager::removeLastFocusRequestMID, - heavyweight); - } - } else { - DASSERT(retval == java_awt_KeyboardFocusManager_SNFH_FAILURE); - result = JNI_FALSE; - } - env->DeleteLocalRef(heavyweight); - - /* - * Set sm_suppressFocusAndActivation back to TRUE if needed. - * Fix for 4628933 (son@sparc.spb.su) - */ - if (setSuppressFocusAndActivation) { - sm_suppressFocusAndActivation = TRUE; - } - - env->DeleteGlobalRef(data->lightweightChild); - delete data; - return result; -} - -BOOL -AwtComponent::AwtSetFocus() -{ - HWND hwnd = GetHWnd(); - - if (sm_focusOwner == hwnd) { - return TRUE; - } - - HWND fgWindow = ::GetForegroundWindow(); - if (NULL != fgWindow) { - DWORD fgProcessID; - ::GetWindowThreadProcessId(fgWindow, &fgProcessID); - - if (fgProcessID != ::GetCurrentProcessId() - && !AwtToolkit::GetInstance().IsEmbedderProcessId(fgProcessID)) - { - // fix for 6458497. we shouldn't request focus if it is out of both - // our and embedder process. - return FALSE; - } - } - - AwtWindow *pCont = GetContainer(); - AwtFrame *owner = pCont ? pCont->GetOwningFrameOrDialog() : NULL; - - if (owner == NULL) { - ::SetFocus(hwnd); - if (::GetFocus() != hwnd) { - return FALSE; - } - } else { - HWND oldFocusOwner = sm_focusOwner; - if (oldFocusOwner != NULL) { - ::SendMessage(oldFocusOwner, WM_KILLFOCUS, (WPARAM)hwnd, 0); - } - - sm_suppressFocusAndActivation = TRUE; - ::SetActiveWindow(owner->GetHWnd()); - ::SetFocus(owner->GetProxyFocusOwner()); - sm_suppressFocusAndActivation = FALSE; - - sm_focusedWindow = GetTopLevelParentForWindow(GetHWnd()); - ::SendMessage(hwnd, WM_SETFOCUS, (WPARAM)oldFocusOwner, 0); - } - - return TRUE; -} - MsgRouting AwtComponent::WmCtlColor(HDC hDC, HWND hCtrl, UINT ctlColor, HBRUSH& retBrush) { @@ -2524,7 +2334,6 @@ AwtWindow::GetGrabbedWindow()->Ungrab(); } } - return mrConsume; } @@ -2638,11 +2447,11 @@ BOOL result; UINT platformLines; - sm_wheelRotationAmount += wheelRotation; + m_wheelRotationAmount += wheelRotation; // AWT interprets wheel rotation differently than win32, so we need to // decode wheel amount. - jint roundedWheelRotation = sm_wheelRotationAmount / (-1 * WHEEL_DELTA); + jint roundedWheelRotation = m_wheelRotationAmount / (-1 * WHEEL_DELTA); jdouble preciseWheelRotation = (jdouble) wheelRotation / (-1 * WHEEL_DELTA); MSG msg; @@ -2668,7 +2477,9 @@ eventPt.x, eventPt.y, GetJavaModifiers(), 0, 0, scrollType, scrollLines, roundedWheelRotation, preciseWheelRotation, &msg); - sm_wheelRotationAmount %= WHEEL_DELTA; + m_wheelRotationAmount %= WHEEL_DELTA; + // this message could be propagated up to the parent chain + // by the mouse message post processors return mrConsume; } @@ -3088,6 +2899,19 @@ {0,0} }; +// The full map of the current keyboard state including +// windows virtual key, scancode, java virtual key, and unicode +// for this key sans modifiers. +// All but first element may be 0. +// XXX in the update releases this is an addition to the unchanged existing code +struct DynPrimaryKeymapEntry { + UINT wkey; + UINT scancode; + UINT jkey; + WCHAR unicode; +}; + +static DynPrimaryKeymapEntry dynPrimaryKeymap[256]; void AwtComponent::InitDynamicKeyMapTable() @@ -3096,6 +2920,8 @@ if (!kbdinited) { AwtComponent::BuildDynamicKeyMapTable(); + // We cannot build it here since JNI is not available yet: + //AwtComponent::BuildPrimaryDynamicTable(); kbdinited = TRUE; } } @@ -3321,7 +3147,11 @@ for (int j = 0; dynamicKeyMapTable[j].windowsKey != 0; j++) { if (dynamicKeyMapTable[j].windowsKey == windowsKey) { - return dynamicKeyMapTable[j].javaKey; + if (dynamicKeyMapTable[j].javaKey != java_awt_event_KeyEvent_VK_UNDEFINED) { + return dynamicKeyMapTable[j].javaKey; + }else{ + break; + } } } @@ -3398,6 +3228,122 @@ return FALSE; } +static void +resetKbdState( BYTE kstate[256]) { + BYTE tmpState[256]; + WCHAR wc[2]; + memmove(tmpState, kstate, sizeof(kstate)); + tmpState[VK_SHIFT] = 0; + tmpState[VK_CONTROL] = 0; + tmpState[VK_MENU] = 0; + + ::ToUnicodeEx(VK_SPACE,::MapVirtualKey(VK_SPACE, 0), tmpState, wc, 2, 0, GetKeyboardLayout(0)); +} + +// XXX in the update releases this is an addition to the unchanged existing code +// After the call, a table will have a unicode associated with a windows virtual keycode +// sans modifiers. With some further simplification, one can +// derive java keycode from it, and anyway we will pass this unicode value +// all the way up in a comment to a KeyEvent. +void +AwtComponent::BuildPrimaryDynamicTable() { + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + // XXX: how about that? + //CriticalSection::Lock l(GetLock()); + //if (GetPeer(env) == NULL) { + // /* event received during termination. */ + // return; + //} + + HKL hkl = GetKeyboardLayout(); + UINT sc = 0; + BYTE kbdState[AwtToolkit::KB_STATE_SIZE]; + memset(kbdState, 0, sizeof (kbdState)); + + // Use JNI call to obtain java key code. We should keep a list + // of currently available keycodes in a single place. + static jclass extKeyCodesCls; + if( extKeyCodesCls == NULL) { + jclass extKeyCodesClsLocal = env->FindClass("sun/awt/ExtendedKeyCodes"); + DASSERT(extKeyCodesClsLocal); + if (extKeyCodesClsLocal == NULL) { + /* exception already thrown */ + return; + } + extKeyCodesCls = (jclass)env->NewGlobalRef(extKeyCodesClsLocal); + env->DeleteLocalRef(extKeyCodesClsLocal); + } + static jmethodID getExtendedKeyCodeForChar; + if (getExtendedKeyCodeForChar == NULL) { + getExtendedKeyCodeForChar = + env->GetStaticMethodID(extKeyCodesCls, "getExtendedKeyCodeForChar", "(I)I"); + DASSERT(getExtendedKeyCodeForChar); + } + jint extJKC; //extended Java key code + + for (UINT i = 0; i < 256; i++) { + dynPrimaryKeymap[i].wkey = i; + dynPrimaryKeymap[i].jkey = java_awt_event_KeyEvent_VK_UNDEFINED; + dynPrimaryKeymap[i].unicode = 0; + + if ((sc = MapVirtualKey (i, 0)) == 0) { + dynPrimaryKeymap[i].scancode = 0; + continue; + } + dynPrimaryKeymap[i].scancode = sc; + + // XXX process cases like VK_SHIFT etc. + kbdState[i] = 0x80; // "key pressed". + WCHAR wc[16]; + int k = ::ToUnicodeEx(i, sc, kbdState, wc, 16, 0, hkl); + if (k == 1) { + // unicode + dynPrimaryKeymap[i].unicode = wc[0]; + if (dynPrimaryKeymap[i].jkey == java_awt_event_KeyEvent_VK_UNDEFINED) { + // Convert unicode to java keycode. + //dynPrimaryKeymap[i].jkey = ((UINT)(wc[0]) + 0x01000000); + // + //XXX If this key in on the keypad, we should force a special value equal to + //XXX an old java keycode: but how to say if it is a keypad key? + //XXX We'll do it in WmKeyUp/Down. + extJKC = env->CallStaticIntMethod(extKeyCodesCls, + getExtendedKeyCodeForChar, (jint)(wc[0])); + dynPrimaryKeymap[i].jkey = extJKC; + } + }else if (k == -1) { + // dead key: use charToDeadVKTable + dynPrimaryKeymap[i].unicode = wc[0]; + resetKbdState( kbdState ); + for (const CharToVKEntry *map = charToDeadVKTable; map->c != 0; ++map) { + if (wc[0] == map->c) { + dynPrimaryKeymap[i].jkey = map->javaKey; + break; + } + } + } else if (k == 0) { + // reset + resetKbdState( kbdState ); + }else { + printf ("++++Whats that? wkey 0x%x (%d)\n", i,i); + } + kbdState[i] = 0; // "key unpressed" + } +} +void +AwtComponent::UpdateDynPrimaryKeymap(UINT wkey, UINT jkeyLegacy, jint keyLocation, UINT modifiers) +{ + if( wkey && wkey < 256 ) { + if(keyLocation == java_awt_event_KeyEvent_KEY_LOCATION_NUMPAD) { + // At the creation time, + // dynPrimaryKeymap cannot distinguish between e.g. "/" and "NumPad /" + dynPrimaryKeymap[wkey].jkey = jkeyLegacy; + } + if(dynPrimaryKeymap[wkey].jkey == java_awt_event_KeyEvent_VK_UNDEFINED) { + // E.g. it is non-unicode key + dynPrimaryKeymap[wkey].jkey = jkeyLegacy; + } + } +} UINT AwtComponent::WindowsKeyToJavaChar(UINT wkey, UINT modifiers, TransOps ops) { @@ -3554,10 +3500,12 @@ jint keyLocation = GetKeyLocation(wkey, flags); UINT jkey = WindowsKeyToJavaKey(wkey, modifiers); UINT character = WindowsKeyToJavaChar(wkey, modifiers, SAVE); + UpdateDynPrimaryKeymap(wkey, jkey, keyLocation, modifiers); + SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_PRESSED, TimeHelper::windowsToUTC(msg.time), jkey, character, - modifiers, keyLocation, &msg); + modifiers, keyLocation, (jlong)wkey, &msg); // bugid 4724007: Windows does not create a WM_CHAR for the Del key // for some reason, so we need to create the KEY_TYPED event on the @@ -3569,7 +3517,7 @@ TimeHelper::windowsToUTC(msg.time), java_awt_event_KeyEvent_VK_UNDEFINED, character, modifiers, - java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN); + java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0); } return mrConsume; @@ -3594,10 +3542,11 @@ jint keyLocation = GetKeyLocation(wkey, flags); UINT jkey = WindowsKeyToJavaKey(wkey, modifiers); UINT character = WindowsKeyToJavaChar(wkey, modifiers, LOAD); + UpdateDynPrimaryKeymap(wkey, jkey, keyLocation, modifiers); SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_RELEASED, TimeHelper::windowsToUTC(msg.time), jkey, character, - modifiers, keyLocation, &msg); + modifiers, keyLocation, (jlong)wkey, &msg); return mrConsume; } @@ -3613,6 +3562,7 @@ m_idLang = LOWORD(hKeyboardLayout); // lower word of HKL is LANGID m_CodePage = LangToCodePage(m_idLang); BuildDynamicKeyMapTable(); // compute new mappings for VK_OEM + BuildPrimaryDynamicTable(); return mrConsume; // do not propagate to children } @@ -3643,7 +3593,7 @@ TimeHelper::windowsToUTC(msg.time), java_awt_event_KeyEvent_VK_UNDEFINED, unicodeChar, modifiers, - java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, + java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0, &msg); return mrConsume; } @@ -3712,7 +3662,7 @@ TimeHelper::windowsToUTC(msg.time), java_awt_event_KeyEvent_VK_UNDEFINED, unicodeChar, modifiers, - java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, + java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0, &msg); return mrConsume; } @@ -4033,14 +3983,15 @@ HWND AwtComponent::GetProxyFocusOwner() { - AwtWindow * window = GetContainer(); + AwtWindow *window = GetContainer(); if (window != 0) { - AwtFrame * owner = window->GetOwningFrameOrDialog(); + AwtFrame *owner = window->GetOwningFrameOrDialog(); if (owner != 0) { return owner->GetProxyFocusOwner(); + } else if (!window->IsSimpleWindow()) { // isn't an owned simple window + return ((AwtFrame*)window)->GetProxyFocusOwner(); } } - return (HWND)NULL; } @@ -4562,6 +4513,25 @@ return hdc; } +void AwtComponent::FillBackground(HDC hMemoryDC, SIZE &size) +{ + RECT eraseR = { 0, 0, size.cx, size.cy }; + VERIFY(::FillRect(hMemoryDC, &eraseR, GetBackgroundBrush())); +} + +void AwtComponent::FillAlpha(void *bitmapBits, SIZE &size, BYTE alpha) +{ + if (bitmapBits) { + DWORD* dest = (DWORD*)bitmapBits; + //XXX: might be optimized to use one loop (cy*cx -> 0). + for (int i = 0; i < size.cy; i++ ) { + for (int j = 0; j < size.cx; j++ ) { + ((BYTE*)(dest++))[3] = alpha; + } + } + } +} + jintArray AwtComponent::CreatePrintedPixels(SIZE &loc, SIZE &size) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); @@ -4619,26 +4589,53 @@ return pixelArray; } -void * -AwtComponent::GetNativeFocusOwner() { +void* AwtComponent::SetNativeFocusOwner(void *self) { + if (self == NULL) { + // It means that the KFM wants to set focus to null + sm_focusOwner = NULL; + return NULL; + } + + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + + AwtComponent *c = NULL; + jobject peer = (jobject)self; + + PDATA pData; + JNI_CHECK_NULL_GOTO(peer, "peer", ret); + pData = JNI_GET_PDATA(peer); + if (pData == NULL) { + goto ret; + } + c = (AwtComponent *)pData; + +ret: + if (c && ::IsWindow(c->GetHWnd())) { + sm_focusOwner = c->GetHWnd(); + AwtFrame *owner = (AwtFrame*)GetComponent(c->GetProxyToplevelContainer()); + if (owner) { + owner->SetLastProxiedFocusOwner(sm_focusOwner); + } + } else { + sm_focusOwner = NULL; + } + env->DeleteGlobalRef(peer); + return NULL; +} + +void* AwtComponent::GetNativeFocusedWindow() { + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + AwtComponent *comp = + AwtComponent::GetComponent(AwtComponent::GetFocusedWindow()); + return (comp != NULL) ? comp->GetTargetAsGlobalRef(env) : NULL; +} + +void* AwtComponent::GetNativeFocusOwner() { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); AwtComponent *comp = AwtComponent::GetComponent(AwtComponent::sm_focusOwner); return (comp != NULL) ? comp->GetTargetAsGlobalRef(env) : NULL; } -void * -AwtComponent::GetNativeFocusedWindow() { - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - AwtComponent *comp = - AwtComponent::GetComponent(AwtComponent::sm_focusedWindow); - return (comp != NULL) ? comp->GetTargetAsGlobalRef(env) : NULL; -} -void -AwtComponent::ClearGlobalFocusOwner() { - if (AwtComponent::sm_focusOwner != NULL) { - ::SetFocus(NULL); - } -} AwtComponent* AwtComponent::SearchChild(UINT id) { ChildListItem* child; @@ -4674,7 +4671,7 @@ } void AwtComponent::SendKeyEvent(jint id, jlong when, jint raw, jint cooked, - jint modifiers, jint keyLocation, MSG *pMsg) + jint modifiers, jint keyLocation, jlong nativeCode, MSG *pMsg) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); CriticalSection::Lock l(GetLock()); @@ -4711,6 +4708,18 @@ if (safe_ExceptionOccurred(env)) env->ExceptionDescribe(); DASSERT(!safe_ExceptionOccurred(env)); DASSERT(keyEvent != NULL); + env->SetLongField(keyEvent, AwtKeyEvent::rawCodeID, nativeCode); + if( nativeCode && nativeCode < 256 ) { + env->SetLongField(keyEvent, AwtKeyEvent::primaryLevelUnicodeID, (jlong)(dynPrimaryKeymap[nativeCode].unicode)); + env->SetLongField(keyEvent, AwtKeyEvent::extendedKeyCodeID, (jlong)(dynPrimaryKeymap[nativeCode].jkey)); + if( nativeCode < 255 ) { + env->SetLongField(keyEvent, AwtKeyEvent::scancodeID, (jlong)(dynPrimaryKeymap[nativeCode].scancode)); + }else if( pMsg != NULL ) { + // unknown key with virtual keycode 0xFF. + // Its scancode is not in the table, pickup it from the message. + env->SetLongField(keyEvent, AwtKeyEvent::scancodeID, (jlong)(HIWORD(pMsg->lParam) & 0xFF)); + } + } if (pMsg != NULL) { AwtAWTEvent::saveMSG(env, pMsg, keyEvent); } @@ -4724,16 +4733,17 @@ AwtComponent::SendKeyEventToFocusOwner(jint id, jlong when, jint raw, jint cooked, jint modifiers, jint keyLocation, + jlong nativeCode, MSG *msg) { /* * if focus owner is null, but focused window isn't * we will send key event to focused window */ - HWND hwndTarget = ((sm_focusOwner != NULL) ? sm_focusOwner : sm_focusedWindow); + HWND hwndTarget = ((sm_focusOwner != NULL) ? sm_focusOwner : AwtComponent::GetFocusedWindow()); if (hwndTarget == GetHWnd()) { - SendKeyEvent(id, when, raw, cooked, modifiers, keyLocation, msg); + SendKeyEvent(id, when, raw, cooked, modifiers, keyLocation, nativeCode, msg); } else { AwtComponent *target = NULL; if (hwndTarget != NULL) { @@ -4744,7 +4754,7 @@ } if (target != NULL) { target->SendKeyEvent(id, when, raw, cooked, modifiers, - keyLocation, msg); + keyLocation, nativeCode, msg); } } } @@ -5158,14 +5168,7 @@ jint x = (env)->GetIntField(mouseEvent, AwtMouseEvent::xID); jint y = (env)->GetIntField(mouseEvent, AwtMouseEvent::yID); MSG* msg = CreateMessage(message, wParam, MAKELPARAM(x, y), x, y); - // If the window is not focusable but if this is a focusing - // message we should skip it then and perform our own actions. - AwtWindow *pCont = GetContainer(); - if ((pCont && pCont->IsFocusableWindow()) || !ActMouseMessage(msg)) { - PostHandleEventMessage(msg, TRUE); - } else { - delete msg; - } + PostHandleEventMessage(msg, TRUE); } BOOL AwtComponent::InheritsNativeMouseWheelBehavior() {return false;} @@ -5251,15 +5254,14 @@ void AwtComponent::Enable(BOOL bEnable) { - sm_suppressFocusAndActivation = TRUE; - if (bEnable && IsTopLevel()) { // we should not enable blocked toplevels bEnable = !::IsWindow(AwtWindow::GetModalBlocker(GetHWnd())); } + // Shouldn't trigger native focus change + // (only the proxy may be the native focus owner). ::EnableWindow(GetHWnd(), bEnable); - sm_suppressFocusAndActivation = FALSE; CriticalSection::Lock l(GetLock()); VerifyState(); } @@ -5286,23 +5288,12 @@ } } -/** - * Special procedure responsible for performing the actions which - * usually happen with component when mouse buttons are being - * pressed. It is required in case of non-focusable components - we - * don't pass mouse messages directly to the windows because otherwise - * it will try to focus component first which we don't want. This - * function receives MSG and should return TRUE if it processed the - * message and no furhter processing is allowed, FALSE otherwise. - * Default implementation returns TRUE it is the message on which - * Windows try to focus the component. Descendant components write - * their own implementation of this procedure. - */ -BOOL AwtComponent::ActMouseMessage(MSG * pMsg) { - if (IsFocusingMessage(pMsg->message)) { - return TRUE; - } - return FALSE; +BOOL AwtComponent::IsFocusingMouseMessage(MSG *pMsg) { + return pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONDBLCLK; +} + +BOOL AwtComponent::IsFocusingKeyMessage(MSG *pMsg) { + return pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_SPACE; } void AwtComponent::_Show(void *param) @@ -5640,22 +5631,12 @@ return; } - /* Post the message directly to the subclassed component. */ - if (self && (pData = JNI_GET_PDATA(self))) { - AwtComponent* p = (AwtComponent*)pData; - // If the window is not focusable but if this is a focusing - // message we should skip it then and perform our own actions. - AwtWindow *pCont = (AwtWindow*)(p->GetContainer()); - if ((pCont && pCont->IsFocusableWindow()) || - !p->ActMouseMessage(&msg)) - { - // Create copy for local msg - MSG* pCopiedMsg = new MSG; - memmove(pCopiedMsg, &msg, sizeof(MSG)); - // Event handler deletes msg - p->PostHandleEventMessage(pCopiedMsg, FALSE); - } - } + // Create copy for local msg + MSG* pCopiedMsg = new MSG; + memmove(pCopiedMsg, &msg, sizeof(MSG)); + // Event handler deletes msg + p->PostHandleEventMessage(pCopiedMsg, FALSE); + env->DeleteGlobalRef(self); env->DeleteGlobalRef(event); delete nhes; @@ -5777,19 +5758,15 @@ delete sfs; } -jboolean AwtComponent::_RequestFocus(void *param) +// Sets or kills focus for a component. +void AwtComponent::_SetFocus(void *param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - RequestFocusStruct *rfs = (RequestFocusStruct *)param; - jobject self = rfs->component; - jobject lightweightChild = rfs->lightweightChild; - jboolean temporary = rfs->temporary; - jboolean focusedWindowChangeAllowed = rfs->focusedWindowChangeAllowed; - jlong time = rfs->time; - jobject cause = rfs->cause; - - jboolean result = JNI_FALSE; + SetFocusStruct *sfs = (SetFocusStruct *)param; + jobject self = sfs->component; + jboolean doSetFocus = sfs->doSetFocus; + AwtComponent *c = NULL; PDATA pData; @@ -5801,25 +5778,13 @@ } c = (AwtComponent *)pData; - if (::IsWindow(c->GetHWnd())) - { - WmComponentSetFocusData *data = new WmComponentSetFocusData; - data->lightweightChild = env->NewGlobalRef(lightweightChild); - data->temporary = temporary; - data->focusedWindowChangeAllowed = focusedWindowChangeAllowed; - data->time = time; - data->cause = cause; - result = (jboolean)c->SendMessage(WM_AWT_COMPONENT_SETFOCUS, (WPARAM)data, 0); - // data and global ref in it are deleted in WmComponentSetFocus + if (::IsWindow(c->GetHWnd())) { + c->SendMessage(WM_AWT_COMPONENT_SETFOCUS, (WPARAM)doSetFocus, 0); } ret: env->DeleteGlobalRef(self); - env->DeleteGlobalRef(lightweightChild); - env->DeleteGlobalRef(cause); - - delete rfs; - - return result; + + delete sfs; } void AwtComponent::_Start(void *param) @@ -6082,9 +6047,9 @@ HWND selfWnd = comps[0]->GetHWnd(); HWND parentWnd = comps[1]->GetHWnd(); if (::IsWindow(selfWnd) && ::IsWindow(parentWnd)) { - sm_suppressFocusAndActivation = TRUE; + // Shouldn't trigger native focus change + // (only the proxy may be the native focus owner). ::SetParent(selfWnd, parentWnd); - sm_suppressFocusAndActivation = FALSE; } } delete[] comps; @@ -6107,15 +6072,12 @@ AwtComponent *c = NULL; - - PDATA pData; JNI_CHECK_PEER_GOTO(self, ret); + c = (AwtComponent *)pData; - if (::IsWindow(c->GetHWnd())) - { + if (::IsWindow(c->GetHWnd())) { HRGN hRgn = NULL; - if (region || x1 || x2 || y1 || y2) { // If all the params are zeros, the shape must be simply reset. // Otherwise, convert it into a region. @@ -6157,6 +6119,33 @@ delete data; } +void AwtComponent::_SetZOrder(void *param) { + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + + SetZOrderStruct *data = (SetZOrderStruct *)param; + jobject self = data->component; + HWND above = HWND_TOP; + if (data->above != 0) { + above = reinterpret_cast<HWND>(data->above); + } + + AwtComponent *c = NULL; + + PDATA pData; + JNI_CHECK_PEER_GOTO(self, ret); + + c = (AwtComponent *)pData; + if (::IsWindow(c->GetHWnd())) { + ::SetWindowPos(c->GetHWnd(), above, 0, 0, 0, 0, + SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_DEFERERASE | SWP_ASYNCWINDOWPOS); + } + +ret: + env->DeleteGlobalRef(self); + + delete data; +} + void AwtComponent::PostUngrabEvent() { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); jobject target = GetTarget(env); @@ -6173,6 +6162,14 @@ } } +void AwtComponent::SetFocusedWindow(HWND window) +{ + HWND old = sm_focusedWindow; + sm_focusedWindow = window; + + AwtWindow::FocusedWindowChanged(old, window); +} + /************************************************************************ * Component native methods */ @@ -6587,31 +6584,25 @@ /* * Class: sun_awt_windows_WComponentPeer - * Method: requestFocus - * Signature: (Ljava/awt/Component;ZZJ)Z + * Method: focusGained + * Signature: (Z) */ -JNIEXPORT jboolean JNICALL Java_sun_awt_windows_WComponentPeer__1requestFocus - (JNIEnv *env, jobject self, jobject lightweightChild, jboolean temporary, - jboolean focusedWindowChangeAllowed, jlong time, jobject cause) +JNIEXPORT void JNICALL Java_sun_awt_windows_WComponentPeer_setFocus + (JNIEnv *env, jobject self, jboolean doSetFocus) { TRY; jobject selfGlobalRef = env->NewGlobalRef(self); - jobject lightweightChildGlobalRef = env->NewGlobalRef(lightweightChild); - - RequestFocusStruct *rfs = new RequestFocusStruct; - rfs->component = selfGlobalRef; - rfs->lightweightChild = lightweightChildGlobalRef; - rfs->temporary = temporary; - rfs->focusedWindowChangeAllowed = focusedWindowChangeAllowed; - rfs->time = time; - rfs->cause = env->NewGlobalRef(cause); - - return (jboolean)AwtToolkit::GetInstance().SyncCall( - (void*(*)(void*))AwtComponent::_RequestFocus, rfs); - // global refs and rfs are deleted in _RequestFocus - - CATCH_BAD_ALLOC_RET(JNI_FALSE); + + SetFocusStruct *sfs = new SetFocusStruct; + sfs->component = selfGlobalRef; + sfs->doSetFocus = doSetFocus; + + AwtToolkit::GetInstance().SyncCall( + (void*(*)(void*))AwtComponent::_SetFocus, sfs); + // global refs and self are deleted in _SetFocus + + CATCH_BAD_ALLOC; } /* @@ -6823,25 +6814,6 @@ CATCH_BAD_ALLOC_RET(NULL); } -JNIEXPORT jboolean JNICALL -Java_sun_awt_windows_WComponentPeer_processSynchronousLightweightTransfer(JNIEnv *env, jclass cls, - jobject heavyweight, - jobject descendant, - jboolean temporary, - jboolean focusedWindowChangeAllowed, - jlong time) -{ - TRY; - - return env->CallStaticBooleanMethod(AwtKeyboardFocusManager::keyboardFocusManagerCls, - AwtKeyboardFocusManager::processSynchronousTransfer, - heavyweight, descendant, temporary, - focusedWindowChangeAllowed, - time); - - CATCH_BAD_ALLOC_RET(JNI_TRUE); -} - JNIEXPORT void JNICALL Java_sun_awt_windows_WComponentPeer_pSetParent(JNIEnv* env, jobject self, jobject parent) { TRY; @@ -6883,6 +6855,21 @@ CATCH_BAD_ALLOC; } +JNIEXPORT void JNICALL +Java_sun_awt_windows_WComponentPeer_setZOrder(JNIEnv* env, jobject self, jlong above) +{ + TRY; + + SetZOrderStruct * data = new SetZOrderStruct; + data->component = env->NewGlobalRef(self); + data->above = above; + + AwtToolkit::GetInstance().SyncCall(AwtComponent::_SetZOrder, data); + // global refs and data are deleted in _SetLower + + CATCH_BAD_ALLOC; +} + } /* extern "C" */ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Component.h --- a/jdk/src/windows/native/sun/windows/awt_Component.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Component.h Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -78,8 +78,6 @@ class AwtDropTarget; -struct WmComponentSetFocusData; - /* * Message routing codes */ @@ -139,12 +137,13 @@ virtual void RegisterClass(); virtual void UnregisterClass(); - void CreateHWnd(JNIEnv *env, LPCWSTR title, + virtual void CreateHWnd(JNIEnv *env, LPCWSTR title, DWORD windowStyle, DWORD windowExStyle, int x, int y, int w, int h, HWND hWndParent, HMENU hMenu, COLORREF colorForeground, COLORREF colorBackground, jobject peer); + virtual void DestroyHWnd(); void InitPeerGraphicsConfig(JNIEnv *env, jobject peer); virtual void Dispose(); @@ -221,17 +220,10 @@ virtual BOOL IsContainer() { return FALSE;} // Plain components can't /** - * Perform some actions which by default are being performed by Default Window procedure of - * this window class - * For detailed comments see implementation in awt_Component.cpp + * Returns TRUE if this message will trigger native focus change, FALSE otherwise. */ - virtual BOOL ActMouseMessage(MSG * pMsg); - /** - * Returns TRUE if this message will this component to become focused. Returns FALSE otherwise. - */ - inline BOOL IsFocusingMessage(UINT message) { - return message == WM_LBUTTONDOWN || message == WM_LBUTTONUP || message == WM_LBUTTONDBLCLK; - } + virtual BOOL IsFocusingKeyMessage(MSG *pMsg); + virtual BOOL IsFocusingMouseMessage(MSG *pMsg); BOOL IsFocusable(); @@ -373,7 +365,7 @@ } void SendKeyEventToFocusOwner(jint id, jlong when, jint raw, jint cooked, - jint modifiers, jint keyLocation, + jint modifiers, jint keyLocation, jlong nativeCode, MSG *msg = NULL); /* * Allocate and initialize a new java.awt.event.KeyEvent, and @@ -381,7 +373,7 @@ * from the target. */ void SendKeyEvent(jint id, jlong when, jint raw, jint cooked, - jint modifiers, jint keyLocation, + jint modifiers, jint keyLocation, jlong nativeCode, MSG *msg = NULL); /* @@ -431,13 +423,6 @@ */ virtual BOOL InheritsNativeMouseWheelBehavior(); - /* Functions for MouseWheel support on Windows95 - * These should only be called if running on 95 - */ - static void Wheel95Init(); - INLINE static UINT Wheel95GetMsg() {return sm_95WheelMessage;} - static UINT Wheel95GetScrLines(); - /* Determines whether the component is obscured by another window */ // Called on Toolkit thread static jboolean _IsObscured(void *param); @@ -457,6 +442,7 @@ static UINT GetButtonMK(int mouseButton); static UINT WindowsKeyToJavaKey(UINT windowsKey, UINT modifiers); static void JavaKeyToWindowsKey(UINT javaKey, UINT *windowsKey, UINT *modifiers, UINT originalWindowsKey); + static void UpdateDynPrimaryKeymap(UINT wkey, UINT jkeyLegacy, jint keyLocation, UINT modifiers); INLINE static void AwtComponent::JavaKeyToWindowsKey(UINT javaKey, UINT *windowsKey, UINT *modifiers) @@ -480,6 +466,12 @@ HIMC ImmGetContext(); HIMC ImmAssociateContext(HIMC himc); HWND GetProxyFocusOwner(); + + INLINE HWND GetProxyToplevelContainer() { + HWND proxyHWnd = GetProxyFocusOwner(); + return ::GetAncestor(proxyHWnd, GA_ROOT); // a browser in case of EmbeddedFrame + } + void CallProxyDefWindowProc(UINT message, WPARAM wParam, LPARAM lParam, @@ -517,11 +509,6 @@ virtual MsgRouting WmShowWindow(BOOL show, UINT status); virtual MsgRouting WmSetFocus(HWND hWndLost); virtual MsgRouting WmKillFocus(HWND hWndGot); - jboolean WmComponentSetFocus(WmComponentSetFocusData *data); - // Use instead of ::SetFocus to maintain special focusing semantics for - // Windows which are not Frames/Dialogs. - BOOL AwtSetFocus(); - virtual MsgRouting WmCtlColor(HDC hDC, HWND hCtrl, UINT ctlColor, HBRUSH& retBrush); virtual MsgRouting WmHScroll(UINT scrollCode, UINT pos, HWND hScrollBar); @@ -611,10 +598,6 @@ jintArray CreatePrintedPixels(SIZE &loc, SIZE &size); - static void * GetNativeFocusOwner(); - static void * GetNativeFocusedWindow(); - static void ClearGlobalFocusOwner(); - /* * HWND, AwtComponent and Java Peer interaction * @@ -673,7 +656,6 @@ static void _SetForeground(void *param); static void _SetBackground(void *param); static void _SetFont(void *param); - static jboolean _RequestFocus(void *param); static void _Start(void *param); static void _BeginValidate(void *param); static void _EndValidate(void *param); @@ -683,10 +665,40 @@ static jintArray _CreatePrintedPixels(void *param); static jboolean _NativeHandlesWheelScrolling(void *param); static void _SetRectangularShape(void *param); + static void _SetZOrder(void *param); static HWND sm_focusOwner; + +private: static HWND sm_focusedWindow; +public: + static inline HWND GetFocusedWindow() { return sm_focusedWindow; } + static void SetFocusedWindow(HWND window); + + static void _SetFocus(void *param); + + static void *SetNativeFocusOwner(void *self); + static void *GetNativeFocusedWindow(); + static void *GetNativeFocusOwner(); + + static BOOL sm_inSynthesizeFocus; + + // Execute on Toolkit only. + INLINE static LRESULT SynthesizeWmSetFocus(HWND targetHWnd, HWND oppositeHWnd) { + sm_inSynthesizeFocus = TRUE; + LRESULT res = ::SendMessage(targetHWnd, WM_SETFOCUS, (WPARAM)oppositeHWnd, 0); + sm_inSynthesizeFocus = FALSE; + return res; + } + // Execute on Toolkit only. + INLINE static LRESULT SynthesizeWmKillFocus(HWND targetHWnd, HWND oppositeHWnd) { + sm_inSynthesizeFocus = TRUE; + LRESULT res = ::SendMessage(targetHWnd, WM_KILLFOCUS, (WPARAM)oppositeHWnd, 0); + sm_inSynthesizeFocus = FALSE; + return res; + } + static BOOL sm_bMenuLoop; static INLINE BOOL isMenuLoopActive() { return sm_bMenuLoop; @@ -710,14 +722,25 @@ BOOL m_visible; /* copy of Component.visible */ static BOOL sm_suppressFocusAndActivation; - static HWND sm_realFocusOpposite; + static BOOL sm_restoreFocusAndActivation; + + /* + * The function sets the focus-restore flag ON/OFF. + * When the flag is ON, focus is restored immidiately after the proxy loses it. + * All focus messages are suppressed. It's also assumed that sm_focusedWindow and + * sm_focusOwner don't change after the flag is set ON and before it's set OFF. + */ + static INLINE void SetRestoreFocus(BOOL doSet) { + sm_suppressFocusAndActivation = doSet; + sm_restoreFocusAndActivation = doSet; + } virtual void SetDragCapture(UINT flags); virtual void ReleaseDragCapture(UINT flags); - // 95 support for mouse wheel - static UINT sm_95WheelMessage; - static UINT sm_95WheelSupport; + //These functions are overridden in AwtWindow to handle non-opaque windows. + virtual void FillBackground(HDC hMemoryDC, SIZE &size); + virtual void FillAlpha(void *bitmapBits, SIZE &size, BYTE alpha); private: /* A bitmask keeps the button's numbers as MK_LBUTTON, MK_MBUTTON, MK_RBUTTON @@ -761,6 +784,8 @@ static BOOL sm_rtl; static BOOL sm_rtlReadingOrder; + static BOOL sm_PrimaryDynamicTableBuilt; + jobject m_InputMethod; BOOL m_useNativeCompWindow; LPARAM m_bitsCandType; @@ -780,8 +805,6 @@ static BOOL m_QueryNewPaletteCalled; - BOOL m_skipNextSetFocus; - static AwtComponent* sm_getComponentCache; // a cache for the GetComponent(..) method. int windowMoveLockPosX; @@ -790,7 +813,7 @@ int windowMoveLockPosCY; // 6524352: support finer-resolution - static int sm_wheelRotationAmount; + int m_wheelRotationAmount; /* * The association list of children's IDs and corresponding components. @@ -826,6 +849,7 @@ AwtComponent* SearchChild(UINT id); void RemoveChild(UINT id) ; static BOOL IsNavigationKey(UINT wkey); + static void BuildPrimaryDynamicTable(); ChildListItem* m_childList; @@ -876,14 +900,6 @@ void RealizePalettes(int screen); }; -struct WmComponentSetFocusData { - jobject lightweightChild; - jboolean temporary; - jboolean focusedWindowChangeAllowed; - jlong time; - jobject cause; -}; - void ReleaseDCList(HWND hwnd, DCList &list); void MoveDCToPassiveList(HDC hDC); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Dialog.cpp --- a/jdk/src/windows/native/sun/windows/awt_Dialog.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Dialog.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -230,25 +230,8 @@ if (::IsIconic(hWnd)) { ::ShowWindow(hWnd, SW_RESTORE); } - HWND topMostBlocker = blocker; - HWND toolkitHWnd = AwtToolkit::GetInstance().GetHWnd(); - while (::IsWindow(blocker)) { - topMostBlocker = blocker; - // fix for 6494032: restore the blocker if it was minimized - // together with its parent frame; in such cases the check - // ::IsIconic() for the blocker returns false, so we use - // ::IsWindowVisible() instead - if (!::IsWindowVisible(topMostBlocker) && - (topMostBlocker != toolkitHWnd)) - { - ::ShowWindow(topMostBlocker, SW_SHOWNA); - } - ::BringWindowToTop(blocker); - blocker = AwtWindow::GetModalBlocker(blocker); - } - if (topMostBlocker != toolkitHWnd) { - ::SetForegroundWindow(topMostBlocker); - } + PopupAllDialogs(blocker, TRUE, ::GetForegroundWindow(), FALSE); + // return 1 to prevent the system from allowing the operation return 1; } return CallNextHookEx(0, code, wParam, lParam); @@ -271,30 +254,11 @@ (wParam == WM_NCRBUTTONDOWN)) { HWND blocker = AwtWindow::GetModalBlocker(AwtComponent::GetTopLevelParentForWindow(hWnd)); - HWND topMostBlocker = blocker; - HWND prevForegroundWindow = ::GetForegroundWindow(); if (::IsWindow(blocker)) { - ::BringWindowToTop(hWnd); - } - while (::IsWindow(blocker)) { - topMostBlocker = blocker; - ::BringWindowToTop(blocker); - blocker = AwtWindow::GetModalBlocker(blocker); - } - if (::IsWindow(topMostBlocker)) { - // no beep/flash if the mouse was clicked in the taskbar menu - // or the dialog is currently inactive - if ((::WindowFromPoint(mhs->pt) == hWnd) && - (prevForegroundWindow == topMostBlocker)) - { - ::MessageBeep(MB_OK); - // some heuristics: 3 times x 64 milliseconds - AwtWindow::FlashWindowEx(topMostBlocker, 3, 64, FLASHW_CAPTION); - } - if (topMostBlocker != AwtToolkit::GetInstance().GetHWnd()) { - ::BringWindowToTop(topMostBlocker); - ::SetForegroundWindow(topMostBlocker); - } + BOOL onTaskbar = !(::WindowFromPoint(mhs->pt) == hWnd); + PopupAllDialogs(hWnd, FALSE, ::GetForegroundWindow(), onTaskbar); + // return a nonzero value to prevent the system from passing + // the message to the target window procedure return 1; } } @@ -303,6 +267,63 @@ return CallNextHookEx(0, nCode, wParam, lParam); } +/* + * The function goes through the heirarchy of the blocker dialogs and + * popups all the dialogs. Note that the function starts from the top + * blocker dialog and goes down to the dialog which is the bottom dialog. + * Using another traversal may cause to the flickering issue as a bottom + * dialog will cover a top dialog for some period of time. + */ +void AwtDialog::PopupAllDialogs(HWND dialog, BOOL isModalHook, HWND prevFGWindow, BOOL onTaskbar) +{ + HWND blocker = AwtWindow::GetModalBlocker(dialog); + BOOL isBlocked = ::IsWindow(blocker); + if (isBlocked) { + PopupAllDialogs(blocker, isModalHook, prevFGWindow, onTaskbar); + } + PopupOneDialog(dialog, blocker, isModalHook, prevFGWindow, onTaskbar); +} + +/* + * The function popups the dialog, it distinguishes non-blocked dialogs + * and activates the dialogs (sets as foreground window). If the dialog is + * blocked, then it changes the Z-order of the dialog. + */ +void AwtDialog::PopupOneDialog(HWND dialog, HWND blocker, BOOL isModalHook, HWND prevFGWindow, BOOL onTaskbar) +{ + if (dialog == AwtToolkit::GetInstance().GetHWnd()) { + return; + } + + // fix for 6494032 + if (isModalHook && !::IsWindowVisible(dialog)) { + ::ShowWindow(dialog, SW_SHOWNA); + } + + BOOL isBlocked = ::IsWindow(blocker); + UINT flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE; + + if (isBlocked) { + ::SetWindowPos(dialog, blocker, 0, 0, 0, 0, flags); + } else { + ::SetWindowPos(dialog, HWND_TOP, 0, 0, 0, 0, flags); + // no beep/flash if the mouse was clicked in the taskbar menu + // or the dialog is currently inactive + if (!isModalHook && !onTaskbar && (dialog == prevFGWindow)) { + AnimateModalBlocker(dialog); + } + ::BringWindowToTop(dialog); + ::SetForegroundWindow(dialog); + } +} + +void AwtDialog::AnimateModalBlocker(HWND window) +{ + ::MessageBeep(MB_OK); + // some heuristics: 3 times x 64 milliseconds + AwtWindow::FlashWindowEx(window, 3, 64, FLASHW_CAPTION); +} + LRESULT CALLBACK AwtDialog::MouseHookProc_NonTT(int nCode, WPARAM wParam, LPARAM lParam) { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Dialog.h --- a/jdk/src/windows/native/sun/windows/awt_Dialog.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Dialog.h Wed Jul 05 16:51:11 2017 +0200 @@ -76,7 +76,7 @@ * Thus we don't have to perform any transitive (a blocker of a blocker) checks. */ INLINE virtual BOOL IsFocusedWindowModalBlocker() { - return (sm_focusedWindow != NULL) && (GetModalBlocker(sm_focusedWindow) == GetHWnd()); + return (AwtComponent::GetFocusedWindow() != NULL) && (GetModalBlocker(AwtComponent::GetFocusedWindow()) == GetHWnd()); } // finds and activates some window after the modal dialog is hidden @@ -113,6 +113,9 @@ */ static void ModalPerformActivation(HWND hWnd); + static void PopupAllDialogs(HWND dialog, BOOL isModalHook, HWND prevFGWindow, BOOL onTaskbar); + static void PopupOneDialog(HWND dialog, HWND blocker, BOOL isModalHook, HWND prevFGWindow, BOOL onTaskbar); + public: // WH_CBT hook procedure used in modality, prevents modal @@ -129,6 +132,8 @@ // example on browser's thread when running in Java Plugin static LRESULT CALLBACK MouseHookProc_NonTT(int code, WPARAM wParam, LPARAM lParam); + + static void AnimateModalBlocker(HWND window); }; #endif /* AWT_DIALOG_H */ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_FileDialog.cpp --- a/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_FileDialog.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -101,7 +101,8 @@ } } - return ComCtl32Util::GetInstance().DefWindowProc(NULL, hWnd, message, wParam, lParam); + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hWnd, NativeDialogWndProcProp)); + return ComCtl32Util::GetInstance().DefWindowProc(lpfnWndProc, hWnd, message, wParam, lParam); } static UINT_PTR CALLBACK @@ -135,16 +136,19 @@ } // subclass dialog's parent to receive additional messages - ComCtl32Util::GetInstance().SubclassHWND(parent, - FileDialogWndProc); + WNDPROC lpfnWndProc = ComCtl32Util::GetInstance().SubclassHWND(parent, + FileDialogWndProc); + ::SetProp(parent, NativeDialogWndProcProp, reinterpret_cast<HANDLE>(lpfnWndProc)); break; } case WM_DESTROY: { + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(parent, NativeDialogWndProcProp)); ComCtl32Util::GetInstance().UnsubclassHWND(parent, FileDialogWndProc, - NULL); + lpfnWndProc); ::RemoveProp(parent, ModalDialogPeerProp); + ::RemoveProp(parent, NativeDialogWndProcProp); break; } case WM_NOTIFY: { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Frame.cpp --- a/jdk/src/windows/native/sun/windows/awt_Frame.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Frame.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -39,8 +39,6 @@ #include <sun_awt_windows_WEmbeddedFramePeer.h> -BOOL isAppActive = FALSE; - /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code. */ @@ -90,8 +88,10 @@ */ jfieldID AwtFrame::handleID; -jfieldID AwtFrame::stateID; + jfieldID AwtFrame::undecoratedID; +jmethodID AwtFrame::getExtendedStateMID; +jmethodID AwtFrame::setExtendedStateMID; jmethodID AwtFrame::activateEmbeddingTopLevelMID; @@ -110,6 +110,7 @@ m_isInputMethodWindow = FALSE; m_isUndecorated = FALSE; m_proxyFocusOwner = NULL; + m_lastProxiedFocusOwner = NULL; m_actualFocusedWindow = NULL; m_iconic = FALSE; m_zoomed = FALSE; @@ -232,7 +233,7 @@ frame->InitPeerGraphicsConfig(env, self); AwtToolkit::GetInstance().RegisterEmbedderProcessId(hwndParent); } else { - jint state = env->GetIntField(target, AwtFrame::stateID); + jint state = env->CallIntMethod(self, AwtFrame::getExtendedStateMID); DWORD exStyle; DWORD style; @@ -285,7 +286,6 @@ ::GetSysColor(COLOR_WINDOWTEXT), ::GetSysColor(COLOR_WINDOWFRAME), self); - /* * Reshape here instead of during create, so that a * WM_NCCALCSIZE is sent. @@ -319,12 +319,13 @@ AwtComponent::GetComponentImpl(::GetParent(hwnd)); if (!parent || parent->GetProxyFocusOwner() != hwnd || - message == AwtComponent::WmAwtIsComponent) + message == AwtComponent::WmAwtIsComponent || + message == WM_GETOBJECT) { return ComCtl32Util::GetInstance().DefWindowProc(NULL, hwnd, message, wParam, lParam); } - AwtComponent *p = NULL; + AwtComponent *focusOwner = NULL; // IME and input language related messages need to be sent to a window // which has the Java input focus switch (message) { @@ -342,16 +343,37 @@ case WM_IME_KEYUP: case WM_INPUTLANGCHANGEREQUEST: case WM_INPUTLANGCHANGE: - p = AwtComponent::GetComponent(sm_focusOwner); - if (p != NULL) { - return p->WindowProc(message, wParam, lParam); + // TODO: when a Choice's list is dropped down and we're scrolling in + // the list WM_MOUSEWHEEL messages come to the poxy, not to the list. Why? + case WM_MOUSEWHEEL: + focusOwner = AwtComponent::GetComponent(parent->GetLastProxiedFocusOwner()); + if (focusOwner != NULL) { + return focusOwner->WindowProc(message, wParam, lParam); } break; + case WM_SETFOCUS: + if (!sm_suppressFocusAndActivation && parent->IsEmbeddedFrame()) { + parent->AwtSetActiveWindow(); + } + return 0; + case WM_KILLFOCUS: + if (!sm_suppressFocusAndActivation && parent->IsEmbeddedFrame()) { + AwtWindow::SynthesizeWmActivate(FALSE, parent->GetHWnd(), NULL); + + } else if (sm_restoreFocusAndActivation) { + if (AwtComponent::GetFocusedWindow() != NULL) { + AwtWindow *focusedWindow = (AwtWindow*)GetComponent(AwtComponent::GetFocusedWindow()); + if (focusedWindow != NULL) { + // Will just silently restore native focus & activation. + focusedWindow->AwtSetActiveWindow(); + } + } + } + return 0; case 0x0127: // WM_CHANGEUISTATE case 0x0128: // WM_UPDATEUISTATE return 0; } - return parent->WindowProc(message, wParam, lParam); CATCH_BAD_ALLOC_RET(0); @@ -554,7 +576,6 @@ if (m_grabbedWindow != NULL/* && !m_grabbedWindow->IsOneOfOwnersOf(this)*/) { m_grabbedWindow->Ungrab(); } - if (!IsFocusableWindow() && (button & LEFT_BUTTON)) { switch (hitTest) { case HTTOP: @@ -586,11 +607,6 @@ return AwtWindow::WmNcMouseDown(hitTest, x, y, button); } -MsgRouting AwtFrame::WmWindowPosChanged(LPARAM windowPos) { - return mrDoDefault; -} - - // Override AwtWindow::Reshape() to handle minimized/maximized // frames (see 6525850, 4065534) void AwtFrame::Reshape(int x, int y, int width, int height) @@ -827,6 +843,11 @@ MsgRouting AwtFrame::WmSize(UINT type, int w, int h) { + currentWmSizeState = type; + if (currentWmSizeState == SIZE_MINIMIZED) { + UpdateSecurityWarningVisibility(); + } + if (m_ignoreWmSize) { return mrDoDefault; } @@ -883,6 +904,11 @@ if (changed != 0) { DTRACE_PRINTLN2("AwtFrame::WmSize: reporting state change %x -> %x", oldState, newState); + + // sync target with peer + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + env->CallVoidMethod(GetPeer(env), AwtFrame::setExtendedStateMID, newState); + // report (de)iconification to old clients if (changed & java_awt_Frame_ICONIFIED) { if (newState & java_awt_Frame_ICONIFIED) { @@ -907,33 +933,16 @@ MsgRouting AwtFrame::WmActivate(UINT nState, BOOL fMinimized, HWND opposite) { jint type; - BOOL doActivateFrame = TRUE; if (nState != WA_INACTIVE) { - if (!::IsWindow(AwtWindow::GetModalBlocker(GetHWnd()))) { - ::SetFocus(NULL); // The KeyboardFocusManager will set focus later - type = java_awt_event_WindowEvent_WINDOW_GAINED_FOCUS; - isAppActive = TRUE; - sm_focusedWindow = GetHWnd(); + if (::IsWindow(AwtWindow::GetModalBlocker(GetHWnd())) || + CheckActivateActualFocusedWindow(opposite)) + { + return mrConsume; + } + type = java_awt_event_WindowEvent_WINDOW_GAINED_FOCUS; + AwtComponent::SetFocusedWindow(GetHWnd()); - /* - * Fix for 4823903. - * If the window to be focused is actually not this Frame - * and it's visible then send it WM_ACTIVATE. - */ - if (m_actualFocusedWindow != NULL) { - HWND hwnd = m_actualFocusedWindow->GetHWnd(); - - if (hwnd != NULL && ::IsWindowVisible(hwnd)) { - - ::SendMessage(hwnd, WM_ACTIVATE, MAKEWPARAM(nState, fMinimized), (LPARAM)opposite); - doActivateFrame = FALSE; - } - m_actualFocusedWindow = NULL; - } - } else { - doActivateFrame = FALSE; - } } else { if (!::IsWindow(AwtWindow::GetModalBlocker(opposite))) { // If deactivation happens because of press on grabbing @@ -955,37 +964,63 @@ } } } - - // If actual focused window is not this Frame - if (sm_focusedWindow != GetHWnd()) { - - // Check that the Frame is going to be really inactive (i.e. the opposite is not its owned window) - if (opposite != NULL) { - AwtWindow *wOpposite = (AwtWindow *)AwtComponent::GetComponent(opposite); - - if (wOpposite != NULL && - wOpposite->GetOwningFrameOrDialog() != this) - { - AwtWindow *window = (AwtWindow *)AwtComponent::GetComponent(sm_focusedWindow); - - // If actual focused window is one of Frame's owned windows - if (window != NULL && window->GetOwningFrameOrDialog() == this) { - m_actualFocusedWindow = window; - } - } - } - } + CheckRetainActualFocusedWindow(opposite); type = java_awt_event_WindowEvent_WINDOW_LOST_FOCUS; - isAppActive = FALSE; - sm_focusedWindow = NULL; + AwtComponent::SetFocusedWindow(NULL); + sm_focusOwner = NULL; } } - if (doActivateFrame) { - SendWindowEvent(type, opposite); + SendWindowEvent(type, opposite); + return mrConsume; +} + +BOOL AwtFrame::CheckActivateActualFocusedWindow(HWND deactivatedOpositeHWnd) +{ + if (m_actualFocusedWindow != NULL) { + HWND hwnd = m_actualFocusedWindow->GetHWnd(); + if (hwnd != NULL && ::IsWindowVisible(hwnd)) { + SynthesizeWmActivate(TRUE, hwnd, deactivatedOpositeHWnd); + return TRUE; + } + m_actualFocusedWindow = NULL; } - return mrConsume; + return FALSE; +} + +void AwtFrame::CheckRetainActualFocusedWindow(HWND activatedOpositeHWnd) +{ + // If actual focused window is not this Frame + if (AwtComponent::GetFocusedWindow() != GetHWnd()) { + // Make sure the actual focused window is an owned window of this frame + AwtWindow *focusedWindow = (AwtWindow *)AwtComponent::GetComponent(AwtComponent::GetFocusedWindow()); + if (focusedWindow != NULL && focusedWindow->GetOwningFrameOrDialog() == this) { + + // Check that the opposite window is not this frame, nor an owned window of this frame + if (activatedOpositeHWnd != NULL) { + AwtWindow *oppositeWindow = (AwtWindow *)AwtComponent::GetComponent(activatedOpositeHWnd); + if (oppositeWindow && oppositeWindow != this && + oppositeWindow->GetOwningFrameOrDialog() != this) + { + m_actualFocusedWindow = focusedWindow; + } + } else { + m_actualFocusedWindow = focusedWindow; + } + } + } +} + +BOOL AwtFrame::AwtSetActiveWindow(BOOL isMouseEventCause, UINT hittest) +{ + if (hittest == HTCLIENT) { + // Don't let the actualFocusedWindow to steal focus if: + // a) the frame is clicked in its client area; + // b) focus is requested to some of the frame's child. + m_actualFocusedWindow = NULL; + } + return AwtWindow::AwtSetActiveWindow(isMouseEventCause); } MsgRouting AwtFrame::WmEnterMenuLoop(BOOL isTrackPopupMenu) @@ -1161,60 +1196,6 @@ return 0L; } -/* - * hWndLostFocus - the opposite component - * Returns TRUE if WM_SETFOCUS may be processed further, otherwise FALSE. - */ -BOOL AwtFrame::activateEmbeddedFrameOnSetFocus(HWND hWndLostFocus) { - - // If the EmbeddedFrame is not yet active, then this is either: - // - requesting focus on smth in the EmbeddedFrame, or - // - Alt hitting in IE while its menu is active (see 6374321). - // In both these cases we get WM_SETFOCUS without WM_ACTIVATE - // on the EmbeddedFrame. - if (sm_focusedWindow != GetHWnd()) { - HWND oppositeToplevelHWnd = AwtComponent::GetTopLevelParentForWindow(hWndLostFocus); - - // As we get WM_SETFOCUS from the native system we expect - // the native toplevel be set to the active window. - HWND activeWindowHWnd = ::GetActiveWindow(); - DASSERT(activeWindowHWnd == ::GetAncestor(GetHWnd(), GA_ROOT)); - - // See 6538154. - ::BringWindowToTop(activeWindowHWnd); - ::SetForegroundWindow(activeWindowHWnd); - - SynthesizeWmActivate(TRUE, oppositeToplevelHWnd); - - return FALSE; - } - // If the EmbeddedFrame is already active, then this is a mouse click - // or activation (by Alt-Tab, start etc). - return TRUE; -} - -/* - * hWndGotFocus - the opposite component - * Returns TRUE if WM_KILLFOCUS may be processed further, otherwise FALSE. - */ -BOOL AwtFrame::deactivateEmbeddedFrameOnKillFocus(HWND hWndGotFocus) { - HWND oppositeToplevelHWnd = AwtComponent::GetTopLevelParentForWindow(hWndGotFocus); - - if (oppositeToplevelHWnd != sm_focusedWindow) { - SynthesizeWmActivate(FALSE, oppositeToplevelHWnd); - } - return TRUE; -} - -/* - * Execute on Toolkit only. - */ -void AwtFrame::SynthesizeWmActivate(BOOL doActivate, HWND opposite) { - if (::IsWindowVisible(GetHWnd())) { - ::SendMessage(GetHWnd(), WM_ACTIVATE, MAKEWPARAM(doActivate ? WA_ACTIVE : WA_INACTIVE, FALSE), (LPARAM) opposite); - } -} - void AwtFrame::_SynthesizeWmActivate(void *param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); @@ -1229,7 +1210,7 @@ JNI_CHECK_PEER_GOTO(self, ret); frame = (AwtFrame *)pData; - frame->SynthesizeWmActivate(doActivate, NULL); + SynthesizeWmActivate(doActivate, frame->GetHWnd(), NULL); ret: env->DeleteGlobalRef(self); @@ -1594,7 +1575,7 @@ extern "C" { /* - * Class: sun_awt_windows_WFramePeer + * Class: java_awt_Frame * Method: initIDs * Signature: ()V */ @@ -1603,9 +1584,6 @@ { TRY; - AwtFrame::stateID = env->GetFieldID(cls, "state", "I"); - DASSERT(AwtFrame::stateID != NULL); - AwtFrame::undecoratedID = env->GetFieldID(cls,"undecorated","Z"); DASSERT(AwtFrame::undecoratedID != NULL); @@ -1614,6 +1592,25 @@ /* * Class: sun_awt_windows_WFramePeer + * Method: initIDs + * Signature: ()V + */ +JNIEXPORT void JNICALL +Java_sun_awt_windows_WFramePeer_initIDs(JNIEnv *env, jclass cls) +{ + TRY; + + AwtFrame::setExtendedStateMID = env->GetMethodID(cls, "setExtendedState", "(I)V"); + AwtFrame::getExtendedStateMID = env->GetMethodID(cls, "getExtendedState", "()I"); + + DASSERT(AwtFrame::setExtendedStateMID); + DASSERT(AwtFrame::getExtendedStateMID); + + CATCH_BAD_ALLOC; +} + +/* + * Class: sun_awt_windows_WFramePeer * Method: setState * Signature: (I)V */ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Frame.h --- a/jdk/src/windows/native/sun/windows/awt_Frame.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Frame.h Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2007 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,14 +48,14 @@ FRAME_SETMENUBAR }; - /* int handle field for sun.awt.windows.WEmbeddedFrame */ + /* java.awt.Frame fields and method IDs */ + static jfieldID undecoratedID; + + /* sun.awt.windows.WEmbeddedFrame fields and method IDs */ static jfieldID handleID; - /* int state field for java.awt.Frame */ - static jfieldID stateID; - - /* boolean undecorated field for java.awt.Frame */ - static jfieldID undecoratedID; + static jmethodID setExtendedStateMID; + static jmethodID getExtendedStateMID; /* method id for WEmbeddedFrame.requestActivate() method */ static jmethodID activateEmbeddingTopLevelMID; @@ -108,7 +108,6 @@ MsgRouting WmNcMouseDown(WPARAM hitTest, int x, int y, int button); MsgRouting WmNcMouseUp(WPARAM hitTest, int x, int y, int button); MsgRouting WmGetIcon(WPARAM iconType, LRESULT& retVal); - MsgRouting WmWindowPosChanged(LPARAM windowPos); MsgRouting WmShowWindow(BOOL show, UINT status); virtual MsgRouting WmSysCommand(UINT uCmdType, int xPos, int yPos); @@ -133,11 +132,6 @@ // adjusts the IME candidate window position if needed void AdjustCandidateWindowPos(); - void SynthesizeWmActivate(BOOL doActivate, HWND opposite); - - BOOL activateEmbeddedFrameOnSetFocus(HWND hWndLostFocus); - BOOL deactivateEmbeddedFrameOnKillFocus(HWND hWndGotFocus); - // invoked on Toolkit thread static jobject _GetBoundsPrivate(void *param); @@ -153,6 +147,14 @@ virtual void Reshape(int x, int y, int width, int height); + virtual BOOL AwtSetActiveWindow(BOOL isMouseEventCause = FALSE, UINT hittest = HTCLIENT); + + void CheckRetainActualFocusedWindow(HWND activatedOpositeHWnd); + BOOL CheckActivateActualFocusedWindow(HWND deactivatedOpositeHWnd); + + INLINE HWND GetLastProxiedFocusOwner() { return m_lastProxiedFocusOwner; } + INLINE void SetLastProxiedFocusOwner(HWND hwnd) { m_lastProxiedFocusOwner = hwnd; } + protected: /* The frame is undecorated. */ BOOL m_isUndecorated; @@ -189,6 +191,10 @@ or an AwtDialog (or one of its children) has the logical input focus. */ HWND m_proxyFocusOwner; + /* Retains the last/current sm_focusOwner proxied. Actually, it should be + * a component of an owned window last/currently active. */ + HWND m_lastProxiedFocusOwner; + /* * Fix for 4823903. * Retains a focus proxied window to set the focus correctly diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_InputMethod.cpp --- a/jdk/src/windows/native/sun/windows/awt_InputMethod.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_InputMethod.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1997-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -176,7 +176,7 @@ java_awt_event_KeyEvent_CHAR_UNDEFINED, unicodeChar, modifiers, - java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, + java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, (jlong)0, &msg); } else { MSG* pCopiedMsg = new MSG; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_KeyEvent.cpp --- a/jdk/src/windows/native/sun/windows/awt_KeyEvent.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_KeyEvent.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1998-1999 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1998-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,6 +32,10 @@ jfieldID AwtKeyEvent::keyCodeID; jfieldID AwtKeyEvent::keyCharID; +jfieldID AwtKeyEvent::rawCodeID; +jfieldID AwtKeyEvent::primaryLevelUnicodeID; +jfieldID AwtKeyEvent::scancodeID; +jfieldID AwtKeyEvent::extendedKeyCodeID; /************************************************************************ * AwtKeyEvent native methods @@ -45,9 +49,18 @@ AwtKeyEvent::keyCodeID = env->GetFieldID(cls, "keyCode", "I"); AwtKeyEvent::keyCharID = env->GetFieldID(cls, "keyChar", "C"); + AwtKeyEvent::rawCodeID = env->GetFieldID(cls, "rawCode", "J"); + AwtKeyEvent::primaryLevelUnicodeID = env->GetFieldID(cls, "primaryLevelUnicode", "J"); + AwtKeyEvent::scancodeID = env->GetFieldID(cls, "scancode", "J"); + AwtKeyEvent::extendedKeyCodeID = env->GetFieldID(cls, "extendedKeyCode", "J"); + DASSERT(AwtKeyEvent::keyCodeID != NULL); DASSERT(AwtKeyEvent::keyCharID != NULL); + DASSERT(AwtKeyEvent::rawCodeID != NULL); + DASSERT(AwtKeyEvent::primaryLevelUnicodeID != NULL); + DASSERT(AwtKeyEvent::scancodeID != NULL); + DASSERT(AwtKeyEvent::extendedKeyCodeID != NULL); CATCH_BAD_ALLOC; } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_KeyEvent.h --- a/jdk/src/windows/native/sun/windows/awt_KeyEvent.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_KeyEvent.h Wed Jul 05 16:51:11 2017 +0200 @@ -39,7 +39,10 @@ /* java.awt.KeyEvent field ids */ static jfieldID keyCodeID; static jfieldID keyCharID; - + static jfieldID rawCodeID; + static jfieldID primaryLevelUnicodeID; + static jfieldID scancodeID; + static jfieldID extendedKeyCodeID; }; #endif // AWT_KEYEVENT_H diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_KeyboardFocusManager.cpp --- a/jdk/src/windows/native/sun/windows/awt_KeyboardFocusManager.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_KeyboardFocusManager.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2004 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,30 +24,20 @@ */ #include "awt.h" -#include "awt_KeyboardFocusManager.h" #include "awt_Component.h" #include "awt_Toolkit.h" #include <java_awt_KeyboardFocusManager.h> - -jclass AwtKeyboardFocusManager::keyboardFocusManagerCls; -jmethodID AwtKeyboardFocusManager::shouldNativelyFocusHeavyweightMID; -jmethodID AwtKeyboardFocusManager::heavyweightButtonDownMID; -jmethodID AwtKeyboardFocusManager::markClearGlobalFocusOwnerMID; -jmethodID AwtKeyboardFocusManager::removeLastFocusRequestMID; -jfieldID AwtKeyboardFocusManager::isProxyActive; -jmethodID AwtKeyboardFocusManager::processSynchronousTransfer; +#include <jni.h> static jobject getNativeFocusState(JNIEnv *env, void*(*ftn)()) { - jobject lFocusState = NULL; + jobject gFocusState = (jobject)AwtToolkit::GetInstance().SyncCall(ftn); - jobject gFocusState = reinterpret_cast<jobject>(AwtToolkit::GetInstance(). - InvokeFunction(ftn)); if (gFocusState != NULL) { - lFocusState = env->NewLocalRef(gFocusState); + jobject lFocusState = env->NewLocalRef(gFocusState); env->DeleteGlobalRef(gFocusState); + return lFocusState; } - - return lFocusState; + return NULL; } extern "C" { @@ -61,53 +51,35 @@ Java_java_awt_KeyboardFocusManager_initIDs (JNIEnv *env, jclass cls) { +} + +/* + * Class: sun_awt_windows_WKeyboardFocusManagerPeer + * Method: setNativeFocusOwner + * Signature: (Lsun/awt/windows/WComponentPeer) + */ +JNIEXPORT void JNICALL +Java_sun_awt_windows_WKeyboardFocusManagerPeer_setNativeFocusOwner + (JNIEnv *env, jclass cls, jobject compPeer) +{ TRY; - AwtKeyboardFocusManager::keyboardFocusManagerCls = (jclass) - env->NewGlobalRef(cls); - AwtKeyboardFocusManager::shouldNativelyFocusHeavyweightMID = - env->GetStaticMethodID(cls, "shouldNativelyFocusHeavyweight", - "(Ljava/awt/Component;Ljava/awt/Component;ZZJLsun/awt/CausedFocusEvent$Cause;)I"); - AwtKeyboardFocusManager::heavyweightButtonDownMID = - env->GetStaticMethodID(cls, "heavyweightButtonDown", - "(Ljava/awt/Component;J)V"); - AwtKeyboardFocusManager::markClearGlobalFocusOwnerMID = - env->GetStaticMethodID(cls, "markClearGlobalFocusOwner", - "()Ljava/awt/Window;"); - AwtKeyboardFocusManager::removeLastFocusRequestMID = - env->GetStaticMethodID(cls, "removeLastFocusRequest", - "(Ljava/awt/Component;)V"); + jobject peerGlobalRef = env->NewGlobalRef(compPeer); - AwtKeyboardFocusManager::processSynchronousTransfer = - env->GetStaticMethodID(cls, "processSynchronousLightweightTransfer", - "(Ljava/awt/Component;Ljava/awt/Component;ZZJ)Z"); - - jclass keyclass = env->FindClass("java/awt/event/KeyEvent"); - DASSERT (keyclass != NULL); - - AwtKeyboardFocusManager::isProxyActive = - env->GetFieldID(keyclass, "isProxyActive", "Z"); + AwtToolkit::GetInstance().SyncCall(AwtComponent::SetNativeFocusOwner, + (void*)peerGlobalRef); + // peerGlobalRef is deleted in SetNativeFocusOwner - env->DeleteLocalRef(keyclass); - - DASSERT(AwtKeyboardFocusManager::keyboardFocusManagerCls != NULL); - DASSERT(AwtKeyboardFocusManager::shouldNativelyFocusHeavyweightMID != - NULL); - DASSERT(AwtKeyboardFocusManager::heavyweightButtonDownMID != NULL); - DASSERT(AwtKeyboardFocusManager::markClearGlobalFocusOwnerMID != NULL); - DASSERT(AwtKeyboardFocusManager::removeLastFocusRequestMID != NULL); - DASSERT(AwtKeyboardFocusManager::processSynchronousTransfer != NULL); CATCH_BAD_ALLOC; } - /* - * Class: sun_awt_KeyboardFocusManagerPeerImpl + * Class: sun_awt_windows_WKeyboardFocusManagerPeer * Method: getNativeFocusOwner - * Signature: ()Ljava/awt/Component; + * Signature: (Lsun/awt/windows/WComponentPeer) */ JNIEXPORT jobject JNICALL -Java_sun_awt_KeyboardFocusManagerPeerImpl_getNativeFocusOwner +Java_sun_awt_windows_WKeyboardFocusManagerPeer_getNativeFocusOwner (JNIEnv *env, jclass cls) { TRY; @@ -118,12 +90,12 @@ } /* - * Class: sun_awt_KeyboardFocusManagerPeerImpl + * Class: sun_awt_windows_WKeyboardFocusManagerPeer * Method: getNativeFocusedWindow * Signature: ()Ljava/awt/Window; */ JNIEXPORT jobject JNICALL -Java_sun_awt_KeyboardFocusManagerPeerImpl_getNativeFocusedWindow +Java_sun_awt_windows_WKeyboardFocusManagerPeer_getNativeFocusedWindow (JNIEnv *env, jclass cls) { TRY; @@ -132,21 +104,4 @@ CATCH_BAD_ALLOC_RET(NULL); } - -/* - * Class: sun_awt_KeyboardFocusManagerPeerImpl - * Method: clearNativeGlobalFocusOwner - * Signature: (Ljava/awt/Window;)V - */ -JNIEXPORT void JNICALL -Java_sun_awt_KeyboardFocusManagerPeerImpl_clearNativeGlobalFocusOwner - (JNIEnv *env, jobject self, jobject activeWindow) -{ - TRY; - - AwtToolkit::GetInstance().InvokeFunction - ((void*(*)(void))AwtComponent::ClearGlobalFocusOwner); - - CATCH_BAD_ALLOC; } -} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_KeyboardFocusManager.h --- a/jdk/src/windows/native/sun/windows/awt_KeyboardFocusManager.h Wed Jul 05 16:50:37 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* - * Copyright 2001-2002 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - */ - -#ifndef AWT_KEYBOARDFOCUSMANAGER_H -#define AWT_KEYBOARDFOCUSMANAGER_H - -#include <jni.h> - -class AwtKeyboardFocusManager { -public: - - static jclass keyboardFocusManagerCls; - static jmethodID shouldNativelyFocusHeavyweightMID; - static jmethodID heavyweightButtonDownMID; - static jmethodID markClearGlobalFocusOwnerMID; - static jmethodID removeLastFocusRequestMID; - static jfieldID isProxyActive; - static jmethodID processSynchronousTransfer; -}; - -#endif // AWT_KEYBOARDFOCUSMANAGER_H diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_List.cpp --- a/jdk/src/windows/native/sun/windows/awt_List.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_List.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,6 @@ */ #include "awt_List.h" -#include "awt_KeyboardFocusManager.h" #include "awt_Canvas.h" #include "awt_Dimension.h" #include "awt_Toolkit.h" @@ -154,28 +153,6 @@ return c; } -BOOL AwtList::ActMouseMessage(MSG * pMsg) { - if (!IsFocusingMessage(pMsg->message)) { - return FALSE; - } - - if (pMsg->message == WM_LBUTTONDOWN) { - LONG item = static_cast<LONG>(SendListMessage(LB_ITEMFROMPOINT, 0, pMsg->lParam)); - if (item != LB_ERR) { - if (isMultiSelect) { - if (IsItemSelected(item)) { - Deselect(item); - } else { - Select(item); - } - } else { - Select(item); - } - } - } - return TRUE; -} - void AwtList::SetDragCapture(UINT flags) { // don't want to interfere with other controls @@ -473,17 +450,11 @@ } /* - * Fix for 6240202. List being inside a non-focusable Window (or non-focusable List - * being a single component inside a focusable Window) won't trigger ActionEvent by - * double click. All focus events will be filtered (in the AWT focus hook) for such - * a Window containing the List. In such a case OS Windows won't generate WM_COMMAND - * (and no WmNotify() will be called for the List). Here we call WmCommand() - * synthetically. + * As we consume WM_LBUTONDOWN the list won't trigger ActionEvent by double click. + * We trigger it ourselves. (see also 6240202) */ int clickCount = GetClickCount(); - if (button == LEFT_BUTTON && clickCount >= 2 && clickCount % 2 == 0 && - !GetContainer()->IsFocusableWindow()) - { + if (button == LEFT_BUTTON && clickCount >= 2 && clickCount % 2 == 0) { WmCommand(0, GetListHandle(), LBN_DBLCLK); } return mrResult; @@ -500,67 +471,32 @@ return mrConsume; } -// Override WmSetFocus and WmKillFocus so that they operate on the List handle -// instead of the wrapper handle. Otherwise, the methods are the same as their -// AwtComponent counterparts. - -MsgRouting AwtList::WmSetFocus(HWND hWndLostFocus) { - if (sm_focusOwner == GetListHandle()) { - sm_realFocusOpposite = NULL; - return mrConsume; - } - - sm_focusOwner = GetListHandle(); - - if (sm_realFocusOpposite != NULL) { - hWndLostFocus = sm_realFocusOpposite; - sm_realFocusOpposite = NULL; - } - - SendFocusEvent(java_awt_event_FocusEvent_FOCUS_GAINED, hWndLostFocus); - - return mrDoDefault; -} - -MsgRouting AwtList::WmKillFocus(HWND hWndGotFocus) { - if (sm_focusOwner != NULL && sm_focusOwner == hWndGotFocus) { - return mrConsume; - } - - if (sm_focusOwner != GetListHandle()) { - if (sm_focusOwner != NULL) { - if (hWndGotFocus != NULL && - AwtComponent::GetComponent(hWndGotFocus) != NULL) - { - sm_realFocusOpposite = sm_focusOwner; - } - ::SendMessage(sm_focusOwner, WM_KILLFOCUS, (WPARAM)hWndGotFocus, - 0); - } - return mrConsume; - } - - sm_focusOwner = NULL; - - SendFocusEvent(java_awt_event_FocusEvent_FOCUS_LOST, hWndGotFocus); - - return mrDoDefault; +BOOL AwtList::IsFocusingMouseMessage(MSG *pMsg) +{ + return pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONDBLCLK; } MsgRouting AwtList::HandleEvent(MSG *msg, BOOL synthetic) { - if (AwtComponent::sm_focusOwner != GetListHandle() && - (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK)) - { - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - jobject target = GetTarget(env); - env->CallStaticVoidMethod - (AwtKeyboardFocusManager::keyboardFocusManagerCls, - AwtKeyboardFocusManager::heavyweightButtonDownMID, - target, ((jlong)msg->time) & 0xFFFFFFFF); - env->DeleteLocalRef(target); + if (IsFocusingMouseMessage(msg)) { + LONG item = static_cast<LONG>(SendListMessage(LB_ITEMFROMPOINT, 0, msg->lParam)); + if (item != LB_ERR) { + if (isMultiSelect) { + if (IsItemSelected(item)) { + Deselect(item); + } else { + Select(item); + } + } else { + Select(item); + } + } + delete msg; + return mrConsume; } - + if (msg->message == WM_KEYDOWN && msg->wParam == VK_RETURN) { + WmNotify(LBN_DBLCLK); + } return AwtComponent::HandleEvent(msg, synthetic); } @@ -607,15 +543,6 @@ return mrDoDefault; } -MsgRouting -AwtList::WmKeyDown(UINT wkey, UINT repCnt, UINT flags, BOOL system) -{ - if (wkey == VK_RETURN) { - WmNotify(LBN_DBLCLK); - } - return AwtComponent::WmKeyDown(wkey, repCnt, flags, system); -} - BOOL AwtList::InheritsNativeMouseWheelBehavior() {return true;} jint AwtList::_GetMaxWidth(void *param) diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_List.h --- a/jdk/src/windows/native/sun/windows/awt_List.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_List.h Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -97,8 +97,6 @@ } } - BOOL ActMouseMessage(MSG* pMsg); - // Netscape : Change the font on the list and redraw the // items nicely. virtual void SetFont(AwtFont *pFont); @@ -116,7 +114,6 @@ MsgRouting WmMouseDown(UINT flags, int x, int y, int button); MsgRouting WmMouseUp(UINT flags, int x, int y, int button); MsgRouting WmNotify(UINT notifyCode); - MsgRouting WmKeyDown(UINT vkey, UINT repCnt, UINT flags, BOOL system); /* for multifont list */ MsgRouting OwnerDrawItem(UINT ctrlId, DRAWITEMSTRUCT& drawInfo); @@ -127,8 +124,6 @@ MsgRouting WmCtlColor(HDC hDC, HWND hCtrl, UINT ctlColor, HBRUSH& retBrush); - MsgRouting WmSetFocus(HWND hWndLostFocus); - MsgRouting WmKillFocus(HWND hWndGotFocus); MsgRouting HandleEvent(MSG *msg, BOOL synthetic); @@ -170,6 +165,8 @@ virtual BOOL InheritsNativeMouseWheelBehavior(); + virtual BOOL IsFocusingMouseMessage(MSG *pMsg); + // some methods called on Toolkit thread static jint _GetMaxWidth(void *param); static void _UpdateMaxItemWidth(void *param); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Panel.cpp --- a/jdk/src/windows/native/sun/windows/awt_Panel.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Panel.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -34,70 +34,6 @@ jfieldID AwtPanel::insets_ID; -static char* AWTPANEL_RESTACK_MSG_1 = "Peers array is null"; -static char* AWTPANEL_RESTACK_MSG_2 = "Peer null in JNI"; -static char* AWTPANEL_RESTACK_MSG_3 = "Native resources unavailable"; -static char* AWTPANEL_RESTACK_MSG_4 = "Child peer is null"; - -void* AwtPanel::Restack(void * param) { - TRY; - - JNIEnv* env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - jobjectArray peers = (jobjectArray)param; - - int peerCount = env->GetArrayLength(peers); - if (peerCount < 1) { - env->DeleteGlobalRef(peers); - return AWTPANEL_RESTACK_MSG_1; - } - - jobject self = env->GetObjectArrayElement(peers, 0); - // It's entirely possible that our native resources have been destroyed - // before our java peer - if we're dispose()d, for instance. - // Alert caller w/ IllegalComponentStateException. - if (self == NULL) { - env->DeleteGlobalRef(peers); - return AWTPANEL_RESTACK_MSG_2; - } - PDATA pData = JNI_GET_PDATA(self); - if (pData == NULL) { - env->DeleteGlobalRef(peers); - env->DeleteLocalRef(self); - return AWTPANEL_RESTACK_MSG_3; - } - - AwtPanel* panel = (AwtPanel*)pData; - - HWND prevWindow = 0; - - for (int i = 1; i < peerCount; i++) { - jobject peer = env->GetObjectArrayElement(peers, i); - if (peer == NULL) { - // Nonsense - env->DeleteGlobalRef(peers); - env->DeleteLocalRef(self); - return AWTPANEL_RESTACK_MSG_4; - } - PDATA child_pData = JNI_GET_PDATA(peer); - if (child_pData == NULL) { - env->DeleteLocalRef(peer); - env->DeleteGlobalRef(peers); - env->DeleteLocalRef(self); - return AWTPANEL_RESTACK_MSG_3; - } - AwtComponent* child_comp = (AwtComponent*)child_pData; - ::SetWindowPos(child_comp->GetHWnd(), prevWindow, 0, 0, 0, 0, - SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_DEFERERASE | SWP_ASYNCWINDOWPOS); - prevWindow = child_comp->GetHWnd(); - env->DeleteLocalRef(peer); - } - env->DeleteGlobalRef(peers); - env->DeleteLocalRef(self); - - CATCH_BAD_ALLOC_RET("Allocation error"); - return NULL; -} - /************************************************************************ * AwtPanel native methods */ @@ -116,18 +52,4 @@ CATCH_BAD_ALLOC; } -JNIEXPORT void JNICALL -Java_sun_awt_windows_WPanelPeer_pRestack(JNIEnv *env, jobject self, jobjectArray peers) { - - TRY; - - const char * error = (const char*)AwtToolkit::GetInstance().InvokeFunction(AwtPanel::Restack, env->NewGlobalRef(peers)); - if (error != NULL) { - JNU_ThrowByName(env, "java/awt/IllegalComponentStateException", error); - } - - CATCH_BAD_ALLOC; -} - - } /* extern "C" */ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Panel.h --- a/jdk/src/windows/native/sun/windows/awt_Panel.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Panel.h Wed Jul 05 16:51:11 2017 +0200 @@ -35,11 +35,8 @@ class AwtPanel { public: - static void* Restack(void * param); - /* java.awt.Panel field ids */ static jfieldID insets_ID; - }; #endif // AWT_PANEL_H diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_PrintDialog.cpp --- a/jdk/src/windows/native/sun/windows/awt_PrintDialog.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_PrintDialog.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -65,7 +65,8 @@ } } - return ComCtl32Util::GetInstance().DefWindowProc(NULL, hWnd, message, wParam, lParam); + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hWnd, NativeDialogWndProcProp)); + return ComCtl32Util::GetInstance().DefWindowProc(lpfnWndProc, hWnd, message, wParam, lParam); } static UINT_PTR CALLBACK @@ -87,7 +88,7 @@ DWORD style = ::GetClassLong(hdlg, GCL_STYLE); ::SetClassLong(hdlg,GCL_STYLE, style & ~CS_SAVEBITS); - ::SetFocus(hdlg); + ::SetFocus(hdlg); // will not break synthetic focus as hdlg is a native toplevel // set appropriate icon for parentless dialogs jobject awtParent = env->GetObjectField(peer, AwtPrintDialog::parentID); @@ -99,16 +100,19 @@ } // subclass dialog's parent to receive additional messages - ComCtl32Util::GetInstance().SubclassHWND(hdlg, - PrintDialogWndProc); + WNDPROC lpfnWndProc = ComCtl32Util::GetInstance().SubclassHWND(hdlg, + PrintDialogWndProc); + ::SetProp(hdlg, NativeDialogWndProcProp, reinterpret_cast<HANDLE>(lpfnWndProc)); break; } case WM_DESTROY: { + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hdlg, NativeDialogWndProcProp)); ComCtl32Util::GetInstance().UnsubclassHWND(hdlg, PrintDialogWndProc, - NULL); + lpfnWndProc); ::RemoveProp(hdlg, ModalDialogPeerProp); + ::RemoveProp(hdlg, NativeDialogWndProcProp); break; } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_PrintJob.cpp --- a/jdk/src/windows/native/sun/windows/awt_PrintJob.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_PrintJob.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -2885,7 +2885,8 @@ } } - return ComCtl32Util::GetInstance().DefWindowProc(NULL, hWnd, message, wParam, lParam); + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hWnd, NativeDialogWndProcProp)); + return ComCtl32Util::GetInstance().DefWindowProc(lpfnWndProc, hWnd, message, wParam, lParam); } /** @@ -2919,16 +2920,19 @@ } // subclass dialog's parent to receive additional messages - ComCtl32Util::GetInstance().SubclassHWND(hDlg, - PageDialogWndProc); + WNDPROC lpfnWndProc = ComCtl32Util::GetInstance().SubclassHWND(hDlg, + PageDialogWndProc); + ::SetProp(hDlg, NativeDialogWndProcProp, reinterpret_cast<HANDLE>(lpfnWndProc)); break; } case WM_DESTROY: { + WNDPROC lpfnWndProc = (WNDPROC)(::GetProp(hDlg, NativeDialogWndProcProp)); ComCtl32Util::GetInstance().UnsubclassHWND(hDlg, PageDialogWndProc, - NULL); + lpfnWndProc); ::RemoveProp(hDlg, ModalDialogPeerProp); + ::RemoveProp(hDlg, NativeDialogWndProcProp); break; } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_ScrollPane.cpp --- a/jdk/src/windows/native/sun/windows/awt_ScrollPane.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_ScrollPane.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -361,13 +361,6 @@ DASSERT(!safe_ExceptionOccurred(env)); } -BOOL AwtScrollPane::ActMouseMessage(MSG* pMsg) { - if (!IsFocusingMessage(pMsg->message)) { - return FALSE; - } - return TRUE; -} - MsgRouting AwtScrollPane::WmNcHitTest(UINT x, UINT y, LRESULT& retVal) { @@ -412,13 +405,10 @@ return mrConsume; } -/* - * Fix for BugTraq ID 4041703: keyDown not being invoked. - * This method overrides AwtCanvas::HandleEvent() since we - * don't want ScrollPanel to receive focus on mouse press. - */ MsgRouting AwtScrollPane::HandleEvent(MSG *msg, BOOL synthetic) { + // SunAwtScrollPane control doesn't cause activation on mouse/key events, + // so we can safely (for synthetic focus) pass them to the system proc. return AwtComponent::HandleEvent(msg, synthetic); } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_ScrollPane.h --- a/jdk/src/windows/native/sun/windows/awt_ScrollPane.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_ScrollPane.h Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -65,7 +65,6 @@ virtual void Reshape(int x, int y, int w, int h); virtual void BeginValidate() {} virtual void EndValidate() {} - BOOL ActMouseMessage(MSG* pMsg); /* * Fix for bug 4046446 diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Scrollbar.cpp --- a/jdk/src/windows/native/sun/windows/awt_Scrollbar.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Scrollbar.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,6 @@ #include "awt_Scrollbar.h" #include "awt_Canvas.h" #include "awt_Window.h" -#include "awt_KeyboardFocusManager.h" /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code. */ @@ -61,7 +60,6 @@ m_orientation = SB_HORZ; m_lineIncr = 0; m_pageIncr = 0; - m_ignoreFocusEvents = FALSE; m_prevCallback = NULL; m_prevCallbackPos = 0; ms_instanceCounter++; @@ -221,7 +219,6 @@ return retValue; } - MsgRouting AwtScrollbar::WmNcHitTest(UINT x, UINT y, LRESULT& retVal) { @@ -265,17 +262,10 @@ MsgRouting AwtScrollbar::HandleEvent(MSG *msg, BOOL synthetic) { - if (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) { - if (IsFocusable() && AwtComponent::sm_focusOwner != GetHWnd()) { - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - jobject target = GetTarget(env); - env->CallStaticVoidMethod - (AwtKeyboardFocusManager::keyboardFocusManagerCls, - AwtKeyboardFocusManager::heavyweightButtonDownMID, - target, ((jlong)msg->time) & 0xFFFFFFFF); - env->DeleteLocalRef(target); - AwtSetFocus(); - } + // SCROLLBAR control doesn't cause activation on mouse/key events, + // so we can safely (for synthetic focus) pass them to the system proc. + + if (IsFocusingMouseMessage(msg)) { // Left button press was already routed to default window // procedure in the WmMouseDown above. Propagating synthetic // press seems like a bad idea as internal message loop @@ -283,54 +273,19 @@ delete msg; return mrConsume; } - else { - return AwtComponent::HandleEvent(msg, synthetic); - } + return AwtComponent::HandleEvent(msg, synthetic); } - // Work around a windows bug descrbed in KB article Q73839. Reset // focus on scrollbars to update focus indicator. The article advises -// to disable/enable the scrollbar, but simply resetting the focus is -// sufficient. +// to disable/enable the scrollbar. void AwtScrollbar::UpdateFocusIndicator() { if (IsFocusable()) { - m_ignoreFocusEvents = TRUE; - ::SetFocus(NULL); - AwtSetFocus(); - m_ignoreFocusEvents = FALSE; - } -} - -MsgRouting -AwtScrollbar::WmKillFocus(HWND hWndGot) -{ - if (m_ignoreFocusEvents) { - // We are voluntary giving up focus and will get it back - // immediately. This is necessary to force windows to update - // the focus indicator. - sm_focusOwner = NULL; - return mrDoDefault; - } - else { - return AwtComponent::WmKillFocus(hWndGot); - } -} - -MsgRouting -AwtScrollbar::WmSetFocus(HWND hWndLost) -{ - if (m_ignoreFocusEvents) { - // We have voluntary gave up focus and are getting it back - // now. This is necessary to force windows to update the - // focus indicator. - sm_focusOwner = GetHWnd(); - return mrDoDefault; - } - else { - return AwtComponent::WmSetFocus(hWndLost); + // todo: doesn't work + SendMessage((WPARAM)ESB_DISABLE_BOTH); + SendMessage((WPARAM)ESB_ENABLE_BOTH); } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Scrollbar.h --- a/jdk/src/windows/native/sun/windows/awt_Scrollbar.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Scrollbar.h Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -69,10 +69,6 @@ virtual MsgRouting WmHScroll(UINT scrollCode, UINT pos, HWND hScrollBar); virtual MsgRouting WmVScroll(UINT scrollCode, UINT pos, HWND hScrollBar); - // Work around KB Q73839 bug. - virtual MsgRouting WmSetFocus(HWND hWndLost); - virtual MsgRouting WmKillFocus(HWND hWndGot); - // Prevent KB Q102552 race. virtual MsgRouting WmMouseDown(UINT flags, int x, int y, int button); virtual MsgRouting WmNcHitTest(UINT x, UINT y, LRESULT& retVal); @@ -91,7 +87,6 @@ int m_pageIncr; // Work around KB Q73839 bug. - BOOL m_ignoreFocusEvents; void UpdateFocusIndicator(); // Don't do redundant callbacks. diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_TextArea.cpp --- a/jdk/src/windows/native/sun/windows/awt_TextArea.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_TextArea.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,9 +26,9 @@ #include "awt_Toolkit.h" #include "awt_TextArea.h" #include "awt_TextComponent.h" -#include "awt_KeyboardFocusManager.h" #include "awt_Canvas.h" #include "awt_Window.h" +#include "awt_Frame.h" /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code. */ @@ -362,13 +362,6 @@ DASSERT(::IsWindow(::GetParent(hWnd))); switch (message) { - case WM_SETFOCUS: - ::SendMessage(::GetParent(hWnd), EM_HIDESELECTION, FALSE, 0); - break; - case WM_KILLFOCUS: - ::SendMessage(::GetParent(hWnd), EM_HIDESELECTION, TRUE, 0); - break; - case WM_UNDO: case WM_CUT: case WM_COPY: @@ -400,7 +393,6 @@ MsgRouting AwtTextArea::WmContextMenu(HWND hCtrl, UINT xPos, UINT yPos) { - /* Use the system provided edit control class to generate context menu. */ if (m_hEditCtrl == NULL) { DWORD dwStyle = WS_CHILD; @@ -494,22 +486,11 @@ VERIFY(::ClientToScreen(GetHWnd(), &p)); } - ::SendMessage(m_hEditCtrl, WM_CONTEXTMENU, (WPARAM)m_hEditCtrl, - MAKELPARAM(p.x, p.y)); - /* - * After the context menu is dismissed focus is owned by the edit contol. - * Return focus to parent. - */ - if (IsFocusable() && AwtComponent::sm_focusOwner != GetHWnd()) { - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - jobject target = GetTarget(env); - env->CallStaticVoidMethod - (AwtKeyboardFocusManager::keyboardFocusManagerCls, - AwtKeyboardFocusManager::heavyweightButtonDownMID, - target, TimeHelper::getMessageTimeUTC()); - env->DeleteLocalRef(target); - AwtSetFocus(); - } + // The context menu steals focus from the proxy. + // So, set the focus-restore flag up. + SetRestoreFocus(TRUE); + ::SendMessage(m_hEditCtrl, WM_CONTEXTMENU, (WPARAM)m_hEditCtrl, MAKELPARAM(p.x, p.y)); + SetRestoreFocus(FALSE); return mrConsume; } @@ -558,20 +539,11 @@ * By consuming WM_MOUSEMOVE messages we also don't give * the RichEdit control a chance to recognize a drag gesture * and initiate its own drag-n-drop operation. + * + * The workaround also allows us to implement synthetic focus mechanism. + * */ - if (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) { - - if (IsFocusable() && AwtComponent::sm_focusOwner != GetHWnd()) { - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - jobject target = GetTarget(env); - env->CallStaticVoidMethod - (AwtKeyboardFocusManager::keyboardFocusManagerCls, - AwtKeyboardFocusManager::heavyweightButtonDownMID, - target, ((jlong)msg->time) & 0xFFFFFFFF); - env->DeleteLocalRef(target); - AwtSetFocus(); - } - + if (IsFocusingMouseMessage(msg)) { CHARRANGE cr; LONG lCurPos = EditGetCharFromPos(msg->pt); @@ -717,6 +689,7 @@ p.x = -1; p.y = -1; } + if (!::PostMessage(GetHWnd(), WM_CONTEXTMENU, (WPARAM)GetHWnd(), MAKELPARAM(p.x, p.y))) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); @@ -724,6 +697,8 @@ env->ExceptionDescribe(); env->ExceptionClear(); } + delete msg; + return mrConsume; } else if (msg->message == WM_MOUSEWHEEL) { // 4417236: If there is an old version of RichEd32.dll which // does not provide the mouse wheel scrolling we have to diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_TextComponent.cpp --- a/jdk/src/windows/native/sun/windows/awt_TextComponent.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_TextComponent.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,6 @@ #include "awt_Toolkit.h" #include "awt_TextComponent.h" -#include "awt_KeyboardFocusManager.h" #include "awt_Canvas.h" #include "jni.h" @@ -62,9 +61,9 @@ AwtTextComponent::AwtTextComponent() { m_synthetic = FALSE; - m_lStartPos = -1; - m_lEndPos = -1; - m_lLastPos = -1; + m_lStartPos = -1; + m_lEndPos = -1; + m_lLastPos = -1; m_isLFonly = FALSE; m_EOLchecked = FALSE; // javaEventsMask = 0; // accessibility support @@ -74,10 +73,6 @@ return TEXT("EDIT"); /* System provided edit control class */ } -BOOL AwtTextComponent::ActMouseMessage(MSG* pMsg) { - return FALSE; -} - /* Set a suitable font to IME against the component font. */ void AwtTextComponent::SetFont(AwtFont* font) { @@ -143,23 +138,16 @@ return mrDoDefault; } +BOOL AwtTextComponent::IsFocusingMouseMessage(MSG *pMsg) +{ + return pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONDBLCLK; +} + MsgRouting AwtTextComponent::HandleEvent(MSG *msg, BOOL synthetic) { MsgRouting returnVal; - if (AwtComponent::sm_focusOwner != GetHWnd() && IsFocusable() && - (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK)) - { - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - jobject target = GetTarget(env); - env->CallStaticVoidMethod - (AwtKeyboardFocusManager::keyboardFocusManagerCls, - AwtKeyboardFocusManager::heavyweightButtonDownMID, - target, ((jlong)msg->time) & 0xFFFFFFFF); - env->DeleteLocalRef(target); - } - /* * Store the 'synthetic' parameter so that the WM_PASTE security check * happens only for synthetic events. diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_TextComponent.h --- a/jdk/src/windows/native/sun/windows/awt_TextComponent.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_TextComponent.h Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -69,8 +69,6 @@ // called on Toolkit thread from JNI static jstring _GetText(void *param); - BOOL ActMouseMessage(MSG* pMsg); - void SetFont(AwtFont* font); /* @@ -80,6 +78,8 @@ MsgRouting HandleEvent(MSG *msg, BOOL synthetic); MsgRouting WmPaste(); + virtual BOOL IsFocusingMouseMessage(MSG *pMsg); + /* To be fully implemented in a future release MsgRouting WmKeyDown(UINT wkey, UINT repCnt, @@ -125,7 +125,6 @@ LONG m_lEndPos; LONG m_lLastPos; - HFONT m_hFont; //im --- end diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_TextField.cpp --- a/jdk/src/windows/native/sun/windows/awt_TextField.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_TextField.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,6 @@ #include "awt_Toolkit.h" #include "awt_TextField.h" #include "awt_TextComponent.h" -#include "awt_KeyboardFocusManager.h" #include "awt_Canvas.h" /* IMPORTANT! Read the README.JNI file for notes on JNI converted AWT code. @@ -150,135 +149,130 @@ * By consuming WM_MOUSEMOVE messages we also don't give * the RichEdit control a chance to recognize a drag gesture * and initiate its own drag-n-drop operation. + * + * The workaround also allows us to implement synthetic focus mechanism. */ - /** - * In non-focusable mode we don't pass mouse messages to native window thus making user unable - * to select the text. Below is the code from awt_TextArea.cpp which implements selection - * functionality. For safety this code is only being executed in non-focusable mode. - */ - if (!IsFocusable()) { - if (msg->message == WM_LBUTTONDOWN || msg->message == WM_LBUTTONDBLCLK) { + if (IsFocusingMouseMessage(msg)) { + CHARRANGE cr; + + LONG lCurPos = EditGetCharFromPos(msg->pt); + + EditGetSel(cr); + /* + * NOTE: Plain EDIT control always clears selection on mouse + * button press. We are clearing the current selection only if + * the mouse pointer is not over the selected region. + * In this case we sacrifice backward compatibility + * to allow dnd of the current selection. + */ + if (msg->message == WM_LBUTTONDBLCLK) { + SetStartSelectionPos(static_cast<LONG>(SendMessage( + EM_FINDWORDBREAK, WB_MOVEWORDLEFT, lCurPos))); + SetEndSelectionPos(static_cast<LONG>(SendMessage( + EM_FINDWORDBREAK, WB_MOVEWORDRIGHT, lCurPos))); + } else { + SetStartSelectionPos(lCurPos); + SetEndSelectionPos(lCurPos); + } + cr.cpMin = GetStartSelectionPos(); + cr.cpMax = GetEndSelectionPos(); + EditSetSel(cr); + + delete msg; + return mrConsume; + } else if (msg->message == WM_LBUTTONUP) { + + /* + * If the left mouse button is pressed on the selected region + * we don't clear the current selection. We clear it on button + * release instead. This is to allow dnd of the current selection. + */ + if (GetStartSelectionPos() == -1 && GetEndSelectionPos() == -1) { CHARRANGE cr; LONG lCurPos = EditGetCharFromPos(msg->pt); - EditGetSel(cr); - /* - * NOTE: Plain EDIT control always clears selection on mouse - * button press. We are clearing the current selection only if - * the mouse pointer is not over the selected region. - * In this case we sacrifice backward compatibility - * to allow dnd of the current selection. - */ - if (msg->message == WM_LBUTTONDBLCLK) { - SetStartSelectionPos(static_cast<LONG>(SendMessage( - EM_FINDWORDBREAK, WB_MOVEWORDLEFT, lCurPos))); - SetEndSelectionPos(static_cast<LONG>(SendMessage( - EM_FINDWORDBREAK, WB_MOVEWORDRIGHT, lCurPos))); - } else { - SetStartSelectionPos(lCurPos); - SetEndSelectionPos(lCurPos); + cr.cpMin = lCurPos; + cr.cpMax = lCurPos; + EditSetSel(cr); + } + + /* + * Cleanup the state variables when left mouse button is released. + * These state variables are designed to reflect the selection state + * while the left mouse button is pressed and be set to -1 otherwise. + */ + SetStartSelectionPos(-1); + SetEndSelectionPos(-1); + SetLastSelectionPos(-1); + + delete msg; + return mrConsume; + } else if (msg->message == WM_MOUSEMOVE && (msg->wParam & MK_LBUTTON)) { + + /* + * We consume WM_MOUSEMOVE while the left mouse button is pressed, + * so we have to simulate autoscrolling when mouse is moved outside + * of the client area. + */ + POINT p; + RECT r; + BOOL bScrollLeft = FALSE; + BOOL bScrollRight = FALSE; + BOOL bScrollUp = FALSE; + BOOL bScrollDown = FALSE; + + p.x = msg->pt.x; + p.y = msg->pt.y; + VERIFY(::GetClientRect(GetHWnd(), &r)); + + if (p.x < 0) { + bScrollLeft = TRUE; + p.x = 0; + } else if (p.x > r.right) { + bScrollRight = TRUE; + p.x = r.right - 1; + } + LONG lCurPos = EditGetCharFromPos(p); + + if (GetStartSelectionPos() != -1 && + GetEndSelectionPos() != -1 && + lCurPos != GetLastSelectionPos()) { + + CHARRANGE cr; + + SetLastSelectionPos(lCurPos); + + cr.cpMin = GetStartSelectionPos(); + cr.cpMax = GetLastSelectionPos(); + + EditSetSel(cr); + } + + if (bScrollLeft == TRUE || bScrollRight == TRUE) { + SCROLLINFO si; + memset(&si, 0, sizeof(si)); + si.cbSize = sizeof(si); + si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE; + + VERIFY(::GetScrollInfo(GetHWnd(), SB_HORZ, &si)); + if (bScrollLeft == TRUE) { + si.nPos = si.nPos - si.nPage / 2; + si.nPos = max(si.nMin, si.nPos); + } else if (bScrollRight == TRUE) { + si.nPos = si.nPos + si.nPage / 2; + si.nPos = min(si.nPos, si.nMax); } - cr.cpMin = GetStartSelectionPos(); - cr.cpMax = GetEndSelectionPos(); - EditSetSel(cr); - - delete msg; - return mrConsume; - } else if (msg->message == WM_LBUTTONUP) { - /* - * If the left mouse button is pressed on the selected region - * we don't clear the current selection. We clear it on button - * release instead. This is to allow dnd of the current selection. - */ - if (GetStartSelectionPos() == -1 && GetEndSelectionPos() == -1) { - CHARRANGE cr; - - LONG lCurPos = EditGetCharFromPos(msg->pt); - - cr.cpMin = lCurPos; - cr.cpMax = lCurPos; - EditSetSel(cr); - } - - /* - * Cleanup the state variables when left mouse button is released. - * These state variables are designed to reflect the selection state - * while the left mouse button is pressed and be set to -1 otherwise. - */ - SetStartSelectionPos(-1); - SetEndSelectionPos(-1); - SetLastSelectionPos(-1); - - delete msg; - return mrConsume; - } else if (msg->message == WM_MOUSEMOVE && (msg->wParam & MK_LBUTTON)) { - - /* - * We consume WM_MOUSEMOVE while the left mouse button is pressed, - * so we have to simulate autoscrolling when mouse is moved outside - * of the client area. + * Okay to use 16-bit position since RichEdit control adjusts + * its scrollbars so that their range is always 16-bit. */ - POINT p; - RECT r; - BOOL bScrollLeft = FALSE; - BOOL bScrollRight = FALSE; - BOOL bScrollUp = FALSE; - BOOL bScrollDown = FALSE; - - p.x = msg->pt.x; - p.y = msg->pt.y; - VERIFY(::GetClientRect(GetHWnd(), &r)); - - if (p.x < 0) { - bScrollLeft = TRUE; - p.x = 0; - } else if (p.x > r.right) { - bScrollRight = TRUE; - p.x = r.right - 1; - } - LONG lCurPos = EditGetCharFromPos(p); - - if (GetStartSelectionPos() != -1 && - GetEndSelectionPos() != -1 && - lCurPos != GetLastSelectionPos()) { - - CHARRANGE cr; - - SetLastSelectionPos(lCurPos); - - cr.cpMin = GetStartSelectionPos(); - cr.cpMax = GetLastSelectionPos(); - - EditSetSel(cr); - } - - if (bScrollLeft == TRUE || bScrollRight == TRUE) { - SCROLLINFO si; - memset(&si, 0, sizeof(si)); - si.cbSize = sizeof(si); - si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE; - - VERIFY(::GetScrollInfo(GetHWnd(), SB_HORZ, &si)); - if (bScrollLeft == TRUE) { - si.nPos = si.nPos - si.nPage / 2; - si.nPos = max(si.nMin, si.nPos); - } else if (bScrollRight == TRUE) { - si.nPos = si.nPos + si.nPage / 2; - si.nPos = min(si.nPos, si.nMax); - } - /* - * Okay to use 16-bit position since RichEdit control adjusts - * its scrollbars so that their range is always 16-bit. - */ - DASSERT(abs(si.nPos) < 0x8000); - SendMessage(WM_HSCROLL, - MAKEWPARAM(SB_THUMBPOSITION, LOWORD(si.nPos))); - } - delete msg; - return mrConsume; + DASSERT(abs(si.nPos) < 0x8000); + SendMessage(WM_HSCROLL, + MAKEWPARAM(SB_THUMBPOSITION, LOWORD(si.nPos))); } + delete msg; + return mrConsume; } /* * Store the 'synthetic' parameter so that the WM_PASTE security check diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Toolkit.cpp --- a/jdk/src/windows/native/sun/windows/awt_Toolkit.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Toolkit.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -56,6 +56,7 @@ #include "debug_mem.h" #include "ComCtl32Util.h" +#include "DllUtil.h" #include "D3DPipelineManager.h" @@ -334,6 +335,8 @@ m_mouseDown = FALSE; m_hGetMessageHook = 0; + m_hMouseLLHook = 0; + m_lastWindowUnderMouse = NULL; m_timer = 0; m_cmdIDs = new AwtCmdIDList(); @@ -483,6 +486,7 @@ tk.UnregisterClass(); ::UnhookWindowsHookEx(tk.m_hGetMessageHook); + UninstallMouseLowLevelHook(); tk.m_mainThreadId = 0; @@ -960,6 +964,79 @@ CATCH_BAD_ALLOC_RET(0); } +void AwtToolkit::InstallMouseLowLevelHook() +{ + // We need the low-level hook since we need to process mouse move + // messages outside of our windows. + m_hMouseLLHook = ::SetWindowsHookEx(WH_MOUSE_LL, + (HOOKPROC)MouseLowLevelHook, + GetModuleHandle(), NULL); + + // Reset the old value + m_lastWindowUnderMouse = NULL; +} + +void AwtToolkit::UninstallMouseLowLevelHook() +{ + if (m_hMouseLLHook != 0) { + ::UnhookWindowsHookEx(m_hMouseLLHook); + m_hMouseLLHook = 0; + } +} + +LRESULT CALLBACK AwtToolkit::MouseLowLevelHook(int code, + WPARAM wParam, LPARAM lParam) +{ + TRY; + + if (code >= 0 && wParam == WM_MOUSEMOVE) { + POINT pt = ((MSLLHOOKSTRUCT*)lParam)->pt; + + // We can't use GA_ROOTOWNER since in this case we'll go up to + // the root Java toplevel, not the actual owned toplevel. + HWND hwnd = ::GetAncestor(::WindowFromPoint(pt), GA_ROOT); + + AwtToolkit& tk = AwtToolkit::GetInstance(); + + if (tk.m_lastWindowUnderMouse != hwnd) { + AwtWindow *fw = NULL, *tw = NULL; + + if (tk.m_lastWindowUnderMouse) { + fw = (AwtWindow*) + AwtComponent::GetComponent(tk.m_lastWindowUnderMouse); + } + if (hwnd) { + tw = (AwtWindow*)AwtComponent::GetComponent(hwnd); + } + + tk.m_lastWindowUnderMouse = hwnd; + + if (fw) { + fw->UpdateSecurityWarningVisibility(); + } + // ... however, because we use GA_ROOT, we may find the warningIcon + // which is not a Java windows. + if (AwtWindow::IsWarningWindow(hwnd)) { + hwnd = ::GetParent(hwnd); + if (hwnd) { + tw = (AwtWindow*)AwtComponent::GetComponent(hwnd); + } + tk.m_lastWindowUnderMouse = hwnd; + } + if (tw) { + tw->UpdateSecurityWarningVisibility(); + } + + + } + } + + return ::CallNextHookEx(AwtToolkit::GetInstance().m_hMouseLLHook, code, + wParam, lParam); + + CATCH_BAD_ALLOC_RET(0); +} + /* * The main message loop */ @@ -1376,6 +1453,47 @@ return defaultIconSm; } +HICON AwtToolkit::GetSecurityWarningIcon(UINT index, UINT w, UINT h) +{ + //Note: should not exceed 10 because of the current implementation. + static const int securityWarningIconCounter = 3; + + static HICON securityWarningIcon[securityWarningIconCounter] = {NULL, NULL, NULL};; + static UINT securityWarningIconWidth[securityWarningIconCounter] = {0, 0, 0}; + static UINT securityWarningIconHeight[securityWarningIconCounter] = {0, 0, 0}; + + index = AwtToolkit::CalculateWave(index, securityWarningIconCounter); + + if (securityWarningIcon[index] == NULL || + w != securityWarningIconWidth[index] || + h != securityWarningIconHeight[index]) + { + if (securityWarningIcon[index] != NULL) + { + ::DestroyIcon(securityWarningIcon[index]); + } + + static const wchar_t securityWarningIconName[] = L"SECURITY_WARNING_"; + wchar_t iconResourceName[sizeof(securityWarningIconName) + 2]; + ::ZeroMemory(iconResourceName, sizeof(iconResourceName)); + wcscpy(iconResourceName, securityWarningIconName); + + wchar_t strIndex[2]; + ::ZeroMemory(strIndex, sizeof(strIndex)); + strIndex[0] = L'0' + index; + + wcscat(iconResourceName, strIndex); + + securityWarningIcon[index] = (HICON)::LoadImage(GetModuleHandle(), + iconResourceName, + IMAGE_ICON, w, h, LR_DEFAULTCOLOR); + securityWarningIconWidth[index] = w; + securityWarningIconHeight[index] = h; + } + + return securityWarningIcon[index]; +} + void AwtToolkit::SetHeapCheck(long flag) { if (flag) { printf("heap checking not supported with this build\n"); @@ -1428,6 +1546,49 @@ (JNIEnv*)JNU_GetEnv(jvm, JNI_VERSION_1_2) : m_env; } +BOOL AwtToolkit::GetScreenInsets(int screenNum, RECT * rect) +{ + /* if primary display */ + if (screenNum == 0) { + RECT rRW; + if (::SystemParametersInfo(SPI_GETWORKAREA,0,(void *) &rRW,0) == TRUE) { + rect->top = rRW.top; + rect->left = rRW.left; + rect->bottom = ::GetSystemMetrics(SM_CYSCREEN) - rRW.bottom; + rect->right = ::GetSystemMetrics(SM_CXSCREEN) - rRW.right; + return TRUE; + } + } + /* if additional display */ + else { + MONITORINFO *miInfo; + miInfo = AwtWin32GraphicsDevice::GetMonitorInfo(screenNum); + if (miInfo) { + rect->top = miInfo->rcWork.top - miInfo->rcMonitor.top; + rect->left = miInfo->rcWork.left - miInfo->rcMonitor.left; + rect->bottom = miInfo->rcMonitor.bottom - miInfo->rcWork.bottom; + rect->right = miInfo->rcMonitor.right - miInfo->rcWork.right; + return TRUE; + } + } + return FALSE; +} + + +void AwtToolkit::GetWindowRect(HWND hWnd, LPRECT lpRect) +{ + try { + if (S_OK == DwmAPI::DwmGetWindowAttribute(hWnd, + DwmAPI::DWMWA_EXTENDED_FRAME_BOUNDS, + lpRect, sizeof(*lpRect))) + { + return; + } + } catch (const DllUtil::Exception &) {} + + ::GetWindowRect(hWnd, lpRect); +} + /************************************************************************ * Toolkit native methods */ @@ -1756,7 +1917,6 @@ CATCH_BAD_ALLOC_RET(0); } - /* * Class: sun_awt_windows_WToolkit * Method: getSreenInsets @@ -1768,34 +1928,17 @@ jint screen) { jobject insets = NULL; - RECT rRW; - LPMONITORINFO miInfo; + RECT rect; TRY; -/* if primary display */ - if (screen == 0) { - if (::SystemParametersInfo(SPI_GETWORKAREA,0,(void *) &rRW,0) == TRUE) { - insets = env->NewObject(env->FindClass("java/awt/Insets"), - AwtToolkit::insetsMID, - rRW.top, - rRW.left, - ::GetSystemMetrics(SM_CYSCREEN) - rRW.bottom, - ::GetSystemMetrics(SM_CXSCREEN) - rRW.right); - } - } - -/* if additional display */ - else { - miInfo = AwtWin32GraphicsDevice::GetMonitorInfo(screen); - if (miInfo) { - insets = env->NewObject(env->FindClass("java/awt/Insets"), + if (AwtToolkit::GetScreenInsets(screen, &rect)) { + insets = env->NewObject(env->FindClass("java/awt/Insets"), AwtToolkit::insetsMID, - miInfo->rcWork.top - miInfo->rcMonitor.top, - miInfo->rcWork.left - miInfo->rcMonitor.left, - miInfo->rcMonitor.bottom - miInfo->rcWork.bottom, - miInfo->rcMonitor.right - miInfo->rcWork.right); - } + rect.top, + rect.left, + rect.bottom, + rect.right); } if (safe_ExceptionOccurred(env)) { diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Toolkit.h --- a/jdk/src/windows/native/sun/windows/awt_Toolkit.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Toolkit.h Wed Jul 05 16:51:11 2017 +0200 @@ -210,6 +210,8 @@ LPARAM lParam); static LRESULT CALLBACK ForegroundIdleFilter(int code, WPARAM wParam, LPARAM lParam); + static LRESULT CALLBACK MouseLowLevelHook(int code, WPARAM wParam, + LPARAM lParam); INLINE static AwtToolkit& GetInstance() { return theInstance; } INLINE void SetPeer(JNIEnv *env, jobject wToolkit) { @@ -311,6 +313,30 @@ HICON GetAwtIcon(); HICON GetAwtIconSm(); + // Calculate a wave-like value out of the integer 'value' and + // the specified period. + // The argument 'value' is an integer 0, 1, 2, ... *infinity*. + // + // Examples: + // Period == 3 + // Generated sequence: 0 1 2 1 0 ..... + // + // Period == 4 + // Generated sequence: 0 1 2 3 2 1 0 ..... + static inline UINT CalculateWave(UINT value, const UINT period) { + if (period < 2) { + return 0; + } + // -2 is necessary to avoid repeating extreme values (0 and period-1) + value %= period * 2 -2; + if (value >= period) { + value = period * 2 -2 - value; + } + return value; + } + + HICON GetSecurityWarningIcon(UINT index, UINT w, UINT h); + /* Turns on/off dialog modality for the system. */ INLINE AwtDialog* SetModal(AwtDialog* frame) { AwtDialog* previousDialog = m_pModalDialog; @@ -368,6 +394,7 @@ BOOL m_mouseDown; HHOOK m_hGetMessageHook; + HHOOK m_hMouseLLHook; UINT_PTR m_timer; class AwtCmdIDList* m_cmdIDs; @@ -411,6 +438,24 @@ public: static void SetEnv(JNIEnv *env); static JNIEnv* GetEnv(); + + static BOOL GetScreenInsets(int screenNum, RECT * rect); + + // If the DWM is active, this function uses + // DwmGetWindowAttribute()/DWMWA_EXTENDED_FRAME_BOUNDS. + // Otherwise, fall back to regular ::GetWindowRect(). + // See 6711576 for more details. + static void GetWindowRect(HWND hWnd, LPRECT lpRect); + + private: + // The window handle of a toplevel window last seen under the mouse cursor. + // See MouseLowLevelHook() for details. + HWND m_lastWindowUnderMouse; + public: + HWND GetWindowUnderMouse() { return m_lastWindowUnderMouse; } + + void InstallMouseLowLevelHook(); + void UninstallMouseLowLevelHook(); }; /* diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Win32GraphicsEnv.cpp --- a/jdk/src/windows/native/sun/windows/awt_Win32GraphicsEnv.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Win32GraphicsEnv.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -29,6 +29,7 @@ #include "awt_Win32GraphicsDevice.h" #include "Devices.h" #include "WindowsFlags.h" +#include "DllUtil.h" BOOL DWMIsCompositionEnabled(); @@ -89,13 +90,8 @@ /** * Returns true if dwm composition is enabled, false if it is not applicable * (if the OS is not Vista) or dwm composition is disabled. - * - * Note: since DWM composition state changes are very rare we load/unload the - * dll on every change. */ BOOL DWMIsCompositionEnabled() { - typedef HRESULT (WINAPI DwmIsCompositionEnabledFunc)(BOOL*); - // cheaper to check than whether it's vista or not if (dwmIsCompositionEnabled != DWM_COMP_UNDEFINED) { return (BOOL)dwmIsCompositionEnabled; @@ -107,32 +103,22 @@ } BOOL bRes = FALSE; - HMODULE hDwmApiDll = ::LoadLibrary(TEXT("dwmapi.dll")); - if (hDwmApiDll != NULL) { - DwmIsCompositionEnabledFunc *lpDwmIsCompEnabled = - (DwmIsCompositionEnabledFunc*) - GetProcAddress(hDwmApiDll, "DwmIsCompositionEnabled"); - if (lpDwmIsCompEnabled != NULL) { - BOOL bEnabled; - HRESULT res = lpDwmIsCompEnabled(&bEnabled); - if (SUCCEEDED(res)) { - bRes = bEnabled; - J2dTraceLn1(J2D_TRACE_VERBOSE, " composition enabled: %d",bRes); - } else { - J2dTraceLn1(J2D_TRACE_ERROR, - "IsDWMCompositionEnabled: error %x when detecting"\ - "if composition is enabled", res); - } + try { + BOOL bEnabled; + HRESULT res = DwmAPI::DwmIsCompositionEnabled(&bEnabled); + if (SUCCEEDED(res)) { + bRes = bEnabled; + J2dTraceLn1(J2D_TRACE_VERBOSE, " composition enabled: %d",bRes); } else { - J2dTraceLn(J2D_TRACE_ERROR, - "IsDWMCompositionEnabled: no DwmIsCompositionEnabled() "\ - "in dwmapi.dll"); + J2dTraceLn1(J2D_TRACE_ERROR, + "IsDWMCompositionEnabled: error %x when detecting"\ + "if composition is enabled", res); } - ::FreeLibrary(hDwmApiDll); - } else { + } catch (const DllUtil::Exception &) { J2dTraceLn(J2D_TRACE_ERROR, - "IsDWMCompositionEnabled: error opening dwmapi.dll"); + "IsDWMCompositionEnabled: no DwmIsCompositionEnabled() "\ + "in dwmapi.dll or dwmapi.dll cannot be loaded"); } dwmIsCompositionEnabled = bRes; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Window.cpp --- a/jdk/src/windows/native/sun/windows/awt_Window.cpp Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Window.cpp Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,9 +25,12 @@ #include "awt.h" +#include <jlong.h> + #include "awt_Component.h" #include "awt_Container.h" #include "awt_Frame.h" +#include "awt_Dialog.h" #include "awt_Insets.h" #include "awt_Panel.h" #include "awt_Toolkit.h" @@ -35,6 +38,7 @@ #include "awt_Win32GraphicsDevice.h" #include "awt_BitmapUtil.h" #include "awt_IconCursor.h" +#include "ComCtl32Util.h" #include "java_awt_Insets.h" #include <java_awt_Container.h> @@ -88,7 +92,6 @@ jint x, y; jint w, h; }; - // struct for _SetIconImagesData struct SetIconImagesDataStruct { jobject window; @@ -97,7 +100,6 @@ jintArray smallIconRaster; jint smw, smh; }; - // struct for _SetMinSize() method // and other methods setting sizes struct SizeStruct { @@ -114,6 +116,34 @@ jobject window; jlong blockerHWnd; }; +// struct for _SetOpacity() method +struct OpacityStruct { + jobject window; + jint iOpacity; +}; +// struct for _SetOpaque() method +struct OpaqueStruct { + jobject window; + jboolean isOpaque; +}; +// struct for _UpdateWindow() method +struct UpdateWindowStruct { + jobject window; + jintArray data; + HBITMAP hBitmap; + jint width, height; +}; +// Struct for _RequestWindowFocus() method +struct RequestWindowFocusStruct { + jobject component; + jboolean isMouseEventCause; +}; +// struct for _RepositionSecurityWarning() method +struct RepositionSecurityWarningStruct { + jobject window; +}; + + /************************************************************************ * AwtWindow fields */ @@ -121,17 +151,23 @@ jfieldID AwtWindow::warningStringID; jfieldID AwtWindow::locationByPlatformID; jfieldID AwtWindow::autoRequestFocusID; +jfieldID AwtWindow::securityWarningWidthID; +jfieldID AwtWindow::securityWarningHeightID; jfieldID AwtWindow::sysXID; jfieldID AwtWindow::sysYID; jfieldID AwtWindow::sysWID; jfieldID AwtWindow::sysHID; +jmethodID AwtWindow::getWarningStringMID; +jmethodID AwtWindow::calculateSecurityWarningPositionMID; + int AwtWindow::ms_instanceCounter = 0; HHOOK AwtWindow::ms_hCBTFilter; AwtWindow * AwtWindow::m_grabbedWindow = NULL; HWND AwtWindow::sm_retainingHierarchyZOrderInShow = NULL; BOOL AwtWindow::sm_resizing = FALSE; +UINT AwtWindow::untrustedWindowsCounter = 0; /************************************************************************ * AwtWindow class methods @@ -162,10 +198,34 @@ ::SetWindowsHookEx(WH_CBT, (HOOKPROC)AwtWindow::CBTFilter, 0, AwtToolkit::MainThread()); } + + m_opaque = TRUE; + m_opacity = 0xff; + + + warningString = NULL; + warningWindow = NULL; + securityTooltipWindow = NULL; + securityWarningAnimationStage = 0; + currentWmSizeState = SIZE_RESTORED; + + hContentBitmap = NULL; + + ::InitializeCriticalSection(&contentBitmapCS); } AwtWindow::~AwtWindow() { + if (warningString != NULL) { + delete [] warningString; + } + ::EnterCriticalSection(&contentBitmapCS); + if (hContentBitmap != NULL) { + ::DeleteObject(hContentBitmap); + hContentBitmap = NULL; + } + ::LeaveCriticalSection(&contentBitmapCS); + ::DeleteCriticalSection(&contentBitmapCS); } void AwtWindow::Dispose() @@ -204,10 +264,10 @@ } m_grabbed = TRUE; m_grabbedWindow = this; - if (sm_focusedWindow == NULL && IsFocusableWindow()) { + if (AwtComponent::GetFocusedWindow() == NULL && IsFocusableWindow()) { // we shouldn't perform grab in this case (see 4841881 & 6539458) Ungrab(); - } else if (GetHWnd() != sm_focusedWindow) { + } else if (GetHWnd() != AwtComponent::GetFocusedWindow()) { _ToFront(env->NewGlobalRef(GetPeer(env))); // Global ref was deleted in _ToFront } @@ -301,12 +361,40 @@ return mrDoDefault; } +void AwtWindow::RepositionSecurityWarning(JNIEnv *env) +{ + RECT rect; + CalculateWarningWindowBounds(env, &rect); + + ::SetWindowPos(warningWindow, HWND_NOTOPMOST, + rect.left, rect.top, + rect.right - rect.left, rect.bottom - rect.top, + SWP_ASYNCWINDOWPOS | SWP_NOACTIVATE | SWP_NOZORDER + ); +} + MsgRouting AwtWindow::WmWindowPosChanged(LPARAM windowPos) { - if (IsRetainingHierarchyZOrder() && ((WINDOWPOS *)windowPos)->flags & SWP_SHOWWINDOW) { + WINDOWPOS * wp = (WINDOWPOS *)windowPos; + + if (IsRetainingHierarchyZOrder() && wp->flags & SWP_SHOWWINDOW) { // By this time all the windows from the hierarchy are already notified about z-order change. // Thus we may and we should reset the trigger in order not to affect other changes. sm_retainingHierarchyZOrderInShow = NULL; } + + // Reposition the warning window + if (IsUntrusted() && warningWindow != NULL) { + if (wp->flags & SWP_HIDEWINDOW) { + UpdateSecurityWarningVisibility(); + } + + RepositionSecurityWarning((JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2)); + + if (wp->flags & SWP_SHOWWINDOW) { + UpdateSecurityWarningVisibility(); + } + } + return mrDoDefault; } @@ -326,21 +414,597 @@ lpwc->cbWndExtra = DLGWINDOWEXTRA; } +bool AwtWindow::IsWarningWindow(HWND hWnd) +{ + const UINT len = 128; + TCHAR windowClassName[len]; + + ::RealGetWindowClass(hWnd, windowClassName, len); + return 0 == _tcsncmp(windowClassName, + AwtWindow::GetWarningWindowClassName(), len); +} + LRESULT CALLBACK AwtWindow::CBTFilter(int nCode, WPARAM wParam, LPARAM lParam) { if (nCode == HCBT_ACTIVATE || nCode == HCBT_SETFOCUS) { - AwtComponent *comp = AwtComponent::GetComponent((HWND)wParam); - - if (comp != NULL && comp->IsTopLevel()) { - AwtWindow* win = (AwtWindow*)comp; - if (!win->IsFocusableWindow() || win->m_filterFocusAndActivation) { - return 1; // Don't change focus/activation. + HWND hWnd = (HWND)wParam; + AwtComponent *comp = AwtComponent::GetComponent(hWnd); + + if (comp == NULL) { + // Check if it's a security warning icon + // See: 5091224, 6181725, 6732583 + if (AwtWindow::IsWarningWindow(hWnd)) { + return 1; + } + } else { + if (comp->IsTopLevel()) { + AwtWindow* win = (AwtWindow*)comp; + + if (!win->IsFocusableWindow() || + win->m_filterFocusAndActivation) + { + return 1; // Don't change focus/activation. + } } } } return ::CallNextHookEx(AwtWindow::ms_hCBTFilter, nCode, wParam, lParam); } +void AwtWindow::InitSecurityWarningSize(JNIEnv *env) +{ + warningWindowWidth = ::GetSystemMetrics(SM_CXSMICON); + warningWindowHeight = ::GetSystemMetrics(SM_CYSMICON); + + jobject target = GetTarget(env); + + env->SetIntField(target, AwtWindow::securityWarningWidthID, + warningWindowWidth); + env->SetIntField(target, AwtWindow::securityWarningHeightID, + warningWindowHeight); + + env->DeleteLocalRef(target); +} + +void AwtWindow::CreateHWnd(JNIEnv *env, LPCWSTR title, + DWORD windowStyle, + DWORD windowExStyle, + int x, int y, int w, int h, + HWND hWndParent, HMENU hMenu, + COLORREF colorForeground, + COLORREF colorBackground, + jobject peer) +{ + // Retrieve the warning string + // Note: we need to get it before CreateHWnd() happens because + // the isUntrusted() method may be invoked while the HWND + // is being created in response to some window messages. + jobject target = env->GetObjectField(peer, AwtObject::targetID); + jstring javaWarningString = + (jstring)env->CallObjectMethod(target, AwtWindow::getWarningStringMID); + + if (javaWarningString != NULL) { + size_t length = env->GetStringLength(javaWarningString) + 1; + warningString = new WCHAR[length]; + env->GetStringRegion(javaWarningString, 0, + static_cast<jsize>(length - 1), warningString); + warningString[length-1] = L'\0'; + + env->DeleteLocalRef(javaWarningString); + } + env->DeleteLocalRef(target); + + AwtCanvas::CreateHWnd(env, title, + windowStyle, + windowExStyle, + x, y, w, h, + hWndParent, hMenu, + colorForeground, + colorBackground, + peer); + + // Now we need to create the warning window. + CreateWarningWindow(env); +} + +void AwtWindow::CreateWarningWindow(JNIEnv *env) +{ + if (!IsUntrusted()) { + return; + } + + if (++AwtWindow::untrustedWindowsCounter == 1) { + AwtToolkit::GetInstance().InstallMouseLowLevelHook(); + } + + InitSecurityWarningSize(env); + + RECT rect; + CalculateWarningWindowBounds(env, &rect); + + RegisterWarningWindowClass(); + warningWindow = ::CreateWindowEx( + WS_EX_NOACTIVATE | WS_EX_LAYERED, + GetWarningWindowClassName(), + warningString, + WS_POPUP, + rect.left, rect.top, + rect.right - rect.left, rect.bottom - rect.top, + GetHWnd(), // owner + NULL, // menu + AwtToolkit::GetInstance().GetModuleHandle(), + NULL // lParam + ); + if (warningWindow == NULL) { + //XXX: actually this is bad... We didn't manage to create the widow. + return; + } + + HICON hIcon = GetSecurityWarningIcon(); + + ICONINFO ii; + ::GetIconInfo(hIcon, &ii); + + //Note: we assume that every security icon has exactly the same shape. + HRGN rgn = BitmapUtil::BitmapToRgn(ii.hbmColor); + if (rgn) { + ::SetWindowRgn(warningWindow, rgn, TRUE); + } + + // Now we need to create the tooltip control for this window. + if (!ComCtl32Util::GetInstance().IsToolTipControlInitialized()) { + return; + } + + securityTooltipWindow = ::CreateWindowEx( + WS_EX_TOPMOST, + TOOLTIPS_CLASS, + NULL, + WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, + warningWindow, + NULL, + AwtToolkit::GetInstance().GetModuleHandle(), + NULL + ); + + ::SetWindowPos(securityTooltipWindow, + HWND_TOPMOST, 0, 0, 0, 0, + SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); + + + // We currently don't expect changing the size of the window, + // hence we may not care of updating the TOOL position/size. + ::GetClientRect(warningWindow, &rect); + + TOOLINFO ti; + + ti.cbSize = sizeof(ti); + ti.uFlags = TTF_SUBCLASS; + ti.hwnd = warningWindow; + ti.hinst = AwtToolkit::GetInstance().GetModuleHandle(); + ti.uId = 0; + ti.lpszText = warningString; + ti.rect.left = rect.left; + ti.rect.top = rect.top; + ti.rect.right = rect.right; + ti.rect.bottom = rect.bottom; + + ::SendMessage(securityTooltipWindow, TTM_ADDTOOL, + 0, (LPARAM) (LPTOOLINFO) &ti); +} + +void AwtWindow::DestroyWarningWindow() +{ + if (!IsUntrusted()) { + return; + } + if (--AwtWindow::untrustedWindowsCounter == 0) { + AwtToolkit::GetInstance().UninstallMouseLowLevelHook(); + } + if (warningWindow != NULL) { + // Note that the warningWindow is an owned window, and hence + // it would be destroyed automatically. However, the window + // class may only be unregistered if there's no any single + // window left using this class. Thus, we're destroying the + // warning window manually. Note that the tooltip window + // will be destroyed automatically because it's an owned + // window as well. + ::DestroyWindow(warningWindow); + warningWindow = NULL; + securityTooltipWindow = NULL; + UnregisterWarningWindowClass(); + } +} + +void AwtWindow::DestroyHWnd() +{ + DestroyWarningWindow(); + AwtCanvas::DestroyHWnd(); +} + +LPCTSTR AwtWindow::GetWarningWindowClassName() +{ + return TEXT("SunAwtWarningWindow"); +} + +void AwtWindow::FillWarningWindowClassInfo(WNDCLASS *lpwc) +{ + lpwc->style = 0L; + lpwc->lpfnWndProc = (WNDPROC)WarningWindowProc; + lpwc->cbClsExtra = 0; + lpwc->cbWndExtra = 0; + lpwc->hInstance = AwtToolkit::GetInstance().GetModuleHandle(), + lpwc->hIcon = AwtToolkit::GetInstance().GetAwtIcon(); + lpwc->hCursor = ::LoadCursor(NULL, IDC_ARROW); + lpwc->hbrBackground = NULL; + lpwc->lpszMenuName = NULL; + lpwc->lpszClassName = AwtWindow::GetWarningWindowClassName(); +} + +void AwtWindow::RegisterWarningWindowClass() +{ + WNDCLASS wc; + + ::ZeroMemory(&wc, sizeof(wc)); + + if (!::GetClassInfo(AwtToolkit::GetInstance().GetModuleHandle(), + AwtWindow::GetWarningWindowClassName(), &wc)) + { + AwtWindow::FillWarningWindowClassInfo(&wc); + ATOM atom = ::RegisterClass(&wc); + DASSERT(atom != 0); + } +} + +void AwtWindow::UnregisterWarningWindowClass() +{ + ::UnregisterClass(AwtWindow::GetWarningWindowClassName(), AwtToolkit::GetInstance().GetModuleHandle()); +} + +HICON AwtWindow::GetSecurityWarningIcon() +{ + HICON ico = AwtToolkit::GetInstance().GetSecurityWarningIcon(securityWarningAnimationStage, + warningWindowWidth, warningWindowHeight); + return ico; +} + +// This function calculates the bounds of the warning window and stores them +// into the RECT structure pointed by the argument rect. +void AwtWindow::CalculateWarningWindowBounds(JNIEnv *env, LPRECT rect) +{ + RECT windowBounds; + AwtToolkit::GetWindowRect(GetHWnd(), &windowBounds); + + jobject target = GetTarget(env); + jobject point2D = env->CallObjectMethod(target, + calculateSecurityWarningPositionMID, + (jdouble)windowBounds.left, (jdouble)windowBounds.top, + (jdouble)(windowBounds.right - windowBounds.left), + (jdouble)(windowBounds.bottom - windowBounds.top)); + env->DeleteLocalRef(target); + + static jclass point2DClassID = NULL; + static jmethodID point2DGetXMID = NULL; + static jmethodID point2DGetYMID = NULL; + + if (point2DClassID == NULL) { + jclass point2DClassIDLocal = env->FindClass("java/awt/geom/Point2D"); + point2DClassID = (jclass)env->NewGlobalRef(point2DClassIDLocal); + env->DeleteLocalRef(point2DClassIDLocal); + } + + if (point2DGetXMID == NULL) { + point2DGetXMID = env->GetMethodID(point2DClassID, "getX", "()D"); + } + if (point2DGetYMID == NULL) { + point2DGetYMID = env->GetMethodID(point2DClassID, "getY", "()D"); + } + + + int x = (int)env->CallDoubleMethod(point2D, point2DGetXMID); + int y = (int)env->CallDoubleMethod(point2D, point2DGetYMID); + + env->DeleteLocalRef(point2D); + + //Make sure the warning is not far from the window bounds + x = max(x, windowBounds.left - (int)warningWindowWidth - 2); + x = min(x, windowBounds.right + (int)warningWindowWidth + 2); + + y = max(y, windowBounds.top - (int)warningWindowHeight - 2); + y = min(y, windowBounds.bottom + (int)warningWindowHeight + 2); + + // Now make sure the warning window is visible on the screen + HMONITOR hmon = MonitorFromWindow(GetHWnd(), MONITOR_DEFAULTTOPRIMARY); + DASSERT(hmon != NULL); + + RECT monitorBounds; + RECT monitorInsets; + + MonitorBounds(hmon, &monitorBounds); + if (!AwtToolkit::GetScreenInsets(m_screenNum, &monitorInsets)) { + ::ZeroMemory(&monitorInsets, sizeof(monitorInsets)); + } + + x = max(x, monitorBounds.left + monitorInsets.left); + x = min(x, monitorBounds.right - monitorInsets.right - (int)warningWindowWidth); + + y = max(y, monitorBounds.top + monitorInsets.top); + y = min(y, monitorBounds.bottom - monitorInsets.bottom - (int)warningWindowHeight); + + rect->left = x; + rect->top = y; + rect->right = rect->left + warningWindowWidth; + rect->bottom = rect->top + warningWindowHeight; +} + +LRESULT CALLBACK AwtWindow::WarningWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch (uMsg) { + case WM_PAINT: + PaintWarningWindow(hwnd); + return 0; + + case WM_MOUSEACTIVATE: + { + // Retrive the owner of the warning window. + HWND javaWindow = ::GetParent(hwnd); + if (javaWindow) { + // If the window is blocked by a modal dialog, substitute + // its handle with the topmost blocker. + HWND topmostBlocker = GetTopmostModalBlocker(javaWindow); + if (::IsWindow(topmostBlocker)) { + javaWindow = topmostBlocker; + } + + ::BringWindowToTop(javaWindow); + + AwtWindow * window = + (AwtWindow*)AwtComponent::GetComponent(javaWindow); + if (window == NULL) { + // Quite unlikely to go into here, but it's way better + // than getting a crash. + ::SetForegroundWindow(javaWindow); + } else { + // Activate the window if it is focusable and inactive + if (window->IsFocusableWindow() && + javaWindow != ::GetActiveWindow()) { + ::SetForegroundWindow(javaWindow); + } else { + // ...otherwise just start the animation. + window->StartSecurityAnimation(akShow); + } + } + + // In every case if there's a top-most blocker, we need to + // enable modal animation. + if (::IsWindow(topmostBlocker)) { + AwtDialog::AnimateModalBlocker(topmostBlocker); + } + } + return MA_NOACTIVATEANDEAT; + } + } + return ::DefWindowProc(hwnd, uMsg, wParam, lParam); +} + +void AwtWindow::PaintWarningWindow(HWND warningWindow) +{ + RECT updateRect; + + if (!::GetUpdateRect(warningWindow, &updateRect, FALSE)) { + // got nothing to update + return; + } + + PAINTSTRUCT ps; + HDC hdc = ::BeginPaint(warningWindow, &ps); + if (hdc == NULL) { + // indicates an error + return; + } + + PaintWarningWindow(warningWindow, hdc); + + ::EndPaint(warningWindow, &ps); +} + +void AwtWindow::PaintWarningWindow(HWND warningWindow, HDC hdc) +{ + HWND javaWindow = ::GetParent(warningWindow); + + AwtWindow * window = (AwtWindow*)AwtComponent::GetComponent(javaWindow); + if (window == NULL) { + return; + } + + ::DrawIconEx(hdc, 0, 0, window->GetSecurityWarningIcon(), + window->warningWindowWidth, window->warningWindowHeight, + 0, NULL, DI_NORMAL); +} + +static const UINT_PTR IDT_AWT_SECURITYANIMATION = 0x102; + +// Approximately 6 times a second. 0.75 seconds total. +static const UINT securityAnimationTimerElapse = 150; +static const UINT securityAnimationMaxIterations = 5; + +void AwtWindow::RepaintWarningWindow() +{ + HDC hdc = ::GetDC(warningWindow); + PaintWarningWindow(warningWindow, hdc); + ::ReleaseDC(warningWindow, hdc); +} + +void AwtWindow::StartSecurityAnimation(AnimationKind kind) +{ + if (!IsUntrusted()) { + return; + } + if (warningWindow == NULL) { + return; + } + + securityAnimationKind = kind; + + securityWarningAnimationStage = 1; + ::SetTimer(GetHWnd(), IDT_AWT_SECURITYANIMATION, + securityAnimationTimerElapse, NULL); + + if (securityAnimationKind == akShow) { + ::SetWindowPos(warningWindow, HWND_NOTOPMOST, 0, 0, 0, 0, + SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE | + SWP_SHOWWINDOW); + + ::SetLayeredWindowAttributes(warningWindow, RGB(0, 0, 0), + 0xFF, LWA_ALPHA); + ::RedrawWindow(warningWindow, NULL, NULL, + RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN); + } +} + +void AwtWindow::StopSecurityAnimation() +{ + if (!IsUntrusted()) { + return; + } + if (warningWindow == NULL) { + return; + } + + securityWarningAnimationStage = 0; + ::KillTimer(GetHWnd(), IDT_AWT_SECURITYANIMATION); + + switch (securityAnimationKind) { + case akHide: + case akPreHide: + ::SetWindowPos(warningWindow, HWND_NOTOPMOST, 0, 0, 0, 0, + SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE | + SWP_HIDEWINDOW); + break; + case akShow: + RepaintWarningWindow(); + break; + } + + securityAnimationKind = akNone; +} + +MsgRouting AwtWindow::WmTimer(UINT_PTR timerID) +{ + if (timerID != IDT_AWT_SECURITYANIMATION) { + return mrPassAlong; + } + + if (securityWarningAnimationStage == 0) { + return mrConsume; + } + + securityWarningAnimationStage++; + if (securityWarningAnimationStage >= securityAnimationMaxIterations) { + if (securityAnimationKind == akPreHide) { + // chain real hiding + StartSecurityAnimation(akHide); + } else { + StopSecurityAnimation(); + } + } else { + switch (securityAnimationKind) { + case akHide: + { + BYTE opacity = ((int)0xFF * + (securityAnimationMaxIterations - + securityWarningAnimationStage)) / + securityAnimationMaxIterations; + ::SetLayeredWindowAttributes(warningWindow, + RGB(0, 0, 0), opacity, LWA_ALPHA); + } + break; + case akShow: + case akNone: // quite unlikely, but quite safe + RepaintWarningWindow(); + break; + } + } + + return mrConsume; +} + +// The security warning is visible if: +// 1. The window has the keyboard window focus, OR +// 2. The mouse pointer is located within the window bounds, +// or within the security warning icon. +void AwtWindow::UpdateSecurityWarningVisibility() +{ + if (!IsUntrusted()) { + return; + } + if (warningWindow == NULL) { + return; + } + + bool show = false; + + if (IsVisible() && currentWmSizeState != SIZE_MINIMIZED) { + if (AwtComponent::GetFocusedWindow() == GetHWnd()) { + show = true; + } + + HWND hwnd = AwtToolkit::GetInstance().GetWindowUnderMouse(); + if (hwnd == GetHWnd()) { + show = true; + } + if (hwnd == warningWindow) { + show = true; + } + } + + if (show && (!::IsWindowVisible(warningWindow) || + securityAnimationKind == akHide || + securityAnimationKind == akPreHide)) { + StartSecurityAnimation(akShow); + } + if (!show && ::IsWindowVisible(warningWindow)) { + StartSecurityAnimation(akPreHide); + } +} + +void AwtWindow::FocusedWindowChanged(HWND from, HWND to) +{ + AwtWindow * fw = (AwtWindow *)AwtComponent::GetComponent(from); + AwtWindow * tw = (AwtWindow *)AwtComponent::GetComponent(to); + + if (fw != NULL) { + fw->UpdateSecurityWarningVisibility(); + } + if (tw != NULL) { + tw->UpdateSecurityWarningVisibility(); + + // Flash on receiving the keyboard focus even if the warning + // has already been shown (e.g. by hovering with the mouse) + tw->StartSecurityAnimation(akShow); + } +} + +void AwtWindow::_RepositionSecurityWarning(void* param) +{ + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + + RepositionSecurityWarningStruct *rsws = + (RepositionSecurityWarningStruct *)param; + jobject self = rsws->window; + + PDATA pData; + JNI_CHECK_PEER_GOTO(self, ret); + AwtWindow *window = (AwtWindow *)pData; + + window->RepositionSecurityWarning(env); + + ret: + env->DeleteGlobalRef(self); + delete rsws; +} + /* Create a new AwtWindow object and window. */ AwtWindow* AwtWindow::Create(jobject self, jobject parent) { @@ -372,7 +1036,7 @@ window->m_isRetainingHierarchyZOrder = TRUE; } DWORD style = WS_CLIPCHILDREN | WS_POPUP; - DWORD exStyle = 0; + DWORD exStyle = WS_EX_NOACTIVATE; if (GetRTL()) { exStyle |= WS_EX_RIGHT | WS_EX_LEFTSCROLLBAR; if (GetRTLReadingOrder()) @@ -620,23 +1284,6 @@ ::GetClientRect(GetHWnd(), &inside); ::GetWindowRect(GetHWnd(), &outside); - jobject target = GetTarget(env); - jstring warningString = - (jstring)(env)->GetObjectField(target, AwtWindow::warningStringID); - if (warningString != NULL) { - ::CopyRect(&inside, &outside); - DefWindowProc(WM_NCCALCSIZE, FALSE, (LPARAM)&inside); - /* - * Fix for BugTraq ID 4304024. - * Calculate client rectangle in client coordinates. - */ - VERIFY(::OffsetRect(&inside, -inside.left, -inside.top)); - extraBottomInsets = ::GetSystemMetrics(SM_CYCAPTION) + - ((GetStyle() & WS_THICKFRAME) ? 2 : -2); - } - env->DeleteLocalRef(target); - env->DeleteLocalRef(warningString); - /* Update our inset member */ if (outside.right - outside.left > 0 && outside.bottom - outside.top > 0) { ::MapWindowPoints(GetHWnd(), 0, (LPPOINT)&inside, 2); @@ -863,45 +1510,93 @@ env->DeleteLocalRef(event); } +BOOL AwtWindow::AwtSetActiveWindow(BOOL isMouseEventCause, UINT hittest) +{ + // Fix for 6458497. + // Retreat if current foreground window is out of both our and embedder process. + // The exception is when activation is requested due to a mouse event. + if (!isMouseEventCause) { + HWND fgWindow = ::GetForegroundWindow(); + if (NULL != fgWindow) { + DWORD fgProcessID; + ::GetWindowThreadProcessId(fgWindow, &fgProcessID); + if (fgProcessID != ::GetCurrentProcessId() + && !AwtToolkit::GetInstance().IsEmbedderProcessId(fgProcessID)) + { + return FALSE; + } + } + } + + HWND proxyContainerHWnd = GetProxyToplevelContainer(); + HWND proxyHWnd = GetProxyFocusOwner(); + + if (proxyContainerHWnd == NULL || proxyHWnd == NULL) { + return FALSE; + } + + // Activate the proxy toplevel container + if (::GetActiveWindow() != proxyContainerHWnd) { + sm_suppressFocusAndActivation = TRUE; + ::BringWindowToTop(proxyContainerHWnd); + ::SetForegroundWindow(proxyContainerHWnd); + sm_suppressFocusAndActivation = FALSE; + + if (::GetActiveWindow() != proxyContainerHWnd) { + return FALSE; // activation has been rejected + } + } + + // Focus the proxy itself + if (::GetFocus() != proxyHWnd) { + sm_suppressFocusAndActivation = TRUE; + ::SetFocus(proxyHWnd); + sm_suppressFocusAndActivation = FALSE; + + if (::GetFocus() != proxyHWnd) { + return FALSE; // focus has been rejected (that is unlikely) + } + } + + const HWND focusedWindow = AwtComponent::GetFocusedWindow(); + if (focusedWindow != GetHWnd()) { + if (focusedWindow != NULL) { + // Deactivate the old focused window + AwtWindow::SynthesizeWmActivate(FALSE, focusedWindow, GetHWnd()); + } + // Activate the new focused window. + AwtWindow::SynthesizeWmActivate(TRUE, GetHWnd(), focusedWindow); + } + return TRUE; +} + MsgRouting AwtWindow::WmActivate(UINT nState, BOOL fMinimized, HWND opposite) { jint type; if (nState != WA_INACTIVE) { - ::SetFocus((sm_focusOwner == NULL || - AwtComponent::GetTopLevelParentForWindow(sm_focusOwner) != - GetHWnd()) ? NULL : sm_focusOwner); type = java_awt_event_WindowEvent_WINDOW_GAINED_FOCUS; - AwtToolkit::GetInstance(). - InvokeFunctionLater(BounceActivation, this); - sm_focusedWindow = GetHWnd(); + AwtComponent::SetFocusedWindow(GetHWnd()); } else { + // The owner is not necassarily getting WM_ACTIVATE(WA_INACTIVE). + // So, initiate retaining the actualFocusedWindow. + AwtFrame *owner = GetOwningFrameOrDialog(); + if (owner) { + owner->CheckRetainActualFocusedWindow(opposite); + } + if (m_grabbedWindow != NULL && !m_grabbedWindow->IsOneOfOwnersOf(this)) { m_grabbedWindow->Ungrab(); } type = java_awt_event_WindowEvent_WINDOW_LOST_FOCUS; - sm_focusedWindow = NULL; + AwtComponent::SetFocusedWindow(NULL); + sm_focusOwner = NULL; } SendWindowEvent(type, opposite); return mrConsume; } -void AwtWindow::BounceActivation(void *self) { - AwtWindow *wSelf = (AwtWindow *)self; - - if (::GetActiveWindow() == wSelf->GetHWnd()) { - AwtFrame *owner = wSelf->GetOwningFrameOrDialog(); - - if (owner != NULL) { - sm_suppressFocusAndActivation = TRUE; - ::SetActiveWindow(owner->GetHWnd()); - ::SetFocus(owner->GetProxyFocusOwner()); - sm_suppressFocusAndActivation = FALSE; - } - } -} - MsgRouting AwtWindow::WmCreate() { return mrDoDefault; @@ -925,17 +1620,20 @@ { /* * Original fix for 4810575. Modified for 6386592. - * If an owned window (not frame/dialog) gets disposed we should synthesize + * If a simple window gets disposed we should synthesize * WM_ACTIVATE for its nearest owner. This is not performed by default because * the owner frame/dialog is natively active. */ HWND hwndSelf = GetHWnd(); - HWND hwndParent = ::GetParent(hwndSelf); - - if (!show && IsSimpleWindow() && hwndSelf == sm_focusedWindow && - hwndParent != NULL && ::IsWindowVisible(hwndParent)) + HWND hwndOwner = ::GetParent(hwndSelf); + + if (!show && IsSimpleWindow() && hwndSelf == AwtComponent::GetFocusedWindow() && + hwndOwner != NULL && ::IsWindowVisible(hwndOwner)) { - ::PostMessage(hwndParent, WM_ACTIVATE, (WPARAM)WA_ACTIVE, (LPARAM)hwndSelf); + AwtFrame *owner = (AwtFrame*)AwtComponent::GetComponent(hwndOwner); + if (owner != NULL) { + owner->AwtSetActiveWindow(); + } } //Fixed 4842599: REGRESSION: JPopupMenu not Hidden Properly After Iconified and Deiconified @@ -1034,7 +1732,10 @@ */ MsgRouting AwtWindow::WmSize(UINT type, int w, int h) { + currentWmSizeState = type; + if (type == SIZE_MINIMIZED) { + UpdateSecurityWarningVisibility(); return mrDoDefault; } @@ -1098,103 +1799,18 @@ if (env->EnsureLocalCapacity(2) < 0) { return mrConsume; } - jobject target = GetTarget(env); - jstring warningString = - (jstring)(env)->GetObjectField(target, AwtWindow::warningStringID); - if (warningString != NULL) { - RECT r; - ::CopyRect(&r, &lpncsp->rgrc[0]); - retVal = static_cast<UINT>(DefWindowProc(WM_NCCALCSIZE, fCalcValidRects, - reinterpret_cast<LPARAM>(lpncsp))); - - /* Adjust non-client area for warning banner space. */ - m_warningRect.left = lpncsp->rgrc[0].left; - m_warningRect.right = lpncsp->rgrc[0].right; - m_warningRect.bottom = lpncsp->rgrc[0].bottom; - m_warningRect.top = - m_warningRect.bottom - ::GetSystemMetrics(SM_CYCAPTION); - if (GetStyle() & WS_THICKFRAME) { - m_warningRect.top -= 2; - } else { - m_warningRect.top += 2; - } - - lpncsp->rgrc[0].bottom = (m_warningRect.top >= lpncsp->rgrc[0].top) - ? m_warningRect.top - : lpncsp->rgrc[0].top; - - /* Convert to window-relative coordinates. */ - ::OffsetRect(&m_warningRect, -r.left, -r.top); - - /* Notify target of Insets change. */ - if (HasValidRect()) { - UpdateInsets(NULL); - } - - mrRetVal = mrConsume; - } else { - // WM_NCCALCSIZE is usually in response to a resize, but - // also can be triggered by SetWindowPos(SWP_FRAMECHANGED), - // which means the insets will have changed - rnk 4/7/1998 - retVal = static_cast<UINT>(DefWindowProc( - WM_NCCALCSIZE, fCalcValidRects, reinterpret_cast<LPARAM>(lpncsp))); - if (HasValidRect()) { - UpdateInsets(NULL); - } - mrRetVal = mrConsume; + // WM_NCCALCSIZE is usually in response to a resize, but + // also can be triggered by SetWindowPos(SWP_FRAMECHANGED), + // which means the insets will have changed - rnk 4/7/1998 + retVal = static_cast<UINT>(DefWindowProc( + WM_NCCALCSIZE, fCalcValidRects, reinterpret_cast<LPARAM>(lpncsp))); + if (HasValidRect()) { + UpdateInsets(NULL); } - env->DeleteLocalRef(target); - env->DeleteLocalRef(warningString); + mrRetVal = mrConsume; return mrRetVal; } -MsgRouting AwtWindow::WmNcPaint(HRGN hrgn) -{ - DefWindowProc(WM_NCPAINT, (WPARAM)hrgn, 0); - - JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); - if (env->EnsureLocalCapacity(2) < 0) { - return mrConsume; - } - jobject target = GetTarget(env); - jstring warningString = - (jstring)(env)->GetObjectField(target, AwtWindow::warningStringID); - if (warningString != NULL) { - RECT r; - ::CopyRect(&r, &m_warningRect); - HDC hDC = ::GetWindowDC(GetHWnd()); - DASSERT(hDC); - int iSaveDC = ::SaveDC(hDC); - VERIFY(::SelectClipRgn(hDC, NULL) != NULL); - VERIFY(::FillRect(hDC, &m_warningRect, (HBRUSH)::GetStockObject(BLACK_BRUSH))); - - if (GetStyle() & WS_THICKFRAME) { - /* draw edge */ - VERIFY(::DrawEdge(hDC, &r, EDGE_RAISED, BF_TOP)); - r.top += 2; - VERIFY(::DrawEdge(hDC, &r, EDGE_SUNKEN, BF_RECT)); - ::InflateRect(&r, -2, -2); - } - - /* draw warning text */ - LPCWSTR text = JNU_GetStringPlatformChars(env, warningString, NULL); - VERIFY(::SetBkColor(hDC, ::GetSysColor(COLOR_BTNFACE)) != CLR_INVALID); - VERIFY(::SetTextColor(hDC, ::GetSysColor(COLOR_BTNTEXT)) != CLR_INVALID); - VERIFY(::SelectObject(hDC, ::GetStockObject(DEFAULT_GUI_FONT)) != NULL); - VERIFY(::SetTextAlign(hDC, TA_LEFT | TA_BOTTOM) != GDI_ERROR); - VERIFY(::ExtTextOut(hDC, r.left+2, r.bottom-1, - ETO_CLIPPED | ETO_OPAQUE, - &r, text, static_cast<UINT>(wcslen(text)), NULL)); - VERIFY(::RestoreDC(hDC, iSaveDC)); - ::ReleaseDC(GetHWnd(), hDC); - JNU_ReleaseStringPlatformChars(env, warningString, text); - } - - env->DeleteLocalRef(target); - env->DeleteLocalRef(warningString); - return mrConsume; -} - MsgRouting AwtWindow::WmNcHitTest(UINT x, UINT y, LRESULT& retVal) { // If this window is blocked by modal dialog, return HTCLIENT for any point of it. @@ -1420,6 +2036,19 @@ } } +HWND AwtWindow::GetTopmostModalBlocker(HWND window) +{ + HWND ret, blocker = NULL; + + do { + ret = blocker; + blocker = AwtWindow::GetModalBlocker(window); + window = blocker; + } while (::IsWindow(blocker)); + + return ret; +} + void AwtWindow::FlashWindowEx(HWND hWnd, UINT count, DWORD timeout, DWORD flags) { FLASHWINFO fi; fi.cbSize = sizeof(fi); @@ -1430,6 +2059,38 @@ ::FlashWindowEx(&fi); } +jboolean +AwtWindow::_RequestWindowFocus(void *param) +{ + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + + RequestWindowFocusStruct *rfs = (RequestWindowFocusStruct *)param; + jobject self = rfs->component; + jboolean isMouseEventCause = rfs->isMouseEventCause; + + jboolean result = JNI_FALSE; + AwtWindow *window = NULL; + + PDATA pData; + JNI_CHECK_NULL_GOTO(self, "peer", ret); + pData = JNI_GET_PDATA(self); + if (pData == NULL) { + // do nothing just return false + goto ret; + } + + window = (AwtWindow *)pData; + if (::IsWindow(window->GetHWnd())) { + result = (jboolean)window->SendMessage(WM_AWT_WINDOW_SETACTIVE, (WPARAM)isMouseEventCause, 0); + } +ret: + env->DeleteGlobalRef(self); + + delete rfs; + + return result; +} + void AwtWindow::_ToFront(void *param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); @@ -1839,6 +2500,216 @@ //Does nothing for windows, is overriden for frames and dialogs } +void AwtWindow::RedrawWindow() +{ + if (isOpaque()) { + ::RedrawWindow(GetHWnd(), NULL, NULL, + RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN); + } else { + ::EnterCriticalSection(&contentBitmapCS); + if (hContentBitmap != NULL) { + UpdateWindowImpl(contentWidth, contentHeight, hContentBitmap); + } + ::LeaveCriticalSection(&contentBitmapCS); + } +} + +void AwtWindow::SetTranslucency(BYTE opacity, BOOL opaque) +{ + BYTE old_opacity = getOpacity(); + BOOL old_opaque = isOpaque(); + + if (opacity == old_opacity && opaque == old_opaque) { + return; + } + + setOpacity(opacity); + setOpaque(opaque); + + HWND hwnd = GetHWnd(); + + LONG ex_style = ::GetWindowLong(hwnd, GWL_EXSTYLE); + + if (opaque != old_opaque) { + ::EnterCriticalSection(&contentBitmapCS); + if (hContentBitmap != NULL) { + ::DeleteObject(hContentBitmap); + hContentBitmap = NULL; + } + ::LeaveCriticalSection(&contentBitmapCS); + } + + if (opaque && opacity == 0xff) { + // Turn off all the effects + ::SetWindowLong(hwnd, GWL_EXSTYLE, ex_style & ~WS_EX_LAYERED); + // Ask the window to repaint itself and all the children + RedrawWindow(); + } else { + // We're going to enable some effects + if (!(ex_style & WS_EX_LAYERED)) { + ::SetWindowLong(hwnd, GWL_EXSTYLE, ex_style | WS_EX_LAYERED); + } else { + if ((opaque && opacity < 0xff) ^ (old_opaque && old_opacity < 0xff)) { + // _One_ of the modes uses the SetLayeredWindowAttributes. + // Need to reset the style in this case. + // If both modes are simple (i.e. just changing the opacity level), + // no need to reset the style. + ::SetWindowLong(hwnd, GWL_EXSTYLE, ex_style & ~WS_EX_LAYERED); + ::SetWindowLong(hwnd, GWL_EXSTYLE, ex_style | WS_EX_LAYERED); + } + } + + if (opaque) { + // Simple opacity mode + ::SetLayeredWindowAttributes(hwnd, RGB(0, 0, 0), opacity, LWA_ALPHA); + } + } +} + +static HBITMAP CreateBitmapFromRaster(JNIEnv* env, jintArray raster, jint w, jint h) +{ + HBITMAP image = NULL; + if (raster != NULL) { + int* rasterBuffer = NULL; + try { + rasterBuffer = (int *)env->GetPrimitiveArrayCritical(raster, 0); + JNI_CHECK_NULL_GOTO(rasterBuffer, "raster data", done); + image = BitmapUtil::CreateBitmapFromARGBPre(w, h, w*4, rasterBuffer); + } catch (...) { + if (rasterBuffer != NULL) { + env->ReleasePrimitiveArrayCritical(raster, rasterBuffer, 0); + } + throw; + } + if (rasterBuffer != NULL) { + env->ReleasePrimitiveArrayCritical(raster, rasterBuffer, 0); + } + } +done: + return image; +} + +void AwtWindow::UpdateWindowImpl(int width, int height, HBITMAP hBitmap) +{ + if (isOpaque()) { + return; + } + + HWND hWnd = GetHWnd(); + HDC hdcDst = ::GetDC(NULL); + HDC hdcSrc = ::CreateCompatibleDC(NULL); + HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hdcSrc, hBitmap); + + //XXX: this code doesn't paint the children (say, the java.awt.Button)! + //So, if we ever want to support HWs here, we need to repaint them + //in some other way... + //::SendMessage(hWnd, WM_PRINT, (WPARAM)hdcSrc, /*PRF_CHECKVISIBLE |*/ + // PRF_CHILDREN /*| PRF_CLIENT | PRF_NONCLIENT*/); + + POINT ptSrc; + ptSrc.x = ptSrc.y = 0; + + RECT rect; + POINT ptDst; + SIZE size; + + ::GetWindowRect(hWnd, &rect); + ptDst.x = rect.left; + ptDst.y = rect.top; + size.cx = width; + size.cy = height; + + BLENDFUNCTION bf; + + bf.SourceConstantAlpha = getOpacity(); + bf.AlphaFormat = AC_SRC_ALPHA; + bf.BlendOp = AC_SRC_OVER; + bf.BlendFlags = 0; + + ::UpdateLayeredWindow(hWnd, hdcDst, &ptDst, &size, hdcSrc, &ptSrc, + RGB(0, 0, 0), &bf, ULW_ALPHA); + + ::ReleaseDC(NULL, hdcDst); + ::SelectObject(hdcSrc, hOldBitmap); + ::DeleteDC(hdcSrc); +} + +void AwtWindow::UpdateWindow(JNIEnv* env, jintArray data, int width, int height, + HBITMAP hNewBitmap) +{ + if (isOpaque()) { + return; + } + + HBITMAP hBitmap; + if (hNewBitmap == NULL) { + if (data == NULL) { + return; + } + hBitmap = CreateBitmapFromRaster(env, data, width, height); + if (hBitmap == NULL) { + return; + } + } else { + hBitmap = hNewBitmap; + } + + ::EnterCriticalSection(&contentBitmapCS); + if (hContentBitmap != NULL) { + ::DeleteObject(hContentBitmap); + } + hContentBitmap = hBitmap; + contentWidth = width; + contentHeight = height; + UpdateWindowImpl(width, height, hBitmap); + ::LeaveCriticalSection(&contentBitmapCS); +} + +void AwtWindow::FillBackground(HDC hMemoryDC, SIZE &size) +{ + if (isOpaque()) { + AwtCanvas::FillBackground(hMemoryDC, size); + } +} + +void AwtWindow::FillAlpha(void *bitmapBits, SIZE &size, BYTE alpha) +{ + if (isOpaque()) { + AwtCanvas::FillAlpha(bitmapBits, size, alpha); + } +} + +/* + * Fixed 6353381: it's improved fix for 4792958 + * which was backed-out to avoid 5059656 + */ +BOOL AwtWindow::HasValidRect() +{ + RECT inside; + RECT outside; + + if (::IsIconic(GetHWnd())) { + return FALSE; + } + + ::GetClientRect(GetHWnd(), &inside); + ::GetWindowRect(GetHWnd(), &outside); + + BOOL isZeroClientArea = (inside.right == 0 && inside.bottom == 0); + BOOL isInvalidLocation = ((outside.left == -32000 && outside.top == -32000) || // Win2k && WinXP + (outside.left == 32000 && outside.top == 32000) || // Win95 && Win98 + (outside.left == 3000 && outside.top == 3000)); // Win95 && Win98 + + // the bounds correspond to iconic state + if (isZeroClientArea && isInvalidLocation) + { + return FALSE; + } + + return TRUE; +} + + void AwtWindow::_SetIconImagesData(void * param) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); @@ -1940,11 +2811,14 @@ window->m_isFocusableWindow = isFocusableWindow; - if (!window->m_isFocusableWindow) { - LONG isPopup = window->GetStyle() & WS_POPUP; - window->SetStyleEx(window->GetStyleEx() | (isPopup ? 0 : WS_EX_APPWINDOW) | AWT_WS_EX_NOACTIVATE); - } else { - window->SetStyleEx(window->GetStyleEx() & ~WS_EX_APPWINDOW & ~AWT_WS_EX_NOACTIVATE); + // A simple window is permanently set to WS_EX_NOACTIVATE + if (!window->IsSimpleWindow()) { + if (!window->m_isFocusableWindow) { + LONG isPopup = window->GetStyle() & WS_POPUP; + window->SetStyleEx(window->GetStyleEx() | (isPopup ? 0 : WS_EX_APPWINDOW) | WS_EX_NOACTIVATE); + } else { + window->SetStyleEx(window->GetStyleEx() & ~WS_EX_APPWINDOW & ~WS_EX_NOACTIVATE); + } } ret: @@ -2009,36 +2883,68 @@ env->DeleteGlobalRef(self); } -/* - * Fixed 6353381: it's improved fix for 4792958 - * which was backed-out to avoid 5059656 - */ -BOOL AwtWindow::HasValidRect() +void AwtWindow::_SetOpacity(void* param) +{ + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + + OpacityStruct *os = (OpacityStruct *)param; + jobject self = os->window; + BYTE iOpacity = (BYTE)os->iOpacity; + + PDATA pData; + JNI_CHECK_PEER_GOTO(self, ret); + AwtWindow *window = (AwtWindow *)pData; + + window->SetTranslucency(iOpacity, window->isOpaque()); + + ret: + env->DeleteGlobalRef(self); + delete os; +} + +void AwtWindow::_SetOpaque(void* param) { - RECT inside; - RECT outside; - - if (::IsIconic(GetHWnd())) { - return FALSE; + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + + OpaqueStruct *os = (OpaqueStruct *)param; + jobject self = os->window; + BOOL isOpaque = (BOOL)os->isOpaque; + + PDATA pData; + JNI_CHECK_PEER_GOTO(self, ret); + AwtWindow *window = (AwtWindow *)pData; + + window->SetTranslucency(window->getOpacity(), isOpaque); + + ret: + env->DeleteGlobalRef(self); + delete os; +} + +void AwtWindow::_UpdateWindow(void* param) +{ + JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); + + UpdateWindowStruct *uws = (UpdateWindowStruct *)param; + jobject self = uws->window; + jintArray data = uws->data; + + PDATA pData; + JNI_CHECK_PEER_GOTO(self, ret); + AwtWindow *window = (AwtWindow *)pData; + + window->UpdateWindow(env, data, (int)uws->width, (int)uws->height, + uws->hBitmap); + + ret: + env->DeleteGlobalRef(self); + if (data != NULL) { + env->DeleteGlobalRef(data); } - - ::GetClientRect(GetHWnd(), &inside); - ::GetWindowRect(GetHWnd(), &outside); - - BOOL isZeroClientArea = (inside.right == 0 && inside.bottom == 0); - BOOL isInvalidLocation = ((outside.left == -32000 && outside.top == -32000) || // Win2k && WinXP - (outside.left == 32000 && outside.top == 32000) || // Win95 && Win98 - (outside.left == 3000 && outside.top == 3000)); // Win95 && Win98 - - // the bounds correspond to iconic state - if (isZeroClientArea && isInvalidLocation) - { - return FALSE; - } - - return TRUE; + delete uws; } + extern "C" { /* @@ -2055,8 +2961,16 @@ env->GetFieldID(cls, "warningString", "Ljava/lang/String;"); AwtWindow::locationByPlatformID = env->GetFieldID(cls, "locationByPlatform", "Z"); + AwtWindow::securityWarningWidthID = + env->GetFieldID(cls, "securityWarningWidth", "I"); + AwtWindow::securityWarningHeightID = + env->GetFieldID(cls, "securityWarningHeight", "I"); + AwtWindow::getWarningStringMID = + env->GetMethodID(cls, "getWarningString", "()Ljava/lang/String;"); AwtWindow::autoRequestFocusID = env->GetFieldID(cls, "autoRequestFocus", "Z"); + AwtWindow::calculateSecurityWarningPositionMID = + env->GetMethodID(cls, "calculateSecurityWarningPosition", "(DDDD)Ljava/awt/geom/Point2D;"); CATCH_BAD_ALLOC; } @@ -2489,4 +3403,138 @@ CATCH_BAD_ALLOC; } +/* + * Class: sun_awt_windows_WWindowPeer + * Method: setOpacity + * Signature: (I)V + */ +JNIEXPORT void JNICALL +Java_sun_awt_windows_WWindowPeer_setOpacity(JNIEnv *env, jobject self, + jint iOpacity) +{ + TRY; + + OpacityStruct *os = new OpacityStruct; + os->window = env->NewGlobalRef(self); + os->iOpacity = iOpacity; + + AwtToolkit::GetInstance().SyncCall(AwtWindow::_SetOpacity, os); + // global refs and mds are deleted in _SetMinSize + + CATCH_BAD_ALLOC; +} + +/* + * Class: sun_awt_windows_WWindowPeer + * Method: setOpaqueImpl + * Signature: (Z)V + */ +JNIEXPORT void JNICALL +Java_sun_awt_windows_WWindowPeer_setOpaqueImpl(JNIEnv *env, jobject self, + jboolean isOpaque) +{ + TRY; + + OpaqueStruct *os = new OpaqueStruct; + os->window = env->NewGlobalRef(self); + os->isOpaque = isOpaque; + + AwtToolkit::GetInstance().SyncCall(AwtWindow::_SetOpaque, os); + // global refs and mds are deleted in _SetMinSize + + CATCH_BAD_ALLOC; +} + +/* + * Class: sun_awt_windows_WWindowPeer + * Method: updateWindowImpl + * Signature: ([III)V + */ +JNIEXPORT void JNICALL +Java_sun_awt_windows_WWindowPeer_updateWindowImpl(JNIEnv *env, jobject self, + jintArray data, + jint width, jint height) +{ + TRY; + + UpdateWindowStruct *uws = new UpdateWindowStruct; + uws->window = env->NewGlobalRef(self); + uws->data = (jintArray)env->NewGlobalRef(data); + uws->hBitmap = NULL; + uws->width = width; + uws->height = height; + + AwtToolkit::GetInstance().InvokeFunction(AwtWindow::_UpdateWindow, uws); + // global refs and mds are deleted in _UpdateWindow + + CATCH_BAD_ALLOC; +} + +/** + * This method is called from the WGL pipeline when it needs to update + * the layered window WindowPeer's C++ level object. + */ +void AwtWindow_UpdateWindow(JNIEnv *env, jobject peer, + jint width, jint height, HBITMAP hBitmap) +{ + TRY; + + UpdateWindowStruct *uws = new UpdateWindowStruct; + uws->window = env->NewGlobalRef(peer); + uws->data = NULL; + uws->hBitmap = hBitmap; + uws->width = width; + uws->height = height; + + AwtToolkit::GetInstance().InvokeFunction(AwtWindow::_UpdateWindow, uws); + // global refs and mds are deleted in _UpdateWindow + + CATCH_BAD_ALLOC; +} + +/* + * Class: sun_awt_windows_WComponentPeer + * Method: requestFocus + * Signature: (Z)Z + */ +JNIEXPORT jboolean JNICALL Java_sun_awt_windows_WWindowPeer_requestWindowFocus + (JNIEnv *env, jobject self, jboolean isMouseEventCause) +{ + TRY; + + jobject selfGlobalRef = env->NewGlobalRef(self); + + RequestWindowFocusStruct *rfs = new RequestWindowFocusStruct; + rfs->component = selfGlobalRef; + rfs->isMouseEventCause = isMouseEventCause; + + return (jboolean)AwtToolkit::GetInstance().SyncCall( + (void*(*)(void*))AwtWindow::_RequestWindowFocus, rfs); + // global refs and rfs are deleted in _RequestWindowFocus + + CATCH_BAD_ALLOC_RET(JNI_FALSE); +} + +/* + * Class: sun_awt_windows_WWindowPeer + * Method: repositionSecurityWarning + * Signature: ()V + */ +JNIEXPORT void JNICALL +Java_sun_awt_windows_WWindowPeer_repositionSecurityWarning(JNIEnv *env, + jobject self) +{ + TRY; + + RepositionSecurityWarningStruct *rsws = + new RepositionSecurityWarningStruct; + rsws->window = env->NewGlobalRef(self); + + AwtToolkit::GetInstance().InvokeFunction( + AwtWindow::_RepositionSecurityWarning, rsws); + // global refs and mds are deleted in _RepositionSecurityWarning + + CATCH_BAD_ALLOC; +} + } /* extern "C" */ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awt_Window.h --- a/jdk/src/windows/native/sun/windows/awt_Window.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awt_Window.h Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,14 +34,12 @@ // property name tagging windows disabled by modality static LPCTSTR ModalBlockerProp = TEXT("SunAwtModalBlockerProp"); static LPCTSTR ModalDialogPeerProp = TEXT("SunAwtModalDialogPeerProp"); +static LPCTSTR NativeDialogWndProcProp = TEXT("SunAwtNativeDialogWndProcProp"); #ifndef WH_MOUSE_LL #define WH_MOUSE_LL 14 #endif -// WS_EX_NOACTIVATE is not defined in the headers we build with -#define AWT_WS_EX_NOACTIVATE 0x08000000L - class AwtFrame; /************************************************************************ @@ -56,6 +54,8 @@ static jfieldID locationByPlatformID; static jfieldID screenID; /* screen number passed over from WindowPeer */ static jfieldID autoRequestFocusID; + static jfieldID securityWarningWidthID; + static jfieldID securityWarningHeightID; // The coordinates at the peer. static jfieldID sysXID; @@ -63,6 +63,9 @@ static jfieldID sysWID; static jfieldID sysHID; + static jmethodID getWarningStringMID; + static jmethodID calculateSecurityWarningPositionMID; + AwtWindow(); virtual ~AwtWindow(); @@ -152,11 +155,12 @@ static void SetModalBlocker(HWND window, HWND blocker); static void SetAndActivateModalBlocker(HWND window, HWND blocker); + static HWND GetTopmostModalBlocker(HWND window); + /* * Windows message handler functions */ virtual MsgRouting WmActivate(UINT nState, BOOL fMinimized, HWND opposite); - static void BounceActivation(void *self); // used by WmActivate virtual MsgRouting WmCreate(); virtual MsgRouting WmClose(); virtual MsgRouting WmDestroy(); @@ -169,19 +173,36 @@ virtual MsgRouting WmSettingChange(UINT wFlag, LPCTSTR pszSection); virtual MsgRouting WmNcCalcSize(BOOL fCalcValidRects, LPNCCALCSIZE_PARAMS lpncsp, LRESULT& retVal); - virtual MsgRouting WmNcPaint(HRGN hrgn); virtual MsgRouting WmNcHitTest(UINT x, UINT y, LRESULT& retVal); virtual MsgRouting WmNcMouseDown(WPARAM hitTest, int x, int y, int button); virtual MsgRouting WmGetIcon(WPARAM iconType, LRESULT& retVal); virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); virtual MsgRouting WmWindowPosChanging(LPARAM windowPos); virtual MsgRouting WmWindowPosChanged(LPARAM windowPos); + virtual MsgRouting WmTimer(UINT_PTR timerID); virtual MsgRouting HandleEvent(MSG *msg, BOOL synthetic); virtual void WindowResized(); + static jboolean _RequestWindowFocus(void *param); + + virtual BOOL AwtSetActiveWindow(BOOL isMouseEventCause = FALSE, UINT hittest = HTCLIENT); + + // Execute on Toolkit only. + INLINE static LRESULT SynthesizeWmActivate(BOOL doActivate, HWND targetHWnd, HWND oppositeHWnd) { + if (::IsWindowVisible(targetHWnd)) { + return ::SendMessage(targetHWnd, WM_ACTIVATE, + MAKEWPARAM(doActivate ? WA_ACTIVE : WA_INACTIVE, FALSE), + (LPARAM) oppositeHWnd); + } + return 1; // if not processed + } + void moveToDefaultLocation(); /* moves Window to X,Y specified by Window Manger */ + void UpdateWindow(JNIEnv* env, jintArray data, int width, int height, + HBITMAP hNewBitmap = NULL); + INLINE virtual BOOL IsTopLevel() { return TRUE; } static AwtWindow * GetGrabbedWindow() { return m_grabbedWindow; } @@ -204,11 +225,25 @@ static void _SetModalExcludedNativeProp(void *param); static void _ModalDisable(void *param); static void _ModalEnable(void *param); + static void _SetOpacity(void* param); + static void _SetOpaque(void* param); + static void _UpdateWindow(void* param); + static void _RepositionSecurityWarning(void* param); inline static BOOL IsResizing() { return sm_resizing; } + virtual void CreateHWnd(JNIEnv *env, LPCWSTR title, + DWORD windowStyle, DWORD windowExStyle, + int x, int y, int w, int h, + HWND hWndParent, HMENU hMenu, + COLORREF colorForeground, COLORREF colorBackground, + jobject peer); + virtual void DestroyHWnd(); + + static void FocusedWindowChanged(HWND from, HWND to); + private: static int ms_instanceCounter; static HHOOK ms_hCBTFilter; @@ -228,6 +263,79 @@ // from its hierarchy when shown. Currently applied to instances of // javax/swing/Popup$HeavyWeightWindow class. + BYTE m_opacity; // The opacity level. == 0xff by default (when opacity mode is disabled) + BOOL m_opaque; // Whether the window uses the perpixel translucency (false), or not (true). + + inline BYTE getOpacity() { + return m_opacity; + } + inline void setOpacity(BYTE opacity) { + m_opacity = opacity; + } + + inline BOOL isOpaque() { + return m_opaque; + } + inline void setOpaque(BOOL opaque) { + m_opaque = opaque; + } + + CRITICAL_SECTION contentBitmapCS; + HBITMAP hContentBitmap; + UINT contentWidth; + UINT contentHeight; + + void SetTranslucency(BYTE opacity, BOOL opaque); + void UpdateWindow(int width, int height, HBITMAP hBitmap); + void UpdateWindowImpl(int width, int height, HBITMAP hBitmap); + void RedrawWindow(); + + static UINT untrustedWindowsCounter; + + WCHAR * warningString; + + // The warning icon + HWND warningWindow; + // The tooltip that appears when hovering the icon + HWND securityTooltipWindow; + + UINT warningWindowWidth; + UINT warningWindowHeight; + void InitSecurityWarningSize(JNIEnv *env); + HICON GetSecurityWarningIcon(); + + void CreateWarningWindow(JNIEnv *env); + void DestroyWarningWindow(); + static LPCTSTR GetWarningWindowClassName(); + void FillWarningWindowClassInfo(WNDCLASS *lpwc); + void RegisterWarningWindowClass(); + void UnregisterWarningWindowClass(); + static LRESULT CALLBACK WarningWindowProc( + HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); + + static void PaintWarningWindow(HWND warningWindow); + static void PaintWarningWindow(HWND warningWindow, HDC hdc); + void RepaintWarningWindow(); + void CalculateWarningWindowBounds(JNIEnv *env, LPRECT rect); + + void AnimateSecurityWarning(bool enable); + UINT securityWarningAnimationStage; + + enum AnimationKind { + akNone, akShow, akPreHide, akHide + }; + + AnimationKind securityAnimationKind; + + void StartSecurityAnimation(AnimationKind kind); + void StopSecurityAnimation(); + + void RepositionSecurityWarning(JNIEnv *env); + +public: + void UpdateSecurityWarningVisibility(); + static bool IsWarningWindow(HWND hWnd); + protected: BOOL m_isResizable; static AwtWindow* m_grabbedWindow; // Current grabbing window @@ -236,6 +344,16 @@ BOOL m_iconInherited; /* TRUE if icon is inherited from the owner */ BOOL m_filterFocusAndActivation; /* Used in the WH_CBT hook */ + //These are used in AwtComponent::CreatePrintedPixels. They are overridden + //here to handle non-opaque windows. + virtual void FillBackground(HDC hMemoryDC, SIZE &size); + virtual void FillAlpha(void *bitmapBits, SIZE &size, BYTE alpha); + + inline BOOL IsUntrusted() { + return warningString != NULL; + } + + UINT currentWmSizeState; private: int m_screenNum; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/awtmsg.h --- a/jdk/src/windows/native/sun/windows/awtmsg.h Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/src/windows/native/sun/windows/awtmsg.h Wed Jul 05 16:51:11 2017 +0200 @@ -1,5 +1,5 @@ /* - * Copyright 1996-2008 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 1996-2009 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -194,6 +194,7 @@ WM_AWT_COMPONENT_SHOW, WM_AWT_COMPONENT_HIDE, WM_AWT_COMPONENT_SETFOCUS, + WM_AWT_WINDOW_SETACTIVE, WM_AWT_LIST_SETMULTISELECT, WM_AWT_HANDLE_EVENT, WM_AWT_PRINT_COMPONENT, diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/security_warning.ico Binary file jdk/src/windows/native/sun/windows/security_warning.ico has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/security_warning_bw.ico Binary file jdk/src/windows/native/sun/windows/security_warning_bw.ico has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/src/windows/native/sun/windows/security_warning_int.ico Binary file jdk/src/windows/native/sun/windows/security_warning_int.ico has changed diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/com/sun/awt/SecurityWarning/GetSizeShouldNotReturnZero.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,392 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + @test %W% %E% + @bug 6818312 + @summary The size returned by SecurityWarning.getSize() should not be zero + @author anthony.petrov@sun.com: area=awt.toplevel + @library ../../../../java/awt/regtesthelpers + @build Util + @run main GetSizeShouldNotReturnZero +*/ + +/** + * GetSizeShouldNotReturnZero.java + * + * summary: The size returned by SecurityWarning.getSize() should not be zero + */ + +import java.awt.*; +import java.awt.event.*; +import java.security.Permission; +import test.java.awt.regtesthelpers.Util; +import com.sun.awt.SecurityWarning; + +public class GetSizeShouldNotReturnZero +{ + private static void init() + { + String[] instructions = + { + "This is an AUTOMATIC test, simply wait until it is done.", + "The result (passed or failed) will be shown in the", + "message window below." + }; + Sysout.createDialog( ); + Sysout.printInstructions( instructions ); + + + // Install the security manager so that all subsequently created + // windows display the security warning. + System.setSecurityManager(new SecurityManager() { + + @Override + public void checkPermission(Permission perm) { + } + + @Override + public boolean checkTopLevelWindow(Object window) { + return false; + } + }); + + Frame f = new Frame(); + f.setSize(100, 100); + f.setVisible(true); + + Robot robot = Util.createRobot(); + Util.waitForIdle(robot); + + Dimension size = SecurityWarning.getSize(f); + if (size.width == 0 || size.height == 0) { + fail("Reported security warning size: " + size); + return; + } + pass(); + }//End init() + + + + /***************************************************** + * Standard Test Machinery Section + * DO NOT modify anything in this section -- it's a + * standard chunk of code which has all of the + * synchronisation necessary for the test harness. + * By keeping it the same in all tests, it is easier + * to read and understand someone else's test, as + * well as insuring that all tests behave correctly + * with the test harness. + * There is a section following this for test- + * classes + ******************************************************/ + private static boolean theTestPassed = false; + private static boolean testGeneratedInterrupt = false; + private static String failureMessage = ""; + + private static Thread mainThread = null; + + private static int sleepTime = 300000; + + // Not sure about what happens if multiple of this test are + // instantiated in the same VM. Being static (and using + // static vars), it aint gonna work. Not worrying about + // it for now. + public static void main( String args[] ) throws InterruptedException + { + mainThread = Thread.currentThread(); + try + { + init(); + } + catch( TestPassedException e ) + { + //The test passed, so just return from main and harness will + // interepret this return as a pass + return; + } + //At this point, neither test pass nor test fail has been + // called -- either would have thrown an exception and ended the + // test, so we know we have multiple threads. + + //Test involves other threads, so sleep and wait for them to + // called pass() or fail() + try + { + Thread.sleep( sleepTime ); + //Timed out, so fail the test + throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" ); + } + catch (InterruptedException e) + { + //The test harness may have interrupted the test. If so, rethrow the exception + // so that the harness gets it and deals with it. + if( ! testGeneratedInterrupt ) throw e; + + //reset flag in case hit this code more than once for some reason (just safety) + testGeneratedInterrupt = false; + + if ( theTestPassed == false ) + { + throw new RuntimeException( failureMessage ); + } + } + + }//main + + public static synchronized void setTimeoutTo( int seconds ) + { + sleepTime = seconds * 1000; + } + + public static synchronized void pass() + { + Sysout.println( "The test passed." ); + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); + //first check if this is executing in main thread + if ( mainThread == Thread.currentThread() ) + { + //Still in the main thread, so set the flag just for kicks, + // and throw a test passed exception which will be caught + // and end the test. + theTestPassed = true; + throw new TestPassedException(); + } + theTestPassed = true; + testGeneratedInterrupt = true; + mainThread.interrupt(); + }//pass() + + public static synchronized void fail() + { + //test writer didn't specify why test failed, so give generic + fail( "it just plain failed! :-)" ); + } + + public static synchronized void fail( String whyFailed ) + { + Sysout.println( "The test failed: " + whyFailed ); + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); + //check if this called from main thread + if ( mainThread == Thread.currentThread() ) + { + //If main thread, fail now 'cause not sleeping + throw new RuntimeException( whyFailed ); + } + theTestPassed = false; + testGeneratedInterrupt = true; + failureMessage = whyFailed; + mainThread.interrupt(); + }//fail() + +}// class GetSizeShouldNotReturnZero + +//This exception is used to exit from any level of call nesting +// when it's determined that the test has passed, and immediately +// end the test. +class TestPassedException extends RuntimeException +{ +} + +//*********** End Standard Test Machinery Section ********** + + +//************ Begin classes defined for the test **************** + +// if want to make listeners, here is the recommended place for them, then instantiate +// them in init() + +/* Example of a class which may be written as part of a test +class NewClass implements anInterface + { + static int newVar = 0; + + public void eventDispatched(AWTEvent e) + { + //Counting events to see if we get enough + eventCount++; + + if( eventCount == 20 ) + { + //got enough events, so pass + + GetSizeShouldNotReturnZero.pass(); + } + else if( tries == 20 ) + { + //tried too many times without getting enough events so fail + + GetSizeShouldNotReturnZero.fail(); + } + + }// eventDispatched() + + }// NewClass class + +*/ + + +//************** End classes defined for the test ******************* + + + + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout +{ + private static TestDialog dialog; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + dialog.displayMessage( messageIn ); + System.out.println(messageIn); + } + +}// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog +{ + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("Center", messageText); + + pack(); + + setVisible(true); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + System.out.println(messageIn); + } + +}// TestDialog class + + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/com/sun/awt/Translucency/TranslucentJAppletTest/TranslucentJAppletTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/com/sun/awt/Translucency/TranslucentJAppletTest/TranslucentJAppletTest.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,103 @@ +/* + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test %I% %E% + * @bug 6683728 + * @summary Tests that a JApplet in a translucent JFrame works properly + * @author Kenneth.Russell@sun.com: area=Graphics + * @compile -XDignore.symbol.file=true TranslucentJAppletTest.java + * @run main/manual/othervm TranslucentJAppletTest + */ + +import java.awt.*; +import java.awt.image.*; + +import javax.swing.*; + +public class TranslucentJAppletTest { + + private static JFrame frame; + private static volatile boolean paintComponentCalled = false; + + private static void initAndShowGUI() { + frame = new JFrame(); + JApplet applet = new JApplet(); + JPanel panel = new JPanel() { + protected void paintComponent(Graphics g) { + paintComponentCalled = true; + g.setColor(Color.RED); + g.fillOval(0, 0, getWidth(), getHeight()); + } + }; + panel.setDoubleBuffered(false); + panel.setOpaque(false); + applet.add(panel); + frame.add(applet); + frame.setBounds(100, 100, 200, 200); + frame.setUndecorated(true); + com.sun.awt.AWTUtilities.setWindowOpaque(frame, false); + frame.setVisible(true); + } + + public static void main(String[] args) + throws Exception + { + sun.awt.SunToolkit tk = (sun.awt.SunToolkit)Toolkit.getDefaultToolkit(); + + Robot r = new Robot(); + Color color1 = r.getPixelColor(100, 100); // (0, 0) in frame coordinates + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + initAndShowGUI(); + } + }); + tk.realSync(); + + if (!paintComponentCalled) { + throw new RuntimeException("Test FAILED: panel's paintComponent() method is not called"); + } + + Color newColor1 = r.getPixelColor(100, 100); + // unfortunately, robot.getPixelColor() doesn't work for some unknown reason + // Color newColor2 = r.getPixelColor(200, 200); + BufferedImage bim = r.createScreenCapture(new Rectangle(200, 200, 1, 1)); + Color newColor2 = new Color(bim.getRGB(0, 0)); + + // Frame must be transparent at (100, 100) in screen coords + if (!color1.equals(newColor1)) { + System.err.println("color1 = " + color1); + System.err.println("newColor1 = " + newColor1); + throw new RuntimeException("Test FAILED: frame pixel at (0, 0) is not transparent"); + } + + // Frame must be RED at (200, 200) in screen coords + if (!newColor2.equals(Color.RED)) { + System.err.println("newColor2 = " + newColor2); + throw new RuntimeException("Test FAILED: frame pixel at (100, 100) is not red (transparent?)"); + } + + System.out.println("Test PASSED"); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/com/sun/awt/Translucency/TranslucentShapedFrameTest/TSFrame.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/com/sun/awt/Translucency/TranslucentShapedFrameTest/TSFrame.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,306 @@ +/* + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +import com.sun.awt.AWTUtilities; +import static com.sun.awt.AWTUtilities.Translucency.*; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.Graphics; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsEnvironment; +import java.awt.RenderingHints; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.awt.Canvas; +import java.awt.Component; +import java.awt.GradientPaint; +import java.awt.Graphics2D; +import java.awt.Paint; +import java.util.Random; +import java.awt.geom.Ellipse2D; +import javax.swing.JApplet; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; + +public class TSFrame { + + static volatile boolean done = false; + + static final boolean useSwing = System.getProperty("useswing") != null; + static final boolean useShape = System.getProperty("useshape") != null; + static final boolean useTransl = System.getProperty("usetransl") != null; + static final boolean useNonOpaque = System.getProperty("usenonop") != null; + + static final Random rnd = new Random(); + private static void render(Graphics g, int w, int h, boolean useNonOpaque) { + if (useNonOpaque) { + Graphics2D g2d = (Graphics2D)g; + GradientPaint p = + new GradientPaint(0.0f, 0.0f, + new Color(rnd.nextInt(0xffffff)), + w, h, + new Color(rnd.nextInt(0xff), + rnd.nextInt(0xff), + rnd.nextInt(0xff), 0), + true); + g2d.setPaint(p); + g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + g2d.fillOval(0, 0, w, h); + } else { + g.setColor(new Color(rnd.nextInt(0xffffff))); + g.fillRect(0, 0, w, h); + } + } + + private static class MyCanvas extends Canvas { + @Override + public void paint(Graphics g) { + render(g, getWidth(), getHeight(), false); + } + @Override + public Dimension getPreferredSize() { + return new Dimension(200, 100); + } + } + private static class NonOpaqueJFrame extends JFrame { + NonOpaqueJFrame(GraphicsConfiguration gc) { + super("NonOpaque Swing JFrame", gc); + JPanel p = new JPanel() { + public void paintComponent(Graphics g) { + super.paintComponent(g); + render(g, getWidth(), getHeight(), true); + g.setColor(Color.red); + g.drawString("Non-Opaque Swing JFrame", 10, 15); + } + }; + p.setDoubleBuffered(false); + p.setOpaque(false); + add(p); + setUndecorated(true); + } + } + private static class NonOpaqueJAppletFrame extends JFrame { + JPanel p; + NonOpaqueJAppletFrame(GraphicsConfiguration gc) { + super("NonOpaque Swing JAppletFrame", gc); + JApplet ja = new JApplet() { + public void paint(Graphics g) { + super.paint(g); + System.err.println("JAppletFrame paint called"); + } + }; + p = new JPanel() { + public void paintComponent(Graphics g) { + super.paintComponent(g); + render(g, getWidth(), getHeight(), true); + g.setColor(Color.red); + g.drawString("Non-Opaque Swing JFrame", 10, 15); + } + }; + p.setDoubleBuffered(false); + p.setOpaque(false); + ja.add(p); + add(ja); + setUndecorated(true); + } + } + private static class NonOpaqueFrame extends Frame { + NonOpaqueFrame(GraphicsConfiguration gc) { + super("NonOpaque AWT Frame", gc); + // uncomment to test with hw child +// setLayout(null); +// Component c = new Panel() { +// public void paint(Graphics g) { +// g.setColor(new Color(1.0f, 1.0f, 1.0f, 0.5f)); +// g.fillRect(0, 0, getWidth(), getHeight()); +// } +// }; +// c.setSize(100, 100); +// c.setBackground(Color.red); +// c.setForeground(Color.red); +// add(c); +// c.setLocation(130, 130); + } + @Override + public void paint(Graphics g) { + render(g, getWidth(), getHeight(), true); + g.setColor(Color.red); + g.drawString("Non-Opaque AWT Frame", 10, 15); + } + } + + private static class MyJPanel extends JPanel { + @Override + public void paintComponent(Graphics g) { + render(g, getWidth(), getHeight(), false); + } + } + + public static Frame createGui(GraphicsConfiguration gc, + final boolean useSwing, + final boolean useShape, + final boolean useTransl, + final boolean useNonOpaque, + final float factor) + { + Frame frame; + done = false; + + if (gc == null) { + gc = GraphicsEnvironment.getLocalGraphicsEnvironment(). + getDefaultScreenDevice().getDefaultConfiguration(); + } + + if (useNonOpaque) { + if (useSwing) { + frame = new NonOpaqueJFrame(gc); +// frame = new NonOpaqueJAppletFrame(gc); + } else { + frame = new NonOpaqueFrame(gc); + } + animateComponent(frame); + } else if (useSwing) { + frame = new JFrame("Swing Frame", gc); + JComponent p = new JButton("Swing!"); + p.setPreferredSize(new Dimension(200, 100)); + frame.add("North", p); + p = new MyJPanel(); + animateComponent(p); + frame.add("Center", p); + } else { + frame = new Frame("AWT Frame", gc) { + public void paint(Graphics g) { + g.setColor(Color.red); + g.fillRect(0, 0, 100, 100); + } + }; + frame.setLayout(new BorderLayout()); + Canvas c = new MyCanvas(); + frame.add("North", c); + animateComponent(c); + c = new MyCanvas(); + frame.add("Center", c); + animateComponent(c); + c = new MyCanvas(); + frame.add("South", c); + animateComponent(c); + } + final Frame finalFrame = frame; + frame.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + finalFrame.dispose(); + done = true; + } + }); + frame.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + finalFrame.dispose(); + done = true; + } + }); + frame.setPreferredSize(new Dimension(800, 600)); + + if (useShape) { + frame.setUndecorated(true); + } + + frame.setLocation(450, 10); + frame.pack(); + + if (useShape) { + if (AWTUtilities.isTranslucencySupported(PERPIXEL_TRANSPARENT)) { + System.out.println("applying PERPIXEL_TRANSPARENT"); + AWTUtilities.setWindowShape(frame, + new Ellipse2D.Double(0, 0, frame.getWidth(), + frame.getHeight()/3)); + frame.setTitle("PERPIXEL_TRANSPARENT"); + } else { + System.out.println("Passed: PERPIXEL_TRANSPARENT unsupported"); + } + } + if (useTransl) { + if (AWTUtilities.isTranslucencySupported(TRANSLUCENT)) { + System.out.println("applying TRANSLUCENT"); + AWTUtilities.setWindowOpacity(frame, factor); + frame.setTitle("TRANSLUCENT"); + } else { + System.out.println("Passed: TRANSLUCENT unsupported"); + } + } + if (useNonOpaque) { + if (AWTUtilities.isTranslucencySupported(PERPIXEL_TRANSLUCENT) && + AWTUtilities.isTranslucencyCapable(gc)) + { + System.out.println("applying PERPIXEL_TRANSLUCENT"); + AWTUtilities.setWindowOpaque(frame, false); + frame.setTitle("PERPIXEL_TRANSLUCENT"); + } else { + System.out.println("Passed: PERPIXEL_TRANSLUCENT unsupported"); + } + } + frame.setVisible(true); + return frame; + } + + public static void stopThreads() { + done = true; + } + + private static void animateComponent(final Component comp) { + Thread t = new Thread(new Runnable() { + public void run() { + do { + try { + Thread.sleep(50); + } catch (InterruptedException ex) {} + comp.repaint(); + } while (!done); + } + }); + t.start(); + } + + public static void main(String[] args) throws Exception { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + TSFrame.createGui(null, useSwing, + useShape, + useTransl, + useNonOpaque, + 0.7f); + } + }); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/com/sun/awt/Translucency/TranslucentShapedFrameTest/TranslucentShapedFrameTest.form --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/com/sun/awt/Translucency/TranslucentShapedFrameTest/TranslucentShapedFrameTest.form Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,230 @@ +<?xml version="1.0" encoding="UTF-8" ?> + +<Form version="1.3" type="org.netbeans.modules.form.forminfo.JFrameFormInfo"> + <NonVisualComponents> + <Component class="javax.swing.ButtonGroup" name="createDisposeGrp"> + </Component> + </NonVisualComponents> + <Properties> + <Property name="defaultCloseOperation" type="int" value="3"/> + <Property name="title" type="java.lang.String" value="TranslucentShapedFrameTest"/> + </Properties> + <SyntheticProperties> + <SyntheticProperty name="formSizePolicy" type="int" value="1"/> + </SyntheticProperties> + <AuxValues> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="transparencySld" pref="375" max="32767" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + <Component id="jLabel1" alignment="0" min="-2" max="-2" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="shapedCb" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="nonOpaqueChb" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="useSwingCb" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="102" max="32767" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="jLabel2" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="314" max="-2" attributes="0"/> + </Group> + <Group type="102" alignment="0" attributes="0"> + <Component id="passedBtn" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="failedBtn" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="241" max="-2" attributes="0"/> + </Group> + <Component id="jScrollPane1" alignment="1" pref="375" max="32767" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <Component id="createFrameBtn" min="-2" pref="187" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="disposeFrameBtn" min="-2" pref="182" max="-2" attributes="0"/> + </Group> + </Group> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="jLabel1" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="transparencySld" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="shapedCb" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="nonOpaqueChb" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="useSwingCb" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="disposeFrameBtn" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="createFrameBtn" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="17" max="-2" attributes="0"/> + <Component id="jLabel2" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Component id="jScrollPane1" min="-2" pref="148" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="passedBtn" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="failedBtn" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="jLabel1"> + <Properties> + <Property name="text" type="java.lang.String" value="Frame Opacity:"/> + </Properties> + </Component> + <Component class="javax.swing.JSlider" name="transparencySld"> + <Properties> + <Property name="majorTickSpacing" type="int" value="10"/> + <Property name="minorTickSpacing" type="int" value="5"/> + <Property name="paintLabels" type="boolean" value="true"/> + <Property name="paintTicks" type="boolean" value="true"/> + <Property name="value" type="int" value="100"/> + </Properties> + <Events> + <EventHandler event="stateChanged" listener="javax.swing.event.ChangeListener" parameters="javax.swing.event.ChangeEvent" handler="transparencySldStateChanged"/> + </Events> + </Component> + <Component class="javax.swing.JCheckBox" name="shapedCb"> + <Properties> + <Property name="text" type="java.lang.String" value="Shaped Frame"/> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo"> + <EmptyBorder bottom="0" left="0" right="0" top="0"/> + </Border> + </Property> + <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor"> + <Insets value="[0, 0, 0, 0]"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="shapedCbActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JCheckBox" name="nonOpaqueChb"> + <Properties> + <Property name="text" type="java.lang.String" value="Non Opaque Frame"/> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo"> + <EmptyBorder bottom="0" left="0" right="0" top="0"/> + </Border> + </Property> + <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor"> + <Insets value="[0, 0, 0, 0]"/> + </Property> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="nonOpaqueChbActionPerformed"/> + </Events> + </Component> + <Container class="javax.swing.JScrollPane" name="jScrollPane1"> + <AuxValues> + <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/> + </AuxValues> + + <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> + <SubComponents> + <Component class="javax.swing.JTextArea" name="jTextArea1"> + <Properties> + <Property name="columns" type="int" value="20"/> + <Property name="rows" type="int" value="5"/> + <Property name="text" type="java.lang.String" value="Create translucent and/or shaped, or non-opaque frame. Make sure it behaves correctly (no artifacts left on the screen when dragging - if dragging is possible). Click "Passed" if the test behaves correctly, "Falied" otherwise."/> + </Properties> + </Component> + </SubComponents> + </Container> + <Component class="javax.swing.JLabel" name="jLabel2"> + <Properties> + <Property name="text" type="java.lang.String" value="Instructions:"/> + </Properties> + </Component> + <Component class="javax.swing.JButton" name="passedBtn"> + <Properties> + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="64" green="ff" red="81" type="rgb"/> + </Property> + <Property name="text" type="java.lang.String" value="Passed"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="passedBtnActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JButton" name="failedBtn"> + <Properties> + <Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> + <Color blue="0" green="0" id="red" palette="1" red="ff" type="palette"/> + </Property> + <Property name="text" type="java.lang.String" value="Failed"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="failedBtnActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JToggleButton" name="createFrameBtn"> + <Properties> + <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> + <ComponentRef name="createDisposeGrp"/> + </Property> + <Property name="text" type="java.lang.String" value="Create Frame"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="createFrameBtnActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JToggleButton" name="disposeFrameBtn"> + <Properties> + <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> + <ComponentRef name="createDisposeGrp"/> + </Property> + <Property name="selected" type="boolean" value="true"/> + <Property name="text" type="java.lang.String" value="Dispose Frame"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="disposeFrameBtnActionPerformed"/> + </Events> + </Component> + <Component class="javax.swing.JCheckBox" name="useSwingCb"> + <Properties> + <Property name="text" type="java.lang.String" value="Use JFrame"/> + <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> + <Border info="org.netbeans.modules.form.compat2.border.EmptyBorderInfo"> + <EmptyBorder bottom="0" left="0" right="0" top="0"/> + </Border> + </Property> + <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor"> + <Insets value="[0, 0, 0, 0]"/> + </Property> + </Properties> + </Component> + </SubComponents> +</Form> diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/com/sun/awt/Translucency/TranslucentShapedFrameTest/TranslucentShapedFrameTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/com/sun/awt/Translucency/TranslucentShapedFrameTest/TranslucentShapedFrameTest.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,359 @@ +/* + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test %I% %E% + * @bug 6655001 6670649 6687141 + * @summary Tests that hw acceleration doesn't affect translucent/shaped windows + * @author Dmitri.Trembovetski@sun.com: area=Graphics + * @compile -XDignore.symbol.file=true TranslucentShapedFrameTest.java + * @compile -XDignore.symbol.file=true TSFrame.java + * @run main/manual/othervm TranslucentShapedFrameTest + * @run main/manual/othervm -Dsun.java2d.noddraw=true TranslucentShapedFrameTest + * @run main/manual/othervm -Dsun.java2d.opengl=True TranslucentShapedFrameTest + */ +import com.sun.awt.AWTUtilities; +import static com.sun.awt.AWTUtilities.Translucency.*; +import java.awt.Frame; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; +import java.awt.Shape; +import java.awt.geom.Ellipse2D; +import java.util.concurrent.CountDownLatch; +import javax.swing.JSlider; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; + +public class TranslucentShapedFrameTest extends javax.swing.JFrame { + Frame testFrame; + static CountDownLatch done; + static volatile boolean failed = false; + GraphicsConfiguration gcToUse = null; + + /** + * Creates new form TranslucentShapedFrameTest + */ + public TranslucentShapedFrameTest() { + // not necessary, but we just look nicer + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception ex) {} + + initComponents(); + checkEffects(); + + SwingUtilities.updateComponentTreeUI(this); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents + private void initComponents() { + createDisposeGrp = new javax.swing.ButtonGroup(); + jLabel1 = new javax.swing.JLabel(); + transparencySld = new javax.swing.JSlider(); + shapedCb = new javax.swing.JCheckBox(); + nonOpaqueChb = new javax.swing.JCheckBox(); + jScrollPane1 = new javax.swing.JScrollPane(); + jTextArea1 = new javax.swing.JTextArea(); + jLabel2 = new javax.swing.JLabel(); + passedBtn = new javax.swing.JButton(); + failedBtn = new javax.swing.JButton(); + createFrameBtn = new javax.swing.JToggleButton(); + disposeFrameBtn = new javax.swing.JToggleButton(); + useSwingCb = new javax.swing.JCheckBox(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + setTitle("TranslucentShapedFrameTest"); + jLabel1.setText("Frame Opacity:"); + + transparencySld.setMajorTickSpacing(10); + transparencySld.setMinorTickSpacing(5); + transparencySld.setPaintLabels(true); + transparencySld.setPaintTicks(true); + transparencySld.setValue(100); + transparencySld.addChangeListener(new javax.swing.event.ChangeListener() { + public void stateChanged(javax.swing.event.ChangeEvent evt) { + transparencySldStateChanged(evt); + } + }); + + shapedCb.setText("Shaped Frame"); + shapedCb.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); + shapedCb.setMargin(new java.awt.Insets(0, 0, 0, 0)); + shapedCb.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + shapedCbActionPerformed(evt); + } + }); + + nonOpaqueChb.setText("Non Opaque Frame"); + nonOpaqueChb.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); + nonOpaqueChb.setMargin(new java.awt.Insets(0, 0, 0, 0)); + nonOpaqueChb.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + nonOpaqueChbActionPerformed(evt); + } + }); + + jTextArea1.setColumns(20); + jTextArea1.setRows(5); + jTextArea1.setText("Create translucent and/or shaped, or\nnon-opaque frame. Make sure it behaves\ncorrectly (no artifacts left on the screen\nwhen dragging - if dragging is possible).\nClick \"Passed\" if the test behaves correctly,\n\"Falied\" otherwise."); + jScrollPane1.setViewportView(jTextArea1); + + jLabel2.setText("Instructions:"); + + passedBtn.setBackground(new java.awt.Color(129, 255, 100)); + passedBtn.setText("Passed"); + passedBtn.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + passedBtnActionPerformed(evt); + } + }); + + failedBtn.setBackground(java.awt.Color.red); + failedBtn.setText("Failed"); + failedBtn.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + failedBtnActionPerformed(evt); + } + }); + + createDisposeGrp.add(createFrameBtn); + createFrameBtn.setText("Create Frame"); + createFrameBtn.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + createFrameBtnActionPerformed(evt); + } + }); + + createDisposeGrp.add(disposeFrameBtn); + disposeFrameBtn.setSelected(true); + disposeFrameBtn.setText("Dispose Frame"); + disposeFrameBtn.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + disposeFrameBtnActionPerformed(evt); + } + }); + + useSwingCb.setText("Use JFrame"); + useSwingCb.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); + useSwingCb.setMargin(new java.awt.Insets(0, 0, 0, 0)); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(transparencySld, javax.swing.GroupLayout.DEFAULT_SIZE, 375, Short.MAX_VALUE) + .addContainerGap()) + .addComponent(jLabel1) + .addGroup(layout.createSequentialGroup() + .addComponent(shapedCb) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(nonOpaqueChb) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(useSwingCb) + .addContainerGap(102, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(jLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 314, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addComponent(passedBtn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(failedBtn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 241, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 375, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(createFrameBtn, javax.swing.GroupLayout.PREFERRED_SIZE, 187, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(disposeFrameBtn, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap()))) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(transparencySld, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(shapedCb) + .addComponent(nonOpaqueChb) + .addComponent(useSwingCb)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(disposeFrameBtn) + .addComponent(createFrameBtn)) + .addGap(17, 17, 17) + .addComponent(jLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 148, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(passedBtn) + .addComponent(failedBtn)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + pack(); + }// </editor-fold>//GEN-END:initComponents + + private void nonOpaqueChbActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_nonOpaqueChbActionPerformed + if (testFrame != null) { + // REMIND: this path in the test doesn't work well (test bug) +// AWTUtilities.setWindowOpaque(testFrame, !nonOpaqueChb.isSelected()); + } + }//GEN-LAST:event_nonOpaqueChbActionPerformed + + private void shapedCbActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_shapedCbActionPerformed + if (testFrame != null) { + Shape s = null; + if (shapedCb.isSelected()) { + s = new Ellipse2D.Double(0, 0, + testFrame.getWidth(), + testFrame.getHeight()); + } + AWTUtilities.setWindowShape(testFrame, s); + } + }//GEN-LAST:event_shapedCbActionPerformed + + private void transparencySldStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_transparencySldStateChanged + JSlider source = (JSlider)evt.getSource(); + int transl = transparencySld.getValue(); + if (testFrame != null) { + AWTUtilities.setWindowOpacity(testFrame, (float)transl/100f); + } + }//GEN-LAST:event_transparencySldStateChanged + + private void failedBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_failedBtnActionPerformed + disposeFrameBtnActionPerformed(evt); + dispose(); + failed = true; + done.countDown(); + }//GEN-LAST:event_failedBtnActionPerformed + + private void disposeFrameBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_disposeFrameBtnActionPerformed + TSFrame.stopThreads(); + if (testFrame != null) { + testFrame.dispose(); + testFrame = null; + } + }//GEN-LAST:event_disposeFrameBtnActionPerformed + + private void createFrameBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_createFrameBtnActionPerformed + disposeFrameBtnActionPerformed(evt); + int transl = transparencySld.getValue(); + testFrame = TSFrame.createGui(gcToUse, + useSwingCb.isSelected(), shapedCb.isSelected(), + (transl < 100), nonOpaqueChb.isSelected(), + (float)transl/100f); + }//GEN-LAST:event_createFrameBtnActionPerformed + + private void passedBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_passedBtnActionPerformed + disposeFrameBtnActionPerformed(evt); + dispose(); + done.countDown(); + }//GEN-LAST:event_passedBtnActionPerformed + + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + done = new CountDownLatch(1); + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + new TranslucentShapedFrameTest().setVisible(true); + } + }); + try { + done.await(); + } catch (InterruptedException ex) {} + if (failed) { + throw new RuntimeException("Test FAILED"); + } + System.out.println("Test PASSED"); + } + + private void checkEffects() { + if (!AWTUtilities.isTranslucencySupported(PERPIXEL_TRANSPARENT)) { + shapedCb.setEnabled(false); + } + + if (!AWTUtilities.isTranslucencySupported(TRANSLUCENT)) { + transparencySld.setEnabled(false); + } + + GraphicsConfiguration gc = null; + if (AWTUtilities.isTranslucencySupported(PERPIXEL_TRANSLUCENT)) { + gc = findGraphicsConfig(); + if (gc == null) { + nonOpaqueChb.setEnabled(false); + } + } + + gcToUse = gc; + } + + private GraphicsConfiguration findGraphicsConfig() { + GraphicsDevice gd = + GraphicsEnvironment.getLocalGraphicsEnvironment(). + getDefaultScreenDevice(); + GraphicsConfiguration gcs[] = gd.getConfigurations(); + for (GraphicsConfiguration gc : gcs) { + if (AWTUtilities.isTranslucencyCapable(gc)) { + return gc; + } + } + return null; + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.ButtonGroup createDisposeGrp; + private javax.swing.JToggleButton createFrameBtn; + private javax.swing.JToggleButton disposeFrameBtn; + private javax.swing.JButton failedBtn; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JTextArea jTextArea1; + private javax.swing.JCheckBox nonOpaqueChb; + private javax.swing.JButton passedBtn; + private javax.swing.JCheckBox shapedCb; + private javax.swing.JSlider transparencySld; + private javax.swing.JCheckBox useSwingCb; + // End of variables declaration//GEN-END:variables + +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/com/sun/awt/Translucency/WindowOpacity.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/com/sun/awt/Translucency/WindowOpacity.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,461 @@ +/* + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + @test %W% %E% + @bug 6594131 + @summary Tests the AWTUtilities.get/setWindowOpacity() methods + @author anthony.petrov@...: area=awt.toplevel + @run main WindowOpacity +*/ + +import java.awt.*; +import java.awt.event.*; + +import com.sun.awt.AWTUtilities; +import sun.awt.SunToolkit; + +public class WindowOpacity +{ + //*** test-writer defined static variables go here *** + + private static void realSync() { + ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + } + + + private static void init() + { + //*** Create instructions for the user here *** + String[] instructions = + { + "This is an AUTOMATIC test, simply wait until it is done.", + "The result (passed or failed) will be shown in the", + "message window below." + }; + Sysout.createDialog( ); + Sysout.printInstructions( instructions ); + + if (!AWTUtilities.isTranslucencySupported(AWTUtilities.Translucency.TRANSLUCENT)) { + System.out.println("Either the Toolkit or the native system does not support controlling the window opacity level."); + pass(); + } + + boolean passed; + + Frame f = new Frame("Opacity test"); + + passed = false; + try { + AWTUtilities.getWindowOpacity(null); + } catch (NullPointerException e) { + passed = true; + } + if (!passed) { + fail("getWindowOpacity() allows passing null."); + } + + + passed = false; + try { + AWTUtilities.setWindowOpacity(null, 0.5f); + } catch (NullPointerException e) { + passed = true; + } + if (!passed) { + fail("setWindowOpacity() allows passing null."); + } + + + float curOpacity = AWTUtilities.getWindowOpacity(f); + if (curOpacity < 1.0f || curOpacity > 1.0f) { + fail("getWindowOpacity() reports the initial opacity level other than 1.0: " + curOpacity); + } + + + + passed = false; + try { + AWTUtilities.setWindowOpacity(f, -0.5f); + } catch (IllegalArgumentException e) { + passed = true; + } + if (!passed) { + fail("setWindowOpacity() allows passing negative opacity level."); + } + + + + passed = false; + try { + AWTUtilities.setWindowOpacity(f, 1.5f); + } catch (IllegalArgumentException e) { + passed = true; + } + if (!passed) { + fail("setWindowOpacity() allows passing opacity level greater than 1.0."); + } + + + AWTUtilities.setWindowOpacity(f, 0.5f); + + curOpacity = AWTUtilities.getWindowOpacity(f); + if (curOpacity < 0.5f || curOpacity > 0.5f) { + fail("getWindowOpacity() reports the opacity level that differs from the value set with setWindowOpacity: " + curOpacity); + } + + + AWTUtilities.setWindowOpacity(f, 0.75f); + + curOpacity = AWTUtilities.getWindowOpacity(f); + if (curOpacity < 0.75f || curOpacity > 0.75f) { + fail("getWindowOpacity() reports the opacity level that differs from the value set with setWindowOpacity the second time: " + curOpacity); + } + + + f.setBounds(100, 100, 300, 200); + f.setVisible(true); + + realSync(); + + curOpacity = AWTUtilities.getWindowOpacity(f); + if (curOpacity < 0.75f || curOpacity > 0.75f) { + fail("getWindowOpacity() reports the opacity level that differs from the value set with setWindowOpacity before showing the frame: " + curOpacity); + } + + + + AWTUtilities.setWindowOpacity(f, 0.5f); + realSync(); + + curOpacity = AWTUtilities.getWindowOpacity(f); + if (curOpacity < 0.5f || curOpacity > 0.5f) { + fail("getWindowOpacity() reports the opacity level that differs from the value set with setWindowOpacity after showing the frame: " + curOpacity); + } + + WindowOpacity.pass(); + + }//End init() + + + + /***************************************************** + * Standard Test Machinery Section + * DO NOT modify anything in this section -- it's a + * standard chunk of code which has all of the + * synchronisation necessary for the test harness. + * By keeping it the same in all tests, it is easier + * to read and understand someone else's test, as + * well as insuring that all tests behave correctly + * with the test harness. + * There is a section following this for test- + * classes + ******************************************************/ + private static boolean theTestPassed = false; + private static boolean testGeneratedInterrupt = false; + private static String failureMessage = ""; + + private static Thread mainThread = null; + + private static int sleepTime = 300000; + + // Not sure about what happens if multiple of this test are + // instantiated in the same VM. Being static (and using + // static vars), it aint gonna work. Not worrying about + // it for now. + public static void main( String args[] ) throws InterruptedException + { + mainThread = Thread.currentThread(); + try + { + init(); + } + catch( TestPassedException e ) + { + //The test passed, so just return from main and harness will + // interepret this return as a pass + return; + } + //At this point, neither test pass nor test fail has been + // called -- either would have thrown an exception and ended the + // test, so we know we have multiple threads. + + //Test involves other threads, so sleep and wait for them to + // called pass() or fail() + try + { + Thread.sleep( sleepTime ); + //Timed out, so fail the test + throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" ); + } + catch (InterruptedException e) + { + //The test harness may have interrupted the test. If so, rethrow the exception + // so that the harness gets it and deals with it. + if( ! testGeneratedInterrupt ) throw e; + + //reset flag in case hit this code more than once for some reason (just safety) + testGeneratedInterrupt = false; + + if ( theTestPassed == false ) + { + throw new RuntimeException( failureMessage ); + } + } + + }//main + + public static synchronized void setTimeoutTo( int seconds ) + { + sleepTime = seconds * 1000; + } + + public static synchronized void pass() + { + Sysout.println( "The test passed." ); + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); + //first check if this is executing in main thread + if ( mainThread == Thread.currentThread() ) + { + //Still in the main thread, so set the flag just for kicks, + // and throw a test passed exception which will be caught + // and end the test. + theTestPassed = true; + throw new TestPassedException(); + } + theTestPassed = true; + testGeneratedInterrupt = true; + mainThread.interrupt(); + }//pass() + + public static synchronized void fail() + { + //test writer didn't specify why test failed, so give generic + fail( "it just plain failed! :-)" ); + } + + public static synchronized void fail( String whyFailed ) + { + Sysout.println( "The test failed: " + whyFailed ); + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); + //check if this called from main thread + if ( mainThread == Thread.currentThread() ) + { + //If main thread, fail now 'cause not sleeping + throw new RuntimeException( whyFailed ); + } + theTestPassed = false; + testGeneratedInterrupt = true; + failureMessage = whyFailed; + mainThread.interrupt(); + }//fail() + +}// class WindowOpacity + +//This exception is used to exit from any level of call nesting +// when it's determined that the test has passed, and immediately +// end the test. +class TestPassedException extends RuntimeException +{ +} + +//*********** End Standard Test Machinery Section ********** + + +//************ Begin classes defined for the test **************** + +// if want to make listeners, here is the recommended place for them, then instantiate +// them in init() + +/* Example of a class which may be written as part of a test +class NewClass implements anInterface + { + static int newVar = 0; + + public void eventDispatched(AWTEvent e) + { + //Counting events to see if we get enough + eventCount++; + + if( eventCount == 20 ) + { + //got enough events, so pass + + WindowOpacity.pass(); + } + else if( tries == 20 ) + { + //tried too many times without getting enough events so fail + + WindowOpacity.fail(); + } + + }// eventDispatched() + + }// NewClass class + +*/ + + +//************** End classes defined for the test ******************* + + + + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout +{ + private static TestDialog dialog; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + dialog.displayMessage( messageIn ); + System.out.println(messageIn); + } + +}// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog +{ + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("Center", messageText); + + pack(); + + setVisible(true); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + System.out.println(messageIn); + } + +}// TestDialog class diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/com/sun/java/swing/plaf/gtk/Test6635110.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/com/sun/java/swing/plaf/gtk/Test6635110.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,65 @@ +/* + * Copyright 2008 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 6635110 + @summary GTK icons should not throw NPE when called by non-GTK UI + @author Peter Zhelezniakov + @run main Test6635110 +*/ + +import com.sun.java.swing.plaf.gtk.GTKLookAndFeel; +import javax.swing.*; +import java.awt.*; +import java.awt.image.BufferedImage; +import javax.swing.plaf.basic.*; + + +public class Test6635110 implements Runnable { + + static final int WIDTH = 160; + static final int HEIGHT = 80; + final BufferedImage IMAGE = + new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_ARGB); + + @Override public void run() { + JMenu menu = new JMenu("menu"); + menu.setUI(new BasicMenuUI()); + paint(menu); + + JToolBar tb = new JToolBar(); + tb.setFloatable(true); + tb.setUI(new BasicToolBarUI()); + paint(tb); + } + + void paint(Component c) { + c.setSize(WIDTH, HEIGHT); + c.paint(IMAGE.getGraphics()); + } + + public static void main(String[] args) throws Exception { + UIManager.setLookAndFeel(new GTKLookAndFeel()); + SwingUtilities.invokeAndWait(new Test6635110()); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/awt/Component/NoUpdateUponShow/NoUpdateUponShow.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/Component/NoUpdateUponShow/NoUpdateUponShow.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,381 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + @test + @bug 6774258 + @summary api/java_awt/Component/index.html#PaintUpdate fails randomly + @author dmitry.cherepanov@...: area=awt.painting + @run main NoUpdateUponShow +*/ + +/** + * NoUpdateUponShow.java + * + * summary: System-level painting operations shouldn't make call to update() + */ + +import java.awt.*; +import sun.awt.SunToolkit; + +public class NoUpdateUponShow +{ + + static volatile boolean wasUpdate = false; + + private static void init() + { + //*** Create instructions for the user here *** + + String[] instructions = + { + "This is an AUTOMATIC test, simply wait until it is done.", + "The result (passed or failed) will be shown in the", + "message window below." + }; + Sysout.createDialog( ); + Sysout.printInstructions( instructions ); + + + // Create the frame and the button + Frame f = new Frame(); + f.setBounds(100, 100, 200, 200); + f.setLayout(new FlowLayout()); + f.add(new Button() { + @Override + public void update(Graphics g) { + wasUpdate = true; + super.update(g); + } + }); + f.setVisible(true); + + ((SunToolkit)Toolkit.getDefaultToolkit()).realSync(); + + if (wasUpdate) { + fail(" Unexpected update. "); + } else { + pass(); + } + }//End init() + + /***************************************************** + * Standard Test Machinery Section + * DO NOT modify anything in this section -- it's a + * standard chunk of code which has all of the + * synchronisation necessary for the test harness. + * By keeping it the same in all tests, it is easier + * to read and understand someone else's test, as + * well as insuring that all tests behave correctly + * with the test harness. + * There is a section following this for test- + * classes + ******************************************************/ + private static boolean theTestPassed = false; + private static boolean testGeneratedInterrupt = false; + private static String failureMessage = ""; + + private static Thread mainThread = null; + + private static int sleepTime = 300000; + + // Not sure about what happens if multiple of this test are + // instantiated in the same VM. Being static (and using + // static vars), it aint gonna work. Not worrying about + // it for now. + public static void main( String args[] ) throws InterruptedException + { + mainThread = Thread.currentThread(); + try + { + init(); + } + catch( TestPassedException e ) + { + //The test passed, so just return from main and harness will + // interepret this return as a pass + return; + } + //At this point, neither test pass nor test fail has been + // called -- either would have thrown an exception and ended the + // test, so we know we have multiple threads. + + //Test involves other threads, so sleep and wait for them to + // called pass() or fail() + try + { + Thread.sleep( sleepTime ); + //Timed out, so fail the test + throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" ); + } + catch (InterruptedException e) + { + //The test harness may have interrupted the test. If so, rethrow the exception + // so that the harness gets it and deals with it. + if( ! testGeneratedInterrupt ) throw e; + + //reset flag in case hit this code more than once for some reason (just safety) + testGeneratedInterrupt = false; + + if ( theTestPassed == false ) + { + throw new RuntimeException( failureMessage ); + } + } + + }//main + + public static synchronized void setTimeoutTo( int seconds ) + { + sleepTime = seconds * 1000; + } + + public static synchronized void pass() + { + Sysout.println( "The test passed." ); + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); + //first check if this is executing in main thread + if ( mainThread == Thread.currentThread() ) + { + //Still in the main thread, so set the flag just for kicks, + // and throw a test passed exception which will be caught + // and end the test. + theTestPassed = true; + throw new TestPassedException(); + } + theTestPassed = true; + testGeneratedInterrupt = true; + mainThread.interrupt(); + }//pass() + + public static synchronized void fail() + { + //test writer didn't specify why test failed, so give generic + fail( "it just plain failed! :-)" ); + } + + public static synchronized void fail( String whyFailed ) + { + Sysout.println( "The test failed: " + whyFailed ); + Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); + //check if this called from main thread + if ( mainThread == Thread.currentThread() ) + { + //If main thread, fail now 'cause not sleeping + throw new RuntimeException( whyFailed ); + } + theTestPassed = false; + testGeneratedInterrupt = true; + failureMessage = whyFailed; + mainThread.interrupt(); + }//fail() + +}// class ValidBounds + +//This exception is used to exit from any level of call nesting +// when it's determined that the test has passed, and immediately +// end the test. +class TestPassedException extends RuntimeException +{ +} + +//*********** End Standard Test Machinery Section ********** + + +//************ Begin classes defined for the test **************** + +// if want to make listeners, here is the recommended place for them, then instantiate +// them in init() + +/* Example of a class which may be written as part of a test +class NewClass implements anInterface + { + static int newVar = 0; + + public void eventDispatched(AWTEvent e) + { + //Counting events to see if we get enough + eventCount++; + + if( eventCount == 20 ) + { + //got enough events, so pass + + ValidBounds.pass(); + } + else if( tries == 20 ) + { + //tried too many times without getting enough events so fail + + ValidBounds.fail(); + } + + }// eventDispatched() + + }// NewClass class + +*/ + + +//************** End classes defined for the test ******************* + + + + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout +{ + private static TestDialog dialog; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + dialog.displayMessage( messageIn ); + System.out.println(messageIn); + } + +}// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog +{ + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("Center", messageText); + + pack(); + + setVisible(true); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + System.out.println(messageIn); + } + +}// TestDialog class diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/awt/Component/isLightweightCrash/StubPeerCrash.java --- a/jdk/test/java/awt/Component/isLightweightCrash/StubPeerCrash.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/test/java/awt/Component/isLightweightCrash/StubPeerCrash.java Wed Jul 05 16:51:11 2017 +0200 @@ -118,7 +118,7 @@ public boolean handlesWheelScrolling(){return true;}; public void createBuffers(int numBuffers, BufferCapabilities caps) throws AWTException{}; public Image getBackBuffer(){return null;}; - public void flip(BufferCapabilities.FlipContents flipAction){}; + public void flip(int x1, int y1, int x2, int y2, BufferCapabilities.FlipContents flipAction){}; public void destroyBuffers(){}; /** diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/awt/EventQueue/6638195/bug6638195.java --- a/jdk/test/java/awt/EventQueue/6638195/bug6638195.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/test/java/awt/EventQueue/6638195/bug6638195.java Wed Jul 05 16:51:11 2017 +0200 @@ -76,8 +76,13 @@ Callable<Void> afterDispatchCallable = new Callable<Void>() { public Void call() { - delegate.afterDispatch(afterDispatchEventArgument[0], - afterDispatchHandleArgument[0]); + try { + delegate.afterDispatch(afterDispatchEventArgument[0], + afterDispatchHandleArgument[0]); + } + catch (InterruptedException e) { + throw new RuntimeException("afterDispatch interrupted", e); + } return null; } }; @@ -91,8 +96,13 @@ Callable<Object> beforeDispatchCallable = new Callable<Object>() { public Object call() { - return delegate.beforeDispatch( - beforeDispatchEventArgument[0]); + try { + return delegate.beforeDispatch( + beforeDispatchEventArgument[0]); + } + catch (InterruptedException e) { + throw new RuntimeException("beforeDispatch interrupted", e); + } } }; methodMap = new HashMap<String, Object>(); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/awt/Focus/ClearGlobalFocusOwnerTest/ClearGlobalFocusOwnerTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/Focus/ClearGlobalFocusOwnerTest/ClearGlobalFocusOwnerTest.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,95 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + @test + @bug 4390555 + @summary Synopsis: clearGlobalFocusOwner() is not trigerring permanent FOCUS_LOST event + @author son@sparc.spb.su, anton.tarasov: area=awt.focus + @library ../../regtesthelpers + @build Util + @run main ClearGlobalFocusOwnerTest +*/ + +import java.awt.*; +import java.awt.event.*; +import test.java.awt.regtesthelpers.Util; + +public class ClearGlobalFocusOwnerTest { + static volatile boolean isFocusLost = false; + static Frame frame = new Frame("Test frame"); + static Button button = new Button("Test button"); + + public static void main(String[] args) { + button.addFocusListener(new FocusAdapter() { + public void focusLost(FocusEvent fe) { + if (fe.isTemporary()) { + throw new TestFailedException("the FocusLost event is temporary: " + fe); + } + isFocusLost = true; + } + }); + + frame.add(button); + frame.pack(); + frame.setVisible(true); + + Util.waitForIdle(null); + + if (!button.hasFocus()) { + button.requestFocus(); + Util.waitForIdle(null); + if (!button.hasFocus()) { + throw new TestErrorException("couldn't focus " + button); + } + } + + KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner(); + + Util.waitForIdle(null); + + if (!isFocusLost) { + throw new TestFailedException("no FocusLost event happened on clearGlobalFocusOwner"); + } + + System.out.println("Test passed."); + } +} + +/** + * Thrown when the behavior being verified is found wrong. + */ +class TestFailedException extends RuntimeException { + TestFailedException(String msg) { + super("Test failed: " + msg); + } +} + +/** + * Thrown when an error not related to the behavior being verified is encountered. + */ +class TestErrorException extends RuntimeException { + TestErrorException(String msg) { + super("Unexpected error: " + msg); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/awt/Focus/CloseDialogActivateOwnerTest/CloseDialogActivateOwnerTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/Focus/CloseDialogActivateOwnerTest/CloseDialogActivateOwnerTest.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,114 @@ +/* + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + @test + @bug 6785058 + @summary Tests that an owner is activated on closing its owned dialog with the warning icon. + @author Anton Tarasov: area=awt.focus + @library ../../regtesthelpers + @build Util + @run main/othervm/policy=java.policy -Djava.security.manager CloseDialogActivateOwnerTest +*/ + +import java.awt.*; +import java.awt.event.*; +import java.applet.Applet; +import java.util.concurrent.atomic.AtomicBoolean; +import java.lang.reflect.InvocationTargetException; +import test.java.awt.regtesthelpers.Util; + +public class CloseDialogActivateOwnerTest extends Applet { + Robot robot; + + public static void main(String[] args) { + CloseDialogActivateOwnerTest app = new CloseDialogActivateOwnerTest(); + app.init(); + app.start(); + } + + public void init() { + robot = Util.createRobot(); + } + + public void start() { + final Frame frame = new Frame("Owner Frame"); + final Dialog dialog = new Dialog(frame, "Owned Dialog"); + + frame.setSize(100, 100); + dialog.setSize(100, 100); + + // Show the owner. Check that it's focused. + if (!Util.trackWindowGainedFocus(frame, new Runnable() { + public void run() { + frame.setVisible(true); + } + }, 2000, false)) + { + throw new TestErrorException("the owner frame hasn't been activated on show"); + } + + // Show the owned dialog. Check that it's focused. + if (!Util.trackWindowGainedFocus(dialog, new Runnable() { + public void run() { + dialog.setVisible(true); + } + }, 2000, true)) + { + throw new TestErrorException("the owned dialog hasn't been activated on show"); + } + + robot.delay(2000); // wait for the warning icon is shown + + // Close the dialog. Check that the owner is activated. + if (!Util.trackWindowGainedFocus(frame, new Runnable() { + public void run() { + dialog.dispose(); + } + }, 2000, false)) + { + throw new TestFailedException("the owner hasn't been activated on closing the owned dialog"); + } + + System.out.println("Test passed."); + } +} + +/** + * Thrown when the behavior being verified is found wrong. + */ +class TestFailedException extends RuntimeException { + TestFailedException(String msg) { + super("Test failed: " + msg); + } +} + +/** + * Thrown when an error not related to the behavior being verified is encountered. + */ +class TestErrorException extends Error { + TestErrorException(String msg) { + super("Unexpected error: " + msg); + } +} + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/awt/Focus/CloseDialogActivateOwnerTest/java.policy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/Focus/CloseDialogActivateOwnerTest/java.policy Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,3 @@ +grant { + permission java.awt.AWTPermission "createRobot"; +}; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java --- a/jdk/test/java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/test/java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java Wed Jul 05 16:51:11 2017 +0200 @@ -71,8 +71,14 @@ testFrame.setVisible(true); Util.waitForIdle(robot); + robot.delay(1000); // additional delay is required + if (!testButton.hasFocus()) { - throw new TestErrorException("wrong initial focus"); + testButton.requestFocus(); + Util.waitForIdle(robot); + if (!testButton.hasFocus()) { + throw new TestErrorException("couldn't focus " + testButton); + } } /* diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/awt/Focus/OwnedWindowFocusIMECrashTest/OwnedWindowFocusIMECrashTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/Focus/OwnedWindowFocusIMECrashTest/OwnedWindowFocusIMECrashTest.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,88 @@ +/* + * Copyright 2008-2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + @test + @bug 6542975 + @summary Tests that switching focus from an owned window doesn't crash. + @author anton.tarasov@sun.com: area=awt-focus + @library ../../regtesthelpers + @build Util + @run main OwnedWindowFocusIMECrashTest +*/ + +import java.awt.*; +import javax.swing.*; +import test.java.awt.regtesthelpers.Util; + +public class OwnedWindowFocusIMECrashTest { + Robot robot; + JFrame owner = new JFrame("Owner Frame"); + JFrame frame = new JFrame("Other Frame"); + JWindow window = new JWindow(owner); + JButton button = new JButton("Button"); + + public static void main(String[] args) { + OwnedWindowFocusIMECrashTest app = new OwnedWindowFocusIMECrashTest(); + app.init(); + app.start(); + } + + public void init() { + robot = Util.createRobot(); + } + + public void start() { + owner.setBounds(100, 100, 200, 100); + window.setBounds(100, 250, 200, 100); + frame.setBounds(350, 100, 200, 100); + window.add(button); + + owner.setVisible(true); + frame.setVisible(true); + window.setVisible(true); + + Util.waitForIdle(robot); + + test(); + + System.out.println("Test passed"); + } + + void test() { + Util.clickOnComp(button, robot); + if (!button.hasFocus()) { + throw new TestErrorException("the button couldn't be focused by click"); + } + Util.clickOnTitle(frame, robot); // here there was a crash + } +} + +/** + * Thrown when an error not related to the behavior being verified is encountered. + */ +class TestErrorException extends RuntimeException { + TestErrorException(String msg) { + super("Unexpected error: " + msg); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/awt/Focus/RemoveAfterRequest/RemoveAfterRequest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/Focus/RemoveAfterRequest/RemoveAfterRequest.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,102 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + @test + @bug 6411406 + @summary Components automatically transfer focus on removal, even if developer requests focus elsewhere first + @author oleg.sukhodolsky, anton.tarasov: area=awt.focus + @library ../../regtesthelpers + @build Util + @run main RemoveAfterRequest +*/ + +/** + * RemoveAfterRequest.java + * + * summary: Components automatically transfer focus on removal, even if developer requests focus elsewhere first + */ + +import java.awt.*; +import java.awt.event.*; +import test.java.awt.regtesthelpers.Util; + +public class RemoveAfterRequest { + final static Frame frame = new Frame("test frame"); + final static Button btn1 = new Button("btn1"); + final static Button btn2 = new Button("btn2"); + final static Button btn3 = new Button("btn3"); + + public static void main(String[] args) { + frame.setLayout(new GridLayout(3, 1)); + frame.add(btn1); + frame.add(btn2); + frame.add(btn3); + frame.pack(); + frame.setVisible(true); + + Util.waitForIdle(null); + + if (!btn1.hasFocus()) { + btn1.requestFocus(); + Util.waitForIdle(null); + if (!btn1.hasFocus()) { + throw new TestErrorException("couldn't focus " + btn1); + } + } + + if (!Util.trackFocusGained(btn3, new Runnable() { + public void run() { + btn3.requestFocus(); + frame.remove(btn1); + frame.invalidate(); + frame.validate(); + frame.repaint(); + } + }, 2000, true)) + { + throw new TestFailedException("focus request on removal failed"); + } + + System.out.println("Test passed."); + } +} + +/** + * Thrown when the behavior being verified is found wrong. + */ +class TestFailedException extends RuntimeException { + TestFailedException(String msg) { + super("Test failed: " + msg); + } +} + +/** + * Thrown when an error not related to the behavior being verified is encountered. + */ +class TestErrorException extends RuntimeException { + TestErrorException(String msg) { + super("Unexpected error: " + msg); + } +} + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.html Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,20 @@ +<html> +<!-- + @test + @bug 6680988 + @summary verify that various shortcuts and accelerators work + @author yuri.nesterenko : area=awt.keyboard + @run applet/manual=yesno AcceleratorTest.html + --> +<head> +<title> AcceleratorTest + + + +

AcceleratorTest
Bug ID:

+ +

See the dialog box (usually in upper left corner) for instructions

+ + + + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/event/KeyEvent/AcceleratorTest/AcceleratorTest.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,305 @@ +/* + test + @bug 6680988 + @summary verify that various shortcuts and accelerators work + @author yuri.nesterenko : area=awt.keyboard + @run applet/manual=yesno AcceleratorTest.html +*/ + +/** + * AcceleratorTest.java + * + * summary: + */ + +//import java.applet.Applet; +import javax.swing.*; +import java.awt.*; +import java.awt.event.*; +import java.util.Hashtable; + + +public class AcceleratorTest extends JApplet +{ + //Declare things used in the test, like buttons and labels here + static int pressed = 0; + Hashtable cmdHash = new Hashtable(); + String[] CMD = { + "\u042E, keep me in focus", + "Item Cyrl Be", + "Item English Period", + "Item English N", + "\u0436" + }; + + JFrame jfr; + + public void init() + { + //Create instructions for the user here, as well as set up + // the environment -- set the layout manager, add buttons, + // etc. + this.setLayout (new BorderLayout ()); + + String[] instructions = + { + " Ensure you have Russian keyboard layout as a currently active.", + "(1) Press Ctrl+\u0411 (a key with \",<\" on it) ", + "(2) Find a . (period) in this layout (perhaps \"/?\" or \"7&\" key).", + "Press Ctrl+.", + "(3) Press Crtl+ regular English . (period) key (on \".>\" )", + "(4) Press Ctrl+ key with English N.", + "(5) Press Alt+\u042E (key with \".>\")", + "(6) Press Alt+\u0436 (key with \";:\")", + "If all expected commands will be fired, look for message", + "\"All tests passed\"" + }; + Sysout.createDialogWithInstructions( instructions ); + for(int i = 0; i < CMD.length; i++) { + cmdHash.put(CMD[i], 0); + } + + jfr = new JFrame(); + JButton jbu; + jfr.add((jbu = new JButton(CMD[0]))); + jbu.setMnemonic(java.awt.event.KeyEvent.getExtendedKeyCodeForChar('\u042E')); + jbu.addActionListener( new ALi(CMD[0])); + + + JMenuBar menuBar = new JMenuBar(); + jfr.setJMenuBar(menuBar); + JMenu menu = new JMenu("Menu"); + menuBar.add(menu); + + JMenuItem menuItem = new JMenuItem(CMD[1]); + menuItem.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.getExtendedKeyCodeForChar('\u0431'), + InputEvent.CTRL_DOWN_MASK)); + + JMenuItem menuItemEnglish = new JMenuItem(CMD[2]); + menuItemEnglish.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PERIOD, + InputEvent.CTRL_DOWN_MASK)); + JMenuItem menuItemE1 = new JMenuItem(CMD[3]); + menuItemE1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, + InputEvent.CTRL_DOWN_MASK)); + menuItem.addActionListener( new ALi(CMD[1])); + menuItemEnglish.addActionListener( new ALi(CMD[2])); + menuItemE1.addActionListener( new ALi(CMD[3])); + menu.add(menuItem); + menu.add(menuItemEnglish); + menu.add(menuItemE1); + + KeyStroke ks; + InputMap im = new InputMap(); + ks = KeyStroke.getKeyStroke(KeyEvent.getExtendedKeyCodeForChar('\u0436'), java.awt.event.InputEvent.ALT_DOWN_MASK); + im.put(ks, "pushAction"); + im.setParent(jbu.getInputMap(JComponent.WHEN_FOCUSED)); + jbu.setInputMap(JComponent.WHEN_FOCUSED, im); + + jbu.getActionMap().put("pushAction", + new AbstractAction("pushAction") { + public void actionPerformed(ActionEvent evt) { + if( evt.getActionCommand().equals(CMD[4])) { + cmdHash.put(CMD[4], 1); + } + boolean notYet = false; + for(int i = 0; i < CMD.length; i++) { + if(cmdHash.get(CMD[i]) == 0 ) notYet = true; + } + Sysout.println("Fired"); + if( !notYet ) { + Sysout.println("All tests passed."); + } + } + } + ); + + + jfr.setBounds(650,0,200,200); + jfr.setVisible(true); + + }//End init() + + public void start () + { + //Get things going. Request focus, set size, et cetera + setSize (200,200); + setVisible(true); + validate(); + + }// start() + public class ALi implements ActionListener { + String expectedCmd; + public ALi( String eCmd ) { + expectedCmd = eCmd; + } + public void actionPerformed(ActionEvent ae) { + if( cmdHash.containsKey(ae.getActionCommand()) ) { + cmdHash.put(expectedCmd, 1); + } + boolean notYet = false; + for(int i = 0; i < CMD.length; i++) { + if(cmdHash.get(CMD[i]) == 0 ) notYet = true; + //Sysout.println(CMD[i]+":"+cmdHash.get(CMD[i])); + } + Sysout.println("FIRED"); + if( !notYet ) { + Sysout.println("All tests passed."); + } + } + } + + +}// class AcceleratorTest + +/* Place other classes related to the test after this line */ + + + + + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout +{ + private static TestDialog dialog; + private static boolean numbering = false; + private static int messageNumber = 0; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + /* Enables message counting for the tester. */ + public static void enableNumbering(boolean enable){ + numbering = enable; + } + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + if (numbering) { + messageIn = "" + messageNumber + " " + messageIn; + messageNumber++; + } + dialog.displayMessage( messageIn ); + } + +}// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog +{ + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("Center", messageText); + + pack(); + + setVisible(true); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + System.out.println(messageIn); + } + +}// TestDialog class diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/awt/event/MouseEvent/AWTPanelSmoothWheel/AWTPanelSmoothWheel.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/event/MouseEvent/AWTPanelSmoothWheel/AWTPanelSmoothWheel.html Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,20 @@ + + + + AWTPanelSmoothWheel + + + +

AWTPanelSmoothWheel
Bug ID: 6730447

+ +

See the dialog box (usually in upper left corner) for instructions

+ + + + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/awt/event/MouseEvent/AWTPanelSmoothWheel/AWTPanelSmoothWheel.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/event/MouseEvent/AWTPanelSmoothWheel/AWTPanelSmoothWheel.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,251 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + test + @bug 6730447 + @summary Support for high resolution mouse wheel is still incomplete. AWT panel needs to be supported + @author dmitry.cherepanov@...: area=awt.mouse + @run applet/manual=yesno AWTPanelSmoothWheel.html +*/ + +/** + * AWTPanelSmoothWheel.java + * + * summary: + */ + +import java.applet.Applet; +import java.awt.*; +import java.awt.event.*; + +//Manual tests should run as applet tests if possible because they +// get their environments cleaned up, including AWT threads, any +// test created threads, and any system resources used by the test +// such as file descriptors. (This is normally not a problem as +// main tests usually run in a separate VM, however on some platforms +// such as the Mac, separate VMs are not possible and non-applet +// tests will cause problems). Also, you don't have to worry about +// synchronisation stuff in Applet tests the way you do in main +// tests... + + +public class AWTPanelSmoothWheel extends Applet +{ + //Declare things used in the test, like buttons and labels here + + public void init() + { + //Create instructions for the user here, as well as set up + // the environment -- set the layout manager, add buttons, + // etc. + this.setLayout (new BorderLayout ()); + + String[] instructions = + { + " the test is relevant for windows platforms and ", + " mouses with high-resolution wheel, please just press pass if it's not the case ", + " place the mouse cursor above the green panel and rotate the mouse wheel " , + " the test will print all mouse wheel messages into the logging panel, ", + " please make sure that some of the messages have non-zero 'wheelRotation' value ", + " in this case the test passes, otherwise it fails, ", + " please make sure the test works OK if the mouse wheel is rotated very slow " + }; + Sysout.createDialogWithInstructions( instructions ); + + }//End init() + + public void start () + { + Panel panel = new Panel(); + panel.setBackground(Color.green); + panel.addMouseWheelListener(new MouseWheelListener() { + public void mouseWheelMoved(MouseWheelEvent e) { + Sysout.println(e.toString()); + } + }); + + //Get things going. Request focus, set size, et cetera + setSize (200,200); + setLayout(new BorderLayout()); + add(panel, BorderLayout.CENTER); + setVisible(true); + validate(); + + //What would normally go into main() will probably go here. + //Use System.out.println for diagnostic messages that you want + // to read after the test is done. + //Use Sysout.println for messages you want the tester to read. + + }// start() + + //The rest of this class is the actions which perform the test... + + //Use Sysout.println to communicate with the user NOT System.out!! + //Sysout.println ("Something Happened!"); + +}// class ManualYesNoTest + +/* Place other classes related to the test after this line */ + + + + + +/**************************************************** + Standard Test Machinery + DO NOT modify anything below -- it's a standard + chunk of code whose purpose is to make user + interaction uniform, and thereby make it simpler + to read and understand someone else's test. + ****************************************************/ + +/** + This is part of the standard test machinery. + It creates a dialog (with the instructions), and is the interface + for sending text messages to the user. + To print the instructions, send an array of strings to Sysout.createDialog + WithInstructions method. Put one line of instructions per array entry. + To display a message for the tester to see, simply call Sysout.println + with the string to be displayed. + This mimics System.out.println but works within the test harness as well + as standalone. + */ + +class Sysout +{ + private static TestDialog dialog; + + public static void createDialogWithInstructions( String[] instructions ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + dialog.printInstructions( instructions ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + public static void createDialog( ) + { + dialog = new TestDialog( new Frame(), "Instructions" ); + String[] defInstr = { "Instructions will appear here. ", "" } ; + dialog.printInstructions( defInstr ); + dialog.setVisible(true); + println( "Any messages for the tester will display here." ); + } + + + public static void printInstructions( String[] instructions ) + { + dialog.printInstructions( instructions ); + } + + + public static void println( String messageIn ) + { + dialog.displayMessage( messageIn ); + } + +}// Sysout class + +/** + This is part of the standard test machinery. It provides a place for the + test instructions to be displayed, and a place for interactive messages + to the user to be displayed. + To have the test instructions displayed, see Sysout. + To have a message to the user be displayed, see Sysout. + Do not call anything in this dialog directly. + */ +class TestDialog extends Dialog +{ + + TextArea instructionsText; + TextArea messageText; + int maxStringLength = 80; + + //DO NOT call this directly, go through Sysout + public TestDialog( Frame frame, String name ) + { + super( frame, name ); + int scrollBoth = TextArea.SCROLLBARS_BOTH; + instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); + add( "North", instructionsText ); + + messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); + add("Center", messageText); + + pack(); + + setVisible(true); + }// TestDialog() + + //DO NOT call this directly, go through Sysout + public void printInstructions( String[] instructions ) + { + //Clear out any current instructions + instructionsText.setText( "" ); + + //Go down array of instruction strings + + String printStr, remainingStr; + for( int i=0; i < instructions.length; i++ ) + { + //chop up each into pieces maxSringLength long + remainingStr = instructions[ i ]; + while( remainingStr.length() > 0 ) + { + //if longer than max then chop off first max chars to print + if( remainingStr.length() >= maxStringLength ) + { + //Try to chop on a word boundary + int posOfSpace = remainingStr. + lastIndexOf( ' ', maxStringLength - 1 ); + + if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; + + printStr = remainingStr.substring( 0, posOfSpace + 1 ); + remainingStr = remainingStr.substring( posOfSpace + 1 ); + } + //else just print + else + { + printStr = remainingStr; + remainingStr = ""; + } + + instructionsText.append( printStr + "\n" ); + + }// while + + }// for + + }//printInstructions() + + //DO NOT call this directly, go through Sysout + public void displayMessage( String messageIn ) + { + messageText.append( messageIn + "\n" ); + System.out.println(messageIn); + } + +}// TestDialog class + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/beans/Beans/6669869/TestDesignTime.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/beans/Beans/6669869/TestDesignTime.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,52 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6669869 + * @summary Tests DesignTime property in different application contexts + * @author Sergey Malenkov + */ + +import java.beans.Beans; +import sun.awt.SunToolkit; + +public class TestDesignTime implements Runnable { + public static void main(String[] args) throws InterruptedException { + if (Beans.isDesignTime()) { + throw new Error("unexpected DesignTime property"); + } + Beans.setDesignTime(!Beans.isDesignTime()); + ThreadGroup group = new ThreadGroup("$$$"); + Thread thread = new Thread(group, new TestDesignTime()); + thread.start(); + thread.join(); + } + + public void run() { + SunToolkit.createNewAppContext(); + if (Beans.isDesignTime()) { + throw new Error("shared DesignTime property"); + } + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/beans/Beans/6669869/TestGuiAvailable.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/beans/Beans/6669869/TestGuiAvailable.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,53 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6669869 + * @summary Tests GuiAvailable property in different application contexts + * @author Sergey Malenkov + */ + +import java.awt.GraphicsEnvironment; +import java.beans.Beans; +import sun.awt.SunToolkit; + +public class TestGuiAvailable implements Runnable { + public static void main(String[] args) throws InterruptedException { + if (Beans.isGuiAvailable() == GraphicsEnvironment.isHeadless()) { + throw new Error("unexpected GuiAvailable property"); + } + Beans.setGuiAvailable(!Beans.isGuiAvailable()); + ThreadGroup group = new ThreadGroup("$$$"); + Thread thread = new Thread(group, new TestGuiAvailable()); + thread.start(); + thread.join(); + } + + public void run() { + SunToolkit.createNewAppContext(); + if (Beans.isGuiAvailable() == GraphicsEnvironment.isHeadless()) { + throw new Error("shared GuiAvailable property"); + } + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/lang/ClassLoader/deadlock/Alice.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/ClassLoader/deadlock/Alice.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,29 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ +package comSA; + +public class Alice extends comSB.SupAlice { + static { + System.out.println("comSA.Alice loaded"); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/lang/ClassLoader/deadlock/Bob.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/ClassLoader/deadlock/Bob.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,29 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ +package comSB; + +public class Bob extends comSA.SupBob { + static { + System.out.println("comSB.Bob loaded"); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/lang/ClassLoader/deadlock/DelegatingLoader.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/ClassLoader/deadlock/DelegatingLoader.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,93 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.locks.*; +import java.lang.reflect.*; + +public class DelegatingLoader extends URLClassLoader { + + private DelegatingLoader delLoader; + private String[] delClasses; + + static { + boolean supportParallel = false; + try { + Class c = Class.forName("java.lang.ClassLoader"); + Method m = c.getDeclaredMethod("registerAsParallelCapable", + new Class[0]); + m.setAccessible(true); + Object result = (Boolean) m.invoke(null); + if (result instanceof Boolean) { + supportParallel = ((Boolean) result).booleanValue(); + } else { + // Should never happen + System.out.println("Error: ClassLoader.registerAsParallelCapable() did not return a boolean!"); + System.exit(1); + } + } catch (NoSuchMethodException nsme) { + System.out.println("No ClassLoader.registerAsParallelCapable() API"); + } catch (NoSuchMethodError nsme2) { + System.out.println("No ClassLoader.registerAsParallelCapable() API"); + } catch (Exception ex) { + ex.printStackTrace(); + // Exit immediately to indicate an error + System.exit(1); + } + System.out.println("Parallel ClassLoader registration: " + + supportParallel); + } + + public DelegatingLoader(URL urls[]) { + super(urls); + System.out.println("DelegatingLoader using URL " + urls[0]); + } + + public void setDelegate(String[] delClasses, DelegatingLoader delLoader) { + this.delClasses = delClasses; + this.delLoader = delLoader; + } + + public Class loadClass(String className, boolean resolve) + throws ClassNotFoundException { + for (int i = 0; i < delClasses.length; i++) { + if (delClasses[i].equals(className)) { + Starter.log("Delegating class loading for " + className); + try { + Thread.sleep(500); + } catch (InterruptedException ie) { + return null; + } + return delLoader.loadClass(className, resolve); + } + } + + Starter.log("Loading local class " + className); +// synchronized (getClassLoadingLock(className)) { + return super.loadClass(className, resolve); +// } + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/lang/ClassLoader/deadlock/Starter.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/ClassLoader/deadlock/Starter.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,105 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +import java.net.MalformedURLException; +import java.net.URL; + +public class Starter implements Runnable { + + private String id; + private DelegatingLoader dl; + private String startClass; + + private static DelegatingLoader saLoader, sbLoader; + + public static void log(String line) { + System.out.println(line); + } + + public static void main(String[] args) { + URL[] urlsa = new URL[1]; + URL[] urlsb = new URL[1]; + try { + String testDir = System.getProperty("test.classes", "."); + String sep = System.getProperty("file.separator"); + urlsa[0] = new URL("file://" + testDir + sep + "SA" + sep); + urlsb[0] = new URL("file://" + testDir + sep + "SB" + sep); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + // Set up Classloader delegation hierarchy + saLoader = new DelegatingLoader(urlsa); + sbLoader = new DelegatingLoader(urlsb); + + String[] saClasses = { "comSA.SupBob", "comSA.Alice" }; + String[] sbClasses = { "comSB.SupAlice", "comSB.Bob" }; + + saLoader.setDelegate(sbClasses, sbLoader); + sbLoader.setDelegate(saClasses, saLoader); + + // test one-way delegate + String testType = args[0]; + if (testType.equals("one-way")) { + test("comSA.Alice", "comSA.SupBob"); + } else if (testType.equals("cross")) { + // test cross delegate + test("comSA.Alice", "comSB.Bob"); + } else { + System.out.println("ERROR: unsupported - " + testType); + } + } + + private static void test(String clsForSA, String clsForSB) { + Starter ia = new Starter("SA", saLoader, clsForSA); + Starter ib = new Starter("SB", sbLoader, clsForSB); + new Thread(ia).start(); + new Thread(ib).start(); + } + + public static void sleep() { + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + log("Thread interrupted"); + } + } + + private Starter(String id, DelegatingLoader dl, String startClass) { + this.id = id; + this.dl = dl; + this.startClass = startClass; + } + + public void run() { + log("Spawned thread " + id + " running"); + try { + // To mirror the WAS deadlock, need to ensure class load + // is routed via the VM. + Class.forName(startClass, true, dl); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + log("Thread " + id + " terminating"); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/lang/ClassLoader/deadlock/SupAlice.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/ClassLoader/deadlock/SupAlice.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,29 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ +package comSB; + +public class SupAlice { + static { + System.out.println("comSB.SupAlice loaded"); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/lang/ClassLoader/deadlock/SupBob.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/ClassLoader/deadlock/SupBob.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,29 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ +package comSA; + +public class SupBob { + static { + System.out.println("comSA.SupBob loaded"); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/ClassLoader/deadlock/TestCrossDelegate.sh Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,105 @@ +# +# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, +# CA 95054 USA or visit www.sun.com if you need additional information or +# have any questions. +# +# @test +# @bug 4735126 +# @summary (cl) ClassLoader.loadClass locks all instances in chain +# when delegating +# +# @run shell/timeout=10 TestCrossDelegate.sh + +# if running by hand on windows, change TESTSRC and TESTCLASSES to "." +if [ "${TESTSRC}" = "" ] ; then + TESTSRC=`pwd` +fi +if [ "${TESTCLASSES}" = "" ] ; then + TESTCLASSES=`pwd` +fi + +# if running by hand on windows, change this to appropriate value +if [ "${TESTJAVA}" = "" ] ; then + echo "TESTJAVA not set. Test cannot execute." + echo "FAILED!!!" + exit 1 +fi +echo TESTSRC=${TESTSRC} +echo TESTCLASSES=${TESTCLASSES} +echo TESTJAVA=${TESTJAVA} +echo "" + +# set platform-specific variables +OS=`uname -s` +case "$OS" in + SunOS ) + FS="/" + ;; + Linux ) + FS="/" + ;; + Windows* ) + FS="\\" + ;; +esac + +# compile test +${TESTJAVA}${FS}bin${FS}javac \ + -d ${TESTCLASSES} \ + ${TESTSRC}${FS}Starter.java ${TESTSRC}${FS}DelegatingLoader.java + +STATUS=$? +if [ ${STATUS} -ne 0 ] +then + exit ${STATUS} +fi + +# set up test +${TESTJAVA}${FS}bin${FS}javac \ + -d ${TESTCLASSES}${FS} \ + ${TESTSRC}${FS}Alice.java ${TESTSRC}${FS}SupBob.java \ + ${TESTSRC}${FS}Bob.java ${TESTSRC}${FS}SupAlice.java + +cd ${TESTCLASSES} +DIRS="SA SB" +for dir in $DIRS +do + if [ -d ${dir} ]; then + rm -rf ${dir} + fi + mkdir ${dir} + mv com${dir} ${dir} +done + +# run test +${TESTJAVA}${FS}bin${FS}java \ + -verbose:class -XX:+TraceClassLoading -cp . \ + -Dtest.classes=${TESTCLASSES} \ + Starter cross +# -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass \ + +# save error status +STATUS=$? + +# clean up +rm -rf ${TESTCLASSES}${FS}SA ${TESTCLASSES}${FS}SB + +# return +exit ${STATUS} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/ClassLoader/deadlock/TestOneWayDelegate.sh Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,105 @@ +# +# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, +# CA 95054 USA or visit www.sun.com if you need additional information or +# have any questions. +# +# @test +# @bug 4735126 +# @summary (cl) ClassLoader.loadClass locks all instances in chain +# when delegating +# +# @run shell/timeout=10 TestOneWayDelegate.sh + +# if running by hand on windows, change TESTSRC and TESTCLASSES to "." +if [ "${TESTSRC}" = "" ] ; then + TESTSRC=`pwd` +fi +if [ "${TESTCLASSES}" = "" ] ; then + TESTCLASSES=`pwd` +fi + +# if running by hand on windows, change this to appropriate value +if [ "${TESTJAVA}" = "" ] ; then + echo "TESTJAVA not set. Test cannot execute." + echo "FAILED!!!" + exit 1 +fi +echo TESTSRC=${TESTSRC} +echo TESTCLASSES=${TESTCLASSES} +echo TESTJAVA=${TESTJAVA} +echo "" + +# set platform-specific variables +OS=`uname -s` +case "$OS" in + SunOS ) + FS="/" + ;; + Linux ) + FS="/" + ;; + Windows* ) + FS="\\" + ;; +esac + +# compile test +${TESTJAVA}${FS}bin${FS}javac \ + -d ${TESTCLASSES} \ + ${TESTSRC}${FS}Starter.java ${TESTSRC}${FS}DelegatingLoader.java + +STATUS=$? +if [ ${STATUS} -ne 0 ] +then + exit ${STATUS} +fi + +# set up test +${TESTJAVA}${FS}bin${FS}javac \ + -d ${TESTCLASSES}${FS} \ + ${TESTSRC}${FS}Alice.java ${TESTSRC}${FS}SupBob.java \ + ${TESTSRC}${FS}Bob.java ${TESTSRC}${FS}SupAlice.java + +cd ${TESTCLASSES} +DIRS="SA SB" +for dir in $DIRS +do + if [ -d ${dir} ]; then + rm -rf ${dir} + fi + mkdir ${dir} + mv com${dir} ${dir} +done + +# run test +${TESTJAVA}${FS}bin${FS}java \ + -verbose:class -XX:+TraceClassLoading -cp . \ + -Dtest.classes=${TESTCLASSES} \ + Starter one-way +# -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass \ + +# save error status +STATUS=$? + +# clean up +rm -rf ${TESTCLASSES}${FS}SA ${TESTCLASSES}${FS}SB + +# return +exit ${STATUS} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/lang/Integer/ValueOf.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/lang/Integer/ValueOf.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,55 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/** + * @test + * @bug 6807702 + * @summary Basic test for Integer.valueOf + * @run main ValueOf + * @run main/othervm -esa -XX:+AggressiveOpts ValueOf + */ + +public class ValueOf { + + // test Integer.valueOf over this range (inclusive) + private static final int TEST_LOW = -1024; + private static final int TEST_HIGH = 24576; + + public static void main(String[] args) { + int i = TEST_LOW; + while (i <= TEST_HIGH) { + // check that valueOf stores i + if (Integer.valueOf(i).intValue() != i) + throw new RuntimeException(); + + // check that the same object is returned for integral values + // in the range -128 to 127 (inclusive) + if (i >= -128 && i <= 127) { + if (Integer.valueOf(i) != Integer.valueOf(i)) + throw new RuntimeException(); + } + + i++; + } + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/lang/String/ToLowerCase.java --- a/jdk/test/java/lang/String/ToLowerCase.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/test/java/lang/String/ToLowerCase.java Wed Jul 05 16:51:11 2017 +0200 @@ -72,7 +72,7 @@ // I-dot tests (Turkish and Azeri) test("\u0130", turkish, "i"); test("\u0130", az, "i"); - test("\u0130", Locale.US, "i"); + test("\u0130", Locale.US, "i\u0307"); // Remove dot_above in the sequence I + dot_above (Turkish and Azeri) test("I\u0307", turkish, "i"); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/nio/channels/AsyncCloseAndInterrupt.java --- a/jdk/test/java/nio/channels/AsyncCloseAndInterrupt.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/test/java/nio/channels/AsyncCloseAndInterrupt.java Wed Jul 05 16:51:11 2017 +0200 @@ -22,7 +22,7 @@ */ /* @test - * @bug 4460583 4470470 4840199 6419424 6710579 6596323 + * @bug 4460583 4470470 4840199 6419424 6710579 6596323 6824135 * @summary Comprehensive test of asynchronous closing and interruption * @author Mark Reinhold */ diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/nio/channels/DatagramChannel/NotBound.java --- a/jdk/test/java/nio/channels/DatagramChannel/NotBound.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/test/java/nio/channels/DatagramChannel/NotBound.java Wed Jul 05 16:51:11 2017 +0200 @@ -22,27 +22,110 @@ */ /* @test - * @bug 4512723 - * @summary Unit test for datagram-socket-channel adaptors + * @bug 4512723 6621689 + * @summary Test that connect/send/receive with unbound DatagramChannel causes + * the channel's socket to be bound to a local address */ import java.net.*; -import java.nio.*; -import java.nio.channels.*; +import java.nio.ByteBuffer; +import java.nio.channels.DatagramChannel; +import java.io.IOException; + +public class NotBound { + + static void checkBound(DatagramChannel dc) throws IOException { + if (dc.getLocalAddress() == null) + throw new RuntimeException("Not bound??"); + } -class NotBound { - public static void main(String[] args) throws Exception { - test1(false); - test1(true); + // starts a thread to send a datagram to the given channel once the channel + // is bound to a local address + static void wakeupWhenBound(final DatagramChannel dc) { + Runnable wakeupTask = new Runnable() { + public void run() { + try { + // poll for local address + InetSocketAddress local; + do { + Thread.sleep(50); + local = (InetSocketAddress)dc.getLocalAddress(); + } while (local == null); + + // send message to channel to wakeup receiver + DatagramChannel sender = DatagramChannel.open(); + try { + ByteBuffer bb = ByteBuffer.wrap("hello".getBytes()); + InetAddress lh = InetAddress.getLocalHost(); + SocketAddress target = + new InetSocketAddress(lh, local.getPort()); + sender.send(bb, target); + } finally { + sender.close(); + } + + } catch (Exception x) { + x.printStackTrace(); + } + }}; + new Thread(wakeupTask).start(); } - static void test1(boolean blocking) throws Exception { - ByteBuffer bb = ByteBuffer.allocateDirect(256); - DatagramChannel dc1 = DatagramChannel.open(); - dc1.configureBlocking(false); - SocketAddress isa = dc1.receive(bb); - if (isa != null) - throw new Exception("Unbound dc returned non-null"); - dc1.close(); + public static void main(String[] args) throws IOException { + DatagramChannel dc; + + // connect + dc = DatagramChannel.open(); + try { + DatagramChannel peer = DatagramChannel.open() + .bind(new InetSocketAddress(0)); + int peerPort = ((InetSocketAddress)(peer.getLocalAddress())).getPort(); + try { + dc.connect(new InetSocketAddress(InetAddress.getLocalHost(), peerPort)); + checkBound(dc); + } finally { + peer.close(); + } + } finally { + dc.close(); + } + + // send + dc = DatagramChannel.open(); + try { + ByteBuffer bb = ByteBuffer.wrap("ignore this".getBytes()); + SocketAddress target = + new InetSocketAddress(InetAddress.getLocalHost(), 5000); + dc.send(bb, target); + checkBound(dc); + } finally { + dc.close(); + } + + // receive (blocking) + dc = DatagramChannel.open(); + try { + ByteBuffer bb = ByteBuffer.allocateDirect(128); + wakeupWhenBound(dc); + SocketAddress sender = dc.receive(bb); + if (sender == null) + throw new RuntimeException("Sender should not be null"); + checkBound(dc); + } finally { + dc.close(); + } + + // receive (non-blocking) + dc = DatagramChannel.open(); + try { + dc.configureBlocking(false); + ByteBuffer bb = ByteBuffer.allocateDirect(128); + SocketAddress sender = dc.receive(bb); + if (sender != null) + throw new RuntimeException("Sender should be null"); + checkBound(dc); + } finally { + dc.close(); + } } } diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/nio/channels/Selector/HelperSlowToDie.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/nio/channels/Selector/HelperSlowToDie.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,75 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6823609 + * @summary Selector.select can hangs on Windows for cases where a helper thread + * becomes redudant but a new helper is immediately needed. + */ + +import java.nio.channels.*; +import java.io.IOException; + +public class HelperSlowToDie { + private static final int CHANNELS_PER_THREAD = 1023; + private static volatile boolean done; + + public static void main(String[] args) throws IOException { + Selector sel = Selector.open(); + + // register channels + SocketChannel[] channels = new SocketChannel[CHANNELS_PER_THREAD]; + for (int i=0; i nm = (NavigableMap) m; + testNavigableMapRemovers(nm); testNavigableMap(nm); testNavigableMap(nm.headMap(6, false)); testNavigableMap(nm.headMap(5, true)); @@ -742,6 +743,97 @@ equal(it.next(), expected); } + static void equalMaps(Map m1, Map m2) { + equal(m1, m2); + equal(m2, m1); + equal(m1.size(), m2.size()); + equal(m1.isEmpty(), m2.isEmpty()); + equal(m1.toString(), m2.toString()); + check(Arrays.equals(m1.entrySet().toArray(), m2.entrySet().toArray())); + } + + @SuppressWarnings({"unchecked", "rawtypes"}) + static void testNavigableMapRemovers(NavigableMap m) + { + final Map emptyMap = new HashMap(); + + final Map singletonMap = new HashMap(); + singletonMap.put(1, 2); + + abstract class NavigableMapView { + abstract NavigableMap view(NavigableMap m); + } + + NavigableMapView[] views = { + new NavigableMapView() { NavigableMap view(NavigableMap m) { + return m; }}, + new NavigableMapView() { NavigableMap view(NavigableMap m) { + return m.headMap(99, true); }}, + new NavigableMapView() { NavigableMap view(NavigableMap m) { + return m.tailMap(-99, false); }}, + new NavigableMapView() { NavigableMap view(NavigableMap m) { + return m.subMap(-99, true, 99, false); }}, + }; + + abstract class Remover { + abstract void remove(NavigableMap m, Object k, Object v); + } + + Remover[] removers = { + new Remover() { void remove(NavigableMap m, Object k, Object v) { + equal(m.remove(k), v); }}, + + new Remover() { void remove(NavigableMap m, Object k, Object v) { + equal(m.descendingMap().remove(k), v); }}, + new Remover() { void remove(NavigableMap m, Object k, Object v) { + equal(m.descendingMap().headMap(-86, false).remove(k), v); }}, + new Remover() { void remove(NavigableMap m, Object k, Object v) { + equal(m.descendingMap().tailMap(86, true).remove(k), v); }}, + + new Remover() { void remove(NavigableMap m, Object k, Object v) { + equal(m.headMap(86, true).remove(k), v); }}, + new Remover() { void remove(NavigableMap m, Object k, Object v) { + equal(m.tailMap(-86, true).remove(k), v); }}, + new Remover() { void remove(NavigableMap m, Object k, Object v) { + equal(m.subMap(-86, false, 86, true).remove(k), v); }}, + + new Remover() { void remove(NavigableMap m, Object k, Object v) { + check(m.keySet().remove(k)); }}, + new Remover() { void remove(NavigableMap m, Object k, Object v) { + check(m.navigableKeySet().remove(k)); }}, + + new Remover() { void remove(NavigableMap m, Object k, Object v) { + check(m.navigableKeySet().headSet(86, true).remove(k)); }}, + new Remover() { void remove(NavigableMap m, Object k, Object v) { + check(m.navigableKeySet().tailSet(-86, false).remove(k)); }}, + new Remover() { void remove(NavigableMap m, Object k, Object v) { + check(m.navigableKeySet().subSet(-86, true, 86, false) + .remove(k)); }}, + + new Remover() { void remove(NavigableMap m, Object k, Object v) { + check(m.descendingKeySet().headSet(-86, false).remove(k)); }}, + new Remover() { void remove(NavigableMap m, Object k, Object v) { + check(m.descendingKeySet().tailSet(86, true).remove(k)); }}, + new Remover() { void remove(NavigableMap m, Object k, Object v) { + check(m.descendingKeySet().subSet(86, true, -86, false) + .remove(k)); }}, + }; + + for (NavigableMapView view : views) { + for (Remover remover : removers) { + try { + m.clear(); + equalMaps(m, emptyMap); + equal(m.put(1, 2), null); + equalMaps(m, singletonMap); + NavigableMap v = view.view(m); + remover.remove(v, 1, 2); + equalMaps(m, emptyMap); + } catch (Throwable t) { unexpected(t); } + } + } + } + private static void testNavigableMap(NavigableMap m) { clear(m); diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/util/concurrent/Semaphore/RacingReleases.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/concurrent/Semaphore/RacingReleases.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,116 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * This file is available under and governed by the GNU General Public + * License version 2 only, as published by the Free Software Foundation. + * However, the following notice accompanied the original version of this + * file: + * + * Written by Doug Lea with assistance from members of JCP JSR-166 + * Expert Group and released to the public domain, as explained at + * http://creativecommons.org/licenses/publicdomain + */ + +/* + * @test + * @bug 6801020 6803402 + * @summary Try to tickle race conditions in + * AbstractQueuedSynchronizer "shared" code + */ + +import java.util.concurrent.Semaphore; + +public class RacingReleases { + + /** Increase this for better chance of tickling races */ + static final int iterations = 1000; + + public static void test(final boolean fair, + final boolean interruptibly) + throws Throwable { + for (int i = 0; i < iterations; i++) { + final Semaphore sem = new Semaphore(0, fair); + final Throwable[] badness = new Throwable[1]; + Runnable blocker = interruptibly ? + new Runnable() { + public void run() { + try { + sem.acquire(); + } catch (Throwable t) { + badness[0] = t; + throw new Error(t); + }}} + : + new Runnable() { + public void run() { + try { + sem.acquireUninterruptibly(); + } catch (Throwable t) { + badness[0] = t; + throw new Error(t); + }}}; + + Thread b1 = new Thread(blocker); + Thread b2 = new Thread(blocker); + Runnable signaller = new Runnable() { + public void run() { + try { + sem.release(); + } catch (Throwable t) { + badness[0] = t; + throw new Error(t); + }}}; + Thread s1 = new Thread(signaller); + Thread s2 = new Thread(signaller); + Thread[] threads = { b1, b2, s1, s2 }; + java.util.Collections.shuffle(java.util.Arrays.asList(threads)); + for (Thread thread : threads) + thread.start(); + for (Thread thread : threads) { + thread.join(60 * 1000); + if (thread.isAlive()) + throw new Error + (String.format + ("Semaphore stuck: permits %d, thread waiting %s%n", + sem.availablePermits(), + sem.hasQueuedThreads() ? "true" : "false")); + } + if (badness[0] != null) + throw new Error(badness[0]); + if (sem.availablePermits() != 0) + throw new Error(String.valueOf(sem.availablePermits())); + if (sem.hasQueuedThreads()) + throw new Error(String.valueOf(sem.hasQueuedThreads())); + if (sem.getQueueLength() != 0) + throw new Error(String.valueOf(sem.getQueueLength())); + if (sem.isFair() != fair) + throw new Error(String.valueOf(sem.isFair())); + } + } + + public static void main(String[] args) throws Throwable { + for (boolean fair : new boolean[] { true, false }) + for (boolean interruptibly : new boolean[] { true, false }) + test(fair, interruptibly); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/util/zip/LargeZip.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/util/zip/LargeZip.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,193 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +import java.io.*; +import java.nio.*; +import java.util.*; +import java.util.zip.*; + +public class LargeZip { + // If true, don't delete large ZIP file created for test. + static final boolean debug = System.getProperty("debug") != null; + + //static final int DATA_LEN = 1024 * 1024; + static final int DATA_LEN = 80 * 1024; + static final int DATA_SIZE = 8; + + static long fileSize = 6L * 1024L * 1024L * 1024L; // 6GB + + static boolean userFile = false; + + static byte[] data; + static File largeFile; + static String lastEntryName; + + /* args can be empty, in which case check a 3 GB file which is created for + * this test (and then deleted). Or it can be a number, in which case + * that designates the size of the file that's created for this test (and + * then deleted). Or it can be the name of a file to use for the test, in + * which case it is *not* deleted. Note that in this last case, the data + * comparison might fail. + */ + static void realMain (String[] args) throws Throwable { + if (args.length > 0) { + try { + fileSize = Long.parseLong(args[0]); + System.out.println("Testing with file of size " + fileSize); + } catch (NumberFormatException ex) { + largeFile = new File(args[0]); + if (!largeFile.exists()) { + throw new Exception("Specified file " + args[0] + " does not exist"); + } + userFile = true; + System.out.println("Testing with user-provided file " + largeFile); + } + } + File testDir = null; + if (largeFile == null) { + testDir = new File(System.getProperty("test.scratch", "."), + "LargeZip"); + if (testDir.exists()) { + if (!testDir.delete()) { + throw new Exception("Cannot delete already-existing test directory"); + } + } + check(!testDir.exists() && testDir.mkdirs()); + largeFile = new File(testDir, "largezip.zip"); + createLargeZip(); + } + + readLargeZip1(); + readLargeZip2(); + + if (!userFile && !debug) { + check(largeFile.delete()); + check(testDir.delete()); + } + } + + static void createLargeZip() throws Throwable { + int iterations = DATA_LEN / DATA_SIZE; + ByteBuffer bb = ByteBuffer.allocate(DATA_SIZE); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + for (int i = 0; i < iterations; i++) { + bb.putDouble(0, Math.random()); + baos.write(bb.array(), 0, DATA_SIZE); + } + data = baos.toByteArray(); + + ZipOutputStream zos = new ZipOutputStream( + new BufferedOutputStream(new FileOutputStream(largeFile))); + long length = 0; + while (length < fileSize) { + ZipEntry ze = new ZipEntry("entry-" + length); + lastEntryName = ze.getName(); + zos.putNextEntry(ze); + zos.write(data, 0, data.length); + zos.closeEntry(); + length = largeFile.length(); + } + System.out.println("Last entry written is " + lastEntryName); + zos.close(); + } + + static void readLargeZip1() throws Throwable { + ZipFile zipFile = new ZipFile(largeFile); + ZipEntry entry = null; + String entryName = null; + int count = 0; + Enumeration entries = zipFile.entries(); + while (entries.hasMoreElements()) { + entry = entries.nextElement(); + entryName = entry.getName(); + count++; + } + System.out.println("Number of entries read: " + count); + System.out.println("Last entry read is " + entryName); + check(!entry.isDirectory()); + if (check(entryName.equals(lastEntryName))) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + InputStream is = zipFile.getInputStream(entry); + byte buf[] = new byte[4096]; + int len; + while ((len = is.read(buf)) >= 0) { + baos.write(buf, 0, len); + } + baos.close(); + is.close(); + check(Arrays.equals(data, baos.toByteArray())); + } + } + + + static void readLargeZip2() throws Throwable { + ZipInputStream zis = new ZipInputStream( + new BufferedInputStream(new FileInputStream(largeFile))); + ZipEntry entry = null; + String entryName = null; + int count = 0; + while ((entry = zis.getNextEntry()) != null) { + entryName = entry.getName(); + if (entryName.equals(lastEntryName)) { + break; + } + count++; + } + System.out.println("Number of entries read: " + count); + System.out.println("Last entry read is " + entryName); + check(!entry.isDirectory()); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + + byte buf[] = new byte[4096]; + int len; + while ((len = zis.read(buf)) >= 0) { + baos.write(buf, 0, len); + } + baos.close(); + check(Arrays.equals(data, baos.toByteArray())); + check(zis.getNextEntry() == null); + zis.close(); + } + + + //--------------------- Infrastructure --------------------------- + static volatile int passed = 0, failed = 0; + static void pass() {passed++;} + static void pass(String msg) {System.out.println(msg); passed++;} + static void fail() {failed++; Thread.dumpStack();} + static void fail(String msg) {System.out.println(msg); fail();} + static void unexpected(Throwable t) {failed++; t.printStackTrace();} + static void unexpected(Throwable t, String msg) { + System.out.println(msg); failed++; t.printStackTrace();} + static boolean check(boolean cond) {if (cond) pass(); else fail(); return cond;} + static void equal(Object x, Object y) { + if (x == null ? y == null : x.equals(y)) pass(); + else fail(x + " not equal to " + y);} + public static void main(String[] args) throws Throwable { + try {realMain(args);} catch (Throwable t) {unexpected(t);} + System.out.println("\nPassed = " + passed + " failed = " + failed); + if (failed > 0) throw new AssertionError("Some tests failed");} +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/java/util/zip/ZipFile/LargeZipFile.java --- a/jdk/test/java/util/zip/ZipFile/LargeZipFile.java Wed Jul 05 16:50:37 2017 +0200 +++ b/jdk/test/java/util/zip/ZipFile/LargeZipFile.java Wed Jul 05 16:51:11 2017 +0200 @@ -158,4 +158,3 @@ System.out.println("\nPassed = " + passed + " failed = " + failed); if (failed > 0) throw new AssertionError("Some tests failed");} } - diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/javax/swing/JFileChooser/6570445/bug6570445.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/JFileChooser/6570445/bug6570445.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,20 @@ +/* + * @test + * @bug 6570445 + * @summary Checks if Win32ShellFolder2's COM-using methods work under a security manager + * @author Leonid Popov + */ + +import javax.swing.filechooser.FileSystemView; + +public class bug6570445 { + public static void main(String[] args) { + System.setSecurityManager(new SecurityManager()); + + // The next line of code forces FileSystemView to request data from Win32ShellFolder2, + // what causes an exception if a security manager installed (see the bug 6570445 description) + FileSystemView.getFileSystemView().getRoots(); + + System.out.println("Passed."); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/javax/swing/JFileChooser/6738668/bug6738668.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/JFileChooser/6738668/bug6738668.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,44 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 6738668 + @summary JFileChooser cannot be created under SecurityManager + @author Pavel Porvatov + @run main/othervm/policy=security.policy bug6738668 +*/ + +import javax.swing.*; +import java.io.File; + +public class bug6738668 { + public static void main(String[] args) throws Exception { + for (UIManager.LookAndFeelInfo lookAndFeelInfo : UIManager.getInstalledLookAndFeels()) { + UIManager.setLookAndFeel(lookAndFeelInfo.getClassName()); + + new JFileChooser(new File("c:/temp")); + + System.out.println("Test passed for LookAndFeel " + lookAndFeelInfo.getClassName()); + } + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/javax/swing/JFileChooser/6738668/security.policy --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/JFileChooser/6738668/security.policy Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,5 @@ +grant { + permission java.io.FilePermission "C:\\temp\\*", "read"; + permission java.io.FilePermission "C:\\temp", "read"; + permission java.util.PropertyPermission "*", "read"; +}; diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/javax/swing/JFileChooser/6798062/bug6798062.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/JFileChooser/6798062/bug6798062.html Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,11 @@ + + + +1. Create a link +2. Copy path to the link into TextField +3. Run the Windows Task Manager. Select the Processes tab and find the java process +4. Press the Start button in the test window +5. Wait several minutes and observe in the Windows Task Manager +that Memory Usage of java process is not increasing + + diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/javax/swing/JFileChooser/6798062/bug6798062.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/JFileChooser/6798062/bug6798062.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,189 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test %W% %E% + @bug 6798062 + @summary Memory Leak on using getFiles of FileSystemView + @author Pavel Porvatov + @run applet/manual=done bug6798062.html +*/ + +import sun.awt.shell.ShellFolder; + +import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.*; +import java.io.File; +import java.io.FileNotFoundException; + +public class bug6798062 extends JApplet { + + private final JSlider slider = new JSlider(0, 100); + + private final JTextField tfLink = new JTextField(); + + private final JButton btnStart = new JButton("Start"); + + private final JButton btnStop = new JButton("Stop"); + + private final JButton btnGC = new JButton("Run System.gc()"); + + private ShellFolder folder; + + private Thread thread; + + public static void main(String[] args) { + JFrame frame = new JFrame("bug6798062"); + + frame.setSize(400, 300); + frame.setLocationRelativeTo(null); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.add(new bug6798062().initialize()); + + frame.setVisible(true); + } + + public void init() { + add(initialize()); + } + + private JPanel initialize() { + File file = new File("c:/"); + + try { + folder = ShellFolder.getShellFolder(file); + } catch (FileNotFoundException e) { + fail("Directory " + file.getPath() + " not found"); + } + + slider.setMajorTickSpacing(10); + slider.setPaintTicks(true); + slider.setPaintLabels(true); + slider.setSnapToTicks(true); + slider.setValue(10); + + btnStart.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + setEnabledState(false); + + thread = new MyThread(slider.getValue(), tfLink.getText()); + thread.start(); + } + }); + + btnStop.setEnabled(false); + + btnStop.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + thread.interrupt(); + thread = null; + + setEnabledState(true); + } + }); + + btnGC.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + System.gc(); + } + }); + + setEnabledState(true); + + JPanel pnButtons = new JPanel(); + + pnButtons.setLayout(new BoxLayout(pnButtons, BoxLayout.X_AXIS)); + + pnButtons.add(btnStart); + pnButtons.add(btnStop); + pnButtons.add(btnGC); + + tfLink.setMaximumSize(new Dimension(300, 20)); + + JPanel pnContent = new JPanel(); + + pnContent.setLayout(new BoxLayout(pnContent, BoxLayout.Y_AXIS)); + pnContent.add(new JLabel("Delay between listFiles() invocation (ms):")); + pnContent.add(slider); + pnContent.add(new JLabel("Provide link here:")); + pnContent.add(tfLink); + pnContent.add(pnButtons); + + return pnContent; + } + + private void setEnabledState(boolean enabled) { + slider.setEnabled(enabled); + btnStart.setEnabled(enabled); + btnStop.setEnabled(!enabled); + } + + private static void fail(String msg) { + throw new RuntimeException(msg); + } + + private class MyThread extends Thread { + private final int delay; + + private final ShellFolder link; + + private MyThread(int delay, String link) { + this.delay = delay; + + ShellFolder linkFolder; + + try { + linkFolder = ShellFolder.getShellFolder(new File(link)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + + linkFolder = null; + } + + this.link = linkFolder; + } + + public void run() { + while (!isInterrupted()) { + folder.listFiles(); + if (link != null) { + try { + link.getLinkLocation(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + + if (delay > 0) { + try { + Thread.sleep(delay); + } catch (InterruptedException e1) { + // The thread was interrupted + return; + } + } + } + } + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/javax/swing/JSlider/6794831/bug6794831.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/JSlider/6794831/bug6794831.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,105 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + * @bug 6794831 + * @summary Infinite loop while painting ticks on Slider with maximum=MAX_INT + * @author Pavel Porvatov + @run main bug6794831 + */ + +import javax.swing.*; +import javax.swing.plaf.basic.BasicSliderUI; +import java.awt.image.BufferedImage; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +public class bug6794831 { + private final CountDownLatch countDownLatch = new CountDownLatch(1); + + public static void main(String args[]) throws InterruptedException { + new bug6794831().run(); + } + + private void run() throws InterruptedException { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + for (UIManager.LookAndFeelInfo lookAndFeelInfo : UIManager.getInstalledLookAndFeels()) { + try { + UIManager.setLookAndFeel(lookAndFeelInfo.getClassName()); + } catch (Exception e) { + fail(e.getMessage()); + } + + BufferedImage image = new BufferedImage(300, 200, BufferedImage.TYPE_INT_ARGB); + + // Test 1 + JSlider slider = new JSlider(0, Integer.MAX_VALUE - 1, 0); + + slider.setMajorTickSpacing((Integer.MAX_VALUE - 1) / 4); + slider.setPaintTicks(true); + + ((BasicSliderUI) slider.getUI()).paintTicks(image.getGraphics()); + + // Test 2 + slider = new JSlider(0, Integer.MAX_VALUE - 1, 0); + + slider.setMinorTickSpacing((Integer.MAX_VALUE - 1) / 4); + slider.setPaintTicks(true); + + ((BasicSliderUI) slider.getUI()).paintTicks(image.getGraphics()); + + // Test 3 + slider = new JSlider(0, Integer.MAX_VALUE - 1, 0); + + slider.setOrientation(JSlider.VERTICAL); + slider.setMajorTickSpacing((Integer.MAX_VALUE - 1) / 4); + slider.setPaintTicks(true); + + ((BasicSliderUI) slider.getUI()).paintTicks(image.getGraphics()); + + // Test 4 + slider = new JSlider(0, Integer.MAX_VALUE - 1, 0); + + slider.setOrientation(JSlider.VERTICAL); + slider.setMinorTickSpacing((Integer.MAX_VALUE - 1) / 4); + slider.setPaintTicks(true); + + ((BasicSliderUI) slider.getUI()).paintTicks(image.getGraphics()); + + countDownLatch.countDown(); + } + } + }); + + if (countDownLatch.await(3000, TimeUnit.MILLISECONDS)) { + System.out.println("bug6794831 passed"); + } else { + fail("bug6794831 failed"); + } + } + + private static void fail(String msg) { + throw new RuntimeException(msg); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/javax/swing/system/6799345/TestShutdown.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/system/6799345/TestShutdown.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,203 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 6799345 + @summary Tests that no exceptions are thrown from TimerQueue and +SwingWorker on AppContext shutdown + @author art + @run main TestShutdown +*/ + +import java.awt.*; +import java.awt.event.*; + +import java.util.*; + +import javax.swing.*; + +import sun.awt.*; + +public class TestShutdown +{ + private static AppContext targetAppContext; + + private static JFrame f; + private static JTextField tf; + + private static volatile boolean exceptionsOccurred = false; + private static volatile boolean appcontextInitDone = false; + + private static int timerValue = 0; + + public static void main(String[] args) + throws Exception + { + ThreadGroup tg = new TestThreadGroup("TTG"); + Thread t = new Thread(tg, new TestRunnable(), "InitThread"); + t.start(); + + while (!appcontextInitDone) + { + Thread.sleep(500); + } + + targetAppContext.dispose(); + + if (exceptionsOccurred) + { + throw new RuntimeException("Test FAILED: some exceptions occurred"); + } + } + + static void initGUI() + { + f = new JFrame("F"); + f.setBounds(100, 100, 200, 100); + tf = new JTextField("Test"); + f.add(tf); + f.setVisible(true); + } + + static void startGUI() + { + // caret blink Timer + tf.requestFocusInWindow(); + + // misc Timer + ActionListener al = new ActionListener() + { + @Override + public void actionPerformed(ActionEvent ae) + { + System.out.println("Timer tick: " + timerValue++); + } + }; + new javax.swing.Timer(30, al).start(); + } + + static class TestThreadGroup extends ThreadGroup + { + public TestThreadGroup(String name) + { + super(name); + } + + @Override + public synchronized void uncaughtException(Thread thread, Throwable t) + { + if (t instanceof ThreadDeath) + { + // this one is expected, rethrow + throw (ThreadDeath)t; + } + System.err.println("Test FAILED: an exception is caught in the " + + "target thread group on thread " + thread.getName()); + t.printStackTrace(System.err); + exceptionsOccurred = true; + } + } + + static class TestRunnable implements Runnable + { + @Override + public void run() + { + SunToolkit stk = (SunToolkit)Toolkit.getDefaultToolkit(); + targetAppContext = stk.createNewAppContext(); + + // create and show frame and text field + SwingUtilities.invokeLater(new Runnable() + { + @Override + public void run() + { + initGUI(); + } + }); + stk.realSync(); + + // start some Timers + SwingUtilities.invokeLater(new Runnable() + { + @Override + public void run() + { + startGUI(); + } + }); + stk.realSync(); + + // start multiple SwingWorkers + while (!Thread.interrupted()) + { + try + { + new TestSwingWorker().execute(); + Thread.sleep(40); + } + catch (Exception e) + { + // exception here is expected, skip + break; + } + } + } + } + + static class TestSwingWorker extends SwingWorker + { + @Override + public String doInBackground() + { + Random r = new Random(); + for (int i = 0; i < 10; i++) + { + try + { + int delay = r.nextInt() % 50; + Thread.sleep(delay); + publish(delay); + } + catch (Exception z) + { + break; + } + } + if (!appcontextInitDone) + { + appcontextInitDone = true; + } + return "Done"; + } + + @Override + public void process(java.util.List chunks) + { + for (Integer i : chunks) + { + System.err.println("Processed: " + i); + } + } + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/javax/swing/text/LayoutQueue/Test6588003.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/text/LayoutQueue/Test6588003.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,59 @@ +/* + * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 6588003 + @summary LayoutQueue should not share its DefaultQueue across AppContexts + @author Peter Zhelezniakov + @run main Test6588003 +*/ + +import javax.swing.text.LayoutQueue; +import sun.awt.SunToolkit; + +public class Test6588003 implements Runnable { + private static final LayoutQueue DEFAULT = new LayoutQueue(); + + public static void main(String[] args) throws InterruptedException { + LayoutQueue.setDefaultQueue(DEFAULT); + + ThreadGroup group = new ThreadGroup("Test6588003"); + Thread thread = new Thread(group, new Test6588003()); + thread.start(); + thread.join(); + + if (LayoutQueue.getDefaultQueue() != DEFAULT) { + throw new RuntimeException("Sharing detected"); + } + } + + public void run() { + SunToolkit.createNewAppContext(); + + if (LayoutQueue.getDefaultQueue() == DEFAULT) { + throw new RuntimeException("Sharing detected"); + } + + LayoutQueue.setDefaultQueue(new LayoutQueue()); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/javax/swing/text/html/Test4783068.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/text/html/Test4783068.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,93 @@ +/* + * Copyright 2007 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* @test + @bug 4783068 + @summary Disabled components should render grayed-out HTML + @author Peter Zhelezniakov + @run main Test4783068 +*/ + +import java.awt.*; +import java.awt.image.BufferedImage; +import javax.swing.*; +import javax.swing.plaf.metal.MetalLookAndFeel; + +public class Test4783068 { + final static Color TEST_COLOR = Color.WHITE; + + final static String html = "" + + "This is a colored text" + + "

with a link" + + "

  • an unordered
  • list
" + + "
  1. and an ordered
  2. list
" + + ""; + + + void test() { + try { + UIManager.setLookAndFeel(new MetalLookAndFeel()); + } catch (UnsupportedLookAndFeelException e) { + throw new Error("Cannot set Metal LAF"); + } + // Render text using background color + UIManager.put("textInactiveText", TEST_COLOR); + + test(new JLabel(html)); + test(new JButton(html)); + + JEditorPane pane = new JEditorPane("text/html", html); + pane.setDisabledTextColor(TEST_COLOR); + test(pane); + } + + void test(JComponent c) { + c.setEnabled(false); + c.setOpaque(true); + c.setBackground(TEST_COLOR); + c.setBorder(null); + Dimension size = c.getPreferredSize(); + c.setBounds(0, 0, size.width, size.height); + + BufferedImage image = new BufferedImage(size.width, size.height, BufferedImage.TYPE_INT_ARGB); + c.paint(image.getGraphics()); + + int rgb = TEST_COLOR.getRGB(); + for (int i = 0; i < size.height; i++) { + for (int j = 0; j < size.width; j++) { + if (image.getRGB(j, i) != rgb) { + throw new RuntimeException( + String.format("Color mismatch at [%d, %d]", j, i)); + } + } + } + } + + public static void main(String[] args) throws Exception { + SwingUtilities.invokeAndWait(new Runnable() { + @Override public void run() { + new Test4783068().test(); + } + }); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/sun/java2d/pipe/RegionOps.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/java2d/pipe/RegionOps.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,510 @@ +/* + * @test %W% %E% + * @bug 6504874 + * @summary This test verifies the operation (and performance) of the + * various CAG operations on the internal Region class. + * @run main RegionOps + */ + +import java.awt.Rectangle; +import java.awt.geom.Area; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; +import java.util.Random; +import sun.java2d.pipe.Region; + +public class RegionOps { + public static final int DEFAULT_NUMREGIONS = 50; + public static final int DEFAULT_MINSUBRECTS = 1; + public static final int DEFAULT_MAXSUBRECTS = 10; + + public static final int MINCOORD = -20; + public static final int MAXCOORD = 20; + + public static boolean useArea; + + static int numops; + static int numErrors; + static Random rand = new Random(); + static boolean skipCheck; + static boolean countErrors; + + static { + // Instantiating BufferedImage initializes sun.java2d + BufferedImage bimg = + new BufferedImage(1, 1, BufferedImage.TYPE_INT_RGB); + } + + public static void usage(String error) { + if (error != null) { + System.err.println("Error: "+error); + } + System.err.println("Usage: java RegionOps "+ + "[-regions N] [-rects M] "+ + "[-[min|max]rects M] [-area]"); + System.err.println(" "+ + "[-add|union] [-sub|diff] "+ + "[-int[ersect]] [-xor]"); + System.err.println(" "+ + "[-seed S] [-nocheck] [-count[errors]] [-help]"); + System.exit((error != null) ? 1 : 0); + } + + public static void error(RectListImpl a, RectListImpl b, String problem) { + System.err.println("Operating on: "+a); + if (b != null) { + System.err.println("and: "+b); + } + if (countErrors) { + System.err.println(problem); + numErrors++; + } else { + throw new RuntimeException(problem); + } + } + + public static void main(String argv[]) { + int numregions = DEFAULT_NUMREGIONS; + int minsubrects = DEFAULT_MINSUBRECTS; + int maxsubrects = DEFAULT_MAXSUBRECTS; + boolean doUnion = false; + boolean doIntersect = false; + boolean doSubtract = false; + boolean doXor = false; + + for (int i = 0; i < argv.length; i++) { + String arg = argv[i]; + if (arg.equalsIgnoreCase("-regions")) { + if (i+1 >= argv.length) { + usage("missing arg for -regions"); + } + numregions = Integer.parseInt(argv[++i]); + } else if (arg.equalsIgnoreCase("-rects")) { + if (i+1 >= argv.length) { + usage("missing arg for -rects"); + } + minsubrects = maxsubrects = Integer.parseInt(argv[++i]); + } else if (arg.equalsIgnoreCase("-minrects")) { + if (i+1 >= argv.length) { + usage("missing arg for -minrects"); + } + minsubrects = Integer.parseInt(argv[++i]); + } else if (arg.equalsIgnoreCase("-maxrects")) { + if (i+1 >= argv.length) { + usage("missing arg for -maxrects"); + } + maxsubrects = Integer.parseInt(argv[++i]); + } else if (arg.equalsIgnoreCase("-area")) { + useArea = true; + } else if (arg.equalsIgnoreCase("-add") || + arg.equalsIgnoreCase("-union")) + { + doUnion = true; + } else if (arg.equalsIgnoreCase("-sub") || + arg.equalsIgnoreCase("-diff")) + { + doSubtract = true; + } else if (arg.equalsIgnoreCase("-int") || + arg.equalsIgnoreCase("-intersect")) + { + doIntersect = true; + } else if (arg.equalsIgnoreCase("-xor")) { + doXor = true; + } else if (arg.equalsIgnoreCase("-seed")) { + if (i+1 >= argv.length) { + usage("missing arg for -seed"); + } + rand.setSeed(Long.decode(argv[++i]).longValue()); + } else if (arg.equalsIgnoreCase("-nocheck")) { + skipCheck = true; + } else if (arg.equalsIgnoreCase("-count") || + arg.equalsIgnoreCase("-counterrors")) + { + countErrors = true; + } else if (arg.equalsIgnoreCase("-help")) { + usage(null); + } else { + usage("Unknown argument: "+arg); + } + } + + if (maxsubrects < minsubrects) { + usage("maximum number of subrectangles less than minimum"); + } + + if (minsubrects <= 0) { + usage("minimum number of subrectangles must be positive"); + } + + if (!doUnion && !doSubtract && !doIntersect && !doXor) { + doUnion = doSubtract = doIntersect = doXor = true; + } + + long start = System.currentTimeMillis(); + RectListImpl rlist[] = new RectListImpl[numregions]; + int totalrects = 0; + for (int i = 0; i < rlist.length; i++) { + RectListImpl rli = RectListImpl.getInstance(); + int numsubrects = + minsubrects + rand.nextInt(maxsubrects - minsubrects + 1); + for (int j = 0; j < numsubrects; j++) { + addRectTo(rli); + totalrects++; + } + rlist[i] = rli; + } + long end = System.currentTimeMillis(); + System.out.println((end-start)+"ms to create "+ + rlist.length+" regions containing "+ + totalrects+" subrectangles"); + + start = System.currentTimeMillis(); + for (int i = 0; i < rlist.length; i++) { + RectListImpl a = rlist[i]; + testTranslate(a); + for (int j = i; j < rlist.length; j++) { + RectListImpl b = rlist[j]; + if (doUnion) testUnion(a, b); + if (doSubtract) testDifference(a, b); + if (doIntersect) testIntersection(a, b); + if (doXor) testExclusiveOr(a, b); + } + } + end = System.currentTimeMillis(); + System.out.println(numops+" ops took "+(end-start)+"ms"); + + if (numErrors > 0) { + throw new RuntimeException(numErrors+" errors encountered"); + } + } + + public static void addRectTo(RectListImpl rli) { + int lox = MINCOORD + rand.nextInt(MAXCOORD - MINCOORD + 1); + int hix = MINCOORD + rand.nextInt(MAXCOORD - MINCOORD + 1); + int loy = MINCOORD + rand.nextInt(MAXCOORD - MINCOORD + 1); + int hiy = MINCOORD + rand.nextInt(MAXCOORD - MINCOORD + 1); + rli.addRect(lox, loy, hix, hiy); + } + + public static void checkEqual(RectListImpl a, RectListImpl b, + String optype) + { + if (a.hashCode() != b.hashCode()) { + error(a, b, "hashcode failed for "+optype); + } + if (!a.equals(b)) { + error(a, b, "equals failed for "+optype); + } + } + + public static void testTranslate(RectListImpl a) { + RectListImpl maxTrans = + a.getTranslation(Integer.MAX_VALUE, Integer.MAX_VALUE) + .getTranslation(Integer.MAX_VALUE, Integer.MAX_VALUE) + .getTranslation(Integer.MAX_VALUE, Integer.MAX_VALUE); + if (!maxTrans.checkTransEmpty()) { + error(maxTrans, null, "overflow translated RectList not empty"); + } + RectListImpl minTrans = + a.getTranslation(Integer.MIN_VALUE, Integer.MIN_VALUE) + .getTranslation(Integer.MIN_VALUE, Integer.MIN_VALUE) + .getTranslation(Integer.MIN_VALUE, Integer.MIN_VALUE); + if (!minTrans.checkTransEmpty()) { + error(minTrans, null, "overflow translated RectList not empty"); + } + testTranslate(a, Integer.MAX_VALUE, Integer.MAX_VALUE, false, + MINCOORD, 0, MINCOORD, 0); + testTranslate(a, Integer.MAX_VALUE, Integer.MIN_VALUE, false, + MINCOORD, 0, 0, MAXCOORD); + testTranslate(a, Integer.MIN_VALUE, Integer.MAX_VALUE, false, + 0, MAXCOORD, MINCOORD, 0); + testTranslate(a, Integer.MIN_VALUE, Integer.MIN_VALUE, false, + 0, MAXCOORD, 0, MAXCOORD); + for (int dy = -100; dy <= 100; dy += 50) { + for (int dx = -100; dx <= 100; dx += 50) { + testTranslate(a, dx, dy, true, + MINCOORD, MAXCOORD, + MINCOORD, MAXCOORD); + } + } + } + + public static void testTranslate(RectListImpl a, int dx, int dy, + boolean isNonDestructive, + int xmin, int xmax, + int ymin, int ymax) + { + RectListImpl theTrans = a.getTranslation(dx, dy); numops++; + if (skipCheck) return; + RectListImpl unTrans = theTrans.getTranslation(-dx, -dy); + if (isNonDestructive) checkEqual(a, unTrans, "Translate"); + for (int x = xmin; x < xmax; x++) { + for (int y = ymin; y < ymax; y++) { + boolean inside = a.contains(x, y); + if (theTrans.contains(x+dx, y+dy) != inside) { + error(a, null, "translation failed for "+ + dx+", "+dy+" at "+x+", "+y); + } + } + } + } + + public static void testUnion(RectListImpl a, RectListImpl b) { + RectListImpl aUb = a.getUnion(b); numops++; + RectListImpl bUa = b.getUnion(a); numops++; + if (skipCheck) return; + checkEqual(aUb, bUa, "Union"); + testUnion(a, b, aUb); + testUnion(a, b, bUa); + } + + public static void testUnion(RectListImpl a, RectListImpl b, + RectListImpl theUnion) + { + for (int x = MINCOORD; x < MAXCOORD; x++) { + for (int y = MINCOORD; y < MAXCOORD; y++) { + boolean inside = (a.contains(x, y) || b.contains(x, y)); + if (theUnion.contains(x, y) != inside) { + error(a, b, "union failed at "+x+", "+y); + } + } + } + } + + public static void testDifference(RectListImpl a, RectListImpl b) { + RectListImpl aDb = a.getDifference(b); numops++; + RectListImpl bDa = b.getDifference(a); numops++; + if (skipCheck) return; + // Note that difference is not commutative so we cannot check equals + // checkEqual(a, b, "Difference"); + testDifference(a, b, aDb); + testDifference(b, a, bDa); + } + + public static void testDifference(RectListImpl a, RectListImpl b, + RectListImpl theDifference) + { + for (int x = MINCOORD; x < MAXCOORD; x++) { + for (int y = MINCOORD; y < MAXCOORD; y++) { + boolean inside = (a.contains(x, y) && !b.contains(x, y)); + if (theDifference.contains(x, y) != inside) { + error(a, b, "difference failed at "+x+", "+y); + } + } + } + } + + public static void testIntersection(RectListImpl a, RectListImpl b) { + RectListImpl aIb = a.getIntersection(b); numops++; + RectListImpl bIa = b.getIntersection(a); numops++; + if (skipCheck) return; + checkEqual(aIb, bIa, "Intersection"); + testIntersection(a, b, aIb); + testIntersection(a, b, bIa); + } + + public static void testIntersection(RectListImpl a, RectListImpl b, + RectListImpl theIntersection) + { + for (int x = MINCOORD; x < MAXCOORD; x++) { + for (int y = MINCOORD; y < MAXCOORD; y++) { + boolean inside = (a.contains(x, y) && b.contains(x, y)); + if (theIntersection.contains(x, y) != inside) { + error(a, b, "intersection failed at "+x+", "+y); + } + } + } + } + + public static void testExclusiveOr(RectListImpl a, RectListImpl b) { + RectListImpl aXb = a.getExclusiveOr(b); numops++; + RectListImpl bXa = b.getExclusiveOr(a); numops++; + if (skipCheck) return; + checkEqual(aXb, bXa, "ExclusiveOr"); + testExclusiveOr(a, b, aXb); + testExclusiveOr(a, b, bXa); + } + + public static void testExclusiveOr(RectListImpl a, RectListImpl b, + RectListImpl theExclusiveOr) + { + for (int x = MINCOORD; x < MAXCOORD; x++) { + for (int y = MINCOORD; y < MAXCOORD; y++) { + boolean inside = (a.contains(x, y) != b.contains(x, y)); + if (theExclusiveOr.contains(x, y) != inside) { + error(a, b, "xor failed at "+x+", "+y); + } + } + } + } + + public abstract static class RectListImpl { + public static RectListImpl getInstance() { + if (useArea) { + return new AreaImpl(); + } else { + return new RegionImpl(); + } + } + + public abstract void addRect(int lox, int loy, int hix, int hiy); + + public abstract RectListImpl getTranslation(int dx, int dy); + + public abstract RectListImpl getIntersection(RectListImpl rli); + public abstract RectListImpl getExclusiveOr(RectListImpl rli); + public abstract RectListImpl getDifference(RectListImpl rli); + public abstract RectListImpl getUnion(RectListImpl rli); + + // Used for making sure that 3xMAX translates yields an empty region + public abstract boolean checkTransEmpty(); + + public abstract boolean contains(int x, int y); + + public abstract int hashCode(); + public abstract boolean equals(RectListImpl other); + } + + public static class AreaImpl extends RectListImpl { + Area theArea; + + public AreaImpl() { + } + + public AreaImpl(Area a) { + theArea = a; + } + + public void addRect(int lox, int loy, int hix, int hiy) { + Area a2 = new Area(new Rectangle(lox, loy, hix-lox, hiy-loy)); + if (theArea == null) { + theArea = a2; + } else { + theArea.add(a2); + } + } + + public RectListImpl getTranslation(int dx, int dy) { + AffineTransform at = AffineTransform.getTranslateInstance(dx, dy); + return new AreaImpl(theArea.createTransformedArea(at)); + } + + public RectListImpl getIntersection(RectListImpl rli) { + Area a2 = new Area(theArea); + a2.intersect(((AreaImpl) rli).theArea); + return new AreaImpl(a2); + } + + public RectListImpl getExclusiveOr(RectListImpl rli) { + Area a2 = new Area(theArea); + a2.exclusiveOr(((AreaImpl) rli).theArea); + return new AreaImpl(a2); + } + + public RectListImpl getDifference(RectListImpl rli) { + Area a2 = new Area(theArea); + a2.subtract(((AreaImpl) rli).theArea); + return new AreaImpl(a2); + } + + public RectListImpl getUnion(RectListImpl rli) { + Area a2 = new Area(theArea); + a2.add(((AreaImpl) rli).theArea); + return new AreaImpl(a2); + } + + // Used for making sure that 3xMAX translates yields an empty region + public boolean checkTransEmpty() { + // Area objects will actually survive 3 MAX translates so just + // pretend that it had the intended effect... + return true; + } + + public boolean contains(int x, int y) { + return theArea.contains(x, y); + } + + public int hashCode() { + // Area does not override hashCode... + return 0; + } + + public boolean equals(RectListImpl other) { + return theArea.equals(((AreaImpl) other).theArea); + } + + public String toString() { + return theArea.toString(); + } + } + + public static class RegionImpl extends RectListImpl { + Region theRegion; + + public RegionImpl() { + } + + public RegionImpl(Region r) { + theRegion = r; + } + + public void addRect(int lox, int loy, int hix, int hiy) { + Region r2 = Region.getInstanceXYXY(lox, loy, hix, hiy); + if (theRegion == null) { + theRegion = r2; + } else { + theRegion = theRegion.getUnion(r2); + } + } + + public RectListImpl getTranslation(int dx, int dy) { + return new RegionImpl(theRegion.getTranslatedRegion(dx, dy)); + } + + public RectListImpl getIntersection(RectListImpl rli) { + Region r2 = ((RegionImpl) rli).theRegion; + r2 = theRegion.getIntersection(r2); + return new RegionImpl(r2); + } + + public RectListImpl getExclusiveOr(RectListImpl rli) { + Region r2 = ((RegionImpl) rli).theRegion; + r2 = theRegion.getExclusiveOr(r2); + return new RegionImpl(r2); + } + + public RectListImpl getDifference(RectListImpl rli) { + Region r2 = ((RegionImpl) rli).theRegion; + r2 = theRegion.getDifference(r2); + return new RegionImpl(r2); + } + + public RectListImpl getUnion(RectListImpl rli) { + Region r2 = ((RegionImpl) rli).theRegion; + r2 = theRegion.getUnion(r2); + return new RegionImpl(r2); + } + + // Used for making sure that 3xMAX translates yields an empty region + public boolean checkTransEmpty() { + // Region objects should be empty after 3 MAX translates... + return theRegion.isEmpty(); + } + + public boolean contains(int x, int y) { + return theRegion.contains(x, y); + } + + public int hashCode() { + return theRegion.hashCode(); + } + + public boolean equals(RectListImpl other) { + return theRegion.equals(((RegionImpl) other).theRegion); + } + + public String toString() { + return theRegion.toString(); + } + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/sun/net/sdp/ProbeIB.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/net/sdp/ProbeIB.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,59 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +import java.io.File; +import java.io.IOException; +import java.net.NetworkInterface; +import java.net.InetAddress; +import java.util.Scanner; +import java.util.Enumeration; + +/** + * Probes for InfiniBand devices plumbed with IP addresses. + */ + +public class ProbeIB { + public static void main(String[] args) throws IOException { + Scanner s = new Scanner(new File("/etc/path_to_inst")); + try { + while (s.hasNextLine()) { + String line = s.nextLine(); + if (line.startsWith("#")) + continue; + String[] fields = line.split("\\s+"); + if (!fields[2].equals("\"ibd\"")) + continue; + String name = fields[2].substring(1, fields[2].length()-1) + fields[1]; + NetworkInterface ni = NetworkInterface.getByName(name); + if (ni != null) { + Enumeration addrs = ni.getInetAddresses(); + while (addrs.hasMoreElements()) { + System.out.println(addrs.nextElement().getHostAddress()); + } + } + } + } finally { + s.close(); + } + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/sun/net/sdp/Sanity.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/net/sdp/Sanity.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,168 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +import java.net.*; +import java.io.*; +import java.nio.channels.*; +import java.util.Enumeration; + +/** + * Sanity check Socket/ServerSocket and each of the stream-oriented channels + * on each IP address plumbed to the network adapters. + */ + +public class Sanity { + public static void main(String[] args) throws Exception { + Enumeration nifs = NetworkInterface.getNetworkInterfaces(); + while (nifs.hasMoreElements()) { + NetworkInterface ni = nifs.nextElement(); + Enumeration addrs = ni.getInetAddresses(); + while (addrs.hasMoreElements()) { + InetAddress addr = addrs.nextElement(); + test(addr); + } + } + } + + static void test(InetAddress addr) throws Exception { + System.out.println(addr.getHostAddress()); + + // ServerSocketChannel.bind + ServerSocketChannel ssc = ServerSocketChannel.open(); + try { + ssc.bind(new InetSocketAddress(addr, 0)); + int port = ((InetSocketAddress)(ssc.getLocalAddress())).getPort(); + + // SocketChannel.connect (implicit bind) + SocketChannel client = SocketChannel.open(); + try { + client.connect(new InetSocketAddress(addr, port)); + SocketChannel peer = ssc.accept(); + try { + testConnection(Channels.newOutputStream(client), + Channels.newInputStream(peer)); + } finally { + peer.close(); + } + } finally { + client.close(); + } + + // SocketChannel.connect (explicit bind) + client = SocketChannel.open(); + try { + client.bind(new InetSocketAddress(addr, 0)) + .connect(new InetSocketAddress(addr, port)); + ssc.accept().close(); + } finally { + client.close(); + } + } finally { + ssc.close(); + } + + // AsynchronousServerSocketChannel.bind + AsynchronousServerSocketChannel server = + AsynchronousServerSocketChannel.open(); + try { + server.bind(new InetSocketAddress(addr, 0)); + int port = ((InetSocketAddress)(server.getLocalAddress())).getPort(); + + // AsynchronousSocketChannel.connect (implicit bind) + AsynchronousSocketChannel client = AsynchronousSocketChannel.open(); + try { + client.connect(new InetSocketAddress(addr, port)).get(); + AsynchronousSocketChannel peer = server.accept().get(); + try { + testConnection(Channels.newOutputStream(client), + Channels.newInputStream(peer)); + } finally { + peer.close(); + } + } finally { + client.close(); + } + + // AsynchronousSocketChannel.connect (explicit bind) + client = AsynchronousSocketChannel.open(); + try { + client.bind(new InetSocketAddress(addr, 0)) + .connect(new InetSocketAddress(addr, port)).get(); + server.accept().get().close(); + } finally { + client.close(); + } + } finally { + server.close(); + } + + // ServerSocket.bind + ServerSocket ss = new ServerSocket(); + try { + ss.bind(new InetSocketAddress(addr, 0)); + int port = ss.getLocalPort(); + + // Socket.connect (implicit bind) + Socket s = new Socket(); + try { + s.connect(new InetSocketAddress(addr, port)); + Socket peer = ss.accept(); + try { + testConnection(s.getOutputStream(), peer.getInputStream()); + } finally { + peer.close(); + } + } finally { + s.close(); + } + + // Socket.connect (explicit bind) + s = new Socket(); + try { + s.bind(new InetSocketAddress(addr, 0)); + s.connect(new InetSocketAddress(addr, port)); + ss.accept().close(); + } finally { + s.close(); + } + } finally { + ss.close(); + } + } + + static void testConnection(OutputStream out, InputStream in) + throws IOException + { + byte[] msg = "hello".getBytes(); + out.write(msg); + + byte[] ba = new byte[100]; + int nread = 0; + while (nread < msg.length) { + int n = in.read(ba); + if (n < 0) + throw new IOException("EOF not expected!"); + nread += n; + } + } +} diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/sun/net/sdp/sanity.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/net/sdp/sanity.sh Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,72 @@ +# +# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, +# CA 95054 USA or visit www.sun.com if you need additional information or +# have any questions. +# + +# @test +# @bug 4890703 +# @summary Unit test for Solaris SDP support +# @build ProbeIB Sanity +# @run shell sanity.sh + +# Check we are on Solaris and that SDP is enabled +OS=`uname -s` +if [ "$OS" != "SunOS" ]; then + echo "This is a Solaris-only test" + exit 0 +fi +SDPADM=/usr/sbin/sdpadm +if [ ! -f ${SDPADM} ]; then + echo "SDP not available" + exit 0 +fi +${SDPADM} status|grep Enabled +if [ $? != 0 ]; then + echo "SDP not enabled" + exit 0 +fi + +if [ -z "$TESTJAVA" ]; then + JAVA=java + TESTCLASSES=. + TESTSRC=. +else + JAVA="${TESTJAVA}/bin/java" +fi + +CLASSPATH=${TESTCLASSES}:${TESTSRC} +export CLASSPATH + +# Probe for IP addresses plumbed to IB interfaces +$JAVA -Djava.net.preferIPv4Stack=true ProbeIB > ib_addrs + +# Create sdp.conf +SDPCONF=sdp.conf +rm ${SDPCONF} +touch ${SDPCONF} +cat ib_addrs | while read ADDR +do + echo "bind ${ADDR} *" > ${SDPCONF} + echo "connect ${ADDR} *" >> ${SDPCONF} +done + +# Sanity check +$JAVA -Djava.net.preferIPv4Stack=true -Dcom.sun.sdp.conf=${SDPCONF} -Dcom.sun.sdp.debug Sanity diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/sun/security/tools/jarsigner/concise_jarsigner.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/tools/jarsigner/concise_jarsigner.sh Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,200 @@ +# +# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, +# CA 95054 USA or visit www.sun.com if you need additional information or +# have any questions. +# + +# @test +# @bug 6802846 +# @summary jarsigner needs enhanced cert validation(options) +# +# @run shell concise_jarsigner.sh +# + +if [ "${TESTJAVA}" = "" ] ; then + JAVAC_CMD=`which javac` + TESTJAVA=`dirname $JAVAC_CMD`/.. +fi + +# set platform-dependent variables +OS=`uname -s` +case "$OS" in + Windows_* ) + FS="\\" + ;; + * ) + FS="/" + ;; +esac + +KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore js.jks" +JAR=$TESTJAVA${FS}bin${FS}jar +JARSIGNER=$TESTJAVA${FS}bin${FS}jarsigner +JAVAC=$TESTJAVA${FS}bin${FS}javac + +rm js.jks + +echo class A1 {} > A1.java +echo class A2 {} > A2.java +echo class A3 {} > A3.java +echo class A4 {} > A4.java +echo class A5 {} > A5.java +echo class A6 {} > A6.java + +$JAVAC A1.java A2.java A3.java A4.java A5.java A6.java +YEAR=`date +%Y` + +# ========================================================== +# First part: output format +# ========================================================== + +$KT -genkeypair -alias a1 -dname CN=a1 -validity 365 +$KT -genkeypair -alias a2 -dname CN=a2 -validity 365 + +# a.jar includes 8 unsigned, 2 signed by a1 and a2, 2 signed by a3 +$JAR cvf a.jar A1.class A2.class +$JARSIGNER -keystore js.jks -storepass changeit a.jar a1 +$JAR uvf a.jar A3.class A4.class +$JARSIGNER -keystore js.jks -storepass changeit a.jar a2 +$JAR uvf a.jar A5.class A6.class + +# Verify OK +$JARSIGNER -verify a.jar +[ $? = 0 ] || exit $LINENO + +# 4(chainNotValidated)+16(hasUnsignedEntry)+32(aliasNotInStore) +$JARSIGNER -verify a.jar -strict +[ $? = 52 ] || exit $LINENO + +# 16(hasUnsignedEntry) +$JARSIGNER -verify a.jar -strict -keystore js.jks +[ $? = 16 ] || exit $LINENO + +# 16(hasUnsignedEntry)+32(notSignedByAlias) +$JARSIGNER -verify a.jar a1 -strict -keystore js.jks +[ $? = 48 ] || exit $LINENO + +# 16(hasUnsignedEntry) +$JARSIGNER -verify a.jar a1 a2 -strict -keystore js.jks +[ $? = 16 ] || exit $LINENO + +# 12 entries all together +LINES=`$JARSIGNER -verify a.jar -verbose | grep $YEAR | wc -l` +[ $LINES = 12 ] || exit $LINENO + +# 12 entries all listed +LINES=`$JARSIGNER -verify a.jar -verbose:grouped | grep $YEAR | wc -l` +[ $LINES = 12 ] || exit $LINENO + +# 3 groups: unrelated, signed, unsigned +LINES=`$JARSIGNER -verify a.jar -verbose:summary | grep $YEAR | wc -l` +[ $LINES = 3 ] || exit $LINENO + +# 4 groups: unrelated, signed by a1/a2, signed by a2, unsigned +LINES=`$JARSIGNER -verify a.jar -verbose:summary -certs | grep $YEAR | wc -l` +[ $LINES = 4 ] || exit $LINENO + +# 2*2 for A1/A2, 2 for A3/A4 +LINES=`$JARSIGNER -verify a.jar -verbose -certs | grep "\[certificate" | wc -l` +[ $LINES = 6 ] || exit $LINENO + +# a1,a2 for A1/A2, a2 for A3/A4 +LINES=`$JARSIGNER -verify a.jar -verbose:grouped -certs | grep "\[certificate" | wc -l` +[ $LINES = 3 ] || exit $LINENO + +# a1,a2 for A1/A2, a2 for A3/A4 +LINES=`$JARSIGNER -verify a.jar -verbose:summary -certs | grep "\[certificate" | wc -l` +[ $LINES = 3 ] || exit $LINENO + +# 4 groups +LINES=`$JARSIGNER -verify a.jar -verbose:summary -certs | grep "more)" | wc -l` +[ $LINES = 4 ] || exit $LINENO + +# ========================================================== +# Second part: exit code 2, 4, 8 +# 16 and 32 already covered in the first part +# ========================================================== + +$KT -genkeypair -alias expiring -dname CN=expiring -startdate -1m +$KT -genkeypair -alias expired -dname CN=expired -startdate -10m +$KT -genkeypair -alias notyetvalid -dname CN=notyetvalid -startdate +1m +$KT -genkeypair -alias badku -dname CN=badku -ext KU=cRLSign -validity 365 +$KT -genkeypair -alias badeku -dname CN=badeku -ext EKU=sa -validity 365 +$KT -genkeypair -alias goodku -dname CN=goodku -ext KU=dig -validity 365 +$KT -genkeypair -alias goodeku -dname CN=goodeku -ext EKU=codesign -validity 365 + +# badchain signed by ca, but ca is removed later +$KT -genkeypair -alias badchain -dname CN=badchain -validity 365 +$KT -genkeypair -alias ca -dname CN=ca -ext bc -validity 365 +$KT -certreq -alias badchain | $KT -gencert -alias ca -validity 365 | \ + $KT -importcert -alias badchain +$KT -delete -alias ca + +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar expiring +[ $? = 2 ] || exit $LINENO + +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar expired +[ $? = 4 ] || exit $LINENO + +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar notyetvalid +[ $? = 4 ] || exit $LINENO + +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar badku +[ $? = 8 ] || exit $LINENO + +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar badeku +[ $? = 8 ] || exit $LINENO + +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar goodku +[ $? = 0 ] || exit $LINENO + +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar goodeku +[ $? = 0 ] || exit $LINENO + +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar badchain +[ $? = 4 ] || exit $LINENO + +$JARSIGNER -verify a.jar +[ $? = 0 ] || exit $LINENO + +# ========================================================== +# Third part: -certchain test +# ========================================================== + +# altchain signed by ca2, but ca2 is removed later +$KT -genkeypair -alias altchain -dname CN=altchain -validity 365 +$KT -genkeypair -alias ca2 -dname CN=ca2 -ext bc -validity 365 +$KT -certreq -alias altchain | $KT -gencert -alias ca2 -validity 365 -rfc > certchain +$KT -exportcert -alias ca2 -rfc >> certchain +$KT -delete -alias ca2 + +# Now altchain is still self-signed +$JARSIGNER -strict -keystore js.jks -storepass changeit a.jar altchain +[ $? = 0 ] || exit $LINENO + +# If -certchain is used, then it's bad +$JARSIGNER -strict -keystore js.jks -storepass changeit -certchain certchain a.jar altchain +[ $? = 4 ] || exit $LINENO + +$JARSIGNER -verify a.jar +[ $? = 0 ] || exit $LINENO + +echo OK +exit 0 diff -r c27d5e6924b2 -r c8b275d62d6b jdk/test/sun/security/tools/keytool/selfissued.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/sun/security/tools/keytool/selfissued.sh Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,69 @@ +# +# Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, +# CA 95054 USA or visit www.sun.com if you need additional information or +# have any questions. +# + +# @test +# @bug 6825352 +# @summary support self-issued certificate in keytool +# +# @run shell selfissued.sh +# + +if [ "${TESTJAVA}" = "" ] ; then + JAVAC_CMD=`which javac` + TESTJAVA=`dirname $JAVAC_CMD`/.. +fi + +# set platform-dependent variables +OS=`uname -s` +case "$OS" in + Windows_* ) + FS="\\" + ;; + * ) + FS="/" + ;; +esac + +KS=selfsigned.jks +KT="$TESTJAVA${FS}bin${FS}keytool -storepass changeit -keypass changeit -keystore $KS" + +rm $KS + +$KT -alias ca -dname CN=CA -genkeypair +$KT -alias me -dname CN=CA -genkeypair +$KT -alias e1 -dname CN=E1 -genkeypair +$KT -alias e2 -dname CN=E2 -genkeypair + +# me signed by ca, self-issued +$KT -alias me -certreq | $KT -alias ca -gencert | $KT -alias me -importcert + +# Import e1 signed by me, should add me and ca +$KT -alias e1 -certreq | $KT -alias me -gencert | $KT -alias e1 -importcert +$KT -alias e1 -list -v | grep '\[3\]' || { echo Bad E1; exit 1; } + +# Import (e2 signed by me,ca,me), should reorder to (e2,me,ca) +( $KT -alias e2 -certreq | $KT -alias me -gencert; $KT -exportcert -alias ca; $KT -exportcert -alias me ) | $KT -alias e2 -importcert +$KT -alias e2 -list -v | grep '\[3\]' || { echo Bad E2; exit 1; } + +echo Good + diff -r c27d5e6924b2 -r c8b275d62d6b langtools/.hgtags --- a/langtools/.hgtags Wed Jul 05 16:50:37 2017 +0200 +++ b/langtools/.hgtags Wed Jul 05 16:51:11 2017 +0200 @@ -28,3 +28,4 @@ 8c55d5b0ed71ed3a749eb97e4eab79b4831649b8 jdk7-b51 29329051d483d39f66073752ba4afbf29d893cfe jdk7-b52 dbdeb4a7581b2a8699644b91cae6793cb01953f7 jdk7-b53 +197a7f881937d406a01214aa9ded49c073f7d380 jdk7-b54 diff -r c27d5e6924b2 -r c8b275d62d6b langtools/src/share/classes/com/sun/tools/classfile/Code_attribute.java --- a/langtools/src/share/classes/com/sun/tools/classfile/Code_attribute.java Wed Jul 05 16:50:37 2017 +0200 +++ b/langtools/src/share/classes/com/sun/tools/classfile/Code_attribute.java Wed Jul 05 16:51:11 2017 +0200 @@ -26,6 +26,8 @@ package com.sun.tools.classfile; import java.io.IOException; +import java.util.Iterator; +import java.util.NoSuchElementException; /** * See JVMS3, section 4.8.3. @@ -100,6 +102,39 @@ return visitor.visitCode(this, data); } + public Iterable getInstructions() { + return new Iterable() { + public Iterator iterator() { + return new Iterator() { + + public boolean hasNext() { + return (next != null); + } + + public Instruction next() { + if (next == null) + throw new NoSuchElementException(); + + current = next; + pc += current.length(); + next = (pc < code.length ? new Instruction(code, pc) : null); + return current; + } + + public void remove() { + throw new UnsupportedOperationException("Not supported."); + } + + Instruction current = null; + int pc = 0; + Instruction next = new Instruction(code, pc); + + }; + } + + }; + } + public final int max_stack; public final int max_locals; public final int code_length; diff -r c27d5e6924b2 -r c8b275d62d6b langtools/src/share/classes/com/sun/tools/classfile/Instruction.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/src/share/classes/com/sun/tools/classfile/Instruction.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,339 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +package com.sun.tools.classfile; + +/** + * See JVMS3, chapter 6. + * + *

This is NOT part of any API supported by Sun Microsystems. If + * you write code that depends on this, you do so at your own risk. + * This code and its internal interfaces are subject to change or + * deletion without notice. + * + * @see Code_attribute#getInstructions + */ +public class Instruction { + /** The kind of an instruction, as determined by the position, size and + * types of its operands. */ + public static enum Kind { + /** Opcode is not followed by any operands. */ + NO_OPERANDS(1), + /** Opcode is followed by a byte indicating a type. */ + ATYPE(2), + /** Opcode is followed by a 2-byte branch offset. */ + BRANCH(3), + /** Opcode is followed by a 4-byte branch offset. */ + BRANCH_W(5), + /** Opcode is followed by a signed byte value. */ + BYTE(2), + /** Opcode is followed by a 1-byte index into the constant pool. */ + CPREF(2), + /** Opcode is followed by a 2-byte index into the constant pool. */ + CPREF_W(3), + /** Opcode is followed by a 2-byte index into the constant pool, + * an unsigned byte value. */ + CPREF_W_UBYTE(4), + /** Opcode is followed by a 2-byte index into the constant pool., + * an unsigned byte value, and a zero byte. */ + CPREF_W_UBYTE_ZERO(5), + /** Opcode is followed by variable number of operands, depending + * on the instruction.*/ + DYNAMIC(-1), + /** Opcode is followed by a 1-byte reference to a local variable. */ + LOCAL(2), + /** Opcode is followed by a 1-byte reference to a local variable, + * and a signed byte value. */ + LOCAL_BYTE(3), + /** Opcode is followed by a signed short value. */ + SHORT(3), + /** Wide opcode is not followed by any operands. */ + WIDE_NO_OPERANDS(2), + /** Wide opcode is followed by a 2-byte index into the constant pool. */ + WIDE_CPREF_W(4), + /** Wide opcode is followed by a 2-byte index into the constant pool, + * and a signed short value. */ + WIDE_CPREF_W_SHORT(6), + /** Opcode was not recognized. */ + UNKNOWN(1); + + Kind(int length) { + this.length = length; + } + + /** The length, in bytes, of this kind of instruction, or -1 is the + * length depends on the specific instruction. */ + public final int length; + }; + + /** A utility visitor to help decode the operands of an instruction. + * @see Instruction#accept */ + public interface KindVisitor { + /** See {@link Kind#NO_OPERANDS}, {@link Kind#WIDE_NO_OPERANDS}. */ + R visitNoOperands(Instruction instr, P p); + /** See {@link Kind#ATYPE}. */ + R visitArrayType(Instruction instr, TypeKind kind, P p); + /** See {@link Kind#BRANCH}, {@link Kind#BRANCH_W}. */ + R visitBranch(Instruction instr, int offset, P p); + /** See {@link Kind#CPREF}, {@link Kind#CPREF_W}, {@link Kind#WIDE_CPREF_W}. */ + R visitConstantPoolRef(Instruction instr, int index, P p); + /** See {@link Kind#CPREF_W_UBYTE}, {@link Kind#CPREF_W_UBYTE_ZERO}, {@link Kind#WIDE_CPREF_W_SHORT}. */ + R visitConstantPoolRefAndValue(Instruction instr, int index, int value, P p); + /** See {@link Kind#LOCAL}. */ + R visitLocal(Instruction instr, int index, P p); + /** See {@link Kind#LOCAL_UBYTE}. */ + R visitLocalAndValue(Instruction instr, int index, int value, P p); + /** See {@link Kind#DYNAMIC}. */ + R visitLookupSwitch(Instruction instr, int default_, int npairs, int[] matches, int[] offsets); + /** See {@link Kind#DYNAMIC}. */ + R visitTableSwitch(Instruction instr, int default_, int low, int high, int[] offsets); + /** See {@link Kind#BYTE}, {@link Kind#SHORT}. */ + R visitValue(Instruction instr, int value, P p); + /** Instruction is unrecognized. */ + R visitUnknown(Instruction instr, P p); + + } + + /** The kind of primitive array type to create. + * See JVMS chapter 6, newarray. */ + public static enum TypeKind { + T_BOOLEAN(4, "boolean"), + T_CHAR(5, "char"), + T_FLOAT(6, "float"), + T_DOUBLE(7, "double"), + T_BYTE(8, "byte"), + T_SHORT(9, "short"), + T_INT (10, "int"), + T_LONG (11, "long"); + TypeKind(int value, String name) { + this.value = value; + this.name = name; + } + + public static TypeKind get(int value) { + switch (value) { + case 4: return T_BOOLEAN; + case 5: return T_CHAR; + case 6: return T_FLOAT; + case 7: return T_DOUBLE; + case 8: return T_BYTE; + case 9: return T_SHORT; + case 10: return T_INT; + case 11: return T_LONG; + default: return null; + } + } + + public final int value; + public final String name; + } + + /** An instruction is defined by its position in a bytecode array. */ + public Instruction(byte[] bytes, int pc) { + this.bytes = bytes; + this.pc = pc; + } + + /** Get the position of the instruction within the bytecode array. */ + public int getPC() { + return pc; + } + + /** Get a byte value, relative to the start of this instruction. */ + public int getByte(int offset) { + return bytes[pc + offset]; + } + + /** Get an unsigned byte value, relative to the start of this instruction. */ + public int getUnsignedByte(int offset) { + return getByte(offset) & 0xff; + } + + /** Get a 2-byte value, relative to the start of this instruction. */ + public int getShort(int offset) { + return (getByte(offset) << 8) | getUnsignedByte(offset + 1); + } + + /** Get a unsigned 2-byte value, relative to the start of this instruction. */ + public int getUnsignedShort(int offset) { + return getShort(offset) & 0xFFFF; + } + + /** Get a 4-byte value, relative to the start of this instruction. */ + public int getInt(int offset) { + return (getShort(offset) << 16) | (getUnsignedShort(offset + 2)); + } + + /** Get the Opcode for this instruction, or null if the instruction is + * unrecognized. */ + public Opcode getOpcode() { + int b = getUnsignedByte(0); + switch (b) { + case Opcode.NONPRIV: + case Opcode.PRIV: + case Opcode.WIDE: + return Opcode.get(b, getUnsignedByte(1)); + } + return Opcode.get(b); + } + + /** Get the mnemonic for this instruction, or a default string if the + * instruction is unrecognized. */ + public String getMnemonic() { + Opcode opcode = getOpcode(); + if (opcode == null) + return "bytecode " + getUnsignedByte(0); + else + return opcode.toString().toLowerCase(); + } + + /** Get the length, in bytes, of this instruction, including the opcode + * and all its operands. */ + public int length() { + Opcode opcode = getOpcode(); + if (opcode == null) + return 1; + + switch (opcode) { + case TABLESWITCH: { + int pad = align(pc + 1) - pc; + int low = getInt(pad + 4); + int high = getInt(pad + 8); + return pad + 12 + 4 * (high - low + 1); + } + case LOOKUPSWITCH: { + int pad = align(pc + 1) - pc; + int npairs = getInt(pad + 4); + return pad + 8 + 8 * npairs; + + } + default: + return opcode.kind.length; + } + } + + /** Get the {@link Kind} of this instruction. */ + public Kind getKind() { + Opcode opcode = getOpcode(); + return (opcode != null ? opcode.kind : Kind.UNKNOWN); + } + + /** Invoke a method on the visitor according to the kind of this + * instruction, passing in the decoded operands for the instruction. */ + public R accept(KindVisitor visitor, P p) { + switch (getKind()) { + case NO_OPERANDS: + return visitor.visitNoOperands(this, p); + + case ATYPE: + return visitor.visitArrayType( + this, TypeKind.get(getUnsignedByte(1)), p); + + case BRANCH: + return visitor.visitBranch(this, getShort(1), p); + + case BRANCH_W: + return visitor.visitBranch(this, getInt(1), p); + + case BYTE: + return visitor.visitValue(this, getByte(1), p); + + case CPREF: + return visitor.visitConstantPoolRef(this, getUnsignedByte(1), p); + + case CPREF_W: + return visitor.visitConstantPoolRef(this, getUnsignedShort(1), p); + + case CPREF_W_UBYTE: + case CPREF_W_UBYTE_ZERO: + return visitor.visitConstantPoolRefAndValue( + this, getUnsignedShort(1), getUnsignedByte(3), p); + + case DYNAMIC: { + switch (getOpcode()) { + case TABLESWITCH: { + int pad = align(pc + 1) - pc; + int default_ = getInt(pad); + int low = getInt(pad + 4); + int high = getInt(pad + 8); + int[] values = new int[high - low + 1]; + for (int i = 0; i < values.length; i++) + values[i] = getInt(pad + 12 + 4 * i); + return visitor.visitTableSwitch( + this, default_, low, high, values); + } + case LOOKUPSWITCH: { + int pad = align(pc + 1) - pc; + int default_ = getInt(pad); + int npairs = getInt(pad + 4); + int[] matches = new int[npairs]; + int[] offsets = new int[npairs]; + for (int i = 0; i < npairs; i++) { + matches[i] = getInt(pad + 8 + i * 8); + offsets[i] = getInt(pad + 12 + i * 8); + } + return visitor.visitLookupSwitch( + this, default_, npairs, matches, offsets); + } + default: + throw new IllegalStateException(); + } + } + + case LOCAL: + return visitor.visitLocal(this, getUnsignedByte(1), p); + + case LOCAL_BYTE: + return visitor.visitLocalAndValue( + this, getUnsignedByte(1), getByte(2), p); + + case SHORT: + return visitor.visitValue(this, getShort(1), p); + + case WIDE_NO_OPERANDS: + return visitor.visitNoOperands(this, p); + + case WIDE_CPREF_W: + return visitor.visitConstantPoolRef(this, getUnsignedShort(2), p); + + case WIDE_CPREF_W_SHORT: + return visitor.visitConstantPoolRefAndValue( + this, getUnsignedShort(2), getUnsignedByte(4), p); + + case UNKNOWN: + return visitor.visitUnknown(this, p); + + default: + throw new IllegalStateException(); + } + } + + private static int align(int n) { + return (n + 3) & ~3; + } + + private byte[] bytes; + private int pc; +} diff -r c27d5e6924b2 -r c8b275d62d6b langtools/src/share/classes/com/sun/tools/classfile/OpCodes.java --- a/langtools/src/share/classes/com/sun/tools/classfile/OpCodes.java Wed Jul 05 16:50:37 2017 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,868 +0,0 @@ -/* - * Copyright 2007-2008 Sun Microsystems, Inc. All Rights Reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - */ - -package com.sun.tools.classfile; - -import java.util.HashMap; - -/** - * See JVMS3, section 6. - * - *

This is NOT part of any API supported by Sun Microsystems. If - * you write code that depends on this, you do so at your own risk. - * This code and its internal interfaces are subject to change or - * deletion without notice. - */ -public class OpCodes { - - public static int opcLength(int opc) throws IllegalArgumentException { - switch (opc >> 8) { - case 0: - return opcLengthsTab[opc]; - case opc_wide: - switch (opc & 0xFF) { - case opc_aload: - case opc_astore: - case opc_fload: - case opc_fstore: - case opc_iload: - case opc_istore: - case opc_lload: - case opc_lstore: - case opc_dload: - case opc_dstore: - case opc_ret: - return 4; - case opc_iinc: - return 6; - default: - throw new IllegalArgumentException(); - } - case opc_nonpriv: - case opc_priv: - return 2; - default: - throw new IllegalArgumentException(); - } - } - - public static String opcName(int opc) { - try { - switch (opc >> 8) { - case 0: - return opcNamesTab[opc]; - case opc_wide: - { - String mnem = opcNamesTab[opc & 0xFF] + "_w"; - if (mnemocodes.get(mnem) == null) { - return null; // non-existent opcode - } - return mnem; - } - case opc_nonpriv: - return opcExtNamesTab[opc & 0xFF]; - case opc_priv: - return opcPrivExtNamesTab[opc & 0xFF]; - default: - return null; - } - } catch (ArrayIndexOutOfBoundsException e) { - switch (opc) { - case opc_nonpriv: - return "nonpriv"; - case opc_priv: - return "priv"; - default: - return null; - } - } - } - - /* Opcodes */ - public static final int opc_dead = -2; - public static final int opc_label = -1; - public static final int opc_nop = 0; - public static final int opc_aconst_null = 1; - public static final int opc_iconst_m1 = 2; - public static final int opc_iconst_0 = 3; - public static final int opc_iconst_1 = 4; - public static final int opc_iconst_2 = 5; - public static final int opc_iconst_3 = 6; - public static final int opc_iconst_4 = 7; - public static final int opc_iconst_5 = 8; - public static final int opc_lconst_0 = 9; - public static final int opc_lconst_1 = 10; - public static final int opc_fconst_0 = 11; - public static final int opc_fconst_1 = 12; - public static final int opc_fconst_2 = 13; - public static final int opc_dconst_0 = 14; - public static final int opc_dconst_1 = 15; - public static final int opc_bipush = 16; - public static final int opc_sipush = 17; - public static final int opc_ldc = 18; - public static final int opc_ldc_w = 19; - public static final int opc_ldc2_w = 20; - public static final int opc_iload = 21; - public static final int opc_lload = 22; - public static final int opc_fload = 23; - public static final int opc_dload = 24; - public static final int opc_aload = 25; - public static final int opc_iload_0 = 26; - public static final int opc_iload_1 = 27; - public static final int opc_iload_2 = 28; - public static final int opc_iload_3 = 29; - public static final int opc_lload_0 = 30; - public static final int opc_lload_1 = 31; - public static final int opc_lload_2 = 32; - public static final int opc_lload_3 = 33; - public static final int opc_fload_0 = 34; - public static final int opc_fload_1 = 35; - public static final int opc_fload_2 = 36; - public static final int opc_fload_3 = 37; - public static final int opc_dload_0 = 38; - public static final int opc_dload_1 = 39; - public static final int opc_dload_2 = 40; - public static final int opc_dload_3 = 41; - public static final int opc_aload_0 = 42; - public static final int opc_aload_1 = 43; - public static final int opc_aload_2 = 44; - public static final int opc_aload_3 = 45; - public static final int opc_iaload = 46; - public static final int opc_laload = 47; - public static final int opc_faload = 48; - public static final int opc_daload = 49; - public static final int opc_aaload = 50; - public static final int opc_baload = 51; - public static final int opc_caload = 52; - public static final int opc_saload = 53; - public static final int opc_istore = 54; - public static final int opc_lstore = 55; - public static final int opc_fstore = 56; - public static final int opc_dstore = 57; - public static final int opc_astore = 58; - public static final int opc_istore_0 = 59; - public static final int opc_istore_1 = 60; - public static final int opc_istore_2 = 61; - public static final int opc_istore_3 = 62; - public static final int opc_lstore_0 = 63; - public static final int opc_lstore_1 = 64; - public static final int opc_lstore_2 = 65; - public static final int opc_lstore_3 = 66; - public static final int opc_fstore_0 = 67; - public static final int opc_fstore_1 = 68; - public static final int opc_fstore_2 = 69; - public static final int opc_fstore_3 = 70; - public static final int opc_dstore_0 = 71; - public static final int opc_dstore_1 = 72; - public static final int opc_dstore_2 = 73; - public static final int opc_dstore_3 = 74; - public static final int opc_astore_0 = 75; - public static final int opc_astore_1 = 76; - public static final int opc_astore_2 = 77; - public static final int opc_astore_3 = 78; - public static final int opc_iastore = 79; - public static final int opc_lastore = 80; - public static final int opc_fastore = 81; - public static final int opc_dastore = 82; - public static final int opc_aastore = 83; - public static final int opc_bastore = 84; - public static final int opc_castore = 85; - public static final int opc_sastore = 86; - public static final int opc_pop = 87; - public static final int opc_pop2 = 88; - public static final int opc_dup = 89; - public static final int opc_dup_x1 = 90; - public static final int opc_dup_x2 = 91; - public static final int opc_dup2 = 92; - public static final int opc_dup2_x1 = 93; - public static final int opc_dup2_x2 = 94; - public static final int opc_swap = 95; - public static final int opc_iadd = 96; - public static final int opc_ladd = 97; - public static final int opc_fadd = 98; - public static final int opc_dadd = 99; - public static final int opc_isub = 100; - public static final int opc_lsub = 101; - public static final int opc_fsub = 102; - public static final int opc_dsub = 103; - public static final int opc_imul = 104; - public static final int opc_lmul = 105; - public static final int opc_fmul = 106; - public static final int opc_dmul = 107; - public static final int opc_idiv = 108; - public static final int opc_ldiv = 109; - public static final int opc_fdiv = 110; - public static final int opc_ddiv = 111; - public static final int opc_irem = 112; - public static final int opc_lrem = 113; - public static final int opc_frem = 114; - public static final int opc_drem = 115; - public static final int opc_ineg = 116; - public static final int opc_lneg = 117; - public static final int opc_fneg = 118; - public static final int opc_dneg = 119; - public static final int opc_ishl = 120; - public static final int opc_lshl = 121; - public static final int opc_ishr = 122; - public static final int opc_lshr = 123; - public static final int opc_iushr = 124; - public static final int opc_lushr = 125; - public static final int opc_iand = 126; - public static final int opc_land = 127; - public static final int opc_ior = 128; - public static final int opc_lor = 129; - public static final int opc_ixor = 130; - public static final int opc_lxor = 131; - public static final int opc_iinc = 132; - public static final int opc_i2l = 133; - public static final int opc_i2f = 134; - public static final int opc_i2d = 135; - public static final int opc_l2i = 136; - public static final int opc_l2f = 137; - public static final int opc_l2d = 138; - public static final int opc_f2i = 139; - public static final int opc_f2l = 140; - public static final int opc_f2d = 141; - public static final int opc_d2i = 142; - public static final int opc_d2l = 143; - public static final int opc_d2f = 144; - public static final int opc_i2b = 145; - public static final int opc_int2byte = 145; - public static final int opc_i2c = 146; - public static final int opc_int2char = 146; - public static final int opc_i2s = 147; - public static final int opc_int2short = 147; - public static final int opc_lcmp = 148; - public static final int opc_fcmpl = 149; - public static final int opc_fcmpg = 150; - public static final int opc_dcmpl = 151; - public static final int opc_dcmpg = 152; - public static final int opc_ifeq = 153; - public static final int opc_ifne = 154; - public static final int opc_iflt = 155; - public static final int opc_ifge = 156; - public static final int opc_ifgt = 157; - public static final int opc_ifle = 158; - public static final int opc_if_icmpeq = 159; - public static final int opc_if_icmpne = 160; - public static final int opc_if_icmplt = 161; - public static final int opc_if_icmpge = 162; - public static final int opc_if_icmpgt = 163; - public static final int opc_if_icmple = 164; - public static final int opc_if_acmpeq = 165; - public static final int opc_if_acmpne = 166; - public static final int opc_goto = 167; - public static final int opc_jsr = 168; - public static final int opc_ret = 169; - public static final int opc_tableswitch = 170; - public static final int opc_lookupswitch = 171; - public static final int opc_ireturn = 172; - public static final int opc_lreturn = 173; - public static final int opc_freturn = 174; - public static final int opc_dreturn = 175; - public static final int opc_areturn = 176; - public static final int opc_return = 177; - public static final int opc_getstatic = 178; - public static final int opc_putstatic = 179; - public static final int opc_getfield = 180; - public static final int opc_putfield = 181; - public static final int opc_invokevirtual = 182; - public static final int opc_invokenonvirtual = 183; - public static final int opc_invokespecial = 183; - public static final int opc_invokestatic = 184; - public static final int opc_invokeinterface = 185; -// public static final int opc_xxxunusedxxx = 186; - public static final int opc_new = 187; - public static final int opc_newarray = 188; - public static final int opc_anewarray = 189; - public static final int opc_arraylength = 190; - public static final int opc_athrow = 191; - public static final int opc_checkcast = 192; - public static final int opc_instanceof = 193; - public static final int opc_monitorenter = 194; - public static final int opc_monitorexit = 195; - public static final int opc_wide = 196; - public static final int opc_multianewarray = 197; - public static final int opc_ifnull = 198; - public static final int opc_ifnonnull = 199; - public static final int opc_goto_w = 200; - public static final int opc_jsr_w = 201; - - /* Pseudo-instructions */ - public static final int opc_bytecode = 203; - public static final int opc_try = 204; - public static final int opc_endtry = 205; - public static final int opc_catch = 206; - public static final int opc_var = 207; - public static final int opc_endvar = 208; - public static final int opc_localsmap = 209; - public static final int opc_stackmap = 210; - - /* PicoJava prefixes */ - public static final int opc_nonpriv = 254; - public static final int opc_priv = 255; - - /* Wide instructions */ - public static final int opc_iload_w = (opc_wide << 8 ) | opc_iload; - public static final int opc_lload_w = (opc_wide << 8 ) | opc_lload; - public static final int opc_fload_w = (opc_wide << 8 ) | opc_fload; - public static final int opc_dload_w = (opc_wide << 8 ) | opc_dload; - public static final int opc_aload_w = (opc_wide << 8 ) | opc_aload; - public static final int opc_istore_w = (opc_wide << 8 ) | opc_istore; - public static final int opc_lstore_w = (opc_wide << 8 ) | opc_lstore; - public static final int opc_fstore_w = (opc_wide << 8 ) | opc_fstore; - public static final int opc_dstore_w = (opc_wide << 8 ) | opc_dstore; - public static final int opc_astore_w = (opc_wide << 8 ) | opc_astore; - public static final int opc_ret_w = (opc_wide << 8 ) | opc_ret; - public static final int opc_iinc_w = (opc_wide << 8 ) | opc_iinc; - - /* Opcode Names */ - private static final String opcNamesTab[] = { - "nop", - "aconst_null", - "iconst_m1", - "iconst_0", - "iconst_1", - "iconst_2", - "iconst_3", - "iconst_4", - "iconst_5", - "lconst_0", - "lconst_1", - "fconst_0", - "fconst_1", - "fconst_2", - "dconst_0", - "dconst_1", - "bipush", - "sipush", - "ldc", - "ldc_w", - "ldc2_w", - "iload", - "lload", - "fload", - "dload", - "aload", - "iload_0", - "iload_1", - "iload_2", - "iload_3", - "lload_0", - "lload_1", - "lload_2", - "lload_3", - "fload_0", - "fload_1", - "fload_2", - "fload_3", - "dload_0", - "dload_1", - "dload_2", - "dload_3", - "aload_0", - "aload_1", - "aload_2", - "aload_3", - "iaload", - "laload", - "faload", - "daload", - "aaload", - "baload", - "caload", - "saload", - "istore", - "lstore", - "fstore", - "dstore", - "astore", - "istore_0", - "istore_1", - "istore_2", - "istore_3", - "lstore_0", - "lstore_1", - "lstore_2", - "lstore_3", - "fstore_0", - "fstore_1", - "fstore_2", - "fstore_3", - "dstore_0", - "dstore_1", - "dstore_2", - "dstore_3", - "astore_0", - "astore_1", - "astore_2", - "astore_3", - "iastore", - "lastore", - "fastore", - "dastore", - "aastore", - "bastore", - "castore", - "sastore", - "pop", - "pop2", - "dup", - "dup_x1", - "dup_x2", - "dup2", - "dup2_x1", - "dup2_x2", - "swap", - "iadd", - "ladd", - "fadd", - "dadd", - "isub", - "lsub", - "fsub", - "dsub", - "imul", - "lmul", - "fmul", - "dmul", - "idiv", - "ldiv", - "fdiv", - "ddiv", - "irem", - "lrem", - "frem", - "drem", - "ineg", - "lneg", - "fneg", - "dneg", - "ishl", - "lshl", - "ishr", - "lshr", - "iushr", - "lushr", - "iand", - "land", - "ior", - "lor", - "ixor", - "lxor", - "iinc", - "i2l", - "i2f", - "i2d", - "l2i", - "l2f", - "l2d", - "f2i", - "f2l", - "f2d", - "d2i", - "d2l", - "d2f", - "i2b", - "i2c", - "i2s", - "lcmp", - "fcmpl", - "fcmpg", - "dcmpl", - "dcmpg", - "ifeq", - "ifne", - "iflt", - "ifge", - "ifgt", - "ifle", - "if_icmpeq", - "if_icmpne", - "if_icmplt", - "if_icmpge", - "if_icmpgt", - "if_icmple", - "if_acmpeq", - "if_acmpne", - "goto", - "jsr", - "ret", - "tableswitch", - "lookupswitch", - "ireturn", - "lreturn", - "freturn", - "dreturn", - "areturn", - "return", - "getstatic", - "putstatic", - "getfield", - "putfield", - "invokevirtual", - "invokespecial", // was "invokenonvirtual", - "invokestatic", - "invokeinterface", - "bytecode 186", //"xxxunusedxxx", - "new", - "newarray", - "anewarray", - "arraylength", - "athrow", - "checkcast", - "instanceof", - "monitorenter", - "monitorexit", - null, // "wide", - "multianewarray", - "ifnull", - "ifnonnull", - "goto_w", - "jsr_w", - "bytecode 202", // "breakpoint", - "bytecode", - "try", - "endtry", - "catch", - "var", - "endvar", - "locals_map", - "stack_map" - }; - - /* Opcode Lengths */ - private static final int opcLengthsTab[] = { - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 2, - 3, - 2, - 3, - 3, - 2, - 2, - 2, - 2, - 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 2, - 2, - 2, - 2, - 2, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 3, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 2, - 99, - 99, - 1, - 1, - 1, - 1, - 1, - 1, - 3, - 3, - 3, - 3, - 3, - 3, - 3, - 5, - 0, - 3, - 2, - 3, - 1, - 1, - 3, - 3, - 1, - 1, - 0, // wide - 4, - 3, - 3, - 5, - 5, - 1, - 1, 0, 0, 0, 0, 0 // pseudo - }; - - /* Type codes, used in newarray opcode */ - public static final int T_CLASS = 0x00000002; - public static final int T_BOOLEAN = 0x00000004; - public static final int T_CHAR = 0x00000005; - public static final int T_FLOAT = 0x00000006; - public static final int T_DOUBLE = 0x00000007; - public static final int T_BYTE = 0x00000008; - public static final int T_SHORT = 0x00000009; - public static final int T_INT = 0x0000000a; - public static final int T_LONG = 0x0000000b; - - private static HashMap mnemocodes = new HashMap(301, 0.5f); - private static String opcExtNamesTab[]=new String[128]; - private static String opcPrivExtNamesTab[]=new String[128]; - - private static void defineNonPriv(int opc, String mnem) { - mnemocodes.put(opcExtNamesTab[opc] = mnem, opc_nonpriv * 256 + opc); - } - - private static void definePriv(int opc, String mnem) { - mnemocodes.put(opcPrivExtNamesTab[opc] = "priv_" + mnem, opc_priv * 256 + opc); - } - - private static void defineExt(int opc, String mnem) { - defineNonPriv(opc, mnem); - definePriv(opc, mnem); - } - - static { - for (int i = 0; i < opc_wide; i++) { - mnemocodes.put(opcNamesTab[i], i); - } - for (int i = opc_wide + 1; i < opcNamesTab.length; i++) { - mnemocodes.put(opcNamesTab[i], i); - } - mnemocodes.put("invokenonvirtual", opc_invokespecial); - - mnemocodes.put("iload_w", opc_iload_w); - mnemocodes.put("lload_w", opc_lload_w); - mnemocodes.put("fload_w", opc_fload_w); - mnemocodes.put("dload_w", opc_dload_w); - mnemocodes.put("aload_w", opc_aload_w); - mnemocodes.put("istore_w", opc_istore_w); - mnemocodes.put("lstore_w", opc_lstore_w); - mnemocodes.put("fstore_w", opc_fstore_w); - mnemocodes.put("dstore_w", opc_dstore_w); - mnemocodes.put("astore_w", opc_astore_w); - mnemocodes.put("ret_w", opc_ret_w); - mnemocodes.put("iinc_w", opc_iinc_w); - - mnemocodes.put("nonpriv", opc_nonpriv); - mnemocodes.put("priv", opc_priv); - - defineExt(0, "load_ubyte"); - defineExt(1, "load_byte"); - defineExt(2, "load_char"); - defineExt(3, "load_short"); - defineExt(4, "load_word"); - defineExt(10, "load_char_oe"); - defineExt(11, "load_short_oe"); - defineExt(12, "load_word_oe"); - defineExt(16, "ncload_ubyte"); - defineExt(17, "ncload_byte"); - defineExt(18, "ncload_char"); - defineExt(19, "ncload_short"); - defineExt(20, "ncload_word"); - defineExt(26, "ncload_char_oe"); - defineExt(27, "ncload_short_oe"); - defineExt(28, "ncload_word_oe"); - defineExt(30, "cache_flush"); - defineExt(32, "store_byte"); - defineExt(34, "store_short"); - defineExt(36, "store_word"); - defineExt(42, "store_short_oe"); - defineExt(44, "store_word_oe"); - defineExt(48, "ncstore_byte"); - defineExt(50, "ncstore_short"); - defineExt(52, "ncstore_word"); - defineExt(58, "ncstore_short_oe"); - defineExt(60, "ncstore_word_oe"); - defineExt(62, "zero_line"); - defineNonPriv(5, "ret_from_sub"); - defineNonPriv(63, "enter_sync_method"); - definePriv(5, "ret_from_trap"); - definePriv(6, "read_dcache_tag"); - definePriv(7, "read_dcache_data"); - definePriv(14, "read_icache_tag"); - definePriv(15, "read_icache_data"); - definePriv(22, "powerdown"); - definePriv(23, "read_scache_data"); - definePriv(31, "cache_index_flush"); - definePriv(38, "write_dcache_tag"); - definePriv(39, "write_dcache_data"); - definePriv(46, "write_icache_tag"); - definePriv(47, "write_icache_data"); - definePriv(54, "reset"); - definePriv(55, "write_scache_data"); - for (int i = 0; i < 32; i++) { - definePriv(i + 64, "read_reg_" + i); - } - for (int i = 0; i < 32; i++) { - definePriv(i + 96, "write_reg_" + i); - } - } -} diff -r c27d5e6924b2 -r c8b275d62d6b langtools/src/share/classes/com/sun/tools/classfile/Opcode.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/src/share/classes/com/sun/tools/classfile/Opcode.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,472 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +package com.sun.tools.classfile; + +import static com.sun.tools.classfile.Instruction.Kind.*; +import static com.sun.tools.classfile.Opcode.Set.*; + +/** + * See JVMS3, chapter 6. + * + *

In addition to providing all the standard opcodes defined in JVMS, + * this class also provides legacy support for the PicoJava extensions. + * + *

This is NOT part of any API supported by Sun Microsystems. If + * you write code that depends on this, you do so at your own risk. + * This code and its internal interfaces are subject to change or + * deletion without notice. + */ +public enum Opcode { + NOP(0x0), + ACONST_NULL(0x1), + ICONST_M1(0x2), + ICONST_0(0x3), + ICONST_1(0x4), + ICONST_2(0x5), + ICONST_3(0x6), + ICONST_4(0x7), + ICONST_5(0x8), + LCONST_0(0x9), + LCONST_1(0xa), + FCONST_0(0xb), + FCONST_1(0xc), + FCONST_2(0xd), + DCONST_0(0xe), + DCONST_1(0xf), + BIPUSH(0x10, BYTE), + SIPUSH(0x11, SHORT), + LDC(0x12, CPREF), + LDC_W(0x13, CPREF_W), + LDC2_W(0x14, CPREF_W), + ILOAD(0x15, LOCAL), + LLOAD(0x16, LOCAL), + FLOAD(0x17, LOCAL), + DLOAD(0x18, LOCAL), + ALOAD(0x19, LOCAL), + ILOAD_0(0x1a), + ILOAD_1(0x1b), + ILOAD_2(0x1c), + ILOAD_3(0x1d), + LLOAD_0(0x1e), + LLOAD_1(0x1f), + LLOAD_2(0x20), + LLOAD_3(0x21), + FLOAD_0(0x22), + FLOAD_1(0x23), + FLOAD_2(0x24), + FLOAD_3(0x25), + DLOAD_0(0x26), + DLOAD_1(0x27), + DLOAD_2(0x28), + DLOAD_3(0x29), + ALOAD_0(0x2a), + ALOAD_1(0x2b), + ALOAD_2(0x2c), + ALOAD_3(0x2d), + IALOAD(0x2e), + LALOAD(0x2f), + FALOAD(0x30), + DALOAD(0x31), + AALOAD(0x32), + BALOAD(0x33), + CALOAD(0x34), + SALOAD(0x35), + ISTORE(0x36, LOCAL), + LSTORE(0x37, LOCAL), + FSTORE(0x38, LOCAL), + DSTORE(0x39, LOCAL), + ASTORE(0x3a, LOCAL), + ISTORE_0(0x3b), + ISTORE_1(0x3c), + ISTORE_2(0x3d), + ISTORE_3(0x3e), + LSTORE_0(0x3f), + LSTORE_1(0x40), + LSTORE_2(0x41), + LSTORE_3(0x42), + FSTORE_0(0x43), + FSTORE_1(0x44), + FSTORE_2(0x45), + FSTORE_3(0x46), + DSTORE_0(0x47), + DSTORE_1(0x48), + DSTORE_2(0x49), + DSTORE_3(0x4a), + ASTORE_0(0x4b), + ASTORE_1(0x4c), + ASTORE_2(0x4d), + ASTORE_3(0x4e), + IASTORE(0x4f), + LASTORE(0x50), + FASTORE(0x51), + DASTORE(0x52), + AASTORE(0x53), + BASTORE(0x54), + CASTORE(0x55), + SASTORE(0x56), + POP(0x57), + POP2(0x58), + DUP(0x59), + DUP_X1(0x5a), + DUP_X2(0x5b), + DUP2(0x5c), + DUP2_X1(0x5d), + DUP2_X2(0x5e), + SWAP(0x5f), + IADD(0x60), + LADD(0x61), + FADD(0x62), + DADD(0x63), + ISUB(0x64), + LSUB(0x65), + FSUB(0x66), + DSUB(0x67), + IMUL(0x68), + LMUL(0x69), + FMUL(0x6a), + DMUL(0x6b), + IDIV(0x6c), + LDIV(0x6d), + FDIV(0x6e), + DDIV(0x6f), + IREM(0x70), + LREM(0x71), + FREM(0x72), + DREM(0x73), + INEG(0x74), + LNEG(0x75), + FNEG(0x76), + DNEG(0x77), + ISHL(0x78), + LSHL(0x79), + ISHR(0x7a), + LSHR(0x7b), + IUSHR(0x7c), + LUSHR(0x7d), + IAND(0x7e), + LAND(0x7f), + IOR(0x80), + LOR(0x81), + IXOR(0x82), + LXOR(0x83), + IINC(0x84, LOCAL_BYTE), + I2L(0x85), + I2F(0x86), + I2D(0x87), + L2I(0x88), + L2F(0x89), + L2D(0x8a), + F2I(0x8b), + F2L(0x8c), + F2D(0x8d), + D2I(0x8e), + D2L(0x8f), + D2F(0x90), + I2B(0x91), + I2C(0x92), + I2S(0x93), + LCMP(0x94), + FCMPL(0x95), + FCMPG(0x96), + DCMPL(0x97), + DCMPG(0x98), + IFEQ(0x99, BRANCH), + IFNE(0x9a, BRANCH), + IFLT(0x9b, BRANCH), + IFGE(0x9c, BRANCH), + IFGT(0x9d, BRANCH), + IFLE(0x9e, BRANCH), + IF_ICMPEQ(0x9f, BRANCH), + IF_ICMPNE(0xa0, BRANCH), + IF_ICMPLT(0xa1, BRANCH), + IF_ICMPGE(0xa2, BRANCH), + IF_ICMPGT(0xa3, BRANCH), + IF_ICMPLE(0xa4, BRANCH), + IF_ACMPEQ(0xa5, BRANCH), + IF_ACMPNE(0xa6, BRANCH), + GOTO(0xa7, BRANCH), + JSR(0xa8, BRANCH), + RET(0xa9, LOCAL), + TABLESWITCH(0xaa, DYNAMIC), + LOOKUPSWITCH(0xab, DYNAMIC), + IRETURN(0xac), + LRETURN(0xad), + FRETURN(0xae), + DRETURN(0xaf), + ARETURN(0xb0), + RETURN(0xb1), + GETSTATIC(0xb2, CPREF_W), + PUTSTATIC(0xb3, CPREF_W), + GETFIELD(0xb4, CPREF_W), + PUTFIELD(0xb5, CPREF_W), + INVOKEVIRTUAL(0xb6, CPREF_W), + INVOKESPECIAL(0xb7, CPREF_W), + INVOKESTATIC(0xb8, CPREF_W), + INVOKEINTERFACE(0xb9, CPREF_W_UBYTE_ZERO), + // unused 0xba + NEW(0xbb, CPREF_W), + NEWARRAY(0xbc, ATYPE), + ANEWARRAY(0xbd, CPREF_W), + ARRAYLENGTH(0xbe), + ATHROW(0xbf), + CHECKCAST(0xc0, CPREF_W), + INSTANCEOF(0xc1, CPREF_W), + MONITORENTER(0xc2), + MONITOREXIT(0xc3), + // wide 0xc4 + MULTIANEWARRAY(0xc5, CPREF_W_UBYTE), + IFNULL(0xc6, BRANCH), + IFNONNULL(0xc7, BRANCH), + GOTO_W(0xc8, BRANCH_W), + JSR_W(0xc9, BRANCH_W), + // impdep 0xfe: PicoJava nonpriv + // impdep 0xff: Picojava priv + + // wide opcodes + ILOAD_W(0xc415, WIDE_CPREF_W), + LLOAD_W(0xc416, WIDE_CPREF_W), + FLOAD_W(0xc417, WIDE_CPREF_W), + DLOAD_W(0xc418, WIDE_CPREF_W), + ALOAD_W(0xc419, WIDE_CPREF_W), + ISTORE_W(0xc436, WIDE_CPREF_W), + LSTORE_W(0xc437, WIDE_CPREF_W), + FSTORE_W(0xc438, WIDE_CPREF_W), + DSTORE_W(0xc439, WIDE_CPREF_W), + ASTORE_W(0xc43a, WIDE_CPREF_W), + IINC_W(0xc484, WIDE_CPREF_W_SHORT), + RET_W(0xc4a9, WIDE_CPREF_W), + + // PicoJava nonpriv instructions + LOAD_UBYTE(PICOJAVA, 0xfe00), + LOAD_BYTE(PICOJAVA, 0xfe01), + LOAD_CHAR(PICOJAVA, 0xfe02), + LOAD_SHORT(PICOJAVA, 0xfe03), + LOAD_WORD(PICOJAVA, 0xfe04), + RET_FROM_SUB(PICOJAVA, 0xfe05), + LOAD_CHAR_OE(PICOJAVA, 0xfe0a), + LOAD_SHORT_OE(PICOJAVA, 0xfe0b), + LOAD_WORD_OE(PICOJAVA, 0xfe0c), + NCLOAD_UBYTE(PICOJAVA, 0xfe10), + NCLOAD_BYTE(PICOJAVA, 0xfe11), + NCLOAD_CHAR(PICOJAVA, 0xfe12), + NCLOAD_SHORT(PICOJAVA, 0xfe13), + NCLOAD_WORD(PICOJAVA, 0xfe14), + NCLOAD_CHAR_OE(PICOJAVA, 0xfe1a), + NCLOAD_SHORT_OE(PICOJAVA, 0xfe1b), + NCLOAD_WORD_OE(PICOJAVA, 0xfe1c), + CACHE_FLUSH(PICOJAVA, 0xfe1e), + STORE_BYTE(PICOJAVA, 0xfe20), + STORE_SHORT(PICOJAVA, 0xfe22), + STORE_WORD(PICOJAVA, 0xfe24), + STORE_SHORT_OE(PICOJAVA, 0xfe2a), + STORE_WORD_OE(PICOJAVA, 0xfe2c), + NCSTORE_BYTE(PICOJAVA, 0xfe30), + NCSTORE_SHORT(PICOJAVA, 0xfe32), + NCSTORE_WORD(PICOJAVA, 0xfe34), + NCSTORE_SHORT_OE(PICOJAVA, 0xfe3a), + NCSTORE_WORD_OE(PICOJAVA, 0xfe3c), + ZERO_LINE(PICOJAVA, 0xfe3e), + ENTER_SYNC_METHOD(PICOJAVA, 0xfe3f), + + // PicoJava priv instructions + PRIV_LOAD_UBYTE(PICOJAVA, 0xff00), + PRIV_LOAD_BYTE(PICOJAVA, 0xff01), + PRIV_LOAD_CHAR(PICOJAVA, 0xff02), + PRIV_LOAD_SHORT(PICOJAVA, 0xff03), + PRIV_LOAD_WORD(PICOJAVA, 0xff04), + PRIV_RET_FROM_TRAP(PICOJAVA, 0xff05), + PRIV_READ_DCACHE_TAG(PICOJAVA, 0xff06), + PRIV_READ_DCACHE_DATA(PICOJAVA, 0xff07), + PRIV_LOAD_CHAR_OE(PICOJAVA, 0xff0a), + PRIV_LOAD_SHORT_OE(PICOJAVA, 0xff0b), + PRIV_LOAD_WORD_OE(PICOJAVA, 0xff0c), + PRIV_READ_ICACHE_TAG(PICOJAVA, 0xff0e), + PRIV_READ_ICACHE_DATA(PICOJAVA, 0xff0f), + PRIV_NCLOAD_UBYTE(PICOJAVA, 0xff10), + PRIV_NCLOAD_BYTE(PICOJAVA, 0xff11), + PRIV_NCLOAD_CHAR(PICOJAVA, 0xff12), + PRIV_NCLOAD_SHORT(PICOJAVA, 0xff13), + PRIV_NCLOAD_WORD(PICOJAVA, 0xff14), + PRIV_POWERDOWN(PICOJAVA, 0xff16), + PRIV_READ_SCACHE_DATA(PICOJAVA, 0xff17), + PRIV_NCLOAD_CHAR_OE(PICOJAVA, 0xff1a), + PRIV_NCLOAD_SHORT_OE(PICOJAVA, 0xff1b), + PRIV_NCLOAD_WORD_OE(PICOJAVA, 0xff1c), + PRIV_CACHE_FLUSH(PICOJAVA, 0xff1e), + PRIV_CACHE_INDEX_FLUSH(PICOJAVA, 0xff1f), + PRIV_STORE_BYTE(PICOJAVA, 0xff20), + PRIV_STORE_SHORT(PICOJAVA, 0xff22), + PRIV_STORE_WORD(PICOJAVA, 0xff24), + PRIV_WRITE_DCACHE_TAG(PICOJAVA, 0xff26), + PRIV_WRITE_DCACHE_DATA(PICOJAVA, 0xff27), + PRIV_STORE_SHORT_OE(PICOJAVA, 0xff2a), + PRIV_STORE_WORD_OE(PICOJAVA, 0xff2c), + PRIV_WRITE_ICACHE_TAG(PICOJAVA, 0xff2e), + PRIV_WRITE_ICACHE_DATA(PICOJAVA, 0xff2f), + PRIV_NCSTORE_BYTE(PICOJAVA, 0xff30), + PRIV_NCSTORE_SHORT(PICOJAVA, 0xff32), + PRIV_NCSTORE_WORD(PICOJAVA, 0xff34), + PRIV_RESET(PICOJAVA, 0xff36), + PRIV_WRITE_SCACHE_DATA(PICOJAVA, 0xff37), + PRIV_NCSTORE_SHORT_OE(PICOJAVA, 0xff3a), + PRIV_NCSTORE_WORD_OE(PICOJAVA, 0xff3c), + PRIV_ZERO_LINE(PICOJAVA, 0xff3e), + PRIV_READ_REG_0(PICOJAVA, 0xff40), + PRIV_READ_REG_1(PICOJAVA, 0xff41), + PRIV_READ_REG_2(PICOJAVA, 0xff42), + PRIV_READ_REG_3(PICOJAVA, 0xff43), + PRIV_READ_REG_4(PICOJAVA, 0xff44), + PRIV_READ_REG_5(PICOJAVA, 0xff45), + PRIV_READ_REG_6(PICOJAVA, 0xff46), + PRIV_READ_REG_7(PICOJAVA, 0xff47), + PRIV_READ_REG_8(PICOJAVA, 0xff48), + PRIV_READ_REG_9(PICOJAVA, 0xff49), + PRIV_READ_REG_10(PICOJAVA, 0xff4a), + PRIV_READ_REG_11(PICOJAVA, 0xff4b), + PRIV_READ_REG_12(PICOJAVA, 0xff4c), + PRIV_READ_REG_13(PICOJAVA, 0xff4d), + PRIV_READ_REG_14(PICOJAVA, 0xff4e), + PRIV_READ_REG_15(PICOJAVA, 0xff4f), + PRIV_READ_REG_16(PICOJAVA, 0xff50), + PRIV_READ_REG_17(PICOJAVA, 0xff51), + PRIV_READ_REG_18(PICOJAVA, 0xff52), + PRIV_READ_REG_19(PICOJAVA, 0xff53), + PRIV_READ_REG_20(PICOJAVA, 0xff54), + PRIV_READ_REG_21(PICOJAVA, 0xff55), + PRIV_READ_REG_22(PICOJAVA, 0xff56), + PRIV_READ_REG_23(PICOJAVA, 0xff57), + PRIV_READ_REG_24(PICOJAVA, 0xff58), + PRIV_READ_REG_25(PICOJAVA, 0xff59), + PRIV_READ_REG_26(PICOJAVA, 0xff5a), + PRIV_READ_REG_27(PICOJAVA, 0xff5b), + PRIV_READ_REG_28(PICOJAVA, 0xff5c), + PRIV_READ_REG_29(PICOJAVA, 0xff5d), + PRIV_READ_REG_30(PICOJAVA, 0xff5e), + PRIV_READ_REG_31(PICOJAVA, 0xff5f), + PRIV_WRITE_REG_0(PICOJAVA, 0xff60), + PRIV_WRITE_REG_1(PICOJAVA, 0xff61), + PRIV_WRITE_REG_2(PICOJAVA, 0xff62), + PRIV_WRITE_REG_3(PICOJAVA, 0xff63), + PRIV_WRITE_REG_4(PICOJAVA, 0xff64), + PRIV_WRITE_REG_5(PICOJAVA, 0xff65), + PRIV_WRITE_REG_6(PICOJAVA, 0xff66), + PRIV_WRITE_REG_7(PICOJAVA, 0xff67), + PRIV_WRITE_REG_8(PICOJAVA, 0xff68), + PRIV_WRITE_REG_9(PICOJAVA, 0xff69), + PRIV_WRITE_REG_10(PICOJAVA, 0xff6a), + PRIV_WRITE_REG_11(PICOJAVA, 0xff6b), + PRIV_WRITE_REG_12(PICOJAVA, 0xff6c), + PRIV_WRITE_REG_13(PICOJAVA, 0xff6d), + PRIV_WRITE_REG_14(PICOJAVA, 0xff6e), + PRIV_WRITE_REG_15(PICOJAVA, 0xff6f), + PRIV_WRITE_REG_16(PICOJAVA, 0xff70), + PRIV_WRITE_REG_17(PICOJAVA, 0xff71), + PRIV_WRITE_REG_18(PICOJAVA, 0xff72), + PRIV_WRITE_REG_19(PICOJAVA, 0xff73), + PRIV_WRITE_REG_20(PICOJAVA, 0xff74), + PRIV_WRITE_REG_21(PICOJAVA, 0xff75), + PRIV_WRITE_REG_22(PICOJAVA, 0xff76), + PRIV_WRITE_REG_23(PICOJAVA, 0xff77), + PRIV_WRITE_REG_24(PICOJAVA, 0xff78), + PRIV_WRITE_REG_25(PICOJAVA, 0xff79), + PRIV_WRITE_REG_26(PICOJAVA, 0xff7a), + PRIV_WRITE_REG_27(PICOJAVA, 0xff7b), + PRIV_WRITE_REG_28(PICOJAVA, 0xff7c), + PRIV_WRITE_REG_29(PICOJAVA, 0xff7d), + PRIV_WRITE_REG_30(PICOJAVA, 0xff7e), + PRIV_WRITE_REG_31(PICOJAVA, 0xff7f); + + Opcode(int opcode) { + this(STANDARD, opcode, NO_OPERANDS); + } + + Opcode(int opcode, Instruction.Kind kind) { + this(STANDARD, opcode, kind); + } + + Opcode(Set set, int opcode) { + this(set, opcode, (set == STANDARD ? NO_OPERANDS : WIDE_NO_OPERANDS)); + } + + Opcode(Set set, int opcode, Instruction.Kind kind) { + this.set = set; + this.opcode = opcode; + this.kind = kind; + } + + public final Set set; + public final int opcode; + public final Instruction.Kind kind; + + /** Get the Opcode for a simple standard 1-byte opcode. */ + public static Opcode get(int opcode) { + return stdOpcodes[opcode]; + } + + /** Get the Opcode for 1- or 2-byte opcode. */ + public static Opcode get(int opcodePrefix, int opcode) { + Opcode[] block = getOpcodeBlock(opcodePrefix); + return (block == null ? null : block[opcode]); + } + + private static Opcode[] getOpcodeBlock(int opcodePrefix) { + switch (opcodePrefix) { + case 0: + return stdOpcodes; + case WIDE: + return wideOpcodes; + case NONPRIV: + return nonPrivOpcodes; + case PRIV: + return privOpcodes; + default: + return null; + } + + } + + private static Opcode[] stdOpcodes = new Opcode[256]; + private static Opcode[] wideOpcodes = new Opcode[256]; + private static Opcode[] nonPrivOpcodes = new Opcode[256]; + private static Opcode[] privOpcodes = new Opcode[256]; + static { + for (Opcode o: values()) + getOpcodeBlock(o.opcode >> 8)[o.opcode & 0xff] = o; + } + + /** The byte prefix for the wide instructions. */ + public static final int WIDE = 0xc4; + /** The byte prefix for the PicoJava nonpriv instructions. */ + public static final int NONPRIV = 0xfe; + /** The byte prefix for the PicoJava priv instructions. */ + public static final int PRIV = 0xff; + + public enum Set { + /** Standard opcodes. */ + STANDARD, + /** Legacy support for PicoJava opcodes. */ + PICOJAVA }; +} diff -r c27d5e6924b2 -r c8b275d62d6b langtools/src/share/classes/com/sun/tools/javac/comp/Check.java --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java Wed Jul 05 16:50:37 2017 +0200 +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Check.java Wed Jul 05 16:51:11 2017 +0200 @@ -1458,10 +1458,14 @@ while (e.scope != null) { if (m.overrides(e.sym, origin, types, false)) checkOverride(tree, m, (MethodSymbol)e.sym, origin); - else if (e.sym.isInheritedIn(origin, types) && !m.isConstructor()) { + else if (e.sym.kind == MTH && + e.sym.isInheritedIn(origin, types) && + (e.sym.flags() & SYNTHETIC) == 0 && + !m.isConstructor()) { Type er1 = m.erasure(types); Type er2 = e.sym.erasure(types); - if (types.isSameType(er1,er2)) { + if (types.isSameTypes(er1.getParameterTypes(), + er2.getParameterTypes())) { log.error(TreeInfo.diagnosticPositionFor(m, tree), "name.clash.same.erasure.no.override", m, m.location(), @@ -2088,9 +2092,11 @@ if (sym != e.sym && sym.kind == e.sym.kind && sym.name != names.error && - (sym.kind != MTH || types.overrideEquivalent(sym.type, e.sym.type))) { + (sym.kind != MTH || types.hasSameArgs(types.erasure(sym.type), types.erasure(e.sym.type)))) { if ((sym.flags() & VARARGS) != (e.sym.flags() & VARARGS)) varargsDuplicateError(pos, sym, e.sym); + else if (sym.kind == MTH && !types.overrideEquivalent(sym.type, e.sym.type)) + duplicateErasureError(pos, sym, e.sym); else duplicateError(pos, e.sym); return false; @@ -2098,6 +2104,14 @@ } return true; } + //where + /** Report duplicate declaration error. + */ + void duplicateErasureError(DiagnosticPosition pos, Symbol sym1, Symbol sym2) { + if (!sym1.type.isErroneous() && !sym2.type.isErroneous()) { + log.error(pos, "name.clash.same.erasure", sym1, sym2); + } + } /** Check that single-type import is not already imported or top-level defined, * but make an exception for two single-type imports which denote the same type. diff -r c27d5e6924b2 -r c8b275d62d6b langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java Wed Jul 05 16:50:37 2017 +0200 +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Lower.java Wed Jul 05 16:51:11 2017 +0200 @@ -2631,8 +2631,8 @@ if (havePrimitive) { Type unboxedTarget = types.unboxedType(type); if (unboxedTarget.tag != NONE) { - if (!types.isSubtype(tree.type, unboxedTarget)) - tree.type = unboxedTarget; // e.g. Character c = 89; + if (!types.isSubtype(tree.type, unboxedTarget)) //e.g. Character c = 89; + tree.type = unboxedTarget.constType(tree.type.constValue()); return (T)boxPrimitive((JCExpression)tree, type); } else { tree = (T)boxPrimitive((JCExpression)tree); diff -r c27d5e6924b2 -r c8b275d62d6b langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java --- a/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java Wed Jul 05 16:50:37 2017 +0200 +++ b/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java Wed Jul 05 16:51:11 2017 +0200 @@ -216,7 +216,9 @@ && isAccessible(env, site) && - sym.isInheritedIn(site.tsym, types); + sym.isInheritedIn(site.tsym, types) + && + notOverriddenIn(site, sym); case PROTECTED: return (env.toplevel.packge == sym.owner.owner // fast special case @@ -231,14 +233,23 @@ && isAccessible(env, site) && - // `sym' is accessible only if not overridden by - // another symbol which is a member of `site' - // (because, if it is overridden, `sym' is not strictly - // speaking a member of `site'.) - (sym.kind != MTH || sym.isConstructor() || sym.isStatic() || - ((MethodSymbol)sym).implementation(site.tsym, types, true) == sym); + notOverriddenIn(site, sym); default: // this case includes erroneous combinations as well - return isAccessible(env, site); + return isAccessible(env, site) && notOverriddenIn(site, sym); + } + } + //where + /* `sym' is accessible only if not overridden by + * another symbol which is a member of `site' + * (because, if it is overridden, `sym' is not strictly + * speaking a member of `site'.) + */ + private boolean notOverriddenIn(Type site, Symbol sym) { + if (sym.kind != MTH || sym.isConstructor() || sym.isStatic()) + return true; + else { + Symbol s2 = ((MethodSymbol)sym).implementation(site.tsym, types, true); + return (s2 == null || s2 == sym); } } //where @@ -605,7 +616,7 @@ Symbol mostSpecific(Symbol m1, Symbol m2, Env env, - Type site, + final Type site, boolean allowBoxing, boolean useVarargs) { switch (m2.kind) { @@ -661,21 +672,33 @@ m2.erasure(types).getParameterTypes())) return new AmbiguityError(m1, m2); // both abstract, neither overridden; merge throws clause and result type - Symbol result; + Symbol mostSpecific; Type result2 = mt2.getReturnType(); if (mt2.tag == FORALL) result2 = types.subst(result2, ((ForAll)mt2).tvars, ((ForAll)mt1).tvars); if (types.isSubtype(mt1.getReturnType(), result2)) { - result = m1; + mostSpecific = m1; } else if (types.isSubtype(result2, mt1.getReturnType())) { - result = m2; + mostSpecific = m2; } else { // Theoretically, this can't happen, but it is possible // due to error recovery or mixing incompatible class files return new AmbiguityError(m1, m2); } - result = result.clone(result.owner); - result.type = (Type)result.type.clone(); + MethodSymbol result = new MethodSymbol( + mostSpecific.flags(), + mostSpecific.name, + null, + mostSpecific.owner) { + @Override + public MethodSymbol implementation(TypeSymbol origin, Types types, boolean checkResult) { + if (origin == site.tsym) + return this; + else + return super.implementation(origin, types, checkResult); + } + }; + result.type = (Type)mostSpecific.type.clone(); result.type.setThrown(chk.intersect(mt1.getThrownTypes(), mt2.getThrownTypes())); return result; diff -r c27d5e6924b2 -r c8b275d62d6b langtools/src/share/classes/com/sun/tools/javac/jvm/ClassFile.java --- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassFile.java Wed Jul 05 16:50:37 2017 +0200 +++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassFile.java Wed Jul 05 16:51:11 2017 +0200 @@ -25,8 +25,9 @@ package com.sun.tools.javac.jvm; -import com.sun.tools.javac.code.*; -import com.sun.tools.javac.util.*; +import com.sun.tools.javac.code.Type; +import com.sun.tools.javac.util.Name; + /** A JVM class file. * @@ -86,6 +87,18 @@ public final static int MAX_LOCALS = 0xffff; public final static int MAX_STACK = 0xffff; + public enum Version { + V45_3(45, 3), // base level for all attributes + V49(49, 0), // JDK 1.5: enum, generics, annotations + V50(50, 0), // JDK 1.6: stackmaps + V51(51, 0); // JDK 1.7 + Version(int major, int minor) { + this.major = major; + this.minor = minor; + } + public final int major, minor; + } + /************************************************************************ * String Translation Routines diff -r c27d5e6924b2 -r c8b275d62d6b langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java --- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Wed Jul 05 16:50:37 2017 +0200 +++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Wed Jul 05 16:51:11 2017 +0200 @@ -35,8 +35,11 @@ import javax.lang.model.SourceVersion; import javax.tools.JavaFileObject; import javax.tools.JavaFileManager; +import javax.tools.JavaFileManager.Location; import javax.tools.StandardJavaFileManager; +import static javax.tools.StandardLocation.*; + import com.sun.tools.javac.comp.Annotate; import com.sun.tools.javac.code.*; import com.sun.tools.javac.code.Type.*; @@ -49,9 +52,8 @@ import static com.sun.tools.javac.code.Flags.*; import static com.sun.tools.javac.code.Kinds.*; import static com.sun.tools.javac.code.TypeTags.*; -import com.sun.tools.javac.jvm.ClassFile.NameAndType; -import javax.tools.JavaFileManager.Location; -import static javax.tools.StandardLocation.*; +import static com.sun.tools.javac.jvm.ClassFile.*; +import static com.sun.tools.javac.jvm.ClassFile.Version.*; /** This class provides operations to read a classfile into an internal * representation. The internal representation is anchored in a @@ -64,7 +66,7 @@ * This code and its internal interfaces are subject to change or * deletion without notice. */ -public class ClassReader extends ClassFile implements Completer { +public class ClassReader implements Completer { /** The context key for the class reader. */ protected static final Context.Key classReaderKey = new Context.Key(); @@ -180,6 +182,11 @@ */ int[] poolIdx; + /** The major version number of the class file being read. */ + int majorVersion; + /** The minor version number of the class file being read. */ + int minorVersion; + /** Get the ClassReader instance for this invocation. */ public static ClassReader instance(Context context) { ClassReader instance = context.get(classReaderKey); @@ -249,6 +256,8 @@ : null; typevars = new Scope(syms.noSymbol); + + initAttributeReaders(); } /** Add member to class unless it is synthetic. @@ -655,6 +664,7 @@ sbp - startSbp)); outer = new ClassType(outer, sigToTypes('>'), t) { boolean completed = false; + @Override public Type getEnclosingType() { if (!completed) { completed = true; @@ -679,6 +689,7 @@ } return super.getEnclosingType(); } + @Override public void setEnclosingType(Type outer) { throw new UnsupportedOperationException(); } @@ -822,6 +833,246 @@ * Reading Attributes ***********************************************************************/ + protected enum AttributeKind { CLASS, MEMBER }; + protected abstract class AttributeReader { + AttributeReader(Name name, Version version, Set kinds) { + this.name = name; + this.version = version; + this.kinds = kinds; + } + + boolean accepts(AttributeKind kind) { + return kinds.contains(kind) && majorVersion >= version.major; + } + + abstract void read(Symbol sym, int attrLen); + + final Name name; + final Version version; + final Set kinds; + } + + protected Set CLASS_ATTRIBUTE = + EnumSet.of(AttributeKind.CLASS); + protected Set MEMBER_ATTRIBUTE = + EnumSet.of(AttributeKind.MEMBER); + protected Set CLASS_OR_MEMBER_ATTRIBUTE = + EnumSet.of(AttributeKind.CLASS, AttributeKind.MEMBER); + + protected Map attributeReaders = new HashMap(); + + protected void initAttributeReaders() { + AttributeReader[] readers = { + // v45.3 attributes + + new AttributeReader(names.Code, V45_3, MEMBER_ATTRIBUTE) { + void read(Symbol sym, int attrLen) { + if (readAllOfClassFile || saveParameterNames) + ((MethodSymbol)sym).code = readCode(sym); + else + bp = bp + attrLen; + } + }, + + new AttributeReader(names.ConstantValue, V45_3, MEMBER_ATTRIBUTE) { + void read(Symbol sym, int attrLen) { + Object v = readPool(nextChar()); + // Ignore ConstantValue attribute if field not final. + if ((sym.flags() & FINAL) != 0) + ((VarSymbol) sym).setData(v); + } + }, + + new AttributeReader(names.Deprecated, V45_3, CLASS_OR_MEMBER_ATTRIBUTE) { + void read(Symbol sym, int attrLen) { + sym.flags_field |= DEPRECATED; + } + }, + + new AttributeReader(names.Exceptions, V45_3, CLASS_OR_MEMBER_ATTRIBUTE) { + void read(Symbol sym, int attrLen) { + int nexceptions = nextChar(); + List thrown = List.nil(); + for (int j = 0; j < nexceptions; j++) + thrown = thrown.prepend(readClassSymbol(nextChar()).type); + if (sym.type.getThrownTypes().isEmpty()) + sym.type.asMethodType().thrown = thrown.reverse(); + } + }, + + new AttributeReader(names.InnerClasses, V45_3, CLASS_ATTRIBUTE) { + void read(Symbol sym, int attrLen) { + ClassSymbol c = (ClassSymbol) sym; + readInnerClasses(c); + } + }, + + new AttributeReader(names.LocalVariableTable, V45_3, CLASS_OR_MEMBER_ATTRIBUTE) { + void read(Symbol sym, int attrLen) { + int newbp = bp + attrLen; + if (saveParameterNames) { + // pick up parameter names from the variable table + List parameterNames = List.nil(); + int firstParam = ((sym.flags() & STATIC) == 0) ? 1 : 0; + int endParam = firstParam + Code.width(sym.type.getParameterTypes()); + int numEntries = nextChar(); + for (int i=0; i is = new ListBuffer(); + while (sigp != siglimit) is.append(sigToType()); + ct1.interfaces_field = is.toList(); + } finally { + readingClassAttr = false; + } + } else { + List thrown = sym.type.getThrownTypes(); + sym.type = readType(nextChar()); + //- System.err.println(" # " + sym.type); + if (sym.kind == MTH && sym.type.getThrownTypes().isEmpty()) + sym.type.asMethodType().thrown = thrown; + + } + } + }, + + // v49 annotation attributes + + new AttributeReader(names.AnnotationDefault, V49, CLASS_OR_MEMBER_ATTRIBUTE) { + void read(Symbol sym, int attrLen) { + attachAnnotationDefault(sym); + } + }, + + new AttributeReader(names.RuntimeInvisibleAnnotations, V49, CLASS_OR_MEMBER_ATTRIBUTE) { + void read(Symbol sym, int attrLen) { + attachAnnotations(sym); + } + }, + + new AttributeReader(names.RuntimeInvisibleParameterAnnotations, V49, CLASS_OR_MEMBER_ATTRIBUTE) { + void read(Symbol sym, int attrLen) { + attachParameterAnnotations(sym); + } + }, + + new AttributeReader(names.RuntimeVisibleAnnotations, V49, CLASS_OR_MEMBER_ATTRIBUTE) { + void read(Symbol sym, int attrLen) { + attachAnnotations(sym); + } + }, + + new AttributeReader(names.RuntimeVisibleParameterAnnotations, V49, CLASS_OR_MEMBER_ATTRIBUTE) { + void read(Symbol sym, int attrLen) { + attachParameterAnnotations(sym); + } + }, + + // additional "legacy" v49 attributes, superceded by flags + + new AttributeReader(names.Annotation, V49, CLASS_OR_MEMBER_ATTRIBUTE) { + void read(Symbol sym, int attrLen) { + if (allowAnnotations) + sym.flags_field |= ANNOTATION; + } + }, + + new AttributeReader(names.Bridge, V49, MEMBER_ATTRIBUTE) { + void read(Symbol sym, int attrLen) { + sym.flags_field |= BRIDGE; + if (!allowGenerics) + sym.flags_field &= ~SYNTHETIC; + } + }, + + new AttributeReader(names.Enum, V49, CLASS_OR_MEMBER_ATTRIBUTE) { + void read(Symbol sym, int attrLen) { + sym.flags_field |= ENUM; + } + }, + + new AttributeReader(names.Varargs, V49, CLASS_OR_MEMBER_ATTRIBUTE) { + void read(Symbol sym, int attrLen) { + if (allowVarargs) + sym.flags_field |= VARARGS; + } + } + + // The following attributes for a Code attribute are not currently handled + // StackMapTable + // SourceDebugExtension + // LineNumberTable + // LocalVariableTypeTable + }; + + for (AttributeReader r: readers) + attributeReaders.put(r.name, r); + } + /** Report unrecognized attribute. */ void unrecognized(Name attrName) { @@ -829,99 +1080,7 @@ printCCF("ccf.unrecognized.attribute", attrName); } - /** Read member attribute. - */ - void readMemberAttr(Symbol sym, Name attrName, int attrLen) { - //- System.err.println(" z " + sym + ", " + attrName + ", " + attrLen); - if (attrName == names.ConstantValue) { - Object v = readPool(nextChar()); - // Ignore ConstantValue attribute if field not final. - if ((sym.flags() & FINAL) != 0) - ((VarSymbol)sym).setData(v); - } else if (attrName == names.Code) { - if (readAllOfClassFile || saveParameterNames) - ((MethodSymbol)sym).code = readCode(sym); - else - bp = bp + attrLen; - } else if (attrName == names.Exceptions) { - int nexceptions = nextChar(); - List thrown = List.nil(); - for (int j = 0; j < nexceptions; j++) - thrown = thrown.prepend(readClassSymbol(nextChar()).type); - if (sym.type.getThrownTypes().isEmpty()) - sym.type.asMethodType().thrown = thrown.reverse(); - } else if (attrName == names.Synthetic) { - // bridge methods are visible when generics not enabled - if (allowGenerics || (sym.flags_field & BRIDGE) == 0) - sym.flags_field |= SYNTHETIC; - } else if (attrName == names.Bridge) { - sym.flags_field |= BRIDGE; - if (!allowGenerics) - sym.flags_field &= ~SYNTHETIC; - } else if (attrName == names.Deprecated) { - sym.flags_field |= DEPRECATED; - } else if (attrName == names.Varargs) { - if (allowVarargs) sym.flags_field |= VARARGS; - } else if (attrName == names.Annotation) { - if (allowAnnotations) sym.flags_field |= ANNOTATION; - } else if (attrName == names.Enum) { - sym.flags_field |= ENUM; - } else if (allowGenerics && attrName == names.Signature) { - List thrown = sym.type.getThrownTypes(); - sym.type = readType(nextChar()); - //- System.err.println(" # " + sym.type); - if (sym.kind == MTH && sym.type.getThrownTypes().isEmpty()) - sym.type.asMethodType().thrown = thrown; - } else if (attrName == names.RuntimeVisibleAnnotations) { - attachAnnotations(sym); - } else if (attrName == names.RuntimeInvisibleAnnotations) { - attachAnnotations(sym); - } else if (attrName == names.RuntimeVisibleParameterAnnotations) { - attachParameterAnnotations(sym); - } else if (attrName == names.RuntimeInvisibleParameterAnnotations) { - attachParameterAnnotations(sym); - } else if (attrName == names.LocalVariableTable) { - int newbp = bp + attrLen; - if (saveParameterNames) { - // pick up parameter names from the variable table - List parameterNames = List.nil(); - int firstParam = ((sym.flags() & STATIC) == 0) ? 1 : 0; - int endParam = firstParam + Code.width(sym.type.getParameterTypes()); - int numEntries = nextChar(); - for (int i=0; i is = new ListBuffer(); - while (sigp != siglimit) is.append(sigToType()); - ct1.interfaces_field = is.toList(); - } finally { - readingClassAttr = false; - } - } else { - readMemberAttr(c, attrName, attrLen); - } - } private boolean readingClassAttr = false; private List missingTypeVariables = List.nil(); private List foundTypeVariables = List.nil(); @@ -1069,12 +1213,7 @@ /** Read class attributes. */ void readClassAttrs(ClassSymbol c) { - char ac = nextChar(); - for (int i = 0; i < ac; i++) { - Name attrName = readName(nextChar()); - int attrLen = nextInt(); - readClassAttr(c, attrName, attrLen); - } + readAttrs(c, AttributeKind.CLASS); } /** Read code block. @@ -1219,6 +1358,7 @@ this.enumerator = enumerator; } public void accept(Visitor v) { ((ProxyVisitor)v).visitEnumAttributeProxy(this); } + @Override public String toString() { return "/*proxy enum*/" + enumType + "." + enumerator; } @@ -1231,6 +1371,7 @@ this.values = values; } public void accept(Visitor v) { ((ProxyVisitor)v).visitArrayAttributeProxy(this); } + @Override public String toString() { return "{" + values + "}"; } @@ -1246,6 +1387,7 @@ this.values = values; } public void accept(Visitor v) { ((ProxyVisitor)v).visitCompoundAnnotationProxy(this); } + @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("@"); @@ -1414,6 +1556,7 @@ final MethodSymbol sym; final Attribute value; final JavaFileObject classFile = currentClassFile; + @Override public String toString() { return " ClassReader store default for " + sym.owner + "." + sym + " is " + value; } @@ -1437,6 +1580,7 @@ final Symbol sym; final List l; final JavaFileObject classFile; + @Override public String toString() { return " ClassReader annotate " + sym.owner + "." + sym + " with " + l; } @@ -1544,7 +1688,8 @@ // prepare type variable table typevars = typevars.dup(currentOwner); - if (ct.getEnclosingType().tag == CLASS) enterTypevars(ct.getEnclosingType()); + if (ct.getEnclosingType().tag == CLASS) + enterTypevars(ct.getEnclosingType()); // read flags, or skip if this is an inner class long flags = adjustClassFlags(nextChar()); @@ -1632,8 +1777,8 @@ if (magic != JAVA_MAGIC) throw badClassFile("illegal.start.of.class.file"); - int minorVersion = nextChar(); - int majorVersion = nextChar(); + minorVersion = nextChar(); + majorVersion = nextChar(); int maxMajor = Target.MAX().majorVersion; int maxMinor = Target.MAX().minorVersion; if (majorVersion > maxMajor || @@ -1775,13 +1920,13 @@ if (sym.kind == TYP) { ClassSymbol c = (ClassSymbol)sym; c.members_field = new Scope.ErrorScope(c); // make sure it's always defined - boolean suppressFlush = this.suppressFlush; - this.suppressFlush = true; + boolean saveSuppressFlush = suppressFlush; + suppressFlush = true; try { completeOwners(c.owner); completeEnclosing(c); } finally { - this.suppressFlush = suppressFlush; + suppressFlush = saveSuppressFlush; } fillIn(c); } else if (sym.kind == PCK) { @@ -2270,6 +2415,7 @@ return URI.create(name.toString()); } + @Override public Reader openReader(boolean ignoreEncodingErrors) throws IOException { throw new UnsupportedOperationException(); } diff -r c27d5e6924b2 -r c8b275d62d6b langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java --- a/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Wed Jul 05 16:50:37 2017 +0200 +++ b/langtools/src/share/classes/com/sun/tools/javac/main/JavaCompiler.java Wed Jul 05 16:51:11 2017 +0200 @@ -386,6 +386,11 @@ (options.get("failcomplete") != null) ? names.fromString(options.get("failcomplete")) : null; + + shouldStopPolicy = + (options.get("shouldStopPolicy") != null) + ? CompileState.valueOf(options.get("shouldStopPolicy")) + : null; } /* Switches: @@ -459,14 +464,26 @@ */ public boolean verboseCompilePolicy; + /** + * Policy of how far to continue processing. null means until first + * error. + */ + public CompileState shouldStopPolicy; + /** A queue of all as yet unattributed classes. */ public Todo todo; + /** Ordered list of compiler phases for each compilation unit. */ protected enum CompileState { - TODO(0), - ATTR(1), - FLOW(2); + PARSE(1), + ENTER(2), + PROCESS(3), + ATTR(4), + FLOW(5), + TRANSTYPES(6), + LOWER(7), + GENERATE(8); CompileState(int value) { this.value = value; } @@ -475,6 +492,9 @@ } private int value; }; + /** Partial map to record which compiler phases have been executed + * for each compilation unit. Used for ATTR and FLOW phases. + */ protected class CompileStates extends HashMap,CompileState> { private static final long serialVersionUID = 1812267524140424433L; boolean isDone(Env env, CompileState cs) { @@ -490,6 +510,13 @@ */ protected Set inputFiles = new HashSet(); + protected boolean shouldStop(CompileState cs) { + if (shouldStopPolicy == null) + return (errorCount() > 0); + else + return cs.ordinal() > shouldStopPolicy.ordinal(); + } + /** The number of errors reported so far. */ public int errorCount() { @@ -503,18 +530,12 @@ return log.nerrors; } - protected final Queue stopIfError(Queue queue) { - if (errorCount() == 0) - return queue; - else - return ListBuffer.lb(); + protected final Queue stopIfError(CompileState cs, Queue queue) { + return shouldStop(cs) ? ListBuffer.lb() : queue; } - protected final List stopIfError(List list) { - if (errorCount() == 0) - return list; - else - return List.nil(); + protected final List stopIfError(CompileState cs, List list) { + return shouldStop(cs) ? List.nil() : list; } /** The number of warnings reported so far. @@ -669,7 +690,7 @@ */ JavaFileObject genCode(Env env, JCClassDecl cdef) throws IOException { try { - if (gen.genClass(env, cdef)) + if (gen.genClass(env, cdef) && (errorCount() == 0)) return writer.writeClass(cdef.sym); } catch (ClassWriter.PoolOverflow ex) { log.error(cdef.pos(), "limit.pool"); @@ -779,8 +800,10 @@ initProcessAnnotations(processors); // These method calls must be chained to avoid memory leaks - delegateCompiler = processAnnotations(enterTrees(stopIfError(parseFiles(sourceFileObjects))), - classnames); + delegateCompiler = + processAnnotations( + enterTrees(stopIfError(CompileState.PARSE, parseFiles(sourceFileObjects))), + classnames); delegateCompiler.compile2(); delegateCompiler.close(); @@ -812,7 +835,7 @@ case BY_FILE: { Queue>> q = todo.groupByFile(); - while (!q.isEmpty() && errorCount() == 0) { + while (!q.isEmpty() && !shouldStop(CompileState.ATTR)) { generate(desugar(flow(attribute(q.remove())))); } } @@ -850,7 +873,7 @@ * Parses a list of files. */ public List parseFiles(List fileObjects) throws IOException { - if (errorCount() > 0) + if (shouldStop(CompileState.PARSE)) return List.nil(); //parse all files @@ -961,7 +984,7 @@ public JavaCompiler processAnnotations(List roots, List classnames) throws IOException { // TODO: see TEMP note in JavacProcessingEnvironment - if (errorCount() != 0) { + if (shouldStop(CompileState.PROCESS)) { // Errors were encountered. If todo is empty, then the // encountered errors were parse errors. Otherwise, the // errors were found during the enter phase which should @@ -1068,7 +1091,7 @@ ListBuffer> results = lb(); while (!envs.isEmpty()) results.append(attribute(envs.remove())); - return results; + return stopIfError(CompileState.ATTR, results); } /** @@ -1115,7 +1138,7 @@ for (Env env: envs) { flow(env, results); } - return stopIfError(results); + return stopIfError(CompileState.FLOW, results); } /** @@ -1124,7 +1147,7 @@ public Queue> flow(Env env) { ListBuffer> results = lb(); flow(env, results); - return stopIfError(results); + return stopIfError(CompileState.FLOW, results); } /** @@ -1132,7 +1155,7 @@ */ protected void flow(Env env, Queue> results) { try { - if (errorCount() > 0) + if (shouldStop(CompileState.FLOW)) return; if (relax || compileStates.isDone(env, CompileState.FLOW)) { @@ -1141,7 +1164,7 @@ } if (verboseCompilePolicy) - log.printLines(log.noticeWriter, "[flow " + env.enclClass.sym + "]"); + printNote("[flow " + env.enclClass.sym + "]"); JavaFileObject prev = log.useSource( env.enclClass.sym.sourcefile != null ? env.enclClass.sym.sourcefile : @@ -1152,7 +1175,7 @@ flow.analyzeTree(env.tree, localMake); compileStates.put(env, CompileState.FLOW); - if (errorCount() > 0) + if (shouldStop(CompileState.FLOW)) return; results.add(env); @@ -1179,7 +1202,7 @@ ListBuffer, JCClassDecl>> results = lb(); for (Env env: envs) desugar(env, results); - return stopIfError(results); + return stopIfError(CompileState.FLOW, results); } /** @@ -1189,7 +1212,7 @@ * The preparation stops as soon as an error is found. */ protected void desugar(final Env env, Queue, JCClassDecl>> results) { - if (errorCount() > 0) + if (shouldStop(CompileState.TRANSTYPES)) return; if (implicitSourcePolicy == ImplicitSourcePolicy.NONE @@ -1204,6 +1227,7 @@ */ class ScanNested extends TreeScanner { Set> dependencies = new LinkedHashSet>(); + @Override public void visitClassDef(JCClassDecl node) { Type st = types.supertype(node.sym.type); if (st.tag == TypeTags.CLASS) { @@ -1226,11 +1250,11 @@ //We need to check for error another time as more classes might //have been attributed and analyzed at this stage - if (errorCount() > 0) + if (shouldStop(CompileState.TRANSTYPES)) return; if (verboseCompilePolicy) - log.printLines(log.noticeWriter, "[desugar " + env.enclClass.sym + "]"); + printNote("[desugar " + env.enclClass.sym + "]"); JavaFileObject prev = log.useSource(env.enclClass.sym.sourcefile != null ? env.enclClass.sym.sourcefile : @@ -1244,6 +1268,8 @@ if (env.tree instanceof JCCompilationUnit) { if (!(stubOutput || sourceOutput || printFlat)) { + if (shouldStop(CompileState.LOWER)) + return; List pdef = lower.translateTopLevelClass(env, env.tree, localMake); if (pdef.head != null) { assert pdef.tail.isEmpty(); @@ -1266,9 +1292,12 @@ return; } + if (shouldStop(CompileState.TRANSTYPES)) + return; + env.tree = transTypes.translateTopLevelClass(env.tree, localMake); - if (errorCount() != 0) + if (shouldStop(CompileState.LOWER)) return; if (sourceOutput) { @@ -1285,7 +1314,7 @@ //translate out inner classes List cdefs = lower.translateTopLevelClass(env, env.tree, localMake); - if (errorCount() != 0) + if (shouldStop(CompileState.LOWER)) return; //generate code for each class @@ -1310,6 +1339,9 @@ } public void generate(Queue, JCClassDecl>> queue, Queue results) { + if (shouldStop(CompileState.GENERATE)) + return; + boolean usePrintSource = (stubOutput || sourceOutput || printFlat); for (Pair, JCClassDecl> x: queue) { @@ -1317,7 +1349,7 @@ JCClassDecl cdef = x.snd; if (verboseCompilePolicy) { - log.printLines(log.noticeWriter, "[generate " + printNote("[generate " + (usePrintSource ? " source" : "code") + " " + cdef.sym + "]"); } @@ -1371,6 +1403,7 @@ JCClassDecl removeMethodBodies(JCClassDecl cdef) { final boolean isInterface = (cdef.mods.flags & Flags.INTERFACE) != 0; class MethodBodyRemover extends TreeTranslator { + @Override public void visitMethodDef(JCMethodDecl tree) { tree.mods.flags &= ~Flags.SYNCHRONIZED; for (JCVariableDecl vd : tree.params) @@ -1378,11 +1411,13 @@ tree.body = null; super.visitMethodDef(tree); } + @Override public void visitVarDef(JCVariableDecl tree) { if (tree.init != null && tree.init.type.constValue() == null) tree.init = null; super.visitVarDef(tree); } + @Override public void visitClassDef(JCClassDecl tree) { ListBuffer newdefs = lb(); for (List it = tree.defs; it.tail != null; it = it.tail) { @@ -1469,12 +1504,16 @@ } } + protected void printNote(String lines) { + Log.printLines(log.noticeWriter, lines); + } + /** Output for "-verbose" option. * @param key The key to look up the correct internationalized string. * @param arg An argument for substitution into the output string. */ protected void printVerbose(String key, Object arg) { - Log.printLines(log.noticeWriter, log.getLocalizedString("verbose." + key, arg)); + Log.printLines(log.noticeWriter, Log.getLocalizedString("verbose." + key, arg)); } /** Print numbers of errors and warnings. @@ -1483,9 +1522,9 @@ if (count != 0) { String text; if (count == 1) - text = log.getLocalizedString("count." + kind, String.valueOf(count)); + text = Log.getLocalizedString("count." + kind, String.valueOf(count)); else - text = log.getLocalizedString("count." + kind + ".plural", String.valueOf(count)); + text = Log.getLocalizedString("count." + kind + ".plural", String.valueOf(count)); Log.printLines(log.errWriter, text); log.errWriter.flush(); } diff -r c27d5e6924b2 -r c8b275d62d6b langtools/src/share/classes/com/sun/tools/javac/resources/legacy.properties --- a/langtools/src/share/classes/com/sun/tools/javac/resources/legacy.properties Wed Jul 05 16:50:37 2017 +0200 +++ b/langtools/src/share/classes/com/sun/tools/javac/resources/legacy.properties Wed Jul 05 16:51:11 2017 +0200 @@ -24,6 +24,7 @@ # com.sun.accessibility.internal.resources = tiger legacy +com.sun.awt = tiger legacy com.sun.beans = tiger legacy com.sun.corba.se.impl.activation = tiger legacy com.sun.corba.se.impl.copyobject = tiger legacy diff -r c27d5e6924b2 -r c8b275d62d6b langtools/src/share/classes/com/sun/tools/javap/CodeWriter.java --- a/langtools/src/share/classes/com/sun/tools/javap/CodeWriter.java Wed Jul 05 16:50:37 2017 +0200 +++ b/langtools/src/share/classes/com/sun/tools/javap/CodeWriter.java Wed Jul 05 16:51:11 2017 +0200 @@ -30,9 +30,12 @@ import com.sun.tools.classfile.ConstantPool; import com.sun.tools.classfile.ConstantPoolException; import com.sun.tools.classfile.DescriptorException; +import com.sun.tools.classfile.Instruction; +import com.sun.tools.classfile.Instruction.TypeKind; import com.sun.tools.classfile.Method; +import com.sun.tools.classfile.Opcode; -import static com.sun.tools.classfile.OpCodes.*; +//import static com.sun.tools.classfile.OpCodes.*; /* * Write the contents of a Code attribute. @@ -87,218 +90,92 @@ } public void writeInstrs(Code_attribute attr) { - try { - for (int pc = 0; pc < attr.code_length;) { - print(" " + pc + ":\t"); - pc += writeInstr(attr, pc); - println(); + for (Instruction instr: attr.getInstructions()) { + try { + writeInstr(instr); + } catch (ArrayIndexOutOfBoundsException e) { + println(report("error at or after byte " + instr.getPC())); + break; } - } catch (Code_attribute.InvalidIndex e) { - println(report(e)); } } - public int writeInstr(Code_attribute attr, int pc) - throws Code_attribute.InvalidIndex { - String lP = ""; - int opcode = attr.getUnsignedByte(pc); - int opcode2; - String mnem; - switch (opcode) { - case opc_nonpriv: - case opc_priv: { - opcode2 = attr.getUnsignedByte(pc + 1); - mnem = opcName((opcode << 8) + opcode2); - if (mnem == null) { - mnem = opcName(opcode) + " " + opcode2; - } - print(mnem); - return 2; - } - case opc_wide: { - opcode2 = attr.getUnsignedByte(pc + 1); - mnem = opcName((opcode << 8) + opcode2); - if (mnem == null) { - print("bytecode " + opcode); - return 1; - } - print(mnem + " " + attr.getUnsignedShort(pc + 2)); - if (opcode2 == opc_iinc) { - print(", " + attr.getShort(pc + 4)); - return 6; - } - return 4; - } + public void writeInstr(Instruction instr) { + print(" " + instr.getPC() + ":\t"); + print(instr.getMnemonic()); + instr.accept(instructionPrinter, null); + println(); + } + // where + Instruction.KindVisitor instructionPrinter = + new Instruction.KindVisitor() { + + public Void visitNoOperands(Instruction instr, Void p) { + return null; } - mnem = opcName(opcode); - if (mnem == null) { - print("bytecode " + opcode); - return 1; + + public Void visitArrayType(Instruction instr, TypeKind kind, Void p) { + print(" " + kind.name); + return null; + } + + public Void visitBranch(Instruction instr, int offset, Void p) { + print("\t" + (instr.getPC() + offset)); + return null; } - if (opcode > opc_jsr_w) { - print("bytecode " + opcode); - return 1; + + public Void visitConstantPoolRef(Instruction instr, int index, Void p) { + print("\t#" + index + "; //"); + printConstant(index); + return null; + } + + public Void visitConstantPoolRefAndValue(Instruction instr, int index, int value, Void p) { + print("\t#" + index + ", " + value + "; //"); + printConstant(index); + return null; } - print(opcName(opcode)); - switch (opcode) { - case opc_aload: - case opc_astore: - case opc_fload: - case opc_fstore: - case opc_iload: - case opc_istore: - case opc_lload: - case opc_lstore: - case opc_dload: - case opc_dstore: - case opc_ret: - print("\t" + attr.getUnsignedByte(pc + 1)); - return 2; - case opc_iinc: - print("\t" + attr.getUnsignedByte(pc + 1) + ", " + attr.getByte(pc + 2)); - return 3; - case opc_tableswitch: - { - int tb = align(pc + 1); - int default_skip = attr.getInt(tb); - int low = attr.getInt(tb + 4); - int high = attr.getInt(tb + 8); - int count = high - low; - print("{ //" + low + " to " + high); - for (int i = 0; i <= count; i++) { - print("\n\t\t" + (i + low) + ": " + lP + (pc + attr.getInt(tb + 12 + 4 * i)) + ";"); - } - print("\n\t\tdefault: " + lP + (default_skip + pc) + " }"); - return tb - pc + 16 + count * 4; - } - case opc_lookupswitch: - { - int tb = align(pc + 1); - int default_skip = attr.getInt(tb); - int npairs = attr.getInt(tb + 4); - print("{ //" + npairs); - for (int i = 1; i <= npairs; i++) { - print("\n\t\t" + attr.getInt(tb + i * 8) + ": " + lP + (pc + attr.getInt(tb + 4 + i * 8)) + ";"); - } - print("\n\t\tdefault: " + lP + (default_skip + pc) + " }"); - return tb - pc + (npairs + 1) * 8; - } - case opc_newarray: - int type = attr.getUnsignedByte(pc + 1); - switch (type) { - case T_BOOLEAN: - print(" boolean"); - break; - case T_BYTE: - print(" byte"); - break; - case T_CHAR: - print(" char"); - break; - case T_SHORT: - print(" short"); - break; - case T_INT: - print(" int"); - break; - case T_LONG: - print(" long"); - break; - case T_FLOAT: - print(" float"); - break; - case T_DOUBLE: - print(" double"); - break; - case T_CLASS: - print(" class"); - break; - default: - print(" BOGUS TYPE:" + type); - } - return 2; - case opc_anewarray: - { - int index = attr.getUnsignedShort(pc + 1); - print("\t#" + index + "; //"); - printConstant(index); - return 3; - } - case opc_sipush: - print("\t" + attr.getShort(pc + 1)); - return 3; - case opc_bipush: - print("\t" + attr.getByte(pc + 1)); - return 2; - case opc_ldc: - { - int index = attr.getUnsignedByte(pc + 1); - print("\t#" + index + "; //"); - printConstant(index); - return 2; - } - case opc_ldc_w: - case opc_ldc2_w: - case opc_instanceof: - case opc_checkcast: - case opc_new: - case opc_putstatic: - case opc_getstatic: - case opc_putfield: - case opc_getfield: - case opc_invokevirtual: - case opc_invokespecial: - case opc_invokestatic: - { - int index = attr.getUnsignedShort(pc + 1); - print("\t#" + index + "; //"); - printConstant(index); - return 3; - } - case opc_invokeinterface: - { - int index = attr.getUnsignedShort(pc + 1); - int nargs = attr.getUnsignedByte(pc + 3); - print("\t#" + index + ", " + nargs + "; //"); - printConstant(index); - return 5; - } - case opc_multianewarray: - { - int index = attr.getUnsignedShort(pc + 1); - int dimensions = attr.getUnsignedByte(pc + 3); - print("\t#" + index + ", " + dimensions + "; //"); - printConstant(index); - return 4; - } - case opc_jsr: - case opc_goto: - case opc_ifeq: - case opc_ifge: - case opc_ifgt: - case opc_ifle: - case opc_iflt: - case opc_ifne: - case opc_if_icmpeq: - case opc_if_icmpne: - case opc_if_icmpge: - case opc_if_icmpgt: - case opc_if_icmple: - case opc_if_icmplt: - case opc_if_acmpeq: - case opc_if_acmpne: - case opc_ifnull: - case opc_ifnonnull: - print("\t" + lP + (pc + attr.getShort(pc + 1))); - return 3; - case opc_jsr_w: - case opc_goto_w: - print("\t" + lP + (pc + attr.getInt(pc + 1))); - return 5; - default: - return 1; + + public Void visitLocal(Instruction instr, int index, Void p) { + print("\t" + index); + return null; + } + + public Void visitLocalAndValue(Instruction instr, int index, int value, Void p) { + print("\t" + index + ", " + value); + return null; + } + + public Void visitLookupSwitch(Instruction instr, int default_, int npairs, int[] matches, int[] offsets) { + int pc = instr.getPC(); + print("{ //" + npairs); + for (int i = 0; i < npairs; i++) { + print("\n\t\t" + matches[i] + ": " + (pc + offsets[i]) + ";"); + } + print("\n\t\tdefault: " + (pc + default_) + " }"); + return null; } - } + + public Void visitTableSwitch(Instruction instr, int default_, int low, int high, int[] offsets) { + int pc = instr.getPC(); + print("{ //" + low + " to " + high); + for (int i = 0; i < offsets.length; i++) { + print("\n\t\t" + (low + i) + ": " + (pc + offsets[i]) + ";"); + } + print("\n\t\tdefault: " + (pc + default_) + " }"); + return null; + } + + public Void visitValue(Instruction instr, int value, Void p) { + print("\t" + value); + return null; + } + + public Void visitUnknown(Instruction instr, Void p) { + return null; + } + }; + public void writeExceptionTable(Code_attribute attr) { if (attr.exception_table_langth > 0) { diff -r c27d5e6924b2 -r c8b275d62d6b langtools/test/tools/javac/OverrideChecks/6400189/T6400189a.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/OverrideChecks/6400189/T6400189a.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,38 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6400189 + * @summary raw types and inference + * @author mcimadamore + * @compile/fail/ref=T6400189a.out T6400189a.java -Xlint:unchecked -XDrawDiagnostics + */ + +import java.lang.reflect.Constructor; +import java.lang.annotation.Documented; + +class T6400189a { + Constructor c = null; + Documented d = c.getAnnotation(Documented.class); +} diff -r c27d5e6924b2 -r c8b275d62d6b langtools/test/tools/javac/OverrideChecks/6400189/T6400189a.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/OverrideChecks/6400189/T6400189a.out Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,4 @@ +T6400189a.java:37:35: compiler.warn.unchecked.call.mbr.of.raw.type: getAnnotation(java.lang.Class), java.lang.reflect.Constructor +T6400189a.java:37:35: compiler.err.prob.found.req: (compiler.misc.incompatible.types), java.lang.annotation.Annotation, java.lang.annotation.Documented +1 error +1 warning diff -r c27d5e6924b2 -r c8b275d62d6b langtools/test/tools/javac/OverrideChecks/6400189/T6400189b.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/OverrideChecks/6400189/T6400189b.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,49 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6400189 + * @summary raw types and inference + * @author mcimadamore + * @compile/fail/ref=T6400189b.out T6400189b.java -Xlint:unchecked -XDrawDiagnostics + */ + +class T6400189b { + + static class A { + T m(T6400189b x) { + return null; + } + } + + static class B extends A { + T m(T6400189b x) { + return null; + } + } + + void test(B b) { + Integer i = b.m(new T6400189b()); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b langtools/test/tools/javac/OverrideChecks/6400189/T6400189b.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/OverrideChecks/6400189/T6400189b.out Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,4 @@ +T6400189b.java:47:24: compiler.warn.unchecked.call.mbr.of.raw.type: m(T6400189b), T6400189b.B +T6400189b.java:47:24: compiler.err.prob.found.req: (compiler.misc.incompatible.types), java.lang.Object, java.lang.Integer +1 error +1 warning diff -r c27d5e6924b2 -r c8b275d62d6b langtools/test/tools/javac/OverrideChecks/6400189/T6400189c.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/OverrideChecks/6400189/T6400189c.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,45 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6400189 + * @summary raw types and inference + * @author mcimadamore + * @compile T6400189c.java + */ + +class T6400189c { + + static class A { + T m(T6400189c x) { + return null; + } + } + + static class B extends A {} + + void test(B b) { + Integer i = b.m(new T6400189c()); + } +} diff -r c27d5e6924b2 -r c8b275d62d6b langtools/test/tools/javac/OverrideChecks/6400189/T6400189d.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/OverrideChecks/6400189/T6400189d.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,53 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6400189 + * @summary raw types and inference + * @author mcimadamore + * @compile T6400189d.java + */ + +import java.util.Iterator; + +class T6400189c { + + interface A extends Iterable { + Iterator iterator(); + } + + interface A2 extends A { + Iterator iterator(); + } + + static abstract class B implements A { + public abstract Iterator iterator(); + } + + static abstract class C extends B implements A2 { + Iterator test() { + return iterator(); + } + } +} diff -r c27d5e6924b2 -r c8b275d62d6b langtools/test/tools/javac/boxing/T6816548.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/boxing/T6816548.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,66 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6816548 + * @summary Uninitialized register when performing casting + auto(un)boxing + * @author mcimadamore + */ +public class T6816548 { + + public static void main(String[] args) { + testInt(); + testShort(); + testByte(); + testChar(); + } + + public static void testInt() { + final int fi = 0; + Byte b = fi; + Short s = fi; + Character c = fi; + } + + public static void testShort() { + final short fs = 0; + Byte b = fs; + Short s = fs; + Character c = fs; + } + + public static void testByte() { + final byte fb = 0; + Byte b = fb; + Short s = fb; + Character c = fb; + } + + public static void testChar() { + final char fc = '0'; + Byte b = fc; + Short s = fc; + Character c = fc; + } +} diff -r c27d5e6924b2 -r c8b275d62d6b langtools/test/tools/javac/generics/6182950/T6182950a.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/generics/6182950/T6182950a.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,36 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6182950 + * @summary methods clash algorithm should not depend on return type + * @author mcimadamore + * @compile/fail/ref=T6182950a.out -XDrawDiagnostics T6182950a.java + */ +import java.util.List; + +class T6182950a { + int m(List l) {return 0;} + double m(List l) {return 0;} +} diff -r c27d5e6924b2 -r c8b275d62d6b langtools/test/tools/javac/generics/6182950/T6182950a.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/generics/6182950/T6182950a.out Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,2 @@ +T6182950a.java:35:12: compiler.err.name.clash.same.erasure: m(java.util.List), m(java.util.List) +1 error diff -r c27d5e6924b2 -r c8b275d62d6b langtools/test/tools/javac/generics/6182950/T6182950b.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/generics/6182950/T6182950b.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,40 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6182950 + * @summary methods clash algorithm should not depend on return type + * @author mcimadamore + * @compile/fail/ref=T6182950b.out -XDrawDiagnostics T6182950b.java + */ +import java.util.List; + +class T6182950b { + static class A { + int m(List l) {return 0;} + } + static class B extends A { + double m(List l) {return 0;} + } +} diff -r c27d5e6924b2 -r c8b275d62d6b langtools/test/tools/javac/generics/6182950/T6182950b.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/generics/6182950/T6182950b.out Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,2 @@ +T6182950b.java:38:16: compiler.err.name.clash.same.erasure.no.override: m(java.util.List), T6182950b.B, m(java.util.List), T6182950b.A +1 error diff -r c27d5e6924b2 -r c8b275d62d6b langtools/test/tools/javac/generics/6182950/T6182950c.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/generics/6182950/T6182950c.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,44 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +/* + * @test + * @bug 6182950 + * @summary methods clash algorithm should not depend on return type + * @author mcimadamore + * @compile T6182950c.java + */ + +class T6182950c { + static abstract class A { + abstract Object m(X x); + } + + static abstract class B extends A { + Number m(X x) {return 0;} + } + + final static class C extends B { + Integer m(X x) {return 0;} + } +} diff -r c27d5e6924b2 -r c8b275d62d6b langtools/test/tools/javac/policy/test3/A.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/policy/test3/A.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,10 @@ +class A { + void m1() { + System.err.println("hello"); + 0 // syntax error + System.err.println("world"); + } + + void m2() { + } +} diff -r c27d5e6924b2 -r c8b275d62d6b langtools/test/tools/javac/policy/test3/Test.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/policy/test3/Test.java Wed Jul 05 16:51:11 2017 +0200 @@ -0,0 +1,169 @@ +/* + * Copyright 2009 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + + +/* @test + * @bug 6813059 + * @summary + */ + +import java.io.*; +import java.util.*; + +// Simple test of -XDshouldStopPolicy. +// For each of the permissable values, we compile a file with an error in it, +// then using -XDverboseCompilePolicy we check that the compilation gets as +// far as expected, but no further. + +public class Test { + enum ShouldStopPolicy { + BLANK(false, null, "attr"), + PROCESS(true, null, "attr"), + ATTR(true, "attr", "flow"), + FLOW(true, "flow", "desugar"), + TRANSTYPES(true, "desugar", "generate"), + LOWER(true, "desugar", "generate"), + GENERATE(true, "generate", null); + ShouldStopPolicy(boolean needOption, String expect, String dontExpect) { + this.needOption = needOption; + this.expect = expect; + this.dontExpect = dontExpect; + } + boolean needOption; + String expect; + String dontExpect; + } + + enum CompilePolicy { + BYFILE, + BYTODO + } + + public static void main(String... args) throws Exception { + new Test().run(); + } + + public void run() throws Exception { + for (CompilePolicy cp: CompilePolicy.values()) { + for (ShouldStopPolicy ssp: ShouldStopPolicy.values()) { + test(cp, ssp); + } + } + + if (errors > 0) + throw new Exception(errors + " errors occurred"); + } + + public void test(CompilePolicy cp, ShouldStopPolicy ssp) { + System.err.println(); + System.err.println("test " + cp + " " + ssp); + List args = new ArrayList(); + args.add("-XDverboseCompilePolicy"); + args.add("-XDcompilePolicy=" + cp.toString().toLowerCase()); + args.add("-d"); + args.add("."); + if (ssp.needOption) + args.add("-XDshouldStopPolicy=" + ssp); + args.add(new File(System.getProperty("test.src", "."), "A.java").getPath()); + + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + System.err.println("compile " + args); + int rc = com.sun.tools.javac.Main.compile(args.toArray(new String[args.size()]), pw); + if (rc == 0) + throw new Error("compilation succeeded unexpectedly"); + //System.err.println(sw); + + // The following is a workaround for the current javac implementation, + // that in bytodo mode, it will still attribute files after syntax errors. + // Changing that behavior may surprise existing users, so for now, we + // work around it. + if (cp == CompilePolicy.BYTODO && ssp == ShouldStopPolicy.PROCESS) + ssp = ShouldStopPolicy.ATTR; + + boolean foundExpected = (ssp.expect == null); + String[] lines = sw.toString().split("\n"); + for (String line: lines) { + if (ssp.expect != null && line.startsWith("[" + ssp.expect)) + foundExpected = true; + if (ssp.dontExpect != null && line.startsWith("[" + ssp.dontExpect)) { + error("Unexpected output: " + ssp.dontExpect + "\n" + sw); + return; + } + } + + if (!foundExpected) + error("Expected output not found: " + ssp.expect + "\n" + sw); + } + + void error(String message) { + System.err.println(message); + errors++; + } + + int errors; +} + + + + + + + + + + + + +// These tests test the ability of the compiler to continue in the face of +// errors, accordining to the shouldStopPolicy + +/* @ test /nodynamiccopyright/ + * @bug 6813059 + * @summary + * @compile/fail/ref=flow.out -XDrawDiagnostics -XDcompilePolicy=byfile -XDverboseCompilePolicy -XDshouldStopPolicy=FLOW Test.java + + * @compile/fail/ref=default.out -XDrawDiagnostics -XDcompilePolicy=byfile -XDverboseCompilePolicy Test.java + * @compile/fail/ref=enter.out -XDrawDiagnostics -XDcompilePolicy=byfile -XDverboseCompilePolicy -XDshouldStopPolicy=ENTER Test.java + * @compile/fail/ref=attr.out -XDrawDiagnostics -XDcompilePolicy=byfile -XDverboseCompilePolicy -XDshouldStopPolicy=ATTR Test.java + * @compile/fail/ref=transtypes.out -XDrawDiagnostics -XDcompilePolicy=byfile -XDverboseCompilePolicy -XDshouldStopPolicy=TRANSTYPES Test.java + * @compile/fail/ref=lower.out -XDrawDiagnostics -XDcompilePolicy=byfile -XDverboseCompilePolicy -XDshouldStopPolicy=LOWER Test.java + * @compile/fail/ref=generate.out -XDrawDiagnostics -XDcompilePolicy=byfile -XDverboseCompilePolicy -XDshouldStopPolicy=GENERATE Test.java + */ + +/* +class Test { + void m1() { + System.err.println("hello"); + 0 // syntax error + System.err.println("world"); + } + + void m2() { + } +} + +class Test2 { +} +*/ +