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.

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@579527 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/ConstructorCodeAdapter.java b/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/ConstructorCodeAdapter.java
index 7592ba1..b153751 100644
--- a/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/ConstructorCodeAdapter.java
+++ b/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/ConstructorCodeAdapter.java
@@ -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);

diff --git a/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/Manipulator.java b/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/Manipulator.java
index c1070ae..acb18fc 100644
--- a/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/Manipulator.java
+++ b/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/Manipulator.java
@@ -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;

diff --git a/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/MethodCodeAdapter.java b/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/MethodCodeAdapter.java
index 64b78a3..03b8256 100644
--- a/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/MethodCodeAdapter.java
+++ b/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/MethodCodeAdapter.java
@@ -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);

diff --git a/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/PojoAdapter.java b/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/PojoAdapter.java
index 7ac4226..06bb461 100644
--- a/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/PojoAdapter.java
+++ b/ipojo/manipulator/src/main/java/org/apache/felix/ipojo/manipulation/PojoAdapter.java
@@ -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");