Class Signatures

java.lang.Object
org.plumelib.reflection.Signatures

public final class Signatures extends Object
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.

  • Method Details

    • getArrayElementType

      public static @ClassGetName String getArrayElementType(@FqBinaryName String fqBinaryName)
      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

      public static @BinaryName String classfilenameToBinaryName(String classfilename)
      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

      public static @BinaryName String classfilenameToBaseName(String classfilename)
      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 name
      classname - 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
    • 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.

      This method has the same semantics as isFullyQualifiedName(java.lang.String), because the syntactic formats are the same (though the interpretations of the strings differ).

      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.

      This method has the same semantics as isFqBinaryName(java.lang.String), because the syntactic formats are the same (though the interpretations of the strings differ).

      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

      public static @FieldDescriptor String binaryNameToFieldDescriptor(@FqBinaryName String typename)
      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

      public static @ClassGetName String binaryNameToClassGetName(@BinaryName String bn)
      Convert from a BinaryName to the format of Class.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

      public static @FullyQualifiedName String binaryNameToFullyQualified(@BinaryName String binaryName)
      Converts a binary name to a fully-qualified name.
      Parameters:
      binaryName - a type in binary name format
      Returns:
      a fully-qualified name
    • fieldDescriptorToClassGetName

      public static @ClassGetName String fieldDescriptorToClassGetName(@FieldDescriptor String fd)
      Convert from a FieldDescriptor to the format of Class.getName().
      Parameters:
      fd - the class, in field descriptor format
      Returns:
      the class name, in Class.getName format
    • fieldDescriptorToBinaryName

      public static @BinaryName String fieldDescriptorToBinaryName(@FieldDescriptor String typename)
      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

      public static @BinaryName String classGetNameToBinaryName(@ClassGetName String typename)
      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

      public static @ClassGetName String internalFormToClassGetName(@InternalForm String internalForm)
      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

      public static @BinaryName String internalFormToBinaryName(@InternalForm String internalForm)
      Given a class name in internal form, return it as a binary name.
      Parameters:
      internalForm - a class name in internal form
      Returns:
      the class name as a binary name
    • internalFormToDotSeparatedIdentifiers

      public static @DotSeparatedIdentifiers String internalFormToDotSeparatedIdentifiers(@InternalForm String internalForm)
      Given a class name in internal form, return it as dot-separated identifiers.
      Parameters:
      internalForm - a class name in internal form
      Returns:
      the class name as dot-separated identifiers
    • internalFormToFullyQualified

      public static @FullyQualifiedName String internalFormToFullyQualified(@InternalForm String internalForm)
      Given a class name in internal form, return it as a fully-qualified name.
      Parameters:
      internalForm - a type in internal form
      Returns:
      a fully-qualified name
    • splitJavaArglist

      public static @BinaryName String[] splitJavaArglist(String javaArglist)
      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

      public static String arglistToJvm(String arglist)
      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

      public static List<@FieldDescriptor String> splitJvmArglist(String jvmArglist)
      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

      public static String arglistFromJvm(String arglist)
      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