[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(