Vineflower 1.10.0
Vineflower 1.10.0 is the next major release of Vineflower, bringing a plugin interface to allow interfacing with the decompiler, a prototype Kotlin decompiler, major performance optimizations, and dozens of bugfixes and minor improvements. Thanks to everyone who contributed to this release!
Release highlights:
- An extensible plugin system, allowing third parties to modify decompiled code without modifying the decompiler itself
- The addition of a prototype Kotlin decompiler
- Improvements around variable handling
- Large amounts of fixes to generics handling
- Siginifcant improvements to decompiler speed and memory usage
NOTE
This release contains two different jars. The "regular" jar, with no classifier, contains both the main decompiler and the three bundled plugins. The "slim" jar, with the "-slim" classifier, contains only the main decompiler itself. If confused, just get the regular jar as usual.
The full changelog is as follows:
Click here to expand the full changelog
- Added plugin API
- Added prototype Kotlin decompiler
- Added support for using MethodParameters attribute when there is no LVT
- Added text token API
- Added clashing names analysis
- Added support for 'Type[]::new' (Thanks, coehlrich!)
- Added support for variable inlining with pattern matching instanceof (Thanks, coehlrich!)
- Added more descriptive names for options
- Added support to hide spurious fields in records if they are already record components
- Added space between operators (e.g. 'while(...)' -> 'while (...)')
- Improved help message
- Improved identification of if-pattern matches
- Improved standalone '++i' by changing to the more idomatic 'i++' (Thanks, TheKodeTode!)
- Improved some cases of variables not getting inlined
- Significantly improved generics handling
- Moved variable renaming to a separate plugin
- Fixed a crash with a for loop over a static iterator method
- Fixed "Invalid constant type" issue
- Fixed try-with-resources processor creating illegal code with custom exception catching
- Fixed concurrent modification exception with certain jars
- Fixed generation of casts to type ""
- Fixed some cases of fields not getting inlined into usage sites
- Fixed labels pointing to blocks that don't exist
- Fixed object casts to boolean type
- Fixed cases of "Could not properly define all variable types" errors
- Fixed for unrepresentable types
- Fixed casts on null types
- Fixed rare crash with 'longType++'
- Fixed some multithreading issues
- Fixed improper nested annotation formatting
- Fixed casting of arrays with different dimensions
- Fixed lambdas losing generics information
- Fixed bug with for loop generation not respecting final variables (Thanks, coehlrich!)
- Fixed decompiler not considering lambdas when searching for local class placement (Thanks, MiniDigger!)
- Fixed fields being inlined too eagerly
- Fixed incorrect finally block parsing creating invalid code
- Fixed string concat with chars becoming ints
- Fixed imports to anonymous classes
- Fixed for loop being created when incremented by an unknown value
- Fixed bug where unused casts of invocations would get removed
- Fixed boxing being removed for top-level expressions
- Fixed Java 21 switch on enum
- Fixed Java 21 inner classes
- Optimized object allocation
- Tons of smaller fixes not mentioned here
Please report any issues to https://github.com/Vineflower/vineflower/issues!