[prev in list] [next in list] [prev in thread] [next in thread] 

List:       bcel-dev
Subject:    DO NOT REPLY [Bug 44212]  New:  - Type of 'this' on instantiation of MethodGen from existing Method
From:       bugzilla () apache ! org
Date:       2008-01-11 17:27:24
Message-ID: bug-44212-8203 () http ! issues ! apache ! org/bugzilla/
[Download RAW message or body]

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG·
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=44212>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND·
INSERTED IN THE BUG DATABASE.

http://issues.apache.org/bugzilla/show_bug.cgi?id=44212

           Summary: Type of 'this' on instantiation of MethodGen from
                    existing Method
           Product: BCEL
           Version: 5.2
          Platform: Other
        OS/Version: Mac OS X 10.4
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Main
        AssignedTo: bcel-dev@jakarta.apache.org
        ReportedBy: jesper.spring@epfl.ch


I have an issue when instantiating a MethodGen from an existing (non-static) method \
instance. I'm  trying to copy a (non-static) method from one class to another class \
using BCEL. Specifically, I do:

MethodGen newMethodGen = new MethodGen(originalMethod.getBCELMethod(), 
newClassGen.getClassName(), newClassGen.getConstantPool());

This works nicely except for one issue; the 'this' variable in the local variable \
table points to the entry in  the CP representing the type of the originating class, \
and not the type of the class in which it is inserted  in. 

I traced a bit in the BCEL code, and found that to start with during the \
instantiation process of the  MethodGen class (in the constructor), the 'this' \
variable in the local variable table indeed points to the  correct entry in the CP \
representing the type of the new class .. 

However, it appears that after the initial instantiation, the attributes of the \
provided originating method  overrides the local variable table. Specifically, in the \
constructor (the lines 213-229) the local variable  table is deleted, and instead the \
local variable table of the provided original method is copied over.

From the documentation I cannot tell if this is by design, but it does appear to be a \
bit confusing;  specifically, one can put a method into one class, but the 'this' \
variable points to another class. If this is  by design, I would propose some \
exception throwing if the provided name of the class differs from  class used in the \
local variable table.

Now we're at it .. invoking setClassName() on a MethodGen instance does also not make \
any changes to  the local variable table -- again making it possible to have this \
inconsistency.

-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

---------------------------------------------------------------------
To unsubscribe, e-mail: bcel-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: bcel-dev-help@jakarta.apache.org


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic