⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classutil.java

📁 出色的混淆器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    }    /**     * Converts the given external method return type and name and arguments to     * an internal method descriptor.     * @param externalReturnType the external method return type,     *                                       e.g. "boolean".     * @param externalMethodNameAndArguments the external method name and arguments,     *                                       e.g. "<code>myMethod(int,int)</code>".     * @return the internal method descriptor,     *                                       e.g. "(II)Z".     */    public static String internalMethodDescriptor(String externalReturnType,                                                  String externalMethodNameAndArguments)    {        StringBuffer internalMethodDescriptor = new StringBuffer();        internalMethodDescriptor.append(ClassConstants.INTERNAL_METHOD_ARGUMENTS_OPEN);        externalTypeEnumeration.setDescriptor(externalMethodNameAndArguments);        while (externalTypeEnumeration.hasMoreTypes())        {            internalMethodDescriptor.append(internalType(externalTypeEnumeration.nextType()));        }        internalMethodDescriptor.append(ClassConstants.INTERNAL_METHOD_ARGUMENTS_CLOSE);        internalMethodDescriptor.append(internalType(externalReturnType));        return internalMethodDescriptor.toString();    }    /**     * Converts the given external method return type and List of arguments to     * an internal method descriptor.     * @param externalReturnType the external method return type,     *                                       e.g. "boolean".     * @param externalArguments the external method arguments,     *                                       e.g. "<code>{ "int", "int" }</code>".     * @return the internal method descriptor,     *                                       e.g. "(II)Z".     */    public static String internalMethodDescriptor(String externalReturnType,                                                  List   externalArguments)    {        StringBuffer internalMethodDescriptor = new StringBuffer();        internalMethodDescriptor.append(ClassConstants.INTERNAL_METHOD_ARGUMENTS_OPEN);        for (int index = 0; index < externalArguments.size(); index++)        {            internalMethodDescriptor.append(internalType((String)externalArguments.get(index)));        }        internalMethodDescriptor.append(ClassConstants.INTERNAL_METHOD_ARGUMENTS_CLOSE);        internalMethodDescriptor.append(internalType(externalReturnType));        return internalMethodDescriptor.toString();    }    /**     * Converts an internal field description to an external full field description.     * @param accessFlags             the access flags of the field.     * @param fieldName               the field name,     *                                e.g. "<code>myField</code>".     * @param internalFieldDescriptor the internal field descriptor,     *                                e.g. "<code>Z</code>".     * @return the external full field description,     *                                e.g. "<code>public boolean myField</code>".     */    public static String externalFullFieldDescription(int    accessFlags,                                                      String fieldName,                                                      String internalFieldDescriptor)    {        return externalFieldAccessFlags(accessFlags) +               externalType(internalFieldDescriptor) +               " " +               fieldName;    }    /**     * Converts an internal method description to an external full method description.     * @param internalClassName        the internal name of the class of the method,     *                                 e.g. "<code>mypackage/MyClass</code>".     * @param accessFlags              the access flags of the method.     * @param internalMethodName       the internal method name,     *                                 e.g. "<code>myMethod</code>" or     *                                      "<code>&lt;init&gt;</code>".     * @param internalMethodDescriptor the internal method descriptor,     *                                 e.g. "<code>(II)Z</code>".     * @return the external full method description,     *                                 e.g. "<code>public boolean myMethod(int,int)</code>" or     *                                      "<code>public MyClass(int,int)</code>".     */    public static String externalFullMethodDescription(String internalClassName,                                                       int    accessFlags,                                                       String internalMethodName,                                                       String internalMethodDescriptor)    {        return externalMethodAccessFlags(accessFlags) +               externalMethodReturnTypeAndName(internalClassName,                                               internalMethodName,                                               internalMethodDescriptor) +               externalMethodArguments(internalMethodDescriptor);    }    /**     * Converts internal class access flags to an external access description.     * @param accessFlags the class access flags.     * @return the external class access description,     *                    e.g. "public final".     */    public static String externalClassAccessFlags(int accessFlags)    {        if (accessFlags == 0)        {            return EMPTY_STRING;        }        StringBuffer string = new StringBuffer(50);        if ((accessFlags & ClassConstants.INTERNAL_ACC_PUBLIC) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_PUBLIC).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_FINAL) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_FINAL).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_INTERFACE) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_INTERFACE).append(" ");        }        else        {            if ((accessFlags & ClassConstants.INTERNAL_ACC_ABSTRACT) != 0)            {                string.append(ClassConstants.EXTERNAL_ACC_ABSTRACT).append(" ");            }        }        return string.toString();    }    /**     * Converts internal field access flags to an external access description.     * @param accessFlags the field access flags.     * @return the external field access description,     *                    e.g. "public volatile".     */    public static String externalFieldAccessFlags(int accessFlags)    {        if (accessFlags == 0)        {            return EMPTY_STRING;        }        StringBuffer string = new StringBuffer(50);        if ((accessFlags & ClassConstants.INTERNAL_ACC_PUBLIC) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_PUBLIC).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_PRIVATE) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_PRIVATE).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_PROTECTED) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_PROTECTED).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_STATIC) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_STATIC).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_FINAL) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_FINAL).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_VOLATILE) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_VOLATILE).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_TRANSIENT) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_TRANSIENT).append(" ");        }        return string.toString();    }    /**     * Converts internal method access flags to an external access description.     * @param accessFlags the method access flags.     * @return the external method access description,     *                    e.g. "public synchronized".     */    public static String externalMethodAccessFlags(int accessFlags)    {        if (accessFlags == 0)        {            return EMPTY_STRING;        }        StringBuffer string = new StringBuffer(50);        if ((accessFlags & ClassConstants.INTERNAL_ACC_PUBLIC) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_PUBLIC).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_PRIVATE) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_PRIVATE).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_PROTECTED) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_PROTECTED).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_STATIC) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_STATIC).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_FINAL) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_FINAL).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_SYNCHRONIZED) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_SYNCHRONIZED).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_NATIVE) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_NATIVE).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_ABSTRACT) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_ABSTRACT).append(" ");        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_STRICT) != 0)        {            string.append(ClassConstants.EXTERNAL_ACC_STRICT).append(" ");        }        return string.toString();    }    /**     * Converts an internal method descriptor to an external method return type.     * @param internalMethodDescriptor the internal method descriptor,     *                                 e.g. "<code>(II)Z</code>".     * @return the external method return type,     *                                 e.g. "<code>boolean</code>".     */    public static String externalMethodReturnType(String internalMethodDescriptor)    {        internalTypeEnumeration.setDescriptor(internalMethodDescriptor);        return externalType(internalTypeEnumeration.returnType());    }    /**     * Converts an internal class name, method name, and method descriptor to     * an external method return type and name.     * @param internalClassName        the internal name of the class of the method,     *                                 e.g. "<code>mypackage/MyClass</code>".     * @param internalMethodName       the internal method name,     *                                 e.g. "<code>myMethod</code>" or     *                                      "<code>&lt;init&gt;</code>".     * @param internalMethodDescriptor the internal method descriptor,     *                                 e.g. "<code>(II)Z</code>".     * @return the external method return type and name,     *                                 e.g. "<code>boolean myMethod</code>" or     *                                      "<code>MyClass</code>".     */    private static String externalMethodReturnTypeAndName(String internalClassName,                                                          String internalMethodName,                                                          String internalMethodDescriptor)    {        return internalMethodName.equals(ClassConstants.INTERNAL_METHOD_NAME_INIT) ?                    (ClassUtil.externalShortClassName(                     ClassUtil.externalClassName(internalClassName))) :                    (ClassUtil.externalMethodReturnType(internalMethodDescriptor) +                     " " +                     internalMethodName);    }    /**     * Converts an internal method descriptor to an external method argument     * description.     * @param internalMethodDescriptor the internal method descriptor,     *                                 e.g. "<code>(II)Z</code>".     * @return the external method argument description,     *                                 e.g. "<code>(int,int)</code>".     */    public static String externalMethodArguments(String internalMethodDescriptor)    {        StringBuffer externalMethodNameAndArguments = new StringBuffer();        externalMethodNameAndArguments.append(ClassConstants.EXTERNAL_METHOD_ARGUMENTS_OPEN);        internalTypeEnumeration.setDescriptor(internalMethodDescriptor);        while (internalTypeEnumeration.hasMoreTypes())        {            externalMethodNameAndArguments.append(externalType(internalTypeEnumeration.nextType()));            if (internalTypeEnumeration.hasMoreTypes())            {                externalMethodNameAndArguments.append(ClassConstants.EXTERNAL_METHOD_ARGUMENTS_SEPARATOR);            }        }        externalMethodNameAndArguments.append(ClassConstants.EXTERNAL_METHOD_ARGUMENTS_CLOSE);        return externalMethodNameAndArguments.toString();    }    /**     * Returns the internal package name of the given internal class name.     * @param internalClassName the internal class name,     *                          e.g. "<code>java/lang/Object</code>".     * @return the internal package name,     *                          e.g. "<code>java/lang</code>".     */    public static String internalPackageName(String internalClassName)    {        int lastSeparatorIndex = internalClassName.lastIndexOf(ClassConstants.INTERNAL_PACKAGE_SEPARATOR);        if (lastSeparatorIndex < 0)        {            lastSeparatorIndex = 0;        }        return internalClassName.substring(0, lastSeparatorIndex);    }    /**     * Returns the external package name of the given external class name.     * @param externalClassName the external class name,     *                          e.g. "<code>java.lang.Object</code>".     * @return the external package name,     *                          e.g. "<code>java.lang</code>".     */    public static String externalPackageName(String externalClassName)    {        int lastSeparatorIndex = externalClassName.lastIndexOf(ClassConstants.EXTERNAL_PACKAGE_SEPARATOR);        if (lastSeparatorIndex < 0)        {            lastSeparatorIndex = 0;        }        return externalClassName.substring(0, lastSeparatorIndex);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -