[KeepAnno] Statically initialize singletons.

This CL changes the singletons to not be lazy initialized.
The getters are kept so this could be changed without
breaking the API in the future.

Bug: b/248408342
Change-Id: I36b9bc12f402fad4b60158bf80623b1213b66a23
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepExtendsPattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepExtendsPattern.java
index b6b0fd7..02c8768 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepExtendsPattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepExtendsPattern.java
@@ -7,7 +7,7 @@
 public abstract class KeepExtendsPattern {
 
   public static KeepExtendsPattern any() {
-    return KeepExtendsAnyPattern.getInstance();
+    return Any.getInstance();
   }
 
   public static class Builder {
@@ -17,24 +17,21 @@
     private Builder() {}
 
     public Builder any() {
-      pattern = KeepExtendsAnyPattern.getInstance();
+      pattern = Any.getInstance();
       return this;
     }
 
     public Builder classPattern(KeepQualifiedClassNamePattern pattern) {
-      this.pattern = new KeepExtendsClassPattern(pattern);
+      this.pattern = new Some(pattern);
       return this;
     }
   }
 
-  private static class KeepExtendsAnyPattern extends KeepExtendsPattern {
+  private static class Any extends KeepExtendsPattern {
 
-    private static KeepExtendsAnyPattern INSTANCE = null;
+    private static final Any INSTANCE = new Any();
 
-    public static KeepExtendsAnyPattern getInstance() {
-      if (INSTANCE == null) {
-        INSTANCE = new KeepExtendsAnyPattern();
-      }
+    public static Any getInstance() {
       return INSTANCE;
     }
 
@@ -59,11 +56,11 @@
     }
   }
 
-  private static class KeepExtendsClassPattern extends KeepExtendsPattern {
+  private static class Some extends KeepExtendsPattern {
 
     private final KeepQualifiedClassNamePattern pattern;
 
-    public KeepExtendsClassPattern(KeepQualifiedClassNamePattern pattern) {
+    public Some(KeepQualifiedClassNamePattern pattern) {
       assert pattern != null;
       this.pattern = pattern;
     }
@@ -81,7 +78,7 @@
       if (o == null || getClass() != o.getClass()) {
         return false;
       }
-      KeepExtendsClassPattern that = (KeepExtendsClassPattern) o;
+      Some that = (Some) o;
       return pattern.equals(that.pattern);
     }
 
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemPattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemPattern.java
index e5b0987..1368c8c 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemPattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepItemPattern.java
@@ -24,7 +24,7 @@
   }
 
   public static KeepItemPattern any() {
-    return KeepItemAnyPattern.getInstance();
+    return Any.getInstance();
   }
 
   public static class Builder {
@@ -68,14 +68,11 @@
     }
   }
 
-  private static class KeepItemAnyPattern extends KeepItemPattern {
+  private static class Any extends KeepItemPattern {
 
-    private static KeepItemAnyPattern INSTANCE = null;
+    private static final Any INSTANCE = new Any();
 
-    public static KeepItemAnyPattern getInstance() {
-      if (INSTANCE == null) {
-        INSTANCE = new KeepItemAnyPattern();
-      }
+    public static Any getInstance() {
       return INSTANCE;
     }
 
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberPattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberPattern.java
index bd716e9..51884e1 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberPattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMemberPattern.java
@@ -6,16 +6,13 @@
 public abstract class KeepMemberPattern {
 
   public static KeepMemberPattern anyMember() {
-    return KeepMemberAnyPattern.getInstance();
+    return Any.getInstance();
   }
 
-  private static class KeepMemberAnyPattern extends KeepMemberPattern {
-    private static KeepMemberAnyPattern INSTANCE = null;
+  private static class Any extends KeepMemberPattern {
+    private static final Any INSTANCE = new Any();
 
-    public static KeepMemberAnyPattern getInstance() {
-      if (INSTANCE == null) {
-        INSTANCE = new KeepMemberAnyPattern();
-      }
+    public static Any getInstance() {
       return INSTANCE;
     }
 
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMembersPattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMembersPattern.java
index be5af32..9571329 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMembersPattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMembersPattern.java
@@ -17,11 +17,11 @@
   }
 
   public static KeepMembersPattern none() {
-    return KeepMembersNonePattern.getInstance();
+    return None.getInstance();
   }
 
   public static KeepMembersPattern all() {
-    return KeepMembersAllPattern.getInstance();
+    return All.getInstance();
   }
 
   public static class Builder {
@@ -62,18 +62,15 @@
       if (anyMethod && anyField) {
         return KeepMembersPattern.all();
       }
-      return new KeepMembersSomePattern(methods, fields);
+      return new Some(methods, fields);
     }
   }
 
-  private static class KeepMembersAllPattern extends KeepMembersPattern {
+  private static class All extends KeepMembersPattern {
 
-    private static KeepMembersAllPattern INSTANCE = null;
+    private static final All INSTANCE = new All();
 
-    public static KeepMembersAllPattern getInstance() {
-      if (INSTANCE == null) {
-        INSTANCE = new KeepMembersAllPattern();
-      }
+    public static All getInstance() {
       return INSTANCE;
     }
 
@@ -108,14 +105,11 @@
     }
   }
 
-  private static class KeepMembersNonePattern extends KeepMembersPattern {
+  private static class None extends KeepMembersPattern {
 
-    private static KeepMembersNonePattern INSTANCE = null;
+    private static final None INSTANCE = new None();
 
-    public static KeepMembersNonePattern getInstance() {
-      if (INSTANCE == null) {
-        INSTANCE = new KeepMembersNonePattern();
-      }
+    public static None getInstance() {
       return INSTANCE;
     }
 
@@ -150,12 +144,12 @@
     }
   }
 
-  private static class KeepMembersSomePattern extends KeepMembersPattern {
+  private static class Some extends KeepMembersPattern {
 
     private final List<KeepMethodPattern> methods;
     private final List<KeepFieldPattern> fields;
 
-    private KeepMembersSomePattern(List<KeepMethodPattern> methods, List<KeepFieldPattern> fields) {
+    private Some(List<KeepMethodPattern> methods, List<KeepFieldPattern> fields) {
       assert !methods.isEmpty() || !fields.isEmpty();
       this.methods = methods;
       this.fields = fields;
@@ -187,7 +181,7 @@
       if (obj == null || getClass() != obj.getClass()) {
         return false;
       }
-      KeepMembersSomePattern that = (KeepMembersSomePattern) obj;
+      Some that = (Some) obj;
       return methods.equals(that.methods) && fields.equals(that.fields);
     }
 
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodAccessPattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodAccessPattern.java
index fd0fd3e..4417b2e 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodAccessPattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodAccessPattern.java
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.keepanno.ast;
 
+
 // TODO: finish this.
 public abstract class KeepMethodAccessPattern {
 
@@ -14,12 +15,9 @@
 
   private static class Any extends KeepMethodAccessPattern {
 
-    private static Any INSTANCE = null;
+    private static final Any INSTANCE = new Any();
 
     private static Any getInstance() {
-      if (INSTANCE == null) {
-        INSTANCE = new Any();
-      }
       return INSTANCE;
     }
 
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodNamePattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodNamePattern.java
index 6dc373d..1a637de 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodNamePattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodNamePattern.java
@@ -9,7 +9,7 @@
 public abstract class KeepMethodNamePattern {
 
   public static KeepMethodNamePattern any() {
-    return KeepMethodNameAnyPattern.getInstance();
+    return Any.getInstance();
   }
 
   public static KeepMethodNamePattern initializer() {
@@ -33,13 +33,10 @@
 
   public abstract <T> T match(Supplier<T> onAny, Function<String, T> onExact);
 
-  private static class KeepMethodNameAnyPattern extends KeepMethodNamePattern {
-    private static KeepMethodNameAnyPattern INSTANCE = null;
+  private static class Any extends KeepMethodNamePattern {
+    private static final Any INSTANCE = new Any();
 
-    public static KeepMethodNameAnyPattern getInstance() {
-      if (INSTANCE == null) {
-        INSTANCE = new KeepMethodNameAnyPattern();
-      }
+    public static Any getInstance() {
       return INSTANCE;
     }
 
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodParametersPattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodParametersPattern.java
index 83b4606..cd850e6 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodParametersPattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodParametersPattern.java
@@ -27,12 +27,9 @@
   }
 
   private static class None extends KeepMethodParametersPattern {
-    private static None INSTANCE = null;
+    private static final None INSTANCE = new None();
 
     public static None getInstance() {
-      if (INSTANCE == null) {
-        INSTANCE = new None();
-      }
       return INSTANCE;
     }
 
@@ -58,12 +55,9 @@
   }
 
   private static class Any extends KeepMethodParametersPattern {
-    private static Any INSTANCE = null;
+    private static final Any INSTANCE = new Any();
 
     public static Any getInstance() {
-      if (INSTANCE == null) {
-        INSTANCE = new Any();
-      }
       return INSTANCE;
     }
 
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodReturnTypePattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodReturnTypePattern.java
index f711bc0..2786945 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodReturnTypePattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepMethodReturnTypePattern.java
@@ -8,12 +8,9 @@
 
 public abstract class KeepMethodReturnTypePattern {
 
-  private static SomeType ANY_TYPE_INSTANCE = null;
+  private static final SomeType ANY_TYPE_INSTANCE = new SomeType(KeepTypePattern.any());
 
   public static KeepMethodReturnTypePattern any() {
-    if (ANY_TYPE_INSTANCE == null) {
-      ANY_TYPE_INSTANCE = new SomeType(KeepTypePattern.any());
-    }
     return ANY_TYPE_INSTANCE;
   }
 
@@ -28,12 +25,9 @@
   }
 
   private static class VoidType extends KeepMethodReturnTypePattern {
-    private static VoidType INSTANCE = null;
+    private static final VoidType INSTANCE = new VoidType();
 
     public static VoidType getInstance() {
-      if (INSTANCE == null) {
-        INSTANCE = new VoidType();
-      }
       return INSTANCE;
     }
 
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepOptions.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepOptions.java
index 21b7487..8e1b2e9 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepOptions.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepOptions.java
@@ -12,6 +12,7 @@
 import java.util.stream.Collectors;
 
 public final class KeepOptions {
+  private static final KeepOptions ALLOW_NONE_INSTANCE = new KeepOptions(ImmutableSet.of());
 
   public boolean isKeepAll() {
     return allowedOptions.isEmpty();
@@ -25,9 +26,6 @@
   }
 
   public static KeepOptions keepAll() {
-    if (ALLOW_NONE_INSTANCE == null) {
-      ALLOW_NONE_INSTANCE = new KeepOptions(ImmutableSet.of());
-    }
     return ALLOW_NONE_INSTANCE;
   }
 
@@ -97,8 +95,6 @@
     }
   }
 
-  private static KeepOptions ALLOW_NONE_INSTANCE = null;
-
   private final ImmutableSet<KeepOption> allowedOptions;
 
   private KeepOptions(ImmutableSet<KeepOption> options) {
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepPackagePattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepPackagePattern.java
index 7d23490..6042930 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepPackagePattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepPackagePattern.java
@@ -10,11 +10,11 @@
   }
 
   public static KeepPackagePattern any() {
-    return KeepPackageAnyPattern.getInstance();
+    return Any.getInstance();
   }
 
   public static KeepPackagePattern top() {
-    return KeepPackageTopPattern.getInstance();
+    return Top.getInstance();
   }
 
   public static KeepPackagePattern exact(String fullPackage) {
@@ -26,20 +26,17 @@
     private KeepPackagePattern pattern;
 
     public Builder any() {
-      pattern = KeepPackageAnyPattern.getInstance();
+      pattern = Any.getInstance();
       return this;
     }
 
     public Builder top() {
-      pattern = KeepPackageTopPattern.getInstance();
+      pattern = Top.getInstance();
       return this;
     }
 
     public Builder exact(String fullPackage) {
-      pattern =
-          fullPackage.isEmpty()
-              ? KeepPackagePattern.top()
-              : new KeepPackageExactPattern(fullPackage);
+      pattern = fullPackage.isEmpty() ? KeepPackagePattern.top() : new Exact(fullPackage);
       return this;
     }
 
@@ -51,18 +48,15 @@
     }
   }
 
-  private static final class KeepPackageAnyPattern extends KeepPackagePattern {
+  private static final class Any extends KeepPackagePattern {
 
-    private static KeepPackageAnyPattern INSTANCE = null;
+    private static final Any INSTANCE = new Any();
 
-    public static KeepPackageAnyPattern getInstance() {
-      if (INSTANCE == null) {
-        INSTANCE = new KeepPackageAnyPattern();
-      }
+    public static Any getInstance() {
       return INSTANCE;
     }
 
-    private KeepPackageAnyPattern() {}
+    private Any() {}
 
     @Override
     public boolean isAny() {
@@ -95,18 +89,15 @@
     }
   }
 
-  private static final class KeepPackageTopPattern extends KeepPackageExactPattern {
+  private static final class Top extends Exact {
 
-    private static KeepPackageTopPattern INSTANCE = null;
+    private static final Top INSTANCE = new Top();
 
-    public static KeepPackageTopPattern getInstance() {
-      if (INSTANCE == null) {
-        INSTANCE = new KeepPackageTopPattern();
-      }
+    public static Top getInstance() {
       return INSTANCE;
     }
 
-    private KeepPackageTopPattern() {
+    private Top() {
       super("");
     }
 
@@ -126,11 +117,11 @@
     }
   }
 
-  public static class KeepPackageExactPattern extends KeepPackagePattern {
+  private static class Exact extends KeepPackagePattern {
 
     private final String fullPackage;
 
-    private KeepPackageExactPattern(String fullPackage) {
+    private Exact(String fullPackage) {
       assert fullPackage != null;
       this.fullPackage = fullPackage;
       // TODO: Verify valid package identifiers.
@@ -152,10 +143,6 @@
     }
 
     @Override
-    public KeepPackageExactPattern asExact() {
-      return this;
-    }
-
     public String getExactPackageAsString() {
       return fullPackage;
     }
@@ -168,7 +155,7 @@
       if (o == null || getClass() != o.getClass()) {
         return false;
       }
-      KeepPackageExactPattern that = (KeepPackageExactPattern) o;
+      Exact that = (Exact) o;
       return fullPackage.equals(that.fullPackage);
     }
 
@@ -189,7 +176,7 @@
 
   public abstract boolean isExact();
 
-  public KeepPackageExactPattern asExact() {
-    return null;
+  public String getExactPackageAsString() {
+    throw new IllegalStateException();
   }
 }
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepPreconditions.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepPreconditions.java
index f672013..dfba9f6 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepPreconditions.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepPreconditions.java
@@ -34,19 +34,16 @@
   }
 
   public static KeepPreconditions always() {
-    return KeepPreconditionsAlways.getInstance();
+    return Always.getInstance();
   }
 
   public abstract boolean isAlways();
 
-  private static class KeepPreconditionsAlways extends KeepPreconditions {
+  private static class Always extends KeepPreconditions {
 
-    private static KeepPreconditionsAlways INSTANCE = null;
+    private static final Always INSTANCE = new Always();
 
-    public static KeepPreconditionsAlways getInstance() {
-      if (INSTANCE == null) {
-        INSTANCE = new KeepPreconditionsAlways();
-      }
+    public static Always getInstance() {
       return INSTANCE;
     }
 
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepQualifiedClassNamePattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepQualifiedClassNamePattern.java
index 97d01b9..ee7f3d9 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepQualifiedClassNamePattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepQualifiedClassNamePattern.java
@@ -83,7 +83,7 @@
       throw new KeepEdgeException("Attempt to obtain exact qualified type for inexact pattern");
     }
     return 'L'
-        + packagePattern.asExact().getExactPackageAsString().replace('.', '/')
+        + packagePattern.getExactPackageAsString().replace('.', '/')
         + (packagePattern.isTop() ? "" : "/")
         + namePattern.asExact().getExactNameAsString()
         + ';';
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepTypePattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepTypePattern.java
index a790094..c7c24b5 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepTypePattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepTypePattern.java
@@ -10,12 +10,9 @@
   }
 
   private static class Any extends KeepTypePattern {
-    private static Any INSTANCE = null;
+    private static final Any INSTANCE = new Any();
 
     public static Any getInstance() {
-      if (INSTANCE == null) {
-        INSTANCE = new Any();
-      }
       return INSTANCE;
     }
 
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepUnqualfiedClassNamePattern.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepUnqualfiedClassNamePattern.java
index c9ac380..f1fbd28 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepUnqualfiedClassNamePattern.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepUnqualfiedClassNamePattern.java
@@ -10,7 +10,7 @@
   }
 
   public static KeepUnqualfiedClassNamePattern any() {
-    return KeepClassNameAnyPattern.getInstance();
+    return Any.getInstance();
   }
 
   public static KeepUnqualfiedClassNamePattern exact(String className) {
@@ -22,7 +22,7 @@
     private KeepUnqualfiedClassNamePattern pattern;
 
     public Builder any() {
-      pattern = KeepClassNameAnyPattern.getInstance();
+      pattern = Any.getInstance();
       return this;
     }
 
@@ -39,18 +39,15 @@
     }
   }
 
-  private static class KeepClassNameAnyPattern extends KeepUnqualfiedClassNamePattern {
+  private static class Any extends KeepUnqualfiedClassNamePattern {
 
-    private static KeepClassNameAnyPattern INSTANCE = null;
+    private static final Any INSTANCE = new Any();
 
-    public static KeepClassNameAnyPattern getInstance() {
-      if (INSTANCE == null) {
-        INSTANCE = new KeepClassNameAnyPattern();
-      }
+    public static Any getInstance() {
       return INSTANCE;
     }
 
-    private KeepClassNameAnyPattern() {}
+    private Any() {}
 
     @Override
     public boolean isAny() {
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
index d9b75ae..be60ad5 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/keeprules/KeepRuleExtractor.java
@@ -203,7 +203,7 @@
       return builder;
     }
     assert packagePattern.isExact();
-    return builder.append(packagePattern.asExact().getExactPackageAsString()).append('.');
+    return builder.append(packagePattern.getExactPackageAsString()).append('.');
   }
 
   private static StringBuilder printSimpleClassName(