diff --git a/src/keepanno/java/androidx/annotation/keep/AnnotationPattern.kt b/src/keepanno/java/androidx/annotation/keep/AnnotationPattern.kt
index a6c1ced..9ff9f61 100644
--- a/src/keepanno/java/androidx/annotation/keep/AnnotationPattern.kt
+++ b/src/keepanno/java/androidx/annotation/keep/AnnotationPattern.kt
@@ -40,64 +40,64 @@
 @Target(AnnotationTarget.ANNOTATION_CLASS)
 public annotation class AnnotationPattern(
 
-  /**
-   * Define the annotation-name pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining annotation-name:
-   * <ul>
-   * <li>constant
-   * <li>namePattern
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any annotation name.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val name: String = "",
+    /**
+     * Define the annotation-name pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining annotation-name:
+     * <ul>
+     * <li>constant
+     * <li>namePattern
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any annotation name.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val name: String = "",
 
-  /**
-   * Define the annotation-name pattern by reference to a {@code Class} constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining annotation-name:
-   * <ul>
-   * <li>name
-   * <li>namePattern
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any annotation name.
-   *
-   * @return The Class constant that defines the annotation.
-   */
-  val constant: KClass<*> = Object::class,
+    /**
+     * Define the annotation-name pattern by reference to a {@code Class} constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining annotation-name:
+     * <ul>
+     * <li>name
+     * <li>namePattern
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any annotation name.
+     *
+     * @return The Class constant that defines the annotation.
+     */
+    val constant: KClass<*> = Object::class,
 
-  /**
-   * Define the annotation-name pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining annotation-name:
-   * <ul>
-   * <li>name
-   * <li>constant
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any annotation name.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val namePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the annotation-name pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining annotation-name:
+     * <ul>
+     * <li>name
+     * <li>constant
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any annotation name.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val namePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Specify which retention policies must be set for the annotations.
-   *
-   * <p>
-   * Matches annotations with matching retention policies
-   *
-   * @return Retention policies. By default {@code RetentionPolicy.RUNTIME}.
-   */
-  val retention: Array<RetentionPolicy> = [RetentionPolicy.RUNTIME],
+    /**
+     * Specify which retention policies must be set for the annotations.
+     *
+     * <p>
+     * Matches annotations with matching retention policies
+     *
+     * @return Retention policies. By default {@code RetentionPolicy.RUNTIME}.
+     */
+    val retention: Array<RetentionPolicy> = [RetentionPolicy.RUNTIME],
 )
diff --git a/src/keepanno/java/androidx/annotation/keep/CheckOptimizedOut.kt b/src/keepanno/java/androidx/annotation/keep/CheckOptimizedOut.kt
index 75f69d6..e6e5b98 100644
--- a/src/keepanno/java/androidx/annotation/keep/CheckOptimizedOut.kt
+++ b/src/keepanno/java/androidx/annotation/keep/CheckOptimizedOut.kt
@@ -38,9 +38,9 @@
  */
 @Retention(AnnotationRetention.BINARY)
 @Target(
-  AnnotationTarget.TYPE,
-  AnnotationTarget.FIELD,
-  AnnotationTarget.FUNCTION,
-  AnnotationTarget.CONSTRUCTOR,
+    AnnotationTarget.TYPE,
+    AnnotationTarget.FIELD,
+    AnnotationTarget.FUNCTION,
+    AnnotationTarget.CONSTRUCTOR,
 )
 public annotation class CheckOptimizedOut(val description: String = "")
diff --git a/src/keepanno/java/androidx/annotation/keep/CheckRemoved.kt b/src/keepanno/java/androidx/annotation/keep/CheckRemoved.kt
index 66117a2..00923ed 100644
--- a/src/keepanno/java/androidx/annotation/keep/CheckRemoved.kt
+++ b/src/keepanno/java/androidx/annotation/keep/CheckRemoved.kt
@@ -34,9 +34,9 @@
  */
 @Retention(AnnotationRetention.BINARY)
 @Target(
-  AnnotationTarget.TYPE,
-  AnnotationTarget.FIELD,
-  AnnotationTarget.FUNCTION,
-  AnnotationTarget.CONSTRUCTOR,
+    AnnotationTarget.TYPE,
+    AnnotationTarget.FIELD,
+    AnnotationTarget.FUNCTION,
+    AnnotationTarget.CONSTRUCTOR,
 )
 public annotation class CheckRemoved(val description: String = "")
diff --git a/src/keepanno/java/androidx/annotation/keep/ClassAccessFlags.kt b/src/keepanno/java/androidx/annotation/keep/ClassAccessFlags.kt
index fb5a082..32971aa 100644
--- a/src/keepanno/java/androidx/annotation/keep/ClassAccessFlags.kt
+++ b/src/keepanno/java/androidx/annotation/keep/ClassAccessFlags.kt
@@ -27,20 +27,20 @@
  * operation syntactically.
  */
 public enum class ClassAccessFlags {
-  PUBLIC,
-  NON_PUBLIC,
-  PACKAGE_PRIVATE,
-  NON_PACKAGE_PRIVATE,
-  FINAL,
-  NON_FINAL,
-  INTERFACE,
-  NON_INTERFACE,
-  ABSTRACT,
-  NON_ABSTRACT,
-  SYNTHETIC,
-  NON_SYNTHETIC,
-  ANNOTATION,
-  NON_ANNOTATION,
-  ENUM,
-  NON_ENUM,
+    PUBLIC,
+    NON_PUBLIC,
+    PACKAGE_PRIVATE,
+    NON_PACKAGE_PRIVATE,
+    FINAL,
+    NON_FINAL,
+    INTERFACE,
+    NON_INTERFACE,
+    ABSTRACT,
+    NON_ABSTRACT,
+    SYNTHETIC,
+    NON_SYNTHETIC,
+    ANNOTATION,
+    NON_ANNOTATION,
+    ENUM,
+    NON_ENUM,
 }
diff --git a/src/keepanno/java/androidx/annotation/keep/ClassNamePattern.kt b/src/keepanno/java/androidx/annotation/keep/ClassNamePattern.kt
index 44738b1..b5c312c 100644
--- a/src/keepanno/java/androidx/annotation/keep/ClassNamePattern.kt
+++ b/src/keepanno/java/androidx/annotation/keep/ClassNamePattern.kt
@@ -38,92 +38,92 @@
 @Target(AnnotationTarget.ANNOTATION_CLASS)
 public annotation class ClassNamePattern(
 
-  /**
-   * Define the class-name pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-name:
-   * <ul>
-   * <li>constant
-   * <li>unqualifiedName
-   * <li>unqualifiedNamePattern
-   * <li>packageName
-   * </ul>
-   *
-   * @return The qualified class name that defines the class.
-   */
-  val name: String = "",
+    /**
+     * Define the class-name pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-name:
+     * <ul>
+     * <li>constant
+     * <li>unqualifiedName
+     * <li>unqualifiedNamePattern
+     * <li>packageName
+     * </ul>
+     *
+     * @return The qualified class name that defines the class.
+     */
+    val name: String = "",
 
-  /**
-   * Define the class-name pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-name:
-   * <ul>
-   * <li>name
-   * <li>unqualifiedName
-   * <li>unqualifiedNamePattern
-   * <li>packageName
-   * </ul>
-   *
-   * @return The class-constant that defines the class.
-   */
-  val constant: KClass<*> = Object::class,
+    /**
+     * Define the class-name pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-name:
+     * <ul>
+     * <li>name
+     * <li>unqualifiedName
+     * <li>unqualifiedNamePattern
+     * <li>packageName
+     * </ul>
+     *
+     * @return The class-constant that defines the class.
+     */
+    val constant: KClass<*> = Object::class,
 
-  /**
-   * Exact and unqualified name of the class or interface.
-   *
-   * <p>
-   * For example, the unqualified name of {@code com.example.MyClass} is {@code MyClass}. Note that
-   * for inner classes a `$` will appear in the unqualified name,such as, {@code
-   * MyClass$MyInnerClass}.
-   *
-   * <p>
-   * The default matches any unqualified name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-unqualified-name:
-   * <ul>
-   * <li>unqualifiedNamePattern
-   * <li>name
-   * <li>constant
-   * </ul>
-   */
-  val unqualifiedName: String = "",
+    /**
+     * Exact and unqualified name of the class or interface.
+     *
+     * <p>
+     * For example, the unqualified name of {@code com.example.MyClass} is {@code MyClass}. Note
+     * that for inner classes a `$` will appear in the unqualified name,such as, {@code
+     * MyClass$MyInnerClass}.
+     *
+     * <p>
+     * The default matches any unqualified name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-unqualified-name:
+     * <ul>
+     * <li>unqualifiedNamePattern
+     * <li>name
+     * <li>constant
+     * </ul>
+     */
+    val unqualifiedName: String = "",
 
-  /**
-   * Define the unqualified class-name pattern by a string pattern.
-   *
-   * <p>
-   * The default matches any unqualified name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-unqualified-name:
-   * <ul>
-   * <li>unqualifiedName
-   * <li>name
-   * <li>constant
-   * </ul>
-   *
-   * @return The string pattern of the unqualified class name.
-   */
-  val unqualifiedNamePattern: StringPattern = StringPattern(exact = ""),
+    /**
+     * Define the unqualified class-name pattern by a string pattern.
+     *
+     * <p>
+     * The default matches any unqualified name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-unqualified-name:
+     * <ul>
+     * <li>unqualifiedName
+     * <li>name
+     * <li>constant
+     * </ul>
+     *
+     * @return The string pattern of the unqualified class name.
+     */
+    val unqualifiedNamePattern: StringPattern = StringPattern(exact = ""),
 
-  /**
-   * Exact package name of the class or interface.
-   *
-   * <p>
-   * For example, the package of {@code com.example.MyClass} is {@code com.example}.
-   *
-   * <p>
-   * The default matches any package.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-package-name:
-   * <ul>
-   * <li>name
-   * <li>constant
-   * </ul>
-   */
-  val packageName: String = "",
+    /**
+     * Exact package name of the class or interface.
+     *
+     * <p>
+     * For example, the package of {@code com.example.MyClass} is {@code com.example}.
+     *
+     * <p>
+     * The default matches any package.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-package-name:
+     * <ul>
+     * <li>name
+     * <li>constant
+     * </ul>
+     */
+    val packageName: String = "",
 )
diff --git a/src/keepanno/java/androidx/annotation/keep/FieldAccessFlags.kt b/src/keepanno/java/androidx/annotation/keep/FieldAccessFlags.kt
index 37c763c..7dac709 100644
--- a/src/keepanno/java/androidx/annotation/keep/FieldAccessFlags.kt
+++ b/src/keepanno/java/androidx/annotation/keep/FieldAccessFlags.kt
@@ -27,25 +27,25 @@
  * operation syntactically.
  */
 public enum class FieldAccessFlags {
-  // General member flags.
-  PUBLIC,
-  NON_PUBLIC,
-  PRIVATE,
-  NON_PRIVATE,
-  PROTECTED,
-  NON_PROTECTED,
-  PACKAGE_PRIVATE,
-  NON_PACKAGE_PRIVATE,
-  STATIC,
-  NON_STATIC,
-  FINAL,
-  NON_FINAL,
-  SYNTHETIC,
-  NON_SYNTHETIC,
-  // Field specific flags.
-  VOLATILE,
-  NON_VOLATILE,
-  TRANSIENT,
-  NON_TRANSIENT,
-  // ENUM - No PG parser support.
+    // General member flags.
+    PUBLIC,
+    NON_PUBLIC,
+    PRIVATE,
+    NON_PRIVATE,
+    PROTECTED,
+    NON_PROTECTED,
+    PACKAGE_PRIVATE,
+    NON_PACKAGE_PRIVATE,
+    STATIC,
+    NON_STATIC,
+    FINAL,
+    NON_FINAL,
+    SYNTHETIC,
+    NON_SYNTHETIC,
+    // Field specific flags.
+    VOLATILE,
+    NON_VOLATILE,
+    TRANSIENT,
+    NON_TRANSIENT,
+    // ENUM - No PG parser support.
 }
diff --git a/src/keepanno/java/androidx/annotation/keep/InstanceOfPattern.kt b/src/keepanno/java/androidx/annotation/keep/InstanceOfPattern.kt
index b1c84b1..01a1e51 100644
--- a/src/keepanno/java/androidx/annotation/keep/InstanceOfPattern.kt
+++ b/src/keepanno/java/androidx/annotation/keep/InstanceOfPattern.kt
@@ -37,15 +37,15 @@
 @Target(AnnotationTarget.ANNOTATION_CLASS)
 public annotation class InstanceOfPattern(
 
-  /**
-   * True if the pattern should include the directly matched classes.
-   *
-   * <p>
-   * If false, the pattern is exclusive and only matches classes that are strict subclasses of the
-   * pattern.
-   */
-  val isInclusive: Boolean = true,
+    /**
+     * True if the pattern should include the directly matched classes.
+     *
+     * <p>
+     * If false, the pattern is exclusive and only matches classes that are strict subclasses of the
+     * pattern.
+     */
+    val isInclusive: Boolean = true,
 
-  /** Instances of classes matching the class-name pattern. */
-  val classNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /** Instances of classes matching the class-name pattern. */
+    val classNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
 )
diff --git a/src/keepanno/java/androidx/annotation/keep/KeepBinding.kt b/src/keepanno/java/androidx/annotation/keep/KeepBinding.kt
index 7d9730b..aa8de9a 100644
--- a/src/keepanno/java/androidx/annotation/keep/KeepBinding.kt
+++ b/src/keepanno/java/androidx/annotation/keep/KeepBinding.kt
@@ -47,735 +47,743 @@
 @Target(AnnotationTarget.ANNOTATION_CLASS)
 public annotation class KeepBinding(
 
-  /**
-   * Name with which other bindings, conditions or targets can reference the bound item pattern.
-   *
-   * @return Name of the binding.
-   */
-  val bindingName: String,
+    /**
+     * Name with which other bindings, conditions or targets can reference the bound item pattern.
+     *
+     * @return Name of the binding.
+     */
+    val bindingName: String,
 
-  /**
-   * Specify the kind of this item pattern.
-   *
-   * <p>
-   * Possible values are:
-   * <ul>
-   * <li>{@link KeepItemKind#ONLY_CLASS}
-   * <li>{@link KeepItemKind#ONLY_MEMBERS}
-   * <li>{@link KeepItemKind#ONLY_METHODS}
-   * <li>{@link KeepItemKind#ONLY_FIELDS}
-   * <li>{@link KeepItemKind#CLASS_AND_MEMBERS}
-   * <li>{@link KeepItemKind#CLASS_AND_METHODS}
-   * <li>{@link KeepItemKind#CLASS_AND_FIELDS}
-   * </ul>
-   *
-   * <p>
-   * If unspecified the default kind for an item depends on its member patterns:
-   * <ul>
-   * <li>{@link KeepItemKind#ONLY_CLASS} if no member patterns are defined
-   * <li>{@link KeepItemKind#ONLY_METHODS} if method patterns are defined
-   * <li>{@link KeepItemKind#ONLY_FIELDS} if field patterns are defined
-   * <li>{@link KeepItemKind#ONLY_MEMBERS} otherwise.
-   * </ul>
-   *
-   * @return The kind for this pattern.
-   */
-  val kind: KeepItemKind = KeepItemKind.DEFAULT,
+    /**
+     * Specify the kind of this item pattern.
+     *
+     * <p>
+     * Possible values are:
+     * <ul>
+     * <li>{@link KeepItemKind#ONLY_CLASS}
+     * <li>{@link KeepItemKind#ONLY_MEMBERS}
+     * <li>{@link KeepItemKind#ONLY_METHODS}
+     * <li>{@link KeepItemKind#ONLY_FIELDS}
+     * <li>{@link KeepItemKind#CLASS_AND_MEMBERS}
+     * <li>{@link KeepItemKind#CLASS_AND_METHODS}
+     * <li>{@link KeepItemKind#CLASS_AND_FIELDS}
+     * </ul>
+     *
+     * <p>
+     * If unspecified the default kind for an item depends on its member patterns:
+     * <ul>
+     * <li>{@link KeepItemKind#ONLY_CLASS} if no member patterns are defined
+     * <li>{@link KeepItemKind#ONLY_METHODS} if method patterns are defined
+     * <li>{@link KeepItemKind#ONLY_FIELDS} if field patterns are defined
+     * <li>{@link KeepItemKind#ONLY_MEMBERS} otherwise.
+     * </ul>
+     *
+     * @return The kind for this pattern.
+     */
+    val kind: KeepItemKind = KeepItemKind.DEFAULT,
 
-  /**
-   * Define the class pattern by reference to a binding.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class:
-   * <ul>
-   * <li>className
-   * <li>classConstant
-   * <li>classNamePattern
-   * <li>instanceOfClassName
-   * <li>instanceOfClassNameExclusive
-   * <li>instanceOfClassConstant
-   * <li>instanceOfClassConstantExclusive
-   * <li>instanceOfPattern
-   * <li>classAnnotatedByClassName
-   * <li>classAnnotatedByClassConstant
-   * <li>classAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class.
-   *
-   * @return The name of the binding that defines the class.
-   */
-  val classFromBinding: String = "",
+    /**
+     * Define the class pattern by reference to a binding.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class:
+     * <ul>
+     * <li>className
+     * <li>classConstant
+     * <li>classNamePattern
+     * <li>instanceOfClassName
+     * <li>instanceOfClassNameExclusive
+     * <li>instanceOfClassConstant
+     * <li>instanceOfClassConstantExclusive
+     * <li>instanceOfPattern
+     * <li>classAnnotatedByClassName
+     * <li>classAnnotatedByClassConstant
+     * <li>classAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class.
+     *
+     * @return The name of the binding that defines the class.
+     */
+    val classFromBinding: String = "",
 
-  /**
-   * Define the class-name pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-name:
-   * <ul>
-   * <li>classConstant
-   * <li>classNamePattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class name.
-   *
-   * @return The qualified class name that defines the class.
-   */
-  val className: String = "",
+    /**
+     * Define the class-name pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-name:
+     * <ul>
+     * <li>classConstant
+     * <li>classNamePattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class name.
+     *
+     * @return The qualified class name that defines the class.
+     */
+    val className: String = "",
 
-  /**
-   * Define the class-name pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-name:
-   * <ul>
-   * <li>className
-   * <li>classNamePattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class name.
-   *
-   * @return The class-constant that defines the class.
-   */
-  val classConstant: KClass<*> = Object::class,
+    /**
+     * Define the class-name pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-name:
+     * <ul>
+     * <li>className
+     * <li>classNamePattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class name.
+     *
+     * @return The class-constant that defines the class.
+     */
+    val classConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the class-name pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-name:
-   * <ul>
-   * <li>className
-   * <li>classConstant
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class name.
-   *
-   * @return The class-name pattern that defines the class.
-   */
-  val classNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the class-name pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-name:
+     * <ul>
+     * <li>className
+     * <li>classConstant
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class name.
+     *
+     * @return The class-name pattern that defines the class.
+     */
+    val classNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the instance-of pattern as classes that are instances of the fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining instance-of:
-   * <ul>
-   * <li>instanceOfClassNameExclusive
-   * <li>instanceOfClassConstant
-   * <li>instanceOfClassConstantExclusive
-   * <li>instanceOfPattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class instance.
-   *
-   * @return The qualified class name that defines what instance-of the class must be.
-   */
-  val instanceOfClassName: String = "",
+    /**
+     * Define the instance-of pattern as classes that are instances of the fully qualified class
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining instance-of:
+     * <ul>
+     * <li>instanceOfClassNameExclusive
+     * <li>instanceOfClassConstant
+     * <li>instanceOfClassConstantExclusive
+     * <li>instanceOfPattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class instance.
+     *
+     * @return The qualified class name that defines what instance-of the class must be.
+     */
+    val instanceOfClassName: String = "",
 
-  /**
-   * Define the instance-of pattern as classes that are instances of the fully qualified class name.
-   *
-   * <p>
-   * The pattern is exclusive in that it does not match classes that are instances of the pattern,
-   * but only those that are instances of classes that are subclasses of the pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining instance-of:
-   * <ul>
-   * <li>instanceOfClassName
-   * <li>instanceOfClassConstant
-   * <li>instanceOfClassConstantExclusive
-   * <li>instanceOfPattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class instance.
-   *
-   * @return The qualified class name that defines what instance-of the class must be.
-   */
-  val instanceOfClassNameExclusive: String = "",
+    /**
+     * Define the instance-of pattern as classes that are instances of the fully qualified class
+     * name.
+     *
+     * <p>
+     * The pattern is exclusive in that it does not match classes that are instances of the pattern,
+     * but only those that are instances of classes that are subclasses of the pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining instance-of:
+     * <ul>
+     * <li>instanceOfClassName
+     * <li>instanceOfClassConstant
+     * <li>instanceOfClassConstantExclusive
+     * <li>instanceOfPattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class instance.
+     *
+     * @return The qualified class name that defines what instance-of the class must be.
+     */
+    val instanceOfClassNameExclusive: String = "",
 
-  /**
-   * Define the instance-of pattern as classes that are instances the referenced Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining instance-of:
-   * <ul>
-   * <li>instanceOfClassName
-   * <li>instanceOfClassNameExclusive
-   * <li>instanceOfClassConstantExclusive
-   * <li>instanceOfPattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class instance.
-   *
-   * @return The class constant that defines what instance-of the class must be.
-   */
-  val instanceOfClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the instance-of pattern as classes that are instances the referenced Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining instance-of:
+     * <ul>
+     * <li>instanceOfClassName
+     * <li>instanceOfClassNameExclusive
+     * <li>instanceOfClassConstantExclusive
+     * <li>instanceOfPattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class instance.
+     *
+     * @return The class constant that defines what instance-of the class must be.
+     */
+    val instanceOfClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the instance-of pattern as classes that are instances the referenced Class constant.
-   *
-   * <p>
-   * The pattern is exclusive in that it does not match classes that are instances of the pattern,
-   * but only those that are instances of classes that are subclasses of the pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining instance-of:
-   * <ul>
-   * <li>instanceOfClassName
-   * <li>instanceOfClassNameExclusive
-   * <li>instanceOfClassConstant
-   * <li>instanceOfPattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class instance.
-   *
-   * @return The class constant that defines what instance-of the class must be.
-   */
-  val instanceOfClassConstantExclusive: KClass<*> = Object::class,
+    /**
+     * Define the instance-of pattern as classes that are instances the referenced Class constant.
+     *
+     * <p>
+     * The pattern is exclusive in that it does not match classes that are instances of the pattern,
+     * but only those that are instances of classes that are subclasses of the pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining instance-of:
+     * <ul>
+     * <li>instanceOfClassName
+     * <li>instanceOfClassNameExclusive
+     * <li>instanceOfClassConstant
+     * <li>instanceOfPattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class instance.
+     *
+     * @return The class constant that defines what instance-of the class must be.
+     */
+    val instanceOfClassConstantExclusive: KClass<*> = Object::class,
 
-  /**
-   * Define the instance-of with a pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining instance-of:
-   * <ul>
-   * <li>instanceOfClassName
-   * <li>instanceOfClassNameExclusive
-   * <li>instanceOfClassConstant
-   * <li>instanceOfClassConstantExclusive
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class instance.
-   *
-   * @return The pattern that defines what instance-of the class must be.
-   */
-  val instanceOfPattern: InstanceOfPattern = InstanceOfPattern(),
+    /**
+     * Define the instance-of with a pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining instance-of:
+     * <ul>
+     * <li>instanceOfClassName
+     * <li>instanceOfClassNameExclusive
+     * <li>instanceOfClassConstant
+     * <li>instanceOfClassConstantExclusive
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class instance.
+     *
+     * @return The pattern that defines what instance-of the class must be.
+     */
+    val instanceOfPattern: InstanceOfPattern = InstanceOfPattern(),
 
-  /**
-   * Define the class-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-annotated-by:
-   * <ul>
-   * <li>classAnnotatedByClassConstant
-   * <li>classAnnotatedByClassNamePattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class regardless of what the class is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val classAnnotatedByClassName: String = "",
+    /**
+     * Define the class-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-annotated-by:
+     * <ul>
+     * <li>classAnnotatedByClassConstant
+     * <li>classAnnotatedByClassNamePattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class regardless of what the class is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val classAnnotatedByClassName: String = "",
 
-  /**
-   * Define the class-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-annotated-by:
-   * <ul>
-   * <li>classAnnotatedByClassName
-   * <li>classAnnotatedByClassNamePattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class regardless of what the class is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val classAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the class-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-annotated-by:
+     * <ul>
+     * <li>classAnnotatedByClassName
+     * <li>classAnnotatedByClassNamePattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class regardless of what the class is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val classAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the class-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-annotated-by:
-   * <ul>
-   * <li>classAnnotatedByClassName
-   * <li>classAnnotatedByClassConstant
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class regardless of what the class is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val classAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the class-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-annotated-by:
+     * <ul>
+     * <li>classAnnotatedByClassName
+     * <li>classAnnotatedByClassConstant
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class regardless of what the class is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val classAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the member-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassConstant
-   * <li>memberAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val memberAnnotatedByClassName: String = "",
+    /**
+     * Define the member-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassConstant
+     * <li>memberAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val memberAnnotatedByClassName: String = "",
 
-  /**
-   * Define the member-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassName
-   * <li>memberAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val memberAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the member-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassName
+     * <li>memberAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val memberAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the member-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassName
-   * <li>memberAnnotatedByClassConstant
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val memberAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the member-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassName
+     * <li>memberAnnotatedByClassConstant
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val memberAnnotatedByClassNamePattern: ClassNamePattern =
+        ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the member-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * @return The member access-flag constraints that must be met.
-   */
-  val memberAccess: Array<MemberAccessFlags> = [],
+    /**
+     * Define the member-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * @return The member access-flag constraints that must be met.
+     */
+    val memberAccess: Array<MemberAccessFlags> = [],
 
-  /**
-   * Define the method-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassConstant
-   * <li>methodAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val methodAnnotatedByClassName: String = "",
+    /**
+     * Define the method-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassConstant
+     * <li>methodAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val methodAnnotatedByClassName: String = "",
 
-  /**
-   * Define the method-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassName
-   * <li>methodAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val methodAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the method-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassName
+     * <li>methodAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val methodAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the method-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassName
-   * <li>methodAnnotatedByClassConstant
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val methodAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the method-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassName
+     * <li>methodAnnotatedByClassConstant
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val methodAnnotatedByClassNamePattern: ClassNamePattern =
+        ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the method-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any
-   * method-access flags.
-   *
-   * @return The method access-flag constraints that must be met.
-   */
-  val methodAccess: Array<MethodAccessFlags> = [],
+    /**
+     * Define the method-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * method-access flags.
+     *
+     * @return The method access-flag constraints that must be met.
+     */
+    val methodAccess: Array<MethodAccessFlags> = [],
 
-  /**
-   * Define the method-name pattern by an exact method name.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any method
-   * name.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodNamePattern` also defining method-name.
-   *
-   * @return The exact method name of the method.
-   */
-  val methodName: String = "",
+    /**
+     * Define the method-name pattern by an exact method name.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any method
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodNamePattern` also defining method-name.
+     *
+     * @return The exact method name of the method.
+     */
+    val methodName: String = "",
 
-  /**
-   * Define the method-name pattern by a string pattern.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any method
-   * name.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodName` also defining method-name.
-   *
-   * @return The string pattern of the method name.
-   */
-  val methodNamePattern: StringPattern = StringPattern(exact = ""),
+    /**
+     * Define the method-name pattern by a string pattern.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any method
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodName` also defining method-name.
+     *
+     * @return The string pattern of the method name.
+     */
+    val methodNamePattern: StringPattern = StringPattern(exact = ""),
 
-  /**
-   * Define the method return-type pattern by a fully qualified type or 'void'.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnTypeConstant
-   * <li>methodReturnTypePattern
-   * </ul>
-   *
-   * @return The qualified type name of the method return type.
-   */
-  val methodReturnType: String = "",
+    /**
+     * Define the method return-type pattern by a fully qualified type or 'void'.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnTypeConstant
+     * <li>methodReturnTypePattern
+     * </ul>
+     *
+     * @return The qualified type name of the method return type.
+     */
+    val methodReturnType: String = "",
 
-  /**
-   * Define the method return-type pattern by a class constant.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnType
-   * <li>methodReturnTypePattern
-   * </ul>
-   *
-   * @return A class constant denoting the type of the method return type.
-   */
-  val methodReturnTypeConstant: KClass<*> = Object::class,
+    /**
+     * Define the method return-type pattern by a class constant.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnType
+     * <li>methodReturnTypePattern
+     * </ul>
+     *
+     * @return A class constant denoting the type of the method return type.
+     */
+    val methodReturnTypeConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the method return-type pattern by a type pattern.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnType
-   * <li>methodReturnTypeConstant
-   * </ul>
-   *
-   * @return The pattern of the method return type.
-   */
-  val methodReturnTypePattern: TypePattern = TypePattern(name = ""),
+    /**
+     * Define the method return-type pattern by a type pattern.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnType
+     * <li>methodReturnTypeConstant
+     * </ul>
+     *
+     * @return The pattern of the method return type.
+     */
+    val methodReturnTypePattern: TypePattern = TypePattern(name = ""),
 
-  /**
-   * Define the method parameters pattern by a list of fully qualified types.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any parameters.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodParameterTypePatterns` also defining parameters.
-   *
-   * @return The list of qualified type names of the method parameters.
-   */
-  val methodParameters: Array<String> = [""],
+    /**
+     * Define the method parameters pattern by a list of fully qualified types.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * parameters.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodParameterTypePatterns` also defining parameters.
+     *
+     * @return The list of qualified type names of the method parameters.
+     */
+    val methodParameters: Array<String> = [""],
 
-  /**
-   * Define the method parameters pattern by a list of patterns on types.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any parameters.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodParameters` also defining parameters.
-   *
-   * @return The list of type patterns for the method parameters.
-   */
-  val methodParameterTypePatterns: Array<TypePattern> = [TypePattern(name = "")],
+    /**
+     * Define the method parameters pattern by a list of patterns on types.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * parameters.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodParameters` also defining parameters.
+     *
+     * @return The list of type patterns for the method parameters.
+     */
+    val methodParameterTypePatterns: Array<TypePattern> = [TypePattern(name = "")],
 
-  /**
-   * Define the field-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassConstant
-   * <li>fieldAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val fieldAnnotatedByClassName: String = "",
+    /**
+     * Define the field-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassConstant
+     * <li>fieldAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val fieldAnnotatedByClassName: String = "",
 
-  /**
-   * Define the field-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassName
-   * <li>fieldAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val fieldAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the field-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassName
+     * <li>fieldAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val fieldAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the field-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassName
-   * <li>fieldAnnotatedByClassConstant
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val fieldAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the field-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassName
+     * <li>fieldAnnotatedByClassConstant
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val fieldAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the field-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field-access
-   * flags.
-   *
-   * @return The field access-flag constraints that must be met.
-   */
-  val fieldAccess: Array<FieldAccessFlags> = [],
+    /**
+     * Define the field-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any
+     * field-access flags.
+     *
+     * @return The field access-flag constraints that must be met.
+     */
+    val fieldAccess: Array<FieldAccessFlags> = [],
 
-  /**
-   * Define the field-name pattern by an exact field name.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field name.
-   *
-   * <p>
-   * Mutually exclusive with the property `fieldNamePattern` also defining field-name.
-   *
-   * @return The exact field name of the field.
-   */
-  val fieldName: String = "",
+    /**
+     * Define the field-name pattern by an exact field name.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any field
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `fieldNamePattern` also defining field-name.
+     *
+     * @return The exact field name of the field.
+     */
+    val fieldName: String = "",
 
-  /**
-   * Define the field-name pattern by a string pattern.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field name.
-   *
-   * <p>
-   * Mutually exclusive with the property `fieldName` also defining field-name.
-   *
-   * @return The string pattern of the field name.
-   */
-  val fieldNamePattern: StringPattern = StringPattern(exact = ""),
+    /**
+     * Define the field-name pattern by a string pattern.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any field
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `fieldName` also defining field-name.
+     *
+     * @return The string pattern of the field name.
+     */
+    val fieldNamePattern: StringPattern = StringPattern(exact = ""),
 
-  /**
-   * Define the field-type pattern by a fully qualified type.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldTypeConstant
-   * <li>fieldTypePattern
-   * </ul>
-   *
-   * @return The qualified type name for the field type.
-   */
-  val fieldType: String = "",
+    /**
+     * Define the field-type pattern by a fully qualified type.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldTypeConstant
+     * <li>fieldTypePattern
+     * </ul>
+     *
+     * @return The qualified type name for the field type.
+     */
+    val fieldType: String = "",
 
-  /**
-   * Define the field-type pattern by a class constant.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldType
-   * <li>fieldTypePattern
-   * </ul>
-   *
-   * @return The class constant for the field type.
-   */
-  val fieldTypeConstant: KClass<*> = Object::class,
+    /**
+     * Define the field-type pattern by a class constant.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldType
+     * <li>fieldTypePattern
+     * </ul>
+     *
+     * @return The class constant for the field type.
+     */
+    val fieldTypeConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the field-type pattern by a pattern on types.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldType
-   * <li>fieldTypeConstant
-   * </ul>
-   *
-   * @return The type pattern for the field type.
-   */
-  val fieldTypePattern: TypePattern = TypePattern(name = ""),
+    /**
+     * Define the field-type pattern by a pattern on types.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldType
+     * <li>fieldTypeConstant
+     * </ul>
+     *
+     * @return The type pattern for the field type.
+     */
+    val fieldTypePattern: TypePattern = TypePattern(name = ""),
 )
diff --git a/src/keepanno/java/androidx/annotation/keep/KeepCondition.kt b/src/keepanno/java/androidx/annotation/keep/KeepCondition.kt
index e149232..58a127e 100644
--- a/src/keepanno/java/androidx/annotation/keep/KeepCondition.kt
+++ b/src/keepanno/java/androidx/annotation/keep/KeepCondition.kt
@@ -43,759 +43,767 @@
 @Target(AnnotationTarget.ANNOTATION_CLASS)
 public annotation class KeepCondition(
 
-  /**
-   * Define the class pattern by reference to a binding.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class:
-   * <ul>
-   * <li>className
-   * <li>classConstant
-   * <li>classNamePattern
-   * <li>instanceOfClassName
-   * <li>instanceOfClassNameExclusive
-   * <li>instanceOfClassConstant
-   * <li>instanceOfClassConstantExclusive
-   * <li>instanceOfPattern
-   * <li>classAnnotatedByClassName
-   * <li>classAnnotatedByClassConstant
-   * <li>classAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class.
-   *
-   * @return The name of the binding that defines the class.
-   */
-  val classFromBinding: String = "",
+    /**
+     * Define the class pattern by reference to a binding.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class:
+     * <ul>
+     * <li>className
+     * <li>classConstant
+     * <li>classNamePattern
+     * <li>instanceOfClassName
+     * <li>instanceOfClassNameExclusive
+     * <li>instanceOfClassConstant
+     * <li>instanceOfClassConstantExclusive
+     * <li>instanceOfPattern
+     * <li>classAnnotatedByClassName
+     * <li>classAnnotatedByClassConstant
+     * <li>classAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class.
+     *
+     * @return The name of the binding that defines the class.
+     */
+    val classFromBinding: String = "",
 
-  /**
-   * Define the class-name pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-name:
-   * <ul>
-   * <li>classConstant
-   * <li>classNamePattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class name.
-   *
-   * @return The qualified class name that defines the class.
-   */
-  val className: String = "",
+    /**
+     * Define the class-name pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-name:
+     * <ul>
+     * <li>classConstant
+     * <li>classNamePattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class name.
+     *
+     * @return The qualified class name that defines the class.
+     */
+    val className: String = "",
 
-  /**
-   * Define the class-name pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-name:
-   * <ul>
-   * <li>className
-   * <li>classNamePattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class name.
-   *
-   * @return The class-constant that defines the class.
-   */
-  val classConstant: KClass<*> = Object::class,
+    /**
+     * Define the class-name pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-name:
+     * <ul>
+     * <li>className
+     * <li>classNamePattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class name.
+     *
+     * @return The class-constant that defines the class.
+     */
+    val classConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the class-name pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-name:
-   * <ul>
-   * <li>className
-   * <li>classConstant
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class name.
-   *
-   * @return The class-name pattern that defines the class.
-   */
-  val classNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the class-name pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-name:
+     * <ul>
+     * <li>className
+     * <li>classConstant
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class name.
+     *
+     * @return The class-name pattern that defines the class.
+     */
+    val classNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the instance-of pattern as classes that are instances of the fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining instance-of:
-   * <ul>
-   * <li>instanceOfClassNameExclusive
-   * <li>instanceOfClassConstant
-   * <li>instanceOfClassConstantExclusive
-   * <li>instanceOfPattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class instance.
-   *
-   * @return The qualified class name that defines what instance-of the class must be.
-   */
-  val instanceOfClassName: String = "",
+    /**
+     * Define the instance-of pattern as classes that are instances of the fully qualified class
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining instance-of:
+     * <ul>
+     * <li>instanceOfClassNameExclusive
+     * <li>instanceOfClassConstant
+     * <li>instanceOfClassConstantExclusive
+     * <li>instanceOfPattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class instance.
+     *
+     * @return The qualified class name that defines what instance-of the class must be.
+     */
+    val instanceOfClassName: String = "",
 
-  /**
-   * Define the instance-of pattern as classes that are instances of the fully qualified class name.
-   *
-   * <p>
-   * The pattern is exclusive in that it does not match classes that are instances of the pattern,
-   * but only those that are instances of classes that are subclasses of the pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining instance-of:
-   * <ul>
-   * <li>instanceOfClassName
-   * <li>instanceOfClassConstant
-   * <li>instanceOfClassConstantExclusive
-   * <li>instanceOfPattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class instance.
-   *
-   * @return The qualified class name that defines what instance-of the class must be.
-   */
-  val instanceOfClassNameExclusive: String = "",
+    /**
+     * Define the instance-of pattern as classes that are instances of the fully qualified class
+     * name.
+     *
+     * <p>
+     * The pattern is exclusive in that it does not match classes that are instances of the pattern,
+     * but only those that are instances of classes that are subclasses of the pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining instance-of:
+     * <ul>
+     * <li>instanceOfClassName
+     * <li>instanceOfClassConstant
+     * <li>instanceOfClassConstantExclusive
+     * <li>instanceOfPattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class instance.
+     *
+     * @return The qualified class name that defines what instance-of the class must be.
+     */
+    val instanceOfClassNameExclusive: String = "",
 
-  /**
-   * Define the instance-of pattern as classes that are instances the referenced Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining instance-of:
-   * <ul>
-   * <li>instanceOfClassName
-   * <li>instanceOfClassNameExclusive
-   * <li>instanceOfClassConstantExclusive
-   * <li>instanceOfPattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class instance.
-   *
-   * @return The class constant that defines what instance-of the class must be.
-   */
-  val instanceOfClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the instance-of pattern as classes that are instances the referenced Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining instance-of:
+     * <ul>
+     * <li>instanceOfClassName
+     * <li>instanceOfClassNameExclusive
+     * <li>instanceOfClassConstantExclusive
+     * <li>instanceOfPattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class instance.
+     *
+     * @return The class constant that defines what instance-of the class must be.
+     */
+    val instanceOfClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the instance-of pattern as classes that are instances the referenced Class constant.
-   *
-   * <p>
-   * The pattern is exclusive in that it does not match classes that are instances of the pattern,
-   * but only those that are instances of classes that are subclasses of the pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining instance-of:
-   * <ul>
-   * <li>instanceOfClassName
-   * <li>instanceOfClassNameExclusive
-   * <li>instanceOfClassConstant
-   * <li>instanceOfPattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class instance.
-   *
-   * @return The class constant that defines what instance-of the class must be.
-   */
-  val instanceOfClassConstantExclusive: KClass<*> = Object::class,
+    /**
+     * Define the instance-of pattern as classes that are instances the referenced Class constant.
+     *
+     * <p>
+     * The pattern is exclusive in that it does not match classes that are instances of the pattern,
+     * but only those that are instances of classes that are subclasses of the pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining instance-of:
+     * <ul>
+     * <li>instanceOfClassName
+     * <li>instanceOfClassNameExclusive
+     * <li>instanceOfClassConstant
+     * <li>instanceOfPattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class instance.
+     *
+     * @return The class constant that defines what instance-of the class must be.
+     */
+    val instanceOfClassConstantExclusive: KClass<*> = Object::class,
 
-  /**
-   * Define the instance-of with a pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining instance-of:
-   * <ul>
-   * <li>instanceOfClassName
-   * <li>instanceOfClassNameExclusive
-   * <li>instanceOfClassConstant
-   * <li>instanceOfClassConstantExclusive
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class instance.
-   *
-   * @return The pattern that defines what instance-of the class must be.
-   */
-  val instanceOfPattern: InstanceOfPattern = InstanceOfPattern(),
+    /**
+     * Define the instance-of with a pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining instance-of:
+     * <ul>
+     * <li>instanceOfClassName
+     * <li>instanceOfClassNameExclusive
+     * <li>instanceOfClassConstant
+     * <li>instanceOfClassConstantExclusive
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class instance.
+     *
+     * @return The pattern that defines what instance-of the class must be.
+     */
+    val instanceOfPattern: InstanceOfPattern = InstanceOfPattern(),
 
-  /**
-   * Define the class-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-annotated-by:
-   * <ul>
-   * <li>classAnnotatedByClassConstant
-   * <li>classAnnotatedByClassNamePattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class regardless of what the class is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val classAnnotatedByClassName: String = "",
+    /**
+     * Define the class-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-annotated-by:
+     * <ul>
+     * <li>classAnnotatedByClassConstant
+     * <li>classAnnotatedByClassNamePattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class regardless of what the class is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val classAnnotatedByClassName: String = "",
 
-  /**
-   * Define the class-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-annotated-by:
-   * <ul>
-   * <li>classAnnotatedByClassName
-   * <li>classAnnotatedByClassNamePattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class regardless of what the class is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val classAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the class-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-annotated-by:
+     * <ul>
+     * <li>classAnnotatedByClassName
+     * <li>classAnnotatedByClassNamePattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class regardless of what the class is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val classAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the class-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-annotated-by:
-   * <ul>
-   * <li>classAnnotatedByClassName
-   * <li>classAnnotatedByClassConstant
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class regardless of what the class is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val classAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the class-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-annotated-by:
+     * <ul>
+     * <li>classAnnotatedByClassName
+     * <li>classAnnotatedByClassConstant
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class regardless of what the class is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val classAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the member pattern in full by a reference to a binding.
-   *
-   * <p>
-   * Mutually exclusive with all other class and member pattern properties. When a member binding is
-   * referenced this item is defined to be that item, including its class and member patterns.
-   *
-   * @return The binding name that defines the member.
-   */
-  val memberFromBinding: String = "",
+    /**
+     * Define the member pattern in full by a reference to a binding.
+     *
+     * <p>
+     * Mutually exclusive with all other class and member pattern properties. When a member binding
+     * is referenced this item is defined to be that item, including its class and member patterns.
+     *
+     * @return The binding name that defines the member.
+     */
+    val memberFromBinding: String = "",
 
-  /**
-   * Define the member-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassConstant
-   * <li>memberAnnotatedByClassNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val memberAnnotatedByClassName: String = "",
+    /**
+     * Define the member-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassConstant
+     * <li>memberAnnotatedByClassNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val memberAnnotatedByClassName: String = "",
 
-  /**
-   * Define the member-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassName
-   * <li>memberAnnotatedByClassNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val memberAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the member-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassName
+     * <li>memberAnnotatedByClassNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val memberAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the member-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassName
-   * <li>memberAnnotatedByClassConstant
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val memberAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the member-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassName
+     * <li>memberAnnotatedByClassConstant
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val memberAnnotatedByClassNamePattern: ClassNamePattern =
+        ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the member-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * Mutually exclusive with the property `memberFromBinding` also defining member-access.
-   *
-   * @return The member access-flag constraints that must be met.
-   */
-  val memberAccess: Array<MemberAccessFlags> = [],
+    /**
+     * Define the member-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * Mutually exclusive with the property `memberFromBinding` also defining member-access.
+     *
+     * @return The member access-flag constraints that must be met.
+     */
+    val memberAccess: Array<MemberAccessFlags> = [],
 
-  /**
-   * Define the method-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassConstant
-   * <li>methodAnnotatedByClassNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val methodAnnotatedByClassName: String = "",
+    /**
+     * Define the method-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassConstant
+     * <li>methodAnnotatedByClassNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val methodAnnotatedByClassName: String = "",
 
-  /**
-   * Define the method-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassName
-   * <li>methodAnnotatedByClassNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val methodAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the method-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassName
+     * <li>methodAnnotatedByClassNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val methodAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the method-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassName
-   * <li>methodAnnotatedByClassConstant
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val methodAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the method-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassName
+     * <li>methodAnnotatedByClassConstant
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val methodAnnotatedByClassNamePattern: ClassNamePattern =
+        ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the method-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any
-   * method-access flags.
-   *
-   * <p>
-   * Mutually exclusive with the property `memberFromBinding` also defining method-access.
-   *
-   * @return The method access-flag constraints that must be met.
-   */
-  val methodAccess: Array<MethodAccessFlags> = [],
+    /**
+     * Define the method-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * method-access flags.
+     *
+     * <p>
+     * Mutually exclusive with the property `memberFromBinding` also defining method-access.
+     *
+     * @return The method access-flag constraints that must be met.
+     */
+    val methodAccess: Array<MethodAccessFlags> = [],
 
-  /**
-   * Define the method-name pattern by an exact method name.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any method
-   * name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-name:
-   * <ul>
-   * <li>methodNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The exact method name of the method.
-   */
-  val methodName: String = "",
+    /**
+     * Define the method-name pattern by an exact method name.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any method
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-name:
+     * <ul>
+     * <li>methodNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The exact method name of the method.
+     */
+    val methodName: String = "",
 
-  /**
-   * Define the method-name pattern by a string pattern.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any method
-   * name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-name:
-   * <ul>
-   * <li>methodName
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The string pattern of the method name.
-   */
-  val methodNamePattern: StringPattern = StringPattern(exact = ""),
+    /**
+     * Define the method-name pattern by a string pattern.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any method
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-name:
+     * <ul>
+     * <li>methodName
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The string pattern of the method name.
+     */
+    val methodNamePattern: StringPattern = StringPattern(exact = ""),
 
-  /**
-   * Define the method return-type pattern by a fully qualified type or 'void'.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnTypeConstant
-   * <li>methodReturnTypePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The qualified type name of the method return type.
-   */
-  val methodReturnType: String = "",
+    /**
+     * Define the method return-type pattern by a fully qualified type or 'void'.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnTypeConstant
+     * <li>methodReturnTypePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The qualified type name of the method return type.
+     */
+    val methodReturnType: String = "",
 
-  /**
-   * Define the method return-type pattern by a class constant.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnType
-   * <li>methodReturnTypePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return A class constant denoting the type of the method return type.
-   */
-  val methodReturnTypeConstant: KClass<*> = Object::class,
+    /**
+     * Define the method return-type pattern by a class constant.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnType
+     * <li>methodReturnTypePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return A class constant denoting the type of the method return type.
+     */
+    val methodReturnTypeConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the method return-type pattern by a type pattern.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnType
-   * <li>methodReturnTypeConstant
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The pattern of the method return type.
-   */
-  val methodReturnTypePattern: TypePattern = TypePattern(name = ""),
+    /**
+     * Define the method return-type pattern by a type pattern.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnType
+     * <li>methodReturnTypeConstant
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The pattern of the method return type.
+     */
+    val methodReturnTypePattern: TypePattern = TypePattern(name = ""),
 
-  /**
-   * Define the method parameters pattern by a list of fully qualified types.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any parameters.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining parameters:
-   * <ul>
-   * <li>methodParameterTypePatterns
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The list of qualified type names of the method parameters.
-   */
-  val methodParameters: Array<String> = [""],
+    /**
+     * Define the method parameters pattern by a list of fully qualified types.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * parameters.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining parameters:
+     * <ul>
+     * <li>methodParameterTypePatterns
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The list of qualified type names of the method parameters.
+     */
+    val methodParameters: Array<String> = [""],
 
-  /**
-   * Define the method parameters pattern by a list of patterns on types.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any parameters.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining parameters:
-   * <ul>
-   * <li>methodParameters
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The list of type patterns for the method parameters.
-   */
-  val methodParameterTypePatterns: Array<TypePattern> = [TypePattern(name = "")],
+    /**
+     * Define the method parameters pattern by a list of patterns on types.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * parameters.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining parameters:
+     * <ul>
+     * <li>methodParameters
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The list of type patterns for the method parameters.
+     */
+    val methodParameterTypePatterns: Array<TypePattern> = [TypePattern(name = "")],
 
-  /**
-   * Define the field-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassConstant
-   * <li>fieldAnnotatedByClassNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val fieldAnnotatedByClassName: String = "",
+    /**
+     * Define the field-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassConstant
+     * <li>fieldAnnotatedByClassNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val fieldAnnotatedByClassName: String = "",
 
-  /**
-   * Define the field-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassName
-   * <li>fieldAnnotatedByClassNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val fieldAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the field-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassName
+     * <li>fieldAnnotatedByClassNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val fieldAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the field-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassName
-   * <li>fieldAnnotatedByClassConstant
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val fieldAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the field-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassName
+     * <li>fieldAnnotatedByClassConstant
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val fieldAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the field-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field-access
-   * flags.
-   *
-   * <p>
-   * Mutually exclusive with the property `memberFromBinding` also defining field-access.
-   *
-   * @return The field access-flag constraints that must be met.
-   */
-  val fieldAccess: Array<FieldAccessFlags> = [],
+    /**
+     * Define the field-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any
+     * field-access flags.
+     *
+     * <p>
+     * Mutually exclusive with the property `memberFromBinding` also defining field-access.
+     *
+     * @return The field access-flag constraints that must be met.
+     */
+    val fieldAccess: Array<FieldAccessFlags> = [],
 
-  /**
-   * Define the field-name pattern by an exact field name.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-name:
-   * <ul>
-   * <li>fieldNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The exact field name of the field.
-   */
-  val fieldName: String = "",
+    /**
+     * Define the field-name pattern by an exact field name.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any field
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-name:
+     * <ul>
+     * <li>fieldNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The exact field name of the field.
+     */
+    val fieldName: String = "",
 
-  /**
-   * Define the field-name pattern by a string pattern.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-name:
-   * <ul>
-   * <li>fieldName
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The string pattern of the field name.
-   */
-  val fieldNamePattern: StringPattern = StringPattern(exact = ""),
+    /**
+     * Define the field-name pattern by a string pattern.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any field
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-name:
+     * <ul>
+     * <li>fieldName
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The string pattern of the field name.
+     */
+    val fieldNamePattern: StringPattern = StringPattern(exact = ""),
 
-  /**
-   * Define the field-type pattern by a fully qualified type.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldTypeConstant
-   * <li>fieldTypePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The qualified type name for the field type.
-   */
-  val fieldType: String = "",
+    /**
+     * Define the field-type pattern by a fully qualified type.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldTypeConstant
+     * <li>fieldTypePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The qualified type name for the field type.
+     */
+    val fieldType: String = "",
 
-  /**
-   * Define the field-type pattern by a class constant.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldType
-   * <li>fieldTypePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The class constant for the field type.
-   */
-  val fieldTypeConstant: KClass<*> = Object::class,
+    /**
+     * Define the field-type pattern by a class constant.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldType
+     * <li>fieldTypePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The class constant for the field type.
+     */
+    val fieldTypeConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the field-type pattern by a pattern on types.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldType
-   * <li>fieldTypeConstant
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The type pattern for the field type.
-   */
-  val fieldTypePattern: TypePattern = TypePattern(name = ""),
+    /**
+     * Define the field-type pattern by a pattern on types.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldType
+     * <li>fieldTypeConstant
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The type pattern for the field type.
+     */
+    val fieldTypePattern: TypePattern = TypePattern(name = ""),
 )
diff --git a/src/keepanno/java/androidx/annotation/keep/KeepConstraint.kt b/src/keepanno/java/androidx/annotation/keep/KeepConstraint.kt
index f98d91b..a1aef00 100644
--- a/src/keepanno/java/androidx/annotation/keep/KeepConstraint.kt
+++ b/src/keepanno/java/androidx/annotation/keep/KeepConstraint.kt
@@ -31,210 +31,211 @@
  * method.
  */
 public enum class KeepConstraint {
-  /**
-   * Indicates that the target item is being looked up reflectively.
-   *
-   * <p>Looking up an item reflectively requires that it remains on its expected context, which for
-   * a method or field means it must remain on its defining class. In other words, the item cannot
-   * be removed or moved.
-   *
-   * <p>Note that looking up a member does not imply that the holder class of the member can be
-   * looked up. If both the class and the member need to be looked, make sure to have a target for
-   * both.
-   *
-   * <p>Note also that the item can be looked up within its context but no constraint is placed on
-   * its name, accessibility or any other properties of the item.
-   *
-   * <p>If assumptions are being made about other aspects, additional constraints and targets should
-   * be added to the keep annotation.
-   */
-  LOOKUP,
+    /**
+     * Indicates that the target item is being looked up reflectively.
+     *
+     * <p>Looking up an item reflectively requires that it remains on its expected context, which
+     * for a method or field means it must remain on its defining class. In other words, the item
+     * cannot be removed or moved.
+     *
+     * <p>Note that looking up a member does not imply that the holder class of the member can be
+     * looked up. If both the class and the member need to be looked, make sure to have a target for
+     * both.
+     *
+     * <p>Note also that the item can be looked up within its context but no constraint is placed on
+     * its name, accessibility or any other properties of the item.
+     *
+     * <p>If assumptions are being made about other aspects, additional constraints and targets
+     * should be added to the keep annotation.
+     */
+    LOOKUP,
 
-  /**
-   * Indicates that the name of the target item is being used.
-   *
-   * <p>This usage constraint is needed if the target is being looked up reflectively by using its
-   * name. Setting it will prohibit renaming of the target item.
-   *
-   * <p>Note that preserving the name of a member does not imply that the holder class of the member
-   * will preserve its qualified or simple name. If both the class and the member need to preserve
-   * their names, make sure to have a target for both.
-   *
-   * <p>Note that preserving the name of a member does not preserve the types of its parameters or
-   * its return type for methods or the type for fields.
-   */
-  NAME,
+    /**
+     * Indicates that the name of the target item is being used.
+     *
+     * <p>This usage constraint is needed if the target is being looked up reflectively by using its
+     * name. Setting it will prohibit renaming of the target item.
+     *
+     * <p>Note that preserving the name of a member does not imply that the holder class of the
+     * member will preserve its qualified or simple name. If both the class and the member need to
+     * preserve their names, make sure to have a target for both.
+     *
+     * <p>Note that preserving the name of a member does not preserve the types of its parameters or
+     * its return type for methods or the type for fields.
+     */
+    NAME,
 
-  /**
-   * Indicates that the visibility of the target must be at least as visible as declared.
-   *
-   * <p>Setting this constraint ensures that any (reflective) access to the target that is allowed
-   * remains valid. In other words, a public class, field or method must remain public. For a
-   * non-public target its visibility may be relaxed in the direction: {@code private ->
-   * package-private -> protected -> public}.
-   *
-   * <p>Note that this constraint does not place any restrictions on any other accesses flags than
-   * visibility. In particular, flags such a static, final and abstract may change.
-   *
-   * <p>Used together with {@link #VISIBILITY_RESTRICT} the visibility will remain invariant.
-   */
-  VISIBILITY_RELAX,
+    /**
+     * Indicates that the visibility of the target must be at least as visible as declared.
+     *
+     * <p>Setting this constraint ensures that any (reflective) access to the target that is allowed
+     * remains valid. In other words, a public class, field or method must remain public. For a
+     * non-public target its visibility may be relaxed in the direction: {@code private ->
+     * package-private -> protected -> public}.
+     *
+     * <p>Note that this constraint does not place any restrictions on any other accesses flags than
+     * visibility. In particular, flags such a static, final and abstract may change.
+     *
+     * <p>Used together with {@link #VISIBILITY_RESTRICT} the visibility will remain invariant.
+     */
+    VISIBILITY_RELAX,
 
-  /**
-   * Indicates that the visibility of the target must be at most as visible as declared.
-   *
-   * <p>Setting this constraint ensures that any (reflective) access to the target that would fail
-   * will continue to fail. In other words, a private class, field or method must remain private.
-   * Concretely the visibility of the target item may be restricted in the direction: {@code public
-   * -> protected -> package-private -> private}.
-   *
-   * <p>Note that this constraint does not place any restrictions on any other accesses flags than
-   * visibility. In particular, flags such a static, final and abstract may change.
-   *
-   * <p>Used together with {@link #VISIBILITY_RELAX} the visibility will remain invariant.
-   */
-  VISIBILITY_RESTRICT,
+    /**
+     * Indicates that the visibility of the target must be at most as visible as declared.
+     *
+     * <p>Setting this constraint ensures that any (reflective) access to the target that would fail
+     * will continue to fail. In other words, a private class, field or method must remain private.
+     * Concretely the visibility of the target item may be restricted in the direction: {@code
+     * public -> protected -> package-private -> private}.
+     *
+     * <p>Note that this constraint does not place any restrictions on any other accesses flags than
+     * visibility. In particular, flags such a static, final and abstract may change.
+     *
+     * <p>Used together with {@link #VISIBILITY_RELAX} the visibility will remain invariant.
+     */
+    VISIBILITY_RESTRICT,
 
-  /**
-   * Indicates that the visibility of the target must remain as declared.
-   *
-   * <p>Note that this constraint does not place any restrictions on any other accesses flags than
-   * visibility. In particular, flags such a static, final and abstract may change.
-   *
-   * <p>This is equivalent to using both {@link #VISIBILITY_RELAX} and {@link #VISIBILITY_RESTRICT}.
-   */
-  VISIBILITY_INVARIANT,
+    /**
+     * Indicates that the visibility of the target must remain as declared.
+     *
+     * <p>Note that this constraint does not place any restrictions on any other accesses flags than
+     * visibility. In particular, flags such a static, final and abstract may change.
+     *
+     * <p>This is equivalent to using both {@link #VISIBILITY_RELAX} and
+     * {@link #VISIBILITY_RESTRICT}.
+     */
+    VISIBILITY_INVARIANT,
 
-  /**
-   * Indicates that the class target is being instantiated reflectively.
-   *
-   * <p>This usage constraint is only valid on class targets.
-   *
-   * <p>Being instantiated prohibits reasoning about the class instances at compile time. In other
-   * words, the compiler must assume the class to be possibly instantiated at all times.
-   *
-   * <p>Note that the constraint {@link KeepConstraint#LOOKUP} is needed to reflectively obtain a
-   * class. This constraint only implies that if the class is referenced in the program it may be
-   * instantiated.
-   */
-  CLASS_INSTANTIATE,
+    /**
+     * Indicates that the class target is being instantiated reflectively.
+     *
+     * <p>This usage constraint is only valid on class targets.
+     *
+     * <p>Being instantiated prohibits reasoning about the class instances at compile time. In other
+     * words, the compiler must assume the class to be possibly instantiated at all times.
+     *
+     * <p>Note that the constraint {@link KeepConstraint#LOOKUP} is needed to reflectively obtain a
+     * class. This constraint only implies that if the class is referenced in the program it may be
+     * instantiated.
+     */
+    CLASS_INSTANTIATE,
 
-  /**
-   * Indicates that the method target is being invoked reflectively.
-   *
-   * <p>This usage constraint is only valid on method targets.
-   *
-   * <p>To be invoked reflectively the method must retain the structure of the method. Thus, unused
-   * arguments cannot be removed. However, it does not imply preserving the types of its parameters
-   * or its return type. If the parameter types are being obtained reflectively then those need a
-   * keep target independent of the method.
-   *
-   * <p>Note that the constraint {@link KeepConstraint#LOOKUP} is needed to reflectively obtain a
-   * method reference. This constraint only implies that if the method is referenced in the program
-   * it may be reflectively invoked.
-   */
-  METHOD_INVOKE,
+    /**
+     * Indicates that the method target is being invoked reflectively.
+     *
+     * <p>This usage constraint is only valid on method targets.
+     *
+     * <p>To be invoked reflectively the method must retain the structure of the method. Thus,
+     * unused arguments cannot be removed. However, it does not imply preserving the types of its
+     * parameters or its return type. If the parameter types are being obtained reflectively then
+     * those need a keep target independent of the method.
+     *
+     * <p>Note that the constraint {@link KeepConstraint#LOOKUP} is needed to reflectively obtain a
+     * method reference. This constraint only implies that if the method is referenced in the
+     * program it may be reflectively invoked.
+     */
+    METHOD_INVOKE,
 
-  /**
-   * Indicates that the field target is reflectively read from.
-   *
-   * <p>This usage constraint is only valid on field targets.
-   *
-   * <p>A field that has its value read from, requires that the field value must remain. Thus, if
-   * field remains, its value cannot be replaced. It can still be removed in full, be inlined and
-   * its value reasoned about at compile time.
-   *
-   * <p>Note that the constraint {@link KeepConstraint#LOOKUP} is needed to reflectively obtain
-   * access to the field. This constraint only implies that if a field is referenced then it may be
-   * reflectively read.
-   */
-  FIELD_GET,
+    /**
+     * Indicates that the field target is reflectively read from.
+     *
+     * <p>This usage constraint is only valid on field targets.
+     *
+     * <p>A field that has its value read from, requires that the field value must remain. Thus, if
+     * field remains, its value cannot be replaced. It can still be removed in full, be inlined and
+     * its value reasoned about at compile time.
+     *
+     * <p>Note that the constraint {@link KeepConstraint#LOOKUP} is needed to reflectively obtain
+     * access to the field. This constraint only implies that if a field is referenced then it may
+     * be reflectively read.
+     */
+    FIELD_GET,
 
-  /**
-   * Indicates that the field target is reflectively written to.
-   *
-   * <p>This usage constraint is only valid on field targets.
-   *
-   * <p>A field that has its value written to, requires that the field value must be treated as
-   * unknown.
-   *
-   * <p>Note that the constraint {@link KeepConstraint#LOOKUP} is needed to reflectively obtain
-   * access to the field. This constraint only implies that if a field is referenced then it may be
-   * reflectively written.
-   */
-  FIELD_SET,
+    /**
+     * Indicates that the field target is reflectively written to.
+     *
+     * <p>This usage constraint is only valid on field targets.
+     *
+     * <p>A field that has its value written to, requires that the field value must be treated as
+     * unknown.
+     *
+     * <p>Note that the constraint {@link KeepConstraint#LOOKUP} is needed to reflectively obtain
+     * access to the field. This constraint only implies that if a field is referenced then it may
+     * be reflectively written.
+     */
+    FIELD_SET,
 
-  /**
-   * Indicates that the target method can be replaced by an alternative definition at runtime.
-   *
-   * <p>This usage constraint is only valid on method targets.
-   *
-   * <p>Replacing a method implies that the concrete implementation of the target cannot be known at
-   * compile time. Thus, it cannot be moved or otherwise assumed to have particular properties.
-   * Being able to replace the method still allows the compiler to fully remove it if it is
-   * statically found to be unused.
-   *
-   * <p>Note also that no restriction is placed on the method name. To ensure the same name add
-   * {@link #NAME} to the constraint set.
-   */
-  METHOD_REPLACE,
+    /**
+     * Indicates that the target method can be replaced by an alternative definition at runtime.
+     *
+     * <p>This usage constraint is only valid on method targets.
+     *
+     * <p>Replacing a method implies that the concrete implementation of the target cannot be known
+     * at compile time. Thus, it cannot be moved or otherwise assumed to have particular properties.
+     * Being able to replace the method still allows the compiler to fully remove it if it is
+     * statically found to be unused.
+     *
+     * <p>Note also that no restriction is placed on the method name. To ensure the same name add
+     * {@link #NAME} to the constraint set.
+     */
+    METHOD_REPLACE,
 
-  /**
-   * Indicates that the target field can be replaced by an alternative definition at runtime.
-   *
-   * <p>This usage constraint is only valid on field targets.
-   *
-   * <p>Replacing a field implies that the concrete implementation of the target cannot be known at
-   * compile time. Thus, it cannot be moved or otherwise assumed to have particular properties.
-   * Being able to replace the method still allows the compiler to fully remove it if it is
-   * statically found to be unused.
-   *
-   * <p>Note also that no restriction is placed on the field name. To ensure the same name add
-   * {@link #NAME} to the constraint set.
-   */
-  FIELD_REPLACE,
+    /**
+     * Indicates that the target field can be replaced by an alternative definition at runtime.
+     *
+     * <p>This usage constraint is only valid on field targets.
+     *
+     * <p>Replacing a field implies that the concrete implementation of the target cannot be known
+     * at compile time. Thus, it cannot be moved or otherwise assumed to have particular properties.
+     * Being able to replace the method still allows the compiler to fully remove it if it is
+     * statically found to be unused.
+     *
+     * <p>Note also that no restriction is placed on the field name. To ensure the same name add
+     * {@link #NAME} to the constraint set.
+     */
+    FIELD_REPLACE,
 
-  /**
-   * Indicates that the target item must never be inlined or merged.
-   *
-   * <p>This ensures that if the item is actually used in the program it will remain in some form.
-   * For example, a method may still be renamed, but it will be present as a frame in stack traces
-   * produced by the runtime (before potentially being retraced). For classes, they too may be
-   * renamed, but will not have been merged with other classes or have their allocations fully
-   * eliminated (aka class inlining).
-   *
-   * <p>For members this also ensures that the field value or method body cannot be reasoned about
-   * outside the item itself. For example, a field value cannot be assumed to be a particular value,
-   * and a method cannot be assumed to have particular properties for callers, such as always
-   * throwing or a constant return value.
-   */
-  NEVER_INLINE,
+    /**
+     * Indicates that the target item must never be inlined or merged.
+     *
+     * <p>This ensures that if the item is actually used in the program it will remain in some form.
+     * For example, a method may still be renamed, but it will be present as a frame in stack traces
+     * produced by the runtime (before potentially being retraced). For classes, they too may be
+     * renamed, but will not have been merged with other classes or have their allocations fully
+     * eliminated (aka class inlining).
+     *
+     * <p>For members this also ensures that the field value or method body cannot be reasoned about
+     * outside the item itself. For example, a field value cannot be assumed to be a particular
+     * value, and a method cannot be assumed to have particular properties for callers, such as
+     * always throwing or a constant return value.
+     */
+    NEVER_INLINE,
 
-  /**
-   * Indicates that the class hierarchy below the target class may be extended at runtime.
-   *
-   * <p>This ensures that new subtypes of the target class can later be linked and/or class loaded
-   * at runtime.
-   *
-   * <p>This does not ensure that the class remains if it is otherwise dead code and can be fully
-   * removed.
-   *
-   * <p>Note that this constraint does not ensure that particular methods remain on the target
-   * class. If methods or fields of the target class are being targeted by a subclass that was
-   * classloaded or linked later, then keep annotations are needed for those targets too. Such
-   * non-visible uses requires the same annotations to preserve as for reflective uses.
-   */
-  CLASS_OPEN_HIERARCHY,
+    /**
+     * Indicates that the class hierarchy below the target class may be extended at runtime.
+     *
+     * <p>This ensures that new subtypes of the target class can later be linked and/or class loaded
+     * at runtime.
+     *
+     * <p>This does not ensure that the class remains if it is otherwise dead code and can be fully
+     * removed.
+     *
+     * <p>Note that this constraint does not ensure that particular methods remain on the target
+     * class. If methods or fields of the target class are being targeted by a subclass that was
+     * classloaded or linked later, then keep annotations are needed for those targets too. Such
+     * non-visible uses requires the same annotations to preserve as for reflective uses.
+     */
+    CLASS_OPEN_HIERARCHY,
 
-  /**
-   * Indicates that the target item must retain its generic signature if present.
-   *
-   * <p>This ensures that the generic signature remains, but does not prohibit rewriting of the
-   * generic signature. For example, if a type present in the generic signature is renamed, the
-   * generic signature will also be updated to now refer to the type by its renamed name.
-   *
-   * <p>Note that this constraint does not otherwise restrict what can be done to the target, such
-   * as removing the target completely, inlining it, etc.
-   */
-  GENERIC_SIGNATURE,
+    /**
+     * Indicates that the target item must retain its generic signature if present.
+     *
+     * <p>This ensures that the generic signature remains, but does not prohibit rewriting of the
+     * generic signature. For example, if a type present in the generic signature is renamed, the
+     * generic signature will also be updated to now refer to the type by its renamed name.
+     *
+     * <p>Note that this constraint does not otherwise restrict what can be done to the target, such
+     * as removing the target completely, inlining it, etc.
+     */
+    GENERIC_SIGNATURE,
 }
diff --git a/src/keepanno/java/androidx/annotation/keep/KeepEdge.kt b/src/keepanno/java/androidx/annotation/keep/KeepEdge.kt
index dc30799..1f3af1f 100644
--- a/src/keepanno/java/androidx/annotation/keep/KeepEdge.kt
+++ b/src/keepanno/java/androidx/annotation/keep/KeepEdge.kt
@@ -25,16 +25,16 @@
 
 @Retention(AnnotationRetention.BINARY)
 @Target(
-  AnnotationTarget.TYPE,
-  AnnotationTarget.FIELD,
-  AnnotationTarget.FUNCTION,
-  AnnotationTarget.CONSTRUCTOR,
+    AnnotationTarget.TYPE,
+    AnnotationTarget.FIELD,
+    AnnotationTarget.FUNCTION,
+    AnnotationTarget.CONSTRUCTOR,
 )
 public annotation class KeepEdge(
-  val description: String = "",
+    val description: String = "",
 
-  //   val retention : Array<RetentionPolicy> = [RetentionPolicy.RUNTIME]
-  val bindings: Array<KeepBinding> = [],
-  val preconditions: Array<KeepCondition> = [],
-  val consequences: Array<KeepTarget> = [],
+    //   val retention : Array<RetentionPolicy> = [RetentionPolicy.RUNTIME]
+    val bindings: Array<KeepBinding> = [],
+    val preconditions: Array<KeepCondition> = [],
+    val consequences: Array<KeepTarget> = [],
 )
diff --git a/src/keepanno/java/androidx/annotation/keep/KeepForApi.kt b/src/keepanno/java/androidx/annotation/keep/KeepForApi.kt
index aecd426..1c27695 100644
--- a/src/keepanno/java/androidx/annotation/keep/KeepForApi.kt
+++ b/src/keepanno/java/androidx/annotation/keep/KeepForApi.kt
@@ -42,494 +42,501 @@
  */
 @Retention(AnnotationRetention.BINARY)
 @Target(
-  AnnotationTarget.CLASS,
-  AnnotationTarget.FIELD,
-  AnnotationTarget.FUNCTION,
-  AnnotationTarget.CONSTRUCTOR,
+    AnnotationTarget.CLASS,
+    AnnotationTarget.FIELD,
+    AnnotationTarget.FUNCTION,
+    AnnotationTarget.CONSTRUCTOR,
 )
 public annotation class KeepForApi(
 
-  /**
-   * Optional description to document the reason for this annotation.
-   *
-   * @return The descriptive message. Defaults to no description.
-   */
-  val description: String = "",
+    /**
+     * Optional description to document the reason for this annotation.
+     *
+     * @return The descriptive message. Defaults to no description.
+     */
+    val description: String = "",
 
-  /**
-   * Additional targets to be kept as part of the API surface.
-   *
-   * @return List of additional target consequences. Defaults to no additional target consequences.
-   */
-  val additionalTargets: Array<KeepTarget> = [],
+    /**
+     * Additional targets to be kept as part of the API surface.
+     *
+     * @return List of additional target consequences. Defaults to no additional target
+     *   consequences.
+     */
+    val additionalTargets: Array<KeepTarget> = [],
 
-  /**
-   * Specify the kind of this item pattern.
-   *
-   * <p>
-   * Default kind is {@link KeepItemKind#CLASS_AND_MEMBERS}, meaning the annotated class and/or
-   * member is to be kept. When annotating a class this can be set to {@link
-   * KeepItemKind#ONLY_CLASS} to avoid patterns on any members. That can be useful when the API
-   * members are themselves explicitly annotated.
-   *
-   * <p>
-   * It is not possible to use {@link KeepItemKind#ONLY_CLASS} if annotating a member. Also, it is
-   * never valid to use kind {@link KeepItemKind#ONLY_MEMBERS} as the API surface must keep the
-   * class if any member is to be accessible.
-   *
-   * @return The kind for this pattern.
-   */
-  val kind: KeepItemKind = KeepItemKind.DEFAULT,
+    /**
+     * Specify the kind of this item pattern.
+     *
+     * <p>
+     * Default kind is {@link KeepItemKind#CLASS_AND_MEMBERS}, meaning the annotated class and/or
+     * member is to be kept. When annotating a class this can be set to {@link
+     * KeepItemKind#ONLY_CLASS} to avoid patterns on any members. That can be useful when the API
+     * members are themselves explicitly annotated.
+     *
+     * <p>
+     * It is not possible to use {@link KeepItemKind#ONLY_CLASS} if annotating a member. Also, it is
+     * never valid to use kind {@link KeepItemKind#ONLY_MEMBERS} as the API surface must keep the
+     * class if any member is to be accessible.
+     *
+     * @return The kind for this pattern.
+     */
+    val kind: KeepItemKind = KeepItemKind.DEFAULT,
 
-  /**
-   * Define the member-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassConstant
-   * <li>memberAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val memberAnnotatedByClassName: String = "",
+    /**
+     * Define the member-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassConstant
+     * <li>memberAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val memberAnnotatedByClassName: String = "",
 
-  /**
-   * Define the member-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassName
-   * <li>memberAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val memberAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the member-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassName
+     * <li>memberAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val memberAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the member-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassName
-   * <li>memberAnnotatedByClassConstant
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val memberAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the member-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassName
+     * <li>memberAnnotatedByClassConstant
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val memberAnnotatedByClassNamePattern: ClassNamePattern =
+        ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the member-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * @return The member access-flag constraints that must be met.
-   */
-  val memberAccess: Array<MemberAccessFlags> = [],
+    /**
+     * Define the member-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * @return The member access-flag constraints that must be met.
+     */
+    val memberAccess: Array<MemberAccessFlags> = [],
 
-  /**
-   * Define the method-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassConstant
-   * <li>methodAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val methodAnnotatedByClassName: String = "",
+    /**
+     * Define the method-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassConstant
+     * <li>methodAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val methodAnnotatedByClassName: String = "",
 
-  /**
-   * Define the method-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassName
-   * <li>methodAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val methodAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the method-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassName
+     * <li>methodAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val methodAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the method-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassName
-   * <li>methodAnnotatedByClassConstant
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val methodAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the method-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassName
+     * <li>methodAnnotatedByClassConstant
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val methodAnnotatedByClassNamePattern: ClassNamePattern =
+        ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the method-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any
-   * method-access flags.
-   *
-   * @return The method access-flag constraints that must be met.
-   */
-  val methodAccess: Array<MethodAccessFlags> = [],
+    /**
+     * Define the method-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * method-access flags.
+     *
+     * @return The method access-flag constraints that must be met.
+     */
+    val methodAccess: Array<MethodAccessFlags> = [],
 
-  /**
-   * Define the method-name pattern by an exact method name.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any method
-   * name.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodNamePattern` also defining method-name.
-   *
-   * @return The exact method name of the method.
-   */
-  val methodName: String = "",
+    /**
+     * Define the method-name pattern by an exact method name.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any method
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodNamePattern` also defining method-name.
+     *
+     * @return The exact method name of the method.
+     */
+    val methodName: String = "",
 
-  /**
-   * Define the method-name pattern by a string pattern.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any method
-   * name.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodName` also defining method-name.
-   *
-   * @return The string pattern of the method name.
-   */
-  val methodNamePattern: StringPattern = StringPattern(exact = ""),
+    /**
+     * Define the method-name pattern by a string pattern.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any method
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodName` also defining method-name.
+     *
+     * @return The string pattern of the method name.
+     */
+    val methodNamePattern: StringPattern = StringPattern(exact = ""),
 
-  /**
-   * Define the method return-type pattern by a fully qualified type or 'void'.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnTypeConstant
-   * <li>methodReturnTypePattern
-   * </ul>
-   *
-   * @return The qualified type name of the method return type.
-   */
-  val methodReturnType: String = "",
+    /**
+     * Define the method return-type pattern by a fully qualified type or 'void'.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnTypeConstant
+     * <li>methodReturnTypePattern
+     * </ul>
+     *
+     * @return The qualified type name of the method return type.
+     */
+    val methodReturnType: String = "",
 
-  /**
-   * Define the method return-type pattern by a class constant.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnType
-   * <li>methodReturnTypePattern
-   * </ul>
-   *
-   * @return A class constant denoting the type of the method return type.
-   */
-  val methodReturnTypeConstant: KClass<*> = Object::class,
+    /**
+     * Define the method return-type pattern by a class constant.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnType
+     * <li>methodReturnTypePattern
+     * </ul>
+     *
+     * @return A class constant denoting the type of the method return type.
+     */
+    val methodReturnTypeConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the method return-type pattern by a type pattern.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnType
-   * <li>methodReturnTypeConstant
-   * </ul>
-   *
-   * @return The pattern of the method return type.
-   */
-  val methodReturnTypePattern: TypePattern = TypePattern(name = ""),
+    /**
+     * Define the method return-type pattern by a type pattern.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnType
+     * <li>methodReturnTypeConstant
+     * </ul>
+     *
+     * @return The pattern of the method return type.
+     */
+    val methodReturnTypePattern: TypePattern = TypePattern(name = ""),
 
-  /**
-   * Define the method parameters pattern by a list of fully qualified types.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any parameters.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodParameterTypePatterns` also defining parameters.
-   *
-   * @return The list of qualified type names of the method parameters.
-   */
-  val methodParameters: Array<String> = [""],
+    /**
+     * Define the method parameters pattern by a list of fully qualified types.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * parameters.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodParameterTypePatterns` also defining parameters.
+     *
+     * @return The list of qualified type names of the method parameters.
+     */
+    val methodParameters: Array<String> = [""],
 
-  /**
-   * Define the method parameters pattern by a list of patterns on types.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any parameters.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodParameters` also defining parameters.
-   *
-   * @return The list of type patterns for the method parameters.
-   */
-  val methodParameterTypePatterns: Array<TypePattern> = [TypePattern(name = "")],
+    /**
+     * Define the method parameters pattern by a list of patterns on types.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * parameters.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodParameters` also defining parameters.
+     *
+     * @return The list of type patterns for the method parameters.
+     */
+    val methodParameterTypePatterns: Array<TypePattern> = [TypePattern(name = "")],
 
-  /**
-   * Define the field-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassConstant
-   * <li>fieldAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val fieldAnnotatedByClassName: String = "",
+    /**
+     * Define the field-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassConstant
+     * <li>fieldAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val fieldAnnotatedByClassName: String = "",
 
-  /**
-   * Define the field-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassName
-   * <li>fieldAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val fieldAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the field-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassName
+     * <li>fieldAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val fieldAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the field-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassName
-   * <li>fieldAnnotatedByClassConstant
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val fieldAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the field-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassName
+     * <li>fieldAnnotatedByClassConstant
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val fieldAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the field-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field-access
-   * flags.
-   *
-   * @return The field access-flag constraints that must be met.
-   */
-  val fieldAccess: Array<FieldAccessFlags> = [],
+    /**
+     * Define the field-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any
+     * field-access flags.
+     *
+     * @return The field access-flag constraints that must be met.
+     */
+    val fieldAccess: Array<FieldAccessFlags> = [],
 
-  /**
-   * Define the field-name pattern by an exact field name.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field name.
-   *
-   * <p>
-   * Mutually exclusive with the property `fieldNamePattern` also defining field-name.
-   *
-   * @return The exact field name of the field.
-   */
-  val fieldName: String = "",
+    /**
+     * Define the field-name pattern by an exact field name.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any field
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `fieldNamePattern` also defining field-name.
+     *
+     * @return The exact field name of the field.
+     */
+    val fieldName: String = "",
 
-  /**
-   * Define the field-name pattern by a string pattern.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field name.
-   *
-   * <p>
-   * Mutually exclusive with the property `fieldName` also defining field-name.
-   *
-   * @return The string pattern of the field name.
-   */
-  val fieldNamePattern: StringPattern = StringPattern(exact = ""),
+    /**
+     * Define the field-name pattern by a string pattern.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any field
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `fieldName` also defining field-name.
+     *
+     * @return The string pattern of the field name.
+     */
+    val fieldNamePattern: StringPattern = StringPattern(exact = ""),
 
-  /**
-   * Define the field-type pattern by a fully qualified type.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldTypeConstant
-   * <li>fieldTypePattern
-   * </ul>
-   *
-   * @return The qualified type name for the field type.
-   */
-  val fieldType: String = "",
+    /**
+     * Define the field-type pattern by a fully qualified type.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldTypeConstant
+     * <li>fieldTypePattern
+     * </ul>
+     *
+     * @return The qualified type name for the field type.
+     */
+    val fieldType: String = "",
 
-  /**
-   * Define the field-type pattern by a class constant.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldType
-   * <li>fieldTypePattern
-   * </ul>
-   *
-   * @return The class constant for the field type.
-   */
-  val fieldTypeConstant: KClass<*> = Object::class,
+    /**
+     * Define the field-type pattern by a class constant.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldType
+     * <li>fieldTypePattern
+     * </ul>
+     *
+     * @return The class constant for the field type.
+     */
+    val fieldTypeConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the field-type pattern by a pattern on types.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldType
-   * <li>fieldTypeConstant
-   * </ul>
-   *
-   * @return The type pattern for the field type.
-   */
-  val fieldTypePattern: TypePattern = TypePattern(name = ""),
+    /**
+     * Define the field-type pattern by a pattern on types.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldType
+     * <li>fieldTypeConstant
+     * </ul>
+     *
+     * @return The type pattern for the field type.
+     */
+    val fieldTypePattern: TypePattern = TypePattern(name = ""),
 )
diff --git a/src/keepanno/java/androidx/annotation/keep/KeepItemKind.kt b/src/keepanno/java/androidx/annotation/keep/KeepItemKind.kt
index e30bd45..3dd9bad 100644
--- a/src/keepanno/java/androidx/annotation/keep/KeepItemKind.kt
+++ b/src/keepanno/java/androidx/annotation/keep/KeepItemKind.kt
@@ -21,12 +21,12 @@
 package androidx.annotation.keep
 
 public enum class KeepItemKind {
-  ONLY_CLASS,
-  ONLY_MEMBERS,
-  ONLY_METHODS,
-  ONLY_FIELDS,
-  CLASS_AND_MEMBERS,
-  CLASS_AND_METHODS,
-  CLASS_AND_FIELDS,
-  DEFAULT,
+    ONLY_CLASS,
+    ONLY_MEMBERS,
+    ONLY_METHODS,
+    ONLY_FIELDS,
+    CLASS_AND_MEMBERS,
+    CLASS_AND_METHODS,
+    CLASS_AND_FIELDS,
+    DEFAULT,
 }
diff --git a/src/keepanno/java/androidx/annotation/keep/KeepOption.kt b/src/keepanno/java/androidx/annotation/keep/KeepOption.kt
index 64035a7..3642e74 100644
--- a/src/keepanno/java/androidx/annotation/keep/KeepOption.kt
+++ b/src/keepanno/java/androidx/annotation/keep/KeepOption.kt
@@ -21,9 +21,9 @@
 package androidx.annotation.keep
 
 public enum class KeepOption {
-  SHRINKING,
-  OPTIMIZATION,
-  OBFUSCATION,
-  ACCESS_MODIFICATION,
-  ANNOTATION_REMOVAL,
+    SHRINKING,
+    OPTIMIZATION,
+    OBFUSCATION,
+    ACCESS_MODIFICATION,
+    ANNOTATION_REMOVAL,
 }
diff --git a/src/keepanno/java/androidx/annotation/keep/KeepTarget.kt b/src/keepanno/java/androidx/annotation/keep/KeepTarget.kt
index 6164c7e..c86993f 100644
--- a/src/keepanno/java/androidx/annotation/keep/KeepTarget.kt
+++ b/src/keepanno/java/androidx/annotation/keep/KeepTarget.kt
@@ -43,864 +43,872 @@
 @Target(AnnotationTarget.ANNOTATION_CLASS)
 public annotation class KeepTarget(
 
-  /**
-   * Specify the kind of this item pattern.
-   *
-   * <p>
-   * Possible values are:
-   * <ul>
-   * <li>{@link KeepItemKind#ONLY_CLASS}
-   * <li>{@link KeepItemKind#ONLY_MEMBERS}
-   * <li>{@link KeepItemKind#ONLY_METHODS}
-   * <li>{@link KeepItemKind#ONLY_FIELDS}
-   * <li>{@link KeepItemKind#CLASS_AND_MEMBERS}
-   * <li>{@link KeepItemKind#CLASS_AND_METHODS}
-   * <li>{@link KeepItemKind#CLASS_AND_FIELDS}
-   * </ul>
-   *
-   * <p>
-   * If unspecified the default kind for an item depends on its member patterns:
-   * <ul>
-   * <li>{@link KeepItemKind#ONLY_CLASS} if no member patterns are defined
-   * <li>{@link KeepItemKind#ONLY_METHODS} if method patterns are defined
-   * <li>{@link KeepItemKind#ONLY_FIELDS} if field patterns are defined
-   * <li>{@link KeepItemKind#ONLY_MEMBERS} otherwise.
-   * </ul>
-   *
-   * @return The kind for this pattern.
-   */
-  val kind: KeepItemKind = KeepItemKind.DEFAULT,
+    /**
+     * Specify the kind of this item pattern.
+     *
+     * <p>
+     * Possible values are:
+     * <ul>
+     * <li>{@link KeepItemKind#ONLY_CLASS}
+     * <li>{@link KeepItemKind#ONLY_MEMBERS}
+     * <li>{@link KeepItemKind#ONLY_METHODS}
+     * <li>{@link KeepItemKind#ONLY_FIELDS}
+     * <li>{@link KeepItemKind#CLASS_AND_MEMBERS}
+     * <li>{@link KeepItemKind#CLASS_AND_METHODS}
+     * <li>{@link KeepItemKind#CLASS_AND_FIELDS}
+     * </ul>
+     *
+     * <p>
+     * If unspecified the default kind for an item depends on its member patterns:
+     * <ul>
+     * <li>{@link KeepItemKind#ONLY_CLASS} if no member patterns are defined
+     * <li>{@link KeepItemKind#ONLY_METHODS} if method patterns are defined
+     * <li>{@link KeepItemKind#ONLY_FIELDS} if field patterns are defined
+     * <li>{@link KeepItemKind#ONLY_MEMBERS} otherwise.
+     * </ul>
+     *
+     * @return The kind for this pattern.
+     */
+    val kind: KeepItemKind = KeepItemKind.DEFAULT,
 
-  /**
-   * Define the usage constraints of the target.
-   *
-   * <p>
-   * The specified constraints must remain valid for the target.
-   *
-   * <p>
-   * The default constraints depend on the kind of the target. For all targets the default
-   * constraints include:
-   * <ul>
-   * <li>{@link KeepConstraint#LOOKUP}
-   * <li>{@link KeepConstraint#NAME}
-   * <li>{@link KeepConstraint#VISIBILITY_RELAX}
-   * </ul>
-   *
-   * <p>
-   * For classes the default constraints also include:
-   * <ul>
-   * <li>{@link KeepConstraint#CLASS_INSTANTIATE}
-   * </ul>
-   *
-   * <p>
-   * For methods the default constraints also include:
-   * <ul>
-   * <li>{@link KeepConstraint#METHOD_INVOKE}
-   * </ul>
-   *
-   * <p>
-   * For fields the default constraints also include:
-   * <ul>
-   * <li>{@link KeepConstraint#FIELD_GET}
-   * <li>{@link KeepConstraint#FIELD_SET}
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with the property `constraintAdditions` also defining constraints.
-   *
-   * @return Usage constraints for the target.
-   */
-  val constraints: Array<KeepConstraint> = [],
+    /**
+     * Define the usage constraints of the target.
+     *
+     * <p>
+     * The specified constraints must remain valid for the target.
+     *
+     * <p>
+     * The default constraints depend on the kind of the target. For all targets the default
+     * constraints include:
+     * <ul>
+     * <li>{@link KeepConstraint#LOOKUP}
+     * <li>{@link KeepConstraint#NAME}
+     * <li>{@link KeepConstraint#VISIBILITY_RELAX}
+     * </ul>
+     *
+     * <p>
+     * For classes the default constraints also include:
+     * <ul>
+     * <li>{@link KeepConstraint#CLASS_INSTANTIATE}
+     * </ul>
+     *
+     * <p>
+     * For methods the default constraints also include:
+     * <ul>
+     * <li>{@link KeepConstraint#METHOD_INVOKE}
+     * </ul>
+     *
+     * <p>
+     * For fields the default constraints also include:
+     * <ul>
+     * <li>{@link KeepConstraint#FIELD_GET}
+     * <li>{@link KeepConstraint#FIELD_SET}
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with the property `constraintAdditions` also defining constraints.
+     *
+     * @return Usage constraints for the target.
+     */
+    val constraints: Array<KeepConstraint> = [],
 
-  /**
-   * Add additional usage constraints of the target.
-   *
-   * <p>
-   * The specified constraints must remain valid for the target in addition to the default
-   * constraints.
-   *
-   * <p>
-   * The default constraints are documented in {@link #constraints}
-   *
-   * <p>
-   * Mutually exclusive with the property `constraints` also defining constraints.
-   *
-   * @return Additional usage constraints for the target.
-   */
-  val constraintAdditions: Array<KeepConstraint> = [],
+    /**
+     * Add additional usage constraints of the target.
+     *
+     * <p>
+     * The specified constraints must remain valid for the target in addition to the default
+     * constraints.
+     *
+     * <p>
+     * The default constraints are documented in {@link #constraints}
+     *
+     * <p>
+     * Mutually exclusive with the property `constraints` also defining constraints.
+     *
+     * @return Additional usage constraints for the target.
+     */
+    val constraintAdditions: Array<KeepConstraint> = [],
 
-  /**
-   * Patterns for annotations that must remain on the item.
-   *
-   * <p>
-   * The annotations matching any of the patterns must remain on the item if the annotation types
-   * remain in the program.
-   *
-   * <p>
-   * Note that if the annotation types themselves are unused/removed, then their references on the
-   * item will be removed too. If the annotation types themselves are used reflectively then they
-   * too need a keep annotation or rule to ensure they remain in the program.
-   *
-   * <p>
-   * By default no annotation patterns are defined and no annotations are required to remain.
-   *
-   * @return Annotation patterns
-   */
-  val constrainAnnotations: Array<AnnotationPattern> = [],
+    /**
+     * Patterns for annotations that must remain on the item.
+     *
+     * <p>
+     * The annotations matching any of the patterns must remain on the item if the annotation types
+     * remain in the program.
+     *
+     * <p>
+     * Note that if the annotation types themselves are unused/removed, then their references on the
+     * item will be removed too. If the annotation types themselves are used reflectively then they
+     * too need a keep annotation or rule to ensure they remain in the program.
+     *
+     * <p>
+     * By default no annotation patterns are defined and no annotations are required to remain.
+     *
+     * @return Annotation patterns
+     */
+    val constrainAnnotations: Array<AnnotationPattern> = [],
 
-  /**
-   * Define the class pattern by reference to a binding.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class:
-   * <ul>
-   * <li>className
-   * <li>classConstant
-   * <li>classNamePattern
-   * <li>instanceOfClassName
-   * <li>instanceOfClassNameExclusive
-   * <li>instanceOfClassConstant
-   * <li>instanceOfClassConstantExclusive
-   * <li>instanceOfPattern
-   * <li>classAnnotatedByClassName
-   * <li>classAnnotatedByClassConstant
-   * <li>classAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class.
-   *
-   * @return The name of the binding that defines the class.
-   */
-  val classFromBinding: String = "",
+    /**
+     * Define the class pattern by reference to a binding.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class:
+     * <ul>
+     * <li>className
+     * <li>classConstant
+     * <li>classNamePattern
+     * <li>instanceOfClassName
+     * <li>instanceOfClassNameExclusive
+     * <li>instanceOfClassConstant
+     * <li>instanceOfClassConstantExclusive
+     * <li>instanceOfPattern
+     * <li>classAnnotatedByClassName
+     * <li>classAnnotatedByClassConstant
+     * <li>classAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class.
+     *
+     * @return The name of the binding that defines the class.
+     */
+    val classFromBinding: String = "",
 
-  /**
-   * Define the class-name pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-name:
-   * <ul>
-   * <li>classConstant
-   * <li>classNamePattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class name.
-   *
-   * @return The qualified class name that defines the class.
-   */
-  val className: String = "",
+    /**
+     * Define the class-name pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-name:
+     * <ul>
+     * <li>classConstant
+     * <li>classNamePattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class name.
+     *
+     * @return The qualified class name that defines the class.
+     */
+    val className: String = "",
 
-  /**
-   * Define the class-name pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-name:
-   * <ul>
-   * <li>className
-   * <li>classNamePattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class name.
-   *
-   * @return The class-constant that defines the class.
-   */
-  val classConstant: KClass<*> = Object::class,
+    /**
+     * Define the class-name pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-name:
+     * <ul>
+     * <li>className
+     * <li>classNamePattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class name.
+     *
+     * @return The class-constant that defines the class.
+     */
+    val classConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the class-name pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-name:
-   * <ul>
-   * <li>className
-   * <li>classConstant
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class name.
-   *
-   * @return The class-name pattern that defines the class.
-   */
-  val classNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the class-name pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-name:
+     * <ul>
+     * <li>className
+     * <li>classConstant
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class name.
+     *
+     * @return The class-name pattern that defines the class.
+     */
+    val classNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the instance-of pattern as classes that are instances of the fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining instance-of:
-   * <ul>
-   * <li>instanceOfClassNameExclusive
-   * <li>instanceOfClassConstant
-   * <li>instanceOfClassConstantExclusive
-   * <li>instanceOfPattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class instance.
-   *
-   * @return The qualified class name that defines what instance-of the class must be.
-   */
-  val instanceOfClassName: String = "",
+    /**
+     * Define the instance-of pattern as classes that are instances of the fully qualified class
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining instance-of:
+     * <ul>
+     * <li>instanceOfClassNameExclusive
+     * <li>instanceOfClassConstant
+     * <li>instanceOfClassConstantExclusive
+     * <li>instanceOfPattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class instance.
+     *
+     * @return The qualified class name that defines what instance-of the class must be.
+     */
+    val instanceOfClassName: String = "",
 
-  /**
-   * Define the instance-of pattern as classes that are instances of the fully qualified class name.
-   *
-   * <p>
-   * The pattern is exclusive in that it does not match classes that are instances of the pattern,
-   * but only those that are instances of classes that are subclasses of the pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining instance-of:
-   * <ul>
-   * <li>instanceOfClassName
-   * <li>instanceOfClassConstant
-   * <li>instanceOfClassConstantExclusive
-   * <li>instanceOfPattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class instance.
-   *
-   * @return The qualified class name that defines what instance-of the class must be.
-   */
-  val instanceOfClassNameExclusive: String = "",
+    /**
+     * Define the instance-of pattern as classes that are instances of the fully qualified class
+     * name.
+     *
+     * <p>
+     * The pattern is exclusive in that it does not match classes that are instances of the pattern,
+     * but only those that are instances of classes that are subclasses of the pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining instance-of:
+     * <ul>
+     * <li>instanceOfClassName
+     * <li>instanceOfClassConstant
+     * <li>instanceOfClassConstantExclusive
+     * <li>instanceOfPattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class instance.
+     *
+     * @return The qualified class name that defines what instance-of the class must be.
+     */
+    val instanceOfClassNameExclusive: String = "",
 
-  /**
-   * Define the instance-of pattern as classes that are instances the referenced Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining instance-of:
-   * <ul>
-   * <li>instanceOfClassName
-   * <li>instanceOfClassNameExclusive
-   * <li>instanceOfClassConstantExclusive
-   * <li>instanceOfPattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class instance.
-   *
-   * @return The class constant that defines what instance-of the class must be.
-   */
-  val instanceOfClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the instance-of pattern as classes that are instances the referenced Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining instance-of:
+     * <ul>
+     * <li>instanceOfClassName
+     * <li>instanceOfClassNameExclusive
+     * <li>instanceOfClassConstantExclusive
+     * <li>instanceOfPattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class instance.
+     *
+     * @return The class constant that defines what instance-of the class must be.
+     */
+    val instanceOfClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the instance-of pattern as classes that are instances the referenced Class constant.
-   *
-   * <p>
-   * The pattern is exclusive in that it does not match classes that are instances of the pattern,
-   * but only those that are instances of classes that are subclasses of the pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining instance-of:
-   * <ul>
-   * <li>instanceOfClassName
-   * <li>instanceOfClassNameExclusive
-   * <li>instanceOfClassConstant
-   * <li>instanceOfPattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class instance.
-   *
-   * @return The class constant that defines what instance-of the class must be.
-   */
-  val instanceOfClassConstantExclusive: KClass<*> = Object::class,
+    /**
+     * Define the instance-of pattern as classes that are instances the referenced Class constant.
+     *
+     * <p>
+     * The pattern is exclusive in that it does not match classes that are instances of the pattern,
+     * but only those that are instances of classes that are subclasses of the pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining instance-of:
+     * <ul>
+     * <li>instanceOfClassName
+     * <li>instanceOfClassNameExclusive
+     * <li>instanceOfClassConstant
+     * <li>instanceOfPattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class instance.
+     *
+     * @return The class constant that defines what instance-of the class must be.
+     */
+    val instanceOfClassConstantExclusive: KClass<*> = Object::class,
 
-  /**
-   * Define the instance-of with a pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining instance-of:
-   * <ul>
-   * <li>instanceOfClassName
-   * <li>instanceOfClassNameExclusive
-   * <li>instanceOfClassConstant
-   * <li>instanceOfClassConstantExclusive
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class instance.
-   *
-   * @return The pattern that defines what instance-of the class must be.
-   */
-  val instanceOfPattern: InstanceOfPattern = InstanceOfPattern(),
+    /**
+     * Define the instance-of with a pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining instance-of:
+     * <ul>
+     * <li>instanceOfClassName
+     * <li>instanceOfClassNameExclusive
+     * <li>instanceOfClassConstant
+     * <li>instanceOfClassConstantExclusive
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class instance.
+     *
+     * @return The pattern that defines what instance-of the class must be.
+     */
+    val instanceOfPattern: InstanceOfPattern = InstanceOfPattern(),
 
-  /**
-   * Define the class-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-annotated-by:
-   * <ul>
-   * <li>classAnnotatedByClassConstant
-   * <li>classAnnotatedByClassNamePattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class regardless of what the class is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val classAnnotatedByClassName: String = "",
+    /**
+     * Define the class-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-annotated-by:
+     * <ul>
+     * <li>classAnnotatedByClassConstant
+     * <li>classAnnotatedByClassNamePattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class regardless of what the class is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val classAnnotatedByClassName: String = "",
 
-  /**
-   * Define the class-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-annotated-by:
-   * <ul>
-   * <li>classAnnotatedByClassName
-   * <li>classAnnotatedByClassNamePattern
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class regardless of what the class is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val classAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the class-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-annotated-by:
+     * <ul>
+     * <li>classAnnotatedByClassName
+     * <li>classAnnotatedByClassNamePattern
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class regardless of what the class is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val classAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the class-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining class-annotated-by:
-   * <ul>
-   * <li>classAnnotatedByClassName
-   * <li>classAnnotatedByClassConstant
-   * <li>classFromBinding
-   * </ul>
-   *
-   * <p>
-   * If none are specified the default is to match any class regardless of what the class is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val classAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the class-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining class-annotated-by:
+     * <ul>
+     * <li>classAnnotatedByClassName
+     * <li>classAnnotatedByClassConstant
+     * <li>classFromBinding
+     * </ul>
+     *
+     * <p>
+     * If none are specified the default is to match any class regardless of what the class is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val classAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the member pattern in full by a reference to a binding.
-   *
-   * <p>
-   * Mutually exclusive with all other class and member pattern properties. When a member binding is
-   * referenced this item is defined to be that item, including its class and member patterns.
-   *
-   * @return The binding name that defines the member.
-   */
-  val memberFromBinding: String = "",
+    /**
+     * Define the member pattern in full by a reference to a binding.
+     *
+     * <p>
+     * Mutually exclusive with all other class and member pattern properties. When a member binding
+     * is referenced this item is defined to be that item, including its class and member patterns.
+     *
+     * @return The binding name that defines the member.
+     */
+    val memberFromBinding: String = "",
 
-  /**
-   * Define the member-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassConstant
-   * <li>memberAnnotatedByClassNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val memberAnnotatedByClassName: String = "",
+    /**
+     * Define the member-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassConstant
+     * <li>memberAnnotatedByClassNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val memberAnnotatedByClassName: String = "",
 
-  /**
-   * Define the member-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassName
-   * <li>memberAnnotatedByClassNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val memberAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the member-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassName
+     * <li>memberAnnotatedByClassNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val memberAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the member-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassName
-   * <li>memberAnnotatedByClassConstant
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val memberAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the member-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassName
+     * <li>memberAnnotatedByClassConstant
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val memberAnnotatedByClassNamePattern: ClassNamePattern =
+        ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the member-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * Mutually exclusive with the property `memberFromBinding` also defining member-access.
-   *
-   * @return The member access-flag constraints that must be met.
-   */
-  val memberAccess: Array<MemberAccessFlags> = [],
+    /**
+     * Define the member-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * Mutually exclusive with the property `memberFromBinding` also defining member-access.
+     *
+     * @return The member access-flag constraints that must be met.
+     */
+    val memberAccess: Array<MemberAccessFlags> = [],
 
-  /**
-   * Define the method-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassConstant
-   * <li>methodAnnotatedByClassNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val methodAnnotatedByClassName: String = "",
+    /**
+     * Define the method-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassConstant
+     * <li>methodAnnotatedByClassNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val methodAnnotatedByClassName: String = "",
 
-  /**
-   * Define the method-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassName
-   * <li>methodAnnotatedByClassNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val methodAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the method-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassName
+     * <li>methodAnnotatedByClassNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val methodAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the method-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassName
-   * <li>methodAnnotatedByClassConstant
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val methodAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the method-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassName
+     * <li>methodAnnotatedByClassConstant
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val methodAnnotatedByClassNamePattern: ClassNamePattern =
+        ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the method-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any
-   * method-access flags.
-   *
-   * <p>
-   * Mutually exclusive with the property `memberFromBinding` also defining method-access.
-   *
-   * @return The method access-flag constraints that must be met.
-   */
-  val methodAccess: Array<MethodAccessFlags> = [],
+    /**
+     * Define the method-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * method-access flags.
+     *
+     * <p>
+     * Mutually exclusive with the property `memberFromBinding` also defining method-access.
+     *
+     * @return The method access-flag constraints that must be met.
+     */
+    val methodAccess: Array<MethodAccessFlags> = [],
 
-  /**
-   * Define the method-name pattern by an exact method name.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any method
-   * name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-name:
-   * <ul>
-   * <li>methodNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The exact method name of the method.
-   */
-  val methodName: String = "",
+    /**
+     * Define the method-name pattern by an exact method name.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any method
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-name:
+     * <ul>
+     * <li>methodNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The exact method name of the method.
+     */
+    val methodName: String = "",
 
-  /**
-   * Define the method-name pattern by a string pattern.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any method
-   * name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-name:
-   * <ul>
-   * <li>methodName
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The string pattern of the method name.
-   */
-  val methodNamePattern: StringPattern = StringPattern(exact = ""),
+    /**
+     * Define the method-name pattern by a string pattern.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any method
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-name:
+     * <ul>
+     * <li>methodName
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The string pattern of the method name.
+     */
+    val methodNamePattern: StringPattern = StringPattern(exact = ""),
 
-  /**
-   * Define the method return-type pattern by a fully qualified type or 'void'.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnTypeConstant
-   * <li>methodReturnTypePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The qualified type name of the method return type.
-   */
-  val methodReturnType: String = "",
+    /**
+     * Define the method return-type pattern by a fully qualified type or 'void'.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnTypeConstant
+     * <li>methodReturnTypePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The qualified type name of the method return type.
+     */
+    val methodReturnType: String = "",
 
-  /**
-   * Define the method return-type pattern by a class constant.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnType
-   * <li>methodReturnTypePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return A class constant denoting the type of the method return type.
-   */
-  val methodReturnTypeConstant: KClass<*> = Object::class,
+    /**
+     * Define the method return-type pattern by a class constant.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnType
+     * <li>methodReturnTypePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return A class constant denoting the type of the method return type.
+     */
+    val methodReturnTypeConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the method return-type pattern by a type pattern.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnType
-   * <li>methodReturnTypeConstant
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The pattern of the method return type.
-   */
-  val methodReturnTypePattern: TypePattern = TypePattern(name = ""),
+    /**
+     * Define the method return-type pattern by a type pattern.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnType
+     * <li>methodReturnTypeConstant
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The pattern of the method return type.
+     */
+    val methodReturnTypePattern: TypePattern = TypePattern(name = ""),
 
-  /**
-   * Define the method parameters pattern by a list of fully qualified types.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any parameters.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining parameters:
-   * <ul>
-   * <li>methodParameterTypePatterns
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The list of qualified type names of the method parameters.
-   */
-  val methodParameters: Array<String> = [""],
+    /**
+     * Define the method parameters pattern by a list of fully qualified types.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * parameters.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining parameters:
+     * <ul>
+     * <li>methodParameterTypePatterns
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The list of qualified type names of the method parameters.
+     */
+    val methodParameters: Array<String> = [""],
 
-  /**
-   * Define the method parameters pattern by a list of patterns on types.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any parameters.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining parameters:
-   * <ul>
-   * <li>methodParameters
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The list of type patterns for the method parameters.
-   */
-  val methodParameterTypePatterns: Array<TypePattern> = [TypePattern(name = "")],
+    /**
+     * Define the method parameters pattern by a list of patterns on types.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * parameters.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining parameters:
+     * <ul>
+     * <li>methodParameters
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The list of type patterns for the method parameters.
+     */
+    val methodParameterTypePatterns: Array<TypePattern> = [TypePattern(name = "")],
 
-  /**
-   * Define the field-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassConstant
-   * <li>fieldAnnotatedByClassNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val fieldAnnotatedByClassName: String = "",
+    /**
+     * Define the field-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassConstant
+     * <li>fieldAnnotatedByClassNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val fieldAnnotatedByClassName: String = "",
 
-  /**
-   * Define the field-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassName
-   * <li>fieldAnnotatedByClassNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val fieldAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the field-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassName
+     * <li>fieldAnnotatedByClassNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val fieldAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the field-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassName
-   * <li>fieldAnnotatedByClassConstant
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val fieldAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the field-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassName
+     * <li>fieldAnnotatedByClassConstant
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val fieldAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the field-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field-access
-   * flags.
-   *
-   * <p>
-   * Mutually exclusive with the property `memberFromBinding` also defining field-access.
-   *
-   * @return The field access-flag constraints that must be met.
-   */
-  val fieldAccess: Array<FieldAccessFlags> = [],
+    /**
+     * Define the field-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any
+     * field-access flags.
+     *
+     * <p>
+     * Mutually exclusive with the property `memberFromBinding` also defining field-access.
+     *
+     * @return The field access-flag constraints that must be met.
+     */
+    val fieldAccess: Array<FieldAccessFlags> = [],
 
-  /**
-   * Define the field-name pattern by an exact field name.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-name:
-   * <ul>
-   * <li>fieldNamePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The exact field name of the field.
-   */
-  val fieldName: String = "",
+    /**
+     * Define the field-name pattern by an exact field name.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any field
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-name:
+     * <ul>
+     * <li>fieldNamePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The exact field name of the field.
+     */
+    val fieldName: String = "",
 
-  /**
-   * Define the field-name pattern by a string pattern.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-name:
-   * <ul>
-   * <li>fieldName
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The string pattern of the field name.
-   */
-  val fieldNamePattern: StringPattern = StringPattern(exact = ""),
+    /**
+     * Define the field-name pattern by a string pattern.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any field
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-name:
+     * <ul>
+     * <li>fieldName
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The string pattern of the field name.
+     */
+    val fieldNamePattern: StringPattern = StringPattern(exact = ""),
 
-  /**
-   * Define the field-type pattern by a fully qualified type.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldTypeConstant
-   * <li>fieldTypePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The qualified type name for the field type.
-   */
-  val fieldType: String = "",
+    /**
+     * Define the field-type pattern by a fully qualified type.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldTypeConstant
+     * <li>fieldTypePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The qualified type name for the field type.
+     */
+    val fieldType: String = "",
 
-  /**
-   * Define the field-type pattern by a class constant.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldType
-   * <li>fieldTypePattern
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The class constant for the field type.
-   */
-  val fieldTypeConstant: KClass<*> = Object::class,
+    /**
+     * Define the field-type pattern by a class constant.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldType
+     * <li>fieldTypePattern
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The class constant for the field type.
+     */
+    val fieldTypeConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the field-type pattern by a pattern on types.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldType
-   * <li>fieldTypeConstant
-   * <li>memberFromBinding
-   * </ul>
-   *
-   * @return The type pattern for the field type.
-   */
-  val fieldTypePattern: TypePattern = TypePattern(name = ""),
+    /**
+     * Define the field-type pattern by a pattern on types.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldType
+     * <li>fieldTypeConstant
+     * <li>memberFromBinding
+     * </ul>
+     *
+     * @return The type pattern for the field type.
+     */
+    val fieldTypePattern: TypePattern = TypePattern(name = ""),
 )
diff --git a/src/keepanno/java/androidx/annotation/keep/MemberAccessFlags.kt b/src/keepanno/java/androidx/annotation/keep/MemberAccessFlags.kt
index 949a641..f855eee 100644
--- a/src/keepanno/java/androidx/annotation/keep/MemberAccessFlags.kt
+++ b/src/keepanno/java/androidx/annotation/keep/MemberAccessFlags.kt
@@ -27,18 +27,18 @@
  * operation syntactically.
  */
 public enum class MemberAccessFlags {
-  PUBLIC,
-  NON_PUBLIC,
-  PROTECTED,
-  NON_PROTECTED,
-  PACKAGE_PRIVATE,
-  NON_PACKAGE_PRIVATE,
-  PRIVATE,
-  NON_PRIVATE,
-  STATIC,
-  NON_STATIC,
-  FINAL,
-  NON_FINAL,
-  SYNTHETIC,
-  NON_SYNTHETIC,
+    PUBLIC,
+    NON_PUBLIC,
+    PROTECTED,
+    NON_PROTECTED,
+    PACKAGE_PRIVATE,
+    NON_PACKAGE_PRIVATE,
+    PRIVATE,
+    NON_PRIVATE,
+    STATIC,
+    NON_STATIC,
+    FINAL,
+    NON_FINAL,
+    SYNTHETIC,
+    NON_SYNTHETIC,
 }
diff --git a/src/keepanno/java/androidx/annotation/keep/MethodAccessFlags.kt b/src/keepanno/java/androidx/annotation/keep/MethodAccessFlags.kt
index 3760256..4bb9a82 100644
--- a/src/keepanno/java/androidx/annotation/keep/MethodAccessFlags.kt
+++ b/src/keepanno/java/androidx/annotation/keep/MethodAccessFlags.kt
@@ -27,31 +27,31 @@
  * operation syntactically.
  */
 public enum class MethodAccessFlags {
-  // General member flags.
-  PUBLIC,
-  NON_PUBLIC,
-  PRIVATE,
-  NON_PRIVATE,
-  PROTECTED,
-  NON_PROTECTED,
-  PACKAGE_PRIVATE,
-  NON_PACKAGE_PRIVATE,
-  STATIC,
-  NON_STATIC,
-  FINAL,
-  NON_FINAL,
-  SYNTHETIC,
-  NON_SYNTHETIC,
-  // Method specific flags.
-  SYNCHRONIZED,
-  NON_SYNCHRONIZED,
-  BRIDGE,
-  NON_BRIDGE,
-  // VARARGS - No PG parser support
-  NATIVE,
-  NON_NATIVE,
-  ABSTRACT,
-  NON_ABSTRACT,
-  STRICT_FP,
-  NON_STRICT_FP,
+    // General member flags.
+    PUBLIC,
+    NON_PUBLIC,
+    PRIVATE,
+    NON_PRIVATE,
+    PROTECTED,
+    NON_PROTECTED,
+    PACKAGE_PRIVATE,
+    NON_PACKAGE_PRIVATE,
+    STATIC,
+    NON_STATIC,
+    FINAL,
+    NON_FINAL,
+    SYNTHETIC,
+    NON_SYNTHETIC,
+    // Method specific flags.
+    SYNCHRONIZED,
+    NON_SYNCHRONIZED,
+    BRIDGE,
+    NON_BRIDGE,
+    // VARARGS - No PG parser support
+    NATIVE,
+    NON_NATIVE,
+    ABSTRACT,
+    NON_ABSTRACT,
+    STRICT_FP,
+    NON_STRICT_FP,
 }
diff --git a/src/keepanno/java/androidx/annotation/keep/StringPattern.kt b/src/keepanno/java/androidx/annotation/keep/StringPattern.kt
index 15979fd..a81c2b0 100644
--- a/src/keepanno/java/androidx/annotation/keep/StringPattern.kt
+++ b/src/keepanno/java/androidx/annotation/keep/StringPattern.kt
@@ -37,40 +37,40 @@
 @Target(AnnotationTarget.ANNOTATION_CLASS)
 public annotation class StringPattern(
 
-  /**
-   * Exact string content.
-   *
-   * <p>
-   * For example, {@code "foo"} or {@code "java.lang.String"}.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining string-exact-pattern:
-   * <ul>
-   * <li>startsWith
-   * <li>endsWith
-   * </ul>
-   */
-  val exact: String = "",
+    /**
+     * Exact string content.
+     *
+     * <p>
+     * For example, {@code "foo"} or {@code "java.lang.String"}.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining string-exact-pattern:
+     * <ul>
+     * <li>startsWith
+     * <li>endsWith
+     * </ul>
+     */
+    val exact: String = "",
 
-  /**
-   * Matches strings beginning with the given prefix.
-   *
-   * <p>
-   * For example, {@code "get"} to match strings such as {@code "getMyValue"}.
-   *
-   * <p>
-   * Mutually exclusive with the property `exact` also defining string-prefix-pattern.
-   */
-  val startsWith: String = "",
+    /**
+     * Matches strings beginning with the given prefix.
+     *
+     * <p>
+     * For example, {@code "get"} to match strings such as {@code "getMyValue"}.
+     *
+     * <p>
+     * Mutually exclusive with the property `exact` also defining string-prefix-pattern.
+     */
+    val startsWith: String = "",
 
-  /**
-   * Matches strings ending with the given suffix.
-   *
-   * <p>
-   * For example, {@code "Setter"} to match strings such as {@code "myValueSetter"}.
-   *
-   * <p>
-   * Mutually exclusive with the property `exact` also defining string-suffix-pattern.
-   */
-  val endsWith: String = "",
+    /**
+     * Matches strings ending with the given suffix.
+     *
+     * <p>
+     * For example, {@code "Setter"} to match strings such as {@code "myValueSetter"}.
+     *
+     * <p>
+     * Mutually exclusive with the property `exact` also defining string-suffix-pattern.
+     */
+    val endsWith: String = "",
 )
diff --git a/src/keepanno/java/androidx/annotation/keep/TypePattern.kt b/src/keepanno/java/androidx/annotation/keep/TypePattern.kt
index 5e42220..6f9b9ee 100644
--- a/src/keepanno/java/androidx/annotation/keep/TypePattern.kt
+++ b/src/keepanno/java/androidx/annotation/keep/TypePattern.kt
@@ -41,63 +41,63 @@
 @Target(AnnotationTarget.ANNOTATION_CLASS)
 public annotation class TypePattern(
 
-  /**
-   * Exact type name as a string.
-   *
-   * <p>
-   * For example, {@code "long"} or {@code "java.lang.String"}.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining type-pattern:
-   * <ul>
-   * <li>constant
-   * <li>classNamePattern
-   * <li>instanceOfPattern
-   * </ul>
-   */
-  val name: String = "",
+    /**
+     * Exact type name as a string.
+     *
+     * <p>
+     * For example, {@code "long"} or {@code "java.lang.String"}.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining type-pattern:
+     * <ul>
+     * <li>constant
+     * <li>classNamePattern
+     * <li>instanceOfPattern
+     * </ul>
+     */
+    val name: String = "",
 
-  /**
-   * Exact type from a class constant.
-   *
-   * <p>
-   * For example, {@code String.class}.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining type-pattern:
-   * <ul>
-   * <li>name
-   * <li>classNamePattern
-   * <li>instanceOfPattern
-   * </ul>
-   */
-  val constant: KClass<*> = Object::class,
+    /**
+     * Exact type from a class constant.
+     *
+     * <p>
+     * For example, {@code String.class}.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining type-pattern:
+     * <ul>
+     * <li>name
+     * <li>classNamePattern
+     * <li>instanceOfPattern
+     * </ul>
+     */
+    val constant: KClass<*> = Object::class,
 
-  /**
-   * Classes matching the class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining type-pattern:
-   * <ul>
-   * <li>name
-   * <li>constant
-   * <li>instanceOfPattern
-   * </ul>
-   */
-  val classNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Classes matching the class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining type-pattern:
+     * <ul>
+     * <li>name
+     * <li>constant
+     * <li>instanceOfPattern
+     * </ul>
+     */
+    val classNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the instance-of with a pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining type-pattern:
-   * <ul>
-   * <li>name
-   * <li>constant
-   * <li>classNamePattern
-   * </ul>
-   *
-   * @return The pattern that defines what instance-of the class must be.
-   */
-  val instanceOfPattern: InstanceOfPattern = InstanceOfPattern(),
+    /**
+     * Define the instance-of with a pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining type-pattern:
+     * <ul>
+     * <li>name
+     * <li>constant
+     * <li>classNamePattern
+     * </ul>
+     *
+     * @return The pattern that defines what instance-of the class must be.
+     */
+    val instanceOfPattern: InstanceOfPattern = InstanceOfPattern(),
 )
diff --git a/src/keepanno/java/androidx/annotation/keep/UsedByNative.kt b/src/keepanno/java/androidx/annotation/keep/UsedByNative.kt
index 5c5ab2c..9c170e0 100644
--- a/src/keepanno/java/androidx/annotation/keep/UsedByNative.kt
+++ b/src/keepanno/java/androidx/annotation/keep/UsedByNative.kt
@@ -48,589 +48,596 @@
  */
 @Retention(AnnotationRetention.BINARY)
 @Target(
-  AnnotationTarget.CLASS,
-  AnnotationTarget.FIELD,
-  AnnotationTarget.FUNCTION,
-  AnnotationTarget.CONSTRUCTOR,
+    AnnotationTarget.CLASS,
+    AnnotationTarget.FIELD,
+    AnnotationTarget.FUNCTION,
+    AnnotationTarget.CONSTRUCTOR,
 )
 public annotation class UsedByNative(
 
-  /**
-   * Optional description to document the reason for this annotation.
-   *
-   * @return The descriptive message. Defaults to no description.
-   */
-  val description: String = "",
+    /**
+     * Optional description to document the reason for this annotation.
+     *
+     * @return The descriptive message. Defaults to no description.
+     */
+    val description: String = "",
 
-  /**
-   * Conditions that should be satisfied for the annotation to be in effect.
-   *
-   * @return The list of preconditions. Defaults to no conditions, thus trivially/unconditionally
-   *   satisfied.
-   */
-  val preconditions: Array<KeepCondition> = [],
+    /**
+     * Conditions that should be satisfied for the annotation to be in effect.
+     *
+     * @return The list of preconditions. Defaults to no conditions, thus trivially/unconditionally
+     *   satisfied.
+     */
+    val preconditions: Array<KeepCondition> = [],
 
-  /**
-   * Additional targets to be kept in addition to the annotated class/members.
-   *
-   * @return List of additional target consequences. Defaults to no additional target consequences.
-   */
-  val additionalTargets: Array<KeepTarget> = [],
+    /**
+     * Additional targets to be kept in addition to the annotated class/members.
+     *
+     * @return List of additional target consequences. Defaults to no additional target
+     *   consequences.
+     */
+    val additionalTargets: Array<KeepTarget> = [],
 
-  /**
-   * Specify the kind of this item pattern.
-   *
-   * <p>
-   * If unspecified the default kind depends on the annotated item.
-   *
-   * <p>
-   * When annotating a class the default kind is:
-   * <ul>
-   * <li>{@link KeepItemKind#ONLY_CLASS} if no member patterns are defined;
-   * <li>{@link KeepItemKind#CLASS_AND_METHODS} if method patterns are defined;
-   * <li>{@link KeepItemKind#CLASS_AND_FIELDS} if field patterns are defined;
-   * <li>{@link KeepItemKind#CLASS_AND_MEMBERS} otherwise.
-   * </ul>
-   *
-   * <p>
-   * When annotating a method the default kind is: {@link KeepItemKind#ONLY_METHODS}
-   *
-   * <p>
-   * When annotating a field the default kind is: {@link KeepItemKind#ONLY_FIELDS}
-   *
-   * <p>
-   * It is not possible to use {@link KeepItemKind#ONLY_CLASS} if annotating a member.
-   *
-   * @return The kind for this pattern.
-   */
-  val kind: KeepItemKind = KeepItemKind.DEFAULT,
+    /**
+     * Specify the kind of this item pattern.
+     *
+     * <p>
+     * If unspecified the default kind depends on the annotated item.
+     *
+     * <p>
+     * When annotating a class the default kind is:
+     * <ul>
+     * <li>{@link KeepItemKind#ONLY_CLASS} if no member patterns are defined;
+     * <li>{@link KeepItemKind#CLASS_AND_METHODS} if method patterns are defined;
+     * <li>{@link KeepItemKind#CLASS_AND_FIELDS} if field patterns are defined;
+     * <li>{@link KeepItemKind#CLASS_AND_MEMBERS} otherwise.
+     * </ul>
+     *
+     * <p>
+     * When annotating a method the default kind is: {@link KeepItemKind#ONLY_METHODS}
+     *
+     * <p>
+     * When annotating a field the default kind is: {@link KeepItemKind#ONLY_FIELDS}
+     *
+     * <p>
+     * It is not possible to use {@link KeepItemKind#ONLY_CLASS} if annotating a member.
+     *
+     * @return The kind for this pattern.
+     */
+    val kind: KeepItemKind = KeepItemKind.DEFAULT,
 
-  /**
-   * Define the usage constraints of the target.
-   *
-   * <p>
-   * The specified constraints must remain valid for the target.
-   *
-   * <p>
-   * The default constraints depend on the kind of the target. For all targets the default
-   * constraints include:
-   * <ul>
-   * <li>{@link KeepConstraint#LOOKUP}
-   * <li>{@link KeepConstraint#NAME}
-   * <li>{@link KeepConstraint#VISIBILITY_RELAX}
-   * </ul>
-   *
-   * <p>
-   * For classes the default constraints also include:
-   * <ul>
-   * <li>{@link KeepConstraint#CLASS_INSTANTIATE}
-   * </ul>
-   *
-   * <p>
-   * For methods the default constraints also include:
-   * <ul>
-   * <li>{@link KeepConstraint#METHOD_INVOKE}
-   * </ul>
-   *
-   * <p>
-   * For fields the default constraints also include:
-   * <ul>
-   * <li>{@link KeepConstraint#FIELD_GET}
-   * <li>{@link KeepConstraint#FIELD_SET}
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with the property `constraintAdditions` also defining constraints.
-   *
-   * @return Usage constraints for the target.
-   */
-  val constraints: Array<KeepConstraint> = [],
+    /**
+     * Define the usage constraints of the target.
+     *
+     * <p>
+     * The specified constraints must remain valid for the target.
+     *
+     * <p>
+     * The default constraints depend on the kind of the target. For all targets the default
+     * constraints include:
+     * <ul>
+     * <li>{@link KeepConstraint#LOOKUP}
+     * <li>{@link KeepConstraint#NAME}
+     * <li>{@link KeepConstraint#VISIBILITY_RELAX}
+     * </ul>
+     *
+     * <p>
+     * For classes the default constraints also include:
+     * <ul>
+     * <li>{@link KeepConstraint#CLASS_INSTANTIATE}
+     * </ul>
+     *
+     * <p>
+     * For methods the default constraints also include:
+     * <ul>
+     * <li>{@link KeepConstraint#METHOD_INVOKE}
+     * </ul>
+     *
+     * <p>
+     * For fields the default constraints also include:
+     * <ul>
+     * <li>{@link KeepConstraint#FIELD_GET}
+     * <li>{@link KeepConstraint#FIELD_SET}
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with the property `constraintAdditions` also defining constraints.
+     *
+     * @return Usage constraints for the target.
+     */
+    val constraints: Array<KeepConstraint> = [],
 
-  /**
-   * Add additional usage constraints of the target.
-   *
-   * <p>
-   * The specified constraints must remain valid for the target in addition to the default
-   * constraints.
-   *
-   * <p>
-   * The default constraints are documented in {@link #constraints}
-   *
-   * <p>
-   * Mutually exclusive with the property `constraints` also defining constraints.
-   *
-   * @return Additional usage constraints for the target.
-   */
-  val constraintAdditions: Array<KeepConstraint> = [],
+    /**
+     * Add additional usage constraints of the target.
+     *
+     * <p>
+     * The specified constraints must remain valid for the target in addition to the default
+     * constraints.
+     *
+     * <p>
+     * The default constraints are documented in {@link #constraints}
+     *
+     * <p>
+     * Mutually exclusive with the property `constraints` also defining constraints.
+     *
+     * @return Additional usage constraints for the target.
+     */
+    val constraintAdditions: Array<KeepConstraint> = [],
 
-  /**
-   * Patterns for annotations that must remain on the item.
-   *
-   * <p>
-   * The annotations matching any of the patterns must remain on the item if the annotation types
-   * remain in the program.
-   *
-   * <p>
-   * Note that if the annotation types themselves are unused/removed, then their references on the
-   * item will be removed too. If the annotation types themselves are used reflectively then they
-   * too need a keep annotation or rule to ensure they remain in the program.
-   *
-   * <p>
-   * By default no annotation patterns are defined and no annotations are required to remain.
-   *
-   * @return Annotation patterns
-   */
-  val constrainAnnotations: Array<AnnotationPattern> = [],
+    /**
+     * Patterns for annotations that must remain on the item.
+     *
+     * <p>
+     * The annotations matching any of the patterns must remain on the item if the annotation types
+     * remain in the program.
+     *
+     * <p>
+     * Note that if the annotation types themselves are unused/removed, then their references on the
+     * item will be removed too. If the annotation types themselves are used reflectively then they
+     * too need a keep annotation or rule to ensure they remain in the program.
+     *
+     * <p>
+     * By default no annotation patterns are defined and no annotations are required to remain.
+     *
+     * @return Annotation patterns
+     */
+    val constrainAnnotations: Array<AnnotationPattern> = [],
 
-  /**
-   * Define the member-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassConstant
-   * <li>memberAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val memberAnnotatedByClassName: String = "",
+    /**
+     * Define the member-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassConstant
+     * <li>memberAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val memberAnnotatedByClassName: String = "",
 
-  /**
-   * Define the member-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassName
-   * <li>memberAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val memberAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the member-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassName
+     * <li>memberAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val memberAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the member-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassName
-   * <li>memberAnnotatedByClassConstant
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val memberAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the member-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassName
+     * <li>memberAnnotatedByClassConstant
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val memberAnnotatedByClassNamePattern: ClassNamePattern =
+        ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the member-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * @return The member access-flag constraints that must be met.
-   */
-  val memberAccess: Array<MemberAccessFlags> = [],
+    /**
+     * Define the member-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * @return The member access-flag constraints that must be met.
+     */
+    val memberAccess: Array<MemberAccessFlags> = [],
 
-  /**
-   * Define the method-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassConstant
-   * <li>methodAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val methodAnnotatedByClassName: String = "",
+    /**
+     * Define the method-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassConstant
+     * <li>methodAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val methodAnnotatedByClassName: String = "",
 
-  /**
-   * Define the method-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassName
-   * <li>methodAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val methodAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the method-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassName
+     * <li>methodAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val methodAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the method-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassName
-   * <li>methodAnnotatedByClassConstant
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val methodAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the method-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassName
+     * <li>methodAnnotatedByClassConstant
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val methodAnnotatedByClassNamePattern: ClassNamePattern =
+        ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the method-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any
-   * method-access flags.
-   *
-   * @return The method access-flag constraints that must be met.
-   */
-  val methodAccess: Array<MethodAccessFlags> = [],
+    /**
+     * Define the method-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * method-access flags.
+     *
+     * @return The method access-flag constraints that must be met.
+     */
+    val methodAccess: Array<MethodAccessFlags> = [],
 
-  /**
-   * Define the method-name pattern by an exact method name.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any method
-   * name.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodNamePattern` also defining method-name.
-   *
-   * @return The exact method name of the method.
-   */
-  val methodName: String = "",
+    /**
+     * Define the method-name pattern by an exact method name.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any method
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodNamePattern` also defining method-name.
+     *
+     * @return The exact method name of the method.
+     */
+    val methodName: String = "",
 
-  /**
-   * Define the method-name pattern by a string pattern.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any method
-   * name.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodName` also defining method-name.
-   *
-   * @return The string pattern of the method name.
-   */
-  val methodNamePattern: StringPattern = StringPattern(exact = ""),
+    /**
+     * Define the method-name pattern by a string pattern.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any method
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodName` also defining method-name.
+     *
+     * @return The string pattern of the method name.
+     */
+    val methodNamePattern: StringPattern = StringPattern(exact = ""),
 
-  /**
-   * Define the method return-type pattern by a fully qualified type or 'void'.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnTypeConstant
-   * <li>methodReturnTypePattern
-   * </ul>
-   *
-   * @return The qualified type name of the method return type.
-   */
-  val methodReturnType: String = "",
+    /**
+     * Define the method return-type pattern by a fully qualified type or 'void'.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnTypeConstant
+     * <li>methodReturnTypePattern
+     * </ul>
+     *
+     * @return The qualified type name of the method return type.
+     */
+    val methodReturnType: String = "",
 
-  /**
-   * Define the method return-type pattern by a class constant.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnType
-   * <li>methodReturnTypePattern
-   * </ul>
-   *
-   * @return A class constant denoting the type of the method return type.
-   */
-  val methodReturnTypeConstant: KClass<*> = Object::class,
+    /**
+     * Define the method return-type pattern by a class constant.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnType
+     * <li>methodReturnTypePattern
+     * </ul>
+     *
+     * @return A class constant denoting the type of the method return type.
+     */
+    val methodReturnTypeConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the method return-type pattern by a type pattern.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnType
-   * <li>methodReturnTypeConstant
-   * </ul>
-   *
-   * @return The pattern of the method return type.
-   */
-  val methodReturnTypePattern: TypePattern = TypePattern(name = ""),
+    /**
+     * Define the method return-type pattern by a type pattern.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnType
+     * <li>methodReturnTypeConstant
+     * </ul>
+     *
+     * @return The pattern of the method return type.
+     */
+    val methodReturnTypePattern: TypePattern = TypePattern(name = ""),
 
-  /**
-   * Define the method parameters pattern by a list of fully qualified types.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any parameters.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodParameterTypePatterns` also defining parameters.
-   *
-   * @return The list of qualified type names of the method parameters.
-   */
-  val methodParameters: Array<String> = [""],
+    /**
+     * Define the method parameters pattern by a list of fully qualified types.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * parameters.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodParameterTypePatterns` also defining parameters.
+     *
+     * @return The list of qualified type names of the method parameters.
+     */
+    val methodParameters: Array<String> = [""],
 
-  /**
-   * Define the method parameters pattern by a list of patterns on types.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any parameters.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodParameters` also defining parameters.
-   *
-   * @return The list of type patterns for the method parameters.
-   */
-  val methodParameterTypePatterns: Array<TypePattern> = [TypePattern(name = "")],
+    /**
+     * Define the method parameters pattern by a list of patterns on types.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * parameters.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodParameters` also defining parameters.
+     *
+     * @return The list of type patterns for the method parameters.
+     */
+    val methodParameterTypePatterns: Array<TypePattern> = [TypePattern(name = "")],
 
-  /**
-   * Define the field-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassConstant
-   * <li>fieldAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val fieldAnnotatedByClassName: String = "",
+    /**
+     * Define the field-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassConstant
+     * <li>fieldAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val fieldAnnotatedByClassName: String = "",
 
-  /**
-   * Define the field-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassName
-   * <li>fieldAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val fieldAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the field-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassName
+     * <li>fieldAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val fieldAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the field-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassName
-   * <li>fieldAnnotatedByClassConstant
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val fieldAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the field-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassName
+     * <li>fieldAnnotatedByClassConstant
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val fieldAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the field-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field-access
-   * flags.
-   *
-   * @return The field access-flag constraints that must be met.
-   */
-  val fieldAccess: Array<FieldAccessFlags> = [],
+    /**
+     * Define the field-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any
+     * field-access flags.
+     *
+     * @return The field access-flag constraints that must be met.
+     */
+    val fieldAccess: Array<FieldAccessFlags> = [],
 
-  /**
-   * Define the field-name pattern by an exact field name.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field name.
-   *
-   * <p>
-   * Mutually exclusive with the property `fieldNamePattern` also defining field-name.
-   *
-   * @return The exact field name of the field.
-   */
-  val fieldName: String = "",
+    /**
+     * Define the field-name pattern by an exact field name.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any field
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `fieldNamePattern` also defining field-name.
+     *
+     * @return The exact field name of the field.
+     */
+    val fieldName: String = "",
 
-  /**
-   * Define the field-name pattern by a string pattern.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field name.
-   *
-   * <p>
-   * Mutually exclusive with the property `fieldName` also defining field-name.
-   *
-   * @return The string pattern of the field name.
-   */
-  val fieldNamePattern: StringPattern = StringPattern(exact = ""),
+    /**
+     * Define the field-name pattern by a string pattern.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any field
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `fieldName` also defining field-name.
+     *
+     * @return The string pattern of the field name.
+     */
+    val fieldNamePattern: StringPattern = StringPattern(exact = ""),
 
-  /**
-   * Define the field-type pattern by a fully qualified type.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldTypeConstant
-   * <li>fieldTypePattern
-   * </ul>
-   *
-   * @return The qualified type name for the field type.
-   */
-  val fieldType: String = "",
+    /**
+     * Define the field-type pattern by a fully qualified type.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldTypeConstant
+     * <li>fieldTypePattern
+     * </ul>
+     *
+     * @return The qualified type name for the field type.
+     */
+    val fieldType: String = "",
 
-  /**
-   * Define the field-type pattern by a class constant.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldType
-   * <li>fieldTypePattern
-   * </ul>
-   *
-   * @return The class constant for the field type.
-   */
-  val fieldTypeConstant: KClass<*> = Object::class,
+    /**
+     * Define the field-type pattern by a class constant.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldType
+     * <li>fieldTypePattern
+     * </ul>
+     *
+     * @return The class constant for the field type.
+     */
+    val fieldTypeConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the field-type pattern by a pattern on types.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldType
-   * <li>fieldTypeConstant
-   * </ul>
-   *
-   * @return The type pattern for the field type.
-   */
-  val fieldTypePattern: TypePattern = TypePattern(name = ""),
+    /**
+     * Define the field-type pattern by a pattern on types.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldType
+     * <li>fieldTypeConstant
+     * </ul>
+     *
+     * @return The type pattern for the field type.
+     */
+    val fieldTypePattern: TypePattern = TypePattern(name = ""),
 )
diff --git a/src/keepanno/java/androidx/annotation/keep/UsedByReflection.kt b/src/keepanno/java/androidx/annotation/keep/UsedByReflection.kt
index 8f4c8db..c617f77 100644
--- a/src/keepanno/java/androidx/annotation/keep/UsedByReflection.kt
+++ b/src/keepanno/java/androidx/annotation/keep/UsedByReflection.kt
@@ -48,589 +48,596 @@
  */
 @Retention(AnnotationRetention.BINARY)
 @Target(
-  AnnotationTarget.CLASS,
-  AnnotationTarget.FIELD,
-  AnnotationTarget.FUNCTION,
-  AnnotationTarget.CONSTRUCTOR,
+    AnnotationTarget.CLASS,
+    AnnotationTarget.FIELD,
+    AnnotationTarget.FUNCTION,
+    AnnotationTarget.CONSTRUCTOR,
 )
 public annotation class UsedByReflection(
 
-  /**
-   * Optional description to document the reason for this annotation.
-   *
-   * @return The descriptive message. Defaults to no description.
-   */
-  val description: String = "",
+    /**
+     * Optional description to document the reason for this annotation.
+     *
+     * @return The descriptive message. Defaults to no description.
+     */
+    val description: String = "",
 
-  /**
-   * Conditions that should be satisfied for the annotation to be in effect.
-   *
-   * @return The list of preconditions. Defaults to no conditions, thus trivially/unconditionally
-   *   satisfied.
-   */
-  val preconditions: Array<KeepCondition> = [],
+    /**
+     * Conditions that should be satisfied for the annotation to be in effect.
+     *
+     * @return The list of preconditions. Defaults to no conditions, thus trivially/unconditionally
+     *   satisfied.
+     */
+    val preconditions: Array<KeepCondition> = [],
 
-  /**
-   * Additional targets to be kept in addition to the annotated class/members.
-   *
-   * @return List of additional target consequences. Defaults to no additional target consequences.
-   */
-  val additionalTargets: Array<KeepTarget> = [],
+    /**
+     * Additional targets to be kept in addition to the annotated class/members.
+     *
+     * @return List of additional target consequences. Defaults to no additional target
+     *   consequences.
+     */
+    val additionalTargets: Array<KeepTarget> = [],
 
-  /**
-   * Specify the kind of this item pattern.
-   *
-   * <p>
-   * If unspecified the default kind depends on the annotated item.
-   *
-   * <p>
-   * When annotating a class the default kind is:
-   * <ul>
-   * <li>{@link KeepItemKind#ONLY_CLASS} if no member patterns are defined;
-   * <li>{@link KeepItemKind#CLASS_AND_METHODS} if method patterns are defined;
-   * <li>{@link KeepItemKind#CLASS_AND_FIELDS} if field patterns are defined;
-   * <li>{@link KeepItemKind#CLASS_AND_MEMBERS} otherwise.
-   * </ul>
-   *
-   * <p>
-   * When annotating a method the default kind is: {@link KeepItemKind#ONLY_METHODS}
-   *
-   * <p>
-   * When annotating a field the default kind is: {@link KeepItemKind#ONLY_FIELDS}
-   *
-   * <p>
-   * It is not possible to use {@link KeepItemKind#ONLY_CLASS} if annotating a member.
-   *
-   * @return The kind for this pattern.
-   */
-  val kind: KeepItemKind = KeepItemKind.DEFAULT,
+    /**
+     * Specify the kind of this item pattern.
+     *
+     * <p>
+     * If unspecified the default kind depends on the annotated item.
+     *
+     * <p>
+     * When annotating a class the default kind is:
+     * <ul>
+     * <li>{@link KeepItemKind#ONLY_CLASS} if no member patterns are defined;
+     * <li>{@link KeepItemKind#CLASS_AND_METHODS} if method patterns are defined;
+     * <li>{@link KeepItemKind#CLASS_AND_FIELDS} if field patterns are defined;
+     * <li>{@link KeepItemKind#CLASS_AND_MEMBERS} otherwise.
+     * </ul>
+     *
+     * <p>
+     * When annotating a method the default kind is: {@link KeepItemKind#ONLY_METHODS}
+     *
+     * <p>
+     * When annotating a field the default kind is: {@link KeepItemKind#ONLY_FIELDS}
+     *
+     * <p>
+     * It is not possible to use {@link KeepItemKind#ONLY_CLASS} if annotating a member.
+     *
+     * @return The kind for this pattern.
+     */
+    val kind: KeepItemKind = KeepItemKind.DEFAULT,
 
-  /**
-   * Define the usage constraints of the target.
-   *
-   * <p>
-   * The specified constraints must remain valid for the target.
-   *
-   * <p>
-   * The default constraints depend on the kind of the target. For all targets the default
-   * constraints include:
-   * <ul>
-   * <li>{@link KeepConstraint#LOOKUP}
-   * <li>{@link KeepConstraint#NAME}
-   * <li>{@link KeepConstraint#VISIBILITY_RELAX}
-   * </ul>
-   *
-   * <p>
-   * For classes the default constraints also include:
-   * <ul>
-   * <li>{@link KeepConstraint#CLASS_INSTANTIATE}
-   * </ul>
-   *
-   * <p>
-   * For methods the default constraints also include:
-   * <ul>
-   * <li>{@link KeepConstraint#METHOD_INVOKE}
-   * </ul>
-   *
-   * <p>
-   * For fields the default constraints also include:
-   * <ul>
-   * <li>{@link KeepConstraint#FIELD_GET}
-   * <li>{@link KeepConstraint#FIELD_SET}
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with the property `constraintAdditions` also defining constraints.
-   *
-   * @return Usage constraints for the target.
-   */
-  val constraints: Array<KeepConstraint> = [],
+    /**
+     * Define the usage constraints of the target.
+     *
+     * <p>
+     * The specified constraints must remain valid for the target.
+     *
+     * <p>
+     * The default constraints depend on the kind of the target. For all targets the default
+     * constraints include:
+     * <ul>
+     * <li>{@link KeepConstraint#LOOKUP}
+     * <li>{@link KeepConstraint#NAME}
+     * <li>{@link KeepConstraint#VISIBILITY_RELAX}
+     * </ul>
+     *
+     * <p>
+     * For classes the default constraints also include:
+     * <ul>
+     * <li>{@link KeepConstraint#CLASS_INSTANTIATE}
+     * </ul>
+     *
+     * <p>
+     * For methods the default constraints also include:
+     * <ul>
+     * <li>{@link KeepConstraint#METHOD_INVOKE}
+     * </ul>
+     *
+     * <p>
+     * For fields the default constraints also include:
+     * <ul>
+     * <li>{@link KeepConstraint#FIELD_GET}
+     * <li>{@link KeepConstraint#FIELD_SET}
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with the property `constraintAdditions` also defining constraints.
+     *
+     * @return Usage constraints for the target.
+     */
+    val constraints: Array<KeepConstraint> = [],
 
-  /**
-   * Add additional usage constraints of the target.
-   *
-   * <p>
-   * The specified constraints must remain valid for the target in addition to the default
-   * constraints.
-   *
-   * <p>
-   * The default constraints are documented in {@link #constraints}
-   *
-   * <p>
-   * Mutually exclusive with the property `constraints` also defining constraints.
-   *
-   * @return Additional usage constraints for the target.
-   */
-  val constraintAdditions: Array<KeepConstraint> = [],
+    /**
+     * Add additional usage constraints of the target.
+     *
+     * <p>
+     * The specified constraints must remain valid for the target in addition to the default
+     * constraints.
+     *
+     * <p>
+     * The default constraints are documented in {@link #constraints}
+     *
+     * <p>
+     * Mutually exclusive with the property `constraints` also defining constraints.
+     *
+     * @return Additional usage constraints for the target.
+     */
+    val constraintAdditions: Array<KeepConstraint> = [],
 
-  /**
-   * Patterns for annotations that must remain on the item.
-   *
-   * <p>
-   * The annotations matching any of the patterns must remain on the item if the annotation types
-   * remain in the program.
-   *
-   * <p>
-   * Note that if the annotation types themselves are unused/removed, then their references on the
-   * item will be removed too. If the annotation types themselves are used reflectively then they
-   * too need a keep annotation or rule to ensure they remain in the program.
-   *
-   * <p>
-   * By default no annotation patterns are defined and no annotations are required to remain.
-   *
-   * @return Annotation patterns
-   */
-  val constrainAnnotations: Array<AnnotationPattern> = [],
+    /**
+     * Patterns for annotations that must remain on the item.
+     *
+     * <p>
+     * The annotations matching any of the patterns must remain on the item if the annotation types
+     * remain in the program.
+     *
+     * <p>
+     * Note that if the annotation types themselves are unused/removed, then their references on the
+     * item will be removed too. If the annotation types themselves are used reflectively then they
+     * too need a keep annotation or rule to ensure they remain in the program.
+     *
+     * <p>
+     * By default no annotation patterns are defined and no annotations are required to remain.
+     *
+     * @return Annotation patterns
+     */
+    val constrainAnnotations: Array<AnnotationPattern> = [],
 
-  /**
-   * Define the member-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassConstant
-   * <li>memberAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val memberAnnotatedByClassName: String = "",
+    /**
+     * Define the member-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassConstant
+     * <li>memberAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val memberAnnotatedByClassName: String = "",
 
-  /**
-   * Define the member-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassName
-   * <li>memberAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val memberAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the member-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassName
+     * <li>memberAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val memberAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the member-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining member-annotated-by:
-   * <ul>
-   * <li>memberAnnotatedByClassName
-   * <li>memberAnnotatedByClassConstant
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * <p>
-   * If none are specified the default is to match any member regardless of what the member is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val memberAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the member-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining member-annotated-by:
+     * <ul>
+     * <li>memberAnnotatedByClassName
+     * <li>memberAnnotatedByClassConstant
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * <p>
+     * If none are specified the default is to match any member regardless of what the member is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val memberAnnotatedByClassNamePattern: ClassNamePattern =
+        ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the member-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all field and method properties as use restricts the match to both
-   * types of members.
-   *
-   * @return The member access-flag constraints that must be met.
-   */
-  val memberAccess: Array<MemberAccessFlags> = [],
+    /**
+     * Define the member-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all field and method properties as use restricts the match to both
+     * types of members.
+     *
+     * @return The member access-flag constraints that must be met.
+     */
+    val memberAccess: Array<MemberAccessFlags> = [],
 
-  /**
-   * Define the method-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassConstant
-   * <li>methodAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val methodAnnotatedByClassName: String = "",
+    /**
+     * Define the method-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassConstant
+     * <li>methodAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val methodAnnotatedByClassName: String = "",
 
-  /**
-   * Define the method-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassName
-   * <li>methodAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val methodAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the method-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassName
+     * <li>methodAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val methodAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the method-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining method-annotated-by:
-   * <ul>
-   * <li>methodAnnotatedByClassName
-   * <li>methodAnnotatedByClassConstant
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none are specified the default is to match any method regardless of what the method is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val methodAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the method-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining method-annotated-by:
+     * <ul>
+     * <li>methodAnnotatedByClassName
+     * <li>methodAnnotatedByClassConstant
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none are specified the default is to match any method regardless of what the method is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val methodAnnotatedByClassNamePattern: ClassNamePattern =
+        ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the method-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any
-   * method-access flags.
-   *
-   * @return The method access-flag constraints that must be met.
-   */
-  val methodAccess: Array<MethodAccessFlags> = [],
+    /**
+     * Define the method-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * method-access flags.
+     *
+     * @return The method access-flag constraints that must be met.
+     */
+    val methodAccess: Array<MethodAccessFlags> = [],
 
-  /**
-   * Define the method-name pattern by an exact method name.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any method
-   * name.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodNamePattern` also defining method-name.
-   *
-   * @return The exact method name of the method.
-   */
-  val methodName: String = "",
+    /**
+     * Define the method-name pattern by an exact method name.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any method
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodNamePattern` also defining method-name.
+     *
+     * @return The exact method name of the method.
+     */
+    val methodName: String = "",
 
-  /**
-   * Define the method-name pattern by a string pattern.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any method
-   * name.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodName` also defining method-name.
-   *
-   * @return The string pattern of the method name.
-   */
-  val methodNamePattern: StringPattern = StringPattern(exact = ""),
+    /**
+     * Define the method-name pattern by a string pattern.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any method
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodName` also defining method-name.
+     *
+     * @return The string pattern of the method name.
+     */
+    val methodNamePattern: StringPattern = StringPattern(exact = ""),
 
-  /**
-   * Define the method return-type pattern by a fully qualified type or 'void'.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnTypeConstant
-   * <li>methodReturnTypePattern
-   * </ul>
-   *
-   * @return The qualified type name of the method return type.
-   */
-  val methodReturnType: String = "",
+    /**
+     * Define the method return-type pattern by a fully qualified type or 'void'.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnTypeConstant
+     * <li>methodReturnTypePattern
+     * </ul>
+     *
+     * @return The qualified type name of the method return type.
+     */
+    val methodReturnType: String = "",
 
-  /**
-   * Define the method return-type pattern by a class constant.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnType
-   * <li>methodReturnTypePattern
-   * </ul>
-   *
-   * @return A class constant denoting the type of the method return type.
-   */
-  val methodReturnTypeConstant: KClass<*> = Object::class,
+    /**
+     * Define the method return-type pattern by a class constant.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnType
+     * <li>methodReturnTypePattern
+     * </ul>
+     *
+     * @return A class constant denoting the type of the method return type.
+     */
+    val methodReturnTypeConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the method return-type pattern by a type pattern.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any return
-   * type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining return-type:
-   * <ul>
-   * <li>methodReturnType
-   * <li>methodReturnTypeConstant
-   * </ul>
-   *
-   * @return The pattern of the method return type.
-   */
-  val methodReturnTypePattern: TypePattern = TypePattern(name = ""),
+    /**
+     * Define the method return-type pattern by a type pattern.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any return
+     * type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining return-type:
+     * <ul>
+     * <li>methodReturnType
+     * <li>methodReturnTypeConstant
+     * </ul>
+     *
+     * @return The pattern of the method return type.
+     */
+    val methodReturnTypePattern: TypePattern = TypePattern(name = ""),
 
-  /**
-   * Define the method parameters pattern by a list of fully qualified types.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any parameters.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodParameterTypePatterns` also defining parameters.
-   *
-   * @return The list of qualified type names of the method parameters.
-   */
-  val methodParameters: Array<String> = [""],
+    /**
+     * Define the method parameters pattern by a list of fully qualified types.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * parameters.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodParameterTypePatterns` also defining parameters.
+     *
+     * @return The list of qualified type names of the method parameters.
+     */
+    val methodParameters: Array<String> = [""],
 
-  /**
-   * Define the method parameters pattern by a list of patterns on types.
-   *
-   * <p>
-   * Mutually exclusive with all field properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a method, the default matches any parameters.
-   *
-   * <p>
-   * Mutually exclusive with the property `methodParameters` also defining parameters.
-   *
-   * @return The list of type patterns for the method parameters.
-   */
-  val methodParameterTypePatterns: Array<TypePattern> = [TypePattern(name = "")],
+    /**
+     * Define the method parameters pattern by a list of patterns on types.
+     *
+     * <p>
+     * Mutually exclusive with all field properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a method, the default matches any
+     * parameters.
+     *
+     * <p>
+     * Mutually exclusive with the property `methodParameters` also defining parameters.
+     *
+     * @return The list of type patterns for the method parameters.
+     */
+    val methodParameterTypePatterns: Array<TypePattern> = [TypePattern(name = "")],
 
-  /**
-   * Define the field-annotated-by pattern by fully qualified class name.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassConstant
-   * <li>fieldAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The qualified class name that defines the annotation.
-   */
-  val fieldAnnotatedByClassName: String = "",
+    /**
+     * Define the field-annotated-by pattern by fully qualified class name.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassConstant
+     * <li>fieldAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The qualified class name that defines the annotation.
+     */
+    val fieldAnnotatedByClassName: String = "",
 
-  /**
-   * Define the field-annotated-by pattern by reference to a Class constant.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassName
-   * <li>fieldAnnotatedByClassNamePattern
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The class-constant that defines the annotation.
-   */
-  val fieldAnnotatedByClassConstant: KClass<*> = Object::class,
+    /**
+     * Define the field-annotated-by pattern by reference to a Class constant.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassName
+     * <li>fieldAnnotatedByClassNamePattern
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The class-constant that defines the annotation.
+     */
+    val fieldAnnotatedByClassConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the field-annotated-by pattern by reference to a class-name pattern.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-annotated-by:
-   * <ul>
-   * <li>fieldAnnotatedByClassName
-   * <li>fieldAnnotatedByClassConstant
-   * </ul>
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none are specified the default is to match any field regardless of what the field is
-   * annotated by.
-   *
-   * @return The class-name pattern that defines the annotation.
-   */
-  val fieldAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
+    /**
+     * Define the field-annotated-by pattern by reference to a class-name pattern.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-annotated-by:
+     * <ul>
+     * <li>fieldAnnotatedByClassName
+     * <li>fieldAnnotatedByClassConstant
+     * </ul>
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none are specified the default is to match any field regardless of what the field is
+     * annotated by.
+     *
+     * @return The class-name pattern that defines the annotation.
+     */
+    val fieldAnnotatedByClassNamePattern: ClassNamePattern = ClassNamePattern(unqualifiedName = ""),
 
-  /**
-   * Define the field-access pattern by matching on access flags.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field-access
-   * flags.
-   *
-   * @return The field access-flag constraints that must be met.
-   */
-  val fieldAccess: Array<FieldAccessFlags> = [],
+    /**
+     * Define the field-access pattern by matching on access flags.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any
+     * field-access flags.
+     *
+     * @return The field access-flag constraints that must be met.
+     */
+    val fieldAccess: Array<FieldAccessFlags> = [],
 
-  /**
-   * Define the field-name pattern by an exact field name.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field name.
-   *
-   * <p>
-   * Mutually exclusive with the property `fieldNamePattern` also defining field-name.
-   *
-   * @return The exact field name of the field.
-   */
-  val fieldName: String = "",
+    /**
+     * Define the field-name pattern by an exact field name.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any field
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `fieldNamePattern` also defining field-name.
+     *
+     * @return The exact field name of the field.
+     */
+    val fieldName: String = "",
 
-  /**
-   * Define the field-name pattern by a string pattern.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any field name.
-   *
-   * <p>
-   * Mutually exclusive with the property `fieldName` also defining field-name.
-   *
-   * @return The string pattern of the field name.
-   */
-  val fieldNamePattern: StringPattern = StringPattern(exact = ""),
+    /**
+     * Define the field-name pattern by a string pattern.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any field
+     * name.
+     *
+     * <p>
+     * Mutually exclusive with the property `fieldName` also defining field-name.
+     *
+     * @return The string pattern of the field name.
+     */
+    val fieldNamePattern: StringPattern = StringPattern(exact = ""),
 
-  /**
-   * Define the field-type pattern by a fully qualified type.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldTypeConstant
-   * <li>fieldTypePattern
-   * </ul>
-   *
-   * @return The qualified type name for the field type.
-   */
-  val fieldType: String = "",
+    /**
+     * Define the field-type pattern by a fully qualified type.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldTypeConstant
+     * <li>fieldTypePattern
+     * </ul>
+     *
+     * @return The qualified type name for the field type.
+     */
+    val fieldType: String = "",
 
-  /**
-   * Define the field-type pattern by a class constant.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldType
-   * <li>fieldTypePattern
-   * </ul>
-   *
-   * @return The class constant for the field type.
-   */
-  val fieldTypeConstant: KClass<*> = Object::class,
+    /**
+     * Define the field-type pattern by a class constant.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldType
+     * <li>fieldTypePattern
+     * </ul>
+     *
+     * @return The class constant for the field type.
+     */
+    val fieldTypeConstant: KClass<*> = Object::class,
 
-  /**
-   * Define the field-type pattern by a pattern on types.
-   *
-   * <p>
-   * Mutually exclusive with all method properties.
-   *
-   * <p>
-   * If none, and other properties define this item as a field, the default matches any type.
-   *
-   * <p>
-   * Mutually exclusive with the following other properties defining field-type:
-   * <ul>
-   * <li>fieldType
-   * <li>fieldTypeConstant
-   * </ul>
-   *
-   * @return The type pattern for the field type.
-   */
-  val fieldTypePattern: TypePattern = TypePattern(name = ""),
+    /**
+     * Define the field-type pattern by a pattern on types.
+     *
+     * <p>
+     * Mutually exclusive with all method properties.
+     *
+     * <p>
+     * If none, and other properties define this item as a field, the default matches any type.
+     *
+     * <p>
+     * Mutually exclusive with the following other properties defining field-type:
+     * <ul>
+     * <li>fieldType
+     * <li>fieldTypeConstant
+     * </ul>
+     *
+     * @return The type pattern for the field type.
+     */
+    val fieldTypePattern: TypePattern = TypePattern(name = ""),
 )
diff --git a/src/keepanno/java/androidx/annotation/keep/UsesReflection.kt b/src/keepanno/java/androidx/annotation/keep/UsesReflection.kt
index 021b186..102fe77 100644
--- a/src/keepanno/java/androidx/annotation/keep/UsesReflection.kt
+++ b/src/keepanno/java/androidx/annotation/keep/UsesReflection.kt
@@ -77,31 +77,31 @@
  */
 @Retention(AnnotationRetention.BINARY)
 @Target(
-  AnnotationTarget.CLASS,
-  AnnotationTarget.FIELD,
-  AnnotationTarget.FUNCTION,
-  AnnotationTarget.CONSTRUCTOR,
+    AnnotationTarget.CLASS,
+    AnnotationTarget.FIELD,
+    AnnotationTarget.FUNCTION,
+    AnnotationTarget.CONSTRUCTOR,
 )
 public annotation class UsesReflection(
 
-  /**
-   * Optional description to document the reason for this annotation.
-   *
-   * @return The descriptive message. Defaults to no description.
-   */
-  val description: String = "",
+    /**
+     * Optional description to document the reason for this annotation.
+     *
+     * @return The descriptive message. Defaults to no description.
+     */
+    val description: String = "",
 
-  /**
-   * Consequences that must be kept if the annotation is in effect.
-   *
-   * @return The list of target consequences.
-   */
-  val value: Array<KeepTarget>,
+    /**
+     * Consequences that must be kept if the annotation is in effect.
+     *
+     * @return The list of target consequences.
+     */
+    val value: Array<KeepTarget>,
 
-  /**
-   * Additional preconditions for the annotation to be in effect.
-   *
-   * @return The list of additional preconditions. Defaults to no additional preconditions.
-   */
-  val additionalPreconditions: Array<KeepCondition> = [],
+    /**
+     * Additional preconditions for the annotation to be in effect.
+     *
+     * @return The list of additional preconditions. Defaults to no additional preconditions.
+     */
+    val additionalPreconditions: Array<KeepCondition> = [],
 )
