hello, 
I'm trying to realizewith Javassist a tool that can reduce an inheritance tree 
into a flat class (that is, if C3 inherits from C2, which in turn inherits from 
C1, I would like to suppress C1 and C2 and to augment C3 with its inherited 
attributes and methods).

So, the key problem is to copy into a class (say C2) all the attributes and the 
methods inherited from a super class (say C1). The real issue appears when 
dealing with the constructors of C1.

Let's consider the following situation, and the two solutions I've tried to 
adopt:

public class C1 {
  | private int fieldc1;
  |     public C1(int b) {
  |         fieldc1 = b;
  |     }
  | }
  | 
  | class C2 {
  |     public C2(int i) { super(i); ... }
  | }
  | 
  | //-----------
  | Solution1:
  | //-----------
  | 
  | C2 must be modified into:
  | 
  | class C2 {
  |     private int fieldc1;
  |     public C2(int i, int dummy) { ... }     // dummy is added. Problem1 : 
how to add a parameter to C2 using Javassist, because I have evil with the use 
of setAttribute.
  |                                                                     // 
Problem 2: the use of the primitives types like (int, string, float..) for 
dummy can pose a problem of conflict in the signatures
  |     public C2(int i) { this(i, 0); ... }         // Problem 3: How to 
localize the call to "super", using Javassist, in order to substitute it by 
"this"
  |                                                                 // Problem 
4: How to recognize the correct constructor of  the super class (if many) which 
corresponds to that call
  |                                                                // Problem 
5: How to replace super(i) by this(i, 0), using Javassist
  |                                                                 // I manage 
to change "super" into "this" with setSuperClass but I am not able to modify 
the signature, i.e. to change this(i) into this(i, 0)
  | 
  | }
  | 
  |  
  | //-----------
  | Solution2:
  | //-----------
  | 
  | C2 must be modified into:
  | 
  | public class C2 {
  |     private int fieldc1;
  |     public C2(int i) {
  |         fieldc1 = b;        //Code substitution. Problem: Can we substitute 
a line with a portion of source code? How, using Javassist?
  |         ...
  |     }
  | }

 

Thank you in advance for any help.

View the original post : 
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3887621#3887621

Reply to the post : 
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3887621


-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
_______________________________________________
JBoss-user mailing list
JBoss-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to