Created
May 10, 2015 02:05
-
-
Save jbosboom/72bf5fead1bf393403f3 to your computer and use it in GitHub Desktop.
Removes unused private constructors from .class files
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Copyright (c) 2015 Jeffrey Bosboom | |
* | |
* Permission is hereby granted, free of charge, to any person obtaining a copy | |
* of this software and associated documentation files (the "Software"), to deal | |
* in the Software without restriction, including without limitation the rights | |
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
* copies of the Software, and to permit persons to whom the Software is | |
* furnished to do so, subject to the following conditions: | |
* | |
* The above copyright notice and this permission notice shall be included in | |
* all copies or substantial portions of the Software. | |
* | |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |
* THE SOFTWARE. | |
*/ | |
package com.jeffreybosboom.deletedconstructors; | |
import java.io.IOException; | |
import java.nio.file.FileVisitResult; | |
import java.nio.file.FileVisitor; | |
import java.nio.file.Files; | |
import java.nio.file.Path; | |
import java.nio.file.Paths; | |
import java.nio.file.attribute.BasicFileAttributes; | |
import java.util.AbstractMap; | |
import java.util.ArrayList; | |
import java.util.Comparator; | |
import java.util.List; | |
import java.util.Map; | |
import java.util.Optional; | |
import org.objectweb.asm.ClassReader; | |
import org.objectweb.asm.ClassVisitor; | |
import org.objectweb.asm.ConstantHistogrammer; | |
import org.objectweb.asm.ConstantPoolSortingClassWriter; | |
import org.objectweb.asm.MethodVisitor; | |
import org.objectweb.asm.Opcodes; | |
/** | |
* Removes unused private constructors. Inner class constructors are | |
* conservatively retained because they're accessible to enclosing classes, but | |
* no attempt is made to retain constructors used by reflective or native code. | |
* <p/> | |
* See <a href="http://jeffreybosboom.com/blog/articles/how-many-bytes-could-you-save-if-java-had-constructorless-classes/"> | |
* this blog post</a> for more information. | |
* <p/> | |
* This class uses ConstantPoolSortingClassWriter, which is not a standard ASM | |
* component (despite being in the org.objectweb.asm package). The code is | |
* <a href="https://gist.github.com/jbosboom/86b7c24825b0d40121fa">available as | |
* a GitHub Gist</a> and <a href="http://stackoverflow.com/q/29079192/3614835"> | |
* documented by a Stack Overflow question and answer</a>. | |
* @author Jeffrey Bosboom | |
*/ | |
public final class RemoveUnusedPrivateCtors { | |
public static List<Map.Entry<String, Integer>> savings = new ArrayList<>(); | |
public static void main(String[] args) throws IOException { | |
Path src = Paths.get("C:\\Users\\jbosboom\\Desktop\\rt"); | |
Path dest = Paths.get("C:\\Users\\jbosboom\\Desktop\\rt-delctor"); | |
Files.walkFileTree(src, new DelCtor(src, dest)); | |
savings.sort(Comparator.comparing(Map.Entry<String, Integer>::getValue).reversed()); | |
savings.forEach(e -> System.out.format("%5d %s%n", e.getValue(), e.getKey())); | |
System.out.println(savings.stream().mapToInt(Map.Entry::getValue).sum()); | |
} | |
private static Optional<Map.Entry<String, Integer>> minimize(Path input, Path output) throws IOException { | |
byte[] inputBytes = Files.readAllBytes(input); | |
ClassReader cr = new ClassReader(inputBytes); | |
ConstantPoolSortingClassWriter cw = new ConstantPoolSortingClassWriter(0); | |
ConstantHistogrammer ch = new ConstantHistogrammer(cw); | |
ClassVisitor rpca = new RemovePrivateCtorAdapter(ch); | |
try { | |
cr.accept(rpca, 0); | |
} catch (Bailout ignored) { | |
return Optional.empty(); | |
} | |
byte[] outputBytes = cw.toByteArray(); | |
int bytesSaved = inputBytes.length - outputBytes.length; | |
if (output != null) | |
Files.write(output, outputBytes); | |
return Optional.of(new AbstractMap.SimpleImmutableEntry<>(cr.getClassName(), bytesSaved)); | |
} | |
private static final class DelCtor implements FileVisitor<Path> { | |
private final Path src; | |
private final Path dest; | |
private DelCtor(Path src, Path dest) throws IOException { | |
this.src = src; | |
this.dest = dest; | |
Files.createDirectories(dest); | |
} | |
@Override | |
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { | |
Path target = dest.resolve(src.relativize(dir)); | |
Files.createDirectories(target); | |
return FileVisitResult.CONTINUE; | |
} | |
@Override | |
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { | |
Path target = dest.resolve(src.relativize(file)); | |
if (!file.toString().endsWith(".class")) { | |
//copy resources | |
Files.copy(file, target); | |
return FileVisitResult.CONTINUE; | |
} | |
Optional<Map.Entry<String, Integer>> result = minimize(file, target); | |
result.ifPresent(savings::add); | |
if (!result.isPresent()) Files.copy(file, target); | |
return FileVisitResult.CONTINUE; | |
} | |
@Override | |
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { | |
exc.printStackTrace(); | |
throw exc; | |
} | |
@Override | |
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { | |
return FileVisitResult.CONTINUE; | |
} | |
} | |
private static final class RemovePrivateCtorAdapter extends ClassVisitor { | |
private String myName; | |
private final List<String> removed = new ArrayList<>(); | |
private RemovePrivateCtorAdapter(ClassVisitor cv) { | |
super(Opcodes.ASM5, cv); | |
} | |
@Override | |
public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { | |
myName = name; | |
int idx = myName.lastIndexOf('$'); | |
if (idx != -1) | |
myName = myName.substring(idx+1); | |
super.visit(version, access, name, signature, superName, interfaces); | |
} | |
@Override | |
public void visitInnerClass(String name, String outerName, String innerName, int access) { | |
//bail out if we're an inner class, because our enclosing class can | |
//use our private constructors | |
if (myName.equals(innerName)) throw BAILOUT; | |
super.visitInnerClass(name, outerName, innerName, access); | |
} | |
@Override | |
public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { | |
//remove private constructors | |
if (name.equals("<init>") && ((access & Opcodes.ACC_PRIVATE) != 0)) { | |
removed.add(myName+" "+name+" "+desc+" "+signature+" "+(access & Opcodes.ACC_PRIVATE)); | |
return null; | |
} | |
return new BailOutIfCtorCalled( | |
super.visitMethod(access, name, desc, signature, exceptions), | |
myName); | |
} | |
@Override | |
public void visitEnd() { | |
if (removed.isEmpty()) throw new Bailout(); | |
// removed.forEach(System.out::println); | |
super.visitEnd(); | |
} | |
} | |
private static final class BailOutIfCtorCalled extends MethodVisitor { | |
private final String myName; | |
private BailOutIfCtorCalled(MethodVisitor mv, String myName) { | |
super(Opcodes.ASM5, mv); | |
this.myName = myName; | |
} | |
@Override | |
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) { | |
//if a private constructor is referenced from inside its class (e.g. | |
//a static factory method) we can't remove it | |
if (owner.equals(myName) && name.equals("<init>")) throw BAILOUT; | |
super.visitMethodInsn(opcode, owner, name, desc, itf); | |
} | |
} | |
private static final Bailout BAILOUT = new Bailout(); | |
private static final class Bailout extends RuntimeException { | |
@Override | |
public synchronized Throwable fillInStackTrace() { | |
return this; | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1033 sun/security/krb5/KrbPriv | |
472 com/sun/org/apache/xpath/internal/axes/NodeSequence | |
390 java/io/FileNotFoundException | |
352 com/sun/xml/internal/ws/api/pipe/helper/PipeAdapter$1TubeAdapter | |
229 javax/net/ssl/StandardConstants | |
200 java/nio/charset/StandardCharsets | |
198 com/sun/xml/internal/ws/policy/privateutil/PolicyUtils | |
197 com/sun/org/apache/xml/internal/serializer/Method | |
191 com/sun/xml/internal/bind/v2/WellKnownNamespace | |
188 java/util/Comparators | |
186 com/sun/org/glassfish/external/amx/AMX | |
174 javax/xml/transform/OutputKeys | |
170 java/util/Objects | |
170 javax/xml/XMLConstants | |
165 com/sun/xml/internal/ws/encoding/policy/EncodingConstants | |
161 com/sun/xml/internal/bind/v2/runtime/reflect/opt/OptimizedTransducedAccessorFactory | |
161 java/time/temporal/IsoFields | |
161 java/time/temporal/JulianFields | |
159 sun/nio/ch/sctp/MessageInfoImpl | |
154 com/sun/xml/internal/ws/policy/PolicyConstants | |
152 com/sun/xml/internal/ws/api/policy/ModelGenerator | |
151 com/sun/xml/internal/bind/v2/runtime/reflect/opt/OptimizedAccessorFactory | |
150 com/sun/org/apache/xpath/internal/objects/XStringForChars | |
150 com/sun/xml/internal/org/jvnet/mimepull/PropUtil | |
149 com/sun/xml/internal/messaging/saaj/packaging/mime/internet/MimeUtility | |
148 com/sun/org/glassfish/external/probe/provider/StatsProviderManager | |
147 com/sun/xml/internal/fastinfoset/DecoderStateTables | |
146 com/sun/xml/internal/messaging/saaj/packaging/mime/util/ASCIIUtility | |
144 javax/xml/datatype/DatatypeConstants | |
142 com/sun/org/apache/xml/internal/serializer/SerializerFactory | |
141 sun/net/ftp/FtpDirEntry | |
140 com/sun/org/apache/xerces/internal/impl/xpath/regex/REUtil | |
139 com/sun/xml/internal/bind/v2/runtime/property/PropertyFactory | |
139 com/sun/xml/internal/ws/config/metro/util/ParserUtil | |
138 com/sun/org/glassfish/gmbal/ManagedObjectManagerFactory | |
138 com/sun/xml/internal/bind/v2/runtime/property/Utils | |
137 com/sun/xml/internal/bind/v2/runtime/reflect/Utils | |
137 sun/instrument/InstrumentationImpl | |
135 com/sun/xml/internal/ws/streaming/XMLStreamReaderUtil | |
135 com/sun/xml/internal/ws/streaming/XMLStreamWriterUtil | |
134 java/lang/invoke/InvokeDynamic | |
134 javax/xml/xpath/XPathConstants | |
134 sun/invoke/empty/Empty | |
132 com/sun/org/apache/xerces/internal/impl/Constants | |
132 com/sun/xml/internal/bind/v2/model/impl/Utils | |
131 com/sun/xml/internal/bind/v2/model/util/ArrayInfoUtil | |
131 com/sun/xml/internal/ws/commons/xmlutil/Converter | |
130 com/sun/activation/registries/LogSupport | |
130 com/sun/xml/internal/org/jvnet/mimepull/ASCIIUtility | |
129 com/sun/xml/internal/bind/v2/runtime/Utils | |
129 com/sun/xml/internal/org/jvnet/mimepull/MimeUtility | |
129 java/util/stream/Streams | |
127 com/sun/xml/internal/bind/v2/bytecode/ClassTailor | |
126 com/sun/org/apache/xalan/internal/lib/Extensions | |
126 com/sun/xml/internal/ws/policy/PolicyMapUtil | |
124 com/sun/xml/internal/txw2/output/ResultFactory | |
124 java/lang/Class | |
123 com/sun/xml/internal/ws/spi/db/Utils | |
122 com/sun/xml/internal/bind/api/Utils | |
122 com/sun/xml/internal/ws/api/message/Messages | |
122 com/sun/xml/internal/ws/model/Utils | |
121 com/sun/xml/internal/bind/v2/schemagen/Util | |
121 com/sun/xml/internal/ws/api/message/Headers | |
120 com/sun/org/glassfish/external/amx/AMXUtil | |
120 javax/swing/SwingUtilities | |
119 com/sun/xml/internal/ws/util/ASCIIUtility | |
118 org/xml/sax/helpers/XMLReaderFactory | |
115 org/xml/sax/helpers/ParserFactory | |
114 javax/activation/SecuritySupport | |
114 javax/xml/bind/DatatypeConverter | |
108 com/sun/xml/internal/bind/Util | |
107 com/sun/xml/internal/txw2/TXW | |
105 java/util/stream/Nodes | |
97 com/sun/jmx/defaults/ServiceName | |
97 com/sun/jmx/snmp/ServiceName | |
97 com/sun/management/jmx/ServiceName | |
97 com/sun/org/apache/xml/internal/security/utils/Constants | |
97 com/sun/org/apache/xml/internal/security/utils/EncryptionConstants | |
97 java/util/LocaleISOData | |
97 javax/xml/bind/JAXB | |
97 sun/util/locale/provider/CollationRules | |
93 com/sun/corba/se/spi/logging/CORBALogDomains | |
93 java/awt/dnd/DnDConstants | |
93 java/sql/Types | |
93 java/util/ArrayPrefixHelpers | |
93 java/util/FormattableFlags | |
93 java/util/zip/ZipConstants64 | |
93 sun/net/idn/UCharacterEnums | |
93 sun/nio/fs/WindowsConstants | |
90 com/sun/corba/se/impl/dynamicany/DynValueCommonImpl | |
81 com/sun/corba/se/impl/dynamicany/DynStructImpl | |
81 com/sun/corba/se/impl/dynamicany/DynValueImpl | |
74 com/sun/org/apache/xml/internal/dtm/ref/DTMAxisIterNodeList | |
73 com/sun/corba/se/impl/dynamicany/DynAnyFactoryImpl | |
72 com/sun/beans/finder/ClassFinder | |
72 com/sun/org/apache/xml/internal/security/utils/IdResolver | |
72 com/sun/security/sasl/util/PolicyUtils | |
72 java/time/temporal/TemporalAdjusters | |
72 sun/misc/ThreadGroupUtils | |
72 sun/net/idn/UCharacterDirection | |
72 sun/reflect/misc/ConstructorUtil | |
72 sun/reflect/misc/FieldUtil | |
72 sun/security/krb5/internal/crypto/KeyUsage | |
72 sun/security/rsa/SunRsaSignEntries | |
72 sun/util/locale/provider/CalendarDataUtility | |
68 com/oracle/util/Checksums | |
68 java/lang/ClassLoaderHelper | |
68 java/lang/reflect/Array | |
68 java/text/Normalizer | |
68 java/util/DualPivotQuicksort | |
68 sun/nio/ch/IOStatus | |
68 sun/text/Normalizer | |
66 com/sun/corba/se/impl/ior/EncapsulationUtility | |
66 com/sun/jmx/defaults/JmxProperties | |
66 com/sun/xml/internal/ws/api/pipe/Stubs | |
66 java/time/temporal/TemporalQueries | |
66 sun/awt/AWTAccessor | |
66 sun/io/Win32ErrorMode | |
66 sun/swing/SwingAccessor | |
65 com/sun/org/apache/xml/internal/dtm/ref/DTMChildIterNodeList | |
65 com/sun/org/apache/xml/internal/dtm/ref/DTMNodeList | |
63 com/sun/awt/AWTUtilities | |
63 com/sun/awt/SecurityWarning | |
63 com/sun/media/sound/MidiUtils | |
63 com/sun/org/apache/xml/internal/security/c14n/helper/C14nHelper | |
63 sun/corba/OutputStreamFactory | |
63 sun/util/locale/LocaleUtils | |
62 com/sun/corba/se/impl/orbutil/concurrent/SyncUtil | |
62 com/sun/corba/se/impl/orbutil/ORBConstants | |
62 com/sun/corba/se/spi/presentation/rmi/StubAdapter | |
62 com/sun/java/util/jar/pack/Constants | |
62 java/lang/Void | |
62 java/util/stream/Tripwire | |
62 java/util/Tripwire | |
62 sun/misc/DoubleConsts | |
62 sun/misc/FloatConsts | |
59 com/sun/corba/se/impl/orb/DataCollectorFactory | |
59 com/sun/corba/se/impl/orb/ParserActionFactory | |
59 com/sun/corba/se/impl/orbutil/ObjectUtility | |
59 com/sun/corba/se/spi/orb/ORBVersionFactory | |
59 com/sun/corba/se/spi/orbutil/closure/ClosureFactory | |
59 com/sun/corba/se/spi/orbutil/proxy/DelegateInvocationHandlerImpl | |
59 com/sun/image/codec/jpeg/JPEGCodec | |
59 java/rmi/registry/LocateRegistry | |
59 java/util/stream/DistinctOps | |
59 java/util/stream/ForEachOps | |
59 java/util/stream/MatchOps | |
59 java/util/stream/ReduceOps | |
59 java/util/stream/SortedOps | |
59 java/util/stream/StreamSupport | |
59 javax/annotation/processing/Completions | |
59 sun/management/ManagementFactory | |
59 sun/nio/ch/Reflect | |
59 sun/nio/ch/SocketOptionRegistry | |
59 sun/nio/fs/Reflect | |
58 com/sun/corba/se/impl/dynamicany/DynAnyBasicImpl | |
58 com/sun/corba/se/impl/dynamicany/DynAnyCollectionImpl | |
58 com/sun/corba/se/impl/dynamicany/DynAnyComplexImpl | |
58 com/sun/corba/se/impl/dynamicany/DynAnyConstructedImpl | |
58 com/sun/corba/se/impl/dynamicany/DynArrayImpl | |
58 com/sun/corba/se/impl/dynamicany/DynEnumImpl | |
58 com/sun/corba/se/impl/dynamicany/DynFixedImpl | |
58 com/sun/corba/se/impl/dynamicany/DynSequenceImpl | |
58 com/sun/corba/se/impl/dynamicany/DynUnionImpl | |
58 com/sun/corba/se/impl/dynamicany/DynValueBoxImpl | |
57 com/sun/beans/finder/PrimitiveTypeMap | |
57 com/sun/beans/finder/PrimitiveWrapperMap | |
57 com/sun/jndi/ldap/sasl/LdapSasl | |
57 com/sun/management/jmx/JMProperties | |
57 com/sun/media/sound/JSSecurityManager | |
57 com/sun/media/sound/Platform | |
57 sun/java2d/opengl/OGLUtilities | |
57 sun/management/jdp/JdpController | |
57 sun/security/jgss/krb5/Krb5Util | |
57 sun/security/krb5/internal/crypto/Aes128 | |
57 sun/security/krb5/internal/crypto/Aes256 | |
57 sun/security/krb5/internal/crypto/ArcFourHmac | |
57 sun/security/smartcardio/PCSC | |
57 sun/util/locale/provider/JRELocaleConstants | |
56 javax/print/StreamPrintService | |
53 com/oracle/net/Sdp | |
53 com/sun/corba/se/impl/encoding/OSFCodeSetRegistry | |
53 com/sun/corba/se/impl/orbutil/ORBUtility | |
53 com/sun/corba/se/spi/orb/OperationFactory | |
53 com/sun/nio/sctp/SctpStandardSocketOptions | |
53 java/net/StandardSocketOptions | |
53 java/nio/file/CopyMoveHelper | |
53 java/nio/file/StandardWatchEventKinds | |
53 jdk/net/ExtendedSocketOptions | |
53 sun/font/ScriptRunData | |
53 sun/misc/GC | |
53 sun/nio/fs/Globs | |
53 sun/nio/fs/WindowsSecurity | |
53 sun/security/provider/certpath/PKIX | |
52 com/sun/beans/finder/FieldFinder | |
52 com/sun/jmx/mbeanserver/Introspector | |
52 com/sun/jmx/snmp/defaults/DefaultPaths | |
52 com/sun/jmx/snmp/defaults/SnmpProperties | |
52 com/sun/jndi/ldap/LdapPoolManager | |
52 com/sun/jndi/ldap/ServiceLocator | |
52 com/sun/jndi/toolkit/url/UrlUtil | |
52 com/sun/media/sound/JDK13Services | |
52 com/sun/media/sound/Printer | |
52 com/sun/media/sound/Toolkit | |
52 com/sun/naming/internal/ResourceManager | |
52 com/sun/net/ssl/SSLSecurity | |
52 com/sun/org/apache/xml/internal/security/algorithms/ClassLoaderUtils | |
52 com/sun/org/apache/xml/internal/security/keys/KeyUtils | |
52 com/sun/org/apache/xml/internal/security/transforms/ClassLoaderUtils | |
52 com/sun/org/apache/xml/internal/security/utils/Base64 | |
52 com/sun/org/apache/xml/internal/security/utils/ClassLoaderUtils | |
52 com/sun/org/apache/xml/internal/security/utils/I18n | |
52 com/sun/org/apache/xml/internal/security/utils/JavaUtils | |
52 com/sun/org/apache/xml/internal/security/utils/XMLUtils | |
52 java/awt/MouseInfo | |
52 java/lang/System | |
52 java/nio/file/FileSystems | |
52 java/security/Security | |
52 java/util/Collections | |
52 javax/management/MBeanServerFactory | |
52 javax/management/remote/JMXConnectorFactory | |
52 javax/management/remote/JMXConnectorServerFactory | |
52 javax/print/attribute/AttributeSetUtilities | |
52 javax/security/sasl/Sasl | |
52 javax/sound/midi/MidiSystem | |
52 javax/sound/sampled/AudioSystem | |
52 javax/swing/BorderFactory | |
52 jdk/management/resource/internal/ResourceNatives | |
52 sun/awt/OSInfo | |
52 sun/java2d/loops/GraphicsPrimitiveMgr | |
52 sun/management/jmxremote/ConnectorBootstrap | |
52 sun/nio/fs/WindowsFileCopy | |
52 sun/nio/fs/WindowsLinkSupport | |
52 sun/nio/fs/WindowsUriSupport | |
52 sun/reflect/misc/ReflectUtil | |
52 sun/rmi/server/Util | |
52 sun/security/jca/GetInstance | |
52 sun/security/jca/JCAUtil | |
52 sun/security/jca/Providers | |
52 sun/security/jgss/krb5/SubjectComber | |
52 sun/security/krb5/Confounder | |
52 sun/security/krb5/internal/crypto/Des3 | |
52 sun/security/krb5/KrbServiceLocator | |
52 sun/security/provider/ByteArrayAccess | |
52 sun/security/provider/ParameterCache | |
52 sun/security/provider/SunEntries | |
52 sun/security/rsa/RSACore | |
52 sun/security/tools/KeyStoreUtil | |
52 sun/security/util/SecurityConstants | |
52 sun/security/validator/KeyStores | |
52 sun/security/x509/OIDMap | |
52 sun/util/calendar/ZoneInfoFile | |
52 sun/util/locale/provider/TimeZoneNameUtility | |
48 com/sun/corba/se/impl/naming/cosnaming/NamingUtils | |
48 com/sun/corba/se/spi/copyobject/CopyobjectDefaults | |
48 com/sun/corba/se/spi/ior/iiop/IIOPFactories | |
48 com/sun/corba/se/spi/ior/IORFactories | |
48 com/sun/corba/se/spi/orbutil/fsm/StateEngineFactory | |
48 com/sun/corba/se/spi/presentation/rmi/PresentationDefaults | |
48 com/sun/corba/se/spi/protocol/RequestDispatcherDefault | |
48 com/sun/corba/se/spi/transport/TransportDefault | |
48 com/sun/java/util/jar/pack/ConstantPool | |
48 com/sun/java/util/jar/pack/Utils | |
48 com/sun/jmx/remote/internal/IIOPHelper | |
48 com/sun/jndi/cosnaming/ExceptionMapper | |
48 com/sun/jndi/ldap/Obj | |
48 java/awt/dnd/SerializationTester | |
48 java/io/DeleteOnExitHook | |
48 java/lang/ApplicationShutdownHooks | |
48 java/lang/Compiler | |
48 java/lang/invoke/MethodHandleNatives | |
48 java/lang/invoke/MethodHandleProxies | |
48 java/lang/invoke/MethodHandles | |
48 java/lang/invoke/MethodHandleStatics | |
48 java/lang/management/ManagementFactory | |
48 java/lang/Math | |
48 java/lang/StrictMath | |
48 java/lang/StringCoding | |
48 java/net/IDN | |
48 java/net/URLEncoder | |
48 java/nio/Bits | |
48 java/nio/channels/Channels | |
48 java/nio/file/attribute/PosixFilePermissions | |
48 java/nio/file/Files | |
48 java/nio/file/Paths | |
48 java/nio/file/TempFileHelper | |
48 java/rmi/Naming | |
48 java/rmi/server/RMIClassLoader | |
48 java/security/AccessController | |
48 java/util/Arrays | |
48 java/util/Base64 | |
48 java/util/concurrent/Executors | |
48 java/util/concurrent/locks/LockSupport | |
48 java/util/jar/Pack200 | |
48 java/util/Spliterators | |
48 java/util/stream/Collectors | |
48 java/util/stream/FindOps | |
48 java/util/stream/SliceOps | |
48 javax/imageio/ImageIO | |
48 javax/lang/model/util/ElementFilter | |
48 javax/rmi/CORBA/Util | |
48 javax/swing/colorchooser/ColorChooserComponentFactory | |
48 jdk/net/Sockets | |
48 org/jcp/xml/dsig/internal/dom/DOMUtils | |
48 org/jcp/xml/dsig/internal/dom/Utils | |
48 sun/awt/ScrollPaneWheelScroller | |
48 sun/invoke/util/BytecodeDescriptor | |
48 sun/invoke/util/BytecodeName | |
48 sun/invoke/util/VerifyAccess | |
48 sun/invoke/util/VerifyType | |
48 sun/management/ExtendedPlatformComponent | |
48 sun/management/ManagementFactoryHelper | |
48 sun/management/Util | |
48 sun/misc/FpUtils | |
48 sun/misc/Service | |
48 sun/net/ExtendedOptionsImpl | |
48 sun/net/NetProperties | |
48 sun/net/sdp/SdpSupport | |
48 sun/nio/ch/DefaultAsynchronousChannelProvider | |
48 sun/nio/ch/DefaultSelectorProvider | |
48 sun/nio/ch/ExtendedSocketOption | |
48 sun/nio/ch/Invoker | |
48 sun/nio/ch/IOUtil | |
48 sun/nio/ch/Net | |
48 sun/nio/ch/Secrets | |
48 sun/nio/cs/Surrogate | |
48 sun/nio/fs/DefaultFileSystemProvider | |
48 sun/nio/fs/DefaultFileTypeDetector | |
48 sun/nio/fs/NativeBuffers | |
48 sun/nio/fs/Util | |
48 sun/nio/fs/WindowsChannelFactory | |
48 sun/nio/fs/WindowsNativeDispatcher | |
48 sun/nio/fs/WindowsPathParser | |
48 sun/nio/fs/WindowsUserPrincipals | |
48 sun/print/CustomMediaSizeName | |
48 sun/print/CustomMediaTray | |
48 sun/rmi/server/LoaderHandler | |
48 sun/rmi/transport/DGCClient | |
48 sun/rmi/transport/proxy/CGIHandler | |
48 sun/security/provider/certpath/DistributionPointFetcher | |
48 sun/security/provider/certpath/OCSP | |
48 sun/security/util/ECUtil | |
48 sun/security/util/UntrustedCertificates | |
48 sun/util/locale/LocaleMatcher | |
48 sun/util/logging/LoggingSupport | |
47 com/sun/corba/se/impl/protocol/CorbaInvocationInfo | |
47 java/lang/reflect/Proxy | |
43 com/sun/corba/se/impl/naming/cosnaming/TransientNameServer | |
43 com/sun/corba/se/impl/orbutil/CacheTable | |
43 java/sql/DriverManager | |
43 sun/rmi/transport/ObjectTable | |
27804 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment