Skip to content

Quiltflower 1.9.0

Compare
Choose a tag to compare
@jaskarth jaskarth released this 28 Oct 21:48
· 276 commits to master since this release
2124e6e

Quiltflower 1.9.0 brings dozens of bug fixes, new features, improved decompilation, and an improved way to interact with the Quiltflower API.
NOTE: This version requires a minimum of Java 11 to run!

Some highlights include:

  • Improved switch pattern matching support
  • Changed default settings to improve code output by default
  • Fixed the "baby shark" bug (multiple nested infinite loops in a row)
  • Optimized memory, CPU, and disk usage

Please report any issues at https://github.com/QuiltMC/quiltflower/issues.
The full changelog for this version goes as follows:

Click here to expand the full changelog
  • Added support for transitive and static modifiers in module info (Thanks kb1000!)
  • Added improved support for switch pattern matching (Thanks Luna!)
  • Added implementation version to manifest (Thanks nbauma109!)
  • Added some support for constant dynamic resugaring
  • Added lazy loading for classpath jars (Thanks, zml!)
  • Added new option to verify variable merges
  • Added new option to decompile preview features
  • Added support for decompiling out of executables
  • Enabled try loop fix by default
  • Enabled ternary conditions by default
  • Improved API for developer usability (Thanks, zml!)
  • Improved marking of monitorenter and monitorexit opcodes when they aren't resugared properly
  • Improved resugaring of switch expressions over enums
  • Improved default values in switch expressions
  • Improved tracking of assignments in try blocks
  • Improved Pi value parentheses
  • Improved rename entities iteration order to be sequential based on classes seen
  • Improved bytecode to line mappings
  • Improved the experimental try loop fix to extend to try-finally blocks
  • Improved help message when running through the command line (thanks sschr!)
  • Renamed $FF: tags in decompiled code to $QF:
  • Rewrote ternary processing code and made it much more accurate
  • Optimized code for speed and memory usage
  • Optimized file reading and parsing
  • Updated help message
  • Fixed most cases of longstanding issue where multiple nested infinite loops would be created
  • Fixed "invalid constant type" issue with variable merging
  • Fixed many subtle issues with code generation due to improper internal state management
  • Fixed some invalid code generation with assignments in if statements
  • Fixed if pattern matching shadowing already defined variables
  • Fixed do-while loops not being created when they are the last statement inside of an outer loop
  • Fixed finally blocks inside of loops causing a crash
  • Fixed methods and fields not getting renamed by rename entities
  • Fixed bogus var10000 variables showing up in some cases
  • Fixed catch blocks being removed entirely
  • Fixed Object[] not being casted correctly
  • Fixed CME in loop creation
  • Fixed synchronized statements not decompiling correctly when the last statement is a throw
  • Fixed finally blocks in loops causing improper break statements
  • Fixed extra parenthesis around array accesses
  • Fixed extra casts being applied in method calls when not needed
  • Fixed foreach loops being created when the iteration variable is used earlier
  • Fixed improper loop generation when the loop is the first block
  • Fixed returns in loops when breaks make more sense, in loops where it's the first block
  • Fixed finally blocks in synchronized statements causing crashes
  • Fixed assignments becoming improper inside of try blocks
  • Fixed some cases where booleans and ints would merge together
  • Fixed more cases of int x = true;
  • Fixed an infinite loop OOM combo with finally processing
  • Fixed synchronized statements not decompiling correctly when in a loop
  • Fixed arrays being initialized with char values instead of number literals
  • Fixed some cases of switch expressions being created when they shouldn't be
  • Fixed empty newlines at the end of sequence statements
  • Fixed static fields showing up before enum fields
  • Fixed some rare label issues with breaks out of try statements
  • Fixed some extraneous generic casts on assignments
  • Fixed some generic union type casts being improper
  • Fixed rare concurrency issues causing crashes
  • Fixed toString not removed in string concat (thanks, thewindsofwinter!)
  • Fixed incorrect assignment exprent modification for assignments with a condition (Thanks Totty!)
  • Fixed class cast exception when creating a foreach over array with multiple dimensions
  • Fixed NullPointerException when writing some switch on string statements
  • Merged from upstream: Fixed an infinite loop while decompiling obfuscated code
  • Fixed NullPointerException when parsing enum method descriptors
  • Fixed casts not being applied on byte->int coercion
  • Fixed casts not being applied on Object parameters
  • Fixed a few casts with anonymous classes