Bug 532773 - NPE during API analysis while using Java 10 

Change-Id: Ia0fad94acd8d629275e62eede4494f6f26df6277
Signed-off-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiBaseline.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiBaseline.java
index 131c548..47f445d 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiBaseline.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiBaseline.java
@@ -14,7 +14,6 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.lang.reflect.Method;
 import java.net.URL;
 import java.net.URLConnection;
 import java.util.ArrayList;
@@ -158,7 +157,6 @@
 	 */
 	private IVMInstall fVMBinding = null;
 
-	private String fVMPackages = null;
 
 	/**
 	 * Constructs a new API baseline with the given name.
@@ -204,50 +202,6 @@
 		this.fLocation = location;
 	}
 
-	/*
-	 * Copied from org.eclipse.osgi.storage.Storage.calculateVMPackages
-	 */
-
-	private String calculateVMPackages() {
-		 	try {
-		 		List<String> packages = new ArrayList<>();
-		 		Class<?> moduleLayerClass = Class.forName("java.lang.ModuleLayer"); //$NON-NLS-1$
-		 		Method boot = moduleLayerClass.getMethod("boot"); //$NON-NLS-1$
-		 		Method modules = moduleLayerClass.getMethod("modules"); //$NON-NLS-1$
-		 		Class<?> moduleClass = Class.forName("java.lang.Module"); //$NON-NLS-1$
-		 		Method getDescriptor = moduleClass.getMethod("getDescriptor"); //$NON-NLS-1$
-		 		Class<?> moduleDescriptorClass = Class.forName("java.lang.module.ModuleDescriptor"); //$NON-NLS-1$
-		 		Method exports = moduleDescriptorClass.getMethod("exports"); //$NON-NLS-1$
-		 		Class<?> exportsClass = Class.forName("java.lang.module.ModuleDescriptor$Exports"); //$NON-NLS-1$
-		 		Method targets = exportsClass.getMethod("targets"); //$NON-NLS-1$
-		 		Method source = exportsClass.getMethod("source"); //$NON-NLS-1$
-
-		 		Object bootLayer = boot.invoke(null);
-		 		Set<?> bootModules = (Set<?>) modules.invoke(bootLayer);
-		 		for (Object m : bootModules) {
-		 			Object descriptor = getDescriptor.invoke(m);
-		 			for (Object export : (Set<?>) exports.invoke(descriptor)) {
-		 				String pkg = (String) source.invoke(export);
-		 				if (((Set<?>) targets.invoke(export)).isEmpty() && !pkg.startsWith("java.")) { //$NON-NLS-1$
-		 					packages.add(pkg);
-		 				}
-		 			}
-		 		}
-		 		Collections.sort(packages);
-		 		StringBuilder result = new StringBuilder();
-		 		for (String pkg : packages) {
-		 			if (result.length() != 0) {
-		 				result.append(',').append(' ');
-		 			}
-		 			result.append(pkg);
-		 		}
-		 		return result.toString();
-		 	} catch (Exception e) {
-		 		//equinoxContainer.getLogServices().log(EquinoxContainer.NAME, FrameworkLogEntry.ERROR, "Error determining system packages.", e); //$NON-NLS-1$
-		 		return null;
-		 	}
-		 }
-
 	/**
 	 * Initializes this baseline to resolve in the execution environment
 	 * associated with the given description.
@@ -325,10 +279,12 @@
 	private void initialize(Properties profile, ExecutionEnvironmentDescription description) throws CoreException {
 		String value = profile.getProperty(Constants.FRAMEWORK_SYSTEMPACKAGES);
 		if(value== null) {
-			// Java 10 onwards calculate this on runtime.
-			value = getVMPackages();
-			if (value == null) {
-				value = "com.oracle.awt, com.oracle.net, com.oracle.nio, com.oracle.tools.packager, com.sun.jarsigner, com.sun.java.accessibility.util, com.sun.javadoc, com.sun.javafx.tools.packager, com.sun.javafx.tools.packager.bundlers, com.sun.javafx.tools.resource, com.sun.jdi, com.sun.jdi.connect, com.sun.jdi.connect.spi, com.sun.jdi.event, com.sun.jdi.request, com.sun.management, com.sun.net.httpserver, com.sun.net.httpserver.spi, com.sun.nio.file, com.sun.nio.sctp, com.sun.security.auth, com.sun.security.auth.callback, com.sun.security.auth.login, com.sun.security.auth.module, com.sun.security.jgss, com.sun.source.doctree, com.sun.source.tree, com.sun.source.util, com.sun.tools.attach, com.sun.tools.attach.spi, com.sun.tools.javac, com.sun.tools.javadoc, com.sun.tools.jconsole, 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.css.converter, javafx.embed.swing, 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.control.skin, 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.plugins.tiff, javax.imageio.spi, javax.imageio.stream, javax.jnlp, 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.catalog, 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.dynalink, jdk.dynalink.beans, jdk.dynalink.linker, jdk.dynalink.linker.support, jdk.dynalink.support, jdk.incubator.http, jdk.javadoc.doclet, jdk.jfr, jdk.jfr.consumer, jdk.jshell, jdk.jshell.execution, jdk.jshell.spi, jdk.jshell.tool, jdk.management.cmm, jdk.management.jfr, jdk.management.resource, jdk.nashorn.api.scripting, jdk.nashorn.api.tree, jdk.net, jdk.packager.services, jdk.packager.services.singleton, jdk.security.jarsigner, netscape.javascript, org.ietf.jgss, 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.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.misc, sun.reflect"; //$NON-NLS-1$
+			// If the profile is JavaSE-10, hard-coding the VM packages for now.
+			String id = description.getProperty(ExecutionEnvironmentDescription.CLASS_LIB_LEVEL);
+			if ("JavaSE-10".equalsIgnoreCase(id)) { //$NON-NLS-1$
+				// calculated via
+				// org.eclipse.osgi.storage.Storage.calculateVMPackages
+				value = "com.oracle.awt,com.oracle.net,com.oracle.nio,com.oracle.tools.packager,com.sun.jarsigner,com.sun.java.accessibility.util,com.sun.javadoc,com.sun.javafx.tools.packager,com.sun.javafx.tools.packager.bundlers,com.sun.javafx.tools.resource,com.sun.jdi,com.sun.jdi.connect,com.sun.jdi.connect.spi,com.sun.jdi.event,com.sun.jdi.request,com.sun.management,com.sun.net.httpserver,com.sun.net.httpserver.spi,com.sun.nio.file,com.sun.nio.sctp,com.sun.security.auth,com.sun.security.auth.callback,com.sun.security.auth.login,com.sun.security.auth.module,com.sun.security.jgss,com.sun.source.doctree,com.sun.source.tree,com.sun.source.util,com.sun.tools.attach,com.sun.tools.attach.spi,com.sun.tools.javac,com.sun.tools.javadoc,com.sun.tools.jconsole,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.css.converter,javafx.embed.swing,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.control.skin,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.plugins.tiff,javax.imageio.spi,javax.imageio.stream,javax.jnlp,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.catalog,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.dynalink,jdk.dynalink.beans,jdk.dynalink.linker,jdk.dynalink.linker.support,jdk.dynalink.support,jdk.incubator.http,jdk.javadoc.doclet,jdk.jfr,jdk.jfr.consumer,jdk.jshell,jdk.jshell.execution,jdk.jshell.spi,jdk.jshell.tool,jdk.management.cmm,jdk.management.jfr,jdk.management.resource,jdk.nashorn.api.scripting,jdk.nashorn.api.tree,jdk.net,jdk.packager.services,jdk.packager.services.singleton,jdk.security.jarsigner,netscape.javascript,org.ietf.jgss,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.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.misc,sun.reflect"; //$NON-NLS-1$
 			}
 		}
 		String[] systemPackages = null;
@@ -372,13 +328,6 @@
 		addComponent(fSystemLibraryComponent);
 	}
 
-	private String getVMPackages() {
-		if (fVMPackages == null) {
-			fVMPackages = calculateVMPackages();
-		}
-		return fVMPackages;
-
-	}
 
 	/**
 	 * Clears the package -> components cache and sets it to <code>null</code>