I'm currently not familiar with your release process and, hence, not sure what 
sorts of changes you are willing to consider at this time.  I thought I would 
start with a rough outline of all of our changes and then the group could 
suggest which ones I should open in JIRA.

We cloned a version of the BCEL sources at Revision 1514334.
We updated to Revision 1646789 (2014-12-19) week of January 19-23, 2015.

Here is a list of files and reasons we differ from standard BCEL:
(The 'reason' codes in left hand column are enumerated below the file list.)

C         /bcel/classfile/AnnotationDefault.java
I         /bcel/classfile/AnnotationEntry.java
D,I       /bcel/classfile/Attribute.java
I         /bcel/classfile/AttributeReader.java
BM,JD     /bcel/classfile/BootstrapMethod.java
BM,JD     /bcel/classfile/BootstrapMethods.java
I         /bcel/classfile/ClassParser.java
I         /bcel/classfile/Code.java
BM,ID,TS  /bcel/classfile/ConstantCP.java
ID        /bcel/classfile/ConstantInvokeDynamic.java
P         /bcel/classfile/Constant.java
T         /bcel/classfile/ConstantLong.java
BM,ID,TS  /bcel/classfile/ConstantPool.java
BM,ID     /bcel/classfile/DescendingVisitor.java
BM,ID     /bcel/classfile/EmptyVisitor.java
C         /bcel/classfile/EnclosingMethod.java
I         /bcel/classfile/Field.java
I         /bcel/classfile/FieldOrMethod.java
TS        /bcel/classfile/InnerClasses.java
TS        /bcel/classfile/InnerClass.java
T         /bcel/classfile/JavaClass.java
JD        /bcel/classfile/LineNumber.java
JD        /bcel/classfile/LineNumberTable.java
TS        /bcel/classfile/LocalVariable.java
TS        /bcel/classfile/LocalVariableTypeTable.java
I         /bcel/classfile/Method.java
T         /bcel/classfile/RuntimeInvisibleParameterAnnotations.java
T         /bcel/classfile/RuntimeVisibleParameterAnnotations.java
TS        /bcel/classfile/SourceFile.java
S,I       /bcel/classfile/StackMapTableEntry.java
I         /bcel/classfile/StackMapTable.java
V,I,ID    /bcel/classfile/Utility.java
BM,ID     /bcel/classfile/Visitor.java
T         /bcel/Constants.java
TS        /bcel/generic/BranchInstruction.java
ID        /bcel/generic/ConstantPoolGen.java
ID        /bcel/generic/EmptyVisitor.java
P,ID      /bcel/generic/FieldOrMethod.java
ID        /bcel/generic/GETFIELD.java
ID        /bcel/generic/GETSTATIC.java
ID        /bcel/generic/InstructionFactory.java
P,U       /bcel/generic/Instruction.java
ID        /bcel/generic/INVOKEDYNAMIC.java
ID        /bcel/generic/INVOKEINTERFACE.java
ID        /bcel/generic/INVOKESPECIAL.java
ID        /bcel/generic/INVOKESTATIC.java
ID        /bcel/generic/INVOKEVIRTUAL.java
ID        /bcel/generic/InvokeInstruction.java
D         /bcel/generic/LineNumberGen.java
H         /bcel/generic/LocalVariableGen.java
B,LV,TS   /bcel/generic/MethodGen.java
ID        /bcel/generic/PUTFIELD.java
ID        /bcel/generic/PUTSTATIC.java
ID        /bcel/generic/Visitor.java
M         /bcel/PLSEMarker.java (new file)
P,TS      /bcel/util/BCELifier.java
ID        /bcel/util/CodeHTML.java
ID        /bcel/util/InstructionFinder.java
D         /bcel/util/SyntheticRepository.java
D         /bcel/verifier/statics/Pass1Verifier.java
ID        /bcel/verifier/statics/Pass3aVerifier.java
ID        /bcel/verifier/structurals/ExecutionVisitor.java
P         /bcel/verifier/structurals/Frame.java
D,ID,UT   /bcel/verifier/structurals/InstConstraintVisitor.java
C,P,ML    /bcel/verifier/structurals/LocalVariables.java
P         /bcel/verifier/structurals/OperandStack.java
RS        /bcel/verifier/structurals/Subroutines.java


B  - BCEL bug #39695 (and #44083) (now BCEL-79)
BM - add support for BootstrapMethod(s)
C  - better support for clone/copy methods
D  - add some debugging code
H  - fix problem with hash function
I  - finish/complete change from DataInputStream to DataInput
ID - add/improve support for InvokeDynamic
JD - javadoc additions
LV - correct problem with missing local vars to anonymous init methods
M  - marked class to identify our version of BCEL
ML - deal with superclass of type Object in merge of local variables
P  - make some methods public (or not deprecated) for our use
RS - reduce JustIce restrictions on subroutines
S  - improve StackMap support
T  - fix typo, source formatting or cut/paste error
TS - improve toString or other output formatting
U  - we need instructions to be unique
UT - allow unitialized types in PUTFIELD (can happen in a constructor)
V  - add support for TypeVariable Signature


A few additional thoughts:

You will definitely not want change 'M', probably not change 'P' either.  

I was surprised by 'U' as that change had a huge side effect, possibly due to a 
design flaw in how Targeters work; I was unable to find any discussion in your 
archives.

During the past year, both the Apache Commons BCEL team and our group here at 
UW independently completed the support for InvokeDynamic .  Some things we 
chose to do the same way, but there are a few items that are quite different.  
Trying not to be too biased, I believe our method is better.  One of the larger 
differences is your decision to add the abstract class NameSignatureMethod 
between FieldOrMethod and CPInstruction and then have InvokeDynamic extend from 
that instead of from InvokeInstruction.  To me this seems wrong.   In addition 
to forcing InvokeDynamic to duplicate all the methods from InvokeInstruction 
and FieldOrMethod, it is awkward that it is the only form of the Invoke 
Instruction that doesn't derive from InvokeInstruction. (‘ID’ and ‘BM’ as well.)

‘B’, ‘H’, and ‘LV’ are important bug fixes.

I not sure why you chose not to complete the change from DataInputStream to 
DataInput (‘I’).  This was another item we did here at PLSE independent of your 
work.  Going all the way is nice, because tools that use BCEL can then backup 
and reprocess the input class file.

A lot of the ‘TS’ changes were to make the BCEL output look more like the 
‘javap’ output; you may not care, but this was useful to some of our clients.

Sorry for length of post and amount of information.  We can divide into 
separate threads If you wish.

Mark


-----Original Message-----
From: Emmanuel Bourg [mailto:emmanuel.bo...@gmail.com] On Behalf Of Emmanuel 
Bourg
Sent: Friday, January 23, 2015 2:11 PM
To: Commons Developers List
Subject: Re: [bcel] new to list - introduction

Le 23/01/2015 20:55, Mark Roberts a écrit :
> My name is Mark Roberts and I work in the Programming Languages and 
> Software Engineering group (PLSE) at the University of Washington. 
> (http://www.cs.washington.edu/research/plse)
> 
> Our team develops and supports a number of open source tools.  One of the 
> main ones, Daikon  (http://plse.cs.washington.edu/daikon/) makes extensive 
> use of BCEL to manipulate Java class files.  We have been using BCEL since 
> 2001 and have made a few changes along the way.  I have just completed 
> re-merging our BCEL source tree with a fairly recent mainline version 
> (r1646789 2014-12-19).  
> 
> I have exchanged email with Torsten Curdt and he suggested I join this 
> mailing list as a first step in sharing our changes and fixes.

Hi Mark and welcome to Apache Commons. We are about to release BCEL 6.0 but 
it's still time to commit some minor changes. I plan to merge the recent 
verifier improvement contributed by Jérôme Leroux and cut a new release 
candidate shortly after.

What kind of improvements would you like to contribute? We can start discussing 
them on the list and then open related issues in JIRA.

Emmanuel Bourg


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to