Latest pre-release bnd code
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1387568 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/bundleplugin/src/main/java/aQute/bnd/component/ComponentDef.java b/bundleplugin/src/main/java/aQute/bnd/component/ComponentDef.java
index b368f0b..8c4b090 100644
--- a/bundleplugin/src/main/java/aQute/bnd/component/ComponentDef.java
+++ b/bundleplugin/src/main/java/aQute/bnd/component/ComponentDef.java
@@ -50,11 +50,8 @@
*/
void prepare(Analyzer analyzer) throws Exception {
- for (ReferenceDef ref : references.values()) {
- ref.prepare(analyzer);
- if (ref.version.compareTo(version) > 0)
- version = ref.version;
- }
+ prepareVersion(analyzer);
+
if (implementation == null) {
analyzer.error("No Implementation defined for component " + name);
@@ -72,11 +69,6 @@
} else if (servicefactory != null && servicefactory)
analyzer.warning("The servicefactory:=true directive is set but no service is provided, ignoring it");
- if (configurationPolicy != null)
- version = ReferenceDef.max(version, AnnotationReader.V1_1);
- if (configurationPid != null)
- version = ReferenceDef.max(version, AnnotationReader.V1_2);
-
for (Map.Entry<String,List<String>> kvs : property.entrySet()) {
Tag property = new Tag("property");
String name = kvs.getKey();
@@ -110,6 +102,21 @@
propertyTags.add(property);
}
}
+
+ private void prepareVersion(Analyzer analyzer) throws Exception {
+
+ for (ReferenceDef ref : references.values()) {
+ ref.prepare(analyzer);
+ updateVersion(ref.version);
+ }
+ if (configurationPolicy != null)
+ updateVersion(AnnotationReader.V1_1);
+ if (configurationPid != null)
+ updateVersion(AnnotationReader.V1_2);
+ if (modified != null)
+ updateVersion(AnnotationReader.V1_1);
+
+ }
void sortReferences() {
Map<String, ReferenceDef> temp = new TreeMap<String,ReferenceDef>(references);
@@ -147,10 +154,10 @@
if (factory != null)
component.addAttribute("factory", factory);
- if (activate != null)
+ if (activate != null && version != AnnotationReader.V1_0)
component.addAttribute("activate", activate);
- if (deactivate != null)
+ if (deactivate != null && version != AnnotationReader.V1_0)
component.addAttribute("deactivate", deactivate);
if (modified != null)
@@ -220,4 +227,16 @@
}
return v;
}
+
+ void updateVersion(Version version) {
+ this.version = max(this.version, version);
+ }
+
+ static <T extends Comparable<T>> T max(T a, T b) {
+ int n = a.compareTo(b);
+ if (n >= 0)
+ return a;
+ return b;
+ }
+
}
\ No newline at end of file