diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 8e1d1bd..c5c1e88 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -95,26 +95,37 @@
 
 
 def CheckKotlinFormatting(paths, output_api, results):
-  cmd = [GetJavaExecutable(), '-jar', KOTLIN_FMT_JAR, '--google-style', '-n']
-  cmd.extend(paths)
-  result = check_output(cmd)
-  if len(result) > 0:
-    with_format_error = result.splitlines()
-    for path in with_format_error:
-      results.append(
-        output_api.PresubmitError(
-          "File {path} needs formatting".format(path=path.decode('utf-8'))))
-  return len(result) > 0
+  paths_to_format = {
+      '--kotlinlang-style': [path for path in paths if path.startswith('src/keepanno/')],
+      '--google-style': [path for path in paths if not path.startswith('src/keepanno/')]
+  }
+  needs_formatting_count = 0
+  for format in ['--kotlinlang-style', '--google-style']:
+    cmd = [GetJavaExecutable(), '-jar', KOTLIN_FMT_JAR, format, '-n']
+    to_format = paths_to_format[format]
+    if len(to_format) > 0:
+      cmd.extend(to_format)
+      result = check_output(cmd)
+      if len(result) > 0:
+        with_format_error = result.splitlines()
+        for path in with_format_error:
+          results.append(
+            output_api.PresubmitError(
+              "File {path} needs formatting".format(path=path.decode('utf-8'))))
+    needs_formatting_count += len(result)
+  return needs_formatting_count > 0
 
 
 def KotlinFormatPresubmitMessage():
   return """Please fix the Kotlin formatting by running:
 
-  git diff $(git cl upstream) --name-only "*.kt" | xargs {java} -jar {fmt_jar} --google-style
+  git diff $(git cl upstream) --name-only "*.kt" | grep -v "^src/keepanno/" | xargs {java} -jar {fmt_jar} --google-style
+  git diff $(git cl upstream) --name-only "*.kt" | grep "^src/keepanno/" | xargs {java} -jar {fmt_jar} --kotlinlang-style
 
 or fix formatting, commit and upload:
 
-  git diff $(git cl upstream) --name-only "*.kt" | xargs {java} -jar {fmt_jar} --google-style && git commit -a --amend --no-edit && git cl upload
+  git diff $(git cl upstream) --name-only "*.kt" | grep -v "^src/keepanno/" | xargs {java} -jar {fmt_jar} --google-style && git commit -a --amend --no-edit && git cl upload
+  git diff $(git cl upstream) --name-only "*.kt" | grep "^src/keepanno/" | xargs {java} -jar {fmt_jar} --kotlinlang-style && git commit -a --amend --no-edit && git cl upload
 
 or bypass the checks with:
 
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> = [],
 )
diff --git a/src/test/java/com/android/tools/r8/cfmethodgeneration/CodeGenerationBase.java b/src/test/java/com/android/tools/r8/cfmethodgeneration/CodeGenerationBase.java
index 0bf9bd4..ddaa213 100644
--- a/src/test/java/com/android/tools/r8/cfmethodgeneration/CodeGenerationBase.java
+++ b/src/test/java/com/android/tools/r8/cfmethodgeneration/CodeGenerationBase.java
@@ -29,12 +29,17 @@
   private static final Path GOOGLE_JAVA_FORMAT_JAR =
       GOOGLE_JAVA_FORMAT_DIR.resolve("google-java-format-1.24.0-all-deps.jar");
 
+  private enum KOTLIN_FORMAT_STYLE {
+    GOOGLE,
+    KOTLINLANG
+  }
+
   protected final DexItemFactory factory = new DexItemFactory();
 
   public static String kotlinFormatRawOutput(String rawOutput) throws IOException {
     Path temporaryFile = File.createTempFile("output-", ".kt").toPath();
     Files.write(temporaryFile, rawOutput.getBytes());
-    kotlinFormatRawOutput(temporaryFile);
+    kotlinFormatRawOutput(temporaryFile, KOTLIN_FORMAT_STYLE.KOTLINLANG);
     String result = FileUtils.readTextFile(temporaryFile);
     temporaryFile.toFile().deleteOnExit();
     return result;
@@ -48,30 +53,24 @@
     return result;
   }
 
-  public static String kotlinFormatRawOutput(Path tempFile) throws IOException {
-    // Apply google format.
+  public static void kotlinFormatRawOutput(Path tempFile, KOTLIN_FORMAT_STYLE formatStyle)
+      throws IOException {
     ProcessBuilder builder =
         new ProcessBuilder(
             ImmutableList.of(
                 getJavaExecutable(),
                 "-jar",
                 GOOGLE_KOTLIN_FORMAT_JAR.toString(),
-                "--google-style",
+                formatStyle == KOTLIN_FORMAT_STYLE.GOOGLE ? "--google-style" : "--kotlinlang-style",
                 tempFile.toAbsolutePath().toString()));
     String commandString = String.join(" ", builder.command());
     System.out.println(commandString);
     Process process = builder.start();
     ProcessResult result = ToolHelper.drainProcessOutputStreams(process, commandString);
-    // Kotlin formatter will write "Done formatting..." to stderr.
+    // Kotlin formatter formats file directly and writes "Done formatting..." to stderr.
     if (result.exitCode != 0) {
       throw new IllegalStateException(result.toString());
     }
-    // Fix line separators.
-    String content = result.stdout;
-    if (!StringUtils.LINE_SEPARATOR.equals("\n")) {
-      return content.replace(StringUtils.LINE_SEPARATOR, "\n");
-    }
-    return content;
   }
 
   public static String javaFormatRawOutput(Path tempFile) throws IOException {
diff --git a/tools/update-androidx-keep-annotations.py b/tools/update-androidx-keep-annotations.py
index 91fffa0..29bf464 100755
--- a/tools/update-androidx-keep-annotations.py
+++ b/tools/update-androidx-keep-annotations.py
@@ -11,9 +11,6 @@
 
 
 KOTLIN_EXTENSION = '.kt'
-# Extension used by androidx KMP libraries for Kotlin files with code
-# targeting the JVM.
-JVM_KOTLIN_EXTENSION = '.jvm.kt'
 
 
 def parse_options():
@@ -43,7 +40,7 @@
         'annotation',
         'annotation-keep',
         'src',
-        'jvmMain',
+        'commonMain',
         'kotlin',
         'androidx',
         'annotation',
@@ -61,11 +58,10 @@
                 print('Unexpected non Kotlin file {filename}.'
                     .format(filename=os.path.join(root, filename)))
                 sys.exit(1)
-            new_filename = filename[0:len(filename) - len(KOTLIN_EXTENSION)] + JVM_KOTLIN_EXTENSION
 
             shutil.copyfile(
                 os.path.join(root, filename),
-                os.path.join(dest_dir, new_filename))
+                os.path.join(dest_dir, filename))
 
 
 if __name__ == '__main__':
