Author: clement
Date: Wed Sep 26 02:01:13 2007
New Revision: 579527
URL: http://svn.apache.org/viewvc?rev=579527&view=rev
Log:
Change the iPOJO Plugin name to be "Maven compliant" (org.apache.felix.ipojo
becomes maven-ipojo-plugin)
Fix a bug on fields from super class in the manipulator.
Modified:
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/ConstructorCodeAdapter.java
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/Manipulator.java
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/MethodCodeAdapter.java
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/PojoAdapter.java
Modified:
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/ConstructorCodeAdapter.java
URL:
http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/ConstructorCodeAdapter.java?rev=579527&r1=579526&r2=579527&view=diff
==============================================================================
---
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/ConstructorCodeAdapter.java
(original)
+++
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/ConstructorCodeAdapter.java
Wed Sep 26 02:01:13 2007
@@ -18,6 +18,8 @@
*/
package org.apache.felix.ipojo.manipulation;
+import java.util.Set;
+
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodAdapter;
import org.objectweb.asm.MethodVisitor;
@@ -40,17 +42,24 @@
* Is the super call detected ?
*/
private boolean m_superDetected;
+
+ /**
+ * Set of contained fields.
+ */
+ private Set m_fields;
/**
* PropertyCodeAdapter constructor.
* A new FiledCodeAdapter should be create for each method visit.
* @param mv MethodVisitor
* @param owner Name of the class
+ * @param fields List of contained fields
*/
- public ConstructorCodeAdapter(final MethodVisitor mv, final String owner) {
+ public ConstructorCodeAdapter(final MethodVisitor mv, final String owner,
Set fields) {
super(mv);
m_owner = owner;
m_superDetected = false;
+ m_fields = fields;
}
@@ -67,7 +76,7 @@
final String owner,
final String name,
final String desc) {
- if (owner.equals(m_owner)) {
+ if (m_fields.contains(name) && m_owner.equals(owner)) {
if (opcode == GETFIELD) {
String gDesc = "()" + desc;
visitMethodInsn(INVOKEVIRTUAL, owner, "_get" + name, gDesc);
Modified:
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/Manipulator.java
URL:
http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/Manipulator.java?rev=579527&r1=579526&r2=579527&view=diff
==============================================================================
---
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/Manipulator.java
(original)
+++
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/Manipulator.java
Wed Sep 26 02:01:13 2007
@@ -92,7 +92,7 @@
ckReader.accept(ck, ClassReader.SKIP_FRAMES);
is1.close();
- m_fields = ck.getFields();
+ m_fields = ck.getFields(); // GEt visited fields (contains only POJO
fields)
// Get interface and remove POJO interface is presents
String[] its = ck.getInterfaces();
@@ -128,7 +128,7 @@
InputStream is2 = url.openStream();
ClassReader cr0 = new ClassReader(is2);
ClassWriter cw0 = new ClassWriter(ClassWriter.COMPUTE_MAXS);
- PojoAdapter preprocess = new PojoAdapter(cw0);
+ PojoAdapter preprocess = new PojoAdapter(cw0, m_fields);
cr0.accept(preprocess, ClassReader.SKIP_FRAMES);
is2.close();
@@ -196,7 +196,7 @@
InputStream is2 = new ByteArrayInputStream(origin);
ClassReader cr0 = new ClassReader(is2);
ClassWriter cw0 = new ClassWriter(ClassWriter.COMPUTE_MAXS);
- PojoAdapter preprocess = new PojoAdapter(cw0);
+ PojoAdapter preprocess = new PojoAdapter(cw0, m_fields);
cr0.accept(preprocess, ClassReader.SKIP_FRAMES);
is2.close();
finalWriter = cw0;
Modified:
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/MethodCodeAdapter.java
URL:
http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/MethodCodeAdapter.java?rev=579527&r1=579526&r2=579527&view=diff
==============================================================================
---
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/MethodCodeAdapter.java
(original)
+++
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/MethodCodeAdapter.java
Wed Sep 26 02:01:13 2007
@@ -18,6 +18,8 @@
*/
package org.apache.felix.ipojo.manipulation;
+import java.util.Set;
+
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
@@ -40,6 +42,11 @@
* Name of the method.
*/
private String m_name;
+
+ /**
+ * Contained fields.
+ */
+ private Set m_fields;
/**
* MethodCodeAdapter constructor.
@@ -48,11 +55,13 @@
* @param access : Method access
* @param name : Method name
* @param desc : Method descriptor
+ * @param fields : Contained fields
*/
- public MethodCodeAdapter(final MethodVisitor mv, final String owner, int
access, String name, String desc) {
+ public MethodCodeAdapter(final MethodVisitor mv, final String owner, int
access, String name, String desc, Set fields) {
super(mv, access, name, desc);
m_owner = owner;
m_name = name;
+ m_fields = fields;
}
/**
@@ -64,7 +73,7 @@
* @param desc : descriptor of the field
*/
public void visitFieldInsn(final int opcode, final String owner, final
String name, final String desc) {
- if (owner.equals(m_owner)) {
+ if (owner.equals(m_owner) && m_fields.contains(name)) {
if (opcode == GETFIELD) {
String gDesc = "()" + desc;
visitMethodInsn(INVOKEVIRTUAL, owner, "_get" + name, gDesc);
Modified:
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/PojoAdapter.java
URL:
http://svn.apache.org/viewvc/felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/PojoAdapter.java?rev=579527&r1=579526&r2=579527&view=diff
==============================================================================
---
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/PojoAdapter.java
(original)
+++
felix/trunk/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/PojoAdapter.java
Wed Sep 26 02:01:13 2007
@@ -19,7 +19,10 @@
package org.apache.felix.ipojo.manipulation;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import org.objectweb.asm.AnnotationVisitor;
import org.objectweb.asm.Attribute;
@@ -50,7 +53,8 @@
/**
* Field list.
*/
- private List m_fields = new ArrayList();
+ private Set m_fields;
+
/**
* Method list.
@@ -65,9 +69,12 @@
/**
* Constructor.
* @param arg0 : class adapter on which delegate.
+ * @param fields : map of contained fields.
+ * @param m_fields2
*/
- public PojoAdapter(ClassVisitor arg0) {
+ public PojoAdapter(ClassVisitor arg0, Map fields) {
super(arg0);
+ m_fields = fields.keySet();
}
/**
@@ -121,7 +128,6 @@
createGetComponentInstanceMethod();
m_methods.clear();
- m_fields.clear();
cv.visitEnd();
}
@@ -140,7 +146,6 @@
public FieldVisitor visitField(int access, String name, String desc,
String signature, Object value) {
// Add the field to the list.
if ((access & ACC_STATIC) == 0) {
- m_fields.add(name);
addFlagField(name);
m_getterSetterCreator.visitField(access, name, desc, signature,
value);
}
@@ -187,7 +192,7 @@
return null;
} else {
// return new ConstructorCodeAdapter(mv, access, desc,
m_owner);
- return new ConstructorCodeAdapter(mv, m_owner);
+ return new ConstructorCodeAdapter(mv, m_owner, m_fields);
}
} else { // "Normal methods"
// avoid manipulating static methods.
@@ -213,7 +218,7 @@
}
MethodVisitor mv = super.visitMethod(access, name, desc,
signature, exceptions);
- return new MethodCodeAdapter(mv, m_owner, access, name, desc);
+ return new MethodCodeAdapter(mv, m_owner, access, name, desc,
m_fields);
}
}
@@ -300,8 +305,9 @@
mv.visitMethodInsn(INVOKEVIRTUAL,
"org/apache/felix/ipojo/InstanceManager", "getRegistredFields",
"()Ljava/util/Set;");
mv.visitVarInsn(ASTORE, 2);
- for (int i = 0; i < m_fields.size(); i++) {
- String field = (String) m_fields.get(i);
+ Iterator it = m_fields.iterator();
+ while (it.hasNext()) {
+ String field = (String) it.next();
mv.visitVarInsn(ALOAD, 2);
mv.visitLdcInsn(field);
mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Set", "contains",
"(Ljava/lang/Object;)Z");