Package edu.umd.cs.findbugs.util
Class ClassName
- java.lang.Object
-
- edu.umd.cs.findbugs.util.ClassName
-
public abstract class ClassName extends java.lang.Object
Utility methods for working with class names.
-
-
Constructor Summary
Constructors Constructor Description ClassName()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static void
assertIsDotted(java.lang.String className)
static void
assertIsSlashed(java.lang.String className)
static java.lang.String
extractClassName(java.lang.String originalName)
Extract a slashed classname from a JVM classname or signature.static java.lang.String
extractPackageName(java.lang.String className)
extract the package name from a dotted class name.static java.lang.String
extractPackagePrefix(java.lang.String packageName, int count)
static java.lang.String
extractSimpleName(java.lang.String className)
static java.lang.String
fromFieldSignature(java.lang.String signature)
Converts from signature to slashed class name (e.g., from Ljava/lang/String; to java/lang/String).static java.lang.String
fromFieldSignatureToDottedClassName(java.lang.String signature)
Converts from signature to dotted class name (e.g., from Ljava/lang/String; to java.lang.String).private static boolean
fuzzyMatch(java.lang.String className, java.lang.String searchString)
Perform a fuzzy matching, by comparing the Levenshtein distance of the simple class name and the search string.static java.lang.String
getPrimitiveType(java.lang.String cls)
static boolean
isAnonymous(java.lang.String className)
Does a class name appear to designate an anonymous class? Only the name is analyzed.static boolean
isLocalOrAnonymous(java.lang.String className)
Does a class name appear to designate an anonymous or local (defined inside method) class? Only the name is analyzed.static boolean
isMathClass(java.lang.String className)
private static boolean
isValidArrayFieldDescriptor(java.lang.String className)
Determines whether a class name is a valid array field descriptor as per JVMS (Java SE 8 Edition) 4.3.2static boolean
isValidBaseTypeFieldDescriptor(java.lang.String className)
Determines whether a class name is a valid array field descriptor as per JVMS (Java SE 8 Edition) 4.3.2private static boolean
isValidBinaryClassName(java.lang.String className)
private static boolean
isValidClassFieldDescriptor(java.lang.String className)
static boolean
isValidClassName(java.lang.String className)
Return whether or not the given class name is valid.private static boolean
isValidDottedClassName(java.lang.String className)
static boolean
matchedPrefixes(java.lang.String[] classSearchStrings, java.lang.String className)
static java.lang.String
toDottedClassName(java.lang.String className)
Convert class name to dotted format.static java.lang.String
toSignature(java.lang.String className)
static java.lang.String
toSlashedClassName(java.lang.Class<?> class1)
static java.lang.String
toSlashedClassName(java.lang.String className)
Convert class name to slashed format.
-
-
-
Method Detail
-
isMathClass
public static boolean isMathClass(@SlashedClassName java.lang.String className)
-
assertIsDotted
public static void assertIsDotted(@DottedClassName java.lang.String className)
-
assertIsSlashed
public static void assertIsSlashed(@SlashedClassName java.lang.String className)
-
toSignature
public static java.lang.String toSignature(@SlashedClassName java.lang.String className)
-
getPrimitiveType
@CheckForNull public static java.lang.String getPrimitiveType(@SlashedClassName java.lang.String cls)
-
fromFieldSignature
@CheckForNull @SlashedClassName public static java.lang.String fromFieldSignature(java.lang.String signature)
Converts from signature to slashed class name (e.g., from Ljava/lang/String; to java/lang/String). Returns null if it is the signature for an array or primitive type.
-
toSlashedClassName
@SlashedClassName public static java.lang.String toSlashedClassName(@SlashedClassName(when=UNKNOWN) java.lang.String className)
Convert class name to slashed format. If the class name is already in slashed format, it is returned unmodified.- Parameters:
className
- a class name- Returns:
- the same class name in slashed format
-
toDottedClassName
@DottedClassName public static java.lang.String toDottedClassName(@SlashedClassName(when=UNKNOWN) java.lang.String className)
Convert class name to dotted format. If the class name is already in dotted format, it is returned unmodified.- Parameters:
className
- a class name- Returns:
- the same class name in dotted format
-
fromFieldSignatureToDottedClassName
@DottedClassName @CheckForNull public static java.lang.String fromFieldSignatureToDottedClassName(java.lang.String signature)
Converts from signature to dotted class name (e.g., from Ljava/lang/String; to java.lang.String). Returns null if it is the signature for an array or primitive type.- Parameters:
signature
- a class signature- Returns:
- the class of the signature in dotted format
-
extractPackageName
@DottedClassName public static java.lang.String extractPackageName(@DottedClassName java.lang.String className)
extract the package name from a dotted class name. Package names are always in dotted format.- Parameters:
className
- a dotted class name- Returns:
- the name of the package containing the class
-
extractSimpleName
public static java.lang.String extractSimpleName(@DottedClassName java.lang.String className)
-
isValidClassName
public static boolean isValidClassName(java.lang.String className)
Return whether or not the given class name is valid.- Parameters:
className
- a possible class name- Returns:
- true if it's a valid class name, false otherwise
-
isValidBinaryClassName
private static boolean isValidBinaryClassName(java.lang.String className)
-
isValidDottedClassName
private static boolean isValidDottedClassName(java.lang.String className)
-
isValidArrayFieldDescriptor
private static boolean isValidArrayFieldDescriptor(java.lang.String className)
Determines whether a class name is a valid array field descriptor as per JVMS (Java SE 8 Edition) 4.3.2- Parameters:
className
- a class name to test for validity - must be non-null
and non-empty.- Returns:
true
ifclassName
is a valid array field descriptor as per JVMS 4.3.2, otherwisefalse
- Throws:
java.lang.IndexOutOfBoundsException
- ifclassName
is empty.java.lang.NullPointerException
- ifclassName
isnull
.
-
isValidClassFieldDescriptor
private static boolean isValidClassFieldDescriptor(java.lang.String className)
-
isValidBaseTypeFieldDescriptor
public static boolean isValidBaseTypeFieldDescriptor(java.lang.String className)
Determines whether a class name is a valid array field descriptor as per JVMS (Java SE 8 Edition) 4.3.2- Parameters:
className
- a class name to test for validity - must be non-null
and non-empty.- Returns:
true
ifclassName
is a valid basetype field descriptor as per JVMS 4.3.2, otherwisefalse
-
isLocalOrAnonymous
public static boolean isLocalOrAnonymous(java.lang.String className)
Does a class name appear to designate an anonymous or local (defined inside method) class? Only the name is analyzed. No classes are loaded or looked up.- Parameters:
className
- class name, slashed or dotted, fully qualified or unqualified- Returns:
- true if className is the name of an anonymous or local class
-
isAnonymous
public static boolean isAnonymous(java.lang.String className)
Does a class name appear to designate an anonymous class? Only the name is analyzed. No classes are loaded or looked up.- Parameters:
className
- class name, slashed or dotted, fully qualified or unqualified- Returns:
- true if className is the name of an anonymous class
-
extractClassName
@SlashedClassName public static java.lang.String extractClassName(java.lang.String originalName)
Extract a slashed classname from a JVM classname or signature.- Parameters:
originalName
- JVM classname or signature- Returns:
- a slashed classname
-
extractPackagePrefix
public static java.lang.String extractPackagePrefix(java.lang.String packageName, int count)
-
matchedPrefixes
public static boolean matchedPrefixes(java.lang.String[] classSearchStrings, @DottedClassName java.lang.String className)
-
fuzzyMatch
private static boolean fuzzyMatch(java.lang.String className, java.lang.String searchString)
Perform a fuzzy matching, by comparing the Levenshtein distance of the simple class name and the search string. A maximum distance of 3 is used. This means the searchString and the className may differ by 3 single-character edits (insertions, deletions or substitutions). This limit also speeds up the computation.For more information on the Levenshtein distance see Wikipedia and the Apache Commons Text JavaDoc.
- Parameters:
className
- the full class namesearchString
- the search string- Returns:
- true, if the strings are similar, false otherwise
-
toSlashedClassName
@SlashedClassName public static java.lang.String toSlashedClassName(java.lang.Class<?> class1)
-
-