diff -r 4499f290d3ce core.netigso/src/org/netbeans/core/netigso/Netigso.java --- a/core.netigso/src/org/netbeans/core/netigso/Netigso.java Tue Dec 13 12:34:52 2011 +0100 +++ b/core.netigso/src/org/netbeans/core/netigso/Netigso.java Thu Dec 15 09:52:27 2011 +0100 @@ -248,6 +248,21 @@ if (knownPkgs == EMPTY) { try { SELF_QUERY.set(true); + String hints = (String)m.getAttribute("Hint-Packages"); + if (hints != null) { + pkgs.addAll(Arrays.asList(hints.split(","))); + Object exported = m.getAttribute("Export-Package"); + if (exported instanceof String) { + for (String p : exported.toString().split(",")) { // NOI18N + int semic = p.indexOf(';'); + if (semic >= 0) { + p = p.substring(0, semic); + } + pkgs.add(p); + } + } + } + /* Enumeration en = b.findEntries("", null, true); if (en == null) { LOG.log(Level.INFO, "Bundle {0}: {1} is empty", new Object[] { b.getBundleId(), b.getSymbolicName() }); @@ -270,7 +285,7 @@ } pkgs.add(p); } - } + }*/ } finally { SELF_QUERY.set(false); } @@ -291,9 +306,9 @@ LOG.log(Level.FINE, "Starting bundle {0}: {1}", new Object[] { m.getCodeNameBase(), start }); if (start) { b.start(); - if (b.getState() == Bundle.INSTALLED && isRealBundle(b)) { - throw new IOException("Cannot start " + m.getCodeName() + " state remains INSTALLED after start()"); // NOI18N - } +// if (b.getState() == Bundle.INSTALLED && isRealBundle(b)) { + // throw new IOException("Cannot start " + m.getCodeName() + " state remains INSTALLED after start()"); // NOI18N + // } } } catch (BundleException possible) { if (isRealBundle(b)) { diff -r 4499f290d3ce core.startup/src/org/netbeans/core/startup/NbInstaller.java --- a/core.startup/src/org/netbeans/core/startup/NbInstaller.java Tue Dec 13 12:34:52 2011 +0100 +++ b/core.startup/src/org/netbeans/core/startup/NbInstaller.java Thu Dec 15 09:52:27 2011 +0100 @@ -73,14 +73,7 @@ import java.util.jar.Manifest; import java.util.logging.Level; import java.util.logging.Logger; -import org.netbeans.Events; -import org.netbeans.InvalidException; -import org.netbeans.Module; -import org.netbeans.ModuleInstaller; -import org.netbeans.ModuleManager; -import org.netbeans.ProxyClassLoader; -import org.netbeans.Stamps; -import org.netbeans.Util; +import org.netbeans.*; import org.netbeans.core.startup.layers.ModuleLayeredFileSystem; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileStateInvalidException; diff -r 4499f290d3ce o.n.bootstrap/src/org/netbeans/JarClassLoader.java --- a/o.n.bootstrap/src/org/netbeans/JarClassLoader.java Tue Dec 13 12:34:52 2011 +0100 +++ b/o.n.bootstrap/src/org/netbeans/JarClassLoader.java Thu Dec 15 09:52:27 2011 +0100 @@ -522,6 +522,31 @@ if (init != null) init.run(); return callGet(); } + + static void listCoveredPackages(JarFile src, Set known, StringBuffer save) { + Enumeration en = src.entries(); + while (en.hasMoreElements()) { + JarEntry je = en.nextElement(); + if (! je.isDirectory()) { + String itm = je.getName(); + int slash = itm.lastIndexOf('/'); + if (slash == -1) { + // resource in default package + String res = "default/" + je.getName(); + if (known.add(res)) { + save.append(res).append(','); + } + continue; + } + String pkg = slash > 0 ? itm.substring(0, slash).replace('/','.') : ""; + if (known.add(pkg)) save.append(pkg).append(','); + if (itm.startsWith("META-INF/")) { + String res = itm.substring(8); // "/services/pkg.Service" + if (known.add(res)) save.append(res).append(','); + } + } + } + } private void releaseJarFile() { synchronized(sources) { @@ -590,29 +615,7 @@ protected void listCoveredPackages(Set known, StringBuffer save) { try { JarFile src = getJarFile("pkg"); - - Enumeration en = src.entries(); - while (en.hasMoreElements()) { - JarEntry je = en.nextElement(); - if (! je.isDirectory()) { - String itm = je.getName(); - int slash = itm.lastIndexOf('/'); - if (slash == -1) { - // resource in default package - String res = "default/" + je.getName(); - if (known.add(res)) { - save.append(res).append(','); - } - continue; - } - String pkg = slash > 0 ? itm.substring(0, slash).replace('/','.') : ""; - if (known.add(pkg)) save.append(pkg).append(','); - if (itm.startsWith("META-INF/")) { - String res = itm.substring(8); // "/services/pkg.Service" - if (known.add(res)) save.append(res).append(','); - } - } - } + listCoveredPackages(src, known, save); } catch (ZipException x) { // Unix if (warnedFiles.add(file)) { LOGGER.log(Level.INFO, "Cannot open " + file, x); diff -r 4499f290d3ce o.n.bootstrap/src/org/netbeans/ModuleInstaller.java --- a/o.n.bootstrap/src/org/netbeans/ModuleInstaller.java Tue Dec 13 12:34:52 2011 +0100 +++ b/o.n.bootstrap/src/org/netbeans/ModuleInstaller.java Thu Dec 15 09:52:27 2011 +0100 @@ -46,6 +46,7 @@ import java.io.File; import java.io.IOException; +import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.jar.JarFile; @@ -187,6 +188,12 @@ try { Manifest m = jarFile.getManifest(); if (m == null) throw new IOException("No manifest found in " + jar); // NOI18N + if (!m.getMainAttributes().containsKey("Covered-Packages")) { // NOI18N + Set known = new HashSet(); + StringBuffer sb = new StringBuffer(); + JarClassLoader.JarSource.listCoveredPackages(jarFile, known, sb); + m.getMainAttributes().putValue("Hint-Packages", sb.toString()); // NOI18N + } return m; } finally { jarFile.close();