Class Signatures

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

public final class Signatures extends Object
Conversion utilities between Java and JVM string formats, for types and signatures.

Also predicates for testing strings.

  • Field Details

    • dirSep

      private static final String dirSep
      The file-system-specific directory separator.
    • arrayBracketsPattern

      private static Pattern arrayBracketsPattern
      Matches the "[][][]" at the end of a Java array type.
    • primitiveToFieldDescriptor

      private static HashMap<@PrimitiveType String,@FieldDescriptor String> primitiveToFieldDescriptor
      A map from Java primitive type name (such as "int") to field descriptor (such as "I").
    • fieldDescriptorToPrimitive

      private static HashMap<String,String> fieldDescriptorToPrimitive
      A map from field descriptor (sach as "I") to Java primitive type (such as "int").
    • fdArrayBracketsPattern

      private static Pattern fdArrayBracketsPattern
      Matches the "[[[" prefix of a field descriptor for an array.
  • Constructor Details

    • Signatures

      public Signatures()
  • 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 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

      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(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;" or "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(String typename)
      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

      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 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

      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
    • 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