Lines 80-86
Link Here
|
80 |
public static final String PROP_MANIFEST = "manifest"; // NOI18N |
80 |
public static final String PROP_MANIFEST = "manifest"; // NOI18N |
81 |
public static final String PROP_VALID = "valid"; // NOI18N |
81 |
public static final String PROP_VALID = "valid"; // NOI18N |
82 |
public static final String PROP_PROBLEMS = "problems"; // NOI18N |
82 |
public static final String PROP_PROBLEMS = "problems"; // NOI18N |
83 |
|
83 |
public static Object deps; |
|
|
84 |
|
84 |
/** manager which owns this module */ |
85 |
/** manager which owns this module */ |
85 |
protected final ModuleManager mgr; |
86 |
protected final ModuleManager mgr; |
86 |
/** event logging (should not be much here) */ |
87 |
/** event logging (should not be much here) */ |
Lines 305-310
Link Here
|
305 |
* some kind of description of the problem. |
306 |
* some kind of description of the problem. |
306 |
*/ |
307 |
*/ |
307 |
protected void parseManifest() throws InvalidException { |
308 |
protected void parseManifest() throws InvalidException { |
|
|
309 |
boolean verifyCNBs = Module.deps == null; |
310 |
|
308 |
Attributes attr = getManifest().getMainAttributes(); |
311 |
Attributes attr = getManifest().getMainAttributes(); |
309 |
// Code name |
312 |
// Code name |
310 |
codeName = attr.getValue("OpenIDE-Module"); // NOI18N |
313 |
codeName = attr.getValue("OpenIDE-Module"); // NOI18N |
Lines 322-328
Link Here
|
322 |
if (codeName.indexOf(',') != -1) { |
325 |
if (codeName.indexOf(',') != -1) { |
323 |
throw new InvalidException("Illegal code name syntax parsing OpenIDE-Module: " + codeName); // NOI18N |
326 |
throw new InvalidException("Illegal code name syntax parsing OpenIDE-Module: " + codeName); // NOI18N |
324 |
} |
327 |
} |
325 |
Dependency.create(Dependency.TYPE_MODULE, codeName); |
328 |
if (verifyCNBs) { |
|
|
329 |
Dependency.create(Dependency.TYPE_MODULE, codeName); |
330 |
} |
326 |
Object[] cnParse = Util.parseCodeName(codeName); |
331 |
Object[] cnParse = Util.parseCodeName(codeName); |
327 |
codeNameBase = (String)cnParse[0]; |
332 |
codeNameBase = (String)cnParse[0]; |
328 |
codeNameRelease = (cnParse[1] != null) ? ((Integer)cnParse[1]).intValue() : -1; |
333 |
codeNameRelease = (cnParse[1] != null) ? ((Integer)cnParse[1]).intValue() : -1; |
Lines 350-356
Link Here
|
350 |
if (provide.indexOf(',') != -1) { |
355 |
if (provide.indexOf(',') != -1) { |
351 |
throw new InvalidException("Illegal code name syntax parsing OpenIDE-Module-Provides: " + provide); // NOI18N |
356 |
throw new InvalidException("Illegal code name syntax parsing OpenIDE-Module-Provides: " + provide); // NOI18N |
352 |
} |
357 |
} |
353 |
Dependency.create(Dependency.TYPE_MODULE, provide); |
358 |
if (verifyCNBs) { |
|
|
359 |
Dependency.create(Dependency.TYPE_MODULE, provide); |
360 |
} |
354 |
if (provide.lastIndexOf('/') != -1) throw new IllegalArgumentException("Illegal OpenIDE-Module-Provides: " + provide); // NOI18N |
361 |
if (provide.lastIndexOf('/') != -1) throw new IllegalArgumentException("Illegal OpenIDE-Module-Provides: " + provide); // NOI18N |
355 |
provides[i] = provide; |
362 |
provides[i] = provide; |
356 |
} |
363 |
} |
Lines 382-393
Link Here
|
382 |
String piece = tok.nextToken(); |
389 |
String piece = tok.nextToken(); |
383 |
if (piece.endsWith(".*")) { // NOI18N |
390 |
if (piece.endsWith(".*")) { // NOI18N |
384 |
String pkg = piece.substring(0, piece.length() - 2); |
391 |
String pkg = piece.substring(0, piece.length() - 2); |
385 |
Dependency.create(Dependency.TYPE_MODULE, pkg); |
392 |
if (verifyCNBs) { |
|
|
393 |
Dependency.create(Dependency.TYPE_MODULE, pkg); |
394 |
} |
386 |
if (pkg.lastIndexOf('/') != -1) throw new IllegalArgumentException("Illegal OpenIDE-Module-Public-Packages: " + exportsS); // NOI18N |
395 |
if (pkg.lastIndexOf('/') != -1) throw new IllegalArgumentException("Illegal OpenIDE-Module-Public-Packages: " + exportsS); // NOI18N |
387 |
exports.add(new PackageExport(pkg.replace('.', '/') + '/', false)); |
396 |
exports.add(new PackageExport(pkg.replace('.', '/') + '/', false)); |
388 |
} else if (piece.endsWith(".**")) { // NOI18N |
397 |
} else if (piece.endsWith(".**")) { // NOI18N |
389 |
String pkg = piece.substring(0, piece.length() - 3); |
398 |
String pkg = piece.substring(0, piece.length() - 3); |
390 |
Dependency.create(Dependency.TYPE_MODULE, pkg); |
399 |
if (verifyCNBs) { |
|
|
400 |
Dependency.create(Dependency.TYPE_MODULE, pkg); |
401 |
} |
391 |
if (pkg.lastIndexOf('/') != -1) throw new IllegalArgumentException("Illegal OpenIDE-Module-Public-Packages: " + exportsS); // NOI18N |
402 |
if (pkg.lastIndexOf('/') != -1) throw new IllegalArgumentException("Illegal OpenIDE-Module-Public-Packages: " + exportsS); // NOI18N |
392 |
exports.add(new PackageExport(pkg.replace('.', '/') + '/', true)); |
403 |
exports.add(new PackageExport(pkg.replace('.', '/') + '/', true)); |
393 |
} else { |
404 |
} else { |
Lines 414-421
Link Here
|
414 |
if (piece.indexOf('/') != -1) { |
425 |
if (piece.indexOf('/') != -1) { |
415 |
throw new IllegalArgumentException("May specify only module code name bases in OpenIDE-Module-Friends, not major release versions: " + piece); // NOI18N |
426 |
throw new IllegalArgumentException("May specify only module code name bases in OpenIDE-Module-Friends, not major release versions: " + piece); // NOI18N |
416 |
} |
427 |
} |
417 |
// Indirect way of checking syntax: |
428 |
if (verifyCNBs) { |
418 |
Dependency.create(Dependency.TYPE_MODULE, piece); |
429 |
// Indirect way of checking syntax: |
|
|
430 |
Dependency.create(Dependency.TYPE_MODULE, piece); |
431 |
} |
419 |
// OK, add it. |
432 |
// OK, add it. |
420 |
set.add(piece); |
433 |
set.add(piece); |
421 |
} |
434 |
} |
Lines 428-464
Link Here
|
428 |
this.friendNames = set; |
441 |
this.friendNames = set; |
429 |
} |
442 |
} |
430 |
} |
443 |
} |
431 |
|
|
|
432 |
|
433 |
// Dependencies |
434 |
Set<Dependency> dependencies = new HashSet<Dependency>(20); |
435 |
// First convert IDE/1 -> org.openide/1, so we never have to deal with |
436 |
// "IDE deps" internally: |
437 |
@SuppressWarnings("deprecation") |
438 |
Set<Dependency> openideDeps = Dependency.create(Dependency.TYPE_IDE, attr.getValue("OpenIDE-Module-IDE-Dependencies")); // NOI18N |
439 |
if (!openideDeps.isEmpty()) { |
440 |
// If empty, leave it that way; NbInstaller will add it anyway. |
441 |
Dependency d = openideDeps.iterator().next(); |
442 |
String name = d.getName(); |
443 |
if (!name.startsWith("IDE/")) throw new IllegalStateException("Weird IDE dep: " + name); // NOI18N |
444 |
dependencies.addAll(Dependency.create(Dependency.TYPE_MODULE, "org.openide/" + name.substring(4) + " > " + d.getVersion())); // NOI18N |
445 |
if (dependencies.size() != 1) throw new IllegalStateException("Should be singleton: " + dependencies); // NOI18N |
446 |
|
447 |
Util.err.warning("the module " + codeNameBase + " uses OpenIDE-Module-IDE-Dependencies which is deprecated. See http://openide.netbeans.org/proposals/arch/modularize.html"); // NOI18N |
448 |
} |
449 |
dependencies.addAll(Dependency.create(Dependency.TYPE_JAVA, attr.getValue("OpenIDE-Module-Java-Dependencies"))); // NOI18N |
450 |
dependencies.addAll(Dependency.create(Dependency.TYPE_MODULE, attr.getValue("OpenIDE-Module-Module-Dependencies"))); // NOI18N |
451 |
String pkgdeps = attr.getValue("OpenIDE-Module-Package-Dependencies"); // NOI18N |
452 |
if (pkgdeps != null) { |
453 |
// XXX: Util.err.log(ErrorManager.WARNING, "Warning: module " + codeNameBase + " uses the OpenIDE-Module-Package-Dependencies manifest attribute, which is now deprecated: XXX URL TBD"); |
454 |
dependencies.addAll(Dependency.create(Dependency.TYPE_PACKAGE, pkgdeps)); // NOI18N |
455 |
} |
456 |
dependencies.addAll(Dependency.create(Dependency.TYPE_REQUIRES, attr.getValue("OpenIDE-Module-Requires"))); // NOI18N |
457 |
dependencies.addAll(Dependency.create(Dependency.TYPE_NEEDS, attr.getValue("OpenIDE-Module-Needs"))); // NOI18N |
458 |
dependencies.addAll(Dependency.create(Dependency.TYPE_RECOMMENDS, attr.getValue("OpenIDE-Module-Recommends"))); // NOI18N |
459 |
// Permit the concrete installer to make some changes: |
444 |
// Permit the concrete installer to make some changes: |
460 |
mgr.refineDependencies(this, dependencies); |
445 |
initDeps(attr); |
461 |
dependenciesA = dependencies.toArray(new Dependency[dependencies.size()]); |
|
|
462 |
} catch (IllegalArgumentException iae) { |
446 |
} catch (IllegalArgumentException iae) { |
463 |
throw (InvalidException) new InvalidException("While parsing " + codeName + " a dependency attribute: " + iae.toString()).initCause(iae); // NOI18N |
447 |
throw (InvalidException) new InvalidException("While parsing " + codeName + " a dependency attribute: " + iae.toString()).initCause(iae); // NOI18N |
464 |
} |
448 |
} |
Lines 632-635
Link Here
|
632 |
} |
616 |
} |
633 |
} |
617 |
} |
634 |
|
618 |
|
|
|
619 |
private void initDeps(Attributes attr) throws IllegalStateException, IllegalArgumentException { |
620 |
if (deps instanceof Set) { |
621 |
Set<?> s = (Set<?>)deps; |
622 |
dependenciesA = s.toArray(new Dependency[s.size()]); |
623 |
deps = null; |
624 |
return; |
625 |
} |
626 |
|
627 |
// Dependencies |
628 |
Set<Dependency> dependencies = new HashSet<Dependency>(20); |
629 |
// First convert IDE/1 -> org.openide/1, so we never have to deal with |
630 |
// "IDE deps" internally: |
631 |
@SuppressWarnings(value = "deprecation") |
632 |
Set<Dependency> openideDeps = Dependency.create(Dependency.TYPE_IDE, attr.getValue("OpenIDE-Module-IDE-Dependencies")); // NOI18N |
633 |
if (!openideDeps.isEmpty()) { |
634 |
// If empty, leave it that way; NbInstaller will add it anyway. |
635 |
Dependency d = openideDeps.iterator().next(); |
636 |
String name = d.getName(); |
637 |
if (!name.startsWith("IDE/")) { |
638 |
throw new IllegalStateException("Weird IDE dep: " + name); // NOI18N |
639 |
} |
640 |
dependencies.addAll(Dependency.create(Dependency.TYPE_MODULE, "org.openide/" + name.substring(4) + " > " + d.getVersion())); // NOI18N |
641 |
if (dependencies.size() != 1) { |
642 |
throw new IllegalStateException("Should be singleton: " + dependencies); // NOI18N |
643 |
} |
644 |
Util.err.warning("the module " + codeNameBase + " uses OpenIDE-Module-IDE-Dependencies which is deprecated. See http://openide.netbeans.org/proposals/arch/modularize.html"); // NOI18N |
645 |
} |
646 |
dependencies.addAll(Dependency.create(Dependency.TYPE_JAVA, attr.getValue("OpenIDE-Module-Java-Dependencies"))); // NOI18N |
647 |
dependencies.addAll(Dependency.create(Dependency.TYPE_MODULE, attr.getValue("OpenIDE-Module-Module-Dependencies"))); // NOI18N |
648 |
String pkgdeps = attr.getValue("OpenIDE-Module-Package-Dependencies"); // NOI18N |
649 |
if (pkgdeps != null) { |
650 |
// XXX: Util.err.log(ErrorManager.WARNING, "Warning: module " + codeNameBase + " uses the OpenIDE-Module-Package-Dependencies manifest attribute, which is now deprecated: XXX URL TBD"); |
651 |
dependencies.addAll(Dependency.create(Dependency.TYPE_PACKAGE, pkgdeps)); // NOI18N |
652 |
} |
653 |
dependencies.addAll(Dependency.create(Dependency.TYPE_REQUIRES, attr.getValue("OpenIDE-Module-Requires"))); // NOI18N |
654 |
dependencies.addAll(Dependency.create(Dependency.TYPE_NEEDS, attr.getValue("OpenIDE-Module-Needs"))); // NOI18N |
655 |
dependencies.addAll(Dependency.create(Dependency.TYPE_RECOMMENDS, attr.getValue("OpenIDE-Module-Recommends"))); // NOI18N |
656 |
// Permit the concrete installer to make some changes: |
657 |
mgr.refineDependencies(this, dependencies); |
658 |
dependenciesA = dependencies.toArray(new Dependency[dependencies.size()]); |
659 |
} |
660 |
|
635 |
} |
661 |
} |