--- a/jdk/.hgtags Mon May 09 12:55:03 2016 +0300
+++ b/jdk/.hgtags Mon May 09 08:50:20 2016 -0700
@@ -359,3 +359,4 @@
bb8379287f3736f38c52b2d1418784e2592461d1 jdk-9+114
35225b837d66582037eeadeb471c13235dfd793d jdk-9+115
baeb5edb38939cdb78ae0ac6f4fd368465cbf188 jdk-9+116
+4da0f73ce03aaf245b92cc040cc0ab0e3fa54dc2 jdk-9+117
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/GenerateClasslist.gmk Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,74 @@
+#
+# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation. Oracle designates this
+# particular file as subject to the "Classpath" exception as provided
+# by Oracle in the LICENSE file that accompanied this code.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+################################################################################
+# Generate classlist
+################################################################################
+
+default: all
+
+include $(SPEC)
+include MakeBase.gmk
+include Tools.gmk
+include JarArchive.gmk
+
+################################################################################
+# Create a jar with our generator class. Using a jar is intentional since it
+# will load more classes
+
+$(eval $(call SetupJarArchive, CLASSLIST_JAR, \
+ SRCS := $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes, \
+ INCLUDES := build/tools/classlist, \
+ JAR := $(SUPPORT_OUTPUTDIR)/classlist.jar, \
+))
+
+TARGETS += $(CLASSLIST_JAR)
+
+################################################################################
+
+CLASSLIST_FILE := $(SUPPORT_OUTPUTDIR)/classlist/classlist
+
+# If an external buildjdk has been supplied, we don't build a separate interim
+# image, so just use the external build jdk instead.
+ifeq ($(EXTERNAL_BUILDJDK), true)
+ INTERIM_IMAGE_DIR := $(BUILD_JDK)
+endif
+
+$(CLASSLIST_FILE): $(INTERIM_IMAGE_DIR)/bin/java$(EXE_SUFFIX) $(CLASSLIST_JAR)
+ $(call MakeDir, $(@D))
+ $(call LogInfo, Generating lib/classlist)
+ $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java -XX:DumpLoadedClassList=$@.tmp \
+ -cp $(SUPPORT_OUTPUTDIR)/classlist.jar \
+ build.tools.classlist.HelloClasslist $(LOG_DEBUG) 2>&1
+ # Filter out generated classes, remove after JDK-8149977
+ $(FIXPATH) $(INTERIM_IMAGE_DIR)/bin/java -XX:DumpLoadedClassList=$@ \
+ -Xshare:dump -XX:SharedClassListFile=$@.tmp $(LOG_DEBUG) 2>&1
+ $(RM) $@.tmp
+
+TARGETS += $(CLASSLIST_FILE)
+
+################################################################################
+
+all: $(TARGETS)
--- a/jdk/make/data/classlist/classlist.aix Mon May 09 12:55:03 2016 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2406 +0,0 @@
-java/lang/Object
-java/lang/String
-java/io/Serializable
-java/lang/Comparable
-java/lang/CharSequence
-java/lang/Class
-java/lang/reflect/GenericDeclaration
-java/lang/reflect/Type
-java/lang/reflect/AnnotatedElement
-java/lang/Cloneable
-java/lang/ClassLoader
-java/lang/System
-java/lang/Throwable
-java/lang/Error
-java/lang/ThreadDeath
-java/lang/Exception
-java/lang/RuntimeException
-java/security/ProtectionDomain
-java/security/AccessControlContext
-java/lang/ClassNotFoundException
-java/lang/NoClassDefFoundError
-java/lang/LinkageError
-java/lang/ClassCastException
-java/lang/ArrayStoreException
-java/lang/VirtualMachineError
-java/lang/OutOfMemoryError
-java/lang/StackOverflowError
-java/lang/IllegalMonitorStateException
-java/lang/ref/Reference
-java/lang/ref/SoftReference
-java/lang/ref/WeakReference
-java/lang/ref/FinalReference
-java/lang/ref/PhantomReference
-java/lang/ref/Finalizer
-java/lang/Thread
-java/lang/Runnable
-java/lang/ThreadGroup
-java/lang/Thread$UncaughtExceptionHandler
-java/util/Properties
-java/util/Hashtable
-java/util/Map
-java/util/Dictionary
-java/lang/reflect/AccessibleObject
-java/lang/reflect/Field
-java/lang/reflect/Member
-java/lang/reflect/Method
-java/lang/reflect/Constructor
-sun/reflect/MagicAccessorImpl
-sun/reflect/MethodAccessorImpl
-sun/reflect/MethodAccessor
-sun/reflect/ConstructorAccessorImpl
-sun/reflect/ConstructorAccessor
-sun/reflect/DelegatingClassLoader
-sun/reflect/ConstantPool
-sun/reflect/UnsafeStaticFieldAccessorImpl
-sun/reflect/UnsafeFieldAccessorImpl
-sun/reflect/FieldAccessorImpl
-sun/reflect/FieldAccessor
-java/util/Vector
-java/util/List
-java/util/Collection
-java/lang/Iterable
-java/util/RandomAccess
-java/util/AbstractList
-java/util/AbstractCollection
-java/lang/StringBuffer
-java/lang/AbstractStringBuilder
-java/lang/Appendable
-java/lang/StackTraceElement
-java/nio/Buffer
-java/lang/Boolean
-java/lang/Character
-java/lang/Float
-java/lang/Number
-java/lang/Double
-java/lang/Byte
-java/lang/Short
-java/lang/Integer
-java/lang/Long
-java/lang/NullPointerException
-java/lang/ArithmeticException
-java/io/ObjectStreamField
-java/lang/String$CaseInsensitiveComparator
-java/util/Comparator
-java/lang/RuntimePermission
-java/security/BasicPermission
-java/security/Permission
-java/security/Guard
-sun/misc/SoftCache
-java/util/AbstractMap
-java/lang/ref/ReferenceQueue
-java/lang/ref/ReferenceQueue$Null
-java/lang/ref/ReferenceQueue$Lock
-java/util/HashMap
-java/lang/annotation/Annotation
-java/util/HashMap$Entry
-java/util/Map$Entry
-java/security/AccessController
-java/lang/reflect/ReflectPermission
-sun/reflect/ReflectionFactory$GetReflectionFactoryAction
-java/security/PrivilegedAction
-java/util/Stack
-sun/reflect/ReflectionFactory
-java/lang/ref/Reference$Lock
-java/lang/ref/Reference$ReferenceHandler
-java/lang/ref/Finalizer$FinalizerThread
-java/util/Hashtable$EmptyEnumerator
-java/util/Enumeration
-java/util/Hashtable$EmptyIterator
-java/util/Iterator
-java/util/Hashtable$Entry
-java/nio/charset/Charset
-sun/nio/cs/StandardCharsets
-sun/nio/cs/FastCharsetProvider
-java/nio/charset/spi/CharsetProvider
-sun/nio/cs/StandardCharsets$Aliases
-sun/util/PreHashedMap
-sun/nio/cs/StandardCharsets$Classes
-sun/nio/cs/StandardCharsets$Cache
-java/lang/ThreadLocal
-java/util/concurrent/atomic/AtomicInteger
-sun/misc/Unsafe
-java/lang/NoSuchMethodError
-java/lang/IncompatibleClassChangeError
-sun/reflect/Reflection
-java/util/Collections
-java/util/Collections$EmptySet
-java/util/AbstractSet
-java/util/Set
-java/util/Collections$EmptyList
-java/util/Collections$EmptyMap
-java/util/Collections$ReverseComparator
-java/util/Collections$SynchronizedMap
-java/lang/Class$3
-java/lang/reflect/Modifier
-java/lang/reflect/ReflectAccess
-sun/reflect/LangReflectAccess
-java/util/Arrays
-java/lang/Math
-sun/nio/cs/US_ASCII
-sun/nio/cs/HistoricallyNamedCharset
-sun/misc/VM
-java/lang/StringCoding
-java/lang/ThreadLocal$ThreadLocalMap
-java/lang/ThreadLocal$ThreadLocalMap$Entry
-java/lang/StringCoding$StringDecoder
-sun/nio/cs/US_ASCII$Decoder
-java/nio/charset/CharsetDecoder
-java/nio/charset/CodingErrorAction
-java/nio/ByteBuffer
-java/nio/HeapByteBuffer
-java/nio/Bits
-java/nio/ByteOrder
-java/nio/CharBuffer
-java/lang/Readable
-java/nio/HeapCharBuffer
-java/nio/charset/CoderResult
-java/nio/charset/CoderResult$1
-java/nio/charset/CoderResult$Cache
-java/nio/charset/CoderResult$2
-sun/misc/Version
-java/io/FileInputStream
-java/io/InputStream
-java/io/Closeable
-java/io/FileDescriptor
-java/io/FileOutputStream
-java/io/OutputStream
-java/io/Flushable
-java/io/BufferedInputStream
-java/io/FilterInputStream
-java/util/concurrent/atomic/AtomicReferenceFieldUpdater
-java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
-sun/reflect/misc/ReflectUtil
-java/io/PrintStream
-java/io/FilterOutputStream
-java/io/BufferedOutputStream
-java/io/OutputStreamWriter
-java/io/Writer
-sun/nio/cs/StreamEncoder
-sun/security/action/GetPropertyAction
-sun/nio/cs/US_ASCII$Encoder
-java/nio/charset/CharsetEncoder
-sun/nio/cs/Surrogate$Parser
-sun/nio/cs/Surrogate
-java/io/BufferedWriter
-java/lang/Runtime
-java/io/File
-java/io/FileSystem
-java/io/UnixFileSystem
-java/io/ExpiringCache
-java/io/ExpiringCache$1
-java/util/LinkedHashMap
-java/util/LinkedHashMap$Entry
-java/lang/StringBuilder
-java/io/File$1
-sun/misc/JavaIODeleteOnExitAccess
-sun/misc/SharedSecrets
-java/lang/ClassLoader$3
-java/lang/StringCoding$StringEncoder
-java/io/ExpiringCache$Entry
-java/lang/ClassLoader$NativeLibrary
-java/lang/Terminator
-java/lang/Terminator$1
-sun/misc/SignalHandler
-sun/misc/Signal
-sun/misc/NativeSignalHandler
-java/io/Console
-java/io/Console$1
-sun/misc/JavaIOAccess
-java/io/Console$1$1
-java/lang/Shutdown
-java/util/ArrayList
-java/lang/Shutdown$Lock
-java/lang/ApplicationShutdownHooks
-java/util/IdentityHashMap
-sun/misc/OSEnvironment
-java/lang/System$2
-sun/misc/JavaLangAccess
-java/lang/Compiler
-java/lang/Compiler$1
-sun/misc/Launcher
-sun/misc/Launcher$Factory
-java/net/URLStreamHandlerFactory
-sun/misc/Launcher$ExtClassLoader
-java/net/URLClassLoader
-java/security/SecureClassLoader
-sun/security/util/Debug
-java/net/URLClassLoader$7
-sun/misc/JavaNetAccess
-java/util/StringTokenizer
-sun/misc/Launcher$ExtClassLoader$1
-java/security/PrivilegedExceptionAction
-sun/misc/MetaIndex
-java/io/BufferedReader
-java/io/Reader
-java/io/FileReader
-java/io/InputStreamReader
-sun/nio/cs/StreamDecoder
-java/lang/reflect/Array
-sun/net/www/ParseUtil
-java/util/BitSet
-java/io/ObjectStreamClass
-java/net/URL
-java/util/Locale
-java/util/concurrent/ConcurrentHashMap
-java/util/concurrent/ConcurrentMap
-java/util/concurrent/ConcurrentHashMap$Segment
-java/util/concurrent/locks/ReentrantLock
-java/util/concurrent/locks/Lock
-java/util/concurrent/locks/ReentrantLock$NonfairSync
-java/util/concurrent/locks/ReentrantLock$Sync
-java/util/concurrent/locks/AbstractQueuedSynchronizer
-java/util/concurrent/locks/AbstractOwnableSynchronizer
-java/util/concurrent/locks/AbstractQueuedSynchronizer$Node
-java/util/concurrent/ConcurrentHashMap$HashEntry
-java/lang/CharacterDataLatin1
-java/net/Parts
-sun/net/www/protocol/file/Handler
-java/net/URLStreamHandler
-java/lang/Class$1
-sun/reflect/ReflectionFactory$1
-sun/reflect/NativeConstructorAccessorImpl
-sun/reflect/DelegatingConstructorAccessorImpl
-java/util/HashSet
-sun/misc/URLClassPath
-sun/net/www/protocol/jar/Handler
-sun/misc/Launcher$AppClassLoader
-sun/misc/Launcher$AppClassLoader$1
-java/lang/SystemClassLoaderAction
-java/net/URLClassLoader$1
-sun/misc/URLClassPath$3
-sun/misc/URLClassPath$JarLoader
-sun/misc/URLClassPath$Loader
-java/security/PrivilegedActionException
-sun/misc/URLClassPath$FileLoader
-sun/misc/URLClassPath$FileLoader$1
-sun/misc/Resource
-sun/nio/ByteBuffered
-java/security/CodeSource
-java/security/Permissions
-java/security/PermissionCollection
-sun/net/www/protocol/file/FileURLConnection
-sun/net/www/URLConnection
-java/net/URLConnection
-java/net/UnknownContentHandler
-java/net/ContentHandler
-sun/net/www/MessageHeader
-java/io/FilePermission
-java/io/FilePermission$1
-sun/security/provider/PolicyFile
-java/security/Policy
-java/security/Policy$UnsupportedEmptyCollection
-java/io/FilePermissionCollection
-java/security/AllPermission
-java/security/UnresolvedPermission
-java/security/BasicPermissionCollection
-java/security/Principal
-java/security/cert/Certificate
-java/util/AbstractList$Itr
-java/util/IdentityHashMap$KeySet
-java/util/IdentityHashMap$KeyIterator
-java/util/IdentityHashMap$IdentityHashMapIterator
-java/io/DeleteOnExitHook
-java/util/LinkedHashSet
-java/util/HashMap$KeySet
-java/util/LinkedHashMap$KeyIterator
-java/util/LinkedHashMap$LinkedHashIterator
-java/awt/Frame
-java/awt/MenuContainer
-java/awt/Window
-javax/accessibility/Accessible
-java/awt/Container
-java/awt/Component
-java/awt/image/ImageObserver
-java/lang/InterruptedException
-java/awt/Label
-java/util/logging/Logger
-java/util/logging/Handler
-java/util/logging/Level
-java/util/logging/LogManager
-java/util/logging/LogManager$1
-java/beans/PropertyChangeSupport
-java/util/logging/LogManager$LogNode
-java/util/logging/LoggingPermission
-java/util/logging/LogManager$Cleaner
-java/util/logging/LogManager$RootLogger
-java/util/logging/LogManager$2
-java/util/Properties$LineReader
-java/util/Hashtable$Enumerator
-java/beans/PropertyChangeEvent
-java/util/EventObject
-java/awt/Component$AWTTreeLock
-sun/awt/DebugHelper
-sun/awt/NativeLibLoader
-sun/security/action/LoadLibraryAction
-java/awt/GraphicsEnvironment
-java/awt/GraphicsEnvironment$1
-java/lang/ProcessEnvironment
-java/lang/ProcessEnvironment$Variable
-java/lang/ProcessEnvironment$ExternalData
-java/lang/ProcessEnvironment$Value
-java/lang/ProcessEnvironment$StringEnvironment
-java/util/Collections$UnmodifiableMap
-sun/awt/DebugHelperStub
-java/awt/Toolkit
-java/awt/Toolkit$3
-sun/util/CoreResourceBundleControl
-java/util/ResourceBundle$Control
-java/util/Arrays$ArrayList
-java/util/Collections$UnmodifiableRandomAccessList
-java/util/Collections$UnmodifiableList
-java/util/Collections$UnmodifiableCollection
-java/util/ResourceBundle
-java/util/ResourceBundle$1
-java/util/ResourceBundle$RBClassLoader
-java/util/ResourceBundle$RBClassLoader$1
-java/util/ResourceBundle$CacheKey
-java/util/ResourceBundle$LoaderReference
-java/util/ResourceBundle$CacheKeyReference
-java/util/ResourceBundle$SingleFormatControl
-sun/awt/resources/awt
-java/util/ListResourceBundle
-java/awt/Toolkit$1
-java/io/FileNotFoundException
-java/io/IOException
-java/awt/event/KeyEvent
-java/awt/event/InputEvent
-java/awt/event/ComponentEvent
-java/awt/AWTEvent
-java/awt/event/NativeLibLoader
-java/util/WeakHashMap
-java/util/WeakHashMap$Entry
-java/awt/Component$DummyRequestFocusController
-sun/awt/RequestFocusController
-java/awt/LayoutManager
-java/awt/LightweightDispatcher
-java/awt/event/AWTEventListener
-java/util/EventListener
-java/awt/Dimension
-java/awt/geom/Dimension2D
-java/util/concurrent/atomic/AtomicBoolean
-java/awt/ComponentOrientation
-java/awt/Component$2
-java/lang/NoSuchMethodException
-sun/awt/AppContext
-sun/awt/AppContext$1
-sun/awt/AppContext$2
-sun/awt/MostRecentKeyValue
-java/awt/Cursor
-sun/awt/X11GraphicsEnvironment
-sun/java2d/SunGraphicsEnvironment
-sun/java2d/FontSupport
-sun/awt/DisplayChangedListener
-sun/java2d/SunGraphicsEnvironment$TTFilter
-java/io/FilenameFilter
-sun/java2d/SunGraphicsEnvironment$T1Filter
-sun/awt/X11GraphicsEnvironment$1
-sun/awt/SunToolkit
-sun/awt/WindowClosingSupport
-sun/awt/WindowClosingListener
-sun/awt/ComponentFactory
-sun/awt/InputMethodSupport
-java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
-java/util/concurrent/locks/Condition
-sun/awt/AWTAutoShutdown
-sun/awt/AWTAutoShutdown$PeerMap
-sun/awt/SunToolkit$6
-java/awt/Dialog$ModalExclusionType
-java/lang/Enum
-java/awt/Dialog
-java/awt/Dialog$ModalityType
-java/awt/ModalEventFilter
-java/awt/EventFilter
-sun/reflect/UnsafeFieldAccessorFactory
-sun/reflect/UnsafeQualifiedStaticObjectFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl
-sun/awt/SunDisplayChanger
-sun/java2d/SunGraphicsEnvironment$1
-java/io/StreamTokenizer
-sun/font/FontManager
-sun/font/FileFont
-sun/font/PhysicalFont
-sun/font/Font2D
-sun/font/CompositeFont
-java/util/HashMap$Values
-java/util/HashMap$ValueIterator
-java/util/HashMap$HashIterator
-sun/font/FontManager$1
-java/awt/Font
-java/awt/geom/AffineTransform
-sun/font/AttributeValues
-sun/font/EAttribute
-java/text/AttributedCharacterIterator$Attribute
-java/lang/Class$4
-sun/reflect/NativeMethodAccessorImpl
-sun/reflect/DelegatingMethodAccessorImpl
-java/awt/font/TextAttribute
-java/lang/Integer$IntegerCache
-sun/font/TrueTypeFont
-java/awt/font/FontRenderContext
-java/awt/RenderingHints
-sun/awt/SunHints
-sun/awt/SunHints$Key
-java/awt/RenderingHints$Key
-sun/awt/SunHints$Value
-sun/awt/SunHints$LCDContrastKey
-sun/font/Type1Font
-java/awt/geom/Point2D$Float
-java/awt/geom/Point2D
-sun/font/StrikeMetrics
-java/awt/geom/Rectangle2D$Float
-java/awt/geom/Rectangle2D
-java/awt/geom/RectangularShape
-java/awt/Shape
-java/awt/geom/GeneralPath
-java/awt/geom/Path2D$Float
-java/awt/geom/Path2D
-sun/font/CharToGlyphMapper
-sun/font/PhysicalStrike
-sun/font/FontStrike
-sun/font/GlyphList
-sun/font/StrikeCache
-sun/java2d/Disposer
-sun/java2d/Disposer$1
-sun/font/StrikeCache$1
-sun/font/FontManager$FontRegistrationInfo
-sun/awt/motif/MFontConfiguration
-sun/awt/FontConfiguration
-sun/awt/FontDescriptor
-java/util/Scanner
-java/util/regex/Pattern
-java/util/regex/Pattern$8
-java/util/regex/Pattern$Node
-java/util/regex/Pattern$LastNode
-java/util/regex/Pattern$GroupHead
-java/util/regex/Pattern$CharPropertyNames
-java/util/regex/Pattern$CharPropertyNames$1
-java/util/regex/Pattern$CharPropertyNames$CharPropertyFactory
-java/util/regex/Pattern$CharPropertyNames$2
-java/util/regex/Pattern$CharPropertyNames$5
-java/util/regex/Pattern$CharPropertyNames$3
-java/util/regex/Pattern$CharPropertyNames$6
-java/util/regex/Pattern$CharPropertyNames$CloneableProperty
-java/util/regex/Pattern$CharProperty
-java/util/regex/Pattern$CharPropertyNames$4
-java/util/regex/Pattern$CharPropertyNames$7
-java/util/regex/Pattern$CharPropertyNames$8
-java/util/regex/Pattern$CharPropertyNames$9
-java/util/regex/Pattern$CharPropertyNames$10
-java/util/regex/Pattern$CharPropertyNames$11
-java/util/regex/Pattern$CharPropertyNames$12
-java/util/regex/Pattern$CharPropertyNames$13
-java/util/regex/Pattern$CharPropertyNames$14
-java/util/regex/Pattern$CharPropertyNames$15
-java/util/regex/Pattern$CharPropertyNames$16
-java/util/regex/Pattern$CharPropertyNames$17
-java/util/regex/Pattern$CharPropertyNames$18
-java/util/regex/Pattern$CharPropertyNames$19
-java/util/regex/Pattern$CharPropertyNames$20
-java/util/regex/Pattern$CharPropertyNames$21
-java/util/regex/Pattern$Curly
-java/util/regex/Pattern$Slice
-java/util/regex/Pattern$Begin
-java/util/regex/Pattern$First
-java/util/regex/Pattern$Start
-java/util/regex/Pattern$TreeInfo
-java/util/regex/Pattern$All
-java/util/regex/Pattern$BitClass
-java/util/regex/Pattern$BmpCharProperty
-java/util/regex/Pattern$6
-java/util/regex/Pattern$CharProperty$1
-java/util/regex/Pattern$10
-sun/nio/ch/FileChannelImpl
-java/nio/channels/FileChannel
-java/nio/channels/ByteChannel
-java/nio/channels/ReadableByteChannel
-java/nio/channels/Channel
-java/nio/channels/WritableByteChannel
-java/nio/channels/GatheringByteChannel
-java/nio/channels/ScatteringByteChannel
-java/nio/channels/spi/AbstractInterruptibleChannel
-java/nio/channels/InterruptibleChannel
-sun/nio/ch/Util
-sun/nio/ch/IOUtil
-sun/nio/ch/FileDispatcher
-sun/nio/ch/NativeDispatcher
-sun/nio/ch/Reflect
-java/nio/MappedByteBuffer
-sun/nio/ch/Reflect$1
-sun/nio/ch/NativeThreadSet
-java/nio/channels/Channels
-java/util/Scanner$1
-sun/misc/LRUCache
-java/util/regex/Matcher
-java/util/regex/MatchResult
-java/text/NumberFormat
-java/text/Format
-java/text/spi/NumberFormatProvider
-java/util/spi/LocaleServiceProvider
-sun/util/LocaleServiceProviderPool
-sun/util/LocaleServiceProviderPool$1
-java/util/ServiceLoader
-java/util/ServiceLoader$LazyIterator
-java/util/ServiceLoader$1
-java/util/HashMap$EntrySet
-java/util/LinkedHashMap$EntryIterator
-sun/misc/Launcher$1
-sun/misc/URLClassPath$2
-java/lang/ClassLoader$2
-sun/misc/URLClassPath$1
-java/net/URLClassLoader$3
-sun/misc/CompoundEnumeration
-sun/misc/URLClassPath$JarLoader$1
-sun/misc/FileURLMapper
-java/net/URLClassLoader$3$1
-sun/util/resources/LocaleData
-sun/util/resources/LocaleData$1
-sun/util/resources/LocaleData$LocaleDataResourceBundleControl
-sun/util/LocaleDataMetaInfo
-sun/text/resources/FormatData
-java/util/ResourceBundle$BundleReference
-sun/text/resources/FormatData_en
-sun/text/resources/FormatData_en_US
-java/text/DecimalFormatSymbols
-java/text/spi/DecimalFormatSymbolsProvider
-java/util/Currency
-java/util/Currency$1
-java/util/CurrencyData
-java/util/spi/CurrencyNameProvider
-sun/util/resources/CurrencyNames
-sun/util/resources/LocaleNamesBundle
-sun/util/resources/OpenListResourceBundle
-sun/util/resources/CurrencyNames_en_US
-java/text/DecimalFormat
-java/text/FieldPosition
-java/text/DigitList
-java/math/RoundingMode
-java/util/regex/Pattern$GroupTail
-java/util/regex/Pattern$Ctype
-java/util/regex/Pattern$Ques
-java/util/regex/Pattern$GroupCurly
-java/util/regex/Pattern$5
-java/util/regex/Pattern$Loop
-java/util/regex/Pattern$Prolog
-java/util/regex/Pattern$9
-java/util/regex/Pattern$BranchConn
-java/util/regex/Pattern$Branch
-java/nio/channels/spi/AbstractInterruptibleChannel$1
-sun/nio/ch/Interruptible
-sun/nio/ch/NativeThread
-sun/nio/ch/DirectBuffer
-java/nio/DirectByteBuffer
-java/nio/DirectByteBuffer$Deallocator
-sun/misc/Cleaner
-sun/nio/ch/IOStatus
-java/util/regex/ASCII
-java/io/DataInputStream
-java/io/DataInput
-java/lang/Short$ShortCache
-java/util/HashMap$KeyIterator
-sun/font/CompositeFontDescriptor
-sun/font/Font2DHandle
-sun/font/FontFamily
-java/awt/GraphicsDevice
-sun/awt/X11GraphicsDevice
-sun/awt/X11GraphicsConfig
-java/awt/GraphicsConfiguration
-java/awt/ImageCapabilities
-sun/java2d/x11/X11SurfaceData
-sun/java2d/SurfaceData
-java/awt/Transparency
-sun/java2d/DisposerTarget
-sun/java2d/InvalidPipeException
-java/lang/IllegalStateException
-sun/java2d/NullSurfaceData
-sun/java2d/loops/SurfaceType
-sun/awt/image/PixelConverter
-sun/awt/image/PixelConverter$Xrgb
-sun/awt/image/PixelConverter$Argb
-sun/awt/image/PixelConverter$ArgbPre
-sun/awt/image/PixelConverter$Xbgr
-sun/awt/image/PixelConverter$Rgba
-sun/awt/image/PixelConverter$RgbaPre
-sun/awt/image/PixelConverter$Ushort565Rgb
-sun/awt/image/PixelConverter$Ushort555Rgb
-sun/awt/image/PixelConverter$Ushort555Rgbx
-sun/awt/image/PixelConverter$Ushort4444Argb
-sun/awt/image/PixelConverter$ByteGray
-sun/awt/image/PixelConverter$UshortGray
-sun/awt/image/PixelConverter$Rgbx
-sun/awt/image/PixelConverter$Bgrx
-sun/awt/image/PixelConverter$ArgbBm
-java/awt/image/ColorModel
-java/awt/image/DirectColorModel
-java/awt/image/PackedColorModel
-java/awt/color/ColorSpace
-java/awt/color/ICC_Profile
-sun/awt/color/ProfileDeferralInfo
-sun/awt/color/ProfileDeferralMgr
-java/awt/color/ICC_ProfileRGB
-java/awt/color/ICC_Profile$1
-sun/awt/color/ProfileActivator
-java/awt/color/ICC_ColorSpace
-sun/java2d/pipe/NullPipe
-sun/java2d/pipe/PixelDrawPipe
-sun/java2d/pipe/PixelFillPipe
-sun/java2d/pipe/ShapeDrawPipe
-sun/java2d/pipe/TextPipe
-sun/java2d/pipe/DrawImagePipe
-java/awt/image/IndexColorModel
-sun/java2d/pipe/LoopPipe
-sun/java2d/pipe/OutlineTextRenderer
-sun/java2d/pipe/SolidTextRenderer
-sun/java2d/pipe/GlyphListLoopPipe
-sun/java2d/pipe/GlyphListPipe
-sun/java2d/pipe/AATextRenderer
-sun/java2d/pipe/LCDTextRenderer
-sun/java2d/pipe/AlphaColorPipe
-sun/java2d/pipe/CompositePipe
-sun/java2d/pipe/PixelToShapeConverter
-sun/java2d/pipe/TextRenderer
-sun/java2d/pipe/SpanClipRenderer
-sun/java2d/pipe/Region
-sun/java2d/pipe/RegionIterator
-sun/java2d/pipe/DuctusShapeRenderer
-sun/java2d/pipe/DuctusRenderer
-sun/java2d/pipe/AlphaPaintPipe
-sun/java2d/pipe/SpanShapeRenderer$Composite
-sun/java2d/pipe/SpanShapeRenderer
-sun/java2d/pipe/GeneralCompositePipe
-sun/java2d/pipe/DrawImage
-sun/java2d/loops/RenderCache
-sun/java2d/loops/RenderCache$Entry
-sun/java2d/loops/XORComposite
-java/awt/Composite
-sun/font/X11TextRenderer
-sun/java2d/loops/GraphicsPrimitive
-sun/java2d/x11/X11PMBlitLoops
-sun/java2d/loops/Blit
-sun/java2d/loops/GraphicsPrimitiveMgr
-sun/java2d/loops/CompositeType
-sun/java2d/SunGraphics2D
-sun/awt/ConstrainableGraphics
-java/awt/Graphics2D
-java/awt/Graphics
-java/awt/Color
-java/awt/Paint
-java/awt/AlphaComposite
-sun/java2d/loops/BlitBg
-sun/java2d/loops/ScaledBlit
-sun/java2d/loops/FillRect
-sun/java2d/loops/FillSpans
-sun/java2d/loops/DrawLine
-sun/java2d/loops/DrawRect
-sun/java2d/loops/DrawPolygons
-sun/java2d/loops/DrawPath
-sun/java2d/loops/FillPath
-sun/java2d/loops/MaskBlit
-sun/java2d/loops/MaskFill
-sun/java2d/loops/DrawGlyphList
-sun/java2d/loops/DrawGlyphListAA
-sun/java2d/loops/DrawGlyphListLCD
-sun/java2d/loops/TransformHelper
-java/awt/BasicStroke
-java/awt/Stroke
-sun/misc/PerformanceLogger
-sun/misc/PerformanceLogger$TimeData
-sun/java2d/pipe/ValidatePipe
-sun/java2d/loops/CustomComponent
-sun/java2d/loops/GraphicsPrimitiveProxy
-sun/java2d/loops/GeneralRenderer
-sun/java2d/loops/GraphicsPrimitiveMgr$1
-sun/java2d/loops/GraphicsPrimitiveMgr$2
-sun/java2d/x11/X11PMBlitLoops$DelegateBlitLoop
-sun/java2d/x11/X11PMBlitBgLoops
-sun/java2d/x11/X11SurfaceData$LazyPipe
-sun/awt/X11GraphicsConfig$X11GCDisposerRecord
-sun/java2d/DisposerRecord
-java/awt/BorderLayout
-java/awt/LayoutManager2
-java/awt/Rectangle
-java/awt/Toolkit$2
-sun/awt/X11/XToolkit
-sun/awt/X11/XConstants
-sun/awt/UNIXToolkit
-java/util/TreeMap
-java/util/NavigableMap
-java/util/SortedMap
-sun/awt/X11/XlibWrapper
-sun/awt/X11/XUtilConstants
-sun/awt/X11/XProtocolConstants
-sun/awt/X11/XCursorFontConstants
-sun/awt/X11/XlibWrapper$1
-sun/awt/X11/XToolkit$4
-sun/awt/X11/XModifierKeymap
-sun/awt/X11/XWrapperBase
-sun/awt/X11/Native
-sun/awt/X11/Native$1
-java/awt/EventQueue
-sun/awt/X11/XToolkit$7
-java/util/EmptyStackException
-java/lang/reflect/InvocationTargetException
-java/awt/EventDispatchThread
-java/awt/event/PaintEvent
-java/awt/event/MouseEvent
-sun/awt/PeerEvent
-java/awt/event/InvocationEvent
-java/awt/ActiveEvent
-java/awt/EventQueueItem
-sun/awt/X11/XToolkit$1
-sun/awt/X11/XToolkit$XErrorHandler
-sun/awt/X11/XToolkit$5
-sun/awt/X11/XEventDispatcher
-sun/awt/SunToolkit$ModalityListenerList
-sun/awt/ModalityListener
-sun/awt/SunToolkit$1
-java/util/MissingResourceException
-java/awt/Queue
-sun/awt/PostEventQueue
-java/util/LinkedList
-java/util/Deque
-java/util/Queue
-java/util/AbstractSequentialList
-java/util/LinkedList$Entry
-sun/awt/X11/AwtScreenData
-sun/awt/X11/XWM
-sun/awt/X11/MWMConstants
-sun/awt/X11/XAtom
-java/awt/Insets
-sun/awt/X11/XWM$1
-sun/awt/X11/XWM$2
-sun/awt/X11/XSetWindowAttributes
-sun/awt/X11/XErrorEvent
-sun/awt/X11/XNETProtocol
-sun/awt/X11/XStateProtocol
-sun/awt/X11/XLayerProtocol
-sun/awt/X11/XProtocol
-sun/awt/X11/XProtocol$1
-sun/awt/X11/WindowPropertyGetter
-sun/awt/X11/UnsafeXDisposerRecord
-sun/awt/X11/XPropertyCache
-sun/awt/X11/XWINProtocol
-sun/awt/X11/XAtomList
-sun/awt/X11/XToolkit$3
-sun/awt/X11/XAnyEvent
-sun/awt/X11/IXAnyEvent
-java/awt/Window$WindowDisposerRecord
-java/awt/KeyboardFocusManager
-java/awt/KeyEventDispatcher
-java/awt/KeyEventPostProcessor
-java/awt/AWTKeyStroke
-java/awt/AWTKeyStroke$1
-java/awt/DefaultKeyboardFocusManager
-java/awt/DefaultFocusTraversalPolicy
-java/awt/ContainerOrderFocusTraversalPolicy
-java/awt/FocusTraversalPolicy
-java/awt/MutableBoolean
-java/util/Collections$UnmodifiableSet
-sun/awt/HeadlessToolkit
-sun/awt/X11/XKeyboardFocusManagerPeer
-java/awt/peer/KeyboardFocusManagerPeer
-sun/awt/X11/XKeyboardFocusManagerPeer$1
-sun/awt/X11/XFramePeer
-java/awt/peer/FramePeer
-java/awt/peer/WindowPeer
-java/awt/peer/ContainerPeer
-java/awt/peer/ComponentPeer
-sun/awt/X11/XDecoratedPeer
-sun/awt/X11/XWindowPeer
-sun/awt/X11/XPanelPeer
-java/awt/peer/PanelPeer
-sun/awt/X11/XCanvasPeer
-java/awt/peer/CanvasPeer
-sun/awt/X11/XComponentPeer
-java/awt/dnd/peer/DropTargetPeer
-sun/awt/X11/XWindow
-sun/awt/X11ComponentPeer
-sun/awt/X11/XBaseWindow
-sun/awt/X11/XCreateWindowParams
-java/lang/Long$LongCache
-sun/awt/X11/XBaseWindow$InitialiseState
-sun/awt/X11/XBaseWindow$StateLock
-sun/awt/X11/AwtGraphicsConfigData
-sun/awt/X11/XVisualInfo
-java/awt/SystemColor
-sun/awt/X11/MotifColorUtilities
-java/lang/StrictMath
-sun/awt/X11/XRepaintArea
-sun/awt/RepaintArea
-sun/awt/X11/XWindowAttributesData
-java/util/concurrent/locks/LockSupport
-sun/awt/X11/WindowDimensions
-java/awt/Point
-java/util/TreeMap$Entry
-sun/nio/cs/UTF_8
-sun/nio/cs/Unicode
-sun/nio/cs/UTF_8$Encoder
-sun/nio/cs/UTF_8$Decoder
-sun/nio/cs/Surrogate$Generator
-sun/awt/X11/XPropertyEvent
-sun/awt/X11/XDropTargetEventProcessor
-sun/awt/X11/XDragSourceContextPeer
-sun/awt/X11/XDragSourceProtocolListener
-sun/awt/dnd/SunDragSourceContextPeer
-java/awt/dnd/peer/DragSourceContextPeer
-sun/awt/X11/XAwtState
-sun/awt/X11/XBaseWindow$1
-sun/awt/X11/XRootWindow
-sun/nio/cs/ISO_8859_1
-sun/nio/cs/ISO_8859_1$Encoder
-sun/nio/cs/ISO_8859_1$Decoder
-sun/java2d/x11/X11SurfaceData$X11WindowSurfaceData
-sun/java2d/loops/RenderLoops
-sun/java2d/loops/GraphicsPrimitiveMgr$PrimitiveSpec
-sun/java2d/DefaultDisposerRecord
-sun/java2d/x11/X11Renderer
-sun/awt/X11/XGlobalCursorManager
-sun/awt/GlobalCursorManager
-sun/awt/X11/XToolkit$6
-java/awt/Cursor$CursorDisposer
-java/awt/AWTException
-java/awt/HeadlessException
-java/lang/UnsupportedOperationException
-sun/reflect/UnsafeLongFieldAccessorImpl
-sun/reflect/UnsafeIntegerFieldAccessorImpl
-sun/awt/X11/XClientMessageEvent
-sun/awt/X11/XIconInfo
-sun/awt/X11/XAWTIcon32_java_icon16_png
-sun/awt/X11/XAWTIcon32_java_icon24_png
-sun/awt/X11/XAWTIcon32_java_icon32_png
-sun/awt/X11/XAWTIcon32_java_icon48_png
-sun/awt/X11/XSizeHints
-sun/awt/X11/XContentWindow
-sun/awt/X11/XFocusProxyWindow
-sun/awt/X11/XWMHints
-java/util/LinkedList$ListItr
-java/util/ListIterator
-sun/awt/SunToolkit$2
-java/awt/image/BufferStrategy
-java/awt/dnd/DropTarget
-java/awt/dnd/DropTargetListener
-java/awt/event/ComponentListener
-java/awt/event/FocusListener
-java/awt/event/HierarchyListener
-java/awt/event/HierarchyBoundsListener
-java/awt/event/KeyListener
-java/awt/event/MouseListener
-java/awt/event/MouseMotionListener
-java/awt/event/MouseWheelListener
-java/awt/event/InputMethodListener
-java/awt/Component$NativeInLightFixer
-java/awt/event/ContainerListener
-javax/accessibility/AccessibleContext
-sun/reflect/UnsafeObjectFieldAccessorImpl
-java/awt/peer/LightweightPeer
-sun/awt/X11/XLabelPeer
-java/awt/peer/LabelPeer
-sun/awt/X11/XMapEvent
-sun/awt/X11/XQueryTree
-sun/awt/X11/XConfigureEvent
-sun/awt/X11/PropMwmHints
-sun/awt/GlobalCursorManager$NativeUpdater
-javax/swing/JFrame
-javax/swing/WindowConstants
-javax/swing/RootPaneContainer
-javax/swing/TransferHandler$HasGetTransferHandler
-javax/swing/JLabel
-javax/swing/SwingConstants
-javax/swing/JComponent
-javax/swing/JComponent$1
-javax/swing/SwingUtilities
-javax/swing/JRootPane
-sun/security/action/GetBooleanAction
-javax/swing/event/EventListenerList
-javax/swing/JPanel
-java/awt/FlowLayout
-javax/swing/UIManager
-javax/swing/UIManager$LookAndFeelInfo
-sun/swing/SwingUtilities2
-sun/swing/SwingUtilities2$LSBCacheEntry
-javax/swing/UIManager$LAFState
-javax/swing/UIDefaults
-javax/swing/MultiUIDefaults
-javax/swing/UIManager$1
-javax/swing/plaf/metal/MetalLookAndFeel
-javax/swing/plaf/basic/BasicLookAndFeel
-javax/swing/LookAndFeel
-sun/swing/DefaultLookup
-javax/swing/plaf/metal/OceanTheme
-javax/swing/plaf/metal/DefaultMetalTheme
-javax/swing/plaf/metal/MetalTheme
-javax/swing/plaf/ColorUIResource
-javax/swing/plaf/UIResource
-sun/swing/PrintColorUIResource
-javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate
-javax/swing/plaf/FontUIResource
-sun/swing/SwingLazyValue
-javax/swing/UIDefaults$LazyValue
-javax/swing/UIDefaults$ActiveValue
-javax/swing/plaf/InsetsUIResource
-sun/swing/SwingUtilities2$2
-javax/swing/plaf/basic/BasicLookAndFeel$2
-javax/swing/plaf/DimensionUIResource
-javax/swing/UIDefaults$LazyInputMap
-java/lang/Character$CharacterCache
-javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue
-javax/swing/plaf/metal/MetalLookAndFeel$FontActiveValue
-java/awt/print/PrinterJob
-sun/swing/SwingUtilities2$AATextInfo
-sun/awt/X11/XAWTXSettings
-sun/awt/X11/XMSelectionListener
-sun/awt/XSettings
-sun/awt/X11/XMSelection
-sun/awt/X11/XMSelection$1
-javax/swing/plaf/metal/MetalLookAndFeel$AATextListener
-java/beans/PropertyChangeListener
-java/beans/PropertyChangeListenerProxy
-java/util/EventListenerProxy
-sun/awt/EventListenerAggregate
-javax/swing/UIDefaults$ProxyLazyValue
-javax/swing/plaf/metal/OceanTheme$1
-javax/swing/plaf/metal/OceanTheme$2
-javax/swing/plaf/metal/OceanTheme$3
-javax/swing/plaf/metal/OceanTheme$4
-javax/swing/plaf/metal/OceanTheme$5
-javax/swing/plaf/metal/OceanTheme$6
-javax/swing/RepaintManager
-javax/swing/RepaintManager$DisplayChangedHandler
-javax/swing/SwingPaintEventDispatcher
-sun/awt/PaintEventDispatcher
-javax/swing/UIManager$2
-javax/swing/UIManager$3
-java/awt/PopupMenu
-java/awt/Menu
-java/awt/MenuItem
-java/awt/MenuComponent
-java/io/ObjectOutputStream
-java/io/ObjectOutput
-java/io/DataOutput
-java/io/ObjectStreamConstants
-java/io/PrintWriter
-java/io/ObjectInputStream
-java/io/ObjectInput
-java/awt/Event
-java/awt/im/InputContext
-java/awt/event/MouseWheelEvent
-java/awt/BufferCapabilities
-sun/awt/CausedFocusEvent$Cause
-java/awt/PointerInfo
-java/awt/Component$BaselineResizeBehavior
-java/awt/FontMetrics
-java/awt/Image
-java/awt/image/ImageProducer
-java/awt/image/VolatileImage
-java/awt/im/InputMethodRequests
-java/awt/event/FocusEvent
-java/awt/event/InputMethodEvent
-java/awt/event/HierarchyEvent
-javax/accessibility/AccessibleStateSet
-com/sun/swing/internal/plaf/metal/resources/metal
-sun/util/ResourceBundleEnumeration
-com/sun/swing/internal/plaf/basic/resources/basic
-javax/swing/plaf/basic/BasicPanelUI
-javax/swing/plaf/PanelUI
-javax/swing/plaf/ComponentUI
-sun/reflect/misc/MethodUtil
-sun/reflect/misc/MethodUtil$1
-java/util/jar/JarFile
-java/util/zip/ZipFile
-java/util/zip/ZipConstants
-java/util/jar/JavaUtilJarAccessImpl
-sun/misc/JavaUtilJarAccess
-sun/misc/JarIndex
-java/util/zip/ZipEntry
-java/util/jar/JarFile$JarFileEntry
-java/util/jar/JarEntry
-sun/misc/URLClassPath$JarLoader$2
-sun/net/www/protocol/jar/JarURLConnection
-java/net/JarURLConnection
-sun/net/www/protocol/jar/JarFileFactory
-sun/net/www/protocol/jar/URLJarFile$URLJarFileCloseController
-java/net/HttpURLConnection
-sun/net/www/protocol/jar/URLJarFile
-sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry
-sun/net/www/protocol/jar/JarURLConnection$JarURLInputStream
-java/util/zip/ZipFile$ZipFileInputStream
-java/security/AllPermissionCollection
-java/lang/IllegalAccessException
-javax/swing/JPasswordField
-javax/swing/JTextField
-javax/swing/text/JTextComponent
-javax/swing/Scrollable
-javax/swing/JLayeredPane
-javax/swing/JRootPane$1
-javax/swing/ArrayTable
-javax/swing/JInternalFrame
-javax/swing/JRootPane$RootLayout
-javax/swing/BufferStrategyPaintManager
-javax/swing/RepaintManager$PaintManager
-javax/swing/plaf/metal/MetalRootPaneUI
-javax/swing/plaf/basic/BasicRootPaneUI
-javax/swing/plaf/RootPaneUI
-javax/swing/plaf/basic/BasicRootPaneUI$RootPaneInputMap
-javax/swing/plaf/ComponentInputMapUIResource
-javax/swing/ComponentInputMap
-javax/swing/InputMap
-javax/swing/plaf/InputMapUIResource
-javax/swing/KeyStroke
-java/awt/VKCollection
-sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl
-javax/swing/plaf/basic/LazyActionMap
-javax/swing/plaf/ActionMapUIResource
-javax/swing/ActionMap
-javax/swing/LayoutFocusTraversalPolicy
-javax/swing/SortingFocusTraversalPolicy
-javax/swing/InternalFrameFocusTraversalPolicy
-javax/swing/SwingContainerOrderFocusTraversalPolicy
-javax/swing/SwingDefaultFocusTraversalPolicy
-javax/swing/LayoutComparator
-javax/swing/plaf/metal/MetalLabelUI
-javax/swing/plaf/basic/BasicLabelUI
-javax/swing/plaf/LabelUI
-javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate$1
-javax/swing/plaf/basic/BasicHTML
-javax/swing/SystemEventQueueUtilities
-javax/swing/SystemEventQueueUtilities$SystemEventQueue
-sun/awt/NullComponentPeer
-java/awt/event/WindowEvent
-java/awt/EventQueue$1
-java/awt/EventDispatchThread$1
-java/awt/Conditional
-java/awt/EventDispatchThread$HierarchyEventFilter
-java/awt/EventFilter$FilterAction
-sun/awt/dnd/SunDropTargetEvent
-java/awt/event/ActionEvent
-java/util/jar/Manifest
-java/io/ByteArrayInputStream
-java/util/jar/Attributes
-java/util/jar/Manifest$FastInputStream
-java/util/jar/Attributes$Name
-sun/misc/ASCIICaseInsensitiveComparator
-java/util/jar/JarVerifier
-java/io/ByteArrayOutputStream
-sun/misc/ExtensionDependency
-java/lang/Package
-sun/security/util/ManifestEntryVerifier
-sun/security/provider/Sun
-java/security/Provider
-java/security/Provider$ServiceKey
-java/security/Provider$EngineDescription
-sun/security/provider/Sun$1
-java/security/Security
-java/security/Security$1
-sun/misc/FloatingDecimal
-sun/misc/FloatingDecimal$1
-sun/security/provider/NativePRNG
-java/security/SecureRandomSpi
-sun/security/provider/NativePRNG$1
-sun/security/provider/NativePRNG$RandomIO
-sun/misc/BASE64Decoder
-sun/misc/CharacterDecoder
-sun/security/util/SignatureFileVerifier
-java/awt/event/KeyAdapter
-java/lang/NumberFormatException
-java/lang/IllegalArgumentException
-java/io/FileWriter
-java/net/Authenticator
-java/net/MalformedURLException
-javax/swing/text/Element
-javax/swing/text/Document
-javax/swing/text/PlainDocument
-javax/swing/text/AbstractDocument
-javax/swing/text/GapContent
-javax/swing/text/AbstractDocument$Content
-javax/swing/text/GapVector
-javax/swing/text/GapContent$MarkVector
-javax/swing/text/GapContent$MarkData
-javax/swing/text/StyleContext
-javax/swing/text/AbstractDocument$AttributeContext
-javax/swing/text/StyleConstants
-javax/swing/text/StyleConstants$CharacterConstants
-javax/swing/text/AttributeSet$CharacterAttribute
-javax/swing/text/StyleConstants$FontConstants
-javax/swing/text/AttributeSet$FontAttribute
-javax/swing/text/StyleConstants$ColorConstants
-javax/swing/text/AttributeSet$ColorAttribute
-javax/swing/text/StyleConstants$ParagraphConstants
-javax/swing/text/AttributeSet$ParagraphAttribute
-javax/swing/text/StyleContext$FontKey
-javax/swing/text/SimpleAttributeSet
-javax/swing/text/MutableAttributeSet
-javax/swing/text/AttributeSet
-javax/swing/text/SimpleAttributeSet$EmptyAttributeSet
-javax/swing/text/StyleContext$NamedStyle
-javax/swing/text/Style
-javax/swing/text/SimpleAttributeSet$1
-javax/swing/text/StyleContext$SmallAttributeSet
-javax/swing/text/AbstractDocument$BidiRootElement
-javax/swing/text/AbstractDocument$BranchElement
-javax/swing/text/AbstractDocument$AbstractElement
-javax/swing/tree/TreeNode
-javax/swing/text/AbstractDocument$1
-javax/swing/text/AbstractDocument$BidiElement
-javax/swing/text/AbstractDocument$LeafElement
-javax/swing/text/GapContent$StickyPosition
-javax/swing/text/Position
-javax/swing/text/StyleContext$KeyEnumeration
-javax/swing/text/GapContent$InsertUndo
-javax/swing/undo/AbstractUndoableEdit
-javax/swing/undo/UndoableEdit
-javax/swing/text/AbstractDocument$DefaultDocumentEvent
-javax/swing/event/DocumentEvent
-javax/swing/undo/CompoundEdit
-javax/swing/event/DocumentEvent$EventType
-javax/swing/text/Segment
-java/text/CharacterIterator
-javax/swing/text/Utilities
-javax/swing/text/SegmentCache
-javax/swing/text/SegmentCache$CachedSegment
-javax/swing/event/UndoableEditEvent
-javax/swing/text/AbstractDocument$ElementEdit
-javax/swing/event/DocumentEvent$ElementChange
-java/net/Socket
-java/net/InetAddress
-java/net/InetAddress$Cache
-java/net/InetAddress$Cache$Type
-java/net/InetAddressImplFactory
-java/net/Inet4AddressImpl
-java/net/InetAddressImpl
-java/net/InetAddress$1
-sun/net/spi/nameservice/NameService
-sun/net/util/IPAddressUtil
-java/util/RandomAccessSubList
-java/util/SubList
-java/util/SubList$1
-java/util/AbstractList$ListItr
-java/net/Inet4Address
-java/net/InetSocketAddress
-java/net/SocketAddress
-java/net/SocksSocketImpl
-java/net/SocksConsts
-java/net/PlainSocketImpl
-java/net/SocketImpl
-java/net/SocketOptions
-java/net/SocketException
-java/net/SocksSocketImpl$5
-java/net/ProxySelector
-sun/net/spi/DefaultProxySelector
-sun/net/spi/DefaultProxySelector$1
-sun/net/NetProperties
-sun/net/NetProperties$1
-sun/net/spi/DefaultProxySelector$NonProxyInfo
-java/net/Inet6Address
-java/net/URI
-java/net/URI$Parser
-java/net/Proxy
-java/net/Proxy$Type
-java/net/ConnectException
-javax/swing/JMenu
-javax/swing/MenuElement
-javax/swing/JMenuItem
-javax/swing/AbstractButton
-java/awt/ItemSelectable
-javax/swing/event/MenuListener
-javax/swing/JCheckBoxMenuItem
-javax/swing/Icon
-javax/swing/JButton
-java/awt/event/WindowListener
-java/net/URLClassLoader$2
-javax/swing/ImageIcon
-javax/swing/ImageIcon$1
-java/awt/MediaTracker
-sun/misc/SoftCache$ValueCell
-sun/awt/image/URLImageSource
-sun/awt/image/InputStreamImageSource
-sun/awt/image/ImageFetchable
-sun/awt/image/ToolkitImage
-java/awt/Image$1
-sun/awt/image/SurfaceManager$ImageAccessor
-sun/awt/image/SurfaceManager
-sun/awt/image/NativeLibLoader
-java/awt/ImageMediaEntry
-java/awt/MediaEntry
-sun/awt/image/ImageRepresentation
-java/awt/image/ImageConsumer
-sun/awt/image/ImageWatched
-sun/awt/image/ImageWatched$Link
-sun/awt/image/ImageWatched$WeakLink
-sun/awt/image/ImageConsumerQueue
-sun/awt/image/ImageFetcher
-sun/awt/image/FetcherInfo
-sun/awt/image/ImageFetcher$1
-sun/awt/image/GifImageDecoder
-sun/awt/image/ImageDecoder
-sun/awt/image/GifFrame
-java/awt/image/Raster
-java/awt/image/DataBufferByte
-java/awt/image/DataBuffer
-java/awt/image/PixelInterleavedSampleModel
-java/awt/image/ComponentSampleModel
-java/awt/image/SampleModel
-sun/awt/image/ByteInterleavedRaster
-sun/awt/image/ByteComponentRaster
-sun/awt/image/SunWritableRaster
-java/awt/image/WritableRaster
-java/awt/image/BufferedImage
-java/awt/image/WritableRenderedImage
-java/awt/image/RenderedImage
-sun/awt/image/IntegerComponentRaster
-sun/awt/image/BytePackedRaster
-java/awt/Canvas
-sun/font/FontDesignMetrics
-sun/font/FontStrikeDesc
-sun/font/CompositeStrike
-sun/font/FontStrikeDisposer
-sun/font/StrikeCache$SoftDisposerRef
-sun/font/StrikeCache$DisposableStrike
-sun/font/TrueTypeFont$TTDisposerRecord
-sun/font/TrueTypeFont$1
-java/io/RandomAccessFile
-java/nio/ByteBufferAsIntBufferB
-java/nio/IntBuffer
-sun/font/TrueTypeFont$DirectoryEntry
-java/nio/ByteBufferAsShortBufferB
-java/nio/ShortBuffer
-sun/nio/cs/UTF_16
-sun/nio/cs/UTF_16$Decoder
-sun/nio/cs/UnicodeDecoder
-sun/font/FileFontStrike
-sun/font/FileFont$FileFontDisposer
-sun/font/TrueTypeGlyphMapper
-sun/font/CMap
-sun/font/CMap$NullCMapClass
-sun/font/CMap$CMapFormat4
-java/nio/ByteBufferAsCharBufferB
-sun/font/FontDesignMetrics$KeyReference
-sun/awt/image/PNGImageDecoder
-sun/awt/image/PNGFilterInputStream
-java/util/zip/InflaterInputStream
-java/util/zip/Inflater
-sun/awt/EventQueueItem
-sun/awt/SunToolkit$3
-sun/awt/X11/XExposeEvent
-sun/awt/X11/ComponentAccessor
-sun/awt/X11/ComponentAccessor$1
-sun/reflect/UnsafeBooleanFieldAccessorImpl
-sun/awt/event/IgnorePaintEvent
-java/awt/image/DataBufferInt
-java/awt/image/SinglePixelPackedSampleModel
-sun/awt/image/IntegerInterleavedRaster
-sun/java2d/x11/X11RemoteOffScreenImage
-sun/awt/image/RemoteOffScreenImage
-sun/awt/image/OffScreenImage
-sun/java2d/x11/X11RemoteOffScreenImage$X11RemoteSurfaceManager
-sun/awt/image/OffScreenSurfaceManager
-sun/awt/image/CachingSurfaceManager
-sun/awt/image/RasterListener
-sun/awt/image/BufImgSurfaceData
-sun/java2d/opengl/GLXGraphicsConfig
-sun/java2d/opengl/OGLGraphicsConfig
-sun/java2d/x11/X11SurfaceData$X11PixmapSurfaceData
-sun/awt/image/WritableRasterNative
-sun/awt/image/DataBufferNative
-sun/java2d/SurfaceManagerFactory
-sun/java2d/x11/X11CachingSurfaceManager
-sun/java2d/opengl/GLXSurfaceData
-sun/java2d/opengl/OGLSurfaceData
-sun/font/CompositeGlyphMapper
-sun/java2d/loops/FontInfo
-java/util/Date
-sun/util/calendar/CalendarSystem
-sun/util/calendar/Gregorian
-sun/util/calendar/BaseCalendar
-sun/util/calendar/AbstractCalendar
-java/util/TimeZone
-java/lang/InheritableThreadLocal
-sun/util/calendar/ZoneInfo
-sun/util/calendar/ZoneInfoFile
-sun/util/calendar/ZoneInfoFile$1
-java/util/TimeZone$1
-sun/util/calendar/Gregorian$Date
-sun/util/calendar/BaseCalendar$Date
-sun/util/calendar/CalendarDate
-sun/util/calendar/CalendarUtils
-java/util/TimeZone$DisplayNames
-sun/util/TimeZoneNameUtility
-sun/util/resources/TimeZoneNames
-sun/util/resources/TimeZoneNamesBundle
-sun/util/resources/TimeZoneNames_en
-java/util/spi/TimeZoneNameProvider
-java/lang/ProcessBuilder
-java/lang/ProcessImpl
-java/lang/UNIXProcess
-java/lang/Process
-java/lang/UNIXProcess$Gate
-java/lang/UNIXProcess$1
-java/lang/UNIXProcess$1$1
-java/lang/UNIXProcess$1$1$1
-java/net/ServerSocket
-java/util/Random
-java/util/concurrent/atomic/AtomicLong
-java/lang/InternalError
-java/io/StringReader
-java/lang/SecurityException
-java/io/FilterReader
-java/lang/reflect/Proxy
-java/lang/reflect/InvocationHandler
-java/lang/NoSuchFieldException
-java/lang/InstantiationException
-java/lang/ArrayIndexOutOfBoundsException
-java/lang/IndexOutOfBoundsException
-javax/swing/JDialog
-sun/awt/X11/XClipboard
-sun/awt/datatransfer/SunClipboard
-java/awt/datatransfer/Clipboard
-java/awt/datatransfer/SystemFlavorMap
-java/awt/datatransfer/FlavorMap
-java/awt/datatransfer/FlavorTable
-java/awt/datatransfer/SystemFlavorMap$1
-sun/net/ProgressMonitor
-sun/net/DefaultProgressMeteringPolicy
-sun/net/ProgressMeteringPolicy
-java/awt/datatransfer/SystemFlavorMap$2
-java/awt/datatransfer/MimeType
-java/io/Externalizable
-java/awt/datatransfer/MimeTypeParameterList
-sun/awt/datatransfer/DataTransferer
-java/util/Collections$SynchronizedSet
-java/util/Collections$SynchronizedCollection
-java/awt/datatransfer/DataFlavor
-java/awt/datatransfer/DataFlavor$1
-sun/awt/datatransfer/DataTransferer$CharsetComparator
-sun/awt/datatransfer/DataTransferer$IndexedComparator
-sun/nio/cs/UTF_16LE
-sun/nio/cs/UTF_16BE
-sun/awt/datatransfer/DataTransferer$DataFlavorComparator
-java/rmi/Remote
-sun/awt/datatransfer/DataTransferer$1
-sun/awt/X11/XDataTransferer
-sun/awt/datatransfer/ToolkitThreadBlockedHandler
-javax/imageio/ImageTypeSpecifier
-sun/awt/X11/XSelection
-sun/security/action/GetIntegerAction
-sun/awt/X11/XSelection$IncrementalTransferHandler
-sun/awt/X11/XSelection$SelectionEventHandler
-java/awt/datatransfer/Transferable
-java/io/EOFException
-java/util/Vector$1
-java/util/zip/ZipFile$1
-java/util/zip/ZipFile$2
-java/util/jar/JarFile$1
-java/util/PropertyResourceBundle
-java/util/ResourceBundle$Control$1
-java/util/Hashtable$EntrySet
-java/lang/IllegalAccessError
-java/text/MessageFormat
-java/text/MessageFormat$Field
-java/text/Format$Field
-java/lang/CloneNotSupportedException
-sun/reflect/MethodAccessorGenerator
-sun/reflect/AccessorGenerator
-sun/reflect/ClassFileConstants
-java/lang/Void
-sun/reflect/ByteVectorFactory
-sun/reflect/ByteVectorImpl
-sun/reflect/ByteVector
-sun/reflect/ClassFileAssembler
-sun/reflect/UTF8
-sun/reflect/Label
-sun/reflect/Label$PatchInfo
-sun/reflect/MethodAccessorGenerator$1
-sun/reflect/ClassDefiner
-sun/reflect/ClassDefiner$1
-sun/reflect/BootstrapConstructorAccessorImpl
-java/awt/event/ActionListener
-javax/swing/Timer
-javax/swing/Timer$DoPostEvent
-javax/swing/TimerQueue
-javax/swing/TimerQueue$1
-javax/swing/ToolTipManager
-java/awt/event/MouseAdapter
-javax/swing/ToolTipManager$insideTimerAction
-javax/swing/ToolTipManager$outsideTimerAction
-javax/swing/ToolTipManager$stillInsideTimerAction
-javax/swing/ToolTipManager$Actions
-sun/swing/UIAction
-javax/swing/Action
-javax/swing/ToolTipManager$MoveBeforeEnterListener
-java/awt/event/MouseMotionAdapter
-java/util/Hashtable$ValueCollection
-javax/swing/event/CaretListener
-javax/swing/JToolBar
-javax/swing/JSplitPane
-javax/swing/border/Border
-javax/swing/JToggleButton
-javax/swing/border/EmptyBorder
-javax/swing/border/AbstractBorder
-javax/swing/DefaultButtonModel
-javax/swing/ButtonModel
-javax/swing/AbstractButton$Handler
-javax/swing/event/ChangeListener
-java/awt/event/ItemListener
-javax/swing/plaf/metal/MetalButtonUI
-javax/swing/plaf/basic/BasicButtonUI
-javax/swing/plaf/ButtonUI
-javax/swing/plaf/metal/MetalBorders
-javax/swing/plaf/BorderUIResource$CompoundBorderUIResource
-javax/swing/border/CompoundBorder
-javax/swing/plaf/metal/MetalBorders$ButtonBorder
-javax/swing/plaf/basic/BasicBorders$MarginBorder
-javax/swing/plaf/basic/BasicButtonListener
-java/awt/AWTEventMulticaster
-java/awt/event/WindowFocusListener
-java/awt/event/WindowStateListener
-java/awt/event/AdjustmentListener
-java/awt/event/TextListener
-javax/swing/event/AncestorListener
-java/beans/VetoableChangeListener
-javax/swing/ButtonGroup
-javax/swing/JToggleButton$ToggleButtonModel
-javax/swing/plaf/metal/MetalToggleButtonUI
-javax/swing/plaf/basic/BasicToggleButtonUI
-javax/swing/plaf/metal/MetalBorders$ToggleButtonBorder
-java/awt/CardLayout
-javax/swing/Box
-javax/swing/plaf/metal/MetalBorders$TextFieldBorder
-javax/swing/plaf/metal/MetalBorders$Flush3DBorder
-javax/swing/BoxLayout
-javax/swing/JMenuBar
-javax/swing/DefaultSingleSelectionModel
-javax/swing/SingleSelectionModel
-javax/swing/plaf/basic/BasicMenuBarUI
-javax/swing/plaf/MenuBarUI
-javax/swing/plaf/basic/DefaultMenuLayout
-javax/swing/plaf/metal/MetalBorders$MenuBarBorder
-javax/swing/plaf/basic/BasicMenuBarUI$Handler
-javax/swing/KeyboardManager
-javax/swing/event/MenuEvent
-javax/swing/JMenu$MenuChangeListener
-javax/swing/JMenuItem$MenuItemFocusListener
-javax/swing/plaf/basic/BasicMenuUI
-javax/swing/plaf/basic/BasicMenuItemUI
-javax/swing/plaf/MenuItemUI
-javax/swing/plaf/metal/MetalBorders$MenuItemBorder
-javax/swing/plaf/metal/MetalIconFactory
-javax/swing/plaf/metal/MetalIconFactory$MenuArrowIcon
-javax/swing/plaf/basic/BasicMenuUI$Handler
-javax/swing/event/MenuKeyListener
-javax/swing/plaf/basic/BasicMenuItemUI$Handler
-javax/swing/event/MenuDragMouseListener
-javax/swing/event/MouseInputListener
-javax/swing/event/ChangeEvent
-java/awt/event/ContainerEvent
-javax/swing/plaf/metal/MetalIconFactory$MenuItemArrowIcon
-javax/swing/JPopupMenu
-javax/swing/plaf/basic/BasicPopupMenuUI
-javax/swing/plaf/PopupMenuUI
-javax/swing/plaf/basic/BasicLookAndFeel$AWTEventHelper
-java/awt/event/AWTEventListenerProxy
-java/awt/Toolkit$SelectiveAWTEventListener
-java/awt/Toolkit$ToolkitEventMulticaster
-javax/swing/plaf/basic/BasicLookAndFeel$1
-javax/swing/plaf/metal/MetalBorders$PopupMenuBorder
-javax/swing/plaf/basic/BasicPopupMenuUI$BasicPopupMenuListener
-javax/swing/event/PopupMenuListener
-javax/swing/plaf/basic/BasicPopupMenuUI$BasicMenuKeyListener
-javax/swing/plaf/basic/BasicPopupMenuUI$MouseGrabber
-javax/swing/MenuSelectionManager
-javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper
-javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper$1
-java/awt/event/FocusAdapter
-javax/swing/JMenu$WinListener
-java/awt/event/WindowAdapter
-javax/swing/JPopupMenu$Separator
-javax/swing/JSeparator
-javax/swing/plaf/metal/MetalPopupMenuSeparatorUI
-javax/swing/plaf/metal/MetalSeparatorUI
-javax/swing/plaf/basic/BasicSeparatorUI
-javax/swing/plaf/SeparatorUI
-javax/swing/JComboBox
-javax/swing/event/ListDataListener
-javax/swing/event/CaretEvent
-javax/swing/text/TabExpander
-javax/swing/JScrollBar
-java/awt/Adjustable
-javax/swing/event/MouseInputAdapter
-javax/swing/JScrollBar$ModelListener
-javax/swing/DefaultBoundedRangeModel
-javax/swing/BoundedRangeModel
-javax/swing/plaf/metal/MetalScrollBarUI
-javax/swing/plaf/basic/BasicScrollBarUI
-javax/swing/plaf/ScrollBarUI
-javax/swing/plaf/metal/MetalBumps
-javax/swing/plaf/metal/MetalScrollButton
-javax/swing/plaf/basic/BasicArrowButton
-javax/swing/plaf/basic/BasicScrollBarUI$TrackListener
-javax/swing/plaf/basic/BasicScrollBarUI$ArrowButtonListener
-javax/swing/plaf/basic/BasicScrollBarUI$ModelListener
-javax/swing/plaf/metal/MetalScrollBarUI$ScrollBarListener
-javax/swing/plaf/basic/BasicScrollBarUI$PropertyChangeHandler
-javax/swing/plaf/basic/BasicScrollBarUI$Handler
-javax/swing/plaf/basic/BasicScrollBarUI$ScrollListener
-javax/swing/CellRendererPane
-java/util/HashMap$EntryIterator
-javax/swing/border/MatteBorder
-sun/font/StandardGlyphVector
-java/awt/font/GlyphVector
-sun/font/StandardGlyphVector$GlyphStrike
-sun/font/CoreMetrics
-sun/font/FontLineMetrics
-java/awt/font/LineMetrics
-javax/swing/ComboBoxModel
-javax/swing/ListModel
-javax/swing/ListCellRenderer
-javax/swing/DefaultComboBoxModel
-javax/swing/MutableComboBoxModel
-javax/swing/AbstractListModel
-javax/swing/JComboBox$1
-javax/swing/AncestorNotifier
-javax/swing/plaf/metal/MetalComboBoxUI
-javax/swing/plaf/basic/BasicComboBoxUI
-javax/swing/plaf/ComboBoxUI
-javax/swing/plaf/metal/MetalComboBoxUI$MetalComboBoxLayoutManager
-javax/swing/plaf/basic/BasicComboBoxUI$ComboBoxLayoutManager
-javax/swing/plaf/basic/BasicComboPopup
-javax/swing/plaf/basic/ComboPopup
-javax/swing/plaf/basic/BasicComboPopup$EmptyListModelClass
-javax/swing/border/LineBorder
-javax/swing/plaf/basic/BasicComboPopup$1
-javax/swing/JList
-javax/swing/DropMode
-javax/swing/DefaultListSelectionModel
-javax/swing/ListSelectionModel
-javax/swing/plaf/basic/BasicListUI
-javax/swing/plaf/ListUI
-javax/swing/plaf/basic/BasicListUI$ListTransferHandler
-javax/swing/TransferHandler
-javax/swing/TransferHandler$TransferAction
-javax/swing/DefaultListCellRenderer$UIResource
-javax/swing/DefaultListCellRenderer
-javax/swing/TransferHandler$SwingDropTarget
-java/awt/dnd/DropTargetContext
-javax/swing/TransferHandler$DropHandler
-javax/swing/TransferHandler$TransferSupport
-javax/swing/plaf/basic/BasicListUI$Handler
-javax/swing/event/ListSelectionListener
-javax/swing/plaf/basic/DragRecognitionSupport$BeforeDrag
-javax/swing/plaf/basic/BasicComboPopup$Handler
-javax/swing/JScrollPane
-javax/swing/ScrollPaneConstants
-javax/swing/ScrollPaneLayout$UIResource
-javax/swing/ScrollPaneLayout
-javax/swing/JViewport
-javax/swing/ViewportLayout
-javax/swing/plaf/basic/BasicViewportUI
-javax/swing/plaf/ViewportUI
-javax/swing/JScrollPane$ScrollBar
-javax/swing/JViewport$ViewListener
-java/awt/event/ComponentAdapter
-javax/swing/plaf/metal/MetalScrollPaneUI
-javax/swing/plaf/basic/BasicScrollPaneUI
-javax/swing/plaf/ScrollPaneUI
-javax/swing/plaf/metal/MetalBorders$ScrollPaneBorder
-javax/swing/plaf/basic/BasicScrollPaneUI$Handler
-javax/swing/plaf/metal/MetalScrollPaneUI$1
-javax/swing/plaf/basic/BasicComboBoxRenderer$UIResource
-javax/swing/plaf/basic/BasicComboBoxRenderer
-javax/swing/plaf/metal/MetalComboBoxEditor$UIResource
-javax/swing/plaf/metal/MetalComboBoxEditor
-javax/swing/plaf/basic/BasicComboBoxEditor
-javax/swing/ComboBoxEditor
-javax/swing/plaf/basic/BasicComboBoxEditor$BorderlessTextField
-javax/swing/JTextField$NotifyAction
-javax/swing/text/TextAction
-javax/swing/AbstractAction
-javax/swing/text/JTextComponent$MutableCaretEvent
-javax/swing/plaf/metal/MetalTextFieldUI
-javax/swing/plaf/basic/BasicTextFieldUI
-javax/swing/plaf/basic/BasicTextUI
-javax/swing/text/ViewFactory
-javax/swing/plaf/TextUI
-javax/swing/plaf/basic/BasicTextUI$BasicCursor
-javax/swing/text/DefaultEditorKit
-javax/swing/text/EditorKit
-javax/swing/text/DefaultEditorKit$InsertContentAction
-javax/swing/text/DefaultEditorKit$DeletePrevCharAction
-javax/swing/text/DefaultEditorKit$DeleteNextCharAction
-javax/swing/text/DefaultEditorKit$ReadOnlyAction
-javax/swing/text/DefaultEditorKit$DeleteWordAction
-javax/swing/text/DefaultEditorKit$WritableAction
-javax/swing/text/DefaultEditorKit$CutAction
-javax/swing/text/DefaultEditorKit$CopyAction
-javax/swing/text/DefaultEditorKit$PasteAction
-javax/swing/text/DefaultEditorKit$VerticalPageAction
-javax/swing/text/DefaultEditorKit$PageAction
-javax/swing/text/DefaultEditorKit$InsertBreakAction
-javax/swing/text/DefaultEditorKit$BeepAction
-javax/swing/text/DefaultEditorKit$NextVisualPositionAction
-javax/swing/text/DefaultEditorKit$BeginWordAction
-javax/swing/text/DefaultEditorKit$EndWordAction
-javax/swing/text/DefaultEditorKit$PreviousWordAction
-javax/swing/text/DefaultEditorKit$NextWordAction
-javax/swing/text/DefaultEditorKit$BeginLineAction
-javax/swing/text/DefaultEditorKit$EndLineAction
-javax/swing/text/DefaultEditorKit$BeginParagraphAction
-javax/swing/text/DefaultEditorKit$EndParagraphAction
-javax/swing/text/DefaultEditorKit$BeginAction
-javax/swing/text/DefaultEditorKit$EndAction
-javax/swing/text/DefaultEditorKit$DefaultKeyTypedAction
-javax/swing/text/DefaultEditorKit$InsertTabAction
-javax/swing/text/DefaultEditorKit$SelectWordAction
-javax/swing/text/DefaultEditorKit$SelectLineAction
-javax/swing/text/DefaultEditorKit$SelectParagraphAction
-javax/swing/text/DefaultEditorKit$SelectAllAction
-javax/swing/text/DefaultEditorKit$UnselectAction
-javax/swing/text/DefaultEditorKit$ToggleComponentOrientationAction
-javax/swing/text/DefaultEditorKit$DumpModelAction
-javax/swing/plaf/basic/BasicTextUI$TextTransferHandler
-javax/swing/text/Position$Bias
-javax/swing/plaf/basic/BasicTextUI$RootView
-javax/swing/text/View
-javax/swing/plaf/basic/BasicTextUI$UpdateHandler
-javax/swing/event/DocumentListener
-javax/swing/plaf/basic/BasicTextUI$DragListener
-javax/swing/plaf/basic/BasicComboBoxEditor$UIResource
-javax/swing/plaf/basic/BasicTextUI$BasicCaret
-javax/swing/text/DefaultCaret
-javax/swing/text/Caret
-javax/swing/text/DefaultCaret$Handler
-java/awt/datatransfer/ClipboardOwner
-javax/swing/plaf/basic/BasicTextUI$BasicHighlighter
-javax/swing/text/DefaultHighlighter
-javax/swing/text/LayeredHighlighter
-javax/swing/text/Highlighter
-javax/swing/text/Highlighter$Highlight
-javax/swing/text/DefaultHighlighter$DefaultHighlightPainter
-javax/swing/text/LayeredHighlighter$LayerPainter
-javax/swing/text/Highlighter$HighlightPainter
-javax/swing/text/DefaultHighlighter$SafeDamager
-javax/swing/text/FieldView
-javax/swing/text/PlainView
-javax/swing/text/JTextComponent$DefaultKeymap
-javax/swing/text/Keymap
-javax/swing/text/JTextComponent$KeymapWrapper
-javax/swing/text/JTextComponent$KeymapActionMap
-javax/swing/plaf/basic/BasicTextUI$FocusAction
-javax/swing/plaf/basic/BasicTextUI$TextActionWrapper
-javax/swing/JTextArea
-javax/swing/JEditorPane
-javax/swing/JTextField$ScrollRepainter
-javax/swing/plaf/metal/MetalComboBoxEditor$1
-javax/swing/plaf/metal/MetalComboBoxEditor$EditorBorder
-javax/swing/plaf/metal/MetalComboBoxUI$MetalPropertyChangeListener
-javax/swing/plaf/basic/BasicComboBoxUI$PropertyChangeHandler
-javax/swing/plaf/basic/BasicComboBoxUI$Handler
-javax/swing/plaf/metal/MetalComboBoxButton
-javax/swing/plaf/metal/MetalComboBoxIcon
-javax/swing/plaf/metal/MetalComboBoxButton$1
-javax/swing/plaf/basic/BasicComboBoxUI$DefaultKeySelectionManager
-javax/swing/JComboBox$KeySelectionManager
-javax/swing/JToolBar$DefaultToolBarLayout
-javax/swing/plaf/metal/MetalToolBarUI
-javax/swing/plaf/basic/BasicToolBarUI
-javax/swing/plaf/ToolBarUI
-javax/swing/plaf/metal/MetalBorders$ToolBarBorder
-javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue$1
-javax/swing/plaf/metal/MetalBorders$RolloverButtonBorder
-javax/swing/plaf/metal/MetalBorders$RolloverMarginBorder
-javax/swing/plaf/basic/BasicBorders$RadioButtonBorder
-javax/swing/plaf/basic/BasicBorders$ButtonBorder
-javax/swing/plaf/basic/BasicBorders$RolloverMarginBorder
-javax/swing/plaf/metal/MetalToolBarUI$MetalDockingListener
-javax/swing/plaf/basic/BasicToolBarUI$DockingListener
-javax/swing/plaf/basic/BasicToolBarUI$Handler
-javax/swing/border/EtchedBorder
-javax/swing/JToolBar$Separator
-javax/swing/plaf/basic/BasicToolBarSeparatorUI
-sun/awt/color/CMM
-java/applet/Applet
-java/awt/Panel
-com/sun/awt/AWTUtilities
-javax/swing/KeyboardManager$ComponentKeyStrokePair
-sun/awt/EmbeddedFrame
-sun/awt/im/InputMethodContext
-java/awt/im/spi/InputMethodContext
-sun/awt/im/InputContext
-sun/awt/im/InputMethodManager
-sun/awt/im/ExecutableInputMethodManager
-sun/awt/X11/XInputMethodDescriptor
-sun/awt/X11InputMethodDescriptor
-java/awt/im/spi/InputMethodDescriptor
-sun/awt/im/InputMethodLocator
-sun/awt/im/ExecutableInputMethodManager$2
-sun/misc/Service
-sun/misc/Service$LazyIterator
-java/util/TreeSet
-java/util/NavigableSet
-java/util/SortedSet
-javax/swing/SizeRequirements
-javax/swing/plaf/basic/BasicGraphicsUtils
-java/awt/event/AdjustmentEvent
-java/awt/MenuBar
-sun/awt/X11/XComponentPeer$2
-java/awt/SequencedEvent
-java/beans/PropertyVetoException
-java/awt/DefaultKeyboardFocusManager$TypeAheadMarker
-java/awt/KeyboardFocusManager$HeavyweightFocusRequest
-java/awt/KeyboardFocusManager$LightweightFocusRequest
-sun/awt/KeyboardFocusManagerPeerImpl
-sun/awt/SunToolkit$7
-java/awt/Window$1DisposeAction
-java/awt/LightweightDispatcher$2
-sun/awt/X11/XReparentEvent
-sun/awt/X11/XWindowAttributes
-javax/swing/SystemEventQueueUtilities$ComponentWorkRequest
-sun/awt/X11/XFocusChangeEvent
-sun/awt/X11/XComponentPeer$1
-sun/awt/X11/XUnmapEvent
-java/io/StringWriter
-javax/swing/JWindow
-java/io/UnsupportedEncodingException
-java/net/UnknownHostException
-java/nio/channels/SocketChannel
-java/nio/channels/spi/AbstractSelectableChannel
-java/nio/channels/SelectableChannel
-java/net/SocketImplFactory
-javax/swing/UnsupportedLookAndFeelException
-java/lang/UnsatisfiedLinkError
-javax/swing/Box$Filler
-javax/swing/JComponent$2
-sun/net/www/MimeTable
-java/net/FileNameMap
-sun/net/www/MimeTable$1
-sun/net/www/MimeTable$2
-sun/net/www/MimeEntry
-java/net/URLConnection$1
-java/text/SimpleDateFormat
-java/text/DateFormat
-java/text/DateFormat$Field
-java/util/Calendar
-java/util/GregorianCalendar
-sun/util/resources/CalendarData
-sun/util/resources/CalendarData_en
-java/text/DateFormatSymbols
-java/text/spi/DateFormatSymbolsProvider
-java/text/DontCareFieldPosition
-java/text/DontCareFieldPosition$1
-java/text/Format$FieldDelegate
-javax/swing/plaf/BorderUIResource
-javax/swing/BorderFactory
-javax/swing/border/BevelBorder
-javax/swing/plaf/metal/MetalIconFactory$TreeFolderIcon
-javax/swing/plaf/metal/MetalIconFactory$FolderIcon16
-java/util/zip/ZipInputStream
-java/io/PushbackInputStream
-java/util/zip/CRC32
-java/util/zip/Checksum
-java/lang/Thread$State
-javax/swing/SwingUtilities$SharedOwnerFrame
-javax/swing/JTable
-javax/swing/event/TableModelListener
-javax/swing/event/TableColumnModelListener
-javax/swing/event/CellEditorListener
-javax/swing/event/RowSorterListener
-javax/swing/BufferStrategyPaintManager$BufferInfo
-java/awt/Component$BltSubRegionBufferStrategy
-sun/awt/SubRegionShowable
-java/awt/Component$BltBufferStrategy
-sun/awt/image/SunVolatileImage
-sun/awt/image/BufferedImageGraphicsConfig
-sun/print/PrinterGraphicsConfig
-sun/java2d/x11/X11VolatileSurfaceManager
-sun/awt/image/VolatileSurfaceManager
-java/awt/print/PrinterGraphics
-java/awt/PrintGraphics
-java/awt/GraphicsCallback$PaintCallback
-java/awt/GraphicsCallback
-sun/awt/SunGraphicsCallback
-javax/swing/JRadioButton
-java/lang/ClassFormatError
-javax/swing/JTabbedPane
-javax/swing/JTabbedPane$ModelListener
-javax/swing/plaf/metal/MetalTabbedPaneUI
-javax/swing/plaf/basic/BasicTabbedPaneUI
-javax/swing/plaf/TabbedPaneUI
-javax/swing/plaf/metal/MetalTabbedPaneUI$TabbedPaneLayout
-javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneLayout
-javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneScrollLayout
-javax/swing/plaf/basic/BasicTabbedPaneUI$Handler
-sun/swing/ImageIconUIResource
-javax/swing/GrayFilter
-java/awt/image/RGBImageFilter
-java/awt/image/ImageFilter
-java/awt/image/FilteredImageSource
-org/w3c/dom/Node
-org/xml/sax/SAXException
-javax/xml/parsers/ParserConfigurationException
-org/xml/sax/EntityResolver
-java/security/NoSuchAlgorithmException
-java/security/GeneralSecurityException
-java/util/zip/GZIPInputStream
-java/util/zip/DeflaterOutputStream
-org/xml/sax/InputSource
-javax/xml/parsers/DocumentBuilderFactory
-javax/xml/parsers/FactoryFinder
-javax/xml/parsers/SecuritySupport
-javax/xml/parsers/SecuritySupport$2
-javax/xml/parsers/SecuritySupport$5
-javax/xml/parsers/SecuritySupport$1
-javax/xml/parsers/SecuritySupport$4
-javax/xml/parsers/DocumentBuilder
-org/w3c/dom/Document
-org/xml/sax/helpers/DefaultHandler
-org/xml/sax/DTDHandler
-org/xml/sax/ContentHandler
-org/xml/sax/ErrorHandler
-org/xml/sax/SAXNotSupportedException
-org/xml/sax/Locator
-org/xml/sax/SAXNotRecognizedException
-org/xml/sax/SAXParseException
-org/w3c/dom/NodeList
-org/w3c/dom/events/EventTarget
-org/w3c/dom/traversal/DocumentTraversal
-org/w3c/dom/events/DocumentEvent
-org/w3c/dom/ranges/DocumentRange
-org/w3c/dom/Entity
-org/w3c/dom/Element
-org/w3c/dom/CharacterData
-org/w3c/dom/CDATASection
-org/w3c/dom/Text
-org/xml/sax/AttributeList
-org/w3c/dom/DOMException
-org/w3c/dom/Notation
-org/w3c/dom/DocumentType
-org/w3c/dom/Attr
-org/w3c/dom/EntityReference
-org/w3c/dom/ProcessingInstruction
-org/w3c/dom/Comment
-org/w3c/dom/DocumentFragment
-org/w3c/dom/events/Event
-org/w3c/dom/events/MutationEvent
-org/w3c/dom/traversal/TreeWalker
-org/w3c/dom/ranges/Range
-org/w3c/dom/traversal/NodeIterator
-org/w3c/dom/events/EventException
-org/w3c/dom/NamedNodeMap
-java/lang/StringIndexOutOfBoundsException
-java/awt/GridLayout
-javax/swing/plaf/metal/MetalRadioButtonUI
-javax/swing/plaf/basic/BasicRadioButtonUI
-javax/swing/plaf/basic/BasicBorders
-javax/swing/plaf/metal/MetalIconFactory$RadioButtonIcon
-java/awt/event/ItemEvent
-java/awt/CardLayout$Card
-javax/swing/JCheckBox
-javax/swing/event/ListSelectionEvent
-javax/swing/plaf/metal/MetalCheckBoxUI
-javax/swing/plaf/metal/MetalIconFactory$CheckBoxIcon
-java/lang/ExceptionInInitializerError
-com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI
-javax/swing/JProgressBar
-javax/swing/JProgressBar$ModelListener
-javax/swing/plaf/metal/MetalProgressBarUI
-javax/swing/plaf/basic/BasicProgressBarUI
-javax/swing/plaf/ProgressBarUI
-javax/swing/plaf/BorderUIResource$LineBorderUIResource
-javax/swing/plaf/basic/BasicProgressBarUI$Handler
-javax/swing/tree/TreeModel
-javax/swing/table/TableCellRenderer
-javax/swing/table/JTableHeader
-javax/swing/event/TreeExpansionListener
-javax/swing/table/AbstractTableModel
-javax/swing/table/TableModel
-javax/swing/table/DefaultTableCellRenderer
-javax/swing/JTree
-javax/swing/tree/TreeSelectionModel
-javax/swing/tree/DefaultTreeCellRenderer
-javax/swing/tree/TreeCellRenderer
-javax/swing/table/TableCellEditor
-javax/swing/CellEditor
-javax/swing/JToolTip
-javax/swing/table/TableColumn
-javax/swing/table/DefaultTableColumnModel
-javax/swing/table/TableColumnModel
-javax/swing/table/DefaultTableModel
-javax/swing/event/TableModelEvent
-sun/swing/table/DefaultTableCellHeaderRenderer
-javax/swing/plaf/basic/BasicTableHeaderUI
-javax/swing/plaf/TableHeaderUI
-javax/swing/plaf/basic/BasicTableHeaderUI$1
-javax/swing/plaf/basic/BasicTableHeaderUI$MouseInputHandler
-javax/swing/DefaultCellEditor
-javax/swing/tree/TreeCellEditor
-javax/swing/AbstractCellEditor
-javax/swing/plaf/basic/BasicTableUI
-javax/swing/plaf/TableUI
-javax/swing/plaf/basic/BasicTableUI$TableTransferHandler
-javax/swing/plaf/basic/BasicTableUI$Handler
-javax/swing/tree/DefaultTreeSelectionModel
-javax/swing/tree/TreePath
-javax/swing/plaf/metal/MetalTreeUI
-javax/swing/plaf/basic/BasicTreeUI
-javax/swing/plaf/TreeUI
-javax/swing/plaf/basic/BasicTreeUI$Actions
-javax/swing/plaf/basic/BasicTreeUI$TreeTransferHandler
-javax/swing/plaf/metal/MetalTreeUI$LineListener
-javax/swing/plaf/basic/BasicTreeUI$Handler
-javax/swing/event/TreeModelListener
-javax/swing/event/TreeSelectionListener
-javax/swing/event/SwingPropertyChangeSupport
-javax/swing/tree/VariableHeightLayoutCache
-javax/swing/tree/AbstractLayoutCache
-javax/swing/tree/RowMapper
-javax/swing/plaf/basic/BasicTreeUI$NodeDimensionsHandler
-javax/swing/tree/AbstractLayoutCache$NodeDimensions
-javax/swing/JTree$TreeModelHandler
-javax/swing/tree/VariableHeightLayoutCache$TreeStateNode
-javax/swing/tree/DefaultMutableTreeNode
-javax/swing/tree/MutableTreeNode
-javax/swing/tree/DefaultMutableTreeNode$1
-javax/swing/tree/DefaultMutableTreeNode$PreorderEnumeration
-javax/swing/event/TableColumnModelEvent
-java/text/ParseException
-java/text/NumberFormat$Field
-javax/swing/event/UndoableEditListener
-javax/swing/filechooser/FileFilter
-javax/swing/tree/DefaultTreeModel
-javax/swing/tree/DefaultTreeCellEditor
-javax/swing/tree/DefaultTreeCellEditor$1
-javax/swing/tree/DefaultTreeCellEditor$DefaultTextField
-javax/swing/DefaultCellEditor$1
-javax/swing/DefaultCellEditor$EditorDelegate
-javax/swing/tree/DefaultTreeCellEditor$EditorContainer
-javax/swing/JTree$TreeSelectionRedirector
-javax/swing/event/TreeModelEvent
-javax/swing/plaf/metal/MetalSplitPaneUI
-javax/swing/plaf/basic/BasicSplitPaneUI
-javax/swing/plaf/SplitPaneUI
-javax/swing/plaf/basic/BasicSplitPaneDivider
-javax/swing/plaf/basic/BasicBorders$SplitPaneBorder
-javax/swing/plaf/metal/MetalSplitPaneDivider
-javax/swing/plaf/basic/BasicSplitPaneDivider$DividerLayout
-javax/swing/plaf/basic/BasicSplitPaneDivider$MouseHandler
-javax/swing/plaf/basic/BasicBorders$SplitPaneDividerBorder
-javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager
-javax/swing/plaf/basic/BasicSplitPaneUI$1
-javax/swing/plaf/basic/BasicSplitPaneUI$Handler
-javax/swing/plaf/metal/MetalSplitPaneDivider$1
-javax/swing/plaf/basic/BasicSplitPaneDivider$OneTouchActionHandler
-javax/swing/plaf/metal/MetalSplitPaneDivider$2
-javax/swing/border/TitledBorder
-javax/swing/plaf/basic/BasicTextAreaUI
-java/util/Collections$UnmodifiableCollection$1
-java/io/InterruptedIOException
-java/net/NoRouteToHostException
-java/net/BindException
-javax/swing/tree/PathPlaceHolder
-javax/swing/event/TreeSelectionEvent
-javax/swing/JList$3
-javax/swing/JList$ListSelectionHandler
-javax/swing/JSlider
-javax/swing/JSlider$ModelListener
-javax/swing/plaf/metal/MetalSliderUI
-javax/swing/plaf/basic/BasicSliderUI
-javax/swing/plaf/SliderUI
-javax/swing/plaf/basic/BasicSliderUI$Actions
-javax/swing/plaf/metal/MetalIconFactory$HorizontalSliderThumbIcon
-javax/swing/plaf/metal/MetalIconFactory$VerticalSliderThumbIcon
-javax/swing/plaf/basic/BasicSliderUI$TrackListener
-javax/swing/plaf/basic/BasicSliderUI$Handler
-javax/swing/plaf/basic/BasicSliderUI$ScrollListener
-javax/swing/plaf/metal/MetalSliderUI$MetalPropertyListener
-javax/swing/plaf/basic/BasicSliderUI$PropertyChangeHandler
-sun/java2d/HeadlessGraphicsEnvironment
-java/util/Hashtable$KeySet
-java/awt/FontFormatException
-sun/java2d/SunGraphicsEnvironment$2
-sun/font/Type1Font$1
-java/nio/channels/FileChannel$MapMode
-sun/nio/ch/FileChannelImpl$Unmapper
-sun/nio/ch/Util$3
-java/nio/DirectByteBufferR
-java/nio/charset/Charset$3
-sun/nio/cs/ext/ExtendedCharsets
-sun/nio/cs/AbstractCharsetProvider
-sun/nio/cs/ext/SJIS
-sun/nio/cs/ext/SJIS$Decoder
-sun/nio/cs/ext/DelegatableDecoder
-sun/nio/cs/ext/JIS_X_0208_Decoder
-sun/nio/cs/ext/DoubleByteDecoder
-sun/nio/cs/ext/JIS_X_0201$Decoder
-sun/nio/cs/SingleByteDecoder
-java/lang/CharacterData00
-javax/swing/DefaultListModel
-javax/swing/event/ListDataEvent
-javax/sound/sampled/DataLine
-javax/sound/sampled/Line
-javax/sound/sampled/Line$Info
-javax/sound/sampled/DataLine$Info
-javax/sound/sampled/Control$Type
-javax/sound/sampled/FloatControl$Type
-javax/sound/sampled/LineUnavailableException
-javax/sound/sampled/UnsupportedAudioFileException
-javax/swing/JRadioButtonMenuItem
-javax/swing/JMenuItem$AccessibleJMenuItem
-javax/swing/AbstractButton$AccessibleAbstractButton
-javax/accessibility/AccessibleAction
-javax/accessibility/AccessibleValue
-javax/accessibility/AccessibleText
-javax/accessibility/AccessibleExtendedComponent
-javax/accessibility/AccessibleComponent
-javax/swing/JComponent$AccessibleJComponent
-java/awt/Container$AccessibleAWTContainer
-java/awt/Component$AccessibleAWTComponent
-javax/accessibility/AccessibleRelationSet
-javax/accessibility/AccessibleState
-javax/accessibility/AccessibleBundle
-javax/swing/plaf/basic/BasicCheckBoxMenuItemUI
-javax/swing/plaf/metal/MetalIconFactory$CheckBoxMenuItemIcon
-javax/swing/JCheckBoxMenuItem$AccessibleJCheckBoxMenuItem
-javax/swing/plaf/basic/BasicRadioButtonMenuItemUI
-javax/swing/plaf/metal/MetalIconFactory$RadioButtonMenuItemIcon
-sun/awt/image/ImageDecoder$1
-javax/swing/JTabbedPane$Page
-java/net/DatagramSocket
-java/net/MulticastSocket
-java/net/DatagramPacket
-sun/net/InetAddressCachePolicy
-sun/net/InetAddressCachePolicy$1
-sun/net/InetAddressCachePolicy$2
-java/net/InetAddress$CacheEntry
-java/net/PlainDatagramSocketImpl
-java/net/DatagramSocketImpl
-java/net/NetworkInterface
-java/net/InterfaceAddress
-java/text/Collator
-java/text/spi/CollatorProvider
-sun/text/resources/CollationData
-sun/text/resources/CollationData_en
-sun/util/EmptyListResourceBundle
-java/text/RuleBasedCollator
-java/text/CollationRules
-java/text/RBCollationTables
-java/text/RBTableBuilder
-java/text/RBCollationTables$BuildAPI
-sun/text/IntHashtable
-sun/text/UCompactIntArray
-sun/text/normalizer/NormalizerImpl
-sun/text/normalizer/ICUData
-sun/text/normalizer/NormalizerDataReader
-sun/text/normalizer/ICUBinary$Authenticate
-sun/text/normalizer/ICUBinary
-sun/text/normalizer/NormalizerImpl$FCDTrieImpl
-sun/text/normalizer/Trie$DataManipulate
-sun/text/normalizer/NormalizerImpl$NormTrieImpl
-sun/text/normalizer/NormalizerImpl$AuxTrieImpl
-sun/text/normalizer/IntTrie
-sun/text/normalizer/Trie
-sun/text/normalizer/CharTrie
-sun/text/normalizer/CharTrie$FriendAgent
-sun/text/normalizer/UnicodeSet
-sun/text/normalizer/UnicodeMatcher
-sun/text/normalizer/NormalizerImpl$DecomposeArgs
-java/text/MergeCollation
-java/text/PatternEntry$Parser
-java/text/PatternEntry
-java/text/EntryPair
-sun/text/ComposedCharIter
-sun/text/normalizer/UTF16
-sun/net/www/protocol/http/Handler
-java/io/ObjectInputStream$BlockDataInputStream
-java/io/ObjectInputStream$PeekInputStream
-java/io/ObjectInputStream$HandleTable
-java/io/ObjectInputStream$ValidationList
-java/io/Bits
-java/io/ObjectStreamClass$Caches
-java/io/ObjectStreamClass$WeakClassKey
-java/io/ObjectStreamClass$EntryFuture
-java/io/ObjectStreamClass$2
-sun/reflect/SerializationConstructorAccessorImpl
-java/io/ObjectStreamClass$FieldReflectorKey
-java/io/ObjectStreamClass$FieldReflector
-java/io/ObjectStreamClass$1
-java/io/DataOutputStream
-java/io/ObjectStreamClass$MemberSignature
-java/io/ObjectStreamClass$3
-java/io/ObjectStreamClass$4
-java/io/ObjectStreamClass$5
-java/security/MessageDigest
-java/security/MessageDigestSpi
-sun/security/jca/GetInstance
-sun/security/jca/Providers
-sun/security/jca/ProviderList
-sun/security/jca/ProviderConfig
-sun/security/jca/ProviderList$3
-sun/security/jca/ProviderList$1
-sun/security/jca/ProviderList$2
-sun/security/jca/ProviderConfig$1
-sun/security/jca/ProviderConfig$3
-java/security/Provider$Service
-java/security/Provider$UString
-sun/security/provider/SHA
-sun/security/provider/DigestBase
-sun/security/jca/GetInstance$Instance
-java/security/MessageDigest$Delegate
-sun/security/provider/ByteArrayAccess
-java/io/ObjectStreamClass$ClassDataSlot
-java/io/ObjectInputStream$CallbackContext
-sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl
-java/security/SignatureException
-java/security/InvalidKeyException
-java/security/KeyException
-java/security/Signature
-java/security/SignatureSpi
-java/io/ObjectOutputStream$BlockDataOutputStream
-sun/security/provider/DSAPublicKey
-java/security/interfaces/DSAPublicKey
-java/security/interfaces/DSAKey
-java/security/PublicKey
-java/security/Key
-sun/security/x509/X509Key
-java/io/ObjectOutputStream$HandleTable
-java/io/ObjectOutputStream$ReplaceTable
-sun/security/x509/AlgorithmId
-sun/security/util/DerEncoder
-sun/security/util/BitArray
-sun/security/util/DerOutputStream
-sun/security/util/DerValue
-java/math/BigInteger
-java/security/interfaces/DSAParams
-sun/security/util/DerInputStream
-sun/security/util/DerInputBuffer
-sun/security/util/ObjectIdentifier
-java/security/AlgorithmParameters
-java/security/AlgorithmParametersSpi
-sun/security/provider/DSAParameters
-sun/security/util/ByteArrayLexOrder
-sun/security/util/ByteArrayTagOrder
-sun/security/util/DerIndefLenConverter
-java/io/InvalidClassException
-java/io/ObjectStreamException
-java/io/ObjectInputStream$GetFieldImpl
-java/io/ObjectInputStream$GetField
-sun/security/jca/ServiceId
-sun/security/jca/ProviderList$ServiceList
-sun/security/jca/ProviderList$ServiceList$1
-java/security/Signature$Delegate
-java/security/interfaces/DSAPrivateKey
-java/security/PrivateKey
-sun/security/provider/DSA$SHA1withDSA
-sun/security/provider/DSA
-java/security/spec/DSAParameterSpec
-java/security/spec/AlgorithmParameterSpec
-java/math/MutableBigInteger
-java/math/SignedMutableBigInteger
-java/awt/EventQueue$1AWTInvocationLock
-javax/swing/SystemEventQueueUtilities$RunnableCanvas
-javax/swing/SystemEventQueueUtilities$RunnableCanvasGraphics
-java/awt/Component$FlipBufferStrategy
-java/awt/SentEvent
-sun/awt/X11/XDestroyWindowEvent
-sun/awt/X11/XDropTargetRegistry
-sun/awt/X11/XEmbeddedFramePeer
-sun/awt/X11/XDragAndDropProtocols
-sun/awt/X11/XDropTargetContextPeer
-sun/awt/dnd/SunDropTargetContextPeer
-java/awt/dnd/peer/DropTargetContextPeer
-sun/awt/X11/XDropTargetContextPeer$XDropTargetProtocolListenerImpl
-sun/awt/X11/XDropTargetProtocolListener
-sun/awt/X11/XDnDDragSourceProtocol
-sun/awt/X11/XDragSourceProtocol
-sun/awt/X11/MotifDnDDragSourceProtocol
-sun/awt/X11/XDnDDropTargetProtocol
-sun/awt/X11/XDropTargetProtocol
-sun/awt/X11/MotifDnDDropTargetProtocol
-sun/awt/X11/XDnDConstants
-sun/awt/X11/MotifDnDConstants
-javax/swing/JTable$2
-javax/swing/JTable$Resizable3
-javax/swing/JTable$Resizable2
-javax/swing/JTable$5
-javax/swing/event/AncestorEvent
-sun/font/FontDesignMetrics$MetricsKey
-java/awt/geom/Line2D$Float
-java/awt/geom/Line2D
-com/sun/java/swing/plaf/gtk/GTKLookAndFeel
-javax/swing/plaf/synth/SynthLookAndFeel
-javax/swing/plaf/synth/DefaultSynthStyleFactory
-javax/swing/plaf/synth/SynthStyleFactory
-sun/swing/BakedArrayList
-javax/swing/plaf/synth/SynthLookAndFeel$Handler
-javax/swing/plaf/synth/SynthDefaultLookup
-com/sun/java/swing/plaf/gtk/GTKEngine
-com/sun/java/swing/plaf/gtk/GTKDefaultEngine
-com/sun/java/swing/plaf/gtk/GTKEngine$Settings
-com/sun/java/swing/plaf/gtk/GTKStyleFactory
-com/sun/java/swing/plaf/gtk/PangoFonts
-sun/font/FontManager$FontConfigInfo
-com/sun/java/swing/plaf/gtk/GTKLookAndFeel$WeakPCL
-javax/swing/plaf/synth/Region
-javax/swing/plaf/synth/SynthLookAndFeel$AATextListener
-com/sun/java/swing/plaf/gtk/GTKNativeEngine
-com/sun/java/swing/plaf/gtk/GTKNativeEngine$WidgetType
-com/sun/java/swing/plaf/gtk/GTKRegion
-com/sun/java/swing/plaf/gtk/GTKDefaultStyle
-com/sun/java/swing/plaf/gtk/GTKStyle
-com/sun/java/swing/plaf/gtk/GTKConstants
-javax/swing/plaf/synth/SynthStyle
-javax/swing/plaf/synth/SynthGraphicsUtils
-com/sun/java/swing/plaf/gtk/GTKGraphicsUtils
-com/sun/java/swing/plaf/gtk/GTKStyle$GTKStockIcon
-sun/swing/plaf/synth/SynthIcon
-com/sun/java/swing/plaf/gtk/GTKColorType
-javax/swing/plaf/synth/ColorType
-com/sun/java/swing/plaf/gtk/resources/gtk
-com/sun/swing/internal/plaf/synth/resources/synth
-com/sun/java/swing/plaf/gtk/GTKStyle$GTKLazyValue
-com/sun/java/swing/plaf/gtk/GTKLookAndFeel$1FontLazyValue
-com/sun/java/swing/plaf/gtk/GTKLookAndFeel$2
-com/sun/java/swing/plaf/gtk/GTKLookAndFeel$3
-javax/swing/plaf/synth/SynthPanelUI
-javax/swing/plaf/synth/SynthConstants
-javax/swing/plaf/synth/SynthContext
-javax/swing/plaf/synth/SynthBorder
-javax/swing/plaf/synth/SynthRootPaneUI
-javax/swing/plaf/synth/SynthLabelUI
-javax/swing/plaf/synth/SynthButtonUI
-javax/swing/plaf/synth/SynthToggleButtonUI
-javax/swing/plaf/basic/BasicBorders$FieldBorder
-javax/swing/plaf/synth/SynthMenuBarUI
-javax/swing/plaf/synth/DefaultMenuLayout
-javax/swing/plaf/synth/SynthMenuUI
-javax/swing/plaf/synth/SynthUI
-com/sun/java/swing/plaf/gtk/GTKIconFactory
-com/sun/java/swing/plaf/gtk/GTKIconFactory$MenuArrowIcon
-com/sun/java/swing/plaf/gtk/GTKIconFactory$DelegatingIcon
-com/sun/java/swing/plaf/gtk/GTKConstants$ArrowType
-javax/swing/plaf/basic/BasicIconFactory
-javax/swing/plaf/basic/BasicIconFactory$MenuItemCheckIcon
-javax/swing/plaf/synth/SynthMenuItemUI
-javax/swing/plaf/synth/SynthPopupMenuUI
-javax/swing/plaf/synth/SynthSeparatorUI
-javax/swing/plaf/synth/SynthScrollBarUI
-javax/swing/plaf/synth/SynthArrowButton
-javax/swing/plaf/synth/SynthArrowButton$SynthArrowButtonUI
-javax/swing/plaf/synth/SynthComboBoxUI
-javax/swing/plaf/synth/SynthComboPopup
-javax/swing/plaf/synth/SynthListUI
-javax/swing/plaf/synth/SynthListUI$SynthListCellRenderer
-javax/swing/plaf/synth/SynthViewportUI
-javax/swing/plaf/synth/SynthScrollPaneUI
-javax/swing/plaf/synth/SynthScrollPaneUI$ViewportBorder
-javax/swing/plaf/synth/SynthComboBoxUI$SynthComboBoxRenderer
-javax/swing/plaf/synth/SynthComboBoxUI$SynthComboBoxEditor
-javax/swing/plaf/synth/SynthTextFieldUI
-javax/swing/plaf/synth/SynthToolBarUI
-javax/swing/plaf/synth/SynthToolBarUI$SynthToolBarLayoutManager
-com/sun/java/swing/plaf/gtk/GTKIconFactory$ToolBarHandleIcon
-com/sun/java/swing/plaf/gtk/GTKConstants$Orientation
-sun/awt/X11/XTranslateCoordinates
-com/sun/java/swing/plaf/gtk/GTKPainter
-javax/swing/plaf/synth/SynthPainter
-javax/swing/plaf/synth/SynthPainter$1
-com/sun/java/swing/plaf/gtk/GTKConstants$PositionType
-com/sun/java/swing/plaf/gtk/GTKConstants$ShadowType
-java/io/ObjectInputStream$HandleTable$HandleList
-sun/java2d/pipe/ShapeSpanIterator
-sun/java2d/pipe/SpanIterator
-sun/dc/path/PathConsumer
-sun/dc/pr/PathStroker
-sun/dc/pr/PathDasher
-java/awt/geom/LineIterator
-java/awt/geom/PathIterator
-sun/applet/Main
-sun/applet/AppletMessageHandler
-sun/applet/resources/MsgAppletViewer
-sun/applet/AppletSecurity
-sun/awt/AWTSecurityManager
-java/lang/SecurityManager
-java/security/DomainCombiner
-sun/applet/AppletSecurity$1
-java/lang/SecurityManager$1
-java/security/SecurityPermission
-java/util/PropertyPermission
-sun/applet/AppletViewer
-java/applet/AppletContext
-java/awt/print/Printable
-sun/security/util/SecurityConstants
-java/awt/AWTPermission
-java/net/NetPermission
-java/net/SocketPermission
-javax/security/auth/AuthPermission
-java/lang/Thread$1
-java/util/logging/LogManager$5
-java/util/logging/LogManager$6
-sun/applet/StdAppletViewerFactory
-sun/applet/AppletViewerFactory
-sun/applet/AppletViewer$UserActionListener
-sun/applet/AppletViewerPanel
-sun/applet/AppletPanel
-java/applet/AppletStub
-sun/misc/MessageUtils
-sun/applet/AppletPanel$10
-java/security/Policy$1
-sun/security/provider/PolicyFile$1
-sun/security/provider/PolicyInfo
-sun/security/provider/PolicyFile$3
-sun/security/util/PropertyExpander
-sun/security/provider/PolicyParser
-sun/security/util/PolicyUtil
-sun/security/provider/PolicyParser$GrantEntry
-sun/security/provider/PolicyParser$PermissionEntry
-sun/security/provider/PolicyFile$PolicyEntry
-sun/security/provider/PolicyFile$6
-sun/security/provider/PolicyFile$7
-sun/security/provider/SelfPermission
-java/net/SocketPermissionCollection
-java/util/PropertyPermissionCollection
-sun/applet/AppletPanel$9
-sun/applet/AppletClassLoader
-sun/applet/AppletClassLoader$4
-sun/applet/AppletThreadGroup
-sun/applet/AppContextCreator
-sun/applet/AppletPanel$1
-sun/awt/X11/XMenuBarPeer
-java/awt/peer/MenuBarPeer
-java/awt/peer/MenuComponentPeer
-sun/awt/X11/XBaseMenuWindow
-sun/awt/X11/XMenuPeer
-java/awt/peer/MenuPeer
-java/awt/peer/MenuItemPeer
-sun/awt/X11/XMenuItemPeer
-java/awt/MenuShortcut
-sun/awt/X11/XMenuWindow
-sun/awt/X11/XMenuBarPeer$1
-sun/awt/X11/XMenuItemPeer$TextMetrics
-sun/awt/AppContext$3
-sun/awt/MostRecentThreadAppContext
-sun/awt/X11/XMenuBarPeer$MappingData
-sun/awt/X11/XBaseMenuWindow$MappingData
-sun/applet/AppletViewer$1
-sun/applet/AppletViewer$1AppletEventListener
-sun/applet/AppletListener
-sun/applet/AppletEventMulticaster
-sun/misc/Queue
-sun/misc/QueueElement
-sun/applet/AppletEvent
-sun/applet/AppletClassLoader$1
-sun/awt/X11/XBaseMenuWindow$3
-java/awt/DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent
-sun/awt/CausedFocusEvent
-sun/awt/X11/XWindow$1
-java/net/URLClassLoader$4
-sun/applet/AppletClassLoader$2
-javax/swing/JApplet
-java/lang/ClassLoader$1
-sun/security/provider/PolicyFile$5
-java/security/PermissionsEnumerator
-java/util/Collections$1
-sun/applet/AppletPanel$11
-sun/applet/AppletPanel$8
-sun/applet/AppletPanel$2
-sun/applet/AppletPanel$3
-sun/applet/AppletPanel$6
-javax/swing/BufferStrategyPaintManager$1
-# f3ac8b467e7f8c49
--- a/jdk/make/data/classlist/classlist.linux Mon May 09 12:55:03 2016 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2454 +0,0 @@
-com/sun/java/swing/SwingUtilities3
-com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI
-com/sun/swing/internal/plaf/basic/resources/basic
-com/sun/swing/internal/plaf/metal/resources/metal
-java/applet/Applet
-java/awt/AWTEvent
-java/awt/AWTEvent$1
-java/awt/AWTEventMulticaster
-java/awt/AWTKeyStroke
-java/awt/AWTKeyStroke$1
-java/awt/ActiveEvent
-java/awt/Adjustable
-java/awt/AlphaComposite
-java/awt/BasicStroke
-java/awt/BorderLayout
-java/awt/BufferCapabilities
-java/awt/Canvas
-java/awt/CardLayout
-java/awt/CardLayout$Card
-java/awt/Color
-java/awt/Component
-java/awt/Component$1
-java/awt/Component$3
-java/awt/Component$AWTTreeLock
-java/awt/Component$AccessibleAWTComponent
-java/awt/Component$BaselineResizeBehavior
-java/awt/Component$BltBufferStrategy
-java/awt/Component$BltSubRegionBufferStrategy
-java/awt/Component$DummyRequestFocusController
-java/awt/Component$FlipBufferStrategy
-java/awt/ComponentOrientation
-java/awt/Composite
-java/awt/Conditional
-java/awt/Container
-java/awt/Container$1
-java/awt/Container$AccessibleAWTContainer
-java/awt/ContainerOrderFocusTraversalPolicy
-java/awt/Cursor
-java/awt/Cursor$1
-java/awt/DefaultFocusTraversalPolicy
-java/awt/DefaultKeyboardFocusManager
-java/awt/DefaultKeyboardFocusManager$1
-java/awt/DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent
-java/awt/DefaultKeyboardFocusManager$TypeAheadMarker
-java/awt/Dialog
-java/awt/Dialog$ModalExclusionType
-java/awt/Dialog$ModalityType
-java/awt/Dimension
-java/awt/Event
-java/awt/EventDispatchThread
-java/awt/EventDispatchThread$1
-java/awt/EventDispatchThread$HierarchyEventFilter
-java/awt/EventFilter
-java/awt/EventFilter$FilterAction
-java/awt/EventQueue
-java/awt/EventQueue$1
-java/awt/EventQueue$1AWTInvocationLock
-java/awt/EventQueue$2
-java/awt/EventQueue$3
-java/awt/EventQueue$4
-java/awt/EventQueue$5
-java/awt/FlowLayout
-java/awt/FocusTraversalPolicy
-java/awt/Font
-java/awt/Font$FontAccessImpl
-java/awt/FontFormatException
-java/awt/FontMetrics
-java/awt/Frame
-java/awt/Frame$1
-java/awt/Graphics
-java/awt/Graphics2D
-java/awt/GraphicsCallback
-java/awt/GraphicsCallback$PaintCallback
-java/awt/GraphicsConfiguration
-java/awt/GraphicsDevice
-java/awt/GraphicsEnvironment
-java/awt/GraphicsEnvironment$1
-java/awt/GridLayout
-java/awt/Image
-java/awt/Image$1
-java/awt/ImageCapabilities
-java/awt/ImageMediaEntry
-java/awt/Insets
-java/awt/ItemSelectable
-java/awt/KeyEventDispatcher
-java/awt/KeyEventPostProcessor
-java/awt/KeyboardFocusManager
-java/awt/KeyboardFocusManager$1
-java/awt/KeyboardFocusManager$3
-java/awt/KeyboardFocusManager$HeavyweightFocusRequest
-java/awt/KeyboardFocusManager$LightweightFocusRequest
-java/awt/Label
-java/awt/LayoutManager
-java/awt/LayoutManager2
-java/awt/LightweightDispatcher
-java/awt/LightweightDispatcher$2
-java/awt/MediaEntry
-java/awt/MediaTracker
-java/awt/MenuBar
-java/awt/MenuComponent
-java/awt/MenuContainer
-java/awt/ModalEventFilter
-java/awt/Paint
-java/awt/Panel
-java/awt/Point
-java/awt/PrintGraphics
-java/awt/Queue
-java/awt/Rectangle
-java/awt/RenderingHints
-java/awt/RenderingHints$Key
-java/awt/SentEvent
-java/awt/SequencedEvent
-java/awt/SequencedEvent$1
-java/awt/Shape
-java/awt/SplashScreen
-java/awt/Stroke
-java/awt/SystemColor
-java/awt/Toolkit
-java/awt/Toolkit$1
-java/awt/Toolkit$2
-java/awt/Toolkit$3
-java/awt/Toolkit$4
-java/awt/Toolkit$5
-java/awt/Toolkit$DesktopPropertyChangeSupport
-java/awt/Toolkit$DesktopPropertyChangeSupport$1
-java/awt/Toolkit$SelectiveAWTEventListener
-java/awt/Toolkit$ToolkitEventMulticaster
-java/awt/Transparency
-java/awt/TrayIcon
-java/awt/VKCollection
-java/awt/Window
-java/awt/Window$1
-java/awt/Window$1DisposeAction
-java/awt/Window$Type
-java/awt/Window$WindowDisposerRecord
-java/awt/color/ColorSpace
-java/awt/color/ICC_ColorSpace
-java/awt/color/ICC_Profile
-java/awt/color/ICC_Profile$1
-java/awt/color/ICC_ProfileRGB
-java/awt/datatransfer/Clipboard
-java/awt/datatransfer/ClipboardOwner
-java/awt/datatransfer/FlavorMap
-java/awt/datatransfer/FlavorTable
-java/awt/datatransfer/SystemFlavorMap
-java/awt/datatransfer/Transferable
-java/awt/dnd/DropTarget
-java/awt/dnd/DropTargetContext
-java/awt/dnd/DropTargetListener
-java/awt/dnd/peer/DragSourceContextPeer
-java/awt/dnd/peer/DropTargetContextPeer
-java/awt/dnd/peer/DropTargetPeer
-java/awt/event/AWTEventListener
-java/awt/event/AWTEventListenerProxy
-java/awt/event/ActionEvent
-java/awt/event/ActionListener
-java/awt/event/AdjustmentEvent
-java/awt/event/AdjustmentListener
-java/awt/event/ComponentAdapter
-java/awt/event/ComponentEvent
-java/awt/event/ComponentListener
-java/awt/event/ContainerEvent
-java/awt/event/ContainerListener
-java/awt/event/FocusAdapter
-java/awt/event/FocusEvent
-java/awt/event/FocusListener
-java/awt/event/HierarchyBoundsListener
-java/awt/event/HierarchyListener
-java/awt/event/InputEvent
-java/awt/event/InputEvent$1
-java/awt/event/InputMethodEvent
-java/awt/event/InputMethodListener
-java/awt/event/InvocationEvent
-java/awt/event/InvocationEvent$1
-java/awt/event/ItemEvent
-java/awt/event/ItemListener
-java/awt/event/KeyAdapter
-java/awt/event/KeyEvent
-java/awt/event/KeyEvent$1
-java/awt/event/KeyListener
-java/awt/event/MouseAdapter
-java/awt/event/MouseEvent
-java/awt/event/MouseListener
-java/awt/event/MouseMotionAdapter
-java/awt/event/MouseMotionListener
-java/awt/event/MouseWheelListener
-java/awt/event/NativeLibLoader
-java/awt/event/NativeLibLoader$1
-java/awt/event/PaintEvent
-java/awt/event/TextListener
-java/awt/event/WindowAdapter
-java/awt/event/WindowEvent
-java/awt/event/WindowFocusListener
-java/awt/event/WindowListener
-java/awt/event/WindowStateListener
-java/awt/font/FontRenderContext
-java/awt/font/GlyphVector
-java/awt/font/LineMetrics
-java/awt/font/TextAttribute
-java/awt/geom/AffineTransform
-java/awt/geom/Dimension2D
-java/awt/geom/GeneralPath
-java/awt/geom/Line2D
-java/awt/geom/Line2D$Float
-java/awt/geom/Path2D
-java/awt/geom/Path2D$Float
-java/awt/geom/PathIterator
-java/awt/geom/Point2D
-java/awt/geom/Point2D$Float
-java/awt/geom/RectIterator
-java/awt/geom/Rectangle2D
-java/awt/geom/Rectangle2D$Float
-java/awt/geom/RectangularShape
-java/awt/im/InputContext
-java/awt/im/InputMethodRequests
-java/awt/im/spi/InputMethod
-java/awt/im/spi/InputMethodContext
-java/awt/im/spi/InputMethodDescriptor
-java/awt/image/BufferStrategy
-java/awt/image/BufferedImage
-java/awt/image/BufferedImage$1
-java/awt/image/ColorModel
-java/awt/image/ColorModel$1
-java/awt/image/ComponentSampleModel
-java/awt/image/DataBuffer
-java/awt/image/DataBuffer$1
-java/awt/image/DataBufferByte
-java/awt/image/DataBufferInt
-java/awt/image/DirectColorModel
-java/awt/image/FilteredImageSource
-java/awt/image/ImageConsumer
-java/awt/image/ImageFilter
-java/awt/image/ImageObserver
-java/awt/image/ImageProducer
-java/awt/image/IndexColorModel
-java/awt/image/PackedColorModel
-java/awt/image/PixelInterleavedSampleModel
-java/awt/image/RGBImageFilter
-java/awt/image/Raster
-java/awt/image/RenderedImage
-java/awt/image/SampleModel
-java/awt/image/SinglePixelPackedSampleModel
-java/awt/image/VolatileImage
-java/awt/image/WritableRaster
-java/awt/image/WritableRenderedImage
-java/awt/peer/CanvasPeer
-java/awt/peer/ComponentPeer
-java/awt/peer/ContainerPeer
-java/awt/peer/FramePeer
-java/awt/peer/KeyboardFocusManagerPeer
-java/awt/peer/LabelPeer
-java/awt/peer/LightweightPeer
-java/awt/peer/PanelPeer
-java/awt/peer/SystemTrayPeer
-java/awt/peer/WindowPeer
-java/awt/print/PrinterGraphics
-java/beans/ChangeListenerMap
-java/beans/PropertyChangeEvent
-java/beans/PropertyChangeListener
-java/beans/PropertyChangeListenerProxy
-java/beans/PropertyChangeSupport
-java/beans/PropertyChangeSupport$PropertyChangeListenerMap
-java/beans/VetoableChangeListener
-java/io/Bits
-java/io/BufferedInputStream
-java/io/BufferedOutputStream
-java/io/BufferedReader
-java/io/BufferedWriter
-java/io/ByteArrayInputStream
-java/io/ByteArrayOutputStream
-java/io/Closeable
-java/io/DataInput
-java/io/DataInputStream
-java/io/DataOutput
-java/io/DataOutputStream
-java/io/DefaultFileSystem
-java/io/EOFException
-java/io/ExpiringCache
-java/io/ExpiringCache$1
-java/io/ExpiringCache$Entry
-java/io/Externalizable
-java/io/File
-java/io/File$PathStatus
-java/io/FileDescriptor
-java/io/FileDescriptor$1
-java/io/FileInputStream
-java/io/FileInputStream$1
-java/io/FileNotFoundException
-java/io/FileOutputStream
-java/io/FileOutputStream$1
-java/io/FilePermission
-java/io/FilePermission$1
-java/io/FilePermissionCollection
-java/io/FileReader
-java/io/FileSystem
-java/io/FileWriter
-java/io/FilenameFilter
-java/io/FilterInputStream
-java/io/FilterOutputStream
-java/io/FilterReader
-java/io/Flushable
-java/io/IOException
-java/io/InputStream
-java/io/InputStreamReader
-java/io/InterruptedIOException
-java/io/ObjectInput
-java/io/ObjectInputStream
-java/io/ObjectInputStream$BlockDataInputStream
-java/io/ObjectInputStream$GetField
-java/io/ObjectInputStream$GetFieldImpl
-java/io/ObjectInputStream$HandleTable
-java/io/ObjectInputStream$HandleTable$HandleList
-java/io/ObjectInputStream$PeekInputStream
-java/io/ObjectInputStream$ValidationList
-java/io/ObjectOutput
-java/io/ObjectOutputStream
-java/io/ObjectOutputStream$BlockDataOutputStream
-java/io/ObjectOutputStream$HandleTable
-java/io/ObjectOutputStream$ReplaceTable
-java/io/ObjectStreamClass
-java/io/ObjectStreamClass$1
-java/io/ObjectStreamClass$2
-java/io/ObjectStreamClass$3
-java/io/ObjectStreamClass$4
-java/io/ObjectStreamClass$5
-java/io/ObjectStreamClass$Caches
-java/io/ObjectStreamClass$ClassDataSlot
-java/io/ObjectStreamClass$EntryFuture
-java/io/ObjectStreamClass$ExceptionInfo
-java/io/ObjectStreamClass$FieldReflector
-java/io/ObjectStreamClass$FieldReflectorKey
-java/io/ObjectStreamClass$MemberSignature
-java/io/ObjectStreamClass$WeakClassKey
-java/io/ObjectStreamConstants
-java/io/ObjectStreamField
-java/io/OutputStream
-java/io/OutputStreamWriter
-java/io/PrintStream
-java/io/PushbackInputStream
-java/io/RandomAccessFile
-java/io/RandomAccessFile$1
-java/io/Reader
-java/io/SerialCallbackContext
-java/io/Serializable
-java/io/StreamTokenizer
-java/io/StringReader
-java/io/StringWriter
-java/io/UnixFileSystem
-java/io/UnsupportedEncodingException
-java/io/Writer
-java/lang/AbstractStringBuilder
-java/lang/Appendable
-java/lang/ApplicationShutdownHooks
-java/lang/ApplicationShutdownHooks$1
-java/lang/ArithmeticException
-java/lang/ArrayIndexOutOfBoundsException
-java/lang/ArrayStoreException
-java/lang/AutoCloseable
-java/lang/Boolean
-java/lang/BootstrapMethodError
-java/lang/Byte
-java/lang/CharSequence
-java/lang/Character
-java/lang/Character$CharacterCache
-java/lang/CharacterData
-java/lang/CharacterData00
-java/lang/CharacterDataLatin1
-java/lang/Class
-java/lang/Class$1
-java/lang/Class$3
-java/lang/Class$4
-java/lang/Class$AnnotationData
-java/lang/Class$Atomic
-java/lang/Class$ReflectionData
-java/lang/ClassCastException
-java/lang/ClassFormatError
-java/lang/ClassLoader
-java/lang/ClassLoader$2
-java/lang/ClassLoader$3
-java/lang/ClassLoader$NativeLibrary
-java/lang/ClassLoader$ParallelLoaders
-java/lang/ClassNotFoundException
-java/lang/ClassValue$ClassValueMap
-java/lang/CloneNotSupportedException
-java/lang/Cloneable
-java/lang/Comparable
-java/lang/Compiler
-java/lang/Compiler$1
-java/lang/Double
-java/lang/Enum
-java/lang/Error
-java/lang/Exception
-java/lang/ExceptionInInitializerError
-java/lang/Float
-java/lang/IllegalAccessError
-java/lang/IllegalAccessException
-java/lang/IllegalArgumentException
-java/lang/IllegalMonitorStateException
-java/lang/IllegalStateException
-java/lang/IncompatibleClassChangeError
-java/lang/IndexOutOfBoundsException
-java/lang/InheritableThreadLocal
-java/lang/InstantiationException
-java/lang/Integer
-java/lang/Integer$IntegerCache
-java/lang/InternalError
-java/lang/InterruptedException
-java/lang/Iterable
-java/lang/LinkageError
-java/lang/Long
-java/lang/Long$LongCache
-java/lang/Math
-java/lang/NoClassDefFoundError
-java/lang/NoSuchFieldException
-java/lang/NoSuchMethodError
-java/lang/NoSuchMethodException
-java/lang/NullPointerException
-java/lang/Number
-java/lang/NumberFormatException
-java/lang/Object
-java/lang/OutOfMemoryError
-java/lang/Package
-java/lang/Process
-java/lang/ProcessBuilder
-java/lang/ProcessBuilder$NullOutputStream
-java/lang/ProcessEnvironment
-java/lang/ProcessEnvironment$ExternalData
-java/lang/ProcessEnvironment$StringEnvironment
-java/lang/ProcessEnvironment$Value
-java/lang/ProcessEnvironment$Variable
-java/lang/ProcessImpl
-java/lang/Readable
-java/lang/ReflectiveOperationException
-java/lang/Runnable
-java/lang/Runtime
-java/lang/RuntimeException
-java/lang/RuntimePermission
-java/lang/SecurityException
-java/lang/SecurityManager
-java/lang/Short
-java/lang/Shutdown
-java/lang/Shutdown$Lock
-java/lang/StackOverflowError
-java/lang/StackTraceElement
-java/lang/StrictMath
-java/lang/String
-java/lang/String$CaseInsensitiveComparator
-java/lang/StringBuffer
-java/lang/StringBuilder
-java/lang/StringCoding
-java/lang/StringCoding$StringDecoder
-java/lang/StringCoding$StringEncoder
-java/lang/StringIndexOutOfBoundsException
-java/lang/System
-java/lang/System$2
-java/lang/SystemClassLoaderAction
-java/lang/Terminator
-java/lang/Terminator$1
-java/lang/Thread
-java/lang/Thread$State
-java/lang/Thread$UncaughtExceptionHandler
-java/lang/ThreadDeath
-java/lang/ThreadGroup
-java/lang/ThreadLocal
-java/lang/ThreadLocal$ThreadLocalMap
-java/lang/ThreadLocal$ThreadLocalMap$Entry
-java/lang/Throwable
-java/lang/Throwable$PrintStreamOrWriter
-java/lang/Throwable$WrappedPrintStream
-java/lang/UNIXProcess
-java/lang/UNIXProcess$1
-java/lang/UNIXProcess$2
-java/lang/UNIXProcess$3
-java/lang/UNIXProcess$4
-java/lang/UNIXProcess$LaunchMechanism
-java/lang/UNIXProcess$ProcessPipeInputStream
-java/lang/UNIXProcess$ProcessPipeOutputStream
-java/lang/UNIXProcess$ProcessReaperThreadFactory
-java/lang/UNIXProcess$ProcessReaperThreadFactory$1
-java/lang/UnsatisfiedLinkError
-java/lang/UnsupportedOperationException
-java/lang/VirtualMachineError
-java/lang/Void
-java/lang/annotation/Annotation
-java/lang/invoke/CallSite
-java/lang/invoke/ConstantCallSite
-java/lang/invoke/DirectMethodHandle
-java/lang/invoke/Invokers
-java/lang/invoke/LambdaForm
-java/lang/invoke/LambdaForm$NamedFunction
-java/lang/invoke/MemberName
-java/lang/invoke/MemberName$Factory
-java/lang/invoke/MethodHandle
-java/lang/invoke/MethodHandleImpl
-java/lang/invoke/MethodHandleNatives
-java/lang/invoke/MethodHandleStatics
-java/lang/invoke/MethodHandleStatics$1
-java/lang/invoke/MethodType
-java/lang/invoke/MethodType$ConcurrentWeakInternSet
-java/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry
-java/lang/invoke/MethodTypeForm
-java/lang/invoke/MutableCallSite
-java/lang/invoke/VolatileCallSite
-java/lang/ref/FinalReference
-java/lang/ref/Finalizer
-java/lang/ref/Finalizer$FinalizerThread
-java/lang/ref/PhantomReference
-java/lang/ref/Reference
-java/lang/ref/Reference$Lock
-java/lang/ref/Reference$ReferenceHandler
-java/lang/ref/ReferenceQueue
-java/lang/ref/ReferenceQueue$Lock
-java/lang/ref/ReferenceQueue$Null
-java/lang/ref/SoftReference
-java/lang/ref/WeakReference
-java/lang/reflect/AccessibleObject
-java/lang/reflect/AnnotatedElement
-java/lang/reflect/Array
-java/lang/reflect/Constructor
-java/lang/reflect/Executable
-java/lang/reflect/Field
-java/lang/reflect/GenericDeclaration
-java/lang/reflect/InvocationHandler
-java/lang/reflect/InvocationTargetException
-java/lang/reflect/Member
-java/lang/reflect/Method
-java/lang/reflect/Modifier
-java/lang/reflect/Parameter
-java/lang/reflect/Proxy
-java/lang/reflect/Proxy$KeyFactory
-java/lang/reflect/Proxy$ProxyClassFactory
-java/lang/reflect/ReflectAccess
-java/lang/reflect/ReflectPermission
-java/lang/reflect/Type
-java/lang/reflect/WeakCache
-java/math/BigInteger
-java/math/BigInteger$UnsafeHolder
-java/math/MutableBigInteger
-java/math/RoundingMode
-java/math/SignedMutableBigInteger
-java/net/AbstractPlainDatagramSocketImpl
-java/net/AbstractPlainDatagramSocketImpl$1
-java/net/AbstractPlainSocketImpl
-java/net/AbstractPlainSocketImpl$1
-java/net/Authenticator
-java/net/BindException
-java/net/ConnectException
-java/net/DatagramPacket
-java/net/DatagramPacket$1
-java/net/DatagramSocket
-java/net/DatagramSocket$1
-java/net/DatagramSocketImpl
-java/net/DefaultDatagramSocketImplFactory
-java/net/DefaultInterface
-java/net/FileNameMap
-java/net/HttpURLConnection
-java/net/Inet4Address
-java/net/Inet4AddressImpl
-java/net/Inet6Address
-java/net/Inet6Address$Inet6AddressHolder
-java/net/Inet6AddressImpl
-java/net/InetAddress
-java/net/InetAddress$1
-java/net/InetAddress$2
-java/net/InetAddress$Cache
-java/net/InetAddress$Cache$Type
-java/net/InetAddress$CacheEntry
-java/net/InetAddress$InetAddressHolder
-java/net/InetAddressImpl
-java/net/InetAddressImplFactory
-java/net/InetSocketAddress
-java/net/InetSocketAddress$InetSocketAddressHolder
-java/net/InterfaceAddress
-java/net/JarURLConnection
-java/net/MalformedURLException
-java/net/MulticastSocket
-java/net/NetworkInterface
-java/net/NetworkInterface$1
-java/net/NoRouteToHostException
-java/net/Parts
-java/net/PlainDatagramSocketImpl
-java/net/PlainSocketImpl
-java/net/Proxy
-java/net/Proxy$Type
-java/net/ProxySelector
-java/net/ServerSocket
-java/net/Socket
-java/net/SocketAddress
-java/net/SocketException
-java/net/SocketImpl
-java/net/SocketImplFactory
-java/net/SocketOptions
-java/net/SocksConsts
-java/net/SocksSocketImpl
-java/net/SocksSocketImpl$3
-java/net/URI
-java/net/URI$Parser
-java/net/URL
-java/net/URLClassLoader
-java/net/URLClassLoader$1
-java/net/URLClassLoader$2
-java/net/URLClassLoader$3
-java/net/URLClassLoader$3$1
-java/net/URLClassLoader$7
-java/net/URLConnection
-java/net/URLConnection$1
-java/net/URLStreamHandler
-java/net/URLStreamHandlerFactory
-java/net/UnknownHostException
-java/nio/Bits
-java/nio/Bits$1
-java/nio/Buffer
-java/nio/ByteBuffer
-java/nio/ByteBufferAsIntBufferB
-java/nio/ByteBufferAsShortBufferB
-java/nio/ByteOrder
-java/nio/CharBuffer
-java/nio/DirectByteBuffer
-java/nio/DirectByteBuffer$Deallocator
-java/nio/DirectByteBufferR
-java/nio/DirectLongBufferU
-java/nio/HeapByteBuffer
-java/nio/HeapCharBuffer
-java/nio/IntBuffer
-java/nio/LongBuffer
-java/nio/MappedByteBuffer
-java/nio/ShortBuffer
-java/nio/channels/ByteChannel
-java/nio/channels/Channel
-java/nio/channels/FileChannel
-java/nio/channels/FileChannel$MapMode
-java/nio/channels/GatheringByteChannel
-java/nio/channels/InterruptibleChannel
-java/nio/channels/NetworkChannel
-java/nio/channels/ReadableByteChannel
-java/nio/channels/ScatteringByteChannel
-java/nio/channels/SeekableByteChannel
-java/nio/channels/SelectableChannel
-java/nio/channels/SocketChannel
-java/nio/channels/WritableByteChannel
-java/nio/channels/spi/AbstractInterruptibleChannel
-java/nio/channels/spi/AbstractInterruptibleChannel$1
-java/nio/channels/spi/AbstractSelectableChannel
-java/nio/charset/Charset
-java/nio/charset/CharsetDecoder
-java/nio/charset/CharsetEncoder
-java/nio/charset/CoderResult
-java/nio/charset/CoderResult$1
-java/nio/charset/CoderResult$2
-java/nio/charset/CoderResult$Cache
-java/nio/charset/CodingErrorAction
-java/nio/charset/StandardCharsets
-java/nio/charset/spi/CharsetProvider
-java/nio/file/Path
-java/nio/file/Watchable
-java/nio/file/attribute/FileAttribute
-java/security/AccessControlContext
-java/security/AccessController
-java/security/AlgorithmParameters
-java/security/AlgorithmParametersSpi
-java/security/AllPermission
-java/security/AllPermissionCollection
-java/security/BasicPermission
-java/security/BasicPermissionCollection
-java/security/CodeSigner
-java/security/CodeSource
-java/security/GeneralSecurityException
-java/security/Guard
-java/security/InvalidKeyException
-java/security/Key
-java/security/KeyException
-java/security/MessageDigest
-java/security/MessageDigest$Delegate
-java/security/MessageDigestSpi
-java/security/NoSuchAlgorithmException
-java/security/Permission
-java/security/PermissionCollection
-java/security/Permissions
-java/security/Principal
-java/security/PrivateKey
-java/security/PrivilegedAction
-java/security/PrivilegedActionException
-java/security/PrivilegedExceptionAction
-java/security/ProtectionDomain
-java/security/ProtectionDomain$1
-java/security/ProtectionDomain$3
-java/security/ProtectionDomain$Key
-java/security/Provider
-java/security/Provider$EngineDescription
-java/security/Provider$Service
-java/security/Provider$ServiceKey
-java/security/Provider$UString
-java/security/PublicKey
-java/security/SecureClassLoader
-java/security/SecureRandomSpi
-java/security/Security
-java/security/Security$1
-java/security/Signature
-java/security/Signature$Delegate
-java/security/SignatureException
-java/security/SignatureSpi
-java/security/UnresolvedPermission
-java/security/cert/Certificate
-java/security/interfaces/DSAKey
-java/security/interfaces/DSAParams
-java/security/interfaces/DSAPrivateKey
-java/security/interfaces/DSAPublicKey
-java/security/spec/AlgorithmParameterSpec
-java/security/spec/DSAParameterSpec
-java/text/AttributedCharacterIterator$Attribute
-java/text/CharacterIterator
-java/text/Collator
-java/text/DateFormat
-java/text/DateFormat$Field
-java/text/DateFormatSymbols
-java/text/DecimalFormat
-java/text/DecimalFormatSymbols
-java/text/DigitList
-java/text/DontCareFieldPosition
-java/text/DontCareFieldPosition$1
-java/text/EntryPair
-java/text/FieldPosition
-java/text/Format
-java/text/Format$Field
-java/text/Format$FieldDelegate
-java/text/MergeCollation
-java/text/MessageFormat
-java/text/MessageFormat$Field
-java/text/NumberFormat
-java/text/NumberFormat$Field
-java/text/ParseException
-java/text/PatternEntry
-java/text/PatternEntry$Parser
-java/text/RBCollationTables
-java/text/RBCollationTables$BuildAPI
-java/text/RBTableBuilder
-java/text/RuleBasedCollator
-java/text/SimpleDateFormat
-java/text/spi/BreakIteratorProvider
-java/text/spi/CollatorProvider
-java/text/spi/DateFormatProvider
-java/text/spi/DateFormatSymbolsProvider
-java/text/spi/DecimalFormatSymbolsProvider
-java/text/spi/NumberFormatProvider
-java/util/AbstractCollection
-java/util/AbstractList
-java/util/AbstractList$Itr
-java/util/AbstractList$ListItr
-java/util/AbstractMap
-java/util/AbstractQueue
-java/util/AbstractSequentialList
-java/util/AbstractSet
-java/util/ArrayDeque
-java/util/ArrayList
-java/util/ArrayList$Itr
-java/util/ArrayList$ListItr
-java/util/ArrayList$SubList
-java/util/ArrayList$SubList$1
-java/util/Arrays
-java/util/Arrays$ArrayList
-java/util/Arrays$LegacyMergeSort
-java/util/BitSet
-java/util/Calendar
-java/util/Calendar$Builder
-java/util/Collection
-java/util/Collections
-java/util/Collections$3
-java/util/Collections$EmptyEnumeration
-java/util/Collections$EmptyIterator
-java/util/Collections$EmptyList
-java/util/Collections$EmptyMap
-java/util/Collections$EmptySet
-java/util/Collections$SetFromMap
-java/util/Collections$SynchronizedCollection
-java/util/Collections$SynchronizedMap
-java/util/Collections$SynchronizedSet
-java/util/Collections$UnmodifiableCollection
-java/util/Collections$UnmodifiableCollection$1
-java/util/Collections$UnmodifiableList
-java/util/Collections$UnmodifiableList$1
-java/util/Collections$UnmodifiableMap
-java/util/Collections$UnmodifiableRandomAccessList
-java/util/Collections$UnmodifiableSet
-java/util/ComparableTimSort
-java/util/Comparator
-java/util/Currency
-java/util/Currency$1
-java/util/Currency$CurrencyNameGetter
-java/util/Date
-java/util/Deque
-java/util/Dictionary
-java/util/Enumeration
-java/util/EventListener
-java/util/EventListenerProxy
-java/util/EventObject
-java/util/GregorianCalendar
-java/util/HashMap
-java/util/HashMap$EntryIterator
-java/util/HashMap$EntrySet
-java/util/HashMap$HashIterator
-java/util/HashMap$KeyIterator
-java/util/HashMap$KeySet
-java/util/HashMap$Node
-java/util/HashMap$TreeNode
-java/util/HashMap$ValueIterator
-java/util/HashMap$Values
-java/util/HashSet
-java/util/Hashtable
-java/util/Hashtable$Entry
-java/util/Hashtable$EntrySet
-java/util/Hashtable$Enumerator
-java/util/Hashtable$ValueCollection
-java/util/IdentityHashMap
-java/util/IdentityHashMap$IdentityHashMapIterator
-java/util/IdentityHashMap$KeyIterator
-java/util/IdentityHashMap$KeySet
-java/util/IdentityHashMap$ValueIterator
-java/util/IdentityHashMap$Values
-java/util/Iterator
-java/util/LinkedHashMap
-java/util/LinkedHashMap$Entry
-java/util/LinkedHashMap$LinkedEntryIterator
-java/util/LinkedHashMap$LinkedEntrySet
-java/util/LinkedHashMap$LinkedHashIterator
-java/util/LinkedHashMap$LinkedKeyIterator
-java/util/LinkedHashMap$LinkedKeySet
-java/util/LinkedList
-java/util/LinkedList$ListItr
-java/util/LinkedList$Node
-java/util/List
-java/util/ListIterator
-java/util/ListResourceBundle
-java/util/Locale
-java/util/Locale$1
-java/util/Locale$Cache
-java/util/Locale$Category
-java/util/Locale$LocaleKey
-java/util/Map
-java/util/Map$Entry
-java/util/MissingResourceException
-java/util/NavigableMap
-java/util/Objects
-java/util/PriorityQueue
-java/util/Properties
-java/util/Properties$LineReader
-java/util/PropertyResourceBundle
-java/util/Queue
-java/util/Random
-java/util/RandomAccess
-java/util/ResourceBundle
-java/util/ResourceBundle$1
-java/util/ResourceBundle$BundleReference
-java/util/ResourceBundle$CacheKey
-java/util/ResourceBundle$CacheKeyReference
-java/util/ResourceBundle$Control
-java/util/ResourceBundle$Control$1
-java/util/ResourceBundle$Control$CandidateListCache
-java/util/ResourceBundle$LoaderReference
-java/util/ResourceBundle$RBClassLoader
-java/util/ResourceBundle$RBClassLoader$1
-java/util/ResourceBundle$SingleFormatControl
-java/util/ServiceLoader
-java/util/ServiceLoader$1
-java/util/ServiceLoader$LazyIterator
-java/util/Set
-java/util/SortedMap
-java/util/Stack
-java/util/StringTokenizer
-java/util/TimSort
-java/util/TimeZone
-java/util/TimeZone$1
-java/util/TreeMap
-java/util/TreeMap$Entry
-java/util/Vector
-java/util/Vector$1
-java/util/Vector$Itr
-java/util/Vector$ListItr
-java/util/WeakHashMap
-java/util/WeakHashMap$Entry
-java/util/WeakHashMap$KeySet
-java/util/concurrent/AbstractExecutorService
-java/util/concurrent/BlockingQueue
-java/util/concurrent/ConcurrentHashMap
-java/util/concurrent/ConcurrentHashMap$BaseIterator
-java/util/concurrent/ConcurrentHashMap$CollectionView
-java/util/concurrent/ConcurrentHashMap$CounterCell
-java/util/concurrent/ConcurrentHashMap$EntrySetView
-java/util/concurrent/ConcurrentHashMap$ForwardingNode
-java/util/concurrent/ConcurrentHashMap$KeyIterator
-java/util/concurrent/ConcurrentHashMap$KeySetView
-java/util/concurrent/ConcurrentHashMap$Node
-java/util/concurrent/ConcurrentHashMap$Segment
-java/util/concurrent/ConcurrentHashMap$Traverser
-java/util/concurrent/ConcurrentHashMap$ValueIterator
-java/util/concurrent/ConcurrentHashMap$ValuesView
-java/util/concurrent/ConcurrentMap
-java/util/concurrent/CopyOnWriteArrayList
-java/util/concurrent/DelayQueue
-java/util/concurrent/Delayed
-java/util/concurrent/Executor
-java/util/concurrent/ExecutorService
-java/util/concurrent/Executors
-java/util/concurrent/RejectedExecutionHandler
-java/util/concurrent/SynchronousQueue
-java/util/concurrent/SynchronousQueue$TransferStack
-java/util/concurrent/SynchronousQueue$TransferStack$SNode
-java/util/concurrent/SynchronousQueue$Transferer
-java/util/concurrent/ThreadFactory
-java/util/concurrent/ThreadPoolExecutor
-java/util/concurrent/ThreadPoolExecutor$AbortPolicy
-java/util/concurrent/ThreadPoolExecutor$Worker
-java/util/concurrent/TimeUnit
-java/util/concurrent/TimeUnit$1
-java/util/concurrent/TimeUnit$2
-java/util/concurrent/TimeUnit$3
-java/util/concurrent/TimeUnit$4
-java/util/concurrent/TimeUnit$5
-java/util/concurrent/TimeUnit$6
-java/util/concurrent/TimeUnit$7
-java/util/concurrent/atomic/AtomicBoolean
-java/util/concurrent/atomic/AtomicInteger
-java/util/concurrent/atomic/AtomicLong
-java/util/concurrent/atomic/AtomicMarkableReference
-java/util/concurrent/atomic/AtomicMarkableReference$Pair
-java/util/concurrent/atomic/AtomicReferenceFieldUpdater
-java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
-java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl$1
-java/util/concurrent/locks/AbstractOwnableSynchronizer
-java/util/concurrent/locks/AbstractQueuedSynchronizer
-java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
-java/util/concurrent/locks/AbstractQueuedSynchronizer$Node
-java/util/concurrent/locks/Condition
-java/util/concurrent/locks/Lock
-java/util/concurrent/locks/LockSupport
-java/util/concurrent/locks/ReentrantLock
-java/util/concurrent/locks/ReentrantLock$NonfairSync
-java/util/concurrent/locks/ReentrantLock$Sync
-java/util/function/BiFunction
-java/util/jar/Attributes
-java/util/jar/Attributes$Name
-java/util/jar/JarEntry
-java/util/jar/JarFile
-java/util/jar/JarFile$JarEntryIterator
-java/util/jar/JarFile$JarFileEntry
-java/util/jar/JarVerifier
-java/util/jar/JarVerifier$3
-java/util/jar/JavaUtilJarAccessImpl
-java/util/jar/Manifest
-java/util/jar/Manifest$FastInputStream
-java/util/logging/Handler
-java/util/logging/Level
-java/util/logging/Level$KnownLevel
-java/util/logging/LogManager
-java/util/logging/LogManager$1
-java/util/logging/LogManager$2
-java/util/logging/LogManager$3
-java/util/logging/LogManager$5
-java/util/logging/LogManager$Cleaner
-java/util/logging/LogManager$LogNode
-java/util/logging/LogManager$LoggerContext
-java/util/logging/LogManager$LoggerContext$1
-java/util/logging/LogManager$LoggerWeakRef
-java/util/logging/LogManager$RootLogger
-java/util/logging/LogManager$SystemLoggerContext
-java/util/logging/Logger
-java/util/logging/Logger$1
-java/util/logging/LoggingPermission
-java/util/logging/LoggingProxyImpl
-java/util/spi/CalendarDataProvider
-java/util/spi/CurrencyNameProvider
-java/util/spi/LocaleNameProvider
-java/util/spi/LocaleServiceProvider
-java/util/spi/ResourceBundleControlProvider
-java/util/spi/TimeZoneNameProvider
-java/util/zip/CRC32
-java/util/zip/Checksum
-java/util/zip/DeflaterOutputStream
-java/util/zip/GZIPInputStream
-java/util/zip/Inflater
-java/util/zip/InflaterInputStream
-java/util/zip/ZStreamRef
-java/util/zip/ZipCoder
-java/util/zip/ZipConstants
-java/util/zip/ZipEntry
-java/util/zip/ZipFile
-java/util/zip/ZipFile$1
-java/util/zip/ZipFile$ZipEntryIterator
-java/util/zip/ZipFile$ZipFileInflaterInputStream
-java/util/zip/ZipFile$ZipFileInputStream
-java/util/zip/ZipInputStream
-java/util/zip/ZipUtils
-javax/accessibility/Accessible
-javax/accessibility/AccessibleAction
-javax/accessibility/AccessibleBundle
-javax/accessibility/AccessibleComponent
-javax/accessibility/AccessibleContext
-javax/accessibility/AccessibleExtendedComponent
-javax/accessibility/AccessibleRelationSet
-javax/accessibility/AccessibleState
-javax/accessibility/AccessibleText
-javax/accessibility/AccessibleValue
-javax/security/auth/Destroyable
-javax/sound/sampled/Control$Type
-javax/sound/sampled/DataLine
-javax/sound/sampled/DataLine$Info
-javax/sound/sampled/FloatControl$Type
-javax/sound/sampled/Line
-javax/sound/sampled/Line$Info
-javax/sound/sampled/LineUnavailableException
-javax/sound/sampled/UnsupportedAudioFileException
-javax/swing/AbstractAction
-javax/swing/AbstractButton
-javax/swing/AbstractButton$AccessibleAbstractButton
-javax/swing/AbstractButton$Handler
-javax/swing/AbstractCellEditor
-javax/swing/AbstractListModel
-javax/swing/Action
-javax/swing/ActionMap
-javax/swing/AncestorNotifier
-javax/swing/ArrayTable
-javax/swing/BorderFactory
-javax/swing/BoundedRangeModel
-javax/swing/Box
-javax/swing/Box$Filler
-javax/swing/BoxLayout
-javax/swing/BufferStrategyPaintManager
-javax/swing/BufferStrategyPaintManager$BufferInfo
-javax/swing/ButtonGroup
-javax/swing/ButtonModel
-javax/swing/CellEditor
-javax/swing/CellRendererPane
-javax/swing/ClientPropertyKey
-javax/swing/ClientPropertyKey$1
-javax/swing/ComboBoxEditor
-javax/swing/ComboBoxModel
-javax/swing/ComponentInputMap
-javax/swing/DefaultBoundedRangeModel
-javax/swing/DefaultButtonModel
-javax/swing/DefaultCellEditor
-javax/swing/DefaultCellEditor$1
-javax/swing/DefaultCellEditor$EditorDelegate
-javax/swing/DefaultComboBoxModel
-javax/swing/DefaultListCellRenderer
-javax/swing/DefaultListCellRenderer$UIResource
-javax/swing/DefaultListModel
-javax/swing/DefaultListSelectionModel
-javax/swing/DefaultSingleSelectionModel
-javax/swing/DropMode
-javax/swing/FocusManager
-javax/swing/GrayFilter
-javax/swing/Icon
-javax/swing/ImageIcon
-javax/swing/ImageIcon$1
-javax/swing/ImageIcon$2
-javax/swing/ImageIcon$2$1
-javax/swing/ImageIcon$3
-javax/swing/InputMap
-javax/swing/InternalFrameFocusTraversalPolicy
-javax/swing/JButton
-javax/swing/JCheckBox
-javax/swing/JCheckBoxMenuItem
-javax/swing/JCheckBoxMenuItem$AccessibleJCheckBoxMenuItem
-javax/swing/JComboBox
-javax/swing/JComboBox$1
-javax/swing/JComboBox$KeySelectionManager
-javax/swing/JComponent
-javax/swing/JComponent$1
-javax/swing/JComponent$2
-javax/swing/JComponent$AccessibleJComponent
-javax/swing/JDialog
-javax/swing/JEditorPane
-javax/swing/JFrame
-javax/swing/JInternalFrame
-javax/swing/JLabel
-javax/swing/JLayer
-javax/swing/JLayeredPane
-javax/swing/JList
-javax/swing/JList$3
-javax/swing/JList$ListSelectionHandler
-javax/swing/JMenu
-javax/swing/JMenu$MenuChangeListener
-javax/swing/JMenu$WinListener
-javax/swing/JMenuBar
-javax/swing/JMenuItem
-javax/swing/JMenuItem$AccessibleJMenuItem
-javax/swing/JMenuItem$MenuItemFocusListener
-javax/swing/JPanel
-javax/swing/JPopupMenu
-javax/swing/JPopupMenu$Separator
-javax/swing/JProgressBar
-javax/swing/JProgressBar$ModelListener
-javax/swing/JRadioButton
-javax/swing/JRadioButtonMenuItem
-javax/swing/JRootPane
-javax/swing/JRootPane$1
-javax/swing/JRootPane$RootLayout
-javax/swing/JScrollBar
-javax/swing/JScrollBar$ModelListener
-javax/swing/JScrollPane
-javax/swing/JScrollPane$ScrollBar
-javax/swing/JSeparator
-javax/swing/JSlider
-javax/swing/JSlider$ModelListener
-javax/swing/JSplitPane
-javax/swing/JTabbedPane
-javax/swing/JTabbedPane$ModelListener
-javax/swing/JTabbedPane$Page
-javax/swing/JTable
-javax/swing/JTable$2
-javax/swing/JTable$5
-javax/swing/JTable$Resizable2
-javax/swing/JTable$Resizable3
-javax/swing/JTextArea
-javax/swing/JTextField
-javax/swing/JTextField$NotifyAction
-javax/swing/JTextField$ScrollRepainter
-javax/swing/JToggleButton
-javax/swing/JToggleButton$ToggleButtonModel
-javax/swing/JToolBar
-javax/swing/JToolBar$DefaultToolBarLayout
-javax/swing/JToolBar$Separator
-javax/swing/JToolTip
-javax/swing/JTree
-javax/swing/JTree$TreeModelHandler
-javax/swing/JTree$TreeSelectionRedirector
-javax/swing/JViewport
-javax/swing/JViewport$ViewListener
-javax/swing/JWindow
-javax/swing/KeyStroke
-javax/swing/KeyboardManager
-javax/swing/KeyboardManager$ComponentKeyStrokePair
-javax/swing/LayoutComparator
-javax/swing/LayoutFocusTraversalPolicy
-javax/swing/ListCellRenderer
-javax/swing/ListModel
-javax/swing/ListSelectionModel
-javax/swing/LookAndFeel
-javax/swing/MenuElement
-javax/swing/MenuSelectionManager
-javax/swing/MultiUIDefaults
-javax/swing/MutableComboBoxModel
-javax/swing/RepaintManager
-javax/swing/RepaintManager$2
-javax/swing/RepaintManager$3
-javax/swing/RepaintManager$DisplayChangedHandler
-javax/swing/RepaintManager$PaintManager
-javax/swing/RepaintManager$ProcessingRunnable
-javax/swing/RootPaneContainer
-javax/swing/ScrollPaneConstants
-javax/swing/ScrollPaneLayout
-javax/swing/ScrollPaneLayout$UIResource
-javax/swing/Scrollable
-javax/swing/SingleSelectionModel
-javax/swing/SizeRequirements
-javax/swing/SortingFocusTraversalPolicy
-javax/swing/SwingConstants
-javax/swing/SwingContainerOrderFocusTraversalPolicy
-javax/swing/SwingDefaultFocusTraversalPolicy
-javax/swing/SwingPaintEventDispatcher
-javax/swing/SwingUtilities
-javax/swing/SwingUtilities$SharedOwnerFrame
-javax/swing/Timer
-javax/swing/Timer$DoPostEvent
-javax/swing/TimerQueue
-javax/swing/TimerQueue$1
-javax/swing/TimerQueue$DelayedTimer
-javax/swing/ToolTipManager
-javax/swing/ToolTipManager$AccessibilityKeyListener
-javax/swing/ToolTipManager$MoveBeforeEnterListener
-javax/swing/ToolTipManager$insideTimerAction
-javax/swing/ToolTipManager$outsideTimerAction
-javax/swing/ToolTipManager$stillInsideTimerAction
-javax/swing/TransferHandler
-javax/swing/TransferHandler$DropHandler
-javax/swing/TransferHandler$HasGetTransferHandler
-javax/swing/TransferHandler$SwingDropTarget
-javax/swing/TransferHandler$TransferAction
-javax/swing/TransferHandler$TransferSupport
-javax/swing/UIDefaults
-javax/swing/UIDefaults$ActiveValue
-javax/swing/UIDefaults$LazyInputMap
-javax/swing/UIDefaults$LazyValue
-javax/swing/UIDefaults$TextAndMnemonicHashMap
-javax/swing/UIManager
-javax/swing/UIManager$1
-javax/swing/UIManager$2
-javax/swing/UIManager$LAFState
-javax/swing/UIManager$LookAndFeelInfo
-javax/swing/UnsupportedLookAndFeelException
-javax/swing/ViewportLayout
-javax/swing/WindowConstants
-javax/swing/border/AbstractBorder
-javax/swing/border/BevelBorder
-javax/swing/border/Border
-javax/swing/border/CompoundBorder
-javax/swing/border/EmptyBorder
-javax/swing/border/EtchedBorder
-javax/swing/border/LineBorder
-javax/swing/border/MatteBorder
-javax/swing/border/TitledBorder
-javax/swing/event/AncestorEvent
-javax/swing/event/AncestorListener
-javax/swing/event/CaretEvent
-javax/swing/event/CaretListener
-javax/swing/event/CellEditorListener
-javax/swing/event/ChangeEvent
-javax/swing/event/ChangeListener
-javax/swing/event/DocumentEvent
-javax/swing/event/DocumentEvent$ElementChange
-javax/swing/event/DocumentEvent$EventType
-javax/swing/event/DocumentListener
-javax/swing/event/EventListenerList
-javax/swing/event/ListDataEvent
-javax/swing/event/ListDataListener
-javax/swing/event/ListSelectionEvent
-javax/swing/event/ListSelectionListener
-javax/swing/event/MenuDragMouseListener
-javax/swing/event/MenuEvent
-javax/swing/event/MenuKeyListener
-javax/swing/event/MenuListener
-javax/swing/event/MouseInputAdapter
-javax/swing/event/MouseInputListener
-javax/swing/event/PopupMenuListener
-javax/swing/event/RowSorterListener
-javax/swing/event/SwingPropertyChangeSupport
-javax/swing/event/TableColumnModelEvent
-javax/swing/event/TableColumnModelListener
-javax/swing/event/TableModelEvent
-javax/swing/event/TableModelListener
-javax/swing/event/TreeExpansionListener
-javax/swing/event/TreeModelEvent
-javax/swing/event/TreeModelListener
-javax/swing/event/TreeSelectionEvent
-javax/swing/event/TreeSelectionListener
-javax/swing/event/UndoableEditEvent
-javax/swing/event/UndoableEditListener
-javax/swing/filechooser/FileFilter
-javax/swing/plaf/ActionMapUIResource
-javax/swing/plaf/BorderUIResource
-javax/swing/plaf/BorderUIResource$CompoundBorderUIResource
-javax/swing/plaf/BorderUIResource$EmptyBorderUIResource
-javax/swing/plaf/BorderUIResource$LineBorderUIResource
-javax/swing/plaf/ButtonUI
-javax/swing/plaf/ColorUIResource
-javax/swing/plaf/ComboBoxUI
-javax/swing/plaf/ComponentInputMapUIResource
-javax/swing/plaf/ComponentUI
-javax/swing/plaf/DimensionUIResource
-javax/swing/plaf/FontUIResource
-javax/swing/plaf/InputMapUIResource
-javax/swing/plaf/InsetsUIResource
-javax/swing/plaf/LabelUI
-javax/swing/plaf/ListUI
-javax/swing/plaf/MenuBarUI
-javax/swing/plaf/MenuItemUI
-javax/swing/plaf/PanelUI
-javax/swing/plaf/PopupMenuUI
-javax/swing/plaf/ProgressBarUI
-javax/swing/plaf/RootPaneUI
-javax/swing/plaf/ScrollBarUI
-javax/swing/plaf/ScrollPaneUI
-javax/swing/plaf/SeparatorUI
-javax/swing/plaf/SliderUI
-javax/swing/plaf/SplitPaneUI
-javax/swing/plaf/TabbedPaneUI
-javax/swing/plaf/TableHeaderUI
-javax/swing/plaf/TableUI
-javax/swing/plaf/TextUI
-javax/swing/plaf/ToolBarUI
-javax/swing/plaf/TreeUI
-javax/swing/plaf/UIResource
-javax/swing/plaf/ViewportUI
-javax/swing/plaf/basic/BasicArrowButton
-javax/swing/plaf/basic/BasicBorders
-javax/swing/plaf/basic/BasicBorders$ButtonBorder
-javax/swing/plaf/basic/BasicBorders$MarginBorder
-javax/swing/plaf/basic/BasicBorders$RadioButtonBorder
-javax/swing/plaf/basic/BasicBorders$RolloverMarginBorder
-javax/swing/plaf/basic/BasicBorders$SplitPaneBorder
-javax/swing/plaf/basic/BasicBorders$SplitPaneDividerBorder
-javax/swing/plaf/basic/BasicButtonListener
-javax/swing/plaf/basic/BasicButtonUI
-javax/swing/plaf/basic/BasicCheckBoxMenuItemUI
-javax/swing/plaf/basic/BasicComboBoxEditor
-javax/swing/plaf/basic/BasicComboBoxEditor$BorderlessTextField
-javax/swing/plaf/basic/BasicComboBoxEditor$UIResource
-javax/swing/plaf/basic/BasicComboBoxRenderer
-javax/swing/plaf/basic/BasicComboBoxRenderer$UIResource
-javax/swing/plaf/basic/BasicComboBoxUI
-javax/swing/plaf/basic/BasicComboBoxUI$ComboBoxLayoutManager
-javax/swing/plaf/basic/BasicComboBoxUI$DefaultKeySelectionManager
-javax/swing/plaf/basic/BasicComboBoxUI$Handler
-javax/swing/plaf/basic/BasicComboBoxUI$PropertyChangeHandler
-javax/swing/plaf/basic/BasicComboPopup
-javax/swing/plaf/basic/BasicComboPopup$1
-javax/swing/plaf/basic/BasicComboPopup$EmptyListModelClass
-javax/swing/plaf/basic/BasicComboPopup$Handler
-javax/swing/plaf/basic/BasicGraphicsUtils
-javax/swing/plaf/basic/BasicHTML
-javax/swing/plaf/basic/BasicLabelUI
-javax/swing/plaf/basic/BasicListUI
-javax/swing/plaf/basic/BasicListUI$Handler
-javax/swing/plaf/basic/BasicListUI$ListTransferHandler
-javax/swing/plaf/basic/BasicLookAndFeel
-javax/swing/plaf/basic/BasicLookAndFeel$1
-javax/swing/plaf/basic/BasicLookAndFeel$2
-javax/swing/plaf/basic/BasicLookAndFeel$AWTEventHelper
-javax/swing/plaf/basic/BasicMenuBarUI
-javax/swing/plaf/basic/BasicMenuBarUI$Handler
-javax/swing/plaf/basic/BasicMenuItemUI
-javax/swing/plaf/basic/BasicMenuItemUI$Handler
-javax/swing/plaf/basic/BasicMenuUI
-javax/swing/plaf/basic/BasicMenuUI$Handler
-javax/swing/plaf/basic/BasicPanelUI
-javax/swing/plaf/basic/BasicPopupMenuUI
-javax/swing/plaf/basic/BasicPopupMenuUI$BasicMenuKeyListener
-javax/swing/plaf/basic/BasicPopupMenuUI$BasicPopupMenuListener
-javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper
-javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper$1
-javax/swing/plaf/basic/BasicPopupMenuUI$MouseGrabber
-javax/swing/plaf/basic/BasicProgressBarUI
-javax/swing/plaf/basic/BasicProgressBarUI$Handler
-javax/swing/plaf/basic/BasicRadioButtonMenuItemUI
-javax/swing/plaf/basic/BasicRadioButtonUI
-javax/swing/plaf/basic/BasicRootPaneUI
-javax/swing/plaf/basic/BasicRootPaneUI$RootPaneInputMap
-javax/swing/plaf/basic/BasicScrollBarUI
-javax/swing/plaf/basic/BasicScrollBarUI$ArrowButtonListener
-javax/swing/plaf/basic/BasicScrollBarUI$Handler
-javax/swing/plaf/basic/BasicScrollBarUI$ModelListener
-javax/swing/plaf/basic/BasicScrollBarUI$PropertyChangeHandler
-javax/swing/plaf/basic/BasicScrollBarUI$ScrollListener
-javax/swing/plaf/basic/BasicScrollBarUI$TrackListener
-javax/swing/plaf/basic/BasicScrollPaneUI
-javax/swing/plaf/basic/BasicScrollPaneUI$Handler
-javax/swing/plaf/basic/BasicSeparatorUI
-javax/swing/plaf/basic/BasicSliderUI
-javax/swing/plaf/basic/BasicSliderUI$Actions
-javax/swing/plaf/basic/BasicSliderUI$Handler
-javax/swing/plaf/basic/BasicSliderUI$PropertyChangeHandler
-javax/swing/plaf/basic/BasicSliderUI$ScrollListener
-javax/swing/plaf/basic/BasicSliderUI$TrackListener
-javax/swing/plaf/basic/BasicSplitPaneDivider
-javax/swing/plaf/basic/BasicSplitPaneDivider$DividerLayout
-javax/swing/plaf/basic/BasicSplitPaneDivider$MouseHandler
-javax/swing/plaf/basic/BasicSplitPaneDivider$OneTouchActionHandler
-javax/swing/plaf/basic/BasicSplitPaneUI
-javax/swing/plaf/basic/BasicSplitPaneUI$1
-javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager
-javax/swing/plaf/basic/BasicSplitPaneUI$Handler
-javax/swing/plaf/basic/BasicTabbedPaneUI
-javax/swing/plaf/basic/BasicTabbedPaneUI$Handler
-javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneLayout
-javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneScrollLayout
-javax/swing/plaf/basic/BasicTableHeaderUI
-javax/swing/plaf/basic/BasicTableHeaderUI$1
-javax/swing/plaf/basic/BasicTableHeaderUI$MouseInputHandler
-javax/swing/plaf/basic/BasicTableUI
-javax/swing/plaf/basic/BasicTableUI$Handler
-javax/swing/plaf/basic/BasicTableUI$TableTransferHandler
-javax/swing/plaf/basic/BasicTextAreaUI
-javax/swing/plaf/basic/BasicTextFieldUI
-javax/swing/plaf/basic/BasicTextUI
-javax/swing/plaf/basic/BasicTextUI$BasicCaret
-javax/swing/plaf/basic/BasicTextUI$BasicCursor
-javax/swing/plaf/basic/BasicTextUI$BasicHighlighter
-javax/swing/plaf/basic/BasicTextUI$DragListener
-javax/swing/plaf/basic/BasicTextUI$FocusAction
-javax/swing/plaf/basic/BasicTextUI$RootView
-javax/swing/plaf/basic/BasicTextUI$TextActionWrapper
-javax/swing/plaf/basic/BasicTextUI$TextTransferHandler
-javax/swing/plaf/basic/BasicTextUI$UpdateHandler
-javax/swing/plaf/basic/BasicToggleButtonUI
-javax/swing/plaf/basic/BasicToolBarSeparatorUI
-javax/swing/plaf/basic/BasicToolBarUI
-javax/swing/plaf/basic/BasicToolBarUI$DockingListener
-javax/swing/plaf/basic/BasicToolBarUI$Handler
-javax/swing/plaf/basic/BasicTreeUI
-javax/swing/plaf/basic/BasicTreeUI$Actions
-javax/swing/plaf/basic/BasicTreeUI$Handler
-javax/swing/plaf/basic/BasicTreeUI$NodeDimensionsHandler
-javax/swing/plaf/basic/BasicTreeUI$TreeTransferHandler
-javax/swing/plaf/basic/BasicViewportUI
-javax/swing/plaf/basic/ComboPopup
-javax/swing/plaf/basic/DefaultMenuLayout
-javax/swing/plaf/basic/DragRecognitionSupport$BeforeDrag
-javax/swing/plaf/basic/LazyActionMap
-javax/swing/plaf/metal/DefaultMetalTheme
-javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate
-javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate$1
-javax/swing/plaf/metal/MetalBorders
-javax/swing/plaf/metal/MetalBorders$ButtonBorder
-javax/swing/plaf/metal/MetalBorders$Flush3DBorder
-javax/swing/plaf/metal/MetalBorders$MenuBarBorder
-javax/swing/plaf/metal/MetalBorders$MenuItemBorder
-javax/swing/plaf/metal/MetalBorders$PopupMenuBorder
-javax/swing/plaf/metal/MetalBorders$RolloverButtonBorder
-javax/swing/plaf/metal/MetalBorders$RolloverMarginBorder
-javax/swing/plaf/metal/MetalBorders$ScrollPaneBorder
-javax/swing/plaf/metal/MetalBorders$TextFieldBorder
-javax/swing/plaf/metal/MetalBorders$ToggleButtonBorder
-javax/swing/plaf/metal/MetalBorders$ToolBarBorder
-javax/swing/plaf/metal/MetalBumps
-javax/swing/plaf/metal/MetalButtonUI
-javax/swing/plaf/metal/MetalCheckBoxUI
-javax/swing/plaf/metal/MetalComboBoxButton
-javax/swing/plaf/metal/MetalComboBoxButton$1
-javax/swing/plaf/metal/MetalComboBoxEditor
-javax/swing/plaf/metal/MetalComboBoxEditor$1
-javax/swing/plaf/metal/MetalComboBoxEditor$EditorBorder
-javax/swing/plaf/metal/MetalComboBoxEditor$UIResource
-javax/swing/plaf/metal/MetalComboBoxIcon
-javax/swing/plaf/metal/MetalComboBoxUI
-javax/swing/plaf/metal/MetalComboBoxUI$MetalComboBoxLayoutManager
-javax/swing/plaf/metal/MetalComboBoxUI$MetalPropertyChangeListener
-javax/swing/plaf/metal/MetalIconFactory
-javax/swing/plaf/metal/MetalIconFactory$CheckBoxIcon
-javax/swing/plaf/metal/MetalIconFactory$CheckBoxMenuItemIcon
-javax/swing/plaf/metal/MetalIconFactory$FolderIcon16
-javax/swing/plaf/metal/MetalIconFactory$HorizontalSliderThumbIcon
-javax/swing/plaf/metal/MetalIconFactory$MenuArrowIcon
-javax/swing/plaf/metal/MetalIconFactory$MenuItemArrowIcon
-javax/swing/plaf/metal/MetalIconFactory$RadioButtonIcon
-javax/swing/plaf/metal/MetalIconFactory$RadioButtonMenuItemIcon
-javax/swing/plaf/metal/MetalIconFactory$TreeFolderIcon
-javax/swing/plaf/metal/MetalIconFactory$VerticalSliderThumbIcon
-javax/swing/plaf/metal/MetalLabelUI
-javax/swing/plaf/metal/MetalLookAndFeel
-javax/swing/plaf/metal/MetalLookAndFeel$AATextListener
-javax/swing/plaf/metal/MetalLookAndFeel$FontActiveValue
-javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue
-javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue$1
-javax/swing/plaf/metal/MetalPopupMenuSeparatorUI
-javax/swing/plaf/metal/MetalProgressBarUI
-javax/swing/plaf/metal/MetalRadioButtonUI
-javax/swing/plaf/metal/MetalRootPaneUI
-javax/swing/plaf/metal/MetalScrollBarUI
-javax/swing/plaf/metal/MetalScrollBarUI$ScrollBarListener
-javax/swing/plaf/metal/MetalScrollButton
-javax/swing/plaf/metal/MetalScrollPaneUI
-javax/swing/plaf/metal/MetalScrollPaneUI$1
-javax/swing/plaf/metal/MetalSeparatorUI
-javax/swing/plaf/metal/MetalSliderUI
-javax/swing/plaf/metal/MetalSliderUI$MetalPropertyListener
-javax/swing/plaf/metal/MetalSplitPaneDivider
-javax/swing/plaf/metal/MetalSplitPaneDivider$1
-javax/swing/plaf/metal/MetalSplitPaneDivider$2
-javax/swing/plaf/metal/MetalSplitPaneUI
-javax/swing/plaf/metal/MetalTabbedPaneUI
-javax/swing/plaf/metal/MetalTabbedPaneUI$TabbedPaneLayout
-javax/swing/plaf/metal/MetalTextFieldUI
-javax/swing/plaf/metal/MetalTheme
-javax/swing/plaf/metal/MetalToggleButtonUI
-javax/swing/plaf/metal/MetalToolBarUI
-javax/swing/plaf/metal/MetalToolBarUI$MetalDockingListener
-javax/swing/plaf/metal/MetalTreeUI
-javax/swing/plaf/metal/MetalTreeUI$LineListener
-javax/swing/plaf/metal/OceanTheme
-javax/swing/plaf/metal/OceanTheme$1
-javax/swing/plaf/metal/OceanTheme$2
-javax/swing/plaf/metal/OceanTheme$3
-javax/swing/plaf/metal/OceanTheme$4
-javax/swing/plaf/metal/OceanTheme$5
-javax/swing/plaf/metal/OceanTheme$6
-javax/swing/plaf/synth/SynthConstants
-javax/swing/plaf/synth/SynthUI
-javax/swing/table/AbstractTableModel
-javax/swing/table/DefaultTableCellRenderer
-javax/swing/table/DefaultTableColumnModel
-javax/swing/table/DefaultTableModel
-javax/swing/table/JTableHeader
-javax/swing/table/TableCellEditor
-javax/swing/table/TableCellRenderer
-javax/swing/table/TableColumn
-javax/swing/table/TableColumnModel
-javax/swing/table/TableModel
-javax/swing/text/AbstractDocument
-javax/swing/text/AbstractDocument$1
-javax/swing/text/AbstractDocument$AbstractElement
-javax/swing/text/AbstractDocument$AttributeContext
-javax/swing/text/AbstractDocument$BidiElement
-javax/swing/text/AbstractDocument$BidiRootElement
-javax/swing/text/AbstractDocument$BranchElement
-javax/swing/text/AbstractDocument$Content
-javax/swing/text/AbstractDocument$DefaultDocumentEvent
-javax/swing/text/AbstractDocument$ElementEdit
-javax/swing/text/AbstractDocument$InsertStringResult
-javax/swing/text/AbstractDocument$LeafElement
-javax/swing/text/AttributeSet
-javax/swing/text/AttributeSet$CharacterAttribute
-javax/swing/text/AttributeSet$ColorAttribute
-javax/swing/text/AttributeSet$FontAttribute
-javax/swing/text/AttributeSet$ParagraphAttribute
-javax/swing/text/Caret
-javax/swing/text/DefaultCaret
-javax/swing/text/DefaultCaret$Handler
-javax/swing/text/DefaultEditorKit
-javax/swing/text/DefaultEditorKit$BeepAction
-javax/swing/text/DefaultEditorKit$BeginAction
-javax/swing/text/DefaultEditorKit$BeginLineAction
-javax/swing/text/DefaultEditorKit$BeginParagraphAction
-javax/swing/text/DefaultEditorKit$BeginWordAction
-javax/swing/text/DefaultEditorKit$CopyAction
-javax/swing/text/DefaultEditorKit$CutAction
-javax/swing/text/DefaultEditorKit$DefaultKeyTypedAction
-javax/swing/text/DefaultEditorKit$DeleteNextCharAction
-javax/swing/text/DefaultEditorKit$DeletePrevCharAction
-javax/swing/text/DefaultEditorKit$DeleteWordAction
-javax/swing/text/DefaultEditorKit$DumpModelAction
-javax/swing/text/DefaultEditorKit$EndAction
-javax/swing/text/DefaultEditorKit$EndLineAction
-javax/swing/text/DefaultEditorKit$EndParagraphAction
-javax/swing/text/DefaultEditorKit$EndWordAction
-javax/swing/text/DefaultEditorKit$InsertBreakAction
-javax/swing/text/DefaultEditorKit$InsertContentAction
-javax/swing/text/DefaultEditorKit$InsertTabAction
-javax/swing/text/DefaultEditorKit$NextVisualPositionAction
-javax/swing/text/DefaultEditorKit$NextWordAction
-javax/swing/text/DefaultEditorKit$PageAction
-javax/swing/text/DefaultEditorKit$PasteAction
-javax/swing/text/DefaultEditorKit$PreviousWordAction
-javax/swing/text/DefaultEditorKit$ReadOnlyAction
-javax/swing/text/DefaultEditorKit$SelectAllAction
-javax/swing/text/DefaultEditorKit$SelectLineAction
-javax/swing/text/DefaultEditorKit$SelectParagraphAction
-javax/swing/text/DefaultEditorKit$SelectWordAction
-javax/swing/text/DefaultEditorKit$ToggleComponentOrientationAction
-javax/swing/text/DefaultEditorKit$UnselectAction
-javax/swing/text/DefaultEditorKit$VerticalPageAction
-javax/swing/text/DefaultEditorKit$WritableAction
-javax/swing/text/DefaultHighlighter
-javax/swing/text/DefaultHighlighter$DefaultHighlightPainter
-javax/swing/text/DefaultHighlighter$SafeDamager
-javax/swing/text/Document
-javax/swing/text/EditorKit
-javax/swing/text/Element
-javax/swing/text/FieldView
-javax/swing/text/GapContent
-javax/swing/text/GapContent$InsertUndo
-javax/swing/text/GapContent$MarkData
-javax/swing/text/GapContent$MarkVector
-javax/swing/text/GapContent$StickyPosition
-javax/swing/text/GapVector
-javax/swing/text/Highlighter
-javax/swing/text/Highlighter$Highlight
-javax/swing/text/Highlighter$HighlightPainter
-javax/swing/text/JTextComponent
-javax/swing/text/JTextComponent$1
-javax/swing/text/JTextComponent$DefaultKeymap
-javax/swing/text/JTextComponent$KeymapActionMap
-javax/swing/text/JTextComponent$KeymapWrapper
-javax/swing/text/JTextComponent$MutableCaretEvent
-javax/swing/text/Keymap
-javax/swing/text/LayeredHighlighter
-javax/swing/text/LayeredHighlighter$LayerPainter
-javax/swing/text/MutableAttributeSet
-javax/swing/text/PlainDocument
-javax/swing/text/PlainView
-javax/swing/text/Position
-javax/swing/text/Position$Bias
-javax/swing/text/Segment
-javax/swing/text/SegmentCache
-javax/swing/text/SegmentCache$CachedSegment
-javax/swing/text/SimpleAttributeSet
-javax/swing/text/SimpleAttributeSet$EmptyAttributeSet
-javax/swing/text/Style
-javax/swing/text/StyleConstants
-javax/swing/text/StyleConstants$CharacterConstants
-javax/swing/text/StyleConstants$ColorConstants
-javax/swing/text/StyleConstants$FontConstants
-javax/swing/text/StyleConstants$ParagraphConstants
-javax/swing/text/StyleContext
-javax/swing/text/StyleContext$FontKey
-javax/swing/text/StyleContext$KeyEnumeration
-javax/swing/text/StyleContext$NamedStyle
-javax/swing/text/StyleContext$SmallAttributeSet
-javax/swing/text/TabExpander
-javax/swing/text/TextAction
-javax/swing/text/Utilities
-javax/swing/text/View
-javax/swing/text/ViewFactory
-javax/swing/tree/AbstractLayoutCache
-javax/swing/tree/AbstractLayoutCache$NodeDimensions
-javax/swing/tree/DefaultMutableTreeNode
-javax/swing/tree/DefaultMutableTreeNode$PreorderEnumeration
-javax/swing/tree/DefaultTreeCellEditor
-javax/swing/tree/DefaultTreeCellEditor$1
-javax/swing/tree/DefaultTreeCellEditor$DefaultTextField
-javax/swing/tree/DefaultTreeCellEditor$EditorContainer
-javax/swing/tree/DefaultTreeCellRenderer
-javax/swing/tree/DefaultTreeModel
-javax/swing/tree/DefaultTreeSelectionModel
-javax/swing/tree/MutableTreeNode
-javax/swing/tree/PathPlaceHolder
-javax/swing/tree/RowMapper
-javax/swing/tree/TreeCellEditor
-javax/swing/tree/TreeCellRenderer
-javax/swing/tree/TreeModel
-javax/swing/tree/TreeNode
-javax/swing/tree/TreePath
-javax/swing/tree/TreeSelectionModel
-javax/swing/tree/VariableHeightLayoutCache
-javax/swing/tree/VariableHeightLayoutCache$TreeStateNode
-javax/swing/undo/AbstractUndoableEdit
-javax/swing/undo/CompoundEdit
-javax/swing/undo/UndoableEdit
-javax/xml/parsers/DocumentBuilder
-javax/xml/parsers/DocumentBuilderFactory
-javax/xml/parsers/FactoryFinder
-javax/xml/parsers/FactoryFinder$1
-javax/xml/parsers/ParserConfigurationException
-javax/xml/parsers/SecuritySupport
-javax/xml/parsers/SecuritySupport$2
-javax/xml/parsers/SecuritySupport$5
-org/w3c/dom/Attr
-org/w3c/dom/CDATASection
-org/w3c/dom/CharacterData
-org/w3c/dom/Comment
-org/w3c/dom/DOMException
-org/w3c/dom/Document
-org/w3c/dom/DocumentFragment
-org/w3c/dom/DocumentType
-org/w3c/dom/Element
-org/w3c/dom/Entity
-org/w3c/dom/EntityReference
-org/w3c/dom/NamedNodeMap
-org/w3c/dom/Node
-org/w3c/dom/NodeList
-org/w3c/dom/Notation
-org/w3c/dom/ProcessingInstruction
-org/w3c/dom/Text
-org/w3c/dom/events/DocumentEvent
-org/w3c/dom/events/Event
-org/w3c/dom/events/EventException
-org/w3c/dom/events/EventTarget
-org/w3c/dom/events/MutationEvent
-org/w3c/dom/ranges/DocumentRange
-org/w3c/dom/ranges/Range
-org/w3c/dom/traversal/DocumentTraversal
-org/w3c/dom/traversal/NodeIterator
-org/w3c/dom/traversal/TreeWalker
-org/xml/sax/AttributeList
-org/xml/sax/ContentHandler
-org/xml/sax/DTDHandler
-org/xml/sax/EntityResolver
-org/xml/sax/ErrorHandler
-org/xml/sax/InputSource
-org/xml/sax/Locator
-org/xml/sax/SAXException
-org/xml/sax/SAXNotRecognizedException
-org/xml/sax/SAXNotSupportedException
-org/xml/sax/SAXParseException
-org/xml/sax/helpers/DefaultHandler
-sun/awt/AWTAccessor
-sun/awt/AWTAccessor$AWTEventAccessor
-sun/awt/AWTAccessor$ClientPropertyKeyAccessor
-sun/awt/AWTAccessor$ComponentAccessor
-sun/awt/AWTAccessor$ContainerAccessor
-sun/awt/AWTAccessor$CursorAccessor
-sun/awt/AWTAccessor$DefaultKeyboardFocusManagerAccessor
-sun/awt/AWTAccessor$EventQueueAccessor
-sun/awt/AWTAccessor$FrameAccessor
-sun/awt/AWTAccessor$InputEventAccessor
-sun/awt/AWTAccessor$InvocationEventAccessor
-sun/awt/AWTAccessor$KeyEventAccessor
-sun/awt/AWTAccessor$KeyboardFocusManagerAccessor
-sun/awt/AWTAccessor$SequencedEventAccessor
-sun/awt/AWTAccessor$ToolkitAccessor
-sun/awt/AWTAccessor$WindowAccessor
-sun/awt/AWTAutoShutdown
-sun/awt/AWTIcon32_java_icon16_png
-sun/awt/AWTIcon32_java_icon24_png
-sun/awt/AWTIcon32_java_icon32_png
-sun/awt/AWTIcon32_java_icon48_png
-sun/awt/AppContext
-sun/awt/AppContext$1
-sun/awt/AppContext$2
-sun/awt/AppContext$3
-sun/awt/AppContext$6
-sun/awt/AppContext$GetAppContextLock
-sun/awt/AppContext$State
-sun/awt/CausedFocusEvent
-sun/awt/CausedFocusEvent$Cause
-sun/awt/ComponentFactory
-sun/awt/ConstrainableGraphics
-sun/awt/DisplayChangedListener
-sun/awt/EmbeddedFrame
-sun/awt/EventQueueDelegate
-sun/awt/EventQueueItem
-sun/awt/FontConfiguration
-sun/awt/FontDescriptor
-sun/awt/GlobalCursorManager
-sun/awt/GlobalCursorManager$NativeUpdater
-sun/awt/HeadlessToolkit
-sun/awt/IconInfo
-sun/awt/InputMethodSupport
-sun/awt/KeyboardFocusManagerPeerImpl
-sun/awt/KeyboardFocusManagerPeerProvider
-sun/awt/LightweightFrame
-sun/awt/ModalityListener
-sun/awt/MostRecentKeyValue
-sun/awt/NullComponentPeer
-sun/awt/OSInfo
-sun/awt/OSInfo$1
-sun/awt/OSInfo$OSType
-sun/awt/OSInfo$WindowsVersion
-sun/awt/PaintEventDispatcher
-sun/awt/PeerEvent
-sun/awt/PostEventQueue
-sun/awt/RepaintArea
-sun/awt/RequestFocusController
-sun/awt/SubRegionShowable
-sun/awt/SunDisplayChanger
-sun/awt/SunGraphicsCallback
-sun/awt/SunHints
-sun/awt/SunHints$Key
-sun/awt/SunHints$LCDContrastKey
-sun/awt/SunHints$Value
-sun/awt/SunToolkit
-sun/awt/SunToolkit$ModalityListenerList
-sun/awt/TimedWindowEvent
-sun/awt/UNIXToolkit
-sun/awt/WindowClosingListener
-sun/awt/WindowClosingSupport
-sun/awt/X11/AwtGraphicsConfigData
-sun/awt/X11/AwtScreenData
-sun/awt/X11/MotifColorUtilities
-sun/awt/X11/MotifDnDConstants
-sun/awt/X11/MotifDnDDragSourceProtocol
-sun/awt/X11/MotifDnDDropTargetProtocol
-sun/awt/X11/Native
-sun/awt/X11/Native$1
-sun/awt/X11/OwnershipListener
-sun/awt/X11/PropMwmHints
-sun/awt/X11/UnsafeXDisposerRecord
-sun/awt/X11/WindowDimensions
-sun/awt/X11/WindowPropertyGetter
-sun/awt/X11/XAWTXSettings
-sun/awt/X11/XAnyEvent
-sun/awt/X11/XAtom
-sun/awt/X11/XAtomList
-sun/awt/X11/XAwtState
-sun/awt/X11/XBaseWindow
-sun/awt/X11/XBaseWindow$1
-sun/awt/X11/XBaseWindow$InitialiseState
-sun/awt/X11/XBaseWindow$StateLock
-sun/awt/X11/XCanvasPeer
-sun/awt/X11/XClientMessageEvent
-sun/awt/X11/XClipboard
-sun/awt/X11/XComponentPeer
-sun/awt/X11/XComponentPeer$1
-sun/awt/X11/XConfigureEvent
-sun/awt/X11/XContentWindow
-sun/awt/X11/XCreateWindowParams
-sun/awt/X11/XDecoratedPeer
-sun/awt/X11/XDnDConstants
-sun/awt/X11/XDnDDragSourceProtocol
-sun/awt/X11/XDnDDropTargetProtocol
-sun/awt/X11/XDragAndDropProtocols
-sun/awt/X11/XDragSourceContextPeer
-sun/awt/X11/XDragSourceProtocol
-sun/awt/X11/XDragSourceProtocolListener
-sun/awt/X11/XDropTargetContextPeer
-sun/awt/X11/XDropTargetContextPeer$XDropTargetProtocolListenerImpl
-sun/awt/X11/XDropTargetEventProcessor
-sun/awt/X11/XDropTargetProtocol
-sun/awt/X11/XDropTargetProtocolListener
-sun/awt/X11/XDropTargetRegistry
-sun/awt/X11/XEmbeddedFramePeer
-sun/awt/X11/XErrorEvent
-sun/awt/X11/XErrorHandler
-sun/awt/X11/XErrorHandler$IgnoreBadWindowHandler
-sun/awt/X11/XErrorHandler$VerifyChangePropertyHandler
-sun/awt/X11/XErrorHandler$XBaseErrorHandler
-sun/awt/X11/XErrorHandler$XErrorHandlerWithFlag
-sun/awt/X11/XErrorHandler$XShmAttachHandler
-sun/awt/X11/XErrorHandlerUtil
-sun/awt/X11/XEvent
-sun/awt/X11/XEventDispatcher
-sun/awt/X11/XExposeEvent
-sun/awt/X11/XFocusChangeEvent
-sun/awt/X11/XFocusProxyWindow
-sun/awt/X11/XFramePeer
-sun/awt/X11/XGlobalCursorManager
-sun/awt/X11/XInputMethod
-sun/awt/X11/XInputMethodDescriptor
-sun/awt/X11/XKeyboardFocusManagerPeer
-sun/awt/X11/XLabelPeer
-sun/awt/X11/XLayerProtocol
-sun/awt/X11/XMSelection
-sun/awt/X11/XMSelection$1
-sun/awt/X11/XMSelection$3
-sun/awt/X11/XMSelectionListener
-sun/awt/X11/XModifierKeymap
-sun/awt/X11/XNETProtocol
-sun/awt/X11/XPanelPeer
-sun/awt/X11/XPropertyCache
-sun/awt/X11/XPropertyEvent
-sun/awt/X11/XProtocol
-sun/awt/X11/XRepaintArea
-sun/awt/X11/XReparentEvent
-sun/awt/X11/XRootWindow
-sun/awt/X11/XSelection
-sun/awt/X11/XSelection$IncrementalTransferHandler
-sun/awt/X11/XSelection$SelectionEventHandler
-sun/awt/X11/XSetWindowAttributes
-sun/awt/X11/XSizeHints
-sun/awt/X11/XStateProtocol
-sun/awt/X11/XSystemTrayPeer
-sun/awt/X11/XToolkit
-sun/awt/X11/XToolkit$1
-sun/awt/X11/XToolkit$2
-sun/awt/X11/XToolkit$2$1
-sun/awt/X11/XToolkit$3
-sun/awt/X11/XToolkit$4
-sun/awt/X11/XToolkit$5
-sun/awt/X11/XUnmapEvent
-sun/awt/X11/XVisibilityEvent
-sun/awt/X11/XVisualInfo
-sun/awt/X11/XWINProtocol
-sun/awt/X11/XWM
-sun/awt/X11/XWM$1
-sun/awt/X11/XWMHints
-sun/awt/X11/XWindow
-sun/awt/X11/XWindowAttributes
-sun/awt/X11/XWindowAttributesData
-sun/awt/X11/XWindowPeer
-sun/awt/X11/XWindowPeer$2
-sun/awt/X11/XWindowPeer$4
-sun/awt/X11/XWrapperBase
-sun/awt/X11/XlibUtil
-sun/awt/X11/XlibWrapper
-sun/awt/X11ComponentPeer
-sun/awt/X11FontManager
-sun/awt/X11GraphicsConfig
-sun/awt/X11GraphicsConfig$X11GCDisposerRecord
-sun/awt/X11GraphicsDevice
-sun/awt/X11GraphicsEnvironment
-sun/awt/X11GraphicsEnvironment$1
-sun/awt/X11InputMethod
-sun/awt/X11InputMethodDescriptor
-sun/awt/XSettings
-sun/awt/XSettings$Update
-sun/awt/datatransfer/SunClipboard
-sun/awt/dnd/SunDragSourceContextPeer
-sun/awt/dnd/SunDropTargetContextPeer
-sun/awt/dnd/SunDropTargetEvent
-sun/awt/event/IgnorePaintEvent
-sun/awt/geom/PathConsumer2D
-sun/awt/im/ExecutableInputMethodManager
-sun/awt/im/ExecutableInputMethodManager$3
-sun/awt/im/InputContext
-sun/awt/im/InputMethodAdapter
-sun/awt/im/InputMethodContext
-sun/awt/im/InputMethodLocator
-sun/awt/im/InputMethodManager
-sun/awt/image/BufImgSurfaceData
-sun/awt/image/BufImgSurfaceData$ICMColorData
-sun/awt/image/BufImgSurfaceManager
-sun/awt/image/BufferedImageGraphicsConfig
-sun/awt/image/ByteComponentRaster
-sun/awt/image/ByteInterleavedRaster
-sun/awt/image/BytePackedRaster
-sun/awt/image/FetcherInfo
-sun/awt/image/GifFrame
-sun/awt/image/GifImageDecoder
-sun/awt/image/ImageConsumerQueue
-sun/awt/image/ImageDecoder
-sun/awt/image/ImageDecoder$1
-sun/awt/image/ImageFetchable
-sun/awt/image/ImageFetcher
-sun/awt/image/ImageFetcher$1
-sun/awt/image/ImageRepresentation
-sun/awt/image/ImageWatched
-sun/awt/image/ImageWatched$Link
-sun/awt/image/ImageWatched$WeakLink
-sun/awt/image/InputStreamImageSource
-sun/awt/image/IntegerComponentRaster
-sun/awt/image/IntegerInterleavedRaster
-sun/awt/image/NativeLibLoader
-sun/awt/image/NativeLibLoader$1
-sun/awt/image/OffScreenImage
-sun/awt/image/PNGFilterInputStream
-sun/awt/image/PNGImageDecoder
-sun/awt/image/PixelConverter
-sun/awt/image/PixelConverter$Argb
-sun/awt/image/PixelConverter$ArgbBm
-sun/awt/image/PixelConverter$ArgbPre
-sun/awt/image/PixelConverter$Bgrx
-sun/awt/image/PixelConverter$ByteGray
-sun/awt/image/PixelConverter$Rgba
-sun/awt/image/PixelConverter$RgbaPre
-sun/awt/image/PixelConverter$Rgbx
-sun/awt/image/PixelConverter$Ushort4444Argb
-sun/awt/image/PixelConverter$Ushort555Rgb
-sun/awt/image/PixelConverter$Ushort555Rgbx
-sun/awt/image/PixelConverter$Ushort565Rgb
-sun/awt/image/PixelConverter$UshortGray
-sun/awt/image/PixelConverter$Xbgr
-sun/awt/image/PixelConverter$Xrgb
-sun/awt/image/SunVolatileImage
-sun/awt/image/SunWritableRaster
-sun/awt/image/SunWritableRaster$DataStealer
-sun/awt/image/SurfaceManager
-sun/awt/image/SurfaceManager$ImageAccessor
-sun/awt/image/SurfaceManager$ProxiedGraphicsConfig
-sun/awt/image/ToolkitImage
-sun/awt/image/URLImageSource
-sun/awt/image/VolatileSurfaceManager
-sun/awt/motif/MFontConfiguration
-sun/awt/resources/awt
-sun/awt/util/IdentityArrayList
-sun/dc/DuctusRenderingEngine
-sun/dc/path/PathConsumer
-sun/dc/pr/PathDasher
-sun/dc/pr/PathDasher$1
-sun/dc/pr/PathStroker
-sun/dc/pr/PathStroker$1
-sun/font/AttributeValues
-sun/font/CMap
-sun/font/CMap$CMapFormat12
-sun/font/CMap$NullCMapClass
-sun/font/CharToGlyphMapper
-sun/font/CompositeFont
-sun/font/CompositeFontDescriptor
-sun/font/CompositeGlyphMapper
-sun/font/CompositeStrike
-sun/font/CoreMetrics
-sun/font/EAttribute
-sun/font/FcFontConfiguration
-sun/font/FileFont
-sun/font/FileFontStrike
-sun/font/Font2D
-sun/font/Font2DHandle
-sun/font/FontAccess
-sun/font/FontConfigManager
-sun/font/FontConfigManager$FcCompFont
-sun/font/FontConfigManager$FontConfigFont
-sun/font/FontConfigManager$FontConfigInfo
-sun/font/FontDesignMetrics
-sun/font/FontDesignMetrics$KeyReference
-sun/font/FontDesignMetrics$MetricsKey
-sun/font/FontFamily
-sun/font/FontLineMetrics
-sun/font/FontManager
-sun/font/FontManagerFactory
-sun/font/FontManagerFactory$1
-sun/font/FontManagerForSGE
-sun/font/FontManagerNativeLibrary
-sun/font/FontManagerNativeLibrary$1
-sun/font/FontScaler
-sun/font/FontStrike
-sun/font/FontStrikeDesc
-sun/font/FontStrikeDisposer
-sun/font/FontUtilities
-sun/font/FontUtilities$1
-sun/font/GlyphList
-sun/font/PhysicalFont
-sun/font/PhysicalStrike
-sun/font/StandardGlyphVector
-sun/font/StandardGlyphVector$GlyphStrike
-sun/font/StrikeCache
-sun/font/StrikeCache$1
-sun/font/StrikeCache$DisposableStrike
-sun/font/StrikeCache$SoftDisposerRef
-sun/font/StrikeMetrics
-sun/font/SunFontManager
-sun/font/SunFontManager$1
-sun/font/SunFontManager$11
-sun/font/SunFontManager$2
-sun/font/SunFontManager$3
-sun/font/SunFontManager$FontRegistrationInfo
-sun/font/SunFontManager$T1Filter
-sun/font/SunFontManager$TTFilter
-sun/font/T2KFontScaler
-sun/font/T2KFontScaler$1
-sun/font/TrueTypeFont
-sun/font/TrueTypeFont$1
-sun/font/TrueTypeFont$DirectoryEntry
-sun/font/TrueTypeFont$TTDisposerRecord
-sun/font/TrueTypeGlyphMapper
-sun/font/Type1Font
-sun/font/Type1Font$1
-sun/font/X11TextRenderer
-sun/java2d/BackBufferCapsProvider
-sun/java2d/DefaultDisposerRecord
-sun/java2d/DestSurfaceProvider
-sun/java2d/Disposer
-sun/java2d/Disposer$1
-sun/java2d/Disposer$2
-sun/java2d/Disposer$PollDisposable
-sun/java2d/DisposerRecord
-sun/java2d/DisposerTarget
-sun/java2d/FontSupport
-sun/java2d/InvalidPipeException
-sun/java2d/NullSurfaceData
-sun/java2d/StateTrackable
-sun/java2d/StateTrackable$State
-sun/java2d/StateTrackableDelegate
-sun/java2d/StateTrackableDelegate$2
-sun/java2d/SunGraphics2D
-sun/java2d/SunGraphicsEnvironment
-sun/java2d/SunGraphicsEnvironment$1
-sun/java2d/Surface
-sun/java2d/SurfaceData
-sun/java2d/SurfaceData$PixelToPgramLoopConverter
-sun/java2d/SurfaceData$PixelToShapeLoopConverter
-sun/java2d/SurfaceManagerFactory
-sun/java2d/UnixSurfaceManagerFactory
-sun/java2d/cmm/CMSManager
-sun/java2d/cmm/ProfileActivator
-sun/java2d/cmm/ProfileDeferralInfo
-sun/java2d/cmm/ProfileDeferralMgr
-sun/java2d/loops/Blit
-sun/java2d/loops/BlitBg
-sun/java2d/loops/CompositeType
-sun/java2d/loops/CustomComponent
-sun/java2d/loops/DrawGlyphList
-sun/java2d/loops/DrawGlyphListAA
-sun/java2d/loops/DrawGlyphListLCD
-sun/java2d/loops/DrawLine
-sun/java2d/loops/DrawParallelogram
-sun/java2d/loops/DrawPath
-sun/java2d/loops/DrawPolygons
-sun/java2d/loops/DrawRect
-sun/java2d/loops/FillParallelogram
-sun/java2d/loops/FillPath
-sun/java2d/loops/FillRect
-sun/java2d/loops/FillSpans
-sun/java2d/loops/FontInfo
-sun/java2d/loops/GeneralRenderer
-sun/java2d/loops/GraphicsPrimitive
-sun/java2d/loops/GraphicsPrimitiveMgr
-sun/java2d/loops/GraphicsPrimitiveMgr$1
-sun/java2d/loops/GraphicsPrimitiveMgr$2
-sun/java2d/loops/GraphicsPrimitiveMgr$PrimitiveSpec
-sun/java2d/loops/GraphicsPrimitiveProxy
-sun/java2d/loops/MaskBlit
-sun/java2d/loops/MaskFill
-sun/java2d/loops/RenderCache
-sun/java2d/loops/RenderCache$Entry
-sun/java2d/loops/RenderLoops
-sun/java2d/loops/ScaledBlit
-sun/java2d/loops/SurfaceType
-sun/java2d/loops/TransformHelper
-sun/java2d/loops/XORComposite
-sun/java2d/opengl/GLXGraphicsConfig
-sun/java2d/opengl/OGLGraphicsConfig
-sun/java2d/pipe/AAShapePipe
-sun/java2d/pipe/AATextRenderer
-sun/java2d/pipe/AlphaColorPipe
-sun/java2d/pipe/AlphaPaintPipe
-sun/java2d/pipe/CompositePipe
-sun/java2d/pipe/DrawImage
-sun/java2d/pipe/DrawImagePipe
-sun/java2d/pipe/GeneralCompositePipe
-sun/java2d/pipe/GlyphListLoopPipe
-sun/java2d/pipe/GlyphListPipe
-sun/java2d/pipe/LCDTextRenderer
-sun/java2d/pipe/LoopBasedPipe
-sun/java2d/pipe/LoopPipe
-sun/java2d/pipe/NullPipe
-sun/java2d/pipe/OutlineTextRenderer
-sun/java2d/pipe/ParallelogramPipe
-sun/java2d/pipe/PixelDrawPipe
-sun/java2d/pipe/PixelFillPipe
-sun/java2d/pipe/PixelToParallelogramConverter
-sun/java2d/pipe/PixelToShapeConverter
-sun/java2d/pipe/Region
-sun/java2d/pipe/Region$ImmutableRegion
-sun/java2d/pipe/RegionIterator
-sun/java2d/pipe/RenderingEngine
-sun/java2d/pipe/RenderingEngine$1
-sun/java2d/pipe/ShapeDrawPipe
-sun/java2d/pipe/ShapeSpanIterator
-sun/java2d/pipe/SolidTextRenderer
-sun/java2d/pipe/SpanClipRenderer
-sun/java2d/pipe/SpanIterator
-sun/java2d/pipe/SpanShapeRenderer
-sun/java2d/pipe/SpanShapeRenderer$Composite
-sun/java2d/pipe/TextPipe
-sun/java2d/pipe/TextRenderer
-sun/java2d/pipe/ValidatePipe
-sun/java2d/pipe/hw/AccelGraphicsConfig
-sun/java2d/pipe/hw/BufferedContextProvider
-sun/java2d/x11/X11Renderer
-sun/java2d/x11/X11SurfaceData
-sun/java2d/x11/X11SurfaceData$LazyPipe
-sun/java2d/x11/X11SurfaceData$X11WindowSurfaceData
-sun/java2d/x11/X11VolatileSurfaceManager
-sun/java2d/x11/XSurfaceData
-sun/java2d/xr/XRGraphicsConfig
-sun/launcher/LauncherHelper
-sun/launcher/LauncherHelper$FXHelper
-sun/misc/ASCIICaseInsensitiveComparator
-sun/misc/Cleaner
-sun/misc/CompoundEnumeration
-sun/misc/ExtensionDependency
-sun/misc/FDBigInteger
-sun/misc/FileURLMapper
-sun/misc/FloatingDecimal
-sun/misc/FloatingDecimal$1
-sun/misc/FloatingDecimal$ASCIIToBinaryBuffer
-sun/misc/FloatingDecimal$ASCIIToBinaryConverter
-sun/misc/FloatingDecimal$BinaryToASCIIBuffer
-sun/misc/FloatingDecimal$BinaryToASCIIConverter
-sun/misc/FloatingDecimal$ExceptionalBinaryToASCIIBuffer
-sun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer
-sun/misc/IOUtils
-sun/misc/JarIndex
-sun/misc/JavaAWTAccess
-sun/misc/JavaIOFileDescriptorAccess
-sun/misc/JavaLangAccess
-sun/misc/JavaNetAccess
-sun/misc/JavaNioAccess
-sun/misc/JavaSecurityAccess
-sun/misc/JavaSecurityProtectionDomainAccess
-sun/misc/JavaUtilJarAccess
-sun/misc/JavaUtilZipFileAccess
-sun/misc/Launcher
-sun/misc/Launcher$AppClassLoader
-sun/misc/Launcher$AppClassLoader$1
-sun/misc/Launcher$BootClassPathHolder
-sun/misc/Launcher$BootClassPathHolder$1
-sun/misc/Launcher$ExtClassLoader
-sun/misc/Launcher$ExtClassLoader$1
-sun/misc/Launcher$Factory
-sun/misc/MetaIndex
-sun/misc/NativeSignalHandler
-sun/misc/OSEnvironment
-sun/misc/Perf
-sun/misc/Perf$GetPerfAction
-sun/misc/PerfCounter
-sun/misc/PerfCounter$CoreCounters
-sun/misc/PerformanceLogger
-sun/misc/PerformanceLogger$TimeData
-sun/misc/PostVMInitHook
-sun/misc/Resource
-sun/misc/SharedSecrets
-sun/misc/Signal
-sun/misc/SignalHandler
-sun/misc/SoftCache
-sun/misc/SoftCache$ValueCell
-sun/misc/URLClassPath
-sun/misc/URLClassPath$1
-sun/misc/URLClassPath$2
-sun/misc/URLClassPath$3
-sun/misc/URLClassPath$FileLoader
-sun/misc/URLClassPath$JarLoader
-sun/misc/URLClassPath$JarLoader$1
-sun/misc/URLClassPath$JarLoader$2
-sun/misc/URLClassPath$Loader
-sun/misc/Unsafe
-sun/misc/VM
-sun/misc/Version
-sun/net/DefaultProgressMeteringPolicy
-sun/net/InetAddressCachePolicy
-sun/net/InetAddressCachePolicy$1
-sun/net/InetAddressCachePolicy$2
-sun/net/NetHooks
-sun/net/NetHooks$Provider
-sun/net/NetProperties
-sun/net/NetProperties$1
-sun/net/ProgressMeteringPolicy
-sun/net/ProgressMonitor
-sun/net/ResourceManager
-sun/net/sdp/SdpProvider
-sun/net/spi/DefaultProxySelector
-sun/net/spi/DefaultProxySelector$1
-sun/net/spi/DefaultProxySelector$3
-sun/net/spi/DefaultProxySelector$NonProxyInfo
-sun/net/spi/nameservice/NameService
-sun/net/util/IPAddressUtil
-sun/net/util/URLUtil
-sun/net/www/MessageHeader
-sun/net/www/MimeEntry
-sun/net/www/MimeTable
-sun/net/www/MimeTable$1
-sun/net/www/MimeTable$DefaultInstanceHolder
-sun/net/www/MimeTable$DefaultInstanceHolder$1
-sun/net/www/ParseUtil
-sun/net/www/URLConnection
-sun/net/www/protocol/file/FileURLConnection
-sun/net/www/protocol/file/Handler
-sun/net/www/protocol/http/Handler
-sun/net/www/protocol/jar/Handler
-sun/net/www/protocol/jar/JarFileFactory
-sun/net/www/protocol/jar/JarURLConnection
-sun/net/www/protocol/jar/JarURLConnection$JarURLInputStream
-sun/net/www/protocol/jar/URLJarFile
-sun/net/www/protocol/jar/URLJarFile$URLJarFileCloseController
-sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry
-sun/nio/ByteBuffered
-sun/nio/ch/DirectBuffer
-sun/nio/ch/FileChannelImpl
-sun/nio/ch/FileChannelImpl$Unmapper
-sun/nio/ch/FileDispatcher
-sun/nio/ch/FileDispatcherImpl
-sun/nio/ch/IOStatus
-sun/nio/ch/IOUtil
-sun/nio/ch/IOUtil$1
-sun/nio/ch/Interruptible
-sun/nio/ch/NativeDispatcher
-sun/nio/ch/NativeThread
-sun/nio/ch/NativeThreadSet
-sun/nio/ch/Util
-sun/nio/ch/Util$1
-sun/nio/ch/Util$4
-sun/nio/ch/Util$BufferCache
-sun/nio/cs/ArrayDecoder
-sun/nio/cs/ArrayEncoder
-sun/nio/cs/FastCharsetProvider
-sun/nio/cs/HistoricallyNamedCharset
-sun/nio/cs/ISO_8859_1
-sun/nio/cs/ISO_8859_1$Encoder
-sun/nio/cs/StandardCharsets
-sun/nio/cs/StandardCharsets$Aliases
-sun/nio/cs/StandardCharsets$Cache
-sun/nio/cs/StandardCharsets$Classes
-sun/nio/cs/StreamDecoder
-sun/nio/cs/StreamEncoder
-sun/nio/cs/Surrogate
-sun/nio/cs/Surrogate$Parser
-sun/nio/cs/US_ASCII
-sun/nio/cs/US_ASCII$Decoder
-sun/nio/cs/UTF_16
-sun/nio/cs/UTF_16$Decoder
-sun/nio/cs/UTF_16BE
-sun/nio/cs/UTF_16LE
-sun/nio/cs/UTF_8
-sun/nio/cs/UTF_8$Decoder
-sun/nio/cs/UTF_8$Encoder
-sun/nio/cs/Unicode
-sun/nio/cs/UnicodeDecoder
-sun/print/PrinterGraphicsConfig
-sun/reflect/AccessorGenerator
-sun/reflect/BootstrapConstructorAccessorImpl
-sun/reflect/ByteVector
-sun/reflect/ByteVectorFactory
-sun/reflect/ByteVectorImpl
-sun/reflect/CallerSensitive
-sun/reflect/ClassDefiner
-sun/reflect/ClassDefiner$1
-sun/reflect/ClassFileAssembler
-sun/reflect/ClassFileConstants
-sun/reflect/ConstantPool
-sun/reflect/ConstructorAccessor
-sun/reflect/ConstructorAccessorImpl
-sun/reflect/DelegatingClassLoader
-sun/reflect/DelegatingConstructorAccessorImpl
-sun/reflect/DelegatingMethodAccessorImpl
-sun/reflect/FieldAccessor
-sun/reflect/FieldAccessorImpl
-sun/reflect/Label
-sun/reflect/Label$PatchInfo
-sun/reflect/LangReflectAccess
-sun/reflect/MagicAccessorImpl
-sun/reflect/MethodAccessor
-sun/reflect/MethodAccessorGenerator
-sun/reflect/MethodAccessorGenerator$1
-sun/reflect/MethodAccessorImpl
-sun/reflect/NativeConstructorAccessorImpl
-sun/reflect/NativeMethodAccessorImpl
-sun/reflect/Reflection
-sun/reflect/ReflectionFactory
-sun/reflect/ReflectionFactory$1
-sun/reflect/ReflectionFactory$GetReflectionFactoryAction
-sun/reflect/SerializationConstructorAccessorImpl
-sun/reflect/UTF8
-sun/reflect/UnsafeFieldAccessorFactory
-sun/reflect/UnsafeFieldAccessorImpl
-sun/reflect/UnsafeObjectFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticObjectFieldAccessorImpl
-sun/reflect/UnsafeStaticFieldAccessorImpl
-sun/reflect/annotation/AnnotationType
-sun/reflect/generics/repository/AbstractRepository
-sun/reflect/generics/repository/ClassRepository
-sun/reflect/generics/repository/GenericDeclRepository
-sun/reflect/misc/MethodUtil
-sun/reflect/misc/MethodUtil$1
-sun/reflect/misc/ReflectUtil
-sun/security/action/GetBooleanAction
-sun/security/action/GetIntegerAction
-sun/security/action/GetPropertyAction
-sun/security/jca/GetInstance
-sun/security/jca/GetInstance$Instance
-sun/security/jca/ProviderConfig
-sun/security/jca/ProviderConfig$2
-sun/security/jca/ProviderList
-sun/security/jca/ProviderList$1
-sun/security/jca/ProviderList$2
-sun/security/jca/ProviderList$3
-sun/security/jca/ProviderList$ServiceList
-sun/security/jca/ProviderList$ServiceList$1
-sun/security/jca/Providers
-sun/security/jca/ServiceId
-sun/security/provider/ByteArrayAccess
-sun/security/provider/DSA
-sun/security/provider/DSA$LegacyDSA
-sun/security/provider/DSA$SHA1withDSA
-sun/security/provider/DSAParameters
-sun/security/provider/DSAPublicKey
-sun/security/provider/DigestBase
-sun/security/provider/NativePRNG
-sun/security/provider/NativePRNG$1
-sun/security/provider/NativePRNG$2
-sun/security/provider/NativePRNG$Blocking
-sun/security/provider/NativePRNG$NonBlocking
-sun/security/provider/NativePRNG$RandomIO
-sun/security/provider/NativePRNG$Variant
-sun/security/provider/SHA
-sun/security/provider/Sun
-sun/security/provider/SunEntries
-sun/security/provider/SunEntries$1
-sun/security/util/BitArray
-sun/security/util/ByteArrayLexOrder
-sun/security/util/Debug
-sun/security/util/DerEncoder
-sun/security/util/DerIndefLenConverter
-sun/security/util/DerInputBuffer
-sun/security/util/DerInputStream
-sun/security/util/DerOutputStream
-sun/security/util/DerValue
-sun/security/util/ManifestEntryVerifier
-sun/security/util/ObjectIdentifier
-sun/security/util/SignatureFileVerifier
-sun/security/x509/AlgorithmId
-sun/security/x509/X509Key
-sun/swing/DefaultLookup
-sun/swing/ImageIconUIResource
-sun/swing/JLightweightFrame
-sun/swing/MenuItemLayoutHelper
-sun/swing/MenuItemLayoutHelper$ColumnAlignment
-sun/swing/MenuItemLayoutHelper$LayoutResult
-sun/swing/MenuItemLayoutHelper$RectSize
-sun/swing/PrintColorUIResource
-sun/swing/StringUIClientPropertyKey
-sun/swing/SwingAccessor
-sun/swing/SwingAccessor$JTextComponentAccessor
-sun/swing/SwingLazyValue
-sun/swing/SwingLazyValue$1
-sun/swing/SwingUtilities2
-sun/swing/SwingUtilities2$2
-sun/swing/SwingUtilities2$AATextInfo
-sun/swing/SwingUtilities2$LSBCacheEntry
-sun/swing/UIAction
-sun/swing/UIClientPropertyKey
-sun/swing/table/DefaultTableCellHeaderRenderer
-sun/swing/table/DefaultTableCellHeaderRenderer$EmptyIcon
-sun/text/ComposedCharIter
-sun/text/IntHashtable
-sun/text/UCompactIntArray
-sun/text/normalizer/CharTrie
-sun/text/normalizer/CharTrie$FriendAgent
-sun/text/normalizer/ICUBinary
-sun/text/normalizer/ICUBinary$Authenticate
-sun/text/normalizer/ICUData
-sun/text/normalizer/IntTrie
-sun/text/normalizer/NormalizerDataReader
-sun/text/normalizer/NormalizerImpl
-sun/text/normalizer/NormalizerImpl$AuxTrieImpl
-sun/text/normalizer/NormalizerImpl$DecomposeArgs
-sun/text/normalizer/NormalizerImpl$FCDTrieImpl
-sun/text/normalizer/NormalizerImpl$NormTrieImpl
-sun/text/normalizer/Trie
-sun/text/normalizer/Trie$DataManipulate
-sun/text/normalizer/UTF16
-sun/text/normalizer/UnicodeMatcher
-sun/text/normalizer/UnicodeSet
-sun/text/resources/CollationData
-sun/text/resources/FormatData
-sun/text/resources/en/FormatData_en
-sun/text/resources/en/FormatData_en_US
-sun/util/CoreResourceBundleControl
-sun/util/PreHashedMap
-sun/util/ResourceBundleEnumeration
-sun/util/calendar/AbstractCalendar
-sun/util/calendar/BaseCalendar
-sun/util/calendar/BaseCalendar$Date
-sun/util/calendar/CalendarDate
-sun/util/calendar/CalendarSystem
-sun/util/calendar/CalendarUtils
-sun/util/calendar/Gregorian
-sun/util/calendar/Gregorian$Date
-sun/util/calendar/ZoneInfo
-sun/util/calendar/ZoneInfoFile
-sun/util/calendar/ZoneInfoFile$1
-sun/util/calendar/ZoneInfoFile$Checksum
-sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule
-sun/util/locale/BaseLocale
-sun/util/locale/BaseLocale$Cache
-sun/util/locale/BaseLocale$Key
-sun/util/locale/LanguageTag
-sun/util/locale/LocaleObjectCache
-sun/util/locale/LocaleObjectCache$CacheEntry
-sun/util/locale/LocaleUtils
-sun/util/locale/provider/AuxLocaleProviderAdapter
-sun/util/locale/provider/AuxLocaleProviderAdapter$NullProvider
-sun/util/locale/provider/AvailableLanguageTags
-sun/util/locale/provider/CalendarDataProviderImpl
-sun/util/locale/provider/CalendarDataUtility
-sun/util/locale/provider/CalendarDataUtility$CalendarWeekParameterGetter
-sun/util/locale/provider/CalendarProviderImpl
-sun/util/locale/provider/CollatorProviderImpl
-sun/util/locale/provider/CurrencyNameProviderImpl
-sun/util/locale/provider/DateFormatSymbolsProviderImpl
-sun/util/locale/provider/DecimalFormatSymbolsProviderImpl
-sun/util/locale/provider/JRELocaleProviderAdapter
-sun/util/locale/provider/JRELocaleProviderAdapter$1
-sun/util/locale/provider/LocaleDataMetaInfo
-sun/util/locale/provider/LocaleProviderAdapter
-sun/util/locale/provider/LocaleProviderAdapter$1
-sun/util/locale/provider/LocaleProviderAdapter$Type
-sun/util/locale/provider/LocaleResources
-sun/util/locale/provider/LocaleResources$ResourceReference
-sun/util/locale/provider/LocaleServiceProviderPool
-sun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter
-sun/util/locale/provider/NumberFormatProviderImpl
-sun/util/locale/provider/ResourceBundleBasedAdapter
-sun/util/locale/provider/SPILocaleProviderAdapter
-sun/util/locale/provider/SPILocaleProviderAdapter$1
-sun/util/locale/provider/TimeZoneNameProviderImpl
-sun/util/locale/provider/TimeZoneNameUtility
-sun/util/locale/provider/TimeZoneNameUtility$TimeZoneNameGetter
-sun/util/logging/LoggingProxy
-sun/util/logging/LoggingSupport
-sun/util/logging/LoggingSupport$1
-sun/util/logging/LoggingSupport$2
-sun/util/logging/PlatformLogger
-sun/util/logging/PlatformLogger$1
-sun/util/logging/PlatformLogger$DefaultLoggerProxy
-sun/util/logging/PlatformLogger$JavaLoggerProxy
-sun/util/logging/PlatformLogger$Level
-sun/util/logging/PlatformLogger$LoggerProxy
-sun/util/logging/resources/logging
-sun/util/resources/CalendarData
-sun/util/resources/CurrencyNames
-sun/util/resources/LocaleData
-sun/util/resources/LocaleData$1
-sun/util/resources/LocaleData$LocaleDataResourceBundleControl
-sun/util/resources/LocaleNamesBundle
-sun/util/resources/OpenListResourceBundle
-sun/util/resources/ParallelListResourceBundle
-sun/util/resources/ParallelListResourceBundle$KeySet
-sun/util/resources/TimeZoneNames
-sun/util/resources/TimeZoneNamesBundle
-sun/util/resources/en/CalendarData_en
-sun/util/resources/en/CurrencyNames_en_US
-sun/util/resources/en/TimeZoneNames_en
-sun/util/spi/CalendarProvider
-# e4fe875988768cf5
--- a/jdk/make/data/classlist/classlist.macosx Mon May 09 12:55:03 2016 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2208 +0,0 @@
-apple/laf/JRSUIConstants
-apple/laf/JRSUIConstants$AlignmentHorizontal
-apple/laf/JRSUIConstants$AlignmentVertical
-apple/laf/JRSUIConstants$Animating
-apple/laf/JRSUIConstants$DoubleValue
-apple/laf/JRSUIConstants$Focused
-apple/laf/JRSUIConstants$FrameOnly
-apple/laf/JRSUIConstants$Hit
-apple/laf/JRSUIConstants$IndicatorOnly
-apple/laf/JRSUIConstants$Key
-apple/laf/JRSUIConstants$NothingToScroll
-apple/laf/JRSUIConstants$Orientation
-apple/laf/JRSUIConstants$Property
-apple/laf/JRSUIConstants$PropertyEncoding
-apple/laf/JRSUIConstants$ScrollBarPart
-apple/laf/JRSUIConstants$SegmentPosition
-apple/laf/JRSUIConstants$SegmentTrailingSeparator
-apple/laf/JRSUIConstants$ShowArrows
-apple/laf/JRSUIConstants$Size
-apple/laf/JRSUIConstants$State
-apple/laf/JRSUIConstants$Widget
-apple/laf/JRSUIControl
-apple/laf/JRSUIControl$BufferState
-apple/laf/JRSUIControl$ThreadLocalByteBuffer
-apple/laf/JRSUIState
-apple/laf/JRSUIState$ScrollBarState
-apple/laf/JRSUIState$ValueState
-apple/laf/JRSUIStateFactory
-apple/laf/JRSUIUtils
-apple/laf/JRSUIUtils$NineSliceMetricsProvider
-apple/laf/JRSUIUtils$TabbedPane
-com/apple/eawt/AboutHandler
-com/apple/eawt/AppEventListener
-com/apple/eawt/AppReOpenedListener
-com/apple/eawt/OpenFilesHandler
-com/apple/eawt/PreferencesHandler
-com/apple/eawt/PrintFilesHandler
-com/apple/eawt/QuitHandler
-com/apple/eawt/QuitStrategy
-com/apple/eawt/_AppEventHandler
-com/apple/eawt/_AppEventHandler$_AboutDispatcher
-com/apple/eawt/_AppEventHandler$_AppEventDispatcher
-com/apple/eawt/_AppEventHandler$_AppEventMultiplexor
-com/apple/eawt/_AppEventHandler$_AppForegroundDispatcher
-com/apple/eawt/_AppEventHandler$_AppReOpenedDispatcher
-com/apple/eawt/_AppEventHandler$_BooleanAppEventMultiplexor
-com/apple/eawt/_AppEventHandler$_HiddenAppDispatcher
-com/apple/eawt/_AppEventHandler$_NativeEvent
-com/apple/eawt/_AppEventHandler$_OpenAppDispatcher
-com/apple/eawt/_AppEventHandler$_OpenFileDispatcher
-com/apple/eawt/_AppEventHandler$_OpenURIDispatcher
-com/apple/eawt/_AppEventHandler$_PreferencesDispatcher
-com/apple/eawt/_AppEventHandler$_PrintFileDispatcher
-com/apple/eawt/_AppEventHandler$_QueuingAppEventDispatcher
-com/apple/eawt/_AppEventHandler$_QuitDispatcher
-com/apple/eawt/_AppEventHandler$_ScreenSleepDispatcher
-com/apple/eawt/_AppEventHandler$_SystemSleepDispatcher
-com/apple/eawt/_AppEventHandler$_UserSessionDispatcher
-com/apple/eawt/_AppEventLegacyHandler
-com/apple/eawt/_AppMenuBarHandler
-com/apple/eawt/_OpenAppHandler
-com/apple/laf/AquaBorder
-com/apple/laf/AquaButtonBorder
-com/apple/laf/AquaButtonBorder$1
-com/apple/laf/AquaButtonBorder$Dynamic
-com/apple/laf/AquaButtonBorder$Dynamic$1
-com/apple/laf/AquaButtonBorder$Named
-com/apple/laf/AquaButtonBorder$Toggle
-com/apple/laf/AquaButtonBorder$Toolbar
-com/apple/laf/AquaButtonExtendedTypes
-com/apple/laf/AquaButtonExtendedTypes$1
-com/apple/laf/AquaButtonExtendedTypes$2
-com/apple/laf/AquaButtonExtendedTypes$3
-com/apple/laf/AquaButtonExtendedTypes$4
-com/apple/laf/AquaButtonExtendedTypes$5
-com/apple/laf/AquaButtonExtendedTypes$6
-com/apple/laf/AquaButtonExtendedTypes$7
-com/apple/laf/AquaButtonExtendedTypes$8
-com/apple/laf/AquaButtonExtendedTypes$BorderDefinedTypeSpecifier
-com/apple/laf/AquaButtonExtendedTypes$BorderDefinedTypeSpecifier$1
-com/apple/laf/AquaButtonExtendedTypes$SegmentedBorderDefinedTypeSpecifier
-com/apple/laf/AquaButtonExtendedTypes$SegmentedNamedBorder
-com/apple/laf/AquaButtonExtendedTypes$TypeSpecifier
-com/apple/laf/AquaButtonToggleUI
-com/apple/laf/AquaButtonUI
-com/apple/laf/AquaButtonUI$AquaButtonListener
-com/apple/laf/AquaButtonUI$AquaHierarchyButtonListener
-com/apple/laf/AquaCaret
-com/apple/laf/AquaComboBoxButton
-com/apple/laf/AquaComboBoxButton$1
-com/apple/laf/AquaComboBoxPopup
-com/apple/laf/AquaComboBoxPopup$1
-com/apple/laf/AquaComboBoxRenderer
-com/apple/laf/AquaComboBoxRendererInternal
-com/apple/laf/AquaComboBoxUI
-com/apple/laf/AquaComboBoxUI$1
-com/apple/laf/AquaComboBoxUI$10
-com/apple/laf/AquaComboBoxUI$11
-com/apple/laf/AquaComboBoxUI$12
-com/apple/laf/AquaComboBoxUI$12$1
-com/apple/laf/AquaComboBoxUI$12$2
-com/apple/laf/AquaComboBoxUI$12$3
-com/apple/laf/AquaComboBoxUI$12$4
-com/apple/laf/AquaComboBoxUI$12$5
-com/apple/laf/AquaComboBoxUI$12$6
-com/apple/laf/AquaComboBoxUI$12$7
-com/apple/laf/AquaComboBoxUI$2
-com/apple/laf/AquaComboBoxUI$3
-com/apple/laf/AquaComboBoxUI$4
-com/apple/laf/AquaComboBoxUI$5
-com/apple/laf/AquaComboBoxUI$6
-com/apple/laf/AquaComboBoxUI$7
-com/apple/laf/AquaComboBoxUI$8
-com/apple/laf/AquaComboBoxUI$9
-com/apple/laf/AquaComboBoxUI$AquaComboBoxEditor
-com/apple/laf/AquaComboBoxUI$AquaComboBoxLayoutManager
-com/apple/laf/AquaComboBoxUI$AquaCustomComboTextField
-com/apple/laf/AquaComboBoxUI$AquaCustomComboTextField$1
-com/apple/laf/AquaComboBoxUI$ComboBoxAction
-com/apple/laf/AquaFocusHandler
-com/apple/laf/AquaFocusHandler$1
-com/apple/laf/AquaFonts
-com/apple/laf/AquaFonts$1
-com/apple/laf/AquaFonts$2
-com/apple/laf/AquaFonts$3
-com/apple/laf/AquaFonts$4
-com/apple/laf/AquaFonts$5
-com/apple/laf/AquaFonts$6
-com/apple/laf/AquaFonts$7
-com/apple/laf/AquaFonts$DerivedUIResourceFont
-com/apple/laf/AquaHighlighter
-com/apple/laf/AquaHighlighter$1
-com/apple/laf/AquaHighlighter$AquaHighlightPainter
-com/apple/laf/AquaIcon$CachingScalingIcon
-com/apple/laf/AquaIcon$InvertableIcon
-com/apple/laf/AquaIcon$SystemIcon
-com/apple/laf/AquaIcon$SystemIconSingleton
-com/apple/laf/AquaIcon$SystemIconUIResourceSingleton
-com/apple/laf/AquaImageFactory
-com/apple/laf/AquaImageFactory$IconUIResourceSingleton
-com/apple/laf/AquaImageFactory$InvertableImageIcon
-com/apple/laf/AquaImageFactory$NamedImageSingleton
-com/apple/laf/AquaImageFactory$SystemColorProxy
-com/apple/laf/AquaKeyBindings
-com/apple/laf/AquaKeyBindings$AquaMultilineAction
-com/apple/laf/AquaKeyBindings$BindingsProvider
-com/apple/laf/AquaKeyBindings$LateBoundInputMap
-com/apple/laf/AquaKeyBindings$SimpleBinding
-com/apple/laf/AquaLabelUI
-com/apple/laf/AquaListUI
-com/apple/laf/AquaListUI$AquaHomeEndAction
-com/apple/laf/AquaListUI$AquaPropertyChangeHandler
-com/apple/laf/AquaListUI$FocusHandler
-com/apple/laf/AquaListUI$MouseInputHandler
-com/apple/laf/AquaLookAndFeel
-com/apple/laf/AquaLookAndFeel$1
-com/apple/laf/AquaLookAndFeel$2
-com/apple/laf/AquaLookAndFeel$3
-com/apple/laf/AquaMenuBarBorder
-com/apple/laf/AquaMenuBarUI
-com/apple/laf/AquaMenuBorder
-com/apple/laf/AquaMenuItemUI
-com/apple/laf/AquaMenuItemUI$IndeterminateListener
-com/apple/laf/AquaMenuPainter
-com/apple/laf/AquaMenuPainter$Client
-com/apple/laf/AquaMenuPainter$RecyclableBorder
-com/apple/laf/AquaMenuUI
-com/apple/laf/AquaMenuUI$AquaMouseInputHandler
-com/apple/laf/AquaMenuUI$MenuDragMouseHandler
-com/apple/laf/AquaMnemonicHandler
-com/apple/laf/AquaMnemonicHandler$AltProcessor
-com/apple/laf/AquaPainter
-com/apple/laf/AquaPainter$1
-com/apple/laf/AquaPainter$AquaNineSlicingImagePainter
-com/apple/laf/AquaPainter$AquaSingleImagePainter
-com/apple/laf/AquaPanelUI
-com/apple/laf/AquaPopupMenuSeparatorUI
-com/apple/laf/AquaPopupMenuUI
-com/apple/laf/AquaRootPaneUI
-com/apple/laf/AquaScrollBarUI
-com/apple/laf/AquaScrollBarUI$1
-com/apple/laf/AquaScrollBarUI$ModelListener
-com/apple/laf/AquaScrollBarUI$PropertyChangeHandler
-com/apple/laf/AquaScrollBarUI$ScrollListener
-com/apple/laf/AquaScrollBarUI$TrackListener
-com/apple/laf/AquaScrollPaneUI
-com/apple/laf/AquaScrollPaneUI$XYMouseWheelHandler
-com/apple/laf/AquaScrollRegionBorder
-com/apple/laf/AquaTableHeaderBorder
-com/apple/laf/AquaTableHeaderBorder$1
-com/apple/laf/AquaTextAreaUI
-com/apple/laf/AquaTextFieldBorder
-com/apple/laf/AquaTextFieldSearch
-com/apple/laf/AquaTextFieldSearch$SearchFieldBorder
-com/apple/laf/AquaTextFieldSearch$SearchFieldPropertyListener
-com/apple/laf/AquaTextFieldUI
-com/apple/laf/AquaToolBarSeparatorUI
-com/apple/laf/AquaToolBarUI
-com/apple/laf/AquaToolBarUI$ToolBarBorder
-com/apple/laf/AquaUtilControlSize
-com/apple/laf/AquaUtilControlSize$PropertySizeListener
-com/apple/laf/AquaUtilControlSize$SizeDescriptor
-com/apple/laf/AquaUtilControlSize$SizeVariant
-com/apple/laf/AquaUtilControlSize$Sizeable
-com/apple/laf/AquaUtils
-com/apple/laf/AquaUtils$2
-com/apple/laf/AquaUtils$5
-com/apple/laf/AquaUtils$6
-com/apple/laf/AquaUtils$JComponentPainter
-com/apple/laf/AquaUtils$RecyclableSingleton
-com/apple/laf/AquaUtils$RecyclableSingletonFromDefaultConstructor
-com/apple/laf/ClientPropertyApplicator
-com/apple/laf/ClientPropertyApplicator$Property
-com/apple/laf/ImageCache
-com/apple/laf/ImageCache$1
-com/apple/laf/ImageCache$PixelCountSoftReference
-com/apple/laf/ScreenMenuBar
-com/apple/laf/ScreenMenuBarProvider
-com/apple/laf/ScreenMenuPropertyHandler
-com/apple/laf/ScreenPopupFactory
-com/apple/laf/ScreenPopupFactory$1
-com/apple/laf/resources/aqua
-com/sun/java/swing/SwingUtilities3
-com/sun/swing/internal/plaf/basic/resources/basic
-java/applet/Applet
-java/awt/AWTEvent
-java/awt/AWTEvent$1
-java/awt/AWTEvent$2
-java/awt/AWTEventMulticaster
-java/awt/AWTKeyStroke
-java/awt/AWTKeyStroke$1
-java/awt/ActiveEvent
-java/awt/Adjustable
-java/awt/AlphaComposite
-java/awt/BasicStroke
-java/awt/BorderLayout
-java/awt/Canvas
-java/awt/CardLayout
-java/awt/Color
-java/awt/Component
-java/awt/Component$1
-java/awt/Component$3
-java/awt/Component$AWTTreeLock
-java/awt/Component$DummyRequestFocusController
-java/awt/ComponentOrientation
-java/awt/Composite
-java/awt/Conditional
-java/awt/Container
-java/awt/Container$1
-java/awt/Container$EventTargetFilter
-java/awt/Container$MouseEventTargetFilter
-java/awt/ContainerOrderFocusTraversalPolicy
-java/awt/Cursor
-java/awt/Cursor$1
-java/awt/DefaultFocusTraversalPolicy
-java/awt/DefaultKeyboardFocusManager
-java/awt/DefaultKeyboardFocusManager$1
-java/awt/DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent
-java/awt/DefaultKeyboardFocusManager$TypeAheadMarker
-java/awt/Dialog
-java/awt/Dialog$1
-java/awt/Dialog$3
-java/awt/Dialog$ModalExclusionType
-java/awt/Dialog$ModalityType
-java/awt/Dimension
-java/awt/Event
-java/awt/EventDispatchThread
-java/awt/EventDispatchThread$1
-java/awt/EventDispatchThread$HierarchyEventFilter
-java/awt/EventFilter
-java/awt/EventFilter$FilterAction
-java/awt/EventQueue
-java/awt/EventQueue$1
-java/awt/EventQueue$2
-java/awt/EventQueue$3
-java/awt/EventQueue$4
-java/awt/EventQueue$5
-java/awt/FlowLayout
-java/awt/FocusTraversalPolicy
-java/awt/Font
-java/awt/Font$FontAccessImpl
-java/awt/FontMetrics
-java/awt/Frame
-java/awt/Frame$1
-java/awt/Graphics
-java/awt/Graphics2D
-java/awt/GraphicsCallback
-java/awt/GraphicsCallback$PaintCallback
-java/awt/GraphicsConfiguration
-java/awt/GraphicsDevice
-java/awt/GraphicsEnvironment
-java/awt/GraphicsEnvironment$1
-java/awt/Image
-java/awt/Image$1
-java/awt/ImageCapabilities
-java/awt/ImageMediaEntry
-java/awt/Insets
-java/awt/ItemSelectable
-java/awt/KeyEventDispatcher
-java/awt/KeyEventPostProcessor
-java/awt/KeyboardFocusManager
-java/awt/KeyboardFocusManager$1
-java/awt/KeyboardFocusManager$2
-java/awt/KeyboardFocusManager$3
-java/awt/KeyboardFocusManager$HeavyweightFocusRequest
-java/awt/KeyboardFocusManager$LightweightFocusRequest
-java/awt/Label
-java/awt/LayoutManager
-java/awt/LayoutManager2
-java/awt/LightweightDispatcher
-java/awt/LightweightDispatcher$1
-java/awt/LightweightDispatcher$2
-java/awt/MediaEntry
-java/awt/MediaTracker
-java/awt/MenuBar
-java/awt/MenuComponent
-java/awt/MenuContainer
-java/awt/ModalEventFilter
-java/awt/ModalEventFilter$1
-java/awt/ModalEventFilter$ApplicationModalEventFilter
-java/awt/Paint
-java/awt/Panel
-java/awt/Point
-java/awt/PrintGraphics
-java/awt/Queue
-java/awt/Rectangle
-java/awt/RenderingHints
-java/awt/RenderingHints$Key
-java/awt/SecondaryLoop
-java/awt/SentEvent
-java/awt/SequencedEvent
-java/awt/Shape
-java/awt/SplashScreen
-java/awt/Stroke
-java/awt/SystemColor
-java/awt/Toolkit
-java/awt/Toolkit$1
-java/awt/Toolkit$2
-java/awt/Toolkit$3
-java/awt/Toolkit$4
-java/awt/Toolkit$5
-java/awt/Toolkit$DesktopPropertyChangeSupport
-java/awt/Toolkit$SelectiveAWTEventListener
-java/awt/Toolkit$ToolkitEventMulticaster
-java/awt/Transparency
-java/awt/TrayIcon
-java/awt/VKCollection
-java/awt/WaitDispatchSupport
-java/awt/WaitDispatchSupport$1
-java/awt/WaitDispatchSupport$2
-java/awt/WaitDispatchSupport$5
-java/awt/Window
-java/awt/Window$1
-java/awt/Window$1DisposeAction
-java/awt/Window$Type
-java/awt/Window$WindowDisposerRecord
-java/awt/color/ColorSpace
-java/awt/color/ICC_ColorSpace
-java/awt/color/ICC_Profile
-java/awt/color/ICC_Profile$1
-java/awt/color/ICC_ProfileRGB
-java/awt/datatransfer/Clipboard
-java/awt/datatransfer/ClipboardOwner
-java/awt/datatransfer/DataFlavor
-java/awt/datatransfer/FlavorMap
-java/awt/datatransfer/FlavorTable
-java/awt/datatransfer/MimeType
-java/awt/datatransfer/MimeTypeParameterList
-java/awt/datatransfer/MimeTypeParseException
-java/awt/datatransfer/SystemFlavorMap
-java/awt/datatransfer/SystemFlavorMap$1
-java/awt/datatransfer/SystemFlavorMap$2
-java/awt/datatransfer/Transferable
-java/awt/dnd/DropTarget
-java/awt/dnd/DropTargetContext
-java/awt/dnd/DropTargetListener
-java/awt/dnd/peer/DragSourceContextPeer
-java/awt/dnd/peer/DropTargetPeer
-java/awt/event/AWTEventListener
-java/awt/event/AWTEventListenerProxy
-java/awt/event/ActionEvent
-java/awt/event/ActionListener
-java/awt/event/AdjustmentEvent
-java/awt/event/AdjustmentListener
-java/awt/event/ComponentAdapter
-java/awt/event/ComponentEvent
-java/awt/event/ComponentListener
-java/awt/event/ContainerEvent
-java/awt/event/ContainerListener
-java/awt/event/FocusAdapter
-java/awt/event/FocusEvent
-java/awt/event/FocusListener
-java/awt/event/HierarchyBoundsListener
-java/awt/event/HierarchyEvent
-java/awt/event/HierarchyListener
-java/awt/event/InputEvent
-java/awt/event/InputEvent$1
-java/awt/event/InputMethodEvent
-java/awt/event/InputMethodListener
-java/awt/event/InvocationEvent
-java/awt/event/ItemListener
-java/awt/event/KeyAdapter
-java/awt/event/KeyEvent
-java/awt/event/KeyEvent$1
-java/awt/event/KeyListener
-java/awt/event/MouseAdapter
-java/awt/event/MouseEvent
-java/awt/event/MouseListener
-java/awt/event/MouseMotionAdapter
-java/awt/event/MouseMotionListener
-java/awt/event/MouseWheelEvent
-java/awt/event/MouseWheelListener
-java/awt/event/NativeLibLoader
-java/awt/event/NativeLibLoader$1
-java/awt/event/PaintEvent
-java/awt/event/TextListener
-java/awt/event/WindowAdapter
-java/awt/event/WindowEvent
-java/awt/event/WindowFocusListener
-java/awt/event/WindowListener
-java/awt/event/WindowStateListener
-java/awt/font/FontRenderContext
-java/awt/font/GlyphVector
-java/awt/font/LineMetrics
-java/awt/font/TextAttribute
-java/awt/geom/AffineTransform
-java/awt/geom/Dimension2D
-java/awt/geom/GeneralPath
-java/awt/geom/Path2D
-java/awt/geom/Path2D$Float
-java/awt/geom/Point2D
-java/awt/geom/Point2D$Double
-java/awt/geom/Point2D$Float
-java/awt/geom/Rectangle2D
-java/awt/geom/Rectangle2D$Double
-java/awt/geom/Rectangle2D$Float
-java/awt/geom/RectangularShape
-java/awt/im/InputContext
-java/awt/im/InputMethodRequests
-java/awt/im/spi/InputMethod
-java/awt/im/spi/InputMethodContext
-java/awt/im/spi/InputMethodDescriptor
-java/awt/image/BufferStrategy
-java/awt/image/BufferedImage
-java/awt/image/BufferedImage$1
-java/awt/image/ColorModel
-java/awt/image/ColorModel$1
-java/awt/image/ComponentSampleModel
-java/awt/image/DataBuffer
-java/awt/image/DataBuffer$1
-java/awt/image/DataBufferByte
-java/awt/image/DataBufferInt
-java/awt/image/DirectColorModel
-java/awt/image/FilteredImageSource
-java/awt/image/ImageConsumer
-java/awt/image/ImageFilter
-java/awt/image/ImageObserver
-java/awt/image/ImageProducer
-java/awt/image/IndexColorModel
-java/awt/image/PackedColorModel
-java/awt/image/PixelInterleavedSampleModel
-java/awt/image/RGBImageFilter
-java/awt/image/Raster
-java/awt/image/RenderedImage
-java/awt/image/SampleModel
-java/awt/image/SinglePixelPackedSampleModel
-java/awt/image/VolatileImage
-java/awt/image/WritableRaster
-java/awt/image/WritableRenderedImage
-java/awt/peer/CanvasPeer
-java/awt/peer/ComponentPeer
-java/awt/peer/ContainerPeer
-java/awt/peer/DialogPeer
-java/awt/peer/FramePeer
-java/awt/peer/KeyboardFocusManagerPeer
-java/awt/peer/LabelPeer
-java/awt/peer/LightweightPeer
-java/awt/peer/PanelPeer
-java/awt/peer/WindowPeer
-java/awt/print/PrinterGraphics
-java/beans/ChangeListenerMap
-java/beans/PropertyChangeEvent
-java/beans/PropertyChangeListener
-java/beans/PropertyChangeListenerProxy
-java/beans/PropertyChangeSupport
-java/beans/PropertyChangeSupport$PropertyChangeListenerMap
-java/io/Bits
-java/io/BufferedInputStream
-java/io/BufferedOutputStream
-java/io/BufferedReader
-java/io/BufferedWriter
-java/io/ByteArrayInputStream
-java/io/ByteArrayOutputStream
-java/io/Closeable
-java/io/DataInput
-java/io/DataInputStream
-java/io/DataOutput
-java/io/DataOutputStream
-java/io/DefaultFileSystem
-java/io/EOFException
-java/io/ExpiringCache
-java/io/ExpiringCache$1
-java/io/ExpiringCache$Entry
-java/io/Externalizable
-java/io/File
-java/io/File$PathStatus
-java/io/FileDescriptor
-java/io/FileDescriptor$1
-java/io/FileInputStream
-java/io/FileInputStream$1
-java/io/FileNotFoundException
-java/io/FileOutputStream
-java/io/FileOutputStream$1
-java/io/FilePermission
-java/io/FilePermission$1
-java/io/FilePermissionCollection
-java/io/FileReader
-java/io/FileSystem
-java/io/FileWriter
-java/io/FilenameFilter
-java/io/FilterInputStream
-java/io/FilterOutputStream
-java/io/FilterReader
-java/io/Flushable
-java/io/IOException
-java/io/InputStream
-java/io/InputStreamReader
-java/io/ObjectInput
-java/io/ObjectInputStream
-java/io/ObjectOutput
-java/io/ObjectOutputStream
-java/io/ObjectOutputStream$BlockDataOutputStream
-java/io/ObjectOutputStream$HandleTable
-java/io/ObjectOutputStream$ReplaceTable
-java/io/ObjectStreamClass
-java/io/ObjectStreamClass$2
-java/io/ObjectStreamClass$Caches
-java/io/ObjectStreamClass$EntryFuture
-java/io/ObjectStreamClass$FieldReflector
-java/io/ObjectStreamClass$FieldReflectorKey
-java/io/ObjectStreamClass$WeakClassKey
-java/io/ObjectStreamConstants
-java/io/ObjectStreamField
-java/io/OutputStream
-java/io/OutputStreamWriter
-java/io/PrintStream
-java/io/PrintWriter
-java/io/RandomAccessFile
-java/io/Reader
-java/io/Serializable
-java/io/StringReader
-java/io/StringWriter
-java/io/UnixFileSystem
-java/io/UnsupportedEncodingException
-java/io/Writer
-java/lang/AbstractStringBuilder
-java/lang/Appendable
-java/lang/ApplicationShutdownHooks
-java/lang/ApplicationShutdownHooks$1
-java/lang/ArithmeticException
-java/lang/ArrayIndexOutOfBoundsException
-java/lang/ArrayStoreException
-java/lang/AutoCloseable
-java/lang/Boolean
-java/lang/BootstrapMethodError
-java/lang/Byte
-java/lang/CharSequence
-java/lang/Character
-java/lang/Character$CharacterCache
-java/lang/CharacterData
-java/lang/CharacterDataLatin1
-java/lang/Class
-java/lang/Class$1
-java/lang/Class$3
-java/lang/Class$4
-java/lang/Class$AnnotationData
-java/lang/Class$Atomic
-java/lang/Class$ReflectionData
-java/lang/ClassCastException
-java/lang/ClassLoader
-java/lang/ClassLoader$2
-java/lang/ClassLoader$3
-java/lang/ClassLoader$NativeLibrary
-java/lang/ClassLoader$ParallelLoaders
-java/lang/ClassLoaderHelper
-java/lang/ClassNotFoundException
-java/lang/ClassValue$ClassValueMap
-java/lang/CloneNotSupportedException
-java/lang/Cloneable
-java/lang/Comparable
-java/lang/Compiler
-java/lang/Compiler$1
-java/lang/Double
-java/lang/Enum
-java/lang/Error
-java/lang/Exception
-java/lang/ExceptionInInitializerError
-java/lang/Float
-java/lang/IllegalAccessError
-java/lang/IllegalAccessException
-java/lang/IllegalArgumentException
-java/lang/IllegalMonitorStateException
-java/lang/IllegalStateException
-java/lang/IncompatibleClassChangeError
-java/lang/IndexOutOfBoundsException
-java/lang/InstantiationException
-java/lang/Integer
-java/lang/Integer$IntegerCache
-java/lang/InternalError
-java/lang/InterruptedException
-java/lang/Iterable
-java/lang/LinkageError
-java/lang/Long
-java/lang/Long$LongCache
-java/lang/Math
-java/lang/NoClassDefFoundError
-java/lang/NoSuchFieldException
-java/lang/NoSuchMethodError
-java/lang/NoSuchMethodException
-java/lang/NullPointerException
-java/lang/Number
-java/lang/NumberFormatException
-java/lang/Object
-java/lang/OutOfMemoryError
-java/lang/Package
-java/lang/Process
-java/lang/ProcessBuilder
-java/lang/ProcessBuilder$NullInputStream
-java/lang/ProcessBuilder$NullOutputStream
-java/lang/ProcessEnvironment
-java/lang/ProcessEnvironment$ExternalData
-java/lang/ProcessEnvironment$StringEnvironment
-java/lang/ProcessEnvironment$Value
-java/lang/ProcessEnvironment$Variable
-java/lang/ProcessImpl
-java/lang/Readable
-java/lang/ReflectiveOperationException
-java/lang/Runnable
-java/lang/Runtime
-java/lang/RuntimeException
-java/lang/RuntimePermission
-java/lang/SecurityException
-java/lang/SecurityManager
-java/lang/Short
-java/lang/Short$ShortCache
-java/lang/Shutdown
-java/lang/Shutdown$Lock
-java/lang/StackOverflowError
-java/lang/StackTraceElement
-java/lang/StrictMath
-java/lang/String
-java/lang/String$CaseInsensitiveComparator
-java/lang/StringBuffer
-java/lang/StringBuilder
-java/lang/StringCoding
-java/lang/StringCoding$StringDecoder
-java/lang/StringCoding$StringEncoder
-java/lang/StringIndexOutOfBoundsException
-java/lang/System
-java/lang/System$2
-java/lang/SystemClassLoaderAction
-java/lang/Terminator
-java/lang/Terminator$1
-java/lang/Thread
-java/lang/Thread$UncaughtExceptionHandler
-java/lang/ThreadDeath
-java/lang/ThreadGroup
-java/lang/ThreadLocal
-java/lang/ThreadLocal$ThreadLocalMap
-java/lang/ThreadLocal$ThreadLocalMap$Entry
-java/lang/Throwable
-java/lang/Throwable$PrintStreamOrWriter
-java/lang/Throwable$WrappedPrintStream
-java/lang/Throwable$WrappedPrintWriter
-java/lang/UNIXProcess
-java/lang/UNIXProcess$1
-java/lang/UNIXProcess$2
-java/lang/UNIXProcess$3
-java/lang/UNIXProcess$4
-java/lang/UNIXProcess$LaunchMechanism
-java/lang/UNIXProcess$ProcessPipeInputStream
-java/lang/UNIXProcess$ProcessPipeOutputStream
-java/lang/UNIXProcess$ProcessReaperThreadFactory
-java/lang/UNIXProcess$ProcessReaperThreadFactory$1
-java/lang/UnsatisfiedLinkError
-java/lang/UnsupportedOperationException
-java/lang/VirtualMachineError
-java/lang/Void
-java/lang/annotation/Annotation
-java/lang/invoke/CallSite
-java/lang/invoke/ConstantCallSite
-java/lang/invoke/DirectMethodHandle
-java/lang/invoke/Invokers
-java/lang/invoke/LambdaForm
-java/lang/invoke/LambdaForm$NamedFunction
-java/lang/invoke/MagicLambdaImpl
-java/lang/invoke/MemberName
-java/lang/invoke/MemberName$Factory
-java/lang/invoke/MethodHandle
-java/lang/invoke/MethodHandleImpl
-java/lang/invoke/MethodHandleNatives
-java/lang/invoke/MethodHandleStatics
-java/lang/invoke/MethodHandleStatics$1
-java/lang/invoke/MethodType
-java/lang/invoke/MethodType$ConcurrentWeakInternSet
-java/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry
-java/lang/invoke/MethodTypeForm
-java/lang/invoke/MutableCallSite
-java/lang/invoke/VolatileCallSite
-java/lang/ref/FinalReference
-java/lang/ref/Finalizer
-java/lang/ref/Finalizer$FinalizerThread
-java/lang/ref/PhantomReference
-java/lang/ref/Reference
-java/lang/ref/Reference$Lock
-java/lang/ref/Reference$ReferenceHandler
-java/lang/ref/ReferenceQueue
-java/lang/ref/ReferenceQueue$Lock
-java/lang/ref/ReferenceQueue$Null
-java/lang/ref/SoftReference
-java/lang/ref/WeakReference
-java/lang/reflect/AccessibleObject
-java/lang/reflect/AnnotatedElement
-java/lang/reflect/Array
-java/lang/reflect/Constructor
-java/lang/reflect/Executable
-java/lang/reflect/Field
-java/lang/reflect/GenericDeclaration
-java/lang/reflect/InvocationHandler
-java/lang/reflect/InvocationTargetException
-java/lang/reflect/Member
-java/lang/reflect/Method
-java/lang/reflect/Modifier
-java/lang/reflect/Parameter
-java/lang/reflect/Proxy
-java/lang/reflect/Proxy$KeyFactory
-java/lang/reflect/Proxy$ProxyClassFactory
-java/lang/reflect/ReflectAccess
-java/lang/reflect/ReflectPermission
-java/lang/reflect/Type
-java/lang/reflect/WeakCache
-java/net/AbstractPlainSocketImpl
-java/net/AbstractPlainSocketImpl$1
-java/net/Authenticator
-java/net/ConnectException
-java/net/DefaultInterface
-java/net/HttpURLConnection
-java/net/Inet4Address
-java/net/Inet6Address
-java/net/Inet6Address$Inet6AddressHolder
-java/net/Inet6AddressImpl
-java/net/InetAddress
-java/net/InetAddress$1
-java/net/InetAddress$2
-java/net/InetAddress$Cache
-java/net/InetAddress$Cache$Type
-java/net/InetAddress$InetAddressHolder
-java/net/InetAddressImpl
-java/net/InetAddressImplFactory
-java/net/InetSocketAddress
-java/net/InetSocketAddress$InetSocketAddressHolder
-java/net/InterfaceAddress
-java/net/JarURLConnection
-java/net/MalformedURLException
-java/net/NetworkInterface
-java/net/NetworkInterface$1
-java/net/NetworkInterface$2
-java/net/Parts
-java/net/PlainSocketImpl
-java/net/Proxy
-java/net/Proxy$Type
-java/net/ProxySelector
-java/net/ServerSocket
-java/net/Socket
-java/net/SocketAddress
-java/net/SocketException
-java/net/SocketImpl
-java/net/SocketOptions
-java/net/SocksConsts
-java/net/SocksSocketImpl
-java/net/SocksSocketImpl$3
-java/net/URI
-java/net/URI$Parser
-java/net/URL
-java/net/URLClassLoader
-java/net/URLClassLoader$1
-java/net/URLClassLoader$2
-java/net/URLClassLoader$3
-java/net/URLClassLoader$3$1
-java/net/URLClassLoader$7
-java/net/URLConnection
-java/net/URLStreamHandler
-java/net/URLStreamHandlerFactory
-java/nio/Bits
-java/nio/Bits$1
-java/nio/Buffer
-java/nio/ByteBuffer
-java/nio/ByteBufferAsIntBufferB
-java/nio/ByteBufferAsShortBufferB
-java/nio/ByteOrder
-java/nio/CharBuffer
-java/nio/DirectByteBuffer
-java/nio/DirectByteBuffer$Deallocator
-java/nio/DirectLongBufferU
-java/nio/HeapByteBuffer
-java/nio/HeapCharBuffer
-java/nio/IntBuffer
-java/nio/LongBuffer
-java/nio/MappedByteBuffer
-java/nio/ShortBuffer
-java/nio/channels/ByteChannel
-java/nio/channels/Channel
-java/nio/channels/FileChannel
-java/nio/channels/GatheringByteChannel
-java/nio/channels/InterruptibleChannel
-java/nio/channels/ReadableByteChannel
-java/nio/channels/ScatteringByteChannel
-java/nio/channels/SeekableByteChannel
-java/nio/channels/WritableByteChannel
-java/nio/channels/spi/AbstractInterruptibleChannel
-java/nio/channels/spi/AbstractInterruptibleChannel$1
-java/nio/charset/Charset
-java/nio/charset/CharsetDecoder
-java/nio/charset/CharsetEncoder
-java/nio/charset/CoderResult
-java/nio/charset/CoderResult$1
-java/nio/charset/CoderResult$2
-java/nio/charset/CoderResult$Cache
-java/nio/charset/CodingErrorAction
-java/nio/charset/StandardCharsets
-java/nio/charset/spi/CharsetProvider
-java/nio/file/Path
-java/nio/file/Watchable
-java/nio/file/attribute/FileAttribute
-java/rmi/MarshalledObject
-java/rmi/Remote
-java/security/AccessControlContext
-java/security/AccessController
-java/security/AllPermission
-java/security/AllPermissionCollection
-java/security/BasicPermission
-java/security/BasicPermissionCollection
-java/security/CodeSigner
-java/security/CodeSource
-java/security/Guard
-java/security/Permission
-java/security/PermissionCollection
-java/security/Permissions
-java/security/Principal
-java/security/PrivilegedAction
-java/security/PrivilegedActionException
-java/security/PrivilegedExceptionAction
-java/security/ProtectionDomain
-java/security/ProtectionDomain$1
-java/security/ProtectionDomain$3
-java/security/ProtectionDomain$Key
-java/security/SecureClassLoader
-java/security/UnresolvedPermission
-java/security/cert/Certificate
-java/text/AttributedCharacterIterator
-java/text/AttributedCharacterIterator$Attribute
-java/text/AttributedString
-java/text/AttributedString$AttributedStringIterator
-java/text/CharacterIterator
-java/text/FieldPosition
-java/text/Format
-java/text/Format$Field
-java/text/MessageFormat
-java/text/MessageFormat$Field
-java/text/spi/BreakIteratorProvider
-java/text/spi/CollatorProvider
-java/text/spi/DateFormatProvider
-java/text/spi/DateFormatSymbolsProvider
-java/text/spi/DecimalFormatSymbolsProvider
-java/text/spi/NumberFormatProvider
-java/util/AbstractCollection
-java/util/AbstractList
-java/util/AbstractList$Itr
-java/util/AbstractMap
-java/util/AbstractQueue
-java/util/AbstractSequentialList
-java/util/AbstractSet
-java/util/ArrayDeque
-java/util/ArrayList
-java/util/ArrayList$Itr
-java/util/ArrayList$ListItr
-java/util/ArrayList$SubList
-java/util/ArrayList$SubList$1
-java/util/Arrays
-java/util/Arrays$ArrayList
-java/util/Arrays$LegacyMergeSort
-java/util/BitSet
-java/util/Collection
-java/util/Collections
-java/util/Collections$EmptyEnumeration
-java/util/Collections$EmptyList
-java/util/Collections$EmptyMap
-java/util/Collections$EmptySet
-java/util/Collections$SetFromMap
-java/util/Collections$SynchronizedCollection
-java/util/Collections$SynchronizedMap
-java/util/Collections$SynchronizedSet
-java/util/Collections$UnmodifiableCollection
-java/util/Collections$UnmodifiableCollection$1
-java/util/Collections$UnmodifiableList
-java/util/Collections$UnmodifiableMap
-java/util/Collections$UnmodifiableRandomAccessList
-java/util/Collections$UnmodifiableSet
-java/util/Collections$UnmodifiableSortedSet
-java/util/ComparableTimSort
-java/util/Comparator
-java/util/Date
-java/util/Deque
-java/util/Dictionary
-java/util/Enumeration
-java/util/EventListener
-java/util/EventListenerProxy
-java/util/EventObject
-java/util/HashMap
-java/util/HashMap$EntryIterator
-java/util/HashMap$EntrySet
-java/util/HashMap$HashIterator
-java/util/HashMap$KeyIterator
-java/util/HashMap$KeySet
-java/util/HashMap$Node
-java/util/HashMap$TreeNode
-java/util/HashMap$ValueIterator
-java/util/HashMap$Values
-java/util/HashSet
-java/util/Hashtable
-java/util/Hashtable$Entry
-java/util/Hashtable$EntrySet
-java/util/Hashtable$Enumerator
-java/util/Hashtable$ValueCollection
-java/util/IdentityHashMap
-java/util/IdentityHashMap$IdentityHashMapIterator
-java/util/IdentityHashMap$KeyIterator
-java/util/IdentityHashMap$KeySet
-java/util/Iterator
-java/util/LinkedHashMap
-java/util/LinkedHashMap$Entry
-java/util/LinkedHashMap$LinkedEntryIterator
-java/util/LinkedHashMap$LinkedEntrySet
-java/util/LinkedHashMap$LinkedHashIterator
-java/util/LinkedHashMap$LinkedKeyIterator
-java/util/LinkedHashMap$LinkedKeySet
-java/util/LinkedHashSet
-java/util/LinkedList
-java/util/LinkedList$ListItr
-java/util/LinkedList$Node
-java/util/List
-java/util/ListIterator
-java/util/ListResourceBundle
-java/util/Locale
-java/util/Locale$1
-java/util/Locale$Cache
-java/util/Locale$Category
-java/util/Locale$LocaleKey
-java/util/Map
-java/util/Map$Entry
-java/util/MissingResourceException
-java/util/NavigableMap
-java/util/NavigableSet
-java/util/Objects
-java/util/PriorityQueue
-java/util/Properties
-java/util/Properties$LineReader
-java/util/PropertyResourceBundle
-java/util/Queue
-java/util/Random
-java/util/RandomAccess
-java/util/ResourceBundle
-java/util/ResourceBundle$1
-java/util/ResourceBundle$BundleReference
-java/util/ResourceBundle$CacheKey
-java/util/ResourceBundle$CacheKeyReference
-java/util/ResourceBundle$Control
-java/util/ResourceBundle$Control$1
-java/util/ResourceBundle$Control$CandidateListCache
-java/util/ResourceBundle$LoaderReference
-java/util/ResourceBundle$RBClassLoader
-java/util/ResourceBundle$RBClassLoader$1
-java/util/ResourceBundle$SingleFormatControl
-java/util/ServiceLoader
-java/util/ServiceLoader$1
-java/util/ServiceLoader$LazyIterator
-java/util/Set
-java/util/SortedMap
-java/util/SortedSet
-java/util/Stack
-java/util/StringTokenizer
-java/util/TimSort
-java/util/TimeZone
-java/util/TimeZone$1
-java/util/TreeMap
-java/util/TreeMap$Entry
-java/util/TreeMap$KeyIterator
-java/util/TreeMap$KeySet
-java/util/TreeMap$PrivateEntryIterator
-java/util/TreeSet
-java/util/Vector
-java/util/Vector$1
-java/util/Vector$Itr
-java/util/Vector$ListItr
-java/util/WeakHashMap
-java/util/WeakHashMap$Entry
-java/util/WeakHashMap$HashIterator
-java/util/WeakHashMap$KeyIterator
-java/util/WeakHashMap$KeySet
-java/util/concurrent/AbstractExecutorService
-java/util/concurrent/BlockingQueue
-java/util/concurrent/ConcurrentHashMap
-java/util/concurrent/ConcurrentHashMap$BaseIterator
-java/util/concurrent/ConcurrentHashMap$CollectionView
-java/util/concurrent/ConcurrentHashMap$CounterCell
-java/util/concurrent/ConcurrentHashMap$EntrySetView
-java/util/concurrent/ConcurrentHashMap$ForwardingNode
-java/util/concurrent/ConcurrentHashMap$KeyIterator
-java/util/concurrent/ConcurrentHashMap$KeySetView
-java/util/concurrent/ConcurrentHashMap$Node
-java/util/concurrent/ConcurrentHashMap$Segment
-java/util/concurrent/ConcurrentHashMap$Traverser
-java/util/concurrent/ConcurrentHashMap$ValuesView
-java/util/concurrent/ConcurrentMap
-java/util/concurrent/CopyOnWriteArrayList
-java/util/concurrent/DelayQueue
-java/util/concurrent/Delayed
-java/util/concurrent/Executor
-java/util/concurrent/ExecutorService
-java/util/concurrent/Executors
-java/util/concurrent/RejectedExecutionHandler
-java/util/concurrent/SynchronousQueue
-java/util/concurrent/SynchronousQueue$TransferStack
-java/util/concurrent/SynchronousQueue$TransferStack$SNode
-java/util/concurrent/SynchronousQueue$Transferer
-java/util/concurrent/ThreadFactory
-java/util/concurrent/ThreadPoolExecutor
-java/util/concurrent/ThreadPoolExecutor$AbortPolicy
-java/util/concurrent/ThreadPoolExecutor$Worker
-java/util/concurrent/TimeUnit
-java/util/concurrent/TimeUnit$1
-java/util/concurrent/TimeUnit$2
-java/util/concurrent/TimeUnit$3
-java/util/concurrent/TimeUnit$4
-java/util/concurrent/TimeUnit$5
-java/util/concurrent/TimeUnit$6
-java/util/concurrent/TimeUnit$7
-java/util/concurrent/atomic/AtomicBoolean
-java/util/concurrent/atomic/AtomicInteger
-java/util/concurrent/atomic/AtomicLong
-java/util/concurrent/atomic/AtomicReferenceFieldUpdater
-java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
-java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl$1
-java/util/concurrent/locks/AbstractOwnableSynchronizer
-java/util/concurrent/locks/AbstractQueuedSynchronizer
-java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
-java/util/concurrent/locks/AbstractQueuedSynchronizer$Node
-java/util/concurrent/locks/Condition
-java/util/concurrent/locks/Lock
-java/util/concurrent/locks/LockSupport
-java/util/concurrent/locks/ReadWriteLock
-java/util/concurrent/locks/ReentrantLock
-java/util/concurrent/locks/ReentrantLock$NonfairSync
-java/util/concurrent/locks/ReentrantLock$Sync
-java/util/concurrent/locks/ReentrantReadWriteLock
-java/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync
-java/util/concurrent/locks/ReentrantReadWriteLock$ReadLock
-java/util/concurrent/locks/ReentrantReadWriteLock$Sync
-java/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter
-java/util/concurrent/locks/ReentrantReadWriteLock$WriteLock
-java/util/function/BiFunction
-java/util/jar/Attributes
-java/util/jar/Attributes$Name
-java/util/jar/JarEntry
-java/util/jar/JarFile
-java/util/jar/JarFile$JarEntryIterator
-java/util/jar/JarFile$JarFileEntry
-java/util/jar/JarVerifier
-java/util/jar/JarVerifier$3
-java/util/jar/JavaUtilJarAccessImpl
-java/util/jar/Manifest
-java/util/jar/Manifest$FastInputStream
-java/util/logging/Handler
-java/util/logging/Level
-java/util/logging/Level$KnownLevel
-java/util/logging/LogManager
-java/util/logging/LogManager$1
-java/util/logging/LogManager$2
-java/util/logging/LogManager$3
-java/util/logging/LogManager$5
-java/util/logging/LogManager$Cleaner
-java/util/logging/LogManager$LogNode
-java/util/logging/LogManager$LoggerContext
-java/util/logging/LogManager$LoggerContext$1
-java/util/logging/LogManager$LoggerWeakRef
-java/util/logging/LogManager$RootLogger
-java/util/logging/LogManager$SystemLoggerContext
-java/util/logging/Logger
-java/util/logging/Logger$1
-java/util/logging/LoggingPermission
-java/util/logging/LoggingProxyImpl
-java/util/spi/CalendarDataProvider
-java/util/spi/CurrencyNameProvider
-java/util/spi/LocaleNameProvider
-java/util/spi/LocaleServiceProvider
-java/util/spi/ResourceBundleControlProvider
-java/util/spi/TimeZoneNameProvider
-java/util/zip/CRC32
-java/util/zip/Checksum
-java/util/zip/Inflater
-java/util/zip/InflaterInputStream
-java/util/zip/ZStreamRef
-java/util/zip/ZipCoder
-java/util/zip/ZipConstants
-java/util/zip/ZipEntry
-java/util/zip/ZipException
-java/util/zip/ZipFile
-java/util/zip/ZipFile$1
-java/util/zip/ZipFile$ZipEntryIterator
-java/util/zip/ZipFile$ZipFileInflaterInputStream
-java/util/zip/ZipFile$ZipFileInputStream
-java/util/zip/ZipUtils
-javax/accessibility/Accessible
-javax/accessibility/AccessibleContext
-javax/swing/AbstractAction
-javax/swing/AbstractButton
-javax/swing/AbstractButton$Handler
-javax/swing/AbstractListModel
-javax/swing/Action
-javax/swing/ActionMap
-javax/swing/AncestorNotifier
-javax/swing/ArrayTable
-javax/swing/Autoscroller
-javax/swing/BorderFactory
-javax/swing/BoundedRangeModel
-javax/swing/Box
-javax/swing/Box$Filler
-javax/swing/BoxLayout
-javax/swing/ButtonGroup
-javax/swing/ButtonModel
-javax/swing/CellRendererPane
-javax/swing/ClientPropertyKey
-javax/swing/ClientPropertyKey$1
-javax/swing/ComboBoxEditor
-javax/swing/ComboBoxModel
-javax/swing/ComponentInputMap
-javax/swing/DefaultBoundedRangeModel
-javax/swing/DefaultButtonModel
-javax/swing/DefaultComboBoxModel
-javax/swing/DefaultListCellRenderer
-javax/swing/DefaultListCellRenderer$UIResource
-javax/swing/DefaultListSelectionModel
-javax/swing/DefaultSingleSelectionModel
-javax/swing/DropMode
-javax/swing/FocusManager
-javax/swing/GrayFilter
-javax/swing/Icon
-javax/swing/ImageIcon
-javax/swing/ImageIcon$1
-javax/swing/ImageIcon$2
-javax/swing/ImageIcon$2$1
-javax/swing/ImageIcon$3
-javax/swing/InputMap
-javax/swing/InternalFrameFocusTraversalPolicy
-javax/swing/JButton
-javax/swing/JCheckBox
-javax/swing/JCheckBoxMenuItem
-javax/swing/JComboBox
-javax/swing/JComboBox$1
-javax/swing/JComboBox$KeySelectionManager
-javax/swing/JComponent
-javax/swing/JComponent$1
-javax/swing/JComponent$2
-javax/swing/JDialog
-javax/swing/JEditorPane
-javax/swing/JFrame
-javax/swing/JInternalFrame
-javax/swing/JLabel
-javax/swing/JLayer
-javax/swing/JLayeredPane
-javax/swing/JList
-javax/swing/JMenu
-javax/swing/JMenu$MenuChangeListener
-javax/swing/JMenu$WinListener
-javax/swing/JMenuBar
-javax/swing/JMenuItem
-javax/swing/JMenuItem$MenuItemFocusListener
-javax/swing/JPanel
-javax/swing/JPasswordField
-javax/swing/JPopupMenu
-javax/swing/JPopupMenu$Separator
-javax/swing/JRadioButton
-javax/swing/JRadioButtonMenuItem
-javax/swing/JRootPane
-javax/swing/JRootPane$1
-javax/swing/JRootPane$RootLayout
-javax/swing/JScrollBar
-javax/swing/JScrollBar$ModelListener
-javax/swing/JScrollPane
-javax/swing/JScrollPane$ScrollBar
-javax/swing/JSeparator
-javax/swing/JSplitPane
-javax/swing/JTextArea
-javax/swing/JTextField
-javax/swing/JTextField$NotifyAction
-javax/swing/JTextField$ScrollRepainter
-javax/swing/JToggleButton
-javax/swing/JToggleButton$ToggleButtonModel
-javax/swing/JToolBar
-javax/swing/JToolBar$DefaultToolBarLayout
-javax/swing/JToolBar$Separator
-javax/swing/JViewport
-javax/swing/JViewport$ViewListener
-javax/swing/JWindow
-javax/swing/KeyStroke
-javax/swing/KeyboardManager
-javax/swing/KeyboardManager$ComponentKeyStrokePair
-javax/swing/LayoutComparator
-javax/swing/LayoutFocusTraversalPolicy
-javax/swing/ListCellRenderer
-javax/swing/ListModel
-javax/swing/ListSelectionModel
-javax/swing/LookAndFeel
-javax/swing/MenuElement
-javax/swing/MenuSelectionManager
-javax/swing/MultiUIDefaults
-javax/swing/MutableComboBoxModel
-javax/swing/PopupFactory
-javax/swing/RepaintManager
-javax/swing/RepaintManager$2
-javax/swing/RepaintManager$3
-javax/swing/RepaintManager$DisplayChangedHandler
-javax/swing/RepaintManager$PaintManager
-javax/swing/RepaintManager$ProcessingRunnable
-javax/swing/RootPaneContainer
-javax/swing/ScrollPaneConstants
-javax/swing/ScrollPaneLayout
-javax/swing/ScrollPaneLayout$UIResource
-javax/swing/Scrollable
-javax/swing/SingleSelectionModel
-javax/swing/SizeRequirements
-javax/swing/SortingFocusTraversalPolicy
-javax/swing/SwingConstants
-javax/swing/SwingContainerOrderFocusTraversalPolicy
-javax/swing/SwingDefaultFocusTraversalPolicy
-javax/swing/SwingHeavyWeight
-javax/swing/SwingPaintEventDispatcher
-javax/swing/SwingUtilities
-javax/swing/SwingUtilities$SharedOwnerFrame
-javax/swing/Timer
-javax/swing/Timer$DoPostEvent
-javax/swing/TimerQueue
-javax/swing/TimerQueue$1
-javax/swing/TimerQueue$DelayedTimer
-javax/swing/ToolTipManager
-javax/swing/ToolTipManager$AccessibilityKeyListener
-javax/swing/ToolTipManager$MoveBeforeEnterListener
-javax/swing/ToolTipManager$insideTimerAction
-javax/swing/ToolTipManager$outsideTimerAction
-javax/swing/ToolTipManager$stillInsideTimerAction
-javax/swing/TransferHandler
-javax/swing/TransferHandler$DropHandler
-javax/swing/TransferHandler$HasGetTransferHandler
-javax/swing/TransferHandler$SwingDropTarget
-javax/swing/TransferHandler$TransferAction
-javax/swing/TransferHandler$TransferAction$1
-javax/swing/TransferHandler$TransferAction$2
-javax/swing/TransferHandler$TransferSupport
-javax/swing/UIDefaults
-javax/swing/UIDefaults$ActiveValue
-javax/swing/UIDefaults$LazyInputMap
-javax/swing/UIDefaults$LazyValue
-javax/swing/UIDefaults$TextAndMnemonicHashMap
-javax/swing/UIManager
-javax/swing/UIManager$1
-javax/swing/UIManager$2
-javax/swing/UIManager$LAFState
-javax/swing/UIManager$LookAndFeelInfo
-javax/swing/ViewportLayout
-javax/swing/WindowConstants
-javax/swing/border/AbstractBorder
-javax/swing/border/BevelBorder
-javax/swing/border/Border
-javax/swing/border/CompoundBorder
-javax/swing/border/EmptyBorder
-javax/swing/border/EtchedBorder
-javax/swing/border/LineBorder
-javax/swing/border/MatteBorder
-javax/swing/event/AncestorEvent
-javax/swing/event/AncestorListener
-javax/swing/event/CaretEvent
-javax/swing/event/CaretListener
-javax/swing/event/ChangeEvent
-javax/swing/event/ChangeListener
-javax/swing/event/DocumentEvent
-javax/swing/event/DocumentEvent$ElementChange
-javax/swing/event/DocumentEvent$EventType
-javax/swing/event/DocumentListener
-javax/swing/event/EventListenerList
-javax/swing/event/ListDataListener
-javax/swing/event/ListSelectionListener
-javax/swing/event/MenuDragMouseListener
-javax/swing/event/MenuEvent
-javax/swing/event/MenuKeyListener
-javax/swing/event/MenuListener
-javax/swing/event/MouseInputAdapter
-javax/swing/event/MouseInputListener
-javax/swing/event/PopupMenuListener
-javax/swing/event/UndoableEditEvent
-javax/swing/event/UndoableEditListener
-javax/swing/plaf/ActionMapUIResource
-javax/swing/plaf/BorderUIResource
-javax/swing/plaf/BorderUIResource$EmptyBorderUIResource
-javax/swing/plaf/BorderUIResource$LineBorderUIResource
-javax/swing/plaf/ButtonUI
-javax/swing/plaf/ColorUIResource
-javax/swing/plaf/ComboBoxUI
-javax/swing/plaf/ComponentInputMapUIResource
-javax/swing/plaf/ComponentUI
-javax/swing/plaf/DimensionUIResource
-javax/swing/plaf/FontUIResource
-javax/swing/plaf/IconUIResource
-javax/swing/plaf/InputMapUIResource
-javax/swing/plaf/InsetsUIResource
-javax/swing/plaf/LabelUI
-javax/swing/plaf/ListUI
-javax/swing/plaf/MenuBarUI
-javax/swing/plaf/MenuItemUI
-javax/swing/plaf/PanelUI
-javax/swing/plaf/PopupMenuUI
-javax/swing/plaf/RootPaneUI
-javax/swing/plaf/ScrollBarUI
-javax/swing/plaf/ScrollPaneUI
-javax/swing/plaf/SeparatorUI
-javax/swing/plaf/TextUI
-javax/swing/plaf/ToolBarUI
-javax/swing/plaf/UIResource
-javax/swing/plaf/ViewportUI
-javax/swing/plaf/basic/BasicBorders$ButtonBorder
-javax/swing/plaf/basic/BasicBorders$MarginBorder
-javax/swing/plaf/basic/BasicBorders$RadioButtonBorder
-javax/swing/plaf/basic/BasicBorders$RolloverButtonBorder
-javax/swing/plaf/basic/BasicBorders$RolloverMarginBorder
-javax/swing/plaf/basic/BasicButtonListener
-javax/swing/plaf/basic/BasicButtonUI
-javax/swing/plaf/basic/BasicComboBoxEditor
-javax/swing/plaf/basic/BasicComboBoxEditor$BorderlessTextField
-javax/swing/plaf/basic/BasicComboBoxEditor$UIResource
-javax/swing/plaf/basic/BasicComboBoxUI
-javax/swing/plaf/basic/BasicComboBoxUI$ComboBoxLayoutManager
-javax/swing/plaf/basic/BasicComboBoxUI$DefaultKeySelectionManager
-javax/swing/plaf/basic/BasicComboBoxUI$FocusHandler
-javax/swing/plaf/basic/BasicComboBoxUI$Handler
-javax/swing/plaf/basic/BasicComboPopup
-javax/swing/plaf/basic/BasicComboPopup$EmptyListModelClass
-javax/swing/plaf/basic/BasicComboPopup$Handler
-javax/swing/plaf/basic/BasicGraphicsUtils
-javax/swing/plaf/basic/BasicHTML
-javax/swing/plaf/basic/BasicIconFactory
-javax/swing/plaf/basic/BasicIconFactory$MenuItemArrowIcon
-javax/swing/plaf/basic/BasicIconFactory$MenuItemCheckIcon
-javax/swing/plaf/basic/BasicLabelUI
-javax/swing/plaf/basic/BasicListUI
-javax/swing/plaf/basic/BasicListUI$FocusHandler
-javax/swing/plaf/basic/BasicListUI$Handler
-javax/swing/plaf/basic/BasicListUI$ListTransferHandler
-javax/swing/plaf/basic/BasicListUI$MouseInputHandler
-javax/swing/plaf/basic/BasicListUI$PropertyChangeHandler
-javax/swing/plaf/basic/BasicLookAndFeel
-javax/swing/plaf/basic/BasicLookAndFeel$1
-javax/swing/plaf/basic/BasicLookAndFeel$2
-javax/swing/plaf/basic/BasicLookAndFeel$AWTEventHelper
-javax/swing/plaf/basic/BasicMenuBarUI
-javax/swing/plaf/basic/BasicMenuBarUI$Handler
-javax/swing/plaf/basic/BasicMenuItemUI
-javax/swing/plaf/basic/BasicMenuItemUI$Handler
-javax/swing/plaf/basic/BasicMenuUI
-javax/swing/plaf/basic/BasicMenuUI$ChangeHandler
-javax/swing/plaf/basic/BasicMenuUI$Handler
-javax/swing/plaf/basic/BasicMenuUI$MouseInputHandler
-javax/swing/plaf/basic/BasicPanelUI
-javax/swing/plaf/basic/BasicPopupMenuUI
-javax/swing/plaf/basic/BasicPopupMenuUI$BasicMenuKeyListener
-javax/swing/plaf/basic/BasicPopupMenuUI$BasicPopupMenuListener
-javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper
-javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper$1
-javax/swing/plaf/basic/BasicPopupMenuUI$MouseGrabber
-javax/swing/plaf/basic/BasicRootPaneUI
-javax/swing/plaf/basic/BasicRootPaneUI$RootPaneInputMap
-javax/swing/plaf/basic/BasicScrollPaneUI
-javax/swing/plaf/basic/BasicScrollPaneUI$Handler
-javax/swing/plaf/basic/BasicScrollPaneUI$MouseWheelHandler
-javax/swing/plaf/basic/BasicSeparatorUI
-javax/swing/plaf/basic/BasicTextAreaUI
-javax/swing/plaf/basic/BasicTextFieldUI
-javax/swing/plaf/basic/BasicTextUI
-javax/swing/plaf/basic/BasicTextUI$BasicCursor
-javax/swing/plaf/basic/BasicTextUI$DragListener
-javax/swing/plaf/basic/BasicTextUI$FocusAction
-javax/swing/plaf/basic/BasicTextUI$RootView
-javax/swing/plaf/basic/BasicTextUI$TextActionWrapper
-javax/swing/plaf/basic/BasicTextUI$TextTransferHandler
-javax/swing/plaf/basic/BasicTextUI$TextTransferHandler$TextTransferable
-javax/swing/plaf/basic/BasicTextUI$UpdateHandler
-javax/swing/plaf/basic/BasicToolBarSeparatorUI
-javax/swing/plaf/basic/BasicToolBarUI
-javax/swing/plaf/basic/BasicToolBarUI$Handler
-javax/swing/plaf/basic/BasicTransferable
-javax/swing/plaf/basic/BasicViewportUI
-javax/swing/plaf/basic/ComboPopup
-javax/swing/plaf/basic/DefaultMenuLayout
-javax/swing/plaf/basic/DragRecognitionSupport$BeforeDrag
-javax/swing/plaf/basic/LazyActionMap
-javax/swing/plaf/metal/DefaultMetalTheme
-javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate
-javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate$1
-javax/swing/plaf/metal/MetalLookAndFeel
-javax/swing/plaf/metal/MetalTheme
-javax/swing/plaf/synth/SynthConstants
-javax/swing/plaf/synth/SynthUI
-javax/swing/text/AbstractDocument
-javax/swing/text/AbstractDocument$1
-javax/swing/text/AbstractDocument$AbstractElement
-javax/swing/text/AbstractDocument$AttributeContext
-javax/swing/text/AbstractDocument$BidiElement
-javax/swing/text/AbstractDocument$BidiRootElement
-javax/swing/text/AbstractDocument$BranchElement
-javax/swing/text/AbstractDocument$Content
-javax/swing/text/AbstractDocument$DefaultDocumentEvent
-javax/swing/text/AbstractDocument$ElementEdit
-javax/swing/text/AbstractDocument$InsertStringResult
-javax/swing/text/AbstractDocument$LeafElement
-javax/swing/text/AttributeSet
-javax/swing/text/AttributeSet$CharacterAttribute
-javax/swing/text/AttributeSet$ColorAttribute
-javax/swing/text/AttributeSet$FontAttribute
-javax/swing/text/AttributeSet$ParagraphAttribute
-javax/swing/text/Caret
-javax/swing/text/DefaultCaret
-javax/swing/text/DefaultCaret$1
-javax/swing/text/DefaultCaret$Handler
-javax/swing/text/DefaultEditorKit
-javax/swing/text/DefaultEditorKit$BeepAction
-javax/swing/text/DefaultEditorKit$BeginAction
-javax/swing/text/DefaultEditorKit$BeginLineAction
-javax/swing/text/DefaultEditorKit$BeginParagraphAction
-javax/swing/text/DefaultEditorKit$BeginWordAction
-javax/swing/text/DefaultEditorKit$CopyAction
-javax/swing/text/DefaultEditorKit$CutAction
-javax/swing/text/DefaultEditorKit$DefaultKeyTypedAction
-javax/swing/text/DefaultEditorKit$DeleteNextCharAction
-javax/swing/text/DefaultEditorKit$DeletePrevCharAction
-javax/swing/text/DefaultEditorKit$DeleteWordAction
-javax/swing/text/DefaultEditorKit$DumpModelAction
-javax/swing/text/DefaultEditorKit$EndAction
-javax/swing/text/DefaultEditorKit$EndLineAction
-javax/swing/text/DefaultEditorKit$EndParagraphAction
-javax/swing/text/DefaultEditorKit$EndWordAction
-javax/swing/text/DefaultEditorKit$InsertBreakAction
-javax/swing/text/DefaultEditorKit$InsertContentAction
-javax/swing/text/DefaultEditorKit$InsertTabAction
-javax/swing/text/DefaultEditorKit$NextVisualPositionAction
-javax/swing/text/DefaultEditorKit$NextWordAction
-javax/swing/text/DefaultEditorKit$PageAction
-javax/swing/text/DefaultEditorKit$PasteAction
-javax/swing/text/DefaultEditorKit$PreviousWordAction
-javax/swing/text/DefaultEditorKit$ReadOnlyAction
-javax/swing/text/DefaultEditorKit$SelectAllAction
-javax/swing/text/DefaultEditorKit$SelectLineAction
-javax/swing/text/DefaultEditorKit$SelectParagraphAction
-javax/swing/text/DefaultEditorKit$SelectWordAction
-javax/swing/text/DefaultEditorKit$ToggleComponentOrientationAction
-javax/swing/text/DefaultEditorKit$UnselectAction
-javax/swing/text/DefaultEditorKit$VerticalPageAction
-javax/swing/text/DefaultEditorKit$WritableAction
-javax/swing/text/DefaultHighlighter
-javax/swing/text/DefaultHighlighter$DefaultHighlightPainter
-javax/swing/text/DefaultHighlighter$HighlightInfo
-javax/swing/text/DefaultHighlighter$LayeredHighlightInfo
-javax/swing/text/DefaultHighlighter$SafeDamager
-javax/swing/text/Document
-javax/swing/text/EditorKit
-javax/swing/text/Element
-javax/swing/text/FieldView
-javax/swing/text/GapContent
-javax/swing/text/GapContent$InsertUndo
-javax/swing/text/GapContent$MarkData
-javax/swing/text/GapContent$MarkVector
-javax/swing/text/GapContent$StickyPosition
-javax/swing/text/GapVector
-javax/swing/text/Highlighter
-javax/swing/text/Highlighter$Highlight
-javax/swing/text/Highlighter$HighlightPainter
-javax/swing/text/JTextComponent
-javax/swing/text/JTextComponent$1
-javax/swing/text/JTextComponent$DefaultKeymap
-javax/swing/text/JTextComponent$KeymapActionMap
-javax/swing/text/JTextComponent$KeymapWrapper
-javax/swing/text/JTextComponent$MutableCaretEvent
-javax/swing/text/Keymap
-javax/swing/text/LayeredHighlighter
-javax/swing/text/LayeredHighlighter$LayerPainter
-javax/swing/text/MutableAttributeSet
-javax/swing/text/PlainDocument
-javax/swing/text/PlainView
-javax/swing/text/Position
-javax/swing/text/Position$Bias
-javax/swing/text/Segment
-javax/swing/text/SegmentCache
-javax/swing/text/SegmentCache$CachedSegment
-javax/swing/text/SimpleAttributeSet
-javax/swing/text/SimpleAttributeSet$EmptyAttributeSet
-javax/swing/text/Style
-javax/swing/text/StyleConstants
-javax/swing/text/StyleConstants$CharacterConstants
-javax/swing/text/StyleConstants$ColorConstants
-javax/swing/text/StyleConstants$FontConstants
-javax/swing/text/StyleConstants$ParagraphConstants
-javax/swing/text/StyleContext
-javax/swing/text/StyleContext$FontKey
-javax/swing/text/StyleContext$KeyEnumeration
-javax/swing/text/StyleContext$NamedStyle
-javax/swing/text/StyleContext$SmallAttributeSet
-javax/swing/text/TabExpander
-javax/swing/text/TextAction
-javax/swing/text/Utilities
-javax/swing/text/View
-javax/swing/text/ViewFactory
-javax/swing/tree/TreeNode
-javax/swing/undo/AbstractUndoableEdit
-javax/swing/undo/CompoundEdit
-javax/swing/undo/UndoableEdit
-sun/awt/AWTAccessor
-sun/awt/AWTAccessor$AWTEventAccessor
-sun/awt/AWTAccessor$ClientPropertyKeyAccessor
-sun/awt/AWTAccessor$ComponentAccessor
-sun/awt/AWTAccessor$ContainerAccessor
-sun/awt/AWTAccessor$CursorAccessor
-sun/awt/AWTAccessor$DefaultKeyboardFocusManagerAccessor
-sun/awt/AWTAccessor$EventQueueAccessor
-sun/awt/AWTAccessor$FrameAccessor
-sun/awt/AWTAccessor$InputEventAccessor
-sun/awt/AWTAccessor$KeyEventAccessor
-sun/awt/AWTAccessor$KeyboardFocusManagerAccessor
-sun/awt/AWTAccessor$ToolkitAccessor
-sun/awt/AWTAccessor$WindowAccessor
-sun/awt/AWTAutoShutdown
-sun/awt/AppContext
-sun/awt/AppContext$1
-sun/awt/AppContext$2
-sun/awt/AppContext$3
-sun/awt/AppContext$6
-sun/awt/AppContext$State
-sun/awt/CGraphicsConfig
-sun/awt/CGraphicsDevice
-sun/awt/CGraphicsEnvironment
-sun/awt/CGraphicsEnvironment$1
-sun/awt/CGraphicsEnvironment$2
-sun/awt/CausedFocusEvent
-sun/awt/CausedFocusEvent$Cause
-sun/awt/ComponentFactory
-sun/awt/ConstrainableGraphics
-sun/awt/DisplayChangedListener
-sun/awt/EmbeddedFrame
-sun/awt/EventQueueDelegate
-sun/awt/EventQueueItem
-sun/awt/FontConfiguration
-sun/awt/FontDescriptor
-sun/awt/FullScreenCapable
-sun/awt/HeadlessToolkit
-sun/awt/InputMethodSupport
-sun/awt/KeyboardFocusManagerPeerImpl
-sun/awt/KeyboardFocusManagerPeerProvider
-sun/awt/LightweightFrame
-sun/awt/ModalExclude
-sun/awt/ModalityEvent
-sun/awt/ModalityListener
-sun/awt/MostRecentKeyValue
-sun/awt/Mutex
-sun/awt/NullComponentPeer
-sun/awt/OSInfo
-sun/awt/OSInfo$1
-sun/awt/OSInfo$OSType
-sun/awt/OSInfo$WindowsVersion
-sun/awt/PaintEventDispatcher
-sun/awt/PeerEvent
-sun/awt/PostEventQueue
-sun/awt/RepaintArea
-sun/awt/RequestFocusController
-sun/awt/SunDisplayChanger
-sun/awt/SunGraphicsCallback
-sun/awt/SunHints
-sun/awt/SunHints$Key
-sun/awt/SunHints$LCDContrastKey
-sun/awt/SunHints$Value
-sun/awt/SunToolkit
-sun/awt/SunToolkit$1
-sun/awt/SunToolkit$ModalityListenerList
-sun/awt/TimedWindowEvent
-sun/awt/WindowClosingListener
-sun/awt/WindowClosingSupport
-sun/awt/datatransfer/DataTransferer
-sun/awt/datatransfer/DataTransferer$1
-sun/awt/datatransfer/DataTransferer$CharsetComparator
-sun/awt/datatransfer/DataTransferer$IndexOrderComparator
-sun/awt/datatransfer/DataTransferer$IndexedComparator
-sun/awt/datatransfer/DataTransferer$RMI
-sun/awt/datatransfer/DataTransferer$StandardEncodingsHolder
-sun/awt/datatransfer/SunClipboard
-sun/awt/datatransfer/ToolkitThreadBlockedHandler
-sun/awt/datatransfer/TransferableProxy
-sun/awt/dnd/SunDragSourceContextPeer
-sun/awt/dnd/SunDropTargetEvent
-sun/awt/event/IgnorePaintEvent
-sun/awt/im/CompositionAreaHandler
-sun/awt/im/ExecutableInputMethodManager
-sun/awt/im/ExecutableInputMethodManager$3
-sun/awt/im/InputContext
-sun/awt/im/InputMethodAdapter
-sun/awt/im/InputMethodContext
-sun/awt/im/InputMethodLocator
-sun/awt/im/InputMethodManager
-sun/awt/im/InputMethodWindow
-sun/awt/image/BufImgSurfaceData
-sun/awt/image/BufImgSurfaceData$ICMColorData
-sun/awt/image/BufImgSurfaceManager
-sun/awt/image/BufferedImageGraphicsConfig
-sun/awt/image/ByteComponentRaster
-sun/awt/image/ByteInterleavedRaster
-sun/awt/image/BytePackedRaster
-sun/awt/image/FetcherInfo
-sun/awt/image/GifFrame
-sun/awt/image/GifImageDecoder
-sun/awt/image/ImageConsumerQueue
-sun/awt/image/ImageDecoder
-sun/awt/image/ImageFetchable
-sun/awt/image/ImageFetcher
-sun/awt/image/ImageFetcher$1
-sun/awt/image/ImageRepresentation
-sun/awt/image/ImageWatched
-sun/awt/image/ImageWatched$Link
-sun/awt/image/ImageWatched$WeakLink
-sun/awt/image/InputStreamImageSource
-sun/awt/image/IntegerComponentRaster
-sun/awt/image/IntegerInterleavedRaster
-sun/awt/image/NativeLibLoader
-sun/awt/image/NativeLibLoader$1
-sun/awt/image/OffScreenImage
-sun/awt/image/OffScreenImageSource
-sun/awt/image/PNGFilterInputStream
-sun/awt/image/PNGImageDecoder
-sun/awt/image/PixelConverter
-sun/awt/image/PixelConverter$Argb
-sun/awt/image/PixelConverter$ArgbBm
-sun/awt/image/PixelConverter$ArgbPre
-sun/awt/image/PixelConverter$Bgrx
-sun/awt/image/PixelConverter$ByteGray
-sun/awt/image/PixelConverter$Rgba
-sun/awt/image/PixelConverter$RgbaPre
-sun/awt/image/PixelConverter$Rgbx
-sun/awt/image/PixelConverter$Ushort4444Argb
-sun/awt/image/PixelConverter$Ushort555Rgb
-sun/awt/image/PixelConverter$Ushort555Rgbx
-sun/awt/image/PixelConverter$Ushort565Rgb
-sun/awt/image/PixelConverter$UshortGray
-sun/awt/image/PixelConverter$Xbgr
-sun/awt/image/PixelConverter$Xrgb
-sun/awt/image/SunVolatileImage
-sun/awt/image/SunWritableRaster
-sun/awt/image/SunWritableRaster$DataStealer
-sun/awt/image/SurfaceManager
-sun/awt/image/SurfaceManager$FlushableCacheData
-sun/awt/image/SurfaceManager$ImageAccessor
-sun/awt/image/SurfaceManager$ProxiedGraphicsConfig
-sun/awt/image/ToolkitImage
-sun/awt/image/URLImageSource
-sun/awt/image/VolatileSurfaceManager
-sun/awt/resources/awt
-sun/awt/resources/awtosx
-sun/awt/util/IdentityArrayList
-sun/awt/util/IdentityLinkedList
-sun/awt/util/IdentityLinkedList$Entry
-sun/awt/util/IdentityLinkedList$ListItr
-sun/dc/DuctusRenderingEngine
-sun/font/AttributeValues
-sun/font/CCharToGlyphMapper
-sun/font/CCharToGlyphMapper$Cache
-sun/font/CFont
-sun/font/CFontConfiguration
-sun/font/CFontManager
-sun/font/CFontManager$4
-sun/font/CStrike
-sun/font/CStrike$GlyphAdvanceCache
-sun/font/CStrike$GlyphInfoCache
-sun/font/CStrikeDisposer
-sun/font/CharToGlyphMapper
-sun/font/CompositeFont
-sun/font/CompositeFontDescriptor
-sun/font/CoreMetrics
-sun/font/EAttribute
-sun/font/FileFont
-sun/font/Font2D
-sun/font/Font2DHandle
-sun/font/FontAccess
-sun/font/FontDesignMetrics
-sun/font/FontDesignMetrics$KeyReference
-sun/font/FontDesignMetrics$MetricsKey
-sun/font/FontFamily
-sun/font/FontLineMetrics
-sun/font/FontManager
-sun/font/FontManagerFactory
-sun/font/FontManagerFactory$1
-sun/font/FontManagerForSGE
-sun/font/FontManagerNativeLibrary
-sun/font/FontManagerNativeLibrary$1
-sun/font/FontStrike
-sun/font/FontStrikeDesc
-sun/font/FontStrikeDisposer
-sun/font/FontUtilities
-sun/font/FontUtilities$1
-sun/font/GlyphList
-sun/font/PhysicalFont
-sun/font/PhysicalStrike
-sun/font/StandardGlyphVector
-sun/font/StandardGlyphVector$GlyphStrike
-sun/font/StrikeCache
-sun/font/StrikeCache$1
-sun/font/StrikeCache$DisposableStrike
-sun/font/StrikeCache$SoftDisposerRef
-sun/font/StrikeMetrics
-sun/font/SunFontManager
-sun/font/SunFontManager$1
-sun/font/SunFontManager$11
-sun/font/SunFontManager$2
-sun/font/SunFontManager$3
-sun/font/SunFontManager$FontRegistrationInfo
-sun/font/SunFontManager$T1Filter
-sun/font/SunFontManager$TTFilter
-sun/font/TrueTypeFont
-sun/font/TrueTypeFont$1
-sun/font/TrueTypeFont$DirectoryEntry
-sun/font/TrueTypeFont$TTDisposerRecord
-sun/font/Type1Font
-sun/java2d/DefaultDisposerRecord
-sun/java2d/DestSurfaceProvider
-sun/java2d/Disposer
-sun/java2d/Disposer$1
-sun/java2d/Disposer$2
-sun/java2d/Disposer$PollDisposable
-sun/java2d/DisposerRecord
-sun/java2d/DisposerTarget
-sun/java2d/FontSupport
-sun/java2d/InvalidPipeException
-sun/java2d/MacosxSurfaceManagerFactory
-sun/java2d/NullSurfaceData
-sun/java2d/StateTrackable
-sun/java2d/StateTrackable$State
-sun/java2d/StateTrackableDelegate
-sun/java2d/StateTrackableDelegate$1
-sun/java2d/StateTrackableDelegate$2
-sun/java2d/StateTracker
-sun/java2d/StateTracker$1
-sun/java2d/StateTracker$2
-sun/java2d/SunGraphics2D
-sun/java2d/SunGraphicsEnvironment
-sun/java2d/SunGraphicsEnvironment$1
-sun/java2d/Surface
-sun/java2d/SurfaceData
-sun/java2d/SurfaceData$PixelToPgramLoopConverter
-sun/java2d/SurfaceData$PixelToShapeLoopConverter
-sun/java2d/SurfaceDataProxy
-sun/java2d/SurfaceDataProxy$1
-sun/java2d/SurfaceManagerFactory
-sun/java2d/cmm/CMSManager
-sun/java2d/cmm/ProfileActivator
-sun/java2d/cmm/ProfileDeferralInfo
-sun/java2d/cmm/ProfileDeferralMgr
-sun/java2d/loops/Blit
-sun/java2d/loops/BlitBg
-sun/java2d/loops/CompositeType
-sun/java2d/loops/CustomComponent
-sun/java2d/loops/DrawGlyphList
-sun/java2d/loops/DrawGlyphListAA
-sun/java2d/loops/DrawGlyphListLCD
-sun/java2d/loops/DrawLine
-sun/java2d/loops/DrawParallelogram
-sun/java2d/loops/DrawPath
-sun/java2d/loops/DrawPolygons
-sun/java2d/loops/DrawRect
-sun/java2d/loops/FillParallelogram
-sun/java2d/loops/FillPath
-sun/java2d/loops/FillRect
-sun/java2d/loops/FillSpans
-sun/java2d/loops/FontInfo
-sun/java2d/loops/GeneralRenderer
-sun/java2d/loops/GraphicsPrimitive
-sun/java2d/loops/GraphicsPrimitiveMgr
-sun/java2d/loops/GraphicsPrimitiveMgr$1
-sun/java2d/loops/GraphicsPrimitiveMgr$2
-sun/java2d/loops/GraphicsPrimitiveMgr$PrimitiveSpec
-sun/java2d/loops/GraphicsPrimitiveProxy
-sun/java2d/loops/MaskBlit
-sun/java2d/loops/MaskFill
-sun/java2d/loops/ProcessPath$DrawHandler
-sun/java2d/loops/RenderCache
-sun/java2d/loops/RenderCache$Entry
-sun/java2d/loops/RenderLoops
-sun/java2d/loops/ScaledBlit
-sun/java2d/loops/SurfaceType
-sun/java2d/loops/TransformBlit
-sun/java2d/loops/TransformHelper
-sun/java2d/loops/XORComposite
-sun/java2d/opengl/CGLGraphicsConfig
-sun/java2d/opengl/CGLGraphicsConfig$1
-sun/java2d/opengl/CGLGraphicsConfig$CGLGCDisposerRecord
-sun/java2d/opengl/CGLGraphicsConfig$CGLImageCaps
-sun/java2d/opengl/CGLLayer
-sun/java2d/opengl/CGLSurfaceData
-sun/java2d/opengl/CGLSurfaceData$CGLLayerSurfaceData
-sun/java2d/opengl/CGLSurfaceData$CGLOffScreenSurfaceData
-sun/java2d/opengl/CGLVolatileSurfaceManager
-sun/java2d/opengl/OGLAnyCompositeBlit
-sun/java2d/opengl/OGLBlitLoops
-sun/java2d/opengl/OGLContext
-sun/java2d/opengl/OGLContext$OGLContextCaps
-sun/java2d/opengl/OGLDrawImage
-sun/java2d/opengl/OGLGeneralBlit
-sun/java2d/opengl/OGLGraphicsConfig
-sun/java2d/opengl/OGLMaskBlit
-sun/java2d/opengl/OGLMaskFill
-sun/java2d/opengl/OGLRTTSurfaceToSurfaceBlit
-sun/java2d/opengl/OGLRTTSurfaceToSurfaceScale
-sun/java2d/opengl/OGLRTTSurfaceToSurfaceTransform
-sun/java2d/opengl/OGLRenderQueue
-sun/java2d/opengl/OGLRenderQueue$1
-sun/java2d/opengl/OGLRenderQueue$QueueFlusher
-sun/java2d/opengl/OGLRenderer
-sun/java2d/opengl/OGLSurfaceData
-sun/java2d/opengl/OGLSurfaceData$1
-sun/java2d/opengl/OGLSurfaceDataProxy
-sun/java2d/opengl/OGLSurfaceToSurfaceBlit
-sun/java2d/opengl/OGLSurfaceToSurfaceScale
-sun/java2d/opengl/OGLSurfaceToSurfaceTransform
-sun/java2d/opengl/OGLSurfaceToSwBlit
-sun/java2d/opengl/OGLSwToSurfaceBlit
-sun/java2d/opengl/OGLSwToSurfaceScale
-sun/java2d/opengl/OGLSwToSurfaceTransform
-sun/java2d/opengl/OGLSwToTextureBlit
-sun/java2d/opengl/OGLTextRenderer
-sun/java2d/opengl/OGLTextureToSurfaceBlit
-sun/java2d/opengl/OGLTextureToSurfaceScale
-sun/java2d/opengl/OGLTextureToSurfaceTransform
-sun/java2d/pipe/AAShapePipe
-sun/java2d/pipe/AATextRenderer
-sun/java2d/pipe/AlphaColorPipe
-sun/java2d/pipe/AlphaPaintPipe
-sun/java2d/pipe/BufferedContext
-sun/java2d/pipe/BufferedMaskBlit
-sun/java2d/pipe/BufferedMaskFill
-sun/java2d/pipe/BufferedPaints
-sun/java2d/pipe/BufferedRenderPipe
-sun/java2d/pipe/BufferedRenderPipe$AAParallelogramPipe
-sun/java2d/pipe/BufferedRenderPipe$BufferedDrawHandler
-sun/java2d/pipe/BufferedTextPipe
-sun/java2d/pipe/CompositePipe
-sun/java2d/pipe/DrawImage
-sun/java2d/pipe/DrawImagePipe
-sun/java2d/pipe/GeneralCompositePipe
-sun/java2d/pipe/GlyphListLoopPipe
-sun/java2d/pipe/GlyphListPipe
-sun/java2d/pipe/LCDTextRenderer
-sun/java2d/pipe/LoopBasedPipe
-sun/java2d/pipe/LoopPipe
-sun/java2d/pipe/NullPipe
-sun/java2d/pipe/OutlineTextRenderer
-sun/java2d/pipe/ParallelogramPipe
-sun/java2d/pipe/PixelDrawPipe
-sun/java2d/pipe/PixelFillPipe
-sun/java2d/pipe/PixelToParallelogramConverter
-sun/java2d/pipe/PixelToShapeConverter
-sun/java2d/pipe/Region
-sun/java2d/pipe/Region$ImmutableRegion
-sun/java2d/pipe/RegionIterator
-sun/java2d/pipe/RenderBuffer
-sun/java2d/pipe/RenderQueue
-sun/java2d/pipe/RenderingEngine
-sun/java2d/pipe/RenderingEngine$1
-sun/java2d/pipe/ShapeDrawPipe
-sun/java2d/pipe/SolidTextRenderer
-sun/java2d/pipe/SpanClipRenderer
-sun/java2d/pipe/SpanShapeRenderer
-sun/java2d/pipe/SpanShapeRenderer$Composite
-sun/java2d/pipe/TextPipe
-sun/java2d/pipe/TextRenderer
-sun/java2d/pipe/ValidatePipe
-sun/java2d/pipe/hw/AccelGraphicsConfig
-sun/java2d/pipe/hw/AccelSurface
-sun/java2d/pipe/hw/BufferedContextProvider
-sun/java2d/pipe/hw/ContextCapabilities
-sun/launcher/LauncherHelper
-sun/launcher/LauncherHelper$FXHelper
-sun/lwawt/LWCanvasPeer
-sun/lwawt/LWComponentPeer
-sun/lwawt/LWComponentPeer$1
-sun/lwawt/LWComponentPeer$2
-sun/lwawt/LWComponentPeer$3
-sun/lwawt/LWComponentPeer$DelegateContainer
-sun/lwawt/LWContainerPeer
-sun/lwawt/LWCursorManager
-sun/lwawt/LWCursorManager$1
-sun/lwawt/LWGraphicsConfig
-sun/lwawt/LWKeyboardFocusManagerPeer
-sun/lwawt/LWLabelPeer
-sun/lwawt/LWRepaintArea
-sun/lwawt/LWToolkit
-sun/lwawt/LWWindowPeer
-sun/lwawt/LWWindowPeer$PeerType
-sun/lwawt/PlatformComponent
-sun/lwawt/PlatformEventNotifier
-sun/lwawt/PlatformWindow
-sun/lwawt/macosx/CClipboard
-sun/lwawt/macosx/CCursorManager
-sun/lwawt/macosx/CCustomCursor
-sun/lwawt/macosx/CDataTransferer
-sun/lwawt/macosx/CDropTarget
-sun/lwawt/macosx/CFRetainedResource
-sun/lwawt/macosx/CImage
-sun/lwawt/macosx/CImage$Creator
-sun/lwawt/macosx/CInputMethod
-sun/lwawt/macosx/CInputMethodDescriptor
-sun/lwawt/macosx/CPlatformComponent
-sun/lwawt/macosx/CPlatformResponder
-sun/lwawt/macosx/CPlatformView
-sun/lwawt/macosx/CPlatformWindow
-sun/lwawt/macosx/CPlatformWindow$1
-sun/lwawt/macosx/CPlatformWindow$10
-sun/lwawt/macosx/CPlatformWindow$11
-sun/lwawt/macosx/CPlatformWindow$12
-sun/lwawt/macosx/CPlatformWindow$14
-sun/lwawt/macosx/CPlatformWindow$2
-sun/lwawt/macosx/CPlatformWindow$3
-sun/lwawt/macosx/CPlatformWindow$4
-sun/lwawt/macosx/CPlatformWindow$5
-sun/lwawt/macosx/CPlatformWindow$6
-sun/lwawt/macosx/CPlatformWindow$7
-sun/lwawt/macosx/CPlatformWindow$8
-sun/lwawt/macosx/CPlatformWindow$9
-sun/lwawt/macosx/CPrinterDialog
-sun/lwawt/macosx/CThreading
-sun/lwawt/macosx/CToolkitThreadBlockedHandler
-sun/lwawt/macosx/CWrapper$NSWindow
-sun/lwawt/macosx/LWCToolkit
-sun/lwawt/macosx/LWCToolkit$1
-sun/lwawt/macosx/LWCToolkit$2
-sun/lwawt/macosx/LWCToolkit$5
-sun/lwawt/macosx/LWCToolkit$AppleSpecificColor
-sun/lwawt/macosx/NamedCursor
-sun/lwawt/macosx/event/NSEvent
-sun/misc/ASCIICaseInsensitiveComparator
-sun/misc/Cleaner
-sun/misc/CompoundEnumeration
-sun/misc/ExtensionDependency
-sun/misc/FileURLMapper
-sun/misc/FloatingDecimal
-sun/misc/FloatingDecimal$1
-sun/misc/FloatingDecimal$ASCIIToBinaryConverter
-sun/misc/FloatingDecimal$BinaryToASCIIBuffer
-sun/misc/FloatingDecimal$BinaryToASCIIConverter
-sun/misc/FloatingDecimal$ExceptionalBinaryToASCIIBuffer
-sun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer
-sun/misc/IOUtils
-sun/misc/JarIndex
-sun/misc/JavaAWTAccess
-sun/misc/JavaIOFileDescriptorAccess
-sun/misc/JavaLangAccess
-sun/misc/JavaNetAccess
-sun/misc/JavaNioAccess
-sun/misc/JavaSecurityAccess
-sun/misc/JavaSecurityProtectionDomainAccess
-sun/misc/JavaUtilJarAccess
-sun/misc/JavaUtilZipFileAccess
-sun/misc/Launcher
-sun/misc/Launcher$AppClassLoader
-sun/misc/Launcher$AppClassLoader$1
-sun/misc/Launcher$BootClassPathHolder
-sun/misc/Launcher$BootClassPathHolder$1
-sun/misc/Launcher$ExtClassLoader
-sun/misc/Launcher$ExtClassLoader$1
-sun/misc/Launcher$Factory
-sun/misc/MetaIndex
-sun/misc/NativeSignalHandler
-sun/misc/OSEnvironment
-sun/misc/Perf
-sun/misc/Perf$GetPerfAction
-sun/misc/PerfCounter
-sun/misc/PerfCounter$CoreCounters
-sun/misc/PerformanceLogger
-sun/misc/PerformanceLogger$TimeData
-sun/misc/PostVMInitHook
-sun/misc/Resource
-sun/misc/SharedSecrets
-sun/misc/Signal
-sun/misc/SignalHandler
-sun/misc/SoftCache
-sun/misc/SoftCache$ValueCell
-sun/misc/URLClassPath
-sun/misc/URLClassPath$1
-sun/misc/URLClassPath$2
-sun/misc/URLClassPath$3
-sun/misc/URLClassPath$FileLoader
-sun/misc/URLClassPath$JarLoader
-sun/misc/URLClassPath$JarLoader$1
-sun/misc/URLClassPath$JarLoader$2
-sun/misc/URLClassPath$Loader
-sun/misc/Unsafe
-sun/misc/VM
-sun/misc/Version
-sun/net/DefaultProgressMeteringPolicy
-sun/net/NetHooks
-sun/net/NetHooks$Provider
-sun/net/NetProperties
-sun/net/NetProperties$1
-sun/net/ProgressMeteringPolicy
-sun/net/ProgressMonitor
-sun/net/sdp/SdpProvider
-sun/net/spi/DefaultProxySelector
-sun/net/spi/DefaultProxySelector$1
-sun/net/spi/DefaultProxySelector$3
-sun/net/spi/DefaultProxySelector$NonProxyInfo
-sun/net/spi/nameservice/NameService
-sun/net/util/IPAddressUtil
-sun/net/util/URLUtil
-sun/net/www/MessageHeader
-sun/net/www/ParseUtil
-sun/net/www/URLConnection
-sun/net/www/protocol/file/FileURLConnection
-sun/net/www/protocol/file/Handler
-sun/net/www/protocol/jar/Handler
-sun/net/www/protocol/jar/JarFileFactory
-sun/net/www/protocol/jar/JarURLConnection
-sun/net/www/protocol/jar/JarURLConnection$JarURLInputStream
-sun/net/www/protocol/jar/URLJarFile
-sun/net/www/protocol/jar/URLJarFile$URLJarFileCloseController
-sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry
-sun/nio/ByteBuffered
-sun/nio/ch/DirectBuffer
-sun/nio/ch/FileChannelImpl
-sun/nio/ch/FileDispatcher
-sun/nio/ch/FileDispatcherImpl
-sun/nio/ch/IOStatus
-sun/nio/ch/IOUtil
-sun/nio/ch/IOUtil$1
-sun/nio/ch/Interruptible
-sun/nio/ch/NativeDispatcher
-sun/nio/ch/NativeThread
-sun/nio/ch/NativeThreadSet
-sun/nio/ch/Util
-sun/nio/ch/Util$1
-sun/nio/ch/Util$BufferCache
-sun/nio/cs/ArrayDecoder
-sun/nio/cs/ArrayEncoder
-sun/nio/cs/FastCharsetProvider
-sun/nio/cs/HistoricallyNamedCharset
-sun/nio/cs/ISO_8859_1
-sun/nio/cs/ISO_8859_1$Decoder
-sun/nio/cs/StandardCharsets
-sun/nio/cs/StandardCharsets$Aliases
-sun/nio/cs/StandardCharsets$Cache
-sun/nio/cs/StandardCharsets$Classes
-sun/nio/cs/StreamDecoder
-sun/nio/cs/StreamEncoder
-sun/nio/cs/US_ASCII
-sun/nio/cs/UTF_16
-sun/nio/cs/UTF_16$Decoder
-sun/nio/cs/UTF_16BE
-sun/nio/cs/UTF_16LE
-sun/nio/cs/UTF_8
-sun/nio/cs/UTF_8$Decoder
-sun/nio/cs/UTF_8$Encoder
-sun/nio/cs/Unicode
-sun/nio/cs/UnicodeDecoder
-sun/print/PrinterGraphicsConfig
-sun/reflect/AccessorGenerator
-sun/reflect/BootstrapConstructorAccessorImpl
-sun/reflect/ByteVector
-sun/reflect/ByteVectorFactory
-sun/reflect/ByteVectorImpl
-sun/reflect/CallerSensitive
-sun/reflect/ClassDefiner
-sun/reflect/ClassDefiner$1
-sun/reflect/ClassFileAssembler
-sun/reflect/ClassFileConstants
-sun/reflect/ConstantPool
-sun/reflect/ConstructorAccessor
-sun/reflect/ConstructorAccessorImpl
-sun/reflect/DelegatingClassLoader
-sun/reflect/DelegatingConstructorAccessorImpl
-sun/reflect/DelegatingMethodAccessorImpl
-sun/reflect/FieldAccessor
-sun/reflect/FieldAccessorImpl
-sun/reflect/Label
-sun/reflect/Label$PatchInfo
-sun/reflect/LangReflectAccess
-sun/reflect/MagicAccessorImpl
-sun/reflect/MethodAccessor
-sun/reflect/MethodAccessorGenerator
-sun/reflect/MethodAccessorGenerator$1
-sun/reflect/MethodAccessorImpl
-sun/reflect/NativeConstructorAccessorImpl
-sun/reflect/NativeMethodAccessorImpl
-sun/reflect/Reflection
-sun/reflect/ReflectionFactory
-sun/reflect/ReflectionFactory$1
-sun/reflect/ReflectionFactory$GetReflectionFactoryAction
-sun/reflect/SerializationConstructorAccessorImpl
-sun/reflect/UTF8
-sun/reflect/UnsafeBooleanFieldAccessorImpl
-sun/reflect/UnsafeFieldAccessorFactory
-sun/reflect/UnsafeFieldAccessorImpl
-sun/reflect/UnsafeObjectFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticObjectFieldAccessorImpl
-sun/reflect/UnsafeStaticFieldAccessorImpl
-sun/reflect/annotation/AnnotationType
-sun/reflect/generics/repository/AbstractRepository
-sun/reflect/generics/repository/ClassRepository
-sun/reflect/generics/repository/GenericDeclRepository
-sun/reflect/misc/MethodUtil
-sun/reflect/misc/MethodUtil$1
-sun/reflect/misc/ReflectUtil
-sun/security/action/GetBooleanAction
-sun/security/action/GetPropertyAction
-sun/security/util/Debug
-sun/security/util/ManifestEntryVerifier
-sun/swing/DefaultLookup
-sun/swing/JLightweightFrame
-sun/swing/MenuItemLayoutHelper
-sun/swing/StringUIClientPropertyKey
-sun/swing/SwingAccessor
-sun/swing/SwingAccessor$JTextComponentAccessor
-sun/swing/SwingLazyValue
-sun/swing/SwingLazyValue$1
-sun/swing/SwingUtilities2
-sun/swing/SwingUtilities2$2
-sun/swing/SwingUtilities2$AATextInfo
-sun/swing/SwingUtilities2$LSBCacheEntry
-sun/swing/UIAction
-sun/swing/UIClientPropertyKey
-sun/util/CoreResourceBundleControl
-sun/util/PreHashedMap
-sun/util/ResourceBundleEnumeration
-sun/util/calendar/AbstractCalendar
-sun/util/calendar/BaseCalendar
-sun/util/calendar/BaseCalendar$Date
-sun/util/calendar/CalendarDate
-sun/util/calendar/CalendarSystem
-sun/util/calendar/CalendarUtils
-sun/util/calendar/Gregorian
-sun/util/calendar/Gregorian$Date
-sun/util/calendar/ZoneInfo
-sun/util/calendar/ZoneInfoFile
-sun/util/calendar/ZoneInfoFile$1
-sun/util/calendar/ZoneInfoFile$Checksum
-sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule
-sun/util/locale/BaseLocale
-sun/util/locale/BaseLocale$Cache
-sun/util/locale/BaseLocale$Key
-sun/util/locale/LocaleObjectCache
-sun/util/locale/LocaleObjectCache$CacheEntry
-sun/util/locale/LocaleUtils
-sun/util/locale/provider/AuxLocaleProviderAdapter
-sun/util/locale/provider/AuxLocaleProviderAdapter$NullProvider
-sun/util/locale/provider/JRELocaleProviderAdapter
-sun/util/locale/provider/JRELocaleProviderAdapter$1
-sun/util/locale/provider/LocaleDataMetaInfo
-sun/util/locale/provider/LocaleProviderAdapter
-sun/util/locale/provider/LocaleProviderAdapter$1
-sun/util/locale/provider/LocaleProviderAdapter$Type
-sun/util/locale/provider/LocaleResources
-sun/util/locale/provider/LocaleResources$ResourceReference
-sun/util/locale/provider/LocaleServiceProviderPool
-sun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter
-sun/util/locale/provider/ResourceBundleBasedAdapter
-sun/util/locale/provider/SPILocaleProviderAdapter
-sun/util/locale/provider/SPILocaleProviderAdapter$1
-sun/util/locale/provider/TimeZoneNameProviderImpl
-sun/util/locale/provider/TimeZoneNameUtility$TimeZoneNameGetter
-sun/util/logging/LoggingProxy
-sun/util/logging/LoggingSupport
-sun/util/logging/LoggingSupport$1
-sun/util/logging/LoggingSupport$2
-sun/util/logging/PlatformLogger
-sun/util/logging/PlatformLogger$1
-sun/util/logging/PlatformLogger$DefaultLoggerProxy
-sun/util/logging/PlatformLogger$JavaLoggerProxy
-sun/util/logging/PlatformLogger$Level
-sun/util/logging/PlatformLogger$LoggerProxy
-sun/util/logging/resources/logging
-sun/util/resources/LocaleData
-sun/util/resources/LocaleData$1
-sun/util/resources/LocaleData$LocaleDataResourceBundleControl
-sun/util/resources/OpenListResourceBundle
-sun/util/resources/TimeZoneNames
-sun/util/resources/TimeZoneNamesBundle
-sun/util/resources/en/TimeZoneNames_en
-# 32aa76348b93579f
--- a/jdk/make/data/classlist/classlist.solaris Mon May 09 12:55:03 2016 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2644 +0,0 @@
-com/sun/java/swing/SwingUtilities3
-com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI
-com/sun/swing/internal/plaf/basic/resources/basic
-com/sun/swing/internal/plaf/metal/resources/metal
-java/applet/Applet
-java/awt/AWTEvent
-java/awt/AWTEvent$1
-java/awt/AWTEventMulticaster
-java/awt/AWTKeyStroke
-java/awt/AWTKeyStroke$1
-java/awt/ActiveEvent
-java/awt/Adjustable
-java/awt/AlphaComposite
-java/awt/BasicStroke
-java/awt/BorderLayout
-java/awt/BufferCapabilities
-java/awt/Canvas
-java/awt/CardLayout
-java/awt/CardLayout$Card
-java/awt/Color
-java/awt/Component
-java/awt/Component$1
-java/awt/Component$3
-java/awt/Component$AWTTreeLock
-java/awt/Component$AccessibleAWTComponent
-java/awt/Component$BaselineResizeBehavior
-java/awt/Component$BltBufferStrategy
-java/awt/Component$BltSubRegionBufferStrategy
-java/awt/Component$DummyRequestFocusController
-java/awt/Component$FlipBufferStrategy
-java/awt/ComponentOrientation
-java/awt/Composite
-java/awt/Conditional
-java/awt/Container
-java/awt/Container$1
-java/awt/Container$AccessibleAWTContainer
-java/awt/ContainerOrderFocusTraversalPolicy
-java/awt/Cursor
-java/awt/Cursor$1
-java/awt/DefaultFocusTraversalPolicy
-java/awt/DefaultKeyboardFocusManager
-java/awt/DefaultKeyboardFocusManager$1
-java/awt/DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent
-java/awt/DefaultKeyboardFocusManager$TypeAheadMarker
-java/awt/Dialog
-java/awt/Dialog$ModalExclusionType
-java/awt/Dialog$ModalityType
-java/awt/Dimension
-java/awt/Event
-java/awt/EventDispatchThread
-java/awt/EventDispatchThread$1
-java/awt/EventDispatchThread$HierarchyEventFilter
-java/awt/EventFilter
-java/awt/EventFilter$FilterAction
-java/awt/EventQueue
-java/awt/EventQueue$1
-java/awt/EventQueue$1AWTInvocationLock
-java/awt/EventQueue$2
-java/awt/EventQueue$3
-java/awt/EventQueue$4
-java/awt/EventQueue$5
-java/awt/FlowLayout
-java/awt/FocusTraversalPolicy
-java/awt/Font
-java/awt/Font$FontAccessImpl
-java/awt/FontFormatException
-java/awt/FontMetrics
-java/awt/Frame
-java/awt/Frame$1
-java/awt/Graphics
-java/awt/Graphics2D
-java/awt/GraphicsCallback
-java/awt/GraphicsCallback$PaintCallback
-java/awt/GraphicsConfiguration
-java/awt/GraphicsDevice
-java/awt/GraphicsEnvironment
-java/awt/GraphicsEnvironment$1
-java/awt/GridLayout
-java/awt/Image
-java/awt/Image$1
-java/awt/ImageCapabilities
-java/awt/ImageMediaEntry
-java/awt/Insets
-java/awt/ItemSelectable
-java/awt/KeyEventDispatcher
-java/awt/KeyEventPostProcessor
-java/awt/KeyboardFocusManager
-java/awt/KeyboardFocusManager$1
-java/awt/KeyboardFocusManager$3
-java/awt/KeyboardFocusManager$HeavyweightFocusRequest
-java/awt/KeyboardFocusManager$LightweightFocusRequest
-java/awt/Label
-java/awt/LayoutManager
-java/awt/LayoutManager2
-java/awt/LightweightDispatcher
-java/awt/LightweightDispatcher$2
-java/awt/MediaEntry
-java/awt/MediaTracker
-java/awt/MenuBar
-java/awt/MenuComponent
-java/awt/MenuContainer
-java/awt/ModalEventFilter
-java/awt/Paint
-java/awt/Panel
-java/awt/Point
-java/awt/PrintGraphics
-java/awt/Queue
-java/awt/Rectangle
-java/awt/RenderingHints
-java/awt/RenderingHints$Key
-java/awt/SentEvent
-java/awt/SequencedEvent
-java/awt/SequencedEvent$1
-java/awt/Shape
-java/awt/SplashScreen
-java/awt/Stroke
-java/awt/SystemColor
-java/awt/Toolkit
-java/awt/Toolkit$1
-java/awt/Toolkit$2
-java/awt/Toolkit$3
-java/awt/Toolkit$4
-java/awt/Toolkit$5
-java/awt/Toolkit$DesktopPropertyChangeSupport
-java/awt/Toolkit$DesktopPropertyChangeSupport$1
-java/awt/Toolkit$SelectiveAWTEventListener
-java/awt/Toolkit$ToolkitEventMulticaster
-java/awt/Transparency
-java/awt/TrayIcon
-java/awt/VKCollection
-java/awt/Window
-java/awt/Window$1
-java/awt/Window$1DisposeAction
-java/awt/Window$Type
-java/awt/Window$WindowDisposerRecord
-java/awt/color/ColorSpace
-java/awt/color/ICC_ColorSpace
-java/awt/color/ICC_Profile
-java/awt/color/ICC_Profile$1
-java/awt/color/ICC_ProfileRGB
-java/awt/datatransfer/Clipboard
-java/awt/datatransfer/ClipboardOwner
-java/awt/datatransfer/FlavorMap
-java/awt/datatransfer/FlavorTable
-java/awt/datatransfer/SystemFlavorMap
-java/awt/datatransfer/Transferable
-java/awt/dnd/DropTarget
-java/awt/dnd/DropTargetContext
-java/awt/dnd/DropTargetListener
-java/awt/dnd/peer/DragSourceContextPeer
-java/awt/dnd/peer/DropTargetContextPeer
-java/awt/dnd/peer/DropTargetPeer
-java/awt/event/AWTEventListener
-java/awt/event/AWTEventListenerProxy
-java/awt/event/ActionEvent
-java/awt/event/ActionListener
-java/awt/event/AdjustmentEvent
-java/awt/event/AdjustmentListener
-java/awt/event/ComponentAdapter
-java/awt/event/ComponentEvent
-java/awt/event/ComponentListener
-java/awt/event/ContainerEvent
-java/awt/event/ContainerListener
-java/awt/event/FocusAdapter
-java/awt/event/FocusEvent
-java/awt/event/FocusListener
-java/awt/event/HierarchyBoundsListener
-java/awt/event/HierarchyListener
-java/awt/event/InputEvent
-java/awt/event/InputEvent$1
-java/awt/event/InputMethodEvent
-java/awt/event/InputMethodListener
-java/awt/event/InvocationEvent
-java/awt/event/InvocationEvent$1
-java/awt/event/ItemEvent
-java/awt/event/ItemListener
-java/awt/event/KeyAdapter
-java/awt/event/KeyEvent
-java/awt/event/KeyEvent$1
-java/awt/event/KeyListener
-java/awt/event/MouseAdapter
-java/awt/event/MouseEvent
-java/awt/event/MouseListener
-java/awt/event/MouseMotionAdapter
-java/awt/event/MouseMotionListener
-java/awt/event/MouseWheelListener
-java/awt/event/NativeLibLoader
-java/awt/event/NativeLibLoader$1
-java/awt/event/PaintEvent
-java/awt/event/TextListener
-java/awt/event/WindowAdapter
-java/awt/event/WindowEvent
-java/awt/event/WindowFocusListener
-java/awt/event/WindowListener
-java/awt/event/WindowStateListener
-java/awt/font/FontRenderContext
-java/awt/font/GlyphVector
-java/awt/font/LineMetrics
-java/awt/font/TextAttribute
-java/awt/geom/AffineTransform
-java/awt/geom/Dimension2D
-java/awt/geom/GeneralPath
-java/awt/geom/Path2D
-java/awt/geom/Path2D$Float
-java/awt/geom/Path2D$Float$CopyIterator
-java/awt/geom/Path2D$Iterator
-java/awt/geom/PathIterator
-java/awt/geom/Point2D
-java/awt/geom/Point2D$Float
-java/awt/geom/RectIterator
-java/awt/geom/Rectangle2D
-java/awt/geom/Rectangle2D$Float
-java/awt/geom/RectangularShape
-java/awt/im/InputContext
-java/awt/im/InputMethodRequests
-java/awt/im/spi/InputMethod
-java/awt/im/spi/InputMethodContext
-java/awt/im/spi/InputMethodDescriptor
-java/awt/image/BufferStrategy
-java/awt/image/BufferedImage
-java/awt/image/BufferedImage$1
-java/awt/image/ColorModel
-java/awt/image/ColorModel$1
-java/awt/image/ComponentSampleModel
-java/awt/image/DataBuffer
-java/awt/image/DataBuffer$1
-java/awt/image/DataBufferByte
-java/awt/image/DataBufferInt
-java/awt/image/DirectColorModel
-java/awt/image/FilteredImageSource
-java/awt/image/ImageConsumer
-java/awt/image/ImageFilter
-java/awt/image/ImageObserver
-java/awt/image/ImageProducer
-java/awt/image/IndexColorModel
-java/awt/image/PackedColorModel
-java/awt/image/PixelInterleavedSampleModel
-java/awt/image/RGBImageFilter
-java/awt/image/Raster
-java/awt/image/RenderedImage
-java/awt/image/SampleModel
-java/awt/image/SinglePixelPackedSampleModel
-java/awt/image/VolatileImage
-java/awt/image/WritableRaster
-java/awt/image/WritableRenderedImage
-java/awt/peer/CanvasPeer
-java/awt/peer/ComponentPeer
-java/awt/peer/ContainerPeer
-java/awt/peer/FramePeer
-java/awt/peer/KeyboardFocusManagerPeer
-java/awt/peer/LabelPeer
-java/awt/peer/LightweightPeer
-java/awt/peer/PanelPeer
-java/awt/peer/SystemTrayPeer
-java/awt/peer/WindowPeer
-java/awt/print/PrinterGraphics
-java/beans/ChangeListenerMap
-java/beans/PropertyChangeEvent
-java/beans/PropertyChangeListener
-java/beans/PropertyChangeListenerProxy
-java/beans/PropertyChangeSupport
-java/beans/PropertyChangeSupport$PropertyChangeListenerMap
-java/beans/VetoableChangeListener
-java/io/Bits
-java/io/BufferedInputStream
-java/io/BufferedOutputStream
-java/io/BufferedReader
-java/io/BufferedWriter
-java/io/ByteArrayInputStream
-java/io/ByteArrayOutputStream
-java/io/Closeable
-java/io/DataInput
-java/io/DataInputStream
-java/io/DataOutput
-java/io/DataOutputStream
-java/io/DefaultFileSystem
-java/io/EOFException
-java/io/ExpiringCache
-java/io/ExpiringCache$1
-java/io/ExpiringCache$Entry
-java/io/Externalizable
-java/io/File
-java/io/File$PathStatus
-java/io/FileDescriptor
-java/io/FileDescriptor$1
-java/io/FileInputStream
-java/io/FileInputStream$1
-java/io/FileNotFoundException
-java/io/FileOutputStream
-java/io/FileOutputStream$1
-java/io/FilePermission
-java/io/FilePermission$1
-java/io/FilePermissionCollection
-java/io/FileReader
-java/io/FileSystem
-java/io/FileWriter
-java/io/FilenameFilter
-java/io/FilterInputStream
-java/io/FilterOutputStream
-java/io/FilterReader
-java/io/Flushable
-java/io/IOException
-java/io/InputStream
-java/io/InputStreamReader
-java/io/InterruptedIOException
-java/io/NotSerializableException
-java/io/ObjectInput
-java/io/ObjectInputStream
-java/io/ObjectInputStream$BlockDataInputStream
-java/io/ObjectInputStream$GetField
-java/io/ObjectInputStream$GetFieldImpl
-java/io/ObjectInputStream$HandleTable
-java/io/ObjectInputStream$HandleTable$HandleList
-java/io/ObjectInputStream$PeekInputStream
-java/io/ObjectInputStream$ValidationList
-java/io/ObjectOutput
-java/io/ObjectOutputStream
-java/io/ObjectOutputStream$BlockDataOutputStream
-java/io/ObjectOutputStream$HandleTable
-java/io/ObjectOutputStream$ReplaceTable
-java/io/ObjectStreamClass
-java/io/ObjectStreamClass$1
-java/io/ObjectStreamClass$2
-java/io/ObjectStreamClass$3
-java/io/ObjectStreamClass$4
-java/io/ObjectStreamClass$5
-java/io/ObjectStreamClass$Caches
-java/io/ObjectStreamClass$ClassDataSlot
-java/io/ObjectStreamClass$EntryFuture
-java/io/ObjectStreamClass$ExceptionInfo
-java/io/ObjectStreamClass$FieldReflector
-java/io/ObjectStreamClass$FieldReflectorKey
-java/io/ObjectStreamClass$MemberSignature
-java/io/ObjectStreamClass$WeakClassKey
-java/io/ObjectStreamConstants
-java/io/ObjectStreamException
-java/io/ObjectStreamField
-java/io/OutputStream
-java/io/OutputStreamWriter
-java/io/PrintStream
-java/io/PushbackInputStream
-java/io/RandomAccessFile
-java/io/RandomAccessFile$1
-java/io/Reader
-java/io/SerialCallbackContext
-java/io/Serializable
-java/io/StreamTokenizer
-java/io/StringReader
-java/io/StringWriter
-java/io/UnixFileSystem
-java/io/UnsupportedEncodingException
-java/io/Writer
-java/lang/AbstractStringBuilder
-java/lang/Appendable
-java/lang/ApplicationShutdownHooks
-java/lang/ApplicationShutdownHooks$1
-java/lang/ArithmeticException
-java/lang/ArrayIndexOutOfBoundsException
-java/lang/ArrayStoreException
-java/lang/AssertionError
-java/lang/AutoCloseable
-java/lang/Boolean
-java/lang/BootstrapMethodError
-java/lang/Byte
-java/lang/CharSequence
-java/lang/Character
-java/lang/Character$CharacterCache
-java/lang/CharacterData
-java/lang/CharacterData00
-java/lang/CharacterDataLatin1
-java/lang/Class
-java/lang/Class$1
-java/lang/Class$3
-java/lang/Class$4
-java/lang/Class$AnnotationData
-java/lang/Class$Atomic
-java/lang/Class$ReflectionData
-java/lang/ClassCastException
-java/lang/ClassFormatError
-java/lang/ClassLoader
-java/lang/ClassLoader$2
-java/lang/ClassLoader$3
-java/lang/ClassLoader$NativeLibrary
-java/lang/ClassLoader$ParallelLoaders
-java/lang/ClassLoaderHelper
-java/lang/ClassNotFoundException
-java/lang/ClassValue$ClassValueMap
-java/lang/CloneNotSupportedException
-java/lang/Cloneable
-java/lang/Comparable
-java/lang/Compiler
-java/lang/Compiler$1
-java/lang/Double
-java/lang/Enum
-java/lang/Error
-java/lang/Exception
-java/lang/ExceptionInInitializerError
-java/lang/Float
-java/lang/IllegalAccessError
-java/lang/IllegalAccessException
-java/lang/IllegalArgumentException
-java/lang/IllegalMonitorStateException
-java/lang/IllegalStateException
-java/lang/IncompatibleClassChangeError
-java/lang/IndexOutOfBoundsException
-java/lang/InheritableThreadLocal
-java/lang/InstantiationException
-java/lang/Integer
-java/lang/Integer$IntegerCache
-java/lang/InternalError
-java/lang/InterruptedException
-java/lang/Iterable
-java/lang/LinkageError
-java/lang/Long
-java/lang/Long$LongCache
-java/lang/Math
-java/lang/NoClassDefFoundError
-java/lang/NoSuchFieldException
-java/lang/NoSuchMethodError
-java/lang/NoSuchMethodException
-java/lang/NullPointerException
-java/lang/Number
-java/lang/NumberFormatException
-java/lang/Object
-java/lang/OutOfMemoryError
-java/lang/Package
-java/lang/Process
-java/lang/ProcessBuilder
-java/lang/ProcessEnvironment
-java/lang/ProcessEnvironment$ExternalData
-java/lang/ProcessEnvironment$StringEnvironment
-java/lang/ProcessEnvironment$Value
-java/lang/ProcessEnvironment$Variable
-java/lang/ProcessImpl
-java/lang/Readable
-java/lang/ReflectiveOperationException
-java/lang/Runnable
-java/lang/Runtime
-java/lang/RuntimeException
-java/lang/RuntimePermission
-java/lang/SecurityException
-java/lang/SecurityManager
-java/lang/Short
-java/lang/Short$ShortCache
-java/lang/Shutdown
-java/lang/Shutdown$Lock
-java/lang/StackOverflowError
-java/lang/StackTraceElement
-java/lang/StrictMath
-java/lang/String
-java/lang/String$CaseInsensitiveComparator
-java/lang/StringBuffer
-java/lang/StringBuilder
-java/lang/StringCoding
-java/lang/StringCoding$StringDecoder
-java/lang/StringCoding$StringEncoder
-java/lang/StringIndexOutOfBoundsException
-java/lang/System
-java/lang/System$2
-java/lang/SystemClassLoaderAction
-java/lang/Terminator
-java/lang/Terminator$1
-java/lang/Thread
-java/lang/Thread$State
-java/lang/Thread$UncaughtExceptionHandler
-java/lang/ThreadDeath
-java/lang/ThreadGroup
-java/lang/ThreadLocal
-java/lang/ThreadLocal$ThreadLocalMap
-java/lang/ThreadLocal$ThreadLocalMap$Entry
-java/lang/Throwable
-java/lang/Throwable$PrintStreamOrWriter
-java/lang/Throwable$WrappedPrintStream
-java/lang/UNIXProcess
-java/lang/UNIXProcess$1
-java/lang/UNIXProcess$2
-java/lang/UNIXProcess$3
-java/lang/UNIXProcess$3$1
-java/lang/UNIXProcess$DeferredCloseInputStream
-java/lang/UNIXProcess$LaunchMechanism
-java/lang/UnsatisfiedLinkError
-java/lang/UnsupportedOperationException
-java/lang/VirtualMachineError
-java/lang/Void
-java/lang/annotation/Annotation
-java/lang/invoke/CallSite
-java/lang/invoke/ConstantCallSite
-java/lang/invoke/DirectMethodHandle
-java/lang/invoke/Invokers
-java/lang/invoke/LambdaForm
-java/lang/invoke/LambdaForm$NamedFunction
-java/lang/invoke/MemberName
-java/lang/invoke/MemberName$Factory
-java/lang/invoke/MethodHandle
-java/lang/invoke/MethodHandleImpl
-java/lang/invoke/MethodHandleNatives
-java/lang/invoke/MethodHandleStatics
-java/lang/invoke/MethodHandleStatics$1
-java/lang/invoke/MethodType
-java/lang/invoke/MethodType$ConcurrentWeakInternSet
-java/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry
-java/lang/invoke/MethodTypeForm
-java/lang/invoke/MutableCallSite
-java/lang/invoke/VolatileCallSite
-java/lang/ref/FinalReference
-java/lang/ref/Finalizer
-java/lang/ref/Finalizer$FinalizerThread
-java/lang/ref/PhantomReference
-java/lang/ref/Reference
-java/lang/ref/Reference$Lock
-java/lang/ref/Reference$ReferenceHandler
-java/lang/ref/ReferenceQueue
-java/lang/ref/ReferenceQueue$Lock
-java/lang/ref/ReferenceQueue$Null
-java/lang/ref/SoftReference
-java/lang/ref/WeakReference
-java/lang/reflect/AccessibleObject
-java/lang/reflect/AnnotatedElement
-java/lang/reflect/Array
-java/lang/reflect/Constructor
-java/lang/reflect/Executable
-java/lang/reflect/Field
-java/lang/reflect/GenericDeclaration
-java/lang/reflect/InvocationHandler
-java/lang/reflect/InvocationTargetException
-java/lang/reflect/Member
-java/lang/reflect/Method
-java/lang/reflect/Modifier
-java/lang/reflect/Parameter
-java/lang/reflect/Proxy
-java/lang/reflect/Proxy$KeyFactory
-java/lang/reflect/Proxy$ProxyClassFactory
-java/lang/reflect/ReflectAccess
-java/lang/reflect/ReflectPermission
-java/lang/reflect/Type
-java/lang/reflect/WeakCache
-java/math/BigInteger
-java/math/BigInteger$UnsafeHolder
-java/math/MutableBigInteger
-java/math/RoundingMode
-java/net/AbstractPlainDatagramSocketImpl
-java/net/AbstractPlainDatagramSocketImpl$1
-java/net/AbstractPlainSocketImpl
-java/net/AbstractPlainSocketImpl$1
-java/net/Authenticator
-java/net/BindException
-java/net/ConnectException
-java/net/DatagramPacket
-java/net/DatagramPacket$1
-java/net/DatagramSocket
-java/net/DatagramSocket$1
-java/net/DatagramSocketImpl
-java/net/DefaultDatagramSocketImplFactory
-java/net/DefaultInterface
-java/net/FileNameMap
-java/net/HttpURLConnection
-java/net/Inet4Address
-java/net/Inet4AddressImpl
-java/net/Inet6Address
-java/net/Inet6Address$Inet6AddressHolder
-java/net/Inet6AddressImpl
-java/net/InetAddress
-java/net/InetAddress$1
-java/net/InetAddress$2
-java/net/InetAddress$Cache
-java/net/InetAddress$Cache$Type
-java/net/InetAddress$CacheEntry
-java/net/InetAddress$InetAddressHolder
-java/net/InetAddressImpl
-java/net/InetAddressImplFactory
-java/net/InetSocketAddress
-java/net/InetSocketAddress$InetSocketAddressHolder
-java/net/InterfaceAddress
-java/net/JarURLConnection
-java/net/MalformedURLException
-java/net/MulticastSocket
-java/net/NetworkInterface
-java/net/NetworkInterface$1
-java/net/NetworkInterface$2
-java/net/NoRouteToHostException
-java/net/Parts
-java/net/PlainDatagramSocketImpl
-java/net/PlainSocketImpl
-java/net/Proxy
-java/net/Proxy$Type
-java/net/ProxySelector
-java/net/ServerSocket
-java/net/Socket
-java/net/SocketAddress
-java/net/SocketException
-java/net/SocketImpl
-java/net/SocketImplFactory
-java/net/SocketOptions
-java/net/SocksConsts
-java/net/SocksSocketImpl
-java/net/SocksSocketImpl$3
-java/net/URI
-java/net/URI$Parser
-java/net/URL
-java/net/URLClassLoader
-java/net/URLClassLoader$1
-java/net/URLClassLoader$2
-java/net/URLClassLoader$3
-java/net/URLClassLoader$3$1
-java/net/URLClassLoader$7
-java/net/URLConnection
-java/net/URLConnection$1
-java/net/URLStreamHandler
-java/net/URLStreamHandlerFactory
-java/net/UnknownHostException
-java/nio/Bits
-java/nio/Bits$1
-java/nio/Buffer
-java/nio/BufferUnderflowException
-java/nio/ByteBuffer
-java/nio/ByteBufferAsIntBufferB
-java/nio/ByteBufferAsShortBufferB
-java/nio/ByteOrder
-java/nio/CharBuffer
-java/nio/DirectByteBuffer
-java/nio/DirectByteBuffer$Deallocator
-java/nio/DirectByteBufferR
-java/nio/DirectLongBufferU
-java/nio/HeapByteBuffer
-java/nio/HeapCharBuffer
-java/nio/IntBuffer
-java/nio/LongBuffer
-java/nio/MappedByteBuffer
-java/nio/ShortBuffer
-java/nio/channels/ByteChannel
-java/nio/channels/Channel
-java/nio/channels/FileChannel
-java/nio/channels/FileChannel$MapMode
-java/nio/channels/GatheringByteChannel
-java/nio/channels/InterruptibleChannel
-java/nio/channels/NetworkChannel
-java/nio/channels/ReadableByteChannel
-java/nio/channels/ScatteringByteChannel
-java/nio/channels/SeekableByteChannel
-java/nio/channels/SelectableChannel
-java/nio/channels/SocketChannel
-java/nio/channels/WritableByteChannel
-java/nio/channels/spi/AbstractInterruptibleChannel
-java/nio/channels/spi/AbstractInterruptibleChannel$1
-java/nio/channels/spi/AbstractSelectableChannel
-java/nio/charset/Charset
-java/nio/charset/Charset$ExtendedProviderHolder
-java/nio/charset/Charset$ExtendedProviderHolder$1
-java/nio/charset/CharsetDecoder
-java/nio/charset/CharsetEncoder
-java/nio/charset/CoderResult
-java/nio/charset/CoderResult$1
-java/nio/charset/CoderResult$2
-java/nio/charset/CoderResult$Cache
-java/nio/charset/CodingErrorAction
-java/nio/charset/StandardCharsets
-java/nio/charset/spi/CharsetProvider
-java/nio/file/Path
-java/nio/file/Watchable
-java/nio/file/attribute/FileAttribute
-java/security/AccessControlContext
-java/security/AccessControlException
-java/security/AccessController
-java/security/AlgorithmParameters
-java/security/AlgorithmParametersSpi
-java/security/AllPermission
-java/security/AllPermissionCollection
-java/security/AuthProvider
-java/security/BasicPermission
-java/security/BasicPermissionCollection
-java/security/CodeSigner
-java/security/CodeSource
-java/security/DigestException
-java/security/GeneralSecurityException
-java/security/Guard
-java/security/InvalidAlgorithmParameterException
-java/security/InvalidKeyException
-java/security/InvalidParameterException
-java/security/Key
-java/security/KeyException
-java/security/KeyFactory
-java/security/KeyFactorySpi
-java/security/MessageDigest
-java/security/MessageDigest$Delegate
-java/security/MessageDigestSpi
-java/security/NoSuchAlgorithmException
-java/security/Permission
-java/security/PermissionCollection
-java/security/Permissions
-java/security/Principal
-java/security/PrivateKey
-java/security/PrivilegedAction
-java/security/PrivilegedActionException
-java/security/PrivilegedExceptionAction
-java/security/ProtectionDomain
-java/security/ProtectionDomain$1
-java/security/ProtectionDomain$3
-java/security/ProtectionDomain$Key
-java/security/Provider
-java/security/Provider$EngineDescription
-java/security/Provider$Service
-java/security/Provider$ServiceKey
-java/security/Provider$UString
-java/security/ProviderException
-java/security/PublicKey
-java/security/SecureClassLoader
-java/security/SecureRandomSpi
-java/security/Security
-java/security/Security$1
-java/security/SecurityPermission
-java/security/Signature
-java/security/Signature$Delegate
-java/security/SignatureException
-java/security/SignatureSpi
-java/security/UnresolvedPermission
-java/security/cert/CertPath
-java/security/cert/Certificate
-java/security/cert/CertificateFactory
-java/security/cert/CertificateFactorySpi
-java/security/cert/Extension
-java/security/cert/X509Certificate
-java/security/cert/X509Extension
-java/security/interfaces/DSAKey
-java/security/interfaces/DSAParams
-java/security/interfaces/DSAPrivateKey
-java/security/interfaces/DSAPublicKey
-java/security/interfaces/RSAKey
-java/security/interfaces/RSAPrivateCrtKey
-java/security/interfaces/RSAPrivateKey
-java/security/interfaces/RSAPublicKey
-java/security/spec/AlgorithmParameterSpec
-java/security/spec/DSAParameterSpec
-java/security/spec/DSAPublicKeySpec
-java/security/spec/EncodedKeySpec
-java/security/spec/InvalidKeySpecException
-java/security/spec/KeySpec
-java/security/spec/PKCS8EncodedKeySpec
-java/security/spec/RSAPrivateCrtKeySpec
-java/security/spec/RSAPrivateKeySpec
-java/security/spec/RSAPublicKeySpec
-java/security/spec/X509EncodedKeySpec
-java/text/AttributedCharacterIterator$Attribute
-java/text/CharacterIterator
-java/text/Collator
-java/text/DateFormat
-java/text/DateFormat$Field
-java/text/DateFormatSymbols
-java/text/DecimalFormat
-java/text/DecimalFormatSymbols
-java/text/DigitList
-java/text/DontCareFieldPosition
-java/text/DontCareFieldPosition$1
-java/text/EntryPair
-java/text/FieldPosition
-java/text/Format
-java/text/Format$Field
-java/text/Format$FieldDelegate
-java/text/MergeCollation
-java/text/MessageFormat
-java/text/MessageFormat$Field
-java/text/Normalizer
-java/text/Normalizer$Form
-java/text/NumberFormat
-java/text/NumberFormat$Field
-java/text/ParseException
-java/text/PatternEntry
-java/text/PatternEntry$Parser
-java/text/RBCollationTables
-java/text/RBCollationTables$BuildAPI
-java/text/RBTableBuilder
-java/text/RuleBasedCollator
-java/text/SimpleDateFormat
-java/text/spi/BreakIteratorProvider
-java/text/spi/CollatorProvider
-java/text/spi/DateFormatProvider
-java/text/spi/DateFormatSymbolsProvider
-java/text/spi/DecimalFormatSymbolsProvider
-java/text/spi/NumberFormatProvider
-java/util/AbstractCollection
-java/util/AbstractList
-java/util/AbstractList$Itr
-java/util/AbstractList$ListItr
-java/util/AbstractMap
-java/util/AbstractQueue
-java/util/AbstractSequentialList
-java/util/AbstractSet
-java/util/ArrayDeque
-java/util/ArrayList
-java/util/ArrayList$1
-java/util/ArrayList$Itr
-java/util/ArrayList$ListItr
-java/util/ArrayList$SubList
-java/util/ArrayList$SubList$1
-java/util/Arrays
-java/util/Arrays$ArrayList
-java/util/Arrays$LegacyMergeSort
-java/util/Base64
-java/util/Base64$Decoder
-java/util/Base64$Encoder
-java/util/BitSet
-java/util/Calendar
-java/util/Calendar$Builder
-java/util/Collection
-java/util/Collections
-java/util/Collections$3
-java/util/Collections$EmptyEnumeration
-java/util/Collections$EmptyIterator
-java/util/Collections$EmptyList
-java/util/Collections$EmptyMap
-java/util/Collections$EmptySet
-java/util/Collections$SetFromMap
-java/util/Collections$SynchronizedCollection
-java/util/Collections$SynchronizedMap
-java/util/Collections$SynchronizedSet
-java/util/Collections$SynchronizedSortedSet
-java/util/Collections$UnmodifiableCollection
-java/util/Collections$UnmodifiableCollection$1
-java/util/Collections$UnmodifiableList
-java/util/Collections$UnmodifiableList$1
-java/util/Collections$UnmodifiableMap
-java/util/Collections$UnmodifiableRandomAccessList
-java/util/Collections$UnmodifiableSet
-java/util/ComparableTimSort
-java/util/Comparator
-java/util/Currency
-java/util/Currency$1
-java/util/Currency$CurrencyNameGetter
-java/util/Date
-java/util/Deque
-java/util/Dictionary
-java/util/Enumeration
-java/util/EventListener
-java/util/EventListenerProxy
-java/util/EventObject
-java/util/GregorianCalendar
-java/util/HashMap
-java/util/HashMap$EntryIterator
-java/util/HashMap$EntrySet
-java/util/HashMap$HashIterator
-java/util/HashMap$KeyIterator
-java/util/HashMap$KeySet
-java/util/HashMap$Node
-java/util/HashMap$TreeNode
-java/util/HashMap$ValueIterator
-java/util/HashMap$Values
-java/util/HashSet
-java/util/Hashtable
-java/util/Hashtable$Entry
-java/util/Hashtable$EntrySet
-java/util/Hashtable$Enumerator
-java/util/Hashtable$ValueCollection
-java/util/IdentityHashMap
-java/util/IdentityHashMap$IdentityHashMapIterator
-java/util/IdentityHashMap$KeyIterator
-java/util/IdentityHashMap$KeySet
-java/util/IdentityHashMap$ValueIterator
-java/util/IdentityHashMap$Values
-java/util/Iterator
-java/util/LinkedHashMap
-java/util/LinkedHashMap$Entry
-java/util/LinkedHashMap$LinkedEntryIterator
-java/util/LinkedHashMap$LinkedEntrySet
-java/util/LinkedHashMap$LinkedHashIterator
-java/util/LinkedHashMap$LinkedKeyIterator
-java/util/LinkedHashMap$LinkedKeySet
-java/util/LinkedList
-java/util/LinkedList$ListItr
-java/util/LinkedList$Node
-java/util/List
-java/util/ListIterator
-java/util/ListResourceBundle
-java/util/Locale
-java/util/Locale$1
-java/util/Locale$Cache
-java/util/Locale$Category
-java/util/Locale$LocaleKey
-java/util/Map
-java/util/Map$Entry
-java/util/MissingResourceException
-java/util/NavigableMap
-java/util/NavigableSet
-java/util/Objects
-java/util/PriorityQueue
-java/util/Properties
-java/util/Properties$LineReader
-java/util/PropertyResourceBundle
-java/util/Queue
-java/util/Random
-java/util/RandomAccess
-java/util/ResourceBundle
-java/util/ResourceBundle$1
-java/util/ResourceBundle$BundleReference
-java/util/ResourceBundle$CacheKey
-java/util/ResourceBundle$CacheKeyReference
-java/util/ResourceBundle$Control
-java/util/ResourceBundle$Control$1
-java/util/ResourceBundle$Control$CandidateListCache
-java/util/ResourceBundle$LoaderReference
-java/util/ResourceBundle$RBClassLoader
-java/util/ResourceBundle$RBClassLoader$1
-java/util/ResourceBundle$SingleFormatControl
-java/util/ServiceLoader
-java/util/ServiceLoader$1
-java/util/ServiceLoader$LazyIterator
-java/util/Set
-java/util/SortedMap
-java/util/SortedSet
-java/util/Stack
-java/util/StringTokenizer
-java/util/TimSort
-java/util/TimeZone
-java/util/TimeZone$1
-java/util/TreeMap
-java/util/TreeMap$Entry
-java/util/TreeSet
-java/util/Vector
-java/util/Vector$1
-java/util/Vector$Itr
-java/util/Vector$ListItr
-java/util/WeakHashMap
-java/util/WeakHashMap$Entry
-java/util/WeakHashMap$KeySet
-java/util/concurrent/BlockingQueue
-java/util/concurrent/ConcurrentHashMap
-java/util/concurrent/ConcurrentHashMap$BaseIterator
-java/util/concurrent/ConcurrentHashMap$CollectionView
-java/util/concurrent/ConcurrentHashMap$CounterCell
-java/util/concurrent/ConcurrentHashMap$EntrySetView
-java/util/concurrent/ConcurrentHashMap$ForwardingNode
-java/util/concurrent/ConcurrentHashMap$KeyIterator
-java/util/concurrent/ConcurrentHashMap$KeySetView
-java/util/concurrent/ConcurrentHashMap$Node
-java/util/concurrent/ConcurrentHashMap$Segment
-java/util/concurrent/ConcurrentHashMap$Traverser
-java/util/concurrent/ConcurrentHashMap$ValueIterator
-java/util/concurrent/ConcurrentHashMap$ValuesView
-java/util/concurrent/ConcurrentMap
-java/util/concurrent/ConcurrentNavigableMap
-java/util/concurrent/ConcurrentSkipListMap
-java/util/concurrent/ConcurrentSkipListMap$EntrySet
-java/util/concurrent/ConcurrentSkipListMap$HeadIndex
-java/util/concurrent/ConcurrentSkipListMap$Index
-java/util/concurrent/ConcurrentSkipListMap$KeySet
-java/util/concurrent/ConcurrentSkipListMap$Node
-java/util/concurrent/ConcurrentSkipListMap$Values
-java/util/concurrent/ConcurrentSkipListSet
-java/util/concurrent/CopyOnWriteArrayList
-java/util/concurrent/DelayQueue
-java/util/concurrent/Delayed
-java/util/concurrent/ThreadLocalRandom
-java/util/concurrent/TimeUnit
-java/util/concurrent/TimeUnit$1
-java/util/concurrent/TimeUnit$2
-java/util/concurrent/TimeUnit$3
-java/util/concurrent/TimeUnit$4
-java/util/concurrent/TimeUnit$5
-java/util/concurrent/TimeUnit$6
-java/util/concurrent/TimeUnit$7
-java/util/concurrent/atomic/AtomicBoolean
-java/util/concurrent/atomic/AtomicInteger
-java/util/concurrent/atomic/AtomicLong
-java/util/concurrent/atomic/AtomicMarkableReference
-java/util/concurrent/atomic/AtomicMarkableReference$Pair
-java/util/concurrent/atomic/AtomicReferenceFieldUpdater
-java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
-java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl$1
-java/util/concurrent/locks/AbstractOwnableSynchronizer
-java/util/concurrent/locks/AbstractQueuedSynchronizer
-java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
-java/util/concurrent/locks/AbstractQueuedSynchronizer$Node
-java/util/concurrent/locks/Condition
-java/util/concurrent/locks/Lock
-java/util/concurrent/locks/LockSupport
-java/util/concurrent/locks/ReentrantLock
-java/util/concurrent/locks/ReentrantLock$NonfairSync
-java/util/concurrent/locks/ReentrantLock$Sync
-java/util/function/BiFunction
-java/util/jar/Attributes
-java/util/jar/Attributes$Name
-java/util/jar/JarEntry
-java/util/jar/JarFile
-java/util/jar/JarFile$JarEntryIterator
-java/util/jar/JarFile$JarFileEntry
-java/util/jar/JarVerifier
-java/util/jar/JarVerifier$3
-java/util/jar/JarVerifier$VerifierStream
-java/util/jar/JavaUtilJarAccessImpl
-java/util/jar/Manifest
-java/util/jar/Manifest$FastInputStream
-java/util/logging/Handler
-java/util/logging/Level
-java/util/logging/Level$KnownLevel
-java/util/logging/LogManager
-java/util/logging/LogManager$1
-java/util/logging/LogManager$2
-java/util/logging/LogManager$3
-java/util/logging/LogManager$5
-java/util/logging/LogManager$Cleaner
-java/util/logging/LogManager$LogNode
-java/util/logging/LogManager$LoggerContext
-java/util/logging/LogManager$LoggerContext$1
-java/util/logging/LogManager$LoggerWeakRef
-java/util/logging/LogManager$RootLogger
-java/util/logging/LogManager$SystemLoggerContext
-java/util/logging/Logger
-java/util/logging/Logger$1
-java/util/logging/LoggingPermission
-java/util/logging/LoggingProxyImpl
-java/util/regex/MatchResult
-java/util/regex/Matcher
-java/util/regex/Pattern
-java/util/regex/Pattern$4
-java/util/regex/Pattern$BnM
-java/util/regex/Pattern$GroupHead
-java/util/regex/Pattern$LastNode
-java/util/regex/Pattern$Node
-java/util/regex/Pattern$Slice
-java/util/regex/Pattern$SliceNode
-java/util/regex/Pattern$Start
-java/util/regex/Pattern$TreeInfo
-java/util/spi/CalendarDataProvider
-java/util/spi/CurrencyNameProvider
-java/util/spi/LocaleNameProvider
-java/util/spi/LocaleServiceProvider
-java/util/spi/ResourceBundleControlProvider
-java/util/spi/TimeZoneNameProvider
-java/util/zip/CRC32
-java/util/zip/Checksum
-java/util/zip/DeflaterOutputStream
-java/util/zip/GZIPInputStream
-java/util/zip/Inflater
-java/util/zip/InflaterInputStream
-java/util/zip/ZStreamRef
-java/util/zip/ZipCoder
-java/util/zip/ZipConstants
-java/util/zip/ZipEntry
-java/util/zip/ZipFile
-java/util/zip/ZipFile$1
-java/util/zip/ZipFile$ZipEntryIterator
-java/util/zip/ZipFile$ZipFileInflaterInputStream
-java/util/zip/ZipFile$ZipFileInputStream
-java/util/zip/ZipInputStream
-java/util/zip/ZipUtils
-javax/accessibility/Accessible
-javax/accessibility/AccessibleAction
-javax/accessibility/AccessibleBundle
-javax/accessibility/AccessibleComponent
-javax/accessibility/AccessibleContext
-javax/accessibility/AccessibleExtendedComponent
-javax/accessibility/AccessibleRelationSet
-javax/accessibility/AccessibleState
-javax/accessibility/AccessibleText
-javax/accessibility/AccessibleValue
-javax/crypto/SecretKey
-javax/security/auth/Destroyable
-javax/security/auth/login/FailedLoginException
-javax/security/auth/login/LoginException
-javax/security/auth/x500/X500Principal
-javax/sound/sampled/Control$Type
-javax/sound/sampled/DataLine
-javax/sound/sampled/DataLine$Info
-javax/sound/sampled/FloatControl$Type
-javax/sound/sampled/Line
-javax/sound/sampled/Line$Info
-javax/sound/sampled/LineUnavailableException
-javax/sound/sampled/UnsupportedAudioFileException
-javax/swing/AbstractAction
-javax/swing/AbstractButton
-javax/swing/AbstractButton$AccessibleAbstractButton
-javax/swing/AbstractButton$Handler
-javax/swing/AbstractCellEditor
-javax/swing/AbstractListModel
-javax/swing/Action
-javax/swing/ActionMap
-javax/swing/AncestorNotifier
-javax/swing/ArrayTable
-javax/swing/BorderFactory
-javax/swing/BoundedRangeModel
-javax/swing/Box
-javax/swing/Box$Filler
-javax/swing/BoxLayout
-javax/swing/BufferStrategyPaintManager
-javax/swing/BufferStrategyPaintManager$BufferInfo
-javax/swing/ButtonGroup
-javax/swing/ButtonModel
-javax/swing/CellEditor
-javax/swing/CellRendererPane
-javax/swing/ClientPropertyKey
-javax/swing/ClientPropertyKey$1
-javax/swing/ComboBoxEditor
-javax/swing/ComboBoxModel
-javax/swing/ComponentInputMap
-javax/swing/DefaultBoundedRangeModel
-javax/swing/DefaultButtonModel
-javax/swing/DefaultCellEditor
-javax/swing/DefaultCellEditor$1
-javax/swing/DefaultCellEditor$EditorDelegate
-javax/swing/DefaultComboBoxModel
-javax/swing/DefaultListCellRenderer
-javax/swing/DefaultListCellRenderer$UIResource
-javax/swing/DefaultListModel
-javax/swing/DefaultListSelectionModel
-javax/swing/DefaultSingleSelectionModel
-javax/swing/DropMode
-javax/swing/FocusManager
-javax/swing/GrayFilter
-javax/swing/Icon
-javax/swing/ImageIcon
-javax/swing/ImageIcon$1
-javax/swing/ImageIcon$2
-javax/swing/ImageIcon$2$1
-javax/swing/ImageIcon$3
-javax/swing/InputMap
-javax/swing/InternalFrameFocusTraversalPolicy
-javax/swing/JButton
-javax/swing/JCheckBox
-javax/swing/JCheckBoxMenuItem
-javax/swing/JCheckBoxMenuItem$AccessibleJCheckBoxMenuItem
-javax/swing/JComboBox
-javax/swing/JComboBox$1
-javax/swing/JComboBox$KeySelectionManager
-javax/swing/JComponent
-javax/swing/JComponent$1
-javax/swing/JComponent$2
-javax/swing/JComponent$AccessibleJComponent
-javax/swing/JDialog
-javax/swing/JEditorPane
-javax/swing/JFrame
-javax/swing/JInternalFrame
-javax/swing/JLabel
-javax/swing/JLayer
-javax/swing/JLayeredPane
-javax/swing/JList
-javax/swing/JList$3
-javax/swing/JList$ListSelectionHandler
-javax/swing/JMenu
-javax/swing/JMenu$MenuChangeListener
-javax/swing/JMenu$WinListener
-javax/swing/JMenuBar
-javax/swing/JMenuItem
-javax/swing/JMenuItem$AccessibleJMenuItem
-javax/swing/JMenuItem$MenuItemFocusListener
-javax/swing/JPanel
-javax/swing/JPopupMenu
-javax/swing/JPopupMenu$Separator
-javax/swing/JProgressBar
-javax/swing/JProgressBar$ModelListener
-javax/swing/JRadioButton
-javax/swing/JRadioButtonMenuItem
-javax/swing/JRootPane
-javax/swing/JRootPane$1
-javax/swing/JRootPane$RootLayout
-javax/swing/JScrollBar
-javax/swing/JScrollBar$ModelListener
-javax/swing/JScrollPane
-javax/swing/JScrollPane$ScrollBar
-javax/swing/JSeparator
-javax/swing/JSlider
-javax/swing/JSlider$ModelListener
-javax/swing/JSplitPane
-javax/swing/JTabbedPane
-javax/swing/JTabbedPane$ModelListener
-javax/swing/JTabbedPane$Page
-javax/swing/JTable
-javax/swing/JTable$2
-javax/swing/JTable$5
-javax/swing/JTable$Resizable2
-javax/swing/JTable$Resizable3
-javax/swing/JTextArea
-javax/swing/JTextField
-javax/swing/JTextField$NotifyAction
-javax/swing/JTextField$ScrollRepainter
-javax/swing/JToggleButton
-javax/swing/JToggleButton$ToggleButtonModel
-javax/swing/JToolBar
-javax/swing/JToolBar$DefaultToolBarLayout
-javax/swing/JToolBar$Separator
-javax/swing/JToolTip
-javax/swing/JTree
-javax/swing/JTree$TreeModelHandler
-javax/swing/JTree$TreeSelectionRedirector
-javax/swing/JViewport
-javax/swing/JViewport$ViewListener
-javax/swing/JWindow
-javax/swing/KeyStroke
-javax/swing/KeyboardManager
-javax/swing/KeyboardManager$ComponentKeyStrokePair
-javax/swing/LayoutComparator
-javax/swing/LayoutFocusTraversalPolicy
-javax/swing/ListCellRenderer
-javax/swing/ListModel
-javax/swing/ListSelectionModel
-javax/swing/LookAndFeel
-javax/swing/MenuElement
-javax/swing/MenuSelectionManager
-javax/swing/MultiUIDefaults
-javax/swing/MutableComboBoxModel
-javax/swing/RepaintManager
-javax/swing/RepaintManager$2
-javax/swing/RepaintManager$3
-javax/swing/RepaintManager$DisplayChangedHandler
-javax/swing/RepaintManager$PaintManager
-javax/swing/RepaintManager$ProcessingRunnable
-javax/swing/RootPaneContainer
-javax/swing/ScrollPaneConstants
-javax/swing/ScrollPaneLayout
-javax/swing/ScrollPaneLayout$UIResource
-javax/swing/Scrollable
-javax/swing/SingleSelectionModel
-javax/swing/SizeRequirements
-javax/swing/SortingFocusTraversalPolicy
-javax/swing/SwingConstants
-javax/swing/SwingContainerOrderFocusTraversalPolicy
-javax/swing/SwingDefaultFocusTraversalPolicy
-javax/swing/SwingPaintEventDispatcher
-javax/swing/SwingUtilities
-javax/swing/SwingUtilities$SharedOwnerFrame
-javax/swing/Timer
-javax/swing/Timer$DoPostEvent
-javax/swing/TimerQueue
-javax/swing/TimerQueue$1
-javax/swing/TimerQueue$DelayedTimer
-javax/swing/ToolTipManager
-javax/swing/ToolTipManager$AccessibilityKeyListener
-javax/swing/ToolTipManager$MoveBeforeEnterListener
-javax/swing/ToolTipManager$insideTimerAction
-javax/swing/ToolTipManager$outsideTimerAction
-javax/swing/ToolTipManager$stillInsideTimerAction
-javax/swing/TransferHandler
-javax/swing/TransferHandler$DropHandler
-javax/swing/TransferHandler$HasGetTransferHandler
-javax/swing/TransferHandler$SwingDropTarget
-javax/swing/TransferHandler$TransferAction
-javax/swing/TransferHandler$TransferSupport
-javax/swing/UIDefaults
-javax/swing/UIDefaults$ActiveValue
-javax/swing/UIDefaults$LazyInputMap
-javax/swing/UIDefaults$LazyValue
-javax/swing/UIDefaults$TextAndMnemonicHashMap
-javax/swing/UIManager
-javax/swing/UIManager$1
-javax/swing/UIManager$2
-javax/swing/UIManager$LAFState
-javax/swing/UIManager$LookAndFeelInfo
-javax/swing/UnsupportedLookAndFeelException
-javax/swing/ViewportLayout
-javax/swing/WindowConstants
-javax/swing/border/AbstractBorder
-javax/swing/border/BevelBorder
-javax/swing/border/Border
-javax/swing/border/CompoundBorder
-javax/swing/border/EmptyBorder
-javax/swing/border/EtchedBorder
-javax/swing/border/LineBorder
-javax/swing/border/MatteBorder
-javax/swing/border/TitledBorder
-javax/swing/event/AncestorEvent
-javax/swing/event/AncestorListener
-javax/swing/event/CaretEvent
-javax/swing/event/CaretListener
-javax/swing/event/CellEditorListener
-javax/swing/event/ChangeEvent
-javax/swing/event/ChangeListener
-javax/swing/event/DocumentEvent
-javax/swing/event/DocumentEvent$ElementChange
-javax/swing/event/DocumentEvent$EventType
-javax/swing/event/DocumentListener
-javax/swing/event/EventListenerList
-javax/swing/event/ListDataEvent
-javax/swing/event/ListDataListener
-javax/swing/event/ListSelectionEvent
-javax/swing/event/ListSelectionListener
-javax/swing/event/MenuDragMouseListener
-javax/swing/event/MenuEvent
-javax/swing/event/MenuKeyListener
-javax/swing/event/MenuListener
-javax/swing/event/MouseInputAdapter
-javax/swing/event/MouseInputListener
-javax/swing/event/PopupMenuListener
-javax/swing/event/RowSorterListener
-javax/swing/event/SwingPropertyChangeSupport
-javax/swing/event/TableColumnModelEvent
-javax/swing/event/TableColumnModelListener
-javax/swing/event/TableModelEvent
-javax/swing/event/TableModelListener
-javax/swing/event/TreeExpansionListener
-javax/swing/event/TreeModelEvent
-javax/swing/event/TreeModelListener
-javax/swing/event/TreeSelectionEvent
-javax/swing/event/TreeSelectionListener
-javax/swing/event/UndoableEditEvent
-javax/swing/event/UndoableEditListener
-javax/swing/filechooser/FileFilter
-javax/swing/plaf/ActionMapUIResource
-javax/swing/plaf/BorderUIResource
-javax/swing/plaf/BorderUIResource$CompoundBorderUIResource
-javax/swing/plaf/BorderUIResource$EmptyBorderUIResource
-javax/swing/plaf/BorderUIResource$LineBorderUIResource
-javax/swing/plaf/ButtonUI
-javax/swing/plaf/ColorUIResource
-javax/swing/plaf/ComboBoxUI
-javax/swing/plaf/ComponentInputMapUIResource
-javax/swing/plaf/ComponentUI
-javax/swing/plaf/DimensionUIResource
-javax/swing/plaf/FontUIResource
-javax/swing/plaf/InputMapUIResource
-javax/swing/plaf/InsetsUIResource
-javax/swing/plaf/LabelUI
-javax/swing/plaf/ListUI
-javax/swing/plaf/MenuBarUI
-javax/swing/plaf/MenuItemUI
-javax/swing/plaf/PanelUI
-javax/swing/plaf/PopupMenuUI
-javax/swing/plaf/ProgressBarUI
-javax/swing/plaf/RootPaneUI
-javax/swing/plaf/ScrollBarUI
-javax/swing/plaf/ScrollPaneUI
-javax/swing/plaf/SeparatorUI
-javax/swing/plaf/SliderUI
-javax/swing/plaf/SplitPaneUI
-javax/swing/plaf/TabbedPaneUI
-javax/swing/plaf/TableHeaderUI
-javax/swing/plaf/TableUI
-javax/swing/plaf/TextUI
-javax/swing/plaf/ToolBarUI
-javax/swing/plaf/TreeUI
-javax/swing/plaf/UIResource
-javax/swing/plaf/ViewportUI
-javax/swing/plaf/basic/BasicArrowButton
-javax/swing/plaf/basic/BasicBorders
-javax/swing/plaf/basic/BasicBorders$ButtonBorder
-javax/swing/plaf/basic/BasicBorders$MarginBorder
-javax/swing/plaf/basic/BasicBorders$RadioButtonBorder
-javax/swing/plaf/basic/BasicBorders$RolloverMarginBorder
-javax/swing/plaf/basic/BasicBorders$SplitPaneBorder
-javax/swing/plaf/basic/BasicBorders$SplitPaneDividerBorder
-javax/swing/plaf/basic/BasicButtonListener
-javax/swing/plaf/basic/BasicButtonUI
-javax/swing/plaf/basic/BasicCheckBoxMenuItemUI
-javax/swing/plaf/basic/BasicComboBoxEditor
-javax/swing/plaf/basic/BasicComboBoxEditor$BorderlessTextField
-javax/swing/plaf/basic/BasicComboBoxEditor$UIResource
-javax/swing/plaf/basic/BasicComboBoxRenderer
-javax/swing/plaf/basic/BasicComboBoxRenderer$UIResource
-javax/swing/plaf/basic/BasicComboBoxUI
-javax/swing/plaf/basic/BasicComboBoxUI$ComboBoxLayoutManager
-javax/swing/plaf/basic/BasicComboBoxUI$DefaultKeySelectionManager
-javax/swing/plaf/basic/BasicComboBoxUI$Handler
-javax/swing/plaf/basic/BasicComboBoxUI$PropertyChangeHandler
-javax/swing/plaf/basic/BasicComboPopup
-javax/swing/plaf/basic/BasicComboPopup$1
-javax/swing/plaf/basic/BasicComboPopup$EmptyListModelClass
-javax/swing/plaf/basic/BasicComboPopup$Handler
-javax/swing/plaf/basic/BasicGraphicsUtils
-javax/swing/plaf/basic/BasicHTML
-javax/swing/plaf/basic/BasicLabelUI
-javax/swing/plaf/basic/BasicListUI
-javax/swing/plaf/basic/BasicListUI$Handler
-javax/swing/plaf/basic/BasicListUI$ListTransferHandler
-javax/swing/plaf/basic/BasicLookAndFeel
-javax/swing/plaf/basic/BasicLookAndFeel$1
-javax/swing/plaf/basic/BasicLookAndFeel$2
-javax/swing/plaf/basic/BasicLookAndFeel$AWTEventHelper
-javax/swing/plaf/basic/BasicMenuBarUI
-javax/swing/plaf/basic/BasicMenuBarUI$Handler
-javax/swing/plaf/basic/BasicMenuItemUI
-javax/swing/plaf/basic/BasicMenuItemUI$Handler
-javax/swing/plaf/basic/BasicMenuUI
-javax/swing/plaf/basic/BasicMenuUI$Handler
-javax/swing/plaf/basic/BasicPanelUI
-javax/swing/plaf/basic/BasicPopupMenuUI
-javax/swing/plaf/basic/BasicPopupMenuUI$BasicMenuKeyListener
-javax/swing/plaf/basic/BasicPopupMenuUI$BasicPopupMenuListener
-javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper
-javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper$1
-javax/swing/plaf/basic/BasicPopupMenuUI$MouseGrabber
-javax/swing/plaf/basic/BasicProgressBarUI
-javax/swing/plaf/basic/BasicProgressBarUI$Handler
-javax/swing/plaf/basic/BasicRadioButtonMenuItemUI
-javax/swing/plaf/basic/BasicRadioButtonUI
-javax/swing/plaf/basic/BasicRootPaneUI
-javax/swing/plaf/basic/BasicRootPaneUI$RootPaneInputMap
-javax/swing/plaf/basic/BasicScrollBarUI
-javax/swing/plaf/basic/BasicScrollBarUI$ArrowButtonListener
-javax/swing/plaf/basic/BasicScrollBarUI$Handler
-javax/swing/plaf/basic/BasicScrollBarUI$ModelListener
-javax/swing/plaf/basic/BasicScrollBarUI$PropertyChangeHandler
-javax/swing/plaf/basic/BasicScrollBarUI$ScrollListener
-javax/swing/plaf/basic/BasicScrollBarUI$TrackListener
-javax/swing/plaf/basic/BasicScrollPaneUI
-javax/swing/plaf/basic/BasicScrollPaneUI$Handler
-javax/swing/plaf/basic/BasicSeparatorUI
-javax/swing/plaf/basic/BasicSliderUI
-javax/swing/plaf/basic/BasicSliderUI$Actions
-javax/swing/plaf/basic/BasicSliderUI$Handler
-javax/swing/plaf/basic/BasicSliderUI$PropertyChangeHandler
-javax/swing/plaf/basic/BasicSliderUI$ScrollListener
-javax/swing/plaf/basic/BasicSliderUI$TrackListener
-javax/swing/plaf/basic/BasicSplitPaneDivider
-javax/swing/plaf/basic/BasicSplitPaneDivider$DividerLayout
-javax/swing/plaf/basic/BasicSplitPaneDivider$MouseHandler
-javax/swing/plaf/basic/BasicSplitPaneDivider$OneTouchActionHandler
-javax/swing/plaf/basic/BasicSplitPaneUI
-javax/swing/plaf/basic/BasicSplitPaneUI$1
-javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager
-javax/swing/plaf/basic/BasicSplitPaneUI$Handler
-javax/swing/plaf/basic/BasicTabbedPaneUI
-javax/swing/plaf/basic/BasicTabbedPaneUI$Handler
-javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneLayout
-javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneScrollLayout
-javax/swing/plaf/basic/BasicTableHeaderUI
-javax/swing/plaf/basic/BasicTableHeaderUI$1
-javax/swing/plaf/basic/BasicTableHeaderUI$MouseInputHandler
-javax/swing/plaf/basic/BasicTableUI
-javax/swing/plaf/basic/BasicTableUI$Handler
-javax/swing/plaf/basic/BasicTableUI$TableTransferHandler
-javax/swing/plaf/basic/BasicTextAreaUI
-javax/swing/plaf/basic/BasicTextFieldUI
-javax/swing/plaf/basic/BasicTextUI
-javax/swing/plaf/basic/BasicTextUI$BasicCaret
-javax/swing/plaf/basic/BasicTextUI$BasicCursor
-javax/swing/plaf/basic/BasicTextUI$BasicHighlighter
-javax/swing/plaf/basic/BasicTextUI$DragListener
-javax/swing/plaf/basic/BasicTextUI$FocusAction
-javax/swing/plaf/basic/BasicTextUI$RootView
-javax/swing/plaf/basic/BasicTextUI$TextActionWrapper
-javax/swing/plaf/basic/BasicTextUI$TextTransferHandler
-javax/swing/plaf/basic/BasicTextUI$UpdateHandler
-javax/swing/plaf/basic/BasicToggleButtonUI
-javax/swing/plaf/basic/BasicToolBarSeparatorUI
-javax/swing/plaf/basic/BasicToolBarUI
-javax/swing/plaf/basic/BasicToolBarUI$DockingListener
-javax/swing/plaf/basic/BasicToolBarUI$Handler
-javax/swing/plaf/basic/BasicTreeUI
-javax/swing/plaf/basic/BasicTreeUI$Actions
-javax/swing/plaf/basic/BasicTreeUI$Handler
-javax/swing/plaf/basic/BasicTreeUI$NodeDimensionsHandler
-javax/swing/plaf/basic/BasicTreeUI$TreeTransferHandler
-javax/swing/plaf/basic/BasicViewportUI
-javax/swing/plaf/basic/ComboPopup
-javax/swing/plaf/basic/DefaultMenuLayout
-javax/swing/plaf/basic/DragRecognitionSupport$BeforeDrag
-javax/swing/plaf/basic/LazyActionMap
-javax/swing/plaf/metal/DefaultMetalTheme
-javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate
-javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate$1
-javax/swing/plaf/metal/MetalBorders
-javax/swing/plaf/metal/MetalBorders$ButtonBorder
-javax/swing/plaf/metal/MetalBorders$Flush3DBorder
-javax/swing/plaf/metal/MetalBorders$MenuBarBorder
-javax/swing/plaf/metal/MetalBorders$MenuItemBorder
-javax/swing/plaf/metal/MetalBorders$PopupMenuBorder
-javax/swing/plaf/metal/MetalBorders$RolloverButtonBorder
-javax/swing/plaf/metal/MetalBorders$RolloverMarginBorder
-javax/swing/plaf/metal/MetalBorders$ScrollPaneBorder
-javax/swing/plaf/metal/MetalBorders$TextFieldBorder
-javax/swing/plaf/metal/MetalBorders$ToggleButtonBorder
-javax/swing/plaf/metal/MetalBorders$ToolBarBorder
-javax/swing/plaf/metal/MetalBumps
-javax/swing/plaf/metal/MetalButtonUI
-javax/swing/plaf/metal/MetalCheckBoxUI
-javax/swing/plaf/metal/MetalComboBoxButton
-javax/swing/plaf/metal/MetalComboBoxButton$1
-javax/swing/plaf/metal/MetalComboBoxEditor
-javax/swing/plaf/metal/MetalComboBoxEditor$1
-javax/swing/plaf/metal/MetalComboBoxEditor$EditorBorder
-javax/swing/plaf/metal/MetalComboBoxEditor$UIResource
-javax/swing/plaf/metal/MetalComboBoxIcon
-javax/swing/plaf/metal/MetalComboBoxUI
-javax/swing/plaf/metal/MetalComboBoxUI$MetalComboBoxLayoutManager
-javax/swing/plaf/metal/MetalComboBoxUI$MetalPropertyChangeListener
-javax/swing/plaf/metal/MetalIconFactory
-javax/swing/plaf/metal/MetalIconFactory$CheckBoxIcon
-javax/swing/plaf/metal/MetalIconFactory$CheckBoxMenuItemIcon
-javax/swing/plaf/metal/MetalIconFactory$FolderIcon16
-javax/swing/plaf/metal/MetalIconFactory$HorizontalSliderThumbIcon
-javax/swing/plaf/metal/MetalIconFactory$MenuArrowIcon
-javax/swing/plaf/metal/MetalIconFactory$MenuItemArrowIcon
-javax/swing/plaf/metal/MetalIconFactory$RadioButtonIcon
-javax/swing/plaf/metal/MetalIconFactory$RadioButtonMenuItemIcon
-javax/swing/plaf/metal/MetalIconFactory$TreeFolderIcon
-javax/swing/plaf/metal/MetalIconFactory$VerticalSliderThumbIcon
-javax/swing/plaf/metal/MetalLabelUI
-javax/swing/plaf/metal/MetalLookAndFeel
-javax/swing/plaf/metal/MetalLookAndFeel$AATextListener
-javax/swing/plaf/metal/MetalLookAndFeel$FontActiveValue
-javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue
-javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue$1
-javax/swing/plaf/metal/MetalPopupMenuSeparatorUI
-javax/swing/plaf/metal/MetalProgressBarUI
-javax/swing/plaf/metal/MetalRadioButtonUI
-javax/swing/plaf/metal/MetalRootPaneUI
-javax/swing/plaf/metal/MetalScrollBarUI
-javax/swing/plaf/metal/MetalScrollBarUI$ScrollBarListener
-javax/swing/plaf/metal/MetalScrollButton
-javax/swing/plaf/metal/MetalScrollPaneUI
-javax/swing/plaf/metal/MetalScrollPaneUI$1
-javax/swing/plaf/metal/MetalSeparatorUI
-javax/swing/plaf/metal/MetalSliderUI
-javax/swing/plaf/metal/MetalSliderUI$MetalPropertyListener
-javax/swing/plaf/metal/MetalSplitPaneDivider
-javax/swing/plaf/metal/MetalSplitPaneDivider$1
-javax/swing/plaf/metal/MetalSplitPaneDivider$2
-javax/swing/plaf/metal/MetalSplitPaneUI
-javax/swing/plaf/metal/MetalTabbedPaneUI
-javax/swing/plaf/metal/MetalTabbedPaneUI$TabbedPaneLayout
-javax/swing/plaf/metal/MetalTextFieldUI
-javax/swing/plaf/metal/MetalTheme
-javax/swing/plaf/metal/MetalToggleButtonUI
-javax/swing/plaf/metal/MetalToolBarUI
-javax/swing/plaf/metal/MetalToolBarUI$MetalDockingListener
-javax/swing/plaf/metal/MetalTreeUI
-javax/swing/plaf/metal/MetalTreeUI$LineListener
-javax/swing/plaf/metal/OceanTheme
-javax/swing/plaf/metal/OceanTheme$1
-javax/swing/plaf/metal/OceanTheme$2
-javax/swing/plaf/metal/OceanTheme$3
-javax/swing/plaf/metal/OceanTheme$4
-javax/swing/plaf/metal/OceanTheme$5
-javax/swing/plaf/metal/OceanTheme$6
-javax/swing/plaf/synth/SynthConstants
-javax/swing/plaf/synth/SynthUI
-javax/swing/table/AbstractTableModel
-javax/swing/table/DefaultTableCellRenderer
-javax/swing/table/DefaultTableColumnModel
-javax/swing/table/DefaultTableModel
-javax/swing/table/JTableHeader
-javax/swing/table/TableCellEditor
-javax/swing/table/TableCellRenderer
-javax/swing/table/TableColumn
-javax/swing/table/TableColumnModel
-javax/swing/table/TableModel
-javax/swing/text/AbstractDocument
-javax/swing/text/AbstractDocument$1
-javax/swing/text/AbstractDocument$AbstractElement
-javax/swing/text/AbstractDocument$AttributeContext
-javax/swing/text/AbstractDocument$BidiElement
-javax/swing/text/AbstractDocument$BidiRootElement
-javax/swing/text/AbstractDocument$BranchElement
-javax/swing/text/AbstractDocument$Content
-javax/swing/text/AbstractDocument$DefaultDocumentEvent
-javax/swing/text/AbstractDocument$ElementEdit
-javax/swing/text/AbstractDocument$InsertStringResult
-javax/swing/text/AbstractDocument$LeafElement
-javax/swing/text/AttributeSet
-javax/swing/text/AttributeSet$CharacterAttribute
-javax/swing/text/AttributeSet$ColorAttribute
-javax/swing/text/AttributeSet$FontAttribute
-javax/swing/text/AttributeSet$ParagraphAttribute
-javax/swing/text/Caret
-javax/swing/text/DefaultCaret
-javax/swing/text/DefaultCaret$Handler
-javax/swing/text/DefaultEditorKit
-javax/swing/text/DefaultEditorKit$BeepAction
-javax/swing/text/DefaultEditorKit$BeginAction
-javax/swing/text/DefaultEditorKit$BeginLineAction
-javax/swing/text/DefaultEditorKit$BeginParagraphAction
-javax/swing/text/DefaultEditorKit$BeginWordAction
-javax/swing/text/DefaultEditorKit$CopyAction
-javax/swing/text/DefaultEditorKit$CutAction
-javax/swing/text/DefaultEditorKit$DefaultKeyTypedAction
-javax/swing/text/DefaultEditorKit$DeleteNextCharAction
-javax/swing/text/DefaultEditorKit$DeletePrevCharAction
-javax/swing/text/DefaultEditorKit$DeleteWordAction
-javax/swing/text/DefaultEditorKit$DumpModelAction
-javax/swing/text/DefaultEditorKit$EndAction
-javax/swing/text/DefaultEditorKit$EndLineAction
-javax/swing/text/DefaultEditorKit$EndParagraphAction
-javax/swing/text/DefaultEditorKit$EndWordAction
-javax/swing/text/DefaultEditorKit$InsertBreakAction
-javax/swing/text/DefaultEditorKit$InsertContentAction
-javax/swing/text/DefaultEditorKit$InsertTabAction
-javax/swing/text/DefaultEditorKit$NextVisualPositionAction
-javax/swing/text/DefaultEditorKit$NextWordAction
-javax/swing/text/DefaultEditorKit$PageAction
-javax/swing/text/DefaultEditorKit$PasteAction
-javax/swing/text/DefaultEditorKit$PreviousWordAction
-javax/swing/text/DefaultEditorKit$ReadOnlyAction
-javax/swing/text/DefaultEditorKit$SelectAllAction
-javax/swing/text/DefaultEditorKit$SelectLineAction
-javax/swing/text/DefaultEditorKit$SelectParagraphAction
-javax/swing/text/DefaultEditorKit$SelectWordAction
-javax/swing/text/DefaultEditorKit$ToggleComponentOrientationAction
-javax/swing/text/DefaultEditorKit$UnselectAction
-javax/swing/text/DefaultEditorKit$VerticalPageAction
-javax/swing/text/DefaultEditorKit$WritableAction
-javax/swing/text/DefaultHighlighter
-javax/swing/text/DefaultHighlighter$DefaultHighlightPainter
-javax/swing/text/DefaultHighlighter$SafeDamager
-javax/swing/text/Document
-javax/swing/text/EditorKit
-javax/swing/text/Element
-javax/swing/text/FieldView
-javax/swing/text/GapContent
-javax/swing/text/GapContent$InsertUndo
-javax/swing/text/GapContent$MarkData
-javax/swing/text/GapContent$MarkVector
-javax/swing/text/GapContent$StickyPosition
-javax/swing/text/GapVector
-javax/swing/text/Highlighter
-javax/swing/text/Highlighter$Highlight
-javax/swing/text/Highlighter$HighlightPainter
-javax/swing/text/JTextComponent
-javax/swing/text/JTextComponent$1
-javax/swing/text/JTextComponent$DefaultKeymap
-javax/swing/text/JTextComponent$KeymapActionMap
-javax/swing/text/JTextComponent$KeymapWrapper
-javax/swing/text/JTextComponent$MutableCaretEvent
-javax/swing/text/Keymap
-javax/swing/text/LayeredHighlighter
-javax/swing/text/LayeredHighlighter$LayerPainter
-javax/swing/text/MutableAttributeSet
-javax/swing/text/PlainDocument
-javax/swing/text/PlainView
-javax/swing/text/Position
-javax/swing/text/Position$Bias
-javax/swing/text/Segment
-javax/swing/text/SegmentCache
-javax/swing/text/SegmentCache$CachedSegment
-javax/swing/text/SimpleAttributeSet
-javax/swing/text/SimpleAttributeSet$EmptyAttributeSet
-javax/swing/text/Style
-javax/swing/text/StyleConstants
-javax/swing/text/StyleConstants$CharacterConstants
-javax/swing/text/StyleConstants$ColorConstants
-javax/swing/text/StyleConstants$FontConstants
-javax/swing/text/StyleConstants$ParagraphConstants
-javax/swing/text/StyleContext
-javax/swing/text/StyleContext$FontKey
-javax/swing/text/StyleContext$KeyEnumeration
-javax/swing/text/StyleContext$NamedStyle
-javax/swing/text/StyleContext$SmallAttributeSet
-javax/swing/text/TabExpander
-javax/swing/text/TextAction
-javax/swing/text/Utilities
-javax/swing/text/View
-javax/swing/text/ViewFactory
-javax/swing/tree/AbstractLayoutCache
-javax/swing/tree/AbstractLayoutCache$NodeDimensions
-javax/swing/tree/DefaultMutableTreeNode
-javax/swing/tree/DefaultMutableTreeNode$PreorderEnumeration
-javax/swing/tree/DefaultTreeCellEditor
-javax/swing/tree/DefaultTreeCellEditor$1
-javax/swing/tree/DefaultTreeCellEditor$DefaultTextField
-javax/swing/tree/DefaultTreeCellEditor$EditorContainer
-javax/swing/tree/DefaultTreeCellRenderer
-javax/swing/tree/DefaultTreeModel
-javax/swing/tree/DefaultTreeSelectionModel
-javax/swing/tree/MutableTreeNode
-javax/swing/tree/PathPlaceHolder
-javax/swing/tree/RowMapper
-javax/swing/tree/TreeCellEditor
-javax/swing/tree/TreeCellRenderer
-javax/swing/tree/TreeModel
-javax/swing/tree/TreeNode
-javax/swing/tree/TreePath
-javax/swing/tree/TreeSelectionModel
-javax/swing/tree/VariableHeightLayoutCache
-javax/swing/tree/VariableHeightLayoutCache$TreeStateNode
-javax/swing/undo/AbstractUndoableEdit
-javax/swing/undo/CompoundEdit
-javax/swing/undo/UndoableEdit
-javax/xml/parsers/DocumentBuilder
-javax/xml/parsers/DocumentBuilderFactory
-javax/xml/parsers/FactoryFinder
-javax/xml/parsers/FactoryFinder$1
-javax/xml/parsers/ParserConfigurationException
-javax/xml/parsers/SecuritySupport
-javax/xml/parsers/SecuritySupport$2
-javax/xml/parsers/SecuritySupport$5
-org/w3c/dom/Attr
-org/w3c/dom/CDATASection
-org/w3c/dom/CharacterData
-org/w3c/dom/Comment
-org/w3c/dom/DOMException
-org/w3c/dom/Document
-org/w3c/dom/DocumentFragment
-org/w3c/dom/DocumentType
-org/w3c/dom/Element
-org/w3c/dom/Entity
-org/w3c/dom/EntityReference
-org/w3c/dom/NamedNodeMap
-org/w3c/dom/Node
-org/w3c/dom/NodeList
-org/w3c/dom/Notation
-org/w3c/dom/ProcessingInstruction
-org/w3c/dom/Text
-org/w3c/dom/events/DocumentEvent
-org/w3c/dom/events/Event
-org/w3c/dom/events/EventException
-org/w3c/dom/events/EventTarget
-org/w3c/dom/events/MutationEvent
-org/w3c/dom/ranges/DocumentRange
-org/w3c/dom/ranges/Range
-org/w3c/dom/traversal/DocumentTraversal
-org/w3c/dom/traversal/NodeIterator
-org/w3c/dom/traversal/TreeWalker
-org/xml/sax/AttributeList
-org/xml/sax/ContentHandler
-org/xml/sax/DTDHandler
-org/xml/sax/EntityResolver
-org/xml/sax/ErrorHandler
-org/xml/sax/InputSource
-org/xml/sax/Locator
-org/xml/sax/SAXException
-org/xml/sax/SAXNotRecognizedException
-org/xml/sax/SAXNotSupportedException
-org/xml/sax/SAXParseException
-org/xml/sax/helpers/DefaultHandler
-sun/awt/AWTAccessor
-sun/awt/AWTAccessor$AWTEventAccessor
-sun/awt/AWTAccessor$ClientPropertyKeyAccessor
-sun/awt/AWTAccessor$ComponentAccessor
-sun/awt/AWTAccessor$ContainerAccessor
-sun/awt/AWTAccessor$CursorAccessor
-sun/awt/AWTAccessor$DefaultKeyboardFocusManagerAccessor
-sun/awt/AWTAccessor$EventQueueAccessor
-sun/awt/AWTAccessor$FrameAccessor
-sun/awt/AWTAccessor$InputEventAccessor
-sun/awt/AWTAccessor$InvocationEventAccessor
-sun/awt/AWTAccessor$KeyEventAccessor
-sun/awt/AWTAccessor$KeyboardFocusManagerAccessor
-sun/awt/AWTAccessor$SequencedEventAccessor
-sun/awt/AWTAccessor$ToolkitAccessor
-sun/awt/AWTAccessor$WindowAccessor
-sun/awt/AWTAutoShutdown
-sun/awt/AWTIcon64_java_icon16_png
-sun/awt/AWTIcon64_java_icon24_png
-sun/awt/AWTIcon64_java_icon32_png
-sun/awt/AWTIcon64_java_icon48_png
-sun/awt/AppContext
-sun/awt/AppContext$1
-sun/awt/AppContext$2
-sun/awt/AppContext$3
-sun/awt/AppContext$6
-sun/awt/AppContext$GetAppContextLock
-sun/awt/AppContext$State
-sun/awt/CausedFocusEvent
-sun/awt/CausedFocusEvent$Cause
-sun/awt/ComponentFactory
-sun/awt/ConstrainableGraphics
-sun/awt/DisplayChangedListener
-sun/awt/EmbeddedFrame
-sun/awt/EventQueueDelegate
-sun/awt/EventQueueItem
-sun/awt/FontConfiguration
-sun/awt/FontConfiguration$1
-sun/awt/FontDescriptor
-sun/awt/GlobalCursorManager
-sun/awt/GlobalCursorManager$NativeUpdater
-sun/awt/HeadlessToolkit
-sun/awt/IconInfo
-sun/awt/InputMethodSupport
-sun/awt/KeyboardFocusManagerPeerImpl
-sun/awt/KeyboardFocusManagerPeerProvider
-sun/awt/LightweightFrame
-sun/awt/ModalityListener
-sun/awt/MostRecentKeyValue
-sun/awt/NullComponentPeer
-sun/awt/OSInfo
-sun/awt/OSInfo$1
-sun/awt/OSInfo$OSType
-sun/awt/OSInfo$WindowsVersion
-sun/awt/PaintEventDispatcher
-sun/awt/PeerEvent
-sun/awt/PostEventQueue
-sun/awt/RepaintArea
-sun/awt/RequestFocusController
-sun/awt/SubRegionShowable
-sun/awt/SunDisplayChanger
-sun/awt/SunGraphicsCallback
-sun/awt/SunHints
-sun/awt/SunHints$Key
-sun/awt/SunHints$LCDContrastKey
-sun/awt/SunHints$Value
-sun/awt/SunToolkit
-sun/awt/SunToolkit$ModalityListenerList
-sun/awt/TimedWindowEvent
-sun/awt/UNIXToolkit
-sun/awt/WindowClosingListener
-sun/awt/WindowClosingSupport
-sun/awt/X11/AwtGraphicsConfigData
-sun/awt/X11/AwtScreenData
-sun/awt/X11/MotifColorUtilities
-sun/awt/X11/MotifDnDConstants
-sun/awt/X11/MotifDnDDragSourceProtocol
-sun/awt/X11/MotifDnDDropTargetProtocol
-sun/awt/X11/Native
-sun/awt/X11/Native$1
-sun/awt/X11/OwnershipListener
-sun/awt/X11/PropMwmHints
-sun/awt/X11/UnsafeXDisposerRecord
-sun/awt/X11/WindowDimensions
-sun/awt/X11/WindowPropertyGetter
-sun/awt/X11/XAWTXSettings
-sun/awt/X11/XAnyEvent
-sun/awt/X11/XAtom
-sun/awt/X11/XAtomList
-sun/awt/X11/XAwtState
-sun/awt/X11/XBaseWindow
-sun/awt/X11/XBaseWindow$1
-sun/awt/X11/XBaseWindow$InitialiseState
-sun/awt/X11/XBaseWindow$StateLock
-sun/awt/X11/XCanvasPeer
-sun/awt/X11/XClientMessageEvent
-sun/awt/X11/XClipboard
-sun/awt/X11/XComponentPeer
-sun/awt/X11/XComponentPeer$1
-sun/awt/X11/XConfigureEvent
-sun/awt/X11/XContentWindow
-sun/awt/X11/XCreateWindowParams
-sun/awt/X11/XDecoratedPeer
-sun/awt/X11/XDnDConstants
-sun/awt/X11/XDnDDragSourceProtocol
-sun/awt/X11/XDnDDropTargetProtocol
-sun/awt/X11/XDragAndDropProtocols
-sun/awt/X11/XDragSourceContextPeer
-sun/awt/X11/XDragSourceProtocol
-sun/awt/X11/XDragSourceProtocolListener
-sun/awt/X11/XDropTargetContextPeer
-sun/awt/X11/XDropTargetContextPeer$XDropTargetProtocolListenerImpl
-sun/awt/X11/XDropTargetEventProcessor
-sun/awt/X11/XDropTargetProtocol
-sun/awt/X11/XDropTargetProtocolListener
-sun/awt/X11/XDropTargetRegistry
-sun/awt/X11/XEmbeddedFramePeer
-sun/awt/X11/XErrorEvent
-sun/awt/X11/XErrorHandler
-sun/awt/X11/XErrorHandler$IgnoreBadWindowHandler
-sun/awt/X11/XErrorHandler$VerifyChangePropertyHandler
-sun/awt/X11/XErrorHandler$XBaseErrorHandler
-sun/awt/X11/XErrorHandler$XErrorHandlerWithFlag
-sun/awt/X11/XErrorHandler$XShmAttachHandler
-sun/awt/X11/XErrorHandlerUtil
-sun/awt/X11/XEvent
-sun/awt/X11/XEventDispatcher
-sun/awt/X11/XExposeEvent
-sun/awt/X11/XFocusChangeEvent
-sun/awt/X11/XFocusProxyWindow
-sun/awt/X11/XFramePeer
-sun/awt/X11/XGlobalCursorManager
-sun/awt/X11/XInputMethod
-sun/awt/X11/XInputMethodDescriptor
-sun/awt/X11/XKeyboardFocusManagerPeer
-sun/awt/X11/XLabelPeer
-sun/awt/X11/XLayerProtocol
-sun/awt/X11/XMSelection
-sun/awt/X11/XMSelection$1
-sun/awt/X11/XMSelection$3
-sun/awt/X11/XMSelectionListener
-sun/awt/X11/XModifierKeymap
-sun/awt/X11/XNETProtocol
-sun/awt/X11/XPanelPeer
-sun/awt/X11/XPropertyCache
-sun/awt/X11/XPropertyEvent
-sun/awt/X11/XProtocol
-sun/awt/X11/XRepaintArea
-sun/awt/X11/XReparentEvent
-sun/awt/X11/XRootWindow
-sun/awt/X11/XSelection
-sun/awt/X11/XSelection$IncrementalTransferHandler
-sun/awt/X11/XSelection$SelectionEventHandler
-sun/awt/X11/XSetWindowAttributes
-sun/awt/X11/XSizeHints
-sun/awt/X11/XStateProtocol
-sun/awt/X11/XSystemTrayPeer
-sun/awt/X11/XToolkit
-sun/awt/X11/XToolkit$1
-sun/awt/X11/XToolkit$2
-sun/awt/X11/XToolkit$2$1
-sun/awt/X11/XToolkit$3
-sun/awt/X11/XToolkit$4
-sun/awt/X11/XToolkit$5
-sun/awt/X11/XTranslateCoordinates
-sun/awt/X11/XUnmapEvent
-sun/awt/X11/XVisibilityEvent
-sun/awt/X11/XVisualInfo
-sun/awt/X11/XWINProtocol
-sun/awt/X11/XWM
-sun/awt/X11/XWM$1
-sun/awt/X11/XWMHints
-sun/awt/X11/XWindow
-sun/awt/X11/XWindowAttributes
-sun/awt/X11/XWindowAttributesData
-sun/awt/X11/XWindowPeer
-sun/awt/X11/XWindowPeer$2
-sun/awt/X11/XWindowPeer$4
-sun/awt/X11/XWrapperBase
-sun/awt/X11/XlibUtil
-sun/awt/X11/XlibWrapper
-sun/awt/X11ComponentPeer
-sun/awt/X11FontManager
-sun/awt/X11GraphicsConfig
-sun/awt/X11GraphicsConfig$X11GCDisposerRecord
-sun/awt/X11GraphicsDevice
-sun/awt/X11GraphicsEnvironment
-sun/awt/X11GraphicsEnvironment$1
-sun/awt/X11InputMethod
-sun/awt/X11InputMethodDescriptor
-sun/awt/XSettings
-sun/awt/XSettings$Update
-sun/awt/datatransfer/SunClipboard
-sun/awt/dnd/SunDragSourceContextPeer
-sun/awt/dnd/SunDropTargetContextPeer
-sun/awt/dnd/SunDropTargetEvent
-sun/awt/event/IgnorePaintEvent
-sun/awt/im/ExecutableInputMethodManager
-sun/awt/im/ExecutableInputMethodManager$3
-sun/awt/im/InputContext
-sun/awt/im/InputMethodAdapter
-sun/awt/im/InputMethodContext
-sun/awt/im/InputMethodLocator
-sun/awt/im/InputMethodManager
-sun/awt/image/BufImgSurfaceData
-sun/awt/image/BufImgSurfaceData$ICMColorData
-sun/awt/image/BufImgSurfaceManager
-sun/awt/image/BufferedImageGraphicsConfig
-sun/awt/image/ByteComponentRaster
-sun/awt/image/ByteInterleavedRaster
-sun/awt/image/BytePackedRaster
-sun/awt/image/FetcherInfo
-sun/awt/image/GifFrame
-sun/awt/image/GifImageDecoder
-sun/awt/image/ImageConsumerQueue
-sun/awt/image/ImageDecoder
-sun/awt/image/ImageDecoder$1
-sun/awt/image/ImageFetchable
-sun/awt/image/ImageFetcher
-sun/awt/image/ImageFetcher$1
-sun/awt/image/ImageRepresentation
-sun/awt/image/ImageWatched
-sun/awt/image/ImageWatched$Link
-sun/awt/image/ImageWatched$WeakLink
-sun/awt/image/InputStreamImageSource
-sun/awt/image/IntegerComponentRaster
-sun/awt/image/IntegerInterleavedRaster
-sun/awt/image/NativeLibLoader
-sun/awt/image/NativeLibLoader$1
-sun/awt/image/OffScreenImage
-sun/awt/image/PNGFilterInputStream
-sun/awt/image/PNGImageDecoder
-sun/awt/image/PixelConverter
-sun/awt/image/PixelConverter$Argb
-sun/awt/image/PixelConverter$ArgbBm
-sun/awt/image/PixelConverter$ArgbPre
-sun/awt/image/PixelConverter$Bgrx
-sun/awt/image/PixelConverter$ByteGray
-sun/awt/image/PixelConverter$Rgba
-sun/awt/image/PixelConverter$RgbaPre
-sun/awt/image/PixelConverter$Rgbx
-sun/awt/image/PixelConverter$Ushort4444Argb
-sun/awt/image/PixelConverter$Ushort555Rgb
-sun/awt/image/PixelConverter$Ushort555Rgbx
-sun/awt/image/PixelConverter$Ushort565Rgb
-sun/awt/image/PixelConverter$UshortGray
-sun/awt/image/PixelConverter$Xbgr
-sun/awt/image/PixelConverter$Xrgb
-sun/awt/image/SunVolatileImage
-sun/awt/image/SunWritableRaster
-sun/awt/image/SunWritableRaster$DataStealer
-sun/awt/image/SurfaceManager
-sun/awt/image/SurfaceManager$FlushableCacheData
-sun/awt/image/SurfaceManager$ImageAccessor
-sun/awt/image/SurfaceManager$ProxiedGraphicsConfig
-sun/awt/image/ToolkitImage
-sun/awt/image/URLImageSource
-sun/awt/image/VolatileSurfaceManager
-sun/awt/motif/MFontConfiguration
-sun/awt/resources/awt
-sun/awt/util/IdentityArrayList
-sun/dc/DuctusRenderingEngine
-sun/font/AttributeValues
-sun/font/CMap
-sun/font/CMap$CMapFormat12
-sun/font/CMap$NullCMapClass
-sun/font/CharToGlyphMapper
-sun/font/CompositeFont
-sun/font/CompositeFontDescriptor
-sun/font/CompositeGlyphMapper
-sun/font/CompositeStrike
-sun/font/CoreMetrics
-sun/font/EAttribute
-sun/font/FcFontConfiguration
-sun/font/FileFont
-sun/font/FileFontStrike
-sun/font/Font2D
-sun/font/Font2DHandle
-sun/font/FontAccess
-sun/font/FontConfigManager
-sun/font/FontConfigManager$FcCompFont
-sun/font/FontConfigManager$FontConfigFont
-sun/font/FontConfigManager$FontConfigInfo
-sun/font/FontDesignMetrics
-sun/font/FontDesignMetrics$KeyReference
-sun/font/FontDesignMetrics$MetricsKey
-sun/font/FontFamily
-sun/font/FontLineMetrics
-sun/font/FontManager
-sun/font/FontManagerFactory
-sun/font/FontManagerFactory$1
-sun/font/FontManagerForSGE
-sun/font/FontManagerNativeLibrary
-sun/font/FontManagerNativeLibrary$1
-sun/font/FontScaler
-sun/font/FontStrike
-sun/font/FontStrikeDesc
-sun/font/FontStrikeDisposer
-sun/font/FontUtilities
-sun/font/FontUtilities$1
-sun/font/GlyphDisposedListener
-sun/font/GlyphList
-sun/font/PhysicalFont
-sun/font/PhysicalStrike
-sun/font/StandardGlyphVector
-sun/font/StandardGlyphVector$GlyphStrike
-sun/font/StrikeCache
-sun/font/StrikeCache$1
-sun/font/StrikeCache$DisposableStrike
-sun/font/StrikeCache$SoftDisposerRef
-sun/font/StrikeMetrics
-sun/font/SunFontManager
-sun/font/SunFontManager$1
-sun/font/SunFontManager$11
-sun/font/SunFontManager$13
-sun/font/SunFontManager$2
-sun/font/SunFontManager$3
-sun/font/SunFontManager$FontRegistrationInfo
-sun/font/SunFontManager$T1Filter
-sun/font/SunFontManager$TTFilter
-sun/font/T2KFontScaler
-sun/font/T2KFontScaler$1
-sun/font/TrueTypeFont
-sun/font/TrueTypeFont$1
-sun/font/TrueTypeFont$DirectoryEntry
-sun/font/TrueTypeFont$TTDisposerRecord
-sun/font/TrueTypeGlyphMapper
-sun/font/Type1Font
-sun/font/Type1Font$1
-sun/font/XRGlyphCache
-sun/font/XRGlyphCacheEntry
-sun/font/XRTextRenderer
-sun/java2d/BackBufferCapsProvider
-sun/java2d/DefaultDisposerRecord
-sun/java2d/DestSurfaceProvider
-sun/java2d/Disposer
-sun/java2d/Disposer$1
-sun/java2d/Disposer$2
-sun/java2d/Disposer$PollDisposable
-sun/java2d/DisposerRecord
-sun/java2d/DisposerTarget
-sun/java2d/FontSupport
-sun/java2d/InvalidPipeException
-sun/java2d/NullSurfaceData
-sun/java2d/StateTrackable
-sun/java2d/StateTrackable$State
-sun/java2d/StateTrackableDelegate
-sun/java2d/StateTrackableDelegate$1
-sun/java2d/StateTrackableDelegate$2
-sun/java2d/StateTracker
-sun/java2d/StateTracker$1
-sun/java2d/StateTracker$2
-sun/java2d/SunGraphics2D
-sun/java2d/SunGraphicsEnvironment
-sun/java2d/SunGraphicsEnvironment$1
-sun/java2d/Surface
-sun/java2d/SurfaceData
-sun/java2d/SurfaceData$PixelToPgramLoopConverter
-sun/java2d/SurfaceData$PixelToShapeLoopConverter
-sun/java2d/SurfaceDataProxy
-sun/java2d/SurfaceDataProxy$1
-sun/java2d/SurfaceManagerFactory
-sun/java2d/UnixSurfaceManagerFactory
-sun/java2d/cmm/CMSManager
-sun/java2d/cmm/ProfileActivator
-sun/java2d/cmm/ProfileDeferralInfo
-sun/java2d/cmm/ProfileDeferralMgr
-sun/java2d/jules/JulesPathBuf
-sun/java2d/jules/JulesPathBuf$1
-sun/java2d/loops/Blit
-sun/java2d/loops/BlitBg
-sun/java2d/loops/CompositeType
-sun/java2d/loops/CustomComponent
-sun/java2d/loops/DrawGlyphList
-sun/java2d/loops/DrawGlyphListAA
-sun/java2d/loops/DrawGlyphListLCD
-sun/java2d/loops/DrawLine
-sun/java2d/loops/DrawParallelogram
-sun/java2d/loops/DrawPath
-sun/java2d/loops/DrawPolygons
-sun/java2d/loops/DrawRect
-sun/java2d/loops/FillParallelogram
-sun/java2d/loops/FillPath
-sun/java2d/loops/FillRect
-sun/java2d/loops/FillSpans
-sun/java2d/loops/FontInfo
-sun/java2d/loops/GeneralRenderer
-sun/java2d/loops/GraphicsPrimitive
-sun/java2d/loops/GraphicsPrimitiveMgr
-sun/java2d/loops/GraphicsPrimitiveMgr$1
-sun/java2d/loops/GraphicsPrimitiveMgr$2
-sun/java2d/loops/GraphicsPrimitiveMgr$PrimitiveSpec
-sun/java2d/loops/GraphicsPrimitiveProxy
-sun/java2d/loops/MaskBlit
-sun/java2d/loops/MaskFill
-sun/java2d/loops/ProcessPath
-sun/java2d/loops/ProcessPath$1
-sun/java2d/loops/ProcessPath$ActiveEdgeList
-sun/java2d/loops/ProcessPath$DrawHandler
-sun/java2d/loops/ProcessPath$Edge
-sun/java2d/loops/ProcessPath$EndSubPathHandler
-sun/java2d/loops/ProcessPath$FillData
-sun/java2d/loops/ProcessPath$FillProcessHandler
-sun/java2d/loops/ProcessPath$Point
-sun/java2d/loops/ProcessPath$ProcessHandler
-sun/java2d/loops/RenderCache
-sun/java2d/loops/RenderCache$Entry
-sun/java2d/loops/RenderLoops
-sun/java2d/loops/ScaledBlit
-sun/java2d/loops/SurfaceType
-sun/java2d/loops/TransformBlit
-sun/java2d/loops/TransformHelper
-sun/java2d/loops/XORComposite
-sun/java2d/opengl/GLXGraphicsConfig
-sun/java2d/opengl/OGLGraphicsConfig
-sun/java2d/pipe/AAShapePipe
-sun/java2d/pipe/AATextRenderer
-sun/java2d/pipe/AlphaColorPipe
-sun/java2d/pipe/AlphaPaintPipe
-sun/java2d/pipe/CompositePipe
-sun/java2d/pipe/DrawImage
-sun/java2d/pipe/DrawImagePipe
-sun/java2d/pipe/GeneralCompositePipe
-sun/java2d/pipe/GlyphListLoopPipe
-sun/java2d/pipe/GlyphListPipe
-sun/java2d/pipe/LCDTextRenderer
-sun/java2d/pipe/LoopBasedPipe
-sun/java2d/pipe/LoopPipe
-sun/java2d/pipe/NullPipe
-sun/java2d/pipe/OutlineTextRenderer
-sun/java2d/pipe/ParallelogramPipe
-sun/java2d/pipe/PixelDrawPipe
-sun/java2d/pipe/PixelFillPipe
-sun/java2d/pipe/PixelToParallelogramConverter
-sun/java2d/pipe/PixelToShapeConverter
-sun/java2d/pipe/Region
-sun/java2d/pipe/Region$ImmutableRegion
-sun/java2d/pipe/RegionIterator
-sun/java2d/pipe/RenderingEngine
-sun/java2d/pipe/RenderingEngine$1
-sun/java2d/pipe/ShapeDrawPipe
-sun/java2d/pipe/SolidTextRenderer
-sun/java2d/pipe/SpanClipRenderer
-sun/java2d/pipe/SpanShapeRenderer
-sun/java2d/pipe/SpanShapeRenderer$Composite
-sun/java2d/pipe/TextPipe
-sun/java2d/pipe/TextRenderer
-sun/java2d/pipe/ValidatePipe
-sun/java2d/pipe/hw/AccelGraphicsConfig
-sun/java2d/pipe/hw/BufferedContextProvider
-sun/java2d/x11/X11SurfaceData
-sun/java2d/x11/X11SurfaceData$LazyPipe
-sun/java2d/x11/XSurfaceData
-sun/java2d/xr/DirtyRegion
-sun/java2d/xr/GrowableEltArray
-sun/java2d/xr/GrowableIntArray
-sun/java2d/xr/GrowableRectArray
-sun/java2d/xr/MaskTile
-sun/java2d/xr/MaskTileManager
-sun/java2d/xr/MutableInteger
-sun/java2d/xr/XRBackend
-sun/java2d/xr/XRBackendNative
-sun/java2d/xr/XRColor
-sun/java2d/xr/XRCompositeManager
-sun/java2d/xr/XRCompositeManager$1
-sun/java2d/xr/XRDrawImage
-sun/java2d/xr/XRDrawLine
-sun/java2d/xr/XRGraphicsConfig
-sun/java2d/xr/XRMaskBlit
-sun/java2d/xr/XRMaskFill
-sun/java2d/xr/XRMaskImage
-sun/java2d/xr/XRPMBlit
-sun/java2d/xr/XRPMBlitLoops
-sun/java2d/xr/XRPMScaledBlit
-sun/java2d/xr/XRPMTransformedBlit
-sun/java2d/xr/XRPaints
-sun/java2d/xr/XRPaints$XRGradient
-sun/java2d/xr/XRPaints$XRLinearGradient
-sun/java2d/xr/XRPaints$XRRadialGradient
-sun/java2d/xr/XRPaints$XRTexture
-sun/java2d/xr/XRRenderer
-sun/java2d/xr/XRRenderer$XRDrawHandler
-sun/java2d/xr/XRSolidSrcPict
-sun/java2d/xr/XRSurfaceData
-sun/java2d/xr/XRSurfaceData$XRInternalSurfaceData
-sun/java2d/xr/XRSurfaceData$XRPixmapSurfaceData
-sun/java2d/xr/XRSurfaceData$XRWindowSurfaceData
-sun/java2d/xr/XRSurfaceDataProxy
-sun/java2d/xr/XRUtils
-sun/java2d/xr/XRVolatileSurfaceManager
-sun/java2d/xr/XrSwToPMBlit
-sun/java2d/xr/XrSwToPMScaledBlit
-sun/java2d/xr/XrSwToPMTransformedBlit
-sun/launcher/LauncherHelper
-sun/launcher/LauncherHelper$FXHelper
-sun/misc/ASCIICaseInsensitiveComparator
-sun/misc/Cleaner
-sun/misc/CompoundEnumeration
-sun/misc/ExtensionDependency
-sun/misc/FDBigInteger
-sun/misc/FileURLMapper
-sun/misc/FloatingDecimal
-sun/misc/FloatingDecimal$1
-sun/misc/FloatingDecimal$ASCIIToBinaryBuffer
-sun/misc/FloatingDecimal$ASCIIToBinaryConverter
-sun/misc/FloatingDecimal$BinaryToASCIIBuffer
-sun/misc/FloatingDecimal$BinaryToASCIIConverter
-sun/misc/FloatingDecimal$ExceptionalBinaryToASCIIBuffer
-sun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer
-sun/misc/IOUtils
-sun/misc/JarIndex
-sun/misc/JavaAWTAccess
-sun/misc/JavaIOFileDescriptorAccess
-sun/misc/JavaLangAccess
-sun/misc/JavaNetAccess
-sun/misc/JavaNioAccess
-sun/misc/JavaSecurityAccess
-sun/misc/JavaSecurityProtectionDomainAccess
-sun/misc/JavaUtilJarAccess
-sun/misc/JavaUtilZipFileAccess
-sun/misc/Launcher
-sun/misc/Launcher$AppClassLoader
-sun/misc/Launcher$AppClassLoader$1
-sun/misc/Launcher$BootClassPathHolder
-sun/misc/Launcher$BootClassPathHolder$1
-sun/misc/Launcher$ExtClassLoader
-sun/misc/Launcher$ExtClassLoader$1
-sun/misc/Launcher$Factory
-sun/misc/MetaIndex
-sun/misc/NativeSignalHandler
-sun/misc/OSEnvironment
-sun/misc/Perf
-sun/misc/Perf$GetPerfAction
-sun/misc/PerfCounter
-sun/misc/PerfCounter$CoreCounters
-sun/misc/PerformanceLogger
-sun/misc/PerformanceLogger$TimeData
-sun/misc/PostVMInitHook
-sun/misc/Resource
-sun/misc/SharedSecrets
-sun/misc/Signal
-sun/misc/SignalHandler
-sun/misc/SoftCache
-sun/misc/SoftCache$ValueCell
-sun/misc/URLClassPath
-sun/misc/URLClassPath$1
-sun/misc/URLClassPath$2
-sun/misc/URLClassPath$3
-sun/misc/URLClassPath$FileLoader
-sun/misc/URLClassPath$JarLoader
-sun/misc/URLClassPath$JarLoader$1
-sun/misc/URLClassPath$JarLoader$2
-sun/misc/URLClassPath$Loader
-sun/misc/Unsafe
-sun/misc/VM
-sun/misc/Version
-sun/net/DefaultProgressMeteringPolicy
-sun/net/InetAddressCachePolicy
-sun/net/InetAddressCachePolicy$1
-sun/net/InetAddressCachePolicy$2
-sun/net/NetHooks
-sun/net/NetHooks$Provider
-sun/net/NetProperties
-sun/net/NetProperties$1
-sun/net/ProgressMeteringPolicy
-sun/net/ProgressMonitor
-sun/net/ResourceManager
-sun/net/sdp/SdpProvider
-sun/net/spi/DefaultProxySelector
-sun/net/spi/DefaultProxySelector$1
-sun/net/spi/DefaultProxySelector$3
-sun/net/spi/DefaultProxySelector$NonProxyInfo
-sun/net/spi/nameservice/NameService
-sun/net/util/IPAddressUtil
-sun/net/util/URLUtil
-sun/net/www/MessageHeader
-sun/net/www/MimeEntry
-sun/net/www/MimeTable
-sun/net/www/MimeTable$1
-sun/net/www/MimeTable$DefaultInstanceHolder
-sun/net/www/MimeTable$DefaultInstanceHolder$1
-sun/net/www/ParseUtil
-sun/net/www/URLConnection
-sun/net/www/protocol/file/FileURLConnection
-sun/net/www/protocol/file/Handler
-sun/net/www/protocol/http/Handler
-sun/net/www/protocol/jar/Handler
-sun/net/www/protocol/jar/JarFileFactory
-sun/net/www/protocol/jar/JarURLConnection
-sun/net/www/protocol/jar/JarURLConnection$JarURLInputStream
-sun/net/www/protocol/jar/URLJarFile
-sun/net/www/protocol/jar/URLJarFile$URLJarFileCloseController
-sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry
-sun/nio/ByteBuffered
-sun/nio/ch/DirectBuffer
-sun/nio/ch/FileChannelImpl
-sun/nio/ch/FileChannelImpl$Unmapper
-sun/nio/ch/FileDispatcher
-sun/nio/ch/FileDispatcherImpl
-sun/nio/ch/IOStatus
-sun/nio/ch/IOUtil
-sun/nio/ch/IOUtil$1
-sun/nio/ch/Interruptible
-sun/nio/ch/NativeDispatcher
-sun/nio/ch/NativeThread
-sun/nio/ch/NativeThreadSet
-sun/nio/ch/Util
-sun/nio/ch/Util$1
-sun/nio/ch/Util$4
-sun/nio/ch/Util$BufferCache
-sun/nio/cs/AbstractCharsetProvider
-sun/nio/cs/ArrayDecoder
-sun/nio/cs/ArrayEncoder
-sun/nio/cs/FastCharsetProvider
-sun/nio/cs/HistoricallyNamedCharset
-sun/nio/cs/ISO_8859_1
-sun/nio/cs/ISO_8859_1$Decoder
-sun/nio/cs/ISO_8859_1$Encoder
-sun/nio/cs/StandardCharsets
-sun/nio/cs/StandardCharsets$Aliases
-sun/nio/cs/StandardCharsets$Cache
-sun/nio/cs/StandardCharsets$Classes
-sun/nio/cs/StreamDecoder
-sun/nio/cs/StreamEncoder
-sun/nio/cs/Surrogate
-sun/nio/cs/Surrogate$Parser
-sun/nio/cs/US_ASCII
-sun/nio/cs/US_ASCII$Decoder
-sun/nio/cs/UTF_16
-sun/nio/cs/UTF_16$Decoder
-sun/nio/cs/UTF_16BE
-sun/nio/cs/UTF_16LE
-sun/nio/cs/UTF_8
-sun/nio/cs/UTF_8$Decoder
-sun/nio/cs/UTF_8$Encoder
-sun/nio/cs/Unicode
-sun/nio/cs/UnicodeDecoder
-sun/nio/cs/ext/DelegatableDecoder
-sun/nio/cs/ext/DoubleByte
-sun/nio/cs/ext/DoubleByte$Decoder
-sun/nio/cs/ext/EUC_KR
-sun/nio/cs/ext/ExtendedCharsets
-sun/print/PrinterGraphicsConfig
-sun/reflect/AccessorGenerator
-sun/reflect/BootstrapConstructorAccessorImpl
-sun/reflect/ByteVector
-sun/reflect/ByteVectorFactory
-sun/reflect/ByteVectorImpl
-sun/reflect/CallerSensitive
-sun/reflect/ClassDefiner
-sun/reflect/ClassDefiner$1
-sun/reflect/ClassFileAssembler
-sun/reflect/ClassFileConstants
-sun/reflect/ConstantPool
-sun/reflect/ConstructorAccessor
-sun/reflect/ConstructorAccessorImpl
-sun/reflect/DelegatingClassLoader
-sun/reflect/DelegatingConstructorAccessorImpl
-sun/reflect/DelegatingMethodAccessorImpl
-sun/reflect/FieldAccessor
-sun/reflect/FieldAccessorImpl
-sun/reflect/Label
-sun/reflect/Label$PatchInfo
-sun/reflect/LangReflectAccess
-sun/reflect/MagicAccessorImpl
-sun/reflect/MethodAccessor
-sun/reflect/MethodAccessorGenerator
-sun/reflect/MethodAccessorGenerator$1
-sun/reflect/MethodAccessorImpl
-sun/reflect/NativeConstructorAccessorImpl
-sun/reflect/NativeMethodAccessorImpl
-sun/reflect/Reflection
-sun/reflect/ReflectionFactory
-sun/reflect/ReflectionFactory$1
-sun/reflect/ReflectionFactory$GetReflectionFactoryAction
-sun/reflect/SerializationConstructorAccessorImpl
-sun/reflect/UTF8
-sun/reflect/UnsafeFieldAccessorFactory
-sun/reflect/UnsafeFieldAccessorImpl
-sun/reflect/UnsafeObjectFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticObjectFieldAccessorImpl
-sun/reflect/UnsafeStaticFieldAccessorImpl
-sun/reflect/annotation/AnnotationType
-sun/reflect/generics/repository/AbstractRepository
-sun/reflect/generics/repository/ClassRepository
-sun/reflect/generics/repository/GenericDeclRepository
-sun/reflect/misc/MethodUtil
-sun/reflect/misc/MethodUtil$1
-sun/reflect/misc/ReflectUtil
-sun/security/action/GetBooleanAction
-sun/security/action/GetIntegerAction
-sun/security/action/GetPropertyAction
-sun/security/action/PutAllAction
-sun/security/jca/GetInstance
-sun/security/jca/GetInstance$Instance
-sun/security/jca/ProviderConfig
-sun/security/jca/ProviderConfig$1
-sun/security/jca/ProviderConfig$2
-sun/security/jca/ProviderConfig$3
-sun/security/jca/ProviderList
-sun/security/jca/ProviderList$1
-sun/security/jca/ProviderList$2
-sun/security/jca/ProviderList$3
-sun/security/jca/ProviderList$ServiceList
-sun/security/jca/ProviderList$ServiceList$1
-sun/security/jca/Providers
-sun/security/jca/ServiceId
-sun/security/pkcs/ContentInfo
-sun/security/pkcs/PKCS7
-sun/security/pkcs/PKCS8Key
-sun/security/pkcs/PKCS9Attribute
-sun/security/pkcs/SignerInfo
-sun/security/provider/ByteArrayAccess
-sun/security/provider/DSAKeyFactory
-sun/security/provider/DSAParameters
-sun/security/provider/DSAPublicKey
-sun/security/provider/DSAPublicKeyImpl
-sun/security/provider/DigestBase
-sun/security/provider/NativePRNG
-sun/security/provider/NativePRNG$1
-sun/security/provider/NativePRNG$2
-sun/security/provider/NativePRNG$Blocking
-sun/security/provider/NativePRNG$NonBlocking
-sun/security/provider/NativePRNG$RandomIO
-sun/security/provider/NativePRNG$Variant
-sun/security/provider/SHA2
-sun/security/provider/SHA2$SHA256
-sun/security/provider/Sun
-sun/security/provider/SunEntries
-sun/security/provider/SunEntries$1
-sun/security/provider/X509Factory
-sun/security/provider/certpath/X509CertPath
-sun/security/rsa/RSACore
-sun/security/rsa/RSAKeyFactory
-sun/security/rsa/RSAPadding
-sun/security/rsa/RSAPrivateCrtKeyImpl
-sun/security/rsa/RSAPrivateKeyImpl
-sun/security/rsa/RSAPublicKeyImpl
-sun/security/rsa/RSASignature
-sun/security/rsa/RSASignature$SHA256withRSA
-sun/security/rsa/SunRsaSign
-sun/security/rsa/SunRsaSignEntries
-sun/security/util/BitArray
-sun/security/util/ByteArrayLexOrder
-sun/security/util/ByteArrayTagOrder
-sun/security/util/Cache
-sun/security/util/Cache$EqualByteArray
-sun/security/util/Debug
-sun/security/util/DerEncoder
-sun/security/util/DerIndefLenConverter
-sun/security/util/DerInputBuffer
-sun/security/util/DerInputStream
-sun/security/util/DerOutputStream
-sun/security/util/DerValue
-sun/security/util/Length
-sun/security/util/ManifestDigester
-sun/security/util/ManifestDigester$Entry
-sun/security/util/ManifestDigester$Position
-sun/security/util/ManifestEntryVerifier
-sun/security/util/ManifestEntryVerifier$SunProviderHolder
-sun/security/util/MemoryCache
-sun/security/util/MemoryCache$CacheEntry
-sun/security/util/MemoryCache$HardCacheEntry
-sun/security/util/MemoryCache$SoftCacheEntry
-sun/security/util/ObjectIdentifier
-sun/security/util/PropertyExpander
-sun/security/util/SignatureFileVerifier
-sun/security/x509/AVA
-sun/security/x509/AVAKeyword
-sun/security/x509/AlgorithmId
-sun/security/x509/AuthorityKeyIdentifierExtension
-sun/security/x509/BasicConstraintsExtension
-sun/security/x509/CertAttrSet
-sun/security/x509/CertificateAlgorithmId
-sun/security/x509/CertificateExtensions
-sun/security/x509/CertificateSerialNumber
-sun/security/x509/CertificateValidity
-sun/security/x509/CertificateVersion
-sun/security/x509/CertificateX509Key
-sun/security/x509/Extension
-sun/security/x509/GeneralName
-sun/security/x509/GeneralNameInterface
-sun/security/x509/GeneralNames
-sun/security/x509/KeyIdentifier
-sun/security/x509/KeyUsageExtension
-sun/security/x509/NetscapeCertTypeExtension
-sun/security/x509/NetscapeCertTypeExtension$MapEntry
-sun/security/x509/OIDMap
-sun/security/x509/OIDMap$OIDInfo
-sun/security/x509/PKIXExtensions
-sun/security/x509/RDN
-sun/security/x509/RFC822Name
-sun/security/x509/SerialNumber
-sun/security/x509/SubjectAlternativeNameExtension
-sun/security/x509/SubjectKeyIdentifierExtension
-sun/security/x509/X500Name
-sun/security/x509/X500Name$1
-sun/security/x509/X509AttributeName
-sun/security/x509/X509CertImpl
-sun/security/x509/X509CertInfo
-sun/security/x509/X509Key
-sun/swing/DefaultLookup
-sun/swing/ImageIconUIResource
-sun/swing/JLightweightFrame
-sun/swing/MenuItemLayoutHelper
-sun/swing/MenuItemLayoutHelper$ColumnAlignment
-sun/swing/MenuItemLayoutHelper$LayoutResult
-sun/swing/MenuItemLayoutHelper$RectSize
-sun/swing/PrintColorUIResource
-sun/swing/StringUIClientPropertyKey
-sun/swing/SwingAccessor
-sun/swing/SwingAccessor$JTextComponentAccessor
-sun/swing/SwingLazyValue
-sun/swing/SwingLazyValue$1
-sun/swing/SwingUtilities2
-sun/swing/SwingUtilities2$2
-sun/swing/SwingUtilities2$AATextInfo
-sun/swing/SwingUtilities2$LSBCacheEntry
-sun/swing/UIAction
-sun/swing/UIClientPropertyKey
-sun/swing/table/DefaultTableCellHeaderRenderer
-sun/swing/table/DefaultTableCellHeaderRenderer$EmptyIcon
-sun/text/ComposedCharIter
-sun/text/IntHashtable
-sun/text/UCompactIntArray
-sun/text/normalizer/CharTrie
-sun/text/normalizer/CharTrie$FriendAgent
-sun/text/normalizer/ICUBinary
-sun/text/normalizer/ICUBinary$Authenticate
-sun/text/normalizer/ICUData
-sun/text/normalizer/IntTrie
-sun/text/normalizer/NormalizerBase
-sun/text/normalizer/NormalizerBase$1
-sun/text/normalizer/NormalizerBase$Mode
-sun/text/normalizer/NormalizerBase$NFCMode
-sun/text/normalizer/NormalizerBase$NFDMode
-sun/text/normalizer/NormalizerBase$NFKCMode
-sun/text/normalizer/NormalizerBase$NFKDMode
-sun/text/normalizer/NormalizerBase$QuickCheckResult
-sun/text/normalizer/NormalizerDataReader
-sun/text/normalizer/NormalizerImpl
-sun/text/normalizer/NormalizerImpl$AuxTrieImpl
-sun/text/normalizer/NormalizerImpl$DecomposeArgs
-sun/text/normalizer/NormalizerImpl$FCDTrieImpl
-sun/text/normalizer/NormalizerImpl$NormTrieImpl
-sun/text/normalizer/Trie
-sun/text/normalizer/Trie$DataManipulate
-sun/text/normalizer/UTF16
-sun/text/normalizer/UnicodeMatcher
-sun/text/normalizer/UnicodeSet
-sun/text/resources/CollationData
-sun/text/resources/FormatData
-sun/text/resources/en/FormatData_en
-sun/text/resources/en/FormatData_en_US
-sun/util/CoreResourceBundleControl
-sun/util/PreHashedMap
-sun/util/ResourceBundleEnumeration
-sun/util/calendar/AbstractCalendar
-sun/util/calendar/BaseCalendar
-sun/util/calendar/BaseCalendar$Date
-sun/util/calendar/CalendarDate
-sun/util/calendar/CalendarSystem
-sun/util/calendar/CalendarUtils
-sun/util/calendar/Gregorian
-sun/util/calendar/Gregorian$Date
-sun/util/calendar/ZoneInfo
-sun/util/calendar/ZoneInfoFile
-sun/util/calendar/ZoneInfoFile$1
-sun/util/calendar/ZoneInfoFile$Checksum
-sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule
-sun/util/locale/BaseLocale
-sun/util/locale/BaseLocale$Cache
-sun/util/locale/BaseLocale$Key
-sun/util/locale/LanguageTag
-sun/util/locale/LocaleObjectCache
-sun/util/locale/LocaleObjectCache$CacheEntry
-sun/util/locale/LocaleUtils
-sun/util/locale/provider/AuxLocaleProviderAdapter
-sun/util/locale/provider/AuxLocaleProviderAdapter$NullProvider
-sun/util/locale/provider/AvailableLanguageTags
-sun/util/locale/provider/CalendarDataProviderImpl
-sun/util/locale/provider/CalendarDataUtility
-sun/util/locale/provider/CalendarDataUtility$CalendarWeekParameterGetter
-sun/util/locale/provider/CalendarProviderImpl
-sun/util/locale/provider/CollatorProviderImpl
-sun/util/locale/provider/CurrencyNameProviderImpl
-sun/util/locale/provider/DateFormatSymbolsProviderImpl
-sun/util/locale/provider/DecimalFormatSymbolsProviderImpl
-sun/util/locale/provider/JRELocaleProviderAdapter
-sun/util/locale/provider/JRELocaleProviderAdapter$1
-sun/util/locale/provider/LocaleDataMetaInfo
-sun/util/locale/provider/LocaleProviderAdapter
-sun/util/locale/provider/LocaleProviderAdapter$1
-sun/util/locale/provider/LocaleProviderAdapter$Type
-sun/util/locale/provider/LocaleResources
-sun/util/locale/provider/LocaleResources$ResourceReference
-sun/util/locale/provider/LocaleServiceProviderPool
-sun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter
-sun/util/locale/provider/NumberFormatProviderImpl
-sun/util/locale/provider/ResourceBundleBasedAdapter
-sun/util/locale/provider/SPILocaleProviderAdapter
-sun/util/locale/provider/SPILocaleProviderAdapter$1
-sun/util/locale/provider/TimeZoneNameProviderImpl
-sun/util/locale/provider/TimeZoneNameUtility
-sun/util/locale/provider/TimeZoneNameUtility$TimeZoneNameGetter
-sun/util/logging/LoggingProxy
-sun/util/logging/LoggingSupport
-sun/util/logging/LoggingSupport$1
-sun/util/logging/LoggingSupport$2
-sun/util/logging/PlatformLogger
-sun/util/logging/PlatformLogger$1
-sun/util/logging/PlatformLogger$DefaultLoggerProxy
-sun/util/logging/PlatformLogger$JavaLoggerProxy
-sun/util/logging/PlatformLogger$Level
-sun/util/logging/PlatformLogger$LoggerProxy
-sun/util/logging/resources/logging
-sun/util/resources/CalendarData
-sun/util/resources/CurrencyNames
-sun/util/resources/LocaleData
-sun/util/resources/LocaleData$1
-sun/util/resources/LocaleData$LocaleDataResourceBundleControl
-sun/util/resources/LocaleNamesBundle
-sun/util/resources/OpenListResourceBundle
-sun/util/resources/ParallelListResourceBundle
-sun/util/resources/ParallelListResourceBundle$KeySet
-sun/util/resources/TimeZoneNames
-sun/util/resources/TimeZoneNamesBundle
-sun/util/resources/en/CalendarData_en
-sun/util/resources/en/CurrencyNames_en_US
-sun/util/resources/en/TimeZoneNames_en
-sun/util/spi/CalendarProvider
-# fcfd7386dfd2b3ad
--- a/jdk/make/data/classlist/classlist.windows Mon May 09 12:55:03 2016 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2378 +0,0 @@
-com/sun/java/swing/SwingUtilities3
-com/sun/java/swing/plaf/windows/WindowsPopupWindow
-com/sun/java/swing/plaf/windows/WindowsTabbedPaneUI
-com/sun/swing/internal/plaf/basic/resources/basic
-com/sun/swing/internal/plaf/metal/resources/metal
-java/applet/Applet
-java/awt/AWTEvent
-java/awt/AWTEvent$1
-java/awt/AWTEventMulticaster
-java/awt/AWTKeyStroke
-java/awt/AWTKeyStroke$1
-java/awt/ActiveEvent
-java/awt/Adjustable
-java/awt/AlphaComposite
-java/awt/BasicStroke
-java/awt/BorderLayout
-java/awt/BufferCapabilities
-java/awt/Canvas
-java/awt/CardLayout
-java/awt/CardLayout$Card
-java/awt/Color
-java/awt/Component
-java/awt/Component$1
-java/awt/Component$3
-java/awt/Component$AWTTreeLock
-java/awt/Component$AccessibleAWTComponent
-java/awt/Component$BaselineResizeBehavior
-java/awt/Component$BltBufferStrategy
-java/awt/Component$BltSubRegionBufferStrategy
-java/awt/Component$DummyRequestFocusController
-java/awt/Component$FlipBufferStrategy
-java/awt/ComponentOrientation
-java/awt/Composite
-java/awt/Conditional
-java/awt/Container
-java/awt/Container$1
-java/awt/Container$AccessibleAWTContainer
-java/awt/ContainerOrderFocusTraversalPolicy
-java/awt/Cursor
-java/awt/Cursor$1
-java/awt/Cursor$CursorDisposer
-java/awt/DefaultFocusTraversalPolicy
-java/awt/DefaultKeyboardFocusManager
-java/awt/DefaultKeyboardFocusManager$1
-java/awt/DefaultKeyboardFocusManager$DefaultKeyboardFocusManagerSentEvent
-java/awt/DefaultKeyboardFocusManager$TypeAheadMarker
-java/awt/Dialog
-java/awt/Dialog$ModalExclusionType
-java/awt/Dialog$ModalityType
-java/awt/Dimension
-java/awt/Event
-java/awt/EventDispatchThread
-java/awt/EventDispatchThread$1
-java/awt/EventDispatchThread$HierarchyEventFilter
-java/awt/EventFilter
-java/awt/EventFilter$FilterAction
-java/awt/EventQueue
-java/awt/EventQueue$1
-java/awt/EventQueue$1AWTInvocationLock
-java/awt/EventQueue$2
-java/awt/EventQueue$3
-java/awt/EventQueue$4
-java/awt/EventQueue$5
-java/awt/FlowLayout
-java/awt/FocusTraversalPolicy
-java/awt/Font
-java/awt/Font$FontAccessImpl
-java/awt/FontMetrics
-java/awt/Frame
-java/awt/Frame$1
-java/awt/Graphics
-java/awt/Graphics2D
-java/awt/GraphicsCallback
-java/awt/GraphicsCallback$PaintCallback
-java/awt/GraphicsConfiguration
-java/awt/GraphicsDevice
-java/awt/GraphicsEnvironment
-java/awt/GraphicsEnvironment$1
-java/awt/GridLayout
-java/awt/Image
-java/awt/Image$1
-java/awt/ImageCapabilities
-java/awt/ImageMediaEntry
-java/awt/Insets
-java/awt/ItemSelectable
-java/awt/KeyEventDispatcher
-java/awt/KeyEventPostProcessor
-java/awt/KeyboardFocusManager
-java/awt/KeyboardFocusManager$1
-java/awt/KeyboardFocusManager$3
-java/awt/KeyboardFocusManager$HeavyweightFocusRequest
-java/awt/KeyboardFocusManager$LightweightFocusRequest
-java/awt/Label
-java/awt/LayoutManager
-java/awt/LayoutManager2
-java/awt/LightweightDispatcher
-java/awt/LightweightDispatcher$2
-java/awt/MediaEntry
-java/awt/MediaTracker
-java/awt/MenuBar
-java/awt/MenuComponent
-java/awt/MenuContainer
-java/awt/ModalEventFilter
-java/awt/Paint
-java/awt/Panel
-java/awt/Point
-java/awt/PrintGraphics
-java/awt/Queue
-java/awt/Rectangle
-java/awt/RenderingHints
-java/awt/RenderingHints$Key
-java/awt/SentEvent
-java/awt/SequencedEvent
-java/awt/SequencedEvent$1
-java/awt/Shape
-java/awt/SplashScreen
-java/awt/Stroke
-java/awt/Toolkit
-java/awt/Toolkit$1
-java/awt/Toolkit$2
-java/awt/Toolkit$3
-java/awt/Toolkit$4
-java/awt/Toolkit$5
-java/awt/Toolkit$DesktopPropertyChangeSupport
-java/awt/Toolkit$DesktopPropertyChangeSupport$1
-java/awt/Toolkit$SelectiveAWTEventListener
-java/awt/Toolkit$ToolkitEventMulticaster
-java/awt/Transparency
-java/awt/TrayIcon
-java/awt/VKCollection
-java/awt/Window
-java/awt/Window$1
-java/awt/Window$1DisposeAction
-java/awt/Window$Type
-java/awt/Window$WindowDisposerRecord
-java/awt/color/ColorSpace
-java/awt/color/ICC_ColorSpace
-java/awt/color/ICC_Profile
-java/awt/color/ICC_Profile$1
-java/awt/color/ICC_ProfileRGB
-java/awt/datatransfer/ClipboardOwner
-java/awt/datatransfer/FlavorMap
-java/awt/datatransfer/FlavorTable
-java/awt/datatransfer/SystemFlavorMap
-java/awt/dnd/DropTarget
-java/awt/dnd/DropTargetContext
-java/awt/dnd/DropTargetListener
-java/awt/dnd/peer/DragSourceContextPeer
-java/awt/dnd/peer/DropTargetPeer
-java/awt/event/AWTEventListener
-java/awt/event/AWTEventListenerProxy
-java/awt/event/ActionEvent
-java/awt/event/ActionListener
-java/awt/event/AdjustmentEvent
-java/awt/event/AdjustmentListener
-java/awt/event/ComponentAdapter
-java/awt/event/ComponentEvent
-java/awt/event/ComponentListener
-java/awt/event/ContainerEvent
-java/awt/event/ContainerListener
-java/awt/event/FocusAdapter
-java/awt/event/FocusEvent
-java/awt/event/FocusListener
-java/awt/event/HierarchyBoundsListener
-java/awt/event/HierarchyListener
-java/awt/event/InputEvent
-java/awt/event/InputEvent$1
-java/awt/event/InputMethodEvent
-java/awt/event/InputMethodListener
-java/awt/event/InvocationEvent
-java/awt/event/InvocationEvent$1
-java/awt/event/ItemEvent
-java/awt/event/ItemListener
-java/awt/event/KeyAdapter
-java/awt/event/KeyEvent
-java/awt/event/KeyEvent$1
-java/awt/event/KeyListener
-java/awt/event/MouseAdapter
-java/awt/event/MouseEvent
-java/awt/event/MouseListener
-java/awt/event/MouseMotionAdapter
-java/awt/event/MouseMotionListener
-java/awt/event/MouseWheelListener
-java/awt/event/NativeLibLoader
-java/awt/event/NativeLibLoader$1
-java/awt/event/PaintEvent
-java/awt/event/TextListener
-java/awt/event/WindowAdapter
-java/awt/event/WindowEvent
-java/awt/event/WindowFocusListener
-java/awt/event/WindowListener
-java/awt/event/WindowStateListener
-java/awt/font/FontRenderContext
-java/awt/font/GlyphVector
-java/awt/font/LineMetrics
-java/awt/font/TextAttribute
-java/awt/geom/AffineTransform
-java/awt/geom/Dimension2D
-java/awt/geom/GeneralPath
-java/awt/geom/Line2D
-java/awt/geom/Line2D$Float
-java/awt/geom/LineIterator
-java/awt/geom/Path2D
-java/awt/geom/Path2D$Float
-java/awt/geom/PathIterator
-java/awt/geom/Point2D
-java/awt/geom/Point2D$Float
-java/awt/geom/RectIterator
-java/awt/geom/Rectangle2D
-java/awt/geom/Rectangle2D$Float
-java/awt/geom/RectangularShape
-java/awt/im/InputContext
-java/awt/im/InputMethodRequests
-java/awt/im/spi/InputMethod
-java/awt/im/spi/InputMethodContext
-java/awt/im/spi/InputMethodDescriptor
-java/awt/image/BufferStrategy
-java/awt/image/BufferedImage
-java/awt/image/BufferedImage$1
-java/awt/image/ColorModel
-java/awt/image/ColorModel$1
-java/awt/image/ComponentSampleModel
-java/awt/image/DataBuffer
-java/awt/image/DataBuffer$1
-java/awt/image/DataBufferByte
-java/awt/image/DataBufferInt
-java/awt/image/DirectColorModel
-java/awt/image/FilteredImageSource
-java/awt/image/ImageConsumer
-java/awt/image/ImageFilter
-java/awt/image/ImageObserver
-java/awt/image/ImageProducer
-java/awt/image/IndexColorModel
-java/awt/image/PackedColorModel
-java/awt/image/PixelInterleavedSampleModel
-java/awt/image/RGBImageFilter
-java/awt/image/Raster
-java/awt/image/RenderedImage
-java/awt/image/SampleModel
-java/awt/image/SinglePixelPackedSampleModel
-java/awt/image/VolatileImage
-java/awt/image/WritableRaster
-java/awt/image/WritableRenderedImage
-java/awt/peer/CanvasPeer
-java/awt/peer/ComponentPeer
-java/awt/peer/ContainerPeer
-java/awt/peer/FontPeer
-java/awt/peer/FramePeer
-java/awt/peer/KeyboardFocusManagerPeer
-java/awt/peer/LabelPeer
-java/awt/peer/LightweightPeer
-java/awt/peer/PanelPeer
-java/awt/peer/WindowPeer
-java/awt/print/PrinterGraphics
-java/beans/ChangeListenerMap
-java/beans/PropertyChangeEvent
-java/beans/PropertyChangeListener
-java/beans/PropertyChangeListenerProxy
-java/beans/PropertyChangeSupport
-java/beans/PropertyChangeSupport$PropertyChangeListenerMap
-java/beans/VetoableChangeListener
-java/io/Bits
-java/io/BufferedInputStream
-java/io/BufferedOutputStream
-java/io/BufferedReader
-java/io/BufferedWriter
-java/io/ByteArrayInputStream
-java/io/ByteArrayOutputStream
-java/io/Closeable
-java/io/DataInput
-java/io/DataInputStream
-java/io/DataOutput
-java/io/DataOutputStream
-java/io/DefaultFileSystem
-java/io/EOFException
-java/io/ExpiringCache
-java/io/ExpiringCache$1
-java/io/ExpiringCache$Entry
-java/io/Externalizable
-java/io/File
-java/io/File$PathStatus
-java/io/FileDescriptor
-java/io/FileDescriptor$1
-java/io/FileInputStream
-java/io/FileInputStream$1
-java/io/FileNotFoundException
-java/io/FileOutputStream
-java/io/FileOutputStream$1
-java/io/FilePermission
-java/io/FilePermission$1
-java/io/FilePermissionCollection
-java/io/FileReader
-java/io/FileSystem
-java/io/FileWriter
-java/io/FilenameFilter
-java/io/FilterInputStream
-java/io/FilterOutputStream
-java/io/FilterReader
-java/io/Flushable
-java/io/IOException
-java/io/InputStream
-java/io/InputStreamReader
-java/io/InterruptedIOException
-java/io/ObjectInput
-java/io/ObjectInputStream
-java/io/ObjectInputStream$BlockDataInputStream
-java/io/ObjectInputStream$GetField
-java/io/ObjectInputStream$GetFieldImpl
-java/io/ObjectInputStream$HandleTable
-java/io/ObjectInputStream$HandleTable$HandleList
-java/io/ObjectInputStream$PeekInputStream
-java/io/ObjectInputStream$ValidationList
-java/io/ObjectOutput
-java/io/ObjectOutputStream
-java/io/ObjectOutputStream$BlockDataOutputStream
-java/io/ObjectOutputStream$HandleTable
-java/io/ObjectOutputStream$ReplaceTable
-java/io/ObjectStreamClass
-java/io/ObjectStreamClass$1
-java/io/ObjectStreamClass$2
-java/io/ObjectStreamClass$3
-java/io/ObjectStreamClass$4
-java/io/ObjectStreamClass$5
-java/io/ObjectStreamClass$Caches
-java/io/ObjectStreamClass$ClassDataSlot
-java/io/ObjectStreamClass$EntryFuture
-java/io/ObjectStreamClass$ExceptionInfo
-java/io/ObjectStreamClass$FieldReflector
-java/io/ObjectStreamClass$FieldReflectorKey
-java/io/ObjectStreamClass$MemberSignature
-java/io/ObjectStreamClass$WeakClassKey
-java/io/ObjectStreamConstants
-java/io/ObjectStreamField
-java/io/OutputStream
-java/io/OutputStreamWriter
-java/io/PrintStream
-java/io/PushbackInputStream
-java/io/RandomAccessFile
-java/io/RandomAccessFile$1
-java/io/Reader
-java/io/SerialCallbackContext
-java/io/Serializable
-java/io/StringReader
-java/io/StringWriter
-java/io/UnsupportedEncodingException
-java/io/WinNTFileSystem
-java/io/Writer
-java/lang/AbstractStringBuilder
-java/lang/Appendable
-java/lang/ApplicationShutdownHooks
-java/lang/ApplicationShutdownHooks$1
-java/lang/ArithmeticException
-java/lang/ArrayIndexOutOfBoundsException
-java/lang/ArrayStoreException
-java/lang/AutoCloseable
-java/lang/Boolean
-java/lang/BootstrapMethodError
-java/lang/Byte
-java/lang/CharSequence
-java/lang/Character
-java/lang/Character$CharacterCache
-java/lang/CharacterData
-java/lang/CharacterData00
-java/lang/CharacterDataLatin1
-java/lang/Class
-java/lang/Class$1
-java/lang/Class$3
-java/lang/Class$4
-java/lang/Class$AnnotationData
-java/lang/Class$Atomic
-java/lang/Class$ReflectionData
-java/lang/ClassCastException
-java/lang/ClassFormatError
-java/lang/ClassLoader
-java/lang/ClassLoader$2
-java/lang/ClassLoader$3
-java/lang/ClassLoader$NativeLibrary
-java/lang/ClassLoader$ParallelLoaders
-java/lang/ClassLoaderHelper
-java/lang/ClassNotFoundException
-java/lang/ClassValue$ClassValueMap
-java/lang/CloneNotSupportedException
-java/lang/Cloneable
-java/lang/Comparable
-java/lang/Compiler
-java/lang/Compiler$1
-java/lang/Double
-java/lang/Enum
-java/lang/Error
-java/lang/Exception
-java/lang/ExceptionInInitializerError
-java/lang/Float
-java/lang/IllegalAccessError
-java/lang/IllegalAccessException
-java/lang/IllegalArgumentException
-java/lang/IllegalMonitorStateException
-java/lang/IllegalStateException
-java/lang/IncompatibleClassChangeError
-java/lang/IndexOutOfBoundsException
-java/lang/InheritableThreadLocal
-java/lang/InstantiationException
-java/lang/Integer
-java/lang/Integer$IntegerCache
-java/lang/InternalError
-java/lang/InterruptedException
-java/lang/Iterable
-java/lang/LinkageError
-java/lang/Long
-java/lang/Long$LongCache
-java/lang/Math
-java/lang/NoClassDefFoundError
-java/lang/NoSuchFieldException
-java/lang/NoSuchMethodError
-java/lang/NoSuchMethodException
-java/lang/NullPointerException
-java/lang/Number
-java/lang/NumberFormatException
-java/lang/Object
-java/lang/OutOfMemoryError
-java/lang/Package
-java/lang/ProcessEnvironment
-java/lang/ProcessEnvironment$CheckedEntry
-java/lang/ProcessEnvironment$CheckedEntrySet
-java/lang/ProcessEnvironment$CheckedEntrySet$1
-java/lang/ProcessEnvironment$EntryComparator
-java/lang/ProcessEnvironment$NameComparator
-java/lang/Readable
-java/lang/ReflectiveOperationException
-java/lang/Runnable
-java/lang/Runtime
-java/lang/RuntimeException
-java/lang/RuntimePermission
-java/lang/SecurityException
-java/lang/SecurityManager
-java/lang/Short
-java/lang/Short$ShortCache
-java/lang/Shutdown
-java/lang/Shutdown$Lock
-java/lang/StackOverflowError
-java/lang/StackTraceElement
-java/lang/StrictMath
-java/lang/String
-java/lang/String$CaseInsensitiveComparator
-java/lang/StringBuffer
-java/lang/StringBuilder
-java/lang/StringCoding
-java/lang/StringCoding$StringDecoder
-java/lang/StringCoding$StringEncoder
-java/lang/StringIndexOutOfBoundsException
-java/lang/System
-java/lang/System$2
-java/lang/SystemClassLoaderAction
-java/lang/Terminator
-java/lang/Terminator$1
-java/lang/Thread
-java/lang/Thread$State
-java/lang/Thread$UncaughtExceptionHandler
-java/lang/ThreadDeath
-java/lang/ThreadGroup
-java/lang/ThreadLocal
-java/lang/ThreadLocal$ThreadLocalMap
-java/lang/ThreadLocal$ThreadLocalMap$Entry
-java/lang/Throwable
-java/lang/Throwable$PrintStreamOrWriter
-java/lang/Throwable$WrappedPrintStream
-java/lang/UnsatisfiedLinkError
-java/lang/UnsupportedOperationException
-java/lang/VirtualMachineError
-java/lang/Void
-java/lang/annotation/Annotation
-java/lang/invoke/CallSite
-java/lang/invoke/ConstantCallSite
-java/lang/invoke/DirectMethodHandle
-java/lang/invoke/Invokers
-java/lang/invoke/LambdaForm
-java/lang/invoke/LambdaForm$NamedFunction
-java/lang/invoke/MemberName
-java/lang/invoke/MemberName$Factory
-java/lang/invoke/MethodHandle
-java/lang/invoke/MethodHandleImpl
-java/lang/invoke/MethodHandleNatives
-java/lang/invoke/MethodHandleStatics
-java/lang/invoke/MethodHandleStatics$1
-java/lang/invoke/MethodType
-java/lang/invoke/MethodType$ConcurrentWeakInternSet
-java/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry
-java/lang/invoke/MethodTypeForm
-java/lang/invoke/MutableCallSite
-java/lang/invoke/VolatileCallSite
-java/lang/ref/FinalReference
-java/lang/ref/Finalizer
-java/lang/ref/Finalizer$FinalizerThread
-java/lang/ref/PhantomReference
-java/lang/ref/Reference
-java/lang/ref/Reference$Lock
-java/lang/ref/Reference$ReferenceHandler
-java/lang/ref/ReferenceQueue
-java/lang/ref/ReferenceQueue$Lock
-java/lang/ref/ReferenceQueue$Null
-java/lang/ref/SoftReference
-java/lang/ref/WeakReference
-java/lang/reflect/AccessibleObject
-java/lang/reflect/AnnotatedElement
-java/lang/reflect/Array
-java/lang/reflect/Constructor
-java/lang/reflect/Executable
-java/lang/reflect/Field
-java/lang/reflect/GenericDeclaration
-java/lang/reflect/InvocationHandler
-java/lang/reflect/InvocationTargetException
-java/lang/reflect/Member
-java/lang/reflect/Method
-java/lang/reflect/Modifier
-java/lang/reflect/Parameter
-java/lang/reflect/Proxy
-java/lang/reflect/Proxy$KeyFactory
-java/lang/reflect/Proxy$ProxyClassFactory
-java/lang/reflect/ReflectAccess
-java/lang/reflect/ReflectPermission
-java/lang/reflect/Type
-java/lang/reflect/WeakCache
-java/math/BigInteger
-java/math/BigInteger$UnsafeHolder
-java/math/MutableBigInteger
-java/math/RoundingMode
-java/math/SignedMutableBigInteger
-java/net/AbstractPlainDatagramSocketImpl
-java/net/AbstractPlainDatagramSocketImpl$1
-java/net/AbstractPlainSocketImpl
-java/net/AbstractPlainSocketImpl$1
-java/net/Authenticator
-java/net/BindException
-java/net/ConnectException
-java/net/DatagramPacket
-java/net/DatagramPacket$1
-java/net/DatagramSocket
-java/net/DatagramSocket$1
-java/net/DatagramSocketImpl
-java/net/DefaultDatagramSocketImplFactory$1
-java/net/DefaultInterface
-java/net/DualStackPlainDatagramSocketImpl
-java/net/DualStackPlainSocketImpl
-java/net/FileNameMap
-java/net/HttpURLConnection
-java/net/Inet4Address
-java/net/Inet4AddressImpl
-java/net/Inet6Address
-java/net/Inet6Address$Inet6AddressHolder
-java/net/Inet6AddressImpl
-java/net/InetAddress
-java/net/InetAddress$1
-java/net/InetAddress$2
-java/net/InetAddress$Cache
-java/net/InetAddress$Cache$Type
-java/net/InetAddress$CacheEntry
-java/net/InetAddress$InetAddressHolder
-java/net/InetAddressImpl
-java/net/InetAddressImplFactory
-java/net/InetSocketAddress
-java/net/InetSocketAddress$InetSocketAddressHolder
-java/net/InterfaceAddress
-java/net/JarURLConnection
-java/net/MalformedURLException
-java/net/MulticastSocket
-java/net/NetworkInterface
-java/net/NetworkInterface$1
-java/net/NoRouteToHostException
-java/net/Parts
-java/net/PlainSocketImpl
-java/net/PlainSocketImpl$1
-java/net/Proxy
-java/net/Proxy$Type
-java/net/ProxySelector
-java/net/ServerSocket
-java/net/Socket
-java/net/SocketAddress
-java/net/SocketException
-java/net/SocketImpl
-java/net/SocketImplFactory
-java/net/SocketOptions
-java/net/SocketTimeoutException
-java/net/SocksConsts
-java/net/SocksSocketImpl
-java/net/SocksSocketImpl$3
-java/net/TwoStacksPlainDatagramSocketImpl
-java/net/URI
-java/net/URI$Parser
-java/net/URL
-java/net/URLClassLoader
-java/net/URLClassLoader$1
-java/net/URLClassLoader$2
-java/net/URLClassLoader$3
-java/net/URLClassLoader$3$1
-java/net/URLClassLoader$7
-java/net/URLConnection
-java/net/URLConnection$1
-java/net/URLStreamHandler
-java/net/URLStreamHandlerFactory
-java/net/UnknownHostException
-java/nio/Bits
-java/nio/Bits$1
-java/nio/Buffer
-java/nio/ByteBuffer
-java/nio/ByteBufferAsCharBufferB
-java/nio/ByteBufferAsIntBufferB
-java/nio/ByteBufferAsShortBufferB
-java/nio/ByteOrder
-java/nio/CharBuffer
-java/nio/DirectByteBuffer
-java/nio/DirectByteBuffer$Deallocator
-java/nio/DirectLongBufferU
-java/nio/HeapByteBuffer
-java/nio/HeapCharBuffer
-java/nio/IntBuffer
-java/nio/LongBuffer
-java/nio/MappedByteBuffer
-java/nio/ShortBuffer
-java/nio/channels/ByteChannel
-java/nio/channels/Channel
-java/nio/channels/FileChannel
-java/nio/channels/GatheringByteChannel
-java/nio/channels/InterruptibleChannel
-java/nio/channels/NetworkChannel
-java/nio/channels/ReadableByteChannel
-java/nio/channels/ScatteringByteChannel
-java/nio/channels/SeekableByteChannel
-java/nio/channels/SelectableChannel
-java/nio/channels/SocketChannel
-java/nio/channels/WritableByteChannel
-java/nio/channels/spi/AbstractInterruptibleChannel
-java/nio/channels/spi/AbstractInterruptibleChannel$1
-java/nio/channels/spi/AbstractSelectableChannel
-java/nio/charset/Charset
-java/nio/charset/CharsetDecoder
-java/nio/charset/CharsetEncoder
-java/nio/charset/CoderResult
-java/nio/charset/CoderResult$1
-java/nio/charset/CoderResult$2
-java/nio/charset/CoderResult$Cache
-java/nio/charset/CodingErrorAction
-java/nio/charset/StandardCharsets
-java/nio/charset/spi/CharsetProvider
-java/nio/file/Path
-java/nio/file/Watchable
-java/nio/file/attribute/FileAttribute
-java/security/AccessControlContext
-java/security/AccessController
-java/security/AlgorithmParameters
-java/security/AlgorithmParametersSpi
-java/security/AllPermission
-java/security/AllPermissionCollection
-java/security/BasicPermission
-java/security/BasicPermissionCollection
-java/security/CodeSigner
-java/security/CodeSource
-java/security/GeneralSecurityException
-java/security/Guard
-java/security/InvalidKeyException
-java/security/Key
-java/security/KeyException
-java/security/MessageDigest
-java/security/MessageDigest$Delegate
-java/security/MessageDigestSpi
-java/security/NoSuchAlgorithmException
-java/security/Permission
-java/security/PermissionCollection
-java/security/Permissions
-java/security/Principal
-java/security/PrivateKey
-java/security/PrivilegedAction
-java/security/PrivilegedActionException
-java/security/PrivilegedExceptionAction
-java/security/ProtectionDomain
-java/security/ProtectionDomain$1
-java/security/ProtectionDomain$3
-java/security/ProtectionDomain$Key
-java/security/Provider
-java/security/Provider$EngineDescription
-java/security/Provider$Service
-java/security/Provider$ServiceKey
-java/security/Provider$UString
-java/security/PublicKey
-java/security/SecureClassLoader
-java/security/Security
-java/security/Security$1
-java/security/Signature
-java/security/Signature$Delegate
-java/security/SignatureException
-java/security/SignatureSpi
-java/security/UnresolvedPermission
-java/security/cert/Certificate
-java/security/interfaces/DSAKey
-java/security/interfaces/DSAParams
-java/security/interfaces/DSAPrivateKey
-java/security/interfaces/DSAPublicKey
-java/security/spec/AlgorithmParameterSpec
-java/security/spec/DSAParameterSpec
-java/text/AttributedCharacterIterator$Attribute
-java/text/CharacterIterator
-java/text/Collator
-java/text/DateFormat
-java/text/DateFormat$Field
-java/text/DateFormatSymbols
-java/text/DecimalFormat
-java/text/DecimalFormatSymbols
-java/text/DigitList
-java/text/DontCareFieldPosition
-java/text/DontCareFieldPosition$1
-java/text/EntryPair
-java/text/FieldPosition
-java/text/Format
-java/text/Format$Field
-java/text/Format$FieldDelegate
-java/text/MergeCollation
-java/text/MessageFormat
-java/text/MessageFormat$Field
-java/text/NumberFormat
-java/text/NumberFormat$Field
-java/text/ParseException
-java/text/PatternEntry
-java/text/PatternEntry$Parser
-java/text/RBCollationTables
-java/text/RBCollationTables$BuildAPI
-java/text/RuleBasedCollator
-java/text/SimpleDateFormat
-java/text/spi/BreakIteratorProvider
-java/text/spi/CollatorProvider
-java/text/spi/DateFormatProvider
-java/text/spi/DateFormatSymbolsProvider
-java/text/spi/DecimalFormatSymbolsProvider
-java/text/spi/NumberFormatProvider
-java/util/AbstractCollection
-java/util/AbstractList
-java/util/AbstractList$Itr
-java/util/AbstractList$ListItr
-java/util/AbstractMap
-java/util/AbstractQueue
-java/util/AbstractSequentialList
-java/util/AbstractSet
-java/util/ArrayDeque
-java/util/ArrayList
-java/util/ArrayList$Itr
-java/util/ArrayList$ListItr
-java/util/ArrayList$SubList
-java/util/ArrayList$SubList$1
-java/util/Arrays
-java/util/Arrays$ArrayList
-java/util/Arrays$LegacyMergeSort
-java/util/BitSet
-java/util/Calendar
-java/util/Calendar$Builder
-java/util/Collection
-java/util/Collections
-java/util/Collections$3
-java/util/Collections$EmptyEnumeration
-java/util/Collections$EmptyIterator
-java/util/Collections$EmptyList
-java/util/Collections$EmptyMap
-java/util/Collections$EmptySet
-java/util/Collections$SetFromMap
-java/util/Collections$SynchronizedCollection
-java/util/Collections$SynchronizedMap
-java/util/Collections$SynchronizedSet
-java/util/Collections$UnmodifiableCollection
-java/util/Collections$UnmodifiableCollection$1
-java/util/Collections$UnmodifiableList
-java/util/Collections$UnmodifiableList$1
-java/util/Collections$UnmodifiableMap
-java/util/Collections$UnmodifiableRandomAccessList
-java/util/Collections$UnmodifiableSet
-java/util/ComparableTimSort
-java/util/Comparator
-java/util/Currency
-java/util/Currency$1
-java/util/Currency$CurrencyNameGetter
-java/util/Date
-java/util/Deque
-java/util/Dictionary
-java/util/Enumeration
-java/util/EventListener
-java/util/EventListenerProxy
-java/util/EventObject
-java/util/GregorianCalendar
-java/util/HashMap
-java/util/HashMap$EntryIterator
-java/util/HashMap$EntrySet
-java/util/HashMap$HashIterator
-java/util/HashMap$KeyIterator
-java/util/HashMap$KeySet
-java/util/HashMap$Node
-java/util/HashMap$TreeNode
-java/util/HashMap$ValueIterator
-java/util/HashMap$Values
-java/util/HashSet
-java/util/Hashtable
-java/util/Hashtable$Entry
-java/util/Hashtable$EntrySet
-java/util/Hashtable$Enumerator
-java/util/Hashtable$ValueCollection
-java/util/IdentityHashMap
-java/util/IdentityHashMap$IdentityHashMapIterator
-java/util/IdentityHashMap$KeyIterator
-java/util/IdentityHashMap$KeySet
-java/util/IdentityHashMap$ValueIterator
-java/util/IdentityHashMap$Values
-java/util/Iterator
-java/util/LinkedHashMap
-java/util/LinkedHashMap$Entry
-java/util/LinkedHashMap$LinkedEntryIterator
-java/util/LinkedHashMap$LinkedEntrySet
-java/util/LinkedHashMap$LinkedHashIterator
-java/util/LinkedHashMap$LinkedKeyIterator
-java/util/LinkedHashMap$LinkedKeySet
-java/util/LinkedList
-java/util/LinkedList$ListItr
-java/util/LinkedList$Node
-java/util/List
-java/util/ListIterator
-java/util/ListResourceBundle
-java/util/Locale
-java/util/Locale$1
-java/util/Locale$Cache
-java/util/Locale$Category
-java/util/Locale$LocaleKey
-java/util/Map
-java/util/Map$Entry
-java/util/MissingResourceException
-java/util/NavigableMap
-java/util/Objects
-java/util/PriorityQueue
-java/util/Properties
-java/util/Properties$LineReader
-java/util/PropertyResourceBundle
-java/util/Queue
-java/util/Random
-java/util/RandomAccess
-java/util/ResourceBundle
-java/util/ResourceBundle$1
-java/util/ResourceBundle$BundleReference
-java/util/ResourceBundle$CacheKey
-java/util/ResourceBundle$CacheKeyReference
-java/util/ResourceBundle$Control
-java/util/ResourceBundle$Control$1
-java/util/ResourceBundle$Control$CandidateListCache
-java/util/ResourceBundle$LoaderReference
-java/util/ResourceBundle$RBClassLoader
-java/util/ResourceBundle$RBClassLoader$1
-java/util/ResourceBundle$SingleFormatControl
-java/util/ServiceLoader
-java/util/ServiceLoader$1
-java/util/ServiceLoader$LazyIterator
-java/util/Set
-java/util/SortedMap
-java/util/Stack
-java/util/StringTokenizer
-java/util/TimSort
-java/util/TimeZone
-java/util/TimeZone$1
-java/util/TreeMap
-java/util/TreeMap$Entry
-java/util/Vector
-java/util/Vector$1
-java/util/Vector$Itr
-java/util/Vector$ListItr
-java/util/WeakHashMap
-java/util/WeakHashMap$Entry
-java/util/WeakHashMap$KeySet
-java/util/concurrent/BlockingQueue
-java/util/concurrent/ConcurrentHashMap
-java/util/concurrent/ConcurrentHashMap$BaseIterator
-java/util/concurrent/ConcurrentHashMap$CollectionView
-java/util/concurrent/ConcurrentHashMap$CounterCell
-java/util/concurrent/ConcurrentHashMap$EntrySetView
-java/util/concurrent/ConcurrentHashMap$ForwardingNode
-java/util/concurrent/ConcurrentHashMap$KeyIterator
-java/util/concurrent/ConcurrentHashMap$KeySetView
-java/util/concurrent/ConcurrentHashMap$Node
-java/util/concurrent/ConcurrentHashMap$Segment
-java/util/concurrent/ConcurrentHashMap$Traverser
-java/util/concurrent/ConcurrentHashMap$ValueIterator
-java/util/concurrent/ConcurrentHashMap$ValuesView
-java/util/concurrent/ConcurrentMap
-java/util/concurrent/CopyOnWriteArrayList
-java/util/concurrent/DelayQueue
-java/util/concurrent/Delayed
-java/util/concurrent/TimeUnit
-java/util/concurrent/TimeUnit$1
-java/util/concurrent/TimeUnit$2
-java/util/concurrent/TimeUnit$3
-java/util/concurrent/TimeUnit$4
-java/util/concurrent/TimeUnit$5
-java/util/concurrent/TimeUnit$6
-java/util/concurrent/TimeUnit$7
-java/util/concurrent/atomic/AtomicBoolean
-java/util/concurrent/atomic/AtomicInteger
-java/util/concurrent/atomic/AtomicLong
-java/util/concurrent/atomic/AtomicMarkableReference
-java/util/concurrent/atomic/AtomicMarkableReference$Pair
-java/util/concurrent/atomic/AtomicReferenceFieldUpdater
-java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl
-java/util/concurrent/atomic/AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl$1
-java/util/concurrent/locks/AbstractOwnableSynchronizer
-java/util/concurrent/locks/AbstractQueuedSynchronizer
-java/util/concurrent/locks/AbstractQueuedSynchronizer$ConditionObject
-java/util/concurrent/locks/AbstractQueuedSynchronizer$Node
-java/util/concurrent/locks/Condition
-java/util/concurrent/locks/Lock
-java/util/concurrent/locks/LockSupport
-java/util/concurrent/locks/ReadWriteLock
-java/util/concurrent/locks/ReentrantLock
-java/util/concurrent/locks/ReentrantLock$NonfairSync
-java/util/concurrent/locks/ReentrantLock$Sync
-java/util/concurrent/locks/ReentrantReadWriteLock
-java/util/concurrent/locks/ReentrantReadWriteLock$NonfairSync
-java/util/concurrent/locks/ReentrantReadWriteLock$ReadLock
-java/util/concurrent/locks/ReentrantReadWriteLock$Sync
-java/util/concurrent/locks/ReentrantReadWriteLock$Sync$ThreadLocalHoldCounter
-java/util/concurrent/locks/ReentrantReadWriteLock$WriteLock
-java/util/function/BiFunction
-java/util/jar/Attributes
-java/util/jar/Attributes$Name
-java/util/jar/JarEntry
-java/util/jar/JarFile
-java/util/jar/JarFile$JarEntryIterator
-java/util/jar/JarFile$JarFileEntry
-java/util/jar/JarVerifier
-java/util/jar/JarVerifier$3
-java/util/jar/JavaUtilJarAccessImpl
-java/util/jar/Manifest
-java/util/jar/Manifest$FastInputStream
-java/util/logging/Handler
-java/util/logging/Level
-java/util/logging/Level$KnownLevel
-java/util/logging/LogManager
-java/util/logging/LogManager$1
-java/util/logging/LogManager$2
-java/util/logging/LogManager$3
-java/util/logging/LogManager$5
-java/util/logging/LogManager$Cleaner
-java/util/logging/LogManager$LogNode
-java/util/logging/LogManager$LoggerContext
-java/util/logging/LogManager$LoggerContext$1
-java/util/logging/LogManager$LoggerWeakRef
-java/util/logging/LogManager$RootLogger
-java/util/logging/LogManager$SystemLoggerContext
-java/util/logging/Logger
-java/util/logging/Logger$1
-java/util/logging/LoggingPermission
-java/util/logging/LoggingProxyImpl
-java/util/spi/CalendarDataProvider
-java/util/spi/CurrencyNameProvider
-java/util/spi/LocaleNameProvider
-java/util/spi/LocaleServiceProvider
-java/util/spi/ResourceBundleControlProvider
-java/util/spi/TimeZoneNameProvider
-java/util/zip/CRC32
-java/util/zip/Checksum
-java/util/zip/DeflaterOutputStream
-java/util/zip/GZIPInputStream
-java/util/zip/Inflater
-java/util/zip/InflaterInputStream
-java/util/zip/ZStreamRef
-java/util/zip/ZipCoder
-java/util/zip/ZipConstants
-java/util/zip/ZipEntry
-java/util/zip/ZipFile
-java/util/zip/ZipFile$1
-java/util/zip/ZipFile$ZipEntryIterator
-java/util/zip/ZipFile$ZipFileInflaterInputStream
-java/util/zip/ZipFile$ZipFileInputStream
-java/util/zip/ZipInputStream
-java/util/zip/ZipUtils
-javax/accessibility/Accessible
-javax/accessibility/AccessibleAction
-javax/accessibility/AccessibleBundle
-javax/accessibility/AccessibleComponent
-javax/accessibility/AccessibleContext
-javax/accessibility/AccessibleExtendedComponent
-javax/accessibility/AccessibleRelationSet
-javax/accessibility/AccessibleState
-javax/accessibility/AccessibleText
-javax/accessibility/AccessibleValue
-javax/security/auth/Destroyable
-javax/sound/sampled/Control$Type
-javax/sound/sampled/DataLine
-javax/sound/sampled/DataLine$Info
-javax/sound/sampled/FloatControl$Type
-javax/sound/sampled/Line
-javax/sound/sampled/Line$Info
-javax/sound/sampled/LineUnavailableException
-javax/sound/sampled/UnsupportedAudioFileException
-javax/swing/AbstractAction
-javax/swing/AbstractButton
-javax/swing/AbstractButton$AccessibleAbstractButton
-javax/swing/AbstractButton$Handler
-javax/swing/AbstractCellEditor
-javax/swing/AbstractListModel
-javax/swing/Action
-javax/swing/ActionMap
-javax/swing/AncestorNotifier
-javax/swing/ArrayTable
-javax/swing/BorderFactory
-javax/swing/BoundedRangeModel
-javax/swing/Box
-javax/swing/Box$Filler
-javax/swing/BoxLayout
-javax/swing/BufferStrategyPaintManager
-javax/swing/BufferStrategyPaintManager$BufferInfo
-javax/swing/ButtonGroup
-javax/swing/ButtonModel
-javax/swing/CellEditor
-javax/swing/CellRendererPane
-javax/swing/ClientPropertyKey
-javax/swing/ClientPropertyKey$1
-javax/swing/ComboBoxEditor
-javax/swing/ComboBoxModel
-javax/swing/ComponentInputMap
-javax/swing/DefaultBoundedRangeModel
-javax/swing/DefaultButtonModel
-javax/swing/DefaultCellEditor
-javax/swing/DefaultCellEditor$1
-javax/swing/DefaultCellEditor$EditorDelegate
-javax/swing/DefaultComboBoxModel
-javax/swing/DefaultListCellRenderer
-javax/swing/DefaultListCellRenderer$UIResource
-javax/swing/DefaultListModel
-javax/swing/DefaultListSelectionModel
-javax/swing/DefaultSingleSelectionModel
-javax/swing/DropMode
-javax/swing/FocusManager
-javax/swing/GrayFilter
-javax/swing/Icon
-javax/swing/ImageIcon
-javax/swing/ImageIcon$1
-javax/swing/ImageIcon$2
-javax/swing/ImageIcon$2$1
-javax/swing/ImageIcon$3
-javax/swing/InputMap
-javax/swing/InternalFrameFocusTraversalPolicy
-javax/swing/JButton
-javax/swing/JCheckBox
-javax/swing/JCheckBoxMenuItem
-javax/swing/JCheckBoxMenuItem$AccessibleJCheckBoxMenuItem
-javax/swing/JComboBox
-javax/swing/JComboBox$1
-javax/swing/JComboBox$KeySelectionManager
-javax/swing/JComponent
-javax/swing/JComponent$1
-javax/swing/JComponent$2
-javax/swing/JComponent$AccessibleJComponent
-javax/swing/JDialog
-javax/swing/JEditorPane
-javax/swing/JFrame
-javax/swing/JInternalFrame
-javax/swing/JLabel
-javax/swing/JLayer
-javax/swing/JLayeredPane
-javax/swing/JList
-javax/swing/JList$3
-javax/swing/JList$ListSelectionHandler
-javax/swing/JMenu
-javax/swing/JMenu$MenuChangeListener
-javax/swing/JMenu$WinListener
-javax/swing/JMenuBar
-javax/swing/JMenuItem
-javax/swing/JMenuItem$AccessibleJMenuItem
-javax/swing/JMenuItem$MenuItemFocusListener
-javax/swing/JPanel
-javax/swing/JPopupMenu
-javax/swing/JPopupMenu$Separator
-javax/swing/JProgressBar
-javax/swing/JProgressBar$ModelListener
-javax/swing/JRadioButton
-javax/swing/JRadioButtonMenuItem
-javax/swing/JRootPane
-javax/swing/JRootPane$1
-javax/swing/JRootPane$RootLayout
-javax/swing/JScrollBar
-javax/swing/JScrollBar$ModelListener
-javax/swing/JScrollPane
-javax/swing/JScrollPane$ScrollBar
-javax/swing/JSeparator
-javax/swing/JSlider
-javax/swing/JSlider$ModelListener
-javax/swing/JSplitPane
-javax/swing/JTabbedPane
-javax/swing/JTabbedPane$ModelListener
-javax/swing/JTabbedPane$Page
-javax/swing/JTable
-javax/swing/JTable$2
-javax/swing/JTable$5
-javax/swing/JTable$Resizable2
-javax/swing/JTable$Resizable3
-javax/swing/JTextArea
-javax/swing/JTextField
-javax/swing/JTextField$NotifyAction
-javax/swing/JTextField$ScrollRepainter
-javax/swing/JToggleButton
-javax/swing/JToggleButton$ToggleButtonModel
-javax/swing/JToolBar
-javax/swing/JToolBar$DefaultToolBarLayout
-javax/swing/JToolBar$Separator
-javax/swing/JToolTip
-javax/swing/JTree
-javax/swing/JTree$TreeModelHandler
-javax/swing/JTree$TreeSelectionRedirector
-javax/swing/JViewport
-javax/swing/JViewport$ViewListener
-javax/swing/JWindow
-javax/swing/KeyStroke
-javax/swing/KeyboardManager
-javax/swing/KeyboardManager$ComponentKeyStrokePair
-javax/swing/LayoutComparator
-javax/swing/LayoutFocusTraversalPolicy
-javax/swing/ListCellRenderer
-javax/swing/ListModel
-javax/swing/ListSelectionModel
-javax/swing/LookAndFeel
-javax/swing/MenuElement
-javax/swing/MenuSelectionManager
-javax/swing/MultiUIDefaults
-javax/swing/MutableComboBoxModel
-javax/swing/Popup$HeavyWeightWindow
-javax/swing/RepaintManager
-javax/swing/RepaintManager$1
-javax/swing/RepaintManager$1$1
-javax/swing/RepaintManager$2
-javax/swing/RepaintManager$3
-javax/swing/RepaintManager$DisplayChangedHandler
-javax/swing/RepaintManager$PaintManager
-javax/swing/RepaintManager$ProcessingRunnable
-javax/swing/RootPaneContainer
-javax/swing/ScrollPaneConstants
-javax/swing/ScrollPaneLayout
-javax/swing/ScrollPaneLayout$UIResource
-javax/swing/Scrollable
-javax/swing/SingleSelectionModel
-javax/swing/SizeRequirements
-javax/swing/SortingFocusTraversalPolicy
-javax/swing/SwingConstants
-javax/swing/SwingContainerOrderFocusTraversalPolicy
-javax/swing/SwingDefaultFocusTraversalPolicy
-javax/swing/SwingPaintEventDispatcher
-javax/swing/SwingUtilities
-javax/swing/SwingUtilities$SharedOwnerFrame
-javax/swing/Timer
-javax/swing/Timer$DoPostEvent
-javax/swing/TimerQueue
-javax/swing/TimerQueue$1
-javax/swing/TimerQueue$DelayedTimer
-javax/swing/ToolTipManager
-javax/swing/ToolTipManager$AccessibilityKeyListener
-javax/swing/ToolTipManager$MoveBeforeEnterListener
-javax/swing/ToolTipManager$insideTimerAction
-javax/swing/ToolTipManager$outsideTimerAction
-javax/swing/ToolTipManager$stillInsideTimerAction
-javax/swing/TransferHandler
-javax/swing/TransferHandler$DropHandler
-javax/swing/TransferHandler$HasGetTransferHandler
-javax/swing/TransferHandler$SwingDropTarget
-javax/swing/TransferHandler$TransferAction
-javax/swing/TransferHandler$TransferSupport
-javax/swing/UIDefaults
-javax/swing/UIDefaults$ActiveValue
-javax/swing/UIDefaults$LazyInputMap
-javax/swing/UIDefaults$LazyValue
-javax/swing/UIDefaults$TextAndMnemonicHashMap
-javax/swing/UIManager
-javax/swing/UIManager$1
-javax/swing/UIManager$2
-javax/swing/UIManager$LAFState
-javax/swing/UIManager$LookAndFeelInfo
-javax/swing/UnsupportedLookAndFeelException
-javax/swing/ViewportLayout
-javax/swing/WindowConstants
-javax/swing/border/AbstractBorder
-javax/swing/border/BevelBorder
-javax/swing/border/Border
-javax/swing/border/CompoundBorder
-javax/swing/border/EmptyBorder
-javax/swing/border/EtchedBorder
-javax/swing/border/LineBorder
-javax/swing/border/MatteBorder
-javax/swing/border/TitledBorder
-javax/swing/event/AncestorListener
-javax/swing/event/CaretEvent
-javax/swing/event/CaretListener
-javax/swing/event/CellEditorListener
-javax/swing/event/ChangeEvent
-javax/swing/event/ChangeListener
-javax/swing/event/DocumentEvent
-javax/swing/event/DocumentEvent$ElementChange
-javax/swing/event/DocumentEvent$EventType
-javax/swing/event/DocumentListener
-javax/swing/event/EventListenerList
-javax/swing/event/ListDataEvent
-javax/swing/event/ListDataListener
-javax/swing/event/ListSelectionEvent
-javax/swing/event/ListSelectionListener
-javax/swing/event/MenuDragMouseListener
-javax/swing/event/MenuEvent
-javax/swing/event/MenuKeyListener
-javax/swing/event/MenuListener
-javax/swing/event/MouseInputAdapter
-javax/swing/event/MouseInputListener
-javax/swing/event/PopupMenuListener
-javax/swing/event/RowSorterListener
-javax/swing/event/SwingPropertyChangeSupport
-javax/swing/event/TableColumnModelEvent
-javax/swing/event/TableColumnModelListener
-javax/swing/event/TableModelEvent
-javax/swing/event/TableModelListener
-javax/swing/event/TreeExpansionListener
-javax/swing/event/TreeModelEvent
-javax/swing/event/TreeModelListener
-javax/swing/event/TreeSelectionEvent
-javax/swing/event/TreeSelectionListener
-javax/swing/event/UndoableEditEvent
-javax/swing/event/UndoableEditListener
-javax/swing/filechooser/FileFilter
-javax/swing/filechooser/FileSystemView
-javax/swing/filechooser/FileSystemView$1
-javax/swing/filechooser/WindowsFileSystemView
-javax/swing/plaf/ActionMapUIResource
-javax/swing/plaf/BorderUIResource
-javax/swing/plaf/BorderUIResource$CompoundBorderUIResource
-javax/swing/plaf/BorderUIResource$EmptyBorderUIResource
-javax/swing/plaf/BorderUIResource$LineBorderUIResource
-javax/swing/plaf/ButtonUI
-javax/swing/plaf/ColorUIResource
-javax/swing/plaf/ComboBoxUI
-javax/swing/plaf/ComponentInputMapUIResource
-javax/swing/plaf/ComponentUI
-javax/swing/plaf/DimensionUIResource
-javax/swing/plaf/FontUIResource
-javax/swing/plaf/InputMapUIResource
-javax/swing/plaf/InsetsUIResource
-javax/swing/plaf/LabelUI
-javax/swing/plaf/ListUI
-javax/swing/plaf/MenuBarUI
-javax/swing/plaf/MenuItemUI
-javax/swing/plaf/PanelUI
-javax/swing/plaf/PopupMenuUI
-javax/swing/plaf/ProgressBarUI
-javax/swing/plaf/RootPaneUI
-javax/swing/plaf/ScrollBarUI
-javax/swing/plaf/ScrollPaneUI
-javax/swing/plaf/SeparatorUI
-javax/swing/plaf/SliderUI
-javax/swing/plaf/SplitPaneUI
-javax/swing/plaf/TabbedPaneUI
-javax/swing/plaf/TableHeaderUI
-javax/swing/plaf/TableUI
-javax/swing/plaf/TextUI
-javax/swing/plaf/ToolBarUI
-javax/swing/plaf/TreeUI
-javax/swing/plaf/UIResource
-javax/swing/plaf/ViewportUI
-javax/swing/plaf/basic/BasicArrowButton
-javax/swing/plaf/basic/BasicBorders
-javax/swing/plaf/basic/BasicBorders$ButtonBorder
-javax/swing/plaf/basic/BasicBorders$MarginBorder
-javax/swing/plaf/basic/BasicBorders$RadioButtonBorder
-javax/swing/plaf/basic/BasicBorders$RolloverMarginBorder
-javax/swing/plaf/basic/BasicBorders$SplitPaneBorder
-javax/swing/plaf/basic/BasicBorders$SplitPaneDividerBorder
-javax/swing/plaf/basic/BasicButtonListener
-javax/swing/plaf/basic/BasicButtonUI
-javax/swing/plaf/basic/BasicCheckBoxMenuItemUI
-javax/swing/plaf/basic/BasicComboBoxEditor
-javax/swing/plaf/basic/BasicComboBoxEditor$BorderlessTextField
-javax/swing/plaf/basic/BasicComboBoxEditor$UIResource
-javax/swing/plaf/basic/BasicComboBoxRenderer
-javax/swing/plaf/basic/BasicComboBoxRenderer$UIResource
-javax/swing/plaf/basic/BasicComboBoxUI
-javax/swing/plaf/basic/BasicComboBoxUI$ComboBoxLayoutManager
-javax/swing/plaf/basic/BasicComboBoxUI$DefaultKeySelectionManager
-javax/swing/plaf/basic/BasicComboBoxUI$Handler
-javax/swing/plaf/basic/BasicComboBoxUI$PropertyChangeHandler
-javax/swing/plaf/basic/BasicComboPopup
-javax/swing/plaf/basic/BasicComboPopup$1
-javax/swing/plaf/basic/BasicComboPopup$EmptyListModelClass
-javax/swing/plaf/basic/BasicComboPopup$Handler
-javax/swing/plaf/basic/BasicGraphicsUtils
-javax/swing/plaf/basic/BasicHTML
-javax/swing/plaf/basic/BasicLabelUI
-javax/swing/plaf/basic/BasicListUI
-javax/swing/plaf/basic/BasicListUI$Handler
-javax/swing/plaf/basic/BasicListUI$ListTransferHandler
-javax/swing/plaf/basic/BasicLookAndFeel
-javax/swing/plaf/basic/BasicLookAndFeel$1
-javax/swing/plaf/basic/BasicLookAndFeel$2
-javax/swing/plaf/basic/BasicLookAndFeel$AWTEventHelper
-javax/swing/plaf/basic/BasicMenuBarUI
-javax/swing/plaf/basic/BasicMenuBarUI$Handler
-javax/swing/plaf/basic/BasicMenuItemUI
-javax/swing/plaf/basic/BasicMenuItemUI$Handler
-javax/swing/plaf/basic/BasicMenuUI
-javax/swing/plaf/basic/BasicMenuUI$Handler
-javax/swing/plaf/basic/BasicPanelUI
-javax/swing/plaf/basic/BasicPopupMenuUI
-javax/swing/plaf/basic/BasicPopupMenuUI$BasicMenuKeyListener
-javax/swing/plaf/basic/BasicPopupMenuUI$BasicPopupMenuListener
-javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper
-javax/swing/plaf/basic/BasicPopupMenuUI$MenuKeyboardHelper$1
-javax/swing/plaf/basic/BasicPopupMenuUI$MouseGrabber
-javax/swing/plaf/basic/BasicProgressBarUI
-javax/swing/plaf/basic/BasicProgressBarUI$Handler
-javax/swing/plaf/basic/BasicRadioButtonMenuItemUI
-javax/swing/plaf/basic/BasicRadioButtonUI
-javax/swing/plaf/basic/BasicRootPaneUI
-javax/swing/plaf/basic/BasicRootPaneUI$RootPaneInputMap
-javax/swing/plaf/basic/BasicScrollBarUI
-javax/swing/plaf/basic/BasicScrollBarUI$ArrowButtonListener
-javax/swing/plaf/basic/BasicScrollBarUI$Handler
-javax/swing/plaf/basic/BasicScrollBarUI$ModelListener
-javax/swing/plaf/basic/BasicScrollBarUI$PropertyChangeHandler
-javax/swing/plaf/basic/BasicScrollBarUI$ScrollListener
-javax/swing/plaf/basic/BasicScrollBarUI$TrackListener
-javax/swing/plaf/basic/BasicScrollPaneUI
-javax/swing/plaf/basic/BasicScrollPaneUI$Handler
-javax/swing/plaf/basic/BasicSeparatorUI
-javax/swing/plaf/basic/BasicSliderUI
-javax/swing/plaf/basic/BasicSliderUI$Actions
-javax/swing/plaf/basic/BasicSliderUI$Handler
-javax/swing/plaf/basic/BasicSliderUI$PropertyChangeHandler
-javax/swing/plaf/basic/BasicSliderUI$ScrollListener
-javax/swing/plaf/basic/BasicSliderUI$TrackListener
-javax/swing/plaf/basic/BasicSplitPaneDivider
-javax/swing/plaf/basic/BasicSplitPaneDivider$DividerLayout
-javax/swing/plaf/basic/BasicSplitPaneDivider$MouseHandler
-javax/swing/plaf/basic/BasicSplitPaneDivider$OneTouchActionHandler
-javax/swing/plaf/basic/BasicSplitPaneUI
-javax/swing/plaf/basic/BasicSplitPaneUI$1
-javax/swing/plaf/basic/BasicSplitPaneUI$BasicHorizontalLayoutManager
-javax/swing/plaf/basic/BasicSplitPaneUI$Handler
-javax/swing/plaf/basic/BasicTabbedPaneUI
-javax/swing/plaf/basic/BasicTabbedPaneUI$Handler
-javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneLayout
-javax/swing/plaf/basic/BasicTabbedPaneUI$TabbedPaneScrollLayout
-javax/swing/plaf/basic/BasicTableHeaderUI
-javax/swing/plaf/basic/BasicTableHeaderUI$1
-javax/swing/plaf/basic/BasicTableHeaderUI$MouseInputHandler
-javax/swing/plaf/basic/BasicTableUI
-javax/swing/plaf/basic/BasicTableUI$Handler
-javax/swing/plaf/basic/BasicTableUI$TableTransferHandler
-javax/swing/plaf/basic/BasicTextAreaUI
-javax/swing/plaf/basic/BasicTextFieldUI
-javax/swing/plaf/basic/BasicTextUI
-javax/swing/plaf/basic/BasicTextUI$BasicCaret
-javax/swing/plaf/basic/BasicTextUI$BasicCursor
-javax/swing/plaf/basic/BasicTextUI$BasicHighlighter
-javax/swing/plaf/basic/BasicTextUI$DragListener
-javax/swing/plaf/basic/BasicTextUI$FocusAction
-javax/swing/plaf/basic/BasicTextUI$RootView
-javax/swing/plaf/basic/BasicTextUI$TextActionWrapper
-javax/swing/plaf/basic/BasicTextUI$TextTransferHandler
-javax/swing/plaf/basic/BasicTextUI$UpdateHandler
-javax/swing/plaf/basic/BasicToggleButtonUI
-javax/swing/plaf/basic/BasicToolBarSeparatorUI
-javax/swing/plaf/basic/BasicToolBarUI
-javax/swing/plaf/basic/BasicToolBarUI$DockingListener
-javax/swing/plaf/basic/BasicToolBarUI$Handler
-javax/swing/plaf/basic/BasicTreeUI
-javax/swing/plaf/basic/BasicTreeUI$Actions
-javax/swing/plaf/basic/BasicTreeUI$Handler
-javax/swing/plaf/basic/BasicTreeUI$NodeDimensionsHandler
-javax/swing/plaf/basic/BasicTreeUI$TreeTransferHandler
-javax/swing/plaf/basic/BasicViewportUI
-javax/swing/plaf/basic/ComboPopup
-javax/swing/plaf/basic/DefaultMenuLayout
-javax/swing/plaf/basic/DragRecognitionSupport$BeforeDrag
-javax/swing/plaf/basic/LazyActionMap
-javax/swing/plaf/metal/BumpBuffer
-javax/swing/plaf/metal/DefaultMetalTheme
-javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate
-javax/swing/plaf/metal/DefaultMetalTheme$FontDelegate$1
-javax/swing/plaf/metal/MetalBorders
-javax/swing/plaf/metal/MetalBorders$ButtonBorder
-javax/swing/plaf/metal/MetalBorders$Flush3DBorder
-javax/swing/plaf/metal/MetalBorders$MenuBarBorder
-javax/swing/plaf/metal/MetalBorders$MenuItemBorder
-javax/swing/plaf/metal/MetalBorders$PopupMenuBorder
-javax/swing/plaf/metal/MetalBorders$RolloverButtonBorder
-javax/swing/plaf/metal/MetalBorders$RolloverMarginBorder
-javax/swing/plaf/metal/MetalBorders$ScrollPaneBorder
-javax/swing/plaf/metal/MetalBorders$TextFieldBorder
-javax/swing/plaf/metal/MetalBorders$ToggleButtonBorder
-javax/swing/plaf/metal/MetalBorders$ToolBarBorder
-javax/swing/plaf/metal/MetalBumps
-javax/swing/plaf/metal/MetalButtonUI
-javax/swing/plaf/metal/MetalCheckBoxUI
-javax/swing/plaf/metal/MetalComboBoxButton
-javax/swing/plaf/metal/MetalComboBoxButton$1
-javax/swing/plaf/metal/MetalComboBoxEditor
-javax/swing/plaf/metal/MetalComboBoxEditor$1
-javax/swing/plaf/metal/MetalComboBoxEditor$EditorBorder
-javax/swing/plaf/metal/MetalComboBoxEditor$UIResource
-javax/swing/plaf/metal/MetalComboBoxIcon
-javax/swing/plaf/metal/MetalComboBoxUI
-javax/swing/plaf/metal/MetalComboBoxUI$MetalComboBoxLayoutManager
-javax/swing/plaf/metal/MetalComboBoxUI$MetalPropertyChangeListener
-javax/swing/plaf/metal/MetalIconFactory
-javax/swing/plaf/metal/MetalIconFactory$CheckBoxIcon
-javax/swing/plaf/metal/MetalIconFactory$CheckBoxMenuItemIcon
-javax/swing/plaf/metal/MetalIconFactory$FolderIcon16
-javax/swing/plaf/metal/MetalIconFactory$HorizontalSliderThumbIcon
-javax/swing/plaf/metal/MetalIconFactory$MenuArrowIcon
-javax/swing/plaf/metal/MetalIconFactory$MenuItemArrowIcon
-javax/swing/plaf/metal/MetalIconFactory$RadioButtonIcon
-javax/swing/plaf/metal/MetalIconFactory$RadioButtonMenuItemIcon
-javax/swing/plaf/metal/MetalIconFactory$TreeFolderIcon
-javax/swing/plaf/metal/MetalIconFactory$VerticalSliderThumbIcon
-javax/swing/plaf/metal/MetalLabelUI
-javax/swing/plaf/metal/MetalLookAndFeel
-javax/swing/plaf/metal/MetalLookAndFeel$AATextListener
-javax/swing/plaf/metal/MetalLookAndFeel$FontActiveValue
-javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue
-javax/swing/plaf/metal/MetalLookAndFeel$MetalLazyValue$1
-javax/swing/plaf/metal/MetalPopupMenuSeparatorUI
-javax/swing/plaf/metal/MetalProgressBarUI
-javax/swing/plaf/metal/MetalRadioButtonUI
-javax/swing/plaf/metal/MetalRootPaneUI
-javax/swing/plaf/metal/MetalScrollBarUI
-javax/swing/plaf/metal/MetalScrollBarUI$ScrollBarListener
-javax/swing/plaf/metal/MetalScrollButton
-javax/swing/plaf/metal/MetalScrollPaneUI
-javax/swing/plaf/metal/MetalScrollPaneUI$1
-javax/swing/plaf/metal/MetalSeparatorUI
-javax/swing/plaf/metal/MetalSliderUI
-javax/swing/plaf/metal/MetalSliderUI$MetalPropertyListener
-javax/swing/plaf/metal/MetalSplitPaneDivider
-javax/swing/plaf/metal/MetalSplitPaneDivider$1
-javax/swing/plaf/metal/MetalSplitPaneDivider$2
-javax/swing/plaf/metal/MetalSplitPaneUI
-javax/swing/plaf/metal/MetalTabbedPaneUI
-javax/swing/plaf/metal/MetalTabbedPaneUI$TabbedPaneLayout
-javax/swing/plaf/metal/MetalTextFieldUI
-javax/swing/plaf/metal/MetalTheme
-javax/swing/plaf/metal/MetalToggleButtonUI
-javax/swing/plaf/metal/MetalToolBarUI
-javax/swing/plaf/metal/MetalToolBarUI$MetalDockingListener
-javax/swing/plaf/metal/MetalTreeUI
-javax/swing/plaf/metal/MetalTreeUI$LineListener
-javax/swing/plaf/metal/MetalUtils
-javax/swing/plaf/metal/OceanTheme
-javax/swing/plaf/metal/OceanTheme$1
-javax/swing/plaf/metal/OceanTheme$2
-javax/swing/plaf/metal/OceanTheme$3
-javax/swing/plaf/metal/OceanTheme$4
-javax/swing/plaf/metal/OceanTheme$5
-javax/swing/plaf/metal/OceanTheme$6
-javax/swing/plaf/synth/SynthConstants
-javax/swing/plaf/synth/SynthUI
-javax/swing/table/AbstractTableModel
-javax/swing/table/DefaultTableCellRenderer
-javax/swing/table/DefaultTableColumnModel
-javax/swing/table/DefaultTableModel
-javax/swing/table/JTableHeader
-javax/swing/table/TableCellEditor
-javax/swing/table/TableCellRenderer
-javax/swing/table/TableColumn
-javax/swing/table/TableColumnModel
-javax/swing/table/TableModel
-javax/swing/text/AbstractDocument
-javax/swing/text/AbstractDocument$1
-javax/swing/text/AbstractDocument$AbstractElement
-javax/swing/text/AbstractDocument$AttributeContext
-javax/swing/text/AbstractDocument$BidiElement
-javax/swing/text/AbstractDocument$BidiRootElement
-javax/swing/text/AbstractDocument$BranchElement
-javax/swing/text/AbstractDocument$Content
-javax/swing/text/AbstractDocument$DefaultDocumentEvent
-javax/swing/text/AbstractDocument$ElementEdit
-javax/swing/text/AbstractDocument$InsertStringResult
-javax/swing/text/AbstractDocument$LeafElement
-javax/swing/text/AttributeSet
-javax/swing/text/AttributeSet$CharacterAttribute
-javax/swing/text/AttributeSet$ColorAttribute
-javax/swing/text/AttributeSet$FontAttribute
-javax/swing/text/AttributeSet$ParagraphAttribute
-javax/swing/text/Caret
-javax/swing/text/DefaultCaret
-javax/swing/text/DefaultCaret$Handler
-javax/swing/text/DefaultEditorKit
-javax/swing/text/DefaultEditorKit$BeepAction
-javax/swing/text/DefaultEditorKit$BeginAction
-javax/swing/text/DefaultEditorKit$BeginLineAction
-javax/swing/text/DefaultEditorKit$BeginParagraphAction
-javax/swing/text/DefaultEditorKit$BeginWordAction
-javax/swing/text/DefaultEditorKit$CopyAction
-javax/swing/text/DefaultEditorKit$CutAction
-javax/swing/text/DefaultEditorKit$DefaultKeyTypedAction
-javax/swing/text/DefaultEditorKit$DeleteNextCharAction
-javax/swing/text/DefaultEditorKit$DeletePrevCharAction
-javax/swing/text/DefaultEditorKit$DeleteWordAction
-javax/swing/text/DefaultEditorKit$DumpModelAction
-javax/swing/text/DefaultEditorKit$EndAction
-javax/swing/text/DefaultEditorKit$EndLineAction
-javax/swing/text/DefaultEditorKit$EndParagraphAction
-javax/swing/text/DefaultEditorKit$EndWordAction
-javax/swing/text/DefaultEditorKit$InsertBreakAction
-javax/swing/text/DefaultEditorKit$InsertContentAction
-javax/swing/text/DefaultEditorKit$InsertTabAction
-javax/swing/text/DefaultEditorKit$NextVisualPositionAction
-javax/swing/text/DefaultEditorKit$NextWordAction
-javax/swing/text/DefaultEditorKit$PageAction
-javax/swing/text/DefaultEditorKit$PasteAction
-javax/swing/text/DefaultEditorKit$PreviousWordAction
-javax/swing/text/DefaultEditorKit$ReadOnlyAction
-javax/swing/text/DefaultEditorKit$SelectAllAction
-javax/swing/text/DefaultEditorKit$SelectLineAction
-javax/swing/text/DefaultEditorKit$SelectParagraphAction
-javax/swing/text/DefaultEditorKit$SelectWordAction
-javax/swing/text/DefaultEditorKit$ToggleComponentOrientationAction
-javax/swing/text/DefaultEditorKit$UnselectAction
-javax/swing/text/DefaultEditorKit$VerticalPageAction
-javax/swing/text/DefaultEditorKit$WritableAction
-javax/swing/text/DefaultHighlighter
-javax/swing/text/DefaultHighlighter$DefaultHighlightPainter
-javax/swing/text/DefaultHighlighter$SafeDamager
-javax/swing/text/Document
-javax/swing/text/EditorKit
-javax/swing/text/Element
-javax/swing/text/FieldView
-javax/swing/text/GapContent
-javax/swing/text/GapContent$InsertUndo
-javax/swing/text/GapContent$MarkData
-javax/swing/text/GapContent$MarkVector
-javax/swing/text/GapContent$StickyPosition
-javax/swing/text/GapVector
-javax/swing/text/Highlighter
-javax/swing/text/Highlighter$Highlight
-javax/swing/text/Highlighter$HighlightPainter
-javax/swing/text/JTextComponent
-javax/swing/text/JTextComponent$1
-javax/swing/text/JTextComponent$DefaultKeymap
-javax/swing/text/JTextComponent$KeymapActionMap
-javax/swing/text/JTextComponent$KeymapWrapper
-javax/swing/text/JTextComponent$MutableCaretEvent
-javax/swing/text/Keymap
-javax/swing/text/LayeredHighlighter
-javax/swing/text/LayeredHighlighter$LayerPainter
-javax/swing/text/MutableAttributeSet
-javax/swing/text/PlainDocument
-javax/swing/text/PlainView
-javax/swing/text/Position
-javax/swing/text/Position$Bias
-javax/swing/text/Segment
-javax/swing/text/SegmentCache
-javax/swing/text/SegmentCache$CachedSegment
-javax/swing/text/SimpleAttributeSet
-javax/swing/text/SimpleAttributeSet$EmptyAttributeSet
-javax/swing/text/Style
-javax/swing/text/StyleConstants
-javax/swing/text/StyleConstants$CharacterConstants
-javax/swing/text/StyleConstants$ColorConstants
-javax/swing/text/StyleConstants$FontConstants
-javax/swing/text/StyleConstants$ParagraphConstants
-javax/swing/text/StyleContext
-javax/swing/text/StyleContext$FontKey
-javax/swing/text/StyleContext$KeyEnumeration
-javax/swing/text/StyleContext$NamedStyle
-javax/swing/text/StyleContext$SmallAttributeSet
-javax/swing/text/TabExpander
-javax/swing/text/TextAction
-javax/swing/text/Utilities
-javax/swing/text/View
-javax/swing/text/ViewFactory
-javax/swing/tree/AbstractLayoutCache
-javax/swing/tree/AbstractLayoutCache$NodeDimensions
-javax/swing/tree/DefaultMutableTreeNode
-javax/swing/tree/DefaultMutableTreeNode$PreorderEnumeration
-javax/swing/tree/DefaultTreeCellEditor
-javax/swing/tree/DefaultTreeCellEditor$1
-javax/swing/tree/DefaultTreeCellEditor$DefaultTextField
-javax/swing/tree/DefaultTreeCellEditor$EditorContainer
-javax/swing/tree/DefaultTreeCellRenderer
-javax/swing/tree/DefaultTreeModel
-javax/swing/tree/DefaultTreeSelectionModel
-javax/swing/tree/MutableTreeNode
-javax/swing/tree/PathPlaceHolder
-javax/swing/tree/RowMapper
-javax/swing/tree/TreeCellEditor
-javax/swing/tree/TreeCellRenderer
-javax/swing/tree/TreeModel
-javax/swing/tree/TreeNode
-javax/swing/tree/TreePath
-javax/swing/tree/TreeSelectionModel
-javax/swing/tree/VariableHeightLayoutCache
-javax/swing/tree/VariableHeightLayoutCache$TreeStateNode
-javax/swing/undo/AbstractUndoableEdit
-javax/swing/undo/CompoundEdit
-javax/swing/undo/UndoableEdit
-javax/xml/parsers/DocumentBuilder
-javax/xml/parsers/DocumentBuilderFactory
-javax/xml/parsers/FactoryFinder
-javax/xml/parsers/FactoryFinder$1
-javax/xml/parsers/ParserConfigurationException
-javax/xml/parsers/SecuritySupport
-javax/xml/parsers/SecuritySupport$2
-javax/xml/parsers/SecuritySupport$5
-org/w3c/dom/Attr
-org/w3c/dom/CDATASection
-org/w3c/dom/CharacterData
-org/w3c/dom/Comment
-org/w3c/dom/DOMException
-org/w3c/dom/Document
-org/w3c/dom/DocumentFragment
-org/w3c/dom/DocumentType
-org/w3c/dom/Element
-org/w3c/dom/Entity
-org/w3c/dom/EntityReference
-org/w3c/dom/NamedNodeMap
-org/w3c/dom/Node
-org/w3c/dom/NodeList
-org/w3c/dom/Notation
-org/w3c/dom/ProcessingInstruction
-org/w3c/dom/Text
-org/w3c/dom/events/DocumentEvent
-org/w3c/dom/events/Event
-org/w3c/dom/events/EventException
-org/w3c/dom/events/EventTarget
-org/w3c/dom/events/MutationEvent
-org/w3c/dom/ranges/DocumentRange
-org/w3c/dom/ranges/Range
-org/w3c/dom/traversal/DocumentTraversal
-org/w3c/dom/traversal/NodeIterator
-org/w3c/dom/traversal/TreeWalker
-org/xml/sax/AttributeList
-org/xml/sax/ContentHandler
-org/xml/sax/DTDHandler
-org/xml/sax/EntityResolver
-org/xml/sax/ErrorHandler
-org/xml/sax/InputSource
-org/xml/sax/Locator
-org/xml/sax/SAXException
-org/xml/sax/SAXNotRecognizedException
-org/xml/sax/SAXNotSupportedException
-org/xml/sax/SAXParseException
-org/xml/sax/helpers/DefaultHandler
-sun/awt/AWTAccessor
-sun/awt/AWTAccessor$AWTEventAccessor
-sun/awt/AWTAccessor$ClientPropertyKeyAccessor
-sun/awt/AWTAccessor$ComponentAccessor
-sun/awt/AWTAccessor$ContainerAccessor
-sun/awt/AWTAccessor$CursorAccessor
-sun/awt/AWTAccessor$DefaultKeyboardFocusManagerAccessor
-sun/awt/AWTAccessor$EventQueueAccessor
-sun/awt/AWTAccessor$FrameAccessor
-sun/awt/AWTAccessor$InputEventAccessor
-sun/awt/AWTAccessor$InvocationEventAccessor
-sun/awt/AWTAccessor$KeyEventAccessor
-sun/awt/AWTAccessor$KeyboardFocusManagerAccessor
-sun/awt/AWTAccessor$SequencedEventAccessor
-sun/awt/AWTAccessor$ToolkitAccessor
-sun/awt/AWTAccessor$WindowAccessor
-sun/awt/AWTAutoShutdown
-sun/awt/AWTAutoShutdown$1
-sun/awt/AppContext
-sun/awt/AppContext$1
-sun/awt/AppContext$2
-sun/awt/AppContext$3
-sun/awt/AppContext$6
-sun/awt/AppContext$GetAppContextLock
-sun/awt/AppContext$PostShutdownEventRunnable
-sun/awt/AppContext$State
-sun/awt/CausedFocusEvent
-sun/awt/CausedFocusEvent$Cause
-sun/awt/ComponentFactory
-sun/awt/ConstrainableGraphics
-sun/awt/DisplayChangedListener
-sun/awt/EmbeddedFrame
-sun/awt/EventQueueDelegate
-sun/awt/EventQueueItem
-sun/awt/ExtendedKeyCodes
-sun/awt/FontConfiguration
-sun/awt/FontConfiguration$2
-sun/awt/FontDescriptor
-sun/awt/GlobalCursorManager
-sun/awt/GlobalCursorManager$NativeUpdater
-sun/awt/HeadlessToolkit
-sun/awt/InputMethodSupport
-sun/awt/KeyboardFocusManagerPeerImpl
-sun/awt/KeyboardFocusManagerPeerProvider
-sun/awt/LightweightFrame
-sun/awt/ModalExclude
-sun/awt/ModalityListener
-sun/awt/MostRecentKeyValue
-sun/awt/NativeLibLoader
-sun/awt/NativeLibLoader$1
-sun/awt/NullComponentPeer
-sun/awt/OSInfo
-sun/awt/OSInfo$1
-sun/awt/OSInfo$OSType
-sun/awt/OSInfo$WindowsVersion
-sun/awt/PaintEventDispatcher
-sun/awt/PeerEvent
-sun/awt/PlatformFont
-sun/awt/PostEventQueue
-sun/awt/RepaintArea
-sun/awt/RequestFocusController
-sun/awt/SubRegionShowable
-sun/awt/SunDisplayChanger
-sun/awt/SunGraphicsCallback
-sun/awt/SunHints
-sun/awt/SunHints$Key
-sun/awt/SunHints$LCDContrastKey
-sun/awt/SunHints$Value
-sun/awt/SunToolkit
-sun/awt/SunToolkit$ModalityListenerList
-sun/awt/Symbol
-sun/awt/Symbol$Encoder
-sun/awt/TimedWindowEvent
-sun/awt/Win32FontManager
-sun/awt/Win32FontManager$1
-sun/awt/Win32FontManager$2
-sun/awt/Win32GraphicsConfig
-sun/awt/Win32GraphicsDevice
-sun/awt/Win32GraphicsEnvironment
-sun/awt/WindowClosingListener
-sun/awt/WindowClosingSupport
-sun/awt/dnd/SunDragSourceContextPeer
-sun/awt/dnd/SunDropTargetEvent
-sun/awt/event/IgnorePaintEvent
-sun/awt/geom/PathConsumer2D
-sun/awt/im/ExecutableInputMethodManager
-sun/awt/im/ExecutableInputMethodManager$3
-sun/awt/im/InputContext
-sun/awt/im/InputMethodAdapter
-sun/awt/im/InputMethodContext
-sun/awt/im/InputMethodLocator
-sun/awt/im/InputMethodManager
-sun/awt/im/InputMethodWindow
-sun/awt/image/BufImgSurfaceData
-sun/awt/image/BufImgSurfaceData$ICMColorData
-sun/awt/image/BufImgSurfaceManager
-sun/awt/image/BufImgVolatileSurfaceManager
-sun/awt/image/BufferedImageDevice
-sun/awt/image/BufferedImageGraphicsConfig
-sun/awt/image/ByteComponentRaster
-sun/awt/image/ByteInterleavedRaster
-sun/awt/image/BytePackedRaster
-sun/awt/image/FetcherInfo
-sun/awt/image/GifFrame
-sun/awt/image/GifImageDecoder
-sun/awt/image/ImageConsumerQueue
-sun/awt/image/ImageDecoder
-sun/awt/image/ImageDecoder$1
-sun/awt/image/ImageFetchable
-sun/awt/image/ImageFetcher
-sun/awt/image/ImageFetcher$1
-sun/awt/image/ImageRepresentation
-sun/awt/image/ImageWatched
-sun/awt/image/ImageWatched$Link
-sun/awt/image/ImageWatched$WeakLink
-sun/awt/image/InputStreamImageSource
-sun/awt/image/IntegerComponentRaster
-sun/awt/image/IntegerInterleavedRaster
-sun/awt/image/NativeLibLoader
-sun/awt/image/NativeLibLoader$1
-sun/awt/image/OffScreenImage
-sun/awt/image/PNGFilterInputStream
-sun/awt/image/PNGImageDecoder
-sun/awt/image/PixelConverter
-sun/awt/image/PixelConverter$Argb
-sun/awt/image/PixelConverter$ArgbBm
-sun/awt/image/PixelConverter$ArgbPre
-sun/awt/image/PixelConverter$Bgrx
-sun/awt/image/PixelConverter$ByteGray
-sun/awt/image/PixelConverter$Rgba
-sun/awt/image/PixelConverter$RgbaPre
-sun/awt/image/PixelConverter$Rgbx
-sun/awt/image/PixelConverter$Ushort4444Argb
-sun/awt/image/PixelConverter$Ushort555Rgb
-sun/awt/image/PixelConverter$Ushort555Rgbx
-sun/awt/image/PixelConverter$Ushort565Rgb
-sun/awt/image/PixelConverter$UshortGray
-sun/awt/image/PixelConverter$Xbgr
-sun/awt/image/PixelConverter$Xrgb
-sun/awt/image/SunVolatileImage
-sun/awt/image/SunWritableRaster
-sun/awt/image/SunWritableRaster$DataStealer
-sun/awt/image/SurfaceManager
-sun/awt/image/SurfaceManager$FlushableCacheData
-sun/awt/image/SurfaceManager$ImageAccessor
-sun/awt/image/SurfaceManager$ProxiedGraphicsConfig
-sun/awt/image/ToolkitImage
-sun/awt/image/URLImageSource
-sun/awt/image/VolatileSurfaceManager
-sun/awt/resources/awt
-sun/awt/util/IdentityArrayList
-sun/awt/windows/ThemeReader
-sun/awt/windows/WCanvasPeer
-sun/awt/windows/WColor
-sun/awt/windows/WComponentPeer
-sun/awt/windows/WComponentPeer$2
-sun/awt/windows/WDesktopProperties
-sun/awt/windows/WDesktopProperties$WinPlaySound
-sun/awt/windows/WFontConfiguration
-sun/awt/windows/WFontPeer
-sun/awt/windows/WFramePeer
-sun/awt/windows/WGlobalCursorManager
-sun/awt/windows/WInputMethod
-sun/awt/windows/WInputMethodDescriptor
-sun/awt/windows/WKeyboardFocusManagerPeer
-sun/awt/windows/WLabelPeer
-sun/awt/windows/WObjectPeer
-sun/awt/windows/WPanelPeer
-sun/awt/windows/WToolkit
-sun/awt/windows/WToolkit$1
-sun/awt/windows/WToolkit$2
-sun/awt/windows/WToolkit$3
-sun/awt/windows/WToolkit$3$1
-sun/awt/windows/WToolkit$ToolkitDisposer
-sun/awt/windows/WWindowPeer
-sun/awt/windows/WWindowPeer$ActiveWindowListener
-sun/awt/windows/WWindowPeer$GuiDisposedListener
-sun/awt/windows/WingDings
-sun/awt/windows/WingDings$Encoder
-sun/dc/DuctusRenderingEngine
-sun/dc/path/PathConsumer
-sun/dc/pr/PathDasher
-sun/dc/pr/PathDasher$1
-sun/dc/pr/PathStroker
-sun/dc/pr/PathStroker$1
-sun/font/AttributeValues
-sun/font/CMap
-sun/font/CMap$CMapFormat4
-sun/font/CMap$NullCMapClass
-sun/font/CharToGlyphMapper
-sun/font/CompositeFont
-sun/font/CompositeFontDescriptor
-sun/font/CompositeGlyphMapper
-sun/font/CompositeStrike
-sun/font/CoreMetrics
-sun/font/EAttribute
-sun/font/FileFont
-sun/font/FileFontStrike
-sun/font/Font2D
-sun/font/Font2DHandle
-sun/font/FontAccess
-sun/font/FontDesignMetrics
-sun/font/FontDesignMetrics$KeyReference
-sun/font/FontDesignMetrics$MetricsKey
-sun/font/FontFamily
-sun/font/FontLineMetrics
-sun/font/FontManager
-sun/font/FontManagerFactory
-sun/font/FontManagerFactory$1
-sun/font/FontManagerForSGE
-sun/font/FontManagerNativeLibrary
-sun/font/FontManagerNativeLibrary$1
-sun/font/FontScaler
-sun/font/FontStrike
-sun/font/FontStrikeDesc
-sun/font/FontStrikeDisposer
-sun/font/FontUtilities
-sun/font/FontUtilities$1
-sun/font/GlyphList
-sun/font/PhysicalFont
-sun/font/PhysicalStrike
-sun/font/StandardGlyphVector
-sun/font/StandardGlyphVector$GlyphStrike
-sun/font/StrikeCache
-sun/font/StrikeCache$1
-sun/font/StrikeCache$DisposableStrike
-sun/font/StrikeCache$SoftDisposerRef
-sun/font/StrikeMetrics
-sun/font/SunFontManager
-sun/font/SunFontManager$1
-sun/font/SunFontManager$11
-sun/font/SunFontManager$12
-sun/font/SunFontManager$2
-sun/font/SunFontManager$3
-sun/font/SunFontManager$FamilyDescription
-sun/font/SunFontManager$FontRegistrationInfo
-sun/font/SunFontManager$T1Filter
-sun/font/SunFontManager$TTFilter
-sun/font/T2KFontScaler
-sun/font/T2KFontScaler$1
-sun/font/TrueTypeFont
-sun/font/TrueTypeFont$1
-sun/font/TrueTypeFont$DirectoryEntry
-sun/font/TrueTypeFont$TTDisposerRecord
-sun/font/TrueTypeGlyphMapper
-sun/font/Type1Font
-sun/io/Win32ErrorMode
-sun/java2d/DefaultDisposerRecord
-sun/java2d/DestSurfaceProvider
-sun/java2d/Disposer
-sun/java2d/Disposer$1
-sun/java2d/Disposer$2
-sun/java2d/Disposer$PollDisposable
-sun/java2d/DisposerRecord
-sun/java2d/DisposerTarget
-sun/java2d/FontSupport
-sun/java2d/InvalidPipeException
-sun/java2d/NullSurfaceData
-sun/java2d/ScreenUpdateManager
-sun/java2d/StateTrackable
-sun/java2d/StateTrackable$State
-sun/java2d/StateTrackableDelegate
-sun/java2d/StateTrackableDelegate$2
-sun/java2d/StateTracker
-sun/java2d/StateTracker$1
-sun/java2d/StateTracker$2
-sun/java2d/SunGraphics2D
-sun/java2d/SunGraphicsEnvironment
-sun/java2d/SunGraphicsEnvironment$1
-sun/java2d/Surface
-sun/java2d/SurfaceData
-sun/java2d/SurfaceData$PixelToPgramLoopConverter
-sun/java2d/SurfaceData$PixelToShapeLoopConverter
-sun/java2d/SurfaceDataProxy
-sun/java2d/SurfaceDataProxy$1
-sun/java2d/SurfaceManagerFactory
-sun/java2d/WindowsSurfaceManagerFactory
-sun/java2d/cmm/ProfileActivator
-sun/java2d/cmm/ProfileDeferralInfo
-sun/java2d/cmm/ProfileDeferralMgr
-sun/java2d/d3d/D3DContext$D3DContextCaps
-sun/java2d/d3d/D3DGraphicsConfig
-sun/java2d/d3d/D3DGraphicsDevice
-sun/java2d/d3d/D3DGraphicsDevice$1
-sun/java2d/d3d/D3DGraphicsDevice$1Result
-sun/java2d/d3d/D3DRenderQueue
-sun/java2d/d3d/D3DRenderQueue$1
-sun/java2d/d3d/D3DScreenUpdateManager
-sun/java2d/d3d/D3DScreenUpdateManager$1
-sun/java2d/d3d/D3DScreenUpdateManager$1$1
-sun/java2d/d3d/D3DSurfaceData
-sun/java2d/d3d/D3DSurfaceData$D3DWindowSurfaceData
-sun/java2d/loops/Blit
-sun/java2d/loops/BlitBg
-sun/java2d/loops/CompositeType
-sun/java2d/loops/CustomComponent
-sun/java2d/loops/DrawGlyphList
-sun/java2d/loops/DrawGlyphListAA
-sun/java2d/loops/DrawGlyphListLCD
-sun/java2d/loops/DrawLine
-sun/java2d/loops/DrawParallelogram
-sun/java2d/loops/DrawPath
-sun/java2d/loops/DrawPolygons
-sun/java2d/loops/DrawRect
-sun/java2d/loops/FillParallelogram
-sun/java2d/loops/FillPath
-sun/java2d/loops/FillRect
-sun/java2d/loops/FillSpans
-sun/java2d/loops/FontInfo
-sun/java2d/loops/GeneralRenderer
-sun/java2d/loops/GraphicsPrimitive
-sun/java2d/loops/GraphicsPrimitiveMgr
-sun/java2d/loops/GraphicsPrimitiveMgr$1
-sun/java2d/loops/GraphicsPrimitiveMgr$2
-sun/java2d/loops/GraphicsPrimitiveMgr$PrimitiveSpec
-sun/java2d/loops/GraphicsPrimitiveProxy
-sun/java2d/loops/MaskBlit
-sun/java2d/loops/MaskFill
-sun/java2d/loops/RenderCache
-sun/java2d/loops/RenderCache$Entry
-sun/java2d/loops/RenderLoops
-sun/java2d/loops/ScaledBlit
-sun/java2d/loops/SurfaceType
-sun/java2d/loops/TransformHelper
-sun/java2d/loops/XORComposite
-sun/java2d/opengl/OGLGraphicsConfig
-sun/java2d/opengl/WGLGraphicsConfig
-sun/java2d/pipe/AAShapePipe
-sun/java2d/pipe/AATextRenderer
-sun/java2d/pipe/AlphaColorPipe
-sun/java2d/pipe/AlphaPaintPipe
-sun/java2d/pipe/CompositePipe
-sun/java2d/pipe/DrawImage
-sun/java2d/pipe/DrawImagePipe
-sun/java2d/pipe/GeneralCompositePipe
-sun/java2d/pipe/GlyphListLoopPipe
-sun/java2d/pipe/GlyphListPipe
-sun/java2d/pipe/LCDTextRenderer
-sun/java2d/pipe/LoopBasedPipe
-sun/java2d/pipe/LoopPipe
-sun/java2d/pipe/NullPipe
-sun/java2d/pipe/OutlineTextRenderer
-sun/java2d/pipe/ParallelogramPipe
-sun/java2d/pipe/PixelDrawPipe
-sun/java2d/pipe/PixelFillPipe
-sun/java2d/pipe/PixelToParallelogramConverter
-sun/java2d/pipe/PixelToShapeConverter
-sun/java2d/pipe/Region
-sun/java2d/pipe/Region$ImmutableRegion
-sun/java2d/pipe/RegionIterator
-sun/java2d/pipe/RenderBuffer
-sun/java2d/pipe/RenderQueue
-sun/java2d/pipe/RenderingEngine
-sun/java2d/pipe/RenderingEngine$1
-sun/java2d/pipe/ShapeDrawPipe
-sun/java2d/pipe/ShapeSpanIterator
-sun/java2d/pipe/SolidTextRenderer
-sun/java2d/pipe/SpanClipRenderer
-sun/java2d/pipe/SpanIterator
-sun/java2d/pipe/SpanShapeRenderer
-sun/java2d/pipe/SpanShapeRenderer$Composite
-sun/java2d/pipe/TextPipe
-sun/java2d/pipe/TextRenderer
-sun/java2d/pipe/ValidatePipe
-sun/java2d/pipe/hw/AccelGraphicsConfig
-sun/java2d/pipe/hw/AccelSurface
-sun/java2d/pipe/hw/BufferedContextProvider
-sun/java2d/pipe/hw/ContextCapabilities
-sun/java2d/windows/GDIBlitLoops
-sun/java2d/windows/GDIRenderer
-sun/java2d/windows/GDIWindowSurfaceData
-sun/java2d/windows/WindowsFlags
-sun/java2d/windows/WindowsFlags$1
-sun/launcher/LauncherHelper
-sun/launcher/LauncherHelper$FXHelper
-sun/misc/ASCIICaseInsensitiveComparator
-sun/misc/Cleaner
-sun/misc/CompoundEnumeration
-sun/misc/ExtensionDependency
-sun/misc/FDBigInteger
-sun/misc/FileURLMapper
-sun/misc/FloatingDecimal
-sun/misc/FloatingDecimal$1
-sun/misc/FloatingDecimal$ASCIIToBinaryBuffer
-sun/misc/FloatingDecimal$ASCIIToBinaryConverter
-sun/misc/FloatingDecimal$BinaryToASCIIBuffer
-sun/misc/FloatingDecimal$BinaryToASCIIConverter
-sun/misc/FloatingDecimal$ExceptionalBinaryToASCIIBuffer
-sun/misc/FloatingDecimal$PreparedASCIIToBinaryBuffer
-sun/misc/IOUtils
-sun/misc/JarIndex
-sun/misc/JavaAWTAccess
-sun/misc/JavaIOFileDescriptorAccess
-sun/misc/JavaLangAccess
-sun/misc/JavaNetAccess
-sun/misc/JavaNioAccess
-sun/misc/JavaSecurityAccess
-sun/misc/JavaSecurityProtectionDomainAccess
-sun/misc/JavaUtilJarAccess
-sun/misc/JavaUtilZipFileAccess
-sun/misc/Launcher
-sun/misc/Launcher$AppClassLoader
-sun/misc/Launcher$AppClassLoader$1
-sun/misc/Launcher$BootClassPathHolder
-sun/misc/Launcher$BootClassPathHolder$1
-sun/misc/Launcher$ExtClassLoader
-sun/misc/Launcher$ExtClassLoader$1
-sun/misc/Launcher$Factory
-sun/misc/MetaIndex
-sun/misc/NativeSignalHandler
-sun/misc/OSEnvironment
-sun/misc/Perf
-sun/misc/Perf$GetPerfAction
-sun/misc/PerfCounter
-sun/misc/PerfCounter$CoreCounters
-sun/misc/PerfCounter$WindowsClientCounters
-sun/misc/PerformanceLogger
-sun/misc/PerformanceLogger$TimeData
-sun/misc/PostVMInitHook
-sun/misc/Resource
-sun/misc/SharedSecrets
-sun/misc/Signal
-sun/misc/SignalHandler
-sun/misc/SoftCache
-sun/misc/SoftCache$ValueCell
-sun/misc/URLClassPath
-sun/misc/URLClassPath$1
-sun/misc/URLClassPath$2
-sun/misc/URLClassPath$3
-sun/misc/URLClassPath$FileLoader
-sun/misc/URLClassPath$JarLoader
-sun/misc/URLClassPath$JarLoader$1
-sun/misc/URLClassPath$JarLoader$2
-sun/misc/URLClassPath$Loader
-sun/misc/Unsafe
-sun/misc/VM
-sun/misc/Version
-sun/net/DefaultProgressMeteringPolicy
-sun/net/InetAddressCachePolicy
-sun/net/InetAddressCachePolicy$1
-sun/net/InetAddressCachePolicy$2
-sun/net/NetHooks
-sun/net/NetProperties
-sun/net/NetProperties$1
-sun/net/ProgressMeteringPolicy
-sun/net/ProgressMonitor
-sun/net/ResourceManager
-sun/net/spi/DefaultProxySelector
-sun/net/spi/DefaultProxySelector$1
-sun/net/spi/DefaultProxySelector$3
-sun/net/spi/DefaultProxySelector$NonProxyInfo
-sun/net/spi/nameservice/NameService
-sun/net/util/IPAddressUtil
-sun/net/util/URLUtil
-sun/net/www/MessageHeader
-sun/net/www/MimeEntry
-sun/net/www/MimeTable
-sun/net/www/MimeTable$1
-sun/net/www/MimeTable$DefaultInstanceHolder
-sun/net/www/MimeTable$DefaultInstanceHolder$1
-sun/net/www/ParseUtil
-sun/net/www/URLConnection
-sun/net/www/protocol/file/FileURLConnection
-sun/net/www/protocol/file/Handler
-sun/net/www/protocol/http/Handler
-sun/net/www/protocol/jar/Handler
-sun/net/www/protocol/jar/JarFileFactory
-sun/net/www/protocol/jar/JarURLConnection
-sun/net/www/protocol/jar/JarURLConnection$JarURLInputStream
-sun/net/www/protocol/jar/URLJarFile
-sun/net/www/protocol/jar/URLJarFile$URLJarFileCloseController
-sun/net/www/protocol/jar/URLJarFile$URLJarFileEntry
-sun/nio/ByteBuffered
-sun/nio/ch/DirectBuffer
-sun/nio/ch/FileChannelImpl
-sun/nio/ch/FileDispatcher
-sun/nio/ch/FileDispatcherImpl
-sun/nio/ch/IOStatus
-sun/nio/ch/IOUtil
-sun/nio/ch/IOUtil$1
-sun/nio/ch/Interruptible
-sun/nio/ch/NativeDispatcher
-sun/nio/ch/NativeThread
-sun/nio/ch/NativeThreadSet
-sun/nio/ch/Util
-sun/nio/ch/Util$1
-sun/nio/ch/Util$BufferCache
-sun/nio/cs/ArrayDecoder
-sun/nio/cs/ArrayEncoder
-sun/nio/cs/FastCharsetProvider
-sun/nio/cs/HistoricallyNamedCharset
-sun/nio/cs/ISO_8859_1
-sun/nio/cs/MS1252
-sun/nio/cs/SingleByte
-sun/nio/cs/SingleByte$Decoder
-sun/nio/cs/SingleByte$Encoder
-sun/nio/cs/StandardCharsets
-sun/nio/cs/StandardCharsets$Aliases
-sun/nio/cs/StandardCharsets$Cache
-sun/nio/cs/StandardCharsets$Classes
-sun/nio/cs/StreamDecoder
-sun/nio/cs/StreamEncoder
-sun/nio/cs/Surrogate
-sun/nio/cs/Surrogate$Parser
-sun/nio/cs/US_ASCII
-sun/nio/cs/UTF_16
-sun/nio/cs/UTF_16$Decoder
-sun/nio/cs/UTF_16BE
-sun/nio/cs/UTF_16LE
-sun/nio/cs/UTF_16LE$Decoder
-sun/nio/cs/UTF_16LE$Encoder
-sun/nio/cs/UTF_8
-sun/nio/cs/UTF_8$Decoder
-sun/nio/cs/UTF_8$Encoder
-sun/nio/cs/Unicode
-sun/nio/cs/UnicodeDecoder
-sun/nio/cs/UnicodeEncoder
-sun/print/PrinterGraphicsConfig
-sun/reflect/AccessorGenerator
-sun/reflect/BootstrapConstructorAccessorImpl
-sun/reflect/ByteVector
-sun/reflect/ByteVectorFactory
-sun/reflect/ByteVectorImpl
-sun/reflect/CallerSensitive
-sun/reflect/ClassDefiner
-sun/reflect/ClassDefiner$1
-sun/reflect/ClassFileAssembler
-sun/reflect/ClassFileConstants
-sun/reflect/ConstantPool
-sun/reflect/ConstructorAccessor
-sun/reflect/ConstructorAccessorImpl
-sun/reflect/DelegatingClassLoader
-sun/reflect/DelegatingConstructorAccessorImpl
-sun/reflect/DelegatingMethodAccessorImpl
-sun/reflect/FieldAccessor
-sun/reflect/FieldAccessorImpl
-sun/reflect/Label
-sun/reflect/Label$PatchInfo
-sun/reflect/LangReflectAccess
-sun/reflect/MagicAccessorImpl
-sun/reflect/MethodAccessor
-sun/reflect/MethodAccessorGenerator
-sun/reflect/MethodAccessorGenerator$1
-sun/reflect/MethodAccessorImpl
-sun/reflect/NativeConstructorAccessorImpl
-sun/reflect/NativeMethodAccessorImpl
-sun/reflect/Reflection
-sun/reflect/ReflectionFactory
-sun/reflect/ReflectionFactory$1
-sun/reflect/ReflectionFactory$GetReflectionFactoryAction
-sun/reflect/SerializationConstructorAccessorImpl
-sun/reflect/UTF8
-sun/reflect/UnsafeFieldAccessorFactory
-sun/reflect/UnsafeFieldAccessorImpl
-sun/reflect/UnsafeObjectFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticIntegerFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticLongFieldAccessorImpl
-sun/reflect/UnsafeQualifiedStaticObjectFieldAccessorImpl
-sun/reflect/UnsafeStaticFieldAccessorImpl
-sun/reflect/annotation/AnnotationType
-sun/reflect/generics/repository/AbstractRepository
-sun/reflect/generics/repository/ClassRepository
-sun/reflect/generics/repository/GenericDeclRepository
-sun/reflect/misc/MethodUtil
-sun/reflect/misc/MethodUtil$1
-sun/reflect/misc/ReflectUtil
-sun/security/action/GetBooleanAction
-sun/security/action/GetIntegerAction
-sun/security/action/GetPropertyAction
-sun/security/jca/GetInstance
-sun/security/jca/GetInstance$Instance
-sun/security/jca/ProviderConfig
-sun/security/jca/ProviderConfig$2
-sun/security/jca/ProviderList
-sun/security/jca/ProviderList$1
-sun/security/jca/ProviderList$2
-sun/security/jca/ProviderList$3
-sun/security/jca/ProviderList$ServiceList
-sun/security/jca/ProviderList$ServiceList$1
-sun/security/jca/Providers
-sun/security/jca/ServiceId
-sun/security/provider/ByteArrayAccess
-sun/security/provider/DSA
-sun/security/provider/DSA$LegacyDSA
-sun/security/provider/DSA$SHA1withDSA
-sun/security/provider/DSAParameters
-sun/security/provider/DSAPublicKey
-sun/security/provider/DigestBase
-sun/security/provider/NativePRNG
-sun/security/provider/NativePRNG$Blocking
-sun/security/provider/NativePRNG$NonBlocking
-sun/security/provider/SHA
-sun/security/provider/Sun
-sun/security/provider/SunEntries
-sun/security/provider/SunEntries$1
-sun/security/util/ByteArrayLexOrder
-sun/security/util/ByteArrayTagOrder
-sun/security/util/Debug
-sun/security/util/DerEncoder
-sun/security/util/DerIndefLenConverter
-sun/security/util/DerInputBuffer
-sun/security/util/DerInputStream
-sun/security/util/DerOutputStream
-sun/security/util/DerValue
-sun/security/util/ManifestEntryVerifier
-sun/security/util/ObjectIdentifier
-sun/security/util/SignatureFileVerifier
-sun/security/x509/AlgorithmId
-sun/security/x509/X509Key
-sun/swing/DefaultLookup
-sun/swing/ImageIconUIResource
-sun/swing/JLightweightFrame
-sun/swing/MenuItemLayoutHelper
-sun/swing/MenuItemLayoutHelper$ColumnAlignment
-sun/swing/MenuItemLayoutHelper$LayoutResult
-sun/swing/MenuItemLayoutHelper$RectSize
-sun/swing/PrintColorUIResource
-sun/swing/StringUIClientPropertyKey
-sun/swing/SwingAccessor
-sun/swing/SwingAccessor$JTextComponentAccessor
-sun/swing/SwingLazyValue
-sun/swing/SwingLazyValue$1
-sun/swing/SwingUtilities2
-sun/swing/SwingUtilities2$2
-sun/swing/SwingUtilities2$AATextInfo
-sun/swing/SwingUtilities2$LSBCacheEntry
-sun/swing/UIAction
-sun/swing/UIClientPropertyKey
-sun/swing/table/DefaultTableCellHeaderRenderer
-sun/swing/table/DefaultTableCellHeaderRenderer$EmptyIcon
-sun/text/ComposedCharIter
-sun/text/IntHashtable
-sun/text/UCompactIntArray
-sun/text/normalizer/CharTrie
-sun/text/normalizer/CharTrie$FriendAgent
-sun/text/normalizer/ICUBinary
-sun/text/normalizer/ICUBinary$Authenticate
-sun/text/normalizer/ICUData
-sun/text/normalizer/IntTrie
-sun/text/normalizer/NormalizerDataReader
-sun/text/normalizer/NormalizerImpl
-sun/text/normalizer/NormalizerImpl$AuxTrieImpl
-sun/text/normalizer/NormalizerImpl$DecomposeArgs
-sun/text/normalizer/NormalizerImpl$FCDTrieImpl
-sun/text/normalizer/NormalizerImpl$NormTrieImpl
-sun/text/normalizer/Trie
-sun/text/normalizer/Trie$DataManipulate
-sun/text/normalizer/UTF16
-sun/text/normalizer/UnicodeMatcher
-sun/text/normalizer/UnicodeSet
-sun/text/resources/CollationData
-sun/text/resources/FormatData
-sun/text/resources/en/FormatData_en
-sun/text/resources/en/FormatData_en_US
-sun/util/CoreResourceBundleControl
-sun/util/PreHashedMap
-sun/util/ResourceBundleEnumeration
-sun/util/calendar/AbstractCalendar
-sun/util/calendar/BaseCalendar
-sun/util/calendar/BaseCalendar$Date
-sun/util/calendar/CalendarDate
-sun/util/calendar/CalendarSystem
-sun/util/calendar/CalendarUtils
-sun/util/calendar/Gregorian
-sun/util/calendar/Gregorian$Date
-sun/util/calendar/ZoneInfo
-sun/util/calendar/ZoneInfoFile
-sun/util/calendar/ZoneInfoFile$1
-sun/util/calendar/ZoneInfoFile$Checksum
-sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule
-sun/util/locale/BaseLocale
-sun/util/locale/BaseLocale$Cache
-sun/util/locale/BaseLocale$Key
-sun/util/locale/InternalLocaleBuilder
-sun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar
-sun/util/locale/LanguageTag
-sun/util/locale/LocaleObjectCache
-sun/util/locale/LocaleObjectCache$CacheEntry
-sun/util/locale/LocaleUtils
-sun/util/locale/ParseStatus
-sun/util/locale/StringTokenIterator
-sun/util/locale/provider/AuxLocaleProviderAdapter
-sun/util/locale/provider/AuxLocaleProviderAdapter$NullProvider
-sun/util/locale/provider/AvailableLanguageTags
-sun/util/locale/provider/CalendarDataProviderImpl
-sun/util/locale/provider/CalendarDataUtility
-sun/util/locale/provider/CalendarDataUtility$CalendarWeekParameterGetter
-sun/util/locale/provider/CalendarProviderImpl
-sun/util/locale/provider/CollatorProviderImpl
-sun/util/locale/provider/CurrencyNameProviderImpl
-sun/util/locale/provider/DateFormatSymbolsProviderImpl
-sun/util/locale/provider/DecimalFormatSymbolsProviderImpl
-sun/util/locale/provider/JRELocaleProviderAdapter
-sun/util/locale/provider/JRELocaleProviderAdapter$1
-sun/util/locale/provider/LocaleDataMetaInfo
-sun/util/locale/provider/LocaleProviderAdapter
-sun/util/locale/provider/LocaleProviderAdapter$1
-sun/util/locale/provider/LocaleProviderAdapter$Type
-sun/util/locale/provider/LocaleResources
-sun/util/locale/provider/LocaleResources$ResourceReference
-sun/util/locale/provider/LocaleServiceProviderPool
-sun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter
-sun/util/locale/provider/NumberFormatProviderImpl
-sun/util/locale/provider/ResourceBundleBasedAdapter
-sun/util/locale/provider/SPILocaleProviderAdapter
-sun/util/locale/provider/SPILocaleProviderAdapter$1
-sun/util/locale/provider/TimeZoneNameProviderImpl
-sun/util/locale/provider/TimeZoneNameUtility
-sun/util/locale/provider/TimeZoneNameUtility$TimeZoneNameGetter
-sun/util/logging/LoggingProxy
-sun/util/logging/LoggingSupport
-sun/util/logging/LoggingSupport$1
-sun/util/logging/LoggingSupport$2
-sun/util/logging/PlatformLogger
-sun/util/logging/PlatformLogger$1
-sun/util/logging/PlatformLogger$DefaultLoggerProxy
-sun/util/logging/PlatformLogger$JavaLoggerProxy
-sun/util/logging/PlatformLogger$Level
-sun/util/logging/PlatformLogger$LoggerProxy
-sun/util/logging/resources/logging
-sun/util/resources/CalendarData
-sun/util/resources/CurrencyNames
-sun/util/resources/LocaleData
-sun/util/resources/LocaleData$1
-sun/util/resources/LocaleData$LocaleDataResourceBundleControl
-sun/util/resources/LocaleNamesBundle
-sun/util/resources/OpenListResourceBundle
-sun/util/resources/ParallelListResourceBundle
-sun/util/resources/ParallelListResourceBundle$KeySet
-sun/util/resources/TimeZoneNames
-sun/util/resources/TimeZoneNamesBundle
-sun/util/resources/en/CalendarData_en
-sun/util/resources/en/CurrencyNames_en_US
-sun/util/resources/en/TimeZoneNames_en
-sun/util/spi/CalendarProvider
-# 729efa63b41fc759
--- a/jdk/make/data/x11wrappergen/sizes.32 Mon May 09 12:55:03 2016 +0300
+++ b/jdk/make/data/x11wrappergen/sizes.32 Mon May 09 08:50:20 2016 -0700
@@ -206,7 +206,8 @@
ColorData.img_oda_blue 32
ColorData.pGrayInverseLutData 36
ColorData.screendata 40
-ColorData 44
+ColorData.representsPrimaries 44
+ColorData 48
XFontStruct.ext_data 0
XFontStruct.fid 4
XFontStruct.direction 8
--- a/jdk/make/data/x11wrappergen/sizes.64 Mon May 09 12:55:03 2016 +0300
+++ b/jdk/make/data/x11wrappergen/sizes.64 Mon May 09 08:50:20 2016 -0700
@@ -206,6 +206,7 @@
ColorData.img_oda_blue 64
ColorData.pGrayInverseLutData 72
ColorData.screendata 80
+ColorData.representsPrimaries 84
ColorData 88
XFontStruct.ext_data 0
XFontStruct.fid 8
--- a/jdk/make/data/x11wrappergen/sizes.64-solaris-i386 Mon May 09 12:55:03 2016 +0300
+++ b/jdk/make/data/x11wrappergen/sizes.64-solaris-i386 Mon May 09 08:50:20 2016 -0700
@@ -206,6 +206,7 @@
ColorData.img_oda_blue 64
ColorData.pGrayInverseLutData 72
ColorData.screendata 80
+ColorData.representsPrimaries 84
ColorData 88
XFontStruct.ext_data 0
XFontStruct.fid 8
--- a/jdk/make/data/x11wrappergen/xlibtypes.txt Mon May 09 12:55:03 2016 +0300
+++ b/jdk/make/data/x11wrappergen/xlibtypes.txt Mon May 09 08:50:20 2016 -0700
@@ -749,6 +749,7 @@
img_oda_blue pointer byte
pGrayInverseLutData pointer int
screendata int
+ representsPrimaries int
AwtGraphicsConfigData
awt_depth int
--- a/jdk/make/gendata/Gendata-java.base.gmk Mon May 09 12:55:03 2016 +0300
+++ b/jdk/make/gendata/Gendata-java.base.gmk Mon May 09 08:50:20 2016 -0700
@@ -75,14 +75,3 @@
TARGETS += $(GENDATA_JAVA_SECURITY)
################################################################################
-
-$(SUPPORT_OUTPUTDIR)/modules_libs/java.base/classlist: \
- $(JDK_TOPDIR)/make/data/classlist/classlist.$(OPENJDK_TARGET_OS)
- $(call MakeDir, $(@D))
- $(RM) $@ $@.tmp
- $(TOOL_ADDJSUM) $< $@.tmp
- $(MV) $@.tmp $@
-
-TARGETS += $(SUPPORT_OUTPUTDIR)/modules_libs/java.base/classlist
-
-################################################################################
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/src/classes/build/tools/classlist/HelloClasslist.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * This application is meant to be run to create a classlist file representing
+ * common use.
+ *
+ * The classlist is produced by adding -XX:DumpLoadedClassList=classlist
+ */
+package build.tools.classlist;
+
+import java.net.InetAddress;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.stream.Stream;
+import java.util.logging.*;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+import java.text.DateFormat;
+
+import static java.util.stream.Collectors.*;
+
+/**
+ * This class is used to generate a classlist during build. Intent
+ * is to touch a reasonable amount of JDK classes that are commonly
+ * loaded and used early.
+ */
+public class HelloClasslist {
+
+ private static final Logger LOGGER = Logger.getLogger("Hello");
+
+ public static void main(String ... args) {
+
+ List<String> strings = Arrays.asList("Hello", "World!", "From: ",
+ InetAddress.getLoopbackAddress().toString());
+
+ String helloWorld = strings.parallelStream()
+ .map(s -> s.toLowerCase(Locale.ROOT))
+ .collect(joining(","));
+
+ Stream.of(helloWorld.split(","))
+ .forEach(System.out::println);
+
+ String newDate = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(
+ LocalDateTime.now(ZoneId.of("GMT")));
+
+ String oldDate = String.format("%s%n",
+ DateFormat.getDateInstance(DateFormat.DEFAULT, Locale.ROOT)
+ .format(new Date()));
+
+ LOGGER.log(Level.INFO, "New Date: " + newDate + " - old: " + oldDate);
+ }
+
+}
--- a/jdk/src/java.base/linux/native/libnio/ch/EPollArrayWrapper.c Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/linux/native/libnio/ch/EPollArrayWrapper.c Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -53,7 +53,7 @@
start = t.tv_sec * 1000 + t.tv_usec / 1000;
for (;;) {
- int res = epoll_wait(epfd, events, numfds, timeout);
+ int res = epoll_wait(epfd, events, numfds, remaining);
if (res < 0 && errno == EINTR) {
if (remaining >= 0) {
gettimeofday(&t, NULL);
--- a/jdk/src/java.base/share/classes/com/sun/crypto/provider/HmacCore.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/com/sun/crypto/provider/HmacCore.java Mon May 09 08:50:20 2016 -0700
@@ -262,4 +262,14 @@
super("SHA-512", 128);
}
}
+ public static final class HmacSHA512_224 extends HmacCore {
+ public HmacSHA512_224() throws NoSuchAlgorithmException {
+ super("SHA-512/224", 128);
+ }
+ }
+ public static final class HmacSHA512_256 extends HmacCore {
+ public HmacSHA512_256() throws NoSuchAlgorithmException {
+ super("SHA-512/256", 128);
+ }
+ }
}
--- a/jdk/src/java.base/share/classes/com/sun/crypto/provider/SunJCE.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/com/sun/crypto/provider/SunJCE.java Mon May 09 08:50:20 2016 -0700
@@ -704,6 +704,12 @@
put("Alg.Alias.Mac.OID.1.2.840.113549.2.11", "HmacSHA512");
put("Alg.Alias.Mac.1.2.840.113549.2.11", "HmacSHA512");
+ // TODO: aliases with OIDs
+ put("Mac.HmacSHA512/224",
+ "com.sun.crypto.provider.HmacCore$HmacSHA512_224");
+ put("Mac.HmacSHA512/256",
+ "com.sun.crypto.provider.HmacCore$HmacSHA512_256");
+
put("Mac.HmacPBESHA1",
"com.sun.crypto.provider.HmacPKCS12PBESHA1");
--- a/jdk/src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java Mon May 09 08:50:20 2016 -0700
@@ -33,8 +33,6 @@
import sun.invoke.util.Wrapper;
import java.lang.ref.WeakReference;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Objects;
--- a/jdk/src/java.base/share/classes/java/lang/invoke/Invokers.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/Invokers.java Mon May 09 08:50:20 2016 -0700
@@ -396,7 +396,7 @@
LambdaForm lform = new LambdaForm(name + ":VarHandle_invoke_MT_" + shortenSignature(basicTypeSignature(mtype)),
ARG_LIMIT + 1, names);
- lform.prepare();
+ lform.compileToBytecode();
return lform;
}
@@ -448,7 +448,7 @@
LambdaForm lform = new LambdaForm(name + ":VarHandle_exactInvoker" + shortenSignature(basicTypeSignature(mtype)),
ARG_LIMIT, names);
- lform.prepare();
+ lform.compileToBytecode();
return lform;
}
@@ -497,44 +497,33 @@
/*non-public*/ static
@ForceInline
- MethodHandle checkVarHandleGenericType(VarHandle vh, VarHandle.AccessDescriptor vad) {
- MethodType expected = vad.symbolicMethodType;
- MethodType actual = VarHandle.AccessType.getMethodType(vad.type, vh);
-
- MemberName mn = VarHandle.AccessMode.getMemberName(vad.mode, vh.vform);
- if (mn == null)
- throw vh.unsupported();
- // TODO the following MH is not constant, cache in stable field array
- // on VarForm?
- MethodHandle mh = DirectMethodHandle.make(mn);
- if (actual == expected) {
+ MethodHandle checkVarHandleGenericType(VarHandle handle, VarHandle.AccessDescriptor ad) {
+ // Test for exact match on invoker types
+ // TODO match with erased types and add cast of return value to lambda form
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ if (mh.type() == ad.symbolicMethodTypeInvoker) {
return mh;
}
else {
- // Adapt to the actual (which should never fail since mh's method
- // type is in the basic form), then to the expected (which my fail
- // if the symbolic type descriptor does not match)
- // TODO optimize for the case of actual.erased() == expected.erased()
- return mh.asType(actual.insertParameterTypes(0, VarHandle.class)).
- asType(expected.insertParameterTypes(0, VarHandle.class));
+ return mh.asType(ad.symbolicMethodTypeInvoker);
}
}
/*non-public*/ static
@ForceInline
- void checkVarHandleExactType(VarHandle vh, VarHandle.AccessDescriptor vad) {
- MethodType expected = vad.symbolicMethodType;
- MethodType actual = VarHandle.AccessType.getMethodType(vad.type, vh);
- if (actual != expected)
- throw newWrongMethodTypeException(expected, actual);
+ void checkVarHandleExactType(VarHandle handle, VarHandle.AccessDescriptor ad) {
+ MethodType erasedTarget = handle.vform.methodType_table[ad.type];
+ MethodType erasedSymbolic = ad.symbolicMethodTypeErased;
+ if (erasedTarget != erasedSymbolic)
+ throw newWrongMethodTypeException(erasedTarget, erasedSymbolic);
}
/*non-public*/ static
@ForceInline
- MemberName getVarHandleMemberName(VarHandle vh, VarHandle.AccessDescriptor vad) {
- MemberName mn = VarHandle.AccessMode.getMemberName(vad.mode, vh.vform);
+ MemberName getVarHandleMemberName(VarHandle handle, VarHandle.AccessDescriptor ad) {
+ MemberName mn = handle.vform.memberName_table[ad.mode];
if (mn == null) {
- throw vh.unsupported();
+ throw handle.unsupported();
}
return mn;
}
--- a/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleNatives.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/MethodHandleNatives.java Mon May 09 08:50:20 2016 -0700
@@ -430,14 +430,14 @@
// If not polymorphic in the return type, such as the compareAndSet
// methods that return boolean
- if (ak.isPolyMorphicInReturnType) {
- if (ak.returnType != mtype.returnType()) {
+ if (ak.at.isMonomorphicInReturnType) {
+ if (ak.at.returnType != mtype.returnType()) {
// The caller contains a different return type than that
// defined by the method
throw newNoSuchMethodErrorOnVarHandle(name, mtype);
}
// Adjust the return type of the signature method type
- sigType = sigType.changeReturnType(ak.returnType);
+ sigType = sigType.changeReturnType(ak.at.returnType);
}
// Get the guard method type for linking
@@ -455,26 +455,25 @@
MemberName linker = new MemberName(
VarHandleGuards.class, "guard_" + getVarHandleMethodSignature(sigType),
guardType, REF_invokeStatic);
- try {
- return MemberName.getFactory().resolveOrFail(
- REF_invokeStatic, linker, VarHandleGuards.class, ReflectiveOperationException.class);
- } catch (ReflectiveOperationException ex) {
- // Fall back to lambda form linkage if guard method is not available
- // TODO Optionally log fallback ?
+
+ linker = MemberName.getFactory().resolveOrNull(REF_invokeStatic, linker,
+ VarHandleGuards.class);
+ if (linker != null) {
+ return linker;
}
+ // Fall back to lambda form linkage if guard method is not available
+ // TODO Optionally log fallback ?
}
return Invokers.varHandleInvokeLinkerMethod(name, mtype);
}
static String getVarHandleMethodSignature(MethodType mt) {
- StringBuilder sb = new StringBuilder(mt.parameterCount() + 1);
+ StringBuilder sb = new StringBuilder(mt.parameterCount() + 2);
for (int i = 0; i < mt.parameterCount(); i++) {
Class<?> pt = mt.parameterType(i);
sb.append(getCharType(pt));
}
-
sb.append('_').append(getCharType(mt.returnType()));
-
return sb.toString();
}
static char getCharType(Class<?> pt) {
--- a/jdk/src/java.base/share/classes/java/lang/invoke/VarForm.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/VarForm.java Mon May 09 08:50:20 2016 -0700
@@ -24,42 +24,102 @@
*/
package java.lang.invoke;
+import jdk.internal.vm.annotation.ForceInline;
import jdk.internal.vm.annotation.Stable;
import java.lang.invoke.VarHandle.AccessMode;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
/**
* A var handle form containing a set of member name, one for each operation.
* Each member characterizes a static method.
*/
-class VarForm {
+final class VarForm {
+
+ final @Stable MethodType[] methodType_table;
+
+ final @Stable MemberName[] memberName_table;
+
+ VarForm(Class<?> implClass, Class<?> receiver, Class<?> value, Class<?>... intermediate) {
+ this.methodType_table = new MethodType[VarHandle.AccessType.values().length];
+
+ // TODO lazily calculate
+ this.memberName_table = linkFromStatic(implClass);
+
+ // (Receiver, <Intermediates>)
+ List<Class<?>> l = new ArrayList<>();
+ if (receiver != null)
+ l.add(receiver);
+ l.addAll(Arrays.asList(intermediate));
- // Holds VarForm for VarHandle implementation classes
- private static final ClassValue<VarForm> VFORMS
- = new ClassValue<>() {
- @Override
- protected VarForm computeValue(Class<?> impl) {
- return new VarForm(linkFromStatic(impl));
- }
- };
+ // (Receiver, <Intermediates>)Value
+ methodType_table[VarHandle.AccessType.GET.ordinal()] =
+ MethodType.methodType(value, l).erase();
+
+ // (Receiver, <Intermediates>, Value)void
+ l.add(value);
+ methodType_table[VarHandle.AccessType.SET.ordinal()] =
+ MethodType.methodType(void.class, l).erase();
- final @Stable MemberName[] table;
+ // (Receiver, <Intermediates>, Value)Value
+ methodType_table[VarHandle.AccessType.GET_AND_UPDATE.ordinal()] =
+ MethodType.methodType(value, l).erase();
- VarForm(MemberName[] table) {
- this.table = table;
+ // (Receiver, <Intermediates>, Value, Value)boolean
+ l.add(value);
+ methodType_table[VarHandle.AccessType.COMPARE_AND_SWAP.ordinal()] =
+ MethodType.methodType(boolean.class, l).erase();
+
+ // (Receiver, <Intermediates>, Value, Value)Value
+ methodType_table[VarHandle.AccessType.COMPARE_AND_EXCHANGE.ordinal()] =
+ MethodType.methodType(value, l).erase();
}
- /**
- * Creates a var form given an VarHandle implementation class.
- * Each signature polymorphic method is linked to a static method of the
- * same name on the implementation class or a super class.
- */
- static VarForm createFromStatic(Class<? extends VarHandle> impl) {
- return VFORMS.get(impl);
+ @ForceInline
+ final MethodType getMethodType(int type) {
+ return methodType_table[type];
+ }
+
+ @ForceInline
+ final MemberName getMemberName(int mode) {
+ // TODO calculate lazily
+ MemberName mn = memberName_table[mode];
+ if (mn == null) {
+ throw new UnsupportedOperationException();
+ }
+ return mn;
}
+
+ @Stable
+ MethodType[] methodType_V_table;
+
+ @ForceInline
+ final MethodType[] getMethodType_V_init() {
+ MethodType[] table = new MethodType[VarHandle.AccessType.values().length];
+ for (int i = 0; i < methodType_table.length; i++) {
+ MethodType mt = methodType_table[i];
+ // TODO only adjust for sig-poly methods returning Object
+ table[i] = mt.changeReturnType(void.class);
+ }
+ methodType_V_table = table;
+ return table;
+ }
+
+ @ForceInline
+ final MethodType getMethodType_V(int type) {
+ MethodType[] table = methodType_V_table;
+ if (table == null) {
+ table = getMethodType_V_init();
+ }
+ return table[type];
+ }
+
+
/**
* Link all signature polymorphic methods.
*/
--- a/jdk/src/java.base/share/classes/java/lang/invoke/VarHandle.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/VarHandle.java Mon May 09 08:50:20 2016 -0700
@@ -27,10 +27,9 @@
import jdk.internal.HotSpotIntrinsicCandidate;
import jdk.internal.vm.annotation.ForceInline;
+import jdk.internal.vm.annotation.Stable;
import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -406,42 +405,10 @@
* @since 9
*/
public abstract class VarHandle {
- // Use explicit final fields rather than an @Stable array as
- // this can reduce the memory per handle
- // e.g. by 24 bytes on 64 bit architectures
- final MethodType typeGet;
- final MethodType typeSet;
- final MethodType typeCompareSwap;
- final MethodType typeCompareExchange;
- final MethodType typeGetAndUpdate;
-
final VarForm vform;
- VarHandle(VarForm vform, Class<?> receiver, Class<?> value, Class<?>... intermediate) {
+ VarHandle(VarForm vform) {
this.vform = vform;
-
- // (Receiver, <Intermediates>)
- List<Class<?>> l = new ArrayList<>();
- if (receiver != null)
- l.add(receiver);
- l.addAll(Arrays.asList(intermediate));
-
- // (Receiver, <Intermediates>)Value
- this.typeGet = MethodType.methodType(value, l);
-
- // (Receiver, <Intermediates>, Value)void
- l.add(value);
- this.typeSet = MethodType.methodType(void.class, l);
-
- // (Receiver, <Intermediates>, Value)Value
- this.typeGetAndUpdate = MethodType.methodType(value, l);
-
- // (Receiver, <Intermediates>, Value, Value)boolean
- l.add(value);
- this.typeCompareSwap = MethodType.methodType(boolean.class, l);
-
- // (Receiver, <Intermediates>, Value, Value)Value
- this.typeCompareExchange = MethodType.methodType(value, l);
}
RuntimeException unsupported() {
@@ -1090,36 +1057,83 @@
Object addAndGet(Object... args);
enum AccessType {
- GET, // 0
- SET, // 1
- COMPARE_AND_SWAP, // 2
- COMPARE_AND_EXCHANGE, // 3
- GET_AND_UPDATE; // 4
+ GET(Object.class) {
+ @Override
+ MethodType accessModeType(Class<?> receiver, Class<?> value,
+ Class<?>... intermediate) {
+ Class<?>[] ps = allocateParameters(0, receiver, intermediate);
+ fillParameters(ps, receiver, intermediate);
+ return MethodType.methodType(value, ps);
+ }
+ },
+ SET(void.class) {
+ @Override
+ MethodType accessModeType(Class<?> receiver, Class<?> value,
+ Class<?>... intermediate) {
+ Class<?>[] ps = allocateParameters(1, receiver, intermediate);
+ int i = fillParameters(ps, receiver, intermediate);
+ ps[i] = value;
+ return MethodType.methodType(void.class, ps);
+ }
+ },
+ COMPARE_AND_SWAP(boolean.class) {
+ @Override
+ MethodType accessModeType(Class<?> receiver, Class<?> value,
+ Class<?>... intermediate) {
+ Class<?>[] ps = allocateParameters(2, receiver, intermediate);
+ int i = fillParameters(ps, receiver, intermediate);
+ ps[i++] = value;
+ ps[i] = value;
+ return MethodType.methodType(boolean.class, ps);
+ }
+ },
+ COMPARE_AND_EXCHANGE(Object.class) {
+ @Override
+ MethodType accessModeType(Class<?> receiver, Class<?> value,
+ Class<?>... intermediate) {
+ Class<?>[] ps = allocateParameters(2, receiver, intermediate);
+ int i = fillParameters(ps, receiver, intermediate);
+ ps[i++] = value;
+ ps[i] = value;
+ return MethodType.methodType(value, ps);
+ }
+ },
+ GET_AND_UPDATE(Object.class) {
+ @Override
+ MethodType accessModeType(Class<?> receiver, Class<?> value,
+ Class<?>... intermediate) {
+ Class<?>[] ps = allocateParameters(1, receiver, intermediate);
+ int i = fillParameters(ps, receiver, intermediate);
+ ps[i] = value;
+ return MethodType.methodType(value, ps);
+ }
+ };
- MethodType getMethodType(VarHandle vh) {
- return getMethodType(this.ordinal(), vh);
+ final Class<?> returnType;
+ final boolean isMonomorphicInReturnType;
+
+ AccessType(Class<?> returnType) {
+ this.returnType = returnType;
+ isMonomorphicInReturnType = returnType != Object.class;
}
- @ForceInline
- static MethodType getMethodType(int ordinal, VarHandle vh) {
- if (ordinal == 0) {
- return vh.typeGet;
- }
- else if (ordinal == 1) {
- return vh.typeSet;
- }
- else if (ordinal == 2) {
- return vh.typeCompareSwap;
- }
- else if (ordinal == 3) {
- return vh.typeCompareExchange;
- }
- else if (ordinal == 4) {
- return vh.typeGetAndUpdate;
- }
- else {
- throw new IllegalStateException("Illegal access type: " + ordinal);
- }
+ abstract MethodType accessModeType(Class<?> receiver, Class<?> value,
+ Class<?>... intermediate);
+
+ private static Class<?>[] allocateParameters(int values,
+ Class<?> receiver, Class<?>... intermediate) {
+ int size = ((receiver != null) ? 1 : 0) + intermediate.length + values;
+ return new Class<?>[size];
+ }
+
+ private static int fillParameters(Class<?>[] ps,
+ Class<?> receiver, Class<?>... intermediate) {
+ int i = 0;
+ if (receiver != null)
+ ps[i++] = receiver;
+ for (int j = 0; j < intermediate.length; j++)
+ ps[i++] = intermediate[j];
+ return i;
}
}
@@ -1133,115 +1147,115 @@
* method
* {@link VarHandle#get VarHandle.get}
*/
- GET("get", AccessType.GET, Object.class),
+ GET("get", AccessType.GET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#set VarHandle.set}
*/
- SET("set", AccessType.SET, void.class),
+ SET("set", AccessType.SET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#getVolatile VarHandle.getVolatile}
*/
- GET_VOLATILE("getVolatile", AccessType.GET, Object.class),
+ GET_VOLATILE("getVolatile", AccessType.GET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#setVolatile VarHandle.setVolatile}
*/
- SET_VOLATILE("setVolatile", AccessType.SET, void.class),
+ SET_VOLATILE("setVolatile", AccessType.SET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#getAcquire VarHandle.getAcquire}
*/
- GET_ACQUIRE("getAcquire", AccessType.GET, Object.class),
+ GET_ACQUIRE("getAcquire", AccessType.GET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#setRelease VarHandle.setRelease}
*/
- SET_RELEASE("setRelease", AccessType.SET, void.class),
+ SET_RELEASE("setRelease", AccessType.SET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#getOpaque VarHandle.getOpaque}
*/
- GET_OPAQUE("getOpaque", AccessType.GET, Object.class),
+ GET_OPAQUE("getOpaque", AccessType.GET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#setOpaque VarHandle.setOpaque}
*/
- SET_OPAQUE("setOpaque", AccessType.SET, void.class),
+ SET_OPAQUE("setOpaque", AccessType.SET),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#compareAndSet VarHandle.compareAndSet}
*/
- COMPARE_AND_SET("compareAndSet", AccessType.COMPARE_AND_SWAP, boolean.class),
+ COMPARE_AND_SET("compareAndSet", AccessType.COMPARE_AND_SWAP),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#compareAndExchangeVolatile VarHandle.compareAndExchangeVolatile}
*/
- COMPARE_AND_EXCHANGE_VOLATILE("compareAndExchangeVolatile", AccessType.COMPARE_AND_EXCHANGE, Object.class),
+ COMPARE_AND_EXCHANGE_VOLATILE("compareAndExchangeVolatile", AccessType.COMPARE_AND_EXCHANGE),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#compareAndExchangeAcquire VarHandle.compareAndExchangeAcquire}
*/
- COMPARE_AND_EXCHANGE_ACQUIRE("compareAndExchangeAcquire", AccessType.COMPARE_AND_EXCHANGE, Object.class),
+ COMPARE_AND_EXCHANGE_ACQUIRE("compareAndExchangeAcquire", AccessType.COMPARE_AND_EXCHANGE),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#compareAndExchangeRelease VarHandle.compareAndExchangeRelease}
*/
- COMPARE_AND_EXCHANGE_RELEASE("compareAndExchangeRelease", AccessType.COMPARE_AND_EXCHANGE, Object.class),
+ COMPARE_AND_EXCHANGE_RELEASE("compareAndExchangeRelease", AccessType.COMPARE_AND_EXCHANGE),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#weakCompareAndSet VarHandle.weakCompareAndSet}
*/
- WEAK_COMPARE_AND_SET("weakCompareAndSet", AccessType.COMPARE_AND_SWAP, boolean.class),
+ WEAK_COMPARE_AND_SET("weakCompareAndSet", AccessType.COMPARE_AND_SWAP),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#weakCompareAndSetVolatile VarHandle.weakCompareAndSetVolatile}
*/
- WEAK_COMPARE_AND_SET_VOLATILE("weakCompareAndSetVolatile", AccessType.COMPARE_AND_SWAP, boolean.class),
+ WEAK_COMPARE_AND_SET_VOLATILE("weakCompareAndSetVolatile", AccessType.COMPARE_AND_SWAP),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#weakCompareAndSetAcquire VarHandle.weakCompareAndSetAcquire}
*/
- WEAK_COMPARE_AND_SET_ACQUIRE("weakCompareAndSetAcquire", AccessType.COMPARE_AND_SWAP, boolean.class),
+ WEAK_COMPARE_AND_SET_ACQUIRE("weakCompareAndSetAcquire", AccessType.COMPARE_AND_SWAP),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#weakCompareAndSetRelease VarHandle.weakCompareAndSetRelease}
*/
- WEAK_COMPARE_AND_SET_RELEASE("weakCompareAndSetRelease", AccessType.COMPARE_AND_SWAP, boolean.class),
+ WEAK_COMPARE_AND_SET_RELEASE("weakCompareAndSetRelease", AccessType.COMPARE_AND_SWAP),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#getAndSet VarHandle.getAndSet}
*/
- GET_AND_SET("getAndSet", AccessType.GET_AND_UPDATE, Object.class),
+ GET_AND_SET("getAndSet", AccessType.GET_AND_UPDATE),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#getAndAdd VarHandle.getAndAdd}
*/
- GET_AND_ADD("getAndAdd", AccessType.GET_AND_UPDATE, Object.class),
+ GET_AND_ADD("getAndAdd", AccessType.GET_AND_UPDATE),
/**
* The access mode whose access is specified by the corresponding
* method
* {@link VarHandle#addAndGet VarHandle.addAndGet}
*/
- ADD_AND_GET("addAndGet", AccessType.GET_AND_UPDATE, Object.class),
+ ADD_AND_GET("addAndGet", AccessType.GET_AND_UPDATE),
;
static final Map<String, AccessMode> methodNameToAccessMode;
@@ -1256,10 +1270,8 @@
final String methodName;
final AccessType at;
- final boolean isPolyMorphicInReturnType;
- final Class<?> returnType;
- AccessMode(final String methodName, AccessType at, Class<?> returnType) {
+ AccessMode(final String methodName, AccessType at) {
this.methodName = methodName;
this.at = at;
@@ -1267,10 +1279,7 @@
assert methodName.equals(toMethodName(name()));
// Assert that return type is correct
// Otherwise, when disabled avoid using reflection
- assert returnType == getReturnType(methodName);
-
- this.returnType = returnType;
- isPolyMorphicInReturnType = returnType != Object.class;
+ assert at.returnType == getReturnType(methodName);
}
/**
@@ -1324,17 +1333,21 @@
@ForceInline
static MemberName getMemberName(int ordinal, VarForm vform) {
- return vform.table[ordinal];
+ return vform.memberName_table[ordinal];
}
}
static final class AccessDescriptor {
- final MethodType symbolicMethodType;
+ final MethodType symbolicMethodTypeErased;
+ final MethodType symbolicMethodTypeInvoker;
+ final Class<?> returnType;
final int type;
final int mode;
public AccessDescriptor(MethodType symbolicMethodType, int type, int mode) {
- this.symbolicMethodType = symbolicMethodType;
+ this.symbolicMethodTypeErased = symbolicMethodType.erase();
+ this.symbolicMethodTypeInvoker = symbolicMethodType.insertParameterTypes(0, VarHandle.class);
+ this.returnType = symbolicMethodType.returnType();
this.type = type;
this.mode = mode;
}
@@ -1346,6 +1359,7 @@
* @return the variable type of variables referenced by this VarHandle
*/
public final Class<?> varType() {
+ MethodType typeSet = accessModeType(AccessMode.SET);
return typeSet.parameterType(typeSet.parameterCount() - 1);
}
@@ -1356,6 +1370,7 @@
* list is unmodifiable
*/
public final List<Class<?>> coordinateTypes() {
+ MethodType typeGet = accessModeType(AccessMode.GET);
return typeGet.parameterList();
}
@@ -1374,9 +1389,15 @@
* @return the access mode type for the given access mode
*/
public final MethodType accessModeType(AccessMode accessMode) {
- return accessMode.at.getMethodType(this);
+ TypesAndInvokers tis = getTypesAndInvokers();
+ MethodType mt = tis.methodType_table[accessMode.at.ordinal()];
+ if (mt == null) {
+ mt = tis.methodType_table[accessMode.at.ordinal()] =
+ accessModeTypeUncached(accessMode);
+ }
+ return mt;
}
-
+ abstract MethodType accessModeTypeUncached(AccessMode accessMode);
/**
* Returns {@code true} if the given access mode is supported, otherwise
@@ -1417,9 +1438,8 @@
public final MethodHandle toMethodHandle(AccessMode accessMode) {
MemberName mn = AccessMode.getMemberName(accessMode.ordinal(), vform);
if (mn != null) {
- return DirectMethodHandle.make(mn).
- bindTo(this).
- asType(accessMode.at.getMethodType(this));
+ MethodHandle mh = getMethodHandle(accessMode.ordinal());
+ return mh.bindTo(this);
}
else {
// Ensure an UnsupportedOperationException is thrown
@@ -1428,6 +1448,51 @@
}
}
+ @Stable
+ TypesAndInvokers typesAndInvokers;
+
+ static class TypesAndInvokers {
+ final @Stable
+ MethodType[] methodType_table =
+ new MethodType[VarHandle.AccessType.values().length];
+
+ final @Stable
+ MethodHandle[] methodHandle_table =
+ new MethodHandle[AccessMode.values().length];
+ }
+
+ @ForceInline
+ private final TypesAndInvokers getTypesAndInvokers() {
+ TypesAndInvokers tis = typesAndInvokers;
+ if (tis == null) {
+ tis = typesAndInvokers = new TypesAndInvokers();
+ }
+ return tis;
+ }
+
+ @ForceInline
+ final MethodHandle getMethodHandle(int mode) {
+ TypesAndInvokers tis = getTypesAndInvokers();
+ MethodHandle mh = tis.methodHandle_table[mode];
+ if (mh == null) {
+ mh = tis.methodHandle_table[mode] = getMethodHandleUncached(tis, mode);
+ }
+ return mh;
+ }
+ private final MethodHandle getMethodHandleUncached(TypesAndInvokers tis, int mode) {
+ MethodType mt = accessModeType(AccessMode.values()[mode]).
+ insertParameterTypes(0, VarHandle.class);
+ MemberName mn = vform.getMemberName(mode);
+ DirectMethodHandle dmh = DirectMethodHandle.make(mn);
+ // Such a method handle must not be publically exposed directly
+ // otherwise it can be cracked, it must be transformed or rebound
+ // before exposure
+ MethodHandle mh = dmh.copyWith(mt, dmh.form);
+ assert mh.type().erase() == mn.getMethodType().erase();
+ return mh;
+ }
+
+
/*non-public*/
final void updateVarForm(VarForm newVForm) {
if (vform == newVForm) return;
@@ -1453,6 +1518,10 @@
catch (ReflectiveOperationException e) {
throw newInternalError(e);
}
+
+ // The VarHandleGuards must be initialized to ensure correct
+ // compilation of the guard methods
+ UNSAFE.ensureClassInitialized(VarHandleGuards.class);
}
--- a/jdk/src/java.base/share/classes/java/lang/invoke/VarHandleGuards.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/VarHandleGuards.java Mon May 09 08:50:20 2016 -0700
@@ -30,1361 +30,1008 @@
final class VarHandleGuards {
@ForceInline
- final static MemberName getMemberName(VarHandle handle, VarHandle.AccessDescriptor ad) {
- MemberName mn = VarHandle.AccessMode.getMemberName(ad.mode, handle.vform);
- if (mn == null) {
- throw handle.unsupported();
- }
- return mn;
- }
-
- @ForceInline
@LambdaForm.Compiled
final static Object guard_L_L(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- Object r = MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- return symbolic.returnType().cast(r);
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ Object r = MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
+ return ad.returnType.cast(r);
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LL_V(VarHandle handle, Object arg0, Object arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static Object guard_LL_L(VarHandle handle, Object arg0, Object arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- Object r = MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- return symbolic.returnType().cast(r);
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ Object r = MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
+ return ad.returnType.cast(r);
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LLL_Z(VarHandle handle, Object arg0, Object arg1, Object arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static Object guard_LLL_L(VarHandle handle, Object arg0, Object arg1, Object arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- Object r = MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- return symbolic.returnType().cast(r);
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ Object r = MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
+ return ad.returnType.cast(r);
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_L_I(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LI_V(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_LI_I(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LII_Z(VarHandle handle, Object arg0, int arg1, int arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_LII_I(VarHandle handle, Object arg0, int arg1, int arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_L_J(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LJ_V(VarHandle handle, Object arg0, long arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_LJ_J(VarHandle handle, Object arg0, long arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LJJ_Z(VarHandle handle, Object arg0, long arg1, long arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_LJJ_J(VarHandle handle, Object arg0, long arg1, long arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_L_F(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LF_V(VarHandle handle, Object arg0, float arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_LF_F(VarHandle handle, Object arg0, float arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LFF_Z(VarHandle handle, Object arg0, float arg1, float arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_LFF_F(VarHandle handle, Object arg0, float arg1, float arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_L_D(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LD_V(VarHandle handle, Object arg0, double arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_LD_D(VarHandle handle, Object arg0, double arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LDD_Z(VarHandle handle, Object arg0, double arg1, double arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_LDD_D(VarHandle handle, Object arg0, double arg1, double arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static Object guard__L(VarHandle handle, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- Object r = MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
- return symbolic.returnType().cast(r);
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ Object r = MethodHandle.linkToStatic(handle, handle.vform.getMemberName(ad.mode));
+ return ad.returnType.cast(r);
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return vh_invoker.invokeBasic(handle);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_L_V(VarHandle handle, Object arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LL_Z(VarHandle handle, Object arg0, Object arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard__I(VarHandle handle, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_I_V(VarHandle handle, int arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_I_I(VarHandle handle, int arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_II_Z(VarHandle handle, int arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_II_I(VarHandle handle, int arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard__J(VarHandle handle, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_J_V(VarHandle handle, long arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_J_J(VarHandle handle, long arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_JJ_Z(VarHandle handle, long arg0, long arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_JJ_J(VarHandle handle, long arg0, long arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard__F(VarHandle handle, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_F_V(VarHandle handle, float arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_F_F(VarHandle handle, float arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_FF_Z(VarHandle handle, float arg0, float arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_FF_F(VarHandle handle, float arg0, float arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard__D(VarHandle handle, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_D_V(VarHandle handle, double arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_D_D(VarHandle handle, double arg0, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_DD_Z(VarHandle handle, double arg0, double arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_DD_D(VarHandle handle, double arg0, double arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static Object guard_LI_L(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- Object r = MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- return symbolic.returnType().cast(r);
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ Object r = MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
+ return ad.returnType.cast(r);
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LIL_V(VarHandle handle, Object arg0, int arg1, Object arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static Object guard_LIL_L(VarHandle handle, Object arg0, int arg1, Object arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- Object r = MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- return symbolic.returnType().cast(r);
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ Object r = MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
+ return ad.returnType.cast(r);
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LILL_Z(VarHandle handle, Object arg0, int arg1, Object arg2, Object arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static Object guard_LILL_L(VarHandle handle, Object arg0, int arg1, Object arg2, Object arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- Object r = MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- return symbolic.returnType().cast(r);
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ Object r = MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
+ return ad.returnType.cast(r);
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LII_V(VarHandle handle, Object arg0, int arg1, int arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LIII_Z(VarHandle handle, Object arg0, int arg1, int arg2, int arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_LIII_I(VarHandle handle, Object arg0, int arg1, int arg2, int arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_LI_J(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LIJ_V(VarHandle handle, Object arg0, int arg1, long arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_LIJ_J(VarHandle handle, Object arg0, int arg1, long arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LIJJ_Z(VarHandle handle, Object arg0, int arg1, long arg2, long arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_LIJJ_J(VarHandle handle, Object arg0, int arg1, long arg2, long arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_LI_F(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LIF_V(VarHandle handle, Object arg0, int arg1, float arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_LIF_F(VarHandle handle, Object arg0, int arg1, float arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LIFF_Z(VarHandle handle, Object arg0, int arg1, float arg2, float arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static float guard_LIFF_F(VarHandle handle, Object arg0, int arg1, float arg2, float arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (float) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (float) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (float) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_LI_D(VarHandle handle, Object arg0, int arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LID_V(VarHandle handle, Object arg0, int arg1, double arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_LID_D(VarHandle handle, Object arg0, int arg1, double arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LIDD_Z(VarHandle handle, Object arg0, int arg1, double arg2, double arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static double guard_LIDD_D(VarHandle handle, Object arg0, int arg1, double arg2, double arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (double) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (double) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (double) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_LJ_I(VarHandle handle, Object arg0, long arg1, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, arg1, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0, arg1);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LJI_V(VarHandle handle, Object arg0, long arg1, int arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_LJI_I(VarHandle handle, Object arg0, long arg1, int arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LJII_Z(VarHandle handle, Object arg0, long arg1, int arg2, int arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static int guard_LJII_I(VarHandle handle, Object arg0, long arg1, int arg2, int arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (int) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (int) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (int) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static void guard_LJJ_V(VarHandle handle, Object arg0, long arg1, long arg2, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
- else if (target.erase() == symbolic.erase()) {
- MethodHandle.linkToStatic(handle, arg0, arg1, arg2, getMemberName(handle, ad));
+ else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodTypeErased) {
+ MethodHandle.linkToStatic(handle, arg0, arg1, arg2, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- vh_invoker.invokeBasic(handle, arg0, arg1, arg2);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2);
}
}
@ForceInline
@LambdaForm.Compiled
final static boolean guard_LJJJ_Z(VarHandle handle, Object arg0, long arg1, long arg2, long arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (boolean) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (boolean) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (boolean) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
@ForceInline
@LambdaForm.Compiled
final static long guard_LJJJ_J(VarHandle handle, Object arg0, long arg1, long arg2, long arg3, VarHandle.AccessDescriptor ad) throws Throwable {
- MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);
- MethodType symbolic = ad.symbolicMethodType;
- if (target == symbolic) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
- }
- else if (target.erase() == symbolic.erase()) {
- return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, getMemberName(handle, ad));
+ if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodTypeErased) {
+ return (long) MethodHandle.linkToStatic(handle, arg0, arg1, arg2, arg3, handle.vform.getMemberName(ad.mode));
}
else {
- MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);
- return (long) vh_invoker.invokeBasic(handle, arg0, arg1, arg2, arg3);
+ MethodHandle mh = handle.getMethodHandle(ad.mode);
+ return (long) mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(handle, arg0, arg1, arg2, arg3);
}
}
--- a/jdk/src/java.base/share/classes/java/lang/invoke/VarHandles.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/VarHandles.java Mon May 09 08:50:20 2016 -0700
@@ -280,28 +280,29 @@
// "@ForceInline\n" +
// "@LambdaForm.Compiled\n" +
// "final static <METHOD> throws Throwable {\n" +
-// " MethodType target = VarHandle.AccessType.getMethodType(ad.type, handle);\n" +
-// " MethodType symbolic = ad.symbolicMethodType;\n" +
-// " if (target == symbolic) {\n" +
-// " <RETURN>MethodHandle.linkToStatic(<LINK_TO_STATIC_ARGS>);\n" +
-// " }\n" +
-// " else if (target.erase() == symbolic.erase()) {\n" +
+// " if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodType) {\n" +
// " <RESULT_ERASED>MethodHandle.linkToStatic(<LINK_TO_STATIC_ARGS>);<RETURN_ERASED>\n" +
// " }\n" +
// " else {\n" +
-// " MethodHandle vh_invoker = MethodHandles.varHandleInvoker(VarHandle.AccessMode.values()[ad.mode], symbolic);\n" +
-// " <RETURN>vh_invoker.invokeBasic(<LINK_TO_INVOKER_ARGS>);\n" +
+// " MethodHandle mh = handle.getMethodHandle(ad.mode);\n" +
+// " <RETURN>mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(<LINK_TO_INVOKER_ARGS>);\n" +
// " }\n" +
// "}";
//
-// static final String GET_MEMBER_NAME_METHOD =
+// static final String GUARD_METHOD_TEMPLATE_V =
// "@ForceInline\n" +
-// "final static MemberName getMemberName(VarHandle handle, VarHandle.AccessDescriptor ad) {\n" +
-// " MemberName mn = VarHandle.AccessMode.getMemberName(ad.mode, handle.vform);\n" +
-// " if (mn == null) {\n" +
-// " throw handle.unsupported();\n" +
+// "@LambdaForm.Compiled\n" +
+// "final static <METHOD> throws Throwable {\n" +
+// " if (handle.vform.methodType_table[ad.type] == ad.symbolicMethodType) {\n" +
+// " MethodHandle.linkToStatic(<LINK_TO_STATIC_ARGS>);\n" +
// " }\n" +
-// " return mn;\n" +
+// " else if (handle.vform.getMethodType_V(ad.type) == ad.symbolicMethodType) {\n" +
+// " MethodHandle.linkToStatic(<LINK_TO_STATIC_ARGS>);\n" +
+// " }\n" +
+// " else {\n" +
+// " MethodHandle mh = handle.getMethodHandle(ad.mode);\n" +
+// " mh.asType(ad.symbolicMethodTypeInvoker).invokeBasic(<LINK_TO_INVOKER_ARGS>);\n" +
+// " }\n" +
// "}";
//
// // A template for deriving the operations
@@ -345,8 +346,6 @@
// System.out.println("final class VarHandleGuards {");
//
// System.out.println();
-// System.out.println(GET_MEMBER_NAME_METHOD);
-// System.out.println();
//
// // Declare the stream of shapes
// Stream<HandleType> hts = Stream.of(
@@ -445,7 +444,10 @@
//
// List<String> LINK_TO_STATIC_ARGS = params.keySet().stream().
// collect(toList());
-// LINK_TO_STATIC_ARGS.add("getMemberName(handle, ad)");
+// LINK_TO_STATIC_ARGS.add("handle.vform.getMemberName(ad.mode)");
+// List<String> LINK_TO_STATIC_ARGS_V = params.keySet().stream().
+// collect(toList());
+// LINK_TO_STATIC_ARGS_V.add("handle.vform.getMemberName_V(ad.mode)");
//
// List<String> LINK_TO_INVOKER_ARGS = params.keySet().stream().
// collect(toList());
@@ -464,9 +466,12 @@
//
// String RETURN_ERASED = returnType != Object.class
// ? ""
-// : " return symbolic.returnType().cast(r);";
+// : " return ad.returnType.cast(r);";
//
-// return GUARD_METHOD_TEMPLATE.
+// String template = returnType == void.class
+// ? GUARD_METHOD_TEMPLATE_V
+// : GUARD_METHOD_TEMPLATE;
+// return template.
// replace("<METHOD>", METHOD).
// replace("<NAME>", NAME).
// replaceAll("<RETURN>", RETURN).
@@ -474,6 +479,8 @@
// replace("<RETURN_ERASED>", RETURN_ERASED).
// replaceAll("<LINK_TO_STATIC_ARGS>", LINK_TO_STATIC_ARGS.stream().
// collect(joining(", "))).
+// replaceAll("<LINK_TO_STATIC_ARGS_V>", LINK_TO_STATIC_ARGS_V.stream().
+// collect(joining(", "))).
// replace("<LINK_TO_INVOKER_ARGS>", LINK_TO_INVOKER_ARGS.stream().
// collect(joining(", ")))
// ;
--- a/jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandle.java.template Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandle.java.template Mon May 09 08:50:20 2016 -0700
@@ -41,12 +41,12 @@
#end[Object]
FieldInstanceReadOnly(Class<?> receiverType, long fieldOffset{#if[Object]?, Class<?> fieldType}) {
- this(receiverType, fieldOffset{#if[Object]?, fieldType}, FieldInstanceReadOnly.class);
+ this(receiverType, fieldOffset{#if[Object]?, fieldType}, FieldInstanceReadOnly.FORM);
}
protected FieldInstanceReadOnly(Class<?> receiverType, long fieldOffset{#if[Object]?, Class<?> fieldType},
- Class<? extends FieldInstanceReadOnly> handle) {
- super(VarForm.createFromStatic(handle), receiverType, {#if[Object]?fieldType:$type$.class});
+ VarForm form) {
+ super(form);
this.fieldOffset = fieldOffset;
this.receiverType = receiverType;
#if[Object]
@@ -54,6 +54,11 @@
#end[Object]
}
+ @Override
+ final MethodType accessModeTypeUncached(AccessMode accessMode) {
+ return accessMode.at.accessModeType(receiverType, {#if[Object]?fieldType:$type$.class});
+ }
+
@ForceInline
static $type$ get(FieldInstanceReadOnly handle, Object holder) {
return UNSAFE.get$Type$(Objects.requireNonNull(handle.receiverType.cast(holder)),
@@ -77,12 +82,14 @@
return UNSAFE.get$Type$Acquire(Objects.requireNonNull(handle.receiverType.cast(holder)),
handle.fieldOffset);
}
+
+ static final VarForm FORM = new VarForm(FieldInstanceReadOnly.class, Object.class, $type$.class);
}
- static class FieldInstanceReadWrite extends FieldInstanceReadOnly {
+ static final class FieldInstanceReadWrite extends FieldInstanceReadOnly {
FieldInstanceReadWrite(Class<?> receiverType, long fieldOffset{#if[Object]?, Class<?> fieldType}) {
- super(receiverType, fieldOffset{#if[Object]?, fieldType}, FieldInstanceReadWrite.class);
+ super(receiverType, fieldOffset{#if[Object]?, fieldType}, FieldInstanceReadWrite.FORM);
}
@ForceInline
@@ -202,6 +209,8 @@
value) + value;
}
#end[AtomicAdd]
+
+ static final VarForm FORM = new VarForm(FieldInstanceReadWrite.class, Object.class, $type$.class);
}
@@ -213,12 +222,12 @@
#end[Object]
FieldStaticReadOnly(Object base, long fieldOffset{#if[Object]?, Class<?> fieldType}) {
- this(base, fieldOffset{#if[Object]?, fieldType}, FieldStaticReadOnly.class);
+ this(base, fieldOffset{#if[Object]?, fieldType}, FieldStaticReadOnly.FORM);
}
protected FieldStaticReadOnly(Object base, long fieldOffset{#if[Object]?, Class<?> fieldType},
- Class<? extends FieldStaticReadOnly> handle) {
- super(VarForm.createFromStatic(handle), null, {#if[Object]?fieldType:$type$.class});
+ VarForm form) {
+ super(form);
this.base = base;
this.fieldOffset = fieldOffset;
#if[Object]
@@ -226,6 +235,11 @@
#end[Object]
}
+ @Override
+ final MethodType accessModeTypeUncached(AccessMode accessMode) {
+ return accessMode.at.accessModeType(null, {#if[Object]?fieldType:$type$.class});
+ }
+
@ForceInline
static $type$ get(FieldStaticReadOnly handle) {
return UNSAFE.get$Type$(handle.base,
@@ -249,12 +263,14 @@
return UNSAFE.get$Type$Acquire(handle.base,
handle.fieldOffset);
}
+
+ static final VarForm FORM = new VarForm(FieldStaticReadOnly.class, null, $type$.class);
}
- static class FieldStaticReadWrite extends FieldStaticReadOnly {
+ static final class FieldStaticReadWrite extends FieldStaticReadOnly {
FieldStaticReadWrite(Object base, long fieldOffset{#if[Object]?, Class<?> fieldType}) {
- super(base, fieldOffset{#if[Object]?, fieldType}, FieldStaticReadWrite.class);
+ super(base, fieldOffset{#if[Object]?, fieldType}, FieldStaticReadWrite.FORM);
}
@ForceInline
@@ -375,6 +391,8 @@
value) + value;
}
#end[AtomicAdd]
+
+ static final VarForm FORM = new VarForm(FieldStaticReadWrite.class, null, $type$.class);
}
@@ -387,8 +405,7 @@
#end[Object]
Array(int abase, int ashift{#if[Object]?, Class<?> arrayType}) {
- super(VarForm.createFromStatic(Array.class),
- {#if[Object]?arrayType:$type$[].class}, {#if[Object]?arrayType.getComponentType():$type$.class}, int.class);
+ super(Array.FORM);
this.abase = abase;
this.ashift = ashift;
#if[Object]
@@ -397,6 +414,11 @@
#end[Object]
}
+ @Override
+ final MethodType accessModeTypeUncached(AccessMode accessMode) {
+ return accessMode.at.accessModeType({#if[Object]?arrayType:$type$[].class}, {#if[Object]?arrayType.getComponentType():$type$.class}, int.class);
+ }
+
@ForceInline
static $type$ get(Array handle, Object oarray, int index) {
#if[Object]
@@ -630,5 +652,7 @@
value) + value;
}
#end[AtomicAdd]
+
+ static final VarForm FORM = new VarForm(Array.class, {#if[Object]?Object[].class:$type$[].class}, {#if[Object]?Object.class:$type$.class}, int.class);
}
}
--- a/jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandleByteArrayView.java.template Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandleByteArrayView.java.template Mon May 09 08:50:20 2016 -0700
@@ -59,13 +59,11 @@
#end[floatingPoint]
- private static class ByteArrayViewVarHandle extends VarHandle {
+ private static abstract class ByteArrayViewVarHandle extends VarHandle {
final boolean be;
- ByteArrayViewVarHandle(Class<? extends ByteArrayViewVarHandle> implSubType,
- Class<?> arrayType, Class<?> component, boolean be) {
- super(VarForm.createFromStatic(implSubType),
- arrayType, component, int.class);
+ ByteArrayViewVarHandle(VarForm form, boolean be) {
+ super(form);
this.be = be;
}
}
@@ -73,7 +71,12 @@
static final class ArrayHandle extends ByteArrayViewVarHandle {
ArrayHandle(boolean be) {
- super(ArrayHandle.class, byte[].class, $type$.class, be);
+ super(ArrayHandle.FORM, be);
+ }
+
+ @Override
+ final MethodType accessModeTypeUncached(AccessMode accessMode) {
+ return accessMode.at.accessModeType(byte[].class, $type$.class, int.class);
}
@ForceInline
@@ -286,13 +289,20 @@
convEndian(handle.be, value))) + value;
}
#end[AtomicAdd]
+
+ static final VarForm FORM = new VarForm(ArrayHandle.class, byte[].class, $type$.class, int.class);
}
static final class ByteBufferHandle extends ByteArrayViewVarHandle {
ByteBufferHandle(boolean be) {
- super(ByteBufferHandle.class, ByteBuffer.class, $type$.class, be);
+ super(ByteBufferHandle.FORM, be);
+ }
+
+ @Override
+ final MethodType accessModeTypeUncached(AccessMode accessMode) {
+ return accessMode.at.accessModeType(ByteBuffer.class, $type$.class, int.class);
}
@ForceInline
@@ -513,5 +523,7 @@
convEndian(handle.be, value))) + value;
}
#end[AtomicAdd]
+
+ static final VarForm FORM = new VarForm(ByteBufferHandle.class, ByteBuffer.class, $type$.class, int.class);
}
}
--- a/jdk/src/java.base/share/classes/java/math/BigDecimal.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/math/BigDecimal.java Mon May 09 08:50:20 2016 -0700
@@ -1536,7 +1536,7 @@
* be performed to generate a result with the specified scale, the
* specified rounding mode is applied.
*
- * <p>The new {@link #divide(BigDecimal, int, RoundingMode)} method
+ * @deprecated The method {@link #divide(BigDecimal, int, RoundingMode)}
* should be used in preference to this legacy method.
*
* @param divisor value by which this {@code BigDecimal} is to be divided.
@@ -1558,6 +1558,7 @@
* @see #ROUND_HALF_EVEN
* @see #ROUND_UNNECESSARY
*/
+ @Deprecated(since="9")
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode) {
if (roundingMode < ROUND_UP || roundingMode > ROUND_UNNECESSARY)
throw new IllegalArgumentException("Invalid rounding mode");
@@ -1602,7 +1603,7 @@
* rounding must be performed to generate a result with the given
* scale, the specified rounding mode is applied.
*
- * <p>The new {@link #divide(BigDecimal, RoundingMode)} method
+ * @deprecated The method {@link #divide(BigDecimal, RoundingMode)}
* should be used in preference to this legacy method.
*
* @param divisor value by which this {@code BigDecimal} is to be divided.
@@ -1623,6 +1624,7 @@
* @see #ROUND_HALF_EVEN
* @see #ROUND_UNNECESSARY
*/
+ @Deprecated(since="9")
public BigDecimal divide(BigDecimal divisor, int roundingMode) {
return this.divide(divisor, scale, roundingMode);
}
@@ -2267,14 +2269,20 @@
* Rounding mode to round away from zero. Always increments the
* digit prior to a nonzero discarded fraction. Note that this rounding
* mode never decreases the magnitude of the calculated value.
+ *
+ * @deprecated Use {@link RoundingMode#UP} instead.
*/
+ @Deprecated(since="9")
public static final int ROUND_UP = 0;
/**
* Rounding mode to round towards zero. Never increments the digit
* prior to a discarded fraction (i.e., truncates). Note that this
* rounding mode never increases the magnitude of the calculated value.
+ *
+ * @deprecated Use {@link RoundingMode#DOWN} instead.
*/
+ @Deprecated(since="9")
public static final int ROUND_DOWN = 1;
/**
@@ -2283,7 +2291,10 @@
* {@code ROUND_UP}; if negative, behaves as for
* {@code ROUND_DOWN}. Note that this rounding mode never
* decreases the calculated value.
+ *
+ * @deprecated Use {@link RoundingMode#CEILING} instead.
*/
+ @Deprecated(since="9")
public static final int ROUND_CEILING = 2;
/**
@@ -2292,7 +2303,10 @@
* {@code ROUND_DOWN}; if negative, behave as for
* {@code ROUND_UP}. Note that this rounding mode never
* increases the calculated value.
+ *
+ * @deprecated Use {@link RoundingMode#FLOOR} instead.
*/
+ @Deprecated(since="9")
public static final int ROUND_FLOOR = 3;
/**
@@ -2302,7 +2316,10 @@
* ≥ 0.5; otherwise, behaves as for {@code ROUND_DOWN}. Note
* that this is the rounding mode that most of us were taught in
* grade school.
+ *
+ * @deprecated Use {@link RoundingMode#HALF_UP} instead.
*/
+ @Deprecated(since="9")
public static final int ROUND_HALF_UP = 4;
/**
@@ -2311,7 +2328,10 @@
* down. Behaves as for {@code ROUND_UP} if the discarded
* fraction is {@literal >} 0.5; otherwise, behaves as for
* {@code ROUND_DOWN}.
+ *
+ * @deprecated Use {@link RoundingMode#HALF_DOWN} instead.
*/
+ @Deprecated(since="9")
public static final int ROUND_HALF_DOWN = 5;
/**
@@ -2323,7 +2343,10 @@
* {@code ROUND_HALF_DOWN} if it's even. Note that this is the
* rounding mode that minimizes cumulative error when applied
* repeatedly over a sequence of calculations.
+ *
+ * @deprecated Use {@link RoundingMode#HALF_EVEN} instead.
*/
+ @Deprecated(since="9")
public static final int ROUND_HALF_EVEN = 6;
/**
@@ -2331,7 +2354,10 @@
* result, hence no rounding is necessary. If this rounding mode is
* specified on an operation that yields an inexact result, an
* {@code ArithmeticException} is thrown.
+ *
+ * @deprecated Use {@link RoundingMode#UNNECESSARY} instead.
*/
+ @Deprecated(since="9")
public static final int ROUND_UNNECESSARY = 7;
@@ -2408,7 +2434,7 @@
* Instead, {@code setScale} returns an object with the proper
* scale; the returned object may or may not be newly allocated.
*
- * <p>The new {@link #setScale(int, RoundingMode)} method should
+ * @deprecated The method {@link #setScale(int, RoundingMode)} should
* be used in preference to this legacy method.
*
* @param newScale scale of the {@code BigDecimal} value to be returned.
@@ -2431,6 +2457,7 @@
* @see #ROUND_HALF_EVEN
* @see #ROUND_UNNECESSARY
*/
+ @Deprecated(since="9")
public BigDecimal setScale(int newScale, int roundingMode) {
if (roundingMode < ROUND_UP || roundingMode > ROUND_UNNECESSARY)
throw new IllegalArgumentException("Invalid rounding mode");
--- a/jdk/src/java.base/share/classes/java/math/RoundingMode.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/math/RoundingMode.java Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -90,6 +90,7 @@
* @author Joseph D. Darcy
* @since 1.5
*/
+@SuppressWarnings("deprecation") // Legacy rounding mode constants in BigDecimal
public enum RoundingMode {
/**
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/java/security/DrbgParameters.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,543 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package java.security;
+
+import java.util.Locale;
+import java.util.Objects;
+
+/**
+ * This class specifies the parameters used by a DRBG (Deterministic
+ * Random Bit Generator).
+ * <p>
+ * According to
+ * <a href="http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-90Ar1.pdf">
+ * NIST Special Publication 800-90A Revision 1, Recommendation for Random
+ * Number Generation Using Deterministic Random Bit Generators</a> (800-90Ar1),
+ * <blockquote>
+ * A DRBG is based on a DRBG mechanism as specified in this Recommendation
+ * and includes a source of randomness. A DRBG mechanism uses an algorithm
+ * (i.e., a DRBG algorithm) that produces a sequence of bits from an initial
+ * value that is determined by a seed that is determined from the output of
+ * the randomness source."
+ * </blockquote>
+ * <p>
+ * The 800-90Ar1 specification allows for a variety of DRBG implementation
+ * choices, such as:
+ * <ul>
+ * <li> an entropy source,
+ * <li> a DRBG mechanism (for example, Hash_DRBG),
+ * <li> a DRBG algorithm (for example, SHA-256 for Hash_DRBG and AES-256
+ * for CTR_DRBG. Please note that it is not the algorithm used in
+ * {@link SecureRandom#getInstance}, which we will call a
+ * <em>SecureRandom algorithm</em> below),
+ * <li> optionally features, including prediction resistance
+ * and reseeding supports.
+ * <li> highest security strength.
+ * </ul>
+ * <p>
+ * These choices are set in each implementation and are not directly
+ * managed by the {@code SecureRandom} API. Check your DRBG provider's
+ * documentation to find an appropriate implementation for the situation.
+ * <p>
+ * On the other hand, the 800-90Ar1 specification does have some configurable
+ * options, such as:
+ * <ul>
+ * <li> required security strength,
+ * <li> if prediction resistance is required,
+ * <li> personalization string and additional input.
+ * </ul>
+ * <p>
+ * A DRBG instance can be instantiated with parameters from an
+ * {@link DrbgParameters.Instantiation} object and other information
+ * (for example, the nonce, which is not managed by this API). This maps
+ * to the {@code Instantiate_function} defined in NIST SP 800-90Ar1.
+ * <p>
+ * A DRBG instance can be reseeded with parameters from a
+ * {@link DrbgParameters.Reseed} object. This maps to the
+ * {@code Reseed_function} defined in NIST SP 800-90Ar1. Calling
+ * {@link SecureRandom#reseed()} is equivalent to calling
+ * {@link SecureRandom#reseed(SecureRandomParameters)} with the effective
+ * instantiated prediction resistance flag (as returned by
+ * {@link SecureRandom#getParameters()}) with no additional input.
+ * <p>
+ * A DRBG instance generates data with additional parameters from a
+ * {@link DrbgParameters.NextBytes} object. This maps to the
+ * {@code Generate_function} defined in NIST SP 800-90Ar1. Calling
+ * {@link SecureRandom#nextBytes(byte[])} is equivalent to calling
+ * {@link SecureRandom#nextBytes(byte[], SecureRandomParameters)}
+ * with the effective instantiated strength and prediction resistance flag
+ * (as returned by {@link SecureRandom#getParameters()}) with no
+ * additional input.
+ * <p>
+ * A DRBG should be implemented as a subclass of {@link SecureRandomSpi}.
+ * It is recommended that the implementation contain the 1-arg
+ * {@linkplain SecureRandomSpi#SecureRandomSpi(SecureRandomParameters) constructor}
+ * that takes a {@code DrbgParameters.Instantiation} argument. If implemented
+ * this way, this implementation can be chosen by any
+ * {@code SecureRandom.getInstance()} method. If it is chosen by a
+ * {@code SecureRandom.getInstance()} with a {@link SecureRandomParameters}
+ * parameter, the parameter is passed into this constructor. If it is chosen
+ * by a {@code SecureRandom.getInstance()} without a
+ * {@code SecureRandomParameters} parameter, the constructor is called with
+ * a {@code null} argument and the implementation should choose its own
+ * parameters. Its {@link SecureRandom#getParameters()} must always return a
+ * non-null effective {@code DrbgParameters.Instantiation} object that reflects
+ * how the DRBG is actually instantiated. A caller can use this information
+ * to determine whether a {@code SecureRandom} object is a DRBG and what
+ * features it supports. Please note that the returned value does not
+ * necessarily equal to the {@code DrbgParameters.Instantiation} object passed
+ * into the {@code SecureRandom.getInstance()} call. For example,
+ * the requested capability can be {@link DrbgParameters.Capability#NONE}
+ * but the effective value can be {@link DrbgParameters.Capability#RESEED_ONLY}
+ * if the implementation supports reseeding. The implementation must implement
+ * the {@link SecureRandomSpi#engineNextBytes(byte[], SecureRandomParameters)}
+ * method which takes a {@code DrbgParameters.NextBytes} parameter. Unless
+ * the result of {@link SecureRandom#getParameters()} has its
+ * {@linkplain DrbgParameters.Instantiation#getCapability() capability} being
+ * {@link Capability#NONE NONE}, it must implement
+ * {@link SecureRandomSpi#engineReseed(SecureRandomParameters)} which takes
+ * a {@code DrbgParameters.Reseed} parameter.
+ * <p>
+ * On the other hand, if a DRBG implementation does not contain a constructor
+ * that has an {@code DrbgParameters.Instantiation} argument (not recommended),
+ * it can only be chosen by a {@code SecureRandom.getInstance()} without
+ * a {@code SecureRandomParameters} parameter, but will not be chosen if
+ * a {@code getInstance} method with a {@code SecureRandomParameters} parameter
+ * is called. If implemented this way, its {@link SecureRandom#getParameters()}
+ * must return {@code null}, and it does not need to implement either
+ * {@link SecureRandomSpi#engineNextBytes(byte[], SecureRandomParameters)}
+ * or {@link SecureRandomSpi#engineReseed(SecureRandomParameters)}.
+ * <p>
+ * A DRBG might reseed itself automatically if the seed period is bigger
+ * than the maximum seed life defined by the DRBG mechanism.
+ * <p>
+ * A DRBG implementation should support serialization and deserialization
+ * by retaining the configuration and effective parameters, but the internal
+ * state must not be serialized and the deserialized object must be
+ * reinstantiated.
+ * <p>
+ * Examples:
+ * <blockquote><pre>
+ * SecureRandom drbg;
+ * byte[] buffer = new byte[32];
+ *
+ * // Any DRBG is OK
+ * drbg = SecureRandom.getInstance("DRBG");
+ * drbg.nextBytes(buffer);
+ *
+ * SecureRandomParameters params = drbg.getParameters();
+ * if (params instanceof DrbgParameters.Instantiation) {
+ * DrbgParameters.Instantiation ins = (DrbgParameters.Instantiation) params;
+ * if (ins.getCapability().supportsReseeding()) {
+ * drbg.reseed();
+ * }
+ * }
+ *
+ * // The following call requests a weak DRBG instance. It is only
+ * // guaranteed to support 112 bits of security strength.
+ * drbg = SecureRandom.getInstance("DRBG",
+ * DrbgParameters.instantiation(112, NONE, null));
+ *
+ * // Both the next two calls will likely fail, because drbg could be
+ * // instantiated with a smaller strength with no prediction resistance
+ * // support.
+ * drbg.nextBytes(buffer,
+ * DrbgParameters.nextBytes(256, false, "more".getBytes()));
+ * drbg.nextBytes(buffer,
+ * DrbgParameters.nextBytes(112, true, "more".getBytes()));
+ *
+ * // The following call requests a strong DRBG instance, with a
+ * // personalization string. If it successfully returns an instance,
+ * // that instance is guaranteed to support 256 bits of security strength
+ * // with prediction resistance available.
+ * drbg = SecureRandom.getInstance("DRBG", DrbgParameters.instantiation(
+ * 256, PR_AND_RESEED, "hello".getBytes()));
+ *
+ * // Prediction resistance is not requested in this single call,
+ * // but an additional input is used.
+ * drbg.nextBytes(buffer,
+ * DrbgParameters.nextBytes(-1, false, "more".getBytes()));
+ *
+ * // Same for this call.
+ * drbg.reseed(DrbgParameters.reseed(false, "extra".getBytes()));</pre>
+ * </blockquote>
+ *
+ * @implSpec
+ * By convention, a provider should name its primary DRBG implementation
+ * with the <a href=
+ * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
+ * standard {@code SecureRandom} algorithm name</a> "DRBG".
+ *
+ * @implNote
+ * The following notes apply to the "DRBG" implementation in the SUN provider
+ * of the JDK reference implementation.
+ * <p>
+ * This implementation supports the Hash_DRBG and HMAC_DRBG mechanisms with
+ * DRBG algorithm SHA-1, SHA-224, SHA-512/224, SHA-256, SHA-512/256,
+ * SHA-384 and SHA-512, and CTR_DRBG (both using derivation function and
+ * not using derivation function) with DRBG algorithm 3KeyTDEA
+ * (also known as DESede in JCE), AES-128, AES-192 and AES-256.
+ * <p>
+ * The mechanism name and DRBG algorithm name are determined by the
+ * {@linkplain Security#getProperty(String) security property}
+ * {@code securerandom.drbg.config}. The default choice is Hash_DRBG
+ * with SHA-256.
+ * <p>
+ * For each combination, the security strength can be requested from 112
+ * up to the highest strength it supports. Both reseeding and prediction
+ * resistance are supported.
+ * <p>
+ * Personalization string is supported through the
+ * {@link DrbgParameters.Instantiation} class and additional input is supported
+ * through the {@link DrbgParameters.NextBytes} and
+ * {@link DrbgParameters.Reseed} classes.
+ * <p>
+ * If a DRBG is not instantiated with a {@link DrbgParameters.Instantiation}
+ * object explicitly, this implementation instantiates it with a default
+ * requested strength of 128 bits (112 bits for CTR_DRBG with 3KeyTDEA),
+ * no prediction resistance request, and no personalization string.
+ * These default instantiation parameters can also be customized with
+ * the {@code securerandom.drbg.config} security property.
+ * <p>
+ * This implementation reads fresh entropy from the system default entropy
+ * source determined by the security property {@code securerandom.source}.
+ * <p>
+ * Calling {@link SecureRandom#generateSeed(int)} will directly read
+ * from this system default entropy source.
+ * <p>
+ * This implementation has passed all tests included in the 20151104 version of
+ * <a href="http://csrc.nist.gov/groups/STM/cavp/documents/drbg/drbgtestvectors.zip">
+ * The DRBG Test Vectors</a>.
+ *
+ * @since 9
+ */
+public class DrbgParameters {
+
+ private DrbgParameters() {
+ // This class should not be instantiated
+ }
+
+ /**
+ * The reseedable and prediction resistance capabilities of a DRBG.
+ * <p>
+ * When this object is passed to a {@code SecureRandom.getInstance()} call,
+ * it is the requested minimum capability. When it's returned from
+ * {@code SecureRandom.getParameters()}, it is the effective capability.
+ * <p>
+ * Please note that while the {@code Instantiate_function} defined in
+ * NIST SP 800-90Ar1 only includes a {@code prediction_resistance_flag}
+ * parameter, the {@code Capability} type includes an extra value
+ * {@link #RESEED_ONLY} because reseeding is an optional function.
+ * If {@code NONE} is used in an {@code Instantiation} object in calling the
+ * {@code SecureRandom.getInstance} method, the returned DRBG instance
+ * is not guaranteed to support reseeding. If {@code RESEED_ONLY} or
+ * {@code PR_AND_RESEED} is used, the instance must support reseeding.
+ * <p>
+ * The table below lists possible effective values if a certain
+ * capability is requested, i.e.
+ * <blockquote><pre>
+ * Capability requested = ...;
+ * SecureRandom s = SecureRandom.getInstance("DRBG",
+ * DrbgParameters(-1, requested, null));
+ * Capability effective = ((DrbgParametes.Initiate) s.getParameters())
+ * .getCapability();</pre>
+ * </blockquote>
+ * <table border=1 summary="requested and effective capabilities">
+ * <tr>
+ * <th>Requested Value</th>
+ * <th>Possible Effective Values</th>
+ * </tr>
+ * <tr><td>NONE</td><td>NONE, RESEED_ONLY, PR_AND_RESEED</td></tr>
+ * <tr><td>RESEED_ONLY</td><td>RESEED_ONLY, PR_AND_RESEED</td></tr>
+ * <tr><td>PR_AND_RESEED</td><td>PR_AND_RESEED</td></tr>
+ * </table>
+ * <p>
+ * A DRBG implementation supporting prediction resistance must also
+ * support reseeding.
+ *
+ * @since 9
+ */
+ public enum Capability {
+
+ /**
+ * Both prediction resistance and reseed.
+ */
+ PR_AND_RESEED,
+
+ /**
+ * Reseed but no prediction resistance.
+ */
+ RESEED_ONLY,
+
+ /**
+ * Neither prediction resistance nor reseed.
+ */
+ NONE;
+
+ @Override
+ public String toString() {
+ return name().toLowerCase(Locale.ROOT);
+ }
+
+ /**
+ * Returns whether this capability supports reseeding.
+ *
+ * @return {@code true} for {@link #PR_AND_RESEED} and
+ * {@link #RESEED_ONLY}, and {@code false} for {@link #NONE}
+ */
+ public boolean supportsReseeding() {
+ return this != NONE;
+ }
+
+ /**
+ * Returns whether this capability supports prediction resistance.
+ *
+ * @return {@code true} for {@link #PR_AND_RESEED}, and {@code false}
+ * for {@link #RESEED_ONLY} and {@link #NONE}
+ */
+ public boolean supportsPredictionResistance() {
+ return this == PR_AND_RESEED;
+ }
+ }
+
+ /**
+ * DRBG parameters for instantiation.
+ * <p>
+ * When used in
+ * {@link SecureRandom#getInstance(String, SecureRandomParameters)}
+ * or one of the other similar {@code getInstance} calls that take a
+ * {@code SecureRandomParameters} parameter, it means the
+ * requested instantiate parameters the newly created {@code SecureRandom}
+ * object must minimally support. When used as the return value of the
+ * {@link SecureRandom#getParameters()} method, it means the effective
+ * instantiate parameters of the {@code SecureRandom} object.
+ *
+ * @since 9
+ */
+ public static final class Instantiation
+ implements SecureRandomParameters {
+
+ private final int strength;
+ private final Capability capability;
+ private final byte[] personalizationString;
+
+ /**
+ * Returns the security strength in bits.
+ *
+ * @return If used in {@code getInstance}, returns the minimum strength
+ * requested, or -1 if there is no specific request on the strength.
+ * If used in {@code getParameters}, returns the effective strength.
+ * The effective strength must be greater than or equal to the minimum
+ * strength requested.
+ */
+ public int getStrength() {
+ return strength;
+ }
+
+ /**
+ * Returns the capability.
+ *
+ * @return If used in {@code getInstance}, returns the minimum
+ * capability requested. If used in {@code getParameters}, returns
+ * information on the effective prediction resistance flag and
+ * whether it supports reseeding.
+ */
+ public Capability getCapability() {
+ return capability;
+ }
+
+ /**
+ * Returns the personalization string as a byte array.
+ *
+ * @return If used in {@code getInstance}, returns the requested
+ * personalization string as a newly allocated array, or {@code null}
+ * if no personalization string is requested. The same string should
+ * be returned in {@code getParameters} as a new copy, or {@code null}
+ * if no personalization string is requested in {@code getInstance}.
+ */
+ public byte[] getPersonalizationString() {
+ return (personalizationString == null) ?
+ null : personalizationString.clone();
+ }
+
+ private Instantiation(int strength, Capability capability,
+ byte[] personalizationString) {
+ this.strength = strength;
+ this.capability = capability;
+ this.personalizationString = (personalizationString == null) ?
+ null : personalizationString.clone();
+ }
+
+ /**
+ * Returns a Human-readable string representation of this
+ * {@code Instantiation}.
+ *
+ * @return the string representation
+ */
+ @Override
+ public String toString() {
+ // I don't care what personalizationString looks like
+ return strength + "," + capability + "," + personalizationString;
+ }
+ }
+
+ /**
+ * DRBG parameters for random bits generation. It is used in
+ * {@link SecureRandom#nextBytes(byte[], SecureRandomParameters)}.
+ *
+ * @since 9
+ */
+ public static final class NextBytes
+ implements SecureRandomParameters {
+ private final int strength;
+ private final boolean predictionResistance;
+ private final byte[] additionalInput;
+
+ /**
+ * Returns the security strength requested in bits.
+ *
+ * @return the strength requested, or -1 if the effective strength
+ * should be used.
+ */
+ public int getStrength() {
+ return strength;
+ }
+
+ /**
+ * Returns whether prediction resistance is requested.
+ *
+ * @return whether prediction resistance is requested
+ */
+ public boolean getPredictionResistance() {
+ return predictionResistance;
+ }
+
+ /**
+ * Returns the requested additional input.
+ *
+ * @return the requested additional input, {@code null} if not
+ * requested. A new byte array is returned each time this method
+ * is called.
+ */
+ public byte[] getAdditionalInput() {
+ return additionalInput == null? null: additionalInput.clone();
+ }
+
+ private NextBytes(int strength, boolean predictionResistance,
+ byte[] additionalInput) {
+ this.strength = strength;
+ this.predictionResistance = predictionResistance;
+ this.additionalInput = (additionalInput == null) ?
+ null : additionalInput.clone();
+ }
+ }
+
+ /**
+ * DRBG parameters for reseed. It is used in
+ * {@link SecureRandom#reseed(SecureRandomParameters)}.
+ *
+ * @since 9
+ */
+ public static final class Reseed implements SecureRandomParameters {
+
+ private final byte[] additionalInput;
+ private final boolean predictionResistance;
+
+ /**
+ * Returns whether prediction resistance is requested.
+ *
+ * @return whether prediction resistance is requested
+ */
+ public boolean getPredictionResistance() {
+ return predictionResistance;
+ }
+
+ /**
+ * Returns the requested additional input.
+ *
+ * @return the requested additional input, or {@code null} if
+ * not requested. A new byte array is returned each time this method
+ * is called.
+ */
+ public byte[] getAdditionalInput() {
+ return additionalInput == null ? null : additionalInput.clone();
+ }
+
+ private Reseed(boolean predictionResistance, byte[] additionalInput) {
+ this.predictionResistance = predictionResistance;
+ this.additionalInput = (additionalInput == null) ?
+ null : additionalInput.clone();
+ }
+ }
+
+ /**
+ * Generates a {@link DrbgParameters.Instantiation} object.
+ *
+ * @param strength security strength in bits, -1 for default strength
+ * if used in {@code getInstance}.
+ * @param capability capability
+ * @param personalizationString personalization string as a byte array,
+ * can be {@code null}. The content of this
+ * byte array will be copied.
+ * @return a new {@code Instantiation} object
+ * @throws NullPointerException if {@code capability} is {@code null}
+ */
+ public static Instantiation instantiation(int strength,
+ Capability capability,
+ byte[] personalizationString) {
+ return new Instantiation(strength, Objects.requireNonNull(capability),
+ personalizationString);
+ }
+
+ /**
+ * Generates a {@link NextBytes} object.
+ *
+ * @param strength requested security strength in bits. If set to -1, the
+ * effective strength will be used.
+ * @param predictionResistance prediction resistance requested
+ * @param additionalInput additional input, can be {@code null}.
+ * The content of this byte array will be copied.
+ * @return a new {@code NextBytes} object
+ */
+ public static NextBytes nextBytes(int strength,
+ boolean predictionResistance,
+ byte[] additionalInput) {
+ return new NextBytes(strength, predictionResistance, additionalInput);
+ }
+
+ /**
+ * Generates a {@link Reseed} object.
+ *
+ * @param predictionResistance prediction resistance requested
+ * @param additionalInput additional input, can be {@code null}.
+ * The content of this byte array will be copied.
+ * @return a new {@code Reseed} object
+ */
+ public static Reseed reseed(
+ boolean predictionResistance, byte[] additionalInput) {
+ return new Reseed(predictionResistance, additionalInput);
+ }
+}
--- a/jdk/src/java.base/share/classes/java/security/Provider.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/security/Provider.java Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved
+ * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -142,8 +142,35 @@
Constructor<?> con = clazz.getConstructor();
return con.newInstance();
} else {
- Constructor<?> con = clazz.getConstructor(ctrParamClz);
- return con.newInstance(ctorParamObj);
+ // Looking for the constructor with a params first and fallback
+ // to one without if not found. This is to support the enhanced
+ // SecureRandom where both styles of constructors are supported.
+ // Before jdk9, there was no params support (only getInstance(alg))
+ // and an impl only had the params-less constructor. Since jdk9,
+ // there is getInstance(alg,params) and an impl can contain
+ // an Impl(params) constructor.
+ try {
+ Constructor<?> con = clazz.getConstructor(ctrParamClz);
+ return con.newInstance(ctorParamObj);
+ } catch (NoSuchMethodException nsme) {
+ // For pre-jdk9 SecureRandom implementations, they only
+ // have params-less constructors which still works when
+ // the input ctorParamObj is null.
+ //
+ // For other primitives using params, ctorParamObj should not
+ // be null and nsme is thrown, just like before.
+ if (ctorParamObj == null) {
+ try {
+ Constructor<?> con = clazz.getConstructor();
+ return con.newInstance();
+ } catch (NoSuchMethodException nsme2) {
+ nsme.addSuppressed(nsme2);
+ throw nsme;
+ }
+ } else {
+ throw nsme;
+ }
+ }
}
}
@@ -1384,7 +1411,8 @@
addEngine("KeyPairGenerator", false, null);
addEngine("KeyStore", false, null);
addEngine("MessageDigest", false, null);
- addEngine("SecureRandom", false, null);
+ addEngine("SecureRandom", false,
+ "java.security.SecureRandomParameters");
addEngine("Signature", true, null);
addEngine("CertificateFactory", false, null);
addEngine("CertPathBuilder", false, null);
@@ -1678,6 +1706,7 @@
}
}
}
+ // constructorParameter can be null if not provided
return newInstanceUtil(getImplClass(), ctrParamClz, constructorParameter);
} catch (NoSuchAlgorithmException e) {
throw e;
--- a/jdk/src/java.base/share/classes/java/security/SecureRandom.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/security/SecureRandom.java Mon May 09 08:50:20 2016 -0700
@@ -38,52 +38,87 @@
* This class provides a cryptographically strong random number
* generator (RNG).
*
- * <p>A cryptographically strong random number
- * minimally complies with the statistical random number generator tests
- * specified in
+ * <p>A cryptographically strong random number minimally complies with the
+ * statistical random number generator tests specified in
* <a href="http://csrc.nist.gov/publications/fips/fips140-2/fips1402.pdf">
* <i>FIPS 140-2, Security Requirements for Cryptographic Modules</i></a>,
* section 4.9.1.
- * Additionally, SecureRandom must produce non-deterministic output.
- * Therefore any seed material passed to a SecureRandom object must be
- * unpredictable, and all SecureRandom output sequences must be
+ * Additionally, {@code SecureRandom} must produce non-deterministic output.
+ * Therefore any seed material passed to a {@code SecureRandom} object must be
+ * unpredictable, and all {@code SecureRandom} output sequences must be
* cryptographically strong, as described in
* <a href="http://tools.ietf.org/html/rfc4086">
* <i>RFC 4086: Randomness Requirements for Security</i></a>.
*
- * <p>A caller obtains a SecureRandom instance via the
- * no-argument constructor or one of the {@code getInstance} methods:
- *
- * <pre>
- * SecureRandom random = new SecureRandom();
- * </pre>
- *
- * <p> Many SecureRandom implementations are in the form of a pseudo-random
- * number generator (PRNG), which means they use a deterministic algorithm
- * to produce a pseudo-random sequence from a true random seed.
+ * <p> Many {@code SecureRandom} implementations are in the form of a
+ * pseudo-random number generator (PRNG, also known as deterministic random
+ * bits generator or DRBG), which means they use a deterministic algorithm
+ * to produce a pseudo-random sequence from a random seed.
* Other implementations may produce true random numbers,
* and yet others may use a combination of both techniques.
*
- * <p> Typical callers of SecureRandom invoke the following methods
+ * <p>A caller obtains a {@code SecureRandom} instance via the
+ * no-argument constructor or one of the {@code getInstance} methods.
+ * For example:
+ *
+ * <blockquote><pre>
+ * SecureRandom r1 = new SecureRandom();
+ * SecureRandom r2 = SecureRandom.getInstance("NativePRNG");
+ * SecureRandom r3 = SecureRandom("DRBG",
+ * DrbgParameters.Instantiation(128, RESEED_ONLY, null));</pre>
+ * </blockquote>
+ *
+ * <p> The third statement above returns a {@code SecureRandom} object of the
+ * specific algorithm supporting the specific instantiate parameters. The
+ * implementation's effective instantiated parameters must match this minimum
+ * request but is not necessarily the same. For example, even if the request
+ * does not require a certain feature, the actual instantiation can provide
+ * the feature. An implementation may lazily instantiate a {@code SecureRandom}
+ * until it's actually used, but the effective instantiate parameters must be
+ * determined right after it's created and {@link #getParameters()} should
+ * always return the same result unchanged.
+ *
+ * <p> Typical callers of {@code SecureRandom} invoke the following methods
* to retrieve random bytes:
*
- * <pre>
- * SecureRandom random = new SecureRandom();
- * byte[] bytes = new byte[20];
- * random.nextBytes(bytes);
- * </pre>
+ * <blockquote><pre>
+ * SecureRandom random = new SecureRandom();
+ * byte[] bytes = new byte[20];
+ * random.nextBytes(bytes);</pre>
+ * </blockquote>
*
- * <p> Callers may also invoke the {@code generateSeed} method
+ * <p> Callers may also invoke the {@link #generateSeed} method
* to generate a given number of seed bytes (to seed other random number
* generators, for example):
- * <pre>
- * byte[] seed = random.generateSeed(20);
- * </pre>
+ *
+ * <blockquote><pre>
+ * byte[] seed = random.generateSeed(20);</pre>
+ * </blockquote>
+ *
+ * <p> A newly created PRNG {@code SecureRandom} object is not seeded (except
+ * if it is created by {@link #SecureRandom(byte[])}). The first call to
+ * {@code nextBytes} will force it to seed itself from an implementation-
+ * specific entropy source. This self-seeding will not occur if {@code setSeed}
+ * was previously called.
*
- * Note: Depending on the implementation, the {@code generateSeed} and
- * {@code nextBytes} methods may block as entropy is being gathered,
- * for example, if they need to read from /dev/random on various Unix-like
- * operating systems.
+ * <p> A {@code SecureRandom} can be reseeded at any time by calling the
+ * {@code reseed} or {@code setSeed} method. The {@code reseed} method
+ * reads entropy input from its entropy source to reseed itself.
+ * The {@code setSeed} method requires the caller to provide the seed.
+ *
+ * <p> Please note that {@code reseed} may not be supported by all
+ * {@code SecureRandom} implementations.
+ *
+ * <p> Some {@code SecureRandom} implementations may accept a
+ * {@link SecureRandomParameters} parameter in its
+ * {@link #nextBytes(byte[], SecureRandomParameters)} and
+ * {@link #reseed(SecureRandomParameters)} methods to further
+ * control the behavior of the methods.
+ *
+ * <p> Note: Depending on the implementation, the {@code generateSeed},
+ * {@code reseed} and {@code nextBytes} methods may block as entropy is being
+ * gathered, for example, if the entropy source is /dev/random on various
+ * Unix-like operating systems.
*
* @see java.security.SecureRandomSpi
* @see java.util.Random
@@ -132,26 +167,19 @@
*
* <p> This constructor traverses the list of registered security Providers,
* starting with the most preferred Provider.
- * A new SecureRandom object encapsulating the
- * SecureRandomSpi implementation from the first
- * Provider that supports a SecureRandom (RNG) algorithm is returned.
+ * A new {@code SecureRandom} object encapsulating the
+ * {@code SecureRandomSpi} implementation from the first
+ * Provider that supports a {@code SecureRandom} (RNG) algorithm is returned.
* If none of the Providers support a RNG algorithm,
* then an implementation-specific default is returned.
*
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
- * <p> See the SecureRandom section in the <a href=
+ * <p> See the {@code SecureRandom} section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
* Java Cryptography Architecture Standard Algorithm Name Documentation</a>
* for information about standard RNG algorithm names.
- *
- * <p> The returned SecureRandom object has not been seeded. To seed the
- * returned object, call the {@code setSeed} method.
- * If {@code setSeed} is not called, the first call to
- * {@code nextBytes} will force the SecureRandom object to seed itself.
- * This self-seeding will not occur if {@code setSeed} was
- * previously called.
*/
public SecureRandom() {
/*
@@ -166,20 +194,20 @@
/**
* Constructs a secure random number generator (RNG) implementing the
* default random number algorithm.
- * The SecureRandom instance is seeded with the specified seed bytes.
+ * The {@code SecureRandom} instance is seeded with the specified seed bytes.
*
* <p> This constructor traverses the list of registered security Providers,
* starting with the most preferred Provider.
- * A new SecureRandom object encapsulating the
- * SecureRandomSpi implementation from the first
- * Provider that supports a SecureRandom (RNG) algorithm is returned.
+ * A new {@code SecureRandom} object encapsulating the
+ * {@code SecureRandomSpi} implementation from the first
+ * Provider that supports a {@code SecureRandom} (RNG) algorithm is returned.
* If none of the Providers support a RNG algorithm,
* then an implementation-specific default is returned.
*
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
- * <p> See the SecureRandom section in the <a href=
+ * <p> See the {@code SecureRandom} section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
* Java Cryptography Architecture Standard Algorithm Name Documentation</a>
* for information about standard RNG algorithm names.
@@ -225,9 +253,9 @@
}
/**
- * Creates a SecureRandom object.
+ * Creates a {@code SecureRandom} object.
*
- * @param secureRandomSpi the SecureRandom implementation.
+ * @param secureRandomSpi the {@code SecureRandom} implementation.
* @param provider the provider.
*/
protected SecureRandom(SecureRandomSpi secureRandomSpi,
@@ -249,25 +277,18 @@
}
/**
- * Returns a SecureRandom object that implements the specified
+ * Returns a {@code SecureRandom} object that implements the specified
* Random Number Generator (RNG) algorithm.
*
* <p> This method traverses the list of registered security Providers,
* starting with the most preferred Provider.
- * A new SecureRandom object encapsulating the
- * SecureRandomSpi implementation from the first
+ * A new {@code SecureRandom} object encapsulating the
+ * {@code SecureRandomSpi} implementation from the first
* Provider that supports the specified algorithm is returned.
*
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
- * <p> The returned SecureRandom object has not been seeded. To seed the
- * returned object, call the {@code setSeed} method.
- * If {@code setSeed} is not called, the first call to
- * {@code nextBytes} will force the SecureRandom object to seed itself.
- * This self-seeding will not occur if {@code setSeed} was
- * previously called.
- *
* @implNote
* The JDK Reference Implementation additionally uses the
* {@code jdk.security.provider.preferred}
@@ -277,15 +298,15 @@
* {@link Security#getProviders() Security.getProviders()}.
*
* @param algorithm the name of the RNG algorithm.
- * See the SecureRandom section in the <a href=
+ * See the {@code SecureRandom} section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
* Java Cryptography Architecture Standard Algorithm Name Documentation</a>
* for information about standard RNG algorithm names.
*
- * @return the new SecureRandom object.
+ * @return the new {@code SecureRandom} object.
*
* @exception NoSuchAlgorithmException if no Provider supports a
- * SecureRandomSpi implementation for the
+ * {@code SecureRandomSpi} implementation for the
* specified algorithm.
*
* @see Provider
@@ -295,49 +316,42 @@
public static SecureRandom getInstance(String algorithm)
throws NoSuchAlgorithmException {
Instance instance = GetInstance.getInstance("SecureRandom",
- SecureRandomSpi.class, algorithm);
+ SecureRandomSpi.class, algorithm);
return new SecureRandom((SecureRandomSpi)instance.impl,
- instance.provider, algorithm);
+ instance.provider, algorithm);
}
/**
- * Returns a SecureRandom object that implements the specified
+ * Returns a {@code SecureRandom} object that implements the specified
* Random Number Generator (RNG) algorithm.
*
- * <p> A new SecureRandom object encapsulating the
- * SecureRandomSpi implementation from the specified provider
+ * <p> A new {@code SecureRandom} object encapsulating the
+ * {@code SecureRandomSpi} implementation from the specified provider
* is returned. The specified provider must be registered
* in the security provider list.
*
* <p> Note that the list of registered providers may be retrieved via
* the {@link Security#getProviders() Security.getProviders()} method.
*
- * <p> The returned SecureRandom object has not been seeded. To seed the
- * returned object, call the {@code setSeed} method.
- * If {@code setSeed} is not called, the first call to
- * {@code nextBytes} will force the SecureRandom object to seed itself.
- * This self-seeding will not occur if {@code setSeed} was
- * previously called.
- *
* @param algorithm the name of the RNG algorithm.
- * See the SecureRandom section in the <a href=
+ * See the {@code SecureRandom} section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
* Java Cryptography Architecture Standard Algorithm Name Documentation</a>
* for information about standard RNG algorithm names.
*
* @param provider the name of the provider.
*
- * @return the new SecureRandom object.
+ * @return the new {@code SecureRandom} object.
*
- * @exception NoSuchAlgorithmException if a SecureRandomSpi
- * implementation for the specified algorithm is not
- * available from the specified provider.
+ * @throws NoSuchAlgorithmException if a {@code SecureRandomSpi}
+ * implementation for the specified algorithm is not
+ * available from the specified provider.
*
- * @exception NoSuchProviderException if the specified provider is not
- * registered in the security provider list.
+ * @throws NoSuchProviderException if the specified provider is not
+ * registered in the security provider list.
*
- * @exception IllegalArgumentException if the provider name is null
- * or empty.
+ * @throws IllegalArgumentException if the provider name is null
+ * or empty.
*
* @see Provider
*
@@ -352,36 +366,29 @@
}
/**
- * Returns a SecureRandom object that implements the specified
+ * Returns a {@code SecureRandom} object that implements the specified
* Random Number Generator (RNG) algorithm.
*
- * <p> A new SecureRandom object encapsulating the
- * SecureRandomSpi implementation from the specified Provider
- * object is returned. Note that the specified Provider object
+ * <p> A new {@code SecureRandom} object encapsulating the
+ * {@code SecureRandomSpi} implementation from the specified {@code Provider}
+ * object is returned. Note that the specified {@code Provider} object
* does not have to be registered in the provider list.
*
- * <p> The returned SecureRandom object has not been seeded. To seed the
- * returned object, call the {@code setSeed} method.
- * If {@code setSeed} is not called, the first call to
- * {@code nextBytes} will force the SecureRandom object to seed itself.
- * This self-seeding will not occur if {@code setSeed} was
- * previously called.
- *
* @param algorithm the name of the RNG algorithm.
- * See the SecureRandom section in the <a href=
+ * See the {@code SecureRandom} section in the <a href=
* "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
* Java Cryptography Architecture Standard Algorithm Name Documentation</a>
* for information about standard RNG algorithm names.
*
* @param provider the provider.
*
- * @return the new SecureRandom object.
+ * @return the new {@code SecureRandom} object.
*
- * @exception NoSuchAlgorithmException if a SecureRandomSpi
- * implementation for the specified algorithm is not available
- * from the specified Provider object.
+ * @throws NoSuchAlgorithmException if a {@code SecureRandomSpi}
+ * implementation for the specified algorithm is not available
+ * from the specified {@code Provider} object.
*
- * @exception IllegalArgumentException if the specified provider is null.
+ * @throws IllegalArgumentException if the specified provider is null.
*
* @see Provider
*
@@ -396,24 +403,178 @@
}
/**
- * Returns the SecureRandomSpi of this SecureRandom object.
+ * Returns a {@code SecureRandom} object that implements the specified
+ * Random Number Generator (RNG) algorithm and supports the specified
+ * {@code SecureRandomParameters} request.
+ *
+ * <p> This method traverses the list of registered security Providers,
+ * starting with the most preferred Provider.
+ * A new {@code SecureRandom} object encapsulating the
+ * {@code SecureRandomSpi} implementation from the first
+ * Provider that supports the specified algorithm and the specified
+ * {@code SecureRandomParameters} is returned.
+ *
+ * <p> Note that the list of registered providers may be retrieved via
+ * the {@link Security#getProviders() Security.getProviders()} method.
+ *
+ * @implNote
+ * The JDK Reference Implementation additionally uses the
+ * {@code jdk.security.provider.preferred} property to determine
+ * the preferred provider order for the specified algorithm. This
+ * may be different than the order of providers returned by
+ * {@link Security#getProviders() Security.getProviders()}.
+ *
+ * @param algorithm the name of the RNG algorithm.
+ * See the {@code SecureRandom} section in the <a href=
+ * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
+ * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * for information about standard RNG algorithm names.
+ *
+ * @param params the {@code SecureRandomParameters}
+ * the newly created {@code SecureRandom} object must support.
+ *
+ * @return the new {@code SecureRandom} object.
+ *
+ * @throws NoSuchAlgorithmException if no Provider supports a
+ * {@code SecureRandomSpi} implementation for the specified
+ * algorithm and parameters.
+ *
+ * @throws IllegalArgumentException if the specified params is null.
+ *
+ * @see Provider
+ *
+ * @since 9
+ */
+ public static SecureRandom getInstance(
+ String algorithm, SecureRandomParameters params)
+ throws NoSuchAlgorithmException {
+ if (params == null) {
+ throw new IllegalArgumentException("params cannot be null");
+ }
+ Instance instance = GetInstance.getInstance("SecureRandom",
+ SecureRandomSpi.class, algorithm, params);
+ return new SecureRandom((SecureRandomSpi)instance.impl,
+ instance.provider, algorithm);
+ }
+
+ /**
+ * Returns a {@code SecureRandom} object that implements the specified
+ * Random Number Generator (RNG) algorithm and supports the specified
+ * {@code SecureRandomParameters} request.
+ *
+ * <p> A new {@code SecureRandom} object encapsulating the
+ * {@code SecureRandomSpi} implementation from the specified provider
+ * is returned. The specified provider must be registered
+ * in the security provider list.
+ *
+ * <p> Note that the list of registered providers may be retrieved via
+ * the {@link Security#getProviders() Security.getProviders()} method.
+ *
+ * @param algorithm the name of the RNG algorithm.
+ * See the {@code SecureRandom} section in the <a href=
+ * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
+ * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * for information about standard RNG algorithm names.
+ *
+ * @param params the {@code SecureRandomParameters}
+ * the newly created {@code SecureRandom} object must support.
+ *
+ * @param provider the name of the provider.
+ *
+ * @return the new {@code SecureRandom} object.
+ *
+ * @throws NoSuchAlgorithmException if the specified provider does not
+ * support a {@code SecureRandomSpi} implementation for the
+ * specified algorithm and parameters.
+ *
+ * @throws NoSuchProviderException if the specified provider is not
+ * registered in the security provider list.
+ *
+ * @throws IllegalArgumentException if the provider name is null
+ * or empty, or params is null.
+ *
+ * @see Provider
+ *
+ * @since 9
+ */
+ public static SecureRandom getInstance(String algorithm,
+ SecureRandomParameters params, String provider)
+ throws NoSuchAlgorithmException, NoSuchProviderException {
+ if (params == null) {
+ throw new IllegalArgumentException("params cannot be null");
+ }
+ Instance instance = GetInstance.getInstance("SecureRandom",
+ SecureRandomSpi.class, algorithm, params, provider);
+ return new SecureRandom((SecureRandomSpi)instance.impl,
+ instance.provider, algorithm);
+ }
+
+ /**
+ * Returns a {@code SecureRandom} object that implements the specified
+ * Random Number Generator (RNG) algorithm and supports the specified
+ * {@code SecureRandomParameters} request.
+ *
+ * <p> A new {@code SecureRandom} object encapsulating the
+ * {@code SecureRandomSpi} implementation from the specified
+ * {@code Provider} object is returned. Note that the specified
+ * {@code Provider} object does not have to be registered in the
+ * provider list.
+ *
+ * @param algorithm the name of the RNG algorithm.
+ * See the {@code SecureRandom} section in the <a href=
+ * "{@docRoot}/../technotes/guides/security/StandardNames.html#SecureRandom">
+ * Java Cryptography Architecture Standard Algorithm Name Documentation</a>
+ * for information about standard RNG algorithm names.
+ *
+ * @param params the {@code SecureRandomParameters}
+ * the newly created {@code SecureRandom} object must support.
+ *
+ * @param provider the provider.
+ *
+ * @return the new {@code SecureRandom} object.
+ *
+ * @throws NoSuchAlgorithmException if the specified provider does not
+ * support a {@code SecureRandomSpi} implementation for the
+ * specified algorithm and parameters.
+ *
+ * @throws IllegalArgumentException if the specified provider or params
+ * is null.
+ *
+ * @see Provider
+ *
+ * @since 9
+ */
+ public static SecureRandom getInstance(String algorithm,
+ SecureRandomParameters params, Provider provider)
+ throws NoSuchAlgorithmException {
+ if (params == null) {
+ throw new IllegalArgumentException("params cannot be null");
+ }
+ Instance instance = GetInstance.getInstance("SecureRandom",
+ SecureRandomSpi.class, algorithm, params, provider);
+ return new SecureRandom((SecureRandomSpi)instance.impl,
+ instance.provider, algorithm);
+ }
+
+ /**
+ * Returns the {@code SecureRandomSpi} of this {@code SecureRandom} object.
*/
SecureRandomSpi getSecureRandomSpi() {
return secureRandomSpi;
}
/**
- * Returns the provider of this SecureRandom object.
+ * Returns the provider of this {@code SecureRandom} object.
*
- * @return the provider of this SecureRandom object.
+ * @return the provider of this {@code SecureRandom} object.
*/
public final Provider getProvider() {
return provider;
}
/**
- * Returns the name of the algorithm implemented by this SecureRandom
- * object.
+ * Returns the name of the algorithm implemented by this
+ * {@code SecureRandom} object.
*
* @return the name of the algorithm or {@code unknown}
* if the algorithm name cannot be determined.
@@ -424,9 +585,49 @@
}
/**
- * Reseeds this random object. The given seed supplements, rather than
- * replaces, the existing seed. Thus, repeated calls are guaranteed
- * never to reduce randomness.
+ * Returns a Human-readable string representation of this
+ * {@code SecureRandom}.
+ *
+ * @return the string representation
+ *
+ * @since 9
+ */
+ @Override
+ public String toString() {
+ return secureRandomSpi.toString();
+ }
+
+ /**
+ * Returns the effective {@link SecureRandomParameters} for this
+ * {@code SecureRandom} instance.
+ * <p>
+ * The returned value can be different from the
+ * {@code SecureRandomParameters} object passed into a {@code getInstance}
+ * method, but it cannot change during the lifetime of this
+ * {@code SecureRandom} object.
+ * <p>
+ * A caller can use the returned value to find out what features this
+ * {@code SecureRandom} supports.
+ *
+ * @return the effective {@link SecureRandomParameters} parameters,
+ * or {@code null} if no parameters were used.
+ *
+ * @since 9
+ * @see SecureRandomSpi
+ */
+ public SecureRandomParameters getParameters() {
+ return secureRandomSpi.engineGetParameters();
+ }
+
+ /**
+ * Reseeds this random object with the given seed. The seed supplements,
+ * rather than replaces, the existing seed. Thus, repeated calls are
+ * guaranteed never to reduce randomness.
+ * <p>
+ * A PRNG {@code SecureRandom} will not seed itself automatically if
+ * {@code setSeed} is called before any {@code nextBytes} or {@code reseed}
+ * calls. The caller should make sure that the {@code seed} argument
+ * contains enough entropy for the security of this {@code SecureRandom}.
*
* @param seed the seed.
*
@@ -458,18 +659,13 @@
* yet been initialized at that point.
*/
if (seed != 0) {
- secureRandomSpi.engineSetSeed(longToByteArray(seed));
+ this.secureRandomSpi.engineSetSeed(longToByteArray(seed));
}
}
/**
* Generates a user-specified number of random bytes.
*
- * <p> If a call to {@code setSeed} had not occurred previously,
- * the first call to this method forces this SecureRandom object
- * to seed itself. This self-seeding will not occur if
- * {@code setSeed} was previously called.
- *
* @param bytes the array to be filled in with random bytes.
*/
@Override
@@ -478,6 +674,28 @@
}
/**
+ * Generates a user-specified number of random bytes with
+ * additional parameters.
+ *
+ * @param bytes the array to be filled in with random bytes
+ * @param params additional parameters
+ * @throws NullPointerException if {@code bytes} is null
+ * @throws UnsupportedOperationException if the underlying provider
+ * implementation has not overridden this method
+ * @throws IllegalArgumentException if {@code params} is {@code null},
+ * illegal or unsupported by this {@code SecureRandom}
+ *
+ * @since 9
+ */
+ public synchronized void nextBytes(
+ byte[] bytes, SecureRandomParameters params) {
+ if (params == null) {
+ throw new IllegalArgumentException("params cannot be null");
+ }
+ secureRandomSpi.engineNextBytes(Objects.requireNonNull(bytes), params);
+ }
+
+ /**
* Generates an integer containing the user-specified number of
* pseudo-random bits (right justified, with leading zeros). This
* method overrides a {@code java.util.Random} method, and serves
@@ -512,7 +730,7 @@
*
* <p>This method is only included for backwards compatibility.
* The caller is encouraged to use one of the alternative
- * {@code getInstance} methods to obtain a SecureRandom object, and
+ * {@code getInstance} methods to obtain a {@code SecureRandom} object, and
* then call the {@code generateSeed} method to obtain seed bytes
* from that object.
*
@@ -537,10 +755,13 @@
* call may be used to seed other random number generators.
*
* @param numBytes the number of seed bytes to generate.
- *
+ * @throws IllegalArgumentException if {@code numBytes} is negative
* @return the seed bytes.
*/
public byte[] generateSeed(int numBytes) {
+ if (numBytes < 0) {
+ throw new IllegalArgumentException("numBytes cannot be negative");
+ }
return secureRandomSpi.engineGenerateSeed(numBytes);
}
@@ -562,8 +783,8 @@
/**
* Gets a default PRNG algorithm by looking through all registered
* providers. Returns the first PRNG algorithm of the first provider that
- * has registered a SecureRandom implementation, or null if none of the
- * registered providers supplies a SecureRandom implementation.
+ * has registered a {@code SecureRandom} implementation, or null if none of
+ * the registered providers supplies a {@code SecureRandom} implementation.
*/
private static String getPrngAlgorithm() {
for (Provider p : Providers.getProviderList().providers()) {
@@ -667,6 +888,42 @@
"No strong SecureRandom impls available: " + property);
}
+ /**
+ * Reseeds this {@code SecureRandom} with entropy input read from its
+ * entropy source.
+ *
+ * @throws UnsupportedOperationException if the underlying provider
+ * implementation has not overridden this method.
+ *
+ * @since 9
+ */
+ public synchronized void reseed() {
+ secureRandomSpi.engineReseed(null);
+ }
+
+ /**
+ * Reseeds this {@code SecureRandom} with entropy input read from its
+ * entropy source with additional parameters.
+ * <p>
+ * Note that entropy is obtained from an entropy source. While
+ * some data in {@code params} may contain entropy, its main usage is to
+ * provide diversity.
+ *
+ * @param params extra parameters
+ * @throws UnsupportedOperationException if the underlying provider
+ * implementation has not overridden this method.
+ * @throws IllegalArgumentException if {@code params} is {@code null},
+ * illegal or unsupported by this {@code SecureRandom}
+ *
+ * @since 9
+ */
+ public synchronized void reseed(SecureRandomParameters params) {
+ if (params == null) {
+ throw new IllegalArgumentException("params cannot be null");
+ }
+ secureRandomSpi.engineReseed(params);
+ }
+
// Declare serialVersionUID to be compatible with JDK1.1
static final long serialVersionUID = 4940670005562187L;
@@ -685,7 +942,7 @@
* We know that the MessageDigest class does not implement
* java.io.Serializable. However, since this field is no longer
* used, it will always be NULL and won't affect the serialization
- * of the SecureRandom class itself.
+ * of the {@code SecureRandom} class itself.
*/
private byte[] randomBytes;
/**
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/java/security/SecureRandomParameters.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package java.security;
+
+/**
+ * A marker interface for parameters used in various {@code SecureRandom}
+ * methods.
+ * <p>
+ * Some {@code SecureRandom} implementations might require additional
+ * operational parameters. Objects of classes which implement this interface
+ * can be passed to those implementations that support them.
+ *
+ * @see DrbgParameters
+ */
+public interface SecureRandomParameters {
+}
--- a/jdk/src/java.base/share/classes/java/security/SecureRandomSpi.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/security/SecureRandomSpi.java Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -27,13 +27,38 @@
/**
* This class defines the <i>Service Provider Interface</i> (<b>SPI</b>)
- * for the {@code SecureRandom} class.
+ * for the {@link SecureRandom} class.
+ * <p>
* All the abstract methods in this class must be implemented by each
* service provider who wishes to supply the implementation
* of a cryptographically strong pseudo-random number generator.
*
+ * @implSpec
+ * If the {@link #SecureRandomSpi(SecureRandomParameters)}
+ * constructor is overridden in an implementation, it will always be called
+ * whenever a {@code SecureRandom} is instantiated. Precisely, if an object is
+ * instantiated with one of {@code SecureRandom}'s {@code getInstance} methods
+ * <em>without</em> a {@link SecureRandomParameters} parameter,
+ * the constructor will be called with a {@code null} argument and the
+ * implementation is responsible for creating its own
+ * {@code SecureRandomParameters} parameter for use when
+ * {@link #engineGetParameters()} is called. If an object
+ * is instantiated with one of {@code SecureRandom}'s {@code getInstance}
+ * methods <em>with</em> a {@code SecureRandomParameters} argument,
+ * the constructor will be called with that argument. The
+ * {@link #engineGetParameters()} method must not return {@code null}.
+ * <p>
+ * Otherwise, if the {@code SecureRandomSpi(SecureRandomParameters)}
+ * constructor is not overridden in an implementation, the
+ * {@link #SecureRandomSpi()} constructor must be overridden and it will be
+ * called if an object is instantiated with one of {@code SecureRandom}'s
+ * {@code getInstance} methods <em>without</em> a
+ * {@code SecureRandomParameters} argument. Calling one of
+ * {@code SecureRandom}'s {@code getInstance} methods <em>with</em>
+ * a {@code SecureRandomParameters} argument will never
+ * return an instance of this implementation. The
+ * {@link #engineGetParameters()} method must return {@code null}.
*
- * @see SecureRandom
* @since 1.2
*/
@@ -42,9 +67,30 @@
private static final long serialVersionUID = -2991854161009191830L;
/**
- * Reseeds this random object. The given seed supplements, rather than
- * replaces, the existing seed. Thus, repeated calls are guaranteed
- * never to reduce randomness.
+ * Constructor without a parameter.
+ */
+ public SecureRandomSpi() {
+ // ignored
+ }
+
+ /**
+ * Constructor with a parameter.
+ *
+ * @param params the {@link SecureRandomParameters} object.
+ * This argument can be {@code null}.
+ * @throws IllegalArgumentException if {@code params} is
+ * unrecognizable or unsupported by this {@code SecureRandom}
+ *
+ * @since 9
+ */
+ protected SecureRandomSpi(SecureRandomParameters params) {
+ // ignored
+ }
+
+ /**
+ * Reseeds this random object with the given seed. The seed supplements,
+ * rather than replaces, the existing seed. Thus, repeated calls
+ * are guaranteed never to reduce randomness.
*
* @param seed the seed.
*/
@@ -52,17 +98,45 @@
/**
* Generates a user-specified number of random bytes.
- *
- * <p> If a call to {@code engineSetSeed} had not occurred previously,
- * the first call to this method forces this SecureRandom implementation
- * to seed itself. This self-seeding will not occur if
- * {@code engineSetSeed} was previously called.
+ * <p>
+ * Some random number generators can only generate a limited amount
+ * of random bytes per invocation. If the size of {@code bytes}
+ * is greater than this limit, the implementation should invoke
+ * its generation process multiple times to completely fill the
+ * buffer before returning from this method.
*
* @param bytes the array to be filled in with random bytes.
*/
protected abstract void engineNextBytes(byte[] bytes);
/**
+ * Generates a user-specified number of random bytes with
+ * additional parameters.
+ * <p>
+ * Some random number generators can only generate a limited amount
+ * of random bytes per invocation. If the size of {@code bytes}
+ * is greater than this limit, the implementation should invoke
+ * its generation process multiple times to completely fill the
+ * buffer before returning from this method.
+ *
+ * @implSpec The default implementation throws
+ * an {@link UnsupportedOperationException}.
+ *
+ * @param bytes the array to be filled in with random bytes
+ * @param params additional parameters
+ * @throws UnsupportedOperationException if the implementation
+ * has not overridden this method
+ * @throws IllegalArgumentException if {@code params} is {@code null},
+ * illegal or unsupported by this {@code SecureRandom}
+ *
+ * @since 9
+ */
+ protected void engineNextBytes(
+ byte[] bytes, SecureRandomParameters params) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
* Returns the given number of seed bytes. This call may be used to
* seed other random number generators.
*
@@ -70,5 +144,58 @@
*
* @return the seed bytes.
*/
- protected abstract byte[] engineGenerateSeed(int numBytes);
+ protected abstract byte[] engineGenerateSeed(int numBytes);
+
+ /**
+ * Reseeds this random object with entropy input read from its
+ * entropy source with additional parameters.
+ * <p>
+ * If this method is called by {@link SecureRandom#reseed()},
+ * {@code params} will be {@code null}.
+ * <p>
+ * Do not override this method if the implementation does not
+ * support reseeding.
+ *
+ * @implSpec The default implementation throws
+ * an {@link UnsupportedOperationException}.
+ *
+ * @param params extra parameters, can be {@code null}.
+ * @throws UnsupportedOperationException if the implementation
+ * has not overridden this method
+ * @throws IllegalArgumentException if {@code params} is
+ * illegal or unsupported by this {@code SecureRandom}
+ *
+ * @since 9
+ */
+ protected void engineReseed(SecureRandomParameters params) {
+ throw new UnsupportedOperationException();
+ }
+
+ /**
+ * Returns the effective {@link SecureRandomParameters} for this
+ * {@code SecureRandom} instance.
+ *
+ * @implSpec The default implementation returns {@code null}.
+ *
+ * @return the effective {@link SecureRandomParameters} parameters,
+ * or {@code null} if no parameters were used.
+ *
+ * @since 9
+ */
+ protected SecureRandomParameters engineGetParameters() {
+ return null;
+ }
+
+ /**
+ * Returns a Human-readable string representation of this
+ * {@code SecureRandom}.
+ *
+ * @return the string representation
+ *
+ * @since 9
+ */
+ @Override
+ public String toString() {
+ return getClass().getSimpleName();
+ }
}
--- a/jdk/src/java.base/share/classes/java/time/format/DateTimeFormatterBuilder.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/time/format/DateTimeFormatterBuilder.java Mon May 09 08:50:20 2016 -0700
@@ -1488,7 +1488,7 @@
* d 1 appendValue(ChronoField.DAY_OF_MONTH)
* dd 2 appendValue(ChronoField.DAY_OF_MONTH, 2)
* D 1 appendValue(ChronoField.DAY_OF_YEAR)
- * DD 2 appendValue(ChronoField.DAY_OF_YEAR, 2)
+ * DD 2 appendValue(ChronoField.DAY_OF_YEAR, 2, 3, SignStyle.NOT_NEGATIVE)
* DDD 3 appendValue(ChronoField.DAY_OF_YEAR, 3)
* F 1 appendValue(ChronoField.ALIGNED_DAY_OF_WEEK_IN_MONTH)
* g..g 1..n appendValue(JulianFields.MODIFIED_JULIAN_DAY, n, 19, SignStyle.NORMAL)
@@ -1527,12 +1527,9 @@
* ss 2 appendValue(ChronoField.SECOND_OF_MINUTE, 2)
*
* S..S 1..n appendFraction(ChronoField.NANO_OF_SECOND, n, n, false)
- * A 1 appendValue(ChronoField.MILLI_OF_DAY)
- * A..A 2..n appendValue(ChronoField.MILLI_OF_DAY, n)
- * n 1 appendValue(ChronoField.NANO_OF_SECOND)
- * n..n 2..n appendValue(ChronoField.NANO_OF_SECOND, n)
- * N 1 appendValue(ChronoField.NANO_OF_DAY)
- * N..N 2..n appendValue(ChronoField.NANO_OF_DAY, n)
+ * A..A 1..n appendValue(ChronoField.MILLI_OF_DAY, n, 19, SignStyle.NOT_NEGATIVE)
+ * n..n 1..n appendValue(ChronoField.NANO_OF_SECOND, n, 19, SignStyle.NOT_NEGATIVE)
+ * N..N 1..n appendValue(ChronoField.NANO_OF_DAY, n, 19, SignStyle.NOT_NEGATIVE)
* </pre>
* <p>
* <b>Zone ID</b>: Pattern letters to output {@code ZoneId}.
@@ -1841,8 +1838,8 @@
case 'D':
if (count == 1) {
appendValue(field);
- } else if (count <= 3) {
- appendValue(field, count);
+ } else if (count == 2 || count == 3) {
+ appendValue(field, count, 3, SignStyle.NOT_NEGATIVE);
} else {
throw new IllegalArgumentException("Too many pattern letters: " + cur);
}
@@ -1850,6 +1847,11 @@
case 'g':
appendValue(field, count, 19, SignStyle.NORMAL);
break;
+ case 'A':
+ case 'n':
+ case 'N':
+ appendValue(field, count, 19, SignStyle.NOT_NEGATIVE);
+ break;
default:
if (count == 1) {
appendValue(field);
--- a/jdk/src/java.base/share/classes/java/util/Currency.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/util/Currency.java Mon May 09 08:50:20 2016 -0700
@@ -546,6 +546,33 @@
}
/**
+ * Returns the 3 digit ISO 4217 numeric code of this currency as a {@code String}.
+ * Unlike {@link getNumericCode()}, which returns the numeric code as {@code int},
+ * this method always returns the numeric code as a 3 digit string.
+ * e.g. a numeric value of 32 would be returned as "032",
+ * and a numeric value of 6 would be returned as "006".
+ *
+ * @return the 3 digit ISO 4217 numeric code of this currency as a {@code String}
+ * @since 9
+ */
+ public String getNumericCodeAsString() {
+ /* numeric code could be returned as a 3 digit string simply by using
+ String.format("%03d",numericCode); which uses regex to parse the format,
+ "%03d" in this case. Parsing a regex gives an extra performance overhead,
+ so String.format() approach is avoided in this scenario.
+ */
+ if (numericCode < 100) {
+ StringBuilder sb = new StringBuilder();
+ sb.append('0');
+ if (numericCode < 10) {
+ sb.append('0');
+ }
+ return sb.append(numericCode).toString();
+ }
+ return String.valueOf(numericCode);
+ }
+
+ /**
* Gets the name that is suitable for displaying this currency for
* the default {@link Locale.Category#DISPLAY DISPLAY} locale.
* If there is no suitable display name found
@@ -788,3 +815,4 @@
}
}
}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/java/util/ImmutableCollections.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,657 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package java.util;
+
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.ObjectStreamException;
+import java.io.Serializable;
+
+/**
+ * Container class for immutable collections. Not part of the public API.
+ * Mainly for namespace management and shared infrastructure.
+ *
+ * Serial warnings are suppressed throughout because all implementation
+ * classes use a serial proxy and thus have no need to declare serialVersionUID.
+ */
+@SuppressWarnings("serial")
+class ImmutableCollections {
+ /**
+ * A "salt" value used for randomizing iteration order. This is initialized once
+ * and stays constant for the lifetime of the JVM. It need not be truly random, but
+ * it needs to vary sufficiently from one run to the next so that iteration order
+ * will vary between JVM runs.
+ */
+ static final int SALT;
+ static {
+ SALT = new Random().nextInt();
+ }
+
+ /** No instances. */
+ private ImmutableCollections() { }
+
+ /**
+ * The reciprocal of load factor. Given a number of elements
+ * to store, multiply by this factor to get the table size.
+ */
+ static final double EXPAND_FACTOR = 2.0;
+
+ // ---------- List Implementations ----------
+
+ static final class List0<E> extends AbstractList<E> implements RandomAccess, Serializable {
+ List0() { }
+
+ @Override
+ public int size() {
+ return 0;
+ }
+
+ @Override
+ public E get(int index) {
+ Objects.checkIndex(index, 0); // always throws IndexOutOfBoundsException
+ return null; // but the compiler doesn't know this
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ throw new InvalidObjectException("not serial proxy");
+ }
+
+ private Object writeReplace() {
+ return new CollSer(CollSer.IMM_LIST);
+ }
+ }
+
+ static final class List1<E> extends AbstractList<E> implements RandomAccess, Serializable {
+ private final E e0;
+
+ List1(E e0) {
+ this.e0 = Objects.requireNonNull(e0);
+ }
+
+ @Override
+ public int size() {
+ return 1;
+ }
+
+ @Override
+ public E get(int index) {
+ Objects.checkIndex(index, 1);
+ // assert index == 0
+ return e0;
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ throw new InvalidObjectException("not serial proxy");
+ }
+
+ private Object writeReplace() {
+ return new CollSer(CollSer.IMM_LIST, e0);
+ }
+ }
+
+ static final class List2<E> extends AbstractList<E> implements RandomAccess, Serializable {
+ private final E e0;
+ private final E e1;
+
+ List2(E e0, E e1) {
+ this.e0 = Objects.requireNonNull(e0);
+ this.e1 = Objects.requireNonNull(e1);
+ }
+
+ @Override
+ public int size() {
+ return 2;
+ }
+
+ @Override
+ public E get(int index) {
+ Objects.checkIndex(index, 2);
+ if (index == 0) {
+ return e0;
+ } else { // index == 1
+ return e1;
+ }
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ throw new InvalidObjectException("not serial proxy");
+ }
+
+ private Object writeReplace() {
+ return new CollSer(CollSer.IMM_LIST, e0, e1);
+ }
+ }
+
+ static final class ListN<E> extends AbstractList<E> implements RandomAccess, Serializable {
+ private final E[] elements;
+
+ @SafeVarargs
+ ListN(E... input) {
+ // copy and check manually to avoid TOCTOU
+ @SuppressWarnings("unchecked")
+ E[] tmp = (E[])new Object[input.length]; // implicit nullcheck of input
+ for (int i = 0; i < input.length; i++) {
+ tmp[i] = Objects.requireNonNull(input[i]);
+ }
+ this.elements = tmp;
+ }
+
+ @Override
+ public int size() {
+ return elements.length;
+ }
+
+ @Override
+ public E get(int index) {
+ Objects.checkIndex(index, elements.length);
+ return elements[index];
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ throw new InvalidObjectException("not serial proxy");
+ }
+
+ private Object writeReplace() {
+ return new CollSer(CollSer.IMM_LIST, elements);
+ }
+ }
+
+ // ---------- Set Implementations ----------
+
+ static final class Set0<E> extends AbstractSet<E> implements Serializable {
+ Set0() { }
+
+ @Override
+ public int size() {
+ return 0;
+ }
+
+ @Override
+ public boolean contains(Object o) {
+ return super.contains(Objects.requireNonNull(o));
+ }
+
+ @Override
+ public Iterator<E> iterator() {
+ return Collections.emptyIterator();
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ throw new InvalidObjectException("not serial proxy");
+ }
+
+ private Object writeReplace() {
+ return new CollSer(CollSer.IMM_SET);
+ }
+ }
+
+ static final class Set1<E> extends AbstractSet<E> implements Serializable {
+ private final E e0;
+
+ Set1(E e0) {
+ this.e0 = Objects.requireNonNull(e0);
+ }
+
+ @Override
+ public int size() {
+ return 1;
+ }
+
+ @Override
+ public boolean contains(Object o) {
+ return super.contains(Objects.requireNonNull(o));
+ }
+
+ @Override
+ public Iterator<E> iterator() {
+ return Collections.singletonIterator(e0);
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ throw new InvalidObjectException("not serial proxy");
+ }
+
+ private Object writeReplace() {
+ return new CollSer(CollSer.IMM_SET, e0);
+ }
+ }
+
+ static final class Set2<E> extends AbstractSet<E> implements Serializable {
+ private final E e0;
+ private final E e1;
+
+ Set2(E e0, E e1) {
+ Objects.requireNonNull(e0);
+ Objects.requireNonNull(e1);
+
+ if (e0.equals(e1)) {
+ throw new IllegalArgumentException("duplicate element: " + e0);
+ }
+
+ if (SALT >= 0) {
+ this.e0 = e0;
+ this.e1 = e1;
+ } else {
+ this.e0 = e1;
+ this.e1 = e0;
+ }
+ }
+
+ @Override
+ public int size() {
+ return 2;
+ }
+
+ @Override
+ public boolean contains(Object o) {
+ return super.contains(Objects.requireNonNull(o));
+ }
+
+ @Override
+ public Iterator<E> iterator() {
+ return new Iterator<E>() {
+ private int idx = 0;
+
+ @Override
+ public boolean hasNext() {
+ return idx < 2;
+ }
+
+ @Override
+ public E next() {
+ if (idx == 0) {
+ idx = 1;
+ return e0;
+ } else if (idx == 1) {
+ idx = 2;
+ return e1;
+ } else {
+ throw new NoSuchElementException();
+ }
+ }
+ };
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ throw new InvalidObjectException("not serial proxy");
+ }
+
+ private Object writeReplace() {
+ return new CollSer(CollSer.IMM_SET, e0, e1);
+ }
+ }
+
+ /**
+ * An array-based Set implementation. The element array must be strictly
+ * larger than the size (the number of contained elements) so that at
+ * least one null is always present.
+ * @param <E> the element type
+ */
+ static final class SetN<E> extends AbstractSet<E> implements Serializable {
+ private final E[] elements;
+ private final int size;
+
+ @SafeVarargs
+ @SuppressWarnings("unchecked")
+ SetN(E... input) {
+ size = input.length; // implicit nullcheck of input
+
+ elements = (E[])new Object[(int)Math.ceil(EXPAND_FACTOR * input.length)];
+ for (int i = 0; i < input.length; i++) {
+ E e = Objects.requireNonNull(input[i]);
+ int idx = probe(e);
+ if (idx >= 0) {
+ throw new IllegalArgumentException("duplicate element: " + e);
+ } else {
+ elements[-(idx + 1)] = e;
+ }
+ }
+ }
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+ @Override
+ public boolean contains(Object o) {
+ Objects.requireNonNull(o);
+ return probe(o) >= 0;
+ }
+
+ @Override
+ public Iterator<E> iterator() {
+ return new Iterator<E>() {
+ private int idx = 0;
+
+ @Override
+ public boolean hasNext() {
+ while (idx < elements.length) {
+ if (elements[idx] != null)
+ return true;
+ idx++;
+ }
+ return false;
+ }
+
+ @Override
+ public E next() {
+ if (! hasNext()) {
+ throw new NoSuchElementException();
+ }
+ return elements[idx++];
+ }
+ };
+ }
+
+ // returns index at which element is present; or if absent,
+ // (-i - 1) where i is location where element should be inserted
+ private int probe(Object pe) {
+ int idx = Math.floorMod(pe.hashCode() ^ SALT, elements.length);
+ while (true) {
+ E ee = elements[idx];
+ if (ee == null) {
+ return -idx - 1;
+ } else if (pe.equals(ee)) {
+ return idx;
+ } else if (++idx == elements.length) {
+ idx = 0;
+ }
+ }
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ throw new InvalidObjectException("not serial proxy");
+ }
+
+ private Object writeReplace() {
+ Object[] array = new Object[size];
+ int dest = 0;
+ for (Object o : elements) {
+ if (o != null) {
+ array[dest++] = o;
+ }
+ }
+ return new CollSer(CollSer.IMM_SET, array);
+ }
+ }
+
+ // ---------- Map Implementations ----------
+
+ static final class Map0<K,V> extends AbstractMap<K,V> implements Serializable {
+ Map0() { }
+
+ @Override
+ public Set<Map.Entry<K,V>> entrySet() {
+ return Set.of();
+ }
+
+ @Override
+ public boolean containsKey(Object o) {
+ return super.containsKey(Objects.requireNonNull(o));
+ }
+
+ @Override
+ public boolean containsValue(Object o) {
+ return super.containsValue(Objects.requireNonNull(o));
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ throw new InvalidObjectException("not serial proxy");
+ }
+
+ private Object writeReplace() {
+ return new CollSer(CollSer.IMM_MAP);
+ }
+ }
+
+ static final class Map1<K,V> extends AbstractMap<K,V> implements Serializable {
+ private final K k0;
+ private final V v0;
+
+ Map1(K k0, V v0) {
+ this.k0 = Objects.requireNonNull(k0);
+ this.v0 = Objects.requireNonNull(v0);
+ }
+
+ @Override
+ public Set<Map.Entry<K,V>> entrySet() {
+ return Set.of(new KeyValueHolder<>(k0, v0));
+ }
+
+ @Override
+ public boolean containsKey(Object o) {
+ return super.containsKey(Objects.requireNonNull(o));
+ }
+
+ @Override
+ public boolean containsValue(Object o) {
+ return super.containsValue(Objects.requireNonNull(o));
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ throw new InvalidObjectException("not serial proxy");
+ }
+
+ private Object writeReplace() {
+ return new CollSer(CollSer.IMM_MAP, k0, v0);
+ }
+ }
+
+ /**
+ * An array-based Map implementation. There is a single array "table" that
+ * contains keys and values interleaved: table[0] is kA, table[1] is vA,
+ * table[2] is kB, table[3] is vB, etc. The table size must be even. It must
+ * also be strictly larger than the size (the number of key-value pairs contained
+ * in the map) so that at least one null key is always present.
+ * @param <K> the key type
+ * @param <V> the value type
+ */
+ static final class MapN<K,V> extends AbstractMap<K,V> implements Serializable {
+ private final Object[] table; // pairs of key, value
+ private final int size; // number of pairs
+
+ MapN(Object... input) {
+ Objects.requireNonNull(input);
+ if ((input.length & 1) != 0) {
+ throw new InternalError("length is odd");
+ }
+ size = input.length >> 1;
+
+ int len = (int)Math.ceil(EXPAND_FACTOR * input.length);
+ len = (len + 1) & ~1; // ensure table is even length
+ table = new Object[len];
+
+ for (int i = 0; i < input.length; i += 2) {
+ @SuppressWarnings("unchecked")
+ K k = Objects.requireNonNull((K)input[i]);
+ @SuppressWarnings("unchecked")
+ V v = Objects.requireNonNull((V)input[i+1]);
+ int idx = probe(k);
+ if (idx >= 0) {
+ throw new IllegalArgumentException("duplicate key: " + k);
+ } else {
+ int dest = -(idx + 1);
+ table[dest] = k;
+ table[dest+1] = v;
+ }
+ }
+ }
+
+ @Override
+ public boolean containsKey(Object o) {
+ return probe(Objects.requireNonNull(o)) >= 0;
+ }
+
+ @Override
+ public boolean containsValue(Object o) {
+ return super.containsValue(Objects.requireNonNull(o));
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public V get(Object o) {
+ int i = probe(o);
+ if (i >= 0) {
+ return (V)table[i+1];
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+ @Override
+ public Set<Map.Entry<K,V>> entrySet() {
+ return new AbstractSet<Map.Entry<K,V>>() {
+ @Override
+ public int size() {
+ return MapN.this.size;
+ }
+
+ @Override
+ public Iterator<Map.Entry<K,V>> iterator() {
+ return new Iterator<Map.Entry<K,V>>() {
+ int idx = 0;
+
+ @Override
+ public boolean hasNext() {
+ while (idx < table.length) {
+ if (table[idx] != null)
+ return true;
+ idx += 2;
+ }
+ return false;
+ }
+
+ @Override
+ public Map.Entry<K,V> next() {
+ if (hasNext()) {
+ @SuppressWarnings("unchecked")
+ Map.Entry<K,V> e =
+ new KeyValueHolder<>((K)table[idx], (V)table[idx+1]);
+ idx += 2;
+ return e;
+ } else {
+ throw new NoSuchElementException();
+ }
+ }
+ };
+ }
+ };
+ }
+
+ // returns index at which the probe key is present; or if absent,
+ // (-i - 1) where i is location where element should be inserted
+ private int probe(Object pk) {
+ int idx = Math.floorMod(pk.hashCode() ^ SALT, table.length >> 1) << 1;
+ while (true) {
+ @SuppressWarnings("unchecked")
+ K ek = (K)table[idx];
+ if (ek == null) {
+ return -idx - 1;
+ } else if (pk.equals(ek)) {
+ return idx;
+ } else if ((idx += 2) == table.length) {
+ idx = 0;
+ }
+ }
+ }
+
+ private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
+ throw new InvalidObjectException("not serial proxy");
+ }
+
+ private Object writeReplace() {
+ Object[] array = new Object[2 * size];
+ int len = table.length;
+ int dest = 0;
+ for (int i = 0; i < len; i += 2) {
+ if (table[i] != null) {
+ array[dest++] = table[i];
+ array[dest++] = table[i+1];
+ }
+ }
+ return new CollSer(CollSer.IMM_MAP, array);
+ }
+ }
+}
+
+// ---------- Serialization Proxy ----------
+
+/**
+ * Serialization proxy class for immutable collections.
+ */
+final class CollSer implements Serializable {
+ private static final long serialVersionUID = 6309168927139932177L;
+
+ static final int IMM_LIST = 1;
+ static final int IMM_SET = 2;
+ static final int IMM_MAP = 3;
+
+ private final int flags;
+ private final Object[] array;
+
+ CollSer(int f, Object... a) {
+ flags = f;
+ array = a;
+ }
+
+ private Object readResolve() throws ObjectStreamException {
+ try {
+ if (array == null) {
+ throw new InvalidObjectException("null array");
+ }
+
+ // use low order 8 bits to indicate "kind"
+ // ignore high order bits
+ switch (flags & 0xff) {
+ case IMM_LIST:
+ return List.of(array);
+ case IMM_SET:
+ return Set.of(array);
+ case IMM_MAP:
+ if (array.length == 0) {
+ return new ImmutableCollections.Map0<>();
+ } else if (array.length == 2) {
+ return new ImmutableCollections.Map1<>(array[0], array[1]);
+ } else {
+ return new ImmutableCollections.MapN<>(array);
+ }
+ default:
+ throw new InvalidObjectException(String.format("invalid flags 0x%x", flags));
+ }
+ } catch (NullPointerException|IllegalArgumentException ex) {
+ InvalidObjectException ioe = new InvalidObjectException("invalid object");
+ ioe.initCause(ex);
+ throw ioe;
+ }
+ }
+}
--- a/jdk/src/java.base/share/classes/java/util/List.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/util/List.java Mon May 09 08:50:20 2016 -0700
@@ -765,7 +765,7 @@
* @since 9
*/
static <E> List<E> of() {
- return Collections.emptyList();
+ return new ImmutableCollections.List0<>();
}
/**
@@ -781,7 +781,7 @@
* @since 9
*/
static <E> List<E> of(E e1) {
- return Collections.singletonList(Objects.requireNonNull(e1));
+ return new ImmutableCollections.List1<>(e1);
}
/**
@@ -798,9 +798,7 @@
* @since 9
*/
static <E> List<E> of(E e1, E e2) {
- return Collections.unmodifiableList(
- Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2)));
+ return new ImmutableCollections.List2<>(e1, e2);
}
/**
@@ -818,10 +816,7 @@
* @since 9
*/
static <E> List<E> of(E e1, E e2, E e3) {
- return Collections.unmodifiableList(
- Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3)));
+ return new ImmutableCollections.ListN<>(e1, e2, e3);
}
/**
@@ -840,11 +835,7 @@
* @since 9
*/
static <E> List<E> of(E e1, E e2, E e3, E e4) {
- return Collections.unmodifiableList(
- Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3),
- Objects.requireNonNull(e4)));
+ return new ImmutableCollections.ListN<>(e1, e2, e3, e4);
}
/**
@@ -864,12 +855,7 @@
* @since 9
*/
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5) {
- return Collections.unmodifiableList(
- Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3),
- Objects.requireNonNull(e4),
- Objects.requireNonNull(e5)));
+ return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5);
}
/**
@@ -890,13 +876,8 @@
* @since 9
*/
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6) {
- return Collections.unmodifiableList(
- Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3),
- Objects.requireNonNull(e4),
- Objects.requireNonNull(e5),
- Objects.requireNonNull(e6)));
+ return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5,
+ e6);
}
/**
@@ -918,14 +899,8 @@
* @since 9
*/
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7) {
- return Collections.unmodifiableList(
- Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3),
- Objects.requireNonNull(e4),
- Objects.requireNonNull(e5),
- Objects.requireNonNull(e6),
- Objects.requireNonNull(e7)));
+ return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5,
+ e6, e7);
}
/**
@@ -948,15 +923,8 @@
* @since 9
*/
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) {
- return Collections.unmodifiableList(
- Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3),
- Objects.requireNonNull(e4),
- Objects.requireNonNull(e5),
- Objects.requireNonNull(e6),
- Objects.requireNonNull(e7),
- Objects.requireNonNull(e8)));
+ return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5,
+ e6, e7, e8);
}
/**
@@ -980,16 +948,8 @@
* @since 9
*/
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9) {
- return Collections.unmodifiableList(
- Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3),
- Objects.requireNonNull(e4),
- Objects.requireNonNull(e5),
- Objects.requireNonNull(e6),
- Objects.requireNonNull(e7),
- Objects.requireNonNull(e8),
- Objects.requireNonNull(e9)));
+ return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5,
+ e6, e7, e8, e9);
}
/**
@@ -1014,17 +974,8 @@
* @since 9
*/
static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) {
- return Collections.unmodifiableList(
- Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3),
- Objects.requireNonNull(e4),
- Objects.requireNonNull(e5),
- Objects.requireNonNull(e6),
- Objects.requireNonNull(e7),
- Objects.requireNonNull(e8),
- Objects.requireNonNull(e9),
- Objects.requireNonNull(e10)));
+ return new ImmutableCollections.ListN<>(e1, e2, e3, e4, e5,
+ e6, e7, e8, e9, e10);
}
/**
@@ -1055,10 +1006,16 @@
@SafeVarargs
@SuppressWarnings("varargs")
static <E> List<E> of(E... elements) {
- elements = elements.clone(); // throws NPE if es is null
- for (E e : elements) {
- Objects.requireNonNull(e);
+ Objects.requireNonNull(elements);
+ switch (elements.length) {
+ case 0:
+ return new ImmutableCollections.List0<>();
+ case 1:
+ return new ImmutableCollections.List1<>(elements[0]);
+ case 2:
+ return new ImmutableCollections.List2<>(elements[0], elements[1]);
+ default:
+ return new ImmutableCollections.ListN<>(elements);
}
- return Collections.unmodifiableList(Arrays.asList(elements));
}
}
--- a/jdk/src/java.base/share/classes/java/util/Map.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/util/Map.java Mon May 09 08:50:20 2016 -0700
@@ -1282,7 +1282,7 @@
* @since 9
*/
static <K, V> Map<K, V> of() {
- return Collections.emptyMap();
+ return new ImmutableCollections.Map0<>();
}
/**
@@ -1299,7 +1299,7 @@
* @since 9
*/
static <K, V> Map<K, V> of(K k1, V v1) {
- return Collections.singletonMap(Objects.requireNonNull(k1), Objects.requireNonNull(v1));
+ return new ImmutableCollections.Map1<>(k1, v1);
}
/**
@@ -1319,13 +1319,7 @@
* @since 9
*/
static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2) {
- Map<K, V> map = new HashMap<>(3); // specify number of buckets to avoid resizing
- map.put(Objects.requireNonNull(k1), Objects.requireNonNull(v1));
- map.put(Objects.requireNonNull(k2), Objects.requireNonNull(v2));
- if (map.size() != 2) {
- throw new IllegalArgumentException("duplicate keys");
- }
- return Collections.unmodifiableMap(map);
+ return new ImmutableCollections.MapN<>(k1, v1, k2, v2);
}
/**
@@ -1347,14 +1341,7 @@
* @since 9
*/
static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3) {
- Map<K, V> map = new HashMap<>(5); // specify number of buckets to avoid resizing
- map.put(Objects.requireNonNull(k1), Objects.requireNonNull(v1));
- map.put(Objects.requireNonNull(k2), Objects.requireNonNull(v2));
- map.put(Objects.requireNonNull(k3), Objects.requireNonNull(v3));
- if (map.size() != 3) {
- throw new IllegalArgumentException("duplicate keys");
- }
- return Collections.unmodifiableMap(map);
+ return new ImmutableCollections.MapN<>(k1, v1, k2, v2, k3, v3);
}
/**
@@ -1378,15 +1365,7 @@
* @since 9
*/
static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) {
- Map<K, V> map = new HashMap<>(6); // specify number of buckets to avoid resizing
- map.put(Objects.requireNonNull(k1), Objects.requireNonNull(v1));
- map.put(Objects.requireNonNull(k2), Objects.requireNonNull(v2));
- map.put(Objects.requireNonNull(k3), Objects.requireNonNull(v3));
- map.put(Objects.requireNonNull(k4), Objects.requireNonNull(v4));
- if (map.size() != 4) {
- throw new IllegalArgumentException("duplicate keys");
- }
- return Collections.unmodifiableMap(map);
+ return new ImmutableCollections.MapN<>(k1, v1, k2, v2, k3, v3, k4, v4);
}
/**
@@ -1412,16 +1391,7 @@
* @since 9
*/
static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) {
- Map<K, V> map = new HashMap<>(7); // specify number of buckets to avoid resizing
- map.put(Objects.requireNonNull(k1), Objects.requireNonNull(v1));
- map.put(Objects.requireNonNull(k2), Objects.requireNonNull(v2));
- map.put(Objects.requireNonNull(k3), Objects.requireNonNull(v3));
- map.put(Objects.requireNonNull(k4), Objects.requireNonNull(v4));
- map.put(Objects.requireNonNull(k5), Objects.requireNonNull(v5));
- if (map.size() != 5) {
- throw new IllegalArgumentException("duplicate keys");
- }
- return Collections.unmodifiableMap(map);
+ return new ImmutableCollections.MapN<>(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5);
}
/**
@@ -1450,17 +1420,8 @@
*/
static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5,
K k6, V v6) {
- Map<K, V> map = new HashMap<>(9); // specify number of buckets to avoid resizing
- map.put(Objects.requireNonNull(k1), Objects.requireNonNull(v1));
- map.put(Objects.requireNonNull(k2), Objects.requireNonNull(v2));
- map.put(Objects.requireNonNull(k3), Objects.requireNonNull(v3));
- map.put(Objects.requireNonNull(k4), Objects.requireNonNull(v4));
- map.put(Objects.requireNonNull(k5), Objects.requireNonNull(v5));
- map.put(Objects.requireNonNull(k6), Objects.requireNonNull(v6));
- if (map.size() != 6) {
- throw new IllegalArgumentException("duplicate keys");
- }
- return Collections.unmodifiableMap(map);
+ return new ImmutableCollections.MapN<>(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5,
+ k6, v6);
}
/**
@@ -1491,18 +1452,8 @@
*/
static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5,
K k6, V v6, K k7, V v7) {
- Map<K, V> map = new HashMap<>(10); // specify number of buckets to avoid resizing
- map.put(Objects.requireNonNull(k1), Objects.requireNonNull(v1));
- map.put(Objects.requireNonNull(k2), Objects.requireNonNull(v2));
- map.put(Objects.requireNonNull(k3), Objects.requireNonNull(v3));
- map.put(Objects.requireNonNull(k4), Objects.requireNonNull(v4));
- map.put(Objects.requireNonNull(k5), Objects.requireNonNull(v5));
- map.put(Objects.requireNonNull(k6), Objects.requireNonNull(v6));
- map.put(Objects.requireNonNull(k7), Objects.requireNonNull(v7));
- if (map.size() != 7) {
- throw new IllegalArgumentException("duplicate keys");
- }
- return Collections.unmodifiableMap(map);
+ return new ImmutableCollections.MapN<>(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5,
+ k6, v6, k7, v7);
}
/**
@@ -1535,19 +1486,8 @@
*/
static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5,
K k6, V v6, K k7, V v7, K k8, V v8) {
- Map<K, V> map = new HashMap<>(11); // specify number of buckets to avoid resizing
- map.put(Objects.requireNonNull(k1), Objects.requireNonNull(v1));
- map.put(Objects.requireNonNull(k2), Objects.requireNonNull(v2));
- map.put(Objects.requireNonNull(k3), Objects.requireNonNull(v3));
- map.put(Objects.requireNonNull(k4), Objects.requireNonNull(v4));
- map.put(Objects.requireNonNull(k5), Objects.requireNonNull(v5));
- map.put(Objects.requireNonNull(k6), Objects.requireNonNull(v6));
- map.put(Objects.requireNonNull(k7), Objects.requireNonNull(v7));
- map.put(Objects.requireNonNull(k8), Objects.requireNonNull(v8));
- if (map.size() != 8) {
- throw new IllegalArgumentException("duplicate keys");
- }
- return Collections.unmodifiableMap(map);
+ return new ImmutableCollections.MapN<>(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5,
+ k6, v6, k7, v7, k8, v8);
}
/**
@@ -1582,20 +1522,8 @@
*/
static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5,
K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9) {
- Map<K, V> map = new HashMap<>(13); // specify number of buckets to avoid resizing
- map.put(Objects.requireNonNull(k1), Objects.requireNonNull(v1));
- map.put(Objects.requireNonNull(k2), Objects.requireNonNull(v2));
- map.put(Objects.requireNonNull(k3), Objects.requireNonNull(v3));
- map.put(Objects.requireNonNull(k4), Objects.requireNonNull(v4));
- map.put(Objects.requireNonNull(k5), Objects.requireNonNull(v5));
- map.put(Objects.requireNonNull(k6), Objects.requireNonNull(v6));
- map.put(Objects.requireNonNull(k7), Objects.requireNonNull(v7));
- map.put(Objects.requireNonNull(k8), Objects.requireNonNull(v8));
- map.put(Objects.requireNonNull(k9), Objects.requireNonNull(v9));
- if (map.size() != 9) {
- throw new IllegalArgumentException("duplicate keys");
- }
- return Collections.unmodifiableMap(map);
+ return new ImmutableCollections.MapN<>(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5,
+ k6, v6, k7, v7, k8, v8, k9, v9);
}
/**
@@ -1632,21 +1560,8 @@
*/
static <K, V> Map<K, V> of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5,
K k6, V v6, K k7, V v7, K k8, V v8, K k9, V v9, K k10, V v10) {
- Map<K, V> map = new HashMap<>(14); // specify number of buckets to avoid resizing
- map.put(Objects.requireNonNull(k1), Objects.requireNonNull(v1));
- map.put(Objects.requireNonNull(k2), Objects.requireNonNull(v2));
- map.put(Objects.requireNonNull(k3), Objects.requireNonNull(v3));
- map.put(Objects.requireNonNull(k4), Objects.requireNonNull(v4));
- map.put(Objects.requireNonNull(k5), Objects.requireNonNull(v5));
- map.put(Objects.requireNonNull(k6), Objects.requireNonNull(v6));
- map.put(Objects.requireNonNull(k7), Objects.requireNonNull(v7));
- map.put(Objects.requireNonNull(k8), Objects.requireNonNull(v8));
- map.put(Objects.requireNonNull(k9), Objects.requireNonNull(v9));
- map.put(Objects.requireNonNull(k10), Objects.requireNonNull(v10));
- if (map.size() != 10) {
- throw new IllegalArgumentException("duplicate keys");
- }
- return Collections.unmodifiableMap(map);
+ return new ImmutableCollections.MapN<>(k1, v1, k2, v2, k3, v3, k4, v4, k5, v5,
+ k6, v6, k7, v7, k8, v8, k9, v9, k10, v10);
}
/**
@@ -1683,15 +1598,21 @@
@SafeVarargs
@SuppressWarnings("varargs")
static <K, V> Map<K, V> ofEntries(Entry<? extends K, ? extends V>... entries) {
- Map<K, V> map = new HashMap<>(entries.length * 4 / 3 + 1); // throws NPE if entries is null
- for (Entry<? extends K, ? extends V> e : entries) {
- // next line throws NPE if e is null
- map.put(Objects.requireNonNull(e.getKey()), Objects.requireNonNull(e.getValue()));
+ Objects.requireNonNull(entries);
+ if (entries.length == 0) {
+ return new ImmutableCollections.Map0<>();
+ } else if (entries.length == 1) {
+ return new ImmutableCollections.Map1<>(entries[0].getKey(),
+ entries[0].getValue());
+ } else {
+ Object[] kva = new Object[entries.length << 1];
+ int a = 0;
+ for (Entry<? extends K, ? extends V> entry : entries) {
+ kva[a++] = entry.getKey();
+ kva[a++] = entry.getValue();
+ }
+ return new ImmutableCollections.MapN<>(kva);
}
- if (map.size() != entries.length) {
- throw new IllegalArgumentException("duplicate keys");
- }
- return Collections.unmodifiableMap(map);
}
/**
--- a/jdk/src/java.base/share/classes/java/util/Set.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/util/Set.java Mon May 09 08:50:20 2016 -0700
@@ -444,7 +444,7 @@
* @since 9
*/
static <E> Set<E> of() {
- return Collections.emptySet();
+ return new ImmutableCollections.Set0<>();
}
/**
@@ -459,7 +459,7 @@
* @since 9
*/
static <E> Set<E> of(E e1) {
- return Collections.singleton(Objects.requireNonNull(e1));
+ return new ImmutableCollections.Set1<>(e1);
}
/**
@@ -476,12 +476,7 @@
* @since 9
*/
static <E> Set<E> of(E e1, E e2) {
- Set<E> set = new HashSet<>(Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2)));
- if (set.size() != 2) {
- throw new IllegalArgumentException("duplicate elements");
- }
- return Collections.unmodifiableSet(set);
+ return new ImmutableCollections.Set2<>(e1, e2);
}
/**
@@ -499,13 +494,7 @@
* @since 9
*/
static <E> Set<E> of(E e1, E e2, E e3) {
- Set<E> set = new HashSet<>(Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3)));
- if (set.size() != 3) {
- throw new IllegalArgumentException("duplicate elements");
- }
- return Collections.unmodifiableSet(set);
+ return new ImmutableCollections.SetN<>(e1, e2, e3);
}
/**
@@ -524,14 +513,7 @@
* @since 9
*/
static <E> Set<E> of(E e1, E e2, E e3, E e4) {
- Set<E> set = new HashSet<>(Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3),
- Objects.requireNonNull(e4)));
- if (set.size() != 4) {
- throw new IllegalArgumentException("duplicate elements");
- }
- return Collections.unmodifiableSet(set);
+ return new ImmutableCollections.SetN<>(e1, e2, e3, e4);
}
/**
@@ -551,15 +533,7 @@
* @since 9
*/
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5) {
- Set<E> set = new HashSet<>(Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3),
- Objects.requireNonNull(e4),
- Objects.requireNonNull(e5)));
- if (set.size() != 5) {
- throw new IllegalArgumentException("duplicate elements");
- }
- return Collections.unmodifiableSet(set);
+ return new ImmutableCollections.SetN<>(e1, e2, e3, e4, e5);
}
/**
@@ -580,16 +554,8 @@
* @since 9
*/
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6) {
- Set<E> set = new HashSet<>(Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3),
- Objects.requireNonNull(e4),
- Objects.requireNonNull(e5),
- Objects.requireNonNull(e6)));
- if (set.size() != 6) {
- throw new IllegalArgumentException("duplicate elements");
- }
- return Collections.unmodifiableSet(set);
+ return new ImmutableCollections.SetN<>(e1, e2, e3, e4, e5,
+ e6);
}
/**
@@ -611,17 +577,8 @@
* @since 9
*/
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7) {
- Set<E> set = new HashSet<>(Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3),
- Objects.requireNonNull(e4),
- Objects.requireNonNull(e5),
- Objects.requireNonNull(e6),
- Objects.requireNonNull(e7)));
- if (set.size() != 7) {
- throw new IllegalArgumentException("duplicate elements");
- }
- return Collections.unmodifiableSet(set);
+ return new ImmutableCollections.SetN<>(e1, e2, e3, e4, e5,
+ e6, e7);
}
/**
@@ -644,18 +601,8 @@
* @since 9
*/
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8) {
- Set<E> set = new HashSet<>(Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3),
- Objects.requireNonNull(e4),
- Objects.requireNonNull(e5),
- Objects.requireNonNull(e6),
- Objects.requireNonNull(e7),
- Objects.requireNonNull(e8)));
- if (set.size() != 8) {
- throw new IllegalArgumentException("duplicate elements");
- }
- return Collections.unmodifiableSet(set);
+ return new ImmutableCollections.SetN<>(e1, e2, e3, e4, e5,
+ e6, e7, e8);
}
/**
@@ -679,19 +626,8 @@
* @since 9
*/
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9) {
- Set<E> set = new HashSet<>(Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3),
- Objects.requireNonNull(e4),
- Objects.requireNonNull(e5),
- Objects.requireNonNull(e6),
- Objects.requireNonNull(e7),
- Objects.requireNonNull(e8),
- Objects.requireNonNull(e9)));
- if (set.size() != 9) {
- throw new IllegalArgumentException("duplicate elements");
- }
- return Collections.unmodifiableSet(set);
+ return new ImmutableCollections.SetN<>(e1, e2, e3, e4, e5,
+ e6, e7, e8, e9);
}
/**
@@ -716,20 +652,8 @@
* @since 9
*/
static <E> Set<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10) {
- Set<E> set = new HashSet<>(Arrays.asList(Objects.requireNonNull(e1),
- Objects.requireNonNull(e2),
- Objects.requireNonNull(e3),
- Objects.requireNonNull(e4),
- Objects.requireNonNull(e5),
- Objects.requireNonNull(e6),
- Objects.requireNonNull(e7),
- Objects.requireNonNull(e8),
- Objects.requireNonNull(e9),
- Objects.requireNonNull(e10)));
- if (set.size() != 10) {
- throw new IllegalArgumentException("duplicate elements");
- }
- return Collections.unmodifiableSet(set);
+ return new ImmutableCollections.SetN<>(e1, e2, e3, e4, e5,
+ e6, e7, e8, e9, e10);
}
/**
@@ -759,15 +683,18 @@
* @since 9
*/
@SafeVarargs
+ @SuppressWarnings("varargs")
static <E> Set<E> of(E... elements) {
- for (E e : elements) { // throws NPE if es is null
- Objects.requireNonNull(e);
+ Objects.requireNonNull(elements);
+ switch (elements.length) {
+ case 0:
+ return new ImmutableCollections.Set0<>();
+ case 1:
+ return new ImmutableCollections.Set1<>(elements[0]);
+ case 2:
+ return new ImmutableCollections.Set2<>(elements[0], elements[1]);
+ default:
+ return new ImmutableCollections.SetN<>(elements);
}
- @SuppressWarnings("varargs")
- Set<E> set = new HashSet<>(Arrays.asList(elements));
- if (set.size() != elements.length) {
- throw new IllegalArgumentException("duplicate elements");
- }
- return Collections.unmodifiableSet(set);
}
}
--- a/jdk/src/java.base/share/classes/java/util/jar/JarFile.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/util/jar/JarFile.java Mon May 09 08:50:20 2016 -0700
@@ -658,6 +658,28 @@
return vze == null ? ze : vze;
}
+ /**
+ * Returns the real name of a {@code JarEntry}. If this {@code JarFile} is
+ * a multi-release jar file and is configured to be processed as such, the
+ * name returned by this method is the path name of the versioned entry
+ * that the {@code JarEntry} represents, rather than the path name of the
+ * base entry that {@link JarEntry#getName()} returns. If the
+ * {@code JarEntry} does not represent a versioned entry, or the
+ * jar file is not a multi-release jar file or {@code JarFile} is not
+ * configured for processing a multi-release jar file, this method returns
+ * the same name that {@link JarEntry#getName()} returns.
+ *
+ * @param entry the JarEntry
+ * @return the real name of the JarEntry
+ * @since 9
+ */
+ String getRealName(JarEntry entry) {
+ if (entry instanceof JarFileEntry) {
+ return ((JarFileEntry)entry).realName();
+ }
+ return entry.getName();
+ }
+
private class JarFileEntry extends JarEntry {
final private String name;
@@ -684,7 +706,7 @@
throw new RuntimeException(e);
}
if (certs == null && jv != null) {
- certs = jv.getCerts(JarFile.this, reifiedEntry());
+ certs = jv.getCerts(JarFile.this, realEntry());
}
return certs == null ? null : certs.clone();
}
@@ -695,17 +717,20 @@
throw new RuntimeException(e);
}
if (signers == null && jv != null) {
- signers = jv.getCodeSigners(JarFile.this, reifiedEntry());
+ signers = jv.getCodeSigners(JarFile.this, realEntry());
}
return signers == null ? null : signers.clone();
}
- JarFileEntry reifiedEntry() {
+ JarFileEntry realEntry() {
if (isMultiRelease()) {
String entryName = super.getName();
return entryName.equals(this.name) ? this : new JarFileEntry(entryName, this);
}
return this;
}
+ String realName() {
+ return super.getName();
+ }
@Override
public String getName() {
@@ -876,11 +901,11 @@
private JarEntry verifiableEntry(ZipEntry ze) {
if (ze instanceof JarFileEntry) {
// assure the name and entry match for verification
- return ((JarFileEntry)ze).reifiedEntry();
+ return ((JarFileEntry)ze).realEntry();
}
ze = getJarEntry(ze.getName());
if (ze instanceof JarFileEntry) {
- return ((JarFileEntry)ze).reifiedEntry();
+ return ((JarFileEntry)ze).realEntry();
}
return (JarEntry)ze;
}
--- a/jdk/src/java.base/share/classes/java/util/jar/JavaUtilJarAccessImpl.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/java/util/jar/JavaUtilJarAccessImpl.java Mon May 09 08:50:20 2016 -0700
@@ -60,4 +60,8 @@
public List<Object> getManifestDigests(JarFile jar) {
return jar.getManifestDigests();
}
+
+ public String getRealName(JarFile jar, JarEntry entry) {
+ return jar.getRealName(entry);
+ }
}
--- a/jdk/src/java.base/share/classes/jdk/internal/loader/URLClassPath.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/jdk/internal/loader/URLClassPath.java Mon May 09 08:50:20 2016 -0700
@@ -372,9 +372,15 @@
return java.security.AccessController.doPrivileged(
new java.security.PrivilegedExceptionAction<>() {
public Loader run() throws IOException {
+ String protocol = url.getProtocol(); // lower cased in URL
String file = url.getFile();
- if (file != null && file.endsWith("/")) {
- if ("file".equals(url.getProtocol())) {
+ if ("jar".equals(protocol)
+ && file != null && (file.indexOf("!/") == file.length() - 2)) {
+ // extract the nested URL
+ URL nestedUrl = new URL(file.substring(0, file.length() - 2));
+ return new JarLoader(nestedUrl, jarHandler, lmap);
+ } else if (file != null && file.endsWith("/")) {
+ if ("file".equals(protocol)) {
return new FileLoader(url);
} else {
return new Loader(url);
@@ -718,13 +724,13 @@
final URL url;
try {
+ String nm;
if (jar.isMultiRelease()) {
- // add #runtime fragment to tell JarURLConnection to use
- // runtime versioning if the underlying jar file is multi-release
- url = new URL(getBaseURL(), ParseUtil.encodePath(name, false) + "#runtime");
+ nm = SharedSecrets.javaUtilJarAccess().getRealName(jar, entry);
} else {
- url = new URL(getBaseURL(), ParseUtil.encodePath(name, false));
+ nm = name;
}
+ url = new URL(getBaseURL(), ParseUtil.encodePath(nm, false));
if (check) {
URLClassPath.check(url);
}
@@ -940,7 +946,8 @@
ensureOpen();
- if (SharedSecrets.javaUtilJarAccess().jarFileHasClassPathAttribute(jar)) { // Only get manifest when necessary
+ // Only get manifest when necessary
+ if (SharedSecrets.javaUtilJarAccess().jarFileHasClassPathAttribute(jar)) {
Manifest man = jar.getManifest();
if (man != null) {
Attributes attr = man.getMainAttributes();
--- a/jdk/src/java.base/share/classes/jdk/internal/misc/JavaUtilJarAccess.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/jdk/internal/misc/JavaUtilJarAccess.java Mon May 09 08:50:20 2016 -0700
@@ -41,4 +41,5 @@
public Enumeration<JarEntry> entries2(JarFile jar);
public void setEagerValidation(JarFile jar, boolean eager);
public List<Object> getManifestDigests(JarFile jar);
+ public String getRealName(JarFile jar, JarEntry entry);
}
--- a/jdk/src/java.base/share/classes/module-info.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/module-info.java Mon May 09 08:50:20 2016 -0700
@@ -145,6 +145,8 @@
jdk.scripting.nashorn;
exports jdk.internal.org.objectweb.asm.signature to
jdk.scripting.nashorn;
+ exports jdk.internal.loader to
+ java.instrument;
exports jdk.internal.math to
java.desktop;
exports jdk.internal.module to
--- a/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/sun/launcher/LauncherHelper.java Mon May 09 08:50:20 2016 -0700
@@ -84,8 +84,10 @@
import jdk.internal.misc.VM;
-public enum LauncherHelper {
- INSTANCE;
+public final class LauncherHelper {
+
+ // No instantiation
+ private LauncherHelper() {}
// used to identify JavaFX applications
private static final String JAVAFX_APPLICATION_MARKER =
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/sun/security/provider/AbstractDrbg.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,771 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.provider;
+
+import sun.security.util.Debug;
+
+import java.security.*;
+import java.util.Arrays;
+import java.util.Objects;
+import static java.security.DrbgParameters.Capability.*;
+
+/**
+ * The abstract base class for all DRBGs.
+ * <p>
+ * This class creates 5 new abstract methods. 3 are defined by the SP800-90A:
+ * <ol>
+ * <li>{@link #generateAlgorithm(byte[], byte[])}
+ * <li>{@link #reseedAlgorithm(byte[], byte[])} (might not be supported)
+ * <li>{@link #instantiateAlgorithm(byte[])}
+ * </ol>
+ * and 2 for implementation purpose:
+ * <ol>
+ * <li>{@link #initEngine()}
+ * <li>{@link #chooseAlgorithmAndStrength}
+ * </ol>
+ * All existing {@link SecureRandomSpi} methods are implemented based on the
+ * methods above as final. The initialization process is divided into 2 phases:
+ * configuration is eagerly called to set up parameters, and instantiation
+ * is lazily called only when nextBytes or reseed is called.
+ * <p>
+ * Synchronized keyword should be added to all externally callable engine
+ * methods including {@link #engineReseed}, {@link #engineSetSeed}, and
+ * {@link #engineNextBytes} (but not {@link #engineGenerateSeed}).
+ * Internal methods like {@link #configure} and {@link #instantiateAlgorithm}
+ * are not synchronized. They will either be called in a constructor or
+ * in another synchronized method.
+ */
+public abstract class AbstractDrbg extends SecureRandomSpi {
+
+ private static final long serialVersionUID = 9L;
+
+ /**
+ * This field is not null if {@code -Djava.security.debug=securerandom} is
+ * specified on the command line. An implementation can print useful
+ * debug info.
+ */
+ protected static final Debug debug = Debug.getInstance(
+ "securerandom", "drbg");
+
+ // Common working status
+
+ private transient boolean instantiated = false;
+
+ /**
+ * Reseed counter of a DRBG instance. A mechanism should increment it
+ * after each random bits generation and reset it in reseed. A mechanism
+ * does <em>not</em> need to compare it to {@link #reseedInterval}.
+ */
+ protected transient int reseedCounter = 0;
+
+ // Mech features. If not same as below, must be redefined in constructor.
+
+ /**
+ * Default strength of a DRBG instance if it is not configured.
+ * 128 is considered secure enough now. A mechanism
+ * can change it in a constructor.
+ *
+ * Remember to sync with "securerandom.drbg.config" in java.security.
+ */
+ protected static final int DEFAULT_STRENGTH = 128;
+
+ /**
+ * Mechanism name, say, {@code HashDRBG}. Must be set in constructor.
+ * This value will be used in {@code toString}.
+ */
+ protected String mechName = "DRBG";
+
+ /**
+ * highest_supported_security_strength of this mechanism for all algorithms
+ * it supports. A mechanism should update the value in its constructor
+ * if the value is not 256.
+ */
+ protected int highestSupportedSecurityStrength = 256;
+
+ /**
+ * Whether prediction resistance is supported. A mechanism should update
+ * the value in its constructor if it is <em>not</em> supported.
+ */
+ protected boolean supportPredictionResistance = true;
+
+ /**
+ * Whether reseed is supported. A mechanism should update
+ * the value in its constructor if it is <em>not</em> supported.
+ */
+ protected boolean supportReseeding = true;
+
+ // Strength features. If not same as below, must be redefined in
+ // chooseAlgorithmAndStrength. Among these, minLength and seedLen have no
+ // default value and must be redefined. If personalization string or
+ // additional input is not supported, set maxPersonalizationStringLength
+ // or maxAdditionalInputLength to -1.
+
+ /**
+ * Minimum entropy input length in bytes for this DRBG instance.
+ * Must be assigned in {@link #chooseAlgorithmAndStrength}.
+ */
+ protected int minLength;
+
+ /**
+ * Maximum entropy input length in bytes for this DRBG instance.
+ * Should be assigned in {@link #chooseAlgorithmAndStrength} if it is not
+ * {@link Integer#MAX_VALUE}.
+ * <p>
+ * In theory this value (and the values below) can be bigger than
+ * {@code Integer.MAX_VALUE} but a Java array can only have an int32 index.
+ */
+ protected int maxLength = Integer.MAX_VALUE;
+
+ /**
+ * Maximum personalization string length in bytes for this DRBG instance.
+ * Should be assigned in {@link #chooseAlgorithmAndStrength} if it is not
+ * {@link Integer#MAX_VALUE}.
+ */
+ protected int maxPersonalizationStringLength = Integer.MAX_VALUE;
+
+ /**
+ * Maximum additional input length in bytes for this DRBG instance.
+ * Should be assigned in {@link #chooseAlgorithmAndStrength} if it is not
+ * {@link Integer#MAX_VALUE}.
+ */
+ protected int maxAdditionalInputLength = Integer.MAX_VALUE;
+
+ /**
+ * max_number_of_bits_per_request in bytes for this DRBG instance.
+ * Should be assigned in {@link #chooseAlgorithmAndStrength} if it is not
+ * {@link Integer#MAX_VALUE}.
+ */
+ protected int maxNumberOfBytesPerRequest = Integer.MAX_VALUE;
+
+ /**
+ * Maximum number of requests between reseeds for this DRBG instance.
+ * Should be assigned in {@link #chooseAlgorithmAndStrength} if it is not
+ * {@link Integer#MAX_VALUE}.
+ */
+ protected int reseedInterval = Integer.MAX_VALUE;
+
+
+ /**
+ * Algorithm used by this instance (SHA-512 or AES-256). Must be assigned
+ * in {@link #chooseAlgorithmAndStrength}. This field is used in
+ * {@link #toString()} and {@link DRBG#algorithmName}.
+ */
+ protected String algorithm;
+
+ // Configurable parameters
+
+ /**
+ * Security strength for this instance. Must be assigned in
+ * {@link #chooseAlgorithmAndStrength}. Should be at least the requested
+ * strength. Might be smaller than the highest strength
+ * {@link #algorithm} supports. Must not be -1.
+ */
+ protected int securityStrength; // in bits
+
+ /**
+ * Strength requested in {@link DrbgParameters.Instantiation}.
+ * The real strength is based on it. Do not modify it in a mechanism.
+ */
+ protected int requestedInstantiationSecurityStrength = -1;
+
+ /**
+ * The personalization string used by this instance. Set inside
+ * {@link #configure(SecureRandomParameters)} and
+ * can be used in a mechanism. Do not modify it in a mechanism.
+ */
+ protected byte[] personalizationString;
+
+ /**
+ * The prediction resistance flag used by this instance. Set inside
+ * {@link #configure(SecureRandomParameters)}.
+ */
+ private boolean predictionResistanceFlag;
+
+ // Non-standard configurable parameters
+
+ /**
+ * Whether a derivation function is used. Requested in
+ * {@link MoreDrbgParameters}. Only CtrDRBG uses it.
+ * Do not modify it in a mechanism.
+ */
+ protected boolean usedf;
+
+ /**
+ * The nonce for this instance. Set in {@link #instantiateIfNecessary}.
+ * After instantiation, this field is not null. Do not modify it
+ * in a mechanism.
+ */
+ protected transient byte[] nonce;
+
+ /**
+ * Requested nonce in {@link MoreDrbgParameters}. If set to null,
+ * nonce will be chosen by system, and a reinstantiated DRBG will get a
+ * new system-provided nonce.
+ */
+ private byte[] requestedNonce;
+
+ /**
+ * Requested algorithm in {@link MoreDrbgParameters}.
+ * Do not modify it in a mechanism.
+ */
+ protected String requestedAlgorithm;
+
+ /**
+ * The entropy source used by this instance. Set inside
+ * {@link #configure(SecureRandomParameters)}. This field
+ * can be null. {@link #getEntropyInput} will take care of null check.
+ */
+ private transient EntropySource es;
+
+ // Five abstract methods for SP 800-90A DRBG
+
+ /**
+ * Decides what algorithm and strength to use (SHA-256 or AES-256,
+ * 128 or 256). Strength related fields must also be defined or redefined
+ * here. Called in {@link #configure}. A mechanism uses
+ * {@link #requestedAlgorithm},
+ * {@link #requestedInstantiationSecurityStrength}, and
+ * {@link #DEFAULT_STRENGTH} to decide which algorithm and strength to use.
+ * <p>
+ * If {@code requestedAlgorithm} is provided, it will always be used.
+ * If {@code requestedInstantiationSecurityStrength} is also provided,
+ * the algorithm will use the strength (an exception will be thrown if
+ * the strength is not supported), otherwise, the smaller one of
+ * the highest supported strength of the algorithm and the default strength
+ * will be used.
+ * <p>
+ * If {@code requestedAlgorithm} is not provided, an algorithm will be
+ * chosen that supports {@code requestedInstantiationSecurityStrength}
+ * (or {@code DEFAULT_STRENGTH} if there is no request).
+ * <p>
+ * Since every call to {@link #configure} will call this method,
+ * make sure to the calls do not contradict with each other.
+ * <p>
+ * Here are some examples of the algorithm and strength chosen (suppose
+ * {@code DEFAULT_STRENGTH} is 128) for HashDRBG:
+ * <pre>
+ * requested effective
+ * (SHA-1, -1) (SHA-1,128)
+ * (SHA-1, 112) (SHA-1,112)
+ * (SHA-1, 192) IAE
+ * (SHA-256, -1) (SHA-256,128)
+ * (SHA-256, 128) (SHA-256,128)
+ * (SHA-3, -1) IAE
+ * (null, -1) (SHA-256,128)
+ * (null, 112) (SHA-256,112)
+ * (null, 192) (SHA-256,192)
+ * (null, 256) (SHA-256,256)
+ * (null, 384) IAE
+ * </pre>
+ *
+ * @throws IllegalArgumentException if the requested parameters
+ * can not be supported or contradict with each other.
+ */
+ protected abstract void chooseAlgorithmAndStrength();
+
+ /**
+ * Initiates security engines ({@code MessageDigest}, {@code Mac},
+ * or {@code Cipher}). Must be called in deserialization. Please note
+ * that before instantiation the algorithm might not be available yet.
+ * In this case, just return and this method will be called
+ * automatically at instantiation.
+ */
+ protected abstract void initEngine();
+
+ /**
+ * Instantiates a DRBG. Called automatically before the first
+ * {@code nextBytes} call.
+ * <p>
+ * Note that the other parameters (nonce, strength, ps) are already
+ * stored inside at configuration.
+ *
+ * @param ei the entropy input, its length is already conditioned to be
+ * between {@link #minLength} and {@link #maxLength}.
+ */
+ protected abstract void instantiateAlgorithm(byte[] ei);
+
+ /**
+ * The generate function.
+ *
+ * @param result fill result here, not null
+ * @param additionalInput additional input, can be null. If not null,
+ * its length is smaller than {@link #maxAdditionalInputLength}
+ */
+ protected abstract void generateAlgorithm(
+ byte[] result, byte[] additionalInput);
+
+ /**
+ * The reseed function.
+ *
+ * @param ei the entropy input, its length is already conditioned to be
+ * between {@link #minLength} and {@link #maxLength}.
+ * @param additionalInput additional input, can be null. If not null,
+ * its length is smaller than {@link #maxAdditionalInputLength}
+ * @throws UnsupportedOperationException if reseed is not supported
+ */
+ protected void reseedAlgorithm(
+ byte[] ei, byte[] additionalInput) {
+ throw new UnsupportedOperationException("No reseed function");
+ }
+
+ // SecureRandomSpi methods taken care of here. All final.
+
+ @Override
+ protected final void engineNextBytes(byte[] result) {
+ engineNextBytes(result, DrbgParameters.nextBytes(
+ -1, predictionResistanceFlag, null));
+ }
+
+ @Override
+ protected final void engineNextBytes(
+ byte[] result, SecureRandomParameters params) {
+
+ Objects.requireNonNull(result);
+
+ if (debug != null) {
+ debug.println(this, "nextBytes");
+ }
+ if (params instanceof DrbgParameters.NextBytes) {
+
+ // 800-90Ar1 9.3: Generate Process.
+
+ DrbgParameters.NextBytes dp = (DrbgParameters.NextBytes) params;
+
+ // Step 2: max_number_of_bits_per_request
+ if (result.length > maxNumberOfBytesPerRequest) {
+ // generateAlgorithm should be called multiple times to fill
+ // up result. Unimplemented since maxNumberOfBytesPerRequest
+ // is now Integer.MAX_VALUE.
+ }
+
+ // Step 3: check requested_security_strength
+ if (dp.getStrength() > securityStrength) {
+ throw new IllegalArgumentException("strength too high: "
+ + dp.getStrength());
+ }
+
+ // Step 4: check max_additional_input_length
+ byte[] ai = dp.getAdditionalInput();
+ if (ai != null && ai.length > maxAdditionalInputLength) {
+ throw new IllegalArgumentException("ai too long: "
+ + ai.length);
+ }
+
+ // Step 5: check prediction_resistance_flag
+ boolean pr = dp.getPredictionResistance();
+ if (!predictionResistanceFlag && pr) {
+ throw new IllegalArgumentException("pr not available");
+ }
+
+ instantiateIfNecessary(null);
+
+ // Step 7: Auto reseed
+ if (reseedCounter > reseedInterval || pr) {
+ reseedAlgorithm(getEntropyInput(pr), ai);
+ ai = null;
+ }
+
+ // Step 8, 10: Generate_algorithm
+ // Step 9: Unnecessary. reseedCounter only updated after generation
+ generateAlgorithm(result, ai);
+
+ // Step 11: Return
+ } else {
+ throw new IllegalArgumentException("unknown params type:"
+ + params.getClass());
+ }
+ }
+
+ @Override
+ public final void engineReseed(SecureRandomParameters params) {
+ if (debug != null) {
+ debug.println(this, "reseed with params");
+ }
+ if (!supportReseeding) {
+ throw new UnsupportedOperationException("Reseed not supported");
+ }
+ if (params == null) {
+ params = DrbgParameters.reseed(predictionResistanceFlag, null);
+ }
+ if (params instanceof DrbgParameters.Reseed) {
+ DrbgParameters.Reseed dp = (DrbgParameters.Reseed) params;
+
+ // 800-90Ar1 9.2: Reseed Process.
+
+ // Step 2: Check prediction_resistance_request
+ boolean pr = dp.getPredictionResistance();
+ if (!predictionResistanceFlag && pr) {
+ throw new IllegalArgumentException("pr not available");
+ }
+
+ // Step 3: Check additional_input length
+ byte[] ai = dp.getAdditionalInput();
+ if (ai != null && ai.length > maxAdditionalInputLength) {
+ throw new IllegalArgumentException("ai too long: "
+ + ai.length);
+ }
+ instantiateIfNecessary(null);
+
+ // Step 4: Get_entropy_input
+ // Step 5: Check step 4
+ // Step 6-7: Reseed_algorithm
+ reseedAlgorithm(getEntropyInput(pr), ai);
+
+ // Step 8: Return
+ } else {
+ throw new IllegalArgumentException("unknown params type: "
+ + params.getClass());
+ }
+ }
+
+ /**
+ * Returns the given number of seed bytes. A DRBG always uses
+ * {@link SeedGenerator} to get an array with full-entropy.
+ * <p>
+ * The implementation is identical to SHA1PRNG's
+ * {@link SecureRandom#engineGenerateSeed}.
+ *
+ * @param numBytes the number of seed bytes to generate.
+ * @return the seed bytes.
+ */
+ @Override
+ public final byte[] engineGenerateSeed(int numBytes) {
+ byte[] b = new byte[numBytes];
+ SeedGenerator.generateSeed(b);
+ return b;
+ }
+
+ /**
+ * Reseeds this random object with the given seed. A DRBG always expands
+ * or truncates the input to be between {@link #minLength} and
+ * {@link #maxLength} and uses it to instantiate or reseed itself
+ * (depending on whether the DRBG is instantiated).
+ *
+ * @param input the seed
+ */
+ @Override
+ public final synchronized void engineSetSeed(byte[] input) {
+ if (debug != null) {
+ debug.println(this, "setSeed");
+ }
+ if (input.length < minLength) {
+ input = Arrays.copyOf(input, minLength);
+ } else if (input.length > maxLength) {
+ input = Arrays.copyOf(input, maxLength);
+ }
+ if (!instantiated) {
+ instantiateIfNecessary(input);
+ } else {
+ reseedAlgorithm(input, null);
+ }
+ }
+
+ // get_entropy_input
+
+ private byte[] getEntropyInput(boolean isPr) {
+ // Should the 1st arg be minEntropy or minLength?
+ //
+ // Technically it should be minEntropy, but CtrDRBG
+ // (not using derivation function) is so confusing
+ // (does it need only strength or seedlen of entropy?)
+ // that it's safer to assume minLength. In all other
+ // cases minLength equals to minEntropy.
+ return getEntropyInput(minLength, minLength, maxLength, isPr);
+ }
+
+ private byte[] getEntropyInput(int minEntropy, int minLength,
+ int maxLength, boolean pr) {
+ if (debug != null) {
+ debug.println(this, "getEntropy(" + minEntropy + "," + minLength +
+ "," + maxLength + "," + pr + ")");
+ }
+ EntropySource esNow = es;
+ if (esNow == null) {
+ esNow = pr ? SeederHolder.prseeder : SeederHolder.seeder;
+ }
+ return esNow.getEntropy(minEntropy, minLength, maxLength, pr);
+ }
+
+ // Defaults
+
+ /**
+ * The default {@code EntropySource} determined by system property
+ * "java.security.egd" or security property "securerandom.source".
+ * <p>
+ * This object uses {@link SeedGenerator#generateSeed(byte[])} to
+ * return a byte array containing {@code minLength} bytes. It is
+ * assumed to support prediction resistance and always contains
+ * full-entropy. A trusted application can update this field.
+ */
+ private final static EntropySource defaultES =
+ (minE, minLen, maxLen, pr) -> {
+ byte[] result = new byte[minLen];
+ SeedGenerator.generateSeed(result);
+ return result;
+ };
+
+ private static class SeederHolder {
+
+ /**
+ * Default EntropySource for SecureRandom with prediction resistance,
+ */
+ static final EntropySource prseeder;
+
+ /**
+ * Default EntropySource for SecureRandom without prediction resistance,
+ * which is backed by a DRBG whose EntropySource is {@link #prseeder}.
+ */
+ static final EntropySource seeder;
+
+ static {
+ prseeder = defaultES;
+ // According to SP800-90C section 7, a DRBG without live
+ // entropy (drbg here, with pr being false) can instantiate
+ // another DRBG with weaker strength. So we choose highest
+ // strength we support.
+ HashDrbg first = new HashDrbg(new MoreDrbgParameters(
+ prseeder, null, "SHA-256", null, false,
+ DrbgParameters.instantiation(
+ 256, NONE,
+ SeedGenerator.getSystemEntropy())));
+ seeder = (entropy, minLen, maxLen, pr) -> {
+ if (pr) {
+ // This SEI does not support pr
+ throw new IllegalArgumentException("pr not supported");
+ }
+ byte[] result = new byte[minLen];
+ first.engineNextBytes(result);
+ return result;
+ };
+ }
+ }
+
+ // Constructor called by overridden methods, initializer...
+
+ /**
+ * A constructor without argument so that an implementation does not
+ * need to always write {@code super(params)}.
+ */
+ protected AbstractDrbg() {
+ // Nothing
+ }
+
+ /**
+ * A mechanism shall override this constructor to setup {@link #mechName},
+ * {@link #highestSupportedSecurityStrength},
+ * {@link #supportPredictionResistance}, {@link #supportReseeding}
+ * or other features like {@link #DEFAULT_STRENGTH}. Finally it shall
+ * call {@link #configure} on {@code params}.
+ *
+ * @param params the {@link SecureRandomParameters} object.
+ * This argument can be {@code null}.
+ * @throws IllegalArgumentException if {@code params} is
+ * inappropriate for this SecureRandom.
+ */
+ protected AbstractDrbg(SecureRandomParameters params) {
+ // Nothing
+ }
+
+ /**
+ * Returns the current configuration as a {@link DrbgParameters.Instantiation}
+ * object.
+ *
+ * @return the curent configuration
+ */
+ @Override
+ protected SecureRandomParameters engineGetParameters() {
+ // Or read from variable.
+ return DrbgParameters.instantiation(
+ securityStrength,
+ predictionResistanceFlag ? PR_AND_RESEED :
+ (supportReseeding ? RESEED_ONLY : NONE),
+ personalizationString);
+ }
+
+ /**
+ * Configure this DRBG. This method calls
+ * {@link #chooseAlgorithmAndStrength()} and {@link #initEngine()}
+ * but does not do the actual instantiation.
+ *
+ * @param params configuration, if null, default configuration (default
+ * strength, pr_false, no personalization string) is used.
+ * @throws IllegalArgumentException if {@code params} is
+ * inappropriate for this SecureRandom.
+ */
+ protected final synchronized void configure(
+ SecureRandomParameters params) {
+ if (debug != null) {
+ debug.println(this, "configure " + this + " with " + params);
+ }
+ if (params == null) {
+ params = DrbgParameters.instantiation(-1, RESEED_ONLY, null);
+ }
+ if (params instanceof MoreDrbgParameters) {
+ MoreDrbgParameters m = (MoreDrbgParameters)params;
+ this.requestedNonce = m.nonce;
+ this.es = m.es;
+ this.requestedAlgorithm = m.algorithm;
+ this.usedf = m.usedf;
+ params = m.config;
+ }
+ if (params != null) {
+ if (params instanceof DrbgParameters.Instantiation) {
+ DrbgParameters.Instantiation inst =
+ (DrbgParameters.Instantiation) params;
+
+ // 800-90Ar1 9.1: Instantiate Process. Steps 1-5.
+
+ // Step 1: Check requested_instantiation_security_strength
+ if (inst.getStrength() > highestSupportedSecurityStrength) {
+ throw new IllegalArgumentException("strength too big: "
+ + inst.getStrength());
+ }
+
+ // Step 2: Check prediction_resistance_flag
+ if (inst.getCapability().supportsPredictionResistance()
+ && !supportPredictionResistance) {
+ throw new IllegalArgumentException("pr not supported");
+ }
+
+ // Step 3: Check personalization_string
+ byte[] ps = inst.getPersonalizationString();
+ if (ps != null && ps.length > maxPersonalizationStringLength) {
+ throw new IllegalArgumentException("ps too long: "
+ + ps.length);
+ }
+
+ if (inst.getCapability().supportsReseeding()
+ && !supportReseeding) {
+ throw new IllegalArgumentException("reseed not supported");
+ }
+ this.personalizationString = ps;
+ this.predictionResistanceFlag =
+ inst.getCapability().supportsPredictionResistance();
+ this.requestedInstantiationSecurityStrength = inst.getStrength();
+ } else {
+ throw new IllegalArgumentException("unknown params: "
+ + params.getClass());
+ }
+ }
+
+ // Step 4: Set security_strength
+ chooseAlgorithmAndStrength();
+ instantiated = false;
+
+ // Step 5: no-op.
+
+ if (debug != null) {
+ debug.println(this, "configured " + this);
+ }
+ }
+
+ /**
+ * Instantiate if necessary,
+ *
+ * @param entropy a user-provided entropy, the length is already good.
+ * If null, will fetch entropy input automatically.
+ */
+ private synchronized void instantiateIfNecessary(byte[] entropy) {
+ if (!instantiated) {
+
+ // 800-90Ar1 9.1: Instantiate Process. Steps 6-12.
+
+ // Step 6: Get_entropy_input
+ // Step 7: check error (getEntropyInput throw no exception now)
+ if (entropy == null) {
+ entropy = getEntropyInput(predictionResistanceFlag);
+ }
+
+ // Step 8. nonce
+ if (requestedNonce != null) {
+ nonce = requestedNonce;
+ } else {
+ nonce = NonceProvider.next();
+ }
+ initEngine();
+
+ // Step 9-11: Instantiate_algorithm
+ instantiateAlgorithm(entropy);
+ instantiated = true;
+
+ // Step 12: Return
+ }
+ }
+
+ // Nonce provider
+
+ private static class NonceProvider {
+
+ // 128 bits of nonce can be used by 256-bit strength DRBG
+ private static final byte[] block = new byte[16];
+
+ private static synchronized byte[] next() {
+ int k = 15;
+ while ((k >= 0) && (++block[k] == 0)) {
+ k--;
+ }
+ return block.clone();
+ }
+ }
+
+ // Misc
+
+ /** A handy method returning hexdump string with no colon or new line.
+ *
+ * @param in input byte array
+ * @return the hexdump string
+ */
+ protected static String hex(byte[] in) {
+ StringBuilder sb = new StringBuilder();
+ for (byte b : in) {
+ sb.append(String.format("%02x", b&0xff));
+ }
+ return sb.toString();
+ }
+
+ /**
+ * Returns the smallest standard strength (112, 128, 192, 256) that is
+ * greater or equal to the input.
+ *
+ * @param input the input strength
+ * @return the standard strength
+ */
+ protected static int getStandardStrength(int input) {
+ if (input <= 112) return 112;
+ if (input <= 128) return 128;
+ if (input <= 192) return 192;
+ if (input <= 256) return 256;
+ throw new IllegalArgumentException("input too big: " + input);
+ }
+
+ @Override
+ public String toString() {
+ return mechName + "," + algorithm
+ + "," + securityStrength + ","
+ + (predictionResistanceFlag ? "pr_and_reseed"
+ : (supportReseeding ? "reseed_only" : "none"));
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/sun/security/provider/AbstractHashDrbg.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,160 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.provider;
+
+import sun.security.util.HexDumpEncoder;
+
+import java.util.Arrays;
+import java.util.Locale;
+
+public abstract class AbstractHashDrbg extends AbstractDrbg {
+
+ private static final long serialVersionUID = 9L;
+
+ protected int outLen;
+ protected int seedLen;
+
+ private static int alg2strength(String algorithm) {
+ switch (algorithm.toUpperCase(Locale.ROOT)) {
+ case "SHA-1":
+ return 128;
+ case "SHA-224":
+ case "SHA-512/224":
+ return 192;
+ case "SHA-256":
+ case "SHA-512/256":
+ case "SHA-384":
+ case "SHA-512":
+ return 256;
+ default:
+ throw new IllegalArgumentException(algorithm +
+ " not supported in Hash_DBRG");
+ }
+ }
+
+ protected void chooseAlgorithmAndStrength() {
+ if (requestedAlgorithm != null) {
+ algorithm = requestedAlgorithm.toUpperCase(Locale.ROOT);
+ int supportedStrength = alg2strength(algorithm);
+ if (requestedInstantiationSecurityStrength >= 0) {
+ int tryStrength = getStandardStrength(
+ requestedInstantiationSecurityStrength);
+ if (tryStrength > supportedStrength) {
+ throw new IllegalArgumentException(algorithm +
+ " does not support strength " +
+ requestedInstantiationSecurityStrength);
+ }
+ this.securityStrength = tryStrength;
+ } else {
+ this.securityStrength = DEFAULT_STRENGTH > supportedStrength ?
+ supportedStrength : DEFAULT_STRENGTH;
+ }
+ } else {
+ int tryStrength = (requestedInstantiationSecurityStrength < 0) ?
+ DEFAULT_STRENGTH : requestedInstantiationSecurityStrength;
+ tryStrength = getStandardStrength(tryStrength);
+ // The default algorithm which is enough for all strengths.
+ // Remember to sync with "securerandom.drbg.config" in java.security
+ algorithm = "SHA-256";
+ this.securityStrength = tryStrength;
+ }
+ switch (algorithm.toUpperCase(Locale.ROOT)) {
+ case "SHA-1":
+ this.seedLen = 440 / 8;
+ this.outLen = 160 / 8;
+ break;
+ case "SHA-224":
+ case "SHA-512/224":
+ this.seedLen = 440 / 8;
+ this.outLen = 224 / 8;
+ break;
+ case "SHA-256":
+ case "SHA-512/256":
+ this.seedLen = 440 / 8;
+ this.outLen = 256 / 8;
+ break;
+ case "SHA-384":
+ this.seedLen = 888 / 8;
+ this.outLen = 384 / 8;
+ break;
+ case "SHA-512":
+ this.seedLen = 888 / 8;
+ this.outLen = 512 / 8;
+ break;
+ default:
+ throw new IllegalArgumentException(algorithm +
+ " not supported in Hash_DBRG");
+ }
+ this.minLength = this.securityStrength / 8;
+ }
+
+ @Override
+ public void instantiateAlgorithm(byte[] entropy) {
+ if (debug != null) {
+ debug.println(this, "instantiate");
+ }
+
+ // 800-90Ar1 10.1.1.2: Hash_DRBG Instantiate Process.
+ // 800-90Ar1 10.1.2.3: Hmac_DRBG Instantiate Process.
+
+ // Step 1: entropy_input || nonce || personalization_string.
+ byte[] seed = Arrays.copyOf(entropy, entropy.length + nonce.length +
+ ((personalizationString == null) ? 0
+ : personalizationString.length));
+ System.arraycopy(nonce, 0, seed, entropy.length, nonce.length);
+ if (personalizationString != null) {
+ System.arraycopy(personalizationString, 0,
+ seed, entropy.length + nonce.length,
+ personalizationString.length);
+ }
+ hashReseedInternal(seed);
+ }
+
+ @Override
+ protected void reseedAlgorithm(
+ byte[] ei,
+ byte[] additionalInput) {
+ if (debug != null) {
+ debug.println(this, "reseedAlgorithm\n" +
+ new HexDumpEncoder().encodeBuffer(ei) + "\n" +
+ ((additionalInput == null) ? "" :
+ new HexDumpEncoder().encodeBuffer(additionalInput)));
+ }
+
+ // 800-90Ar1 10.1.1.3: Hash_DRBG Reseed Process.
+ // 800-90Ar1 10.1.2.4: Hmac_DRBG Reseed Process.
+
+ // Step 1: entropy_input || additional_input.
+ if (additionalInput != null) {
+ ei = Arrays.copyOf(ei, ei.length + additionalInput.length);
+ System.arraycopy(additionalInput, 0, ei,
+ ei.length - additionalInput.length, additionalInput.length);
+ }
+ hashReseedInternal(ei);
+ }
+
+ protected abstract void hashReseedInternal(byte[] seed);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/sun/security/provider/CtrDrbg.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,530 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.provider;
+
+import javax.crypto.Cipher;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.IOException;
+import java.security.*;
+import java.util.Arrays;
+import java.util.Locale;
+
+public class CtrDrbg extends AbstractDrbg {
+
+ private static final long serialVersionUID = 9L;
+ private static final int AES_LIMIT;
+
+ static {
+ try {
+ AES_LIMIT = Cipher.getMaxAllowedKeyLength("AES");
+ } catch (Exception e) {
+ // should not happen
+ throw new AssertionError("Cannot detect AES", e);
+ }
+ }
+
+ private transient Cipher cipher;
+
+ private String cipherAlg;
+ private String keyAlg;
+
+ private int ctrLen;
+ private int blockLen;
+ private int keyLen;
+ private int seedLen;
+
+ private transient byte[] v;
+ private transient byte[] k;
+
+ public CtrDrbg(SecureRandomParameters params) {
+ mechName = "CTR_DRBG";
+ configure(params);
+ }
+
+ private static int alg2strength(String algorithm) {
+ switch (algorithm.toUpperCase(Locale.ROOT)) {
+ case "TDEA":
+ case "3KEYTDEA":
+ case "3 KEY TDEA":
+ case "DESEDE":
+ return 112;
+ case "AES-128":
+ return 128;
+ case "AES-192":
+ return 192;
+ case "AES-256":
+ return 256;
+ default:
+ throw new IllegalArgumentException(algorithm +
+ " not supported in CTR_DBRG");
+ }
+ }
+
+ @Override
+ protected void chooseAlgorithmAndStrength() {
+ if (requestedAlgorithm != null) {
+ algorithm = requestedAlgorithm.toUpperCase();
+ int supportedStrength = alg2strength(algorithm);
+ if (requestedInstantiationSecurityStrength >= 0) {
+ int tryStrength = getStandardStrength(
+ requestedInstantiationSecurityStrength);
+ if (tryStrength > supportedStrength) {
+ throw new IllegalArgumentException(algorithm +
+ " does not support strength " +
+ requestedInstantiationSecurityStrength);
+ }
+ this.securityStrength = tryStrength;
+ } else {
+ this.securityStrength = (DEFAULT_STRENGTH > supportedStrength) ?
+ supportedStrength : DEFAULT_STRENGTH;
+ }
+ } else {
+ int tryStrength = (requestedInstantiationSecurityStrength < 0) ?
+ DEFAULT_STRENGTH : requestedInstantiationSecurityStrength;
+ tryStrength = getStandardStrength(tryStrength);
+ // Default algorithm, use AES-128 if AES-256 is not available.
+ // Remember to sync with "securerandom.drbg.config" in java.security
+ if (tryStrength <= 128 && AES_LIMIT < 256) {
+ algorithm = "AES-128";
+ } else if (AES_LIMIT >= 256) {
+ algorithm = "AES-256";
+ } else {
+ throw new IllegalArgumentException("unsupported strength " +
+ requestedInstantiationSecurityStrength);
+ }
+ this.securityStrength = tryStrength;
+ }
+ switch (algorithm.toUpperCase(Locale.ROOT)) {
+ case "TDEA":
+ case "3KEYTDEA":
+ case "3 KEY TDEA":
+ case "DESEDE":
+ algorithm = "DESede";
+ this.keyAlg = "DESede";
+ this.cipherAlg = "DESede/ECB/NoPadding";
+ this.blockLen = 64 / 8;
+ this.keyLen = 168 / 8;
+ break;
+ case "AES-128":
+ case "AES-192":
+ case "AES-256":
+ this.keyAlg = "AES";
+ this.cipherAlg = "AES/ECB/NoPadding";
+ switch (algorithm) {
+ case "AES-128":
+ this.keyLen = 128 / 8;
+ break;
+ case "AES-192":
+ this.keyLen = 192 / 8;
+ if (AES_LIMIT < 192) {
+ throw new IllegalArgumentException(algorithm +
+ " not available (because policy) in CTR_DBRG");
+ }
+ break;
+ case "AES-256":
+ this.keyLen = 256 / 8;
+ if (AES_LIMIT < 256) {
+ throw new IllegalArgumentException(algorithm +
+ " not available (because policy) in CTR_DBRG");
+ }
+ break;
+ default:
+ throw new IllegalArgumentException(algorithm +
+ " not supported in CTR_DBRG");
+ }
+ this.blockLen = 128 / 8;
+ break;
+ default:
+ throw new IllegalArgumentException(algorithm +
+ " not supported in CTR_DBRG");
+ }
+ this.seedLen = this.blockLen + this.keyLen;
+ this.ctrLen = this.blockLen; // TODO
+ if (usedf) {
+ this.minLength = this.securityStrength / 8;
+ } else {
+ this.minLength = this.maxLength =
+ this.maxPersonalizationStringLength =
+ this.maxAdditionalInputLength = seedLen;
+ }
+ }
+
+ /**
+ * This call, used by the constructors, instantiates the digest.
+ */
+ @Override
+ protected void initEngine() {
+ try {
+ /*
+ * Use the local SUN implementation to avoid native
+ * performance overhead.
+ */
+ cipher = Cipher.getInstance(cipherAlg, "SunJCE");
+ } catch (NoSuchProviderException | NoSuchAlgorithmException
+ | NoSuchPaddingException e) {
+ // Fallback to any available.
+ try {
+ cipher = Cipher.getInstance(cipherAlg);
+ } catch (NoSuchAlgorithmException | NoSuchPaddingException exc) {
+ throw new InternalError(
+ "internal error: " + cipherAlg + " not available.", exc);
+ }
+ }
+ }
+
+ private void status() {
+ if (debug != null) {
+ debug.println(this, "Key = " + hex(k));
+ debug.println(this, "V = " + hex(v));
+ debug.println(this, "reseed counter = " + reseedCounter);
+ }
+ }
+
+ // 800-90Ar1 10.2.1.2. CTR_DRBG_Update
+ private void update(byte[] input) {
+ if (input.length != seedLen) {
+ // Should not happen
+ throw new IllegalArgumentException("input length not seedLen: "
+ + input.length);
+ }
+ try {
+
+ int m = (seedLen + blockLen - 1) / blockLen;
+ byte[] temp = new byte[m * blockLen];
+
+ // Step 1. temp = Null.
+
+ // Step 2. Loop
+ for (int i = 0; i < m; i++) {
+ // Step 2.1. Increment
+ addOne(v, ctrLen);
+ // Step 2.2. Block_Encrypt
+ cipher.init(Cipher.ENCRYPT_MODE, getKey(keyAlg, k));
+ // Step 2.3. Encrypt into right position, no need to cat
+ cipher.doFinal(v, 0, blockLen, temp, i * blockLen);
+ }
+
+ // Step 3. Truncate
+ temp = Arrays.copyOf(temp, seedLen);
+
+ // Step 4: Add
+ for (int i = 0; i < seedLen; i++) {
+ temp[i] ^= input[i];
+ }
+
+ // Step 5: leftmost
+ k = Arrays.copyOf(temp, keyLen);
+
+ // Step 6: rightmost
+ v = Arrays.copyOfRange(temp, seedLen - blockLen, seedLen);
+
+ // Step 7. Return
+ } catch (GeneralSecurityException e) {
+ throw new InternalError(e);
+ }
+ }
+
+ @Override
+ protected void instantiateAlgorithm(byte[] ei) {
+ if (debug != null) {
+ debug.println(this, "instantiate");
+ }
+ byte[] more;
+ if (usedf) {
+ // 800-90Ar1 10.2.1.3.2 Step 1-2. cat bytes
+ if (personalizationString == null) {
+ more = nonce;
+ } else {
+ more = Arrays.copyOf(
+ nonce, nonce.length + personalizationString.length);
+ System.arraycopy(personalizationString, 0, more, nonce.length,
+ personalizationString.length);
+ }
+ } else {
+ // 800-90Ar1 10.2.1.3.1
+ // Step 1-2, no need to expand personalizationString, we only XOR
+ // with shorter length
+ more = personalizationString;
+ }
+ reseedAlgorithm(ei, more);
+ }
+
+ private byte[] df(byte[] input) {
+ int l = input.length;
+ int n = seedLen;
+ int slen = 4 + 4 + l + 1;
+ byte[] s = new byte[(slen + blockLen - 1) / blockLen * blockLen];
+ s[0] = (byte)(l >> 24);
+ s[1] = (byte)(l >> 16);
+ s[2] = (byte)(l >> 8);
+ s[3] = (byte)(l);
+ s[4] = (byte)(n >> 24);
+ s[5] = (byte)(n >> 16);
+ s[6] = (byte)(n >> 8);
+ s[7] = (byte)(n);
+ System.arraycopy(input, 0, s, 8, l);
+ s[8+l] = (byte)0x80;
+
+ byte[] k = new byte[keyLen];
+ for (int i = 0; i < k.length; i++) {
+ k[i] = (byte)i;
+ }
+
+ byte[] temp = new byte[seedLen];
+
+ for (int i = 0; i * blockLen < temp.length; i++) {
+ byte[] iv = new byte[blockLen + s.length];
+ iv[0] = (byte)(i >> 24);
+ iv[1] = (byte)(i >> 16);
+ iv[2] = (byte)(i >> 8);
+ iv[3] = (byte)(i);
+ System.arraycopy(s, 0, iv, blockLen, s.length);
+ int tailLen = temp.length - blockLen*i;
+ if (tailLen > blockLen) {
+ tailLen = blockLen;
+ }
+ System.arraycopy(bcc(k, iv), 0, temp, blockLen*i, tailLen);
+ }
+
+ k = Arrays.copyOf(temp, keyLen);
+ byte[] x = Arrays.copyOfRange(temp, keyLen, temp.length);
+
+ for (int i = 0; i * blockLen < seedLen; i++) {
+ try {
+ cipher.init(Cipher.ENCRYPT_MODE, getKey(keyAlg, k));
+ int tailLen = temp.length - blockLen*i;
+ if (tailLen > blockLen) {
+ tailLen = blockLen;
+ }
+ x = cipher.doFinal(x);
+ System.arraycopy(x, 0, temp, blockLen * i, tailLen);
+ } catch (GeneralSecurityException e) {
+ throw new InternalError(e);
+ }
+ }
+ return temp;
+ }
+
+ private byte[] bcc(byte[] k, byte[] data) {
+ byte[] chain = new byte[blockLen];
+ int n = data.length / blockLen;
+ for (int i = 0; i < n; i++) {
+ byte[] inputBlock = Arrays.copyOfRange(
+ data, i * blockLen, i * blockLen + blockLen);
+ for (int j = 0; j < blockLen; j++) {
+ inputBlock[j] ^= chain[j];
+ }
+ try {
+ cipher.init(Cipher.ENCRYPT_MODE, getKey(keyAlg, k));
+ chain = cipher.doFinal(inputBlock);
+ } catch (GeneralSecurityException e) {
+ throw new InternalError(e);
+ }
+ }
+ return chain;
+ }
+
+ @Override
+ protected void reseedAlgorithm(
+ byte[] ei,
+ byte[] additionalInput) {
+ if (usedf) {
+ // 800-90Ar1 10.2.1.3.2 Instantiate.
+ // 800-90Ar1 10.2.1.4.2 Reseed.
+
+ // Step 1: cat bytes
+ if (additionalInput != null) {
+ byte[] temp = Arrays.copyOf(
+ ei, ei.length + additionalInput.length);
+ System.arraycopy(additionalInput, 0, temp, ei.length,
+ additionalInput.length);
+ ei = temp;
+ }
+ // Step 2. df (seed_material, seedlen).
+ ei = df(ei);
+ } else {
+ // 800-90Ar1 10.2.1.3.1 Instantiate
+ // 800-90Ar1 10.2.1.4.1 Reseed
+ // Step 1-2. Needless
+ // Step 3. seed_material = entropy_input XOR more
+ if (additionalInput != null) {
+ // additionalInput.length <= seedLen
+ for (int i = 0; i < additionalInput.length; i++) {
+ ei[i] ^= additionalInput[i];
+ }
+ }
+ }
+
+ if (v == null) {
+ // 800-90Ar1 10.2.1.3.2 Instantiate. Step 3-4
+ // 800-90Ar1 10.2.1.3.1 Instantiate. Step 4-5
+ k = new byte[keyLen];
+ v = new byte[blockLen];
+ }
+ //status();
+
+ // 800-90Ar1 10.2.1.3.1 Instantiate. Step 6
+ // 800-90Ar1 10.2.1.3.2 Instantiate. Step 5
+ // 800-90Ar1 10.2.1.4.1 Reseed. Step 4
+ // 800-90Ar1 10.2.1.4.2 Reseed. Step 3
+ update(ei);
+ // 800-90Ar1 10.2.1.3.1 Instantiate. Step 7
+ // 800-90Ar1 10.2.1.3.2 Instantiate. Step 6
+ // 800-90Ar1 10.2.1.4.1 Reseed. Step 5
+ // 800-90Ar1 10.2.1.4.2 Reseed. Step 4
+ reseedCounter = 1;
+ //status();
+
+ // Whatever step. Return
+ }
+
+ /**
+ * Add one to data, only touch the last len bytes.
+ */
+ private static void addOne(byte[] data, int len) {
+ for (int i = 0; i < len; i++) {
+ data[data.length - 1 - i]++;
+ if (data[data.length - 1 - i] != 0) {
+ break;
+ }
+ }
+ }
+
+ @Override
+ public synchronized void generateAlgorithm(
+ byte[] result, byte[] additionalInput) {
+
+ if (debug != null) {
+ debug.println(this, "generateAlgorithm");
+ }
+
+ // 800-90Ar1 10.2.1.5.1 Generate
+ // 800-90Ar1 10.2.1.5.2 Generate
+
+ // Step 1: Check reseed_counter. Will not fail. Already checked in
+ // AbstractDrbg#engineNextBytes.
+
+ if (additionalInput != null) {
+ if (usedf) {
+ // 10.2.1.5.2 Step 2.1
+ additionalInput = df(additionalInput);
+ } else {
+ // 10.2.1.5.1 Step 2.1-2.2
+ additionalInput = Arrays.copyOf(additionalInput, seedLen);
+ }
+ // 10.2.1.5.1 Step 2.3
+ // 10.2.1.5.2 Step 2.2
+ update(additionalInput);
+ } else {
+ // 10.2.1.5.1 Step 2 Else
+ // 10.2.1.5.2 Step 2 Else
+ additionalInput = new byte[seedLen];
+ }
+
+ // Step 3. temp = Null
+ int pos = 0;
+
+ // Step 4. Loop
+ while (pos < result.length) {
+ int tailLen = result.length - pos;
+ // Step 4.1. Increment
+ addOne(v, ctrLen);
+ try {
+ // Step 4.2. Encrypt
+ cipher.init(Cipher.ENCRYPT_MODE, getKey(keyAlg, k));
+ byte[] out = cipher.doFinal(v);
+
+ // Step 4.3 and 5. Cat bytes and leftmost
+ System.arraycopy(out, 0, result, pos,
+ (tailLen > blockLen) ? blockLen : tailLen);
+ } catch (GeneralSecurityException e) {
+ throw new InternalError(e);
+ }
+ pos += blockLen;
+ }
+
+ // Step 6. Update
+ update(additionalInput);
+
+ // Step 7. reseed_counter++
+ reseedCounter++;
+
+ //status();
+
+ // Step 8. Return
+ }
+
+ private static void des7to8(
+ byte[] key56, int off56, byte[] key64, int off64) {
+ key64[off64 + 0] = (byte)
+ (key56[off56 + 0] & 0xFE); // << 0
+ key64[off64 + 1] = (byte)
+ ((key56[off56 + 0] << 7) | ((key56[off56 + 1] & 0xFF) >>> 1));
+ key64[off64 + 2] = (byte)
+ ((key56[off56 + 1] << 6) | ((key56[off56 + 2] & 0xFF) >>> 2));
+ key64[off64 + 3] = (byte)
+ ((key56[off56 + 2] << 5) | ((key56[off56 + 3] & 0xFF) >>> 3));
+ key64[off64 + 4] = (byte)
+ ((key56[off56 + 3] << 4) | ((key56[off56 + 4] & 0xFF) >>> 4));
+ key64[off64 + 5] = (byte)
+ ((key56[off56 + 4] << 3) | ((key56[off56 + 5] & 0xFF) >>> 5));
+ key64[off64 + 6] = (byte)
+ ((key56[off56 + 5] << 2) | ((key56[off56 + 6] & 0xFF) >>> 6));
+ key64[off64 + 7] = (byte)
+ (key56[off56 + 6] << 1);
+
+ for (int i = 0; i < 8; i++) {
+ // if even # bits, make uneven, XOR with 1 (uneven & 1)
+ // for uneven # bits, make even, XOR with 0 (even & 1)
+ key64[off64 + i] ^= Integer.bitCount(key64[off64 + i] ^ 1) & 1;
+ }
+ }
+
+ private static SecretKey getKey(String keyAlg, byte[] k) {
+ if (keyAlg.equals("DESede")) {
+ byte[] k2 = new byte[24];
+ des7to8(k, 0, k2, 0);
+ des7to8(k, 7, k2, 8);
+ des7to8(k, 14, k2, 16);
+ k = k2;
+ }
+ return new SecretKeySpec(k, keyAlg);
+ }
+
+ private void readObject(java.io.ObjectInputStream s)
+ throws IOException, ClassNotFoundException {
+ s.defaultReadObject ();
+ initEngine();
+ }
+
+ @Override
+ public String toString() {
+ return super.toString() + "/"
+ + (usedf ? "use_df" : "no_df");
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/sun/security/provider/DRBG.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,271 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.provider;
+
+import java.security.AccessController;
+import java.security.DrbgParameters;
+import java.security.PrivilegedAction;
+import java.security.SecureRandomParameters;
+import java.security.SecureRandomSpi;
+import java.security.Security;
+import java.util.Locale;
+import static java.security.DrbgParameters.Capability.*;
+
+/**
+ * Implement the "SecureRandom.DRBG" algorithm.
+ *
+ * About the default "securerandom.drbg.config" value:
+ *
+ * The default value in java.security is set to "". This is because
+ * the default values of different aspects are dependent (For example,
+ * strength depends on algorithm) and if we write a full string there
+ * it will be difficult to modify one and keep all others legal.
+ *
+ * When changing default values, touch all places including:
+ *
+ * 1. comments of the security property in java.security
+ * 2. Default mech, cap, usedf set in this class
+ * 3. Default algorithm set in final implementation of each mech
+ * 4. Default strength set in AbstractDrbg, but the effective
+ * value can be smaller if an algorithm does not support it.
+ *
+ * The default value is also mentioned in the @implNote part of
+ * {@link DrbgParameters} class.
+ */
+public final class DRBG extends SecureRandomSpi {
+
+ private static final String PROP_NAME = "securerandom.drbg.config";
+
+ private static final long serialVersionUID = 9L;
+
+ private final AbstractDrbg impl;
+
+ private final String mechName;
+
+ private final String algorithmName;
+
+ public DRBG(SecureRandomParameters params) {
+
+ // All parameters at unset status (null or -1).
+
+ // Configurable with the "securerandom.drbg.config" security property
+ String mech = null;
+ Boolean usedf = null;
+ String algorithm = null;
+
+ // Default instantiate parameters also configurable with
+ // "securerandom.drbg.config", and can be changed with params
+ // in getInstance("drbg", params)
+ int strength = -1;
+ DrbgParameters.Capability cap = null;
+ byte[] ps = null;
+
+ // Not configurable with public interfaces, but is a part of
+ // MoreDrbgParameters
+ EntropySource es = null;
+ byte[] nonce = null;
+
+ // Can be configured with a security property
+
+ String config = AccessController.doPrivileged((PrivilegedAction<String>)
+ () -> Security.getProperty(PROP_NAME));
+
+ if (config != null && !config.isEmpty()) {
+ for (String part : config.split(",")) {
+ part = part.trim();
+ switch (part.toLowerCase(Locale.ROOT)) {
+ case "":
+ throw new IllegalArgumentException(
+ "aspect in " + PROP_NAME + " cannot be empty");
+ case "pr_and_reseed":
+ checkTwice(cap != null, "capability");
+ cap = PR_AND_RESEED;
+ break;
+ case "reseed_only":
+ checkTwice(cap != null, "capability");
+ cap = RESEED_ONLY;
+ break;
+ case "none":
+ checkTwice(cap != null, "capability");
+ cap = NONE;
+ break;
+ case "hash_drbg":
+ case "hmac_drbg":
+ case "ctr_drbg":
+ checkTwice(mech != null, "mechanism name");
+ mech = part;
+ break;
+ case "no_df":
+ checkTwice(usedf != null, "usedf flag");
+ usedf = false;
+ break;
+ case "use_df":
+ checkTwice(usedf != null, "usedf flag");
+ usedf = true;
+ break;
+ default:
+ // For all other parts of the property, it is
+ // either an algorithm name or a strength
+ try {
+ int tmp = Integer.parseInt(part);
+ if (tmp < 0) {
+ throw new IllegalArgumentException(
+ "strength in " + PROP_NAME +
+ " cannot be negative: " + part);
+ }
+ checkTwice(strength >= 0, "strength");
+ strength = tmp;
+ } catch (NumberFormatException e) {
+ checkTwice(algorithm != null, "algorithm name");
+ algorithm = part;
+ }
+ }
+ }
+ }
+
+ // Can be updated by params
+
+ if (params != null) {
+ // MoreDrbgParameters is used for testing.
+ if (params instanceof MoreDrbgParameters) {
+ MoreDrbgParameters m = (MoreDrbgParameters)params;
+ params = m.config;
+
+ // No need to check null for es and nonce, they are still null
+ es = m.es;
+ nonce = m.nonce;
+
+ if (m.mech != null) {
+ mech = m.mech;
+ }
+ if (m.algorithm != null) {
+ algorithm = m.algorithm;
+ }
+ usedf = m.usedf;
+ }
+ if (params instanceof DrbgParameters.Instantiation) {
+ DrbgParameters.Instantiation dp =
+ (DrbgParameters.Instantiation) params;
+
+ // ps is still null by now
+ ps = dp.getPersonalizationString();
+
+ int tmp = dp.getStrength();
+ if (tmp != -1) {
+ strength = tmp;
+ }
+ cap = dp.getCapability();
+ } else {
+ throw new IllegalArgumentException("Unsupported params: "
+ + params.getClass());
+ }
+ }
+
+ // Hardcoded defaults.
+ // Remember to sync with "securerandom.drbg.config" in java.security.
+
+ if (cap == null) {
+ cap = NONE;
+ }
+ if (mech == null) {
+ mech = "Hash_DRBG";
+ }
+ if (usedf == null) {
+ usedf = true;
+ }
+
+ MoreDrbgParameters m = new MoreDrbgParameters(
+ es, mech, algorithm, nonce, usedf,
+ DrbgParameters.instantiation(strength, cap, ps));
+
+ switch (mech.toLowerCase(Locale.ROOT)) {
+ case "hash_drbg":
+ impl = new HashDrbg(m);
+ break;
+ case "hmac_drbg":
+ impl = new HmacDrbg(m);
+ break;
+ case "ctr_drbg":
+ impl = new CtrDrbg(m);
+ break;
+ default:
+ throw new IllegalArgumentException("Unsupported mech: " + mech);
+ }
+
+ mechName = mech;
+ algorithmName = impl.algorithm;
+ }
+
+ @Override
+ protected void engineSetSeed(byte[] seed) {
+ impl.engineSetSeed(seed);
+ }
+
+ @Override
+ protected void engineNextBytes(byte[] bytes) {
+ impl.engineNextBytes(bytes);
+ }
+
+ @Override
+ protected byte[] engineGenerateSeed(int numBytes) {
+ return impl.engineGenerateSeed(numBytes);
+ }
+
+ @Override
+ protected void engineNextBytes(
+ byte[] bytes, SecureRandomParameters params) {
+ impl.engineNextBytes(bytes, params);
+ }
+
+ @Override
+ protected void engineReseed(SecureRandomParameters params) {
+ impl.engineReseed(params);
+ }
+
+ @Override
+ protected SecureRandomParameters engineGetParameters() {
+ return impl.engineGetParameters();
+ }
+
+ @Override
+ public String toString() {
+ return impl.toString();
+ }
+
+ /**
+ * Ensures an aspect is not set more than once.
+ *
+ * @param flag true if set more than once
+ * @param name the name of aspect shown in IAE
+ * @throws IllegalArgumentException if it happens
+ */
+ private static void checkTwice(boolean flag, String name) {
+ if (flag) {
+ throw new IllegalArgumentException(name
+ + " cannot be provided more than once in " + PROP_NAME);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/sun/security/provider/EntropySource.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.provider;
+
+/**
+ * An interface of a source of entropy input.
+ *
+ * @since 9
+ */
+public interface EntropySource {
+ /**
+ * Returns a byte array containing entropy.
+ * <p>
+ * This maps to the {@code Get_entropy_input} function defined in
+ * Section 9 of NIST SP 800-90Ar1.
+ *
+ * @param minEntropy minimum entropy required, in bytes
+ * @param minLength minimum length of output, in bytes
+ * @param maxLength maximum length of output, in bytes
+ * @param pr whether prediction resistance is required
+ * @return the byte array containing entropy
+ */
+ byte[] getEntropy(int minEntropy, int minLength, int maxLength, boolean pr);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/sun/security/provider/HashDrbg.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,276 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.provider;
+
+import java.io.IOException;
+import java.math.BigInteger;
+import java.security.DigestException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.SecureRandomParameters;
+import java.util.Arrays;
+
+public class HashDrbg extends AbstractHashDrbg {
+
+ private static final long serialVersionUID = 9L;
+
+ private static final byte[] ZERO = new byte[1];
+ private static final byte[] ONE = new byte[]{1};
+
+ private transient MessageDigest digest;
+
+ private transient byte[] v;
+ private transient byte[] c;
+
+ public HashDrbg(SecureRandomParameters params) {
+ mechName = "Hash_DRBG";
+ configure(params);
+ }
+
+ /**
+ * This call, used by the constructors, instantiates the digest.
+ */
+ @Override
+ protected void initEngine() {
+ try {
+ /*
+ * Use the local SUN implementation to avoid native
+ * performance overhead.
+ */
+ digest = MessageDigest.getInstance(algorithm, "SUN");
+ } catch (NoSuchProviderException | NoSuchAlgorithmException e) {
+ // Fallback to any available.
+ try {
+ digest = MessageDigest.getInstance(algorithm);
+ } catch (NoSuchAlgorithmException exc) {
+ throw new InternalError(
+ "internal error: " + algorithm + " not available.", exc);
+ }
+ }
+ }
+
+ private byte[] hashDf(int requested, byte[]... inputs) {
+ return hashDf(digest, outLen, requested, inputs);
+ }
+
+ /**
+ * A hash-based derivation function defined in NIST SP 800-90Ar1 10.3.1.
+ * The function is used inside Hash_DRBG, and can also be used as an
+ * approved conditioning function as described in 800-90B 6.4.2.2.
+ *
+ * @param digest a {@code MessageDigest} object in reset state
+ * @param outLen {@link MessageDigest#getDigestLength} of {@code digest}
+ * @param requested requested output length, in bytes
+ * @param inputs input data
+ * @return the condensed/expanded output
+ */
+ public static byte[] hashDf(MessageDigest digest, int outLen,
+ int requested, byte[]... inputs) {
+ int len = (requested + outLen - 1) / outLen;
+ byte[] temp = new byte[len * outLen];
+ int counter = 1;
+
+ for (int i=0; i<len; i++) {
+ digest.update((byte) counter);
+ digest.update((byte)(requested >> 21)); // requested*8 as int32
+ digest.update((byte)(requested >> 13));
+ digest.update((byte)(requested >> 5));
+ digest.update((byte)(requested << 3));
+ for (byte[] input : inputs) {
+ digest.update(input);
+ }
+ try {
+ digest.digest(temp, i * outLen, outLen);
+ } catch (DigestException e) {
+ throw new AssertionError("will not happen", e);
+ }
+ counter++;
+ }
+ return temp.length == requested? temp: Arrays.copyOf(temp, requested);
+ }
+
+ // This method is used by both instantiation and reseeding.
+ @Override
+ protected final void hashReseedInternal(byte[] input) {
+
+ // 800-90Ar1 10.1.1.2: Instantiate Process.
+ // 800-90Ar1 10.1.1.3: Reseed Process.
+ byte[] seed;
+
+ // Step 2: seed = Hash_df (seed_material, seedlen).
+ if (v != null) {
+ // Step 1 of 10.1.1.3: Prepend 0x01 || V
+ seed = hashDf(seedLen, ONE, v, input);
+ } else {
+ seed = hashDf(seedLen, input);
+ }
+
+ // Step 3. V = seed.
+ v = seed;
+
+ // Step 4. C = Hash_df ((0x00 || V), seedlen).
+ c = hashDf(seedLen, ZERO, v);
+
+ // Step 5. reseed_counter = 1.
+ reseedCounter = 1;
+
+ //status();
+
+ // Step 6: Return
+ }
+
+ private void status() {
+ if (debug != null) {
+ debug.println(this, "V = " + hex(v));
+ debug.println(this, "C = " + hex(c));
+ debug.println(this, "reseed counter = " + reseedCounter);
+ }
+ }
+
+ /**
+ * Adds byte arrays into an existing one.
+ *
+ * @param out existing array
+ * @param data more arrays, can be of different length
+ */
+ private static void addBytes(byte[] out, int len, byte[]... data) {
+ for (byte[] d: data) {
+ int dlen = d.length;
+ int carry = 0;
+ for (int i = 0; i < len; i++) {
+ int sum = (out[len - i - 1] & 0xff) + carry;
+ if (i < dlen) {
+ sum += (d[dlen - i - 1] & 0xff);
+ }
+ out[len - i - 1] = (byte) sum;
+ carry = sum >> 8;
+ if (i >= dlen - 1 && carry == 0) break;
+ }
+ }
+ }
+
+ /**
+ * Generates a user-specified number of random bytes.
+ *
+ * @param result the array to be filled in with random bytes.
+ */
+ @Override
+ public final synchronized void generateAlgorithm(
+ byte[] result, byte[] additionalInput) {
+
+ if (debug != null) {
+ debug.println(this, "generateAlgorithm");
+ }
+
+ // 800-90Ar1 10.1.1.4: Hash_DRBG_Generate Process
+
+ // Step 1: Check reseed_counter. Will not fail. Already checked in
+ // AbstractDrbg#engineNextBytes.
+
+ // Step 2: additional_input
+ if (additionalInput != null) {
+ digest.update((byte)2);
+ digest.update(v);
+ digest.update(additionalInput);
+ addBytes(v, seedLen, digest.digest());
+ }
+
+ // Step 3. Hashgen (requested_number_of_bits, V).
+ hashGen(result, result.length, v);
+
+ // Step 4. H = Hash (0x03 || V).
+ digest.update((byte)3);
+ digest.update(v);
+ byte[] h = digest.digest();
+
+ // Step 5. V = (V + H + C + reseed_counter) mod 2seedlen.
+ byte[] rcBytes;
+ if (reseedCounter < 256) {
+ rcBytes = new byte[]{(byte)reseedCounter};
+ } else {
+ rcBytes = BigInteger.valueOf(reseedCounter).toByteArray();
+ }
+ addBytes(v, seedLen, h, c, rcBytes);
+
+ // Step 6. reseed_counter = reseed_counter + 1.
+ reseedCounter++;
+
+ //status();
+
+ // Step 7: Return.
+ }
+
+ // 800-90Ar1 10.1.1.4: Hashgen
+ private void hashGen(byte[] output, int len, byte[] v) {
+
+ // Step 1. m
+ int m = (len + outLen - 1) / outLen;
+
+ // Step 2. data = V
+ byte[] data = v;
+
+ // Step 3: W is output not filled
+
+ // Step 4: For i = 1 to m
+ for (int i = 0; i < m; i++) {
+ int tailLen = len - i * outLen;
+ if (tailLen < outLen) {
+ // Step 4.1 w = Hash (data).
+ // Step 4.2 W = W || w.
+ System.arraycopy(digest.digest(data), 0, output, i * outLen,
+ tailLen);
+ } else {
+ try {
+ // Step 4.1 w = Hash (data).
+ digest.update(data);
+ // Step 4.2 digest into right position, no need to cat
+ digest.digest(output, i*outLen, outLen);
+ } catch (DigestException e) {
+ throw new AssertionError("will not happen", e);
+ }
+ }
+ // Unless this is the last around, we will need to increment data.
+ // but we cannot change v, so a copy is made.
+ if (i != m - 1) {
+ if (data == v) {
+ data = Arrays.copyOf(v, v.length);
+ }
+ // Step 4.3 data = (data + 1) mod 2^seedlen.
+ addBytes(data, seedLen, ONE);
+ }
+ }
+
+ // Step 5: No need to truncate
+ // Step 6: Return
+ }
+
+ private void readObject(java.io.ObjectInputStream s)
+ throws IOException, ClassNotFoundException {
+ s.defaultReadObject ();
+ initEngine();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/sun/security/provider/HmacDrbg.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,203 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.provider;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.io.IOException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.SecureRandomParameters;
+import java.util.Arrays;
+
+public class HmacDrbg extends AbstractHashDrbg {
+
+ private static final long serialVersionUID = 9L;
+
+ private transient Mac mac;
+
+ private String macAlg;
+
+ private transient byte[] v;
+ private transient byte[] k;
+
+ public HmacDrbg(SecureRandomParameters params) {
+ mechName = "HMAC_DRBG";
+ configure(params);
+ }
+
+ private void status() {
+ if (debug != null) {
+ debug.println(this, "V = " + hex(v));
+ debug.println(this, "Key = " + hex(k));
+ debug.println(this, "reseed counter = " + reseedCounter);
+ }
+ }
+
+ // 800-90Ar1 10.1.2.2: HMAC_DRBG Update Process
+ private void update(byte[]... inputs) {
+ try {
+ // Step 1. K = HMAC (K, V || 0x00 || provided_data).
+ mac.init(new SecretKeySpec(k, macAlg));
+ mac.update(v);
+ mac.update((byte) 0);
+ for (byte[] input: inputs) {
+ mac.update(input);
+ }
+ k = mac.doFinal();
+
+ // Step 2. V = HMAC (K, V).
+ mac.init(new SecretKeySpec(k, macAlg));
+ v = mac.doFinal(v);
+
+ if (inputs.length != 0) {
+ // Step 4. K = HMAC (K, V || 0x01 || provided_data).
+ mac.update(v);
+ mac.update((byte) 1);
+ for (byte[] input: inputs) {
+ mac.update(input);
+ }
+ k = mac.doFinal();
+
+ // Step 5. V=HMAC(K,V).
+ mac.init(new SecretKeySpec(k, macAlg));
+ v = mac.doFinal(v);
+ } // else Step 3
+
+ // Step 6. Return
+ } catch (InvalidKeyException e) {
+ throw new InternalError(e);
+ }
+ }
+
+ /**
+ * This call, used by the constructors, instantiates the digest.
+ */
+ @Override
+ protected void initEngine() {
+ macAlg = "HmacSHA" + algorithm.substring(4);
+ try {
+ mac = Mac.getInstance(macAlg, "SunJCE");
+ } catch (NoSuchProviderException | NoSuchAlgorithmException e) {
+ // Fallback to any available.
+ try {
+ mac = Mac.getInstance(macAlg);
+ } catch (NoSuchAlgorithmException exc) {
+ throw new InternalError(
+ "internal error: " + macAlg + " not available.", exc);
+ }
+ }
+ }
+
+ // This method is used by both instantiation and reseeding.
+ @Override
+ protected final void hashReseedInternal(byte[] input) {
+
+ // 800-90Ar1 10.1.2.3: Instantiate Process.
+ // 800-90Ar1 10.1.2.4: Reseed Process.
+ if (v == null) {
+ k = new byte[outLen];
+ v = new byte[outLen];
+ Arrays.fill(v, (byte) 1);
+ }
+
+ // Step 2: HMAC_DRBG_Update
+ update(input);
+
+ // Step 3: reseed_counter = 1.
+ reseedCounter = 1;
+ //status();
+
+ // Step 4: Return
+ }
+
+ /**
+ * Generates a user-specified number of random bytes.
+ *
+ * @param result the array to be filled in with random bytes.
+ */
+ @Override
+ public synchronized void generateAlgorithm(
+ byte[] result, byte[] additionalInput) {
+
+ if (debug != null) {
+ debug.println(this, "generateAlgorithm");
+ }
+
+ // 800-90Ar1 10.1.2.5: HMAC_DRBG_Generate Process
+
+ // Step 1: Check reseed_counter. Will not fail. Already checked in
+ // AbstractDrbg#engineNextBytes.
+
+ // Step 2. HMAC_DRBG_Update
+ if (additionalInput != null) {
+ update(additionalInput);
+ }
+
+ // Step 3. temp = Null.
+ int pos = 0;
+
+ // Step 4. Loop
+ while (pos < result.length) {
+ int tailLen = result.length - pos;
+
+ // Step 4.1 V = HMAC (Key, V).
+ try {
+ mac.init(new SecretKeySpec(k, macAlg));
+ } catch (InvalidKeyException e) {
+ throw new InternalError(e);
+ }
+ v = mac.doFinal(v);
+ // Step 4.2 temp = temp || V.
+ System.arraycopy(v, 0, result, pos,
+ tailLen > outLen ? outLen : tailLen);
+ pos += outLen;
+ }
+
+ // Step 5: No need to truncate
+
+ // Step 6. HMAC_DRBG_Update (additional_input, Key, V).
+ if (additionalInput != null) {
+ update(additionalInput);
+ } else {
+ update();
+ }
+
+ // Step 7. reseed_counter = reseed_counter + 1.
+ reseedCounter++;
+
+ //status();
+
+ // Step 8. Return
+ }
+
+ private void readObject(java.io.ObjectInputStream s)
+ throws IOException, ClassNotFoundException {
+ s.defaultReadObject ();
+ initEngine();
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/sun/security/provider/MoreDrbgParameters.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.provider;
+
+import java.security.DrbgParameters;
+import java.security.SecureRandomParameters;
+
+/**
+ * Extra non-standard parameters that can be used by DRBGs.
+ */
+public class MoreDrbgParameters implements SecureRandomParameters {
+
+ final String mech;
+ final String algorithm;
+ final EntropySource es;
+ final byte[] nonce;
+ final boolean usedf;
+ final DrbgParameters.Instantiation config;
+
+ /**
+ * Creates a new {@code MoreDrbgParameters} object.
+ *
+ * @param es the {@link EntropySource} to use. If set to {@code null},
+ * a default entropy source will be used.
+ * @param mech mech name. If set to {@code null}, the one in
+ * securerandom.drbg.config is used. This argument is ignored
+ * when passing to HashDrbg/HmacDrbg/CtrDrbg.
+ * @param algorithm the requested algorithm to use. If set to {@code null},
+ * the algorithm will be decided by strength.
+ * @param nonce the nonce to use. If set to {@code null},
+ * a nonce will be assigned.
+ * @param usedf whether a derivation function should be used
+ * @param config a {@link DrbgParameters.Instantiation} object
+ */
+ public MoreDrbgParameters(EntropySource es, String mech,
+ String algorithm, byte[] nonce, boolean usedf,
+ DrbgParameters.Instantiation config) {
+ this.mech = mech;
+ this.algorithm = algorithm;
+ this.es = es;
+ this.nonce = nonce;
+ this.usedf = usedf;
+ this.config = config;
+ }
+
+ @Override
+ public String toString() {
+ return mech + "," + algorithm + "," + usedf + "," + config;
+ }
+}
--- a/jdk/src/java.base/share/classes/sun/security/provider/SHA5.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/sun/security/provider/SHA5.java Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2002, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,9 +25,7 @@
package sun.security.provider;
-import java.security.*;
import java.util.Objects;
-import java.math.BigInteger;
import jdk.internal.HotSpotIntrinsicCandidate;
import static sun.security.provider.ByteArrayAccess.*;
@@ -118,7 +116,14 @@
i2bBig4((int)bitsProcessed, buffer, 124);
implCompress(buffer, 0);
- l2bBig(state, 0, out, ofs, engineGetDigestLength());
+ int len = engineGetDigestLength();
+ if (len == 28) {
+ // Special case for SHA-512/224
+ l2bBig(state, 0, out, ofs, 24);
+ i2bBig4((int)(state[3] >> 32), out, ofs + 24);
+ } else {
+ l2bBig(state, 0, out, ofs, len);
+ }
}
/**
@@ -306,4 +311,31 @@
super("SHA-384", 48, INITIAL_HASHES);
}
}
+ public static final class SHA512_224 extends SHA5 {
+
+ private static final long[] INITIAL_HASHES = {
+ 0x8C3D37C819544DA2L, 0x73E1996689DCD4D6L,
+ 0x1DFAB7AE32FF9C82L, 0x679DD514582F9FCFL,
+ 0x0F6D2B697BD44DA8L, 0x77E36F7304C48942L,
+ 0x3F9D85A86A1D36C8L, 0x1112E6AD91D692A1L
+ };
+
+ public SHA512_224() {
+ super("SHA-512/224", 28, INITIAL_HASHES);
+ }
+ }
+
+ public static final class SHA512_256 extends SHA5 {
+
+ private static final long[] INITIAL_HASHES = {
+ 0x22312194FC2BF72CL, 0x9F555FA3C84C64C2L,
+ 0x2393B86B6F53B151L, 0x963877195940EABDL,
+ 0x96283EE2A88EFFE3L, 0xBE5E1E2553863992L,
+ 0x2B0199FC2C85B8AAL, 0x0EB72DDC81C52CA2L
+ };
+
+ public SHA512_256() {
+ super("SHA-512/256", 32, INITIAL_HASHES);
+ }
+ }
}
--- a/jdk/src/java.base/share/classes/sun/security/provider/SunEntries.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/sun/security/provider/SunEntries.java Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -97,6 +97,9 @@
map.put("SecureRandom.NativePRNG",
"sun.security.provider.NativePRNG");
}
+
+ map.put("SecureRandom.DRBG", "sun.security.provider.DRBG");
+
map.put("SecureRandom.SHA1PRNG",
"sun.security.provider.SecureRandom");
if (nativeAvailable && !useNativePRNG) {
@@ -199,6 +202,14 @@
map.put("Alg.Alias.MessageDigest.2.16.840.1.101.3.4.2.3", "SHA-512");
map.put("Alg.Alias.MessageDigest.OID.2.16.840.1.101.3.4.2.3",
"SHA-512");
+ map.put("MessageDigest.SHA-512/224", "sun.security.provider.SHA5$SHA512_224");
+ map.put("Alg.Alias.MessageDigest.2.16.840.1.101.3.4.2.5", "SHA-512/224");
+ map.put("Alg.Alias.MessageDigest.OID.2.16.840.1.101.3.4.2.5",
+ "SHA-512/224");
+ map.put("MessageDigest.SHA-512/256", "sun.security.provider.SHA5$SHA512_256");
+ map.put("Alg.Alias.MessageDigest.2.16.840.1.101.3.4.2.6", "SHA-512/256");
+ map.put("Alg.Alias.MessageDigest.OID.2.16.840.1.101.3.4.2.6",
+ "SHA-512/256");
/*
* Algorithm Parameter Generator engines
--- a/jdk/src/java.base/share/classes/sun/security/ssl/ClientHandshaker.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/ClientHandshaker.java Mon May 09 08:50:20 2016 -0700
@@ -933,10 +933,8 @@
ECParameterSpec params =
((ECPublicKey)publicKey).getParams();
int index =
- SupportedEllipticCurvesExtension.getCurveIndex(
- params);
- if (!SupportedEllipticCurvesExtension.isSupported(
- index)) {
+ EllipticCurvesExtension.getCurveIndex(params);
+ if (!EllipticCurvesExtension.isSupported(index)) {
publicKey = null;
}
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/EllipticCurvesExtension.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,218 @@
+/*
+ * Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.ssl;
+
+import java.io.IOException;
+import java.security.spec.ECParameterSpec;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.net.ssl.SSLProtocolException;
+
+final class EllipticCurvesExtension extends HelloExtension {
+
+ // the extension value to send in the ClientHello message
+ static final EllipticCurvesExtension DEFAULT;
+
+ private static final boolean fips;
+
+ static {
+ int[] ids;
+ fips = SunJSSE.isFIPS();
+ if (fips == false) {
+ ids = new int[] {
+ // NIST curves first
+ // prefer NIST P-256, rest in order of increasing key length
+ 23, 1, 3, 19, 21, 6, 7, 9, 10, 24, 11, 12, 25, 13, 14,
+ // non-NIST curves
+ 15, 16, 17, 2, 18, 4, 5, 20, 8, 22,
+ };
+ } else {
+ ids = new int[] {
+ // same as above, but allow only NIST curves in FIPS mode
+ 23, 1, 3, 19, 21, 6, 7, 9, 10, 24, 11, 12, 25, 13, 14,
+ };
+ }
+ DEFAULT = new EllipticCurvesExtension(ids);
+ }
+
+ private final int[] curveIds;
+
+ private EllipticCurvesExtension(int[] curveIds) {
+ super(ExtensionType.EXT_ELLIPTIC_CURVES);
+ this.curveIds = curveIds;
+ }
+
+ EllipticCurvesExtension(HandshakeInStream s, int len)
+ throws IOException {
+ super(ExtensionType.EXT_ELLIPTIC_CURVES);
+ int k = s.getInt16();
+ if (((len & 1) != 0) || (k + 2 != len)) {
+ throw new SSLProtocolException("Invalid " + type + " extension");
+ }
+ curveIds = new int[k >> 1];
+ for (int i = 0; i < curveIds.length; i++) {
+ curveIds[i] = s.getInt16();
+ }
+ }
+
+ boolean contains(int index) {
+ for (int curveId : curveIds) {
+ if (index == curveId) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // Return a reference to the internal curveIds array.
+ // The caller must NOT modify the contents.
+ int[] curveIds() {
+ return curveIds;
+ }
+
+ @Override
+ int length() {
+ return 6 + (curveIds.length << 1);
+ }
+
+ @Override
+ void send(HandshakeOutStream s) throws IOException {
+ s.putInt16(type.id);
+ int k = curveIds.length << 1;
+ s.putInt16(k + 2);
+ s.putInt16(k);
+ for (int curveId : curveIds) {
+ s.putInt16(curveId);
+ }
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append("Extension " + type + ", curve names: {");
+ boolean first = true;
+ for (int curveId : curveIds) {
+ if (first) {
+ first = false;
+ } else {
+ sb.append(", ");
+ }
+ // first check if it is a known named curve, then try other cases.
+ String oid = getCurveOid(curveId);
+ if (oid != null) {
+ ECParameterSpec spec = JsseJce.getECParameterSpec(oid);
+ // this toString() output will look nice for the current
+ // implementation of the ECParameterSpec class in the Sun
+ // provider, but may not look good for other implementations.
+ if (spec != null) {
+ sb.append(spec.toString().split(" ")[0]);
+ } else {
+ sb.append(oid);
+ }
+ } else if (curveId == ARBITRARY_PRIME) {
+ sb.append("arbitrary_explicit_prime_curves");
+ } else if (curveId == ARBITRARY_CHAR2) {
+ sb.append("arbitrary_explicit_char2_curves");
+ } else {
+ sb.append("unknown curve " + curveId);
+ }
+ }
+ sb.append("}");
+ return sb.toString();
+ }
+
+ // Test whether we support the curve with the given index.
+ static boolean isSupported(int index) {
+ if ((index <= 0) || (index >= NAMED_CURVE_OID_TABLE.length)) {
+ return false;
+ }
+ if (fips == false) {
+ // in non-FIPS mode, we support all valid indices
+ return true;
+ }
+ return DEFAULT.contains(index);
+ }
+
+ static int getCurveIndex(ECParameterSpec params) {
+ String oid = JsseJce.getNamedCurveOid(params);
+ if (oid == null) {
+ return -1;
+ }
+ Integer n = curveIndices.get(oid);
+ return (n == null) ? -1 : n;
+ }
+
+ static String getCurveOid(int index) {
+ if ((index > 0) && (index < NAMED_CURVE_OID_TABLE.length)) {
+ return NAMED_CURVE_OID_TABLE[index];
+ }
+ return null;
+ }
+
+ private static final int ARBITRARY_PRIME = 0xff01;
+ private static final int ARBITRARY_CHAR2 = 0xff02;
+
+ // See sun.security.util.NamedCurve for the OIDs
+ private static final String[] NAMED_CURVE_OID_TABLE = new String[] {
+ null, // (0) unused
+ "1.3.132.0.1", // (1) sect163k1, NIST K-163
+ "1.3.132.0.2", // (2) sect163r1
+ "1.3.132.0.15", // (3) sect163r2, NIST B-163
+ "1.3.132.0.24", // (4) sect193r1
+ "1.3.132.0.25", // (5) sect193r2
+ "1.3.132.0.26", // (6) sect233k1, NIST K-233
+ "1.3.132.0.27", // (7) sect233r1, NIST B-233
+ "1.3.132.0.3", // (8) sect239k1
+ "1.3.132.0.16", // (9) sect283k1, NIST K-283
+ "1.3.132.0.17", // (10) sect283r1, NIST B-283
+ "1.3.132.0.36", // (11) sect409k1, NIST K-409
+ "1.3.132.0.37", // (12) sect409r1, NIST B-409
+ "1.3.132.0.38", // (13) sect571k1, NIST K-571
+ "1.3.132.0.39", // (14) sect571r1, NIST B-571
+ "1.3.132.0.9", // (15) secp160k1
+ "1.3.132.0.8", // (16) secp160r1
+ "1.3.132.0.30", // (17) secp160r2
+ "1.3.132.0.31", // (18) secp192k1
+ "1.2.840.10045.3.1.1", // (19) secp192r1, NIST P-192
+ "1.3.132.0.32", // (20) secp224k1
+ "1.3.132.0.33", // (21) secp224r1, NIST P-224
+ "1.3.132.0.10", // (22) secp256k1
+ "1.2.840.10045.3.1.7", // (23) secp256r1, NIST P-256
+ "1.3.132.0.34", // (24) secp384r1, NIST P-384
+ "1.3.132.0.35", // (25) secp521r1, NIST P-521
+ };
+
+ private static final Map<String,Integer> curveIndices;
+
+ static {
+ curveIndices = new HashMap<String,Integer>();
+ for (int i = 1; i < NAMED_CURVE_OID_TABLE.length; i++) {
+ curveIndices.put(NAMED_CURVE_OID_TABLE[i], i);
+ }
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/EllipticPointFormatsExtension.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.ssl;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.net.ssl.SSLProtocolException;
+
+final class EllipticPointFormatsExtension extends HelloExtension {
+
+ static final int FMT_UNCOMPRESSED = 0;
+ static final int FMT_ANSIX962_COMPRESSED_PRIME = 1;
+ static final int FMT_ANSIX962_COMPRESSED_CHAR2 = 2;
+
+ static final HelloExtension DEFAULT =
+ new EllipticPointFormatsExtension(new byte[] {FMT_UNCOMPRESSED});
+
+ private final byte[] formats;
+
+ private EllipticPointFormatsExtension(byte[] formats) {
+ super(ExtensionType.EXT_EC_POINT_FORMATS);
+ this.formats = formats;
+ }
+
+ EllipticPointFormatsExtension(HandshakeInStream s, int len)
+ throws IOException {
+ super(ExtensionType.EXT_EC_POINT_FORMATS);
+ formats = s.getBytes8();
+ // RFC 4492 says uncompressed points must always be supported.
+ // Check just to make sure.
+ boolean uncompressed = false;
+ for (int format : formats) {
+ if (format == FMT_UNCOMPRESSED) {
+ uncompressed = true;
+ break;
+ }
+ }
+ if (uncompressed == false) {
+ throw new SSLProtocolException
+ ("Peer does not support uncompressed points");
+ }
+ }
+
+ @Override
+ int length() {
+ return 5 + formats.length;
+ }
+
+ @Override
+ void send(HandshakeOutStream s) throws IOException {
+ s.putInt16(type.id);
+ s.putInt16(formats.length + 1);
+ s.putBytes8(formats);
+ }
+
+ private static String toString(byte format) {
+ int f = format & 0xff;
+ switch (f) {
+ case FMT_UNCOMPRESSED:
+ return "uncompressed";
+ case FMT_ANSIX962_COMPRESSED_PRIME:
+ return "ansiX962_compressed_prime";
+ case FMT_ANSIX962_COMPRESSED_CHAR2:
+ return "ansiX962_compressed_char2";
+ default:
+ return "unknown-" + f;
+ }
+ }
+
+ @Override
+ public String toString() {
+ List<String> list = new ArrayList<String>();
+ for (byte format : formats) {
+ list.add(toString(format));
+ }
+ return "Extension " + type + ", formats: " + list;
+ }
+}
--- a/jdk/src/java.base/share/classes/sun/security/ssl/HandshakeMessage.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/HandshakeMessage.java Mon May 09 08:50:20 2016 -0700
@@ -314,8 +314,8 @@
}
if (cipherSuites.containsEC()) {
- extensions.add(SupportedEllipticCurvesExtension.DEFAULT);
- extensions.add(SupportedEllipticPointFormatsExtension.DEFAULT);
+ extensions.add(EllipticCurvesExtension.DEFAULT);
+ extensions.add(EllipticPointFormatsExtension.DEFAULT);
}
clnt_random = new RandomCookie(generator);
@@ -1401,7 +1401,7 @@
ECParameterSpec params = publicKey.getParams();
ECPoint point = publicKey.getW();
pointBytes = JsseJce.encodePoint(point, params.getCurve());
- curveId = SupportedEllipticCurvesExtension.getCurveIndex(params);
+ curveId = EllipticCurvesExtension.getCurveIndex(params);
if (privateKey == null) {
// ECDH_anon
@@ -1439,13 +1439,11 @@
// the supported curves during the exchange of the Hello messages.
if (curveType == CURVE_NAMED_CURVE) {
curveId = input.getInt16();
- if (SupportedEllipticCurvesExtension.isSupported(curveId)
- == false) {
+ if (!EllipticCurvesExtension.isSupported(curveId)) {
throw new SSLHandshakeException(
"Unsupported curveId: " + curveId);
}
- String curveOid =
- SupportedEllipticCurvesExtension.getCurveOid(curveId);
+ String curveOid = EllipticCurvesExtension.getCurveOid(curveId);
if (curveOid == null) {
throw new SSLHandshakeException(
"Unknown named curve: " + curveId);
--- a/jdk/src/java.base/share/classes/sun/security/ssl/HelloExtensions.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/HelloExtensions.java Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -49,8 +49,8 @@
* explicitly support.
* . ServerNameExtension: the server_name extension.
* . SignatureAlgorithmsExtension: the signature_algorithms extension.
- * . SupportedEllipticCurvesExtension: the ECC supported curves extension.
- * . SupportedEllipticPointFormatsExtension: the ECC supported point formats
+ * . EllipticCurvesExtension: the ECC supported curves extension.
+ * . EllipticPointFormatsExtension: the ECC supported point formats
* (compressed/uncompressed) extension.
* . ALPNExtension: the application_layer_protocol_negotiation extension.
*
@@ -80,10 +80,9 @@
} else if (extType == ExtensionType.EXT_SIGNATURE_ALGORITHMS) {
extension = new SignatureAlgorithmsExtension(s, extlen);
} else if (extType == ExtensionType.EXT_ELLIPTIC_CURVES) {
- extension = new SupportedEllipticCurvesExtension(s, extlen);
+ extension = new EllipticCurvesExtension(s, extlen);
} else if (extType == ExtensionType.EXT_EC_POINT_FORMATS) {
- extension =
- new SupportedEllipticPointFormatsExtension(s, extlen);
+ extension = new EllipticPointFormatsExtension(s, extlen);
} else if (extType == ExtensionType.EXT_RENEGOTIATION_INFO) {
extension = new RenegotiationInfoExtension(s, extlen);
} else if (extType == ExtensionType.EXT_ALPN) {
--- a/jdk/src/java.base/share/classes/sun/security/ssl/ServerHandshaker.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/sun/security/ssl/ServerHandshaker.java Mon May 09 08:50:20 2016 -0700
@@ -94,7 +94,7 @@
// we remember it for the RSA premaster secret version check
private ProtocolVersion clientRequestedVersion;
- private SupportedEllipticCurvesExtension supportedCurves;
+ private EllipticCurvesExtension supportedCurves;
// the preferable signature algorithm used by ServerKeyExchange message
SignatureAndHashAlgorithm preferableSignatureAlgorithm;
@@ -741,7 +741,7 @@
throw new SSLException("Client did not resume a session");
}
- supportedCurves = (SupportedEllipticCurvesExtension)
+ supportedCurves = (EllipticCurvesExtension)
mesg.extensions.get(ExtensionType.EXT_ELLIPTIC_CURVES);
// We only need to handle the "signature_algorithm" extension
@@ -1577,7 +1577,7 @@
// if the client sent the supported curves extension, pick the
// first one that we support;
for (int curveId : supportedCurves.curveIds()) {
- if (SupportedEllipticCurvesExtension.isSupported(curveId)) {
+ if (EllipticCurvesExtension.isSupported(curveId)) {
index = curveId;
break;
}
@@ -1588,9 +1588,9 @@
}
} else {
// pick our preference
- index = SupportedEllipticCurvesExtension.DEFAULT.curveIds()[0];
+ index = EllipticCurvesExtension.DEFAULT.curveIds()[0];
}
- String oid = SupportedEllipticCurvesExtension.getCurveOid(index);
+ String oid = EllipticCurvesExtension.getCurveOid(index);
ecdh = new ECDHCrypt(oid, sslContext.getSecureRandom());
return true;
}
@@ -1633,15 +1633,15 @@
return false;
}
// For ECC certs, check whether we support the EC domain parameters.
- // If the client sent a SupportedEllipticCurves ClientHello extension,
+ // If the client sent a EllipticCurves ClientHello extension,
// check against that too.
if (keyAlgorithm.equals("EC")) {
if (publicKey instanceof ECPublicKey == false) {
return false;
}
ECParameterSpec params = ((ECPublicKey)publicKey).getParams();
- int index = SupportedEllipticCurvesExtension.getCurveIndex(params);
- if (SupportedEllipticCurvesExtension.isSupported(index) == false) {
+ int index = EllipticCurvesExtension.getCurveIndex(params);
+ if (!EllipticCurvesExtension.isSupported(index)) {
return false;
}
if ((supportedCurves != null) && !supportedCurves.contains(index)) {
--- a/jdk/src/java.base/share/classes/sun/security/ssl/SupportedEllipticCurvesExtension.java Mon May 09 12:55:03 2016 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,218 +0,0 @@
-/*
- * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.security.ssl;
-
-import java.io.IOException;
-import java.security.spec.ECParameterSpec;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.net.ssl.SSLProtocolException;
-
-final class SupportedEllipticCurvesExtension extends HelloExtension {
-
- // the extension value to send in the ClientHello message
- static final SupportedEllipticCurvesExtension DEFAULT;
-
- private static final boolean fips;
-
- static {
- int[] ids;
- fips = SunJSSE.isFIPS();
- if (fips == false) {
- ids = new int[] {
- // NIST curves first
- // prefer NIST P-256, rest in order of increasing key length
- 23, 1, 3, 19, 21, 6, 7, 9, 10, 24, 11, 12, 25, 13, 14,
- // non-NIST curves
- 15, 16, 17, 2, 18, 4, 5, 20, 8, 22,
- };
- } else {
- ids = new int[] {
- // same as above, but allow only NIST curves in FIPS mode
- 23, 1, 3, 19, 21, 6, 7, 9, 10, 24, 11, 12, 25, 13, 14,
- };
- }
- DEFAULT = new SupportedEllipticCurvesExtension(ids);
- }
-
- private final int[] curveIds;
-
- private SupportedEllipticCurvesExtension(int[] curveIds) {
- super(ExtensionType.EXT_ELLIPTIC_CURVES);
- this.curveIds = curveIds;
- }
-
- SupportedEllipticCurvesExtension(HandshakeInStream s, int len)
- throws IOException {
- super(ExtensionType.EXT_ELLIPTIC_CURVES);
- int k = s.getInt16();
- if (((len & 1) != 0) || (k + 2 != len)) {
- throw new SSLProtocolException("Invalid " + type + " extension");
- }
- curveIds = new int[k >> 1];
- for (int i = 0; i < curveIds.length; i++) {
- curveIds[i] = s.getInt16();
- }
- }
-
- boolean contains(int index) {
- for (int curveId : curveIds) {
- if (index == curveId) {
- return true;
- }
- }
- return false;
- }
-
- // Return a reference to the internal curveIds array.
- // The caller must NOT modify the contents.
- int[] curveIds() {
- return curveIds;
- }
-
- @Override
- int length() {
- return 6 + (curveIds.length << 1);
- }
-
- @Override
- void send(HandshakeOutStream s) throws IOException {
- s.putInt16(type.id);
- int k = curveIds.length << 1;
- s.putInt16(k + 2);
- s.putInt16(k);
- for (int curveId : curveIds) {
- s.putInt16(curveId);
- }
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- sb.append("Extension " + type + ", curve names: {");
- boolean first = true;
- for (int curveId : curveIds) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- // first check if it is a known named curve, then try other cases.
- String oid = getCurveOid(curveId);
- if (oid != null) {
- ECParameterSpec spec = JsseJce.getECParameterSpec(oid);
- // this toString() output will look nice for the current
- // implementation of the ECParameterSpec class in the Sun
- // provider, but may not look good for other implementations.
- if (spec != null) {
- sb.append(spec.toString().split(" ")[0]);
- } else {
- sb.append(oid);
- }
- } else if (curveId == ARBITRARY_PRIME) {
- sb.append("arbitrary_explicit_prime_curves");
- } else if (curveId == ARBITRARY_CHAR2) {
- sb.append("arbitrary_explicit_char2_curves");
- } else {
- sb.append("unknown curve " + curveId);
- }
- }
- sb.append("}");
- return sb.toString();
- }
-
- // Test whether we support the curve with the given index.
- static boolean isSupported(int index) {
- if ((index <= 0) || (index >= NAMED_CURVE_OID_TABLE.length)) {
- return false;
- }
- if (fips == false) {
- // in non-FIPS mode, we support all valid indices
- return true;
- }
- return DEFAULT.contains(index);
- }
-
- static int getCurveIndex(ECParameterSpec params) {
- String oid = JsseJce.getNamedCurveOid(params);
- if (oid == null) {
- return -1;
- }
- Integer n = curveIndices.get(oid);
- return (n == null) ? -1 : n;
- }
-
- static String getCurveOid(int index) {
- if ((index > 0) && (index < NAMED_CURVE_OID_TABLE.length)) {
- return NAMED_CURVE_OID_TABLE[index];
- }
- return null;
- }
-
- private static final int ARBITRARY_PRIME = 0xff01;
- private static final int ARBITRARY_CHAR2 = 0xff02;
-
- // See sun.security.util.NamedCurve for the OIDs
- private static final String[] NAMED_CURVE_OID_TABLE = new String[] {
- null, // (0) unused
- "1.3.132.0.1", // (1) sect163k1, NIST K-163
- "1.3.132.0.2", // (2) sect163r1
- "1.3.132.0.15", // (3) sect163r2, NIST B-163
- "1.3.132.0.24", // (4) sect193r1
- "1.3.132.0.25", // (5) sect193r2
- "1.3.132.0.26", // (6) sect233k1, NIST K-233
- "1.3.132.0.27", // (7) sect233r1, NIST B-233
- "1.3.132.0.3", // (8) sect239k1
- "1.3.132.0.16", // (9) sect283k1, NIST K-283
- "1.3.132.0.17", // (10) sect283r1, NIST B-283
- "1.3.132.0.36", // (11) sect409k1, NIST K-409
- "1.3.132.0.37", // (12) sect409r1, NIST B-409
- "1.3.132.0.38", // (13) sect571k1, NIST K-571
- "1.3.132.0.39", // (14) sect571r1, NIST B-571
- "1.3.132.0.9", // (15) secp160k1
- "1.3.132.0.8", // (16) secp160r1
- "1.3.132.0.30", // (17) secp160r2
- "1.3.132.0.31", // (18) secp192k1
- "1.2.840.10045.3.1.1", // (19) secp192r1, NIST P-192
- "1.3.132.0.32", // (20) secp224k1
- "1.3.132.0.33", // (21) secp224r1, NIST P-224
- "1.3.132.0.10", // (22) secp256k1
- "1.2.840.10045.3.1.7", // (23) secp256r1, NIST P-256
- "1.3.132.0.34", // (24) secp384r1, NIST P-384
- "1.3.132.0.35", // (25) secp521r1, NIST P-521
- };
-
- private static final Map<String,Integer> curveIndices;
-
- static {
- curveIndices = new HashMap<String,Integer>();
- for (int i = 1; i < NAMED_CURVE_OID_TABLE.length; i++) {
- curveIndices.put(NAMED_CURVE_OID_TABLE[i], i);
- }
- }
-
-}
--- a/jdk/src/java.base/share/classes/sun/security/ssl/SupportedEllipticPointFormatsExtension.java Mon May 09 12:55:03 2016 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,104 +0,0 @@
-/*
- * Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation. Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.security.ssl;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.net.ssl.SSLProtocolException;
-
-final class SupportedEllipticPointFormatsExtension extends HelloExtension {
-
- static final int FMT_UNCOMPRESSED = 0;
- static final int FMT_ANSIX962_COMPRESSED_PRIME = 1;
- static final int FMT_ANSIX962_COMPRESSED_CHAR2 = 2;
-
- static final HelloExtension DEFAULT =
- new SupportedEllipticPointFormatsExtension(
- new byte[] {FMT_UNCOMPRESSED});
-
- private final byte[] formats;
-
- private SupportedEllipticPointFormatsExtension(byte[] formats) {
- super(ExtensionType.EXT_EC_POINT_FORMATS);
- this.formats = formats;
- }
-
- SupportedEllipticPointFormatsExtension(HandshakeInStream s, int len)
- throws IOException {
- super(ExtensionType.EXT_EC_POINT_FORMATS);
- formats = s.getBytes8();
- // RFC 4492 says uncompressed points must always be supported.
- // Check just to make sure.
- boolean uncompressed = false;
- for (int format : formats) {
- if (format == FMT_UNCOMPRESSED) {
- uncompressed = true;
- break;
- }
- }
- if (uncompressed == false) {
- throw new SSLProtocolException
- ("Peer does not support uncompressed points");
- }
- }
-
- @Override
- int length() {
- return 5 + formats.length;
- }
-
- @Override
- void send(HandshakeOutStream s) throws IOException {
- s.putInt16(type.id);
- s.putInt16(formats.length + 1);
- s.putBytes8(formats);
- }
-
- private static String toString(byte format) {
- int f = format & 0xff;
- switch (f) {
- case FMT_UNCOMPRESSED:
- return "uncompressed";
- case FMT_ANSIX962_COMPRESSED_PRIME:
- return "ansiX962_compressed_prime";
- case FMT_ANSIX962_COMPRESSED_CHAR2:
- return "ansiX962_compressed_char2";
- default:
- return "unknown-" + f;
- }
- }
-
- @Override
- public String toString() {
- List<String> list = new ArrayList<String>();
- for (byte format : formats) {
- list.add(toString(format));
- }
- return "Extension " + type + ", formats: " + list;
- }
-}
--- a/jdk/src/java.base/share/classes/sun/security/util/Debug.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/classes/sun/security/util/Debug.java Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -87,6 +87,7 @@
System.err.println("pkcs12 PKCS12 KeyStore debugging");
System.err.println("sunpkcs11 SunPKCS11 provider debugging");
System.err.println("scl permissions SecureClassLoader assigns");
+ System.err.println("securerandom SecureRandom");
System.err.println("ts timestamping");
System.err.println();
System.err.println("The following can be used with access:");
@@ -175,6 +176,16 @@
}
/**
+ * print a message to stderr that is prefixed with the prefix
+ * created from the call to getInstance and obj.
+ */
+ public void println(Object obj, String message)
+ {
+ System.err.println(prefix + " [" + obj.getClass().getSimpleName() +
+ "@" + System.identityHashCode(obj) + "]: "+message);
+ }
+
+ /**
* print a blank line to stderr that is prefixed with the prefix.
*/
--- a/jdk/src/java.base/share/conf/security/java.policy Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/conf/security/java.policy Mon May 09 08:50:20 2016 -0700
@@ -8,6 +8,19 @@
permission java.security.AllPermission;
};
+grant codeBase "jrt:/java.compiler" {
+ permission java.security.AllPermission;
+};
+
+grant codeBase "jrt:/jdk.charsets" {
+ permission java.io.FilePermission "${java.home}/-", "read";
+ permission java.util.PropertyPermission "os.name", "read";
+ permission java.util.PropertyPermission "sun.nio.cs.map", "read";
+ permission java.lang.RuntimePermission "charsetProvider";
+ permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.misc";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.cs";
+};
+
grant codeBase "jrt:/jdk.crypto.ucrypto" {
permission java.lang.RuntimePermission "accessClassInPackage.sun.security.*";
permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.ch";
--- a/jdk/src/java.base/share/conf/security/java.security Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/share/conf/security/java.security Mon May 09 08:50:20 2016 -0700
@@ -120,30 +120,30 @@
#
# Sun Provider SecureRandom seed source.
#
-# Select the primary source of seed data for the "SHA1PRNG" and
-# "NativePRNG" SecureRandom implementations in the "Sun" provider.
+# Select the primary source of seed data for the "NativePRNG", "SHA1PRNG"
+# and "DRBG" SecureRandom implementations in the "Sun" provider.
# (Other SecureRandom implementations might also use this property.)
#
# On Unix-like systems (for example, Solaris/Linux/MacOS), the
-# "NativePRNG" and "SHA1PRNG" implementations obtains seed data from
+# "NativePRNG", "SHA1PRNG" and "DRBG" implementations obtains seed data from
# special device files such as file:/dev/random.
#
# On Windows systems, specifying the URLs "file:/dev/random" or
# "file:/dev/urandom" will enable the native Microsoft CryptoAPI seeding
-# mechanism for SHA1PRNG.
+# mechanism for SHA1PRNG and DRBG.
#
# By default, an attempt is made to use the entropy gathering device
# specified by the "securerandom.source" Security property. If an
# exception occurs while accessing the specified URL:
#
-# SHA1PRNG:
-# the traditional system/thread activity algorithm will be used.
-#
# NativePRNG:
# a default value of /dev/random will be used. If neither
# are available, the implementation will be disabled.
# "file" is the only currently supported protocol type.
#
+# SHA1PRNG and DRBG:
+# the traditional system/thread activity algorithm will be used.
+#
# The entropy gathering device can also be specified with the System
# property "java.security.egd". For example:
#
@@ -154,7 +154,7 @@
#
# In addition, if "file:/dev/random" or "file:/dev/urandom" is
# specified, the "NativePRNG" implementation will be more preferred than
-# SHA1PRNG in the Sun provider.
+# DRBG and SHA1PRNG in the Sun provider.
#
securerandom.source=file:/dev/random
@@ -169,13 +169,79 @@
# entries.
#
#ifdef windows
-securerandom.strongAlgorithms=Windows-PRNG:SunMSCAPI,SHA1PRNG:SUN
+securerandom.strongAlgorithms=Windows-PRNG:SunMSCAPI,DRBG:SUN
#endif
#ifndef windows
-securerandom.strongAlgorithms=NativePRNGBlocking:SUN
+securerandom.strongAlgorithms=NativePRNGBlocking:SUN,DRBG:SUN
#endif
#
+# Sun provider DRBG configuration and default instantiation request.
+#
+# NIST SP 800-90Ar1 lists several DRBG mechanisms. Each can be configured
+# with a DRBG algorithm name, and can be instantiated with a security strength,
+# prediction resistance support, etc. This property defines the configuration
+# and the default instantiation request of "DRBG" SecureRandom implementations
+# in the SUN provider. (Other DRBG implementations can also use this property.)
+# Applications can request different instantiation parameters like security
+# strength, capability, personalization string using one of the
+# getInstance(...,SecureRandomParameters,...) methods with a
+# DrbgParameters.Instantiation argument, but other settings such as the
+# mechanism and DRBG algorithm names are not currently configurable by any API.
+#
+# Please note that the SUN implementation of DRBG always supports reseeding.
+#
+# The value of this property is a comma-separated list of all configurable
+# aspects. The aspects can appear in any order but the same aspect can only
+# appear at most once. Its BNF-style definition is:
+#
+# Value:
+# aspect { "," aspect }
+#
+# aspect:
+# mech_name | algorithm_name | strength | capability | df
+#
+# // The DRBG mechanism to use. Default "Hash_DRBG"
+# mech_name:
+# "Hash_DRBG" | "HMAC_DRBG" | "CTR_DRBG"
+#
+# // The DRBG algorithm name. The "SHA-***" names are for Hash_DRBG and
+# // HMAC_DRBG, default "SHA-256". "3KeyTDEA" and "AES-***" names are for
+# // CTR_DRBG, default "AES-128" when using the limited cryptographic
+# // or "AES-256" when using the unlimited.
+# algorithm_name:
+# "SHA-1" | "SHA-224" | "SHA-512/224" | "SHA-256" |
+# "SHA-512/256" | "SHA-384" | "SHA-512" |
+# "3KeyTDEA" | "AES-128" | "AES-192" | "AES-256"
+#
+# // Security strength requested. Default "128", or "112"
+# // if mech_name is CTR_DRBG and algorithm_name is "3KeyTDEA"
+# strength:
+# "112" | "128" | "192" | "256"
+#
+# // Prediction resistance and reseeding request. Default "none"
+# // "pr_and_reseed" - Both prediction resistance and reseeding
+# // support requested
+# // "reseed_only" - Only reseeding support requested
+# // "none" - Neither prediction resistance not reseeding
+# // support requested
+# pr:
+# "pr_and_reseed" | "reseed_only" | "none"
+#
+# // Whether a derivation function should be used. only applicable
+# // to CTR_DRBG. Default "use_df"
+# df:
+# "use_df" | "no_df"
+#
+# Examples,
+# securerandom.drbg.config=Hash_DRBG,SHA-1,112,none
+# securerandom.drbg.config=CTR_DRBG,AES-256,192,pr_and_reseed,use_df
+#
+# The default value is an empty string, which is equivalent to
+# securerandom.drbg.config=Hash_DRBG,SHA-256,128,none
+securerandom.drbg.config=
+
+#
# Class to instantiate as the javax.security.auth.login.Configuration
# provider.
#
--- a/jdk/src/java.base/solaris/native/libnio/ch/DevPollArrayWrapper.c Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.base/solaris/native/libnio/ch/DevPollArrayWrapper.c Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -94,6 +94,7 @@
return 0;
}
start = now;
+ a.dp_timeout = remaining;
}
} else {
return res;
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibility.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibility.java Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,12 +25,15 @@
package sun.lwawt.macosx;
+import sun.lwawt.LWWindowPeer;
+
import java.awt.*;
import java.beans.*;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.*;
import java.util.concurrent.Callable;
+import sun.awt.AWTAccessor;
import javax.accessibility.*;
import javax.swing.*;
@@ -421,6 +424,8 @@
}
public static AccessibleAction getAccessibleAction(final Accessible a, final Component c) {
+ if (a == null) return null;
+
return invokeAndWait(new Callable<AccessibleAction>() {
public AccessibleAction call() throws Exception {
final AccessibleContext ac = a.getAccessibleContext();
@@ -667,4 +672,28 @@
}
}, c);
}
+
+ /**
+ * @return AWTView ptr, a peer of the CPlatformView associated with the toplevel container of the Accessible, if any
+ */
+ private static long getAWTView(Accessible a) {
+ Accessible ax = CAccessible.getSwingAccessible(a);
+ if (!(ax instanceof Component)) return 0;
+
+ return invokeAndWait(new Callable<Long>() {
+ public Long call() throws Exception {
+ Component cont = (Component) ax;
+ while (cont != null && !(cont instanceof Window)) {
+ cont = cont.getParent();
+ }
+ if (cont != null) {
+ LWWindowPeer peer = (LWWindowPeer) AWTAccessor.getComponentAccessor().getPeer(cont);
+ if (peer != null) {
+ return ((CPlatformWindow) peer.getPlatformWindow()).getContentView().getAWTView();
+ }
+ }
+ return 0L;
+ }
+ }, (Component)ax);
+ }
}
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibleText.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CAccessibleText.java Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -264,6 +264,8 @@
final double localY = boundsUnion.getY();
final Point componentLocation = ac.getAccessibleComponent().getLocationOnScreen();
+ if (componentLocation == null) return ret;
+
final double screenX = componentLocation.getX() + localX;
final double screenY = componentLocation.getY() + localY;
--- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.h Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.h Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -62,6 +62,8 @@
- (void) deliverJavaMouseEvent: (NSEvent *) event;
- (jobject) awtComponent:(JNIEnv *)env;
++ (AWTView *) awtView:(JNIEnv *)env ofAccessible:(jobject)jaccessible;
+
// Input method-related events
- (void)setInputMethod:(jobject)inputMethod;
- (void)abandonInput;
--- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.m Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTView.m Mon May 09 08:50:20 2016 -0700
@@ -29,6 +29,7 @@
#import "AWTWindow.h"
#import "JavaComponentAccessibility.h"
#import "JavaTextAccessibility.h"
+#import "JavaAccessibilityUtilities.h"
#import "GeomUtilities.h"
#import "OSVersion.h"
#import "ThreadUtilities.h"
@@ -129,7 +130,7 @@
self.cglLayer = nil;
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
- (*env)->DeleteGlobalRef(env, m_cPlatformView);
+ (*env)->DeleteWeakGlobalRef(env, m_cPlatformView);
m_cPlatformView = NULL;
if (fInputMethodLOCKABLE != NULL)
@@ -396,7 +397,11 @@
static JNF_CLASS_CACHE(jc_PlatformView, "sun/lwawt/macosx/CPlatformView");
static JNF_MEMBER_CACHE(jm_deliverMouseEvent, jc_PlatformView, "deliverMouseEvent", "(Lsun/lwawt/macosx/NSEvent;)V");
- JNFCallVoidMethod(env, m_cPlatformView, jm_deliverMouseEvent, jEvent);
+ jobject jlocal = (*env)->NewLocalRef(env, m_cPlatformView);
+ if (!(*env)->IsSameObject(env, jlocal, NULL)) {
+ JNFCallVoidMethod(env, jlocal, jm_deliverMouseEvent, jEvent);
+ (*env)->DeleteLocalRef(env, jlocal);
+ }
(*env)->DeleteLocalRef(env, jEvent);
}
@@ -459,8 +464,11 @@
static JNF_CLASS_CACHE(jc_PlatformView, "sun/lwawt/macosx/CPlatformView");
static JNF_MEMBER_CACHE(jm_deliverKeyEvent, jc_PlatformView,
"deliverKeyEvent", "(Lsun/lwawt/macosx/NSEvent;)V");
- JNFCallVoidMethod(env, m_cPlatformView, jm_deliverKeyEvent, jEvent);
-
+ jobject jlocal = (*env)->NewLocalRef(env, m_cPlatformView);
+ if (!(*env)->IsSameObject(env, jlocal, NULL)) {
+ JNFCallVoidMethod(env, jlocal, jm_deliverKeyEvent, jEvent);
+ (*env)->DeleteLocalRef(env, jlocal);
+ }
if (characters != NULL) {
(*env)->DeleteLocalRef(env, characters);
}
@@ -475,7 +483,12 @@
JNIEnv *env = [ThreadUtilities getJNIEnv];
static JNF_CLASS_CACHE(jc_PlatformView, "sun/lwawt/macosx/CPlatformView");
static JNF_MEMBER_CACHE(jm_deliverResize, jc_PlatformView, "deliverResize", "(IIII)V");
- JNFCallVoidMethod(env, m_cPlatformView, jm_deliverResize, x,y,w,h);
+
+ jobject jlocal = (*env)->NewLocalRef(env, m_cPlatformView);
+ if (!(*env)->IsSameObject(env, jlocal, NULL)) {
+ JNFCallVoidMethod(env, jlocal, jm_deliverResize, x,y,w,h);
+ (*env)->DeleteLocalRef(env, jlocal);
+ }
}
@@ -504,7 +517,11 @@
*/
static JNF_CLASS_CACHE(jc_CPlatformView, "sun/lwawt/macosx/CPlatformView");
static JNF_MEMBER_CACHE(jm_deliverWindowDidExposeEvent, jc_CPlatformView, "deliverWindowDidExposeEvent", "()V");
- JNFCallVoidMethod(env, m_cPlatformView, jm_deliverWindowDidExposeEvent);
+ jobject jlocal = (*env)->NewLocalRef(env, m_cPlatformView);
+ if (!(*env)->IsSameObject(env, jlocal, NULL)) {
+ JNFCallVoidMethod(env, jlocal, jm_deliverWindowDidExposeEvent);
+ (*env)->DeleteLocalRef(env, jlocal);
+ }
/*
}
*/
@@ -541,7 +558,13 @@
}
return NULL;
}
- jobject peer = JNFGetObjectField(env, m_cPlatformView, jf_Peer);
+
+ jobject peer = NULL;
+ jobject jlocal = (*env)->NewLocalRef(env, m_cPlatformView);
+ if (!(*env)->IsSameObject(env, jlocal, NULL)) {
+ peer = JNFGetObjectField(env, jlocal, jf_Peer);
+ (*env)->DeleteLocalRef(env, jlocal);
+ }
static JNF_CLASS_CACHE(jc_LWWindowPeer, "sun/lwawt/LWWindowPeer");
static JNF_MEMBER_CACHE(jf_Target, jc_LWWindowPeer, "target", "Ljava/awt/Component;");
if (peer == NULL) {
@@ -549,12 +572,27 @@
JNFDumpJavaStack(env);
return NULL;
}
- return JNFGetObjectField(env, peer, jf_Target);
+ jobject comp = JNFGetObjectField(env, peer, jf_Target);
+ (*env)->DeleteLocalRef(env, peer);
+ return comp;
+}
+
++ (AWTView *) awtView:(JNIEnv*)env ofAccessible:(jobject)jaccessible
+{
+ static JNF_STATIC_MEMBER_CACHE(jm_getAWTView, sjc_CAccessibility, "getAWTView", "(Ljavax/accessibility/Accessible;)J");
+
+ jlong jptr = JNFCallStaticLongMethod(env, jm_getAWTView, jaccessible);
+ if (jptr == 0) return nil;
+
+ return (AWTView *)jlong_to_ptr(jptr);
}
- (id)getAxData:(JNIEnv*)env
{
- return [[[JavaComponentAccessibility alloc] initWithParent:self withEnv:env withAccessible:[self awtComponent:env] withIndex:-1 withView:self withJavaRole:nil] autorelease];
+ jobject jcomponent = [self awtComponent:env];
+ id ax = [[[JavaComponentAccessibility alloc] initWithParent:self withEnv:env withAccessible:jcomponent withIndex:-1 withView:self withJavaRole:nil] autorelease];
+ (*env)->DeleteLocalRef(env, jcomponent);
+ return ax;
}
- (NSArray *)accessibilityAttributeNames
@@ -1299,7 +1337,7 @@
JNF_COCOA_ENTER(env);
NSRect rect = NSMakeRect(originX, originY, width, height);
- jobject cPlatformView = (*env)->NewGlobalRef(env, obj);
+ jobject cPlatformView = (*env)->NewWeakGlobalRef(env, obj);
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
--- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaAccessibilityAction.m Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaAccessibilityAction.m Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -35,9 +35,9 @@
{
self = [super init];
if (self) {
- fAccessibleAction = JNFNewGlobalRef(env, accessibleAction);
+ fAccessibleAction = JNFNewWeakGlobalRef(env, accessibleAction);
fIndex = index;
- fComponent = JNFNewGlobalRef(env, component);
+ fComponent = JNFNewWeakGlobalRef(env, component);
}
return self;
}
@@ -46,10 +46,10 @@
{
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
- JNFDeleteGlobalRef(env, fAccessibleAction);
+ JNFDeleteWeakGlobalRef(env, fAccessibleAction);
fAccessibleAction = NULL;
- JNFDeleteGlobalRef(env, fComponent);
+ JNFDeleteWeakGlobalRef(env, fComponent);
fComponent = NULL;
[super dealloc];
@@ -61,7 +61,18 @@
JNIEnv* env = [ThreadUtilities getJNIEnv];
- return JNFJavaToNSString(env, JNFCallStaticObjectMethod(env, jm_getAccessibleActionDescription, fAccessibleAction, fIndex, fComponent)); // AWT_THREADING Safe (AWTRunLoopMode)
+ jobject fCompLocal = (*env)->NewLocalRef(env, fComponent);
+ if ((*env)->IsSameObject(env, fCompLocal, NULL)) {
+ return @"unknown";
+ }
+ NSString *str = nil;
+ jobject jstr = JNFCallStaticObjectMethod(env, jm_getAccessibleActionDescription, fAccessibleAction, fIndex, fCompLocal);
+ if (jstr != NULL) {
+ NSString *str = JNFJavaToNSString(env, jstr); // AWT_THREADING Safe (AWTRunLoopMode)
+ (*env)->DeleteLocalRef(env, jstr);
+ }
+ (*env)->DeleteLocalRef(env, fCompLocal);
+ return str == nil ? @"unknown" : str;
}
- (void)perform
@@ -82,9 +93,9 @@
{
self = [super init];
if (self) {
- fTabGroup = JNFNewGlobalRef(env, tabGroup);
+ fTabGroup = JNFNewWeakGlobalRef(env, tabGroup);
fIndex = index;
- fComponent = JNFNewGlobalRef(env, component);
+ fComponent = JNFNewWeakGlobalRef(env, component);
}
return self;
}
@@ -93,10 +104,10 @@
{
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
- JNFDeleteGlobalRef(env, fTabGroup);
+ JNFDeleteWeakGlobalRef(env, fTabGroup);
fTabGroup = NULL;
- JNFDeleteGlobalRef(env, fComponent);
+ JNFDeleteWeakGlobalRef(env, fComponent);
fComponent = NULL;
[super dealloc];
--- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaAccessibilityUtilities.m Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaAccessibilityUtilities.m Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -77,7 +77,9 @@
jobject axRole = JNFCallStaticObjectMethod(env, sjm_getAccessibleRole, axComponent, component); // AWT_THREADING Safe (AWTRunLoopMode)
if (axRole == NULL) return @"unknown";
- return JNFJavaToNSString(env, axRole);
+ NSString* str = JNFJavaToNSString(env, axRole);
+ (*env)->DeleteLocalRef(env, axRole);
+ return str;
}
jobject getAxSelection(JNIEnv *env, jobject axContext, jobject component)
@@ -126,21 +128,27 @@
{
static JNF_STATIC_MEMBER_CACHE(jm_VERTICAL, sjc_AccessibleState, "VERTICAL", "Ljavax/accessibility/AccessibleState;");
jobject axVertState = JNFGetStaticObjectField(env, jm_VERTICAL);
- return containsAxState(env, axContext, axVertState, component);
+ BOOL vertical = containsAxState(env, axContext, axVertState, component);
+ (*env)->DeleteLocalRef(env, axVertState);
+ return vertical;
}
BOOL isHorizontal(JNIEnv *env, jobject axContext, jobject component)
{
static JNF_STATIC_MEMBER_CACHE(jm_HORIZONTAL, sjc_AccessibleState, "HORIZONTAL", "Ljavax/accessibility/AccessibleState;");
jobject axHorizState = JNFGetStaticObjectField(env, jm_HORIZONTAL);
- return containsAxState(env, axContext, axHorizState, component);
+ BOOL horizontal = containsAxState(env, axContext, axHorizState, component);
+ (*env)->DeleteLocalRef(env, axHorizState);
+ return horizontal;
}
BOOL isShowing(JNIEnv *env, jobject axContext, jobject component)
{
static JNF_STATIC_MEMBER_CACHE(jm_SHOWING, sjc_AccessibleState, "SHOWING", "Ljavax/accessibility/AccessibleState;");
jobject axVisibleState = JNFGetStaticObjectField(env, jm_SHOWING);
- return containsAxState(env, axContext, axVisibleState, component);
+ BOOL showing = containsAxState(env, axContext, axVisibleState, component);
+ (*env)->DeleteLocalRef(env, axVisibleState);
+ return showing;
}
NSPoint getAxComponentLocationOnScreen(JNIEnv *env, jobject axComponent, jobject component)
--- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaComponentAccessibility.m Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaComponentAccessibility.m Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -75,7 +75,6 @@
static NSMutableDictionary *sAttributeNamesForRoleCache = nil;
static NSObject *sAttributeNamesLOCK = nil;
-
@interface TabGroupAccessibility : JavaComponentAccessibility {
NSInteger _numTabs;
}
@@ -137,8 +136,11 @@
fView = [view retain];
fJavaRole = [javaRole retain];
- fAccessible = JNFNewGlobalRef(env, accessible);
- fComponent = JNFNewGlobalRef(env, [(AWTView *)fView awtComponent:env]);
+ fAccessible = (*env)->NewWeakGlobalRef(env, accessible);
+
+ jobject jcomponent = [(AWTView *)fView awtComponent:env];
+ fComponent = (*env)->NewWeakGlobalRef(env, jcomponent);
+ (*env)->DeleteLocalRef(env, jcomponent);
fIndex = index;
@@ -166,10 +168,10 @@
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
- JNFDeleteGlobalRef(env, fAccessible);
+ (*env)->DeleteWeakGlobalRef(env, fAccessible);
fAccessible = NULL;
- JNFDeleteGlobalRef(env, fComponent);
+ (*env)->DeleteWeakGlobalRef(env, fComponent);
fComponent = NULL;
[fParent release];
@@ -279,7 +281,7 @@
+ (NSArray *)childrenOfParent:(JavaComponentAccessibility *)parent withEnv:(JNIEnv *)env withChildrenCode:(NSInteger)whichChildren allowIgnored:(BOOL)allowIgnored
{
- jobjectArray jchildrenAndRoles = JNFCallStaticObjectMethod(env, jm_getChildrenAndRoles, parent->fAccessible, parent->fComponent, whichChildren, allowIgnored); // AWT_THREADING Safe (AWTRunLoop)
+ jobjectArray jchildrenAndRoles = (jobjectArray)JNFCallStaticObjectMethod(env, jm_getChildrenAndRoles, parent->fAccessible, parent->fComponent, whichChildren, allowIgnored); // AWT_THREADING Safe (AWTRunLoop)
if (jchildrenAndRoles == NULL) return nil;
jsize arrayLen = (*env)->GetArrayLength(env, jchildrenAndRoles);
@@ -294,14 +296,21 @@
NSString *childJavaRole = nil;
if (jchildJavaRole != NULL) {
- childJavaRole = JNFJavaToNSString(env, JNFGetObjectField(env, jchildJavaRole, sjf_key));
+ jobject jkey = JNFGetObjectField(env, jchildJavaRole, sjf_key);
+ childJavaRole = JNFJavaToNSString(env, jkey);
+ (*env)->DeleteLocalRef(env, jkey);
}
JavaComponentAccessibility *child = [self createWithParent:parent accessible:jchild role:childJavaRole index:childIndex withEnv:env withView:parent->fView];
+
+ (*env)->DeleteLocalRef(env, jchild);
+ (*env)->DeleteLocalRef(env, jchildJavaRole);
+
[children addObject:child];
childIndex++;
}
-
+ (*env)->DeleteLocalRef(env, jchildrenAndRoles);
+
return children;
}
@@ -310,7 +319,7 @@
jobject jcomponent = [(AWTView *)view awtComponent:env];
jint index = JNFCallStaticIntMethod(env, sjm_getAccessibleIndexInParent, jaccessible, jcomponent);
NSString *javaRole = getJavaRole(env, jaccessible, jcomponent);
-
+ (*env)->DeleteLocalRef(env, jcomponent);
return [self createWithAccessible:jaccessible role:javaRole index:index withEnv:env withView:view];
}
@@ -325,7 +334,10 @@
jobject jCAX = [JavaComponentAccessibility getCAccessible:jaccessible withEnv:env];
if (jCAX == NULL) return nil;
JavaComponentAccessibility *value = (JavaComponentAccessibility *) jlong_to_ptr(JNFGetLongField(env, jCAX, jf_ptr));
- if (value != nil) return [[value retain] autorelease];
+ if (value != nil) {
+ (*env)->DeleteLocalRef(env, jCAX);
+ return [[value retain] autorelease];
+ }
// otherwise, create a new instance
JavaComponentAccessibility *newChild = nil;
@@ -348,6 +360,7 @@
// must hard retain pointer poked into Java object
[newChild retain];
JNFSetLongField(env, jCAX, jf_ptr, ptr_to_jlong(newChild));
+ (*env)->DeleteLocalRef(env, jCAX);
// return autoreleased instance
return [newChild autorelease];
@@ -380,7 +393,7 @@
// Get all the other accessibility attributes states we need in one swell foop.
// javaRole isn't pulled in because we need protected access to AccessibleRole.key
- jbooleanArray attributeStates = JNFCallStaticObjectMethod(env, jm_getInitialAttributeStates, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
+ jbooleanArray attributeStates = (jbooleanArray)JNFCallStaticObjectMethod(env, jm_getInitialAttributeStates, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
if (attributeStates == NULL) return nil;
jboolean *attributeStatesArray = (*env)->GetBooleanArrayElements(env, attributeStates, 0);
if (attributeStatesArray == NULL) {
@@ -475,6 +488,7 @@
JavaAxAction *action = [[JavaAxAction alloc] initWithEnv:env withAccessibleAction:axAction withIndex:0 withComponent:fComponent];
[fActions setObject:action forKey:[self isMenu] ? NSAccessibilityPickAction : NSAccessibilityPressAction];
[action release];
+ (*env)->DeleteLocalRef(env, axAction);
}
}
@@ -485,7 +499,9 @@
- (id)parent
{
+ static JNF_CLASS_CACHE(sjc_Window, "java/awt/Window");
static JNF_STATIC_MEMBER_CACHE(sjm_getAccessibleParent, sjc_CAccessibility, "getAccessibleParent", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;)Ljavax/accessibility/Accessible;");
+ static JNF_STATIC_MEMBER_CACHE(sjm_getSwingAccessible, sjc_CAccessible, "getSwingAccessible", "(Ljavax/accessibility/Accessible;)Ljavax/accessibility/Accessible;");
if(fParent == nil) {
JNIEnv* env = [ThreadUtilities getJNIEnv];
@@ -495,10 +511,21 @@
if (jparent == NULL) {
fParent = fView;
} else {
- fParent = [JavaComponentAccessibility createWithAccessible:jparent withEnv:env withView:fView];
+ AWTView *view = fView;
+ jobject jax = JNFCallStaticObjectMethod(env, sjm_getSwingAccessible, fAccessible);
+
+ if (JNFIsInstanceOf(env, jax, &sjc_Window)) {
+ // In this case jparent is an owner toplevel and we should retrieve its own view
+ view = [AWTView awtView:env ofAccessible:jparent];
+ }
+ if (view != nil) {
+ fParent = [JavaComponentAccessibility createWithAccessible:jparent withEnv:env withView:view];
+ }
if (fParent == nil) {
fParent = fView;
}
+ (*env)->DeleteLocalRef(env, jparent);
+ (*env)->DeleteLocalRef(env, jax );
}
[fParent retain];
}
@@ -546,7 +573,10 @@
return NO;
}
- return isShowing(env, [self axContextWithEnv:env], fComponent);
+ jobject axContext = [self axContextWithEnv:env];
+ BOOL showing = isShowing(env, axContext, fComponent);
+ (*env)->DeleteLocalRef(env, axContext);
+ return showing;
}
// the array of names for each role is cached in the sAttributeNamesForRoleCache
@@ -723,7 +753,12 @@
JNIEnv* env = [ThreadUtilities getJNIEnv];
jobject val = JNFCallStaticObjectMethod(env, sjm_getAccessibleDescription, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
- return JNFJavaToNSString(env, val);
+ if (val == NULL) {
+ return @"unknown";
+ }
+ NSString* str = JNFJavaToNSString(env, val);
+ (*env)->DeleteLocalRef(env, val);
+ return str;
}
- (BOOL)accessibilityIsHelpAttributeSettable
@@ -739,7 +774,12 @@
JNIEnv* env = [ThreadUtilities getJNIEnv];
jobject axValue = JNFCallStaticObjectMethod(env, jm_getMaximumAccessibleValue, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
- return JNFJavaToNSNumber(env, axValue);
+ if (axValue == NULL) {
+ return [NSNumber numberWithInt:0];
+ }
+ NSNumber* num = JNFJavaToNSNumber(env, axValue);
+ (*env)->DeleteLocalRef(env, axValue);
+ return num;
}
- (BOOL)accessibilityIsMaxValueAttributeSettable
@@ -755,7 +795,12 @@
JNIEnv* env = [ThreadUtilities getJNIEnv];
jobject axValue = JNFCallStaticObjectMethod(env, jm_getMinimumAccessibleValue, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
- return JNFJavaToNSNumber(env, axValue);
+ if (axValue == NULL) {
+ return [NSNumber numberWithInt:0];
+ }
+ NSNumber* num = JNFJavaToNSNumber(env, axValue);
+ (*env)->DeleteLocalRef(env, axValue);
+ return num;
}
- (BOOL)accessibilityIsMinValueAttributeSettable
@@ -770,13 +815,16 @@
// cmcnote - should batch these two calls into one that returns an array of two bools, one for vertical and one for horiz
if (isVertical(env, axContext, fComponent)) {
+ (*env)->DeleteLocalRef(env, axContext);
return NSAccessibilityVerticalOrientationValue;
}
if (isHorizontal(env, axContext, fComponent)) {
+ (*env)->DeleteLocalRef(env, axContext);
return NSAccessibilityHorizontalOrientationValue;
}
+ (*env)->DeleteLocalRef(env, axContext);
return nil;
}
@@ -808,6 +856,7 @@
// Get the java screen coords, and make a NSPoint of the bottom left of the AxComponent.
NSSize size = getAxComponentSize(env, axComponent, fComponent);
NSPoint point = getAxComponentLocationOnScreen(env, axComponent, fComponent);
+ (*env)->DeleteLocalRef(env, axComponent);
point.y += size.height;
@@ -857,8 +906,9 @@
JNIEnv* env = [ThreadUtilities getJNIEnv];
jobject axRole = JNFCallStaticObjectMethod(env, jm_getAccessibleRoleDisplayString, fAccessible, fComponent);
- if(axRole != NULL) {
+ if (axRole != NULL) {
value = JNFJavaToNSString(env, axRole);
+ (*env)->DeleteLocalRef(env, axRole);
} else {
value = @"unknown";
}
@@ -893,7 +943,9 @@
- (NSValue *)accessibilitySizeAttribute {
JNIEnv* env = [ThreadUtilities getJNIEnv];
jobject axComponent = JNFCallStaticObjectMethod(env, sjm_getAccessibleComponent, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
- return [NSValue valueWithSize:getAxComponentSize(env, axComponent, fComponent)];
+ NSValue* size = [NSValue valueWithSize:getAxComponentSize(env, axComponent, fComponent)];
+ (*env)->DeleteLocalRef(env, axComponent);
+ return size;
}
- (BOOL)accessibilityIsSizeAttributeSettable
@@ -952,7 +1004,12 @@
JNIEnv* env = [ThreadUtilities getJNIEnv];
jobject val = JNFCallStaticObjectMethod(env, sjm_getAccessibleName, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
- return JNFJavaToNSString(env, val);
+ if (val == NULL) {
+ return @"unknown";
+ }
+ NSString* str = JNFJavaToNSString(env, val);
+ (*env)->DeleteLocalRef(env, val);
+ return str;
}
- (BOOL)accessibilityIsTitleAttributeSettable
@@ -984,8 +1041,20 @@
// a text value is taken care of in JavaTextAccessibility
// cmcnote should coalesce these calls into one java call
+ NSNumber *num = nil;
jobject axValue = JNFCallStaticObjectMethod(env, sjm_getAccessibleValue, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
- return JNFJavaToNSNumber(env, JNFCallStaticObjectMethod(env, jm_getCurrentAccessibleValue, axValue, fComponent)); // AWT_THREADING Safe (AWTRunLoop)
+ if (axValue != NULL) {
+ jobject str = JNFCallStaticObjectMethod(env, jm_getCurrentAccessibleValue, axValue, fComponent);
+ if (str != NULL) {
+ num = JNFJavaToNSNumber(env, str); // AWT_THREADING Safe (AWTRunLoop)
+ (*env)->DeleteLocalRef(env, str);
+ }
+ (*env)->DeleteLocalRef(env, axValue);
+ }
+ if (num == nil) {
+ num = [NSNumber numberWithInt:0];
+ }
+ return num;
}
- (BOOL)accessibilityIsValueAttributeSettable
@@ -1084,7 +1153,10 @@
id value = nil;
if (JNFIsInstanceOf(env, jparent, &jc_Container)) {
jobject jaccessible = JNFCallStaticObjectMethod(env, jm_accessibilityHitTest, jparent, (jfloat)point.x, (jfloat)point.y); // AWT_THREADING Safe (AWTRunLoop)
- value = [JavaComponentAccessibility createWithAccessible:jaccessible withEnv:env withView:fView];
+ if (jaccessible != NULL) {
+ value = [JavaComponentAccessibility createWithAccessible:jaccessible withEnv:env withView:fView];
+ (*env)->DeleteLocalRef(env, jaccessible);
+ }
}
if (value == nil) {
@@ -1116,6 +1188,7 @@
if (JNFIsInstanceOf(env, focused, &sjc_Accessible)) {
value = [JavaComponentAccessibility createWithAccessible:focused withEnv:env withView:fView];
}
+ (*env)->DeleteLocalRef(env, focused);
}
if (value == nil) {
@@ -1222,38 +1295,46 @@
for (i = 0; i < _numTabs; i++) {
aTab = (JavaComponentAccessibility *)[tabs objectAtIndex:i];
if ([aTab isAccessibleWithEnv:env forAccessible:selAccessible]) {
+ (*env)->DeleteLocalRef(env, selAccessible);
return aTab;
}
}
-
+ (*env)->DeleteLocalRef(env, selAccessible);
return nil;
}
- (NSArray *)tabControlsWithEnv:(JNIEnv *)env withTabGroupAxContext:(jobject)axContext withTabCode:(NSInteger)whichTabs allowIgnored:(BOOL)allowIgnored
{
- jobjectArray jtabsAndRoles = JNFCallStaticObjectMethod(env, jm_getChildrenAndRoles, fAccessible, fComponent, whichTabs, allowIgnored); // AWT_THREADING Safe (AWTRunLoop)
+ jobjectArray jtabsAndRoles = (jobjectArray)JNFCallStaticObjectMethod(env, jm_getChildrenAndRoles, fAccessible, fComponent, whichTabs, allowIgnored); // AWT_THREADING Safe (AWTRunLoop)
if(jtabsAndRoles == NULL) return nil;
jsize arrayLen = (*env)->GetArrayLength(env, jtabsAndRoles);
- if (arrayLen == 0) return nil;
-
+ if (arrayLen == 0) {
+ (*env)->DeleteLocalRef(env, jtabsAndRoles);
+ return nil;
+ }
NSMutableArray *tabs = [NSMutableArray arrayWithCapacity:(arrayLen/2)];
// all of the tabs have the same role, so we can just find out what that is here and use it for all the tabs
jobject jtabJavaRole = (*env)->GetObjectArrayElement(env, jtabsAndRoles, 1); // the array entries alternate between tab/role, starting with tab. so the first role is entry 1.
- if (jtabJavaRole == NULL) return nil;
-
- NSString *tabJavaRole = JNFJavaToNSString(env, JNFGetObjectField(env, jtabJavaRole, sjf_key));
+ if (jtabJavaRole == NULL) {
+ (*env)->DeleteLocalRef(env, jtabsAndRoles);
+ return nil;
+ }
+ jobject jkey = JNFGetObjectField(env, jtabJavaRole, sjf_key);
+ NSString *tabJavaRole = JNFJavaToNSString(env, jkey);
+ (*env)->DeleteLocalRef(env, jkey);
NSInteger i;
NSUInteger tabIndex = (whichTabs >= 0) ? whichTabs : 0; // if we're getting one particular child, make sure to set its index correctly
for(i = 0; i < arrayLen; i+=2) {
jobject jtab = (*env)->GetObjectArrayElement(env, jtabsAndRoles, i);
JavaComponentAccessibility *tab = [[[TabGroupControlAccessibility alloc] initWithParent:self withEnv:env withAccessible:jtab withIndex:tabIndex withTabGroup:axContext withView:[self view] withJavaRole:tabJavaRole] autorelease];
+ (*env)->DeleteLocalRef(env, jtab);
[tabs addObject:tab];
tabIndex++;
}
-
+ (*env)->DeleteLocalRef(env, jtabsAndRoles);
return tabs;
}
@@ -1272,7 +1353,9 @@
{
JNIEnv *env = [ThreadUtilities getJNIEnv];
jobject axContext = [self axContextWithEnv:env];
- return [self tabControlsWithEnv:env withTabGroupAxContext:axContext withTabCode:JAVA_AX_ALL_CHILDREN allowIgnored:NO];
+ id tabs = [self tabControlsWithEnv:env withTabGroupAxContext:axContext withTabCode:JAVA_AX_ALL_CHILDREN allowIgnored:NO];
+ (*env)->DeleteLocalRef(env, axContext);
+ return tabs;
}
- (BOOL)accessibilityIsTabsAttributeSettable
@@ -1292,7 +1375,9 @@
{
JNIEnv *env = [ThreadUtilities getJNIEnv];
jobject axContext = [self axContextWithEnv:env];
- return [self contentsWithEnv:env withTabGroupAxContext:axContext withTabCode:JAVA_AX_ALL_CHILDREN allowIgnored:NO];
+ NSArray* cont = [self contentsWithEnv:env withTabGroupAxContext:axContext withTabCode:JAVA_AX_ALL_CHILDREN allowIgnored:NO];
+ (*env)->DeleteLocalRef(env, axContext);
+ return cont;
}
- (BOOL)accessibilityIsContentsAttributeSettable
@@ -1305,7 +1390,9 @@
{
JNIEnv *env = [ThreadUtilities getJNIEnv];
jobject axContext = [self axContextWithEnv:env];
- return [self currentTabWithEnv:env withAxContext:axContext];
+ id val = [self currentTabWithEnv:env withAxContext:axContext];
+ (*env)->DeleteLocalRef(env, axContext);
+ return val;
}
- (BOOL)accessibilityIsValueAttributeSettable
@@ -1322,6 +1409,7 @@
JNIEnv *env = [ThreadUtilities getJNIEnv];
jobject axContext = [self axContextWithEnv:env];
setAxContextSelection(env, axContext, fIndex, fComponent);
+ (*env)->DeleteLocalRef(env, axContext);
}
- (NSArray *)accessibilityChildrenAttribute
@@ -1357,6 +1445,7 @@
result = children;
}
}
+ (*env)->DeleteLocalRef(env, axContext);
} else {
result = [super accessibilityArrayAttributeValues:attribute index:index maxCount:maxCount];
}
@@ -1375,7 +1464,7 @@
self = [super initWithParent:parent withEnv:env withAccessible:accessible withIndex:index withView:view withJavaRole:javaRole];
if (self) {
if (tabGroup != NULL) {
- fTabGroupAxContext = JNFNewGlobalRef(env, tabGroup);
+ fTabGroupAxContext = JNFNewWeakGlobalRef(env, tabGroup);
} else {
fTabGroupAxContext = NULL;
}
@@ -1388,7 +1477,7 @@
JNIEnv *env = [ThreadUtilities getJNIEnvUncached];
if (fTabGroupAxContext != NULL) {
- JNFDeleteGlobalRef(env, fTabGroupAxContext);
+ JNFDeleteWeakGlobalRef(env, fTabGroupAxContext);
fTabGroupAxContext = NULL;
}
@@ -1399,9 +1488,14 @@
{
JNIEnv *env = [ThreadUtilities getJNIEnv];
jobject axContext = [self axContextWithEnv:env];
+ jobject selAccessible = getAxContextSelection(env, [self tabGroup], fIndex, fComponent);
// Returns the current selection of the page tab list
- return [NSNumber numberWithBool:ObjectEquals(env, axContext, getAxContextSelection(env, [self tabGroup], fIndex, fComponent), fComponent)];
+ id val = [NSNumber numberWithBool:ObjectEquals(env, axContext, selAccessible, fComponent)];
+
+ (*env)->DeleteLocalRef(env, selAccessible);
+ (*env)->DeleteLocalRef(env, axContext);
+ return val;
}
- (void)getActionsWithEnv:(JNIEnv *)env
@@ -1416,7 +1510,8 @@
if (fTabGroupAxContext == NULL) {
JNIEnv* env = [ThreadUtilities getJNIEnv];
jobject tabGroupAxContext = [(JavaComponentAccessibility *)[self parent] axContextWithEnv:env];
- fTabGroupAxContext = JNFNewGlobalRef(env, tabGroupAxContext);
+ fTabGroupAxContext = JNFNewWeakGlobalRef(env, tabGroupAxContext);
+ (*env)->DeleteLocalRef(env, tabGroupAxContext);
}
return fTabGroupAxContext;
}
@@ -1451,8 +1546,10 @@
if ([[aElement accessibilityRoleAttribute] isEqualToString:NSAccessibilityScrollBarRole]) {
jobject elementAxContext = [aElement axContextWithEnv:env];
if (isHorizontal(env, elementAxContext, fComponent)) {
+ (*env)->DeleteLocalRef(env, elementAxContext);
return aElement;
}
+ (*env)->DeleteLocalRef(env, elementAxContext);
}
}
@@ -1478,8 +1575,10 @@
if ([[aElement accessibilityRoleAttribute] isEqualToString:NSAccessibilityScrollBarRole]) {
jobject elementAxContext = [aElement axContextWithEnv:env];
if (isVertical(env, elementAxContext, fComponent)) {
+ (*env)->DeleteLocalRef(env, elementAxContext);
return aElement;
}
+ (*env)->DeleteLocalRef(env, elementAxContext);
}
}
--- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaTextAccessibility.m Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/JavaTextAccessibility.m Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,9 @@
// if it's static text, the AppKit AXValue is the java accessibleName
jobject axName = JNFCallStaticObjectMethod(env, sjm_getAccessibleName, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
if (axName != NULL) {
- return JNFJavaToNSString(env, axName);
+ NSString* str = JNFJavaToNSString(env, axName);
+ (*env)->DeleteLocalRef(env, axName);
+ return str;
}
// value is still nil if no accessibleName for static text. Below, try to get the accessibleText.
}
@@ -120,12 +122,18 @@
// cmcnote: inefficient to make three distinct JNI calls. Coalesce. radr://3951923
jobject axText = JNFCallStaticObjectMethod(env, sjm_getAccessibleText, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
if (axText == NULL) return nil;
-
+ (*env)->DeleteLocalRef(env, axText);
+
jobject axEditableText = JNFCallStaticObjectMethod(env, sjm_getAccessibleEditableText, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
if (axEditableText == NULL) return nil;
static JNF_STATIC_MEMBER_CACHE(jm_getTextRange, sjc_CAccessibleText, "getTextRange", "(Ljavax/accessibility/AccessibleEditableText;IILjava/awt/Component;)Ljava/lang/String;");
- NSString *string = JNFJavaToNSString(env, JNFCallStaticObjectMethod(env, jm_getTextRange, axEditableText, 0, getAxTextCharCount(env, axEditableText, fComponent), fComponent)); // AWT_THREADING Safe (AWTRunLoop)
+ jobject jrange = JNFCallStaticObjectMethod(env, jm_getTextRange, axEditableText, 0, getAxTextCharCount(env, axEditableText, fComponent), fComponent);
+ NSString *string = JNFJavaToNSString(env, jrange); // AWT_THREADING Safe (AWTRunLoop)
+
+ (*env)->DeleteLocalRef(env, jrange);
+ (*env)->DeleteLocalRef(env, axEditableText);
+
if (string == nil) string = @"";
return string;
}
@@ -139,6 +147,7 @@
JNIEnv* env = [ThreadUtilities getJNIEnv];
jobject axEditableText = JNFCallStaticObjectMethod(env, sjm_getAccessibleEditableText, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
if (axEditableText == NULL) return NO;
+ (*env)->DeleteLocalRef(env, axEditableText);
return YES;
}
@@ -157,7 +166,9 @@
static JNF_STATIC_MEMBER_CACHE(jm_getSelectedText, sjc_CAccessibleText, "getSelectedText", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;)Ljava/lang/String;");
jobject axText = JNFCallStaticObjectMethod(env, jm_getSelectedText, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
if (axText == NULL) return @"";
- return JNFJavaToNSString(env, axText);
+ NSString* str = JNFJavaToNSString(env, axText);
+ (*env)->DeleteLocalRef(env, axText);
+ return str;
}
- (BOOL)accessibilityIsSelectedTextAttributeSettable
@@ -220,7 +231,9 @@
// also, static text doesn't always have accessibleText. if axText is null, should get the charcount of the accessibleName instead
JNIEnv *env = [ThreadUtilities getJNIEnv];
jobject axText = JNFCallStaticObjectMethod(env, sjm_getAccessibleText, fAccessible, fComponent); // AWT_THREADING Safe (AWTRunLoop)
- return [NSNumber numberWithInt:getAxTextCharCount(env, axText, fComponent)];
+ NSNumber* num = [NSNumber numberWithInt:getAxTextCharCount(env, axText, fComponent)];
+ (*env)->DeleteLocalRef(env, axText);
+ return num;
}
- (BOOL)accessibilityIsNumberOfCharactersAttributeSettable
@@ -285,7 +298,7 @@
JNIEnv *env = [ThreadUtilities getJNIEnv];
static JNF_STATIC_MEMBER_CACHE(jm_getBoundsForRange, sjc_CAccessibleText, "getBoundsForRange", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;II)[D");
- jdoubleArray axBounds = JNFCallStaticObjectMethod(env, jm_getBoundsForRange, fAccessible, fComponent, range.location, range.length); // AWT_THREADING Safe (AWTRunLoop)
+ jdoubleArray axBounds = (jdoubleArray)JNFCallStaticObjectMethod(env, jm_getBoundsForRange, fAccessible, fComponent, range.location, range.length); // AWT_THREADING Safe (AWTRunLoop)
if (axBounds == NULL) return nil;
// We cheat because we know that the array is 4 elements long (x, y, width, height)
@@ -324,7 +337,7 @@
JNIEnv *env = [ThreadUtilities getJNIEnv];
static JNF_STATIC_MEMBER_CACHE(jm_getRangeForLine, sjc_CAccessibleText, "getRangeForLine", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;I)[I");
- jintArray axTextRange = JNFCallStaticObjectMethod(env, jm_getRangeForLine, fAccessible, fComponent, [line intValue]); // AWT_THREADING Safe (AWTRunLoop)
+ jintArray axTextRange = (jintArray)JNFCallStaticObjectMethod(env, jm_getRangeForLine, fAccessible, fComponent, [line intValue]); // AWT_THREADING Safe (AWTRunLoop)
if (axTextRange == NULL) return nil;
return javaIntArrayToNSRangeValue(env,axTextRange);
@@ -350,10 +363,12 @@
JNIEnv *env = [ThreadUtilities getJNIEnv];
static JNF_STATIC_MEMBER_CACHE(jm_getStringForRange, sjc_CAccessibleText, "getStringForRange", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;II)Ljava/lang/String;");
- jstring jstringForRange = JNFCallStaticObjectMethod(env, jm_getStringForRange, fAccessible, fComponent, range.location, range.length); // AWT_THREADING Safe (AWTRunLoop)
+ jstring jstringForRange = (jstring)JNFCallStaticObjectMethod(env, jm_getStringForRange, fAccessible, fComponent, range.location, range.length); // AWT_THREADING Safe (AWTRunLoop)
if (jstringForRange == NULL) return @"";
- return JNFJavaToNSString(env, jstringForRange);
+ NSString* str = JNFJavaToNSString(env, jstringForRange);
+ (*env)->DeleteLocalRef(env, jstringForRange);
+ return str;
}
//
@@ -406,7 +421,7 @@
JNIEnv *env = [ThreadUtilities getJNIEnv];
static JNF_STATIC_MEMBER_CACHE(jm_getRangeForIndex, sjc_CAccessibleText, "getRangeForIndex", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;I)[I");
- jintArray axTextRange = JNFCallStaticObjectMethod(env, jm_getRangeForIndex, fAccessible, fComponent, index); // AWT_THREADING Safe (AWTRunLoop)
+ jintArray axTextRange = (jintArray)JNFCallStaticObjectMethod(env, jm_getRangeForIndex, fAccessible, fComponent, index); // AWT_THREADING Safe (AWTRunLoop)
if (axTextRange == NULL) return nil;
return javaIntArrayToNSRangeValue(env, axTextRange);
--- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/java2d/opengl/CGLLayer.h Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/java2d/opengl/CGLLayer.h Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -31,7 +31,7 @@
@interface CGLLayer : CAOpenGLLayer
{
@private
- JNFJObjectWrapper *javaLayer;
+ JNFWeakJObjectWrapper *javaLayer;
// intermediate buffer, used the RQ lock to synchronize
GLuint textureID;
@@ -45,7 +45,7 @@
#endif /* REMOTELAYER */
}
-@property (nonatomic, retain) JNFJObjectWrapper *javaLayer;
+@property (nonatomic, retain) JNFWeakJObjectWrapper *javaLayer;
@property (readwrite, assign) GLuint textureID;
@property (readwrite, assign) GLenum target;
@property (readwrite, assign) float textureWidth;
@@ -57,7 +57,7 @@
@property (nonatomic, retain) NSObject<JRSRemoteLayer> *jrsRemoteLayer;
#endif
-- (id) initWithJavaLayer:(JNFJObjectWrapper *)javaLayer;
+- (id) initWithJavaLayer:(JNFWeakJObjectWrapper *)javaLayer;
- (void) blitTexture;
@end
--- a/jdk/src/java.desktop/macosx/native/libawt_lwawt/java2d/opengl/CGLLayer.m Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/macosx/native/libawt_lwawt/java2d/opengl/CGLLayer.m Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -46,7 +46,7 @@
@synthesize jrsRemoteLayer;
#endif
-- (id) initWithJavaLayer:(JNFJObjectWrapper *)layer;
+- (id) initWithJavaLayer:(JNFWeakJObjectWrapper *)layer;
{
AWT_ASSERT_APPKIT_THREAD;
// Initialize ourselves
@@ -133,6 +133,15 @@
{
AWT_ASSERT_APPKIT_THREAD;
+ JNIEnv *env = [ThreadUtilities getJNIEnv];
+ static JNF_CLASS_CACHE(jc_JavaLayer, "sun/java2d/opengl/CGLLayer");
+ static JNF_MEMBER_CACHE(jm_drawInCGLContext, jc_JavaLayer, "drawInCGLContext", "()V");
+
+ jobject javaLayerLocalRef = [self.javaLayer jObjectWithEnv:env];
+ if ((*env)->IsSameObject(env, javaLayerLocalRef, NULL)) {
+ return;
+ }
+
// Set the current context to the one given to us.
CGLSetCurrentContext(glContext);
@@ -141,12 +150,7 @@
glClear(GL_COLOR_BUFFER_BIT);
glViewport(0, 0, textureWidth, textureHeight);
-
- JNIEnv *env = [ThreadUtilities getJNIEnv];
- static JNF_CLASS_CACHE(jc_JavaLayer, "sun/java2d/opengl/CGLLayer");
- static JNF_MEMBER_CACHE(jm_drawInCGLContext, jc_JavaLayer, "drawInCGLContext", "()V");
- jobject javaLayerLocalRef = [self.javaLayer jObjectWithEnv:env];
JNFCallVoidMethod(env, javaLayerLocalRef, jm_drawInCGLContext);
(*env)->DeleteLocalRef(env, javaLayerLocalRef);
@@ -171,7 +175,7 @@
JNF_COCOA_ENTER(env);
- JNFJObjectWrapper *javaLayer = [JNFJObjectWrapper wrapperWithJObject:obj withEnv:env];
+ JNFWeakJObjectWrapper *javaLayer = [JNFWeakJObjectWrapper wrapperWithJObject:obj withEnv:env];
[ThreadUtilities performOnMainThreadWaiting:YES block:^(){
AWT_ASSERT_APPKIT_THREAD;
--- a/jdk/src/java.desktop/share/native/libawt/awt/image/BufImgSurfaceData.c Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/share/native/libawt/awt/image/BufImgSurfaceData.c Mon May 09 08:50:20 2016 -0700
@@ -231,12 +231,14 @@
pRasInfo->redErrTable = NULL;
pRasInfo->grnErrTable = NULL;
pRasInfo->bluErrTable = NULL;
+ pRasInfo->representsPrimaries = 0;
} else {
pRasInfo->invColorTable = bipriv->cData->img_clr_tbl;
pRasInfo->redErrTable = bipriv->cData->img_oda_red;
pRasInfo->grnErrTable = bipriv->cData->img_oda_green;
pRasInfo->bluErrTable = bipriv->cData->img_oda_blue;
pRasInfo->invGrayTable = bipriv->cData->pGrayInverseLutData;
+ pRasInfo->representsPrimaries = bipriv->cData->representsPrimaries;
}
}
@@ -259,6 +261,59 @@
}
}
+static int calculatePrimaryColorsApproximation(int* cmap, unsigned char* cube, int cube_size) {
+ int i, j, k;
+ int index, value, color;
+ // values calculated from cmap
+ int r, g, b;
+ // maximum positive/negative variation allowed for r, g, b values for primary colors
+ int delta = 5;
+ // get the primary color cmap indices from corner of inverse color table
+ for (i = 0; i < cube_size; i += (cube_size - 1)) {
+ for (j = 0; j < cube_size; j += (cube_size - 1)) {
+ for (k = 0; k < cube_size; k += (cube_size - 1)) {
+ // calculate inverse color table index
+ index = i + cube_size * (j + cube_size * k);
+ // get value present in corners of inverse color table
+ value = cube[index];
+ // use the corner values as index for cmap
+ color = cmap[value];
+ // extract r,g,b values from cmap value
+ r = ((color) >> 16) & 0xff;
+ g = ((color) >> 8) & 0xff;
+ b = color & 0xff;
+ /*
+ * If i/j/k value is 0 optimum value of b/g/r should be 0 but we allow
+ * maximum positive variation of 5. If i/j/k value is 31 optimum value
+ * of b/g/r should be 255 but we allow maximum negative variation of 5.
+ */
+ if (i == 0) {
+ if (b > delta)
+ return 0;
+ } else {
+ if (b < (255 - delta))
+ return 0;
+ }
+ if (j == 0) {
+ if (g > delta)
+ return 0;
+ } else {
+ if (g < (255 - delta))
+ return 0;
+ }
+ if (k == 0) {
+ if (r > delta)
+ return 0;
+ } else {
+ if (r < (255 - delta))
+ return 0;
+ }
+ }
+ }
+ }
+ return 1;
+}
+
static ColorData *BufImg_SetupICM(JNIEnv *env,
BufImgSDOps *bisdo)
{
@@ -298,6 +353,7 @@
}
cData->img_clr_tbl = initCubemap(pRgb, bisdo->lutsize, 32);
+ cData->representsPrimaries = calculatePrimaryColorsApproximation(pRgb, cData->img_clr_tbl, 32);
if (allGray == JNI_TRUE) {
initInverseGrayLut(pRgb, bisdo->lutsize, cData);
}
--- a/jdk/src/java.desktop/share/native/libawt/java2d/SurfaceData.h Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/share/native/libawt/java2d/SurfaceData.h Mon May 09 08:50:20 2016 -0700
@@ -163,6 +163,7 @@
char *grnErrTable; /* Green ordered dither table */
char *bluErrTable; /* Blue ordered dither table */
int *invGrayTable; /* Inverse gray table */
+ int representsPrimaries; /* whether cmap represents primary colors */
union {
void *align; /* ensures strict alignment */
char data[SD_RASINFO_PRIVATE_SIZE];
--- a/jdk/src/java.desktop/share/native/libawt/java2d/loops/ByteIndexed.h Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/share/native/libawt/java2d/loops/ByteIndexed.h Mon May 09 08:50:20 2016 -0700
@@ -43,7 +43,7 @@
jint *PREFIX ## Lut;
#define DeclareByteIndexedStoreVars(PREFIX) \
- int PREFIX ## XDither, PREFIX ## YDither; \
+ int PREFIX ## XDither, PREFIX ## YDither, PREFIX ## RepPrims; \
char *PREFIX ## rerr, *PREFIX ## gerr, *PREFIX ## berr; \
unsigned char *PREFIX ## InvLut;
@@ -70,6 +70,7 @@
do { \
SetByteIndexedStoreVarsYPos(PREFIX, pRasInfo, (pRasInfo)->bounds.y1); \
PREFIX ## InvLut = (pRasInfo)->invColorTable; \
+ PREFIX ## RepPrims = (pRasInfo)->representsPrimaries; \
} while (0)
#define InitByteIndexedStoreVarsX(PREFIX, pRasInfo) \
@@ -168,9 +169,14 @@
#define StoreByteIndexedFrom3ByteRgb(pRas, PREFIX, x, r, g, b) \
do { \
- r += PREFIX ## rerr[PREFIX ## XDither]; \
- g += PREFIX ## gerr[PREFIX ## XDither]; \
- b += PREFIX ## berr[PREFIX ## XDither]; \
+ if (!(((r == 0) || (r == 255)) && \
+ ((g == 0) || (g == 255)) && \
+ ((b == 0) || (b == 255)) && \
+ PREFIX ## RepPrims)) { \
+ r += PREFIX ## rerr[PREFIX ## XDither]; \
+ g += PREFIX ## gerr[PREFIX ## XDither]; \
+ b += PREFIX ## berr[PREFIX ## XDither]; \
+ } \
ByteClamp3Components(r, g, b); \
(pRas)[x] = SurfaceData_InvColorMap(PREFIX ## InvLut, r, g, b); \
} while (0)
--- a/jdk/src/java.desktop/share/native/libawt/java2d/loops/FourByteAbgr.h Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/share/native/libawt/java2d/loops/FourByteAbgr.h Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -191,4 +191,11 @@
COMP_PREFIX ## A, COMP_PREFIX ## R, \
COMP_PREFIX ## G, COMP_PREFIX ## B)
+/*
+ * SrcOver ## TYPE ## BlendFactor
+ * Returns appropriate blend value for use in blending calculations.
+ */
+#define SrcOverFourByteAbgrBlendFactor(dF, dA) \
+ (dA)
+
#endif /* FourByteAbgr_h_Included */
--- a/jdk/src/java.desktop/share/native/libawt/java2d/loops/FourByteAbgrPre.h Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/share/native/libawt/java2d/loops/FourByteAbgrPre.h Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -217,4 +217,11 @@
(pRas)[4*(x)+3] = (jubyte) COMP_PREFIX ## R; \
} while (0)
+/*
+ * SrcOver ## TYPE ## BlendFactor
+ * Returns appropriate blend value for use in blending calculations.
+ */
+#define SrcOverFourByteAbgrPreBlendFactor(dF, dA) \
+ (dF)
+
#endif /* FourByteAbgrPre_h_Included */
--- a/jdk/src/java.desktop/share/native/libawt/java2d/loops/IntArgb.h Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/share/native/libawt/java2d/loops/IntArgb.h Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -208,4 +208,11 @@
COMP_PREFIX ## A = (COMP_PREFIX ## A << 8) + COMP_PREFIX ## A; \
} while (0)
+/*
+ * SrcOver ## TYPE ## BlendFactor
+ * Returns appropriate blend value for use in blending calculations.
+ */
+#define SrcOverIntArgbBlendFactor(dF, dA) \
+ (dA)
+
#endif /* IntArgb_h_Included */
--- a/jdk/src/java.desktop/share/native/libawt/java2d/loops/IntArgbBm.h Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/share/native/libawt/java2d/loops/IntArgbBm.h Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -206,4 +206,11 @@
COMP_PREFIX ## A = (COMP_PREFIX ## A << 8) + COMP_PREFIX ## A; \
} while (0)
+/*
+ * SrcOver ## TYPE ## BlendFactor
+ * Returns appropriate blend value for use in blending calculations.
+ */
+#define SrcOverIntArgbBmBlendFactor(dF, dA) \
+ (dA)
+
#endif /* IntArgbBm_h_Included */
--- a/jdk/src/java.desktop/share/native/libawt/java2d/loops/IntArgbPre.h Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/share/native/libawt/java2d/loops/IntArgbPre.h Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -216,4 +216,11 @@
COMP_PREFIX ## G, \
COMP_PREFIX ## B)
+/*
+ * SrcOver ## TYPE ## BlendFactor
+ * Returns appropriate blend value for use in blending calculations.
+ */
+#define SrcOverIntArgbPreBlendFactor(dF, dA) \
+ (dF)
+
#endif /* IntArgbPre_h_Included */
--- a/jdk/src/java.desktop/share/native/libawt/java2d/loops/LoopMacros.h Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/share/native/libawt/java2d/loops/LoopMacros.h Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -1668,31 +1668,83 @@
} \
} while (0);
+/*
+ * Antialiased glyph drawing results in artifacts around the character edges
+ * when text is drawn ontop of translucent background color. The standard
+ * blending equation for two colors:
+ * destColor = srcColor * glyphAlpha + destColor * (1 - glyphAlpha)
+ * works only when srcColor and destColor are opaque. For translucent srcColor
+ * and destColor, the respective alpha components in each color will influence
+ * the visibility of the color and the visibility of the color below it. Hence
+ * the equation for blending is given as:
+ * resA = srcAlpha + dstAlpha * (1 - srcAlpha)
+ * resCol = (srcColor * srcAlpha + destColor * destAlpha * (1- srcAlpha))/resA
+ * In addition, srcAlpha is multiplied with the glyphAlpha- that indicates the
+ * grayscale mask value of the glyph being drawn. The combined result provides
+ * smooth antialiased text on the buffer without any artifacts. Since the
+ * logic is executed for every pixel in a glyph, the implementation is further
+ * optimized to reduce computation and improve execution time.
+ */
#define GlyphListAABlend4ByteArgb(DST, GLYPH_PIXELS, PIXEL_INDEX, DST_PTR, \
FG_PIXEL, PREFIX, SRC_PREFIX) \
- do { \
- DeclareAlphaVarFor4ByteArgb(dstA) \
- DeclareCompVarsFor4ByteArgb(dst) \
+ do { \
+ DeclareAlphaVarFor4ByteArgb(resA) \
+ DeclareCompVarsFor4ByteArgb(res) \
jint mixValSrc = GLYPH_PIXELS[PIXEL_INDEX]; \
if (mixValSrc) { \
- if (mixValSrc < 255) { \
- jint mixValDst = 255 - mixValSrc; \
- Load ## DST ## To4ByteArgb(DST_PTR, pix, PIXEL_INDEX, \
- dstA, dstR, dstG, dstB); \
- dstA = MUL8(dstA, mixValDst) + \
- MUL8(SRC_PREFIX ## A, mixValSrc); \
- MultMultAddAndStore4ByteArgbComps(dst, mixValDst, dst, \
- mixValSrc, SRC_PREFIX); \
- if (!(DST ## IsOpaque) && \
- !(DST ## IsPremultiplied) && dstA && dstA < 255) { \
- DivideAndStore4ByteArgbComps(dst, dst, dstA); \
+ if (mixValSrc != 0xff) { \
+ PromoteByteAlphaFor4ByteArgb(mixValSrc); \
+ resA = MultiplyAlphaFor4ByteArgb(mixValSrc, SRC_PREFIX ## A); \
+ } else { \
+ resA = SRC_PREFIX ## A; \
+ } \
+ if (resA != MaxValFor4ByteArgb) { \
+ DeclareAndInvertAlphaVarFor4ByteArgb(dstF, resA) \
+ DeclareAndClearAlphaVarFor4ByteArgb(dstA) \
+ DeclareCompVarsFor4ByteArgb(dst) \
+ DeclareCompVarsFor4ByteArgb(tmp) \
+ MultiplyAndStore4ByteArgbComps(res, resA, SRC_PREFIX); \
+ if (!(DST ## IsPremultiplied)) { \
+ Load ## DST ## To4ByteArgb(DST_PTR, pix, PIXEL_INDEX, \
+ dstA, dstR, dstG, dstB); \
+ Store4ByteArgbCompsUsingOp(tmp, =, dst); \
+ } else { \
+ Declare ## DST ## AlphaLoadData(DstPix) \
+ jint pixelOffset = PIXEL_INDEX * (DST ## PixelStride); \
+ DST ## DataType *pixelAddress = PtrAddBytes(DST_PTR, \
+ pixelOffset); \
+ LoadAlphaFrom ## DST ## For4ByteArgb(pixelAddress, \
+ DstPix, \
+ dst); \
+ Postload4ByteArgbFrom ## DST(pixelAddress, \
+ DstPix, \
+ tmp); \
} \
- Store ## DST ## From4ByteArgbComps(DST_PTR, pix, \
- PIXEL_INDEX, dst); \
+ if (dstA) { \
+ DeclareAlphaVarFor4ByteArgb(blendF) \
+ dstA = MultiplyAlphaFor4ByteArgb(dstF, dstA); \
+ resA += dstA; \
+ blendF = SrcOver ## DST ## BlendFactor(dstF, dstA); \
+ if (blendF != MaxValFor4ByteArgb) { \
+ MultiplyAndStore4ByteArgbComps(tmp, \
+ blendF, \
+ tmp); \
+ } \
+ Store4ByteArgbCompsUsingOp(res, +=, tmp); \
+ } \
} else { \
Store ## DST ## PixelData(DST_PTR, PIXEL_INDEX, \
FG_PIXEL, PREFIX); \
+ break; \
} \
+ if (!(DST ## IsOpaque) && \
+ !(DST ## IsPremultiplied) && resA && \
+ resA < MaxValFor4ByteArgb) \
+ { \
+ DivideAndStore4ByteArgbComps(res, res, resA); \
+ } \
+ Store ## DST ## From4ByteArgbComps(DST_PTR, pix, \
+ PIXEL_INDEX, res); \
} \
} while (0);
--- a/jdk/src/java.desktop/unix/native/common/awt/colordata.h Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/unix/native/common/awt/colordata.h Mon May 09 08:50:20 2016 -0700
@@ -44,6 +44,7 @@
char* img_oda_blue;
int *pGrayInverseLutData;
int screendata;
+ int representsPrimaries;
} ColorData;
--- a/jdk/src/java.desktop/unix/native/libawt_xawt/awt/gtk2_interface.c Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/unix/native/libawt_xawt/awt/gtk2_interface.c Mon May 09 08:50:20 2016 -0700
@@ -312,7 +312,7 @@
return result;
}
-gboolean gtk2_check(const char* lib_name, int flags)
+gboolean gtk2_check(const char* lib_name, gboolean load)
{
if (gtk2_libhandle != NULL) {
/* We've already successfully opened the GTK libs, so return true. */
@@ -320,16 +320,25 @@
} else {
void *lib = NULL;
- lib = dlopen(lib_name, flags);
+#ifdef RTLD_NOLOAD
+ /* Just check if gtk libs are already in the process space */
+ lib = dlopen(lib_name, RTLD_LAZY | RTLD_NOLOAD);
+ if (!load || lib != NULL) {
+ return lib != NULL;
+ }
+#else
+#ifdef _AIX
+ /* On AIX we could implement this with the help of loadquery(L_GETINFO, ..) */
+ /* (see reload_table() in hotspot/src/os/aix/vm/loadlib_aix.cpp) but it is */
+ /* probably not worth it because most AIX servers don't have GTK libs anyway */
+#endif
+#endif
+ lib = dlopen(lib_name, RTLD_LAZY | RTLD_LOCAL);
if (lib == NULL) {
return FALSE;
}
- if (flags & RTLD_NOLOAD) {
- return TRUE;
- }
-
fp_gtk_check_version = dlsym(lib, "gtk_check_version");
/* Check for GTK 2.2+ */
if (!fp_gtk_check_version(2, 2, 0)) {
--- a/jdk/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/unix/native/libawt_xawt/awt/gtk3_interface.c Mon May 09 08:50:20 2016 -0700
@@ -87,13 +87,25 @@
return result;
}
-gboolean gtk3_check(const char* lib_name, int flags)
+gboolean gtk3_check(const char* lib_name, gboolean load)
{
if (gtk3_libhandle != NULL) {
/* We've already successfully opened the GTK libs, so return true. */
return TRUE;
} else {
- return dlopen(lib_name, flags) != NULL;
+#ifdef RTLD_NOLOAD
+ void *lib = dlopen(lib_name, RTLD_LAZY | RTLD_NOLOAD);
+ if (!load || lib != NULL) {
+ return lib != NULL;
+ }
+#else
+#ifdef _AIX
+ /* On AIX we could implement this with the help of loadquery(L_GETINFO, ..) */
+ /* (see reload_table() in hotspot/src/os/aix/vm/loadlib_aix.cpp) but it is */
+ /* probably not worth it because most AIX servers don't have GTK libs anyway */
+#endif
+#endif
+ return dlopen(lib_name, RTLD_LAZY | RTLD_LOCAL) != NULL;
}
}
--- a/jdk/src/java.desktop/unix/native/libawt_xawt/awt/gtk_interface.c Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/unix/native/libawt_xawt/awt/gtk_interface.c Mon May 09 08:50:20 2016 -0700
@@ -30,8 +30,8 @@
GtkApi* gtk2_load(JNIEnv *env, const char* lib_name);
GtkApi* gtk3_load(JNIEnv *env, const char* lib_name);
-gboolean gtk2_check(const char* lib_name, int flags);
-gboolean gtk3_check(const char* lib_name, int flags);
+gboolean gtk2_check(const char* lib_name, gboolean load);
+gboolean gtk3_check(const char* lib_name, gboolean load);
GtkApi *gtk;
@@ -40,7 +40,7 @@
const char* name;
const char* vname;
GtkApi* (*load)(JNIEnv *env, const char* lib_name);
- gboolean (*check)(const char* lib_name, int flags);
+ gboolean (*check)(const char* lib_name, gboolean load);
} GtkLib;
static GtkLib libs[] = {
@@ -70,10 +70,10 @@
static GtkLib* get_loaded() {
GtkLib* lib = libs;
while(!gtk && lib->version) {
- if (lib->check(lib->vname, RTLD_NOLOAD)) {
+ if (lib->check(lib->vname, /* load = */FALSE)) {
return lib;
}
- if (lib->check(lib->name, RTLD_NOLOAD)) {
+ if (lib->check(lib->name, /* load = */FALSE)) {
return lib;
}
lib++;
@@ -130,14 +130,14 @@
return gtk != NULL;
}
-static gboolean check_version(GtkVersion version, int flags) {
+static gboolean check_version(GtkVersion version) {
GtkLib* lib = libs;
while (lib->version) {
if (version == GTK_ANY || lib->version == version) {
- if (lib->check(lib->vname, flags)) {
+ if (lib->check(lib->vname, /* load = */TRUE)) {
return TRUE;
}
- if (lib->check(lib->name, flags)) {
+ if (lib->check(lib->name, /* load = */TRUE)) {
return TRUE;
}
}
@@ -150,9 +150,6 @@
if (gtk) {
return TRUE;
}
- if (check_version(version, RTLD_NOLOAD)) {
- return TRUE;
- }
- return check_version(version, RTLD_LAZY | RTLD_LOCAL);
+ return check_version(version);
}
--- a/jdk/src/java.desktop/windows/native/libawt/windows/colordata.h Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.desktop/windows/native/libawt/windows/colordata.h Mon May 09 08:50:20 2016 -0700
@@ -33,6 +33,7 @@
char* img_oda_blue;
unsigned char* img_clr_tbl;
int *pGrayInverseLutData;
+ int representsPrimaries;
} ColorData;
#define CANFREE(pData) (pData)
--- a/jdk/src/java.httpclient/share/classes/java/net/http/AsyncSSLDelegate.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/AsyncSSLDelegate.java Mon May 09 08:50:20 2016 -0700
@@ -144,13 +144,9 @@
sslParameters = Utils.copySSLParameters(sslp);
if (alpn != null) {
sslParameters.setApplicationProtocols(alpn);
- Log.logSSL("Setting application protocols: " + Arrays.toString(alpn));
- } else {
- Log.logSSL("No application protocols proposed");
}
+ logParams(sslParameters);
engine.setSSLParameters(sslParameters);
- engine.setEnabledCipherSuites(sslp.getCipherSuites());
- engine.setEnabledProtocols(sslp.getProtocols());
this.lowerOutput = lowerOutput;
this.client = client;
this.channelInputQ = new Queue<>();
@@ -560,24 +556,26 @@
return sslParameters;
}
- static void printParams(SSLParameters p) {
- System.out.println("SSLParameters:");
+ static void logParams(SSLParameters p) {
+ if (!Log.ssl())
+ return;
+ Log.logSSL("SSLParameters:");
if (p == null) {
- System.out.println("Null params");
+ Log.logSSL("Null params");
return;
}
for (String cipher : p.getCipherSuites()) {
- System.out.printf("cipher: %s\n", cipher);
+ Log.logSSL("cipher: {0}\n", cipher);
}
for (String approto : p.getApplicationProtocols()) {
- System.out.printf("application protocol: %s\n", approto);
+ Log.logSSL("application protocol: {0}\n", approto);
}
for (String protocol : p.getProtocols()) {
- System.out.printf("protocol: %s\n", protocol);
+ Log.logSSL("protocol: {0}\n", protocol);
}
if (p.getServerNames() != null)
- for (SNIServerName sname : p.getServerNames()) {
- System.out.printf("server name: %s\n", sname.toString());
+ for (SNIServerName sname : p.getServerNames()) {
+ Log.logSSL("server name: {0}\n", sname.toString());
}
}
--- a/jdk/src/java.httpclient/share/classes/java/net/http/HttpClientImpl.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/HttpClientImpl.java Mon May 09 08:50:20 2016 -0700
@@ -110,7 +110,10 @@
this.proxySelector = builder.proxy;
authenticator = builder.authenticator;
version = builder.version;
- sslParams = builder.sslParams;
+ if (builder.sslParams == null)
+ sslParams = getDefaultParams(sslContext);
+ else
+ sslParams = builder.sslParams;
connections = new ConnectionPool();
connections.start();
timeouts = new LinkedList<>();
@@ -129,6 +132,12 @@
selmgr.start();
}
+ private static SSLParameters getDefaultParams(SSLContext ctx) {
+ SSLParameters params = ctx.getSupportedSSLParameters();
+ params.setProtocols(new String[]{"TLSv1.2"});
+ return params;
+ }
+
/**
* Wait for activity on given exchange (assuming blocking = false).
* It's a no-op if blocking = true. In particular, the following occurs
--- a/jdk/src/java.httpclient/share/classes/java/net/http/SSLDelegate.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/SSLDelegate.java Mon May 09 08:50:20 2016 -0700
@@ -66,8 +66,6 @@
Log.logSSL("No application protocols proposed");
}
engine.setSSLParameters(sslParameters);
- engine.setEnabledCipherSuites(sslp.getCipherSuites());
- engine.setEnabledProtocols(sslp.getProtocols());
wrapper = new EngineWrapper(chan, engine);
this.chan = chan;
this.client = client;
--- a/jdk/src/java.httpclient/share/classes/java/net/http/Utils.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.httpclient/share/classes/java/net/http/Utils.java Mon May 09 08:50:20 2016 -0700
@@ -146,7 +146,7 @@
} else {
sb.append(uri.getScheme())
.append("://")
- .append(uri.getHost())
+ .append(uri.getAuthority())
.append(uri.getPath());
urlstring = sb.toString();
--- a/jdk/src/java.instrument/share/classes/sun/instrument/InstrumentationImpl.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/java.instrument/share/classes/sun/instrument/InstrumentationImpl.java Mon May 09 08:50:20 2016 -0700
@@ -436,7 +436,8 @@
if (classBeingRedefined != null) {
module = classBeingRedefined.getModule();
} else {
- module = loader.getUnnamedModule();
+ module = (loader == null) ? jdk.internal.loader.BootLoader.getUnnamedModule()
+ : loader.getUnnamedModule();
}
}
if (mgr == null) {
--- a/jdk/src/jdk.crypto.ucrypto/solaris/native/libj2ucrypto/nativeCrypto.c Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/jdk.crypto.ucrypto/solaris/native/libj2ucrypto/nativeCrypto.c Mon May 09 08:50:20 2016 -0700
@@ -650,6 +650,7 @@
unsigned char *bufIn;
unsigned char *bufOut;
int outLen, rv = 0;
+ jint rc;
context = (crypto_ctx_t *) contextID;
@@ -668,22 +669,20 @@
}
rv = CipherFinal(context, encrypt, bufOut, 0, &outLen);
if (rv) {
- free(context);
- if (outLen != 0) {
- free(bufOut);
- }
- return -rv;
+ rc = -rv;
} else {
- if (bufOut != NULL && outLen != 0) {
+ if (outLen > 0) {
(*env)->SetByteArrayRegion(env, out, outOfs, outLen, (jbyte *)bufOut);
- free(bufOut);
}
- free(context);
- return outLen;
+ rc = outLen;
}
+ free(context);
+ if (bufOut != (unsigned char *)(&outLen)) {
+ free(bufOut);
+ }
+ return rc;
}
-
/*
* Class: com_oracle_security_ucrypto_NativeKey
* Method: nativeFree
--- a/jdk/src/jdk.internal.le/share/classes/jdk/internal/jline/WindowsTerminal.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/jdk.internal.le/share/classes/jdk/internal/jline/WindowsTerminal.java Mon May 09 08:50:20 2016 -0700
@@ -370,7 +370,10 @@
}
} else {
// virtual keycodes: http://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
- // just add support for basic editing keys (no control state, no numpad keys)
+ // xterm escape codes: E. Moy, S. Gildea and T. Dickey, "XTerm Control Sequences":
+ // http://invisible-island.net/xterm/ctlseqs/ctlseqs.html
+ // http://xorg.freedesktop.org/releases/X11R6.8.1/PDF/ctlseqs.pdf
+ // just add support for basic editing keys and function keys
String escapeSequence = null;
switch (keyEvent.keyCode) {
case 0x21: // VK_PRIOR PageUp
@@ -403,6 +406,42 @@
case 0x2E: // VK_DELETE
escapeSequence = escapeSequence(keyEvent.controlKeyState, "\u001B[3~", "\u001B[3;%d~");
break;
+ case 0x70: // VK_F1
+ escapeSequence = escapeSequence(keyEvent.controlKeyState, "\u001BOP", "\u001BO%dP");
+ break;
+ case 0x71: // VK_F2
+ escapeSequence = escapeSequence(keyEvent.controlKeyState, "\u001BOQ", "\u001BO%dQ");
+ break;
+ case 0x72: // VK_F3
+ escapeSequence = escapeSequence(keyEvent.controlKeyState, "\u001BOR", "\u001BO%dR");
+ break;
+ case 0x73: // VK_F4
+ escapeSequence = escapeSequence(keyEvent.controlKeyState, "\u001BOS", "\u001BO%dS");
+ break;
+ case 0x74: // VK_F5
+ escapeSequence = escapeSequence(keyEvent.controlKeyState, "\u001B[15~", "\u001B[15;%d~");
+ break;
+ case 0x75: // VK_F6
+ escapeSequence = escapeSequence(keyEvent.controlKeyState, "\u001B[17~", "\u001B[17;%d~");
+ break;
+ case 0x76: // VK_F7
+ escapeSequence = escapeSequence(keyEvent.controlKeyState, "\u001B[18~", "\u001B[18;%d~");
+ break;
+ case 0x77: // VK_F8
+ escapeSequence = escapeSequence(keyEvent.controlKeyState, "\u001B[19~", "\u001B[19;%d~");
+ break;
+ case 0x78: // VK_F9
+ escapeSequence = escapeSequence(keyEvent.controlKeyState, "\u001B[20~", "\u001B[20;%d~");
+ break;
+ case 0x79: // VK_F10
+ escapeSequence = escapeSequence(keyEvent.controlKeyState, "\u001B[21~", "\u001B[21;%d~");
+ break;
+ case 0x7A: // VK_F11
+ escapeSequence = escapeSequence(keyEvent.controlKeyState, "\u001B[23~", "\u001B[23;%d~");
+ break;
+ case 0x7B: // VK_F12
+ escapeSequence = escapeSequence(keyEvent.controlKeyState, "\u001B[24~", "\u001B[24;%d~");
+ break;
default:
break;
}
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/IncludeLocalesPlugin.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/internal/plugins/IncludeLocalesPlugin.java Mon May 09 08:50:20 2016 -0700
@@ -177,24 +177,28 @@
Pool.Module module = resources.getModule(MODULENAME);
// jdk.localedata module validation
- Set<String> packages = module.getAllPackages();
- if (!packages.containsAll(LOCALEDATA_PACKAGES)) {
- throw new PluginException(PluginsResourceBundle.getMessage(NAME + ".missingpackages") +
- LOCALEDATA_PACKAGES.stream()
- .filter(pn -> !packages.contains(pn))
- .collect(Collectors.joining(",\n\t")));
- }
+ if (module != null) {
+ Set<String> packages = module.getAllPackages();
+ if (!packages.containsAll(LOCALEDATA_PACKAGES)) {
+ throw new PluginException(PluginsResourceBundle.getMessage(NAME + ".missingpackages") +
+ LOCALEDATA_PACKAGES.stream()
+ .filter(pn -> !packages.contains(pn))
+ .collect(Collectors.joining(",\n\t")));
+ }
- available = Stream.concat(module.getContent().stream()
- .map(md -> p.matcher(md.getPath()))
- .filter(m -> m.matches())
- .map(m -> m.group("tag").replaceAll("_", "-")),
- Stream.concat(Stream.of(jaJPJPTag), Stream.of(thTHTHTag)))
- .distinct()
- .sorted()
- .map(IncludeLocalesPlugin::tagToLocale)
- .collect(Collectors.toList());
-
+ available = Stream.concat(module.getContent().stream()
+ .map(md -> p.matcher(md.getPath()))
+ .filter(m -> m.matches())
+ .map(m -> m.group("tag").replaceAll("_", "-")),
+ Stream.concat(Stream.of(jaJPJPTag), Stream.of(thTHTHTag)))
+ .distinct()
+ .sorted()
+ .map(IncludeLocalesPlugin::tagToLocale)
+ .collect(Collectors.toList());
+ } else {
+ // jdk.localedata is not added.
+ throw new PluginException(PluginsResourceBundle.getMessage(NAME + ".localedatanotfound"));
+ }
filtered = filterLocales(available);
if (filtered.isEmpty()) {
--- a/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/resources/plugins.properties Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/jdk.jlink/share/classes/jdk/tools/jlink/resources/plugins.properties Mon May 09 08:50:20 2016 -0700
@@ -89,6 +89,9 @@
include-locales.invalidtag=\
Invalid language tag: %s
+include-locales.localedatanotfound=\
+jdk.localedata module was not specified with --addmods option
+
main.status.ok=Functional.
main.status.not.ok= Not functional.
--- a/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/JarFileSystem.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/JarFileSystem.java Mon May 09 08:50:20 2016 -0700
@@ -52,10 +52,10 @@
private Function<byte[],byte[]> lookup;
@Override
- Entry getEntry(byte[] path) throws IOException {
+ IndexNode getInode(byte[] path) {
// check for an alias to a versioned entry
byte[] versionedPath = lookup.apply(path);
- return versionedPath == null ? super.getEntry(path) : super.getEntry(versionedPath);
+ return versionedPath == null ? super.getInode(path) : super.getInode(versionedPath);
}
JarFileSystem(ZipFileSystemProvider provider, Path zfpath, Map<String,?> env)
@@ -87,7 +87,7 @@
}
private boolean isMultiReleaseJar() {
- try (InputStream is = newInputStream(getBytes("META-INF/MANIFEST.MF"))) {
+ try (InputStream is = newInputStream(getBytes("/META-INF/MANIFEST.MF"))) {
return (new Manifest(is)).getMainAttributes()
.containsKey(new Attributes.Name("Multi-Release"));
// fixme change line above after JarFile integration to contain Attributes.Name.MULTI_RELEASE
@@ -108,7 +108,7 @@
*/
private Function<byte[],byte[]> createVersionedLinks(int version) {
HashMap<IndexNode,byte[]> aliasMap = new HashMap<>();
- getVersionMap(version, getInode(getBytes("META-INF/versions"))).values()
+ getVersionMap(version, getInode(getBytes("/META-INF/versions"))).values()
.forEach(versionNode -> { // for each META-INF/versions/{n} directory
// put all the leaf inodes, i.e. entries, into the alias map
// possibly shadowing lower versioned entries
@@ -176,7 +176,7 @@
* returns foo/bar.class
*/
private byte[] getRootName(IndexNode prefix, IndexNode inode) {
- int offset = prefix.name.length;
+ int offset = prefix.name.length - 1;
byte[] fullName = inode.name;
return Arrays.copyOfRange(fullName, offset, fullName.length);
}
--- a/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileAttributes.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileAttributes.java Mon May 09 08:50:20 2016 -0700
@@ -26,122 +26,17 @@
package jdk.nio.zipfs;
import java.nio.file.attribute.BasicFileAttributes;
-import java.nio.file.attribute.FileTime;
-import java.util.Arrays;
-import java.util.Formatter;
-import static jdk.nio.zipfs.ZipUtils.*;
/**
*
* @author Xueming Shen, Rajendra Gutupalli,Jaya Hangal
*/
-class ZipFileAttributes implements BasicFileAttributes
-{
- private final ZipFileSystem.Entry e;
-
- ZipFileAttributes(ZipFileSystem.Entry e) {
- this.e = e;
- }
-
- ///////// basic attributes ///////////
- @Override
- public FileTime creationTime() {
- if (e.ctime != -1)
- return FileTime.fromMillis(e.ctime);
- return null;
- }
-
- @Override
- public boolean isDirectory() {
- return e.isDir();
- }
-
- @Override
- public boolean isOther() {
- return false;
- }
-
- @Override
- public boolean isRegularFile() {
- return !e.isDir();
- }
-
- @Override
- public FileTime lastAccessTime() {
- if (e.atime != -1)
- return FileTime.fromMillis(e.atime);
- return null;
- }
-
- @Override
- public FileTime lastModifiedTime() {
- return FileTime.fromMillis(e.mtime);
- }
-
- @Override
- public long size() {
- return e.size;
- }
-
- @Override
- public boolean isSymbolicLink() {
- return false;
- }
-
- @Override
- public Object fileKey() {
- return null;
- }
-
- ///////// zip entry attributes ///////////
- public long compressedSize() {
- return e.csize;
- }
-
- public long crc() {
- return e.crc;
- }
-
- public int method() {
- return e.method;
- }
-
- public byte[] extra() {
- if (e.extra != null)
- return Arrays.copyOf(e.extra, e.extra.length);
- return null;
- }
-
- public byte[] comment() {
- if (e.comment != null)
- return Arrays.copyOf(e.comment, e.comment.length);
- return null;
- }
-
- public String toString() {
- StringBuilder sb = new StringBuilder(1024);
- Formatter fm = new Formatter(sb);
- if (creationTime() != null)
- fm.format(" creationTime : %tc%n", creationTime().toMillis());
- else
- fm.format(" creationTime : null%n");
-
- if (lastAccessTime() != null)
- fm.format(" lastAccessTime : %tc%n", lastAccessTime().toMillis());
- else
- fm.format(" lastAccessTime : null%n");
- fm.format(" lastModifiedTime: %tc%n", lastModifiedTime().toMillis());
- fm.format(" isRegularFile : %b%n", isRegularFile());
- fm.format(" isDirectory : %b%n", isDirectory());
- fm.format(" isSymbolicLink : %b%n", isSymbolicLink());
- fm.format(" isOther : %b%n", isOther());
- fm.format(" fileKey : %s%n", fileKey());
- fm.format(" size : %d%n", size());
- fm.format(" compressedSize : %d%n", compressedSize());
- fm.format(" crc : %x%n", crc());
- fm.format(" method : %d%n", method());
- fm.close();
- return sb.toString();
- }
+interface ZipFileAttributes extends BasicFileAttributes {
+ public long compressedSize();
+ public long crc();
+ public int method();
+ public byte[] extra();
+ public byte[] comment();
+ public String toString();
}
--- a/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipFileSystem.java Mon May 09 08:50:20 2016 -0700
@@ -68,36 +68,29 @@
class ZipFileSystem extends FileSystem {
private final ZipFileSystemProvider provider;
- private final ZipPath defaultdir;
- private boolean readOnly = false;
private final Path zfpath;
private final ZipCoder zc;
-
+ private final boolean noExtt; // see readExtra()
+ private final ZipPath rootdir;
// configurable by env map
- private final String defaultDir; // default dir for the file system
- private final String nameEncoding; // default encoding for name/comment
private final boolean useTempFile; // use a temp file for newOS, default
// is to use BAOS for better performance
- private final boolean createNew; // create a new zip if not exists
+ private boolean readOnly = false; // readonly file system
private static final boolean isWindows = AccessController.doPrivileged(
(PrivilegedAction<Boolean>) () -> System.getProperty("os.name")
.startsWith("Windows"));
ZipFileSystem(ZipFileSystemProvider provider,
Path zfpath,
- Map<String, ?> env)
- throws IOException
+ Map<String, ?> env) throws IOException
{
- // configurable env setup
- this.createNew = "true".equals(env.get("create"));
- this.nameEncoding = env.containsKey("encoding") ?
- (String)env.get("encoding") : "UTF-8";
+ // create a new zip if not exists
+ boolean createNew = "true".equals(env.get("create"));
+ // default encoding for name/comment
+ String nameEncoding = env.containsKey("encoding") ?
+ (String)env.get("encoding") : "UTF-8";
+ this.noExtt = "false".equals(env.get("zipinfo-time"));
this.useTempFile = TRUE.equals(env.get("useTempFile"));
- this.defaultDir = env.containsKey("default.dir") ?
- (String)env.get("default.dir") : "/";
- if (this.defaultDir.charAt(0) != '/')
- throw new IllegalArgumentException("default dir should be absolute");
-
this.provider = provider;
this.zfpath = zfpath;
if (Files.notExists(zfpath)) {
@@ -113,10 +106,9 @@
zfpath.getFileSystem().provider().checkAccess(zfpath, AccessMode.READ);
boolean writeable = AccessController.doPrivileged(
(PrivilegedAction<Boolean>) () -> Files.isWritable(zfpath));
- if (!writeable)
- this.readOnly = true;
+ this.readOnly = !writeable;
this.zc = ZipCoder.get(nameEncoding);
- this.defaultdir = new ZipPath(this, getBytes(defaultDir));
+ this.rootdir = new ZipPath(this, new byte[]{'/'});
this.ch = Files.newByteChannel(zfpath, READ);
try {
this.cen = initCEN();
@@ -161,33 +153,29 @@
@Override
public Iterable<Path> getRootDirectories() {
- ArrayList<Path> pathArr = new ArrayList<>();
- pathArr.add(new ZipPath(this, new byte[]{'/'}));
- return pathArr;
+ return List.of(rootdir);
}
- ZipPath getDefaultDir() { // package private
- return defaultdir;
+ ZipPath getRootDir() {
+ return rootdir;
}
@Override
public ZipPath getPath(String first, String... more) {
- String path;
if (more.length == 0) {
- path = first;
- } else {
- StringBuilder sb = new StringBuilder();
- sb.append(first);
- for (String segment: more) {
- if (segment.length() > 0) {
- if (sb.length() > 0)
- sb.append('/');
- sb.append(segment);
+ return new ZipPath(this, getBytes(first));
+ }
+ StringBuilder sb = new StringBuilder();
+ sb.append(first);
+ for (String path : more) {
+ if (path.length() > 0) {
+ if (sb.length() > 0) {
+ sb.append('/');
}
+ sb.append(path);
}
- path = sb.toString();
}
- return new ZipPath(this, getBytes(path));
+ return new ZipPath(this, getBytes(sb.toString()));
}
@Override
@@ -206,14 +194,11 @@
@Override
public Iterable<FileStore> getFileStores() {
- ArrayList<FileStore> list = new ArrayList<>(1);
- list.add(new ZipFileStore(new ZipPath(this, new byte[]{'/'})));
- return list;
+ return List.of(new ZipFileStore(rootdir));
}
private static final Set<String> supportedFileAttributeViews =
- Collections.unmodifiableSet(
- new HashSet<String>(Arrays.asList("basic", "zip")));
+ Set.of("basic", "zip");
@Override
public Set<String> supportedFileAttributeViews() {
@@ -331,12 +316,26 @@
return null;
e = new Entry(inode.name); // pseudo directory
e.method = METHOD_STORED; // STORED for dir
- e.mtime = e.atime = e.ctime = -1;// -1 for all times
+ e.mtime = e.atime = e.ctime = zfsDefaultTimeStamp;
}
} finally {
endRead();
}
- return new ZipFileAttributes(e);
+ return e;
+ }
+
+ void checkAccess(byte[] path) throws IOException {
+ beginRead();
+ try {
+ ensureOpen();
+ // is it necessary to readCEN as a sanity check?
+ if (getInode(path) == null) {
+ throw new NoSuchFileException(toString());
+ }
+
+ } finally {
+ endRead();
+ }
}
void setTimes(byte[] path, FileTime mtime, FileTime atime, FileTime ctime)
@@ -387,14 +386,6 @@
}
}
- private ZipPath toZipPath(byte[] path) {
- // make it absolute
- byte[] p = new byte[path.length + 1];
- p[0] = '/';
- System.arraycopy(path, 0, p, 1, path.length);
- return new ZipPath(this, p);
- }
-
// returns the list of child paths of "path"
Iterator<Path> iteratorOf(byte[] path,
DirectoryStream.Filter<? super Path> filter)
@@ -409,7 +400,7 @@
List<Path> list = new ArrayList<>();
IndexNode child = inode.child;
while (child != null) {
- ZipPath zp = toZipPath(child.name);
+ ZipPath zp = new ZipPath(this, child.name);
if (filter == null || filter.accept(zp))
list.add(zp);
child = child.sibling;
@@ -450,6 +441,7 @@
try {
ensureOpen();
Entry eSrc = getEntry(src); // ensureOpen checked
+
if (eSrc == null)
throw new NoSuchFileException(getString(src));
if (eSrc.isDir()) { // spec says to create dst dir
@@ -679,7 +671,7 @@
}
public SeekableByteChannel truncate(long size)
- throws IOException
+ throws IOException
{
throw new NonWritableChannelException();
}
@@ -879,7 +871,8 @@
private void checkParents(byte[] path) throws IOException {
beginRead();
try {
- while ((path = getParent(path)) != null && path.length != 0) {
+ while ((path = getParent(path)) != null &&
+ path != ROOTPATH) {
if (!inodes.containsKey(IndexNode.keyOf(path))) {
throw new NoSuchFileException(getString(path));
}
@@ -889,15 +882,20 @@
}
}
- private static byte[] ROOTPATH = new byte[0];
+ private static byte[] ROOTPATH = new byte[] { '/' };
private static byte[] getParent(byte[] path) {
+ int off = getParentOff(path);
+ if (off <= 1)
+ return ROOTPATH;
+ return Arrays.copyOf(path, off + 1);
+ }
+
+ private static int getParentOff(byte[] path) {
int off = path.length - 1;
if (off > 0 && path[off] == '/') // isDirectory
off--;
while (off > 0 && path[off] != '/') { off--; }
- if (off <= 0)
- return ROOTPATH;
- return Arrays.copyOf(path, off + 1);
+ return off;
}
private final void beginWrite() {
@@ -941,19 +939,6 @@
close();
}
- private long getDataPos(Entry e) throws IOException {
- if (e.locoff == -1) {
- Entry e2 = getEntry(e.name);
- if (e2 == null)
- throw new ZipException("invalid loc for entry <" + e.name + ">");
- e.locoff = e2.locoff;
- }
- byte[] buf = new byte[LOCHDR];
- if (readFullyAt(buf, 0, buf.length, e.locoff) != buf.length)
- throw new ZipException("invalid loc for entry <" + e.name + ">");
- return locpos + e.locoff + LOCHDR + LOCNAM(buf) + LOCEXT(buf);
- }
-
// Reads len bytes of data from the specified offset into buf.
// Returns the total number of bytes read.
// Each/every byte read from here (except the cen, which is mapped).
@@ -1090,7 +1075,9 @@
if (pos + CENHDR + nlen > limit) {
zerror("invalid CEN header (bad header size)");
}
- byte[] name = Arrays.copyOfRange(cen, pos + CENHDR, pos + CENHDR + nlen);
+ byte[] name = new byte[nlen + 1];
+ System.arraycopy(cen, pos + CENHDR, name, 1, nlen);
+ name[0] = '/';
IndexNode inode = new IndexNode(name, pos);
inodes.put(inode, inode);
// skip ext and comment
@@ -1278,7 +1265,7 @@
if (inode.pos == -1) {
continue; // pseudo directory node
}
- e = Entry.readCEN(this, inode.pos);
+ e = Entry.readCEN(this, inode);
try {
written += copyLOCEntry(e, false, os, written, buf);
elist.add(e);
@@ -1320,13 +1307,6 @@
Files.move(tmpFile, zfpath, REPLACE_EXISTING);
hasUpdate = false; // clear
- /*
- if (isOpen) {
- ch = zfpath.newByteChannel(READ); // re-fresh "ch" and "cen"
- cen = initCEN();
- }
- */
- //System.out.printf("->sync(%s) done!%n", toString());
}
IndexNode getInode(byte[] path) {
@@ -1350,7 +1330,7 @@
return (Entry)inode;
if (inode == null || inode.pos == -1)
return null;
- return Entry.readCEN(this, inode.pos);
+ return Entry.readCEN(this, inode);
}
public void deleteFile(byte[] path, boolean failIfNotExists)
@@ -1432,7 +1412,6 @@
bufSize = 8192;
final long size = e.size;
eis = new InflaterInputStream(eis, getInflater(), (int)bufSize) {
-
private boolean isClosed = false;
public void close() throws IOException {
if (!isClosed) {
@@ -1493,10 +1472,20 @@
this.zfch = zfch;
rem = e.csize;
size = e.size;
- pos = getDataPos(e);
+ pos = e.locoff;
+ if (pos == -1) {
+ Entry e2 = getEntry(e.name);
+ if (e2 == null) {
+ throw new ZipException("invalid loc for entry <" + e.name + ">");
+ }
+ pos = e2.locoff;
+ }
+ pos = -pos; // lazy initialize the real data offset
}
+
public int read(byte b[], int off, int len) throws IOException {
ensureOpen();
+ initDataPos();
if (rem == 0) {
return -1;
}
@@ -1523,6 +1512,7 @@
}
return (int)n;
}
+
public int read() throws IOException {
byte[] b = new byte[1];
if (read(b, 0, 1) == 1) {
@@ -1531,6 +1521,7 @@
return -1;
}
}
+
public long skip(long n) throws IOException {
ensureOpen();
if (n > rem)
@@ -1542,16 +1533,30 @@
}
return n;
}
+
public int available() {
return rem > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) rem;
}
+
public long size() {
return size;
}
+
public void close() {
rem = 0;
streams.remove(this);
}
+
+ private void initDataPos() throws IOException {
+ if (pos <= 0) {
+ pos = -pos + locpos;
+ byte[] buf = new byte[LOCHDR];
+ if (readFullyAt(buf, 0, buf.length, pos) != LOCHDR) {
+ throw new ZipException("invalid loc " + pos + " for entry reading");
+ }
+ pos += LOCHDR + LOCNAM(buf) + LOCEXT(buf);
+ }
+ }
}
class EntryOutputStream extends DeflaterOutputStream
@@ -1701,8 +1706,9 @@
// End of central directory record
static class END {
- int disknum;
- int sdisknum;
+ // these 2 fields are not used by anyone and write() uses "0"
+ // int disknum;
+ // int sdisknum;
int endsub; // endsub
int centot; // 4 bytes
long cenlen; // 4 bytes
@@ -1711,9 +1717,9 @@
byte[] comment;
/* members of Zip64 end of central directory locator */
- int diskNum;
+ // int diskNum;
long endpos;
- int disktot;
+ // int disktot;
void write(OutputStream os, long offset) throws IOException {
boolean hasZip64 = false;
@@ -1776,6 +1782,11 @@
int hashcode; // node is hashable/hashed by its name
int pos = -1; // position in cen table, -1 menas the
// entry does not exists in zip file
+ IndexNode(byte[] name) {
+ name(name);
+ this.pos = -1;
+ }
+
IndexNode(byte[] name, int pos) {
name(name);
this.pos = pos;
@@ -1804,6 +1815,9 @@
if (!(other instanceof IndexNode)) {
return false;
}
+ if (other instanceof ParentLookup) {
+ return ((ParentLookup)other).equals(this);
+ }
return Arrays.equals(name, ((IndexNode)other).name);
}
@@ -1816,17 +1830,16 @@
IndexNode child; // 1st child
}
- static class Entry extends IndexNode {
+ static class Entry extends IndexNode implements ZipFileAttributes {
- static final int CEN = 1; // entry read from cen
- static final int NEW = 2; // updated contents in bytes or file
- static final int FILECH = 3; // fch update in "file"
- static final int COPY = 4; // copy of a CEN entry
+ static final int CEN = 1; // entry read from cen
+ static final int NEW = 2; // updated contents in bytes or file
+ static final int FILECH = 3; // fch update in "file"
+ static final int COPY = 4; // copy of a CEN entry
-
- byte[] bytes; // updated content bytes
- Path file; // use tmp file to store bytes;
- int type = CEN; // default is the entry read from cen
+ byte[] bytes; // updated content bytes
+ Path file; // use tmp file to store bytes;
+ int type = CEN; // default is the entry read from cen
// entry attributes
int version;
@@ -1841,10 +1854,12 @@
byte[] extra;
// cen
- int versionMade;
- int disk;
- int attrs;
- long attrsEx;
+
+ // these fields are not used by anyone and writeCEN uses "0"
+ // int versionMade;
+ // int disk;
+ // int attrs;
+ // long attrsEx;
long locoff;
byte[] comment;
@@ -1875,10 +1890,12 @@
this.csize = e.csize;
this.method = e.method;
this.extra = e.extra;
+ /*
this.versionMade = e.versionMade;
this.disk = e.disk;
this.attrs = e.attrs;
this.attrsEx = e.attrsEx;
+ */
this.locoff = e.locoff;
this.comment = e.comment;
this.type = type;
@@ -1899,19 +1916,19 @@
}
///////////////////// CEN //////////////////////
- static Entry readCEN(ZipFileSystem zipfs, int pos)
+ static Entry readCEN(ZipFileSystem zipfs, IndexNode inode)
throws IOException
{
- return new Entry().cen(zipfs, pos);
+ return new Entry().cen(zipfs, inode);
}
- private Entry cen(ZipFileSystem zipfs, int pos)
+ private Entry cen(ZipFileSystem zipfs, IndexNode inode)
throws IOException
{
byte[] cen = zipfs.cen;
+ int pos = inode.pos;
if (!cenSigAt(cen, pos))
zerror("invalid CEN header (bad signature)");
- versionMade = CENVEM(cen, pos);
version = CENVER(cen, pos);
flag = CENFLG(cen, pos);
method = CENHOW(cen, pos);
@@ -1922,13 +1939,16 @@
int nlen = CENNAM(cen, pos);
int elen = CENEXT(cen, pos);
int clen = CENCOM(cen, pos);
+ /*
+ versionMade = CENVEM(cen, pos);
disk = CENDSK(cen, pos);
attrs = CENATT(cen, pos);
attrsEx = CENATX(cen, pos);
+ */
locoff = CENOFF(cen, pos);
-
pos += CENHDR;
- name(Arrays.copyOfRange(cen, pos, pos + nlen));
+ this.name = inode.name;
+ this.hashcode = inode.hashcode;
pos += nlen;
if (elen > 0) {
@@ -1955,7 +1975,8 @@
boolean foundExtraTime = false; // if time stamp NTFS, EXTT present
// confirm size/length
- int nlen = (name != null) ? name.length : 0;
+
+ int nlen = (name != null) ? name.length - 1 : 0; // name has [0] as "slash"
int elen = (extra != null) ? extra.length : 0;
int eoff = 0;
int clen = (comment != null) ? comment.length : 0;
@@ -2004,7 +2025,7 @@
writeInt(os, crc); // crc-32
writeInt(os, csize0); // compressed size
writeInt(os, size0); // uncompressed size
- writeShort(os, name.length);
+ writeShort(os, nlen);
writeShort(os, elen + elen64 + elenNTFS + elenEXTT);
if (comment != null) {
@@ -2016,7 +2037,7 @@
writeShort(os, 0); // internal file attributes (unused)
writeInt(os, 0); // external file attributes (unused)
writeInt(os, locoff0); // relative offset of local header
- writeBytes(os, name);
+ writeBytes(os, name, 1, nlen);
if (elen64 != 0) {
writeShort(os, EXTID_ZIP64);// Zip64 extra
writeShort(os, elen64 - 4); // size of "this" extra block
@@ -2086,8 +2107,9 @@
int nlen = LOCNAM(buf);
int elen = LOCEXT(buf);
- name = new byte[nlen];
- if (zipfs.readFullyAt(name, 0, nlen, pos + LOCHDR) != nlen) {
+ name = new byte[nlen + 1];
+ name[0] = '/';
+ if (zipfs.readFullyAt(name, 1, nlen, pos + LOCHDR) != nlen) {
throw new ZipException("loc: name reading failed");
}
if (elen > 0) {
@@ -2130,12 +2152,10 @@
return this;
}
- int writeLOC(OutputStream os)
- throws IOException
- {
+ int writeLOC(OutputStream os) throws IOException {
writeInt(os, LOCSIG); // LOC header signature
int version = version();
- int nlen = (name != null) ? name.length : 0;
+ int nlen = (name != null) ? name.length - 1 : 0; // [0] is slash
int elen = (extra != null) ? extra.length : 0;
boolean foundExtraTime = false; // if extra timestamp present
int eoff = 0;
@@ -2192,9 +2212,9 @@
elenEXTT += 4;
}
}
- writeShort(os, name.length);
+ writeShort(os, nlen);
writeShort(os, elen + elen64 + elenNTFS + elenEXTT);
- writeBytes(os, name);
+ writeBytes(os, name, 1, nlen);
if (elen64 != 0) {
writeShort(os, EXTID_ZIP64);
writeShort(os, 16);
@@ -2229,13 +2249,11 @@
if (extra != null) {
writeBytes(os, extra);
}
- return LOCHDR + name.length + elen + elen64 + elenNTFS + elenEXTT;
+ return LOCHDR + nlen + elen + elen64 + elenNTFS + elenEXTT;
}
// Data Descriptior
- int writeEXT(OutputStream os)
- throws IOException
- {
+ int writeEXT(OutputStream os) throws IOException {
writeInt(os, EXTSIG); // EXT header signature
writeInt(os, crc); // crc-32
if (csize >= ZIP64_MINVAL || size >= ZIP64_MINVAL) {
@@ -2301,7 +2319,15 @@
break;
case EXTID_EXTT:
// spec says the Extened timestamp in cen only has mtime
- // need to read the loc to get the extra a/ctime
+ // need to read the loc to get the extra a/ctime, if flag
+ // "zipinfo-time" is not specified to false;
+ // there is performance cost (move up to loc and read) to
+ // access the loc table foreach entry;
+ if (zipfs.noExtt) {
+ if (sz == 5)
+ mtime = unixToJavaTime(LG(extra, pos + 1));
+ break;
+ }
byte[] buf = new byte[LOCHDR];
if (zipfs.readFullyAt(buf, 0, buf.length , locoff)
!= buf.length)
@@ -2309,7 +2335,6 @@
if (!locSigAt(buf, 0))
throw new ZipException("loc: wrong sig ->"
+ Long.toString(getSig(buf, 0), 16));
-
int locElen = LOCEXT(buf);
if (locElen < 9) // EXTT is at lease 9 bytes
break;
@@ -2354,6 +2379,96 @@
else
extra = null;
}
+
+ ///////// basic file attributes ///////////
+ @Override
+ public FileTime creationTime() {
+ return FileTime.fromMillis(ctime == -1 ? mtime : ctime);
+ }
+
+ @Override
+ public boolean isDirectory() {
+ return isDir();
+ }
+
+ @Override
+ public boolean isOther() {
+ return false;
+ }
+
+ @Override
+ public boolean isRegularFile() {
+ return !isDir();
+ }
+
+ @Override
+ public FileTime lastAccessTime() {
+ return FileTime.fromMillis(atime == -1 ? mtime : atime);
+ }
+
+ @Override
+ public FileTime lastModifiedTime() {
+ return FileTime.fromMillis(mtime);
+ }
+
+ @Override
+ public long size() {
+ return size;
+ }
+
+ @Override
+ public boolean isSymbolicLink() {
+ return false;
+ }
+
+ @Override
+ public Object fileKey() {
+ return null;
+ }
+
+ ///////// zip entry attributes ///////////
+ public long compressedSize() {
+ return csize;
+ }
+
+ public long crc() {
+ return crc;
+ }
+
+ public int method() {
+ return method;
+ }
+
+ public byte[] extra() {
+ if (extra != null)
+ return Arrays.copyOf(extra, extra.length);
+ return null;
+ }
+
+ public byte[] comment() {
+ if (comment != null)
+ return Arrays.copyOf(comment, comment.length);
+ return null;
+ }
+
+ public String toString() {
+ StringBuilder sb = new StringBuilder(1024);
+ Formatter fm = new Formatter(sb);
+ fm.format(" creationTime : %tc%n", creationTime().toMillis());
+ fm.format(" lastAccessTime : %tc%n", lastAccessTime().toMillis());
+ fm.format(" lastModifiedTime: %tc%n", lastModifiedTime().toMillis());
+ fm.format(" isRegularFile : %b%n", isRegularFile());
+ fm.format(" isDirectory : %b%n", isDirectory());
+ fm.format(" isSymbolicLink : %b%n", isSymbolicLink());
+ fm.format(" isOther : %b%n", isOther());
+ fm.format(" fileKey : %s%n", fileKey());
+ fm.format(" size : %d%n", size());
+ fm.format(" compressedSize : %d%n", compressedSize());
+ fm.format(" crc : %x%n", crc());
+ fm.format(" method : %d%n", method());
+ fm.close();
+ return sb.toString();
+ }
}
private static class ExChannelCloser {
@@ -2379,25 +2494,8 @@
// implemented below.
private IndexNode root;
- private void addToTree(IndexNode inode, HashSet<IndexNode> dirs) {
- if (dirs.contains(inode)) {
- return;
- }
- IndexNode parent;
- byte[] name = inode.name;
- byte[] pname = getParent(name);
- if (inodes.containsKey(LOOKUPKEY.as(pname))) {
- parent = inodes.get(LOOKUPKEY);
- } else { // pseudo directory entry
- parent = new IndexNode(pname, -1);
- inodes.put(parent, parent);
- }
- addToTree(parent, dirs);
- inode.sibling = parent.child;
- parent.child = inode;
- if (name[name.length -1] == '/')
- dirs.add(inode);
- }
+ // default time stamp for pseudo entries
+ private long zfsDefaultTimeStamp = System.currentTimeMillis();
private void removeFromTree(IndexNode inode) {
IndexNode parent = inodes.get(LOOKUPKEY.as(getParent(inode.name)));
@@ -2417,15 +2515,69 @@
}
}
+ // purely for parent lookup, so we don't have to copy the parent
+ // name every time
+ static class ParentLookup extends IndexNode {
+ int len;
+ ParentLookup() {}
+
+ final ParentLookup as(byte[] name, int len) { // as a lookup "key"
+ name(name, len);
+ return this;
+ }
+
+ void name(byte[] name, int len) {
+ this.name = name;
+ this.len = len;
+ // calculate the hashcode the same way as Arrays.hashCode() does
+ int result = 1;
+ for (int i = 0; i < len; i++)
+ result = 31 * result + name[i];
+ this.hashcode = result;
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (!(other instanceof IndexNode)) {
+ return false;
+ }
+ byte[] oname = ((IndexNode)other).name;
+ return Arrays.equals(name, 0, len,
+ oname, 0, oname.length);
+ }
+
+ }
+
private void buildNodeTree() throws IOException {
beginWrite();
try {
- HashSet<IndexNode> dirs = new HashSet<>();
- IndexNode root = new IndexNode(ROOTPATH, -1);
+ IndexNode root = new IndexNode(ROOTPATH);
+ IndexNode[] nodes = inodes.keySet().toArray(new IndexNode[0]);
inodes.put(root, root);
- dirs.add(root);
- for (IndexNode node : inodes.keySet().toArray(new IndexNode[0])) {
- addToTree(node, dirs);
+ ParentLookup lookup = new ParentLookup();
+ for (IndexNode node : nodes) {
+ IndexNode parent;
+ while (true) {
+ int off = getParentOff(node.name);
+ if (off <= 1) { // parent is root
+ node.sibling = root.child;
+ root.child = node;
+ break;
+ }
+ lookup = lookup.as(node.name, off + 1);
+ if (inodes.containsKey(lookup)) {
+ parent = inodes.get(lookup);
+ node.sibling = parent.child;
+ parent.child = node;
+ break;
+ }
+ // add new pseudo directory entry
+ parent = new IndexNode(Arrays.copyOf(node.name, off + 1));
+ inodes.put(parent, parent);
+ node.sibling = parent.child;
+ parent.child = node;
+ node = parent;
+ }
}
} finally {
endWrite();
--- a/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipPath.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/src/jdk.zipfs/share/classes/jdk/nio/zipfs/ZipPath.java Mon May 09 08:50:20 2016 -0700
@@ -41,7 +41,7 @@
* @author Xueming Shen, Rajendra Gutupalli,Jaya Hangal
*/
-class ZipPath implements Path {
+final class ZipPath implements Path {
private final ZipFileSystem zfs;
private final byte[] path;
@@ -64,7 +64,7 @@
@Override
public ZipPath getRoot() {
if (this.isAbsolute())
- return new ZipPath(zfs, new byte[]{path[0]});
+ return zfs.getRootDir();
else
return null;
}
@@ -145,7 +145,15 @@
@Override
public ZipPath toRealPath(LinkOption... options) throws IOException {
- ZipPath realPath = new ZipPath(zfs, getResolvedPath()).toAbsolutePath();
+ ZipPath realPath;
+ byte[] resolved = getResolvedPath();
+ // resolved is always absolute and normalized
+ if (resolved == path) {
+ realPath = this;
+ } else {
+ realPath = new ZipPath(zfs, resolved, true);
+ realPath.resolved = resolved;
+ }
realPath.checkAccess();
return realPath;
}
@@ -159,20 +167,11 @@
if (isAbsolute()) {
return this;
} else {
- //add / bofore the existing path
- byte[] defaultdir = zfs.getDefaultDir().path;
- int defaultlen = defaultdir.length;
- boolean endsWith = (defaultdir[defaultlen - 1] == '/');
- byte[] t = null;
- if (endsWith)
- t = new byte[defaultlen + path.length];
- else
- t = new byte[defaultlen + 1 + path.length];
- System.arraycopy(defaultdir, 0, t, 0, defaultlen);
- if (!endsWith)
- t[defaultlen++] = '/';
- System.arraycopy(path, 0, t, defaultlen, path.length);
- return new ZipPath(zfs, t, true); // normalized
+ // add '/' before the existing path
+ byte[] tmp = new byte[path.length + 1];
+ System.arraycopy(path, 0, tmp, 1, path.length);
+ tmp[0] = '/';
+ return new ZipPath(zfs, tmp, true); // normalized
}
}
@@ -217,11 +216,15 @@
public Path relativize(Path other) {
final ZipPath o = checkPath(other);
if (o.equals(this))
- return new ZipPath(getFileSystem(), new byte[0], true);
- if (/* this.getFileSystem() != o.getFileSystem() || */
- this.isAbsolute() != o.isAbsolute()) {
+ return new ZipPath(zfs, new byte[0], true);
+ if (this.path.length == 0)
+ return o;
+ if (this.zfs != o.zfs || this.isAbsolute() != o.isAbsolute())
throw new IllegalArgumentException();
- }
+ if (this.path.length == 1 && this.path[0] == '/')
+ return new ZipPath(zfs,
+ Arrays.copyOfRange(o.path, 1, o.path.length),
+ true);
int mc = this.getNameCount();
int oc = o.getNameCount();
int n = Math.min(mc, oc);
@@ -249,7 +252,7 @@
System.arraycopy(o.path, o.offsets[i],
result, pos,
o.path.length - o.offsets[i]);
- return new ZipPath(getFileSystem(), result);
+ return new ZipPath(zfs, result);
}
@Override
@@ -265,26 +268,29 @@
@Override
public ZipPath resolve(Path other) {
final ZipPath o = checkPath(other);
- if (o.isAbsolute())
+ int tlen = this.path.length;
+ if (tlen == 0 || o.isAbsolute())
return o;
+ int olen = o.path.length;
+ if (olen == 0)
+ return this;
byte[] resolved = null;
- if (this.path[path.length - 1] == '/') {
- resolved = new byte[path.length + o.path.length];
- System.arraycopy(path, 0, resolved, 0, path.length);
- System.arraycopy(o.path, 0, resolved, path.length, o.path.length);
+ if (this.path[tlen - 1] == '/') {
+ resolved = new byte[tlen + olen];
+ System.arraycopy(path, 0, resolved, 0, tlen);
+ System.arraycopy(o.path, 0, resolved, tlen, olen);
} else {
- resolved = new byte[path.length + 1 + o.path.length];
- System.arraycopy(path, 0, resolved, 0, path.length);
- resolved[path.length] = '/';
- System.arraycopy(o.path, 0, resolved, path.length + 1, o.path.length);
+ resolved = new byte[tlen + 1 + olen];
+ System.arraycopy(path, 0, resolved, 0, tlen);
+ resolved[tlen] = '/';
+ System.arraycopy(o.path, 0, resolved, tlen + 1, olen);
}
return new ZipPath(zfs, resolved);
}
@Override
public Path resolveSibling(Path other) {
- if (other == null)
- throw new NullPointerException();
+ Objects.requireNonNull(other, "other");
Path parent = getParent();
return (parent == null) ? other : parent.resolve(other);
}
@@ -330,22 +336,22 @@
@Override
public ZipPath resolve(String other) {
- return resolve(getFileSystem().getPath(other));
+ return resolve(zfs.getPath(other));
}
@Override
public final Path resolveSibling(String other) {
- return resolveSibling(getFileSystem().getPath(other));
+ return resolveSibling(zfs.getPath(other));
}
@Override
public final boolean startsWith(String other) {
- return startsWith(getFileSystem().getPath(other));
+ return startsWith(zfs.getPath(other));
}
@Override
public final boolean endsWith(String other) {
- return endsWith(getFileSystem().getPath(other));
+ return endsWith(zfs.getPath(other));
}
@Override
@@ -357,8 +363,7 @@
}
private ZipPath checkPath(Path path) {
- if (path == null)
- throw new NullPointerException();
+ Objects.requireNonNull(path, "path");
if (!(path instanceof ZipPath))
throw new ProviderMismatchException();
return (ZipPath) path;
@@ -410,8 +415,6 @@
r = getResolved();
else
r = toAbsolutePath().getResolvedPath();
- if (r[0] == '/')
- r = Arrays.copyOfRange(r, 1, r.length);
resolved = r;
}
return resolved;
@@ -425,13 +428,10 @@
byte prevC = 0;
for (int i = 0; i < path.length; i++) {
byte c = path[i];
- if (c == '\\')
+ if (c == '\\' || c == '\u0000')
return normalize(path, i);
if (c == (byte)'/' && prevC == '/')
return normalize(path, i - 1);
- if (c == '\u0000')
- throw new InvalidPathException(zfs.getString(path),
- "Path: nul character not allowed");
prevC = c;
}
return path;
@@ -465,12 +465,10 @@
// Remove DotSlash(./) and resolve DotDot (..) components
private byte[] getResolved() {
- if (path.length == 0)
- return path;
for (int i = 0; i < path.length; i++) {
- byte c = path[i];
- if (c == (byte)'.')
+ if (path[i] == (byte)'.') {
return resolve0();
+ }
}
return path;
}
@@ -612,7 +610,6 @@
/////////////////////////////////////////////////////////////////////
-
void createDirectory(FileAttribute<?>... attrs)
throws IOException
{
@@ -749,20 +746,13 @@
throw new UnsupportedOperationException();
}
}
- ZipFileAttributes attrs = zfs.getFileAttributes(getResolvedPath());
- if (attrs == null && (path.length != 1 || path[0] != '/'))
- throw new NoSuchFileException(toString());
- if (w) {
- if (zfs.isReadOnly())
- throw new AccessDeniedException(toString());
+ zfs.checkAccess(getResolvedPath());
+ if ((w && zfs.isReadOnly()) || x) {
+ throw new AccessDeniedException(toString());
}
- if (x)
- throw new AccessDeniedException(toString());
}
boolean exists() {
- if (path.length == 1 && path[0] == '/')
- return true;
try {
return zfs.exists(getResolvedPath());
} catch (IOException x) {}
--- a/jdk/test/ProblemList.txt Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/ProblemList.txt Mon May 09 08:50:20 2016 -0700
@@ -181,6 +181,8 @@
java/nio/charset/coders/BashStreams.java 8149712 generic-all
+java/nio/file/WatchService/DeleteInterference.java 8156511 linux-all
+
############################################################################
# jdk_rmi
--- a/jdk/test/TEST.groups Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/TEST.groups Mon May 09 08:50:20 2016 -0700
@@ -29,7 +29,6 @@
:jdk_lang \
-java/lang/ProcessHandle/TreeTest.java \
:jdk_util \
- -java/util/WeakHashMap/GCDuringIteration.java \
-java/util/concurrent/ThreadPoolExecutor/ConfigChanges.java \
-java/util/concurrent/forkjoin/FJExceptionTableLeak.java \
sun/nio/cs/ISO8859x.java \
@@ -39,7 +38,6 @@
tier2 = \
java/lang/ProcessHandle/TreeTest.java \
- java/util/WeakHashMap/GCDuringIteration.java \
java/util/concurrent/ThreadPoolExecutor/ConfigChanges.java \
java/util/concurrent/forkjoin/FJExceptionTableLeak.java \
:jdk_io \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/com/sun/crypto/provider/Mac/HmacSHA512.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,79 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import jdk.testlibrary.Asserts;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import java.util.Arrays;
+
+/**
+ * @test
+ * @bug 8051408
+ * @library /lib/testlibrary
+ * @summary testing HmacSHA512/224 and HmacSHA512/256.
+ */
+public class HmacSHA512 {
+ public static void main(String[] args) throws Exception {
+
+ Mac mac;
+
+ // Test vectors obtained from
+ // https://groups.google.com/d/msg/sci.crypt/OolWgsgQD-8/IUR2KhCcfEkJ
+ mac = Mac.getInstance("HmacSHA512/224");
+ mac.init(new SecretKeySpec(xeh("4a656665"), "HmacSHA512/224"));
+ mac.update("what do ya want for nothing?".getBytes());
+ Asserts.assertTrue(Arrays.equals(mac.doFinal(),
+ xeh("4a530b31a79ebcce36916546317c45f247d83241dfb818fd37254bde")));
+
+ mac = Mac.getInstance("HmacSHA512/256");
+ mac.init(new SecretKeySpec(xeh("4a656665"), "HmacSHA512/256"));
+ mac.update("what do ya want for nothing?".getBytes());
+ Asserts.assertTrue(Arrays.equals(mac.doFinal(),
+ xeh("6df7b24630d5ccb2ee335407081a87188c221489768fa2020513b2d593359456")));
+
+ mac = Mac.getInstance("HmacSHA512/224");
+ mac.init(new SecretKeySpec(xeh("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"),
+ "HmacSHA512/224"));
+ mac.update("Hi There".getBytes());
+ Asserts.assertTrue(Arrays.equals(mac.doFinal(),
+ xeh("b244ba01307c0e7a8ccaad13b1067a4cf6b961fe0c6a20bda3d92039")));
+
+ mac = Mac.getInstance("HmacSHA512/256");
+ mac.init(new SecretKeySpec(xeh("0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b"),
+ "HmacSHA512/256"));
+ mac.update("Hi There".getBytes());
+ Asserts.assertTrue(Arrays.equals(mac.doFinal(),
+ xeh("9f9126c3d9c3c330d760425ca8a217e31feae31bfe70196ff81642b868402eab")));
+ }
+
+ static byte[] xeh(String in) {
+ in = in.replaceAll(" ", "");
+ int len = in.length() / 2;
+ byte[] out = new byte[len];
+ for (int i = 0; i < len; i++) {
+ out[i] = (byte)Integer.parseInt(in.substring(i * 2, i * 2 + 2), 16);
+ }
+ return out;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Graphics2D/DrawString/AntialiasedTextArtifact.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8015070
+ * @summary Tests for artifacts around the edges of anti-aliased text
+ * drawn over translucent background color.
+ */
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.image.BufferedImage;
+import java.io.IOException;
+
+public class AntialiasedTextArtifact {
+ /* Image dimensions */
+ private static final int TEST_IMAGE_WIDTH = 2800;
+ private static final int TEST_IMAGE_HEIGHT = 100;
+ private static final String TEST_STRING =
+ "The quick brown fox jumps over the lazy dog. 0123456789.";
+
+ /*
+ * The artifacts appear when text is drawn ontop of translucent
+ * background. In other words, a background with alpha channel.
+ * Hence we test the algorithm for image types that contain either
+ * straight alpha channel or pre-multiplied alpha channel. In
+ * addition we test the images with other common pixel formats.
+ */
+ private static final int[] TYPES = {BufferedImage.TYPE_INT_ARGB,
+ BufferedImage.TYPE_INT_ARGB_PRE,
+ BufferedImage.TYPE_4BYTE_ABGR,
+ BufferedImage.TYPE_4BYTE_ABGR_PRE,
+ BufferedImage.TYPE_INT_RGB,
+ BufferedImage.TYPE_INT_BGR,
+ BufferedImage.TYPE_3BYTE_BGR};
+
+ public static void main(String[] args) throws IOException {
+ /* Iterate over different image types */
+ for (int type : TYPES) {
+ BufferedImage testImg = getBufferedImage(type);
+
+ /* Draw anti-aliased string and check for artifacts */
+ drawAntialiasedString(testImg);
+ checkArtifact(testImg);
+ }
+ }
+
+ private static BufferedImage getBufferedImage(int imageType) {
+ /* Create a Graphics2D object from the given image type */
+ BufferedImage image = new BufferedImage(TEST_IMAGE_WIDTH,
+ TEST_IMAGE_HEIGHT,
+ imageType);
+ return image;
+ }
+
+ private static void drawAntialiasedString(BufferedImage image) {
+ /* Create Graphics2D object */
+ Graphics2D graphics = (Graphics2D) image.getGraphics();
+
+ /* Fill the image with translucent color */
+ graphics.setColor(new Color(127, 127, 127, 127));
+ graphics.fillRect(0, 0, TEST_IMAGE_WIDTH, TEST_IMAGE_HEIGHT);
+
+ /* Drawstring with Antialiasing hint */
+ graphics.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
+ RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+ Font font = new Font("Verdana" , Font.PLAIN, 60);
+ graphics.setFont(font);
+ graphics.setColor(new Color(255, 0, 0));
+ graphics.drawString(TEST_STRING, 10, 75);
+ graphics.dispose();
+ }
+
+ private static void checkArtifact(BufferedImage image) throws IOException {
+ int componentMask = 0xff;
+ int colorThreshold = 200;
+ int rowIndex = 0;
+ int colIndex = 0;
+
+ /* Loop through every pixel to check for possible artifact */
+ for (rowIndex = 0; rowIndex < image.getHeight(); rowIndex++) {
+ for (colIndex = 0; colIndex < image.getWidth(); colIndex++) {
+ /*
+ * API: getRGB(x,y) returns color in INT_ARGB color space.
+ * Extract individual color components with a simple mask.
+ */
+ int colorValue = image.getRGB(colIndex, rowIndex);
+ int colorComponent1 = colorValue & componentMask;
+ int colorComponent2 = (colorValue>>8) & componentMask;
+ int colorComponent3 = (colorValue>>16) & componentMask;
+
+ /*
+ * Artifacts are predominantly a subjective decision based on
+ * the quality of the rendered image content. However, in the
+ * current use-case, the artifacts around the edges of the anti
+ * aliased text appear like spots of white pixels without any
+ * relation to the color of foreground text or the background
+ * translucent shape.
+ *
+ * To identify the artifact pixels, each color component from
+ * the testImage is compared with a constant threshold. The
+ * component threshold has been set based on observation from
+ * different experiments on mulitple Java versions.
+ */
+ if (colorComponent1 >= colorThreshold
+ && colorComponent2 >= colorThreshold
+ && colorComponent3 >= colorThreshold) {
+ /* Artifact has been noticed. Report error. */
+ throw new RuntimeException("Test Failed.");
+ }
+ }
+ }
+ }
+}
--- a/jdk/test/java/lang/Class/getDeclaredField/FieldSetAccessibleTest.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/lang/Class/getDeclaredField/FieldSetAccessibleTest.java Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,11 +23,13 @@
import java.io.FilePermission;
import java.io.IOException;
+import java.io.UncheckedIOException;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;
import java.lang.reflect.Module;
import java.lang.reflect.Modifier;
import java.lang.reflect.InaccessibleObjectException;
+import java.lang.reflect.Layer;
import java.lang.reflect.ReflectPermission;
import java.net.URI;
import java.nio.file.FileSystem;
@@ -68,7 +70,6 @@
*/
public class FieldSetAccessibleTest {
- static final List<String> skipped = new ArrayList<>();
static final List<String> cantread = new ArrayList<>();
static final List<String> failed = new ArrayList<>();
static final AtomicLong classCount = new AtomicLong();
@@ -210,7 +211,6 @@
long millis = (elapsed % 1000_000_000) / 1000_000;
long nanos = elapsed % 1000_000;
System.out.println("Unreadable path elements: " + cantread);
- System.out.println("Skipped path elements: " + skipped);
System.out.println("Failed path elements: " + failed);
printSummary(secs, millis, nanos);
@@ -247,37 +247,26 @@
static class ClassNameJrtStreamBuilder implements Iterable<String>{
final FileSystem jrt;
- final List<Path> roots = new ArrayList<>();
+ final Path root;
ClassNameJrtStreamBuilder() {
jrt = FileSystems.getFileSystem(URI.create("jrt:/"));
- for (Path root : jrt.getRootDirectories()) {
- roots.add(root);
- }
- }
-
- Stream<String> build() {
- return roots.stream().flatMap(this::toStream)
- .filter(x -> x.getNameCount() > 2)
- .map( x-> x.subpath(2, x.getNameCount()))
- .map( x -> x.toString())
- .filter(s -> s.endsWith(".class") && !s.endsWith("module-info.class"));
+ root = jrt.getPath("/modules");
}
@Override
public Iterator<String> iterator() {
- return build().iterator();
- }
-
- private Stream<Path> toStream(Path root) {
try {
- return Files.walk(root);
+ return Files.walk(root)
+ .filter(p -> p.getNameCount() > 2)
+ .filter(p -> Layer.boot().findModule(p.getName(1).toString()).isPresent())
+ .map(p -> p.subpath(2, p.getNameCount()))
+ .map(p -> p.toString())
+ .filter(s -> s.endsWith(".class") && !s.endsWith("module-info.class"))
+ .iterator();
} catch(IOException x) {
- x.printStackTrace(System.err);
- skipped.add(root.toString());
+ throw new UncheckedIOException("Unable to walk \"/modules\"", x);
}
- return Collections.<Path>emptyList().stream();
}
-
}
// Test with or without a security manager
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/instrument/BootstrapClassPathAgent.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package p;
+
+import java.io.*;
+import java.lang.instrument.ClassFileTransformer;
+import java.lang.instrument.Instrumentation;
+import java.lang.reflect.Module;
+import java.security.ProtectionDomain;
+
+public class BootstrapClassPathAgent {
+
+ public static void premain(String args, Instrumentation inst) {
+ System.out.println("agent loader=" + BootstrapClassPathAgent.class.getClassLoader());
+ inst.addTransformer(new MyTransformer());
+ }
+
+ static class MyTransformer implements ClassFileTransformer {
+
+ public byte[] transform(Module module,
+ String className,
+ Class<?> classBeingRedefined,
+ ProtectionDomain protectionDomain,
+ byte[] classfileBuffer) {
+ System.out.println(className + ", module=" + module);
+ return null;
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/instrument/BootstrapClassPathSetUp.sh Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,68 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+if [ "${TESTSRC}" = "" ]
+then
+ echo "TESTSRC not set. Test cannot execute. Failed."
+ exit 1
+fi
+echo "TESTSRC=${TESTSRC}"
+
+if [ "${TESTJAVA}" = "" ]
+then
+ echo "TESTJAVA not set. Test cannot execute. Failed."
+ exit 1
+fi
+echo "TESTJAVA=${TESTJAVA}"
+
+if [ "${COMPILEJAVA}" = "" ]
+then
+ COMPILEJAVA="${TESTJAVA}"
+fi
+echo "COMPILEJAVA=${COMPILEJAVA}"
+
+if [ "${TESTCLASSES}" = "" ]
+then
+ echo "TESTCLASSES not set. Test cannot execute. Failed."
+ exit 1
+fi
+
+echo "TESTCLASSES=${TESTCLASSES}"
+echo "CLASSPATH=${CLASSPATH}"
+
+JAVAC="${COMPILEJAVA}/bin/javac -g"
+JAR="${COMPILEJAVA}/bin/jar"
+
+mkdir agentclasses
+touch agent.mf
+echo "Manifest-Version: 1.0" >> agent.mf
+echo "Boot-Class-Path: agent.jar" >> agent.mf
+echo "Premain-Class: p.BootstrapClassPathAgent" >> agent.mf
+
+cp ${TESTSRC}/BootstrapClassPathAgent.java BootstrapClassPathAgent.java
+${JAVAC} ${TESTJAVACOPTS} ${TESTTOOLVMOPTS} -d agentclasses BootstrapClassPathAgent.java
+echo "JAR=${JAR}"
+${JAR} ${TESTTOOLVMOPTS} cvfm agent.jar agent.mf -C agentclasses .
+rm -f BootstrapClassPathAgent.class BootstrapClassPathAgent.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/lang/instrument/BootstrapClassPathTest.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 8156147
+ * @summary simple test for the Boot-Class-Path agent
+ *
+ * @run build BootstrapClassPathTest
+ * @run shell BootstrapClassPathSetUp.sh
+ * @run main/othervm -javaagent:agent.jar BootstrapClassPathTest BootstrapClassPathTest
+ */
+
+import java.io.*;
+import java.lang.instrument.*;
+import java.lang.reflect.Module;
+import java.security.ProtectionDomain;
+
+public class BootstrapClassPathTest {
+
+ public static void main (String[] args) {
+ }
+}
--- a/jdk/test/java/net/httpclient/QuickResponses.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/QuickResponses.java Mon May 09 08:50:20 2016 -0700
@@ -71,6 +71,7 @@
public static void main(String[] args) throws Exception {
server = new Server(0);
URI uri = new URI(server.getURL());
+ server.start();
HttpRequest request = HttpRequest.create(uri)
.GET();
@@ -79,7 +80,6 @@
Server.Connection s1 = server.activity();
s1.send(entireResponse());
-
HttpResponse r = cf1.join();
if (r.statusCode()!= 200 || !r.body(HttpResponse.asString()).equals(responses[0]))
throw new RuntimeException("Failed on first response");
--- a/jdk/test/java/net/httpclient/Server.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/Server.java Mon May 09 08:50:20 2016 -0700
@@ -21,8 +21,6 @@
* questions.
*/
-//package javaapplication16;
-
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -32,6 +30,7 @@
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
+import java.util.Iterator;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
@@ -44,13 +43,16 @@
public class Server extends Thread {
ServerSocket ss;
- List<Connection> sockets;
+ private final List<Connection> sockets;
+ private final List<Connection> removals;
+ private final List<Connection> additions;
AtomicInteger counter = new AtomicInteger(0);
// waits up to 20 seconds for something to happen
// dont use this unless certain activity coming.
public Connection activity() {
for (int i = 0; i < 80 * 100; i++) {
+ doRemovalsAndAdditions();
for (Connection c : sockets) {
if (c.poll()) {
return c;
@@ -59,11 +61,26 @@
try {
Thread.sleep(250);
} catch (InterruptedException e) {
+ e.printStackTrace();
}
}
return null;
}
+ private void doRemovalsAndAdditions() {
+ if (removals.isEmpty() && additions.isEmpty())
+ return;
+ Iterator<Connection> i = removals.iterator();
+ while (i.hasNext())
+ sockets.remove(i.next());
+ removals.clear();
+
+ i = additions.iterator();
+ while (i.hasNext())
+ sockets.add(i.next());
+ additions.clear();
+ }
+
// clears all current connections on Server.
public void reset() {
for (Connection c : sockets) {
@@ -84,7 +101,6 @@
incoming = new ArrayBlockingQueue<>(100);
setName("Server-Connection");
setDaemon(true);
- start();
}
final Socket socket;
final int id;
@@ -210,16 +226,17 @@
try {
socket.close();
} catch (IOException e) {}
- sockets.remove(this);
+ removals.add(this);
}
}
Server(int port) throws IOException {
ss = new ServerSocket(port);
sockets = Collections.synchronizedList(new LinkedList<>());
+ removals = Collections.synchronizedList(new LinkedList<>());
+ additions = Collections.synchronizedList(new LinkedList<>());
setName("Test-Server");
setDaemon(true);
- start();
}
Server() throws IOException {
@@ -238,6 +255,7 @@
try {
ss.close();
} catch (IOException e) {
+ e.printStackTrace();
}
for (Connection c : sockets) {
c.close();
@@ -250,8 +268,10 @@
try {
Socket s = ss.accept();
Connection c = new Connection(s);
- sockets.add(c);
+ c.start();
+ additions.add(c);
} catch (IOException e) {
+ e.printStackTrace();
}
}
}
--- a/jdk/test/java/net/httpclient/SplitResponse.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/SplitResponse.java Mon May 09 08:50:20 2016 -0700
@@ -68,6 +68,7 @@
public static void main(String[] args) throws Exception {
server = new Server(0);
URI uri = new URI(server.getURL());
+ server.start();
HttpRequest request;
HttpResponse r;
--- a/jdk/test/java/net/httpclient/http2/BasicTest.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/http2/BasicTest.java Mon May 09 08:50:20 2016 -0700
@@ -98,6 +98,7 @@
simpleTest(true);
streamTest(false);
streamTest(true);
+ paramsTest();
Thread.sleep(1000 * 4);
} finally {
httpServer.stop();
@@ -180,6 +181,30 @@
System.err.println("DONE");
}
+ static void paramsTest() throws Exception {
+ Http2TestServer server = new Http2TestServer(true, 0, (t -> {
+ SSLSession s = t.getSSLSession();
+ String prot = s.getProtocol();
+ if (prot.equals("TLSv1.2")) {
+ t.sendResponseHeaders(200, -1);
+ } else {
+ System.err.printf("Protocols =%s\n", prot);
+ t.sendResponseHeaders(500, -1);
+ }
+ }), exec, sslContext);
+ server.start();
+ int port = server.getAddress().getPort();
+ URI u = new URI("https://127.0.0.1:"+port+"/foo");
+ HttpClient client = getClient();
+ HttpRequest req = client.request(u)
+ .GET();
+ HttpResponse resp = req.response();
+ int stat = resp.statusCode();
+ if (stat != 200) {
+ throw new RuntimeException("paramsTest failed "
+ + Integer.toString(stat));
+ }
+ }
static void simpleTest(boolean secure) throws Exception {
URI uri = getURI(secure);
--- a/jdk/test/java/net/httpclient/http2/java.httpclient/java/net/http/Http2TestExchange.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/http2/java.httpclient/java/net/http/Http2TestExchange.java Mon May 09 08:50:20 2016 -0700
@@ -5,6 +5,7 @@
import java.io.IOException;
import java.net.URI;
import java.net.InetSocketAddress;
+import javax.net.ssl.SSLSession;
public class Http2TestExchange {
@@ -14,6 +15,7 @@
final String method;
final InputStream is;
final BodyOutputStream os;
+ final SSLSession sslSession;
final int streamid;
final boolean pushAllowed;
final Http2TestServerConnection conn;
@@ -24,6 +26,7 @@
Http2TestExchange(int streamid, String method, HttpHeadersImpl reqheaders,
HttpHeadersImpl rspheaders, URI uri, InputStream is,
+ SSLSession sslSession,
BodyOutputStream os, Http2TestServerConnection conn, boolean pushAllowed) {
this.reqheaders = reqheaders;
this.rspheaders = rspheaders;
@@ -32,6 +35,7 @@
this.is = is;
this.streamid = streamid;
this.os = os;
+ this.sslSession = sslSession;
this.pushAllowed = pushAllowed;
this.conn = conn;
this.server = conn.server;
@@ -53,6 +57,10 @@
return method;
}
+ public SSLSession getSSLSession() {
+ return sslSession;
+ }
+
public void close() {
try {
is.close();
--- a/jdk/test/java/net/httpclient/http2/java.httpclient/java/net/http/Http2TestServerConnection.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/http2/java.httpclient/java/net/http/Http2TestServerConnection.java Mon May 09 08:50:20 2016 -0700
@@ -31,6 +31,8 @@
import java.io.OutputStream;
import java.net.Socket;
import java.net.URI;
+import javax.net.ssl.SSLSession;
+import javax.net.ssl.SSLSocket;
import java.net.URISyntaxException;
import static java.net.http.SettingsFrame.HEADER_TABLE_SIZE;
import java.nio.ByteBuffer;
@@ -355,7 +357,8 @@
URI uri = new URI(us);
boolean pushAllowed = clientSettings.getParameter(SettingsFrame.ENABLE_PUSH) == 1;
Http2TestExchange exchange = new Http2TestExchange(streamid, method,
- headers, rspheaders, uri, bis, bos, this, pushAllowed);
+ headers, rspheaders, uri, bis, getSSLSession(),
+ bos, this, pushAllowed);
// give to user
handler.handle(exchange);
@@ -368,6 +371,12 @@
}
}
+ private SSLSession getSSLSession() {
+ if (! (socket instanceof SSLSocket))
+ return null;
+ SSLSocket ssl = (SSLSocket)socket;
+ return ssl.getSession();
+ }
// Runs in own thread
@SuppressWarnings({"rawtypes","unchecked"})
--- a/jdk/test/java/net/httpclient/security/0.policy Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/security/0.policy Mon May 09 08:50:20 2016 -0700
@@ -2,8 +2,7 @@
grant {
// permissions common to all tests
- permission java.util.PropertyPermission "test.src", "read";
- permission java.util.PropertyPermission "test.classes", "read";
+ permission java.util.PropertyPermission "*", "read";
permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
permission java.net.NetPermission "getDefaultHttpClient";
permission java.lang.RuntimePermission "modifyThread";
--- a/jdk/test/java/net/httpclient/security/1.policy Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/security/1.policy Mon May 09 08:50:20 2016 -0700
@@ -1,8 +1,7 @@
// Policy 1
grant {
// permissions common to all tests
- permission java.util.PropertyPermission "test.src", "read";
- permission java.util.PropertyPermission "test.classes", "read";
+ permission java.util.PropertyPermission "*", "read";
permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
permission java.net.NetPermission "getDefaultHttpClient";
permission java.lang.RuntimePermission "modifyThread";
@@ -13,7 +12,7 @@
// permissions specific to this test
- permission java.net.URLPermission "http://127.0.0.1:*/files/foo.txt", "GET";
+ permission java.net.URLPermission "http://127.0.0.1:${port.number}/files/foo.txt", "GET";
};
// For proxy only. Not being tested
--- a/jdk/test/java/net/httpclient/security/10.policy Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/security/10.policy Mon May 09 08:50:20 2016 -0700
@@ -1,8 +1,7 @@
// Policy 10
grant {
// permissions common to all tests
- permission java.util.PropertyPermission "test.src", "read";
- permission java.util.PropertyPermission "test.classes", "read";
+ permission java.util.PropertyPermission "*", "read";
permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
permission java.net.NetPermission "getDefaultHttpClient";
permission java.lang.RuntimePermission "modifyThread";
@@ -12,7 +11,7 @@
permission java.lang.RuntimePermission "createClassLoader";
// permissions specific to this test
- permission java.net.URLPermission "http://127.0.0.1:*/files/foo.txt", "GET:*";
+ permission java.net.URLPermission "http://127.0.0.1:${port.number}/files/foo.txt", "GET:*";
};
// For proxy only. Not being tested
--- a/jdk/test/java/net/httpclient/security/11.policy Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/security/11.policy Mon May 09 08:50:20 2016 -0700
@@ -1,8 +1,7 @@
// Policy 11
grant {
// permissions common to all tests
- permission java.util.PropertyPermission "test.src", "read";
- permission java.util.PropertyPermission "test.classes", "read";
+ permission java.util.PropertyPermission "*", "read";
permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
permission java.net.NetPermission "getDefaultHttpClient";
permission java.lang.RuntimePermission "modifyThread";
@@ -12,8 +11,8 @@
permission java.lang.RuntimePermission "createClassLoader";
// permissions specific to this test
- permission java.net.URLPermission "http://127.0.0.1:*/files/foo.txt", "GET:*";
- permission java.net.URLPermission "socket://127.0.0.1:27301", "CONNECT";
+ permission java.net.URLPermission "http://127.0.0.1:${port.number}/files/foo.txt", "GET:*";
+ permission java.net.URLPermission "socket://127.0.0.1:${port.number1}", "CONNECT";
};
--- a/jdk/test/java/net/httpclient/security/12.policy Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/security/12.policy Mon May 09 08:50:20 2016 -0700
@@ -1,8 +1,7 @@
// Policy 11
grant {
// permissions common to all tests
- permission java.util.PropertyPermission "test.src", "read";
- permission java.util.PropertyPermission "test.classes", "read";
+ permission java.util.PropertyPermission "*", "read";
permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
permission java.net.NetPermission "getDefaultHttpClient";
permission java.lang.RuntimePermission "modifyThread";
@@ -12,8 +11,8 @@
permission java.lang.RuntimePermission "createClassLoader";
// permissions specific to this test
- permission java.net.URLPermission "http://127.0.0.1:*/files/foo.txt", "GET:*";
- permission java.net.URLPermission "socket://127.0.0.1:27301", "CONNECT";
+ permission java.net.URLPermission "http://127.0.0.1:${port.number}/files/foo.txt", "GET:*";
+ permission java.net.URLPermission "socket://127.0.0.1:${port.number1}", "CONNECT";
};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/httpclient/security/14.policy Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,23 @@
+// Policy 14
+grant {
+ // permissions common to all tests
+ permission java.util.PropertyPermission "*", "read";
+ permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
+ permission java.net.NetPermission "getDefaultHttpClient";
+ permission java.lang.RuntimePermission "modifyThread";
+ permission java.util.logging.LoggingPermission "control", "";
+ permission java.net.SocketPermission "localhost:1024-", "accept,listen";
+ permission java.io.FilePermission "${test.src}${/}docs${/}-", "read";
+ permission java.lang.RuntimePermission "createClassLoader";
+
+
+ // permissions specific to this test
+ permission java.net.URLPermission "http://127.0.0.1:*/files/foo.txt", "GET";
+};
+
+// For proxy only. Not being tested
+grant codebase "file:${test.classes}/proxydir/-" {
+ permission java.net.SocketPermission "localhost:1024-", "accept,listen,connect";
+ permission java.net.SocketPermission "127.0.0.1:1024-", "connect,resolve";
+};
+
--- a/jdk/test/java/net/httpclient/security/15.policy Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/security/15.policy Mon May 09 08:50:20 2016 -0700
@@ -1,8 +1,7 @@
// Policy 11
grant {
// permissions common to all tests
- permission java.util.PropertyPermission "test.src", "read";
- permission java.util.PropertyPermission "test.classes", "read";
+ permission java.util.PropertyPermission "*", "read";
permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
permission java.net.NetPermission "getDefaultHttpClient";
permission java.lang.RuntimePermission "modifyThread";
@@ -13,7 +12,6 @@
// permissions specific to this test
permission java.net.URLPermission "http://127.0.0.1:*/files/foo.txt", "GET:*";
- permission java.net.URLPermission "socket://127.0.0.1:27301", "CONNECT";
// Test checks for this explicitly
permission java.net.RuntimePermission "foobar";
--- a/jdk/test/java/net/httpclient/security/2.policy Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/security/2.policy Mon May 09 08:50:20 2016 -0700
@@ -1,8 +1,7 @@
// Policy 2
grant {
// permissions common to all tests
- permission java.util.PropertyPermission "test.src", "read";
- permission java.util.PropertyPermission "test.classes", "read";
+ permission java.util.PropertyPermission "*", "read";
permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
permission java.net.NetPermission "getDefaultHttpClient";
permission java.lang.RuntimePermission "modifyThread";
--- a/jdk/test/java/net/httpclient/security/3.policy Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/security/3.policy Mon May 09 08:50:20 2016 -0700
@@ -1,8 +1,7 @@
// Policy 3
grant {
// permissions common to all tests
- permission java.util.PropertyPermission "test.src", "read";
- permission java.util.PropertyPermission "test.classes", "read";
+ permission java.util.PropertyPermission "*", "read";
permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
permission java.net.NetPermission "getDefaultHttpClient";
permission java.lang.RuntimePermission "modifyThread";
--- a/jdk/test/java/net/httpclient/security/4.policy Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/security/4.policy Mon May 09 08:50:20 2016 -0700
@@ -1,8 +1,7 @@
// Policy 4
grant {
// permissions common to all tests
- permission java.util.PropertyPermission "test.src", "read";
- permission java.util.PropertyPermission "test.classes", "read";
+ permission java.util.PropertyPermission "*", "read";
permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
permission java.net.NetPermission "getDefaultHttpClient";
permission java.lang.RuntimePermission "modifyThread";
--- a/jdk/test/java/net/httpclient/security/5.policy Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/security/5.policy Mon May 09 08:50:20 2016 -0700
@@ -1,8 +1,7 @@
// Policy 5
grant {
// permissions common to all tests
- permission java.util.PropertyPermission "test.src", "read";
- permission java.util.PropertyPermission "test.classes", "read";
+ permission java.util.PropertyPermission "*", "read";
permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
permission java.net.NetPermission "getDefaultHttpClient";
permission java.lang.RuntimePermission "modifyThread";
--- a/jdk/test/java/net/httpclient/security/6.policy Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/security/6.policy Mon May 09 08:50:20 2016 -0700
@@ -1,8 +1,7 @@
// Policy 6
grant {
// permissions common to all tests
- permission java.util.PropertyPermission "test.src", "read";
- permission java.util.PropertyPermission "test.classes", "read";
+ permission java.util.PropertyPermission "*", "read";
permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
permission java.net.NetPermission "getDefaultHttpClient";
permission java.lang.RuntimePermission "modifyThread";
--- a/jdk/test/java/net/httpclient/security/7.policy Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/security/7.policy Mon May 09 08:50:20 2016 -0700
@@ -1,8 +1,7 @@
// Policy 7
grant {
// permissions common to all tests
- permission java.util.PropertyPermission "test.src", "read";
- permission java.util.PropertyPermission "test.classes", "read";
+ permission java.util.PropertyPermission "*", "read";
permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
permission java.net.NetPermission "getDefaultHttpClient";
permission java.lang.RuntimePermission "modifyThread";
--- a/jdk/test/java/net/httpclient/security/8.policy Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/security/8.policy Mon May 09 08:50:20 2016 -0700
@@ -1,8 +1,7 @@
// Policy 8
grant {
// permissions common to all tests
- permission java.util.PropertyPermission "test.src", "read";
- permission java.util.PropertyPermission "test.classes", "read";
+ permission java.util.PropertyPermission "*", "read";
permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
permission java.net.NetPermission "getDefaultHttpClient";
permission java.lang.RuntimePermission "modifyThread";
--- a/jdk/test/java/net/httpclient/security/9.policy Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/security/9.policy Mon May 09 08:50:20 2016 -0700
@@ -1,8 +1,7 @@
// Policy 9
grant {
// permissions common to all tests
- permission java.util.PropertyPermission "test.src", "read";
- permission java.util.PropertyPermission "test.classes", "read";
+ permission java.util.PropertyPermission "*", "read";
permission java.io.FilePermission "${test.classes}${/}-", "read,write,delete";
permission java.net.NetPermission "getDefaultHttpClient";
permission java.lang.RuntimePermission "modifyThread";
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/net/httpclient/security/Driver.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ */
+
+/**
+ * @test
+ * @bug 8087112
+ * @library /lib/testlibrary/
+ * @build jdk.testlibrary.SimpleSSLContext jdk.testlibrary.Utils
+ * @compile ../../../../com/sun/net/httpserver/LogFilter.java
+ * @compile ../../../../com/sun/net/httpserver/FileServerHandler.java
+ * @compile ../ProxyServer.java
+ * @build Security
+ *
+ * @run driver/timeout=60 Driver
+ */
+
+/**
+ * driver required for allocating free portnumbers and putting this number
+ * into security policy file used in some tests.
+ *
+ * The tests are in Security.java and port number supplied in -Dport.number
+ * and -Dport.number1 for tests that require a second free port
+ */
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.io.*;
+import java.net.*;
+
+import jdk.testlibrary.OutputAnalyzer;
+import jdk.testlibrary.Utils;
+
+/**
+ * Driver for tests
+ */
+public class Driver {
+
+ public static void main(String[] args) throws Throwable {
+ System.out.println("Starting Driver");
+ runtest("1.policy", "1");
+ runtest("10.policy", "10");
+ runtest("11.policy", "11");
+ runtest("12.policy", "12");
+ System.out.println("DONE");
+ }
+
+ static class Logger extends Thread {
+ private final OutputStream ps;
+ private final InputStream stdout;
+
+ Logger(String cmdLine, Process p, String dir) throws IOException {
+ super();
+ setDaemon(true);
+ cmdLine = "Command line = [" + cmdLine + "]";
+ stdout = p.getInputStream();
+ File f = File.createTempFile("debug", ".txt", new File(dir));
+ ps = new FileOutputStream(f);
+ ps.write(cmdLine.getBytes());
+ ps.flush();
+ }
+
+ public void run() {
+ try {
+ byte[] buf = new byte[128];
+ int c;
+ while ((c = stdout.read(buf)) != -1) {
+ ps.write(buf, 0, c);
+ ps.flush();
+ }
+ ps.close();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public static void runtest(String policy, String testnum) throws Throwable {
+
+ String testJdk = System.getProperty("test.jdk", "?");
+ String testSrc = System.getProperty("test.src", "?");
+ String testClassPath = System.getProperty("test.class.path", "?");
+ String testClasses = System.getProperty("test.classes", "?");
+ String sep = System.getProperty("file.separator", "?");
+ String javaCmd = testJdk + sep + "bin" + sep + "java";
+ int retval = 10; // 10 is special exit code denoting a bind error
+ // in which case, we retry
+ while (retval == 10) {
+ List<String> cmd = new ArrayList<>();
+ cmd.add(javaCmd);
+ cmd.add("-Dtest.jdk=" + testJdk);
+ cmd.add("-Dtest.src=" + testSrc);
+ cmd.add("-Dtest.classes=" + testClasses);
+ cmd.add("-Djava.security.manager");
+ cmd.add("-Djava.security.policy=" + testSrc + sep + policy);
+ cmd.add("-Dport.number=" + Integer.toString(Utils.getFreePort()));
+ cmd.add("-Dport.number1=" + Integer.toString(Utils.getFreePort()));
+ cmd.add("-cp");
+ cmd.add(testClassPath);
+ cmd.add("Security");
+ cmd.add(testnum);
+
+ ProcessBuilder processBuilder = new ProcessBuilder(cmd)
+ .redirectOutput(ProcessBuilder.Redirect.PIPE)
+ .redirectErrorStream(true);
+
+ String cmdLine = cmd.stream().collect(Collectors.joining(" "));
+ Process child = processBuilder.start();
+ Logger log = new Logger(cmdLine, child, testClasses);
+ log.start();
+ retval = child.waitFor();
+ System.out.println("retval = " + retval);
+ }
+ if (retval != 0) {
+ Thread.sleep(2000);
+ throw new RuntimeException("Non zero return value");
+ }
+ }
+}
--- a/jdk/test/java/net/httpclient/security/Security.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/net/httpclient/security/Security.java Mon May 09 08:50:20 2016 -0700
@@ -32,7 +32,6 @@
* @compile ../ProxyServer.java
*
* @run main/othervm/secure=java.lang.SecurityManager/policy=0.policy Security 0
- * @run main/othervm/secure=java.lang.SecurityManager/policy=1.policy Security 1
* @run main/othervm/secure=java.lang.SecurityManager/policy=2.policy Security 2
* @run main/othervm/secure=java.lang.SecurityManager/policy=3.policy Security 3
* @run main/othervm/secure=java.lang.SecurityManager/policy=4.policy Security 4
@@ -41,14 +40,13 @@
* @run main/othervm/secure=java.lang.SecurityManager/policy=7.policy Security 7
* @run main/othervm/secure=java.lang.SecurityManager/policy=8.policy Security 8
* @run main/othervm/secure=java.lang.SecurityManager/policy=9.policy Security 9
- * @run main/othervm/secure=java.lang.SecurityManager/policy=10.policy Security 10
- * @run main/othervm/secure=java.lang.SecurityManager/policy=11.policy Security 11
- * @run main/othervm/secure=java.lang.SecurityManager/policy=12.policy Security 12
* @run main/othervm/secure=java.lang.SecurityManager/policy=0.policy Security 13
- * @run main/othervm/secure=java.lang.SecurityManager/policy=1.policy Security 14
+ * @run main/othervm/secure=java.lang.SecurityManager/policy=14.policy Security 14
* @run main/othervm/secure=java.lang.SecurityManager/policy=15.policy Security 15
*/
+// Tests 1, 10, 11 and 12 executed from Driver
+
import com.sun.net.httpserver.*;
import java.io.IOException;
import java.io.InputStream;
@@ -78,7 +76,7 @@
static HttpServer s1 = null;
static ExecutorService executor=null;
- static int port;
+ static int port, proxyPort;
static HttpClient client;
static String httproot, fileuri, fileroot, redirectroot;
static List<HttpClient> clients = new LinkedList<>();
@@ -136,6 +134,9 @@
if (!dest.toFile().exists()) {
System.out.printf("moving %s to %s\n", src.toString(), dest.toString());
Files.move(src, dest, StandardCopyOption.REPLACE_EXISTING);
+ } else if (src.toFile().exists()) {
+ System.out.printf("%s exists, deleting %s\n", dest.toString(), src.toString());
+ Files.delete(src);
} else {
System.out.printf("NOT moving %s to %s\n", src.toString(), dest.toString());
}
@@ -225,15 +226,15 @@
}),
// (10) policy has permission for destination URL but not for proxy
test(false, () -> { //Policy 10
- directProxyTest(27208, true);
+ directProxyTest(proxyPort, true);
}),
// (11) policy has permission for both destination URL and proxy
test(true, () -> { //Policy 11
- directProxyTest(27301, true);
+ directProxyTest(proxyPort, true);
}),
// (12) policy has permission for both destination URL and proxy
test(false, () -> { //Policy 11
- directProxyTest(28301, false);
+ directProxyTest(proxyPort, false);
}),
// (13) async version of test 0
test(false, () -> { // Policy 0
@@ -350,6 +351,8 @@
throw new RuntimeException("Failed");
}
System.out.println (policy + " succeeded as expected");
+ } catch (BindException e) {
+ System.exit(10);
} catch (SecurityException e) {
if (succeeds) {
System.out.println("FAILED");
@@ -362,8 +365,12 @@
}
public static void main(String[] args) throws Exception {
- initServer();
- setupProxy();
+ try {
+ initServer();
+ setupProxy();
+ } catch (BindException e) {
+ System.exit(10);
+ }
fileroot = System.getProperty ("test.src")+ "/docs";
int testnum = Integer.parseInt(args[0]);
String policy = args[0];
@@ -382,33 +389,25 @@
runtest(tr.test, policy, tr.result);
} finally {
s1.stop(0);
- //executor.shutdownNow();
+ executor.shutdownNow();
for (HttpClient client : clients)
client.executorService().shutdownNow();
}
}
- // create Http Server on port range below. So, we can
- HttpServer createServer() {
- HttpServer server;
- for (int i=25800; i<26800; i++) {
- InetSocketAddress a = new InetSocketAddress(i);
- try {
- server = HttpServer.create(a, 0);
- return server;
- } catch (IOException e) {}
- }
- return null;
- }
+ public static void initServer() throws Exception {
+ String portstring = System.getProperty("port.number");
+ port = portstring != null ? Integer.parseInt(portstring) : 0;
+ portstring = System.getProperty("port.number1");
+ proxyPort = portstring != null ? Integer.parseInt(portstring) : 0;
- public static void initServer() throws Exception {
Logger logger = Logger.getLogger("com.sun.net.httpserver");
ConsoleHandler ch = new ConsoleHandler();
logger.setLevel(Level.ALL);
ch.setLevel(Level.ALL);
logger.addHandler(ch);
String root = System.getProperty ("test.src")+ "/docs";
- InetSocketAddress addr = new InetSocketAddress (0);
+ InetSocketAddress addr = new InetSocketAddress (port);
s1 = HttpServer.create (addr, 0);
if (s1 instanceof HttpsServer) {
throw new RuntimeException ("should not be httpsserver");
@@ -423,7 +422,13 @@
s1.setExecutor (executor);
s1.start();
- port = s1.getAddress().getPort();
+ if (port == 0)
+ port = s1.getAddress().getPort();
+ else {
+ if (s1.getAddress().getPort() != port)
+ throw new RuntimeException("Error wrong port");
+ System.out.println("Port was assigned by Driver");
+ }
System.out.println("HTTP server port = " + port);
httproot = "http://127.0.0.1:" + port + "/files/";
redirectroot = "http://127.0.0.1:" + port + "/redirect/";
--- a/jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/nio/channels/AsynchronousSocketChannel/Basic.java Mon May 09 08:50:20 2016 -0700
@@ -25,7 +25,7 @@
* @bug 4607272 6842687 6878369 6944810 7023403
* @summary Unit test for AsynchronousSocketChannel
* @run main Basic -skipSlowConnectTest
- * @key randomness
+ * @key randomness intermittent
*/
import java.nio.ByteBuffer;
--- a/jdk/test/java/nio/channels/FileChannel/InterruptMapDeadlock.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/nio/channels/FileChannel/InterruptMapDeadlock.java Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,6 +23,7 @@
/* @test
* @bug 8024833
+ * @key intermittent
* @summary Tests interruption of threads mapping sections of a file channel in
* an attempt to deadlock due to nesting of begin calls.
*/
--- a/jdk/test/java/nio/charset/spi/basic.sh Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/nio/charset/spi/basic.sh Mon May 09 08:50:20 2016 -0700
@@ -113,7 +113,7 @@
av="$av -Djava.security.manager -Djava.security.policy==$TESTSRC/default-pol";;
cp-policy) css="$CSS FOO";
av="$av -Djava.security.manager
- -Djava.security.policy==$TESTSRC/charsetProvider.sp";;
+ -Djava.security.policy=$TESTSRC/charsetProvider.sp";;
esac
if (set -x; $JAVA ${TESTVMOPTS} $av Test $css) 2>&1; then
continue;
--- a/jdk/test/java/nio/charset/spi/default-pol Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/nio/charset/spi/default-pol Mon May 09 08:50:20 2016 -0700
@@ -1,3 +1,11 @@
+grant codeBase "jrt:/jdk.charsets" {
+ permission java.io.FilePermission "${java.home}/-", "read";
+ permission java.util.PropertyPermission "os.name", "read";
+ permission java.util.PropertyPermission "sun.nio.cs.map", "read";
+ permission java.lang.RuntimePermission "charsetProvider";
+ permission java.lang.RuntimePermission "accessClassInPackage.jdk.internal.misc";
+ permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.cs";
+};
// default permissions granted to all domains
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/security/SecureRandom/DrbgParametersSpec.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8051408
+ * @summary Make sure DrbgParameters coded as specified
+ * @library /test/lib/share/classes
+ */
+
+import jdk.test.lib.Asserts;
+
+import java.security.DrbgParameters;
+import java.util.Arrays;
+
+import static java.security.DrbgParameters.Capability.*;
+
+public class DrbgParametersSpec {
+
+ public static void main(String args[]) throws Exception {
+
+ byte[] p, np1, np2;
+
+ // Capability
+ Asserts.assertTrue(PR_AND_RESEED.supportsPredictionResistance());
+ Asserts.assertTrue(PR_AND_RESEED.supportsReseeding());
+ Asserts.assertFalse(RESEED_ONLY.supportsPredictionResistance());
+ Asserts.assertTrue(RESEED_ONLY.supportsReseeding());
+ Asserts.assertFalse(NONE.supportsPredictionResistance());
+ Asserts.assertFalse(NONE.supportsReseeding());
+
+ // Instantiation
+ p = "Instantiation".getBytes();
+ DrbgParameters.Instantiation ins = DrbgParameters
+ .instantiation(192, RESEED_ONLY, p);
+ Asserts.assertTrue(ins.getStrength() == 192);
+ Asserts.assertTrue(ins.getCapability() == RESEED_ONLY);
+ np1 = ins.getPersonalizationString();
+ np2 = ins.getPersonalizationString();
+ // Getter outputs have same content but not the same object
+ Asserts.assertTrue(Arrays.equals(np1, p));
+ Asserts.assertTrue(Arrays.equals(np2, p));
+ Asserts.assertNE(np1, np2);
+ // Changes to original input has no affect on object
+ p[0] = 'X';
+ np2 = ins.getPersonalizationString();
+ Asserts.assertTrue(Arrays.equals(np1, np2));
+
+ ins = DrbgParameters.instantiation(-1, NONE, null);
+ Asserts.assertNull(ins.getPersonalizationString());
+
+ // NextBytes
+ p = "NextBytes".getBytes();
+ DrbgParameters.NextBytes nb = DrbgParameters
+ .nextBytes(192, true, p);
+ Asserts.assertTrue(nb.getStrength() == 192);
+ Asserts.assertTrue(nb.getPredictionResistance());
+ np1 = nb.getAdditionalInput();
+ np2 = nb.getAdditionalInput();
+ // Getter outputs have same content but not the same object
+ Asserts.assertTrue(Arrays.equals(np1, p));
+ Asserts.assertTrue(Arrays.equals(np2, p));
+ Asserts.assertNE(np1, np2);
+ // Changes to original input has no affect on object
+ p[0] = 'X';
+ np2 = nb.getAdditionalInput();
+ Asserts.assertTrue(Arrays.equals(np1, np2));
+
+ // Reseed
+ p = "Reseed".getBytes();
+ DrbgParameters.Reseed rs = DrbgParameters
+ .reseed(true, p);
+ Asserts.assertTrue(rs.getPredictionResistance());
+ np1 = rs.getAdditionalInput();
+ np2 = rs.getAdditionalInput();
+ // Getter outputs have same content but not the same object
+ Asserts.assertTrue(Arrays.equals(np1, p));
+ Asserts.assertTrue(Arrays.equals(np2, p));
+ Asserts.assertNE(np1, np2);
+ // Changes to original input has no affect on object
+ p[0] = 'X';
+ np2 = rs.getAdditionalInput();
+ Asserts.assertTrue(Arrays.equals(np1, np2));
+ }
+}
--- a/jdk/test/java/security/SecureRandom/Serialize.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/security/SecureRandom/Serialize.java Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -31,16 +31,73 @@
public class Serialize {
- public static void main(String args[]) throws IOException {
+ public static void main(String args[]) throws Exception {
+ for (String alg: new String[]{
+ "SHA1PRNG", "DRBG", "Hash_DRBG", "HMAC_DRBG", "CTR_DRBG",
+ "Hash_DRBG,SHA-512,192,pr_and_reseed"}) {
+
+ System.out.println("Testing " + alg);
+ SecureRandom s1;
+
+ // A SecureRandom can be s11ned and des11ned at any time.
- FileOutputStream fos = new FileOutputStream("t.tmp");
- ObjectOutputStream oos = new ObjectOutputStream(fos);
+ // Brand new.
+ s1 = getInstance(alg);
+ revive(s1).nextInt();
+ if (alg.contains("DRBG")) {
+ revive(s1).reseed();
+ }
+
+ // Used
+ s1 = getInstance(alg);
+ s1.nextInt(); // state set
+ revive(s1).nextInt();
+ if (alg.contains("DRBG")) {
+ revive(s1).reseed();
+ }
- SecureRandom secRandom = new SecureRandom();
+ // Automatically reseeded
+ s1 = getInstance(alg);
+ if (alg.contains("DRBG")) {
+ s1.reseed();
+ }
+ revive(s1).nextInt();
+ if (alg.contains("DRBG")) {
+ revive(s1).reseed();
+ }
+
+ // Manually seeded
+ s1 = getInstance(alg);
+ s1.setSeed(1L);
+ revive(s1).nextInt();
+ if (alg.contains("DRBG")) {
+ revive(s1).reseed();
+ }
+ }
+ }
- // serialize and write out
- oos.writeObject(secRandom);
- oos.flush();
- oos.close();
+ private static SecureRandom getInstance(String alg) throws Exception {
+ if (alg.equals("SHA1PRNG") || alg.equals("DRBG")) {
+ return SecureRandom.getInstance(alg);
+ } else {
+ String old = Security.getProperty("securerandom.drbg.config");
+ try {
+ Security.setProperty("securerandom.drbg.config", alg);
+ return SecureRandom.getInstance("DRBG");
+ } finally {
+ Security.setProperty("securerandom.drbg.config", old);
+ }
+ }
+ }
+
+ private static SecureRandom revive(SecureRandom oldOne) throws Exception {
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ new ObjectOutputStream(bout).writeObject(oldOne);
+ SecureRandom newOne = (SecureRandom) new ObjectInputStream(
+ new ByteArrayInputStream(bout.toByteArray())).readObject();
+ if (!oldOne.toString().equals(newOne.toString())) {
+ throw new Exception(newOne + " is not " + oldOne);
+ }
+ return newOne;
}
}
--- a/jdk/test/java/time/tck/java/time/format/TCKDateTimeFormatterBuilder.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/time/tck/java/time/format/TCKDateTimeFormatterBuilder.java Mon May 09 08:50:20 2016 -0700
@@ -72,6 +72,7 @@
import java.text.ParsePosition;
import java.time.LocalDate;
import java.time.LocalDateTime;
+import java.time.LocalTime;
import java.time.YearMonth;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
@@ -793,7 +794,101 @@
DateTimeFormatter df = new DateTimeFormatterBuilder().appendPattern("g").toFormatter();
assertEquals(LocalDate.of(y, m, d).format(df), expected);
}
+ //----------------------------------------------------------------------
+ @DataProvider(name="dayOfYearFieldValues")
+ Object[][] data_dayOfYearFieldValues() {
+ return new Object[][] {
+ {2016, 1, 1, "D", "1"},
+ {2016, 1, 31, "D", "31"},
+ {2016, 1, 1, "DD", "01"},
+ {2016, 1, 31, "DD", "31"},
+ {2016, 4, 9, "DD", "100"},
+ {2016, 1, 1, "DDD", "001"},
+ {2016, 1, 31, "DDD", "031"},
+ {2016, 4, 9, "DDD", "100"},
+ };
+ }
+ @Test(dataProvider="dayOfYearFieldValues")
+ public void test_dayOfYearFieldValues(int y, int m, int d, String pattern, String expected) throws Exception {
+ DateTimeFormatter df = new DateTimeFormatterBuilder().appendPattern(pattern).toFormatter();
+ assertEquals(LocalDate.of(y, m, d).format(df), expected);
+ }
+
+ @DataProvider(name="dayOfYearFieldAdjacentParsingValues")
+ Object[][] data_dayOfYearFieldAdjacentParsingValues() {
+ return new Object[][] {
+ {"20160281015", LocalDateTime.of(2016, 1, 28, 10, 15)},
+ {"20161001015", LocalDateTime.of(2016, 4, 9, 10, 15)},
+ };
+ }
+
+ @Test(dataProvider="dayOfYearFieldAdjacentParsingValues")
+ public void test_dayOfYearFieldAdjacentValueParsing(String input, LocalDateTime expected) {
+ DateTimeFormatter df = new DateTimeFormatterBuilder().appendPattern("yyyyDDDHHmm").toFormatter();
+ LocalDateTime actual = LocalDateTime.parse(input, df);
+ assertEquals(actual, expected);
+ }
+
+ @Test(expectedExceptions = DateTimeParseException.class)
+ public void test_dayOfYearFieldInvalidValue() {
+ DateTimeFormatter.ofPattern("DDD").parse("1234");
+ }
+
+ @Test(expectedExceptions = DateTimeParseException.class)
+ public void test_dayOfYearFieldInvalidAdacentValueParsingPattern() {
+ // patterns D and DD will not take part in adjacent value parsing
+ DateTimeFormatter.ofPattern("yyyyDDHHmmss").parse("201610123456");
+ }
+
+ //-----------------------------------------------------------------------
+ @DataProvider(name="secondsPattern")
+ Object[][] data_secondsPattern() {
+ return new Object[][] {
+ {"A", "1", LocalTime.ofNanoOfDay(1_000_000)},
+ {"A", "100000", LocalTime.ofSecondOfDay(100)},
+ {"AA", "01", LocalTime.ofNanoOfDay(1_000_000)},
+ {"AA", "100000", LocalTime.ofSecondOfDay(100)},
+ {"AAAAAA", "100000", LocalTime.ofSecondOfDay(100)},
+ {"HHmmssn", "0000001", LocalTime.ofNanoOfDay(1)},
+ {"HHmmssn", "000000111", LocalTime.ofNanoOfDay(111)},
+ {"HHmmssnn", "00000001", LocalTime.ofNanoOfDay(1)},
+ {"HHmmssnn", "0000001111", LocalTime.ofNanoOfDay(1111)},
+ {"HHmmssnnnnnn", "000000111111", LocalTime.ofNanoOfDay(111_111)},
+ {"N", "1", LocalTime.ofNanoOfDay(1)},
+ {"N", "100000", LocalTime.ofNanoOfDay(100_000)},
+ {"NN", "01", LocalTime.ofNanoOfDay(1)},
+ {"NN", "100000", LocalTime.ofNanoOfDay(100_000)},
+ {"NNNNNN", "100000", LocalTime.ofNanoOfDay(100_000)},
+ };
+ }
+
+ @Test(dataProvider="secondsPattern")
+ public void test_secondsPattern(String pattern, String input, LocalTime expected) throws Exception {
+ DateTimeFormatter df = new DateTimeFormatterBuilder().appendPattern(pattern).toFormatter();
+ assertEquals(LocalTime.parse(input, df), expected);
+ }
+
+ @DataProvider(name="secondsValues")
+ Object[][] data_secondsValues() {
+ return new Object[][] {
+ {"A", 1, "1000"},
+ {"n", 1, "0"},
+ {"N", 1, "1000000000"},
+ };
+ }
+
+ @Test(dataProvider="secondsValues")
+ public void test_secondsValues(String pattern, int seconds , String expected) throws Exception {
+ DateTimeFormatter df = new DateTimeFormatterBuilder().appendPattern(pattern).toFormatter();
+ assertEquals(LocalTime.ofSecondOfDay(seconds).format(df), expected);
+ }
+
+ @Test(expectedExceptions = DateTimeParseException.class)
+ public void test_secondsPatternInvalidAdacentValueParsingPattern() {
+ // patterns A*, N*, n* will not take part in adjacent value parsing
+ DateTimeFormatter.ofPattern("yyyyAA").parse("201610");
+ }
//-----------------------------------------------------------------------
@Test
--- a/jdk/test/java/time/test/java/time/format/TestDateTimeFormatterBuilder.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/time/test/java/time/format/TestDateTimeFormatterBuilder.java Mon May 09 08:50:20 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -684,7 +684,7 @@
{"LLLLL", "Text(MonthOfYear,NARROW_STANDALONE)"},
{"D", "Value(DayOfYear)"},
- {"DD", "Value(DayOfYear,2)"},
+ {"DD", "Value(DayOfYear,2,3,NOT_NEGATIVE)"},
{"DDD", "Value(DayOfYear,3)"},
{"d", "Value(DayOfMonth)"},
@@ -746,17 +746,17 @@
{"SSS", "Fraction(NanoOfSecond,3,3)"},
{"SSSSSSSSS", "Fraction(NanoOfSecond,9,9)"},
- {"A", "Value(MilliOfDay)"},
- {"AA", "Value(MilliOfDay,2)"},
- {"AAA", "Value(MilliOfDay,3)"},
+ {"A", "Value(MilliOfDay,1,19,NOT_NEGATIVE)"},
+ {"AA", "Value(MilliOfDay,2,19,NOT_NEGATIVE)"},
+ {"AAA", "Value(MilliOfDay,3,19,NOT_NEGATIVE)"},
- {"n", "Value(NanoOfSecond)"},
- {"nn", "Value(NanoOfSecond,2)"},
- {"nnn", "Value(NanoOfSecond,3)"},
+ {"n", "Value(NanoOfSecond,1,19,NOT_NEGATIVE)"},
+ {"nn", "Value(NanoOfSecond,2,19,NOT_NEGATIVE)"},
+ {"nnn", "Value(NanoOfSecond,3,19,NOT_NEGATIVE)"},
- {"N", "Value(NanoOfDay)"},
- {"NN", "Value(NanoOfDay,2)"},
- {"NNN", "Value(NanoOfDay,3)"},
+ {"N", "Value(NanoOfDay,1,19,NOT_NEGATIVE)"},
+ {"NN", "Value(NanoOfDay,2,19,NOT_NEGATIVE)"},
+ {"NNN", "Value(NanoOfDay,3,19,NOT_NEGATIVE)"},
{"z", "ZoneText(SHORT)"},
{"zz", "ZoneText(SHORT)"},
@@ -782,7 +782,7 @@
{"xxxxx", "Offset(+HH:MM:ss,'+00:00')"}, // LDML
{"ppH", "Pad(Value(HourOfDay),2)"},
- {"pppDD", "Pad(Value(DayOfYear,2),3)"},
+ {"pppDD", "Pad(Value(DayOfYear,2,3,NOT_NEGATIVE),3)"},
{"yyyy[-MM[-dd", "Value(YearOfEra,4,19,EXCEEDS_PAD)['-'Value(MonthOfYear,2)['-'Value(DayOfMonth,2)]]"},
{"yyyy[-MM[-dd]]", "Value(YearOfEra,4,19,EXCEEDS_PAD)['-'Value(MonthOfYear,2)['-'Value(DayOfMonth,2)]]"},
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Currency/Bug8154295.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/*
+ * @test
+ * @bug 8154295
+ * @summary Check getNumericCodeAsString() method which returns numeric code as a 3 digit String.
+ */
+
+import java.util.Currency;
+
+public class Bug8154295 {
+
+ public static void main(String[] args) {
+
+ String numericCode = Currency.getInstance("AFA").getNumericCodeAsString();
+ if (!numericCode.equals("004")) { //should return "004" (a 3 digit string)
+ throw new RuntimeException("[Expected 004, "
+ + "found "+numericCode+" for AFA]");
+ }
+
+ numericCode = Currency.getInstance("AUD").getNumericCodeAsString();
+ if (!numericCode.equals("036")) { //should return "036" (a 3 digit string)
+ throw new RuntimeException("[Expected 036, "
+ + "found "+numericCode+" for AUD]");
+ }
+
+ numericCode = Currency.getInstance("USD").getNumericCodeAsString();
+ if (!numericCode.equals("840")) {// should return "840" (a 3 digit string)
+ throw new RuntimeException("[Expected 840, "
+ + "found "+numericCode+" for USD]");
+ }
+
+ }
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Map/EntrySetIterator.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8139233
+ * @summary ensure entry set's iterator doesn't have side effects on the entry set
+ * @run testng EntrySetIterator
+ */
+
+import java.util.*;
+import org.testng.annotations.Test;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.assertEquals;
+
+public class EntrySetIterator {
+ @Test
+ public void main() {
+ Map<String, String> map = Map.of("a", "1", "b", "2", "c", "3");
+ Set<Map.Entry<String, String>> entrySet = map.entrySet();
+ Iterator<Map.Entry<String, String>> iterator = entrySet.iterator();
+
+ assertTrue(iterator.hasNext());
+
+ // copying implicitly iterates an iterator
+ Set<Map.Entry<String, String>> copy1 = new HashSet<>(entrySet);
+ Set<Map.Entry<String, String>> copy2 = new HashSet<>(entrySet);
+
+ assertEquals(copy2, copy1);
+ assertTrue(iterator.hasNext());
+ }
+}
--- a/jdk/test/java/util/jar/JarFile/MultiReleaseJarHttpProperties.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/java/util/jar/JarFile/MultiReleaseJarHttpProperties.java Mon May 09 08:50:20 2016 -0700
@@ -26,7 +26,7 @@
* @bug 8132734
* @summary Test the System properties for JarFile that support multi-release jar files
* @library /lib/testlibrary/java/util/jar
- * @build Compiler JarBuilder CreateMultiReleaseTestJars
+ * @build Compiler JarBuilder CreateMultiReleaseTestJars SimpleHttpServer
* @run testng MultiReleaseJarHttpProperties
* @run testng/othervm -Djdk.util.jar.version=0 MultiReleaseJarHttpProperties
* @run testng/othervm -Djdk.util.jar.version=8 MultiReleaseJarHttpProperties
@@ -43,8 +43,6 @@
* @run testng/othervm -Djdk.util.jar.enableMultiRelease=force MultiReleaseJarHttpProperties
*/
-import com.sun.net.httpserver.*;
-
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -73,7 +71,7 @@
@Override
protected void initializeClassLoader() throws Exception {
URL[] urls = new URL[]{
- new URL("http://localhost:" + server.getPort() + "/multi-release-jar")
+ new URL("http://localhost:" + server.getPort() + "/multi-release.jar")
};
cldr = new URLClassLoader(urls);
// load any class, Main is convenient and in the root entries
@@ -112,45 +110,3 @@
getResource(rootClass, resource);
}
}
-
-/**
- * Extremely simple server that only performs one task. The server listens for
- * requests on the ephemeral port. If it sees a request that begins with
- * "/multi-release-jar", it consumes the request and returns a stream of bytes
- * representing the jar file multi-release.jar found in "userdir".
- */
-class SimpleHttpServer {
- private static final String userdir = System.getProperty("user.dir", ".");
- private static final Path multirelease = Paths.get(userdir, "multi-release.jar");
-
- private final HttpServer server;
-
- public SimpleHttpServer() throws IOException {
- server = HttpServer.create();
- }
-
- public void start() throws IOException {
- server.bind(new InetSocketAddress(0), 0);
- server.createContext("/multi-release-jar", t -> {
- try (InputStream is = t.getRequestBody()) {
- is.readAllBytes(); // probably not necessary to consume request
- byte[] bytes = Files.readAllBytes(multirelease);
- t.sendResponseHeaders(200, bytes.length);
- try (OutputStream os = t.getResponseBody()) {
- os.write(bytes);
- }
- }
- });
- server.setExecutor(null); // creates a default executor
- server.start();
- }
-
- public void stop() {
- server.stop(0);
- }
-
- int getPort() {
- return server.getAddress().getPort();
- }
-}
-
--- a/jdk/test/jdk/nio/zipfs/Basic.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/jdk/nio/zipfs/Basic.java Mon May 09 08:50:20 2016 -0700
@@ -42,7 +42,7 @@
/**
* @test
- * @bug 8038500 8040059
+ * @bug 8038500 8040059 8150366 8150496
* @summary Basic test for zip provider
*
* @run main Basic
@@ -155,7 +155,8 @@
indent();
System.out.print(file.getFileName());
if (attrs.isRegularFile())
- System.out.format(" (%d)", attrs.size());
+ System.out.format("%n%s%n", attrs);
+
System.out.println();
return FileVisitResult.CONTINUE;
}
--- a/jdk/test/jdk/nio/zipfs/PathOps.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/jdk/nio/zipfs/PathOps.java Mon May 09 08:50:20 2016 -0700
@@ -47,15 +47,15 @@
private Path path;
private Exception exc;
- private PathOps(String s) {
+ private PathOps(String first, String... more) {
out.println();
- input = s;
+ input = first;
try {
- path = fs.getPath(s);
- out.format("%s -> %s", s, path);
+ path = fs.getPath(first, more);
+ out.format("%s -> %s", first, path);
} catch (Exception x) {
exc = x;
- out.format("%s -> %s", s, x);
+ out.format("%s -> %s", first, x);
}
out.println();
}
@@ -179,6 +179,13 @@
return this;
}
+ PathOps resolveSibling(String other, String expected) {
+ out.format("test resolveSibling %s\n", other);
+ checkPath();
+ check(path.resolveSibling(other), expected);
+ return this;
+ }
+
PathOps relativize(String other, String expected) {
out.format("test relativize %s\n", other);
checkPath();
@@ -224,6 +231,10 @@
return new PathOps(s);
}
+ static PathOps test(String first, String... more) {
+ return new PathOps(first, more);
+ }
+
// -- PathOpss --
static void header(String s) {
@@ -235,6 +246,26 @@
static void doPathOpTests() {
header("Path operations");
+ // construction
+ test("/")
+ .string("/");
+ test("/", "")
+ .string("/");
+ test("/", "foo")
+ .string("/foo");
+ test("/", "/foo")
+ .string("/foo");
+ test("/", "foo/")
+ .string("/foo");
+ test("foo", "bar", "gus")
+ .string("foo/bar/gus");
+ test("")
+ .string("");
+ test("", "/")
+ .string("/");
+ test("", "foo", "", "bar", "", "/gus")
+ .string("foo/bar/gus");
+
// all components
test("/a/b/c")
.root("/")
@@ -323,7 +354,6 @@
.ends("foo/bar/")
.ends("foo/bar");
-
// elements
test("a/b/c")
.element(0,"a")
@@ -343,16 +373,57 @@
// resolve
test("/tmp")
.resolve("foo", "/tmp/foo")
- .resolve("/foo", "/foo");
+ .resolve("/foo", "/foo")
+ .resolve("", "/tmp");
test("tmp")
.resolve("foo", "tmp/foo")
+ .resolve("/foo", "/foo")
+ .resolve("", "tmp");
+ test("")
+ .resolve("", "")
+ .resolve("foo", "foo")
.resolve("/foo", "/foo");
+ // resolveSibling
+ test("foo")
+ .resolveSibling("bar", "bar")
+ .resolveSibling("/bar", "/bar")
+ .resolveSibling("", "");
+ test("foo/bar")
+ .resolveSibling("gus", "foo/gus")
+ .resolveSibling("/gus", "/gus")
+ .resolveSibling("", "foo");
+ test("/foo")
+ .resolveSibling("gus", "/gus")
+ .resolveSibling("/gus", "/gus")
+ .resolveSibling("", "/");
+ test("/foo/bar")
+ .resolveSibling("gus", "/foo/gus")
+ .resolveSibling("/gus", "/gus")
+ .resolveSibling("", "/foo");
+ test("")
+ .resolveSibling("foo", "foo")
+ .resolveSibling("/foo", "/foo")
+ .resolve("", "");
+
// relativize
test("/a/b/c")
.relativize("/a/b/c", "")
.relativize("/a/b/c/d/e", "d/e")
- .relativize("/a/x", "../../x");
+ .relativize("/a/x", "../../x")
+ .relativize("/x", "../../../x");
+ test("a/b/c")
+ .relativize("a/b/c/d", "d")
+ .relativize("a/x", "../../x")
+ .relativize("x", "../../../x")
+ .relativize("", "../../..");
+ test("")
+ .relativize("a", "a")
+ .relativize("a/b/c", "a/b/c")
+ .relativize("", "");
+ test("/")
+ .relativize("/a", "a")
+ .relativize("/a/c", "a/c");
// normalize
test("/")
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/lib/testlibrary/java/util/jar/SimpleHttpServer.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import com.sun.net.httpserver.*;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetSocketAddress;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+/**
+ * Extremely simple server that only performs one task. The server listens for
+ * requests on the ephemeral port. If it sees a request that begins with
+ * "/multi-release.jar", it consumes the request and returns a stream of bytes
+ * representing the jar file multi-release.jar found in "userdir".
+ */
+class SimpleHttpServer {
+ private static final String userdir = System.getProperty("user.dir", ".");
+ private static final Path multirelease = Paths.get(userdir, "multi-release.jar");
+
+ private final HttpServer server;
+
+ public SimpleHttpServer() throws IOException {
+ server = HttpServer.create();
+ }
+
+ public void start() throws IOException {
+ server.bind(new InetSocketAddress(0), 0);
+ server.createContext("/multi-release.jar", t -> {
+ try (InputStream is = t.getRequestBody()) {
+ is.readAllBytes(); // probably not necessary to consume request
+ byte[] bytes = Files.readAllBytes(multirelease);
+ t.sendResponseHeaders(200, bytes.length);
+ try (OutputStream os = t.getResponseBody()) {
+ os.write(bytes);
+ }
+ }
+ });
+ server.setExecutor(null); // creates a default executor
+ server.start();
+ }
+
+ public void stop() {
+ server.stop(0);
+ }
+
+ int getPort() {
+ return server.getAddress().getPort();
+ }
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/java2d/loops/ConvertToByteIndexedTest.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 7116979
+ * @summary Test verifies whether BufferedImage with primary colors are
+ * stored properly when we draw into ByteIndexed BufferedImage.
+ * @run main ConvertToByteIndexedTest
+ */
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+import java.util.HashMap;
+
+public class ConvertToByteIndexedTest {
+ static final int[] SRC_TYPES = new int[] {
+ BufferedImage.TYPE_INT_RGB,
+ BufferedImage.TYPE_INT_ARGB,
+ BufferedImage.TYPE_INT_ARGB_PRE,
+ BufferedImage.TYPE_INT_BGR,
+ BufferedImage.TYPE_3BYTE_BGR,
+ BufferedImage.TYPE_4BYTE_ABGR,
+ BufferedImage.TYPE_4BYTE_ABGR_PRE,
+ BufferedImage.TYPE_USHORT_565_RGB,
+ BufferedImage.TYPE_USHORT_555_RGB,
+ BufferedImage.TYPE_BYTE_INDEXED};
+
+ static final String[] TYPE_NAME = new String[] {
+ "INT_RGB",
+ "INT_ARGB",
+ "INT_ARGB_PRE",
+ "INT_BGR",
+ "3BYTE_BGR",
+ "4BYTE_ABGR",
+ "4BYTE_ABGR_PRE",
+ "USHORT_565_RGB",
+ "USHORT_555_RGB",
+ "BYTE_INDEXED"};
+
+ static final Color[] COLORS = new Color[] {
+ //Color.WHITE,
+ Color.BLACK,
+ Color.RED,
+ Color.YELLOW,
+ Color.GREEN,
+ Color.MAGENTA,
+ Color.CYAN,
+ Color.BLUE};
+
+ static final HashMap<Integer,String> TYPE_TABLE =
+ new HashMap<Integer,String>();
+
+ static {
+ for (int i = 0; i < SRC_TYPES.length; i++) {
+ TYPE_TABLE.put(new Integer(SRC_TYPES[i]), TYPE_NAME[i]);
+ }
+ }
+
+ static int width = 50;
+ static int height = 50;
+
+ public static void ConvertToByteIndexed(Color color, int srcType) {
+ // setup source image and graphics for conversion.
+ BufferedImage srcImage = new BufferedImage(width, height, srcType);
+ Graphics2D srcG2D = srcImage.createGraphics();
+ srcG2D.setColor(color);
+ srcG2D.fillRect(0, 0, width, height);
+
+ // setup destination image and graphics for conversion.
+ int dstType = BufferedImage.TYPE_BYTE_INDEXED;
+ BufferedImage dstImage = new BufferedImage(width, height, dstType);
+ Graphics2D dstG2D = (Graphics2D)dstImage.getGraphics();
+ // draw source image into Byte Indexed destination
+ dstG2D.drawImage(srcImage, 0, 0, null);
+
+ // draw into ARGB image to verify individual pixel value.
+ BufferedImage argbImage = new BufferedImage(width, height,
+ BufferedImage.TYPE_INT_ARGB);
+ Graphics2D argbG2D = (Graphics2D)argbImage.getGraphics();
+ argbG2D.drawImage(dstImage, 0, 0, null);
+
+ for (int i = 0; i < width; i++) {
+ for (int j = 0; j < height; j++) {
+ if (color.getRGB() != argbImage.getRGB(i, j)) {
+ throw new RuntimeException("Conversion from " +
+ TYPE_TABLE.get(srcType) + " to BYTE_INDEXED is not"
+ + " done properly for " + color);
+ }
+ }
+ }
+ }
+
+ public static void main(String args[]) {
+ for (int srcType : SRC_TYPES) {
+ for (Color color : COLORS) {
+ ConvertToByteIndexed(color, srcType);
+ }
+ }
+ }
+}
--- a/jdk/test/sun/net/www/protocol/jar/MultiReleaseJarURLConnection.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/sun/net/www/protocol/jar/MultiReleaseJarURLConnection.java Mon May 09 08:50:20 2016 -0700
@@ -26,19 +26,25 @@
* @bug 8132734
* @summary Test that URL connections to multi-release jars can be runtime versioned
* @library /lib/testlibrary/java/util/jar
- * @build Compiler JarBuilder CreateMultiReleaseTestJars
+ * @build Compiler JarBuilder CreateMultiReleaseTestJars SimpleHttpServer
* @run testng MultiReleaseJarURLConnection
*/
import java.io.IOException;
import java.io.InputStream;
+import java.lang.invoke.MethodHandle;
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodType;
import java.net.JarURLConnection;
import java.net.URL;
+import java.net.URLClassLoader;
import java.net.URLConnection;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.jar.JarFile;
+import jdk.Version;
+
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
@@ -47,46 +53,78 @@
public class MultiReleaseJarURLConnection {
String userdir = System.getProperty("user.dir",".");
- String file = userdir + "/signed-multi-release.jar";
+ String unversioned = userdir + "/unversioned.jar";
+ String unsigned = userdir + "/multi-release.jar";
+ String signed = userdir + "/signed-multi-release.jar";
+ SimpleHttpServer server;
@BeforeClass
public void initialize() throws Exception {
CreateMultiReleaseTestJars creator = new CreateMultiReleaseTestJars();
creator.compileEntries();
+ creator.buildUnversionedJar();
creator.buildMultiReleaseJar();
creator.buildSignedMultiReleaseJar();
+
+ server = new SimpleHttpServer();
+ server.start();
+
}
@AfterClass
public void close() throws IOException {
- Files.delete(Paths.get(userdir, "multi-release.jar"));
- Files.delete(Paths.get(userdir, "signed-multi-release.jar"));
+ // Windows requires server to stop before file is deleted
+ if (server != null)
+ server.stop();
+ Files.delete(Paths.get(unversioned));
+ Files.delete(Paths.get(unsigned));
+ Files.delete(Paths.get(signed));
}
@DataProvider(name = "data")
public Object[][] createData() {
return new Object[][]{
- {"unsigned file", userdir + "/multi-release.jar"},
- {"signed file", userdir + "/signed-multi-release.jar"},
+ {"unversioned", unversioned},
+ {"unsigned", unsigned},
+ {"signed", signed}
};
}
@Test(dataProvider = "data")
- public void testRuntimeVersioning(String ignore, String file) throws Exception {
+ public void testRuntimeVersioning(String style, String file) throws Exception {
String urlFile = "jar:file:" + file + "!/";
- String urlEntry = urlFile + "version/Version.java";
+ String baseUrlEntry = urlFile + "version/Version.java";
+ String rtreturn = "return " + Version.current().major();
+
+ Assert.assertTrue(readAndCompare(new URL(baseUrlEntry), "return 8"));
+ // #runtime is "magic" for a multi-release jar, but not for unversioned jar
+ Assert.assertTrue(readAndCompare(new URL(baseUrlEntry + "#runtime"),
+ style.equals("unversioned") ? "return 8" : rtreturn));
+ // #fragment or any other fragment is not magic
+ Assert.assertTrue(readAndCompare(new URL(baseUrlEntry + "#fragment"), "return 8"));
+ // cached entities not affected
+ Assert.assertTrue(readAndCompare(new URL(baseUrlEntry), "return 8"));
- Assert.assertTrue(readAndCompare(new URL(urlEntry), "return 8"));
- // #runtime is "magic"
- Assert.assertTrue(readAndCompare(new URL(urlEntry + "#runtime"), "return 9"));
- // #fragment or any other fragment is not magic
- Assert.assertTrue(readAndCompare(new URL(urlEntry + "#fragment"), "return 8"));
- // cached entities not affected
- Assert.assertTrue(readAndCompare(new URL(urlEntry), "return 8"));
+ // the following tests will not work with unversioned jars
+ if (style.equals("unversioned")) return;
+
+ // direct access to versioned entry
+ String versUrlEntry = urlFile + "META-INF/versions/" + Version.current().major()
+ + "/version/Version.java";
+ Assert.assertTrue(readAndCompare(new URL(versUrlEntry), rtreturn));
+ // adding any fragment does not change things
+ Assert.assertTrue(readAndCompare(new URL(versUrlEntry + "#runtime"), rtreturn));
+ Assert.assertTrue(readAndCompare(new URL(versUrlEntry + "#fragment"), rtreturn));
+
+ // it really doesn't change things
+ versUrlEntry = urlFile + "META-INF/versions/10/version/Version.java";
+ Assert.assertTrue(readAndCompare(new URL(versUrlEntry), "return 10"));
+ Assert.assertTrue(readAndCompare(new URL(versUrlEntry + "#runtime"), "return 10"));
+ Assert.assertTrue(readAndCompare(new URL(versUrlEntry + "#fragment"), "return 10"));
}
@Test(dataProvider = "data")
- public void testCachedJars(String ignore, String file) throws Exception {
+ public void testCachedJars(String style, String file) throws Exception {
String urlFile = "jar:file:" + file + "!/";
URL rootUrl = new URL(urlFile);
@@ -98,7 +136,11 @@
juc = (JarURLConnection)runtimeUrl.openConnection();
JarFile runtimeJar = juc.getJarFile();
JarFile.Release runtime = runtimeJar.getVersion();
- Assert.assertNotEquals(root, runtime);
+ if (style.equals("unversioned")) {
+ Assert.assertEquals(root, runtime);
+ } else {
+ Assert.assertNotEquals(root, runtime);
+ }
juc = (JarURLConnection)rootUrl.openConnection();
JarFile jar = juc.getJarFile();
@@ -115,6 +157,63 @@
jar.close(); // probably not needed
}
+ @DataProvider(name = "resourcedata")
+ public Object[][] createResourceData() throws Exception {
+ return new Object[][]{
+ {"unversioned", Paths.get(unversioned).toUri().toURL()},
+ {"unsigned", Paths.get(unsigned).toUri().toURL()},
+ {"signed", Paths.get(signed).toUri().toURL()},
+ {"unversioned", new URL("file:" + unversioned)},
+ {"unsigned", new URL("file:" + unsigned)},
+ {"signed", new URL("file:" + signed)},
+ {"unversioned", new URL("jar:file:" + unversioned + "!/")},
+ {"unsigned", new URL("jar:file:" + unsigned + "!/")},
+ {"signed", new URL("jar:file:" + signed + "!/")},
+ // external jar received via http protocol
+ {"http", new URL("jar:http://localhost:" + server.getPort() + "/multi-release.jar!/")},
+ {"http", new URL("http://localhost:" + server.getPort() + "/multi-release.jar")},
+
+ };
+ }
+
+ @Test(dataProvider = "resourcedata")
+ public void testResources(String style, URL url) throws Throwable {
+ //System.out.println(" testing " + style + " url: " + url);
+ URL[] urls = {url};
+ URLClassLoader cldr = new URLClassLoader(urls);
+ Class<?> vcls = cldr.loadClass("version.Version");
+
+ // verify we are loading a runtime versioned class
+ MethodType mt = MethodType.methodType(int.class);
+ MethodHandle mh = MethodHandles.lookup().findVirtual(vcls, "getVersion", mt);
+ Assert.assertEquals((int)mh.invoke(vcls.newInstance()),
+ style.equals("unversioned") ? 8 : Version.current().major());
+
+ // now get a resource and verify that we don't have a fragment attached
+ URL vclsUrl = vcls.getResource("/version/Version.class");
+ String fragment = vclsUrl.getRef();
+ Assert.assertNull(fragment);
+
+ // and verify that the the url is a reified pointer to the runtime entry
+ String rep = vclsUrl.toString();
+ //System.out.println(" getResource(\"/version/Version.class\") returned: " + rep);
+ if (style.equals("http")) {
+ Assert.assertTrue(rep.startsWith("jar:http:"));
+ } else {
+ Assert.assertTrue(rep.startsWith("jar:file:"));
+ }
+ String suffix;
+ if (style.equals("unversioned")) {
+ suffix = ".jar!/version/Version.class";
+ } else {
+ suffix = ".jar!/META-INF/versions/" + Version.current().major()
+ + "/version/Version.class";
+ }
+ Assert.assertTrue(rep.endsWith(suffix));
+ cldr.close();
+ }
+
+
private boolean readAndCompare(URL url, String match) throws Exception {
boolean result;
// necessary to do it this way, instead of openStream(), so we can
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/provider/MessageDigest/SHA512.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import jdk.testlibrary.Asserts;
+
+import java.security.MessageDigest;
+import java.util.Arrays;
+
+/**
+ * @test
+ * @bug 8051408
+ * @library /lib/testlibrary
+ * @summary testing SHA-512/224 and SHA-512/256.
+ */
+public class SHA512 {
+ public static void main(String[] args) throws Exception {
+
+ MessageDigest md;
+
+ // Test vectors obtained from
+ // http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA512_224.pdf
+ md = MessageDigest.getInstance("SHA-512/224");
+ Asserts.assertTrue(Arrays.equals(md.digest("abc".getBytes()),
+ xeh("4634270F 707B6A54 DAAE7530 460842E2 0E37ED26 5CEEE9A4 3E8924AA")));
+ Asserts.assertTrue(Arrays.equals(md.digest((
+ "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" +
+ "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu").getBytes()),
+ xeh("23FEC5BB 94D60B23 30819264 0B0C4533 35D66473 4FE40E72 68674AF9")));
+
+ // Test vectors obtained from
+ // http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA512_256.pdf
+ md = MessageDigest.getInstance("SHA-512/256");
+ Asserts.assertTrue(Arrays.equals(md.digest("abc".getBytes()),
+ xeh("53048E26 81941EF9 9B2E29B7 6B4C7DAB E4C2D0C6 34FC6D46 E0E2F131 07E7AF23")));
+ Asserts.assertTrue(Arrays.equals(md.digest((
+ "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" +
+ "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu").getBytes()),
+ xeh("3928E184 FB8690F8 40DA3988 121D31BE 65CB9D3E F83EE614 6FEAC861 E19B563A")));
+ }
+
+ static byte[] xeh(String in) {
+ in = in.replaceAll(" ", "");
+ int len = in.length() / 2;
+ byte[] out = new byte[len];
+ for (int i = 0; i < len; i++) {
+ out[i] = (byte)Integer.parseInt(in.substring(i * 2, i * 2 + 2), 16);
+ }
+ return out;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/provider/SecureRandom/AbstractDrbgSpec.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,310 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8051408
+ * @modules java.base/sun.security.provider
+ * @summary check the AbstractDrbg API etc
+ */
+
+import java.security.*;
+import sun.security.provider.AbstractDrbg;
+import static java.security.DrbgParameters.Capability.*;
+
+/**
+ * This test makes sure the AbstractDrbg API works as specified. It also
+ * checks the SecureRandom API.
+ */
+public class AbstractDrbgSpec {
+
+ public static void main(String args[]) throws Exception {
+
+ // getInstance from a provider.
+
+ Provider p = new All("A", 0, "");
+ byte[] bytes = new byte[100];
+
+ // A non-DRBG
+ iae(() -> SecureRandom.getInstance("S1", null, p));
+ nsae(() -> SecureRandom.getInstance("S1",
+ new SecureRandomParameters() {}, p));
+
+ SecureRandom s1 = SecureRandom.getInstance("S1", p);
+ if (s1.getParameters() != null) {
+ throw new Exception();
+ }
+
+ iae(() -> s1.nextBytes(bytes, null));
+ uoe(() -> s1.nextBytes(bytes, new SecureRandomParameters() {}));
+ uoe(() -> s1.reseed());
+ iae(() -> s1.reseed(null));
+ uoe(() -> s1.reseed(new SecureRandomParameters() {}));
+
+ // A weak DRBG
+ iae(() -> SecureRandom.getInstance("S2", null, p));
+ nsae(() -> SecureRandom.getInstance("S2",
+ new SecureRandomParameters() {}, p));
+ nsae(() -> SecureRandom.getInstance("S2",
+ DrbgParameters.instantiation(256, NONE, null), p));
+ nsae(() -> SecureRandom.getInstance("S2",
+ DrbgParameters.instantiation(-1, PR_AND_RESEED, null), p));
+ nsae(() -> SecureRandom.getInstance("S2",
+ DrbgParameters.instantiation(-1, RESEED_ONLY, null), p));
+
+ SecureRandom s2 = SecureRandom.getInstance("S2",
+ DrbgParameters.instantiation(-1, NONE, null), p);
+ equals(s2, "S2,SQUEEZE,128,none");
+ equals(s2.getParameters(), "128,none,null");
+
+ npe(() -> s2.nextBytes(null));
+ iae(() -> s2.nextBytes(bytes, null));
+ iae(() -> s2.nextBytes(bytes, new SecureRandomParameters() {}));
+ uoe(() -> s2.reseed());
+ iae(() -> s2.reseed(null));
+
+ iae(() -> s2.nextBytes(bytes,
+ DrbgParameters.nextBytes(-1, false, new byte[101])));
+ s2.nextBytes(new byte[101],
+ DrbgParameters.nextBytes(-1, false, new byte[100]));
+ s2.nextBytes(bytes,
+ DrbgParameters.nextBytes(-1, false, new byte[100]));
+
+ // A strong DRBG
+ iae(() -> SecureRandom.getInstance("S3", null, p));
+ nsae(() -> SecureRandom.getInstance("S3",
+ new SecureRandomParameters() {}, p));
+ SecureRandom.getInstance("S3",
+ DrbgParameters.instantiation(192, PR_AND_RESEED, null), p);
+
+ SecureRandom s3 = SecureRandom.getInstance("S3", p);
+ equals(s3, "S3,SQUEEZE,128,reseed_only");
+ equals(s3.getParameters(), "128,reseed_only,null");
+
+ iae(() -> s3.nextBytes(bytes,
+ DrbgParameters.nextBytes(192, false, null)));
+ iae(() -> s3.nextBytes(bytes,
+ DrbgParameters.nextBytes(112, true, null)));
+ iae(() -> s3.reseed(new SecureRandomParameters() {}));
+
+ SecureRandom s32 = SecureRandom.getInstance(
+ "S3", DrbgParameters.instantiation(192, PR_AND_RESEED, null), p);
+ equals(s32, "S3,SQUEEZE,192,pr_and_reseed");
+ equals(s32.getParameters(), "192,pr_and_reseed,null");
+
+ s32.nextBytes(bytes, DrbgParameters.nextBytes(192, false, null));
+ s32.nextBytes(bytes, DrbgParameters.nextBytes(112, true, null));
+ s32.reseed();
+ s32.reseed(DrbgParameters.reseed(true, new byte[100]));
+
+ // getInstance from competitive providers.
+
+ Provider l = new Legacy("L", 0, "");
+ Provider w = new Weak("W", 0, "");
+ Provider s = new Strong("S", 0, "");
+
+ Security.addProvider(l);
+ Security.addProvider(w);
+ Security.addProvider(s);
+
+ SecureRandom s4;
+
+ try {
+ s4 = SecureRandom.getInstance("S");
+ if (s4.getProvider() != l) {
+ throw new Exception();
+ }
+
+ nsae(() -> SecureRandom.getInstance(
+ "S", DrbgParameters.instantiation(256, NONE, null)));
+
+ s4 = SecureRandom.getInstance(
+ "S", DrbgParameters.instantiation(192, NONE, null));
+ if (s4.getProvider() != s) {
+ throw new Exception();
+ }
+
+ s4 = SecureRandom.getInstance(
+ "S", DrbgParameters.instantiation(128, PR_AND_RESEED, null));
+ if (s4.getProvider() != s) {
+ throw new Exception();
+ }
+
+ s4 = SecureRandom.getInstance(
+ "S", DrbgParameters.instantiation(128, RESEED_ONLY, null));
+ if (s4.getProvider() != s) {
+ throw new Exception();
+ }
+
+ s4 = SecureRandom.getInstance(
+ "S", DrbgParameters.instantiation(128, NONE, null));
+ if (s4.getProvider() != w) {
+ throw new Exception();
+ }
+ } finally {
+ Security.removeProvider("L");
+ Security.removeProvider("W");
+ Security.removeProvider("S");
+ }
+ }
+
+ public static class All extends Provider {
+ protected All(String name, double version, String info) {
+ super(name, version, info);
+ put("SecureRandom.S1", S1.class.getName());
+ put("SecureRandom.S2", S2.class.getName());
+ put("SecureRandom.S3", S3.class.getName());
+ }
+ }
+
+ // Providing S with no params support
+ public static class Legacy extends Provider {
+ protected Legacy(String name, double version, String info) {
+ super(name, version, info);
+ put("SecureRandom.S", S1.class.getName());
+ }
+ }
+
+ public static class Weak extends Provider {
+ protected Weak(String name, double version, String info) {
+ super(name, version, info);
+ put("SecureRandom.S", S2.class.getName());
+ }
+ }
+
+ public static class Strong extends Provider {
+ protected Strong(String name, double version, String info) {
+ super(name, version, info);
+ put("SecureRandom.S", S3.class.getName());
+ }
+ }
+
+ // This is not a DRBG.
+ public static class S1 extends SecureRandomSpi {
+ @Override
+ protected void engineSetSeed(byte[] seed) {
+ }
+
+ @Override
+ protected void engineNextBytes(byte[] bytes) {
+ }
+
+ @Override
+ protected byte[] engineGenerateSeed(int numBytes) {
+ return new byte[numBytes];
+ }
+ }
+
+ // This is a strong DRBG.
+ public static class S3 extends AbstractDrbg {
+
+ public S3(SecureRandomParameters params) {
+ supportPredictionResistance = true;
+ supportReseeding = true;
+ highestSupportedSecurityStrength = 192;
+ mechName = "S3";
+ algorithm = "SQUEEZE";
+ configure(params);
+ }
+ protected void chooseAlgorithmAndStrength() {
+ if (requestedInstantiationSecurityStrength < 0) {
+ securityStrength = DEFAULT_STRENGTH;
+ } else {
+ securityStrength = requestedInstantiationSecurityStrength;
+ }
+ minLength = securityStrength / 8;
+ maxAdditionalInputLength = maxPersonalizationStringLength = 100;
+ }
+
+ @Override
+ protected void initEngine() {
+
+ }
+
+ @Override
+ protected void instantiateAlgorithm(byte[] ei) {
+
+ }
+
+ @Override
+ protected void generateAlgorithm(byte[] result, byte[] additionalInput) {
+
+ }
+
+ @Override
+ protected void reseedAlgorithm(byte[] ei, byte[] additionalInput) {
+
+ }
+ }
+
+ // This is a weak DRBG. maximum strength is 128 and does
+ // not support prediction resistance or reseed.
+ public static class S2 extends S3 {
+ public S2(SecureRandomParameters params) {
+ super(null);
+ mechName = "S2";
+ highestSupportedSecurityStrength = 128;
+ supportPredictionResistance = false;
+ supportReseeding = false;
+ configure(params);
+ }
+ }
+
+ static void nsae(RunnableWithException r) throws Exception {
+ checkException(r, NoSuchAlgorithmException.class);
+ }
+
+ static void iae(RunnableWithException r) throws Exception {
+ checkException(r, IllegalArgumentException.class);
+ }
+
+ static void uoe(RunnableWithException r) throws Exception {
+ checkException(r, UnsupportedOperationException.class);
+ }
+
+ static void npe(RunnableWithException r) throws Exception {
+ checkException(r, NullPointerException.class);
+ }
+
+ interface RunnableWithException {
+ void run() throws Exception;
+ }
+
+ static void checkException(RunnableWithException r, Class ex)
+ throws Exception {
+ try {
+ r.run();
+ } catch (Exception e) {
+ if (ex.isAssignableFrom(e.getClass())) {
+ return;
+ }
+ throw e;
+ }
+ throw new Exception("No exception thrown");
+ }
+
+ static void equals(Object o, String s) throws Exception {
+ if (!o.toString().equals(s)) {
+ throw new Exception(o.toString() + " is not " + s);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/provider/SecureRandom/AutoReseed.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.security.SecureRandom;
+import java.security.Security;
+
+/**
+ * @test
+ * @bug 8051408
+ * @summary make sure nextBytes etc can be called before setSeed
+ */
+public class AutoReseed {
+
+ public static void main(String[] args) throws Exception {
+ SecureRandom sr;
+ String old = Security.getProperty("securerandom.drbg.config");
+ try {
+ for (String mech :
+ new String[]{"Hash_DRBG", "HMAC_DRBG", "CTR_DRBG"}) {
+ System.out.println("Testing " + mech + "...");
+ Security.setProperty("securerandom.drbg.config", mech);
+
+ // Check auto reseed works
+ sr = SecureRandom.getInstance("DRBG");
+ sr.nextInt();
+ sr = SecureRandom.getInstance("DRBG");
+ sr.reseed();
+ sr = SecureRandom.getInstance("DRBG");
+ sr.generateSeed(10);
+ }
+ } finally {
+ Security.setProperty("securerandom.drbg.config", old);
+ }
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/provider/SecureRandom/CommonSeeder.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import sun.security.provider.AbstractDrbg;
+import sun.security.provider.EntropySource;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.security.DrbgParameters;
+import java.security.SecureRandom;
+import java.security.Security;
+
+/**
+ * @test
+ * @bug 8051408
+ * @modules java.base/sun.security.provider
+ * @run main/othervm CommonSeeder
+ * @summary check entropy reading of DRBGs
+ */
+public class CommonSeeder {
+
+ static class MyES implements EntropySource {
+ int count = 100;
+ int lastCount = 100;
+
+ @Override
+ public byte[] getEntropy(int minEntropy, int minLength,
+ int maxLength, boolean pr) {
+ count--;
+ return new byte[minLength];
+ }
+
+ /**
+ * Confirms genEntropy() has been called {@code less} times
+ * since last check.
+ */
+ public void checkUsage(int less) throws Exception {
+ if (lastCount != count + less) {
+ throw new Exception(String.format(
+ "lastCount = %d, count = %d, less = %d",
+ lastCount, count, less));
+ }
+ lastCount = count;
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+
+ byte[] result = new byte[10];
+ MyES es = new MyES();
+
+ // Set es as the default entropy source, overriding SeedGenerator.
+ setDefaultSeeder(es);
+
+ // Nothing happened yet
+ es.checkUsage(0);
+
+ SecureRandom sr;
+ sr = SecureRandom.getInstance("DRBG");
+
+ // No entropy reading if only getInstance
+ es.checkUsage(0);
+
+ // Entropy is read at 1st nextBytes of the 1st DRBG
+ sr.nextInt();
+ es.checkUsage(1);
+
+ for (String mech : new String[]{"Hash_DRBG", "HMAC_DRBG", "CTR_DRBG"}) {
+ System.out.println("Testing " + mech + "...");
+
+ // DRBG with pr_false will never read entropy again no matter
+ // if nextBytes or reseed is called.
+
+ Security.setProperty("securerandom.drbg.config", mech);
+ sr = SecureRandom.getInstance("DRBG");
+ sr.nextInt();
+ sr.reseed();
+ es.checkUsage(0);
+
+ // DRBG with pr_true always read from default entropy, and
+ // its nextBytes always reseed itself
+
+ Security.setProperty("securerandom.drbg.config",
+ mech + ",pr_and_reseed");
+ sr = SecureRandom.getInstance("DRBG");
+
+ sr.nextInt();
+ es.checkUsage(2); // one instantiate, one reseed
+ sr.nextInt();
+ es.checkUsage(1); // one reseed in nextBytes
+ sr.reseed();
+ es.checkUsage(1); // one reseed
+ sr.nextBytes(result, DrbgParameters.nextBytes(-1, false, null));
+ es.checkUsage(0); // pr_false for this call
+ sr.nextBytes(result, DrbgParameters.nextBytes(-1, true, null));
+ es.checkUsage(1); // pr_true for this call
+ sr.reseed(DrbgParameters.reseed(true, null));
+ es.checkUsage(1); // reseed from es
+ sr.reseed(DrbgParameters.reseed(false, null));
+ es.checkUsage(0); // reseed from AbstractDrbg.SeederHolder.seeder
+ }
+ }
+
+ static void setDefaultSeeder(EntropySource es) throws Exception {
+ Field f = AbstractDrbg.class.getDeclaredField("defaultES");
+ f.setAccessible(true); // no more private
+ Field f2 = Field.class.getDeclaredField("modifiers");
+ f2.setAccessible(true);
+ f2.setInt(f, f2.getInt(f) - Modifier.FINAL); // no more final
+ f.set(null, es);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/provider/SecureRandom/DRBGAlg.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,180 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import sun.security.provider.MoreDrbgParameters;
+
+import java.security.DrbgParameters;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.security.SecureRandomParameters;
+import java.security.Security;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static java.security.DrbgParameters.Capability.*;
+
+/**
+ * @test
+ * @bug 8051408
+ * @modules java.base/sun.security.provider
+ * @summary make sure DRBG alg can be defined and instantiated freely
+ */
+public class DRBGAlg {
+
+ public static void main(String[] args) throws Exception {
+
+ check(null, "Hash_DRBG", "SHA-256", "reseed_only", ",128");
+ check("", "Hash_DRBG", "SHA-256", "reseed_only", ",128");
+ check("sha-1", "Hash_DRBG", "SHA-1", "reseed_only", ",128");
+ check("sha-256", "Hash_DRBG", "SHA-256", "reseed_only", ",128");
+ check("SHA-3");
+ check("hash_drbg", "Hash_DRBG", "SHA-256", "reseed_only", ",128");
+ check("hmac_drbg", "HMAC_DRBG", "SHA-256", "reseed_only", ",128");
+ check("ctr_drbg", "CTR_DRBG", "AES-", "reseed_only", ",128", "use_df");
+
+ // trying all permutations
+ checkPermutations(
+ Collections.emptyList(),
+ Arrays.asList("hash_drbg","sha-512","Pr_and_Reseed","192"),
+ "Hash_DRBG", "SHA-512", "pr_and_reseed", ",192");
+
+ check("Hash_DRBG,Hmac_DRBG");
+ check("SHA-1,SHA-256");
+ check("128,256");
+ check("none,reseed_only");
+ check("use_df,no_df");
+ check("Hash_DRBG,,SHA-1");
+
+ check(null, DrbgParameters.instantiation(112, PR_AND_RESEED, null),
+ "Hash_DRBG", "SHA-256", "pr_and_reseed", ",112");
+ check(null, DrbgParameters.instantiation(256, PR_AND_RESEED, null),
+ "Hash_DRBG", "SHA-256", "pr_and_reseed", ",256");
+ check(null, DrbgParameters.instantiation(384, PR_AND_RESEED, null));
+ check("sha-1", DrbgParameters.instantiation(112, PR_AND_RESEED, null),
+ "Hash_DRBG", "SHA-1", "pr_and_reseed", ",112");
+ check("sha-1", DrbgParameters.instantiation(192, PR_AND_RESEED, null));
+ check("hash_drbg,sha-512,Pr_and_Reseed,192",
+ DrbgParameters.instantiation(112, NONE, null),
+ "Hash_DRBG", "SHA-512", "reseed_only", ",112");
+ check("hash_drbg,sha-512,Pr_and_Reseed,192",
+ DrbgParameters.instantiation(-1, NONE, null),
+ "Hash_DRBG", "SHA-512", "reseed_only", ",192");
+ // getInstance params can be stronger than definition
+ check("hash_drbg,sha-256,None,112",
+ DrbgParameters.instantiation(192, PR_AND_RESEED, null),
+ "Hash_DRBG", "SHA-256", "pr_and_reseed", ",192");
+
+ check("hash_drbg,sha-1", new MoreDrbgParameters(
+ null, null, "sha-512", null, false,
+ DrbgParameters.instantiation(-1, NONE, null)),
+ "Hash_DRBG", "SHA-512");
+ check("hash_drbg,sha-1", new MoreDrbgParameters(
+ null, null, null, null, false,
+ DrbgParameters.instantiation(-1, NONE, null)),
+ "Hash_DRBG", "SHA-1");
+ check("hash_drbg", new MoreDrbgParameters(
+ null, "hmac_drbg", null, null, false,
+ DrbgParameters.instantiation(-1, NONE, null)),
+ "HMAC_DRBG", "SHA-256");
+
+ check("hash_drbg,sha-1", new MoreDrbgParameters(
+ null, null, "sha-3", null, false,
+ DrbgParameters.instantiation(-1, NONE, null)));
+ check("hash_drbg,sha-1", new MoreDrbgParameters(
+ null, "Unknown_DRBG", null, null, false,
+ DrbgParameters.instantiation(-1, NONE, null)));
+ }
+
+ /**
+ * Checks all permutatins of a config. This is a recursive method and
+ * should be called with checkPermutations(empty,config,expected).
+ *
+ * @param current the current chosen aspects
+ * @param remains the remaining
+ * @param expected the expected effective config
+ * @throws Exception when check fails
+ */
+ private static void checkPermutations(List<String> current,
+ List<String> remains, String... expected) throws Exception {
+ if (remains.isEmpty()) {
+ check(current.stream().collect(Collectors.joining(",")), expected);
+ } else {
+ for (String r : remains) {
+ List<String> newCurrent = new ArrayList<>(current);
+ newCurrent.add(r);
+ List<String> newRemains = new ArrayList<>(remains);
+ newRemains.remove(r);
+ checkPermutations(newCurrent, newRemains, expected);
+ }
+ }
+ }
+
+ /**
+ * Checks DRBG definition for getInstance(alg, params).
+ *
+ * @param define DRBG
+ * @param params getInstance request (null if none)
+ * @param expected expected actual instantiate params, empty if should fail
+ */
+ static void check(String define, SecureRandomParameters params,
+ String... expected) throws Exception {
+ System.out.println("Testing " + define + " with " + params + "...");
+ String old = Security.getProperty("securerandom.drbg.config");
+ if (define != null) {
+ Security.setProperty("securerandom.drbg.config", define);
+ }
+ try {
+ String result = params != null ?
+ SecureRandom.getInstance("DRBG", params).toString() :
+ SecureRandom.getInstance("DRBG").toString();
+ System.out.println("Result " + result);
+ if (expected.length == 0) {
+ throw new Exception("should fail");
+ }
+ for (String s : expected) {
+ if (!result.contains(s)) {
+ throw new Exception(result);
+ }
+ }
+ } catch (NoSuchAlgorithmException e) {
+ System.out.println("Result NSAE");
+ if (expected.length > 0) {
+ throw e;
+ }
+ } finally {
+ Security.setProperty("securerandom.drbg.config", old);
+ }
+ }
+
+ /**
+ * Checks DRBG definition for getInstance(alg).
+ *
+ * @param define DRBG
+ * @param expected expected actual instantiate params, empty if should fail
+ */
+ static void check(String define, String... expected) throws Exception {
+ check(define, null, expected);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/provider/SecureRandom/DrbgCavp.java Mon May 09 08:50:20 2016 -0700
@@ -0,0 +1,422 @@
+/*
+ * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import sun.security.provider.EntropySource;
+import sun.security.provider.MoreDrbgParameters;
+
+import javax.crypto.Cipher;
+import java.io.BufferedReader;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.lang.*;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.security.DrbgParameters;
+import java.util.ArrayDeque;
+import java.util.Arrays;
+import java.util.Queue;
+import java.util.stream.Stream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipInputStream;
+
+import static java.security.DrbgParameters.Capability.*;
+
+/**
+ * The Known-output DRBG test. The test vector can be obtained from
+ * http://csrc.nist.gov/groups/STM/cavp/documents/drbg/drbgtestvectors.zip.
+ *
+ * Manually run this test with
+ *
+ * java DrbgCavp drbgtestvectors.zip
+ *
+ */
+public class DrbgCavp {
+
+ // the current nonce
+ private static byte[] nonce;
+
+ // A buffer to store test materials for the current call and
+ // can be printed out of an error occurs.
+ private static ByteArrayOutputStream bout = new ByteArrayOutputStream();
+
+ // Save err for restoring
+ private static PrintStream err = System.err;
+
+ private static final int AES_LIMIT;
+
+ static {
+ try {
+ AES_LIMIT = Cipher.getMaxAllowedKeyLength("AES");
+ } catch (Exception e) {
+ // should not happen
+ throw new AssertionError("Cannot detect AES");
+ }
+ }
+
+ public static void main(String[] args) throws Exception {
+
+ if (args.length != 1) {
+ System.out.println("Usage: java DrbgCavp drbgtestvectors.zip");
+ return;
+ }
+ File tv = new File(args[0]);
+
+ EntropySource es = new TestEntropySource();
+ System.setErr(new PrintStream(bout));
+
+ // The testsuite is a zip file containing more zip files for different
+ // working modes. Each internal zip file contains test materials for
+ // different mechanisms.
+
+ try (ZipFile zf = new ZipFile(tv)) {
+ String[] modes = {"no_reseed", "pr_false", "pr_true"};
+ for (String mode : modes) {
+ try (ZipInputStream zis = new ZipInputStream(zf.getInputStream(
+ zf.getEntry("drbgvectors_" + mode + ".zip")))) {
+ while (true) {
+ ZipEntry ze = zis.getNextEntry();
+ if (ze == null) {
+ break;
+ }
+ String fname = ze.getName();
+ if (fname.equals("Hash_DRBG.txt")
+ || fname.equals("HMAC_DRBG.txt")
+ || fname.equals("CTR_DRBG.txt")) {
+ String algorithm
+ = fname.substring(0, fname.length() - 4);
+ test(mode, algorithm, es, zis);
+ }
+ }
+ }
+ }
+ } finally {
+ System.setErr(err);
+ }
+ }
+
+ /**
+ * A special entropy source you can set entropy input at will.
+ */
+ private static class TestEntropySource implements EntropySource {
+
+ private static Queue<byte[]> data = new ArrayDeque<>();
+
+ @Override
+ public byte[] getEntropy(int minEntropy, int minLength,
+ int maxLength, boolean pr) {
+ byte[] result = data.poll();
+ if (result == null
+ || result.length < minLength
+ || result.length > maxLength) {
+ throw new RuntimeException("Invalid entropy: " +
+ "need [" + minLength + ", " + maxLength + "], " +
+ (result == null ? "none" : "has " + result.length));
+ }
+ return result;
+ }
+
+ private static void setEntropy(byte[] input) {
+ data.offer(input);
+ }
+
+ private static void clearEntropy() {
+ data.clear();
+ }
+ }
+
+ /**
+ * The test.
+ *
+ * // Algorithm line, might contain usedf flag
+ * [AES-128 use df]
+ * // Ignored, use mode argument
+ * [PredictionResistance = True]
+ * // Ignored, just read EntropyInput
+ * [EntropyInputLen = 128]
+ * // Ignored, just read Nonce
+ * [NonceLen = 64]
+ * // Ignored, just read PersonalizationString
+ * [PersonalizationStringLen = 128]
+ * // Ignored, just read AdditionalInput
+ * [AdditionalInputLen = 128]
+ * // Used to allocate buffer for nextBytes() call
+ * [ReturnedBitsLen = 512]
+ *
+ * // A sign we can ignore old unused entropy input
+ * COUNT = 0
+ *
+ * // Instantiate
+ * EntropyInput = 92898f...
+ * Nonce = c2a4d9...
+ * PersonalizationString = ea65ee... // Enough to call getInstance()
+ *
+ * // Reseed
+ * EntropyInputReseed = bfd503...
+ * AdditionalInputReseed = 009e0b... // Enough to call reseed()
+ *
+ * // Generation
+ * AdditionalInput = 1a40fa.... // Enough to call nextBytes() for PR off
+ * EntropyInputPR = 20728a... // Enough to call nextBytes() for PR on
+ * ReturnedBits = 5a3539... // Compare this to last nextBytes() output
+ *
+ * @param mode one of "no_reseed", "pr_false", "pr_true"
+ * @param mech one of "Hash_DRBG", "HMAC_DRBG", "CTR_DRBG"
+ * @param es our own entropy source
+ * @param is test material
+ */
+ private static void test(String mode, String mech, EntropySource es,
+ InputStream is) throws Exception {
+
+ SecureRandom hd = null;
+
+ // Expected output length in bits as in [ReturnedBitsLen]
+ int outLen = 0;
+
+ // DRBG algorithm as in the algorithm line
+ String algorithm = null;
+
+ // When CTR_DRBG uses a derivation function as in the algorithm line
+ boolean usedf = false;
+
+ // Additional input as in "AdditionalInput"
+ byte[] additional = null;
+
+ // Random bits generated
+ byte[] output = null;
+
+ // Prediction resistance flag, determined by mode
+ boolean isPr = false;
+
+ StringBuilder sb = new StringBuilder();
+
+ int lineno = 0;
+
+ System.out.println(mode + "/" + mech);
+
+ try (Stream<String> lines =
+ new BufferedReader(new InputStreamReader(is)).lines()) {
+ for (String s: (Iterable<String>) lines::iterator) {
+ lineno++;
+ err.print(hd == null ? '-' : '*');
+ Line l = new Line(s);
+ if (l.key.contains("no df") || l.key.contains("use df") ||
+ l.key.startsWith("SHA-")) {
+ sb = new StringBuilder();
+ bout.reset();
+ }
+ sb.append(String.format(
+ "%9s %4s %5d %s\n", mode, mech, lineno, s));
+ switch (l.key) {
+ case "3KeyTDEA no df":
+ case "AES-128 no df":
+ case "AES-192 no df":
+ case "AES-256 no df":
+ case "3KeyTDEA use df":
+ case "AES-128 use df":
+ case "AES-192 use df":
+ case "AES-256 use df":
+ algorithm = l.key.split(" ")[0];
+ usedf = l.key.contains("use df");
+ break;
+ case "ReturnedBitsLen":
+ outLen = l.vint();
+ output = new byte[outLen / 8];
+ break;
+ case "EntropyInput":
+ TestEntropySource.setEntropy(l.vdata());
+ break;
+ case "Nonce":
+ nonce = l.vdata();
+ break;
+ case "COUNT":
+ // Remove unused entropy (say, when AES-256 is skipped)
+ TestEntropySource.clearEntropy();
+ break;
+ case "PersonalizationString":
+ try {
+ isPr = mode.equals("pr_true");
+ byte[] ps = null;
+ if (l.vdata().length != 0) {
+ ps = l.vdata();
+ }
+
+ // MoreDrbgParameters must be used because we
+ // want to set entropy input and nonce. Since
+ // it can also set mechanism, algorithm and usedf,
+ // we don't need to touch securerandom.drbg.config.
+ hd = SecureRandom.getInstance("DRBG",
+ new MoreDrbgParameters(es, mech, algorithm,
+ nonce, usedf,
+ DrbgParameters.instantiation(
+ -1,
+ isPr ? PR_AND_RESEED
+ : RESEED_ONLY,
+ ps)),
+ "SUN");
+ } catch (NoSuchAlgorithmException iae) {
+ // AES-256 might not be available. This is OK.
+ if ((algorithm.equals("AES-192")
+ || algorithm.equals("AES-256"))
+ && AES_LIMIT == 128) {
+ hd = null;
+ } else {
+ throw iae;
+ }
+ }
+ break;
+ case "EntropyInputReseed":
+ TestEntropySource.setEntropy(l.vdata());
+ break;
+ case "AdditionalInputReseed":
+ if (l.vdata().length == 0) {
+ additional = null;
+ } else {
+ additional = l.vdata();
+ }
+ if (hd != null) {
+ if (additional == null) {
+ hd.reseed();
+ } else {
+ hd.reseed(DrbgParameters.reseed(
+ isPr, additional));
+ }
+ }
+ break;
+ case "EntropyInputPR":
+ if (l.vdata().length != 0) {
+ TestEntropySource.setEntropy(l.vdata());
+ }
+ if (mode.equals("pr_true")) {
+ if (hd != null) {
+ if (additional == null) {
+ hd.nextBytes(output);
+ } else {
+ hd.nextBytes(output,
+ DrbgParameters.nextBytes(
+ -1, isPr, additional));
+ }
+ }
+ }
+ break;
+ case "AdditionalInput":
+ if (l.vdata().length == 0) {
+ additional = null;
+ } else {
+ additional = l.vdata();
+ }
+ if (!mode.equals("pr_true")) {
+ if (hd != null) {
+ if (additional == null) {
+ hd.nextBytes(output);
+ } else {
+ hd.nextBytes(output,
+ DrbgParameters.nextBytes(
+ -1, isPr, additional));
+ }
+ }
+ }
+ break;
+ case "ReturnedBits":
+ if (hd != null) {
+ if (!Arrays.equals(output, l.vdata())) {
+ throw new Exception("\nExpected: " +
+ l.value + "\n Actual: " + hex(output));
+ }
+ }
+ break;
+ default:
+ // Algorithm line for Hash_DRBG and HMAC_DRBG
+ if (l.key.startsWith("SHA-")) {
+ algorithm = l.key;
+ }
+ }
+ }
+ err.println();
+ } catch (Exception e) {
+ err.println();
+ err.println(sb.toString());
+ err.println(bout.toString());
+ throw e;
+ }
+ }
+
+ /**
+ * Parse a line from test material.
+ *
+ * Brackets are removed. Key and value separated.
+ */
+ static class Line {
+
+ final String key;
+ final String value;
+
+ Line(String s) {
+ s = s.trim();
+ if (s.length() >= 2) {
+ if (s.charAt(0) == '[') {
+ s = s.substring(1, s.length() - 1);
+ }
+ }
+ if (s.indexOf('=') < 0) {
+ key = s;
+ value = null;
+ } else {
+ key = s.substring(0, s.indexOf('=')).trim();
+ value = s.substring(s.indexOf('=') + 1).trim();
+ }
+ }
+
+ int vint() {
+ return Integer.parseInt(value);
+ }
+
+ byte[] vdata() {
+ return xeh(value);
+ }
+ }
+
+ // Bytes to HEX
+ private static String hex(byte[] in) {
+ StringBuilder sb = new StringBuilder();
+ for (byte b: in) {
+ sb.append(String.format("%02x", b&0xff));
+ }
+ return sb.toString();
+ }
+
+ // HEX to bytes
+ private static byte[] xeh(String in) {
+ in = in.replaceAll(" ", "");
+ int len = in.length() / 2;
+ byte[] out = new byte[len];
+ for (int i = 0; i < len; i++) {
+ out[i] = (byte) Integer.parseInt(
+ in.substring(i * 2, i * 2 + 2), 16);
+ }
+ return out;
+ }
+}
--- a/jdk/test/sun/security/provider/SecureRandom/SelfSeed.java Mon May 09 12:55:03 2016 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 1998, 2003, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/**
- * @test
- * @bug 4168409
- * @summary SecureRandom forces all instances to self-seed, even if a seed is
- * provided
- */
-
-import java.security.SecureRandom;
-
-public class SelfSeed {
-
- private static final int NUM_BYTES = 5;
- private static byte seed[] = { (byte)0xaa, (byte)0x11, (byte)0xa1 };
-
- public static void main(String[] args) {
-
- try {
- SecureRandom sr1 = SecureRandom.getInstance("SHA1PRNG");
- sr1.setSeed(seed);
- byte randomBytes[] = new byte[NUM_BYTES];
- sr1.nextBytes(randomBytes);
-
- SecureRandom sr2 = new SecureRandom(seed);
- if (sr2.getAlgorithm().equals("SHA1PRNG") == false) {
- System.out.println("Default PRNG is not SHA1PRNG, skipping test");
- return;
- }
- byte otherRandomBytes[] = new byte[NUM_BYTES];
- sr2.nextBytes(otherRandomBytes);
-
- // make sure the random bytes generated are the same
- for (int i = 0; i < NUM_BYTES; i++) {
- if (randomBytes[i] != otherRandomBytes[i])
- throw new SecurityException("FAILURE: " +
- "Returned bytes not equal");
- }
-
- // success
- } catch (Exception e) {
- throw new SecurityException("FAILURE: " + e.toString());
- }
- }
-}
--- a/jdk/test/sun/security/provider/SecureRandom/StrongSeedReader.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/sun/security/provider/SecureRandom/StrongSeedReader.java Mon May 09 08:50:20 2016 -0700
@@ -59,6 +59,7 @@
System.setProperty("java.security.egd", file.toURI().toString());
testSeed("NativePRNG");
testSeed("SHA1PRNG");
+ testSeed("DRBG");
} finally {
if (file != null) {
file.delete();
--- a/jdk/test/tools/jlink/plugins/IncludeLocalesPluginTest.java Mon May 09 12:55:03 2016 +0300
+++ b/jdk/test/tools/jlink/plugins/IncludeLocalesPluginTest.java Mon May 09 08:50:20 2016 -0700
@@ -36,6 +36,7 @@
/*
* @test
+ * @bug 8152143 8152704 8155649
* @summary IncludeLocalesPlugin tests
* @author Naoto Sato
* @library ../../lib
@@ -55,15 +56,17 @@
private final static String moduleName = "IncludeLocalesTest";
private static Helper helper;
private final static int INCLUDE_LOCALES_OPTION = 0;
- private final static int EXPECTED_LOCATIONS = 1;
- private final static int UNEXPECTED_PATHS = 2;
- private final static int AVAILABLE_LOCALES = 3;
- private final static int ERROR_MESSAGE = 4;
+ private final static int ADDMODS_OPTION = 1;
+ private final static int EXPECTED_LOCATIONS = 2;
+ private final static int UNEXPECTED_PATHS = 3;
+ private final static int AVAILABLE_LOCALES = 4;
+ private final static int ERROR_MESSAGE = 5;
private final static Object[][] testData = {
// without --include-locales option: should include all locales
{
"",
+ "jdk.localedata",
List.of(
"/jdk.localedata/sun/text/resources/ext/FormatData_en_GB.class",
"/jdk.localedata/sun/text/resources/ext/FormatData_ja.class",
@@ -144,6 +147,7 @@
// All English/Japanese locales
{
"--include-locales=en,ja",
+ "jdk.localedata",
List.of(
"/jdk.localedata/sun/text/resources/ext/FormatData_en_GB.class",
"/jdk.localedata/sun/text/resources/ext/FormatData_ja.class",
@@ -174,6 +178,7 @@
// All locales in India
{
"--include-locales=*-IN",
+ "jdk.localedata",
List.of(
"/jdk.localedata/sun/text/resources/ext/FormatData_en_IN.class",
"/jdk.localedata/sun/text/resources/ext/FormatData_hi_IN.class",
@@ -201,7 +206,9 @@
},
// Thai
- {"--include-locales=th",
+ {
+ "--include-locales=th",
+ "jdk.localedata",
List.of(
"/jdk.localedata/sun/text/resources/LineBreakIteratorData_th",
"/jdk.localedata/sun/text/resources/thai_dict",
@@ -221,7 +228,9 @@
},
// Hong Kong
- {"--include-locales=zh-HK",
+ {
+ "--include-locales=zh-HK",
+ "jdk.localedata",
List.of(
"/jdk.localedata/sun/text/resources/ext/FormatData_zh.class",
"/jdk.localedata/sun/text/resources/ext/FormatData_zh_HK.class",
@@ -244,7 +253,9 @@
},
// Norwegian
- {"--include-locales=nb,nn,no",
+ {
+ "--include-locales=nb,nn,no",
+ "jdk.localedata",
List.of(
"/jdk.localedata/sun/text/resources/ext/FormatData_no.class",
"/jdk.localedata/sun/text/resources/ext/FormatData_no_NO.class",
@@ -268,7 +279,9 @@
},
// Hebrew/Indonesian/Yiddish
- {"--include-locales=he,id,yi",
+ {
+ "--include-locales=he,id,yi",
+ "jdk.localedata",
List.of(
"/jdk.localedata/sun/text/resources/ext/FormatData_in.class",
"/jdk.localedata/sun/text/resources/ext/FormatData_in_ID.class",
@@ -294,7 +307,9 @@
},
// Error case: No matching locales
- {"--include-locales=xyz",
+ {
+ "--include-locales=xyz",
+ "jdk.localedata",
null,
null,
null,
@@ -304,7 +319,9 @@
},
// Error case: Invalid argument
- {"--include-locales=en,zh_HK",
+ {
+ "--include-locales=en,zh_HK",
+ "jdk.localedata",
null,
null,
null,
@@ -312,6 +329,18 @@
PluginsResourceBundle.getMessage("include-locales.invalidtag"), "zh_HK"))
.getMessage(),
},
+
+ // Error case: jdk.localedata is not added
+ {
+ "--include-locales=en-US",
+ "java.base",
+ null,
+ null,
+ null,
+ new PluginException(
+ PluginsResourceBundle.getMessage("include-locales.localedatanotfound"))
+ .getMessage(),
+ },
};
public static void main(String[] args) throws Exception {
@@ -328,7 +357,7 @@
Result result = JImageGenerator.getJLinkTask()
.modulePath(helper.defaultModulePath())
.output(helper.createNewImageDir(moduleName))
- .addMods("jdk.localedata")
+ .addMods((String)data[ADDMODS_OPTION])
.option((String)data[INCLUDE_LOCALES_OPTION])
.call();