FELIX-3550 : Reimplement the SCR Generator
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1355894 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java b/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java
index 7d8346b..8c28538 100644
--- a/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java
+++ b/scrplugin/annotations/src/main/java/org/apache/felix/scrplugin/processing/SCRAnnotationProcessor.java
@@ -205,7 +205,7 @@
// FELIX-593: immediate attribute does not default to true all the
// times hence we only set it if declared in the tag
if (cad.getValue("immediate") != null) {
- component.setEnabled(cad.getBooleanValue("immediate", false));
+ component.setImmediate(cad.getBooleanValue("immediate", false));
}
component.setInherit(cad.getBooleanValue("inherit", true));
component.setConfigurationPolicy(ComponentConfigurationPolicy.valueOf(cad.getEnumValue("policy",
diff --git a/scrplugin/ds-annotations/src/main/java/org/apache/felix/scrplugin/ds/DSAnnotationProcessor.java b/scrplugin/ds-annotations/src/main/java/org/apache/felix/scrplugin/ds/DSAnnotationProcessor.java
index 9adcbca..da8e7fd 100644
--- a/scrplugin/ds-annotations/src/main/java/org/apache/felix/scrplugin/ds/DSAnnotationProcessor.java
+++ b/scrplugin/ds-annotations/src/main/java/org/apache/felix/scrplugin/ds/DSAnnotationProcessor.java
@@ -162,7 +162,7 @@
// immediate
if (cad.getValue("immediate") != null) {
- component.setEnabled(cad.getBooleanValue("immediate", false));
+ component.setImmediate(cad.getBooleanValue("immediate", false));
}
// property
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
index ed07973..3ef92df 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/SCRDescriptorGenerator.java
@@ -426,7 +426,7 @@
iLog.addError(sde.getMessage(), sde.getSourceLocation());
}
}
- } while ( inherit && current != null);
+ } while ( current != null);
// PID handling
if ( componentDesc.isCreatePid() && !container.getProperties().containsKey(org.osgi.framework.Constants.SERVICE_PID)) {
diff --git a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ClassScanner.java b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ClassScanner.java
index f2dcebc..7b656f6 100644
--- a/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ClassScanner.java
+++ b/scrplugin/generator/src/main/java/org/apache/felix/scrplugin/helper/ClassScanner.java
@@ -136,9 +136,12 @@
final Class<?> annotatedClass = project.getClassLoader().loadClass(src.getClassName());
final ClassDescription desc = this.processClass(annotatedClass, src.getFile().toString());
- if (desc != null) {
- result.add(desc);
+ if ( desc != null ) {
this.allDescriptions.put(annotatedClass.getName(), desc);
+ if ( desc.getDescriptions(ComponentDescription.class).size() > 0) {
+ result.add(desc);
+ log.debug("Found component description " + desc + " in " + annotatedClass.getName());
+ }
} else {
this.allDescriptions.put(annotatedClass.getName(), new ClassDescription(annotatedClass, GENERATED));
}
@@ -154,6 +157,7 @@
*/
private ClassDescription processClass(final Class<?> annotatedClass, final String location)
throws SCRDescriptorFailureException, SCRDescriptorException {
+ log.info("Scanning " + annotatedClass.getName());
try {
// get the class file for ASM
final String pathToClassFile = annotatedClass.getName().replace('.', '/') + ".class";
@@ -174,10 +178,8 @@
final ClassDescription desc = new ClassDescription(annotatedClass, location);
aProcessor.process(new ScannedClass(descriptions, annotatedClass), desc);
- if (desc.getDescriptions(ComponentDescription.class).size() > 0) {
- log.debug("Found component description " + desc + " in " + annotatedClass.getName());
- return desc;
- }
+ log.debug("Found descriptions " + desc + " in " + annotatedClass.getName());
+ return desc;
}
} catch (final IOException ioe) {
throw new SCRDescriptorFailureException("Unable to scan class files: " + annotatedClass.getName(), ioe);
@@ -394,18 +396,7 @@
try {
scrInfoFile = this.getFile( artifact, ABSTRACT_DESCRIPTOR_ARCHIV_PATH );
if ( scrInfoFile != null ) {
- final List<ClassDescription> c = this.parseServiceComponentDescriptor( scrInfoFile, artifact.toString() + ':' + ABSTRACT_DESCRIPTOR_ARCHIV_PATH);
- if ( c != null ) {
- for(final ClassDescription cd : c) {
- final String name;
- if ( cd.getDescribedClass() == null ) {
- name = cd.getDescription(ComponentDescription.class).getName();
- } else {
- name = cd.getDescribedClass().getName();
- }
- loadedDependencies.put(name, cd);
- }
- }
+ this.readServiceComponentDescriptor( scrInfoFile, artifact.toString() + ':' + ABSTRACT_DESCRIPTOR_ARCHIV_PATH);
continue;
}
this.log.debug( "Artifact has no scrinfo file (it's optional): " + artifact );
@@ -429,18 +420,7 @@
while ( st.hasMoreTokens() ) {
final String entry = st.nextToken().trim();
if ( entry.length() > 0 ) {
- final List<ClassDescription> c = this.readServiceComponentDescriptor( artifact, entry );
- if ( c != null ) {
- for(final ClassDescription cd : c) {
- final String name;
- if ( cd.getDescribedClass() == null ) {
- name = cd.getDescription(ComponentDescription.class).getName();
- } else {
- name = cd.getDescribedClass().getName();
- }
- loadedDependencies.put(name, cd);
- }
- }
+ this.readServiceComponentDescriptor( artifact, entry );
}
}
} else {
@@ -467,10 +447,22 @@
* @throws SCRDescriptorException If an error occurrs reading the
* descriptors from the stream.
*/
- private List<ClassDescription> parseServiceComponentDescriptor(
+ private void readServiceComponentDescriptor(
final InputStream file, final String location )
throws SCRDescriptorException {
- return ComponentDescriptorIO.read( file, this.project.getClassLoader(), iLog, location );
+ final List<ClassDescription> list = ComponentDescriptorIO.read( file, this.project.getClassLoader(), iLog, location );
+ if ( list != null ) {
+ for(final ClassDescription cd : list) {
+ final String name;
+ if ( cd.getDescribedClass() == null ) {
+ name = cd.getDescription(ComponentDescription.class).getName();
+ } else {
+ name = cd.getDescribedClass().getName();
+ }
+ loadedDependencies.put(name, cd);
+ }
+ }
+
}
/**
@@ -481,7 +473,7 @@
* @throws IOException
* @throws SCRDescriptorException
*/
- private List<ClassDescription> readServiceComponentDescriptor( final File artifactFile, String entry ) {
+ private void readServiceComponentDescriptor( final File artifactFile, String entry ) {
this.log.debug( "Reading " + entry + " from " + artifactFile );
InputStream xml = null;
try {
@@ -489,7 +481,7 @@
if ( xml == null ) {
throw new SCRDescriptorException( "Entry " + entry + " not contained in JAR File ", artifactFile.toString());
}
- return this.parseServiceComponentDescriptor( xml, artifactFile.toString() + ':' + entry );
+ this.readServiceComponentDescriptor( xml, artifactFile.toString() + ':' + entry );
} catch ( final IOException mee ) {
this.log.warn( "Unable to read SCR descriptor file from JAR File " + artifactFile + " at " + entry );
this.log.debug( "Exception occurred during reading: " + mee.getMessage(), mee );
@@ -501,8 +493,6 @@
try { xml.close(); } catch (final IOException ignore) {}
}
}
-
- return null;
}