Skip to content

nbauma109/transformer-api

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

610 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Transformer API

Dependabot updates Maven Central CodeQL Maven Release Github Release Coverage Status

The Transformer API provides convenient access to different transformers (currently decompilers only) under a unified API. The API is still subject to major changes, but only with a major version bump.

Usage

Currently, this API supports the following decompilers :

  • Fernflower
  • Vineflower (fork of Fernflower)
  • Procyon
  • CFR
  • JD-Core V0 and V1
  • JADX

Decompilers can be accessed either via StandardTransformers.Decompilers.ENGINE_* constants.

An example program decompiling a file using Vineflower (fork of Fernflower) is shown below:

package demo;

import com.heliosdecompiler.transformerapi.StandardTransformers;
import com.heliosdecompiler.transformerapi.common.Loader;

import jd.core.DecompilationResult;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.io.IOUtils;

public class Sample {

    public byte[] load(String internalName) throws IOException {
        InputStream is = this.getClass().getResourceAsStream("/" + internalName + ".class");
        return is == null ? null : IOUtils.toByteArray(is);
    }

    public boolean canLoad(String internalName) {
        return this.getClass().getResource("/" + internalName + ".class") != null;
    }

    
    public static void main(String[] args) {
        Sample sample = new Sample();
        Loader loader = new Loader(sample::canLoad, sample::load);
        Map<String, String> preferences = new HashMap<>();
        try {
            String ff = StandardTransformers.Decompilers.ENGINE_VINEFLOWER;
            DecompilationResult result =
                    StandardTransformers.decompile(
                            loader,
                            "java/lang/String",
                            preferences,
                            ff
                    );
            System.out.println(result.getDecompiledOutput());
        } catch (Exception e) {
            System.err.println(e);
        }
    }
}

Features

  • Agnostic loader utility
  • In-memory decompilation (no temp files)

Updates

This API will be updated as decompilers receive updates, which means fixes reach you faster.

About

Unified Java API for multiple decompilers (Fernflower, Vineflower, Procyon, CFR, JD-Core, JADX)

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

 
 
 

Contributors

Languages

  • Java 100.0%