Class 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.
    • Field Detail

      • 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
    • Constructor Detail

      • PluginManager

        public PluginManager()
    • Method Detail

      • 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 decompiling
        name - optional name for decompilers supporting inner classes
        bytecode - bytecode to be decompiled
        options - decompile options
        vmInfo - optional vmInfo to find inner classes
        vmManager - 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)
      • hasBundledCompiler

        public boolean hasBundledCompiler​(DecompilerWrapper wrapper)
      • initializeWrapper

        public void initializeWrapper​(DecompilerWrapper wrapper)
        Compiles wrapper plugin, loads it into JVM and stores it for later.
      • 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
      • 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