Package org.jrd.backend.decompiling
Class PluginManager
- java.lang.Object
-
- org.jrd.backend.decompiling.PluginManager
-
public class PluginManager extends java.lang.ObjectExecutes manages external decompiler wrapper plugins. Wrapper plugins are stored as .java files along with .json file containing classname, wrapper url and dependencies url. When user calls decompile method with decompiler name and bytecode, wrapper plugin gets compiled and executed.
-
-
Field Summary
Fields Modifier and Type Field Description (package private) com.google.gson.Gsongsonstatic java.util.regex.PatternLAMBDA_FORMstatic java.lang.StringUNDECOMPILABLE_LAMBDAprivate java.util.List<DecompilerWrapperInformation>wrappers
-
Constructor Summary
Constructors Constructor Description PluginManager()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private intcompileWrapper(DecompilerWrapperInformation wrapper, java.io.ByteArrayOutputStream errStream)static voidcreateUserPluginDir()DecompilerWrapperInformationcreateWrapper()java.lang.Stringdecompile(DecompilerWrapperInformation wrapper, java.lang.String name, byte[] bytecode, java.lang.String[] options, VmInfo vmInfo, VmManager vmManager)voiddeleteWrapper(DecompilerWrapperInformation wrapperInformation)static java.lang.StringflipWrapperExtension(java.lang.String filePath)java.util.List<DecompilerWrapperInformation>getWrappers()booleanhaveCompiler(DecompilerWrapperInformation wrapper)private voidInitializeWrapper(DecompilerWrapperInformation wrapper)Compiles wrapper plugin, loads it into JVM and stores it for later.private booleanisDecompilableInnerClass(java.lang.String baseClass, java.lang.String currentClass)private voidloadConfig(java.io.File file)Loads information decompiler json file into ListWrapper. voidloadConfigs()Searches plugin configuration locations and calls loadConfig(file) on files.voidreplace(DecompilerWrapperInformation oldWrapper, DecompilerWrapperInformation newWrapper)voidsaveWrapper(DecompilerWrapperInformation wrapper)voidsetLocationForNewWrapper(DecompilerWrapperInformation wrapperInformation)private java.lang.StringURLListToCSV(java.util.List<ExpandableUrl> list, java.lang.String delimeter)Converts list of URLs to CSV String
example: (list){URL1,URL2,URL3} -> (String)URL1:URL2:URL3java.lang.StringvalidatePlugin(DecompilerWrapperInformation plugin)Validating the @param plugin using compilation
-
-
-
Field Detail
-
wrappers
private java.util.List<DecompilerWrapperInformation> wrappers
-
gson
com.google.gson.Gson gson
-
UNDECOMPILABLE_LAMBDA
public static final java.lang.String UNDECOMPILABLE_LAMBDA
- See Also:
- Constant Field Values
-
LAMBDA_FORM
public static final java.util.regex.Pattern LAMBDA_FORM
-
-
Method Detail
-
getWrappers
public java.util.List<DecompilerWrapperInformation> getWrappers()
-
loadConfigs
public void loadConfigs()
Searches plugin configuration locations and calls loadConfig(file) on files.
-
loadConfig
private void loadConfig(java.io.File file)
Loads information decompiler json file into ListWrapper.
-
isDecompilableInnerClass
private boolean isDecompilableInnerClass(java.lang.String baseClass, java.lang.String currentClass)
-
decompile
public java.lang.String decompile(DecompilerWrapperInformation wrapper, java.lang.String name, byte[] bytecode, java.lang.String[] options, VmInfo vmInfo, VmManager vmManager) throws java.lang.Exception
- Parameters:
wrapper- decompiler used for decompilingname- optional name for decompielrs supporting inner classesbytecode- bytecode to be decompiledoptions- decompile optionsvmInfo- otional vminfo to find inner classesvmManager- otional vmmanager to find inner classes- Returns:
- Decompiled bytecode or exception String
- Throws:
java.lang.Exception- exception String
-
haveCompiler
public boolean haveCompiler(DecompilerWrapperInformation wrapper) throws java.lang.Exception
- Throws:
java.lang.Exception
-
InitializeWrapper
private void InitializeWrapper(DecompilerWrapperInformation wrapper)
Compiles wrapper plugin, loads it into JVM and stores it for later.
-
replace
public void replace(DecompilerWrapperInformation oldWrapper, DecompilerWrapperInformation newWrapper) throws java.io.IOException
- Throws:
java.io.IOException
-
deleteWrapper
public void deleteWrapper(DecompilerWrapperInformation wrapperInformation)
-
setLocationForNewWrapper
public void setLocationForNewWrapper(DecompilerWrapperInformation wrapperInformation)
-
compileWrapper
private int compileWrapper(DecompilerWrapperInformation wrapper, java.io.ByteArrayOutputStream errStream)
-
validatePlugin
public java.lang.String validatePlugin(DecompilerWrapperInformation plugin)
Validating the @param plugin using compilation- Parameters:
plugin- - plugin to validate- Returns:
- error message or null
-
createWrapper
public DecompilerWrapperInformation createWrapper()
-
saveWrapper
public void saveWrapper(DecompilerWrapperInformation wrapper) throws java.io.IOException
- Throws:
java.io.IOException
-
createUserPluginDir
public static void createUserPluginDir()
-
URLListToCSV
private java.lang.String URLListToCSV(java.util.List<ExpandableUrl> list, java.lang.String delimeter)
Converts list of URLs to CSV String
example: (list){URL1,URL2,URL3} -> (String)URL1:URL2:URL3
-
flipWrapperExtension
public static java.lang.String flipWrapperExtension(java.lang.String filePath)
-
-