@Documented @Retention(value=RUNTIME) @Target(value={TYPE_USE,TYPE_PARAMETER}) @SubtypeOf(value=FqBinaryName.class) @QualifierForLiterals(stringPatterns="^[A-Za-z_][A-Za-z_0-9]*(\\.[A-Za-z_][A-Za-z_0-9]*)*(\\[\\])*$") public @interface FullyQualifiedName
Examples:
 int
 MyClass
 java.lang.Integer
 int[][]
 MyClass[]
 java.lang.Integer[][][]
 in
  package org.checkerframework.checker.signature;
  public class SignatureChecker {
    private class Inner {}
  }
 
 the fully-qualified names for the two types are
 org.checkerframework.checker.signature.SignatureChecker and
 org.checkerframework.checker.signature.SignatureChecker.Inner.
 Fully-qualified names and binary names are the same for top-level classes and only differ by a '.' vs. '$' for inner classes.