📄 classutil.java
字号:
} /** * 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><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) + 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><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 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 + -