Package org.jrd.backend.decompiling
Class PluginManager
- java.lang.Object
-
- org.jrd.backend.decompiling.PluginManager
-
public class PluginManager extends java.lang.Object
Executes 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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
PluginManager.BundledCompilerStatus
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
ARRAY_FORM
(package private) com.google.gson.Gson
gson
static java.util.regex.Pattern
LAMBDA_FORM
static java.lang.String
UNDECOMPILABLE_LAMBDA
private java.util.List<DecompilerWrapper>
wrappers
-
Constructor Summary
Constructors Constructor Description PluginManager()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private void
addAndInitDepndenceClass(VmInfo vmInfo, VmManager vmManager, java.util.Map<java.lang.String,byte[]> otherClasses, java.lang.String clazz, java.util.Optional<java.lang.String> classloader)
void
addWrapper(DecompilerWrapper wrapper)
private int
compileWrapper(DecompilerWrapper wrapper, java.io.ByteArrayOutputStream errStream)
DecompilerWrapper
createWrapper()
java.lang.String
decompile(DecompilerWrapper wrapper, java.lang.String name, byte[] bytecode, java.lang.String[] options, VmInfo vmInfo, VmManager vmManager, java.util.Optional<java.lang.String> classloader)
void
deleteWrapper(DecompilerWrapper wrapper)
PluginManager.BundledCompilerStatus
getBundledCompilerStatus(DecompilerWrapper decompiler)
java.util.List<DecompilerWrapper>
getWrappers()
boolean
hasBundledCompiler(DecompilerWrapper wrapper)
void
initializeWrapper(DecompilerWrapper wrapper)
Compiles wrapper plugin, loads it into JVM and stores it for later.static boolean
isArrayForm(java.lang.String s)
static boolean
isLambdaForm(java.lang.String s)
static boolean
isUndecompilableLambda(java.lang.String s)
private void
loadConfig(java.io.File file)
Loads information decompiler json file into ListWrapper. void
loadConfigs()
Searches plugin configuration locations and calls loadConfig(file) on files.private void
loadConfigsFromLocation(java.lang.String location)
void
replace(DecompilerWrapper oldWrapper, DecompilerWrapper newWrapper)
void
saveWrapper(DecompilerWrapper wrapper)
void
setLocationForNewWrapper(DecompilerWrapper wrapper)
private void
sortWrappers()
private static java.lang.String
urlListToCsv(java.util.List<ExpandableUrl> list, java.lang.String delimiter)
Converts list of URLs to CSV String
example: (list){URL1,URL2,URL3} -> (String)URL1:URL2:URL3java.lang.String
validatePlugin(DecompilerWrapper plugin)
Validating the @param plugin using compilation
-
-
-
Field Detail
-
wrappers
private java.util.List<DecompilerWrapper> wrappers
-
gson
com.google.gson.Gson gson
-
ARRAY_FORM
public static final java.lang.String ARRAY_FORM
- See Also:
- Constant Field Values
-
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<DecompilerWrapper> getWrappers()
-
isArrayForm
public static boolean isArrayForm(java.lang.String s)
-
isUndecompilableLambda
public static boolean isUndecompilableLambda(java.lang.String s)
-
isLambdaForm
public static boolean isLambdaForm(java.lang.String s)
-
loadConfigs
public void loadConfigs()
Searches plugin configuration locations and calls loadConfig(file) on files.
-
loadConfigsFromLocation
private void loadConfigsFromLocation(java.lang.String location)
-
loadConfig
private void loadConfig(java.io.File file)
Loads information decompiler json file into ListWrapper.
-
decompile
public java.lang.String decompile(DecompilerWrapper wrapper, java.lang.String name, byte[] bytecode, java.lang.String[] options, VmInfo vmInfo, VmManager vmManager, java.util.Optional<java.lang.String> classloader) throws java.lang.Exception
- Parameters:
wrapper
- decompiler used for decompilingname
- optional name for decompilers supporting inner classesbytecode
- bytecode to be decompiledoptions
- decompile optionsvmInfo
- optional vmInfo to find inner classesvmManager
- optional vmManager to find inner classes- Returns:
- Decompiled bytecode or exception String
- Throws:
java.lang.Exception
- the exception String
-
addAndInitDepndenceClass
private void addAndInitDepndenceClass(VmInfo vmInfo, VmManager vmManager, java.util.Map<java.lang.String,byte[]> otherClasses, java.lang.String clazz, java.util.Optional<java.lang.String> classloader)
-
getBundledCompilerStatus
public PluginManager.BundledCompilerStatus getBundledCompilerStatus(DecompilerWrapper decompiler)
-
hasBundledCompiler
public boolean hasBundledCompiler(DecompilerWrapper wrapper)
-
initializeWrapper
public void initializeWrapper(DecompilerWrapper wrapper)
Compiles wrapper plugin, loads it into JVM and stores it for later.
-
replace
public void replace(DecompilerWrapper oldWrapper, DecompilerWrapper newWrapper) throws java.io.IOException
- Throws:
java.io.IOException
-
deleteWrapper
public void deleteWrapper(DecompilerWrapper wrapper)
-
setLocationForNewWrapper
public void setLocationForNewWrapper(DecompilerWrapper wrapper)
-
compileWrapper
private int compileWrapper(DecompilerWrapper wrapper, java.io.ByteArrayOutputStream errStream)
-
validatePlugin
public java.lang.String validatePlugin(DecompilerWrapper plugin)
Validating the @param plugin using compilation- Parameters:
plugin
- - plugin to validate- Returns:
- error message or null
-
createWrapper
public DecompilerWrapper createWrapper()
-
saveWrapper
public void saveWrapper(DecompilerWrapper wrapper) throws java.io.IOException
- Throws:
java.io.IOException
-
sortWrappers
private void sortWrappers()
-
urlListToCsv
private static java.lang.String urlListToCsv(java.util.List<ExpandableUrl> list, java.lang.String delimiter)
Converts list of URLs to CSV String
example: (list){URL1,URL2,URL3} -> (String)URL1:URL2:URL3
-
addWrapper
public void addWrapper(DecompilerWrapper wrapper)
-
-