📄 classutil.java
字号:
* 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><init></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) + ClassConstants.EXTERNAL_METHOD_ARGUMENTS_OPEN + externalMethodArguments(internalMethodDescriptor) + ClassConstants.EXTERNAL_METHOD_ARGUMENTS_CLOSE; } /** * Converts internal class access flags into an external access description. * @param accessFlags the class access flags. * @return the external class access description, * e.g. "<code>public final </code>". */ public static String externalClassAccessFlags(int accessFlags) { return externalClassAccessFlags(accessFlags, ""); } /** * Converts internal class access flags into an external access description. * @param accessFlags the class access flags. * @param prefix a prefix that is added to each access modifier. * @return the external class access description, * e.g. "<code>public final </code>". */ public static String externalClassAccessFlags(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_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><init></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 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) { 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 + -