Package org.plumelib.reflection
Class Signatures
java.lang.Object
org.plumelib.reflection.Signatures
Conversion utilities between Java and JVM string formats, for types and signatures.
Also predicates for testing strings.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class
A representation of an array: A pair of class name and the number of array dimensions. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static Pattern
Matches the "[][][]" at the end of a Java array type.private static final String
The file-system-specific directory separator.private static Pattern
Matches the "[[[" prefix of a field descriptor for an array.A map from field descriptor (sach as "I") to Java primitive type (such as "int").A map from Java primitive type name (such as "int") to field descriptor (such as "I"). -
Constructor Summary
Constructors -
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
fieldDescriptorToBinaryName
(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 @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 a 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 @FieldDescriptor String
primitiveTypeNameToFieldDescriptor
(String primitiveName) Convert a primitive Java type name (e.g., "int", "double", etc.) to a field descriptor (e.g., "I", "D", etc.).
-
Field Details
-
dirSep
The file-system-specific directory separator. -
arrayBracketsPattern
Matches the "[][][]" at the end of a Java array type. -
primitiveToFieldDescriptor
A map from Java primitive type name (such as "int") to field descriptor (such as "I"). -
fieldDescriptorToPrimitive
A map from field descriptor (sach as "I") to Java primitive type (such as "int"). -
fdArrayBracketsPattern
Matches the "[[[" prefix of a field descriptor for an array.
-
-
Constructor Details
-
Signatures
public Signatures()
-
-
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 a 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
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;" or "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/lang/Object;" to "java.lang.Object[]" or "I" to "int".- Parameters:
typename
- name of the type, in JVML format- Returns:
- name of the type, in Java format
-
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
-
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
-
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
-