# This patch file was generated by NetBeans IDE # This patch can be applied using context Tools: Apply Diff Patch action on respective folder. # It uses platform neutral UTF-8 encoding. # Above lines and this line are ignored by the patching process. Index: core/bootstrap/src/org/netbeans/Main.java --- core/bootstrap/src/org/netbeans/Main.java Base (1.39) +++ core/bootstrap/src/org/netbeans/Main.java Locally Modified (Based On 1.39) @@ -38,8 +38,8 @@ // NbBundle or any other library compiled against java5 only // also prevent usage of java5 methods and classes try { - Class.forName("java.lang.StringBuilder"); // NOI18N - } catch (ClassNotFoundException ex) { + StringBuilder sb = new StringBuilder(); + } catch (NoClassDefFoundError ex) { JOptionPane.showMessageDialog( null, ResourceBundle.getBundle("org.netbeans.Bundle").getString("MSG_InstallJava5"), Index: core/bootstrap/src/org/netbeans/Module.java --- core/bootstrap/src/org/netbeans/Module.java Base (1.20) +++ core/bootstrap/src/org/netbeans/Module.java Locally Modified (Based On 1.20) @@ -270,8 +270,11 @@ } try { // This has the side effect of checking syntax: - if (codeName.indexOf(',') != -1) { - throw new InvalidException("Illegal code name syntax parsing OpenIDE-Module: " + codeName); // NOI18N + try { + assert codeName.indexOf (',') == -1; + } catch (AssertionError e) { + throw new InvalidException("Illegal code name syntax " + + "in OpenIDE-Module: " + codeName); // NOI18N } Dependency.create(Dependency.TYPE_MODULE, codeName); Object[] cnParse = Util.parseCodeName(codeName); @@ -292,23 +295,29 @@ // Token provides String providesS = attr.getValue("OpenIDE-Module-Provides"); // NOI18N if (providesS == null) { - provides = new String[] {}; + provides = new String[0]; } else { - StringTokenizer tok = new StringTokenizer(providesS, ", "); // NOI18N - provides = new String[tok.countTokens()]; - for (int i = 0; i < provides.length; i++) { - String provide = tok.nextToken(); - if (provide.indexOf(',') != -1) { - throw new InvalidException("Illegal code name syntax parsing OpenIDE-Module-Provides: " + provide); // NOI18N + provides = providesS.trim().split (",\\s+"); + Set dupTest = null; + assert (dupTest = new HashSet()) != null; + for (String provide : provides) { + if (dupTest != null) { + if (dupTest.contains(provides)) { + throw new IllegalArgumentException("Duplicate " + + "entries in OpenIDE-Module-Provides: " + + providesS); // NOI18N } - Dependency.create(Dependency.TYPE_MODULE, provide); - if (provide.lastIndexOf('/') != -1) throw new IllegalArgumentException("Illegal OpenIDE-Module-Provides: " + provide); // NOI18N - provides[i] = provide; + dupTest.add(provide); } - if (new HashSet(Arrays.asList(provides)).size() < provides.length) { - throw new IllegalArgumentException("Duplicate entries in OpenIDE-Module-Provides: " + providesS); // NOI18N + try { + assert checkForIllegalCharacters (provide) == null : + checkForIllegalCharacters (provide); + } catch (AssertionError e) { + throw new IllegalArgumentException (e); } + Dependency.create(Dependency.TYPE_MODULE, provide); } + } String[] additionalProvides = mgr.refineProvides (this); if (additionalProvides != null) { if (provides == null) { @@ -397,24 +406,45 @@ Util.err.warning("the module " + codeNameBase + " uses OpenIDE-Module-IDE-Dependencies which is deprecated. See http://openide.netbeans.org/proposals/arch/modularize.html"); // NOI18N } - dependencies.addAll(Dependency.create(Dependency.TYPE_JAVA, attr.getValue("OpenIDE-Module-Java-Dependencies"))); // NOI18N - dependencies.addAll(Dependency.create(Dependency.TYPE_MODULE, attr.getValue("OpenIDE-Module-Module-Dependencies"))); // NOI18N - String pkgdeps = attr.getValue("OpenIDE-Module-Package-Dependencies"); // NOI18N - if (pkgdeps != null) { - // XXX: Util.err.log(ErrorManager.WARNING, "Warning: module " + codeNameBase + " uses the OpenIDE-Module-Package-Dependencies manifest attribute, which is now deprecated: XXX URL TBD"); - dependencies.addAll(Dependency.create(Dependency.TYPE_PACKAGE, pkgdeps)); // NOI18N - } - dependencies.addAll(Dependency.create(Dependency.TYPE_REQUIRES, attr.getValue("OpenIDE-Module-Requires"))); // NOI18N - dependencies.addAll(Dependency.create(Dependency.TYPE_NEEDS, attr.getValue("OpenIDE-Module-Needs"))); // NOI18N - dependencies.addAll(Dependency.create(Dependency.TYPE_RECOMMENDS, attr.getValue("OpenIDE-Module-Recommends"))); // NOI18N - // Permit the concrete installer to make some changes: + provisionallyAddDep (dependencies, Dependency.TYPE_JAVA, "OpenIDE-Module-Java-Dependencies", attr); + provisionallyAddDep (dependencies, Dependency.TYPE_MODULE, "OpenIDE-Module-Module-Dependencies", attr); + provisionallyAddDep (dependencies, Dependency.TYPE_PACKAGE, "OpenIDE-Module-Package-Dependencies", attr); + provisionallyAddDep (dependencies, Dependency.TYPE_REQUIRES, "OpenIDE-Module-Requires", attr); + provisionallyAddDep (dependencies, Dependency.TYPE_NEEDS, "OpenIDE-Module-Needs", attr); + provisionallyAddDep (dependencies, Dependency.TYPE_RECOMMENDS, "OpenIDE-Module-Recommends", attr); mgr.refineDependencies(this, dependencies); dependenciesA = dependencies.toArray(new Dependency[dependencies.size()]); } catch (IllegalArgumentException iae) { throw (InvalidException) new InvalidException("While parsing " + codeName + " a dependency attribute: " + iae.toString()).initCause(iae); // NOI18N } + if (provides == null) { + provides = new String[0]; } + } + private static String checkForIllegalCharacters(String provide) { + char[] c = provide.toCharArray(); + for (char cc : c) { + switch (cc) { + case ',' : + return "Illegal code name syntax in " + + "OpenIDE-Module-Provides: " + provide; // NOI18N + case '/' : + return "Illegal OpenIDE-Module-Provides: " + provide; // NOI18N + default : + continue; + } + } + return null; + } + + private void provisionallyAddDep (Set dependencies, int type, String key, Attributes attrs) { + String val = attrs.getValue(key); + if (val != null) { + dependencies.addAll(Dependency.create(type, val)); + } + } + /** Get all JARs loaded by this module. * Includes the module itself, any locale variants of the module, * any extensions specified with Class-Path, any locale variants Index: core/bootstrap/src/org/netbeans/ModuleManager.java --- core/bootstrap/src/org/netbeans/ModuleManager.java Base (1.27) +++ core/bootstrap/src/org/netbeans/ModuleManager.java Locally Modified (Based On 1.27) @@ -1052,7 +1052,9 @@ private void maybeAddToEnableList(Set willEnable, Set mightEnable, Module m, boolean okToFail) { if (! missingDependencies(m).isEmpty()) { // Should never happen: - if (! okToFail) throw new IllegalStateException("Module was supposed to be OK: " + m); // NOI18N + if (! okToFail) throw new IllegalStateException("Module was supposed" + + " to be OK: " + m + " but is missing dependencies " + + missingDependencies(m)); // NOI18N // Cannot satisfy its dependencies, exclude it. return; }