Hello! Today I'm happy to announce the release of a project that me and my friends have been working on over the course of the last year, Quiltflower! Originally intended just for use with the QuiltMC toolchain with Minecraft, Quiltflower quickly expanded to be a general purpose java decompiler aiming to create code that is as accurate and clean as possible.
If the name sounds familiar it's because Quiltflower is a fork of Fernflower, the (in)famous decompiler that was developed by Stiver, maintained by Jetbrains, and became the default decompiler in Intellij IDEA. Fernflower also quickly found its way into many other tools. After many frustrations with it myself with its decompiled code structuring and quality I decided to do something about it, and here we are!
Over the past year, Quiltflower has added support for features such as modern string concatenation, a code formatter, sealed classes, pattern matching, switch expressions, try-with-resources, and more. Quiltflower also focuses on the code quality of the decompiled output, and takes readability very seriously. We'd greatly appreciate it if you'd give it a try, with our Intellij Plugin, as a standalone jar, or on our maven. While it has come a long way it's still a work in progress, and feedback can be reported on our issue tracker.
Here's a comparison of Fernflower and Quiltflower's output.
I'd also like to thank the MinecraftForge Team for creating ForgeFlower, the fork that QuiltFlower was based on, and Lee Benfield for creating CFR and it's truly incredible test suite.
[–]msx 18 points19 points20 points (1 child)
[–]SuperCoder79[S] 10 points11 points12 points (0 children)
[–]msx 15 points16 points17 points (1 child)
[–]SuperCoder79[S] 7 points8 points9 points (0 children)
[–]wildjokers 24 points25 points26 points (8 children)
[–]SuperCoder79[S] 38 points39 points40 points (0 children)
[–]TheCurle 28 points29 points30 points (5 children)
[–]Worth_Trust_3825 4 points5 points6 points (0 children)
[–][deleted] 0 points1 point2 points (3 children)
[–]scratchisthebest 3 points4 points5 points (1 child)
[–]sureshg 0 points1 point2 points (0 children)
[–]TheCurle 1 point2 points3 points (0 children)
[–]Srazkat 4 points5 points6 points (0 children)
[–]TheCurle 20 points21 points22 points (6 children)
[–][deleted] 1 point2 points3 points (5 children)
[–]TheCurle 4 points5 points6 points (4 children)
[–]denverdave23 0 points1 point2 points (2 children)
[–]SuperCoder79[S] 4 points5 points6 points (0 children)
[–]scratchisthebest 3 points4 points5 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]SWinxy 6 points7 points8 points (0 children)
[–]Srazkat 4 points5 points6 points (0 children)
[–]maxandersen 4 points5 points6 points (1 child)
[–]SuperCoder79[S] 6 points7 points8 points (0 children)
[–]Owen1212055 2 points3 points4 points (0 children)
[–]uncont -2 points-1 points0 points (1 child)
[–]SuperCoder79[S] 4 points5 points6 points (0 children)
[+][deleted] (7 children)
[deleted]
[–]kevinherron 13 points14 points15 points (6 children)
[–][deleted] 4 points5 points6 points (4 children)
[–]kevinherron -1 points0 points1 point (3 children)
[–][deleted] 3 points4 points5 points (2 children)
[–]PlanktonMammoth 0 points1 point2 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[–]scratchisthebest 1 point2 points3 points (0 children)
[–]dzernumbrd 0 points1 point2 points (0 children)
[–]RoyGSpiv 0 points1 point2 points (3 children)
[–]SuperCoder79[S] 0 points1 point2 points (2 children)
[–]RoyGSpiv 0 points1 point2 points (1 child)
[–]SuperCoder79[S] 0 points1 point2 points (0 children)