Recaf icon indicating copy to clipboard operation
Recaf copied to clipboard

Partial Recompilation

Open Amejonah1200 opened this issue 2 years ago • 0 comments

<insert first idea draft here>

Potential Problems with this approach:

  1. Decompiler API Requirement & Challenges:
    • To enable this feature, the decompiler must have an API for obtaining an Abstract Syntax Tree (AST) from input code.
    • Not all decompilers readily support obtaining the AST, potentially necessitating forking of the decompiler codebase.
    • Implementing this feature across different decompilers would require creating abstractions, which can be complex.
  2. Alignment Issue:
    • Even if partial recompilation is achieved, it works effectively only for the initial pass.
    • Editing decompiled code can lead to misalignment between the AST and the edited code.
  3. Generic Code Handling:
    • A generic code handling system is necessary to support editable code, addressing the issue of code alignment after user edits.
  4. Obfuscation Challenge:
    • The challenge lies in handling obfuscated code, as most Java code parsers expect valid Java source code.
    • Some parsers, like JavaParser (2x/3x), hard fail in cases involving obfuscation, whereas OpenRewrite (4x) can provide partial AST from obfuscated code in certain cases.
  5. Refactoring Requirements:
    • Implementing this feature would necessitate significant refactoring in terms of managing decompilation, displaying decompiled code, handling syntax styling, and context analysis.
  6. Edge Cases and Abuse Considerations:
    • The feature is subject to potential edge cases, particularly concerning obfuscation.
    • Careful consideration is needed to prevent misuse and abuse of this approach to display data.

The initial feature request would involve significant refactoring in four key areas:

  1. Decompilation Management: Restructuring how decompilation is handled.
  2. Display of Decompiled Code: Adapting code display methods.
  3. Syntax Styling: Updating the approach to syntax styling.
  4. Context Analysis: Enhancing the system's context analysis capabilities.

A new idea is being proposed:

Action: Right-click on a method to access the "edit method separately" option. Functionality: Opens a new window/tab with the following features:

  • Handling of Inner Classes, Fields, and Methods:
    • Obfuscated fields are replaced with fieldX aliases, and these aliases cannot be changed.
    • Inner classes are mocked, and if they have illegal names, aliases are provided.
    • Other methods, including lambdas, are mocked.
    • If they have illegal names, aliases are used.
    • Comments are included for reference.
  • Method Body Editing:
    • The method itself is presented in a text field, allowing users to edit and save the method body.
  • Additional Features (Nice to Have):
    • Method and Parameter Renaming: Consider allowing users to rename method names and parameter names.
    • Changing Types: Explore the possibility of changing data types, potentially using a miniature JASM field.

Amejonah1200 avatar Sep 24 '23 12:09 Amejonah1200