classutil.java

来自「proguard 一个java的混淆器」· Java 代码 · 共 1,103 行 · 第 1/4 页

JAVA
1,103
字号
        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_FINAL) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_FINAL).append(' ');        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_INTERFACE) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_INTERFACE).append(' ');        }        else if ((accessFlags & ClassConstants.INTERNAL_ACC_ABSTRACT) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_ABSTRACT).append(' ');        }        return string.toString();    }    /**     * Converts internal field access flags into an external access description.     * @param accessFlags the field access flags.     * @return the external field access description,     *         e.g. "<code>public volatile </code>".     */    public static String externalFieldAccessFlags(int accessFlags)    {        return externalFieldAccessFlags(accessFlags, "");    }    /**     * Converts internal field access flags into an external access description.     * @param accessFlags the field access flags.     * @param prefix      a prefix that is added to each access modifier.     * @return the external field access description,     *         e.g. "<code>public volatile </code>".     */    public static String externalFieldAccessFlags(int accessFlags, String prefix)    {        if (accessFlags == 0)        {            return EMPTY_STRING;        }        StringBuffer string = new StringBuffer(50);        if ((accessFlags & ClassConstants.INTERNAL_ACC_PUBLIC) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_PUBLIC).append(' ');        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_PRIVATE) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_PRIVATE).append(' ');        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_PROTECTED) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_PROTECTED).append(' ');        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_STATIC) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_STATIC).append(' ');        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_FINAL) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_FINAL).append(' ');        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_VOLATILE) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_VOLATILE).append(' ');        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_TRANSIENT) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_TRANSIENT).append(' ');        }        return string.toString();    }    /**     * Converts internal method access flags into an external access description.     * @param accessFlags the method access flags.     * @return the external method access description,     *                    e.g. "<code>public synchronized </code>".     */    public static String externalMethodAccessFlags(int accessFlags)    {        return externalMethodAccessFlags(accessFlags, "");    }    /**     * Converts internal method access flags into an external access description.     * @param accessFlags the method access flags.     * @param prefix      a prefix that is added to each access modifier.     * @return the external method access description,     *                    e.g. "public synchronized ".     */    public static String externalMethodAccessFlags(int accessFlags, String prefix)    {        if (accessFlags == 0)        {            return EMPTY_STRING;        }        StringBuffer string = new StringBuffer(50);        if ((accessFlags & ClassConstants.INTERNAL_ACC_PUBLIC) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_PUBLIC).append(' ');        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_PRIVATE) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_PRIVATE).append(' ');        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_PROTECTED) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_PROTECTED).append(' ');        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_STATIC) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_STATIC).append(' ');        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_FINAL) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_FINAL).append(' ');        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_SYNCHRONIZED) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_SYNCHRONIZED).append(' ');        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_NATIVE) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_NATIVE).append(' ');        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_ABSTRACT) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_ABSTRACT).append(' ');        }        if ((accessFlags & ClassConstants.INTERNAL_ACC_STRICT) != 0)        {            string.append(prefix).append(ClassConstants.EXTERNAL_ACC_STRICT).append(' ');        }        return string.toString();    }    /**     * Converts an internal method descriptor into 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)    {        return externalType(internalMethodReturnType(internalMethodDescriptor));    }    /**     * 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) ?            externalShortClassName(externalClassName(internalClassName)) :            (externalMethodReturnType(internalMethodDescriptor) +             ' ' +             internalMethodName);    }    /**     * Converts an internal method descriptor into 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();        internalTypeEnumeration.setDescriptor(internalMethodDescriptor);        while (internalTypeEnumeration.hasMoreTypes())        {            externalMethodNameAndArguments.append(externalType(internalTypeEnumeration.nextType()));            if (internalTypeEnumeration.hasMoreTypes())            {                externalMethodNameAndArguments.append(ClassConstants.EXTERNAL_METHOD_ARGUMENTS_SEPARATOR);            }        }        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)    {        String internalPackagePrefix = internalPackagePrefix(internalClassName);        int length = internalPackagePrefix.length();        return length > 0 ?            internalPackagePrefix.substring(0, length - 1) :            "";    }    /**     * Returns the internal package prefix of the given internal class name.     * @param internalClassName the internal class name,     *                          e.g. "<code>java/lang/Object</code>".     * @return the internal package prefix,     *                          e.g. "<code>java/lang/</code>".     */    public static String internalPackagePrefix(String internalClassName)    {        return internalClassName.substring(0, internalClassName.lastIndexOf(ClassConstants.INTERNAL_PACKAGE_SEPARATOR,                                                                            internalClassName.length() - 2) + 1);    }    /**     * 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)    {        String externalPackagePrefix = externalPackagePrefix(externalClassName);        int length = externalPackagePrefix.length();        return length > 0 ?            externalPackagePrefix.substring(0, length - 1) :            "";    }    /**     * Returns the external package prefix of the given external class name.     * @param externalClassName the external class name,     *                          e.g. "<code>java.lang.Object</code>".     * @return the external package prefix,     *                          e.g. "<code>java.lang.</code>".     */    public static String externalPackagePrefix(String externalClassName)    {        return externalClassName.substring(0, externalClassName.lastIndexOf(ClassConstants.EXTERNAL_PACKAGE_SEPARATOR,                                                                            externalClassName.length() - 2) + 1);    }}

⌨️ 快捷键说明

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