On Mon, Jun 6, 2016 at 7:50 PM, Charles Honton <c...@honton.org> wrote:
> How Apache Commons BCEL got to where it is currently. > > 1. I wanted to release a version of BCEL which would support Java 6 and 7. > 2. I updated several classes that handled the new instructions and new > code attributes. > 3. This required new methods on several interfaces. > 4. These new methods broke binary compatibility. > 5. Whenever binary compatibility is broken, Apache Commons policy is to > update the Maven GAV to prevent jar hell. > 6. Part of updating GAV is to also update the package names. > 7. I created a release candidate which was deemed unsuitable for several > reasons; mostly due to FindBugs warnings. > 8. Multiple refactorings were completed (including moving Interface to > Class) to handle FindBugs warnings. > 9. Refactoring died out after no response from users as to Apache > direction. > 10. Recent new interest has us revisiting these changes. > > At this point, we’re somewhat stuck. > 1. Do we break Apache Commons Policy regarding binary compatibility GAV > and package names? > 2. Do we ignore the FindBugs warnings? > > Personally, I am against either of those. I also believe that to fix BCEL > correctly, we’ll end up with an api sufficiently different that users will > have a non-trivial porting task. It might be saner if Apache Commons moves > BCEL into the attic and suggest that our clients to migrate to either ASM > or JavaAssist. > FB makes is pretty clear that porting to another f/w is not going to happen. See my other msg WRT a suggested path. Gary > > regards, > chas > > > On Jun 6, 2016, at 11:27 AM, Andrey Loskutov <losku...@gmx.de> wrote: > > > > Hi all, > > > > this is a follow up on > https://mailman.cs.umd.edu/pipermail/findbugs-discuss/2016-June/004282.html > . > > > > I'm cross-posting this to dev@commons.apache.org because the discussion > on FindBugs mailing list is related to the BCEL 6 API future, and because I > would like to know the opinions from the BCEL community on the upcoming > BCEL 6 release compatibility story. > > > > Please see my answers inline. > > > > On Monday 06 June 2016 17:30 sebb wrote: > >> On 6 June 2016 at 16:23, Andrey Loskutov <losku...@gmx.de> wrote: > >>> Hi all, > >>> > >>> here is the current state of FindBugs adoption to Java 9. > >>> > >>> 1) FindBugs standalone/Eclipse plugin run fine now on/with Java 9, the > latest code is on java9 branch (not on master yet!), see [0, 1]. If there > is interest, I can provide binary snapshots. > >>> > >>> 2) I have difficulties to use BCEL6 trunk, see [2]. Looks like even > after fixing all compile errors due the various API breakages in BCEL 6 > (see [3]), the current BCEL 6 head can't be used directly as a replacement > for our old BCEL5.2 fork, see [4]. If anyone from FB and/or BCEL gurus > could check this, this would be really helpful. Either our BCEL 5.2 patches > were not fully propagated upstream to BCEL or BCEL 6 trunk has few > regressions, or I missed something during update? I have no idea, because > of the next point below. The experimental BCEL 6 port is on an extra branch > on top of Java 9 related changes, see commits prefixed with BCEL6 on > java9_bcel6 branch at [5]. > >>> > >>> 3) I would be very happy if someone (Bill?) would explain how the > *current* BCEL5.2 fork used by FindBugs was built? It was added in commit > [6] but I miss instructions how it differs from the original BCEL code and > so unable to re-build it. > >>> > >>> 4) Assuming BCEL6 bugs/FB errors would be fixed (see [4]), transition > to the current BCEL6 head would break each and every FindBugs client, > because BCEL6 at current state uses different namespace and also added some > other API breaking changes. If we chose this path, none of the 3rd party > detectors will work anymore and therefore we must bump FindBugs version to > 4.0. > >> > >> This is useful to know. > >> So do the 3rd party detectors depend on the BCEL namespace? > > > > Yes > > > >> Or is it because of the BCEL API changes? > > > > Also yes. > > > >> If so, which ones? > > > > The biggest one is the package namespace change, because this affect > each existing BCEL class/interface. > > See commit > https://github.com/findbugsproject/findbugs/commit/917b692d9a12e048921cd1216102b851866ac3e4 > which affects ~400 files in FindBugs. > > > > Much smaller (but still breaking API) changes were class name changes > Constants -> Const, StackMapTable[Entry] -> StackMap[Entry] and the move of > constants defined in Constants from the interface to the class, thus > breaking everyone who implemented the interface and now miss the constants. > The rename of StackMapTable/Entry broke also additionally every detector > implemented on top of PreorderVisitor. StackMapTableEntry not only changed > its name, but also changed signature: getByteCodeOffsetDelta -> > getByteCodeOffset which gives you an additional piece of happiness. > > > > Finally, VisitorSupportsInvokeDynamic interface was removed, which broke > all FB visitors based on it via AbstractFrameModelingVisitor and 8 methods > were added to the Visitor interface. > > > > That's all I saw in our FB code (where we have lot of detectors), > probably others will report additional API breakage too, I can't say for > sure. > > > > But main issue is the namespace change - it is really unnecessary and > surprising. I've read through the commons mailing list and I was surprised > that I saw no real request for it or any discussion about it (I haven't > read through all the years but around the namespace change last summer). > The only thing I saw was the Jira request > https://issues.apache.org/jira/browse/BCEL-222, out of nowhere, and few > commits later BCEL 6 API was made incompatible to every existing client. :-( > > > >> I'm a bit suprised that the BCEL API should affect the detectors, but > >> perhaps there's a good reason for that. > > > > BF analyses bytecode, and although we have also few recently added ASM > based detectors (which are mostly BCEL free), most of the detectors (and > unfortunately many places in the FB API) use BCEL data structures. It was a > natural choice 15 years ago, where BCEL was the only one bytecode > framework... > > > > One way to "fix" the current FindBugs misery is to replace BCEL with > ASM (asm.tree package &Co) but this requires lot of effort because API and > design in ASM do not match BCEL 1:1 - and it will also break every FB > client in much harder way BCEL 6 API breakage does it today. Doing this > will effectively mean a complete fork/rewrite of FindBugs code, and no one > is willing to spend time for it. > > > >>> Question is: should we go this way? Alternative is: undo BCEL package > renaming and revert few API changes were made. This sounds complicated, but > is doable, see BCEL 6 fork where I renamed all packages back to the old > namespace in few minutes [7]. Fixing other "smaller" breaking BCEL API > changes is not that complicated either. However, it is also possible that > BCEL 6 will be released without breaking API's, if I understood right the > discussion on the apache commons-dev mailing list [8]. If anyone from BCEL > is listening to this mailing list, it would be nice to get some feedback on > BCEL 6 plans. > >> > >> I have done quite a bit of work trying to eliminate the API breaks > >> without compromising the BCEL 6 updates. > > > > I really appreciate your effort. Please keep it going. > > > >> Though I have yet to revert the Java and Maven namespace changes as I > >> wanted agreement with the approach first. > >> > >> From my point of view I would be happy to see a compatible version of > >> BCEL using the original namespaces. > >> I'm not sure what other Commons devs think. > > > > I hope to see a binary compatible BCEL 6 release, which is might be not > 1:1 drop-in replacement of BCEL 5 but at least 99%. Some changes must > happen, API must evolve, this is natural and no one can keep on the old API > forever. > > But! After walking over the all BCEL renamings etc I do not really see a > real, functional reason to break *everything*, and a behavior change with > annotations parsing is something one can live with for a major release. Not > all detectors rely on annotations and BCEL behavior change can probably be > fixed in FB core code (so hidden from 3rd party libraries). > > > >> There are still some Java8/Java9 features that are not fully supported. > >> This is true regardless of the namespace issue. > > > > That's absolutely fine and understandable. > > > > My main goal it to get rid of private BCEL forks which cannot be > rebuilt/updated anymore as we see it today, so that we can compile FB on > BCEL head, catching all the fixes you will provide in future BCEL > versions. ...And in my ideal world, the new FindBugs release based on BCEL > 6 will not break any existing 3rd party FindBugs detectors library, or > eventually only require a few trivial changes. > > > > Thanks! > > > >>> [0] https://github.com/findbugsproject/findbugs/commits/java9 > >>> [1] https://github.com/findbugsproject/findbugs/issues/105 > >>> [2] https://github.com/findbugsproject/findbugs/issues/106 > >>> [3] https://issues.apache.org/jira/browse/BCEL-222 > >>> [4] https://issues.apache.org/jira/browse/BCEL-273 > >>> [5] https://github.com/findbugsproject/findbugs/commits/java9_bcel6 > >>> [6] > https://github.com/findbugsproject/findbugs/commit/f9f46bf97c47f011e3757bf9904249faf1039239 > >>> [7] https://github.com/iloveeclipse/commons-bcel/commits/old_structure > >>> [8] > http://mail-archives.apache.org/mod_mbox/commons-dev/201606.mbox/thread > >>> > >>> On Sunday 05 June 2016 12:55 Andrey Loskutov wrote: > >>>> Hi all, > >>>> > >>>> I've got some free time and now working on Java 9 support for > FindBugs, > >>>> the first draft works already, but need some more polishing. > >>>> > >>>> The main goal is to support FB running on Java 9 JRE, to support > reading > >>>> Java 9 class files, and to support FB running on Java 8 but analyzing > >>>> Java 9 code. Nice to have (but not in my scope right now) is to > support > >>>> any new Java 8/9 constructs like lambdas, type annotations etc. > >>>> > >>>> I've documented briefly tasks coming to my mind via [1]. > >>>> > >>>> I plan to push my changes on new java9 branch ASAP. > >>>> > >>>> Main discussion points I see so far: > >>>> > >>>> 1) We must bump the required JRE for FB to 1.8. I see no reason trying > >>>> to support obsoleted 1.7 JRE. If someone wants run FB on 1.7, the old > FB > >>>> 3.0.1 should be used. Objections? > >>>> > >>>> 2) Since there are no official releases from ASM/BCEL with Java 9 > >>>> support yet, we can release first version based on our own FB private > >>>> snapshot versions. The maven folks will cry but this is a chicken and > >>>> egg problem, so I don't care about maven support for the first round > (of > >>>> course any help is welcome). Objections? > >>>> > >>>> 3) Due the JRE version bump I would propose to bump FB version to > 3.1.0. > >>>> Objections? > >>>> > >>>> Please give your feedback either on the lists or on the github task > [1]. > >>>> > >>>> [1] https://github.com/findbugsproject/findbugs/issues/105 > >>>> > >>> > >>> -- > >>> Kind regards, > >>> google.com/+AndreyLoskutov > >>> _______________________________________________ > >>> Findbugs-discuss mailing list > >>> findbugs-disc...@cs.umd.edu > >>> https://mailman.cs.umd.edu/mailman/listinfo/findbugs-discuss > > > > -- > > Kind regards, > > google.com/+AndreyLoskutov > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > > For additional commands, e-mail: dev-h...@commons.apache.org > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > > -- E-Mail: garydgreg...@gmail.com | ggreg...@apache.org Java Persistence with Hibernate, Second Edition <http://www.manning.com/bauer3/> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> Spring Batch in Action <http://www.manning.com/templier/> Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory