package org.jboss.windup.decompiler.api; import java.nio.file.Path; import java.util.Collection; import java.util.zip.ZipEntry; import org.jboss.windup.decompiler.util.Filter; /** * Used to decompile Java .class files and archives. * * @author <a href="mailto:ozizka@redhat.com">Ondrej Zizka</a> * @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a> */ public interface Decompiler { /** * Decompiles the given batch of ".class" files. */ void decompileClassFiles(final Collection<ClassDecompileRequest> requests, final DecompilationListener listener); /** * Decompiles the given .class file and creates the specified output source file in the given output dir under appropriate package subdirectories, * like $outputDir/org/jboss/Foo.java. Decompilation may need multiple .class files for one .java file, e.g. for inner classes. * * @param classFilePath the .class file to be decompiled. * @param outputDir The directory where decompiled .java files will be placed. */ DecompilationResult decompileClassFile(Path rootDir, Path classFilePath, Path outputDir) throws DecompilationException; /** * Close all the resources */ void close(); /** * Decompiles all .class files and nested archives in the given archive. * <p> * Nested archives will be decompiled into directories matching the name of the archive, e.g. * <code>foo.ear/bar.jar/src/com/foo/bar/Baz.java</code>. * <p> * Required directories will be created as needed. * * @param archive The archive containing source files and archives. * @param outputDir The directory where decompiled .java files will be placed. * @param listener This is called after each successful decompilation */ DecompilationResult decompileArchive(Path archive, Path outputDir, DecompilationListener listener) throws DecompilationException; /** * Decompiles all .class files and nested archives in the given archive. * <p> * Nested archives will be decompiled into directories matching the name of the archive, e.g. * <code>foo.ear/bar.jar/src/com/foo/bar/Baz.java</code>. * <p> * Required directories will be created as needed. * * @param archive The archive containing source files and archives. * @param outputDir The directory where decompiled .java files will be placed. * @param filter Decides what files from the archive to decompile. * @param listener This is called after each successful decompilation */ DecompilationResult decompileArchive(Path archive, Path outputDir, Filter<ZipEntry> filter, DecompilationListener listener) throws DecompilationException; }