blob: e63515747cb9a1c84658af52eab5c78213a17276 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.codehaus.groovy.vmplugin.v9;
import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyRuntimeException;
import groovy.lang.MetaClass;
import groovy.lang.MetaMethod;
import groovy.lang.Tuple;
import groovy.lang.Tuple2;
import org.codehaus.groovy.GroovyBugError;
import org.codehaus.groovy.reflection.CachedClass;
import org.codehaus.groovy.reflection.CachedMethod;
import org.codehaus.groovy.reflection.ReflectionUtils;
import org.codehaus.groovy.runtime.DefaultGroovyMethods;
import org.codehaus.groovy.vmplugin.v8.Java8;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.module.ModuleDescriptor;
import java.lang.module.ModuleFinder;
import java.lang.module.ModuleReference;
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.math.BigInteger;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
/**
* Additional Java 9 based functions will be added here as needed.
*/
public class Java9 extends Java8 {
private static final Logger LOGGER = Logger.getLogger(Java9.class.getName());
@Override
public Map<String, Set<String>> getDefaultImportClasses(String[] packageNames) {
List<String> javaPns = new ArrayList<>(4);
List<String> groovyPns = new ArrayList<>(4);
for (String prefix : packageNames) {
String pn = prefix.substring(0, prefix.length() - 1).replace('.', '/');
if (pn.startsWith("java/")) {
javaPns.add(pn);
} else if (pn.startsWith("groovy/")) {
groovyPns.add(pn);
} else {
throw new GroovyBugError("unexpected package: " + pn);
}
}
Map<String, Set<String>> result = new LinkedHashMap<>(2048);
try (GroovyClassLoader gcl = new GroovyClassLoader(this.getClass().getClassLoader())) {
result.putAll(doFindClasses(URI.create("jrt:/modules/java.base/"), "java", javaPns));
URI gsLocation = DefaultGroovyMethods.getLocation(gcl.loadClass("groovy.lang.GroovySystem")).toURI();
result.putAll(doFindClasses(gsLocation, "groovy", groovyPns));
// in production environment, groovy-core classes, e.g. `GroovySystem`(java class) and `GrapeIvy`(groovy class) are all packaged in the groovy-core jar file,
// but in Groovy development environment, groovy-core classes are distributed in different directories
URI giLocation = DefaultGroovyMethods.getLocation(gcl.loadClass("groovy.grape.GrapeIvy")).toURI();
if (!gsLocation.equals(giLocation)) {
result.putAll(doFindClasses(giLocation, "groovy", groovyPns));
}
} catch (Exception ignore) {
if (LOGGER.isLoggable(Level.FINEST)) {
LOGGER.finest("[WARNING] Failed to find default imported classes:\n" + DefaultGroovyMethods.asString(ignore));
}
}
return result;
}
private static Map<String, Set<String>> doFindClasses(URI uri, String packageName, List<String> defaultPackageNames) {
Map<String, Set<String>> result = ClassFinder.find(uri, packageName, true)
.entrySet().stream()
.filter(e -> e.getValue().stream().anyMatch(defaultPackageNames::contains))
.collect(
Collectors.toMap(
Map.Entry::getKey,
entry -> entry.getValue().stream()
.filter(e -> defaultPackageNames.contains(e))
.map(e -> e.replace('/', '.') + ".")
.collect(Collectors.toSet())
)
);
return result;
}
private static class LookupHolder {
private static final Method PRIVATE_LOOKUP;
private static final Constructor<MethodHandles.Lookup> LOOKUP_Constructor;
static {
Constructor<MethodHandles.Lookup> lookup = null;
Method privateLookup = null;
try { // java 9
privateLookup = MethodHandles.class.getMethod("privateLookupIn", Class.class, MethodHandles.Lookup.class);
} catch (final NoSuchMethodException | RuntimeException e) { // java 8 or fallback if anything else goes wrong
try {
lookup = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class, Integer.TYPE);
if (!lookup.isAccessible()) {
ReflectionUtils.trySetAccessible(lookup);
}
} catch (final NoSuchMethodException ex) {
throw new IllegalStateException("Incompatible JVM", e);
}
}
PRIVATE_LOOKUP = privateLookup;
LOOKUP_Constructor = lookup;
}
}
private static Constructor<MethodHandles.Lookup> getLookupConstructor() {
return LookupHolder.LOOKUP_Constructor;
}
private static Method getPrivateLookup() {
return LookupHolder.PRIVATE_LOOKUP;
}
public static MethodHandles.Lookup of(final Class<?> declaringClass) {
try {
final Method privateLookup = getPrivateLookup();
if (privateLookup != null) {
return (MethodHandles.Lookup) privateLookup.invoke(null, declaringClass, MethodHandles.lookup());
}
return getLookupConstructor().newInstance(declaringClass, MethodHandles.Lookup.PRIVATE).in(declaringClass);
} catch (final IllegalAccessException | InstantiationException e) {
throw new IllegalArgumentException(e);
} catch (final InvocationTargetException e) {
throw new GroovyRuntimeException(e);
}
}
@Override
public int getVersion() {
return 9;
}
@Override
public Object getInvokeSpecialHandle(Method method, Object receiver) {
final Class<?> receiverType = receiver.getClass();
try {
return of(receiverType).unreflectSpecial(method, receiverType).bindTo(receiver);
} catch (ReflectiveOperationException e) {
return super.getInvokeSpecialHandle(method, receiver);
}
}
/**
* This method may be used by a caller in class C to check whether to enable access to a member of declaring class D successfully
* if {@link Java8#checkCanSetAccessible(java.lang.reflect.AccessibleObject, java.lang.Class)} returns true and any of the following hold:
* <p>
* 1) C and D are in the same module.
* 2) The member is public and D is public in a package that the module containing D exports to at least the module containing C.
* 3) The member is protected static, D is public in a package that the module containing D exports to at least the module containing C, and C is a subclass of D.
* 4) D is in a package that the module containing D opens to at least the module containing C. All packages in unnamed and open modules are open to all modules and so this method always succeeds when D is in an unnamed or open module.
*
* @param accessibleObject the accessible object to check
* @param callerClass the callerClass to invoke {@code setAccessible}
* @return the check result
*/
public boolean checkCanSetAccessible(AccessibleObject accessibleObject, Class<?> callerClass) {
if (!super.checkCanSetAccessible(accessibleObject, callerClass)) return false;
if (callerClass == MethodHandle.class) {
throw new IllegalCallerException(); // should not happen
}
if (!(accessibleObject instanceof Member)) {
throw new IllegalArgumentException("accessibleObject should be a member of type: " + accessibleObject); // should not happen
}
Member member = (Member) accessibleObject;
Class<?> declaringClass = member.getDeclaringClass();
Module callerModule = callerClass.getModule();
Module declaringModule = declaringClass.getModule();
if (callerModule == declaringModule) return true;
if (callerModule == Object.class.getModule()) return true;
if (!declaringModule.isNamed()) return true;
int modifiers = member.getModifiers();
return checkAccessible(callerClass, declaringClass, modifiers, true);
}
@Override
public boolean trySetAccessible(AccessibleObject ao) {
return ao.trySetAccessible();
}
@Override
public MetaMethod transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod, Class<?> caller) {
if (!(metaMethod instanceof CachedMethod)) {
return metaMethod;
}
CachedMethod cachedMethod = (CachedMethod) metaMethod;
CachedClass methodDeclaringClass = cachedMethod.getDeclaringClass();
if (null == methodDeclaringClass) {
return metaMethod;
}
if (null == caller) {
caller = ReflectionUtils.class; // "set accessible" are done via `org.codehaus.groovy.reflection.ReflectionUtils` as shown in warnings
}
return getOrTransformMetaMethod(metaClass, caller, cachedMethod);
}
private CachedMethod getOrTransformMetaMethod(MetaClass metaClass, Class<?> caller, CachedMethod cachedMethod) {
CachedMethod transformedMethod = cachedMethod.getTransformedMethod();
if (null != transformedMethod) {
return transformedMethod;
}
transformedMethod = doTransformMetaMethod(metaClass, cachedMethod, caller);
cachedMethod.setTransformedMethod(transformedMethod);
return transformedMethod;
}
private CachedMethod doTransformMetaMethod(MetaClass metaClass, CachedMethod metaMethod, Class<?> caller) {
CachedClass methodDeclaringClass = metaMethod.getDeclaringClass();
Class<?> declaringClass = methodDeclaringClass.getTheClass();
int methodModifiers = metaMethod.getModifiers();
// if caller can access the method,
// no need to transform the meta method
if (checkAccessible(caller, declaringClass, methodModifiers, false)) {
return metaMethod;
}
Class<?>[] params = metaMethod.getPT();
Class<?> theClass = metaClass.getTheClass();
if (declaringClass == theClass) {
if (BigInteger.class == theClass) {
CachedMethod bigIntegerMetaMethod = transformBigIntegerMetaMethod(metaMethod, params);
if (bigIntegerMetaMethod != metaMethod) {
return bigIntegerMetaMethod;
}
}
// GROOVY-9081 "3) Access public members of private class", e.g. Collections.unmodifiableMap([:]).toString()
// try to find the visible method from its superclasses
List<Class<?>> classList = findSuperclasses(theClass);
classList.add(0, theClass);
for (Class<?> sc : classList) {
Optional<CachedMethod> optionalMetaMethod = getAccessibleMetaMethod(metaMethod, params, caller, sc, true);
if (optionalMetaMethod.isPresent()) {
return optionalMetaMethod.get();
}
}
return metaMethod;
} else if (declaringClass.isAssignableFrom(theClass)) {
// if caller can not access the method,
// try to find the corresponding method in its derived class
// GROOVY-9081 Sub-class derives the protected members from public class, "Invoke the members on the sub class instances"
// e.g. StringBuilder sb = new StringBuilder(); sb.setLength(0);
// `setLength` is the method of `AbstractStringBuilder`, which is `package-private`
Optional<CachedMethod> optionalMetaMethod = getAccessibleMetaMethod(metaMethod, params, caller, theClass, false);
if (optionalMetaMethod.isPresent()) {
return optionalMetaMethod.get();
}
}
return metaMethod;
}
private static CachedMethod transformBigIntegerMetaMethod(CachedMethod metaMethod, Class<?>[] params) {
if (1 == params.length && MULTIPLY.equals(metaMethod.getName())) {
Class<?> param = params[0];
if (Long.class == param || long.class == param
|| Integer.class == param || int.class == param
|| Short.class == param || short.class == param) {
return new CachedMethod(BigIntegerMultiplyMethodHolder.MULTIPLY_METHOD);
}
}
return metaMethod;
}
private Optional<CachedMethod> getAccessibleMetaMethod(CachedMethod metaMethod, Class<?>[] params, Class<?> caller, Class<?> sc, boolean declared) {
List<CachedMethod> metaMethodList = getMetaMethods(metaMethod, params, sc, declared);
for (CachedMethod mm : metaMethodList) {
if (checkAccessible(caller, mm.getDeclaringClass().getTheClass(), mm.getModifiers(), false)) {
return Optional.of(mm);
}
}
return Optional.empty();
}
private static List<CachedMethod> getMetaMethods(CachedMethod metaMethod, Class<?>[] params, Class<?> sc, boolean declared) {
String metaMethodName = metaMethod.getName();
List<Method> optionalMethodList = declared
? ReflectionUtils.getDeclaredMethods(sc, metaMethodName, params)
: ReflectionUtils.getMethods(sc, metaMethodName, params);
return optionalMethodList.stream().map(CachedMethod::new).collect(Collectors.toList());
}
@Override
public boolean checkAccessible(Class<?> callerClass, Class<?> declaringClass, int memberModifiers, boolean allowIllegalAccess) {
Module callerModule = callerClass.getModule();
Module declaringModule = declaringClass.getModule();
String pn = declaringClass.getPackageName();
boolean unnamedModuleAccessNamedModule = !callerModule.isNamed() && declaringModule.isNamed();
boolean toCheckIllegalAccess = !allowIllegalAccess && unnamedModuleAccessNamedModule;
// class is public and package is exported to callerClass
boolean isClassPublic = Modifier.isPublic(declaringClass.getModifiers());
if (isClassPublic && declaringModule.isExported(pn, callerModule)) {
// member is public
if (Modifier.isPublic(memberModifiers)) {
return !(toCheckIllegalAccess && isExportedForIllegalAccess(declaringModule, pn));
}
// member is protected-static
if (Modifier.isProtected(memberModifiers)
&& Modifier.isStatic(memberModifiers)
&& isSubclassOf(callerClass, declaringClass)) {
return !(toCheckIllegalAccess && isExportedForIllegalAccess(declaringModule, pn));
}
}
// package is open to callerClass
if (declaringModule.isOpen(pn, callerModule)) {
return !(toCheckIllegalAccess && isOpenedForIllegalAccess(declaringModule, pn));
}
return false;
}
private static boolean isExportedForIllegalAccess(Module declaringModule, String pn) {
return concealedPackageList(declaringModule).contains(pn);
}
private static boolean isOpenedForIllegalAccess(Module declaringModule, String pn) {
if (isExportedForIllegalAccess(declaringModule, pn)) return true;
return exportedPackageList(declaringModule).contains(pn);
}
private static boolean isSubclassOf(Class<?> queryClass, Class<?> ofClass) {
while (queryClass != null) {
if (queryClass == ofClass) {
return true;
}
queryClass = queryClass.getSuperclass();
}
return false;
}
private static List<Class<?>> findSuperclasses(Class<?> clazz) {
List<Class<?>> result = new LinkedList<>();
for (Class<?> c = clazz.getSuperclass(); null != c; c = c.getSuperclass()) {
result.add(c);
}
return result;
}
private static Set<String> concealedPackageList(Module module) {
return CONCEALED_PACKAGES_TO_OPEN.computeIfAbsent(module.getName(), m -> new HashSet<>());
}
private static Set<String> exportedPackageList(Module module) {
return EXPORTED_PACKAGES_TO_OPEN.computeIfAbsent(module.getName(), m -> new HashSet<>());
}
private static final Map<String, Set<String>> CONCEALED_PACKAGES_TO_OPEN;
private static final Map<String, Set<String>> EXPORTED_PACKAGES_TO_OPEN;
static {
Tuple2<Map<String, Set<String>>, Map<String, Set<String>>> tuple2 = findConcealedAndExportedPackagesToOpen();
CONCEALED_PACKAGES_TO_OPEN = tuple2.getV1();
EXPORTED_PACKAGES_TO_OPEN = tuple2.getV2();
}
private static Tuple2<Map<String, Set<String>>, Map<String, Set<String>>> findConcealedAndExportedPackagesToOpen() {
ModuleFinder finder = ModuleFinder.ofSystem();
Map<String, ModuleDescriptor> map = new HashMap<>();
finder.findAll().stream()
.map(ModuleReference::descriptor)
.forEach(md -> md.packages().forEach(pn -> map.putIfAbsent(pn, md)));
final Map<String, Set<String>> concealedPackagesToOpen = new HashMap<>();
final Map<String, Set<String>> exportedPackagesToOpen = new HashMap<>();
Arrays.stream(JAVA8_PACKAGES())
.forEach(pn -> {
ModuleDescriptor descriptor = map.get(pn);
if (descriptor != null && !isOpen(descriptor, pn)) {
String name = descriptor.name();
if (isExported(descriptor, pn)) {
exportedPackagesToOpen.computeIfAbsent(name,
k -> new HashSet<>()).add(pn);
} else {
concealedPackagesToOpen.computeIfAbsent(name,
k -> new HashSet<>()).add(pn);
}
}
});
return Tuple.tuple(concealedPackagesToOpen, exportedPackagesToOpen);
}
private static boolean isExported(ModuleDescriptor descriptor, String pn) {
return descriptor.exports()
.stream()
.anyMatch(e -> e.source().equals(pn) && !e.isQualified());
}
private static boolean isOpen(ModuleDescriptor descriptor, String pn) {
return descriptor.opens()
.stream()
.anyMatch(e -> e.source().equals(pn) && !e.isQualified());
}
private static final String MULTIPLY = "multiply";
private static class BigIntegerMultiplyMethodHolder {
private static final Method MULTIPLY_METHOD;
static {
try {
MULTIPLY_METHOD = BigInteger.class.getDeclaredMethod(MULTIPLY, BigInteger.class);
} catch (NoSuchMethodException | SecurityException e) {
throw new GroovyBugError("Failed to find " + MULTIPLY + " method of BigInteger", e);
}
}
}
private static String[] JAVA8_PACKAGES() {
// The following package list should NOT be changed!
return new String[] {
"apple.applescript",
"apple.laf",
"apple.launcher",
"apple.security",
"com.apple.concurrent",
"com.apple.eawt",
"com.apple.eawt.event",
"com.apple.eio",
"com.apple.laf",
"com.apple.laf.resources",
"com.oracle.jrockit.jfr",
"com.oracle.jrockit.jfr.client",
"com.oracle.jrockit.jfr.management",
"com.oracle.security.ucrypto",
"com.oracle.util",
"com.oracle.webservices.internal.api",
"com.oracle.webservices.internal.api.databinding",
"com.oracle.webservices.internal.api.message",
"com.oracle.webservices.internal.impl.encoding",
"com.oracle.webservices.internal.impl.internalspi.encoding",
"com.oracle.xmlns.internal.webservices.jaxws_databinding",
"com.sun.accessibility.internal.resources",
"com.sun.activation.registries",
"com.sun.awt",
"com.sun.beans",
"com.sun.beans.decoder",
"com.sun.beans.editors",
"com.sun.beans.finder",
"com.sun.beans.infos",
"com.sun.beans.util",
"com.sun.codemodel.internal",
"com.sun.codemodel.internal.fmt",
"com.sun.codemodel.internal.util",
"com.sun.codemodel.internal.writer",
"com.sun.corba.se.impl.activation",
"com.sun.corba.se.impl.copyobject",
"com.sun.corba.se.impl.corba",
"com.sun.corba.se.impl.dynamicany",
"com.sun.corba.se.impl.encoding",
"com.sun.corba.se.impl.interceptors",
"com.sun.corba.se.impl.io",
"com.sun.corba.se.impl.ior",
"com.sun.corba.se.impl.ior.iiop",
"com.sun.corba.se.impl.javax.rmi",
"com.sun.corba.se.impl.javax.rmi.CORBA",
"com.sun.corba.se.impl.legacy.connection",
"com.sun.corba.se.impl.logging",
"com.sun.corba.se.impl.monitoring",
"com.sun.corba.se.impl.naming.cosnaming",
"com.sun.corba.se.impl.naming.namingutil",
"com.sun.corba.se.impl.naming.pcosnaming",
"com.sun.corba.se.impl.oa",
"com.sun.corba.se.impl.oa.poa",
"com.sun.corba.se.impl.oa.toa",
"com.sun.corba.se.impl.orb",
"com.sun.corba.se.impl.orbutil",
"com.sun.corba.se.impl.orbutil.closure",
"com.sun.corba.se.impl.orbutil.concurrent",
"com.sun.corba.se.impl.orbutil.fsm",
"com.sun.corba.se.impl.orbutil.graph",
"com.sun.corba.se.impl.orbutil.threadpool",
"com.sun.corba.se.impl.presentation.rmi",
"com.sun.corba.se.impl.protocol",
"com.sun.corba.se.impl.protocol.giopmsgheaders",
"com.sun.corba.se.impl.resolver",
"com.sun.corba.se.impl.transport",
"com.sun.corba.se.impl.util",
"com.sun.corba.se.internal.CosNaming",
"com.sun.corba.se.internal.Interceptors",
"com.sun.corba.se.internal.POA",
"com.sun.corba.se.internal.corba",
"com.sun.corba.se.internal.iiop",
"com.sun.corba.se.org.omg.CORBA",
"com.sun.corba.se.pept.broker",
"com.sun.corba.se.pept.encoding",
"com.sun.corba.se.pept.protocol",
"com.sun.corba.se.pept.transport",
"com.sun.corba.se.spi.activation",
"com.sun.corba.se.spi.activation.InitialNameServicePackage",
"com.sun.corba.se.spi.activation.LocatorPackage",
"com.sun.corba.se.spi.activation.RepositoryPackage",
"com.sun.corba.se.spi.copyobject",
"com.sun.corba.se.spi.encoding",
"com.sun.corba.se.spi.extension",
"com.sun.corba.se.spi.ior",
"com.sun.corba.se.spi.ior.iiop",
"com.sun.corba.se.spi.legacy.connection",
"com.sun.corba.se.spi.legacy.interceptor",
"com.sun.corba.se.spi.logging",
"com.sun.corba.se.spi.monitoring",
"com.sun.corba.se.spi.oa",
"com.sun.corba.se.spi.orb",
"com.sun.corba.se.spi.orbutil.closure",
"com.sun.corba.se.spi.orbutil.fsm",
"com.sun.corba.se.spi.orbutil.proxy",
"com.sun.corba.se.spi.orbutil.threadpool",
"com.sun.corba.se.spi.presentation.rmi",
"com.sun.corba.se.spi.protocol",
"com.sun.corba.se.spi.resolver",
"com.sun.corba.se.spi.servicecontext",
"com.sun.corba.se.spi.transport",
"com.sun.crypto.provider",
"com.sun.demo.jvmti.hprof",
"com.sun.deploy.uitoolkit.impl.fx",
"com.sun.deploy.uitoolkit.impl.fx.ui",
"com.sun.deploy.uitoolkit.impl.fx.ui.resources",
"com.sun.glass.events",
"com.sun.glass.events.mac",
"com.sun.glass.ui",
"com.sun.glass.ui.delegate",
"com.sun.glass.ui.gtk",
"com.sun.glass.ui.mac",
"com.sun.glass.ui.win",
"com.sun.glass.utils",
"com.sun.image.codec.jpeg",
"com.sun.imageio.plugins.bmp",
"com.sun.imageio.plugins.common",
"com.sun.imageio.plugins.gif",
"com.sun.imageio.plugins.jpeg",
"com.sun.imageio.plugins.png",
"com.sun.imageio.plugins.wbmp",
"com.sun.imageio.spi",
"com.sun.imageio.stream",
"com.sun.istack.internal",
"com.sun.istack.internal.localization",
"com.sun.istack.internal.logging",
"com.sun.istack.internal.tools",
"com.sun.jarsigner",
"com.sun.java.accessibility",
"com.sun.java.accessibility.util",
"com.sun.java.accessibility.util.java.awt",
"com.sun.java.browser.dom",
"com.sun.java.browser.net",
"com.sun.java.swing",
"com.sun.java.swing.plaf.gtk",
"com.sun.java.swing.plaf.gtk.resources",
"com.sun.java.swing.plaf.motif",
"com.sun.java.swing.plaf.motif.resources",
"com.sun.java.swing.plaf.nimbus",
"com.sun.java.swing.plaf.windows",
"com.sun.java.swing.plaf.windows.resources",
"com.sun.java.util.jar.pack",
"com.sun.java_cup.internal.runtime",
"com.sun.javadoc",
"com.sun.javafx",
"com.sun.javafx.animation",
"com.sun.javafx.applet",
"com.sun.javafx.application",
"com.sun.javafx.beans",
"com.sun.javafx.beans.event",
"com.sun.javafx.binding",
"com.sun.javafx.charts",
"com.sun.javafx.collections",
"com.sun.javafx.css",
"com.sun.javafx.css.converters",
"com.sun.javafx.css.parser",
"com.sun.javafx.cursor",
"com.sun.javafx.effect",
"com.sun.javafx.embed",
"com.sun.javafx.event",
"com.sun.javafx.font",
"com.sun.javafx.font.coretext",
"com.sun.javafx.font.directwrite",
"com.sun.javafx.font.freetype",
"com.sun.javafx.font.t2k",
"com.sun.javafx.fxml",
"com.sun.javafx.fxml.builder",
"com.sun.javafx.fxml.expression",
"com.sun.javafx.geom",
"com.sun.javafx.geom.transform",
"com.sun.javafx.geometry",
"com.sun.javafx.iio",
"com.sun.javafx.iio.bmp",
"com.sun.javafx.iio.common",
"com.sun.javafx.iio.gif",
"com.sun.javafx.iio.ios",
"com.sun.javafx.iio.jpeg",
"com.sun.javafx.iio.png",
"com.sun.javafx.image",
"com.sun.javafx.image.impl",
"com.sun.javafx.jmx",
"com.sun.javafx.logging",
"com.sun.javafx.media",
"com.sun.javafx.menu",
"com.sun.javafx.perf",
"com.sun.javafx.print",
"com.sun.javafx.property",
"com.sun.javafx.property.adapter",
"com.sun.javafx.robot",
"com.sun.javafx.robot.impl",
"com.sun.javafx.runtime",
"com.sun.javafx.runtime.async",
"com.sun.javafx.runtime.eula",
"com.sun.javafx.scene",
"com.sun.javafx.scene.control",
"com.sun.javafx.scene.control.behavior",
"com.sun.javafx.scene.control.skin",
"com.sun.javafx.scene.control.skin.resources",
"com.sun.javafx.scene.input",
"com.sun.javafx.scene.layout.region",
"com.sun.javafx.scene.paint",
"com.sun.javafx.scene.shape",
"com.sun.javafx.scene.text",
"com.sun.javafx.scene.transform",
"com.sun.javafx.scene.traversal",
"com.sun.javafx.scene.web",
"com.sun.javafx.scene.web.behavior",
"com.sun.javafx.scene.web.skin",
"com.sun.javafx.sg.prism",
"com.sun.javafx.sg.prism.web",
"com.sun.javafx.stage",
"com.sun.javafx.text",
"com.sun.javafx.tk",
"com.sun.javafx.tk.quantum",
"com.sun.javafx.util",
"com.sun.javafx.webkit",
"com.sun.javafx.webkit.drt",
"com.sun.javafx.webkit.prism",
"com.sun.javafx.webkit.prism.theme",
"com.sun.javafx.webkit.theme",
"com.sun.jdi",
"com.sun.jdi.connect",
"com.sun.jdi.connect.spi",
"com.sun.jdi.event",
"com.sun.jdi.request",
"com.sun.jmx.defaults",
"com.sun.jmx.interceptor",
"com.sun.jmx.mbeanserver",
"com.sun.jmx.remote.internal",
"com.sun.jmx.remote.protocol.iiop",
"com.sun.jmx.remote.protocol.rmi",
"com.sun.jmx.remote.security",
"com.sun.jmx.remote.util",
"com.sun.jmx.snmp",
"com.sun.jmx.snmp.IPAcl",
"com.sun.jmx.snmp.agent",
"com.sun.jmx.snmp.daemon",
"com.sun.jmx.snmp.defaults",
"com.sun.jmx.snmp.internal",
"com.sun.jmx.snmp.mpm",
"com.sun.jmx.snmp.tasks",
"com.sun.jndi.cosnaming",
"com.sun.jndi.dns",
"com.sun.jndi.ldap",
"com.sun.jndi.ldap.ext",
"com.sun.jndi.ldap.pool",
"com.sun.jndi.ldap.sasl",
"com.sun.jndi.rmi.registry",
"com.sun.jndi.toolkit.corba",
"com.sun.jndi.toolkit.ctx",
"com.sun.jndi.toolkit.dir",
"com.sun.jndi.toolkit.url",
"com.sun.jndi.url.corbaname",
"com.sun.jndi.url.dns",
"com.sun.jndi.url.iiop",
"com.sun.jndi.url.iiopname",
"com.sun.jndi.url.ldap",
"com.sun.jndi.url.ldaps",
"com.sun.jndi.url.rmi",
"com.sun.management",
"com.sun.management.jmx",
"com.sun.media.jfxmedia",
"com.sun.media.jfxmedia.control",
"com.sun.media.jfxmedia.effects",
"com.sun.media.jfxmedia.events",
"com.sun.media.jfxmedia.locator",
"com.sun.media.jfxmedia.logging",
"com.sun.media.jfxmedia.track",
"com.sun.media.jfxmediaimpl",
"com.sun.media.jfxmediaimpl.platform",
"com.sun.media.jfxmediaimpl.platform.gstreamer",
"com.sun.media.jfxmediaimpl.platform.ios",
"com.sun.media.jfxmediaimpl.platform.java",
"com.sun.media.jfxmediaimpl.platform.osx",
"com.sun.media.sound",
"com.sun.naming.internal",
"com.sun.net.httpserver",
"com.sun.net.httpserver.spi",
"com.sun.net.ssl",
"com.sun.net.ssl.internal.ssl",
"com.sun.net.ssl.internal.www.protocol.https",
"com.sun.nio.file",
"com.sun.nio.sctp",
"com.sun.nio.zipfs",
"com.sun.openpisces",
"com.sun.org.apache.bcel.internal",
"com.sun.org.apache.bcel.internal.classfile",
"com.sun.org.apache.bcel.internal.generic",
"com.sun.org.apache.bcel.internal.util",
"com.sun.org.apache.regexp.internal",
"com.sun.org.apache.xalan.internal",
"com.sun.org.apache.xalan.internal.extensions",
"com.sun.org.apache.xalan.internal.lib",
"com.sun.org.apache.xalan.internal.res",
"com.sun.org.apache.xalan.internal.templates",
"com.sun.org.apache.xalan.internal.utils",
"com.sun.org.apache.xalan.internal.xslt",
"com.sun.org.apache.xalan.internal.xsltc",
"com.sun.org.apache.xalan.internal.xsltc.cmdline",
"com.sun.org.apache.xalan.internal.xsltc.cmdline.getopt",
"com.sun.org.apache.xalan.internal.xsltc.compiler",
"com.sun.org.apache.xalan.internal.xsltc.compiler.util",
"com.sun.org.apache.xalan.internal.xsltc.dom",
"com.sun.org.apache.xalan.internal.xsltc.runtime",
"com.sun.org.apache.xalan.internal.xsltc.runtime.output",
"com.sun.org.apache.xalan.internal.xsltc.trax",
"com.sun.org.apache.xalan.internal.xsltc.util",
"com.sun.org.apache.xerces.internal.dom",
"com.sun.org.apache.xerces.internal.dom.events",
"com.sun.org.apache.xerces.internal.impl",
"com.sun.org.apache.xerces.internal.impl.dtd",
"com.sun.org.apache.xerces.internal.impl.dtd.models",
"com.sun.org.apache.xerces.internal.impl.dv",
"com.sun.org.apache.xerces.internal.impl.dv.dtd",
"com.sun.org.apache.xerces.internal.impl.dv.util",
"com.sun.org.apache.xerces.internal.impl.dv.xs",
"com.sun.org.apache.xerces.internal.impl.io",
"com.sun.org.apache.xerces.internal.impl.msg",
"com.sun.org.apache.xerces.internal.impl.validation",
"com.sun.org.apache.xerces.internal.impl.xpath",
"com.sun.org.apache.xerces.internal.impl.xpath.regex",
"com.sun.org.apache.xerces.internal.impl.xs",
"com.sun.org.apache.xerces.internal.impl.xs.identity",
"com.sun.org.apache.xerces.internal.impl.xs.models",
"com.sun.org.apache.xerces.internal.impl.xs.opti",
"com.sun.org.apache.xerces.internal.impl.xs.traversers",
"com.sun.org.apache.xerces.internal.impl.xs.util",
"com.sun.org.apache.xerces.internal.jaxp",
"com.sun.org.apache.xerces.internal.jaxp.datatype",
"com.sun.org.apache.xerces.internal.jaxp.validation",
"com.sun.org.apache.xerces.internal.parsers",
"com.sun.org.apache.xerces.internal.util",
"com.sun.org.apache.xerces.internal.utils",
"com.sun.org.apache.xerces.internal.xinclude",
"com.sun.org.apache.xerces.internal.xni",
"com.sun.org.apache.xerces.internal.xni.grammars",
"com.sun.org.apache.xerces.internal.xni.parser",
"com.sun.org.apache.xerces.internal.xpointer",
"com.sun.org.apache.xerces.internal.xs",
"com.sun.org.apache.xerces.internal.xs.datatypes",
"com.sun.org.apache.xml.internal.dtm",
"com.sun.org.apache.xml.internal.dtm.ref",
"com.sun.org.apache.xml.internal.dtm.ref.dom2dtm",
"com.sun.org.apache.xml.internal.dtm.ref.sax2dtm",
"com.sun.org.apache.xml.internal.res",
"com.sun.org.apache.xml.internal.resolver",
"com.sun.org.apache.xml.internal.resolver.helpers",
"com.sun.org.apache.xml.internal.resolver.readers",
"com.sun.org.apache.xml.internal.resolver.tools",
"com.sun.org.apache.xml.internal.security",
"com.sun.org.apache.xml.internal.security.algorithms",
"com.sun.org.apache.xml.internal.security.algorithms.implementations",
"com.sun.org.apache.xml.internal.security.c14n",
"com.sun.org.apache.xml.internal.security.c14n.helper",
"com.sun.org.apache.xml.internal.security.c14n.implementations",
"com.sun.org.apache.xml.internal.security.encryption",
"com.sun.org.apache.xml.internal.security.exceptions",
"com.sun.org.apache.xml.internal.security.keys",
"com.sun.org.apache.xml.internal.security.keys.content",
"com.sun.org.apache.xml.internal.security.keys.content.keyvalues",
"com.sun.org.apache.xml.internal.security.keys.content.x509",
"com.sun.org.apache.xml.internal.security.keys.keyresolver",
"com.sun.org.apache.xml.internal.security.keys.keyresolver.implementations",
"com.sun.org.apache.xml.internal.security.keys.storage",
"com.sun.org.apache.xml.internal.security.keys.storage.implementations",
"com.sun.org.apache.xml.internal.security.signature",
"com.sun.org.apache.xml.internal.security.signature.reference",
"com.sun.org.apache.xml.internal.security.transforms",
"com.sun.org.apache.xml.internal.security.transforms.implementations",
"com.sun.org.apache.xml.internal.security.transforms.params",
"com.sun.org.apache.xml.internal.security.utils",
"com.sun.org.apache.xml.internal.security.utils.resolver",
"com.sun.org.apache.xml.internal.security.utils.resolver.implementations",
"com.sun.org.apache.xml.internal.serialize",
"com.sun.org.apache.xml.internal.serializer",
"com.sun.org.apache.xml.internal.serializer.utils",
"com.sun.org.apache.xml.internal.utils",
"com.sun.org.apache.xml.internal.utils.res",
"com.sun.org.apache.xpath.internal",
"com.sun.org.apache.xpath.internal.axes",
"com.sun.org.apache.xpath.internal.compiler",
"com.sun.org.apache.xpath.internal.domapi",
"com.sun.org.apache.xpath.internal.functions",
"com.sun.org.apache.xpath.internal.jaxp",
"com.sun.org.apache.xpath.internal.objects",
"com.sun.org.apache.xpath.internal.operations",
"com.sun.org.apache.xpath.internal.patterns",
"com.sun.org.apache.xpath.internal.res",
"com.sun.org.glassfish.external.amx",
"com.sun.org.glassfish.external.arc",
"com.sun.org.glassfish.external.probe.provider",
"com.sun.org.glassfish.external.probe.provider.annotations",
"com.sun.org.glassfish.external.statistics",
"com.sun.org.glassfish.external.statistics.annotations",
"com.sun.org.glassfish.external.statistics.impl",
"com.sun.org.glassfish.gmbal",
"com.sun.org.glassfish.gmbal.util",
"com.sun.org.omg.CORBA",
"com.sun.org.omg.CORBA.ValueDefPackage",
"com.sun.org.omg.CORBA.portable",
"com.sun.org.omg.SendingContext",
"com.sun.org.omg.SendingContext.CodeBasePackage",
"com.sun.pisces",
"com.sun.prism",
"com.sun.prism.d3d",
"com.sun.prism.es2",
"com.sun.prism.image",
"com.sun.prism.impl",
"com.sun.prism.impl.packrect",
"com.sun.prism.impl.paint",
"com.sun.prism.impl.ps",
"com.sun.prism.impl.shape",
"com.sun.prism.j2d",
"com.sun.prism.j2d.paint",
"com.sun.prism.j2d.print",
"com.sun.prism.paint",
"com.sun.prism.ps",
"com.sun.prism.shader",
"com.sun.prism.shape",
"com.sun.prism.sw",
"com.sun.rmi.rmid",
"com.sun.rowset",
"com.sun.rowset.internal",
"com.sun.rowset.providers",
"com.sun.scenario",
"com.sun.scenario.animation",
"com.sun.scenario.animation.shared",
"com.sun.scenario.effect",
"com.sun.scenario.effect.impl",
"com.sun.scenario.effect.impl.es2",
"com.sun.scenario.effect.impl.hw",
"com.sun.scenario.effect.impl.hw.d3d",
"com.sun.scenario.effect.impl.prism",
"com.sun.scenario.effect.impl.prism.ps",
"com.sun.scenario.effect.impl.prism.sw",
"com.sun.scenario.effect.impl.state",
"com.sun.scenario.effect.impl.sw",
"com.sun.scenario.effect.impl.sw.java",
"com.sun.scenario.effect.impl.sw.sse",
"com.sun.scenario.effect.light",
"com.sun.security.auth",
"com.sun.security.auth.callback",
"com.sun.security.auth.login",
"com.sun.security.auth.module",
"com.sun.security.cert.internal.x509",
"com.sun.security.jgss",
"com.sun.security.ntlm",
"com.sun.security.sasl",
"com.sun.security.sasl.digest",
"com.sun.security.sasl.gsskerb",
"com.sun.security.sasl.ntlm",
"com.sun.security.sasl.util",
"com.sun.source.doctree",
"com.sun.source.tree",
"com.sun.source.util",
"com.sun.swing.internal.plaf.basic.resources",
"com.sun.swing.internal.plaf.metal.resources",
"com.sun.swing.internal.plaf.synth.resources",
"com.sun.tools.attach",
"com.sun.tools.attach.spi",
"com.sun.tools.classfile",
"com.sun.tools.corba.se.idl",
"com.sun.tools.corba.se.idl.constExpr",
"com.sun.tools.corba.se.idl.som.cff",
"com.sun.tools.corba.se.idl.som.idlemit",
"com.sun.tools.corba.se.idl.toJavaPortable",
"com.sun.tools.doclets",
"com.sun.tools.doclets.formats.html",
"com.sun.tools.doclets.formats.html.markup",
"com.sun.tools.doclets.formats.html.resources",
"com.sun.tools.doclets.internal.toolkit",
"com.sun.tools.doclets.internal.toolkit.builders",
"com.sun.tools.doclets.internal.toolkit.resources",
"com.sun.tools.doclets.internal.toolkit.taglets",
"com.sun.tools.doclets.internal.toolkit.util",
"com.sun.tools.doclets.internal.toolkit.util.links",
"com.sun.tools.doclets.standard",
"com.sun.tools.doclint",
"com.sun.tools.doclint.resources",
"com.sun.tools.example.debug.expr",
"com.sun.tools.example.debug.tty",
"com.sun.tools.extcheck",
"com.sun.tools.hat",
"com.sun.tools.hat.internal.model",
"com.sun.tools.hat.internal.oql",
"com.sun.tools.hat.internal.parser",
"com.sun.tools.hat.internal.server",
"com.sun.tools.hat.internal.util",
"com.sun.tools.internal.jxc",
"com.sun.tools.internal.jxc.ap",
"com.sun.tools.internal.jxc.api",
"com.sun.tools.internal.jxc.api.impl.j2s",
"com.sun.tools.internal.jxc.gen.config",
"com.sun.tools.internal.jxc.model.nav",
"com.sun.tools.internal.ws",
"com.sun.tools.internal.ws.api",
"com.sun.tools.internal.ws.api.wsdl",
"com.sun.tools.internal.ws.processor",
"com.sun.tools.internal.ws.processor.generator",
"com.sun.tools.internal.ws.processor.model",
"com.sun.tools.internal.ws.processor.model.exporter",
"com.sun.tools.internal.ws.processor.model.java",
"com.sun.tools.internal.ws.processor.model.jaxb",
"com.sun.tools.internal.ws.processor.modeler",
"com.sun.tools.internal.ws.processor.modeler.annotation",
"com.sun.tools.internal.ws.processor.modeler.wsdl",
"com.sun.tools.internal.ws.processor.util",
"com.sun.tools.internal.ws.resources",
"com.sun.tools.internal.ws.spi",
"com.sun.tools.internal.ws.util",
"com.sun.tools.internal.ws.util.xml",
"com.sun.tools.internal.ws.wscompile",
"com.sun.tools.internal.ws.wscompile.plugin.at_generated",
"com.sun.tools.internal.ws.wsdl.document",
"com.sun.tools.internal.ws.wsdl.document.http",
"com.sun.tools.internal.ws.wsdl.document.jaxws",
"com.sun.tools.internal.ws.wsdl.document.mime",
"com.sun.tools.internal.ws.wsdl.document.schema",
"com.sun.tools.internal.ws.wsdl.document.soap",
"com.sun.tools.internal.ws.wsdl.framework",
"com.sun.tools.internal.ws.wsdl.parser",
"com.sun.tools.internal.xjc",
"com.sun.tools.internal.xjc.addon.accessors",
"com.sun.tools.internal.xjc.addon.at_generated",
"com.sun.tools.internal.xjc.addon.code_injector",
"com.sun.tools.internal.xjc.addon.episode",
"com.sun.tools.internal.xjc.addon.locator",
"com.sun.tools.internal.xjc.addon.sync",
"com.sun.tools.internal.xjc.api",
"com.sun.tools.internal.xjc.api.impl.s2j",
"com.sun.tools.internal.xjc.api.util",
"com.sun.tools.internal.xjc.generator.annotation.spec",
"com.sun.tools.internal.xjc.generator.bean",
"com.sun.tools.internal.xjc.generator.bean.field",
"com.sun.tools.internal.xjc.generator.util",
"com.sun.tools.internal.xjc.model",
"com.sun.tools.internal.xjc.model.nav",
"com.sun.tools.internal.xjc.outline",
"com.sun.tools.internal.xjc.reader",
"com.sun.tools.internal.xjc.reader.dtd",
"com.sun.tools.internal.xjc.reader.dtd.bindinfo",
"com.sun.tools.internal.xjc.reader.gbind",
"com.sun.tools.internal.xjc.reader.internalizer",
"com.sun.tools.internal.xjc.reader.relaxng",
"com.sun.tools.internal.xjc.reader.xmlschema",
"com.sun.tools.internal.xjc.reader.xmlschema.bindinfo",
"com.sun.tools.internal.xjc.reader.xmlschema.ct",
"com.sun.tools.internal.xjc.reader.xmlschema.parser",
"com.sun.tools.internal.xjc.runtime",
"com.sun.tools.internal.xjc.util",
"com.sun.tools.internal.xjc.writer",
"com.sun.tools.javac",
"com.sun.tools.javac.api",
"com.sun.tools.javac.code",
"com.sun.tools.javac.comp",
"com.sun.tools.javac.file",
"com.sun.tools.javac.jvm",
"com.sun.tools.javac.main",
"com.sun.tools.javac.model",
"com.sun.tools.javac.nio",
"com.sun.tools.javac.parser",
"com.sun.tools.javac.processing",
"com.sun.tools.javac.resources",
"com.sun.tools.javac.sym",
"com.sun.tools.javac.tree",
"com.sun.tools.javac.util",
"com.sun.tools.javadoc",
"com.sun.tools.javadoc.api",
"com.sun.tools.javadoc.resources",
"com.sun.tools.javah",
"com.sun.tools.javah.resources",
"com.sun.tools.javap",
"com.sun.tools.javap.resources",
"com.sun.tools.jconsole",
"com.sun.tools.jdeps",
"com.sun.tools.jdeps.resources",
"com.sun.tools.jdi",
"com.sun.tools.jdi.resources",
"com.sun.tools.script.shell",
"com.sun.tracing",
"com.sun.tracing.dtrace",
"com.sun.webkit",
"com.sun.webkit.dom",
"com.sun.webkit.event",
"com.sun.webkit.graphics",
"com.sun.webkit.network",
"com.sun.webkit.network.about",
"com.sun.webkit.network.data",
"com.sun.webkit.perf",
"com.sun.webkit.plugin",
"com.sun.webkit.text",
"com.sun.xml.internal.bind",
"com.sun.xml.internal.bind.annotation",
"com.sun.xml.internal.bind.api",
"com.sun.xml.internal.bind.api.impl",
"com.sun.xml.internal.bind.marshaller",
"com.sun.xml.internal.bind.unmarshaller",
"com.sun.xml.internal.bind.util",
"com.sun.xml.internal.bind.v2",
"com.sun.xml.internal.bind.v2.bytecode",
"com.sun.xml.internal.bind.v2.model.annotation",
"com.sun.xml.internal.bind.v2.model.core",
"com.sun.xml.internal.bind.v2.model.impl",
"com.sun.xml.internal.bind.v2.model.nav",
"com.sun.xml.internal.bind.v2.model.runtime",
"com.sun.xml.internal.bind.v2.model.util",
"com.sun.xml.internal.bind.v2.runtime",
"com.sun.xml.internal.bind.v2.runtime.output",
"com.sun.xml.internal.bind.v2.runtime.property",
"com.sun.xml.internal.bind.v2.runtime.reflect",
"com.sun.xml.internal.bind.v2.runtime.reflect.opt",
"com.sun.xml.internal.bind.v2.runtime.unmarshaller",
"com.sun.xml.internal.bind.v2.schemagen",
"com.sun.xml.internal.bind.v2.schemagen.episode",
"com.sun.xml.internal.bind.v2.schemagen.xmlschema",
"com.sun.xml.internal.bind.v2.util",
"com.sun.xml.internal.dtdparser",
"com.sun.xml.internal.fastinfoset",
"com.sun.xml.internal.fastinfoset.algorithm",
"com.sun.xml.internal.fastinfoset.alphabet",
"com.sun.xml.internal.fastinfoset.dom",
"com.sun.xml.internal.fastinfoset.org.apache.xerces.util",
"com.sun.xml.internal.fastinfoset.sax",
"com.sun.xml.internal.fastinfoset.stax",
"com.sun.xml.internal.fastinfoset.stax.events",
"com.sun.xml.internal.fastinfoset.stax.factory",
"com.sun.xml.internal.fastinfoset.stax.util",
"com.sun.xml.internal.fastinfoset.tools",
"com.sun.xml.internal.fastinfoset.util",
"com.sun.xml.internal.fastinfoset.vocab",
"com.sun.xml.internal.messaging.saaj",
"com.sun.xml.internal.messaging.saaj.client.p2p",
"com.sun.xml.internal.messaging.saaj.packaging.mime",
"com.sun.xml.internal.messaging.saaj.packaging.mime.internet",
"com.sun.xml.internal.messaging.saaj.packaging.mime.util",
"com.sun.xml.internal.messaging.saaj.soap",
"com.sun.xml.internal.messaging.saaj.soap.dynamic",
"com.sun.xml.internal.messaging.saaj.soap.impl",
"com.sun.xml.internal.messaging.saaj.soap.name",
"com.sun.xml.internal.messaging.saaj.soap.ver1_1",
"com.sun.xml.internal.messaging.saaj.soap.ver1_2",
"com.sun.xml.internal.messaging.saaj.util",
"com.sun.xml.internal.messaging.saaj.util.transform",
"com.sun.xml.internal.org.jvnet.fastinfoset",
"com.sun.xml.internal.org.jvnet.fastinfoset.sax",
"com.sun.xml.internal.org.jvnet.fastinfoset.sax.helpers",
"com.sun.xml.internal.org.jvnet.fastinfoset.stax",
"com.sun.xml.internal.org.jvnet.mimepull",
"com.sun.xml.internal.org.jvnet.staxex",
"com.sun.xml.internal.rngom.ast.builder",
"com.sun.xml.internal.rngom.ast.om",
"com.sun.xml.internal.rngom.ast.util",
"com.sun.xml.internal.rngom.binary",
"com.sun.xml.internal.rngom.binary.visitor",
"com.sun.xml.internal.rngom.digested",
"com.sun.xml.internal.rngom.dt",
"com.sun.xml.internal.rngom.dt.builtin",
"com.sun.xml.internal.rngom.nc",
"com.sun.xml.internal.rngom.parse",
"com.sun.xml.internal.rngom.parse.compact",
"com.sun.xml.internal.rngom.parse.host",
"com.sun.xml.internal.rngom.parse.xml",
"com.sun.xml.internal.rngom.util",
"com.sun.xml.internal.rngom.xml.sax",
"com.sun.xml.internal.rngom.xml.util",
"com.sun.xml.internal.stream",
"com.sun.xml.internal.stream.buffer",
"com.sun.xml.internal.stream.buffer.sax",
"com.sun.xml.internal.stream.buffer.stax",
"com.sun.xml.internal.stream.dtd",
"com.sun.xml.internal.stream.dtd.nonvalidating",
"com.sun.xml.internal.stream.events",
"com.sun.xml.internal.stream.util",
"com.sun.xml.internal.stream.writers",
"com.sun.xml.internal.txw2",
"com.sun.xml.internal.txw2.annotation",
"com.sun.xml.internal.txw2.output",
"com.sun.xml.internal.ws",
"com.sun.xml.internal.ws.addressing",
"com.sun.xml.internal.ws.addressing.model",
"com.sun.xml.internal.ws.addressing.policy",
"com.sun.xml.internal.ws.addressing.v200408",
"com.sun.xml.internal.ws.api",
"com.sun.xml.internal.ws.api.addressing",
"com.sun.xml.internal.ws.api.client",
"com.sun.xml.internal.ws.api.config.management",
"com.sun.xml.internal.ws.api.config.management.policy",
"com.sun.xml.internal.ws.api.databinding",
"com.sun.xml.internal.ws.api.fastinfoset",
"com.sun.xml.internal.ws.api.ha",
"com.sun.xml.internal.ws.api.handler",
"com.sun.xml.internal.ws.api.message",
"com.sun.xml.internal.ws.api.message.saaj",
"com.sun.xml.internal.ws.api.message.stream",
"com.sun.xml.internal.ws.api.model",
"com.sun.xml.internal.ws.api.model.soap",
"com.sun.xml.internal.ws.api.model.wsdl",
"com.sun.xml.internal.ws.api.model.wsdl.editable",
"com.sun.xml.internal.ws.api.pipe",
"com.sun.xml.internal.ws.api.pipe.helper",
"com.sun.xml.internal.ws.api.policy",
"com.sun.xml.internal.ws.api.policy.subject",
"com.sun.xml.internal.ws.api.server",
"com.sun.xml.internal.ws.api.streaming",
"com.sun.xml.internal.ws.api.wsdl.parser",
"com.sun.xml.internal.ws.api.wsdl.writer",
"com.sun.xml.internal.ws.assembler",
"com.sun.xml.internal.ws.assembler.dev",
"com.sun.xml.internal.ws.assembler.jaxws",
"com.sun.xml.internal.ws.binding",
"com.sun.xml.internal.ws.client",
"com.sun.xml.internal.ws.client.dispatch",
"com.sun.xml.internal.ws.client.sei",
"com.sun.xml.internal.ws.commons.xmlutil",
"com.sun.xml.internal.ws.config.management.policy",
"com.sun.xml.internal.ws.config.metro.dev",
"com.sun.xml.internal.ws.config.metro.util",
"com.sun.xml.internal.ws.db",
"com.sun.xml.internal.ws.db.glassfish",
"com.sun.xml.internal.ws.developer",
"com.sun.xml.internal.ws.dump",
"com.sun.xml.internal.ws.encoding",
"com.sun.xml.internal.ws.encoding.fastinfoset",
"com.sun.xml.internal.ws.encoding.policy",
"com.sun.xml.internal.ws.encoding.soap",
"com.sun.xml.internal.ws.encoding.soap.streaming",
"com.sun.xml.internal.ws.encoding.xml",
"com.sun.xml.internal.ws.fault",
"com.sun.xml.internal.ws.handler",
"com.sun.xml.internal.ws.message",
"com.sun.xml.internal.ws.message.jaxb",
"com.sun.xml.internal.ws.message.saaj",
"com.sun.xml.internal.ws.message.source",
"com.sun.xml.internal.ws.message.stream",
"com.sun.xml.internal.ws.model",
"com.sun.xml.internal.ws.model.soap",
"com.sun.xml.internal.ws.model.wsdl",
"com.sun.xml.internal.ws.org.objectweb.asm",
"com.sun.xml.internal.ws.policy",
"com.sun.xml.internal.ws.policy.jaxws",
"com.sun.xml.internal.ws.policy.jaxws.spi",
"com.sun.xml.internal.ws.policy.privateutil",
"com.sun.xml.internal.ws.policy.sourcemodel",
"com.sun.xml.internal.ws.policy.sourcemodel.attach",
"com.sun.xml.internal.ws.policy.sourcemodel.wspolicy",
"com.sun.xml.internal.ws.policy.spi",
"com.sun.xml.internal.ws.policy.subject",
"com.sun.xml.internal.ws.protocol.soap",
"com.sun.xml.internal.ws.protocol.xml",
"com.sun.xml.internal.ws.resources",
"com.sun.xml.internal.ws.runtime.config",
"com.sun.xml.internal.ws.server",
"com.sun.xml.internal.ws.server.provider",
"com.sun.xml.internal.ws.server.sei",
"com.sun.xml.internal.ws.spi",
"com.sun.xml.internal.ws.spi.db",
"com.sun.xml.internal.ws.streaming",
"com.sun.xml.internal.ws.transport",
"com.sun.xml.internal.ws.transport.http",
"com.sun.xml.internal.ws.transport.http.client",
"com.sun.xml.internal.ws.transport.http.server",
"com.sun.xml.internal.ws.util",
"com.sun.xml.internal.ws.util.exception",
"com.sun.xml.internal.ws.util.pipe",
"com.sun.xml.internal.ws.util.xml",
"com.sun.xml.internal.ws.wsdl",
"com.sun.xml.internal.ws.wsdl.parser",
"com.sun.xml.internal.ws.wsdl.writer",
"com.sun.xml.internal.ws.wsdl.writer.document",
"com.sun.xml.internal.ws.wsdl.writer.document.http",
"com.sun.xml.internal.ws.wsdl.writer.document.soap",
"com.sun.xml.internal.ws.wsdl.writer.document.soap12",
"com.sun.xml.internal.ws.wsdl.writer.document.xsd",
"com.sun.xml.internal.xsom",
"com.sun.xml.internal.xsom.impl",
"com.sun.xml.internal.xsom.impl.parser",
"com.sun.xml.internal.xsom.impl.parser.state",
"com.sun.xml.internal.xsom.impl.scd",
"com.sun.xml.internal.xsom.impl.util",
"com.sun.xml.internal.xsom.parser",
"com.sun.xml.internal.xsom.util",
"com.sun.xml.internal.xsom.visitor",
"java.applet",
"java.awt",
"java.awt.color",
"java.awt.datatransfer",
"java.awt.dnd",
"java.awt.dnd.peer",
"java.awt.event",
"java.awt.font",
"java.awt.geom",
"java.awt.im",
"java.awt.im.spi",
"java.awt.image",
"java.awt.image.renderable",
"java.awt.peer",
"java.awt.print",
"java.beans",
"java.beans.beancontext",
"java.io",
"java.lang",
"java.lang.annotation",
"java.lang.instrument",
"java.lang.invoke",
"java.lang.management",
"java.lang.ref",
"java.lang.reflect",
"java.math",
"java.net",
"java.nio",
"java.nio.channels",
"java.nio.channels.spi",
"java.nio.charset",
"java.nio.charset.spi",
"java.nio.file",
"java.nio.file.attribute",
"java.nio.file.spi",
"java.rmi",
"java.rmi.activation",
"java.rmi.dgc",
"java.rmi.registry",
"java.rmi.server",
"java.security",
"java.security.acl",
"java.security.cert",
"java.security.interfaces",
"java.security.spec",
"java.sql",
"java.text",
"java.text.spi",
"java.time",
"java.time.chrono",
"java.time.format",
"java.time.temporal",
"java.time.zone",
"java.util",
"java.util.concurrent",
"java.util.concurrent.atomic",
"java.util.concurrent.locks",
"java.util.function",
"java.util.jar",
"java.util.logging",
"java.util.prefs",
"java.util.regex",
"java.util.spi",
"java.util.stream",
"java.util.zip",
"javafx.animation",
"javafx.application",
"javafx.beans",
"javafx.beans.binding",
"javafx.beans.property",
"javafx.beans.property.adapter",
"javafx.beans.value",
"javafx.collections",
"javafx.collections.transformation",
"javafx.concurrent",
"javafx.css",
"javafx.embed.swing",
"javafx.embed.swt",
"javafx.event",
"javafx.fxml",
"javafx.geometry",
"javafx.print",
"javafx.scene",
"javafx.scene.canvas",
"javafx.scene.chart",
"javafx.scene.control",
"javafx.scene.control.cell",
"javafx.scene.effect",
"javafx.scene.image",
"javafx.scene.input",
"javafx.scene.layout",
"javafx.scene.media",
"javafx.scene.paint",
"javafx.scene.shape",
"javafx.scene.text",
"javafx.scene.transform",
"javafx.scene.web",
"javafx.stage",
"javafx.util",
"javafx.util.converter",
"javax.accessibility",
"javax.activation",
"javax.activity",
"javax.annotation",
"javax.annotation.processing",
"javax.crypto",
"javax.crypto.interfaces",
"javax.crypto.spec",
"javax.imageio",
"javax.imageio.event",
"javax.imageio.metadata",
"javax.imageio.plugins.bmp",
"javax.imageio.plugins.jpeg",
"javax.imageio.spi",
"javax.imageio.stream",
"javax.jws",
"javax.jws.soap",
"javax.lang.model",
"javax.lang.model.element",
"javax.lang.model.type",
"javax.lang.model.util",
"javax.management",
"javax.management.loading",
"javax.management.modelmbean",
"javax.management.monitor",
"javax.management.openmbean",
"javax.management.relation",
"javax.management.remote",
"javax.management.remote.rmi",
"javax.management.timer",
"javax.naming",
"javax.naming.directory",
"javax.naming.event",
"javax.naming.ldap",
"javax.naming.spi",
"javax.net",
"javax.net.ssl",
"javax.print",
"javax.print.attribute",
"javax.print.attribute.standard",
"javax.print.event",
"javax.rmi",
"javax.rmi.CORBA",
"javax.rmi.ssl",
"javax.script",
"javax.security.auth",
"javax.security.auth.callback",
"javax.security.auth.kerberos",
"javax.security.auth.login",
"javax.security.auth.spi",
"javax.security.auth.x500",
"javax.security.cert",
"javax.security.sasl",
"javax.smartcardio",
"javax.sound.midi",
"javax.sound.midi.spi",
"javax.sound.sampled",
"javax.sound.sampled.spi",
"javax.sql",
"javax.sql.rowset",
"javax.sql.rowset.serial",
"javax.sql.rowset.spi",
"javax.swing",
"javax.swing.border",
"javax.swing.colorchooser",
"javax.swing.event",
"javax.swing.filechooser",
"javax.swing.plaf",
"javax.swing.plaf.basic",
"javax.swing.plaf.metal",
"javax.swing.plaf.multi",
"javax.swing.plaf.nimbus",
"javax.swing.plaf.synth",
"javax.swing.table",
"javax.swing.text",
"javax.swing.text.html",
"javax.swing.text.html.parser",
"javax.swing.text.rtf",
"javax.swing.tree",
"javax.swing.undo",
"javax.tools",
"javax.transaction",
"javax.transaction.xa",
"javax.xml",
"javax.xml.bind",
"javax.xml.bind.annotation",
"javax.xml.bind.annotation.adapters",
"javax.xml.bind.attachment",
"javax.xml.bind.helpers",
"javax.xml.bind.util",
"javax.xml.crypto",
"javax.xml.crypto.dom",
"javax.xml.crypto.dsig",
"javax.xml.crypto.dsig.dom",
"javax.xml.crypto.dsig.keyinfo",
"javax.xml.crypto.dsig.spec",
"javax.xml.datatype",
"javax.xml.namespace",
"javax.xml.parsers",
"javax.xml.soap",
"javax.xml.stream",
"javax.xml.stream.events",
"javax.xml.stream.util",
"javax.xml.transform",
"javax.xml.transform.dom",
"javax.xml.transform.sax",
"javax.xml.transform.stax",
"javax.xml.transform.stream",
"javax.xml.validation",
"javax.xml.ws",
"javax.xml.ws.handler",
"javax.xml.ws.handler.soap",
"javax.xml.ws.http",
"javax.xml.ws.soap",
"javax.xml.ws.spi",
"javax.xml.ws.spi.http",
"javax.xml.ws.wsaddressing",
"javax.xml.xpath",
"jdk",
"jdk.internal.cmm",
"jdk.internal.dynalink",
"jdk.internal.dynalink.beans",
"jdk.internal.dynalink.linker",
"jdk.internal.dynalink.support",
"jdk.internal.instrumentation",
"jdk.internal.org.objectweb.asm",
"jdk.internal.org.objectweb.asm.commons",
"jdk.internal.org.objectweb.asm.signature",
"jdk.internal.org.objectweb.asm.tree",
"jdk.internal.org.objectweb.asm.tree.analysis",
"jdk.internal.org.objectweb.asm.util",
"jdk.internal.org.xml.sax",
"jdk.internal.org.xml.sax.helpers",
"jdk.internal.util.xml",
"jdk.internal.util.xml.impl",
"jdk.jfr.events",
"jdk.management.cmm",
"jdk.management.resource",
"jdk.management.resource.internal",
"jdk.management.resource.internal.inst",
"jdk.nashorn.api.scripting",
"jdk.nashorn.internal",
"jdk.nashorn.internal.codegen",
"jdk.nashorn.internal.codegen.types",
"jdk.nashorn.internal.ir",
"jdk.nashorn.internal.ir.annotations",
"jdk.nashorn.internal.ir.debug",
"jdk.nashorn.internal.ir.visitor",
"jdk.nashorn.internal.lookup",
"jdk.nashorn.internal.objects",
"jdk.nashorn.internal.objects.annotations",
"jdk.nashorn.internal.parser",
"jdk.nashorn.internal.runtime",
"jdk.nashorn.internal.runtime.arrays",
"jdk.nashorn.internal.runtime.events",
"jdk.nashorn.internal.runtime.linker",
"jdk.nashorn.internal.runtime.logging",
"jdk.nashorn.internal.runtime.options",
"jdk.nashorn.internal.runtime.regexp",
"jdk.nashorn.internal.runtime.regexp.joni",
"jdk.nashorn.internal.runtime.regexp.joni.ast",
"jdk.nashorn.internal.runtime.regexp.joni.constants",
"jdk.nashorn.internal.runtime.regexp.joni.encoding",
"jdk.nashorn.internal.runtime.regexp.joni.exception",
"jdk.nashorn.internal.scripts",
"jdk.nashorn.tools",
"jdk.net",
"netscape.javascript",
"oracle.jrockit.jfr",
"oracle.jrockit.jfr.events",
"oracle.jrockit.jfr.jdkevents",
"oracle.jrockit.jfr.jdkevents.throwabletransform",
"oracle.jrockit.jfr.openmbean",
"oracle.jrockit.jfr.parser",
"oracle.jrockit.jfr.settings",
"oracle.jrockit.jfr.tools",
"org.ietf.jgss",
"org.jcp.xml.dsig.internal",
"org.jcp.xml.dsig.internal.dom",
"org.omg.CORBA",
"org.omg.CORBA.DynAnyPackage",
"org.omg.CORBA.ORBPackage",
"org.omg.CORBA.TypeCodePackage",
"org.omg.CORBA.portable",
"org.omg.CORBA_2_3",
"org.omg.CORBA_2_3.portable",
"org.omg.CosNaming",
"org.omg.CosNaming.NamingContextExtPackage",
"org.omg.CosNaming.NamingContextPackage",
"org.omg.Dynamic",
"org.omg.DynamicAny",
"org.omg.DynamicAny.DynAnyFactoryPackage",
"org.omg.DynamicAny.DynAnyPackage",
"org.omg.IOP",
"org.omg.IOP.CodecFactoryPackage",
"org.omg.IOP.CodecPackage",
"org.omg.Messaging",
"org.omg.PortableInterceptor",
"org.omg.PortableInterceptor.ORBInitInfoPackage",
"org.omg.PortableServer",
"org.omg.PortableServer.CurrentPackage",
"org.omg.PortableServer.POAManagerPackage",
"org.omg.PortableServer.POAPackage",
"org.omg.PortableServer.ServantLocatorPackage",
"org.omg.PortableServer.portable",
"org.omg.SendingContext",
"org.omg.stub.java.rmi",
"org.omg.stub.javax.management.remote.rmi",
"org.relaxng.datatype",
"org.relaxng.datatype.helpers",
"org.w3c.dom",
"org.w3c.dom.bootstrap",
"org.w3c.dom.css",
"org.w3c.dom.events",
"org.w3c.dom.html",
"org.w3c.dom.ls",
"org.w3c.dom.ranges",
"org.w3c.dom.stylesheets",
"org.w3c.dom.traversal",
"org.w3c.dom.views",
"org.w3c.dom.xpath",
"org.xml.sax",
"org.xml.sax.ext",
"org.xml.sax.helpers",
"sun.applet",
"sun.applet.resources",
"sun.audio",
"sun.awt",
"sun.awt.X11",
"sun.awt.datatransfer",
"sun.awt.dnd",
"sun.awt.event",
"sun.awt.geom",
"sun.awt.im",
"sun.awt.image",
"sun.awt.image.codec",
"sun.awt.motif",
"sun.awt.resources",
"sun.awt.shell",
"sun.awt.util",
"sun.awt.windows",
"sun.corba",
"sun.dc",
"sun.dc.path",
"sun.dc.pr",
"sun.font",
"sun.instrument",
"sun.invoke",
"sun.invoke.empty",
"sun.invoke.util",
"sun.io",
"sun.java2d",
"sun.java2d.cmm",
"sun.java2d.cmm.kcms",
"sun.java2d.cmm.lcms",
"sun.java2d.d3d",
"sun.java2d.jules",
"sun.java2d.loops",
"sun.java2d.opengl",
"sun.java2d.pipe",
"sun.java2d.pipe.hw",
"sun.java2d.pisces",
"sun.java2d.windows",
"sun.java2d.x11",
"sun.java2d.xr",
"sun.jvmstat.monitor",
"sun.jvmstat.monitor.event",
"sun.jvmstat.monitor.remote",
"sun.jvmstat.perfdata.monitor",
"sun.jvmstat.perfdata.monitor.protocol.file",
"sun.jvmstat.perfdata.monitor.protocol.local",
"sun.jvmstat.perfdata.monitor.protocol.rmi",
"sun.jvmstat.perfdata.monitor.v1_0",
"sun.jvmstat.perfdata.monitor.v2_0",
"sun.launcher",
"sun.launcher.resources",
"sun.lwawt",
"sun.lwawt.macosx",
"sun.management",
"sun.management.counter",
"sun.management.counter.perf",
"sun.management.jdp",
"sun.management.jmxremote",
"sun.management.resources",
"sun.management.snmp",
"sun.management.snmp.jvminstr",
"sun.management.snmp.jvmmib",
"sun.management.snmp.util",
"sun.misc",
"sun.misc.resources",
"sun.net",
"sun.net.dns",
"sun.net.ftp",
"sun.net.ftp.impl",
"sun.net.httpserver",
"sun.net.idn",
"sun.net.sdp",
"sun.net.smtp",
"sun.net.spi",
"sun.net.spi.nameservice",
"sun.net.spi.nameservice.dns",
"sun.net.util",
"sun.net.www",
"sun.net.www.content.audio",
"sun.net.www.content.image",
"sun.net.www.content.text",
"sun.net.www.http",
"sun.net.www.protocol.file",
"sun.net.www.protocol.ftp",
"sun.net.www.protocol.http",
"sun.net.www.protocol.http.logging",
"sun.net.www.protocol.http.ntlm",
"sun.net.www.protocol.http.spnego",
"sun.net.www.protocol.https",
"sun.net.www.protocol.jar",
"sun.net.www.protocol.mailto",
"sun.net.www.protocol.netdoc",
"sun.nio",
"sun.nio.ch",
"sun.nio.ch.sctp",
"sun.nio.cs",
"sun.nio.cs.ext",
"sun.nio.fs",
"sun.print",
"sun.print.resources",
"sun.reflect",
"sun.reflect.annotation",
"sun.reflect.generics.factory",
"sun.reflect.generics.parser",
"sun.reflect.generics.reflectiveObjects",
"sun.reflect.generics.repository",
"sun.reflect.generics.scope",
"sun.reflect.generics.tree",
"sun.reflect.generics.visitor",
"sun.reflect.misc",
"sun.rmi.log",
"sun.rmi.registry",
"sun.rmi.rmic",
"sun.rmi.rmic.iiop",
"sun.rmi.rmic.newrmic",
"sun.rmi.rmic.newrmic.jrmp",
"sun.rmi.runtime",
"sun.rmi.server",
"sun.rmi.transport",
"sun.rmi.transport.proxy",
"sun.rmi.transport.tcp",
"sun.security.acl",
"sun.security.action",
"sun.security.ec",
"sun.security.internal.interfaces",
"sun.security.internal.spec",
"sun.security.jca",
"sun.security.jgss",
"sun.security.jgss.krb5",
"sun.security.jgss.spi",
"sun.security.jgss.spnego",
"sun.security.jgss.wrapper",
"sun.security.krb5",
"sun.security.krb5.internal",
"sun.security.krb5.internal.ccache",
"sun.security.krb5.internal.crypto",
"sun.security.krb5.internal.crypto.dk",
"sun.security.krb5.internal.ktab",
"sun.security.krb5.internal.rcache",
"sun.security.krb5.internal.tools",
"sun.security.krb5.internal.util",
"sun.security.mscapi",
"sun.security.pkcs",
"sun.security.pkcs10",
"sun.security.pkcs11",
"sun.security.pkcs11.wrapper",
"sun.security.pkcs12",
"sun.security.provider",
"sun.security.provider.certpath",
"sun.security.provider.certpath.ldap",
"sun.security.provider.certpath.ssl",
"sun.security.rsa",
"sun.security.smartcardio",
"sun.security.ssl",
"sun.security.ssl.krb5",
"sun.security.timestamp",
"sun.security.tools",
"sun.security.tools.jarsigner",
"sun.security.tools.keytool",
"sun.security.tools.policytool",
"sun.security.util",
"sun.security.validator",
"sun.security.x509",
"sun.swing",
"sun.swing.icon",
"sun.swing.plaf",
"sun.swing.plaf.synth",
"sun.swing.plaf.windows",
"sun.swing.table",
"sun.swing.text",
"sun.swing.text.html",
"sun.text",
"sun.text.bidi",
"sun.text.normalizer",
"sun.text.resources",
"sun.text.resources.en",
"sun.tools.asm",
"sun.tools.attach",
"sun.tools.jar",
"sun.tools.jar.resources",
"sun.tools.java",
"sun.tools.javac",
"sun.tools.jcmd",
"sun.tools.jconsole",
"sun.tools.jconsole.inspector",
"sun.tools.jinfo",
"sun.tools.jmap",
"sun.tools.jps",
"sun.tools.jstack",
"sun.tools.jstat",
"sun.tools.jstatd",
"sun.tools.native2ascii",
"sun.tools.native2ascii.resources",
"sun.tools.serialver",
"sun.tools.tree",
"sun.tools.util",
"sun.tracing",
"sun.tracing.dtrace",
"sun.usagetracker",
"sun.util",
"sun.util.calendar",
"sun.util.cldr",
"sun.util.locale",
"sun.util.locale.provider",
"sun.util.logging",
"sun.util.logging.resources",
"sun.util.resources",
"sun.util.resources.en",
"sun.util.spi",
"sun.util.xml"
};
}
}