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(
