You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cl...@apache.org on 2010/07/31 10:14:26 UTC
svn commit: r981016 - in /felix/trunk/ipojo:
manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/
manipulator/src/main/java/org/apache/felix/ipojo/manipulator/
tests/core/annotations/ tests/core/annotations/src/main/java/foo/ test...
Author: clement
Date: Sat Jul 31 08:14:26 2010
New Revision: 981016
URL: http://svn.apache.org/viewvc?rev=981016&view=rev
Log:
Fix Felix-2487
If @Component is missing, the annotation processing is aborted.
This case is detected by the MetadataCollector, but the warning message is handled by Pojoization
Add tests.
Added:
felix/trunk/ipojo/tests/core/annotations/src/main/java/foo/
felix/trunk/ipojo/tests/core/annotations/src/main/java/foo/Foo.java
felix/trunk/ipojo/tests/core/annotations/src/main/java/foo/ipojo/
felix/trunk/ipojo/tests/core/annotations/src/main/java/foo/ipojo/IPOJOFoo.java
felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/OnlyFoo.java
felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/OnlyiPOJOFoo.java
Modified:
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MetadataCollector.java
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/Pojoization.java
felix/trunk/ipojo/tests/core/annotations/pom.xml
Modified: felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MetadataCollector.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MetadataCollector.java?rev=981016&r1=981015&r2=981016&view=diff
==============================================================================
--- felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MetadataCollector.java (original)
+++ felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/annotations/MetadataCollector.java Sat Jul 31 08:14:26 2010
@@ -65,6 +65,8 @@ public class MetadataCollector extends E
*/
private boolean m_containsComponentAnnotation = false;
+ private boolean m_ignoredBecauseOfMissingComponent = false;
+
/**
* Map of [element ids, element].
* This map is used to easily get an already created element.
@@ -101,6 +103,14 @@ public class MetadataCollector extends E
return m_containsComponentAnnotation;
}
+ public boolean isIgnoredBecauseOfMissingComponent() {
+ return m_ignoredBecauseOfMissingComponent;
+ }
+
+ public String getClassName() {
+ return m_className;
+ }
+
/**
* Start visiting a class.
* Initialize the getter/setter generator, add the _cm field, add the pojo interface.
@@ -205,6 +215,12 @@ public class MetadataCollector extends E
* @see org.objectweb.asm.commons.EmptyVisitor#visitEnd()
*/
public void visitEnd() {
+ // If m_elem (Component) is null, print a warning and ignore.
+ if (m_elem == null && ! m_elements.isEmpty()) {
+ m_ignoredBecauseOfMissingComponent = true;
+ return;
+ }
+
// Recompute the tree
Set elems = getElements().keySet();
Iterator it = elems.iterator();
@@ -218,7 +234,6 @@ public class MetadataCollector extends E
if (ref == null) {
// Add to the root
m_elem.addElement(current);
- // System.err.println("The element " + reference + " is not declared - skipping the element " + current.toXMLString());
} else {
ref.addElement(current);
}
Modified: felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/Pojoization.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/Pojoization.java?rev=981016&r1=981015&r2=981016&view=diff
==============================================================================
--- felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/Pojoization.java (original)
+++ felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulator/Pojoization.java Sat Jul 31 08:14:26 2010
@@ -29,6 +29,7 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
@@ -290,23 +291,26 @@ public class Pojoization {
*/
private void computeAnnotations(byte[] inC) {
ClassReader cr = new ClassReader(inC);
- MetadataCollector xml = new MetadataCollector();
- cr.accept(xml, 0);
- if (xml.isComponentType()) {
+ MetadataCollector collector = new MetadataCollector();
+ cr.accept(collector, 0);
+
+ if (collector.isIgnoredBecauseOfMissingComponent()) {
+ warn("Annotation processing ignored in " + collector.getClassName() + " - @Component missing");
+ } else if (collector.isComponentType()) {
boolean toskip = false;
for (int i = 0; !toskip && i < m_metadata.size(); i++) {
Element meta = (Element) m_metadata.get(i);
if (! meta.getName().equals("instance") // Only if its a component type definition,
// so skip instance declaration
&& meta.containsAttribute("name")
- && meta.getAttribute("name").equalsIgnoreCase(xml.getComponentTypeDeclaration().getAttribute("name"))) {
+ && meta.getAttribute("name").equalsIgnoreCase(collector.getComponentTypeDeclaration().getAttribute("name"))) {
toskip = true;
- warn("The component type " + xml.getComponentTypeDeclaration().getAttribute("name") + " is overriden by the metadata file");
+ warn("The component type " + collector.getComponentTypeDeclaration().getAttribute("name") + " is overriden by the metadata file");
}
}
if (!toskip) {
// if no metadata or empty one, create a new array.
- Element elem = xml.getComponentTypeDeclaration();
+ Element elem = collector.getComponentTypeDeclaration();
m_metadata.add(elem);
String name = elem.getAttribute("classname");
@@ -319,9 +323,9 @@ public class Pojoization {
m_components.add(info);
// Instantiate ?
- if (xml.getInstanceDeclaration() != null) {
+ if (collector.getInstanceDeclaration() != null) {
warn("Declaring an empty instance of " + elem.getAttribute("classname"));
- m_metadata.add(xml.getInstanceDeclaration());
+ m_metadata.add(collector.getInstanceDeclaration());
}
}
}
Modified: felix/trunk/ipojo/tests/core/annotations/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/annotations/pom.xml?rev=981016&r1=981015&r2=981016&view=diff
==============================================================================
--- felix/trunk/ipojo/tests/core/annotations/pom.xml (original)
+++ felix/trunk/ipojo/tests/core/annotations/pom.xml Sat Jul 31 08:14:26 2010
@@ -102,7 +102,7 @@
${project.artifactId}
</Bundle-SymbolicName>
<Private-Package>
- org.apache.felix.ipojo.test*
+ org.apache.felix.ipojo.test*, foo
</Private-Package>
<Test-Suite>
org.apache.felix.ipojo.test.scenarios.annotations.AnnotationsTestSuite
Added: felix/trunk/ipojo/tests/core/annotations/src/main/java/foo/Foo.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/annotations/src/main/java/foo/Foo.java?rev=981016&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/annotations/src/main/java/foo/Foo.java (added)
+++ felix/trunk/ipojo/tests/core/annotations/src/main/java/foo/Foo.java Sat Jul 31 08:14:26 2010
@@ -0,0 +1,10 @@
+package foo;
+
+
+/**
+ * Creates a simple annotation to create the processing of non-matching
+ * annotations
+ */
+public @interface Foo {
+ String bar();
+}
Added: felix/trunk/ipojo/tests/core/annotations/src/main/java/foo/ipojo/IPOJOFoo.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/annotations/src/main/java/foo/ipojo/IPOJOFoo.java?rev=981016&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/annotations/src/main/java/foo/ipojo/IPOJOFoo.java (added)
+++ felix/trunk/ipojo/tests/core/annotations/src/main/java/foo/ipojo/IPOJOFoo.java Sat Jul 31 08:14:26 2010
@@ -0,0 +1,10 @@
+package foo.ipojo;
+
+
+/**
+ * Creates a simple annotation to create the processing of matching
+ * annotations
+ */
+public @interface IPOJOFoo {
+ String bar();
+}
Added: felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/OnlyFoo.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/OnlyFoo.java?rev=981016&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/OnlyFoo.java (added)
+++ felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/OnlyFoo.java Sat Jul 31 08:14:26 2010
@@ -0,0 +1,8 @@
+package org.apache.felix.ipojo.test.scenarios.component;
+
+import foo.Foo;
+
+@Foo(bar="bar")
+public class OnlyFoo {
+
+}
Added: felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/OnlyiPOJOFoo.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/OnlyiPOJOFoo.java?rev=981016&view=auto
==============================================================================
--- felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/OnlyiPOJOFoo.java (added)
+++ felix/trunk/ipojo/tests/core/annotations/src/main/java/org/apache/felix/ipojo/test/scenarios/component/OnlyiPOJOFoo.java Sat Jul 31 08:14:26 2010
@@ -0,0 +1,8 @@
+package org.apache.felix.ipojo.test.scenarios.component;
+
+import foo.ipojo.IPOJOFoo;
+
+@IPOJOFoo(bar="bar")
+public class OnlyiPOJOFoo {
+
+}