Package org.plumelib.reflection
Class Signatures
java.lang.Object
org.plumelib.reflection.Signatures
Java specifies 6 major
string formats to represent a type. This class contains static methods to test strings,
access their parts, and convert among the formats.
The class is not yet exhaustive; let the maintainers know if it lacks something you need.
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
A representation of an array: A pair of class name (a binary name or primitive) and the number of array dimensions. -
Method Summary
Modifier and TypeMethodDescriptionstatic @BinaryName String
addPackage
(@Nullable @DotSeparatedIdentifiers String packagename, @BinaryName String classname) Given a package name and a class name, combine them to form a qualified class name.static String
arglistFromJvm
(String arglist) Convert an argument list from JVML format to Java format.static String
arglistToJvm
(String arglist) Convert a fully-qualified argument list from Java format to JVML format.static @ClassGetName String
binaryNameToClassGetName
(@BinaryName String bn) Convert from a BinaryName to the format ofClass.getName()
.static @FieldDescriptor String
binaryNameToFieldDescriptor
(@FqBinaryName String typename) Convert a binary name to a field descriptor.static @FullyQualifiedName String
binaryNameToFullyQualified
(@BinaryName String binaryName) Converts a binary name to a fully-qualified name.static @BinaryName String
classfilenameToBaseName
(String classfilename) Given a filename ending with ".class", return the simple (unqualified) binary name of the class.static @BinaryName String
classfilenameToBinaryName
(String classfilename) Given a filename ending with ".class", return the binary name of the class.static @BinaryName String
classGetNameToBinaryName
(@ClassGetName String typename) Convert a name in Class.getName format to a binary name.static @BinaryName String
fieldDescriptorToBinaryName
(@FieldDescriptor String typename) Convert a field descriptor to a binary name.static @ClassGetName String
fieldDescriptorToClassGetName
(@FieldDescriptor String fd) Convert from a FieldDescriptor to the format ofClass.getName()
.static @FullyQualifiedName String
fieldDescriptorToFullyQualified
(@FieldDescriptor String typename) Convert a field descriptor to a fully-qualified name.static @ClassGetName String
getArrayElementType
(@FqBinaryName String fqBinaryName) Returns the element type for the given type name, which results from removing all the array brackets.static @BinaryName String
internalFormToBinaryName
(@InternalForm String internalForm) Given a class name in internal form, return it in as a binary name.static @ClassGetName String
internalFormToClassGetName
(@InternalForm String internalForm) Given a class name in internal form, return it in ClassGetName form.static @FullyQualifiedName String
internalFormToFullyQualified
(@InternalForm String internalForm) Given a class name in internal form, return it in as a fully-qualified name.static boolean
Returns true if the argument has the format of an ArrayWithoutPackage.static boolean
Returns true if the argument has the format of a BinaryName.static boolean
Returns true if the argument has the format of a BinaryNameOrPrimitiveType.static boolean
Returns true if the argument has the format of a BinaryNameWithoutPackage.static boolean
Returns true if the argument has the format of a ClassGetName.static boolean
Returns true if the argument has the format of a ClassGetSimpleName.static boolean
Returns true if the argument has the format of a DotSeparatedIdentifiers.static boolean
Returns true if the argument has the format of a DotSeparatedIdentifiersOrPrimitiveType.static boolean
Returns true if the argument has the format of a FieldDescriptor.static boolean
Returns true if the argument has the format of a FieldDescriptorForPrimitive.static boolean
Returns true if the argument has the format of a FieldDescriptorWithoutPackage.static boolean
Returns true if the argument has the format of a FqBinaryName.static boolean
Returns true if the argument has the format of a FullyQualifiedName.static boolean
Returns true if the argument has the format of a Identifier.static boolean
Returns true if the argument has the format of a IdentifierOrPrimitiveType.static boolean
Returns true if the argument has the format of a InternalForm.static boolean
Returns true if the argument has the format of a PrimitiveType.static @Nullable @FieldDescriptor String
methodDescriptorToReturnType
(@MethodDescriptor String methodDescriptor) Returns the return type of the given method descriptor, or null if the method is void.static @FieldDescriptor String
primitiveTypeNameToFieldDescriptor
(@PrimitiveType String primitiveName) Convert a primitive Java type name (e.g., "int", "double", etc.) to a field descriptor (e.g., "I", "D", etc.).static @BinaryName String[]
splitJavaArglist
(String javaArglist) Split a fully-qualified argument list from Java format into an array of Java-format types.splitJvmArglist
(String jvmArglist) Split an argument list from JVML format into an array of JVML format types.
-
Method Details
-
getArrayElementType
Returns the element type for the given type name, which results from removing all the array brackets.- Parameters:
fqBinaryName
- "a fully-qualified binary name" (@FqBinaryNome
)- Returns:
- the base element type of the argument, with all array brackets stripped
-
classfilenameToBinaryName
Given a filename ending with ".class", return the binary name of the class.- Parameters:
classfilename
- the name of a classfile, relative to a directory on the CLASSPATH- Returns:
- the basename of the classfile
-
classfilenameToBaseName
Given a filename ending with ".class", return the simple (unqualified) binary name of the class.- Parameters:
classfilename
- the name of a classfile- Returns:
- the basename of the classfile
-
addPackage
public static @BinaryName String addPackage(@Nullable @DotSeparatedIdentifiers String packagename, @BinaryName String classname) Given a package name and a class name, combine them to form a qualified class name.- Parameters:
packagename
- the package nameclassname
- the class name- Returns:
- the qualified class name
-
isArrayWithoutPackage
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.ArrayWithoutPackage.class) public static boolean isArrayWithoutPackage(String s) Returns true if the argument has the format of an ArrayWithoutPackage. The type it refers to might or might not exist.- Parameters:
s
- a string- Returns:
- true if the string is a @ArrayWithoutPackage
-
isBinaryName
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.BinaryName.class) public static boolean isBinaryName(String s) Returns true if the argument has the format of a BinaryName. The type it refers to might or might not exist.- Parameters:
s
- a string- Returns:
- true if the string is a @BinaryName
-
isBinaryNameWithoutPackage
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.BinaryNameWithoutPackage.class) public static boolean isBinaryNameWithoutPackage(String s) Returns true if the argument has the format of a BinaryNameWithoutPackage. The type it refers to might or might not exist.- Parameters:
s
- a string- Returns:
- true if the string is a @BinaryNameWithoutPackage
-
isBinaryNameOrPrimitiveType
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.BinaryNameOrPrimitiveType.class) public static boolean isBinaryNameOrPrimitiveType(String s) Returns true if the argument has the format of a BinaryNameOrPrimitiveType. The type it refers to might or might not exist.- Parameters:
s
- a string- Returns:
- true if the string is a @BinaryNameOrPrimitiveType
-
isClassGetName
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.ClassGetName.class) public static boolean isClassGetName(String s) Returns true if the argument has the format of a ClassGetName. The type it refers to might or might not exist.- Parameters:
s
- a string- Returns:
- true if the string is a @ClassGetName
-
isClassGetSimpleName
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.ClassGetSimpleName.class) public static boolean isClassGetSimpleName(String s) Returns true if the argument has the format of a ClassGetSimpleName. The type it refers to might or might not exist.- Parameters:
s
- a string- Returns:
- true if the string is a @ClassGetSimpleName
-
isDotSeparatedIdentifiers
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.DotSeparatedIdentifiers.class) public static boolean isDotSeparatedIdentifiers(String s) Returns true if the argument has the format of a DotSeparatedIdentifiers. The package or type it refers to might or might not exist.- Parameters:
s
- a string- Returns:
- true if the string is a @DotSeparatedIdentifiers
-
isDotSeparatedIdentifiersOrPrimitiveType
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.DotSeparatedIdentifiersOrPrimitiveType.class) public static boolean isDotSeparatedIdentifiersOrPrimitiveType(String s) Returns true if the argument has the format of a DotSeparatedIdentifiersOrPrimitiveType. The package or type it refers to might or might not exist.- Parameters:
s
- a string- Returns:
- true if the string is a @DotSeparatedIdentifiersOrPrimitiveType
-
isFieldDescriptor
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.FieldDescriptor.class) public static boolean isFieldDescriptor(String s) Returns true if the argument has the format of a FieldDescriptor. The type it refers to might or might not exist.- Parameters:
s
- a string- Returns:
- true if the string is a @FieldDescriptor
-
isFieldDescriptorWithoutPackage
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.FieldDescriptorWithoutPackage.class) public static boolean isFieldDescriptorWithoutPackage(String s) Returns true if the argument has the format of a FieldDescriptorWithoutPackage. The type it refers to might or might not exist.- Parameters:
s
- a string- Returns:
- true if the string is a @FieldDescriptorWithoutPackage
-
isFieldDescriptorForPrimitive
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.FieldDescriptorForPrimitive.class) public static boolean isFieldDescriptorForPrimitive(String s) Returns true if the argument has the format of a FieldDescriptorForPrimitive.- Parameters:
s
- a string- Returns:
- true if the string is a @FieldDescriptorForPrimitive
-
isFqBinaryName
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.FqBinaryName.class) public static boolean isFqBinaryName(String s) Returns true if the argument has the format of a FqBinaryName. The type it refers to might or might not exist.- Parameters:
s
- a string- Returns:
- true if the string is a @FqBinaryName
-
isFullyQualifiedName
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.FullyQualifiedName.class) public static boolean isFullyQualifiedName(String s) Returns true if the argument has the format of a FullyQualifiedName. The type it refers to might or might not exist.- Parameters:
s
- a string- Returns:
- true if the string is a @FullyQualifiedName
-
isIdentifier
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.Identifier.class) public static boolean isIdentifier(String s) Returns true if the argument has the format of a Identifier. The type it refers to might or might not exist.- Parameters:
s
- a string- Returns:
- true if the string is a @Identifier
-
isIdentifierOrPrimitiveType
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.IdentifierOrPrimitiveType.class) public static boolean isIdentifierOrPrimitiveType(String s) Returns true if the argument has the format of a IdentifierOrPrimitiveType. The type it refers to might or might not exist.- Parameters:
s
- a string- Returns:
- true if the string is a @IdentifierOrPrimitiveType
-
isInternalForm
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.InternalForm.class) public static boolean isInternalForm(String s) Returns true if the argument has the format of a InternalForm. The type it refers to might or might not exist.- Parameters:
s
- a string- Returns:
- true if the string is a @InternalForm
-
isPrimitiveType
@EnsuresQualifierIf(result=true, expression="#1", qualifier=org.checkerframework.checker.signature.qual.PrimitiveType.class) public static boolean isPrimitiveType(String s) Returns true if the argument has the format of a PrimitiveType.- Parameters:
s
- a string- Returns:
- true if the string is a @PrimitiveType
-
binaryNameToFieldDescriptor
Convert a binary name to a field descriptor. For example, convert "java.lang.Object[]" to "[Ljava/lang/Object;" or "int" to "I" or "pkg.Outer$Inner" to "Lpkg/Outer$Inner;".There are no binary names for primitives or array types. Nonetheless, this method works for them. It converts "java.lang.Object[]" to "[Ljava/lang/Object;" or "int" to "I".
- Parameters:
typename
- name of the type, in fully-qualified binary name format- Returns:
- name of the class, in field descriptor format
-
primitiveTypeNameToFieldDescriptor
public static @FieldDescriptor String primitiveTypeNameToFieldDescriptor(@PrimitiveType String primitiveName) Convert a primitive Java type name (e.g., "int", "double", etc.) to a field descriptor (e.g., "I", "D", etc.).- Parameters:
primitiveName
- name of the type, in Java format- Returns:
- name of the type, in field descriptor format
- Throws:
IllegalArgumentException
- if primitiveName is not a valid primitive type name
-
binaryNameToClassGetName
Convert from a BinaryName to the format ofClass.getName()
.There are no binary names for primitives or array types. Nonetheless, this method works for them. It converts "java.lang.Object[]" to "[Ljava.lang.Object;", and it converts "int" to "int".
- Parameters:
bn
- the binary name to convert- Returns:
- the class name, in Class.getName format
-
binaryNameToFullyQualified
Converts a binary name to a fully-qualified name.- Parameters:
binaryName
- a type in binary name format- Returns:
- a fully-qualified name
-
fieldDescriptorToClassGetName
Convert from a FieldDescriptor to the format ofClass.getName()
.- Parameters:
fd
- the class, in field descriptor format- Returns:
- the class name, in Class.getName format
-
fieldDescriptorToBinaryName
Convert a field descriptor to a binary name. For example, convert "[Ljava/util/Map$Entry;" to "java.lang.Map$Entry[]" or "I" to "int".- Parameters:
typename
- a field descriptor (the name of a type in JVML format)- Returns:
- the corresponding binary name
-
classGetNameToBinaryName
Convert a name in Class.getName format to a binary name. For example, convert "[Ljava/util/Map$Entry;" to "java.lang.Map$Entry[]".- Parameters:
typename
- a name in Class.getName format- Returns:
- the corresponding binary name
-
fieldDescriptorToFullyQualified
public static @FullyQualifiedName String fieldDescriptorToFullyQualified(@FieldDescriptor String typename) Convert a field descriptor to a fully-qualified name. For example, convert "[Ljava/util/Map$Entry;" to "java.util.Map.Entry[]" or "I" to "int".- Parameters:
typename
- a field descriptor (the name of a type in JVML format)- Returns:
- the corresponding fully-qualified name (what you would write in Java source code)
-
internalFormToClassGetName
Given a class name in internal form, return it in ClassGetName form.- Parameters:
internalForm
- a class name in internal form- Returns:
- the class name in ClassGetName form
-
internalFormToBinaryName
Given a class name in internal form, return it in as a binary name.- Parameters:
internalForm
- a class name in internal form- Returns:
- the class name sa a binary name
-
internalFormToFullyQualified
public static @FullyQualifiedName String internalFormToFullyQualified(@InternalForm String internalForm) Given a class name in internal form, return it in as a fully-qualified name.- Parameters:
internalForm
- a type in internal form- Returns:
- a fully-qualified name
-
splitJavaArglist
Split a fully-qualified argument list from Java format into an array of Java-format types. For example, convert "(java.lang.Integer[], int, java.lang.Integer[][])" to ["java.lang.Integer[]", "int", "java.lang.Integer[][]"].- Parameters:
javaArglist
- an argument list, in Java format- Returns:
- argument list, in JVML format
-
arglistToJvm
Convert a fully-qualified argument list from Java format to JVML format. For example, convert "(java.lang.Integer[], int, java.lang.Integer[][])" to "([Ljava/lang/Integer;I[[Ljava/lang/Integer;)".- Parameters:
arglist
- an argument list, in Java format- Returns:
- argument list, in JVML format
-
splitJvmArglist
Split an argument list from JVML format into an array of JVML format types. For example, convert "([Ljava/lang/Integer;I[[Ljava/lang/Integer;)" to ["[Ljava/lang/Integer;", "I", "[[Ljava/lang/Integer;"].- Parameters:
jvmArglist
- an argument list, in JVML format- Returns:
- argument list, in JVML format
-
arglistFromJvm
Convert an argument list from JVML format to Java format. For example, convert "([Ljava/lang/Integer;I[[Ljava/lang/Integer;)" to "(java.lang.Integer[], int, java.lang.Integer[][])".- Parameters:
arglist
- an argument list, in JVML format- Returns:
- argument list, in Java format
-
methodDescriptorToReturnType
public static @Nullable @FieldDescriptor String methodDescriptorToReturnType(@MethodDescriptor String methodDescriptor) Returns the return type of the given method descriptor, or null if the method is void.- Parameters:
methodDescriptor
- a method descriptor- Returns:
- the return type of the given method descriptor, or null if the method is void
-