Skip to content

Quiltflower 1.8.0

Compare
Choose a tag to compare
@jaskarth jaskarth released this 05 Apr 16:19
· 665 commits to master since this release
d0cdda0

The changelog for this version is very long, so here are the highlights:

  • Improved the quality and cleanliness of the output
  • Many fixes to generics
  • Many fixes to loops
  • Dozens of bugs and crashes fixed
Click here to expand the full changelog
  • Added ++/-- inlining when possible
  • Added variable renaming when there's multiple variables with the same name
  • Added switch statement brace enclosing when the multiple variables are in different case branches
  • Added switch expression in assert support
  • Added Implementation-Name: Quiltflower to jar manifest (thanks jnp!)
  • Added formatting on complex if-else chains (thanks Earthcomputer!)
  • Added basic switch pattern matching support for preview versions
  • Changed some default options: generic signatures and synthetic members are now hidden by default, pattern matching is enabled, and ternary-in-if is disabled
  • Improved default branch hiding on switches when it's an empty fallthrough
  • Improved generic casts on ternaries
  • Improved generic casts on assigns
  • Improved ternary type inference when one branch is null
  • Improved detection of explicit generic invocations, such as Comparator.<...>comparing()
  • Improved variable merging in loops (improved variable liveness calculation)
  • Improved if-else statement structure to prevent highly nested if-else statements
  • Improved conversion of labeled continues to breaks to produce correct but cleaner code
  • Improved if statements with a single labeled sequence by lifting the label to the if statement, making it clearer what is being jumped to by the label
  • Improved the experimental try loop fix, now works better and doesn't break on random code
  • Improved the IResultSaver API (thanks zml!)
  • Improved pattern matching significantly
  • Improved string concat support, now supports makeConcat as well as makeConcatWithConstants
  • Improved infinite loop with return at the end condensing significantly better
  • Improved labeled break -> continue resugaring
  • Optimized excess memory usage
  • Fixed <unknown> variables in foreach loops
  • Fixed null being cast when it doesn't need to be
  • Fixed constructor invocations having extra parenthesis
  • Fixed switch expressions not having parenthesis around them when they should
  • Fixed instances where variables were cast twice
  • Fixed switch statements in finally blocks causing issues
  • Fixed synchronized statements having a null argument when object is being assigned to null
  • Fixed synchronized statements removing autoboxing
  • Fixed method()[i] += 0; not being properly inlined
  • Fixed copying files to directories not working properly
  • Fixed boxing issues with field initializers
  • Fixed rare crashes with inconsistent idom sequences
  • Fixed continues becoming implicit when they should be explicit
  • Fixed local classes not decompiling breaking entire file
  • Fixed double brace initializers in java 17 placing extra modifiers on the braces
  • Fixed some cases where stack variables created by the dup bytecode family were not simplified
  • Fixed swap based constructor invocations
  • Fixed cases where while loops were improperly created, moving a continue out of the loop
  • Fixed case when there are 2 pops after a jump (thanks Kroppeb!)
  • Fixed expression reordering in array initializes resulting in semantically different code (thanks Kroppeb!)
  • Fixed phantom continue or break at the end of a loop
  • Fixed statement graph ordering being incorrect in certain cases
  • Fixed IndexOutOfBounds in ternary processing
  • Fixed statement graph not discovering all nodes, leading to <unknown> variables
  • Fixed improper loop elimination when the loop was required to make the output correct
  • Fixed generics not casting on super keyword (contravariance)
  • Fixed open file systems not being closed (thanks CoolMineman!)
  • Fixed decompilation error with kotlin when enums (thanks Juuz!)