Enable ReferenceEquality error prone check
Bug: b/296992810
Change-Id: I75fddc11fb6e246592f160505a847820e64ab2c7
diff --git a/build.gradle b/build.gradle
index c766f7b..58bb94a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -623,12 +623,19 @@
!org.gradle.internal.jvm.Jvm.current().javaVersion.java8) {
compileJava {
- // Enable error prone for D8/R8 main sources and make all warnings errors.
- // Warnings that we have chosen not to fix (or suppress) are disabled outright below.
- options.compilerArgs << "-Werror"
+ // Enable error prone for D8/R8 main sources
options.errorprone.enabled = true
+ // Make all warnings errors. Warnings that we have chosen not to fix (or suppress) are
+ // disabled outright below.
+ options.compilerArgs << "-Werror"
+
+ // Increase number of reported errors to 1000 (default is 100).
+ options.compilerArgs << "-Xmaxerrs"
+ options.compilerArgs << "1000"
+
// Non-default / Experimental checks - explicitly enforced.
+ options.errorprone.check('ReferenceEquality', CheckSeverity.ERROR)
options.errorprone.check('RemoveUnusedImports', CheckSeverity.ERROR)
options.errorprone.check('InconsistentOverloads', CheckSeverity.ERROR)
options.errorprone.check('MissingDefault', CheckSeverity.ERROR)
@@ -687,7 +694,6 @@
options.errorprone.check('AlmostJavadoc', CheckSeverity.OFF)
// Moving away from identity and canonical items is not planned.
- options.errorprone.check('ReferenceEquality', CheckSeverity.OFF)
options.errorprone.check('IdentityHashMapUsage', CheckSeverity.OFF)
}
}
diff --git a/d8_r8/main/build.gradle.kts b/d8_r8/main/build.gradle.kts
index b6a8bda..e37f0e4 100644
--- a/d8_r8/main/build.gradle.kts
+++ b/d8_r8/main/build.gradle.kts
@@ -166,12 +166,19 @@
dependsOn(thirdPartyCompileDependenciesTask)
println("NOTE: Running with JDK: " + org.gradle.internal.jvm.Jvm.current().javaHome)
- // Enable error prone for D8/R8 main sources and make all warnings errors.
- // Warnings that we have chosen not to fix (or suppress) are disabled outright below.
- options.compilerArgs.add("-Werror")
+ // Enable error prone for D8/R8 main sources.
options.errorprone.isEnabled.set(true)
+ // Make all warnings errors. Warnings that we have chosen not to fix (or suppress) are disabled
+ // outright below.
+ options.compilerArgs.add("-Werror")
+
+ // Increase number of reported errors to 1000 (default is 100).
+ options.compilerArgs.add("-Xmaxerrs")
+ options.compilerArgs.add("1000")
+
// Non-default / Experimental checks - explicitly enforced.
+ options.errorprone.error("ReferenceEquality")
options.errorprone.error("RemoveUnusedImports")
options.errorprone.error("InconsistentOverloads")
options.errorprone.error("MissingDefault")
@@ -229,6 +236,5 @@
options.errorprone.disable("AlmostJavadoc")
// Moving away from identity and canonical items is not planned.
- options.errorprone.disable("ReferenceEquality")
options.errorprone.disable("IdentityHashMapUsage")
}
diff --git a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindings.java b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindings.java
index f94af20..790fb9e 100644
--- a/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindings.java
+++ b/src/keepanno/java/com/android/tools/r8/keepanno/ast/KeepBindings.java
@@ -211,6 +211,7 @@
return pattern.getClassReference().asBindingReference();
}
+ @SuppressWarnings("ReferenceEquality")
public KeepBindings build() {
if (bindings.isEmpty()) {
return NONE_INSTANCE;
diff --git a/src/main/java/com/android/tools/r8/DiagnosticsHandler.java b/src/main/java/com/android/tools/r8/DiagnosticsHandler.java
index 8d73909..a332327 100644
--- a/src/main/java/com/android/tools/r8/DiagnosticsHandler.java
+++ b/src/main/java/com/android/tools/r8/DiagnosticsHandler.java
@@ -16,6 +16,7 @@
public interface DiagnosticsHandler {
/** Should be considered private. */
+ @SuppressWarnings("ReferenceEquality")
static void printDiagnosticToStream(Diagnostic diagnostic, String prefix, PrintStream stream) {
if (diagnostic.getOrigin() != Origin.unknown()) {
stream.print(prefix + " in " + diagnostic.getOrigin());
diff --git a/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java b/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java
index 395a877..fc2188f 100644
--- a/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java
+++ b/src/main/java/com/android/tools/r8/GlobalSyntheticsGenerator.java
@@ -71,6 +71,7 @@
@Keep
public class GlobalSyntheticsGenerator {
+ @SuppressWarnings("ReferenceEquality")
private static boolean ensureAllGlobalSyntheticsModeled(SyntheticNaming naming) {
for (SyntheticKind kind : naming.kinds()) {
assert !kind.isGlobal()
@@ -301,6 +302,7 @@
executorService);
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean isExceptionType(AppView<?> appView, DexLibraryClass libraryClass) {
DexType throwableType = appView.dexItemFactory().throwableType;
DexType currentType = libraryClass.getType();
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 9c1ab31..df434f9 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -942,6 +942,7 @@
executorService);
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean verifyMovedMethodsHaveOriginalMethodPosition(
AppView<?> appView, DirectMappedDexApplication application) {
application
@@ -968,6 +969,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean verifyOriginalMethodInPosition(
Code code, DexMethod originalMethod, ProgramMethod context) {
code.forEachPosition(
diff --git a/src/main/java/com/android/tools/r8/androidapi/AndroidApiReferenceLevelCache.java b/src/main/java/com/android/tools/r8/androidapi/AndroidApiReferenceLevelCache.java
index 83a0f5e..fc51eb0 100644
--- a/src/main/java/com/android/tools/r8/androidapi/AndroidApiReferenceLevelCache.java
+++ b/src/main/java/com/android/tools/r8/androidapi/AndroidApiReferenceLevelCache.java
@@ -75,6 +75,7 @@
return lookup(reference, unknownValue, true);
}
+ @SuppressWarnings("ReferenceEquality")
private ComputedApiLevel lookup(
DexReference reference, ComputedApiLevel unknownValue, boolean ignoringDesugaredLibrary) {
DexType contextType = reference.getContextType();
diff --git a/src/main/java/com/android/tools/r8/androidapi/ApiReferenceStubber.java b/src/main/java/com/android/tools/r8/androidapi/ApiReferenceStubber.java
index d4f9278..adcb0ae 100644
--- a/src/main/java/com/android/tools/r8/androidapi/ApiReferenceStubber.java
+++ b/src/main/java/com/android/tools/r8/androidapi/ApiReferenceStubber.java
@@ -172,6 +172,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isJavaType(DexType type, DexItemFactory factory) {
DexString typeDescriptor = type.getDescriptor();
return type == factory.objectType
diff --git a/src/main/java/com/android/tools/r8/cf/CfPrinter.java b/src/main/java/com/android/tools/r8/cf/CfPrinter.java
index 8ad4f29..6341c03 100644
--- a/src/main/java/com/android/tools/r8/cf/CfPrinter.java
+++ b/src/main/java/com/android/tools/r8/cf/CfPrinter.java
@@ -780,6 +780,7 @@
builder.append(type);
}
+ @SuppressWarnings("ReferenceEquality")
private void appendClass(DexType type) {
assert type.isArrayType() || type.isClassType();
if (type == DexItemFactory.nullValueType) {
diff --git a/src/main/java/com/android/tools/r8/cf/CfRegisterAllocator.java b/src/main/java/com/android/tools/r8/cf/CfRegisterAllocator.java
index 8ec6ba4d..ad077ea 100644
--- a/src/main/java/com/android/tools/r8/cf/CfRegisterAllocator.java
+++ b/src/main/java/com/android/tools/r8/cf/CfRegisterAllocator.java
@@ -412,6 +412,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean hasEqualTypesAtEntry(BasicBlock first, BasicBlock second) {
if (!java.util.Objects.equals(first.getLocalsAtEntry(), second.getLocalsAtEntry())) {
return false;
diff --git a/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java b/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java
index db785cc..c5f1cac 100644
--- a/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java
+++ b/src/main/java/com/android/tools/r8/cf/TypeVerificationHelper.java
@@ -198,6 +198,7 @@
types.stream().map(DexType::toSourceString).collect(Collectors.toList())));
}
+ @SuppressWarnings("ReferenceEquality")
public TypeInfo join(TypeInfo info1, TypeInfo info2) {
if (info1 == info2) {
return info1;
@@ -220,10 +221,12 @@
return TypeElement.fromDexType(type, Nullability.maybeNull(), appView);
}
+ @SuppressWarnings("ReferenceEquality")
public Map<Value, TypeInfo> computeVerificationTypes() {
computingVerificationTypes = true;
types = new HashMap<>();
List<ConstNumber> nullsUsedInPhis = new ArrayList<>();
+ @SuppressWarnings("ReferenceEquality")
Set<Value> worklist = Sets.newIdentityHashSet();
{
InstructionIterator it = code.instructionIterator();
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfAssignability.java b/src/main/java/com/android/tools/r8/cf/code/CfAssignability.java
index d3f035b..d1ec598 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfAssignability.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfAssignability.java
@@ -37,6 +37,7 @@
: isFrameTypeAssignable(source.asWide(), target.asWide());
}
+ @SuppressWarnings("ReferenceEquality")
// Based on https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.10.1.2.
public boolean isFrameTypeAssignable(SingleFrameType source, SingleFrameType target) {
if (source.equals(target) || target.isOneWord()) {
@@ -80,6 +81,7 @@
return source.lessThanOrEqualTo(target);
}
+ @SuppressWarnings("ReferenceEquality")
// Rules found at https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.10.1.2
public boolean isAssignable(DexType source, DexType target) {
assert !target.isNullValueType();
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfFieldInstruction.java b/src/main/java/com/android/tools/r8/cf/code/CfFieldInstruction.java
index 39e66b1..9045c59 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfFieldInstruction.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfFieldInstruction.java
@@ -36,6 +36,7 @@
this(field, field);
}
+ @SuppressWarnings("ReferenceEquality")
public CfFieldInstruction(DexField field, DexField declaringField) {
this.field = field;
this.declaringField = declaringField;
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfFrameVerifierDefaultAnalysisConfig.java b/src/main/java/com/android/tools/r8/cf/code/CfFrameVerifierDefaultAnalysisConfig.java
index 82ea7ef..bd9f1a1 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfFrameVerifierDefaultAnalysisConfig.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfFrameVerifierDefaultAnalysisConfig.java
@@ -48,6 +48,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean isImmediateSuperClassOfCurrentContext(DexType type) {
// If the code is rewritten according to the graph lens, we perform a strict check that the
// given type is the same as the current holder's super class.
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java b/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java
index a0f3d5e..8a87dd0 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfInvoke.java
@@ -172,6 +172,7 @@
// We should avoid interpreting a CF invoke using DEX semantics.
@Deprecated
+ @SuppressWarnings("ReferenceEquality")
public boolean isInvokeSuper(DexType clazz) {
return opcode == Opcodes.INVOKESPECIAL
&& method.holder != clazz
@@ -283,6 +284,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public ConstraintWithTarget inliningConstraint(
InliningConstraints inliningConstraints, CfCode code, ProgramMethod context) {
GraphLens graphLens = inliningConstraints.getGraphLens();
@@ -368,6 +370,7 @@
return frame.push(config, method.getReturnType());
}
+ @SuppressWarnings("ReferenceEquality")
private InvokeType computeInvokeTypeForInvokeSpecial(
AppView<?> appView, DexMethod method, ProgramMethod context, DexType originalHolder) {
if (appView.dexItemFactory().isConstructor(method)) {
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfSubtypingAssignability.java b/src/main/java/com/android/tools/r8/cf/code/CfSubtypingAssignability.java
index 0343076..147e879 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfSubtypingAssignability.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfSubtypingAssignability.java
@@ -16,6 +16,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
boolean internalIsClassTypeAssignableToClassType(DexType source, DexType target) {
if (source == target || target == dexItemFactory.objectType) {
return true;
diff --git a/src/main/java/com/android/tools/r8/cf/code/frame/InitializedNonNullReferenceFrameTypeWithoutInterfaces.java b/src/main/java/com/android/tools/r8/cf/code/frame/InitializedNonNullReferenceFrameTypeWithoutInterfaces.java
index d25fb70..6dde359 100644
--- a/src/main/java/com/android/tools/r8/cf/code/frame/InitializedNonNullReferenceFrameTypeWithoutInterfaces.java
+++ b/src/main/java/com/android/tools/r8/cf/code/frame/InitializedNonNullReferenceFrameTypeWithoutInterfaces.java
@@ -53,6 +53,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public Object getTypeOpcode(GraphLens graphLens, NamingLens namingLens) {
DexType rewrittenType = graphLens.lookupType(type);
assert rewrittenType != DexItemFactory.nullValueType;
@@ -93,6 +94,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object obj) {
if (this == obj) {
return true;
diff --git a/src/main/java/com/android/tools/r8/cf/code/frame/PreciseFrameType.java b/src/main/java/com/android/tools/r8/cf/code/frame/PreciseFrameType.java
index 11f9a33..184b923 100644
--- a/src/main/java/com/android/tools/r8/cf/code/frame/PreciseFrameType.java
+++ b/src/main/java/com/android/tools/r8/cf/code/frame/PreciseFrameType.java
@@ -10,6 +10,7 @@
public interface PreciseFrameType extends FrameType {
@Override
+ @SuppressWarnings("ReferenceEquality")
default PreciseFrameType map(Function<DexType, DexType> fn) {
assert !isInitializedNonNullReferenceTypeWithInterfaces();
if (isInitializedNonNullReferenceTypeWithoutInterfaces()) {
diff --git a/src/main/java/com/android/tools/r8/cf/code/frame/UninitializedNew.java b/src/main/java/com/android/tools/r8/cf/code/frame/UninitializedNew.java
index 5fe76fe..d41a82d 100644
--- a/src/main/java/com/android/tools/r8/cf/code/frame/UninitializedNew.java
+++ b/src/main/java/com/android/tools/r8/cf/code/frame/UninitializedNew.java
@@ -61,6 +61,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object o) {
if (this == o) {
return true;
diff --git a/src/main/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryKeepRuleGenerator.java b/src/main/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryKeepRuleGenerator.java
index 8dc8979..ddadc01 100644
--- a/src/main/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryKeepRuleGenerator.java
+++ b/src/main/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryKeepRuleGenerator.java
@@ -119,6 +119,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void acceptType(TracedClass tracedClass, DiagnosticsHandler handler) {
ClassReference rewrittenReference = rewrittenWithLens(tracedClass.getReference());
super.acceptType(
@@ -132,6 +133,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void acceptField(TracedField tracedField, DiagnosticsHandler handler) {
FieldReference rewrittenReference = rewrittenWithLens(tracedField.getReference());
super.acceptField(
@@ -145,6 +147,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void acceptMethod(TracedMethod tracedMethod, DiagnosticsHandler handler) {
MethodReference rewrittenReference = rewrittenWithLens(tracedMethod.getReference());
super.acceptMethod(
@@ -198,6 +201,7 @@
return internalRewrittenWithLens(classReference, type);
}
+ @SuppressWarnings("ReferenceEquality")
private ClassReference internalRewrittenWithLens(ClassReference classReference, DexType type) {
DexString rewrittenDescriptor = namingLens.lookupClassDescriptor(type);
return addCacheEntry(
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
index 930cdda..f6491b7 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationWriter.java
@@ -765,6 +765,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void insertAttributeAnnotationsForClass(DexProgramClass clazz) {
EnclosingMethodAttribute enclosingMethod = clazz.getEnclosingMethodAttribute();
List<InnerClassAttribute> innerClasses = clazz.getInnerClasses();
diff --git a/src/main/java/com/android/tools/r8/dex/DexParser.java b/src/main/java/com/android/tools/r8/dex/DexParser.java
index c797a4f..cb80f3d 100644
--- a/src/main/java/com/android/tools/r8/dex/DexParser.java
+++ b/src/main/java/com/android/tools/r8/dex/DexParser.java
@@ -1475,6 +1475,7 @@
return enclosingMethodAttribute;
}
+ @SuppressWarnings("ReferenceEquality")
public AttributesAndAnnotations(
DexType type, Origin origin, DexAnnotationSet annotations, InternalOptions options) {
this.originalAnnotations = annotations;
diff --git a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
index 70305e4..1673d39 100644
--- a/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
+++ b/src/main/java/com/android/tools/r8/dex/JumboStringRewriter.java
@@ -72,6 +72,7 @@
this.endsAfterLastInstruction = endsAfterLastInstruction;
}
+ @SuppressWarnings("ReferenceEquality")
void replaceTarget(DexInstruction target, DexInstruction newTarget) {
if (start == target) {
start = newTarget;
@@ -474,6 +475,7 @@
return offsetDelta;
}
+ @SuppressWarnings("ReferenceEquality")
private void replaceTarget(DexInstruction target, DexInstruction newTarget) {
for (List<DexInstruction> instructions : instructionTargets.values()) {
instructions.replaceAll((i) -> i == target ? newTarget : i);
diff --git a/src/main/java/com/android/tools/r8/dex/VirtualFile.java b/src/main/java/com/android/tools/r8/dex/VirtualFile.java
index f44c562..72c0e2a 100644
--- a/src/main/java/com/android/tools/r8/dex/VirtualFile.java
+++ b/src/main/java/com/android/tools/r8/dex/VirtualFile.java
@@ -338,6 +338,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public List<VirtualFile> run() {
Map<DexType, VirtualFile> files = new IdentityHashMap<>();
Map<DexType, List<DexProgramClass>> derivedSynthetics = new LinkedHashMap<>();
@@ -1480,6 +1481,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private List<DexProgramClass> addNonStartupClasses() {
int prefixLength = MINIMUM_PREFIX_LENGTH;
int transactionStartIndex = 0;
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java
index 0718573..a8935b6 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat45cc.java
@@ -117,6 +117,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void write(
ShortBuffer dest,
ProgramMethod context,
diff --git a/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java b/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java
index e4ec21d..fcf77ed 100644
--- a/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java
+++ b/src/main/java/com/android/tools/r8/dex/code/DexFormat4rcc.java
@@ -53,6 +53,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void write(
ShortBuffer dest,
ProgramMethod context,
diff --git a/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphNode.java b/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphNode.java
index 12661c0..640035a 100644
--- a/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphNode.java
+++ b/src/main/java/com/android/tools/r8/experimental/graphinfo/GraphNode.java
@@ -36,6 +36,7 @@
return CYCLE;
}
+ @SuppressWarnings("ReferenceEquality")
public final boolean isCycle() {
return this == cycle();
}
diff --git a/src/main/java/com/android/tools/r8/experimental/graphinfo/KeepRuleGraphNode.java b/src/main/java/com/android/tools/r8/experimental/graphinfo/KeepRuleGraphNode.java
index 3485f17..67feaf7 100644
--- a/src/main/java/com/android/tools/r8/experimental/graphinfo/KeepRuleGraphNode.java
+++ b/src/main/java/com/android/tools/r8/experimental/graphinfo/KeepRuleGraphNode.java
@@ -81,6 +81,7 @@
* {@code <keep-rule-file>:<keep-rule-start-line>:<keep-rule-start-column>}.
*/
@Override
+ @SuppressWarnings("ReferenceEquality")
public String toString() {
return (getOrigin() == Origin.unknown() ? getContent() : getOrigin())
+ ":"
diff --git a/src/main/java/com/android/tools/r8/graph/AbstractAccessContexts.java b/src/main/java/com/android/tools/r8/graph/AbstractAccessContexts.java
index 0229986..a30eb47 100644
--- a/src/main/java/com/android/tools/r8/graph/AbstractAccessContexts.java
+++ b/src/main/java/com/android/tools/r8/graph/AbstractAccessContexts.java
@@ -221,6 +221,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
void flattenAccessContexts(DexField field) {
if (accessesWithContexts != null) {
ProgramMethodSet flattenedAccessContexts =
@@ -274,6 +275,7 @@
* Returns true if this field is written by a method in the program other than {@param method}.
*/
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean isAccessedOutside(DexEncodedMethod method) {
for (ProgramMethodSet encodedWriteContexts : accessesWithContexts.values()) {
for (ProgramMethod encodedWriteContext : encodedWriteContexts) {
@@ -307,6 +309,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
ConcreteAccessContexts rewrittenWithLens(DexDefinitionSupplier definitions, GraphLens lens) {
Map<DexField, ProgramMethodSet> rewrittenAccessesWithContexts = null;
for (Entry<DexField, ProgramMethodSet> entry : accessesWithContexts.entrySet()) {
diff --git a/src/main/java/com/android/tools/r8/graph/AccessControl.java b/src/main/java/com/android/tools/r8/graph/AccessControl.java
index d692cba..3819be8 100644
--- a/src/main/java/com/android/tools/r8/graph/AccessControl.java
+++ b/src/main/java/com/android/tools/r8/graph/AccessControl.java
@@ -115,6 +115,7 @@
return OptionalBool.FALSE;
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean isNestMate(DexClass clazz, DexClass context) {
if (clazz == context) {
return true;
diff --git a/src/main/java/com/android/tools/r8/graph/AppInfo.java b/src/main/java/com/android/tools/r8/graph/AppInfo.java
index 7052724..b02bb19 100644
--- a/src/main/java/com/android/tools/r8/graph/AppInfo.java
+++ b/src/main/java/com/android/tools/r8/graph/AppInfo.java
@@ -175,6 +175,7 @@
return definitionForWithoutExistenceAssert(type) != null;
}
+ @SuppressWarnings("ReferenceEquality")
public DexClass definitionForDesugarDependency(DexClass dependent, DexType type) {
if (dependent.type == type) {
return dependent;
@@ -205,6 +206,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void reportDependencyEdge(
DesugarGraphConsumer consumer, Origin dependencyOrigin, Origin dependentOrigin) {
if (dependencyOrigin == GlobalSyntheticOrigin.instance()
@@ -224,6 +226,7 @@
* @param context the method the invoke is contained in, i.e., the caller.
* @return The actual target for {@code method} if on the holder, or {@code null}.
*/
+ @SuppressWarnings("ReferenceEquality")
public final DexEncodedMethod lookupStaticTargetOnItself(
DexMethod method, ProgramMethod context) {
if (method.holder != context.getHolderType()) {
@@ -243,6 +246,7 @@
* @param context the method the invoke is contained in, i.e., the caller.
* @return The actual target for {@code method} if on the holder, or {@code null}.
*/
+ @SuppressWarnings("ReferenceEquality")
public final DexEncodedMethod lookupDirectTargetOnItself(
DexMethod method, ProgramMethod context) {
if (method.holder != context.getHolderType()) {
@@ -279,6 +283,7 @@
return resolveFieldOn(field.holder, field, context);
}
+ @SuppressWarnings("ReferenceEquality")
public FieldResolutionResult resolveFieldOn(DexType type, DexField field, ProgramMethod context) {
// Only allow resolution if the field is declared in the context.
if (type != context.getHolderType()) {
diff --git a/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java b/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java
index 5e5d54d..2ef7860 100644
--- a/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java
+++ b/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java
@@ -270,6 +270,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isSubtype(DexType subtype, DexType supertype) {
assert subtype != null;
assert supertype != null;
@@ -278,6 +279,7 @@
return subtype == supertype || isStrictSubtypeOf(subtype, supertype);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isStrictSubtypeOf(DexType subtype, DexType supertype) {
assert subtype != null;
assert supertype != null;
@@ -313,6 +315,7 @@
: isSubtypeOfClass(subclass, superclass);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isSubtypeOfClass(DexClass subclass, DexClass superclass) {
assert subclass != null;
assert superclass != null;
@@ -323,6 +326,7 @@
return subclass == superclass || isStrictSubtypeOfClass(subclass, superclass);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isStrictSubtypeOfClass(DexClass subclass, DexClass superclass) {
assert subclass != null;
assert superclass != null;
@@ -372,6 +376,7 @@
}
/** Collect all interfaces that this type directly or indirectly implements. */
+ @SuppressWarnings("ReferenceEquality")
public InterfaceCollection implementedInterfaces(DexType type) {
assert type.isClassType();
DexClass clazz = definitionFor(type);
@@ -393,6 +398,7 @@
}
// First find all interface leafs from the class super-type chain.
Set<DexType> seenAndKnown = Sets.newIdentityHashSet();
+ @SuppressWarnings("ReferenceEquality")
Deque<Pair<DexClass, Boolean>> worklist = new ArrayDeque<>();
{
DexClass implementor = clazz;
@@ -476,6 +482,7 @@
return Collections.emptyList();
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isInterfaceInSuperTypes(
DexProgramClass clazz, DexType ifaceToFind, WorkList<DexType> workList) {
workList.addIfNotSeen(clazz.allImmediateSupertypes());
@@ -492,6 +499,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
private List<DexProgramClass> computeChainInClassHierarchy(
DexProgramClass subClass, DexType superType) {
assert isSubtype(subClass.type, superType);
diff --git a/src/main/java/com/android/tools/r8/graph/AppServices.java b/src/main/java/com/android/tools/r8/graph/AppServices.java
index 0c1eb41..60956f4 100644
--- a/src/main/java/com/android/tools/r8/graph/AppServices.java
+++ b/src/main/java/com/android/tools/r8/graph/AppServices.java
@@ -192,6 +192,7 @@
return result;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean verifyRewrittenWithLens() {
for (Entry<DexType, Map<FeatureSplit, List<DexType>>> entry : services.entrySet()) {
assert entry.getKey() == appView.graphLens().lookupClassType(entry.getKey(), applied);
diff --git a/src/main/java/com/android/tools/r8/graph/AppView.java b/src/main/java/com/android/tools/r8/graph/AppView.java
index 259fc15..30bbe20 100644
--- a/src/main/java/com/android/tools/r8/graph/AppView.java
+++ b/src/main/java/com/android/tools/r8/graph/AppView.java
@@ -869,6 +869,7 @@
return appViewWithLiveness;
}
+ @SuppressWarnings("ReferenceEquality")
public OptionalBool isSubtype(DexType subtype, DexType supertype) {
// Even if we can compute isSubtype by having class hierarchy we may not be allowed to ask the
// question for all code paths in D8. Having the check for liveness ensure that we are in R8
diff --git a/src/main/java/com/android/tools/r8/graph/ApplicationReaderMap.java b/src/main/java/com/android/tools/r8/graph/ApplicationReaderMap.java
index 8e51a2e..b5f3a31 100644
--- a/src/main/java/com/android/tools/r8/graph/ApplicationReaderMap.java
+++ b/src/main/java/com/android/tools/r8/graph/ApplicationReaderMap.java
@@ -56,11 +56,13 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public DexType getType(DexType type) {
return type == factory.recordTagType ? factory.recordType : type;
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public DexType getInvertedType(DexType type) {
return type == factory.recordType ? factory.recordTagType : type;
}
diff --git a/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java b/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
index 3fc29d6..cd2ab6a 100644
--- a/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
+++ b/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
@@ -75,6 +75,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
void writeClassHeader(DexProgramClass clazz, PrintStream ps) {
String clazzName = retracer.toSourceString(clazz.getType());
ps.println("# Bytecode for");
@@ -195,6 +196,7 @@
MethodConversionOptions.forD8(converter.appView)));
}
+ @SuppressWarnings("ReferenceEquality")
private void writeAnnotations(
DexProgramClass clazz, DexAnnotationSet annotations, PrintStream ps) {
if (writeAnnotations) {
diff --git a/src/main/java/com/android/tools/r8/graph/CfCode.java b/src/main/java/com/android/tools/r8/graph/CfCode.java
index e2a42f7..b636a5c 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -416,6 +416,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void writeCf(
ProgramMethod method,
CfVersion classFileVersion,
@@ -823,6 +824,7 @@
return new CfPrinter(this, method, retracer).toString();
}
+ @SuppressWarnings("ReferenceEquality")
public ConstraintWithTarget computeInliningConstraint(
ProgramMethod method,
AppView<AppInfoWithLiveness> appView,
diff --git a/src/main/java/com/android/tools/r8/graph/Code.java b/src/main/java/com/android/tools/r8/graph/Code.java
index 8a3f89d..566f79e 100644
--- a/src/main/java/com/android/tools/r8/graph/Code.java
+++ b/src/main/java/com/android/tools/r8/graph/Code.java
@@ -224,6 +224,7 @@
}
@Deprecated()
+ @SuppressWarnings("ReferenceEquality")
// TODO(b/261971803): When having complete control over the positions we should not need this.
private static Position removeSameMethodAndLineZero(
Position calleePosition, Position callerPosition) {
diff --git a/src/main/java/com/android/tools/r8/graph/DebugLocalInfo.java b/src/main/java/com/android/tools/r8/graph/DebugLocalInfo.java
index 67a8eab..095f467 100644
--- a/src/main/java/com/android/tools/r8/graph/DebugLocalInfo.java
+++ b/src/main/java/com/android/tools/r8/graph/DebugLocalInfo.java
@@ -68,6 +68,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
public static Int2ReferenceSortedMap<DebugLocalInfo> endingLocals(
Int2ReferenceMap<DebugLocalInfo> previousLocals,
Int2ReferenceMap<DebugLocalInfo> nextLocals) {
@@ -82,6 +83,7 @@
return ending;
}
+ @SuppressWarnings("ReferenceEquality")
public static Int2ReferenceSortedMap<DebugLocalInfo> startingLocals(
Int2ReferenceMap<DebugLocalInfo> previousLocals,
Int2ReferenceMap<DebugLocalInfo> nextLocals) {
@@ -97,6 +99,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object other) {
if (this == other) {
return true;
diff --git a/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java b/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
index 4adaae6..b70ff11 100644
--- a/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DefaultInstanceInitializerCode.java
@@ -87,6 +87,7 @@
method.setCode(get().toCfCode(method, appView.dexItemFactory(), superType), appView);
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean hasDefaultInstanceInitializerCode(
ProgramMethod method, AppView<?> appView) {
if (!method.getDefinition().isInstanceInitializer()) {
diff --git a/src/main/java/com/android/tools/r8/graph/DexAnnotation.java b/src/main/java/com/android/tools/r8/graph/DexAnnotation.java
index 968863a..3d05de8 100644
--- a/src/main/java/com/android/tools/r8/graph/DexAnnotation.java
+++ b/src/main/java/com/android/tools/r8/graph/DexAnnotation.java
@@ -132,6 +132,7 @@
mixedItems.add(this);
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean retainCompileTimeAnnotation(DexType annotation, InternalOptions options) {
if (options.retainCompileTimeAnnotations) {
return true;
@@ -181,38 +182,46 @@
return value.asDexValueMethod().value;
}
- public static boolean isEnclosingClassAnnotation(DexAnnotation annotation,
- DexItemFactory factory) {
+ @SuppressWarnings("ReferenceEquality")
+ public static boolean isEnclosingClassAnnotation(
+ DexAnnotation annotation, DexItemFactory factory) {
return annotation.annotation.type == factory.annotationEnclosingClass;
}
- public static boolean isEnclosingMethodAnnotation(DexAnnotation annotation,
- DexItemFactory factory) {
+ @SuppressWarnings("ReferenceEquality")
+ public static boolean isEnclosingMethodAnnotation(
+ DexAnnotation annotation, DexItemFactory factory) {
return annotation.annotation.type == factory.annotationEnclosingMethod;
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isInnerClassAnnotation(DexAnnotation annotation, DexItemFactory factory) {
return annotation.annotation.type == factory.annotationInnerClass;
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isMemberClassesAnnotation(
DexAnnotation annotation, DexItemFactory factory) {
return annotation.annotation.type == factory.annotationMemberClasses;
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isNestHostAnnotation(DexAnnotation annotation, DexItemFactory factory) {
return annotation.annotation.type == factory.annotationNestHost;
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isNestMembersAnnotation(DexAnnotation annotation, DexItemFactory factory) {
return annotation.annotation.type == factory.annotationNestMembers;
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isPermittedSubclassesAnnotation(
DexAnnotation annotation, DexItemFactory factory) {
return annotation.annotation.type == factory.annotationPermittedSubclasses;
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isRecordAnnotation(DexAnnotation annotation, DexItemFactory factory) {
return annotation.getAnnotationType() == factory.annotationRecord;
}
@@ -232,6 +241,7 @@
}));
}
+ @SuppressWarnings("ReferenceEquality")
public static Pair<DexString, Integer> getInnerClassFromAnnotation(
DexAnnotation annotation, DexItemFactory factory) {
assert isInnerClassAnnotation(annotation, factory);
@@ -642,6 +652,7 @@
}));
}
+ @SuppressWarnings("ReferenceEquality")
private static DexValue getSystemValueAnnotationValue(DexType type, DexAnnotation annotation) {
assert annotation.visibility == VISIBILITY_SYSTEM;
assert annotation.annotation.type == type;
@@ -650,6 +661,7 @@
: annotation.annotation.elements[0].value;
}
+ @SuppressWarnings("ReferenceEquality")
private static DexValue getSystemValueAnnotationValueWithName(
DexType type, DexAnnotation annotation, DexString name) {
assert annotation.visibility == VISIBILITY_SYSTEM;
@@ -662,34 +674,37 @@
return null;
}
- public static boolean isThrowingAnnotation(DexAnnotation annotation,
- DexItemFactory factory) {
+ @SuppressWarnings("ReferenceEquality")
+ public static boolean isThrowingAnnotation(DexAnnotation annotation, DexItemFactory factory) {
return annotation.annotation.type == factory.annotationThrows;
}
- public static boolean isSignatureAnnotation(DexAnnotation annotation,
- DexItemFactory factory) {
+ @SuppressWarnings("ReferenceEquality")
+ public static boolean isSignatureAnnotation(DexAnnotation annotation, DexItemFactory factory) {
return annotation.annotation.type == factory.annotationSignature;
}
- public static boolean isAnnotationDefaultAnnotation(DexAnnotation annotation,
- DexItemFactory factory) {
+ @SuppressWarnings("ReferenceEquality")
+ public static boolean isAnnotationDefaultAnnotation(
+ DexAnnotation annotation, DexItemFactory factory) {
return annotation.annotation.type == factory.annotationDefault;
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isJavaLangRetentionAnnotation(
DexAnnotation annotation, DexItemFactory factory) {
return annotation.getAnnotationType() == factory.retentionType;
}
- public static boolean isSourceDebugExtension(DexAnnotation annotation,
- DexItemFactory factory) {
+ @SuppressWarnings("ReferenceEquality")
+ public static boolean isSourceDebugExtension(DexAnnotation annotation, DexItemFactory factory) {
return annotation.annotation.type == factory.annotationSourceDebugExtension;
}
- public static boolean isParameterNameAnnotation(DexAnnotation annotation,
- DexItemFactory factory) {
+ @SuppressWarnings("ReferenceEquality")
+ public static boolean isParameterNameAnnotation(
+ DexAnnotation annotation, DexItemFactory factory) {
return annotation.annotation.type == factory.annotationMethodParameters;
}
@@ -768,6 +783,7 @@
!= null;
}
+ @SuppressWarnings("ReferenceEquality")
public static SynthesizedAnnotationClassInfo getSynthesizedClassAnnotationInfo(
DexAnnotationSet annotations,
DexItemFactory factory,
@@ -839,6 +855,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public DexAnnotation rewrite(Function<DexEncodedAnnotation, DexEncodedAnnotation> rewriter) {
DexEncodedAnnotation rewritten = rewriter.apply(annotation);
if (rewritten == annotation) {
diff --git a/src/main/java/com/android/tools/r8/graph/DexAnnotationSet.java b/src/main/java/com/android/tools/r8/graph/DexAnnotationSet.java
index 5dfb273..039e836 100644
--- a/src/main/java/com/android/tools/r8/graph/DexAnnotationSet.java
+++ b/src/main/java/com/android/tools/r8/graph/DexAnnotationSet.java
@@ -152,6 +152,7 @@
sorted = hashCode();
}
+ @SuppressWarnings("ReferenceEquality")
public DexAnnotation getFirstMatching(DexType type) {
for (DexAnnotation annotation : annotations) {
if (annotation.annotation.type == type) {
@@ -161,6 +162,7 @@
return null;
}
+ @SuppressWarnings("ReferenceEquality")
public DexAnnotationSet getWithout(DexType annotationType) {
int index = 0;
for (DexAnnotation annotation : annotations) {
@@ -182,6 +184,7 @@
return hashCode == UNSORTED ? 1 : hashCode;
}
+ @SuppressWarnings("ReferenceEquality")
public DexAnnotationSet getWithAddedOrReplaced(DexAnnotation newAnnotation) {
// Check existing annotation for replacement.
@@ -218,6 +221,7 @@
return rewritten != annotations ? create(rewritten) : this;
}
+ @SuppressWarnings("ReferenceEquality")
public DexAnnotationSet methodParametersWithFakeThisArguments(DexItemFactory factory) {
DexAnnotation[] newAnnotations = null;
for (int i = 0; i < annotations.length; i++) {
diff --git a/src/main/java/com/android/tools/r8/graph/DexClass.java b/src/main/java/com/android/tools/r8/graph/DexClass.java
index 538f0e3..ed23497 100644
--- a/src/main/java/com/android/tools/r8/graph/DexClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexClass.java
@@ -85,6 +85,7 @@
/** Generic signature information if the attribute is present in the input */
protected ClassSignature classSignature;
+ @SuppressWarnings("ReferenceEquality")
public DexClass(
DexString sourceFile,
DexTypeList interfaces,
@@ -468,10 +469,12 @@
return fieldCollection.lookupInstanceField(field);
}
+ @SuppressWarnings("ReferenceEquality")
public DexEncodedField lookupUniqueInstanceFieldWithName(DexString name) {
return internalLookupUniqueFieldThatMatches(field -> field.getName() == name, instanceFields());
}
+ @SuppressWarnings("ReferenceEquality")
public DexEncodedField lookupUniqueStaticFieldWithName(DexString name) {
return internalLookupUniqueFieldThatMatches(field -> field.getName() == name, staticFields());
}
@@ -546,6 +549,7 @@
return methodCollection.getMethod(predicate);
}
+ @SuppressWarnings("ReferenceEquality")
public DexEncodedMethod lookupSignaturePolymorphicMethod(
DexString methodName, DexItemFactory factory) {
if (type != factory.methodHandleType && type != factory.varHandleType) {
@@ -569,6 +573,7 @@
return signaturePolymorphicMethod;
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isSignaturePolymorphicMethod(
DexEncodedMethod method, DexItemFactory factory) {
assert method.getHolderType() == factory.methodHandleType
@@ -679,6 +684,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
public DexEncodedMethod getClassInitializer() {
DexEncodedMethod classInitializer = methodCollection.getClassInitializer();
assert classInitializer != DexEncodedMethod.SENTINEL;
@@ -1010,6 +1016,7 @@
innerClasses.removeIf(predicate);
}
+ @SuppressWarnings("ReferenceEquality")
public InnerClassAttribute getInnerClassAttributeForThisClass() {
for (InnerClassAttribute innerClassAttribute : getInnerClasses()) {
if (type == innerClassAttribute.getInner()) {
@@ -1019,6 +1026,7 @@
return null;
}
+ @SuppressWarnings("ReferenceEquality")
public void replaceInnerClassAttributeForThisClass(InnerClassAttribute newInnerClassAttribute) {
ListIterator<InnerClassAttribute> iterator = getInnerClasses().listIterator();
while (iterator.hasNext()) {
@@ -1047,6 +1055,7 @@
permittedSubclasses.removeIf(predicate);
}
+ @SuppressWarnings("ReferenceEquality")
public void replacePermittedSubclass(
DexType currentPermittedSubclass, DexType newPermittedSubclass) {
for (int i = 0; i < permittedSubclasses.size(); i++) {
@@ -1116,6 +1125,7 @@
return null;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isInSameNest(DexClass other) {
return isInANest() && other.isInANest() && getNestHost() == other.getNestHost();
}
@@ -1186,10 +1196,12 @@
return fieldCollection.hasStaticFields();
}
+ @SuppressWarnings("ReferenceEquality")
public boolean hasInstanceFields() {
return fieldCollection.hasInstanceFields();
}
+ @SuppressWarnings("ReferenceEquality")
public List<DexClassAndField> getDirectAndIndirectInstanceFields(AppView<?> appView) {
List<DexClassAndField> result = new ArrayList<>();
DexClass current = this;
diff --git a/src/main/java/com/android/tools/r8/graph/DexClassAndMember.java b/src/main/java/com/android/tools/r8/graph/DexClassAndMember.java
index 703e841..44f6520 100644
--- a/src/main/java/com/android/tools/r8/graph/DexClassAndMember.java
+++ b/src/main/java/com/android/tools/r8/graph/DexClassAndMember.java
@@ -14,6 +14,7 @@
private final DexClass holder;
private final D definition;
+ @SuppressWarnings("ReferenceEquality")
public DexClassAndMember(DexClass holder, D definition) {
assert holder != null;
assert definition != null;
diff --git a/src/main/java/com/android/tools/r8/graph/DexClassAndMethod.java b/src/main/java/com/android/tools/r8/graph/DexClassAndMethod.java
index 3463789..4af04cb 100644
--- a/src/main/java/com/android/tools/r8/graph/DexClassAndMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexClassAndMethod.java
@@ -36,6 +36,7 @@
return getHolder().isInterface() && getDefinition().isDefaultMethod();
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isStructurallyEqualTo(DexClassAndMethod other) {
return getDefinition() == other.getDefinition() && getHolder() == other.getHolder();
}
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
index 74b1589..c4eace2 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEventBuilder.java
@@ -234,6 +234,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public static void emitAdvancementEvents(
int previousPc,
Position previousPosition,
@@ -292,6 +293,7 @@
events.add(factory.createDefault(specialOpcode));
}
+ @SuppressWarnings("ReferenceEquality")
private static void emitLocalChangeEvents(
Int2ReferenceMap<DebugLocalInfo> previousLocals,
Int2ReferenceMap<DebugLocalInfo> nextLocals,
diff --git a/src/main/java/com/android/tools/r8/graph/DexDefinitionSupplier.java b/src/main/java/com/android/tools/r8/graph/DexDefinitionSupplier.java
index 22985dc..6cab690 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDefinitionSupplier.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDefinitionSupplier.java
@@ -38,6 +38,7 @@
* @param context Context from which the lookup is taking place.
* @return Definition of the type or null if no definition exists.
*/
+ @SuppressWarnings("ReferenceEquality")
default DexClass definitionFor(DexType type, DexProgramClass context) {
return type == context.type ? context : contextIndependentDefinitionFor(type);
}
@@ -105,6 +106,7 @@
return definitionFor(method) != null;
}
+ @SuppressWarnings("ReferenceEquality")
default ClassResolutionResult definitionForWithResolutionResult(
DexType type, DexProgramClass context) {
assert context.type != type || ClassResolutionResult.builder().add(context).build() == context;
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedAnnotation.java b/src/main/java/com/android/tools/r8/graph/DexEncodedAnnotation.java
index 19aad9e..143dbe4 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedAnnotation.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedAnnotation.java
@@ -107,6 +107,7 @@
return hashCode == UNSORTED ? 1 : hashCode;
}
+ @SuppressWarnings("ReferenceEquality")
public DexEncodedAnnotation rewrite(
Function<DexType, DexType> typeRewriter,
Function<DexAnnotationElement, DexAnnotationElement> elementRewriter) {
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedField.java b/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
index 5d63bdc..2093937 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedField.java
@@ -258,6 +258,7 @@
this.staticValue = null;
}
+ @SuppressWarnings("ReferenceEquality")
public DexValue getStaticValue() {
assert accessFlags.isStatic();
return staticValue == null ? DexValue.defaultForType(getReference().type) : staticValue;
@@ -267,6 +268,7 @@
return toTypeSubstitutedField(appView, field, ConsumerUtils.emptyConsumer());
}
+ @SuppressWarnings("ReferenceEquality")
public DexEncodedField toTypeSubstitutedField(
AppView<?> appView, DexField field, Consumer<Builder> consumer) {
if (this.getReference() == field) {
@@ -281,6 +283,7 @@
.build();
}
+ @SuppressWarnings("ReferenceEquality")
public boolean validateDexValue(DexItemFactory factory) {
if (!accessFlags.isStatic() || staticValue == null) {
return true;
@@ -331,6 +334,7 @@
return isInlinableByJavaC;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean getOrComputeIsInlinableByJavaC(DexItemFactory dexItemFactory) {
if (getIsInlinableByJavaC()) {
return true;
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index e5357fd..4811185 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -287,6 +287,7 @@
DexEncodedMethod::hashCodeObject);
}
+ @SuppressWarnings("ReferenceEquality")
private static int compareCodeObject(Code code1, Code code2, CompareToVisitor visitor) {
if (code1 == code2) {
return 0;
@@ -399,6 +400,7 @@
return null;
}
+ @SuppressWarnings("ReferenceEquality")
public ProgramMethod asProgramMethod(DexProgramClass holder) {
assert getHolderType() == holder.getType();
return new ProgramMethod(holder, this);
@@ -569,11 +571,13 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean isStaticMember() {
checkIfObsolete();
return isStatic();
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isAtLeastAsVisibleAsOtherInSameHierarchy(
DexEncodedMethod other, AppView<? extends AppInfoWithClassHierarchy> appView) {
assert getReference().getProto() == other.getReference().getProto();
@@ -593,6 +597,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isSameVisibility(DexEncodedMethod other) {
AccessFlags<MethodAccessFlags> accessFlags = getAccessFlags();
if (accessFlags.getVisibilityOrdinal() != other.getAccessFlags().getVisibilityOrdinal()) {
@@ -670,6 +675,7 @@
container.getHolderType(), inliningReason, appInfo, whyAreYouNotInliningReporter);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isInliningCandidate(
DexType containerType,
Reason inliningReason,
@@ -1141,6 +1147,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
private DexEncodedMethod toTypeSubstitutedMethodHelper(
DexMethod method, boolean isD8R8Synthesized, Consumer<Builder> consumer) {
checkIfObsolete();
@@ -1166,6 +1173,7 @@
return builder.build();
}
+ @SuppressWarnings("ReferenceEquality")
public ProgramMethod toPrivateSyntheticMethod(DexProgramClass holder, DexMethod method) {
assert !isStatic();
assert !isPrivate();
@@ -1358,6 +1366,7 @@
return code == null ? null : code.asDexWritableCode();
}
+ @SuppressWarnings("ReferenceEquality")
public DexEncodedMethod rewrittenWithLens(
GraphLens lens, GraphLens appliedLens, DexDefinitionSupplier definitions) {
assert this != SENTINEL;
diff --git a/src/main/java/com/android/tools/r8/graph/DexField.java b/src/main/java/com/android/tools/r8/graph/DexField.java
index 7628bd6..02cced2 100644
--- a/src/main/java/com/android/tools/r8/graph/DexField.java
+++ b/src/main/java/com/android/tools/r8/graph/DexField.java
@@ -191,6 +191,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean match(DexField field) {
return field.name == name && field.type == type;
}
diff --git a/src/main/java/com/android/tools/r8/graph/DexFieldSignature.java b/src/main/java/com/android/tools/r8/graph/DexFieldSignature.java
index 2f22c1a..2428a1f 100644
--- a/src/main/java/com/android/tools/r8/graph/DexFieldSignature.java
+++ b/src/main/java/com/android/tools/r8/graph/DexFieldSignature.java
@@ -50,6 +50,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean isEqualTo(DexFieldSignature other) {
return getName() == other.getName() && getType() == other.getType();
}
diff --git a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
index 3713b4d..32f0cbd 100644
--- a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
+++ b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
@@ -1045,6 +1045,7 @@
return skipNameValidationForTesting;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isLambdaMetafactoryMethod(DexMethod dexMethod) {
return dexMethod == metafactoryMethod || dexMethod == metafactoryAltMethod;
}
@@ -1770,6 +1771,7 @@
requireNonNullMethodName);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isRequireNonNullMethod(DexMethod method) {
return method == requireNonNull
|| method == requireNonNullWithMessage
@@ -1778,6 +1780,7 @@
|| method == requireNonNullElseGet;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isToStringMethod(DexMethod method) {
return method == toStringWithObject || method == toStringWithObjectAndNullDefault;
}
@@ -1855,6 +1858,7 @@
getNames = ImmutableSet.of(getName, getCanonicalName, getSimpleName, getTypeName);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isReflectiveClassLookup(DexMethod method) {
return method == forName || method == forName3;
}
@@ -1988,6 +1992,7 @@
fn.accept(ordinalField);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isNameOrOrdinalField(DexField field) {
return field == nameField || field == ordinalField;
}
@@ -1998,6 +2003,7 @@
return accessFlags.isEnum() && accessFlags.isFinal();
}
+ @SuppressWarnings("ReferenceEquality")
// In some case, the enum field may be respecialized to an enum subtype. In this case, one
// can pass the encoded field as well as the field with the super enum type for the checks.
public boolean isEnumField(
@@ -2007,6 +2013,7 @@
&& isEnumFieldCandidate(staticField);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isValuesFieldCandidate(DexClassAndField staticField, DexType enumType) {
FieldAccessFlags accessFlags = staticField.getAccessFlags();
assert accessFlags.isStatic();
@@ -2296,10 +2303,12 @@
return appendMethods.contains(method);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isAppendObjectMethod(DexMethod method) {
return method == appendObject;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isAppendCharSequenceMethod(DexMethod method) {
return method == appendCharSequence || method == appendSubCharSequence;
}
@@ -2312,10 +2321,12 @@
return appendPrimitiveMethods.contains(method);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isAppendSubArrayMethod(DexMethod method) {
return appendSubCharArray == method || appendSubCharSequence == method;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isAppendStringMethod(DexMethod method) {
return method == appendString;
}
@@ -2324,6 +2335,7 @@
return constructorMethods.contains(method);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean constructorInvokeIsSideEffectFree(
DexMethod invokedMethod, List<Value> arguments) {
if (invokedMethod == defaultConstructor) {
@@ -2356,6 +2368,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isAppendCharArrayMethod(DexMethod method) {
return method == appendCharArray || method == appendSubCharArray;
}
@@ -2410,6 +2423,7 @@
"weakCompareAndSetPlain",
"weakCompareAndSetRelease");
+ @SuppressWarnings("ReferenceEquality")
public DexMethod canonicalize(DexMethod invokeProto) {
DexMethod result = null;
if (invokeProto.holder == methodHandleType) {
@@ -2439,6 +2453,7 @@
return map.keySet();
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isPolymorphicInvoke(DexMethod invokeProto) {
if (invokeProto.holder == methodHandleType) {
return invokeProto.name == invokeMethodName || invokeProto.name == invokeExactMethodName;
@@ -2489,6 +2504,7 @@
createMethod(serviceLoaderType, createProto(iteratorType), createString("iterator"));
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isLoadMethod(DexMethod method) {
return method == load || method == loadWithClassLoader || method == loadInstalled;
}
@@ -2992,6 +3008,7 @@
return createMethod(initialMethod.holder, newProto, initialMethod.name);
}
+ @SuppressWarnings("ReferenceEquality")
public DexProto applyClassMappingToProto(
DexProto proto, Function<DexType, DexType> mapping, Map<DexProto, DexProto> cache) {
assert cache != null;
@@ -3013,6 +3030,7 @@
return result;
}
+ @SuppressWarnings("ReferenceEquality")
private static DexType[] applyClassMappingToDexTypes(
DexType[] types, Function<DexType, DexType> mapping) {
Map<Integer, DexType> changed = new Int2ReferenceArrayMap<>();
@@ -3157,10 +3175,12 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isConstructor(DexMethod method) {
return method.name == constructorMethodName;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isClassConstructor(DexMethod method) {
return method.name == classConstructorMethodName;
}
diff --git a/src/main/java/com/android/tools/r8/graph/DexMethod.java b/src/main/java/com/android/tools/r8/graph/DexMethod.java
index a8c8ddf..156bfb1 100644
--- a/src/main/java/com/android/tools/r8/graph/DexMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexMethod.java
@@ -244,6 +244,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean match(DexMethod method) {
return method == this || match(method.getProto(), method.getName());
}
@@ -252,6 +253,7 @@
return match(method.getProto(), method.getName());
}
+ @SuppressWarnings("ReferenceEquality")
public boolean match(DexProto methodProto, DexString methodName) {
return proto == methodProto && name == methodName;
}
@@ -305,6 +307,7 @@
return builder.append(")").toString();
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isLambdaDeserializeMethod(DexItemFactory dexItemFactory) {
return name == dexItemFactory.deserializeLambdaMethodName
&& proto == dexItemFactory.deserializeLambdaMethodProto;
diff --git a/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java b/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java
index e48785c..d763201 100644
--- a/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java
+++ b/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java
@@ -101,6 +101,7 @@
return kind;
}
+ @SuppressWarnings("ReferenceEquality")
public static MethodHandleType fromAsmHandle(
Handle handle, JarApplicationReader application, DexType clazz) {
switch (handle.getTag()) {
diff --git a/src/main/java/com/android/tools/r8/graph/DexMethodSignature.java b/src/main/java/com/android/tools/r8/graph/DexMethodSignature.java
index 61b63ca..e441972 100644
--- a/src/main/java/com/android/tools/r8/graph/DexMethodSignature.java
+++ b/src/main/java/com/android/tools/r8/graph/DexMethodSignature.java
@@ -71,6 +71,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof DexMethodSignature)) return false;
diff --git a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
index 0ea604e..39f6136 100644
--- a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
@@ -191,6 +191,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public DexProgramClass getContext() {
return this;
}
@@ -210,6 +211,7 @@
return reachabilitySensitive.isTrue();
}
+ @SuppressWarnings("ReferenceEquality")
private boolean internalComputeReachabilitySensitive(AppView<?> appView) {
DexItemFactory dexItemFactory = appView.dexItemFactory();
for (DexEncodedMember<?, ?> member : members()) {
diff --git a/src/main/java/com/android/tools/r8/graph/DexType.java b/src/main/java/com/android/tools/r8/graph/DexType.java
index 204d05e..81f65e4 100644
--- a/src/main/java/com/android/tools/r8/graph/DexType.java
+++ b/src/main/java/com/android/tools/r8/graph/DexType.java
@@ -325,6 +325,7 @@
return descriptor.getFirstByteAsChar() == 'D';
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isNullValueType() {
boolean isNullValueType = descriptor.getFirstByteAsChar() == 'N';
assert !isNullValueType || this == DexItemFactory.nullValueType;
diff --git a/src/main/java/com/android/tools/r8/graph/DexTypeUtils.java b/src/main/java/com/android/tools/r8/graph/DexTypeUtils.java
index 625b127..ac780e9 100644
--- a/src/main/java/com/android/tools/r8/graph/DexTypeUtils.java
+++ b/src/main/java/com/android/tools/r8/graph/DexTypeUtils.java
@@ -19,6 +19,7 @@
return findApiSafeUpperBound(appView, toDexType(appView, join));
}
+ @SuppressWarnings("ReferenceEquality")
public static DexType toDexType(
AppView<? extends AppInfoWithClassHierarchy> appView, TypeElement type) {
DexItemFactory dexItemFactory = appView.dexItemFactory();
diff --git a/src/main/java/com/android/tools/r8/graph/DexValue.java b/src/main/java/com/android/tools/r8/graph/DexValue.java
index b2bc5ce..0d5f834 100644
--- a/src/main/java/com/android/tools/r8/graph/DexValue.java
+++ b/src/main/java/com/android/tools/r8/graph/DexValue.java
@@ -408,6 +408,7 @@
return null;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isDefault(DexType type) {
return this == defaultForType(type);
}
@@ -1794,11 +1795,13 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
void internalAcceptHashing(HashingVisitor visitor) {
assert this == NULL;
}
@Override
+ @SuppressWarnings("ReferenceEquality")
int internalAcceptCompareTo(DexValue other, CompareToVisitor visitor) {
assert this == NULL;
assert other == NULL;
diff --git a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
index 29d7e96..1f97831 100644
--- a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
@@ -146,6 +146,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean mappingIsValid(
Collection<DexProgramClass> classesBeforeLensApplication, GraphLens lens) {
// The lens might either map to a different type that is already present in the application
diff --git a/src/main/java/com/android/tools/r8/graph/EnclosingMethodAttribute.java b/src/main/java/com/android/tools/r8/graph/EnclosingMethodAttribute.java
index 7d6b3a2..9e3f201 100644
--- a/src/main/java/com/android/tools/r8/graph/EnclosingMethodAttribute.java
+++ b/src/main/java/com/android/tools/r8/graph/EnclosingMethodAttribute.java
@@ -75,6 +75,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object obj) {
return obj instanceof EnclosingMethodAttribute &&
enclosingClass == ((EnclosingMethodAttribute) obj).enclosingClass &&
diff --git a/src/main/java/com/android/tools/r8/graph/FieldAccessInfoImpl.java b/src/main/java/com/android/tools/r8/graph/FieldAccessInfoImpl.java
index 4344d55..0dae257 100644
--- a/src/main/java/com/android/tools/r8/graph/FieldAccessInfoImpl.java
+++ b/src/main/java/com/android/tools/r8/graph/FieldAccessInfoImpl.java
@@ -140,6 +140,7 @@
forEachIndirectAccess(consumer, writesWithContexts, visited);
}
+ @SuppressWarnings("ReferenceEquality")
private void forEachIndirectAccess(
Consumer<DexField> consumer,
AbstractAccessContexts accessesWithContexts,
@@ -157,6 +158,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void forEachIndirectAccessWithContexts(BiConsumer<DexField, ProgramMethodSet> consumer) {
Map<DexField, ProgramMethodSet> indirectAccessesWithContexts = new IdentityHashMap<>();
addAccessesWithContextsToMap(
diff --git a/src/main/java/com/android/tools/r8/graph/FieldArrayBacking.java b/src/main/java/com/android/tools/r8/graph/FieldArrayBacking.java
index ec0758a..35b5484 100644
--- a/src/main/java/com/android/tools/r8/graph/FieldArrayBacking.java
+++ b/src/main/java/com/android/tools/r8/graph/FieldArrayBacking.java
@@ -280,6 +280,7 @@
return null;
}
+ @SuppressWarnings("ReferenceEquality")
private static DexEncodedField[] replaceFieldsHelper(
DexEncodedField[] fields,
Function<DexEncodedField, DexEncodedField> replacement,
diff --git a/src/main/java/com/android/tools/r8/graph/FieldCollection.java b/src/main/java/com/android/tools/r8/graph/FieldCollection.java
index 9b3c09b..2c4b920 100644
--- a/src/main/java/com/android/tools/r8/graph/FieldCollection.java
+++ b/src/main/java/com/android/tools/r8/graph/FieldCollection.java
@@ -109,6 +109,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean verifyCorrectnessOfFieldHolder(DexEncodedField field) {
assert field.getHolderType() == holder.type
: "Expected field `"
diff --git a/src/main/java/com/android/tools/r8/graph/FieldMapBacking.java b/src/main/java/com/android/tools/r8/graph/FieldMapBacking.java
index a6d9b57..f743dc2 100644
--- a/src/main/java/com/android/tools/r8/graph/FieldMapBacking.java
+++ b/src/main/java/com/android/tools/r8/graph/FieldMapBacking.java
@@ -218,6 +218,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
void replaceFields(Function<DexEncodedField, DexEncodedField> replacement) {
// The code assumes that when replacement.apply(field) is called, the map is up-to-date with
// the previously replaced fields. We therefore cannot postpone the map updates to the end of
diff --git a/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java b/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java
index ac9ff70..a383253 100644
--- a/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java
+++ b/src/main/java/com/android/tools/r8/graph/FieldResolutionResult.java
@@ -161,6 +161,7 @@
private final T resolvedHolder;
private final DexEncodedField resolvedField;
+ @SuppressWarnings("ReferenceEquality")
SingleFieldResolutionResult(
DexClass initialResolutionHolder, T resolvedHolder, DexEncodedField resolvedField) {
assert resolvedHolder.type == resolvedField.getHolderType();
diff --git a/src/main/java/com/android/tools/r8/graph/GenericSignature.java b/src/main/java/com/android/tools/r8/graph/GenericSignature.java
index d669d502..a339bde 100644
--- a/src/main/java/com/android/tools/r8/graph/GenericSignature.java
+++ b/src/main/java/com/android/tools/r8/graph/GenericSignature.java
@@ -312,6 +312,7 @@
return toRenamedString(NamingLens.getIdentityLens(), alwaysTrue());
}
+ @SuppressWarnings("ReferenceEquality")
public List<FieldTypeSignature> getGenericArgumentsToSuperType(
DexType type, DexItemFactory factory) {
assert hasSignature();
@@ -364,6 +365,7 @@
return this;
}
+ @SuppressWarnings("ReferenceEquality")
public ClassSignature build(DexItemFactory factory) {
// Any trivial super class signature is always represented by the null value.
if (superClassSignature != null) {
@@ -629,6 +631,7 @@
this(type, typeArguments, enclosingTypeSignature, WildcardIndicator.NOT_AN_ARGUMENT);
}
+ @SuppressWarnings("ReferenceEquality")
private ClassTypeSignature(
DexType type,
List<FieldTypeSignature> typeArguments,
@@ -675,6 +678,7 @@
return new ArrayTypeSignature(this);
}
+ @SuppressWarnings("ReferenceEquality")
public ClassTypeSignature visit(GenericSignatureVisitor visitor) {
if (hasNoSignature()) {
return this;
diff --git a/src/main/java/com/android/tools/r8/graph/GenericSignatureContextBuilder.java b/src/main/java/com/android/tools/r8/graph/GenericSignatureContextBuilder.java
index b761eb99b..1a3e78f 100644
--- a/src/main/java/com/android/tools/r8/graph/GenericSignatureContextBuilder.java
+++ b/src/main/java/com/android/tools/r8/graph/GenericSignatureContextBuilder.java
@@ -259,6 +259,7 @@
return typeParameterContext.combine(methodFormals, prunedHere);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean hasPrunedRelationship(
AppView<?> appView,
DexReference enclosingReference,
diff --git a/src/main/java/com/android/tools/r8/graph/GenericSignatureCorrectnessHelper.java b/src/main/java/com/android/tools/r8/graph/GenericSignatureCorrectnessHelper.java
index 8bac211..c3033f4 100644
--- a/src/main/java/com/android/tools/r8/graph/GenericSignatureCorrectnessHelper.java
+++ b/src/main/java/com/android/tools/r8/graph/GenericSignatureCorrectnessHelper.java
@@ -243,6 +243,7 @@
this.context = context;
}
+ @SuppressWarnings("ReferenceEquality")
private SignatureEvaluationResult evaluateClassSignatureForContext(
TypeParameterContext typeParameterContext) {
ClassSignature classSignature = context.classSignature;
diff --git a/src/main/java/com/android/tools/r8/graph/GenericSignaturePartialTypeArgumentApplier.java b/src/main/java/com/android/tools/r8/graph/GenericSignaturePartialTypeArgumentApplier.java
index 503000f..d8c58ee 100644
--- a/src/main/java/com/android/tools/r8/graph/GenericSignaturePartialTypeArgumentApplier.java
+++ b/src/main/java/com/android/tools/r8/graph/GenericSignaturePartialTypeArgumentApplier.java
@@ -125,6 +125,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public List<FieldTypeSignature> visitTypeArguments(
DexType originalType, DexType lookedUpType, List<FieldTypeSignature> typeArguments) {
assert originalType == lookedUpType;
diff --git a/src/main/java/com/android/tools/r8/graph/GenericSignatureTypeRewriter.java b/src/main/java/com/android/tools/r8/graph/GenericSignatureTypeRewriter.java
index cdbc19b..d519324 100644
--- a/src/main/java/com/android/tools/r8/graph/GenericSignatureTypeRewriter.java
+++ b/src/main/java/com/android/tools/r8/graph/GenericSignatureTypeRewriter.java
@@ -151,6 +151,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public List<ClassTypeSignature> visitSuperInterfaces(
List<ClassTypeSignature> interfaceSignatures) {
if (interfaceSignatures.isEmpty()) {
@@ -172,6 +173,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public ClassTypeSignature visitSuperInterface(ClassTypeSignature classTypeSignature) {
ClassTypeSignature rewritten = classTypeSignature.visit(this);
return rewritten == null || rewritten.type() == context.type ? null : rewritten;
diff --git a/src/main/java/com/android/tools/r8/graph/InvalidCode.java b/src/main/java/com/android/tools/r8/graph/InvalidCode.java
index b3016c9..ff2dc3d 100644
--- a/src/main/java/com/android/tools/r8/graph/InvalidCode.java
+++ b/src/main/java/com/android/tools/r8/graph/InvalidCode.java
@@ -17,6 +17,7 @@
return INSTANCE;
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isInvalidCode(Code code) {
return code == INSTANCE;
}
diff --git a/src/main/java/com/android/tools/r8/graph/JarApplicationReader.java b/src/main/java/com/android/tools/r8/graph/JarApplicationReader.java
index 6fbdc33..2c4ce38 100644
--- a/src/main/java/com/android/tools/r8/graph/JarApplicationReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarApplicationReader.java
@@ -187,6 +187,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public void checkClassForMethodHandlesLookup(DexClass dexClass, ClassKind<?> classKind) {
if (options.shouldDesugarVarHandle()) {
if (VarHandleDesugaring.refersToMethodHandlesLookup(dexClass.getType(), getFactory())) {
diff --git a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
index 067e0ae..fc6359f 100644
--- a/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarClassFileReader.java
@@ -590,6 +590,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private boolean hasReachabilitySensitiveField() {
DexType reachabilitySensitive = application.getFactory().annotationReachabilitySensitive;
for (DexEncodedField field : Iterables.concat(instanceFields, staticFields)) {
@@ -721,6 +722,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private DexValue getStaticValue(Object value, DexType type) {
if (value == null) {
return null;
@@ -986,6 +988,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isReachabilitySensitive() {
DexType reachabilitySensitive =
parent.application.getFactory().annotationReachabilitySensitive;
diff --git a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
index 7578c196..897d908 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
@@ -116,6 +116,7 @@
private final ImmutableMap<DexType, DexClasspathClass> classpathClasses;
private final ImmutableMap<DexType, DexLibraryClass> libraryClasses;
+ @SuppressWarnings("ReferenceEquality")
AllClasses(
LibraryClassCollection libraryClassesLoader,
ClasspathClassCollection classpathClassesLoader,
diff --git a/src/main/java/com/android/tools/r8/graph/MethodArrayBacking.java b/src/main/java/com/android/tools/r8/graph/MethodArrayBacking.java
index 77d8fbd..9afb69a 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodArrayBacking.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodArrayBacking.java
@@ -365,6 +365,7 @@
addVirtualMethods(newVirtualMethods);
}
+ @SuppressWarnings("ReferenceEquality")
private List<DexEncodedMethod> internalReplaceDirectMethods(
Function<DexEncodedMethod, DexEncodedMethod> replacement) {
List<DexEncodedMethod> newVirtualMethods = new ArrayList<>();
@@ -398,6 +399,7 @@
addDirectMethods(newDirectMethods);
}
+ @SuppressWarnings("ReferenceEquality")
private List<DexEncodedMethod> internalReplaceVirtualMethods(
Function<DexEncodedMethod, DexEncodedMethod> replacement) {
List<DexEncodedMethod> newDirectMethods = new ArrayList<>();
diff --git a/src/main/java/com/android/tools/r8/graph/MethodCollection.java b/src/main/java/com/android/tools/r8/graph/MethodCollection.java
index 47d8a02..e14da8e 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodCollection.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodCollection.java
@@ -224,6 +224,7 @@
cachedClassInitializer = DexEncodedMethod.SENTINEL;
}
+ @SuppressWarnings("ReferenceEquality")
public synchronized DexEncodedMethod getClassInitializer() {
if (cachedClassInitializer == DexEncodedMethod.SENTINEL) {
cachedClassInitializer = null;
@@ -394,6 +395,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean verifyCorrectnessOfMethodHolder(DexEncodedMethod method) {
assert method.getHolderType() == holder.type
: "Expected method `"
diff --git a/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java b/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java
index 0e838b9..84f114f 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodMapBacking.java
@@ -273,6 +273,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
void replaceMethods(Function<DexEncodedMethod, DexEncodedMethod> replacement) {
// The code assumes that when replacement.apply(method) is called, the map is up-to-date with
// the previously replaced methods. We therefore cannot postpone the map updates to the end of
@@ -369,6 +370,7 @@
assert verifyVirtualizedMethods(privateInstanceMethods);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean verifyVirtualizedMethods(Set<DexEncodedMethod> methods) {
for (DexEncodedMethod method : methods) {
assert belongsToVirtualPool(method);
diff --git a/src/main/java/com/android/tools/r8/graph/MethodResolution.java b/src/main/java/com/android/tools/r8/graph/MethodResolution.java
index a56b0ef..15c3b51 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodResolution.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodResolution.java
@@ -108,6 +108,7 @@
* 10.7 of the Java Language Specification</a>. All invokations will have target java.lang.Object
* except clone which has no target.
*/
+ @SuppressWarnings("ReferenceEquality")
private MethodResolutionResult resolveMethodOnArray(
DexType holder, DexProto methodProto, DexString methodName) {
assert holder.isArrayType();
@@ -588,6 +589,7 @@
typesWithMultipleDefinitions.add(type);
}
+ @SuppressWarnings("ReferenceEquality")
void addCandidate(DexClass holder, DexEncodedMethod method, boolean isIncompletePath) {
// If this candidate is already a candidate or it is shadowed, then no need to continue.
if (isIncompletePath) {
@@ -614,6 +616,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void markShadowed(DexType type) {
if (type == null) {
return;
diff --git a/src/main/java/com/android/tools/r8/graph/MethodResolutionResult.java b/src/main/java/com/android/tools/r8/graph/MethodResolutionResult.java
index 5d823bd..d7362d6 100644
--- a/src/main/java/com/android/tools/r8/graph/MethodResolutionResult.java
+++ b/src/main/java/com/android/tools/r8/graph/MethodResolutionResult.java
@@ -266,6 +266,7 @@
private final T resolvedHolder;
private final DexEncodedMethod resolvedMethod;
+ @SuppressWarnings("ReferenceEquality")
public SingleResolutionResult(
DexClass initialResolutionHolder, T resolvedHolder, DexEncodedMethod resolvedMethod) {
assert initialResolutionHolder != null;
@@ -455,6 +456,7 @@
return null;
}
+ @SuppressWarnings("ReferenceEquality")
private DexClassAndMethod internalInvokeSpecialOrSuper(
DexProgramClass context,
AppInfoWithClassHierarchy appInfo,
@@ -538,6 +540,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public LookupResult lookupVirtualDispatchTargets(
DexProgramClass context,
AppView<? extends AppInfoWithClassHierarchy> appView,
@@ -724,6 +727,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public LookupMethodTarget lookupVirtualDispatchTarget(
DexClass dynamicInstance, AppInfoWithClassHierarchy appInfo) {
return lookupVirtualDispatchTarget(
@@ -750,6 +754,7 @@
lambdaInstance, appInfo, typeCausingFailureConsumer, methodCausingFailureConsumer);
}
+ @SuppressWarnings("ReferenceEquality")
private LookupMethodTarget lookupVirtualDispatchTarget(
DexClass dynamicInstance,
AppInfoWithClassHierarchy appInfo,
@@ -856,6 +861,7 @@
return null;
}
+ @SuppressWarnings("ReferenceEquality")
private static DexClassAndMethod findWideningOverride(
DexClassAndMethod resolvedMethod, DexClass clazz, AppInfoWithClassHierarchy appInfo) {
// Otherwise, lookup to first override that is distinct from resolvedMethod.
@@ -1340,6 +1346,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean verifyInvalidSymbolicReference() {
BooleanBox invalidSymbolicReference = new BooleanBox(true);
forEachFailureDependency(
diff --git a/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java b/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java
index aea1754..0eb2d7e 100644
--- a/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java
+++ b/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java
@@ -192,6 +192,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public TraversalContinuation<?, ?> traverseInstantiatedSubtypes(
DexType type,
Function<DexProgramClass, TraversalContinuation<?, ?>> onClass,
@@ -446,6 +447,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void populateInstantiatedHierarchy(
DexDefinitionSupplier definitions, DexType type, DexClass subtype) {
if (type == definitions.dexItemFactory().objectType) {
@@ -575,11 +577,13 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean typeIsInHierarchy(DexDefinitionSupplier definitions, DexType type) {
return type == definitions.dexItemFactory().objectType
|| instantiatedHierarchy.containsKey(type);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isImmediateSuperType(DexType type, DexClass subtype) {
for (DexType supertype : subtype.allImmediateSupertypes()) {
if (type == supertype) {
diff --git a/src/main/java/com/android/tools/r8/graph/ParameterAnnotationsList.java b/src/main/java/com/android/tools/r8/graph/ParameterAnnotationsList.java
index 7e21357..69ea102 100644
--- a/src/main/java/com/android/tools/r8/graph/ParameterAnnotationsList.java
+++ b/src/main/java/com/android/tools/r8/graph/ParameterAnnotationsList.java
@@ -193,6 +193,7 @@
}
/** Return a ParameterAnnotationsList extended to the given number of parameters. */
+ @SuppressWarnings("ReferenceEquality")
public ParameterAnnotationsList withParameterCount(int parameterCount) {
if (this == EMPTY_PARAMETER_ANNOTATIONS_LIST || parameterCount == size()) {
return this;
@@ -224,6 +225,7 @@
* Return a new ParameterAnnotationsList that keeps only the annotations matched by {@code
* filter}.
*/
+ @SuppressWarnings("ReferenceEquality")
public ParameterAnnotationsList keepIf(Predicate<DexAnnotation> filter) {
DexAnnotationSet[] filtered = null;
boolean allEmpty = true;
diff --git a/src/main/java/com/android/tools/r8/graph/ProgramField.java b/src/main/java/com/android/tools/r8/graph/ProgramField.java
index e564a79..adea688 100644
--- a/src/main/java/com/android/tools/r8/graph/ProgramField.java
+++ b/src/main/java/com/android/tools/r8/graph/ProgramField.java
@@ -44,6 +44,7 @@
&& method.getHolder() == getHolder());
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isStructurallyEqualTo(ProgramField other) {
return getDefinition() == other.getDefinition() && getHolder() == other.getHolder();
}
diff --git a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
index 32ba2c2..6ef6ae4 100644
--- a/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/ProgramMethod.java
@@ -203,6 +203,7 @@
return appView.options().debug || getOrComputeReachabilitySensitive(appView);
}
+ @SuppressWarnings("ReferenceEquality")
public ProgramMethod rewrittenWithLens(
GraphLens lens, GraphLens appliedLens, DexDefinitionSupplier definitions) {
DexMethod newMethod = lens.getRenamedMethodSignature(getReference(), appliedLens);
@@ -213,6 +214,7 @@
return asProgramMethodOrNull(definitions.definitionFor(newMethod));
}
+ @SuppressWarnings("ReferenceEquality")
private boolean verifyIsConsistentWithLookup(DexDefinitionSupplier definitions) {
DexClassAndMethod lookupMethod = definitions.definitionFor(getReference());
assert getDefinition() == lookupMethod.getDefinition();
diff --git a/src/main/java/com/android/tools/r8/graph/SmaliWriter.java b/src/main/java/com/android/tools/r8/graph/SmaliWriter.java
index 0eff9d1..6de8085 100644
--- a/src/main/java/com/android/tools/r8/graph/SmaliWriter.java
+++ b/src/main/java/com/android/tools/r8/graph/SmaliWriter.java
@@ -40,6 +40,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
void writeClassHeader(DexProgramClass clazz, PrintStream ps) {
ps.append(".class ");
ps.append(clazz.accessFlags.toSmaliString());
diff --git a/src/main/java/com/android/tools/r8/graph/SubtypingInfo.java b/src/main/java/com/android/tools/r8/graph/SubtypingInfo.java
index e239b5e..dace46c 100644
--- a/src/main/java/com/android/tools/r8/graph/SubtypingInfo.java
+++ b/src/main/java/com/android/tools/r8/graph/SubtypingInfo.java
@@ -93,6 +93,7 @@
return typeInfo.computeIfAbsent(type, TypeInfo::new);
}
+ @SuppressWarnings("ReferenceEquality")
private static void populateAllSuperTypes(
Map<DexType, Set<DexType>> map,
Map<DexType, TypeInfo> typeInfo,
@@ -138,6 +139,7 @@
assert validateLevelsAreCorrect(typeInfo, definitionSupplier);
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean validateLevelsAreCorrect(
Map<DexType, TypeInfo> typeInfo, DexDefinitionSupplier definitionSupplier) {
Set<DexType> seenTypes = Sets.newIdentityHashSet();
@@ -283,6 +285,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object obj) {
if (!(obj instanceof TypeInfo)) {
return false;
diff --git a/src/main/java/com/android/tools/r8/graph/analysis/ClassInitializerAssertionEnablingAnalysis.java b/src/main/java/com/android/tools/r8/graph/analysis/ClassInitializerAssertionEnablingAnalysis.java
index 9f9d30a..7947f84 100644
--- a/src/main/java/com/android/tools/r8/graph/analysis/ClassInitializerAssertionEnablingAnalysis.java
+++ b/src/main/java/com/android/tools/r8/graph/analysis/ClassInitializerAssertionEnablingAnalysis.java
@@ -53,6 +53,7 @@
.collect(Collectors.toList());
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isUsingJavaAssertionsDisabledField(DexField field) {
// This does not check the holder, as for inner classes the field is read from the outer class
// and not the class itself.
@@ -60,6 +61,7 @@
&& field.getType() == dexItemFactory.booleanType;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isUsingKotlinAssertionsEnabledField(DexField field) {
return field == dexItemFactory.kotlin.assertions.enabledField;
}
@@ -158,6 +160,7 @@
private static List<Class<?>> jacocoInstructionSequence =
ImmutableList.of(CfLoad.class, CfConstNumber.class, CfConstNumber.class, CfArrayStore.class);
+ @SuppressWarnings("ReferenceEquality")
private boolean hasJavacClinitAssertionCode(CfCode code) {
for (int i = 0; i < code.getInstructions().size(); i++) {
CfInstruction instruction = code.getInstructions().get(i);
@@ -186,6 +189,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean hasKotlincClinitAssertionCode(ProgramMethod method) {
if (method.getHolderType() == dexItemFactory.kotlin.assertions.type) {
CfCode code = method.getDefinition().getCode().asCfCode();
diff --git a/src/main/java/com/android/tools/r8/graph/analysis/InvokeVirtualToInterfaceVerifyErrorWorkaround.java b/src/main/java/com/android/tools/r8/graph/analysis/InvokeVirtualToInterfaceVerifyErrorWorkaround.java
index 7c17e4c..94bf7ce 100644
--- a/src/main/java/com/android/tools/r8/graph/analysis/InvokeVirtualToInterfaceVerifyErrorWorkaround.java
+++ b/src/main/java/com/android/tools/r8/graph/analysis/InvokeVirtualToInterfaceVerifyErrorWorkaround.java
@@ -59,6 +59,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isInterfaceInSomeApiLevel(DexType type) {
// CameraDevice was added as a class in API 21 (L), but was defined as an interface in the
// framework before then.
diff --git a/src/main/java/com/android/tools/r8/graph/fixup/MethodNamingUtility.java b/src/main/java/com/android/tools/r8/graph/fixup/MethodNamingUtility.java
index 688853d..d96e38c 100644
--- a/src/main/java/com/android/tools/r8/graph/fixup/MethodNamingUtility.java
+++ b/src/main/java/com/android/tools/r8/graph/fixup/MethodNamingUtility.java
@@ -29,6 +29,7 @@
this.localSignatures = localSignatures;
}
+ @SuppressWarnings("ReferenceEquality")
public DexMethod nextUniqueMethod(
DexEncodedMethod method, DexProto newProto, DexType initExtraType) {
DexMethod reference = method.getReference();
@@ -50,6 +51,7 @@
return nextUniquePrivateOrStaticMethod(reference, newProto);
}
+ @SuppressWarnings("ReferenceEquality")
private DexMethod nextUniqueInitializer(
DexMethod reference, DexProto newProto, DexType initExtraType) {
assert !inheritedSignatures.containsKey(reference.getSignature());
@@ -92,6 +94,7 @@
|| inheritedSignatures.containsValue(method.getSignature());
}
+ @SuppressWarnings("ReferenceEquality")
private DexMethod nextUniqueMethod(
DexMethod reference, DexProto newProto, BiConsumer<DexMethod, DexMethod> registration) {
// 1) We check if the reference has already been reserved (pinning or override).
diff --git a/src/main/java/com/android/tools/r8/graph/fixup/TreeFixerBase.java b/src/main/java/com/android/tools/r8/graph/fixup/TreeFixerBase.java
index 035ab26..6464048 100644
--- a/src/main/java/com/android/tools/r8/graph/fixup/TreeFixerBase.java
+++ b/src/main/java/com/android/tools/r8/graph/fixup/TreeFixerBase.java
@@ -70,6 +70,7 @@
}
/** Rewrite missing references */
+ @SuppressWarnings("ReferenceEquality")
public void recordFailedResolutionChanges() {
// In order for optimizations to correctly rewrite field and method references that do not
// resolve, we create a mapping from each failed resolution target to its reference reference.
@@ -113,6 +114,7 @@
return newProgramClasses;
}
+ @SuppressWarnings("ReferenceEquality")
// Should remain private as the correctness of the fixup requires the lazy 'newProgramClasses'.
private DexProgramClass fixupClass(DexProgramClass clazz) {
DexProgramClass newClass =
@@ -156,6 +158,7 @@
return newClass;
}
+ @SuppressWarnings("ReferenceEquality")
protected EnclosingMethodAttribute fixupEnclosingMethodAttribute(
EnclosingMethodAttribute enclosingMethodAttribute) {
if (enclosingMethodAttribute == null) {
@@ -194,6 +197,7 @@
return newFields;
}
+ @SuppressWarnings("ReferenceEquality")
private DexEncodedField fixupField(
DexEncodedField field, Consumer<DexEncodedField.Builder> consumer) {
DexField fieldReference = field.getReference();
@@ -212,6 +216,7 @@
return dexItemFactory.createField(newHolder, newType, field.name);
}
+ @SuppressWarnings("ReferenceEquality")
protected List<InnerClassAttribute> fixupInnerClassAttributes(
List<InnerClassAttribute> innerClassAttributes) {
if (innerClassAttributes.isEmpty()) {
@@ -254,6 +259,7 @@
}
/** Fixup a method definition. */
+ @SuppressWarnings("ReferenceEquality")
public DexEncodedMethod fixupMethod(DexEncodedMethod method) {
DexMethod methodReference = method.getReference();
DexMethod newMethodReference = fixupMethodReference(methodReference);
@@ -275,6 +281,7 @@
: null;
}
+ @SuppressWarnings("ReferenceEquality")
protected List<NestMemberClassAttribute> fixupNestMemberAttributes(
List<NestMemberClassAttribute> nestMemberAttributes) {
if (nestMemberAttributes.isEmpty()) {
@@ -292,6 +299,7 @@
return changed ? newNestMemberAttributes : nestMemberAttributes;
}
+ @SuppressWarnings("ReferenceEquality")
protected List<PermittedSubclassAttribute> fixupPermittedSubclassAttribute(
List<PermittedSubclassAttribute> permittedSubclassAttributes) {
if (permittedSubclassAttributes.isEmpty()) {
@@ -317,6 +325,7 @@
return newPermittedSubclassAttributes;
}
+ @SuppressWarnings("ReferenceEquality")
protected List<RecordComponentInfo> fixupRecordComponents(
List<RecordComponentInfo> recordComponents) {
if (recordComponents.isEmpty()) {
@@ -352,6 +361,7 @@
}
/** Fixup a type reference. */
+ @SuppressWarnings("ReferenceEquality")
public DexType fixupType(DexType type) {
if (type.isArrayType()) {
DexType base = type.toBaseType(dexItemFactory);
@@ -367,6 +377,7 @@
return type;
}
+ @SuppressWarnings("ReferenceEquality")
private DexType[] fixupTypes(DexType[] types) {
boolean changed = false;
DexType[] newTypes = new DexType[types.length];
diff --git a/src/main/java/com/android/tools/r8/graph/lens/AppliedGraphLens.java b/src/main/java/com/android/tools/r8/graph/lens/AppliedGraphLens.java
index 8154252..e6ecef1 100644
--- a/src/main/java/com/android/tools/r8/graph/lens/AppliedGraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/lens/AppliedGraphLens.java
@@ -44,6 +44,7 @@
// which is why we need an additional map.
private final Map<DexMethod, DexMethod> extraOriginalMethodSignatures = new IdentityHashMap<>();
+ @SuppressWarnings("ReferenceEquality")
public AppliedGraphLens(AppView<? extends AppInfoWithClassHierarchy> appView) {
super(appView.dexItemFactory(), GraphLens.getIdentityLens());
for (DexProgramClass clazz : appView.appInfo().classes()) {
@@ -90,6 +91,7 @@
MapUtils.removeIdentityMappings(extraOriginalMethodSignatures);
}
+ @SuppressWarnings("ReferenceEquality")
private void recordOriginalTypeNames(
DexProgramClass clazz, AppView<? extends AppInfoWithClassHierarchy> appView) {
DexType type = clazz.getType();
diff --git a/src/main/java/com/android/tools/r8/graph/lens/GraphLens.java b/src/main/java/com/android/tools/r8/graph/lens/GraphLens.java
index 682c08e..4d339e8 100644
--- a/src/main/java/com/android/tools/r8/graph/lens/GraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/lens/GraphLens.java
@@ -76,6 +76,7 @@
protected Builder() {}
+ @SuppressWarnings("ReferenceEquality")
public void move(DexMethod from, DexMethod to) {
if (from == to) {
return;
@@ -211,6 +212,7 @@
return reference;
}
+ @SuppressWarnings("ReferenceEquality")
// Predicate indicating if a rewritten reference is a simple renaming, meaning the move from one
// reference to another is simply either just a renaming or/also renaming of the references. In
// other words, the content of the definition, including the definition of all of its members is
@@ -450,6 +452,7 @@
return this;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean assertFieldsNotModified(Iterable<DexEncodedField> fields) {
for (DexEncodedField field : fields) {
DexField reference = field.getReference();
@@ -467,6 +470,7 @@
return assertReferencesNotModified(pinnedItems);
}
+ @SuppressWarnings("ReferenceEquality")
public <T extends DexReference> boolean assertReferencesNotModified(Iterable<T> references) {
for (DexReference reference : references) {
if (reference.isDexField()) {
@@ -504,6 +508,7 @@
return result;
}
+ @SuppressWarnings("ReferenceEquality")
public Set<DexField> rewriteFields(Set<DexField> fields, Timing timing) {
timing.begin("Rewrite fields");
GraphLens appliedLens = getIdentityLens();
@@ -541,6 +546,7 @@
return rewrittenFields;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean verifyIsIdentityLensForFields(
Collection<DexField> fields, GraphLens appliedLens) {
for (DexField field : fields) {
diff --git a/src/main/java/com/android/tools/r8/graph/lens/InitClassLens.java b/src/main/java/com/android/tools/r8/graph/lens/InitClassLens.java
index e1d4ca6..bb8175a 100644
--- a/src/main/java/com/android/tools/r8/graph/lens/InitClassLens.java
+++ b/src/main/java/com/android/tools/r8/graph/lens/InitClassLens.java
@@ -32,6 +32,7 @@
private final Map<DexType, DexField> mapping = new ConcurrentHashMap<>();
+ @SuppressWarnings("ReferenceEquality")
public void map(DexType type, DexField field) {
assert field.holder == type;
mapping.put(type, field);
diff --git a/src/main/java/com/android/tools/r8/graph/lens/NestedGraphLens.java b/src/main/java/com/android/tools/r8/graph/lens/NestedGraphLens.java
index 93c76a0..cdd27a5 100644
--- a/src/main/java/com/android/tools/r8/graph/lens/NestedGraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/lens/NestedGraphLens.java
@@ -131,6 +131,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
protected FieldLookupResult internalDescribeLookupField(FieldLookupResult previous) {
if (previous.hasReboundReference()) {
// Rewrite the rebound reference and then "fixup" the non-rebound reference.
@@ -159,6 +160,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public MethodLookupResult internalDescribeLookupMethod(
MethodLookupResult previous, DexMethod context, GraphLens codeLens) {
if (previous.hasReboundReference()) {
diff --git a/src/main/java/com/android/tools/r8/graph/lens/NonIdentityGraphLens.java b/src/main/java/com/android/tools/r8/graph/lens/NonIdentityGraphLens.java
index c022a8e..2c78950 100644
--- a/src/main/java/com/android/tools/r8/graph/lens/NonIdentityGraphLens.java
+++ b/src/main/java/com/android/tools/r8/graph/lens/NonIdentityGraphLens.java
@@ -81,6 +81,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public MethodLookupResult lookupMethod(
DexMethod method, DexMethod context, InvokeType type, GraphLens codeLens) {
if (method.getHolderType().isArrayType()) {
@@ -102,6 +103,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public final DexType lookupType(DexType type, GraphLens appliedLens) {
if (type.isClassType()) {
return lookupClassType(type, appliedLens);
diff --git a/src/main/java/com/android/tools/r8/graph/proto/ArgumentInfoCollection.java b/src/main/java/com/android/tools/r8/graph/proto/ArgumentInfoCollection.java
index f08d256..544940a 100644
--- a/src/main/java/com/android/tools/r8/graph/proto/ArgumentInfoCollection.java
+++ b/src/main/java/com/android/tools/r8/graph/proto/ArgumentInfoCollection.java
@@ -98,6 +98,7 @@
return getArgumentInfo(argumentIndex).isRemovedArgumentInfo();
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isEmpty() {
return this == EMPTY;
}
@@ -175,6 +176,7 @@
return argumentInfosSize;
}
+ @SuppressWarnings("ReferenceEquality")
public ArgumentInfoCollection rewrittenWithLens(
AppView<AppInfoWithLiveness> appView, GraphLens graphLens, GraphLens codeLens) {
if (isEmpty()) {
diff --git a/src/main/java/com/android/tools/r8/graph/proto/RemovedArgumentInfo.java b/src/main/java/com/android/tools/r8/graph/proto/RemovedArgumentInfo.java
index 8d560c5..18bbc7f 100644
--- a/src/main/java/com/android/tools/r8/graph/proto/RemovedArgumentInfo.java
+++ b/src/main/java/com/android/tools/r8/graph/proto/RemovedArgumentInfo.java
@@ -85,6 +85,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public RemovedArgumentInfo rewrittenWithLens(
AppView<AppInfoWithLiveness> appView, GraphLens graphLens, GraphLens codeLens) {
SingleValue rewrittenSingleValue =
@@ -97,6 +98,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object obj) {
if (obj == null || getClass() != obj.getClass()) {
return false;
diff --git a/src/main/java/com/android/tools/r8/graph/proto/RemovedReceiverInfo.java b/src/main/java/com/android/tools/r8/graph/proto/RemovedReceiverInfo.java
index 9bcda3a..b6d2d93 100644
--- a/src/main/java/com/android/tools/r8/graph/proto/RemovedReceiverInfo.java
+++ b/src/main/java/com/android/tools/r8/graph/proto/RemovedReceiverInfo.java
@@ -23,6 +23,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public RemovedReceiverInfo rewrittenWithLens(
AppView<AppInfoWithLiveness> appView, GraphLens graphLens, GraphLens codeLens) {
SingleValue rewrittenSingleValue =
@@ -35,6 +36,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object obj) {
if (obj == null || getClass() != obj.getClass()) {
return false;
diff --git a/src/main/java/com/android/tools/r8/graph/proto/RewrittenPrototypeDescription.java b/src/main/java/com/android/tools/r8/graph/proto/RewrittenPrototypeDescription.java
index e149d62..e7cff1a 100644
--- a/src/main/java/com/android/tools/r8/graph/proto/RewrittenPrototypeDescription.java
+++ b/src/main/java/com/android/tools/r8/graph/proto/RewrittenPrototypeDescription.java
@@ -198,6 +198,7 @@
return dexItemFactory.createProto(newReturnType, newParameters);
}
+ @SuppressWarnings("ReferenceEquality")
public DexType[] rewriteParameters(ProgramMethod method, DexItemFactory dexItemFactory) {
DexType[] params = method.getParameters().values;
if (isEmpty()) {
@@ -226,6 +227,7 @@
return newParams;
}
+ @SuppressWarnings("ReferenceEquality")
public RewrittenPrototypeDescription rewrittenWithLens(
AppView<AppInfoWithLiveness> appView, GraphLens graphLens, GraphLens codeLens) {
ArgumentInfoCollection newArgumentInfoCollection =
diff --git a/src/main/java/com/android/tools/r8/graph/proto/RewrittenTypeInfo.java b/src/main/java/com/android/tools/r8/graph/proto/RewrittenTypeInfo.java
index d3388bc..6f06fab 100644
--- a/src/main/java/com/android/tools/r8/graph/proto/RewrittenTypeInfo.java
+++ b/src/main/java/com/android/tools/r8/graph/proto/RewrittenTypeInfo.java
@@ -82,6 +82,7 @@
return combine(info.asRewrittenTypeInfo());
}
+ @SuppressWarnings("ReferenceEquality")
public RewrittenTypeInfo combine(RewrittenTypeInfo other) {
assert !getNewType().isVoidType();
assert getNewType() == other.getOldType();
@@ -90,6 +91,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public RewrittenTypeInfo rewrittenWithLens(
AppView<AppInfoWithLiveness> appView, GraphLens graphLens, GraphLens codeLens) {
DexType rewrittenCastType = castType != null ? graphLens.lookupType(castType, codeLens) : null;
@@ -107,6 +109,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object obj) {
if (obj == null || getClass() != obj.getClass()) {
return false;
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassInstanceFieldsMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassInstanceFieldsMerger.java
index f43d5ec..fb0b12f 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassInstanceFieldsMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassInstanceFieldsMerger.java
@@ -229,6 +229,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private boolean needsRelaxedType(
DexEncodedField targetField, Iterable<DexEncodedField> sourceFields) {
return Iterables.any(
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
index c19eb5e..ac9ec55 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMerger.java
@@ -156,6 +156,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
void mergeDirectMethods(DexProgramClass toMerge) {
toMerge.forEachProgramDirectMethod(
method -> {
@@ -270,6 +271,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
void fixNestMemberAttributes() {
if (group.getTarget().isInANest() && !group.getTarget().hasNestMemberAttributes()) {
for (DexProgramClass clazz : group.getSources()) {
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMethodsBuilder.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMethodsBuilder.java
index b87c6ad..bbd8646 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMethodsBuilder.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/ClassMethodsBuilder.java
@@ -33,6 +33,7 @@
return !reservedMethods.contains(method);
}
+ @SuppressWarnings("ReferenceEquality")
public void setClassMethods(DexProgramClass clazz) {
assert virtualMethods.stream().allMatch(method -> method.getHolderType() == clazz.type);
assert virtualMethods.stream().allMatch(DexEncodedMethod::belongsToVirtualPool);
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
index 59efae5..5a97ab6 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
@@ -409,6 +409,7 @@
* Fix all references to merged classes using the {@link TreeFixer}. Construct a graph lens
* containing all changes performed by horizontal class merging.
*/
+ @SuppressWarnings("ReferenceEquality")
private HorizontalClassMergerGraphLens createLens(
HorizontallyMergedClasses mergedClasses,
HorizontalClassMergerGraphLens.Builder lensBuilder,
@@ -425,6 +426,7 @@
.fixupTypeReferences();
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean verifyNoCyclesInInterfaceHierarchies(
AppView<?> appView, Collection<MergeGroup> groups) {
for (MergeGroup group : groups) {
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMergerGraphLens.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMergerGraphLens.java
index b8f049d..394d483 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMergerGraphLens.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMergerGraphLens.java
@@ -87,6 +87,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
protected FieldLookupResult internalDescribeLookupField(FieldLookupResult previous) {
FieldLookupResult lookup = super.internalDescribeLookupField(previous);
if (lookup.getReference() == previous.getReference()) {
@@ -155,6 +156,7 @@
newFieldSignatures.put(oldFieldSignature, newFieldSignature);
}
+ @SuppressWarnings("ReferenceEquality")
void recordNewFieldSignature(
Iterable<DexField> oldFieldSignatures,
DexField newFieldSignature,
@@ -194,6 +196,7 @@
moveMethods(methods, to, null);
}
+ @SuppressWarnings("ReferenceEquality")
void moveMethods(Iterable<ProgramMethod> methods, DexMethod to, ProgramMethod representative) {
for (ProgramMethod from : methods) {
boolean isRepresentative = representative != null && from == representative;
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerAnalysis.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerAnalysis.java
index 9117bcc..583d6be 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerAnalysis.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerAnalysis.java
@@ -63,6 +63,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public static InstanceInitializerDescription analyze(
AppView<? extends AppInfoWithClassHierarchy> appView,
IRCodeProvider codeProvider,
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerDescription.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerDescription.java
index 52a00c1..407cbce 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerDescription.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerDescription.java
@@ -92,6 +92,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object obj) {
if (obj == null || getClass() != obj.getClass()) {
return false;
@@ -138,6 +139,7 @@
this(dexItemFactory, method.getReference());
}
+ @SuppressWarnings("ReferenceEquality")
public void addInstancePut(DexField field, InstanceFieldInitializationInfo value) {
if (parentConstructor == null) {
instanceFieldAssignmentsPre.put(field, value);
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java
index 62def22..91bfef0 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/InstanceInitializerMerger.java
@@ -297,6 +297,7 @@
}
/** Synthesize a new method which selects the constructor based on a parameter type. */
+ @SuppressWarnings("ReferenceEquality")
void merge(
ProfileCollectionAdditions profileCollectionAdditions,
ClassMethodsBuilder classMethodsBuilder,
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/TreeFixer.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/TreeFixer.java
index ee56cc7..8cca85f 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/TreeFixer.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/TreeFixer.java
@@ -161,6 +161,7 @@
fixupPermittedSubclassAttribute(clazz.getPermittedSubclassAttributes()));
}
+ @SuppressWarnings("ReferenceEquality")
private void fixupProgramClassSuperTypes(DexProgramClass clazz) {
DexType rewrittenSuperType = fixupType(clazz.getSuperType());
if (rewrittenSuperType != clazz.getSuperType()) {
@@ -200,6 +201,7 @@
return remappedClassVirtualMethods;
}
+ @SuppressWarnings("ReferenceEquality")
private DexEncodedMethod fixupVirtualInterfaceMethod(DexEncodedMethod method) {
DexMethod originalMethodReference = method.getReference();
@@ -255,6 +257,7 @@
lensBuilder.commitPendingUpdates();
}
+ @SuppressWarnings("ReferenceEquality")
private DexTypeList fixupInterfaces(DexProgramClass clazz, DexTypeList interfaceTypes) {
Set<DexType> seen = Sets.newIdentityHashSet();
return interfaceTypes.map(
@@ -265,6 +268,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
private DexEncodedMethod fixupProgramMethod(
DexMethod newMethodReference, DexEncodedMethod method) {
DexMethod originalMethodReference = method.getReference();
@@ -434,6 +438,7 @@
return fixupProgramMethod(newMethodReference, method);
}
+ @SuppressWarnings("ReferenceEquality")
private DexEncodedField[] fixupFields(
DexEncodedField[] fields, Set<DexField> newFieldReferences) {
if (fields == null || ArrayUtils.isEmpty(fields)) {
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java
index d937a8e..eca0a6f 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/VirtualMethodMerger.java
@@ -200,6 +200,7 @@
* If there is only a single method that does not override anything then it is safe to just move
* it to the target type if it is not already in it.
*/
+ @SuppressWarnings("ReferenceEquality")
private void mergeTrivial(
ClassMethodsBuilder classMethodsBuilder, HorizontalClassMergerGraphLens.Builder lensBuilder) {
DexMethod newMethodReference = getNewMethodReference();
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoConstructorCollisions.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoConstructorCollisions.java
index 6e94908..6d83173 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoConstructorCollisions.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoConstructorCollisions.java
@@ -125,6 +125,7 @@
method.getName());
}
+ @SuppressWarnings("ReferenceEquality")
private DexType rewriteType(DexType type, Map<DexType, MergeGroup> groups) {
if (type.isArrayType()) {
DexType baseType = type.toBaseType(dexItemFactory);
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoDefaultInterfaceMethodCollisions.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoDefaultInterfaceMethodCollisions.java
index 294d87d..3b37e83 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoDefaultInterfaceMethodCollisions.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoDefaultInterfaceMethodCollisions.java
@@ -121,6 +121,7 @@
return newDefaultMethodsAddedToClassByMerge;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isSafeToAddDefaultMethodsToClass(
DexProgramClass clazz,
Set<DexMethod> newDefaultMethodsAddedToClassByMerge,
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoDefaultInterfaceMethodMerging.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoDefaultInterfaceMethodMerging.java
index 043bd34..e466650 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoDefaultInterfaceMethodMerging.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoDefaultInterfaceMethodMerging.java
@@ -60,6 +60,7 @@
return removeTrivialGroups(Lists.newLinkedList(newGroups.keySet()));
}
+ @SuppressWarnings("ReferenceEquality")
private void addClassToGroup(
DexProgramClass clazz,
Map<MergeGroup, DexMethodSignatureMap<DexType>> newGroups,
@@ -94,6 +95,7 @@
newGroups.put(new MergeGroup(clazz), classSignatures);
}
+ @SuppressWarnings("ReferenceEquality")
private void addDefaultMethods(DexMethodSignatureMap<DexType> signatures, DexProgramClass iface) {
// When the same signature is added from several interfaces just move to the "multiple" state
// and do not keep track of the actual interfaces.
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoEnums.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoEnums.java
index 342a3fb..d50f0b3 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoEnums.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoEnums.java
@@ -42,6 +42,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isEnumSubtype(DexClass clazz) {
if (cache.containsKey(clazz)) {
return cache.getBoolean(clazz);
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoIllegalInlining.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoIllegalInlining.java
index 0c19d53..361fdeb 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoIllegalInlining.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoIllegalInlining.java
@@ -26,6 +26,7 @@
this.appView = appView;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean disallowInlining(ProgramMethod method) {
Code code = method.getDefinition().getCode();
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoInstanceInitializerMerging.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoInstanceInitializerMerging.java
index 4c07501..bf5d475 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoInstanceInitializerMerging.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/NoInstanceInitializerMerging.java
@@ -280,6 +280,7 @@
return getRelaxedSignature(instanceInitializer.getReference());
}
+ @SuppressWarnings("ReferenceEquality")
private DexMethod getRelaxedSignature(DexMethod instanceInitializerReference) {
DexType objectType = appView.dexItemFactory().objectType;
DexTypeList parameters = instanceInitializerReference.getParameters();
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/PreserveMethodCharacteristics.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/PreserveMethodCharacteristics.java
index 60f57e4..60a279f 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/PreserveMethodCharacteristics.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/PreserveMethodCharacteristics.java
@@ -74,6 +74,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object obj) {
if (obj == null) {
return false;
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/SameInstanceFields.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/SameInstanceFields.java
index 8e57e87..9c5d8b2 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/SameInstanceFields.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/SameInstanceFields.java
@@ -82,6 +82,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object obj) {
if (obj == null || getClass() != obj.getClass()) {
return false;
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/deadlock/SingleCallerInformation.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/deadlock/SingleCallerInformation.java
index bbf486f..deda00e 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/deadlock/SingleCallerInformation.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/policies/deadlock/SingleCallerInformation.java
@@ -100,6 +100,7 @@
this.appView = appView;
}
+ @SuppressWarnings("ReferenceEquality")
private void recordDispatchTarget(ProgramMethod target) {
callers.compute(
target,
@@ -142,6 +143,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void triggerClassInitializer(DexProgramClass clazz) {
Optional<ProgramMethod> callers = clinitCallers.get(clazz);
if (callers != null) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/ClassInitializationAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/ClassInitializationAnalysis.java
index 9a7ddd8..05e6f82 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/ClassInitializationAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/ClassInitializationAnalysis.java
@@ -487,6 +487,7 @@
return field != null && isTypeInitializedBy(instruction, type, field, appView, mode);
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean isTypeInitializedBy(
Instruction instruction,
DexType typeToBeInitialized,
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/InitializedClassesOnNormalExitAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/InitializedClassesOnNormalExitAnalysis.java
index c791889..d6439aa 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/InitializedClassesOnNormalExitAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/InitializedClassesOnNormalExitAnalysis.java
@@ -73,6 +73,7 @@
knownToBeInitialized.forEach(this::markInitializedOnNormalExit);
}
+ @SuppressWarnings("ReferenceEquality")
private void markInitializedOnNormalExit(DexType knownToBeInitialized) {
if (knownToBeInitialized == context.getHolderType()) {
// Do not record that the given method causes its own holder to be initialized, since this
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/ValueMayDependOnEnvironmentAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/ValueMayDependOnEnvironmentAnalysis.java
index 6af4d2e..9d7a65b 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/ValueMayDependOnEnvironmentAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/ValueMayDependOnEnvironmentAnalysis.java
@@ -251,6 +251,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean addInvokeVirtualValueToValueGraph(
Value value,
Node node,
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/VerifyTypesHelper.java b/src/main/java/com/android/tools/r8/ir/analysis/VerifyTypesHelper.java
index d8c1bb1..5643834 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/VerifyTypesHelper.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/VerifyTypesHelper.java
@@ -19,6 +19,7 @@
return new VerifyTypesHelper(appView);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isAssignable(TypeElement one, TypeElement other) {
if (one.isPrimitiveType() != other.isPrimitiveType()) {
return false;
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/equivalence/BasicBlockBehavioralSubsumption.java b/src/main/java/com/android/tools/r8/ir/analysis/equivalence/BasicBlockBehavioralSubsumption.java
index 187ac76..76c3362 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/equivalence/BasicBlockBehavioralSubsumption.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/equivalence/BasicBlockBehavioralSubsumption.java
@@ -252,6 +252,7 @@
return instructionsDefineIdenticalValues(value.definition, other.definition);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean instructionsDefineIdenticalValues(Instruction instruction, Instruction other) {
assert instruction.hasOutValue();
assert other.hasOutValue();
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/escape/EscapeAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/escape/EscapeAnalysis.java
index b1821c3..a8e98f0 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/escape/EscapeAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/escape/EscapeAnalysis.java
@@ -174,6 +174,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isDirectlyEscaping(
Instruction instr, ProgramMethod context, List<Value> arguments) {
// As return value.
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAssignmentTracker.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAssignmentTracker.java
index 8d90411..49ecbf0 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAssignmentTracker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldAssignmentTracker.java
@@ -145,6 +145,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
void acceptClassInitializerDefaultsResult(
ClassInitializerDefaultsResult classInitializerDefaultsResult) {
classInitializerDefaultsResult.forEachOptimizedField(
@@ -323,6 +324,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void recordAllFieldPutsProcessed(
ProgramField field, OptimizationFeedbackDelayed feedback) {
FieldState fieldState = fieldStates.getOrDefault(field.getDefinition(), FieldState.bottom());
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessAnalysis.java
index a1e3eb5..bd2c545 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/FieldBitAccessAnalysis.java
@@ -62,6 +62,7 @@
return bitsRead;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isOnlyUsedToUpdateFieldValue(Instruction user, DexEncodedField encodedField) {
if (user.isLogicalBinop()) {
LogicalBinop binop = user.asLogicalBinop();
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java
index a938964..5f8e465 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldaccess/TrivialFieldAccessReprocessor.java
@@ -199,6 +199,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
private static FieldClassification classifyField(
DexEncodedField field, AppView<AppInfoWithLiveness> appView) {
FieldAccessInfo fieldAccessInfo =
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/InstanceFieldValueAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/InstanceFieldValueAnalysis.java
index 8b00bfb..a2ef2fa 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/InstanceFieldValueAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/InstanceFieldValueAnalysis.java
@@ -120,6 +120,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
boolean isSubjectToOptimization(DexClassAndField field) {
return !field.getAccessFlags().isStatic() && field.getHolderType() == context.getHolderType();
}
@@ -136,6 +137,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
void analyzeForwardingConstructorCall(InvokeDirect invoke, Value thisValue) {
if (invoke.getReceiver() != thisValue
|| invoke.getInvokedMethod().getHolderType() != context.getHolderType()) {
@@ -166,6 +168,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void analyzeParentConstructorCall() {
if (parentConstructor.getHolderType() == context.getHolderType()) {
// Forwarding constructor calls are handled similar to instance-put instructions.
@@ -229,6 +232,7 @@
field, getInstanceFieldInitializationInfo(field, value));
}
+ @SuppressWarnings("ReferenceEquality")
private boolean fieldNeverWrittenBetweenInstancePutAndMethodExit(
DexClassAndField field, InstancePut instancePut) {
if (field.getAccessFlags().isFinal()) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/StaticFieldValueAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/StaticFieldValueAnalysis.java
index f03ac07..e8c03c3 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/StaticFieldValueAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/fieldvalueanalysis/StaticFieldValueAnalysis.java
@@ -119,6 +119,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
boolean isSubjectToOptimization(DexClassAndField field) {
return field.getAccessFlags().isStatic()
&& field.getHolderType() == context.getHolderType()
@@ -126,6 +127,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
boolean isSubjectToOptimizationIgnoringPinning(DexClassAndField field) {
return field.getAccessFlags().isStatic()
&& field.getHolderType() == context.getHolderType()
@@ -166,6 +168,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public void updateFieldOptimizationInfoWith2Values(
DexClassAndField field, Value valuePut, DexValue valueBeforePut) {
// We are interested in the AbstractValue only if it's null or a value, so we can use the value
@@ -246,6 +249,7 @@
return singleFieldValue;
}
+ @SuppressWarnings("ReferenceEquality")
private SingleFieldValue internalComputeSingleEnumFieldValueForValuesArray(Value value) {
NewArrayEmpty newArrayEmpty = value.definition.asNewArrayEmpty();
NewArrayFilled newArrayFilled = value.definition.asNewArrayFilled();
@@ -389,6 +393,7 @@
return intValue == ordinal;
}
+ @SuppressWarnings("ReferenceEquality")
private SingleFieldValue computeSingleEnumFieldValueForInstance(Value value) {
assert value.isDefinedByInstructionSatisfying(Instruction::isNewInstance);
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/modeling/LibraryMethodReadSetModeling.java b/src/main/java/com/android/tools/r8/ir/analysis/modeling/LibraryMethodReadSetModeling.java
index 95d68a4..ecaa39d 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/modeling/LibraryMethodReadSetModeling.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/modeling/LibraryMethodReadSetModeling.java
@@ -14,6 +14,7 @@
/** Models if a given library method may cause a program field to be read. */
public class LibraryMethodReadSetModeling {
+ @SuppressWarnings("ReferenceEquality")
public static AbstractFieldSet getModeledReadSetOrUnknown(
AppView<?> appView, InvokeMethod invoke) {
DexMethod invokedMethod = invoke.getInvokedMethod();
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/EnumLiteProtoShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/EnumLiteProtoShrinker.java
index 48c8084..96f7ef9 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/EnumLiteProtoShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/EnumLiteProtoShrinker.java
@@ -116,6 +116,7 @@
*
* <p>We bail out if other virtual methods than the two expected ones are found and return null.
*/
+ @SuppressWarnings("ReferenceEquality")
private DexProgramClass computeCorrespondingEnumLite(DexProgramClass enumLiteMap) {
if (enumLiteMap.getMethodCollection().numberOfVirtualMethods() != 2) {
return null;
@@ -145,6 +146,7 @@
return null;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean matchesFindValueByNumberMethod(DexMethod method) {
return method.name == references.findValueByNumberName
&& method.getArity() == 1
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java
index 5fbfb59..d89ae34 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedExtensionRegistryShrinker.java
@@ -253,6 +253,7 @@
return field != null && isDeadProtoExtensionField(field, fieldAccessInfoCollection, keepInfo);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isDeadProtoExtensionField(
ProgramField field,
FieldAccessInfoCollection<?> fieldAccessInfoCollection,
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java
index 322907a..d5aa0af 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteBuilderShrinker.java
@@ -132,6 +132,7 @@
Set<DexProgramClass> seen = Sets.newIdentityHashSet();
return new EnqueuerAnalysis() {
@Override
+ @SuppressWarnings("ReferenceEquality")
public void notifyFixpoint(Enqueuer enqueuer, EnqueuerWorklist worklist, Timing timing) {
builders.forEach(
(builder, dynamicMethod) -> {
@@ -184,6 +185,7 @@
}
/** Returns true if an action was deferred. */
+ @SuppressWarnings("ReferenceEquality")
public boolean deferDeadProtoBuilders(
DexProgramClass clazz, ProgramMethod method, BooleanSupplier register) {
if (!enableAggressiveBuilderOptimization) {
@@ -229,6 +231,7 @@
timing.end(); // Remove dead builder references
}
+ @SuppressWarnings("ReferenceEquality")
private void rewriteDeadBuilderReferencesFromDynamicMethod(
AppView<AppInfoWithLiveness> appView,
DexProgramClass builder,
@@ -395,6 +398,7 @@
* <p>This is assuming that calling dynamicMethod() on a proto message with
* MethodToInvoke.NEW_MUTABLE_INSTANCE will create an instance of the enclosing class.
*/
+ @SuppressWarnings("ReferenceEquality")
private void strengthenCheckCastInstructions(IRCode code) {
AffectedValues affectedValues = new AffectedValues();
InstructionListIterator instructionIterator = code.instructionListIterator();
@@ -484,6 +488,7 @@
.isStrictSubtypeOf(type, references.generatedMessageLiteBuilderType));
}
+ @SuppressWarnings("ReferenceEquality")
private void bypassClinitforInliningNewBuilderMethods(SubtypingInfo subtypingInfo) {
for (DexType type : subtypingInfo.subtypes(references.generatedMessageLiteType)) {
DexProgramClass clazz = appView.definitionFor(type).asProgramClass();
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
index bd541f8..75ca687 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/GeneratedMessageLiteShrinker.java
@@ -216,6 +216,7 @@
assert code.isConsistentSSA(appView);
}
+ @SuppressWarnings("ReferenceEquality")
private DexType getNewMutableInstanceType(
AppView<AppInfoWithLiveness> appView, Instruction instruction) {
if (!instruction.isInvokeMethodWithReceiver()) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoEnqueuerUseRegistry.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoEnqueuerUseRegistry.java
index 13495c35..ebfc1f4 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoEnqueuerUseRegistry.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoEnqueuerUseRegistry.java
@@ -75,6 +75,7 @@
* traced manually by {@link ProtoEnqueuerExtension#tracePendingInstructionsInDynamicMethods}.
*/
@Override
+ @SuppressWarnings("ReferenceEquality")
public void registerStaticFieldRead(DexField field) {
if (references.isDynamicMethod(getContextMethod())
&& field.getHolderType() != getContextHolder().getType()
@@ -85,6 +86,7 @@
super.registerStaticFieldRead(field);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isStaticFieldReadForProtoSchemaDefinition(DexField field) {
if (field == references.getDefaultInstanceField(getContextHolder())) {
return true;
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoEnumSwitchMapRemover.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoEnumSwitchMapRemover.java
index 5cbf665..2a3f855 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoEnumSwitchMapRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoEnumSwitchMapRemover.java
@@ -44,6 +44,7 @@
staticFieldValuesMapDelayed.clear();
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isProtoEnum(DexProgramClass clazz) {
assert clazz.isEnum();
if (clazz.type == references.methodToInvokeType) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoInliningReasonStrategy.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoInliningReasonStrategy.java
index 337b88b..95ed51a 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoInliningReasonStrategy.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoInliningReasonStrategy.java
@@ -53,6 +53,7 @@
: parent.computeInliningReason(invoke, target, context, oracle, methodProcessor);
}
+ @SuppressWarnings("ReferenceEquality")
private Reason computeInliningReasonForDynamicMethod(
InvokeMethod invoke, ProgramMethod target, ProgramMethod context) {
// Do not allow inlining of dynamicMethod() into a proto library class. This should only happen
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoReferences.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoReferences.java
index 0b15b9a..932e81d 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoReferences.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoReferences.java
@@ -163,11 +163,13 @@
return dexItemFactory.createField(holder.type, enumVerifierType, instanceFieldName);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isAbstractGeneratedMessageLiteBuilder(DexProgramClass clazz) {
return clazz.type == generatedMessageLiteBuilderType
|| clazz.type == generatedMessageLiteExtendableBuilderType;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isDynamicMethod(DexMethod method) {
return method.name == dynamicMethodName && method.proto == dynamicMethodProto;
}
@@ -180,6 +182,7 @@
return isDynamicMethod(method.getReference());
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isDynamicMethodBridge(DexMethod method) {
return method == generatedMessageLiteMethods.dynamicMethodBridgeMethod
|| method == generatedMessageLiteMethods.dynamicMethodBridgeMethodWithObject;
@@ -193,6 +196,7 @@
return isDynamicMethodBridge(method.getReference());
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isFindLiteExtensionByNumberMethod(DexMethod method) {
return method.proto == findLiteExtensionByNumberProto
&& method.name.startsWith(findLiteExtensionByNumberName)
@@ -203,12 +207,14 @@
return isFindLiteExtensionByNumberMethod(method.getReference());
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isGeneratedMessageLiteBuilder(DexProgramClass clazz) {
return (clazz.superType == generatedMessageLiteBuilderType
|| clazz.superType == generatedMessageLiteExtendableBuilderType)
&& !isAbstractGeneratedMessageLiteBuilder(clazz);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isMessageInfoConstruction(InvokeMethod invoke) {
if (invoke.getInvokedMethod().match(newMessageInfoMethod)) {
return true;
@@ -261,6 +267,7 @@
consumer.accept(constructorWithClass);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isConstructor(DexMethod method) {
return method == constructor || method == constructorWithClass;
}
@@ -405,6 +412,7 @@
// Intentionally empty.
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isNewMutableInstanceEnum(DexField field) {
return field == newMutableInstanceField;
}
@@ -416,6 +424,7 @@
&& isNewMutableInstanceEnum(root.definition.asStaticGet().getField());
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isMethodToInvokeWithSimpleBody(DexField field) {
return field == getDefaultInstanceField
|| field == getMemoizedIsInitializedField
@@ -424,6 +433,7 @@
|| field == setMemoizedIsInitializedField;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isMethodToInvokeWithNonSimpleBody(DexField field) {
return field == buildMessageInfoField || field == getParserField;
}
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoUtils.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoUtils.java
index b6c1f4d..ac5c7aa 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoUtils.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/ProtoUtils.java
@@ -14,6 +14,7 @@
public static final int IS_PROTO_2_MASK = 0x1;
+ @SuppressWarnings("ReferenceEquality")
public static Value getInfoValueFromMessageInfoConstructionInvoke(
InvokeMethod invoke, ProtoReferences references) {
assert references.isMessageInfoConstruction(invoke);
@@ -41,6 +42,7 @@
throw new Unreachable();
}
+ @SuppressWarnings("ReferenceEquality")
static Value getObjectsValueFromMessageInfoConstructionInvoke(
InvokeMethod invoke, ProtoReferences references) {
assert references.isMessageInfoConstruction(invoke);
@@ -62,6 +64,7 @@
throw new Unreachable();
}
+ @SuppressWarnings("ReferenceEquality")
static void setObjectsValueForMessageInfoConstructionInvoke(
InvokeMethod invoke, Value newObjectsValue, ProtoReferences references) {
assert references.isMessageInfoConstruction(invoke);
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java b/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java
index 8e43229..c81b099 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/proto/schema/ProtoEnqueuerExtension.java
@@ -110,6 +110,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void markGeneratedMessageLiteSubtypeAsInstantiated(
DexProgramClass clazz, EnqueuerWorklist worklist) {
if (clazz.isAbstract()) {
@@ -314,6 +315,7 @@
*
* <p>See also {@link #populateExtensionGraph}.
*/
+ @SuppressWarnings("ReferenceEquality")
private void populateExtensionGraphWithExtensionFieldDefinition(StaticPut staticPut) {
Value value = staticPut.value().getAliasedValue();
if (value.isPhi()) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/sideeffect/ClassInitializerSideEffectAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/sideeffect/ClassInitializerSideEffectAnalysis.java
index 032e1798..d32a8b9 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/sideeffect/ClassInitializerSideEffectAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/sideeffect/ClassInitializerSideEffectAnalysis.java
@@ -38,6 +38,7 @@
* A class initializer cannot be postponed if it writes a static field of another class, or if any
* non-static-put instructions may have side effects.
*/
+ @SuppressWarnings("ReferenceEquality")
public static ClassInitializerSideEffect classInitializerCanBePostponed(
AppView<AppInfoWithLiveness> appView, IRCode code) {
ProgramMethod context = code.context();
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/ArrayTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/ArrayTypeElement.java
index a2acb83..8a3686a 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/ArrayTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/ArrayTypeElement.java
@@ -131,6 +131,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public ArrayTypeElement fixupClassTypeReferences(
AppView<? extends AppInfoWithClassHierarchy> appView,
Function<DexType, DexType> mapping,
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/ClassTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/ClassTypeElement.java
index 26993a6..ca9ebfd 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/ClassTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/ClassTypeElement.java
@@ -154,6 +154,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public DexType toDexType(DexItemFactory dexItemFactory) {
if (type == dexItemFactory.objectType) {
DexType singleKnownInterface = getInterfaces().getSingleKnownInterface();
@@ -193,6 +194,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public TypeElement fixupClassTypeReferences(
AppView<? extends AppInfoWithClassHierarchy> ignore,
Function<DexType, DexType> mapping,
@@ -301,6 +303,7 @@
return joinWithClassHierarchy(lubType, other.getInterfaces(), other.nullability());
}
+ @SuppressWarnings("ReferenceEquality")
private ClassTypeElement joinWithClassHierarchy(
DexType lubType, InterfaceCollection otherInterfaces, Nullability nullability) {
assert appView != null;
@@ -327,6 +330,7 @@
: create(lubType, lubNullability, appView, lubInterfaces);
}
+ @SuppressWarnings("ReferenceEquality")
ClassTypeElement joinWithoutClassHierarchy(
DexType other, Nullability nullability, AppView<?> appView) {
assert !appView.enableWholeProgramOptimizations();
@@ -401,6 +405,7 @@
return left.isTrue() && right.isTrue();
}
+ @SuppressWarnings("ReferenceEquality")
boolean merge(InterfaceMarker marker) {
assert marker.isMarked();
assert !marker.isMarkedOnBothSides();
@@ -428,6 +433,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public static DexType computeLeastUpperBoundOfClasses(
AppInfoWithClassHierarchy appInfo, DexType type1, DexType type2) {
// Compiling R8 with R8, this hits more than 1/3 of cases.
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/DestructivePhiTypeUpdater.java b/src/main/java/com/android/tools/r8/ir/analysis/type/DestructivePhiTypeUpdater.java
index 617e995..dad9f87 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/DestructivePhiTypeUpdater.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/DestructivePhiTypeUpdater.java
@@ -76,6 +76,7 @@
affectedValues.narrowingWithAssumeRemoval(appView, code);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean verifyAllPhiOperandsAreBottom(Set<Phi> affectedPhis) {
for (Phi phi : affectedPhis) {
for (Value operand : phi.getOperands()) {
@@ -94,6 +95,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean verifyAllChangedPhisAreScheduled(IRCode code, Set<Phi> affectedPhis) {
ListIterator<BasicBlock> blocks = code.listIterator();
while (blocks.hasNext()) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/InterfaceCollection.java b/src/main/java/com/android/tools/r8/ir/analysis/type/InterfaceCollection.java
index 7f4e28a..62462bd 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/InterfaceCollection.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/InterfaceCollection.java
@@ -21,6 +21,7 @@
public class InterfaceCollection {
+ @SuppressWarnings("ReferenceEquality")
public static boolean isKnownToImplement(
DexType iface, DexType implementor, InternalOptions options) {
if (options.canHaveZipFileWithMissingCloseableBug()
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/PrimitiveTypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/PrimitiveTypeElement.java
index 1e5260b..c6110d4 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/PrimitiveTypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/PrimitiveTypeElement.java
@@ -131,6 +131,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
TypeElement join(PrimitiveTypeElement other) {
if (this == other) {
return this;
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java
index 9752734..a470a92 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeAnalysis.java
@@ -229,6 +229,7 @@
invoke.getReceiver().getDynamicType(appView), invoke.getInvokedMethod(), appView);
}
+ @SuppressWarnings("ReferenceEquality")
public static DexType toRefinedReceiverType(
DynamicType dynamicReceiverType,
DexMethod method,
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeElement.java b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeElement.java
index 6800d1c..a353a7e 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeElement.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeElement.java
@@ -104,10 +104,12 @@
appView, type -> graphLens.lookupType(type, codeLens), prunedTypes);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isNullable() {
return nullability().isNullable();
}
+ @SuppressWarnings("ReferenceEquality")
public abstract Nullability nullability();
/**
@@ -117,6 +119,7 @@
* @param appView {@link DexDefinitionSupplier}.
* @return {@link TypeElement}, a least upper bound of {@param this} and {@param other}.
*/
+ @SuppressWarnings("ReferenceEquality")
public TypeElement join(TypeElement other, AppView<?> appView) {
if (this == other || other.isBottom()) {
return this;
@@ -183,6 +186,7 @@
* @param other to check for equality with this
* @return {@code true} if {@param this} is equal up to nullability with {@param other}.
*/
+ @SuppressWarnings("ReferenceEquality")
public boolean lessThanOrEqualUpToNullability(TypeElement other, AppView<?> appView) {
if (this == other) {
return true;
@@ -217,6 +221,7 @@
* @param other to check for equality with this
* @return {@code true} if {@param this} is equal up to nullability with {@param other}.
*/
+ @SuppressWarnings("ReferenceEquality")
public boolean equalUpToNullability(TypeElement other) {
if (this == other) {
return true;
@@ -287,6 +292,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
public final boolean isClassType(DexType type) {
assert type.isClassType();
return isClassType() && asClassType().getClassType() == type;
@@ -391,6 +397,7 @@
return nullability().isDefinitelyNotNull();
}
+ @SuppressWarnings("ReferenceEquality")
public int requiredRegisters() {
assert !isBottom() && !isTop();
return 1;
@@ -424,6 +431,7 @@
return fromDexType(type, nullability, appView, false);
}
+ @SuppressWarnings("ReferenceEquality")
public static TypeElement fromDexType(
DexType type, Nullability nullability, AppView<?> appView, boolean asArrayElementType) {
if (type == DexItemFactory.nullValueType) {
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeUtils.java b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeUtils.java
index 6ded2e5..aa30ed7 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/type/TypeUtils.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/type/TypeUtils.java
@@ -186,6 +186,7 @@
return staticPut.getField().getType().toTypeElement(appView);
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isNullPointerException(TypeElement type, AppView<?> appView) {
return type.isClassType()
&& type.asClassType().getClassType() == appView.dexItemFactory().npeType;
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleConstClassValue.java b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleConstClassValue.java
index fc86d70..d5047ac 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleConstClassValue.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleConstClassValue.java
@@ -126,6 +126,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public SingleValue rewrittenWithLens(
AppView<AppInfoWithLiveness> appView, GraphLens lens, GraphLens codeLens) {
assert lens.lookupType(type, codeLens) == type;
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleDexItemBasedStringValue.java b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleDexItemBasedStringValue.java
index ef1de40..da830b6 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleDexItemBasedStringValue.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleDexItemBasedStringValue.java
@@ -55,6 +55,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) {
return false;
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleFieldValue.java b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleFieldValue.java
index b78f18b..52f0af1 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleFieldValue.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleFieldValue.java
@@ -142,6 +142,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public SingleValue rewrittenWithLens(
AppView<AppInfoWithLiveness> appView, GraphLens lens, GraphLens codeLens) {
AbstractValueFactory factory = appView.abstractValueFactory();
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleStatefulFieldValue.java b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleStatefulFieldValue.java
index acc4577..3030116 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleStatefulFieldValue.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleStatefulFieldValue.java
@@ -45,6 +45,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) {
return false;
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleStatelessFieldValue.java b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleStatelessFieldValue.java
index 8a58dfe..d64c67e 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/value/SingleStatelessFieldValue.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/value/SingleStatelessFieldValue.java
@@ -30,6 +30,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) {
return false;
diff --git a/src/main/java/com/android/tools/r8/ir/analysis/value/objectstate/EnumValuesObjectState.java b/src/main/java/com/android/tools/r8/ir/analysis/value/objectstate/EnumValuesObjectState.java
index 1daf879..433e5f4 100644
--- a/src/main/java/com/android/tools/r8/ir/analysis/value/objectstate/EnumValuesObjectState.java
+++ b/src/main/java/com/android/tools/r8/ir/analysis/value/objectstate/EnumValuesObjectState.java
@@ -133,6 +133,7 @@
: new VariableObjectClassForOrdinal(valuesClass);
}
+ @SuppressWarnings("ReferenceEquality")
static boolean sameType(DexType[] valuesClass) {
DexType defaultType = valuesClass[0];
for (DexType type : valuesClass) {
@@ -184,6 +185,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object obj) {
if (!(obj instanceof UniformObjectClassForOrdinal)) {
return false;
diff --git a/src/main/java/com/android/tools/r8/ir/code/ArrayGet.java b/src/main/java/com/android/tools/r8/ir/code/ArrayGet.java
index ccce70a..1f6ea43 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ArrayGet.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ArrayGet.java
@@ -71,6 +71,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void buildDex(DexBuilder builder) {
int dest = builder.allocatedRegister(dest(), getNumber());
int array = builder.allocatedRegister(array(), getNumber());
@@ -156,11 +157,13 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean hasInvariantOutType() {
return false;
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public DexType computeVerificationType(AppView<?> appView, TypeVerificationHelper helper) {
// This method is not called for ArrayGet on primitive array.
assert this.outValue.getType().isReferenceType();
@@ -252,6 +255,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean outTypeKnownToBeBoolean(Set<Phi> seen) {
return array().getType().isArrayType()
&& array().getType().asArrayType().getMemberType() == TypeElement.getBoolean();
diff --git a/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java b/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java
index 4beb3e7..9419bef 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ArrayPut.java
@@ -84,6 +84,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void buildDex(DexBuilder builder) {
int value = builder.allocatedRegister(value(), getNumber());
int array = builder.allocatedRegister(array(), getNumber());
diff --git a/src/main/java/com/android/tools/r8/ir/code/BasicBlock.java b/src/main/java/com/android/tools/r8/ir/code/BasicBlock.java
index f1db962..0dbf1fd 100644
--- a/src/main/java/com/android/tools/r8/ir/code/BasicBlock.java
+++ b/src/main/java/com/android/tools/r8/ir/code/BasicBlock.java
@@ -1105,6 +1105,7 @@
*
* @return true if any guards were renamed.
*/
+ @SuppressWarnings("ReferenceEquality")
public boolean renameGuardsInCatchHandlers(NonIdentityGraphLens graphLens, GraphLens codeLens) {
assert hasCatchHandlers();
boolean anyGuardsRenamed = false;
@@ -2040,6 +2041,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public void deduplicatePhis() {
PhiEquivalence equivalence = new PhiEquivalence();
HashMap<Wrapper<Phi>, Phi> wrapper2phi = new HashMap<>();
diff --git a/src/main/java/com/android/tools/r8/ir/code/CanonicalPositions.java b/src/main/java/com/android/tools/r8/ir/code/CanonicalPositions.java
index bde37fd..1a07f41 100644
--- a/src/main/java/com/android/tools/r8/ir/code/CanonicalPositions.java
+++ b/src/main/java/com/android/tools/r8/ir/code/CanonicalPositions.java
@@ -90,6 +90,7 @@
: caller.builderWithCopy().setCallerPosition(callerOfCaller).build());
}
+ @SuppressWarnings("ReferenceEquality")
// If we need to emit a synthetic position for exceptional monitor exits, we try to cook up a
// position that is not actually a valid program position, so as not to incorrectly position the
// user on an exit that is not the actual exit being taken. Our heuristic for this is that if the
diff --git a/src/main/java/com/android/tools/r8/ir/code/CatchHandlers.java b/src/main/java/com/android/tools/r8/ir/code/CatchHandlers.java
index 6d8a713..1717cb3 100644
--- a/src/main/java/com/android/tools/r8/ir/code/CatchHandlers.java
+++ b/src/main/java/com/android/tools/r8/ir/code/CatchHandlers.java
@@ -83,6 +83,7 @@
return uniqueTargets;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean hasCatchAll(DexItemFactory factory) {
return getGuards().size() > 0
&& getGuards().get(getGuards().size() - 1) == factory.throwableType;
@@ -95,6 +96,7 @@
return new CatchHandlers<>(newGuards, newTargets);
}
+ @SuppressWarnings("ReferenceEquality")
public CatchHandlers<T> removeGuard(DexType guardToBeRemoved) {
List<DexType> newGuards = new ArrayList<>();
List<T> newTargets = new ArrayList<>();
diff --git a/src/main/java/com/android/tools/r8/ir/code/CheckCast.java b/src/main/java/com/android/tools/r8/ir/code/CheckCast.java
index 6de88b7..9845028 100644
--- a/src/main/java/com/android/tools/r8/ir/code/CheckCast.java
+++ b/src/main/java/com/android/tools/r8/ir/code/CheckCast.java
@@ -54,6 +54,7 @@
return new Builder();
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isRefiningStaticType(InternalOptions options) {
TypeElement inType = object().getType();
if (inType.isNullType()) {
@@ -126,6 +127,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
return other.isCheckCast() && other.asCheckCast().type == type;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/ConstClass.java b/src/main/java/com/android/tools/r8/ir/code/ConstClass.java
index a1de12c..30b3b54 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ConstClass.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ConstClass.java
@@ -118,6 +118,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean instructionInstanceCanThrow(
AppView<?> appView,
ProgramMethod context,
@@ -160,6 +161,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
return other.isConstClass() && other.asConstClass().clazz == clazz;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/ConstMethodHandle.java b/src/main/java/com/android/tools/r8/ir/code/ConstMethodHandle.java
index 58928b0..4336587 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ConstMethodHandle.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ConstMethodHandle.java
@@ -78,6 +78,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
return other.isConstMethodHandle() && other.asConstMethodHandle().methodHandle == methodHandle;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/ConstMethodType.java b/src/main/java/com/android/tools/r8/ir/code/ConstMethodType.java
index 87031d2..cbb68a6 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ConstMethodType.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ConstMethodType.java
@@ -76,6 +76,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
return other.isConstMethodType() && other.asConstMethodType().methodType == methodType;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/ConstString.java b/src/main/java/com/android/tools/r8/ir/code/ConstString.java
index c16a3de..ed93213 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ConstString.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ConstString.java
@@ -78,6 +78,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
return other.isConstString() && other.asConstString().value == value;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/DebugLocalsChange.java b/src/main/java/com/android/tools/r8/ir/code/DebugLocalsChange.java
index 089ee34..5852d5e 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DebugLocalsChange.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DebugLocalsChange.java
@@ -105,6 +105,7 @@
return inliningConstraints.forDebugLocalsChange();
}
+ @SuppressWarnings("ReferenceEquality")
public boolean apply(Int2ReferenceMap<DebugLocalInfo> locals) {
boolean changed = false;
for (Entry<DebugLocalInfo> end : getEnding().int2ReferenceEntrySet()) {
diff --git a/src/main/java/com/android/tools/r8/ir/code/DexItemBasedConstString.java b/src/main/java/com/android/tools/r8/ir/code/DexItemBasedConstString.java
index af0a214..bbd5430 100644
--- a/src/main/java/com/android/tools/r8/ir/code/DexItemBasedConstString.java
+++ b/src/main/java/com/android/tools/r8/ir/code/DexItemBasedConstString.java
@@ -94,6 +94,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
return other.isDexItemBasedConstString()
&& other.asDexItemBasedConstString().item == item
diff --git a/src/main/java/com/android/tools/r8/ir/code/IRCode.java b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
index a4db6a0..5055a37 100644
--- a/src/main/java/com/android/tools/r8/ir/code/IRCode.java
+++ b/src/main/java/com/android/tools/r8/ir/code/IRCode.java
@@ -197,6 +197,7 @@
/**
* Compute the set of live values at the entry to each block using a backwards data-flow analysis.
*/
+ @SuppressWarnings("ReferenceEquality")
public Map<BasicBlock, LiveAtEntrySets> computeLiveAtEntrySets() {
Map<BasicBlock, LiveAtEntrySets> liveAtEntrySets = new IdentityHashMap<>();
Queue<BasicBlock> worklist = new ArrayDeque<>();
@@ -709,6 +710,7 @@
: "Multiple value definitions with number " + number + ": " + value + " and " + old;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean consistentDefUseChains() {
Int2ReferenceMap<Value> values = new Int2ReferenceOpenHashMap<>();
for (BasicBlock block : blocks) {
diff --git a/src/main/java/com/android/tools/r8/ir/code/InitClass.java b/src/main/java/com/android/tools/r8/ir/code/InitClass.java
index dc3527c..bb3e50d 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InitClass.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InitClass.java
@@ -99,11 +99,13 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
return other.isInitClass() && clazz == other.asInitClass().clazz;
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean instructionInstanceCanThrow(
AppView<?> appView,
ProgramMethod context,
@@ -129,6 +131,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean instructionMayTriggerMethodInvocation(AppView<?> appView, ProgramMethod context) {
if (appView.enableWholeProgramOptimizations()) {
// In R8, check if the class initialization of `clazz` or any of its ancestor types may have
diff --git a/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java b/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java
index d95a472..1719b30 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InstanceGet.java
@@ -150,6 +150,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
if (!other.isInstanceGet()) {
return false;
diff --git a/src/main/java/com/android/tools/r8/ir/code/InstanceOf.java b/src/main/java/com/android/tools/r8/ir/code/InstanceOf.java
index 9834a17..19b2929 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InstanceOf.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InstanceOf.java
@@ -75,6 +75,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
return other.isInstanceOf() && other.asInstanceOf().type == type;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/InstancePut.java b/src/main/java/com/android/tools/r8/ir/code/InstancePut.java
index 0a0c10a..d54a445 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InstancePut.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InstancePut.java
@@ -188,6 +188,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
if (!other.isInstancePut()) {
return false;
diff --git a/src/main/java/com/android/tools/r8/ir/code/Instruction.java b/src/main/java/com/android/tools/r8/ir/code/Instruction.java
index c46e899..a778b37 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Instruction.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Instruction.java
@@ -265,6 +265,7 @@
oldValue.removeUser(this);
}
+ @SuppressWarnings("ReferenceEquality")
public void replaceDebugValue(Value oldValue, Value newValue) {
assert oldValue.hasLocalInfo();
assert newValue.hasLocalInfo();
@@ -304,6 +305,7 @@
assert false;
}
+ @SuppressWarnings("ReferenceEquality")
public Value removeDebugValue(DebugLocalInfo localInfo) {
if (debugValues != null) {
Iterator<Value> it = debugValues.iterator();
diff --git a/src/main/java/com/android/tools/r8/ir/code/Invoke.java b/src/main/java/com/android/tools/r8/ir/code/Invoke.java
index 416ac24..4cd8e15 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Invoke.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Invoke.java
@@ -74,6 +74,7 @@
return !arguments().isEmpty();
}
+ @SuppressWarnings("ReferenceEquality")
public boolean hasReturnTypeVoid(DexItemFactory factory) {
return getReturnType() == factory.voidType;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java b/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java
index 4539f17..ae2c6f0 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeCustom.java
@@ -49,6 +49,7 @@
return visitor.visit(this);
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean verifyLambdaInterfaces(
TypeElement returnType, InterfaceCollection lambdaInterfaceSet, DexType objectType) {
InterfaceCollection primaryInterfaces = returnType.asClassType().getInterfaces();
@@ -67,6 +68,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public TypeElement evaluate(AppView<?> appView) {
TypeElement returnType = super.evaluate(appView);
if (!appView.appInfo().hasLiveness()) {
@@ -163,6 +165,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
return other.isInvokeCustom() && callSite == other.asInvokeCustom().callSite;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java b/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java
index 73b0491..fa5469f 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeMethod.java
@@ -93,6 +93,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
return other.isInvokeMethod() && method == other.asInvokeMethod().getInvokedMethod();
}
@@ -253,6 +254,7 @@
return UnknownValue.getInstance();
}
+ @SuppressWarnings("ReferenceEquality")
boolean verifyD8LookupResult(
DexEncodedMethod hierarchyResult, DexEncodedMethod lookupDirectTargetOnItself) {
if (lookupDirectTargetOnItself == null) {
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeMethodWithReceiver.java b/src/main/java/com/android/tools/r8/ir/code/InvokeMethodWithReceiver.java
index 5069737..27e709e 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeMethodWithReceiver.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeMethodWithReceiver.java
@@ -94,6 +94,7 @@
* <p>For desugaring we use invoke-direct instead. We need to do this as the Android Runtime will
* not allow invoke-virtual of a private method.
*/
+ @SuppressWarnings("ReferenceEquality")
protected boolean isPrivateMethodInvokedOnSelf(DexBuilder builder) {
DexMethod method = getInvokedMethod();
if (method.getHolderType()
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeMultiNewArray.java b/src/main/java/com/android/tools/r8/ir/code/InvokeMultiNewArray.java
index a7bd599..9b5eb96 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeMultiNewArray.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeMultiNewArray.java
@@ -74,6 +74,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
return other.isInvokeMultiNewArray() && type == other.asInvokeMultiNewArray().type;
}
@@ -121,6 +122,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean instructionInstanceCanThrow(
AppView<?> appView,
ProgramMethod context,
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeType.java b/src/main/java/com/android/tools/r8/ir/code/InvokeType.java
index bed9095..de333be 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeType.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeType.java
@@ -54,6 +54,7 @@
return fromCfOpcode(opcode, invokedMethod, context, appView, appView.codeLens());
}
+ @SuppressWarnings("ReferenceEquality")
public static InvokeType fromCfOpcode(
int opcode,
DexMethod invokedMethod,
@@ -77,6 +78,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public static InvokeType fromInvokeSpecial(
DexMethod invokedMethod, DexClassAndMethod context, AppView<?> appView, GraphLens codeLens) {
if (invokedMethod.isInstanceInitializer(appView.dexItemFactory())) {
diff --git a/src/main/java/com/android/tools/r8/ir/code/MoveException.java b/src/main/java/com/android/tools/r8/ir/code/MoveException.java
index 73836d1..15082ac 100644
--- a/src/main/java/com/android/tools/r8/ir/code/MoveException.java
+++ b/src/main/java/com/android/tools/r8/ir/code/MoveException.java
@@ -62,6 +62,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
if (!other.isMoveException()) {
return false;
diff --git a/src/main/java/com/android/tools/r8/ir/code/NewArrayEmpty.java b/src/main/java/com/android/tools/r8/ir/code/NewArrayEmpty.java
index 2dd948d..af8c834 100644
--- a/src/main/java/com/android/tools/r8/ir/code/NewArrayEmpty.java
+++ b/src/main/java/com/android/tools/r8/ir/code/NewArrayEmpty.java
@@ -120,6 +120,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
return other.isNewArrayEmpty() && other.asNewArrayEmpty().type == type;
}
diff --git a/src/main/java/com/android/tools/r8/ir/code/NewArrayFilled.java b/src/main/java/com/android/tools/r8/ir/code/NewArrayFilled.java
index a7c393e..11dce59 100644
--- a/src/main/java/com/android/tools/r8/ir/code/NewArrayFilled.java
+++ b/src/main/java/com/android/tools/r8/ir/code/NewArrayFilled.java
@@ -98,6 +98,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
return other.isNewArrayFilled() && type == other.asNewArrayFilled().type;
}
@@ -159,6 +160,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean instructionInstanceCanThrow(
AppView<?> appView,
ProgramMethod context,
diff --git a/src/main/java/com/android/tools/r8/ir/code/NewInstance.java b/src/main/java/com/android/tools/r8/ir/code/NewInstance.java
index f86e17c..f946940 100644
--- a/src/main/java/com/android/tools/r8/ir/code/NewInstance.java
+++ b/src/main/java/com/android/tools/r8/ir/code/NewInstance.java
@@ -81,6 +81,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
return other.isNewInstance() && other.asNewInstance().clazz == clazz;
}
@@ -155,6 +156,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean instructionMayHaveSideEffects(
AppView<?> appView,
ProgramMethod context,
@@ -212,11 +214,13 @@
allowSpilling = false;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isSpillingAllowed() {
return allowSpilling;
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean instructionMayTriggerMethodInvocation(AppView<?> appView, ProgramMethod context) {
if (appView.enableWholeProgramOptimizations()) {
// In R8, check if the class initialization of the holder or any of its ancestor types may
@@ -230,6 +234,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean verifyTypes(
AppView<?> appView, ProgramMethod context, VerifyTypesHelper verifyTypesHelper) {
TypeElement type = getOutType();
diff --git a/src/main/java/com/android/tools/r8/ir/code/NewUnboxedEnumInstance.java b/src/main/java/com/android/tools/r8/ir/code/NewUnboxedEnumInstance.java
index d42756d..cafceff 100644
--- a/src/main/java/com/android/tools/r8/ir/code/NewUnboxedEnumInstance.java
+++ b/src/main/java/com/android/tools/r8/ir/code/NewUnboxedEnumInstance.java
@@ -84,6 +84,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
return other.isNewUnboxedEnumInstance() && other.asNewUnboxedEnumInstance().clazz == clazz;
}
@@ -155,6 +156,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean verifyTypes(
AppView<?> appView, ProgramMethod context, VerifyTypesHelper verifyTypesHelper) {
TypeElement type = getOutType();
diff --git a/src/main/java/com/android/tools/r8/ir/code/Phi.java b/src/main/java/com/android/tools/r8/ir/code/Phi.java
index f332682..a20b6ec 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Phi.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Phi.java
@@ -258,6 +258,7 @@
return removeTrivialPhi(null, null);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean removeTrivialPhi(IRBuilder builder, Set<Value> affectedValues) {
Value same = null;
for (Value op : operands) {
diff --git a/src/main/java/com/android/tools/r8/ir/code/Position.java b/src/main/java/com/android/tools/r8/ir/code/Position.java
index c7829a5..187fe6a 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Position.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Position.java
@@ -128,10 +128,12 @@
.withBool(Position::isD8R8Synthesized);
}
+ @SuppressWarnings("ReferenceEquality")
public static Position syntheticNone() {
return SyntheticPosition.NO_POSITION_SYNTHETIC;
}
+ @SuppressWarnings("ReferenceEquality")
public static Position getPositionForInlining(
AppView<?> appView, InvokeMethod invoke, ProgramMethod context) {
Position position = invoke.getPosition();
@@ -157,6 +159,7 @@
return line == -1;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isSyntheticNone() {
return this == syntheticNone();
}
@@ -206,6 +209,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean hasMethodInChain(DexMethod method) {
return hasPositionMatching(position -> position.getMethod() == method);
}
@@ -219,6 +223,7 @@
.build();
}
+ @SuppressWarnings("ReferenceEquality")
public Position replacePosition(Position originalPosition, Position newPosition) {
if (this == originalPosition) {
return newPosition;
diff --git a/src/main/java/com/android/tools/r8/ir/code/StaticGet.java b/src/main/java/com/android/tools/r8/ir/code/StaticGet.java
index ebf27a2..46b9cc2 100644
--- a/src/main/java/com/android/tools/r8/ir/code/StaticGet.java
+++ b/src/main/java/com/android/tools/r8/ir/code/StaticGet.java
@@ -168,6 +168,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
if (!other.isStaticGet()) {
return false;
@@ -244,11 +245,13 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean outTypeKnownToBeBoolean(Set<Phi> seen) {
return getField().type.isBooleanType();
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean instructionMayTriggerMethodInvocation(AppView<?> appView, ProgramMethod context) {
DexType holder = getField().holder;
if (appView.enableWholeProgramOptimizations()) {
diff --git a/src/main/java/com/android/tools/r8/ir/code/StaticPut.java b/src/main/java/com/android/tools/r8/ir/code/StaticPut.java
index 3fcbe63..b201864 100644
--- a/src/main/java/com/android/tools/r8/ir/code/StaticPut.java
+++ b/src/main/java/com/android/tools/r8/ir/code/StaticPut.java
@@ -184,6 +184,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean identicalNonValueNonPositionParts(Instruction other) {
if (!other.isStaticPut()) {
return false;
@@ -244,6 +245,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean definitelyTriggersClassInitialization(
DexType clazz,
ProgramMethod context,
@@ -255,6 +257,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean instructionMayTriggerMethodInvocation(AppView<?> appView, ProgramMethod context) {
DexType holder = getField().holder;
if (appView.enableWholeProgramOptimizations()) {
diff --git a/src/main/java/com/android/tools/r8/ir/code/Throw.java b/src/main/java/com/android/tools/r8/ir/code/Throw.java
index 86b9f0e..e873dd8 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Throw.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Throw.java
@@ -84,6 +84,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void buildCf(CfBuilder builder) {
builder.add(new CfThrow(), this);
}
@@ -94,6 +95,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean throwsNpeIfValueIsNull(Value value, AppView<?> appView, ProgramMethod context) {
if (exception() == value) {
return true;
diff --git a/src/main/java/com/android/tools/r8/ir/code/Value.java b/src/main/java/com/android/tools/r8/ir/code/Value.java
index c40197a..c0253ac 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Value.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Value.java
@@ -54,6 +54,7 @@
public class Value implements Comparable<Value> {
+ @SuppressWarnings("ReferenceEquality")
public void constrainType(
ValueTypeConstraint constraint, DexMethod method, Origin origin, Reporter reporter) {
TypeElement constrainedType = constrainedType(constraint);
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
index b5b9532..9f48b43 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
@@ -288,6 +288,7 @@
assert !(isInstanceInitializer && thisInitializers == null);
}
+ @SuppressWarnings("ReferenceEquality")
private List<InvokeDirect> computeInitializers(Value value) {
List<InvokeDirect> initializers = new ArrayList<>();
for (Instruction user : value.uniqueUsers()) {
@@ -444,6 +445,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
private void rewriteIincPatterns() {
for (BasicBlock block : code.blocks) {
InstructionListIterator it = block.listIterator(code);
@@ -554,6 +556,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void updatePositionAndLocals(Instruction instruction) {
Position position = instruction.getPosition();
boolean didLocalsChange = localsChanged();
@@ -579,6 +582,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void updateLocals(CfLabel label) {
Int2ReferenceSortedMap<DebugLocalInfo> ending =
DebugLocalInfo.endingLocals(emittedLocals, pendingLocals);
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
index 4e95364..f4f6a36 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
@@ -92,6 +92,7 @@
return guards.isEmpty();
}
+ @SuppressWarnings("ReferenceEquality")
static TryHandlerList computeTryHandlers(
int instructionOffset,
List<CfTryCatch> tryCatchRanges,
@@ -447,6 +448,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void buildBlockTransfer(
IRBuilder builder, int predecessorOffset, int successorOffset, boolean isExceptional) {
if (predecessorOffset == IRBuilder.INITIAL_BLOCK_OFFSET
@@ -490,6 +492,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void buildInstruction(
IRBuilder builder, int instructionIndex, boolean firstBlockInstruction) {
if (isExceptionalExitForMethodSynchronization(instructionIndex)) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
index 89ab593..300998f 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java
@@ -436,6 +436,7 @@
return current.exit().asGoto().getTarget() != nextBlock;
}
+ @SuppressWarnings("ReferenceEquality")
// Eliminates unneeded debug positions.
//
// After this pass all remaining debug positions mark places where we must ensure a materializing
@@ -1002,6 +1003,7 @@
return tries;
}
+ @SuppressWarnings("ReferenceEquality")
private TryHandler[] getDexTryHandlers(Map<Integer, CatchHandlers<BasicBlock>> catchHandlers) {
TryHandler[] handlers = new TryHandler[catchHandlers.size()];
for (int j = 0; j < catchHandlers.size(); j++) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
index 229fcfc..2edb76d 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
@@ -217,6 +217,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private void updateCurrentCatchHandlers(int instructionIndex, DexItemFactory factory) {
Try tryRange = getTryForOffset(instructionOffset(instructionIndex));
if (tryRange == currentTryRange) {
@@ -423,6 +424,7 @@
return new CatchHandlers<>(handlerGuards, handlerOffsets);
}
+ @SuppressWarnings("ReferenceEquality")
private void forEachTryRange(
Try tryRange, DexItemFactory factory, BiConsumer<DexType, Integer> fn) {
TryHandler handler = code.handlers[tryRange.handlerIndex];
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/ExtraConstantIntParameter.java b/src/main/java/com/android/tools/r8/ir/conversion/ExtraConstantIntParameter.java
index ec2df95..7803f4e 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/ExtraConstantIntParameter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/ExtraConstantIntParameter.java
@@ -24,6 +24,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public TypeElement getTypeElement(AppView<?> appView, DexType argType) {
assert argType == appView.dexItemFactory().intType;
return TypeElement.getInt();
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
index 0221302..d1d7ab6 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java
@@ -536,6 +536,7 @@
currentBlock = block;
}
+ @SuppressWarnings("ReferenceEquality")
public void buildArgumentsWithRewrittenPrototypeChanges(
int register, DexEncodedMethod method, BiConsumer<Integer, DexType> writeCallback) {
ArgumentInfoCollection argumentsInfo = prototypeChanges.getArgumentInfoCollection();
@@ -983,6 +984,7 @@
addInstruction(ir);
}
+ @SuppressWarnings("ReferenceEquality")
void addThisArgument(int register) {
boolean receiverCouldBeNull = context != null && context != method;
Nullability nullability = receiverCouldBeNull ? maybeNull() : definitelyNotNull();
@@ -1031,12 +1033,14 @@
argumentValues.add(argument.outValue());
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean isValidFor(Value value, DebugLocalInfo local) {
// Invalid debug-info may cause attempt to read a local that is not actually alive.
// See b/37722432 and regression test {@code jasmin.InvalidDebugInfoTests::testInvalidInfoThrow}
return !value.isUninitializedLocal() && value.getLocalInfo() == local;
}
+ @SuppressWarnings("ReferenceEquality")
public void addDebugLocalStart(int register, DebugLocalInfo local) {
assert local != null;
if (!isDebugMode()) {
@@ -1307,6 +1311,7 @@
addMove(ValueTypeConstraint.fromValueType(valueType), dest, src);
}
+ @SuppressWarnings("ReferenceEquality")
public void addMove(ValueTypeConstraint constraint, int dest, int src) {
Value in = readRegister(src, constraint);
if (isDebugMode()) {
@@ -1510,6 +1515,7 @@
add(new RecordFieldValues(fields, out, arguments));
}
+ @SuppressWarnings("ReferenceEquality")
private boolean verifyRepresentablePolymorphicInvoke(InvokeType type, DexItem item) {
if (type != InvokeType.POLYMORPHIC) {
return true;
@@ -2113,6 +2119,7 @@
// Value abstraction methods.
+ @SuppressWarnings("ReferenceEquality")
public Value readRegister(int register, ValueTypeConstraint constraint) {
DebugLocalInfo local = getIncomingLocal(register);
Value value =
@@ -2254,6 +2261,7 @@
return null;
}
+ @SuppressWarnings("ReferenceEquality")
private Value getUninitializedDebugLocalValue(int register, ValueTypeConstraint typeConstraint) {
if (appView.options().invalidDebugInfoStrict) {
throw new InvalidDebugInfoException(
@@ -2330,6 +2338,7 @@
return value;
}
+ @SuppressWarnings("ReferenceEquality")
public Value writeRegister(int register, TypeElement typeLattice, ThrowingInfo throwing) {
DebugLocalInfo incomingLocal = getIncomingLocal(register);
DebugLocalInfo outgoingLocal = getOutgoingLocal(register);
@@ -2415,6 +2424,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private void attachLocalValues(Instruction ir) {
if (!isDebugMode()) {
assert previousLocalValue == null;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
index 3e89f7e..cd1dbbf 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java
@@ -250,6 +250,7 @@
unusedArguments);
}
+ @SuppressWarnings("ReferenceEquality")
private void rewritePartialDefault(
IRCode code,
ProgramMethod method,
@@ -1275,6 +1276,7 @@
return TypeElement.getNull();
}
+ @SuppressWarnings("ReferenceEquality")
// If the given invoke is on the form "invoke-direct A.<init>, v0, ..." and the definition of
// value v0 is "new-instance v0, B", where B is a subtype of A (see the Art800 and B116282409
// tests), then fail with a compilation error if A has previously been merged into B.
@@ -1368,6 +1370,7 @@
this.affectedPhis = affectedPhis;
}
+ @SuppressWarnings("ReferenceEquality")
Instruction replaceInstructionIfTypeChanged(
DexType type,
BiFunction<DexType, Value, Instruction> constructor,
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriterUtils.java b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriterUtils.java
index b82af15..013bfde 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriterUtils.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriterUtils.java
@@ -77,6 +77,7 @@
callSite, ignored -> rewriteCallSiteInternal(callSite, context));
}
+ @SuppressWarnings("ReferenceEquality")
private DexCallSite rewriteCallSiteInternal(DexCallSite callSite, ProgramMethod context) {
DexItemFactory dexItemFactory = definitions.dexItemFactory();
DexProto newMethodProto = rewriteProto(callSite.methodProto);
@@ -117,6 +118,7 @@
.getName();
}
+ @SuppressWarnings("ReferenceEquality")
public DexMethodHandle rewriteDexMethodHandle(
DexMethodHandle methodHandle, MethodHandleUse use, ProgramMethod context) {
if (methodHandle.isMethodHandle()) {
@@ -181,6 +183,7 @@
return methodHandle;
}
+ @SuppressWarnings("ReferenceEquality")
public List<DexValue> rewriteBootstrapArguments(
List<DexValue> bootstrapArgs, MethodHandleUse use, ProgramMethod context) {
List<DexValue> newBootstrapArgs = null;
@@ -201,12 +204,14 @@
return changed ? newBootstrapArgs : bootstrapArgs;
}
+ @SuppressWarnings("ReferenceEquality")
private DexValueMethodType rewriteDexMethodType(DexValueMethodType type) {
DexProto oldProto = type.value;
DexProto newProto = rewriteProto(oldProto);
return newProto != oldProto ? new DexValueMethodType(newProto) : type;
}
+ @SuppressWarnings("ReferenceEquality")
private DexValue rewriteBootstrapArgument(
DexValue value, MethodHandleUse use, ProgramMethod context) {
switch (value.getValueKind()) {
@@ -230,6 +235,7 @@
proto, type -> graphLens.lookupType(type, codeLens), protoFixupCache);
}
+ @SuppressWarnings("ReferenceEquality")
private DexValueMethodHandle rewriteDexValueMethodHandle(
DexValueMethodHandle methodHandle, MethodHandleUse use, ProgramMethod context) {
DexMethodHandle oldHandle = methodHandle.value;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/LibraryDesugaredChecker.java b/src/main/java/com/android/tools/r8/ir/conversion/LibraryDesugaredChecker.java
index fff6884..d1528b8 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/LibraryDesugaredChecker.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/LibraryDesugaredChecker.java
@@ -97,6 +97,7 @@
registerField(field.getReference());
}
+ @SuppressWarnings("ReferenceEquality")
private void registerMethod(ProgramMethod method) {
registerMethod(method.getReference());
for (DexAnnotation annotation : method.getDefinition().annotations().annotations) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java
index 5496a1b..bc66527 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/PrimaryR8IRConverter.java
@@ -318,6 +318,7 @@
appView.setGraphLens(rewrittenMemberRebindingLens);
}
+ @SuppressWarnings("ReferenceEquality")
private static void finalizeLirMethodToOutputFormat(
ProgramMethod method,
DeadCodeRemover deadCodeRemover,
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchConverter.java
index 489f0a6..5d7faef 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/StringSwitchConverter.java
@@ -187,6 +187,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean isDefinedByStringHashCode(Value value, DexItemFactory dexItemFactory) {
Value root = value.getAliasedValue();
if (root.isPhi()) {
@@ -408,6 +409,7 @@
return toBeExtended;
}
+ @SuppressWarnings("ReferenceEquality")
private StringToIdMapping extendWithPredecessor(
StringToIdMapping toBeExtended, BasicBlock block) {
boolean mayExtendWithPredecessor = true;
@@ -528,6 +530,7 @@
return addMappingsForStringsWithHash(block, hash, extension, Sets.newIdentityHashSet());
}
+ @SuppressWarnings("ReferenceEquality")
private boolean addMappingsForStringsWithHash(
BasicBlock block,
int hash,
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java b/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
index 8dfef13..925f84c 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/TypeConstraintResolver.java
@@ -239,6 +239,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
// Link two values as having the same type.
private void link(Value canonical1, Value canonical2) {
if (canonical1 == canonical2) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/callgraph/CallSiteInformation.java b/src/main/java/com/android/tools/r8/ir/conversion/callgraph/CallSiteInformation.java
index e412ed7..ca4492f 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/callgraph/CallSiteInformation.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/callgraph/CallSiteInformation.java
@@ -134,6 +134,7 @@
* library method this always returns false.
*/
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean hasSingleCallSite(ProgramMethod method, ProgramMethod context) {
return singleCallerMethods.get(method.getReference()) == context.getReference();
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/callgraph/InvokeExtractor.java b/src/main/java/com/android/tools/r8/ir/conversion/callgraph/InvokeExtractor.java
index 38bc387..21e446b 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/callgraph/InvokeExtractor.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/callgraph/InvokeExtractor.java
@@ -92,6 +92,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
protected void processSingleTarget(ProgramMethod singleTarget, ProgramMethod context) {
assert !context.getDefinition().isBridge()
|| singleTarget.getDefinition() != context.getDefinition();
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java
index bc4ea2d..985a626 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/ArrayConstructionSimplifier.java
@@ -200,6 +200,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private FilledArrayConversionInfo computeConversionInfo(
IRCode code, FilledArrayCandidate candidate, LinearFlowInstructionListIterator it) {
NewArrayEmpty newArrayEmpty = candidate.newArrayEmpty;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java
index 024fc1c..306cdeb 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/BinopRewriter.java
@@ -427,6 +427,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
private ConstNumber getConstNumber(Value val) {
ConstNumber constNumber = getConstNumberIfConstant(val);
if (constNumber != null) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/BranchSimplifier.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/BranchSimplifier.java
index c5a5743..c6b6a35 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/BranchSimplifier.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/BranchSimplifier.java
@@ -284,6 +284,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean simplifyNonIfZeroTest(IRCode code, BasicBlock block, If theIf) {
Value lhs = theIf.lhs();
Value lhsRoot = lhs.getAliasedValue();
@@ -532,6 +533,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isBlockSupportedBySimplifyKnownBooleanCondition(BasicBlock b) {
if (b.isTrivialGoto()) {
return true;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/FilledNewArrayRewriter.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/FilledNewArrayRewriter.java
index 4297b03..7da91d4 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/FilledNewArrayRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/FilledNewArrayRewriter.java
@@ -113,6 +113,7 @@
return CodeRewriterResult.HAS_CHANGED;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean canUseNewArrayFilled(NewArrayFilled newArrayFilled) {
if (!options.isGeneratingDex()) {
return false;
@@ -167,6 +168,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean canStoreElementInNewArrayFilled(TypeElement valueType, DexType elementType) {
if (elementType == dexItemFactory.objectType) {
return true;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java
index 566996d..a1722af 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/SplitBranch.java
@@ -145,6 +145,7 @@
return newTargets;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isNumberAgainstConstNumberIf(If theIf) {
if (!(theIf.lhs().getType().isInt() || theIf.lhs().getType().isFloat())) {
return false;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/ThrowCatchOptimizer.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/ThrowCatchOptimizer.java
index aa44257..23ec985 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/ThrowCatchOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/ThrowCatchOptimizer.java
@@ -65,6 +65,7 @@
return CodeRewriterResult.hasChanged(hasChanged);
}
+ @SuppressWarnings("ReferenceEquality")
// Rewrite 'throw new NullPointerException()' to 'throw null'.
private boolean rewriteThrowNullPointerException(IRCode code) {
boolean hasChanged = false;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialPhiSimplifier.java b/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialPhiSimplifier.java
index 7fa9b79..27a3cba 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialPhiSimplifier.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/passes/TrivialPhiSimplifier.java
@@ -30,6 +30,7 @@
assert !unusedArgument.outValue().hasPhiUsers();
}
+ @SuppressWarnings("ReferenceEquality")
public static void ensureDirectStringNewToInit(AppView<?> appView, IRCode code) {
boolean changed = false;
DexItemFactory dexItemFactory = appView.dexItemFactory();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/BufferCovariantReturnTypeRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/BufferCovariantReturnTypeRewriter.java
index 3f80a47..b2d4efa 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/BufferCovariantReturnTypeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/BufferCovariantReturnTypeRewriter.java
@@ -61,6 +61,7 @@
.build();
}
+ @SuppressWarnings("ReferenceEquality")
private DexMethod matchingBufferCovariantMethod(DexMethod invokedMethod) {
if (invokedMethod.getArity() > 1
|| (invokedMethod.getArity() == 1 && !invokedMethod.getParameter(0).isIntType())
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java b/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
index 3afabd5..76a4b02 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/CovariantReturnTypeAnnotationTransformer.java
@@ -227,6 +227,7 @@
return covariantReturnTypes;
}
+ @SuppressWarnings("ReferenceEquality")
private void getCovariantReturnTypesFromAnnotation(
DexClass clazz,
DexEncodedMethod method,
@@ -290,6 +291,7 @@
return isCovariantReturnTypeAnnotation(annotation.type, factory);
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isCovariantReturnTypeAnnotation(DexType type, DexItemFactory factory) {
return type == factory.annotationCovariantReturnType
|| type == factory.annotationCovariantReturnTypes;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/InvokeToPrivateRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/InvokeToPrivateRewriter.java
index ddc3f35..79041fe 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/InvokeToPrivateRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/InvokeToPrivateRewriter.java
@@ -52,6 +52,7 @@
.build();
}
+ @SuppressWarnings("ReferenceEquality")
private DexEncodedMethod privateMethodInvokedOnSelf(CfInvoke invoke, ProgramMethod context) {
DexMethod method = invoke.getMethod();
if (method.getHolderType() != context.getHolderType()) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
index 8a9aa86..dc59f92 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClass.java
@@ -133,6 +133,7 @@
return type;
}
+ @SuppressWarnings("ReferenceEquality")
public void setClass(DexProgramClass clazz) {
assert this.clazz == null;
assert clazz != null;
@@ -367,6 +368,7 @@
&& !desugaring.isDirectTargetedLambdaImplementationMethod(descriptor.implHandle);
}
+ @SuppressWarnings("ReferenceEquality")
private Target createLambdaImplMethodTarget(ProgramMethod accessedFrom) {
DexMethodHandle implHandle = descriptor.implHandle;
assert implHandle != null;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java
index 7ccba56..d5673fd 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaConstructorSourceCode.java
@@ -21,6 +21,7 @@
final class LambdaConstructorSourceCode {
+ @SuppressWarnings("ReferenceEquality")
public static CfCode build(LambdaClass lambda) {
int maxStack = 1;
ImmutableList<CfTryCatch> tryCatchRanges = ImmutableList.of();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java
index bbd4fe0..9f4c5d0 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaDescriptor.java
@@ -179,6 +179,7 @@
return encodedMethod.isPublicized() && isInstanceMethod(encodedMethod);
}
+ @SuppressWarnings("ReferenceEquality")
public final boolean verifyTargetFoundInClass(DexType type) {
return targetHolder == type;
}
@@ -299,6 +300,7 @@
* Matches call site for lambda metafactory invocation pattern and returns extracted match
* information, or MATCH_FAILED if match failed.
*/
+ @SuppressWarnings("ReferenceEquality")
static LambdaDescriptor infer(
DexCallSite callSite,
AppView<?> appView,
@@ -460,11 +462,11 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
// Checks if the types are the same OR both types are reference types and
// `subType` is derived from `b`. Note that in the latter case we only check if
// both types are class types, for the reasons mentioned in isSameOrAdaptableTo(...).
- static boolean isSameOrDerived(
- DexItemFactory factory, DexType subType, DexType superType) {
+ static boolean isSameOrDerived(DexItemFactory factory, DexType subType, DexType superType) {
if (subType == superType || (subType.isClassType() && superType.isClassType())) {
return true;
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java
index 9be92a4..e581cf6 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaMainMethodSourceCode.java
@@ -87,6 +87,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
// Checks if the types are the same OR type `a` is adaptable to type `b`.
private static boolean isSameOrAdaptableTo(DexType a, DexType b, DexItemFactory factory) {
if (a == b) {
@@ -170,6 +171,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public static CfCode build(
LambdaClass lambda, DexMethod mainMethod, DesugarInvoke desugarInvoke) {
DexItemFactory factory = lambda.appView.dexItemFactory();
@@ -363,6 +365,7 @@
return adjustType(enforcedType, expectedType, false, instructions, factory);
}
+ @SuppressWarnings("ReferenceEquality")
private static void enforceParameterType(
DexType paramType,
DexType enforcedType,
@@ -377,6 +380,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private static int adjustType(
DexType fromType,
DexType toType,
@@ -398,6 +402,7 @@
ValueType.fromDexType(toType).requiredRegisters()));
}
+ @SuppressWarnings("ReferenceEquality")
private static void internalAdjustType(
DexType fromType,
DexType toType,
@@ -475,6 +480,7 @@
+ fromType.toSourceString() + " to " + toType);
}
+ @SuppressWarnings("ReferenceEquality")
private static void addPrimitiveWideningConversion(
DexType fromType, DexType toType, Builder<CfInstruction> instructions) {
assert fromType.isPrimitiveType() && toType.isPrimitiveType();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/TypeRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/TypeRewriter.java
index a529491..d075274 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/TypeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/TypeRewriter.java
@@ -79,6 +79,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void rewriteType(DexType type, DexType rewrittenType) {
rewriteType.compute(
type,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
index 63a6e08..7a72b2d 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
@@ -88,6 +88,7 @@
// Considered final but is set after due to circularity in allocation.
private DexProgramClass clazz = null;
+ @SuppressWarnings("ReferenceEquality")
public ConstantDynamicClass(
SyntheticProgramClassBuilder builder,
AppView<?> appView,
@@ -404,6 +405,7 @@
assert finalMethod.getDefinition().isPublicMethod();
}
+ @SuppressWarnings("ReferenceEquality")
private DexType mapLookupTypeToObject(DexType type) {
return type == appView.dexItemFactory().lookupType ? appView.dexItemFactory().objectType : type;
}
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicInstructionDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicInstructionDesugaring.java
index 0ee4ce0..5021e7b 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicInstructionDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicInstructionDesugaring.java
@@ -49,6 +49,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public DesugarDescription compute(CfInstruction instruction, ProgramMethod context) {
if (!instruction.isConstDynamic()) {
return DesugarDescription.nothing();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPICallbackSynthesizer.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPICallbackSynthesizer.java
index b14bc1d..25c157a 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPICallbackSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryAPICallbackSynthesizer.java
@@ -149,6 +149,7 @@
return overridesNonFinalLibraryMethod(method);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean overridesNonFinalLibraryMethod(ProgramMethod method) {
// We look up everywhere to see if there is a supertype/interface implementing the method...
DexProgramClass holder = method.getHolder();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryConversionCfProvider.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryConversionCfProvider.java
index 5460d4f..b1a71cf 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryConversionCfProvider.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryConversionCfProvider.java
@@ -383,6 +383,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private CfCode computeParameterConversionCfCode(
DexType holder, DexMethod invokedMethod, DexMethod[] parameterConversions) {
ArrayList<CfInstruction> cfInstructions = new ArrayList<>();
@@ -581,6 +582,7 @@
method.getHolderType());
}
+ @SuppressWarnings("ReferenceEquality")
private DexMethod convertedMethod(
DexMethod method,
boolean parameterDestIsVivified,
@@ -619,6 +621,7 @@
return convertedAPI;
}
+ @SuppressWarnings("ReferenceEquality")
private static DexType invalidType(
DexMethod invokedMethod,
DexMethod returnConversion,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryWrapperSynthesizer.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryWrapperSynthesizer.java
index 77f5885..b19056a 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryWrapperSynthesizer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/apiconversion/DesugaredLibraryWrapperSynthesizer.java
@@ -168,6 +168,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
private DexMethod ensureApiGenericConversion(
DexMethod conversion, DesugaredLibraryClasspathWrapperSynthesizeEventConsumer eventConsumer) {
if (appView.appInfoForDesugaring().resolveMethod(conversion, false).isSingleResolution()) {
@@ -192,6 +193,7 @@
return conversion;
}
+ @SuppressWarnings("ReferenceEquality")
public DexMethod ensureConversionMethod(
DexType type,
boolean destIsVivified,
@@ -228,6 +230,7 @@
return conversion;
}
+ @SuppressWarnings("ReferenceEquality")
private DexMethod ensureArrayConversionMethod(
DexType type,
DexType srcType,
@@ -247,6 +250,7 @@
srcType, destType, eventConsumer, context, contextSupplier, conversion);
}
+ @SuppressWarnings("ReferenceEquality")
private DexMethod ensureArrayConversionMethodFromExistingBaseConversion(
DexType type,
DexType srcType,
@@ -297,6 +301,7 @@
return arrayConversion.getReference();
}
+ @SuppressWarnings("ReferenceEquality")
public DexMethod getExistingProgramConversionMethod(
DexType type,
boolean destIsVivified,
@@ -331,6 +336,7 @@
return conversion;
}
+ @SuppressWarnings("ReferenceEquality")
private DexMethod getCustomConversion(DexType type, DexType srcType, DexType destType) {
// ConversionType holds the methods "rewrittenType convert(type)" and the other way around.
// But everything is going to be rewritten, so we need to use vivifiedType and type".
@@ -587,6 +593,7 @@
wrapperField, reverseWrapperField, context, subwrapperConvertList)));
}
+ @SuppressWarnings("ReferenceEquality")
private DexMethod getConversion(DexProgramClass subwrapperWrapper) {
Iterator<DexEncodedMethod> iterator = subwrapperWrapper.directMethods().iterator();
DexEncodedMethod method;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/disabledesugarer/DesugaredLibraryDisableDesugarer.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/disabledesugarer/DesugaredLibraryDisableDesugarer.java
index cf713d7..a602e52 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/disabledesugarer/DesugaredLibraryDisableDesugarer.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/disabledesugarer/DesugaredLibraryDisableDesugarer.java
@@ -90,6 +90,7 @@
return rewrittenField != null ? fieldInstruction.createWithField(rewrittenField) : null;
}
+ @SuppressWarnings("ReferenceEquality")
private CfInstruction rewriteTypeInstruction(CfTypeInstruction typeInstruction) {
DexType rewrittenType = helper.rewriteType(typeInstruction.getType());
return rewrittenType != typeInstruction.getType()
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/disabledesugarer/DesugaredLibraryDisableDesugarerHelper.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/disabledesugarer/DesugaredLibraryDisableDesugarerHelper.java
index f4526ae..2bf5df0 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/disabledesugarer/DesugaredLibraryDisableDesugarerHelper.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/disabledesugarer/DesugaredLibraryDisableDesugarerHelper.java
@@ -36,6 +36,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
DexMethod rewriteMethod(DexMethod method, boolean isInterface, ProgramMethod context) {
DexType newHolder = rewriteType(method.getHolderType());
DexMethod rewrittenMethod = methodWithVivifiedTypeInSignature(method, newHolder, appView);
@@ -48,6 +49,7 @@
return rewrittenMethod;
}
+ @SuppressWarnings("ReferenceEquality")
DexField rewriteField(DexField field, ProgramDefinition context) {
if (isRewrittenType(field.getHolderType())) {
// This case never happens within the supported set of classes. We can support it if required.
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java
index ad9735c..269be28 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/humanspecification/MultiAPILevelHumanDesugaredLibrarySpecificationFlagDeduplicator.java
@@ -33,6 +33,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private static void deduplicateFlags(
MultiAPILevelHumanDesugaredLibrarySpecification specification,
Reporter reporter,
@@ -148,6 +149,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
private static void deduplicateAmendLibraryMemberFlags(
HumanRewritingFlags flags,
HumanRewritingFlags otherFlags,
@@ -211,6 +213,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
private static <T extends DexItem> void deduplicateFlags(
Map<T, DexType> flags,
Map<T, DexType> otherFlags,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClasses.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClasses.java
index ea96ecc..12970fc 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClasses.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClasses.java
@@ -146,11 +146,13 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
void addSupportedMethod(DexEncodedMethod method) {
assert method.getHolderType() == clazz.type;
supportedMethods.put(method.getReference(), method);
}
+ @SuppressWarnings("ReferenceEquality")
void addSupportedField(DexEncodedField field) {
assert field.getHolderType() == clazz.type;
supportedFields.put(field.getReference(), field);
@@ -162,6 +164,7 @@
classAnnotation = annotation;
}
+ @SuppressWarnings("ReferenceEquality")
void annotateMethod(DexMethod method, MethodAnnotation annotation) {
assert method.getHolderType() == clazz.type;
MethodAnnotation prev =
@@ -169,6 +172,7 @@
methodAnnotations.put(method, annotation.combine(prev));
}
+ @SuppressWarnings("ReferenceEquality")
void annotateField(DexField field, FieldAnnotation annotation) {
assert field.getHolderType() == clazz.type;
FieldAnnotation prev = fieldAnnotations.getOrDefault(field, FieldAnnotation.getDefault());
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java
index 90203a2..f79e61a 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/lint/SupportedClassesGenerator.java
@@ -111,8 +111,8 @@
}
private <EM extends DexEncodedMember<EM, M>, M extends DexMember<EM, M>>
- boolean analyzeMissingMembers(
- Iterable<EM> maxClassMembers, Collection<EM> referenceMembers, List<M> missingMembers) {
+ @SuppressWarnings("ReferenceEquality") boolean analyzeMissingMembers(
+ Iterable<EM> maxClassMembers, Collection<EM> referenceMembers, List<M> missingMembers) {
boolean fullySupported = true;
for (EM member : maxClassMembers) {
if (!(member.getAccessFlags().isPublic() || member.getAccessFlags().isProtected())) {
@@ -413,6 +413,7 @@
return dexEncodedMethod;
}
+ @SuppressWarnings("ReferenceEquality")
private void addBackports(DexProgramClass clazz, List<DexMethod> backports) {
for (DexMethod backport : backports) {
if (clazz.type == backport.getHolderType()) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/CustomConversionDescriptor.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/CustomConversionDescriptor.java
index 6579f8f..9e424b8 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/CustomConversionDescriptor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/CustomConversionDescriptor.java
@@ -11,6 +11,7 @@
private final DexMethod to;
private final DexMethod from;
+ @SuppressWarnings("ReferenceEquality")
public CustomConversionDescriptor(DexMethod to, DexMethod from) {
this.to = to;
this.from = from;
@@ -33,6 +34,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object o) {
if (this == o) {
return true;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/DerivedMethod.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/DerivedMethod.java
index 714cef4..747cd8f 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/DerivedMethod.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/DerivedMethod.java
@@ -68,6 +68,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object o) {
if (this == o) {
return true;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/EmulatedInterfaceDescriptor.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/EmulatedInterfaceDescriptor.java
index fee2962..80ca5b3 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/EmulatedInterfaceDescriptor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/EmulatedInterfaceDescriptor.java
@@ -41,6 +41,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object o) {
if (this == o) {
return true;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineRewritingFlags.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineRewritingFlags.java
index a30322f..d27ba9b 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineRewritingFlags.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/machinespecification/MachineRewritingFlags.java
@@ -177,6 +177,7 @@
return dontRetarget;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isCustomConversionRewrittenType(DexType type) {
return Iterables.any(
customConversions.values(),
@@ -209,6 +210,7 @@
|| !staticFieldRetarget.isEmpty();
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isEmulatedInterfaceRewrittenType(DexType type) {
return Iterables.any(
emulatedInterfaces.values(), descriptor -> descriptor.getRewrittenType() == type);
@@ -279,6 +281,7 @@
return builder.build();
}
+ @SuppressWarnings("ReferenceEquality")
private EmulatedInterfaceDescriptor descriptorWithPostPrefix(
EmulatedInterfaceDescriptor descriptor,
DexItemFactory factory,
@@ -372,6 +375,7 @@
private final ImmutableMap.Builder<DexField, FieldAccessFlags> amendLibraryField =
ImmutableMap.builder();
+ @SuppressWarnings("ReferenceEquality")
public void rewriteType(DexType src, DexType target) {
assert src != null;
assert target != null;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterPostProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterPostProcessor.java
index be8dd14..5e3b847 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterPostProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterPostProcessor.java
@@ -52,6 +52,7 @@
ensureInterfacesAndForwardingMethodsSynthesized(programClasses, eventConsumer);
}
+ @SuppressWarnings("ReferenceEquality")
private void ensureInterfacesAndForwardingMethodsSynthesized(
Collection<DexProgramClass> programClasses,
DesugaredLibraryRetargeterPostProcessingEventConsumer eventConsumer) {
@@ -83,6 +84,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private boolean inherit(
DexLibraryClass clazz,
DexType typeToInherit,
@@ -142,6 +144,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private DexEncodedMethod createForwardingMethod(
DexMethod target, EmulatedDispatchMethodDescriptor descriptor, DexClass clazz) {
// NOTE: Never add a forwarding method to methods of classes unknown or coming from android.jar
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterSyntheticHelper.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterSyntheticHelper.java
index 52fa933..99b56db 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterSyntheticHelper.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/retargeter/DesugaredLibraryRetargeterSyntheticHelper.java
@@ -61,6 +61,7 @@
return method.getReference();
}
+ @SuppressWarnings("ReferenceEquality")
public DexMethod ensureRetargetMethod(
DexMethod retarget, DesugaredLibraryRetargeterInstructionEventConsumer eventConsumer) {
DexClass holderClass = appView.definitionFor(retarget.getHolderType());
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineEmulatedInterfaceConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineEmulatedInterfaceConverter.java
index 15c644b..6cb30a4 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineEmulatedInterfaceConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineEmulatedInterfaceConverter.java
@@ -130,6 +130,7 @@
return extraDispatchCases;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean implementsInterface(DexClass clazz, DexType interfaceType) {
WorkList<DexType> workList =
WorkList.newIdentityWorkList(Arrays.asList(clazz.interfaces.values));
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineWrapperConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineWrapperConverter.java
index e8c8073..feaccc2 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineWrapperConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/HumanToMachineWrapperConverter.java
@@ -176,7 +176,7 @@
}
// TODO(b/270398965): Replace LinkedList.
- @SuppressWarnings("JdkObsolete")
+ @SuppressWarnings({"JdkObsolete", "ReferenceEquality"})
private void fillDescriptors(
DexClass wrapperClass,
Set<DexMethod> excludedMethods,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LegacyToHumanSpecificationConverter.java b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LegacyToHumanSpecificationConverter.java
index 277285e..32994c4 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LegacyToHumanSpecificationConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/desugaredlibrary/specificationconversion/LegacyToHumanSpecificationConverter.java
@@ -279,6 +279,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
private List<DexClassAndMethod> findMethodsWithName(
DexString methodName,
DexClass clazz,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/invokespecial/InvokeSpecialToSelfDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/invokespecial/InvokeSpecialToSelfDesugaring.java
index 9a8ba77..c946b68 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/invokespecial/InvokeSpecialToSelfDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/invokespecial/InvokeSpecialToSelfDesugaring.java
@@ -31,6 +31,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public DesugarDescription compute(CfInstruction instruction, ProgramMethod context) {
if (!instruction.isInvokeSpecial()) {
return DesugarDescription.nothing();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
index f69890a..2a423c2 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/ClassProcessor.java
@@ -229,6 +229,7 @@
return this == EMPTY;
}
+ @SuppressWarnings("ReferenceEquality")
boolean isTargetedByForwards(DexClassAndMethod method) {
return IterableUtils.any(
forwardedMethodTargets,
@@ -534,6 +535,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
// Computes the set of method signatures that may need forwarding methods on derived classes.
private SignaturesInfo computeInterfaceInfo(DexClass iface, SignaturesInfo interfaceInfo) {
assert iface.isInterface();
@@ -550,6 +552,7 @@
return interfaceInfo;
}
+ @SuppressWarnings("ReferenceEquality")
private SignaturesInfo computeEmulatedInterfaceInfo(
DexClass iface, SignaturesInfo interfaceInfo) {
assert iface.isInterface();
@@ -617,6 +620,7 @@
superInfo, additionalForwards.build(), signatureInfo.emulatedInterfaceInfo);
}
+ @SuppressWarnings("ReferenceEquality")
// All classes implementing an emulated interface and overriding a default method should now
// implement the interface and the emulated one for correct emulated dispatch.
// The class signature won't include the correct type parameters for the duplicated interfaces,
@@ -1027,6 +1031,7 @@
desugaringForwardingMethod.asProgramMethod(clazz.asProgramClass()), target);
}
+ @SuppressWarnings("ReferenceEquality")
// Topological order traversal and its helpers.
private DexClass definitionOrNull(DexType type, ReportingContext context) {
// No forwards at the top of the class hierarchy (assuming java.lang.Object is never amended).
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/DefaultMethodsHelper.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/DefaultMethodsHelper.java
index 717f235..20f3ab8 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/DefaultMethodsHelper.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/DefaultMethodsHelper.java
@@ -39,6 +39,7 @@
this.hidden = hidden;
}
+ @SuppressWarnings("ReferenceEquality")
// If there is just one live method having specified
// signature return it, otherwise return null.
DexMethod getSingleCandidate(DexMethod method) {
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/EmulatedInterfaceApplicationRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/EmulatedInterfaceApplicationRewriter.java
index d33fcec..8de8311 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/EmulatedInterfaceApplicationRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/EmulatedInterfaceApplicationRewriter.java
@@ -52,6 +52,7 @@
builder.replaceProgramClasses(newProgramClasses);
}
+ @SuppressWarnings("ReferenceEquality")
// The method transforms emulated interface such as they now have the rewritten type and
// implement the rewritten version of each emulated interface they implement.
private DexProgramClass rewriteEmulatedInterface(DexProgramClass emulatedInterface) {
@@ -94,6 +95,7 @@
return newEmulatedInterface;
}
+ @SuppressWarnings("ReferenceEquality")
private List<GenericSignature.ClassTypeSignature> getRewrittenInterfacesOfEmulatedInterface(
DexProgramClass emulatedInterface) {
List<GenericSignature.ClassTypeSignature> newInterfaces = new ArrayList<>();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
index 15e9f06..4912fe6 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriter.java
@@ -541,6 +541,7 @@
.build();
}
+ @SuppressWarnings("ReferenceEquality")
private DesugarDescription computeInvokeDirect(
DexClass clazz, CfInvoke invoke, ProgramMethod context) {
DexMethod invokedMethod = invoke.getMethod();
@@ -692,6 +693,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private DesugarDescription rewriteInvokeSuper(CfInvoke invoke, ProgramMethod context) {
DexMethod invokedMethod = invoke.getMethod();
DexClass clazz = appView.definitionFor(invokedMethod.holder, context);
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriterFixup.java b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriterFixup.java
index 1e4b4dc..e6f5b0b 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriterFixup.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/itf/InterfaceMethodRewriterFixup.java
@@ -36,6 +36,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private EnclosingMethodAttribute fixupEnclosingMethodAttribute(
EnclosingMethodAttribute enclosingMethodAttribute) {
DexMethod enclosingMethod = enclosingMethodAttribute.getEnclosingMethod();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/nest/AccessBridgeFactory.java b/src/main/java/com/android/tools/r8/ir/desugar/nest/AccessBridgeFactory.java
index b81ea84..0b7fc43 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/nest/AccessBridgeFactory.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/nest/AccessBridgeFactory.java
@@ -15,6 +15,7 @@
public class AccessBridgeFactory {
+ @SuppressWarnings("ReferenceEquality")
static ProgramMethod createFieldAccessorBridge(
DexMethod bridgeMethodReference, ProgramField field, boolean isGet) {
assert bridgeMethodReference.getHolderType() == field.getHolderType();
@@ -42,6 +43,7 @@
.build());
}
+ @SuppressWarnings("ReferenceEquality")
static ProgramMethod createInitializerAccessorBridge(
DexMethod bridgeMethodReference, ProgramMethod method, DexItemFactory dexItemFactory) {
assert bridgeMethodReference.getHolderType() == method.getHolderType();
@@ -64,6 +66,7 @@
.build());
}
+ @SuppressWarnings("ReferenceEquality")
static ProgramMethod createMethodAccessorBridge(
DexMethod bridgeMethodReference, ProgramMethod method, DexItemFactory dexItemFactory) {
assert bridgeMethodReference.getHolderType() == method.getHolderType();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
index 03304e5..54f5677 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/nest/NestBasedAccessDesugaring.java
@@ -115,6 +115,7 @@
private final DexMethod bridge;
private final T target;
+ @SuppressWarnings("ReferenceEquality")
public BridgeAndTarget(DexMethod bridge, T target) {
this.bridge = bridge;
this.target = target;
@@ -304,6 +305,7 @@
return member != null && needsDesugaring(member, context);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean needsDesugaring(DexClassAndMember<?, ?> member, DexClassAndMethod context) {
return member.getAccessFlags().isPrivate()
&& member.getHolderType() != context.getHolderType()
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordDesugaring.java
index c8a0668..9bc7654 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordDesugaring.java
@@ -108,6 +108,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void prepareInvokeDynamicOnRecord(
CfInvokeDynamic invokeDynamic,
ProgramAdditions programAdditions,
@@ -170,6 +171,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public DesugarDescription compute(CfInstruction instruction, ProgramMethod context) {
if (instruction.isInvokeDynamic()) {
if (needsDesugaring(instruction.asInvokeDynamic(), context)) {
@@ -226,6 +228,7 @@
.build();
}
+ @SuppressWarnings("ReferenceEquality")
private List<CfInstruction> desugarInvokeDynamicOnRecord(
CfInvokeDynamic invokeDynamic,
LocalStackAllocator localStackAllocator,
@@ -525,10 +528,12 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean refersToRecord(DexType type, DexItemFactory factory) {
return type == factory.recordType;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean needsDesugaring(DexMethod method, boolean isSuper) {
return rewriteMethod(method, isSuper) != method;
}
@@ -537,7 +542,7 @@
return isInvokeDynamicOnRecord(invokeDynamic, appView, context);
}
- @SuppressWarnings("ConstantConditions")
+ @SuppressWarnings({"ConstantConditions", "ReferenceEquality"})
private DexMethod rewriteMethod(DexMethod method, boolean isSuper) {
if (!(method == factory.recordMembers.equals
|| method == factory.recordMembers.hashCode
@@ -596,6 +601,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void postProcessingDesugaring(
Collection<DexProgramClass> programClasses,
CfPostProcessingDesugaringEventConsumer eventConsumer,
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriterHelper.java b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriterHelper.java
index 3eb87cb..50c6963 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriterHelper.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/records/RecordRewriterHelper.java
@@ -28,6 +28,7 @@
return isInvokeDynamicOnRecord(invokeDynamic.getCallSite(), appView, context);
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isInvokeDynamicOnRecord(
DexCallSite callSite, AppView<?> appView, ProgramMethod context) {
DexItemFactory factory = appView.dexItemFactory();
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/stringconcat/StringConcatInstructionDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/stringconcat/StringConcatInstructionDesugaring.java
index ac70a25..52ac56e 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/stringconcat/StringConcatInstructionDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/stringconcat/StringConcatInstructionDesugaring.java
@@ -68,6 +68,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public DesugarDescription compute(CfInstruction instruction, ProgramMethod context) {
if (instruction.isInvokeDynamic()) {
// We are interested in bootstrap methods StringConcatFactory::makeConcat
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/twr/TwrInstructionDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/twr/TwrInstructionDesugaring.java
index 2fbf5d3..9127af6 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/twr/TwrInstructionDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/twr/TwrInstructionDesugaring.java
@@ -161,12 +161,14 @@
&& matchesMethodOfThrowable(instruction.asInvoke().getMethod(), suppressed);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean matchesMethodOfThrowable(DexMethod invoked, DexMethod expected) {
return invoked.name == expected.name
&& invoked.proto == expected.proto
&& isSubtypeOfThrowable(invoked.holder);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isSubtypeOfThrowable(DexType type) {
while (type != null && type != dexItemFactory.objectType) {
if (type == dexItemFactory.throwableType) {
@@ -189,6 +191,7 @@
&& isTwrCloseResourceMethod(instruction.asInvoke().getMethod());
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isTwrCloseResourceMethod(DexMethod method) {
return method.name == dexItemFactory.twrCloseResourceMethodName
&& method.proto == dexItemFactory.twrCloseResourceMethodProto;
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/varhandle/VarHandleDesugaring.java b/src/main/java/com/android/tools/r8/ir/desugar/varhandle/VarHandleDesugaring.java
index a5f2b75..bb81445 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/varhandle/VarHandleDesugaring.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/varhandle/VarHandleDesugaring.java
@@ -68,6 +68,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void scan(
ProgramMethod programMethod, CfInstructionDesugaringEventConsumer eventConsumer) {
if (programMethod.getHolderType() == factory.varHandleType) {
@@ -103,6 +104,7 @@
return synthesizedClasses;
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean refersToVarHandle(DexType type, DexItemFactory factory) {
if (type == factory.desugarVarHandleType) {
// All references to java.lang.invoke.VarHandle is rewritten during application writing.
@@ -143,6 +145,7 @@
return refersToVarHandle(field.type, factory);
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean refersToMethodHandlesLookup(DexType type, DexItemFactory factory) {
if (type == factory.desugarMethodHandlesLookupType) {
// All references to java.lang.invoke.MethodHandles$Lookup is rewritten during application
@@ -183,7 +186,7 @@
return refersToMethodHandlesLookup(field.type, factory);
}
- @SuppressWarnings("InconsistentOverloads")
+ @SuppressWarnings({"InconsistentOverloads", "ReferenceEquality"})
public static void ensureMethodHandlesLookupClass(
AppView<?> appView,
VarHandleDesugaringEventConsumer eventConsumer,
@@ -214,7 +217,7 @@
ensureMethodHandlesLookupClass(appView, eventConsumer, ImmutableList.of(context));
}
- @SuppressWarnings("InconsistentOverloads")
+ @SuppressWarnings({"InconsistentOverloads", "ReferenceEquality"})
public static void ensureVarHandleClass(
AppView<?> appView,
VarHandleDesugaringEventConsumer eventConsumer,
@@ -240,6 +243,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
private void ensureVarHandleClass(
VarHandleDesugaringEventConsumer eventConsumer, ProgramDefinition context) {
if (context.getContextType() != factory.varHandleType) {
@@ -248,6 +252,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public DesugarDescription compute(CfInstruction instruction, ProgramMethod context) {
if (!instruction.isInvoke()) {
return DesugarDescription.nothing();
@@ -424,6 +429,7 @@
return isPrimitiveThatIsNotBoxed(type) || type.isVoidType() ? type : factory.objectType;
}
+ @SuppressWarnings("ReferenceEquality")
private Collection<CfInstruction> desugarSignaturePolymorphicMethod(
CfInvoke invoke,
int coordinates,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/AssertionErrorTwoArgsConstructorRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/AssertionErrorTwoArgsConstructorRewriter.java
index 1ba1bb4..d1201b5 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/AssertionErrorTwoArgsConstructorRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/AssertionErrorTwoArgsConstructorRewriter.java
@@ -42,6 +42,7 @@
this.dexItemFactory = appView.dexItemFactory();
}
+ @SuppressWarnings("ReferenceEquality")
public void rewrite(
IRCode code,
MethodProcessor methodProcessor,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/AssertionsRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/AssertionsRewriter.java
index e32a6f5..2db87df 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/AssertionsRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/AssertionsRewriter.java
@@ -181,6 +181,7 @@
return result;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isDescriptorForClassOrInnerClass(
DexString classDescriptor, DexString classOrInnerClassDescriptor) {
// Same string same class.
@@ -354,6 +355,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private boolean runInternal(DexEncodedMethod method, IRCode code) {
ConfigurationEntryWithDexString configuration = getTransformationForMethod(method);
if (configuration.isPassthrough()) {
@@ -504,6 +506,7 @@
return needsDeadCodeRemoval;
}
+ @SuppressWarnings("ReferenceEquality")
private void rewriteKotlinAssertionEnable(
IRCode code,
ConfigurationEntryWithDexString configuration,
@@ -546,6 +549,7 @@
|| isUsingKotlinAssertionsEnabledField(instruction);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isUsingJavaAssertionsDisabledField(FieldInstruction instruction) {
// This does not check the holder, as for inner classe the field is read from the outer class
// and not the class itself.
@@ -553,6 +557,7 @@
&& instruction.getField().getType() == dexItemFactory.booleanType;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isUsingKotlinAssertionsEnabledField(FieldInstruction instruction) {
return instruction.getField() == dexItemFactory.kotlin.assertions.enabledField;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ClassInitializerDefaultsOptimization.java b/src/main/java/com/android/tools/r8/ir/optimize/ClassInitializerDefaultsOptimization.java
index 9c94862..c48cb06 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ClassInitializerDefaultsOptimization.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ClassInitializerDefaultsOptimization.java
@@ -139,6 +139,7 @@
this.dexItemFactory = appView.dexItemFactory();
}
+ @SuppressWarnings("ReferenceEquality")
public ClassInitializerDefaultsResult optimize(IRCode code, OptimizationFeedback feedback) {
if (appView.options().debug) {
return ClassInitializerDefaultsResult.empty();
@@ -335,6 +336,7 @@
return getDexStringValueForInvoke(invoke.getInvokedMethod(), holder);
}
+ @SuppressWarnings("ReferenceEquality")
private DexValue getDexStringValueForInvoke(DexMethod invokedMethod, DexType holder) {
DexClass clazz = appView.definitionFor(holder);
if (clazz == null) {
@@ -379,6 +381,7 @@
return null;
}
+ @SuppressWarnings("ReferenceEquality")
private Map<DexEncodedField, StaticPut> findFinalFieldPutsWhileCollectingUnnecessaryStaticPuts(
IRCode code, ProgramMethod context, Set<StaticPut> unnecessaryStaticPuts) {
Map<DexEncodedField, StaticPut> finalFieldPuts = Maps.newIdentityHashMap();
@@ -531,6 +534,7 @@
return finalFieldPuts;
}
+ @SuppressWarnings("ReferenceEquality")
// Check if the static put is a constant derived from the class holding the method.
// This checks for java.lang.Class.get*Name.
private boolean isClassNameConstantOf(DexClass clazz, StaticPut put) {
@@ -544,6 +548,7 @@
return isClassNameConstantOf(clazz, value.definition);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isClassNameConstantOf(DexClass clazz, Instruction instruction) {
if (instruction.isInvokeVirtual()) {
InvokeVirtual invoke = instruction.asInvokeVirtual();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
index e96ef16..8e7364f 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/CodeRewriter.java
@@ -123,6 +123,7 @@
assert code.isConsistentSSA(appView);
}
+ @SuppressWarnings("ReferenceEquality")
public static void removeOrReplaceByDebugLocalWrite(
Instruction currentInstruction, InstructionListIterator it, Value inValue, Value outValue) {
if (outValue.hasLocalInfo() && outValue.getLocalInfo() != inValue.getLocalInfo()) {
@@ -139,6 +140,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
// TODO(mikaelpeltier) Manage that from and to instruction do not belong to the same block.
private static boolean hasLocalOrLineChangeBetween(
Instruction from, Instruction to, DexString localVar) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java b/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
index c7ddc68..6405fb1 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ConstantCanonicalizer.java
@@ -532,6 +532,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isEffectivelyFinalField(StaticGet staticGet) {
AbstractValue abstractValue = staticGet.outValue().getAbstractValue(appView, context);
if (!abstractValue.isSingleFieldValue()) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java b/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
index c728e5b..5a1d5b0 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DeadCodeRemover.java
@@ -132,6 +132,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void removeDeadInstructions(
Queue<BasicBlock> worklist,
IRCode code,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
index 79ba9d1..1c9f9fe 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/DefaultInliningOracle.java
@@ -472,6 +472,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean canInlineInstanceInitializer(
IRCode code,
InvokeDirect invoke,
@@ -505,6 +506,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
// Only allow inlining a constructor into a non-constructor if:
// (1) the first use of the uninitialized object is the receiver of an invoke of <init>(),
// (2) the constructor does not initialize any final fields, as such is only allowed from within
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java b/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java
index f53576a..f399865 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Devirtualizer.java
@@ -55,6 +55,7 @@
this.options = appView.options();
}
+ @SuppressWarnings("ReferenceEquality")
public void devirtualizeInvokeInterface(IRCode code) {
AffectedValues affectedValues = new AffectedValues();
ProgramMethod context = code.context();
@@ -314,6 +315,7 @@
}
/** This rebinds invoke-super instructions to their most specific target. */
+ @SuppressWarnings("ReferenceEquality")
private DexClass rebindSuperInvokeToMostSpecific(DexMethod target, ProgramMethod context) {
DexClassAndMethod method = appView.appInfo().lookupSuperTarget(target, context, appView);
if (method == null) {
@@ -357,6 +359,7 @@
* <p>If A.foo() ends up being unused, this helps to ensure that we can get rid of A.foo()
* entirely. Without this rewriting, we would have to keep A.foo() because the method is targeted.
*/
+ @SuppressWarnings("ReferenceEquality")
private DexMethod rebindVirtualInvokeToMostSpecific(
DexMethod target, Value receiver, ProgramMethod context) {
if (!receiver.getType().isClassType()) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java
index e37d406..a73733e 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ForcedInliningOracle.java
@@ -86,6 +86,7 @@
return action;
}
+ @SuppressWarnings("ReferenceEquality")
private InlineAction computeForInvoke(
InvokeMethod invoke,
SingleResolutionResult<?> resolutionResult,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
index 95f43b9..f4f0970 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -122,6 +122,7 @@
: null;
}
+ @SuppressWarnings("ReferenceEquality")
private ConstraintWithTarget instructionAllowedForInlining(
Instruction instruction, InliningConstraints inliningConstraints, ProgramMethod context) {
ConstraintWithTarget result = instruction.inliningConstraint(inliningConstraints, context);
@@ -131,6 +132,7 @@
return result;
}
+ @SuppressWarnings("ReferenceEquality")
public ConstraintWithTarget computeInliningConstraint(IRCode code) {
if (containsPotentialCatchHandlerVerificationError(code)) {
return ConstraintWithTarget.NEVER;
@@ -276,6 +278,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object other) {
if (!(other instanceof ConstraintWithTarget)) {
return false;
@@ -285,6 +288,7 @@
&& this.targetHolder == o.targetHolder;
}
+ @SuppressWarnings("ReferenceEquality")
public static ConstraintWithTarget deriveConstraint(
ProgramMethod context, DexType targetHolder, AccessFlags<?> flags, AppView<?> appView) {
if (flags.isPublic()) {
@@ -330,6 +334,7 @@
: deriveConstraint(context, clazz, definition.accessFlags, appView);
}
+ @SuppressWarnings("ReferenceEquality")
public static ConstraintWithTarget meet(
ConstraintWithTarget one, ConstraintWithTarget other, AppView<?> appView) {
if (one.equals(other)) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java b/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
index 0a8b0e7..054a256 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/InliningConstraints.java
@@ -222,7 +222,7 @@
return forResolvedMember(resolutionResult.getInitialResolutionHolder(), context, target);
}
- @SuppressWarnings("ConstantConditions")
+ @SuppressWarnings({"ConstantConditions", "ReferenceEquality"})
private DexEncodedMethod singleTargetWhileVerticalClassMerging(
MethodResolutionResult resolutionResult,
ProgramMethod context,
@@ -381,6 +381,7 @@
resolutionResult.getInitialResolutionHolder(), context, resolutionResult.getSingleTarget());
}
+ @SuppressWarnings("ReferenceEquality")
private ConstraintWithTarget forResolvedMember(
DexClass initialResolutionHolder,
ProgramMethod context,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/NestUtils.java b/src/main/java/com/android/tools/r8/ir/optimize/NestUtils.java
index 5ee91d0..3468120 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/NestUtils.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/NestUtils.java
@@ -21,6 +21,7 @@
public class NestUtils {
+ @SuppressWarnings("ReferenceEquality")
public static boolean sameNest(DexType type1, DexType type2, DexDefinitionSupplier definitions) {
if (type1 == type2) {
return true;
@@ -41,6 +42,7 @@
return clazz1.getNestHost() == clazz2.getNestHost();
}
+ @SuppressWarnings("ReferenceEquality")
public static void rewriteNestCallsForInlining(
IRCode code, ProgramMethod callerContext, AppView<?> appView) {
// This method is called when inlining code into the nest member callerHolder.
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java
index f81a309..a7d22be 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadAndStoreElimination.java
@@ -215,6 +215,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object other) {
if (!(other instanceof FieldAndObject)) {
return false;
@@ -337,6 +338,7 @@
return appView.libraryMethodOptimizer().isFinalLibraryField(field.getDefinition());
}
+ @SuppressWarnings("ReferenceEquality")
private DexClassAndField resolveField(DexField field) {
if (appView.enableWholeProgramOptimizations()) {
SingleFieldResolutionResult resolutionResult =
@@ -614,6 +616,7 @@
return activeState.markClassAsInitialized(type);
}
+ @SuppressWarnings("ReferenceEquality")
private void markMostRecentInitClassForRemoval(DexType initializedType) {
InitClass mostRecentInitClass = activeState.getMostRecentInitClass();
if (mostRecentInitClass != null && mostRecentInitClass.getClassValue() == initializedType) {
@@ -1093,6 +1096,7 @@
clearMostRecentStaticFieldWrites();
}
+ @SuppressWarnings("ReferenceEquality")
public void clearMostRecentInstanceFieldWrite(DexField field) {
if (mostRecentInstanceFieldWrites != null) {
mostRecentInstanceFieldWrites.keySet().removeIf(key -> key.field == field);
@@ -1308,6 +1312,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public void removeNonFinalInstanceFields(DexField field) {
if (nonFinalInstanceFieldValues != null) {
nonFinalInstanceFieldValues.keySet().removeIf(key -> key.field == field);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ReflectionOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/ReflectionOptimizer.java
index d03fccb..0aa891a 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ReflectionOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ReflectionOptimizer.java
@@ -147,6 +147,7 @@
};
}
+ @SuppressWarnings("ReferenceEquality")
private static void applyTypeForGetClassTo(
AppView<AppInfoWithLiveness> appView,
ProgramMethod context,
@@ -199,6 +200,7 @@
consumer.accept(type, clazz);
}
+ @SuppressWarnings("ReferenceEquality")
private static void applyTypeForClassForNameTo(
AppView<AppInfoWithLiveness> appView,
ProgramMethod context,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/RemoveVerificationErrorForUnknownReturnedValues.java b/src/main/java/com/android/tools/r8/ir/optimize/RemoveVerificationErrorForUnknownReturnedValues.java
index 1b4ad0f..6262a76 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/RemoveVerificationErrorForUnknownReturnedValues.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/RemoveVerificationErrorForUnknownReturnedValues.java
@@ -99,6 +99,7 @@
timing.end();
}
+ @SuppressWarnings("ReferenceEquality")
private Set<Return> getReturnsPotentiallyNeedingCheckCast(
AppInfoWithClassHierarchy appInfo, ProgramMethod context, IRCode code) {
if (syntheticItems.isSyntheticOfKind(context.getHolderType(), kinds -> kinds.API_MODEL_OUTLINE)
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java
index 9ae8565..f8caa1b 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/RuntimeWorkaroundCodeRewriter.java
@@ -36,6 +36,7 @@
private static final int SELF_RECURSION_LIMIT = 4;
+ @SuppressWarnings("ReferenceEquality")
// For method with many self-recursive calls, insert a try-catch to disable inlining.
// Marshmallow dex2oat aggressively inlines and eats up all the memory on devices.
public static void workaroundDex2OatInliningIssue(AppView<?> appView, IRCode code) {
@@ -227,6 +228,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public static void workaroundForwardingInitializerBug(IRCode code, InternalOptions options) {
if (!options.canHaveForwardingInitInliningBug()) {
return;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java
index e79cac4..e39ebf6 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/ServiceLoaderRewriter.java
@@ -87,6 +87,7 @@
|| appInfo.isWhyAreYouNotInliningMethod(serviceLoaderMethods.loadWithClassLoader);
}
+ @SuppressWarnings("ReferenceEquality")
public void rewrite(
IRCode code,
MethodProcessor methodProcessor,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java b/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
index cdb30da..5a0ec0d 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/SwitchMapCollector.java
@@ -103,6 +103,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void extractSwitchMap(DexEncodedField encodedField, IRCode initializer) {
DexField field = encodedField.getReference();
Int2ReferenceMap<DexField> switchMap = new Int2ReferenceArrayMap<>();
@@ -164,6 +165,7 @@
switchMaps.put(field, switchMap);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean maybeIsSwitchMap(DexEncodedField dexEncodedField) {
// We are looking for synthetic fields of type int[].
DexField field = dexEncodedField.getReference();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
index 647be44..3c4eac4 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/ClassInliner.java
@@ -262,6 +262,7 @@
return eligible;
}
+ @SuppressWarnings("ReferenceEquality")
// Class is eligible for this optimization. Eligibility implementation:
// - is not an abstract class or interface
// - does not declare finalizer
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/FieldValueHelper.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/FieldValueHelper.java
index 833ceaa..0e185da 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/FieldValueHelper.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/FieldValueHelper.java
@@ -123,6 +123,7 @@
return value;
}
+ @SuppressWarnings("ReferenceEquality")
private Value getValueDefinedInTheBlock(BasicBlock block, Instruction stopAt) {
InstructionIterator iterator =
stopAt == null ? block.iterator(block.getInstructions().size()) : block.iterator(stopAt);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
index 256d368..c332087 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
@@ -394,6 +394,7 @@
return anyInlinedMethods;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean forceInlineDirectMethodInvocations(
IRCode code, InliningIRProvider inliningIRProvider) throws IllegalClassInlinerStateException {
if (directMethodCalls.isEmpty()) {
@@ -458,6 +459,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean forceInlineIndirectMethodInvocations(
IRCode code, InliningIRProvider inliningIRProvider) throws IllegalClassInlinerStateException {
if (indirectMethodCallsOnInstance.isEmpty()) {
@@ -585,6 +587,7 @@
assert eligibleInstance.aliasedUsers().stream().noneMatch(Instruction::isCheckCast);
}
+ @SuppressWarnings("ReferenceEquality")
// Remove miscellaneous users before handling field reads.
private void removeMiscUsages(IRCode code, AffectedValues affectedValues) {
boolean needToRemoveUnreachableBlocks = false;
@@ -856,6 +859,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private InliningInfo isEligibleConstructorCall(InvokeDirect invoke, ProgramMethod singleTarget) {
assert dexItemFactory.isConstructor(invoke.getInvokedMethod());
assert isEligibleSingleTarget(singleTarget);
@@ -1027,6 +1031,7 @@
&& !nonEmptyUsage.isParameterReturned();
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isEligibleVirtualMethodCall(DexMethod callee, ProgramMethod singleTarget) {
assert isEligibleSingleTarget(singleTarget);
@@ -1120,6 +1125,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isEligibleLibraryMethodCall(InvokeMethod invoke, LibraryMethod singleTarget) {
boolean isSideEffectFree =
appView.getLibraryMethodSideEffectModelCollection().isSideEffectFree(invoke, singleTarget);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/analysis/TransferFunction.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/analysis/TransferFunction.java
index f6bc6e6..6e1643e 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/analysis/TransferFunction.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/analysis/TransferFunction.java
@@ -85,6 +85,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public TransferFunctionResult<ParameterUsages> apply(
Instruction instruction, ParameterUsages state) {
if (instruction.isArgument()) {
@@ -309,6 +310,7 @@
receiverRoot, (context, usage) -> usage.addMethodCallWithParameterAsReceiver(invoke));
}
+ @SuppressWarnings("ReferenceEquality")
private ParameterUsages analyzeInvokeStatic(InvokeStatic invoke, NonEmptyParameterUsages state) {
// We generally don't class inline instances that escape through invoke-static calls, but we
// make an exception for calls to Objects.requireNonNull().
@@ -392,6 +394,7 @@
: isMaybeEligibleForClassInlining(clazz.asClasspathOrLibraryClass());
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isMaybeEligibleForClassInlining(DexProgramClass clazz) {
// We can only class inline parameters that does not inherit from other classpath or library
// classes than java.lang.Object.
@@ -408,6 +411,7 @@
} while (true);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isMaybeEligibleForClassInlining(ClasspathOrLibraryClass clazz) {
// We can only class inline a parameter that is either java.lang.Object or an interface type.
return clazz.getType() == dexItemFactory.objectType || clazz.isInterface();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/controlflow/SwitchCaseAnalyzer.java b/src/main/java/com/android/tools/r8/ir/optimize/controlflow/SwitchCaseAnalyzer.java
index 538f997..068c269 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/controlflow/SwitchCaseAnalyzer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/controlflow/SwitchCaseAnalyzer.java
@@ -22,6 +22,7 @@
return INSTANCE;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean switchCaseIsAlwaysHit(Switch theSwitch, int index) {
Value switchValue = theSwitch.value();
if (theSwitch.isIntSwitch()) {
@@ -39,6 +40,7 @@
&& key == rootSwitchValue.definition.asConstString().getValue();
}
+ @SuppressWarnings("ReferenceEquality")
public boolean switchCaseIsUnreachable(
Switch theSwitch, AbstractValue switchAbstractValue, int index) {
Value switchValue = theSwitch.value();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumDataMap.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumDataMap.java
index 06cb686..f01fd1c 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumDataMap.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumDataMap.java
@@ -60,6 +60,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isAssignableTo(DexType subtype, DexType superType) {
assert superType != null;
assert subtype != null;
@@ -232,6 +233,7 @@
return null;
}
+ @SuppressWarnings("ReferenceEquality")
public SingleNumberValue subEnumTypeSingleValue(AbstractValueFactory factory, DexType type) {
assert valuesTypes.values().stream().filter(t -> t == type).count() <= 1;
for (Entry<DexType> entry : valuesTypes.int2ReferenceEntrySet()) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
index f1aba56..8ec6037 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxerImpl.java
@@ -346,6 +346,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void analyzeInvokeCustom(
InvokeCustom invoke, Set<DexType> eligibleEnums, ProgramMethod context) {
invoke.getCallSite().getMethodProto().forEachType(t -> markEnumEligible(t, eligibleEnums));
@@ -500,6 +501,7 @@
eligibleEnums.add(enumType);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isLegitimateConstClassUser(
Instruction user, ProgramMethod context, DexProgramClass enumClass) {
if (user.isAssume()) {
@@ -576,6 +578,7 @@
enumClass, factory.enumMembers.nameField);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isUnboxableNameMethod(DexMethod method) {
return method == factory.classMethods.getName
|| method == factory.classMethods.getCanonicalName
@@ -852,6 +855,7 @@
return enumDataMap;
}
+ @SuppressWarnings("ReferenceEquality")
private EnumDataMap analyzeEnumInstances() {
ImmutableMap.Builder<DexType, DexType> enumSubtypes = ImmutableMap.builder();
ImmutableMap.Builder<DexType, EnumData> builder = ImmutableMap.builder();
@@ -1265,6 +1269,7 @@
return Reason.INVALID_ARRAY_PUT;
}
+ @SuppressWarnings("ReferenceEquality")
private Reason analyzeNewArrayFilledUser(
NewArrayFilled newArrayFilled,
IRCode code,
@@ -1338,6 +1343,7 @@
return Reason.ELIGIBLE;
}
+ @SuppressWarnings("ReferenceEquality")
// An If using enum as inValue is valid if it matches e == null
// or e == X with X of same enum type as e. Ex: if (e == MyEnum.A).
private Reason analyzeIfUser(
@@ -1359,6 +1365,7 @@
return Reason.INVALID_IF_TYPES;
}
+ @SuppressWarnings("ReferenceEquality")
private Reason analyzeInstanceGetUser(
InstanceGet instanceGet,
IRCode code,
@@ -1371,6 +1378,7 @@
return Reason.ELIGIBLE;
}
+ @SuppressWarnings("ReferenceEquality")
// All invokes in the library are invalid, besides a few cherry picked cases such as ordinal().
private Reason analyzeInvokeUser(
InvokeMethod invoke,
@@ -1507,6 +1515,7 @@
return new UnboxedValueNonComparable(invoke.getInvokedMethod(), type1, type2);
}
+ @SuppressWarnings("ReferenceEquality")
private Reason analyzeLibraryInvoke(
InvokeMethod invoke,
IRCode code,
@@ -1637,6 +1646,7 @@
return new UnsupportedLibraryInvokeReason(singleTargetReference);
}
+ @SuppressWarnings("ReferenceEquality")
// Return is used for valueOf methods.
private Reason analyzeReturnUser(
Return theReturn,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCandidateAnalysis.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCandidateAnalysis.java
index 4531523..86709f7 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCandidateAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCandidateAnalysis.java
@@ -85,6 +85,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void analyzeEnum(GraphLens graphLensForPrimaryOptimizationPass, DexProgramClass clazz) {
if (clazz.superType == factory.enumType) {
if (isSuperEnumUnboxingCandidate(clazz)) {
@@ -102,6 +103,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isSubEnumUnboxingCandidate(DexProgramClass clazz) {
assert clazz.isEnum();
boolean result = true;
@@ -130,6 +132,7 @@
return result;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isSuperEnumUnboxingCandidate(DexProgramClass clazz) {
assert clazz.isEnum();
@@ -197,6 +200,7 @@
options);
}
+ @SuppressWarnings("ReferenceEquality")
private void removePinnedIfNotHolder(DexMember<?, ?> member, DexType type) {
DexType baseType = type.toBaseType(factory);
if (baseType != member.holder) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCandidateInfoCollection.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCandidateInfoCollection.java
index 6235749..aaa428d 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCandidateInfoCollection.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingCandidateInfoCollection.java
@@ -90,6 +90,7 @@
}
/** Answers true if both enums are identical, or if one inherit from the other. */
+ @SuppressWarnings("ReferenceEquality")
public boolean isAssignableTo(DexType subtype, DexType superType) {
assert superType != null;
assert subtype != null;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingLens.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingLens.java
index dd803f9..8a5f087 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingLens.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingLens.java
@@ -91,6 +91,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean verifyIsContextFreeForMethod(DexMethod method, GraphLens codeLens) {
if (codeLens == this) {
return true;
@@ -134,6 +135,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public MethodLookupResult internalDescribeLookupMethod(
MethodLookupResult previous, DexMethod context, GraphLens codeLens) {
assert context != null || verifyIsContextFreeForMethod(previous.getReference(), codeLens);
@@ -174,6 +176,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
protected RewrittenPrototypeDescription internalDescribePrototypeChanges(
RewrittenPrototypeDescription prototypeChanges, DexMethod method) {
// Rewrite the single value of the given RewrittenPrototypeDescription if it is referring to an
@@ -216,6 +219,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
protected InvokeType mapInvocationType(
DexMethod newMethod, DexMethod originalMethod, InvokeType type) {
if (typeMap.containsKey(originalMethod.getHolderType())) {
@@ -261,6 +265,7 @@
return this;
}
+ @SuppressWarnings("ReferenceEquality")
public void move(DexField from, DexField to) {
if (from == to) {
return;
@@ -308,6 +313,7 @@
return prototypeChanges;
}
+ @SuppressWarnings("ReferenceEquality")
private RewrittenPrototypeDescription computePrototypeChanges(
DexMethod from,
DexMethod to,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
index b30fae9..0dcc57a 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingRewriter.java
@@ -361,6 +361,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
// Rewrites specific enum methods, such as ordinal, into their corresponding enum unboxed
// counterpart. The rewriting (== or match) is based on the following:
// - name, ordinal and compareTo are final and implemented only on java.lang.Enum,
@@ -518,6 +519,7 @@
convertedEnums.put(newArray, newArrayFilled.getArrayType());
}
+ @SuppressWarnings("ReferenceEquality")
private void rewriteInvokeStatic(
InvokeStatic invoke,
IRCode code,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
index bcaf48b..82f61ed 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumUnboxingTreeFixer.java
@@ -182,6 +182,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean shouldReserveAsIfPinned(ProgramMethod method) {
DexProto oldProto = method.getProto();
DexProto newProto = fixupProto(oldProto);
@@ -304,6 +305,7 @@
executorService);
}
+ @SuppressWarnings("ReferenceEquality")
private void fixupSuperEnumClassInitializer(
IRConverter converter, DexProgramClass unboxedEnum, DexEncodedField ordinalField) {
if (!unboxedEnum.hasClassInitializer()) {
@@ -579,6 +581,7 @@
}));
}
+ @SuppressWarnings("ReferenceEquality")
private void processMethod(
ProgramMethod method,
DexMethodSignatureSet nonPrivateVirtualMethods,
@@ -640,6 +643,7 @@
return localUtilityMethods.values();
}
+ @SuppressWarnings("ReferenceEquality")
private void processVirtualMethod(
DexMethodSignature nonPrivateVirtualMethod,
DexProgramClass unboxedEnum,
@@ -885,6 +889,7 @@
&& !field.getDefinition().getOptimizationInfo().isDead());
}
+ @SuppressWarnings("ReferenceEquality")
private DexEncodedMethod fixupEncodedMethod(
DexEncodedMethod method, MethodNamingUtility utility) {
DexProto oldProto = method.getProto();
@@ -921,6 +926,7 @@
method.isNonPrivateVirtualMethod(), OptionalBool.FALSE));
}
+ @SuppressWarnings("ReferenceEquality")
private DexEncodedField fixupEncodedField(DexEncodedField encodedField) {
DexField field = encodedField.getReference();
DexType newType = fixupType(field.type);
@@ -945,6 +951,7 @@
return factory.createProto(returnType, arguments);
}
+ @SuppressWarnings("ReferenceEquality")
private DexType fixupType(DexType type) {
if (type.isArrayType()) {
DexType base = type.toBaseType(factory);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
index 6ae8689..cff3e70 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/EnumValueOptimizer.java
@@ -59,6 +59,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
protected CodeRewriterResult rewriteCode(IRCode code) {
assert appView.enableWholeProgramOptimizations();
boolean hasChanged = false;
@@ -430,6 +431,7 @@
*
* and extracts the components and the index and ordinal maps.
*/
+ @SuppressWarnings("ReferenceEquality")
private EnumSwitchInfo analyzeSwitchOverEnum(IntSwitch switchInsn) {
Instruction input = switchInsn.inValues().get(0).definition;
if (input == null || !input.isArrayGet()) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/LocalEnumUnboxingUtilityClass.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/LocalEnumUnboxingUtilityClass.java
index d56f416..12078e6 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/LocalEnumUnboxingUtilityClass.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/LocalEnumUnboxingUtilityClass.java
@@ -68,6 +68,7 @@
return method;
}
+ @SuppressWarnings("ReferenceEquality")
private DexString computeGetInstanceFieldMethodName(DexField field, DexItemFactory factory) {
String fieldName = field.getName().toString();
if (field.getHolderType() == getSynthesizingContext().getType()) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/enums/classification/EnumUnboxerMethodClassificationAnalysis.java b/src/main/java/com/android/tools/r8/ir/optimize/enums/classification/EnumUnboxerMethodClassificationAnalysis.java
index 1cedaf3..93bd925 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/enums/classification/EnumUnboxerMethodClassificationAnalysis.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/enums/classification/EnumUnboxerMethodClassificationAnalysis.java
@@ -30,6 +30,7 @@
* CheckNotNullEnumUnboxerMethodClassification} if the method is static and has a parameter of
* type Object, which has a single if-zero user.
*/
+ @SuppressWarnings("ReferenceEquality")
public static EnumUnboxerMethodClassification analyze(
AppView<AppInfoWithLiveness> appView,
ProgramMethod method,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java b/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
index 7b759b2..3c06996 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/MethodOptimizationInfoCollector.java
@@ -261,6 +261,7 @@
method, InstanceInitializerInfoCollection.of(instanceInitializerInfo));
}
+ @SuppressWarnings("ReferenceEquality")
// This method defines trivial instance initializer as follows:
//
// ** The holder class must not define a finalize method.
@@ -728,6 +729,7 @@
* Returns true if the given instruction is {@code v <- new-instance NullPointerException}, and
* the next instruction is {@code invoke-direct v, NullPointerException.<init>()}.
*/
+ @SuppressWarnings("ReferenceEquality")
private static boolean isInstantiationOfNullPointerException(
Instruction instruction, InstructionIterator it, DexItemFactory dexItemFactory) {
if (!instruction.isNewInstance()
@@ -961,6 +963,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
// Returns true if the given class overrides the method `void java.lang.Object.finalize()`.
private boolean hasNonTrivialFinalizeMethod(DexProgramClass clazz) {
if (clazz.isInterface()) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/bridge/BridgeAnalyzer.java b/src/main/java/com/android/tools/r8/ir/optimize/info/bridge/BridgeAnalyzer.java
index fbf5056..853c734 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/bridge/BridgeAnalyzer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/bridge/BridgeAnalyzer.java
@@ -113,6 +113,7 @@
: analyzeCheckCastAfterInvoke(method, checkCast, invoke);
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean analyzeCheckCastBeforeInvoke(CheckCast checkCast) {
Value object = checkCast.object().getAliasedValue();
// It must be casting one of the arguments.
@@ -153,6 +154,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean analyzeCheckCastAfterInvoke(
DexEncodedMethod method, CheckCast checkCast, InvokeMethod invoke) {
Value returnValue = invoke.outValue();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/info/initializer/NonTrivialInstanceInitializerInfo.java b/src/main/java/com/android/tools/r8/ir/optimize/info/initializer/NonTrivialInstanceInitializerInfo.java
index 096adfb..425e3e9 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/info/initializer/NonTrivialInstanceInitializerInfo.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/info/initializer/NonTrivialInstanceInitializerInfo.java
@@ -223,6 +223,7 @@
return parent;
}
+ @SuppressWarnings("ReferenceEquality")
public Builder setParent(DexMethod parent) {
assert !hasParent() || getParent() == parent;
this.parent = parent;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/BooleanMethodOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/BooleanMethodOptimizer.java
index 77121b6..53fd831 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/BooleanMethodOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/BooleanMethodOptimizer.java
@@ -38,6 +38,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void optimize(
IRCode code,
BasicBlockIterator blockIterator,
@@ -55,6 +56,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void optimizeBooleanValue(
IRCode code, InstructionListIterator instructionIterator, InvokeMethod invoke) {
Value argument = invoke.arguments().get(0).getAliasedValue();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/ByteMethodOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/ByteMethodOptimizer.java
index 952d7cc..a1b2c39 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/ByteMethodOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/ByteMethodOptimizer.java
@@ -33,6 +33,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void optimize(
IRCode code,
BasicBlockIterator blockIterator,
@@ -46,6 +47,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void optimizeByteValue(
InstructionListIterator instructionIterator, InvokeMethod byteValueInvoke) {
// Optimize Byte.valueOf(b).byteValue() into b.
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/EnumMethodOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/EnumMethodOptimizer.java
index fd78da3..a3eba42 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/EnumMethodOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/EnumMethodOptimizer.java
@@ -36,6 +36,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void optimize(
IRCode code,
BasicBlockIterator blockIterator,
@@ -52,6 +53,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void insertAssumeDynamicType(
AppView<AppInfoWithLiveness> appView,
IRCode code,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/LogMethodOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/LogMethodOptimizer.java
index 821561c..3e3b850 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/LogMethodOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/LogMethodOptimizer.java
@@ -137,6 +137,7 @@
* @return The log level of the given invoke if it is a call to an android.util.Log method and the
* log level can be determined, otherwise returns -1.
*/
+ @SuppressWarnings("ReferenceEquality")
private int getLogLevel(InvokeMethod invoke, DexClassAndMethod singleTarget) {
DexMethod singleTargetReference = singleTarget.getReference();
switch (singleTargetReference.getName().getFirstByteAsChar()) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/ObjectMethodOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/ObjectMethodOptimizer.java
index 98e0014..72c4a3e 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/ObjectMethodOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/ObjectMethodOptimizer.java
@@ -30,6 +30,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void optimize(
IRCode code,
BasicBlockIterator blockIterator,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/ObjectsMethodOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/ObjectsMethodOptimizer.java
index 7e55ce3..9890bca 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/ObjectsMethodOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/ObjectsMethodOptimizer.java
@@ -44,6 +44,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void optimize(
IRCode code,
BasicBlockIterator blockIterator,
@@ -169,6 +170,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void optimizeRequireNonNull(
IRCode code,
BasicBlockIterator blockIterator,
@@ -212,6 +214,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void optimizeToStringWithObject(
IRCode code,
InstructionListIterator instructionIterator,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/StringBuilderMethodOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/StringBuilderMethodOptimizer.java
index fb14d81..f5e8538 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/StringBuilderMethodOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/StringBuilderMethodOptimizer.java
@@ -68,6 +68,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void optimize(
IRCode code,
BasicBlockIterator blockIterator,
@@ -195,6 +196,7 @@
* Adds all the aliases of the given StringBuilder value to {@param aliases}, or returns false
* if all aliases were not found (e.g., due to a phi user).
*/
+ @SuppressWarnings("ReferenceEquality")
private boolean computeAllAliasesIfUnusedStringBuilder(Value value, Set<Value> aliases) {
WorkList<Value> worklist = WorkList.newIdentityWorkList(value);
while (worklist.hasNext()) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/library/StringMethodOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/library/StringMethodOptimizer.java
index 6e4abef..f49beb1 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/library/StringMethodOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/library/StringMethodOptimizer.java
@@ -40,6 +40,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void optimize(
IRCode code,
BasicBlockIterator blockIterator,
@@ -101,6 +102,7 @@
* {@param constStringValue} is a constant string that is identical to the name of a class that
* has been pruned by the {@link com.android.tools.r8.shaking.Enqueuer}.
*/
+ @SuppressWarnings("ReferenceEquality")
private boolean isPrunedClassNameComparison(
Value classNameValue, Value constStringValue, ProgramMethod context) {
if (classNameValue.isPhi() || constStringValue.isPhi()) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/membervaluepropagation/R8MemberValuePropagation.java b/src/main/java/com/android/tools/r8/ir/optimize/membervaluepropagation/R8MemberValuePropagation.java
index 54da041..a4ea5c9 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/membervaluepropagation/R8MemberValuePropagation.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/membervaluepropagation/R8MemberValuePropagation.java
@@ -224,6 +224,7 @@
rewriteFieldGet(code, affectedValues, blocks, iterator, current);
}
+ @SuppressWarnings("ReferenceEquality")
private void rewriteFieldGet(
IRCode code,
Set<Value> affectedValues,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/membervaluepropagation/assume/AssumeInfo.java b/src/main/java/com/android/tools/r8/ir/optimize/membervaluepropagation/assume/AssumeInfo.java
index 0004e86..342eefc 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/membervaluepropagation/assume/AssumeInfo.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/membervaluepropagation/assume/AssumeInfo.java
@@ -52,6 +52,7 @@
return assumeValue;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isEmpty() {
if (this == empty()) {
return true;
@@ -98,11 +99,13 @@
return AbstractValue.bottom();
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean internalMeetIsSideEffectFree(
boolean isSideEffectFree, boolean otherIsSideEffectFree) {
return isSideEffectFree || otherIsSideEffectFree;
}
+ @SuppressWarnings("ReferenceEquality")
public AssumeInfo rewrittenWithLens(AppView<?> appView, GraphLens graphLens) {
// Verify that there is no need to rewrite the assumed type.
assert assumeType.isNotNullType() || assumeType.isUnknown();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java b/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java
index 0816edc..3e3dbdd 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/outliner/OutlinerImpl.java
@@ -340,6 +340,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object other) {
if (!(other instanceof NewInstanceOutlineInstruction)) {
return false;
@@ -395,6 +396,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean needsLensRewriting(GraphLens currentGraphLens) {
return currentGraphLens.lookupType(clazz) != clazz;
}
@@ -446,6 +448,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object other) {
if (!(other instanceof InvokeOutlineInstruction)) {
return false;
@@ -538,6 +541,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean needsLensRewriting(GraphLens currentGraphLens) {
return currentGraphLens.getRenamedMethodSignature(method) != method;
}
@@ -621,6 +625,7 @@
return this;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean needsLensRewriting(GraphLens currentGraphLens) {
for (DexType argumentType : argumentTypes) {
if (currentGraphLens.lookupType(argumentType) != argumentType) {
@@ -636,6 +641,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object other) {
if (!(other instanceof Outline)) {
return false;
@@ -721,6 +727,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public String toString() {
// The printing of the code for an outline maps the value numbers to the arguments numbers.
int outRegisterNumber = argumentTypes.size();
@@ -861,6 +868,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
// Check if the current instruction can be included in the outline.
private boolean canIncludeInstruction(Instruction instruction) {
// Find the users of the active out-value (potential return value).
@@ -994,6 +1002,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
private DexType argumentTypeFromValue(Value value, InvokeMethod invoke, int argumentIndex) {
assert supportedArgumentType(value);
DexItemFactory itemFactory = appView.options().itemFactory;
@@ -1320,6 +1329,7 @@
}
/** When assertions are enabled, remove method from the outline's list. */
+ @SuppressWarnings("ReferenceEquality")
private boolean removeMethodFromOutlineList(Outline outline) {
synchronized (outlineSites) {
assert ListUtils.removeFirstMatch(
@@ -1727,6 +1737,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void buildInstruction(
IRBuilder builder, int instructionIndex, boolean firstBlockInstruction) {
if (instructionIndex == outline.templateInstructions.size()) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/peepholes/MoveLoadUpPeephole.java b/src/main/java/com/android/tools/r8/ir/optimize/peepholes/MoveLoadUpPeephole.java
index 36d883a..35d18a5 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/peepholes/MoveLoadUpPeephole.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/peepholes/MoveLoadUpPeephole.java
@@ -112,6 +112,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean isPotentionalIncInstruction(InstructionListIterator it) {
it.previous();
Load load = it.next().asLoad();
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAction.java b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAction.java
index c19f65e..1b36879 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAction.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAction.java
@@ -151,6 +151,7 @@
|| factory.stringBuilderMethods.isAppendStringMethod(method);
}
+ @SuppressWarnings("ReferenceEquality")
private DexMethod getAppendWithStringParameter(
DexMethod invokedMethod, DexItemFactory factory) {
if (invokedMethod.getHolderType() == factory.stringBufferType) {
@@ -359,6 +360,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
static DexMethod getConstructorWithStringParameter(
DexMethod invokedMethod, DexItemFactory factory) {
if (invokedMethod.getHolderType() == factory.stringBufferType) {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAppendOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAppendOptimizer.java
index af05e80..1c81b90 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAppendOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderAppendOptimizer.java
@@ -285,6 +285,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void createNodesForStringBuilderInstruction(
Instruction instruction,
StringBuilderEscapeState escapeState,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderEscapeState.java b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderEscapeState.java
index f1e7fb8..73ffb73 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderEscapeState.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderEscapeState.java
@@ -94,6 +94,7 @@
return newlyEscaped;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isBottom() {
return this == BOTTOM;
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderHelper.java b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderHelper.java
index a795308..4a7af31 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderHelper.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderHelper.java
@@ -41,6 +41,7 @@
return instruction.isAssume() || instruction.isCheckCast() || oracle.isAppend(instruction);
}
+ @SuppressWarnings("ReferenceEquality")
static String extractConstantArgument(
DexItemFactory factory, DexMethod method, Value arg, DexType argumentType) {
if (arg.isPhi()) {
@@ -80,6 +81,7 @@
return null;
}
+ @SuppressWarnings("ReferenceEquality")
static Number extractConstantNumber(DexItemFactory factory, Value arg) {
if (arg.isPhi()) {
return null;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderOracle.java b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderOracle.java
index 8b59c2f..2c43b60 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderOracle.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/string/StringBuilderOracle.java
@@ -58,6 +58,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean isModeledStringBuilderInstruction(
Instruction instruction, Predicate<Value> isLiveStringBuilder) {
if (instruction.isNewInstance()) {
@@ -75,6 +76,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isStringBuildingMethod(StringBuildingMethods methods, DexMethod method) {
return methods.isAppendMethod(method)
|| methods.isConstructorMethod(method)
@@ -89,11 +91,13 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean isStringBuilderType(DexType type) {
return type == factory.stringBuilderType || type == factory.stringBufferType;
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean isToString(Instruction instruction, Value value) {
if (!instruction.isInvokeMethod()) {
return false;
@@ -158,6 +162,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean isInspecting(Instruction instruction) {
if (!instruction.isInvokeMethodWithReceiver()) {
return false;
@@ -225,6 +230,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean isStringConstructor(Instruction instruction) {
if (!instruction.isInvokeMethod()) {
return false;
@@ -235,6 +241,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean isConstructorInvokeSideEffectFree(Instruction instruction) {
if (!instruction.isInvokeConstructor(factory)) {
return false;
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java b/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java
index 85838a5..bd5a79b 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/string/StringOptimizer.java
@@ -69,6 +69,7 @@
return CodeRewriterResult.hasChanged(hasChanged);
}
+ @SuppressWarnings("ReferenceEquality")
// boolean String#isEmpty()
// boolean String#startsWith(String)
// boolean String#endsWith(String)
@@ -252,6 +253,7 @@
return hasChanged;
}
+ @SuppressWarnings("ReferenceEquality")
// Find Class#get*Name() with a constant-class and replace it with a const-string if possible.
private boolean rewriteClassGetName(IRCode code) {
boolean hasChanged = false;
@@ -413,6 +415,7 @@
return hasChanged;
}
+ @SuppressWarnings("ReferenceEquality")
// String#valueOf(null) -> "null"
// String#valueOf(String s) -> s
// str.toString() -> str
@@ -492,6 +495,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean isLegitimateEscapeRoute(
AppView<?> appView,
EscapeAnalysis escapeAnalysis,
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/typechecks/CheckCastAndInstanceOfMethodSpecialization.java b/src/main/java/com/android/tools/r8/ir/optimize/typechecks/CheckCastAndInstanceOfMethodSpecialization.java
index 4d3075c..d89c044 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/typechecks/CheckCastAndInstanceOfMethodSpecialization.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/typechecks/CheckCastAndInstanceOfMethodSpecialization.java
@@ -84,6 +84,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void processCandidateForInstanceOfOptimization(
ProgramMethod method, MethodProcessor methodProcessor) {
DexEncodedMethod definition = method.getDefinition();
diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
index b65fb0c..a13c810 100644
--- a/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
+++ b/src/main/java/com/android/tools/r8/ir/regalloc/LinearScanRegisterAllocator.java
@@ -248,7 +248,7 @@
}
// TODO(b/270398965): Replace LinkedList.
- @SuppressWarnings("JdkObsolete")
+ @SuppressWarnings({"JdkObsolete", "ReferenceEquality"})
public static void computeDebugInfo(
IRCode code,
ImmutableList<BasicBlock> blocks,
@@ -462,6 +462,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
private static void setLocalsAtEntry(
BasicBlock block,
InstructionListIterator instructionIterator,
@@ -512,6 +513,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private static DebugLocalsChange createLocalsChange(
Int2ReferenceMap<DebugLocalInfo> ending,
Int2ReferenceMap<DebugLocalInfo> starting,
@@ -1071,6 +1073,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private void setHintForDestRegOfCheckCast(LiveIntervals unhandledInterval) {
if (unhandledInterval.getHint() == null &&
unhandledInterval.getValue().definition instanceof CheckCast) {
diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/RegisterMove.java b/src/main/java/com/android/tools/r8/ir/regalloc/RegisterMove.java
index 60c7c49..be68587 100644
--- a/src/main/java/com/android/tools/r8/ir/regalloc/RegisterMove.java
+++ b/src/main/java/com/android/tools/r8/ir/regalloc/RegisterMove.java
@@ -39,6 +39,7 @@
return dst == register;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isBlocked(Set<RegisterMove> moveSet, Map<Integer, Integer> valueMap) {
for (RegisterMove move : moveSet) {
if (move.src == LiveIntervals.NO_REGISTER) {
@@ -64,6 +65,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object other) {
if (!(other instanceof RegisterMove)) {
return false;
diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/SpillMove.java b/src/main/java/com/android/tools/r8/ir/regalloc/SpillMove.java
index b33743e..3edfd86 100644
--- a/src/main/java/com/android/tools/r8/ir/regalloc/SpillMove.java
+++ b/src/main/java/com/android/tools/r8/ir/regalloc/SpillMove.java
@@ -40,6 +40,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object other) {
if (other == this) {
return true;
diff --git a/src/main/java/com/android/tools/r8/ir/regalloc/SpillMoveSet.java b/src/main/java/com/android/tools/r8/ir/regalloc/SpillMoveSet.java
index 52116a1..bace7c1 100644
--- a/src/main/java/com/android/tools/r8/ir/regalloc/SpillMoveSet.java
+++ b/src/main/java/com/android/tools/r8/ir/regalloc/SpillMoveSet.java
@@ -159,6 +159,7 @@
return usedTempRegisters;
}
+ @SuppressWarnings("ReferenceEquality")
private TypeElement moveTypeForIntervals(LiveIntervals to, LiveIntervals from) {
TypeElement toType = to.getValue().getType();
TypeElement fromType = from.getValue().getType();
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/EmulateDispatchSyntheticCfCodeProvider.java b/src/main/java/com/android/tools/r8/ir/synthetic/EmulateDispatchSyntheticCfCodeProvider.java
index 7b43ba8..9caa410 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/EmulateDispatchSyntheticCfCodeProvider.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/EmulateDispatchSyntheticCfCodeProvider.java
@@ -111,6 +111,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void addReturn(List<CfInstruction> instructions) {
if (interfaceMethod.proto.returnType == appView.dexItemFactory().voidType) {
instructions.add(new CfReturnVoid());
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/EnumUnboxingCfCodeProvider.java b/src/main/java/com/android/tools/r8/ir/synthetic/EnumUnboxingCfCodeProvider.java
index da1d23f..378f813 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/EnumUnboxingCfCodeProvider.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/EnumUnboxingCfCodeProvider.java
@@ -51,6 +51,7 @@
super(appView, holder);
}
+ @SuppressWarnings("ReferenceEquality")
void addCfInstructionsForAbstractValue(
List<CfInstruction> instructions, AbstractValue value, DexType returnType) {
// TODO(b/155368026): Support fields and const class fields.
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodBuilder.java b/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodBuilder.java
index 8d50c17..af638fb 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodBuilder.java
@@ -151,6 +151,7 @@
return this;
}
+ @SuppressWarnings("ReferenceEquality")
public CfCode build() {
assert validate();
int maxStack = 0;
@@ -215,6 +216,7 @@
localVariables);
}
+ @SuppressWarnings("ReferenceEquality")
private void maybeInsertArgumentCast(
int argumentIndex, DexType sourceArgumentType, Builder<CfInstruction> instructions) {
if (appInfoForCastArguments == null) {
@@ -283,6 +285,7 @@
+ (isStaticTarget() || isConstructorDelegate ? 0 : 1);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean validate() {
assert sourceMethod != null;
assert targetMethod != null;
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java
index 729f071..24e8151 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/ForwardMethodSourceCode.java
@@ -142,6 +142,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private boolean checkSignatures() {
List<DexType> sourceParams = new ArrayList<>();
if (receiver != null) {
@@ -174,6 +175,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
protected void prepareInstructions() {
// Prepare call arguments.
List<ValueType> argValueTypes = new ArrayList<>();
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/RecordCfCodeProvider.java b/src/main/java/com/android/tools/r8/ir/synthetic/RecordCfCodeProvider.java
index 5abcb38..1d328aa 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/RecordCfCodeProvider.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/RecordCfCodeProvider.java
@@ -114,6 +114,7 @@
return standardCfCodeFromInstructions(instructions);
}
+ @SuppressWarnings("ReferenceEquality")
private void loadFieldAsObject(List<CfInstruction> instructions, DexField field) {
DexItemFactory factory = appView.dexItemFactory();
instructions.add(new CfLoad(ValueType.OBJECT, 0));
diff --git a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
index c2bbb70..c1db29c 100644
--- a/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
+++ b/src/main/java/com/android/tools/r8/jar/CfApplicationWriter.java
@@ -499,6 +499,7 @@
visitor.visitEnd();
}
+ @SuppressWarnings("ReferenceEquality")
private void writeMethodParametersAnnotation(MethodVisitor visitor, DexAnnotation[] annotations) {
for (DexAnnotation annotation : annotations) {
if (annotation.annotation.type == appView.dexItemFactory().annotationMethodParameters) {
@@ -580,6 +581,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void writeAnnotationElement(AnnotationVisitor visitor, String name, DexValue value) {
switch (value.getValueKind()) {
case ANNOTATION:
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
index d59a9ca..c18c564 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassInfo.java
@@ -284,11 +284,13 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public KotlinClassInfo asClass() {
return this;
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public Pair<Metadata, Boolean> rewrite(DexClass clazz, AppView<?> appView) {
KmClass kmClass = new KmClass();
// TODO(b/154348683): Set flags.
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
index 9abed29..0c159d2 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinDeclarationContainerInfo.java
@@ -179,6 +179,7 @@
return builder.build();
}
+ @SuppressWarnings("ReferenceEquality")
boolean rewrite(
Consumer<KmFunction> functionConsumer,
Consumer<KmProperty> propertyConsumer,
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataEnqueuerExtension.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataEnqueuerExtension.java
index dd7f94a..a376f4a 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataEnqueuerExtension.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataEnqueuerExtension.java
@@ -53,6 +53,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void done(Enqueuer enqueuer) {
// In the first round of tree shaking build up all metadata such that it can be traced later.
boolean keepKotlinMetadata =
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
index 583bd40..5e707db 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataRewriter.java
@@ -80,6 +80,7 @@
this.kotlin = factory.kotlin;
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean isNotKotlinMetadata(DexAnnotation annotation, DexType kotlinMetadataType) {
return annotation.annotation.type != kotlinMetadataType;
}
@@ -163,6 +164,7 @@
executorService);
}
+ @SuppressWarnings("ReferenceEquality")
private void writeKotlinInfoToAnnotation(
DexClass clazz,
KotlinClassLevelInfo kotlinInfo,
@@ -220,6 +222,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean kotlinMetadataFieldExists(
DexClass kotlinMetadata, AppView<?> appView, DexString fieldName) {
if (!appView.appInfo().hasLiveness()) {
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataUtils.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataUtils.java
index bece7b9..b5de2c0 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataUtils.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataUtils.java
@@ -118,6 +118,7 @@
kmProperty.accept(
new KmPropertyVisitor() {
@Override
+ @SuppressWarnings("ReferenceEquality")
public KmPropertyExtensionVisitor visitExtensions(KmExtensionType type) {
if (type != JvmPropertyExtensionVisitor.TYPE) {
return null;
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataWriter.java b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataWriter.java
index f00c011..a266093 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataWriter.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinMetadataWriter.java
@@ -48,6 +48,7 @@
static final String INDENT = " ";
+ @SuppressWarnings("ReferenceEquality")
public static void writeKotlinMetadataAnnotation(
String prefix, DexAnnotation annotation, PrintStream ps, Kotlin kotlin) {
assert annotation.annotation.type == kotlin.factory.kotlinMetadataType;
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
index 2fb5dd1..23c7d92 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClassInfo.java
@@ -106,6 +106,7 @@
return metadataVersion;
}
+ @SuppressWarnings("ReferenceEquality")
public static Flavour getFlavour(DexClass clazz, Kotlin kotlin) {
// Returns KotlinStyleLambda if the given clazz has shape of a Kotlin-style lambda:
// a class that directly extends kotlin.jvm.internal.Lambda
diff --git a/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java b/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
index 2b04e91..58e4a54 100644
--- a/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
+++ b/src/main/java/com/android/tools/r8/lightir/Lir2IRConverter.java
@@ -288,6 +288,7 @@
: null;
}
+ @SuppressWarnings("ReferenceEquality")
public void parseArguments(ProgramMethod method) {
ArgumentInfoCollection argumentsInfo = protoChanges.getArgumentInfoCollection();
currentBlock = getBasicBlock(ENTRY_BLOCK_INDEX);
@@ -339,6 +340,7 @@
advanceNextPositionEntry();
}
+ @SuppressWarnings("ReferenceEquality")
public void ensureDebugInfo() {
if (code.getDebugLocalInfoTable() == null) {
return;
diff --git a/src/main/java/com/android/tools/r8/lightir/LirBuilder.java b/src/main/java/com/android/tools/r8/lightir/LirBuilder.java
index d21044f..927e17f 100644
--- a/src/main/java/com/android/tools/r8/lightir/LirBuilder.java
+++ b/src/main/java/com/android/tools/r8/lightir/LirBuilder.java
@@ -764,6 +764,7 @@
return addNoOperandInstruction(LirOpcodes.RETURN);
}
+ @SuppressWarnings("ReferenceEquality")
public LirBuilder<V, EV> addDebugPosition(Position position) {
assert currentPosition == position;
return addNoOperandInstruction(LirOpcodes.DEBUGPOS);
diff --git a/src/main/java/com/android/tools/r8/lightir/LirStrategy.java b/src/main/java/com/android/tools/r8/lightir/LirStrategy.java
index 2f0d90b..cd3511a 100644
--- a/src/main/java/com/android/tools/r8/lightir/LirStrategy.java
+++ b/src/main/java/com/android/tools/r8/lightir/LirStrategy.java
@@ -292,6 +292,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public Value getValueDefinitionForInstructionIndex(
int index, TypeElement type, Function<PhiOrValue, DebugLocalInfo> getLocalInfo) {
PhiOrValue encodedValue = new PhiOrValue(index);
diff --git a/src/main/java/com/android/tools/r8/lightir/PhiInInstructionsStrategy.java b/src/main/java/com/android/tools/r8/lightir/PhiInInstructionsStrategy.java
index 0a26062..e628667 100644
--- a/src/main/java/com/android/tools/r8/lightir/PhiInInstructionsStrategy.java
+++ b/src/main/java/com/android/tools/r8/lightir/PhiInInstructionsStrategy.java
@@ -119,6 +119,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public Value getValueDefinitionForInstructionIndex(
int index, TypeElement type, Function<Integer, DebugLocalInfo> getLocalInfo) {
DebugLocalInfo localInfo = getLocalInfo.apply(index);
diff --git a/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java b/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java
index ad33448..80208b8 100644
--- a/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java
+++ b/src/main/java/com/android/tools/r8/naming/ClassNameMapper.java
@@ -378,6 +378,7 @@
return new ClassNameMapper(builder.build(), mapVersions, originalSourceFiles, preamble);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean verifyIsSorted() {
Iterator<Entry<String, ClassNamingForNameMapper>> iterator =
getClassNameMappings().entrySet().iterator();
diff --git a/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java b/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java
index f45b126..02afaab 100644
--- a/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java
+++ b/src/main/java/com/android/tools/r8/naming/ComposingBuilder.java
@@ -685,6 +685,7 @@
return composedRanges;
}
+ @SuppressWarnings("ReferenceEquality")
private List<MappedRange> fixupInlinedOutlines(
ComputedOutlineInformation computedOutlineInformation, List<MappedRange> composedRanges)
throws MappingComposeException {
diff --git a/src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java b/src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java
index 618e1f5..2f4b4b9 100644
--- a/src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/FieldNameMinifier.java
@@ -98,6 +98,7 @@
type, ignore -> new ReservedFieldNamingState(appView));
}
+ @SuppressWarnings("ReferenceEquality")
private void reserveFieldNames() {
// Build up all reservations in the class hierarchy such that all reserved names are placed
// at the boundary between a library class and a program class - referred to as the frontier.
@@ -213,6 +214,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
private void renameFieldsInUnrelatedClasspathClasses() {
if (appView.options().getProguardConfiguration().hasApplyMappingFile()) {
appView
@@ -272,6 +274,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private DexString renameField(ProgramField field, FieldNamingState state) {
DexString newName = state.getOrCreateNameFor(field);
if (newName != field.getReference().name) {
@@ -290,6 +293,7 @@
fieldAccessInfo.forEachIndirectAccess(this::renameNonReboundAccessToField);
}
+ @SuppressWarnings("ReferenceEquality")
private void renameNonReboundAccessToField(DexField field) {
// If the given field reference is a non-rebound reference to a program field, then assign the
// same name as the resolved field.
@@ -333,6 +337,7 @@
return partitions;
}
+ @SuppressWarnings("ReferenceEquality")
private Set<DexClass> buildSortedPartition(DexClass src) {
Set<DexClass> partition = new TreeSet<>(Comparator.comparing(DexClass::getType));
diff --git a/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java b/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java
index fce5c53..2928629 100644
--- a/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java
@@ -127,6 +127,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private DexString getRenamedStringLiteral(DexString originalLiteral) {
String descriptor =
DescriptorUtils.javaTypeToDescriptorIfValidJavaType(originalLiteral.toString());
diff --git a/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java b/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
index 7f17e72..caf0a51 100644
--- a/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
+++ b/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
@@ -333,6 +333,7 @@
return iterator;
}
+ @SuppressWarnings("ReferenceEquality")
private int getIdentifierPositionInArguments(InvokeMethod invoke) {
DexType returnType = invoke.getReturnType();
if (isClassNameComparison(invoke, appView.dexItemFactory())) {
diff --git a/src/main/java/com/android/tools/r8/naming/IdentifierNameStringUtils.java b/src/main/java/com/android/tools/r8/naming/IdentifierNameStringUtils.java
index c9438e7..9700c94 100644
--- a/src/main/java/com/android/tools/r8/naming/IdentifierNameStringUtils.java
+++ b/src/main/java/com/android/tools/r8/naming/IdentifierNameStringUtils.java
@@ -49,6 +49,7 @@
* @param method to test
* @return {@code true} if the given {@param method} is a reflection method in Java.
*/
+ @SuppressWarnings("ReferenceEquality")
public static boolean isReflectionMethod(DexItemFactory dexItemFactory, DexMethod method) {
// So, why is this simply not like:
// return dexItemFactory.classMethods.isReflectiveClassLookup(method)
@@ -178,6 +179,7 @@
&& isClassNameComparison(invoke.asInvokeVirtual(), dexItemFactory);
}
+ @SuppressWarnings("ReferenceEquality")
static boolean isClassNameComparison(InvokeVirtual invoke, DexItemFactory dexItemFactory) {
return invoke.getInvokedMethod() == dexItemFactory.stringMembers.equals
&& (isClassNameValue(invoke.getReceiver(), dexItemFactory)
@@ -202,6 +204,7 @@
* @return {@link DexReference} corresponding to the first constant string argument that matches a
* class or member name, or {@code null} if no such constant was found.
*/
+ @SuppressWarnings("ReferenceEquality")
public static IdentifierNameStringLookupResult<?> identifyIdentifier(
InvokeMethod invoke, DexDefinitionSupplier definitions, ProgramMethod context) {
DexItemFactory dexItemFactory = definitions.dexItemFactory();
@@ -378,6 +381,7 @@
return itemBasedString;
}
+ @SuppressWarnings("ReferenceEquality")
private static DexField inferFieldInHolder(DexClass holder, String name, DexType fieldType) {
for (DexEncodedField encodedField : holder.fields()) {
if (encodedField.getReference().name.toString().equals(name)
@@ -527,6 +531,7 @@
* @param classListValue the register that holds an array of {@link Class}'s
* @return a list of {@link DexType} that corresponds to const class in {@param classListValue}
*/
+ @SuppressWarnings("ReferenceEquality")
private static DexTypeList retrieveDexTypeListFromClassList(
InvokeMethod invoke, Value classListValue, DexItemFactory factory) {
diff --git a/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java b/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java
index d607d71..ef75e94 100644
--- a/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/InterfaceMethodNameMinifier.java
@@ -260,6 +260,7 @@
callSites.add(callSite);
}
+ @SuppressWarnings("ReferenceEquality")
DexString getReservedName() {
if (methodStates.isEmpty()) {
return null;
@@ -410,6 +411,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
void assignNamesToInterfaceMethods(Timing timing, Iterable<DexClass> interfaces) {
timing.begin("Interface minification");
// Reserve all the names that are required for interfaces.
diff --git a/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java b/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java
index 3c53944..64e6247 100644
--- a/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/MethodNameMinifier.java
@@ -96,6 +96,7 @@
// from the method name minifier to the interface method name minifier.
class State {
+ @SuppressWarnings("ReferenceEquality")
void putRenaming(DexEncodedMethod key, DexString newName) {
if (newName != key.getName()) {
renaming.put(key.getReference(), newName);
@@ -242,6 +243,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
private void renameMethodsInUnrelatedClasspathClasses() {
if (appView.options().getProguardConfiguration().hasApplyMappingFile()) {
appView
@@ -258,6 +260,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void assignNameToMethod(
DexClass holder, DexEncodedMethod method, MethodNamingState<?> state) {
if (method.isInitializer()) {
@@ -276,6 +279,7 @@
state.addRenaming(newName, method);
}
+ @SuppressWarnings("ReferenceEquality")
private void reserveNamesInClasses() {
// Ensure reservation state for java.lang.Object is always created, even if the type is missing.
allocateReservationStateAndReserve(
@@ -317,6 +321,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private MethodNamingState<?> getOrAllocateMethodNamingStates(DexType type) {
MethodNamingState<?> namingState = namingStates.get(type);
if (namingState == null) {
@@ -372,6 +377,7 @@
renaming.putAll(nonReboundRenamings);
}
+ @SuppressWarnings("ReferenceEquality")
private void renameNonReboundMethodReference(
DexMethod method, Map<DexMethod, DexString> nonReboundRenamings) {
if (method.getHolderType().isArrayType()) {
diff --git a/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java b/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java
index d4b20fe..d6028ef 100644
--- a/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java
+++ b/src/main/java/com/android/tools/r8/naming/MinifiedRenaming.java
@@ -100,6 +100,7 @@
* renaming of the resolution target of {@param method}.
*/
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean verifyRenamingConsistentWithResolution(DexMethod method) {
if (method.holder.isArrayType()) {
// Array methods are never renamed, so do not bother to check.
diff --git a/src/main/java/com/android/tools/r8/naming/NamingLens.java b/src/main/java/com/android/tools/r8/naming/NamingLens.java
index ca69f67..ed4bbbb 100644
--- a/src/main/java/com/android/tools/r8/naming/NamingLens.java
+++ b/src/main/java/com/android/tools/r8/naming/NamingLens.java
@@ -41,6 +41,7 @@
public abstract DexString lookupDescriptor(DexType type);
+ @SuppressWarnings("ReferenceEquality")
public DexString lookupClassDescriptor(DexType type) {
assert type.isClassType();
return internalLookupClassDescriptor(type);
@@ -52,6 +53,7 @@
public abstract DexString lookupName(DexMethod method);
+ @SuppressWarnings("ReferenceEquality")
public final DexString lookupMethodName(DexCallSite callSite, AppView<?> appView) {
if (!appView.appInfo().hasLiveness()) {
return callSite.methodName;
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
index 38a950d..75322ca 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapMinifier.java
@@ -299,6 +299,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void checkAndAddMappedNames(DexType type, DexString mappedName, Position position) {
if (mappedNames.inverse().containsKey(mappedName)
&& mappedNames.inverse().get(mappedName) != type) {
@@ -333,6 +334,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void computeDefaultInterfaceMethodMappingsForType(
DexType type,
ClassNamingForMapApplier classNaming,
@@ -439,6 +441,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public DexString next(
DexEncodedMethod method,
InternalNamingState internalState,
@@ -539,6 +542,7 @@
private final Set<DexReference> unmappedReferences;
private final Map<DexString, DexType> classRenamingsMappingToDifferentName;
+ @SuppressWarnings("ReferenceEquality")
ProguardMapMinifiedRenaming(
AppView<? extends AppInfoWithClassHierarchy> appView,
ClassRenaming classRenaming,
diff --git a/src/main/java/com/android/tools/r8/naming/ProguardMapReader.java b/src/main/java/com/android/tools/r8/naming/ProguardMapReader.java
index 50f9d4d..84b7242 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapReader.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapReader.java
@@ -340,6 +340,7 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
private void parseMemberMappings(
ProguardMap.Builder mapBuilder, ClassNaming.Builder classNamingBuilder) throws IOException {
MemberNaming lastAddedNaming = null;
diff --git a/src/main/java/com/android/tools/r8/naming/RecordRewritingNamingLens.java b/src/main/java/com/android/tools/r8/naming/RecordRewritingNamingLens.java
index 9fdb66a..c6d68d3 100644
--- a/src/main/java/com/android/tools/r8/naming/RecordRewritingNamingLens.java
+++ b/src/main/java/com/android/tools/r8/naming/RecordRewritingNamingLens.java
@@ -41,6 +41,7 @@
return getRenaming(type) != null;
}
+ @SuppressWarnings("ReferenceEquality")
private DexString getRenaming(DexType type) {
if (type == factory.recordType) {
return factory.recordTagType.descriptor;
diff --git a/src/main/java/com/android/tools/r8/naming/VarHandleDesugaringRewritingNamingLens.java b/src/main/java/com/android/tools/r8/naming/VarHandleDesugaringRewritingNamingLens.java
index 0d7078f..1d1dceb 100644
--- a/src/main/java/com/android/tools/r8/naming/VarHandleDesugaringRewritingNamingLens.java
+++ b/src/main/java/com/android/tools/r8/naming/VarHandleDesugaringRewritingNamingLens.java
@@ -24,6 +24,7 @@
private final NamingLens namingLens;
private final Map<DexType, DexString> mapping;
+ @SuppressWarnings("ReferenceEquality")
public static NamingLens createVarHandleDesugaringRewritingNamingLens(AppView<?> appView) {
DexItemFactory factory = appView.dexItemFactory();
if (appView.options().shouldDesugarVarHandle()
@@ -102,6 +103,7 @@
return getRenaming(type) != null;
}
+ @SuppressWarnings("ReferenceEquality")
private DexString getRenaming(DexType type) {
assert type != factory.desugarMethodHandlesLookupType;
assert type != factory.desugarVarHandleType;
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
index 8749939..82a9980 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
@@ -284,6 +284,7 @@
methodAccessInfoCollection::forEachStaticInvoke, this::resolveMethod, InvokeType.STATIC);
}
+ @SuppressWarnings("ReferenceEquality")
private void computeMethodRebinding(
BiForEachable<DexMethod, ProgramMethodSet> methodsWithContexts,
Function<DexMethod, MethodResolutionResult> resolver,
@@ -442,6 +443,7 @@
return findHolderForInterfaceMethodBridge(superClass.asProgramClass(), iface);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean mayNeedBridgeForVisibility(ProgramMethod context, DexClassAndMethod method) {
DexType holderType = method.getHolderType();
DexClass holder = appView.definitionFor(holderType);
@@ -529,6 +531,7 @@
appView.notifyOptimizationFinishedForTesting();
}
+ @SuppressWarnings("ReferenceEquality")
private boolean verifyFieldAccessCollectionContainsAllNonReboundFieldReferences(
ExecutorService executorService) throws ExecutionException {
Set<DexField> nonReboundFieldReferences = computeNonReboundFieldReferences(executorService);
@@ -582,6 +585,7 @@
registerFieldReference(field);
}
+ @SuppressWarnings("ReferenceEquality")
private void registerFieldReference(DexField field) {
appView()
.appInfo()
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java
index a310d2b..616ac22 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLens.java
@@ -85,6 +85,7 @@
.build();
}
+ @SuppressWarnings("ReferenceEquality")
private DexMethod getReboundMethodReference(DexMethod method) {
DexMethod rebound = nonReboundMethodReferenceToDefinitionMap.get(method);
assert method != rebound;
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLensFactory.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLensFactory.java
index d95c587..7367af3 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLensFactory.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingIdentityLensFactory.java
@@ -143,6 +143,7 @@
registerFieldAccess(field);
}
+ @SuppressWarnings("ReferenceEquality")
private void registerFieldAccess(DexField field) {
if (!seenFieldReferences.add(field)) {
return;
@@ -204,6 +205,7 @@
registerInvokeMethod(method, methodAccessInfoCollectionBuilder.getVirtualInvokes());
}
+ @SuppressWarnings("ReferenceEquality")
private void registerInvokeMethod(DexMethod method, Map<DexMethod, ProgramMethodSet> invokes) {
if (!seenMethodReferences.add(method)) {
return;
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java
index 15b6ae9..283581a 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingLens.java
@@ -125,6 +125,7 @@
this.appView = appView;
}
+ @SuppressWarnings("ReferenceEquality")
public void map(DexMethod from, DexMethod to, InvokeType type) {
if (from == to) {
assert !methodMaps.containsKey(type) || methodMaps.get(type).getOrDefault(from, to) == to;
diff --git a/src/main/java/com/android/tools/r8/optimize/MemberRebindingUtils.java b/src/main/java/com/android/tools/r8/optimize/MemberRebindingUtils.java
index 1b72c3a..cfb4f09 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingUtils.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingUtils.java
@@ -13,6 +13,7 @@
public class MemberRebindingUtils {
+ @SuppressWarnings("ReferenceEquality")
public static boolean isNonReboundMethodReference(
AppView<? extends AppInfoWithClassHierarchy> appView,
DexMethod method,
diff --git a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifier.java b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifier.java
index b388d09..fba2f6f 100644
--- a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifier.java
+++ b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifier.java
@@ -157,6 +157,7 @@
method -> publicizeMethod(method, localNamingState, namingState, traversalState));
}
+ @SuppressWarnings("ReferenceEquality")
private DexEncodedMethod publicizeMethod(
ProgramMethod method,
BiMap<DexMethod, DexMethod> localNamingState,
@@ -207,6 +208,7 @@
return commitMethod(method, localNamingState, namingState);
}
+ @SuppressWarnings("ReferenceEquality")
private DexMethod getAndReserveNewMethodReference(
ProgramMethod method,
BiMap<DexMethod, DexMethod> localNamingState,
@@ -308,6 +310,7 @@
method, getAndReserveNewMethodReference(method, localNamingState, namingState));
}
+ @SuppressWarnings("ReferenceEquality")
private DexEncodedMethod commitMethod(ProgramMethod method, DexMethod newMethodReference) {
DexProgramClass holder = method.getHolder();
if (newMethodReference != method.getReference()) {
diff --git a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierLens.java b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierLens.java
index 8810cd6..8a649e1 100644
--- a/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/accessmodification/AccessModifierLens.java
@@ -56,6 +56,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public MethodLookupResult internalDescribeLookupMethod(
MethodLookupResult previous, DexMethod context, GraphLens codeLens) {
assert !previous.hasReboundReference();
@@ -95,6 +96,7 @@
return this;
}
+ @SuppressWarnings("ReferenceEquality")
public Builder recordMove(DexMethod from, DexMethod to) {
assert from != to;
synchronized (methodMap) {
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java
index b5818fd..4f97afa 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorApplicationFixer.java
@@ -88,6 +88,7 @@
builder -> builder.setGenericSignature(FieldTypeSignature.noSignature())));
}
+ @SuppressWarnings("ReferenceEquality")
private void fixupMethods(DexProgramClass clazz) {
MethodCollection methodCollection = clazz.getMethodCollection();
methodCollection.replaceMethods(
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
index c42b054..0d98394 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorCodeScanner.java
@@ -517,6 +517,7 @@
: new ConcretePrimitiveTypeParameterState(abstractValue);
}
+ @SuppressWarnings("ReferenceEquality")
private DexMethod getRepresentative(InvokeMethod invoke, ProgramMethod resolvedMethod) {
if (resolvedMethod.getDefinition().belongsToDirectPool()) {
return resolvedMethod.getReference();
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorGraphLens.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorGraphLens.java
index af130e8..d20c06b 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorGraphLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorGraphLens.java
@@ -57,6 +57,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
protected FieldLookupResult internalDescribeLookupField(FieldLookupResult previous) {
FieldLookupResult lookupResult = super.internalDescribeLookupField(previous);
if (lookupResult.getReference().getType() != previous.getReference().getType()) {
@@ -124,12 +125,14 @@
return this;
}
+ @SuppressWarnings("ReferenceEquality")
public Builder recordMove(DexField from, DexField to) {
assert from != to;
newFieldSignatures.put(from, to);
return this;
}
+ @SuppressWarnings("ReferenceEquality")
public Builder recordMove(
DexMethod from, DexMethod to, RewrittenPrototypeDescription prototypeChangesForMethod) {
assert from != to;
@@ -160,6 +163,7 @@
return argumentPropagatorGraphLens;
}
+ @SuppressWarnings("ReferenceEquality")
private void fixupPrototypeChangesAfterFieldSignatureChanges(
ArgumentPropagatorGraphLens argumentPropagatorGraphLens) {
for (Entry<DexMethod, RewrittenPrototypeDescription> entry : prototypeChanges.entrySet()) {
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java
index aa0bde9..85c77a4 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorMethodReprocessingEnqueuer.java
@@ -186,6 +186,7 @@
registerInvokeMethod(method);
}
+ @SuppressWarnings("ReferenceEquality")
private void registerInvokeMethod(DexMethod method) {
SingleResolutionResult<?> resolutionResult =
appView.appInfo().unsafeResolveMethodDueToDexFormatLegacy(method).asSingleResolution();
@@ -222,6 +223,7 @@
registerFieldAccess(field);
}
+ @SuppressWarnings("ReferenceEquality")
private void registerFieldAccess(DexField field) {
FieldResolutionResult resolutionResult = appView.appInfo().resolveField(field);
if (resolutionResult.getSingleProgramField() == null) {
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorProgramOptimizer.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorProgramOptimizer.java
index 94a7d22..c4d5fee 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorProgramOptimizer.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/ArgumentPropagatorProgramOptimizer.java
@@ -158,6 +158,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object obj) {
if (obj == null || getClass() != obj.getClass()) {
return false;
@@ -347,6 +348,7 @@
newMethodSignature, new Pair<>(allowedPrototypeChanges, originalMethodSignature));
}
+ @SuppressWarnings("ReferenceEquality")
private void computePrototypeChangesForVirtualMethods(
Set<DexProgramClass> stronglyConnectedProgramClasses,
DexMethodSignatureSet interfaceDispatchOutsideProgram) {
@@ -524,6 +526,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private DexType getNewReturnTypeForVirtualMethods(
ProgramMethodSet methods, SingleValue returnValue) {
if (returnValue != null || isReturnValueUnusedForVirtualMethods(methods)) {
@@ -557,6 +560,7 @@
&& method.getOptimizationInfo().isReturnValueUsed().isFalse());
}
+ @SuppressWarnings("ReferenceEquality")
private DexType getNewParameterTypeForVirtualMethods(
ProgramMethodSet methods, int parameterIndex) {
DexType newParameterType = null;
@@ -578,6 +582,7 @@
}
// Returns true if the class was changed as a result of argument propagation.
+ @SuppressWarnings("ReferenceEquality")
private boolean visitClass(
DexProgramClass clazz,
DexMethodSignatureSet interfaceDispatchOutsideProgram,
@@ -653,6 +658,7 @@
return affected.get();
}
+ @SuppressWarnings("ReferenceEquality")
private DexType getNewFieldType(ProgramField field) {
DynamicType dynamicType = field.getOptimizationInfo().getDynamicType();
DexType staticType = field.getType();
@@ -728,6 +734,7 @@
return newStaticFieldType;
}
+ @SuppressWarnings("ReferenceEquality")
private DexField getNewFieldSignature(
ProgramField field,
Set<DexField> newFieldSignatures,
@@ -964,6 +971,7 @@
method, method.getOptimizationInfo().isReturnValueUsed(), getReturnValue(method));
}
+ @SuppressWarnings("ReferenceEquality")
private DexType getNewReturnType(
ProgramMethod method, OptionalBool isReturnValueUsed, SingleValue returnValue) {
DexType staticType = method.getReturnType();
@@ -1026,6 +1034,7 @@
: null;
}
+ @SuppressWarnings("ReferenceEquality")
private DexType getNewParameterType(ProgramMethod method, int parameterIndex) {
if (!appView.getKeepInfo(method).isParameterTypeStrengtheningAllowed(options)) {
return null;
@@ -1081,6 +1090,7 @@
method, canBeConvertedToStaticMethod, newParameterTypes, removableParameterIndices));
}
+ @SuppressWarnings("ReferenceEquality")
private ArgumentInfoCollection computeParameterChangesForMethod(
ProgramMethod method,
boolean canBeConvertedToStaticMethod,
@@ -1147,6 +1157,7 @@
return parameterChangesBuilder.build();
}
+ @SuppressWarnings("ReferenceEquality")
private RewrittenTypeInfo computeReturnChangesForMethod(
ProgramMethod method, DexType newReturnType) {
if (newReturnType == null) {
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteClassTypeParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteClassTypeParameterState.java
index 2ef79c7..c0dab86 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteClassTypeParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcreteClassTypeParameterState.java
@@ -99,6 +99,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public ParameterState mutableJoin(
AppView<AppInfoWithLiveness> appView,
ConcreteReferenceTypeParameterState parameterState,
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcretePrimitiveTypeParameterState.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcretePrimitiveTypeParameterState.java
index 3b3f3cb..c0fc006 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcretePrimitiveTypeParameterState.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/ConcretePrimitiveTypeParameterState.java
@@ -50,6 +50,7 @@
return new ConcretePrimitiveTypeParameterState(abstractValue, copyInParameters());
}
+ @SuppressWarnings("ReferenceEquality")
public ParameterState mutableJoin(
AppView<AppInfoWithLiveness> appView,
ConcretePrimitiveTypeParameterState parameterState,
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/MethodParameter.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/MethodParameter.java
index b9c09de..21e3df1 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/MethodParameter.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/MethodParameter.java
@@ -26,6 +26,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object obj) {
if (obj == null || getClass() != obj.getClass()) {
return false;
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/VirtualRootMethodsAnalysis.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/VirtualRootMethodsAnalysis.java
index d33cfb8..422b122 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/VirtualRootMethodsAnalysis.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/codescanner/VirtualRootMethodsAnalysis.java
@@ -49,6 +49,7 @@
this.root = root;
}
+ @SuppressWarnings("ReferenceEquality")
void addOverride(ProgramMethod override) {
assert override != root;
assert override.getMethodSignature().equals(root.getMethodSignature());
diff --git a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/VirtualDispatchMethodArgumentPropagator.java b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/VirtualDispatchMethodArgumentPropagator.java
index 313b6ca..4b3349c 100644
--- a/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/VirtualDispatchMethodArgumentPropagator.java
+++ b/src/main/java/com/android/tools/r8/optimize/argumentpropagation/propagation/VirtualDispatchMethodArgumentPropagator.java
@@ -55,6 +55,7 @@
clazz, superclass -> addParentState(clazz, superclass));
}
+ @SuppressWarnings("ReferenceEquality")
// TODO(b/190154391): This currently copies the state of the superclass into its immediate
// given subclass. Instead of copying the state, consider linking the states. This would reduce
// memory usage, but would require visiting all transitive (program) super classes for each
@@ -159,6 +160,7 @@
return methodState;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean shouldActivateMethodStateGuardedByBounds(
ClassTypeElement upperBound, DexProgramClass currentClass, DexProgramClass superClass) {
ClassTypeElement classType =
@@ -276,6 +278,7 @@
propagationStates.put(clazz, propagationState);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isUpperBoundSatisfied(ClassTypeElement upperBound, DexProgramClass currentClass) {
DexType upperBoundType =
upperBound.getClassType() == appView.dexItemFactory().objectType
diff --git a/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoisting.java b/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoisting.java
index 4a737f4..d8149d7 100644
--- a/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoisting.java
+++ b/src/main/java/com/android/tools/r8/optimize/bridgehoisting/BridgeHoisting.java
@@ -351,6 +351,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
private CfCode createCfCodeForVirtualBridge(CfCode code, DexMethod methodToInvoke) {
List<CfInstruction> newInstructions = new ArrayList<>();
boolean modified = false;
@@ -377,6 +378,7 @@
: code;
}
+ @SuppressWarnings("ReferenceEquality")
private DexCode createDexCodeForVirtualBridge(DexCode code, DexMethod methodToInvoke) {
DexInstruction[] newInstructions = new DexInstruction[code.instructions.length];
boolean modified = false;
diff --git a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfFrameState.java b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfFrameState.java
index b15a35f..fd8be1c 100644
--- a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfFrameState.java
+++ b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfFrameState.java
@@ -69,11 +69,13 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public CfFrameState asAbstractState() {
return this;
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean isGreaterThanOrEquals(AppView<?> appView, CfFrameState state) {
if (this == state) {
return true;
diff --git a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfOpenClosedInterfacesAnalysis.java b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfOpenClosedInterfacesAnalysis.java
index b870c4a..c33be3c 100644
--- a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfOpenClosedInterfacesAnalysis.java
+++ b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfOpenClosedInterfacesAnalysis.java
@@ -125,6 +125,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean isImmediateSuperClassOfCurrentContext(DexType type) {
return type == method.getHolder().getSuperType();
}
diff --git a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfOpenClosedInterfacesAnalysisHelper.java b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfOpenClosedInterfacesAnalysisHelper.java
index 515fa4e..e06916b 100644
--- a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfOpenClosedInterfacesAnalysisHelper.java
+++ b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/CfOpenClosedInterfacesAnalysisHelper.java
@@ -150,6 +150,7 @@
processAssignment(fromType, toType.toTypeElement(appView));
}
+ @SuppressWarnings("ReferenceEquality")
private void processAssignment(TypeElement fromType, TypeElement toType) {
// If the type is an interface type, then check that the assigned value is a subtype of the
// interface type, or mark the interface as open.
diff --git a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/ConcreteCfFrameState.java b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/ConcreteCfFrameState.java
index 86dd3d8..81fcbfd 100644
--- a/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/ConcreteCfFrameState.java
+++ b/src/main/java/com/android/tools/r8/optimize/interfaces/analysis/ConcreteCfFrameState.java
@@ -171,6 +171,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public CfFrameState pop(BiFunction<CfFrameState, PreciseFrameType, CfFrameState> fn) {
if (stack.isEmpty()) {
return error("Unexpected pop from empty stack");
@@ -181,6 +182,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public CfFrameState popAndInitialize(
AppView<?> appView, DexMethod constructor, CfAnalysisConfig config) {
return pop(
@@ -467,6 +469,7 @@
setSingleLocalToTop(localIndex, builder);
}
+ @SuppressWarnings("ReferenceEquality")
private void joinWideLocalsWithSameIndex(
int localIndex,
WidePrimitiveFrameType frameType,
diff --git a/src/main/java/com/android/tools/r8/optimize/interfaces/collection/OpenClosedInterfacesCollection.java b/src/main/java/com/android/tools/r8/optimize/interfaces/collection/OpenClosedInterfacesCollection.java
index b8d14cc..532c558 100644
--- a/src/main/java/com/android/tools/r8/optimize/interfaces/collection/OpenClosedInterfacesCollection.java
+++ b/src/main/java/com/android/tools/r8/optimize/interfaces/collection/OpenClosedInterfacesCollection.java
@@ -45,6 +45,7 @@
appView, () -> value.getDynamicType(appView), value.getType());
}
+ @SuppressWarnings("ReferenceEquality")
public final boolean isDefinitelyInstanceOfStaticType(
AppView<?> appView, Supplier<DynamicType> dynamicTypeSupplier, TypeElement staticType) {
if (!staticType.isClassType()) {
diff --git a/src/main/java/com/android/tools/r8/optimize/proto/ProtoNormalizer.java b/src/main/java/com/android/tools/r8/optimize/proto/ProtoNormalizer.java
index 47df2ba..3cac2b3 100644
--- a/src/main/java/com/android/tools/r8/optimize/proto/ProtoNormalizer.java
+++ b/src/main/java/com/android/tools/r8/optimize/proto/ProtoNormalizer.java
@@ -84,6 +84,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
protected TraversalContinuation<Void, LocalReservationState> joiner(
DFSNodeWithState<DexClass, LocalReservationState> node,
List<DFSNodeWithState<DexClass, LocalReservationState>> childStates) {
diff --git a/src/main/java/com/android/tools/r8/optimize/proto/ProtoNormalizerGraphLens.java b/src/main/java/com/android/tools/r8/optimize/proto/ProtoNormalizerGraphLens.java
index 2a7d000..74e3046 100644
--- a/src/main/java/com/android/tools/r8/optimize/proto/ProtoNormalizerGraphLens.java
+++ b/src/main/java/com/android/tools/r8/optimize/proto/ProtoNormalizerGraphLens.java
@@ -41,6 +41,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public RewrittenPrototypeDescription lookupPrototypeChangesForMethodDefinition(
DexMethod method, GraphLens codeLens) {
if (this == codeLens) {
@@ -57,6 +58,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
protected MethodLookupResult internalDescribeLookupMethod(
MethodLookupResult previous, DexMethod context, GraphLens codeLens) {
DexMethod methodSignature = previous.getReference();
@@ -100,6 +102,7 @@
this.appView = appView;
}
+ @SuppressWarnings("ReferenceEquality")
public RewrittenPrototypeDescription recordNewMethodSignature(
DexEncodedMethod method, DexMethod newMethodSignature) {
assert method.getReference() != newMethodSignature;
@@ -114,6 +117,7 @@
}
// TODO(b/195112263): Canonicalize the permutation maps.
+ @SuppressWarnings("ReferenceEquality")
private static RewrittenPrototypeDescription computePrototypeChanges(
DexEncodedMethod method, DexMethod newMethodSignature) {
int firstNonReceiverArgumentIndex = method.getFirstNonReceiverArgumentIndex();
diff --git a/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java b/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java
index d5c8736..53b3147 100644
--- a/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java
+++ b/src/main/java/com/android/tools/r8/optimize/redundantbridgeremoval/RedundantBridgeRemover.java
@@ -193,6 +193,7 @@
return traversal.getRemovedBridges();
}
+ @SuppressWarnings("ReferenceEquality")
private DexClassAndMethod getTargetForRedundantAbstractBridge(ProgramMethod method) {
if (!method.getAccessFlags().isAbstract() || method.getDefinition().getCode() != null) {
return null;
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java
index 3eee55a..f33323f 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfile.java
@@ -89,6 +89,7 @@
return (ArtProfileMethodRule) rules.get(method);
}
+ @SuppressWarnings("ReferenceEquality")
public int size() {
return rules.size();
}
@@ -111,6 +112,7 @@
methodRuleInfoBuilder.merge(methodRule.getMethodRuleInfo())));
}
+ @SuppressWarnings("ReferenceEquality")
public ArtProfile rewrittenWithLens(AppView<?> appView, EnumUnboxingLens lens) {
return transform(
(classRule, classRuleBuilderFactory) -> {
diff --git a/src/main/java/com/android/tools/r8/profile/art/ArtProfileClassRule.java b/src/main/java/com/android/tools/r8/profile/art/ArtProfileClassRule.java
index 55590a0..b09934e 100644
--- a/src/main/java/com/android/tools/r8/profile/art/ArtProfileClassRule.java
+++ b/src/main/java/com/android/tools/r8/profile/art/ArtProfileClassRule.java
@@ -69,6 +69,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object o) {
if (this == o) {
return true;
diff --git a/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingCfInstructionDesugaringEventConsumer.java b/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingCfInstructionDesugaringEventConsumer.java
index 3050741..9b4ceb2 100644
--- a/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingCfInstructionDesugaringEventConsumer.java
+++ b/src/main/java/com/android/tools/r8/profile/rewriting/ProfileRewritingCfInstructionDesugaringEventConsumer.java
@@ -193,6 +193,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
private void addLambdaVirtualMethodsIfLambdaImplementationIsInProfile(
LambdaClass lambdaClass, ProgramMethod context) {
Target target = lambdaClass.getTarget();
@@ -221,6 +222,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private boolean shouldConservativelyAddLambdaVirtualMethodsIfLambdaInstantiated(
LambdaClass lambdaClass, ProgramMethod context) {
Target target = lambdaClass.getTarget();
diff --git a/src/main/java/com/android/tools/r8/profile/startup/instrumentation/StartupInstrumentation.java b/src/main/java/com/android/tools/r8/profile/startup/instrumentation/StartupInstrumentation.java
index 8919b83..550458f 100644
--- a/src/main/java/com/android/tools/r8/profile/startup/instrumentation/StartupInstrumentation.java
+++ b/src/main/java/com/android/tools/r8/profile/startup/instrumentation/StartupInstrumentation.java
@@ -133,6 +133,7 @@
InstrumentationServerFactory.createClass(dexItemFactory), instrumentationServerImplClass);
}
+ @SuppressWarnings("ReferenceEquality")
private void instrumentClass(DexProgramClass clazz) {
// Do not instrument the instrumentation server if it is already in the app.
if (clazz.getType() == references.instrumentationServerType
diff --git a/src/main/java/com/android/tools/r8/profile/startup/profile/StartupProfileClassRule.java b/src/main/java/com/android/tools/r8/profile/startup/profile/StartupProfileClassRule.java
index 83aa6c8..f879adb 100644
--- a/src/main/java/com/android/tools/r8/profile/startup/profile/StartupProfileClassRule.java
+++ b/src/main/java/com/android/tools/r8/profile/startup/profile/StartupProfileClassRule.java
@@ -52,6 +52,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object o) {
if (this == o) {
return true;
diff --git a/src/main/java/com/android/tools/r8/profile/startup/profile/StartupProfileMethodRule.java b/src/main/java/com/android/tools/r8/profile/startup/profile/StartupProfileMethodRule.java
index bc5e098..5f8e2b5 100644
--- a/src/main/java/com/android/tools/r8/profile/startup/profile/StartupProfileMethodRule.java
+++ b/src/main/java/com/android/tools/r8/profile/startup/profile/StartupProfileMethodRule.java
@@ -52,6 +52,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object o) {
if (this == o) {
return true;
diff --git a/src/main/java/com/android/tools/r8/repackaging/Repackaging.java b/src/main/java/com/android/tools/r8/repackaging/Repackaging.java
index f4c023f..b79ae30 100644
--- a/src/main/java/com/android/tools/r8/repackaging/Repackaging.java
+++ b/src/main/java/com/android/tools/r8/repackaging/Repackaging.java
@@ -129,6 +129,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private RepackagingLens repackageClasses(
DirectMappedDexApplication.Builder appBuilder, ExecutorService executorService)
throws ExecutionException {
diff --git a/src/main/java/com/android/tools/r8/repackaging/RepackagingLens.java b/src/main/java/com/android/tools/r8/repackaging/RepackagingLens.java
index 81badc6..0b40c72 100644
--- a/src/main/java/com/android/tools/r8/repackaging/RepackagingLens.java
+++ b/src/main/java/com/android/tools/r8/repackaging/RepackagingLens.java
@@ -40,6 +40,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public <T extends DexReference> boolean isSimpleRenaming(T from, T to) {
if (from == to) {
assert false : "The from and to references should not be equal";
@@ -58,6 +59,7 @@
this::isSimpleTypeRenamingOrEqual);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isSimpleTypeRenamingOrEqual(DexType from, DexType to) {
return from == to || newTypes.get(from) == to;
}
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetraceFrameResultData.java b/src/main/java/com/android/tools/r8/retrace/internal/RetraceFrameResultData.java
index 639b1d5..c3cba5e 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetraceFrameResultData.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetraceFrameResultData.java
@@ -24,6 +24,7 @@
this.position = position;
}
+ @SuppressWarnings("ReferenceEquality")
boolean isAmbiguous() {
if (memberNamingWithMappedRanges == null) {
return false;
diff --git a/src/main/java/com/android/tools/r8/retrace/internal/RetracedMethodReferenceImpl.java b/src/main/java/com/android/tools/r8/retrace/internal/RetracedMethodReferenceImpl.java
index 8d7d20f..8f9e219 100644
--- a/src/main/java/com/android/tools/r8/retrace/internal/RetracedMethodReferenceImpl.java
+++ b/src/main/java/com/android/tools/r8/retrace/internal/RetracedMethodReferenceImpl.java
@@ -124,6 +124,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object o) {
if (this == o) {
return true;
diff --git a/src/main/java/com/android/tools/r8/shaking/AnnotationFixer.java b/src/main/java/com/android/tools/r8/shaking/AnnotationFixer.java
index eb92c40..65ada3d 100644
--- a/src/main/java/com/android/tools/r8/shaking/AnnotationFixer.java
+++ b/src/main/java/com/android/tools/r8/shaking/AnnotationFixer.java
@@ -65,6 +65,7 @@
return rewritten;
}
+ @SuppressWarnings("ReferenceEquality")
private DexAnnotationElement rewriteAnnotationElement(DexAnnotationElement original) {
DexValue rewrittenValue = rewriteComplexValue(original.value);
if (rewrittenValue != original.value) {
@@ -73,6 +74,7 @@
return original;
}
+ @SuppressWarnings("ReferenceEquality")
private DexValue rewriteComplexValue(DexValue value) {
if (value.isDexValueArray()) {
DexValue[] originalValues = value.asDexValueArray().getValues();
@@ -92,6 +94,7 @@
return rewriteNestedValue(value);
}
+ @SuppressWarnings("ReferenceEquality")
private DexValue rewriteNestedValue(DexValue value) {
if (value.isDexItemBasedValueString()) {
DexItemBasedValueString valueString = value.asDexItemBasedValueString();
diff --git a/src/main/java/com/android/tools/r8/shaking/AnnotationMatchResult.java b/src/main/java/com/android/tools/r8/shaking/AnnotationMatchResult.java
index c83cbfc..b21807c 100644
--- a/src/main/java/com/android/tools/r8/shaking/AnnotationMatchResult.java
+++ b/src/main/java/com/android/tools/r8/shaking/AnnotationMatchResult.java
@@ -81,6 +81,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object obj) {
if (obj == this) {
return true;
diff --git a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
index 1666178..c41d870 100644
--- a/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
+++ b/src/main/java/com/android/tools/r8/shaking/AnnotationRemover.java
@@ -261,6 +261,7 @@
return rewrite;
}
+ @SuppressWarnings("ReferenceEquality")
private DexAnnotationElement rewriteAnnotationElement(
DexType annotationType, DexAnnotationElement original) {
// The dalvik.annotation.AnnotationDefault is typically not on bootclasspath. However, if it
@@ -325,6 +326,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean shouldRetainRetentionAnnotationOnAnnotationClass(DexAnnotation annotation) {
// Retain @Retention annotations that are different from @Retention(RetentionPolicy.CLASS).
if (annotation.annotation.getNumberOfElements() != 1) {
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index 8f6b03f..927f14b 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -831,6 +831,7 @@
* @param callSite Call site to resolve.
* @return Methods implemented by the lambda expression that created the {@code callSite}.
*/
+ @SuppressWarnings("ReferenceEquality")
public Set<DexEncodedMethod> lookupLambdaImplementedMethods(
DexCallSite callSite, AppView<AppInfoWithLiveness> appView) {
assert checkIfObsolete();
@@ -996,6 +997,7 @@
&& !fieldAccessInfo.isWrittenOutside(method);
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isInstanceFieldWrittenOnlyInInstanceInitializers(DexClassAndField field) {
assert checkIfObsolete();
assert isFieldWritten(field) : "Expected field `" + field.toSourceString() + "` to be written";
@@ -1338,6 +1340,7 @@
appView, method, context, isInterface, modeledPredicate, DynamicType.unknown());
}
+ @SuppressWarnings("ReferenceEquality")
public DexEncodedMethod lookupSingleVirtualTarget(
AppView<AppInfoWithLiveness> appView,
DexMethod method,
@@ -1446,6 +1449,7 @@
return singleMethodTarget;
}
+ @SuppressWarnings("ReferenceEquality")
private DexEncodedMethod getMethodTargetFromExactRuntimeInformation(
DexType refinedReceiverType,
ClassTypeElement receiverLowerBoundType,
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index c2b3460..b6d4948 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -1101,6 +1101,7 @@
return info;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean registerFieldAccess(
DexField field, ProgramMethod context, boolean isRead, boolean isReflective) {
FieldAccessInfoImpl info = fieldAccessInfoCollection.get(field);
@@ -1234,6 +1235,7 @@
internalTraceConstClassOrCheckCast(type, currentMethod, true);
}
+ @SuppressWarnings("ReferenceEquality")
void traceConstClass(
DexType type,
ProgramMethod currentMethod,
@@ -1263,6 +1265,7 @@
*
* <p>Some common usages of const-class values are handled, such as calls to Class.get*Name().
*/
+ @SuppressWarnings("ReferenceEquality")
private boolean isConstClassMaybeUsedAsLock(
ProgramMethod currentMethod, ListIterator<? extends CfOrDexInstruction> iterator) {
if (iterator == null) {
@@ -1475,6 +1478,7 @@
traceInvokeStatic(invokedMethod, context, KeepReason.invokedFromLambdaCreatedIn(context));
}
+ @SuppressWarnings("ReferenceEquality")
private void traceInvokeStatic(
DexMethod invokedMethod, ProgramMethod context, KeepReason reason) {
DexItemFactory dexItemFactory = appView.dexItemFactory();
@@ -1524,6 +1528,7 @@
traceInvokeVirtual(invokedMethod, context, KeepReason.invokedFromLambdaCreatedIn(context));
}
+ @SuppressWarnings("ReferenceEquality")
private void traceInvokeVirtual(
DexMethod invokedMethod, ProgramMethod context, KeepReason reason) {
if (invokedMethod == appView.dexItemFactory().classMethods.newInstance
@@ -1680,6 +1685,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
void traceInstanceFieldRead(
DexField fieldReference, ProgramMethod currentMethod, FieldAccessMetadata metadata) {
if (!metadata.isDeferred() && !registerFieldRead(fieldReference, currentMethod)) {
@@ -1741,6 +1747,7 @@
traceInstanceFieldWrite(field, currentMethod, FieldAccessMetadata.FROM_METHOD_HANDLE);
}
+ @SuppressWarnings("ReferenceEquality")
void traceInstanceFieldWrite(
DexField fieldReference, ProgramMethod currentMethod, FieldAccessMetadata metadata) {
if (!metadata.isDeferred() && !registerFieldWrite(fieldReference, currentMethod)) {
@@ -1804,6 +1811,7 @@
traceStaticFieldRead(field, currentMethod, FieldAccessMetadata.FROM_METHOD_HANDLE);
}
+ @SuppressWarnings("ReferenceEquality")
void traceStaticFieldRead(
DexField fieldReference, ProgramMethod currentMethod, FieldAccessMetadata metadata) {
if (!metadata.isDeferred() && !registerFieldRead(fieldReference, currentMethod)) {
@@ -1884,6 +1892,7 @@
traceStaticFieldWrite(field, currentMethod, FieldAccessMetadata.FROM_METHOD_HANDLE);
}
+ @SuppressWarnings("ReferenceEquality")
void traceStaticFieldWrite(
DexField fieldReference, ProgramMethod currentMethod, FieldAccessMetadata metadata) {
if (!metadata.isDeferred() && !registerFieldWrite(fieldReference, currentMethod)) {
@@ -2180,6 +2189,7 @@
analyses.forEach(analysis -> analysis.processNewlyLiveClass(clazz, workList));
}
+ @SuppressWarnings("ReferenceEquality")
private void processDeferredAnnotations(
DexProgramClass clazz,
Map<DexType, Map<DexAnnotation, List<ProgramDefinition>>> deferredAnnotations,
@@ -2945,6 +2955,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
private void markLibraryAndClasspathMethodOverridesAsLive(
InstantiatedObject instantiation, DexClass libraryClass) {
assert libraryClass.isNotProgramClass();
@@ -4188,6 +4199,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private EnqueuerResult createEnqueuerResult(AppInfoWithClassHierarchy appInfo, Timing timing)
throws ExecutionException {
timing.begin("Remove dead protos");
@@ -4632,6 +4644,7 @@
private final Map<DexMethod, InterfaceMethodSyntheticBridgeAction>
syntheticInterfaceMethodBridges = new LinkedHashMap<>();
+ @SuppressWarnings("ReferenceEquality")
private void identifySyntheticInterfaceMethodBridges(
InterfaceMethodSyntheticBridgeAction action) {
ProgramMethod methodToKeep = action.getMethodToKeep();
@@ -4938,6 +4951,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void handleReflectiveBehavior(ProgramMethod method, Instruction instruction) {
if (!instruction.isInvokeMethod()) {
return;
@@ -5082,6 +5096,7 @@
}
/** Handles reflective uses of {@link java.lang.reflect.Constructor#newInstance(Object...)}. */
+ @SuppressWarnings("ReferenceEquality")
private void handleJavaLangReflectConstructorNewInstance(
ProgramMethod method, InvokeMethod invoke) {
if (!invoke.isInvokeVirtual()) {
@@ -5476,6 +5491,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean addField(DexField fieldReference) {
recordFieldReference(fieldReference, context);
DexProgramClass holder = getProgramHolderOrNull(fieldReference, context);
@@ -5517,6 +5533,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean addMethod(DexMethod method) {
// Record the references in case they are not program types.
recordMethodReference(method, context);
@@ -5592,6 +5609,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) {
return false;
diff --git a/src/main/java/com/android/tools/r8/shaking/EnqueuerEvent.java b/src/main/java/com/android/tools/r8/shaking/EnqueuerEvent.java
index e43b081..62017f6 100644
--- a/src/main/java/com/android/tools/r8/shaking/EnqueuerEvent.java
+++ b/src/main/java/com/android/tools/r8/shaking/EnqueuerEvent.java
@@ -124,6 +124,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public EnqueuerEvent rewrittenWithLens(GraphLens lens) {
DexType rewrittenType = lens.lookupType(getType());
if (rewrittenType == getType()) {
@@ -136,6 +137,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object obj) {
if (obj == this) {
return true;
@@ -174,6 +176,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public EnqueuerEvent rewrittenWithLens(GraphLens lens) {
DexType rewrittenType = lens.lookupType(getType());
if (rewrittenType == getType()) {
@@ -186,6 +189,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean equals(Object obj) {
if (obj == this) {
return true;
diff --git a/src/main/java/com/android/tools/r8/shaking/EnqueuerWorklist.java b/src/main/java/com/android/tools/r8/shaking/EnqueuerWorklist.java
index 4e99cc6..d0ae107 100644
--- a/src/main/java/com/android/tools/r8/shaking/EnqueuerWorklist.java
+++ b/src/main/java/com/android/tools/r8/shaking/EnqueuerWorklist.java
@@ -377,6 +377,7 @@
this.metadata = metadata;
}
+ @SuppressWarnings("ReferenceEquality")
protected boolean baseEquals(TraceFieldAccessAction action) {
return field == action.field
&& context.isStructurallyEqualTo(action.context)
diff --git a/src/main/java/com/android/tools/r8/shaking/GraphReporter.java b/src/main/java/com/android/tools/r8/shaking/GraphReporter.java
index c3bd5fd..40b2940 100644
--- a/src/main/java/com/android/tools/r8/shaking/GraphReporter.java
+++ b/src/main/java/com/android/tools/r8/shaking/GraphReporter.java
@@ -179,6 +179,7 @@
return KeepReasonWitness.INSTANCE;
}
+ @SuppressWarnings("ReferenceEquality")
public KeepReasonWitness reportCompatKeepDefaultInitializer(ProgramMethod defaultInitializer) {
assert defaultInitializer.getHolder().getDefaultInitializer()
== defaultInitializer.getDefinition();
@@ -265,6 +266,7 @@
return KeepReasonWitness.INSTANCE;
}
+ @SuppressWarnings("ReferenceEquality")
public KeepReasonWitness reportReachableMethodAsLive(
DexMethod overriddenMethod, ProgramMethod derivedMethod) {
if (keptGraphConsumer != null
diff --git a/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java b/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
index f56779b..06fee94 100644
--- a/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
+++ b/src/main/java/com/android/tools/r8/shaking/IfRuleEvaluator.java
@@ -224,6 +224,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean evaluateIfRuleMembersAndMaterialize(
ProguardIfRule rule, DexClass sourceClass, DexClass targetClass) {
Collection<ProguardMemberRule> memberKeepRules = rule.getMemberRules();
diff --git a/src/main/java/com/android/tools/r8/shaking/KeepInfoCollection.java b/src/main/java/com/android/tools/r8/shaking/KeepInfoCollection.java
index f9c2474..fcabc9d 100644
--- a/src/main/java/com/android/tools/r8/shaking/KeepInfoCollection.java
+++ b/src/main/java/com/android/tools/r8/shaking/KeepInfoCollection.java
@@ -113,6 +113,7 @@
return getMethodInfo(method.getDefinition(), method.getHolder());
}
+ @SuppressWarnings("ReferenceEquality")
public final KeepMethodInfo getMethodInfo(
DexEncodedMethod method, DexDefinitionSupplier definitions) {
DexProgramClass holder =
@@ -139,6 +140,7 @@
return getFieldInfo(field.getDefinition(), field.getHolder());
}
+ @SuppressWarnings("ReferenceEquality")
public final KeepFieldInfo getFieldInfo(
DexEncodedField field, DexDefinitionSupplier definitions) {
DexProgramClass holder =
@@ -352,6 +354,7 @@
return result;
}
+ @SuppressWarnings("ReferenceEquality")
private Map<DexType, KeepClassInfo> rewriteClassInfo(
NonIdentityGraphLens lens, InternalOptions options, Timing timing) {
timing.begin("Rewrite class info");
@@ -374,6 +377,7 @@
return newClassInfo;
}
+ @SuppressWarnings("ReferenceEquality")
private Map<DexField, KeepFieldInfo> rewriteFieldInfo(
NonIdentityGraphLens lens, InternalOptions options, Timing timing) {
timing.begin("Rewrite field info");
@@ -391,6 +395,7 @@
return newFieldInfo;
}
+ @SuppressWarnings("ReferenceEquality")
private Map<DexMethod, KeepMethodInfo> rewriteMethodInfo(
NonIdentityGraphLens lens, InternalOptions options, Timing timing) {
timing.begin("Rewrite method info");
@@ -495,12 +500,14 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public KeepMethodInfo getMethodInfo(DexEncodedMethod method, DexProgramClass holder) {
assert method.getHolderType() == holder.type;
return keepMethodInfo.getOrDefault(method.getReference(), KeepMethodInfo.bottom());
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public KeepFieldInfo getFieldInfo(DexEncodedField field, DexProgramClass holder) {
assert field.getHolderType() == holder.type;
return keepFieldInfo.getOrDefault(field.getReference(), KeepFieldInfo.bottom());
diff --git a/src/main/java/com/android/tools/r8/shaking/KeepReason.java b/src/main/java/com/android/tools/r8/shaking/KeepReason.java
index a05c9ac..0299b05 100644
--- a/src/main/java/com/android/tools/r8/shaking/KeepReason.java
+++ b/src/main/java/com/android/tools/r8/shaking/KeepReason.java
@@ -160,6 +160,7 @@
private static class InvokedFrom extends BasedOnOtherMethod {
+ @SuppressWarnings("ReferenceEquality")
private InvokedFrom(DexProgramClass holder, DexEncodedMethod method) {
super(method);
assert holder.type == method.getHolderType();
diff --git a/src/main/java/com/android/tools/r8/shaking/MainDexInfo.java b/src/main/java/com/android/tools/r8/shaking/MainDexInfo.java
index a961e10..4a5ffd6 100644
--- a/src/main/java/com/android/tools/r8/shaking/MainDexInfo.java
+++ b/src/main/java/com/android/tools/r8/shaking/MainDexInfo.java
@@ -198,6 +198,7 @@
return MainDexGroup.NOT_IN_MAIN_DEX;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean disallowInliningIntoContext(
AppView<? extends AppInfoWithClassHierarchy> appView,
ProgramDefinition context,
diff --git a/src/main/java/com/android/tools/r8/shaking/MissingClasses.java b/src/main/java/com/android/tools/r8/shaking/MissingClasses.java
index 2fa2e2c..e5e514d 100644
--- a/src/main/java/com/android/tools/r8/shaking/MissingClasses.java
+++ b/src/main/java/com/android/tools/r8/shaking/MissingClasses.java
@@ -73,6 +73,7 @@
this.alreadyMissingClasses = alreadyMissingClasses;
}
+ @SuppressWarnings("ReferenceEquality")
public void addNewMissingClass(DexType type, ProgramDerivedContext context) {
assert context != null;
assert context.getContext().getContextType() != type;
diff --git a/src/main/java/com/android/tools/r8/shaking/ObjectAllocationInfoCollectionUtils.java b/src/main/java/com/android/tools/r8/shaking/ObjectAllocationInfoCollectionUtils.java
index a578485..7eb81ce 100644
--- a/src/main/java/com/android/tools/r8/shaking/ObjectAllocationInfoCollectionUtils.java
+++ b/src/main/java/com/android/tools/r8/shaking/ObjectAllocationInfoCollectionUtils.java
@@ -20,6 +20,7 @@
appView, type, appView.appInfo().getObjectAllocationInfoCollection());
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean mayHaveFinalizeMethodDirectlyOrIndirectly(
AppView<? extends AppInfoWithClassHierarchy> appView,
ClassTypeElement type,
@@ -35,6 +36,7 @@
appView, type.getClassType(), objectAllocationInfoCollection);
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean mayHaveFinalizeMethodDirectlyOrIndirectly(
AppView<? extends AppInfoWithClassHierarchy> appView,
DexType type,
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardClassSpecification.java b/src/main/java/com/android/tools/r8/shaking/ProguardClassSpecification.java
index f4542d8..0700049 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardClassSpecification.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardClassSpecification.java
@@ -206,6 +206,7 @@
private final boolean inheritanceIsExtends;
private final List<ProguardMemberRule> memberRules;
+ @SuppressWarnings("ReferenceEquality")
protected ProguardClassSpecification(
Origin origin,
Position position,
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardTypeMatcher.java b/src/main/java/com/android/tools/r8/shaking/ProguardTypeMatcher.java
index fee5278..71057cd 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardTypeMatcher.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardTypeMatcher.java
@@ -345,6 +345,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public boolean matches(DexType type) {
return this.type == type;
}
diff --git a/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java b/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
index afe4006..513b132 100644
--- a/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
+++ b/src/main/java/com/android/tools/r8/shaking/RootSetUtils.java
@@ -1437,6 +1437,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private void evaluateAssumeNoSideEffectsRule(
Definition item, ProguardAssumeNoSideEffectRule context, ProguardMemberRule rule) {
assert assumeInfoCollectionBuilder != null;
@@ -1732,6 +1733,7 @@
&& item.asMethod().getDefinition().hasCode();
}
+ @SuppressWarnings("ReferenceEquality")
private void reportAssumeNoSideEffectsWarningForJavaLangClassMethod(
DexClassAndMethod method, ProguardAssumeNoSideEffectRule context) {
assert method.getHolderType() == options.dexItemFactory().objectType;
@@ -1741,6 +1743,7 @@
.add(method.getReference());
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isWaitOrNotifyMethod(DexMethod method) {
return method.name == options.itemFactory.waitMethodName
|| method.name == options.itemFactory.notifyMethodName
diff --git a/src/main/java/com/android/tools/r8/shaking/SingleTargetLookupCache.java b/src/main/java/com/android/tools/r8/shaking/SingleTargetLookupCache.java
index 33b7d4e..392ae35 100644
--- a/src/main/java/com/android/tools/r8/shaking/SingleTargetLookupCache.java
+++ b/src/main/java/com/android/tools/r8/shaking/SingleTargetLookupCache.java
@@ -17,6 +17,7 @@
private Map<DexType, Map<DexMethod, DexEncodedMethod>> cache = new ConcurrentHashMap<>();
+ @SuppressWarnings("ReferenceEquality")
public void addToCache(DexType refinedReceiverType, DexMethod method, DexEncodedMethod target) {
assert target != DexEncodedMethod.SENTINEL;
Map<DexMethod, DexEncodedMethod> methodCache =
@@ -48,6 +49,7 @@
});
}
+ @SuppressWarnings("ReferenceEquality")
public DexEncodedMethod getCachedItem(DexType receiverType, DexMethod method) {
Map<DexMethod, DexEncodedMethod> cachedMethods = cache.get(receiverType);
if (cachedMethods == null) {
diff --git a/src/main/java/com/android/tools/r8/shaking/TreePruner.java b/src/main/java/com/android/tools/r8/shaking/TreePruner.java
index ec15263..0c0da4e 100644
--- a/src/main/java/com/android/tools/r8/shaking/TreePruner.java
+++ b/src/main/java/com/android/tools/r8/shaking/TreePruner.java
@@ -284,6 +284,7 @@
&& !isLive.test(nestMemberAttr.getNestMember()));
}
+ @SuppressWarnings("ReferenceEquality")
private static void claimNestOwnership(
DexClass newHost, Predicate<DexType> isLive, Function<DexType, DexClass> definition) {
DexClass previousHost = definition.apply(newHost.getNestHost());
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index 380efdb..760e11e 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -303,6 +303,7 @@
// Returns true if [clazz] is a merge candidate. Note that the result of the checks in this
// method do not change in response to any class merges.
+ @SuppressWarnings("ReferenceEquality")
private boolean isMergeCandidate(
DexProgramClass sourceClass, DexProgramClass targetClass, Set<DexType> pinnedTypes) {
assert targetClass != null;
@@ -391,6 +392,7 @@
// Returns true if [clazz] is a merge candidate. Note that the result of the checks in this
// method may change in response to class merges. Therefore, this method should always be called
// before merging [clazz] into its subtype.
+ @SuppressWarnings("ReferenceEquality")
private boolean isStillMergeCandidate(DexProgramClass sourceClass, DexProgramClass targetClass) {
assert isMergeCandidate(sourceClass, targetClass, pinnedTypes);
assert !mergedClasses.containsValue(sourceClass.getType());
@@ -517,6 +519,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public Collection<DexMethod> get() {
Map<DexString, DexProto> overloadingInfo = new HashMap<>();
@@ -658,6 +661,7 @@
return lens;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean verifyGraphLens(VerticalClassMergerGraphLens graphLens) {
// Note that the method assertReferencesNotModified() relies on getRenamedFieldSignature() and
// getRenamedMethodSignature() instead of lookupField() and lookupMethod(). This is important
@@ -719,6 +723,7 @@
return true;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean methodResolutionMayChange(DexProgramClass source, DexProgramClass target) {
for (DexEncodedMethod virtualSourceMethod : source.virtualMethods()) {
DexEncodedMethod directTargetMethod =
@@ -836,6 +841,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private boolean fieldResolutionMayChange(DexClass source, DexClass target) {
if (source.type == target.superType) {
// If there is a "iget Target.f" or "iput Target.f" instruction in target, and the class
@@ -1468,6 +1474,7 @@
return bridge;
}
+ @SuppressWarnings("ReferenceEquality")
// Returns the method that shadows the given method, or null if method is not shadowed.
private DexEncodedMethod findMethodInTarget(DexEncodedMethod method) {
MethodResolutionResult resolutionResult =
@@ -1808,6 +1815,7 @@
}
+ @SuppressWarnings("ReferenceEquality")
// Given a method signature and a type, this method computes a bit vector that denotes the
// positions at which the given type is used in the method signature.
private int computePositionsFor(
@@ -1848,6 +1856,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
private AbortReason disallowInlining(ProgramMethod method, DexProgramClass context) {
if (appView.options().inlinerOptions().enableInlining) {
Code code = method.getDefinition().getCode();
@@ -1899,6 +1908,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public final DexType getNextClassType(DexType type) {
return type == source ? target.type : mergedClasses.getOrDefault(type, type);
}
@@ -2169,6 +2179,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public void registerInvokeSpecial(DexMethod method) {
ProgramMethod context = getContext();
if (method.getHolderType() != context.getHolderType()) {
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java
index 0f89af1..d4525f0 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMergerGraphLens.java
@@ -216,6 +216,7 @@
this.dexItemFactory = dexItemFactory;
}
+ @SuppressWarnings("ReferenceEquality")
static Builder createBuilderForFixup(Builder builder, VerticallyMergedClasses mergedClasses) {
Builder newBuilder = new Builder(builder.dexItemFactory);
builder.fieldMap.forEach(
@@ -292,6 +293,7 @@
prototypeChanges);
}
+ @SuppressWarnings("ReferenceEquality")
private DexField getFieldSignatureAfterClassMerging(
DexField field, VerticallyMergedClasses mergedClasses) {
assert !field.holder.isArrayType();
@@ -308,6 +310,7 @@
return dexItemFactory.createField(newHolder, newType, field.name);
}
+ @SuppressWarnings("ReferenceEquality")
private DexMethod getMethodSignatureAfterClassMerging(
DexMethod signature, VerticallyMergedClasses mergedClasses) {
assert !signature.holder.isArrayType();
@@ -326,6 +329,7 @@
return dexItemFactory.createMethod(newHolder, newProto, signature.name);
}
+ @SuppressWarnings("ReferenceEquality")
private DexType getTypeAfterClassMerging(DexType type, VerticallyMergedClasses mergedClasses) {
if (type.isArrayType()) {
DexType baseType = type.toBaseType(dexItemFactory);
@@ -405,6 +409,7 @@
virtualToDirectMethodMap.put(from, to);
}
+ @SuppressWarnings("ReferenceEquality")
public void merge(VerticalClassMergerGraphLens.Builder builder) {
fieldMap.putAll(builder.fieldMap);
methodMap.putAll(builder.methodMap);
diff --git a/src/main/java/com/android/tools/r8/shaking/WhyAreYouKeepingConsumer.java b/src/main/java/com/android/tools/r8/shaking/WhyAreYouKeepingConsumer.java
index 483db26..0d7cb4a 100644
--- a/src/main/java/com/android/tools/r8/shaking/WhyAreYouKeepingConsumer.java
+++ b/src/main/java/com/android/tools/r8/shaking/WhyAreYouKeepingConsumer.java
@@ -58,6 +58,7 @@
super(subConsumer);
}
+ @SuppressWarnings("ReferenceEquality")
public ClassGraphNode getClassNode(ClassReference clazz) {
for (GraphNode node : getTargets()) {
if (node instanceof ClassGraphNode && ((ClassGraphNode) node).getReference() == clazz) {
@@ -67,6 +68,7 @@
return null;
}
+ @SuppressWarnings("ReferenceEquality")
public MethodGraphNode getMethodNode(MethodReference method) {
for (GraphNode node : getTargets()) {
if (node instanceof MethodGraphNode && ((MethodGraphNode) node).getReference() == method) {
@@ -76,6 +78,7 @@
return null;
}
+ @SuppressWarnings("ReferenceEquality")
public FieldGraphNode getFieldNode(FieldReference field) {
for (GraphNode node : getTargets()) {
if (node instanceof FieldGraphNode && ((FieldGraphNode) node).getReference() == field) {
@@ -193,6 +196,7 @@
addNodeMessage(node, formatter);
}
+ @SuppressWarnings("ReferenceEquality")
private String getNodeString(GraphNode node) {
if (node instanceof ClassGraphNode) {
return DescriptorUtils.descriptorToJavaType(
diff --git a/src/main/java/com/android/tools/r8/synthesis/CommittedSyntheticsCollection.java b/src/main/java/com/android/tools/r8/synthesis/CommittedSyntheticsCollection.java
index 162be3d..442b507 100644
--- a/src/main/java/com/android/tools/r8/synthesis/CommittedSyntheticsCollection.java
+++ b/src/main/java/com/android/tools/r8/synthesis/CommittedSyntheticsCollection.java
@@ -217,6 +217,7 @@
return methods.containsKey(type) || classes.containsKey(type);
}
+ @SuppressWarnings("ReferenceEquality")
boolean containsTypeOfKind(DexType type, SyntheticKind kind) {
List<SyntheticProgramClassReference> synthetics = classes.get(type);
if (synthetics == null) {
diff --git a/src/main/java/com/android/tools/r8/synthesis/SynthesizingContext.java b/src/main/java/com/android/tools/r8/synthesis/SynthesizingContext.java
index 21fd289..0b552a1 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SynthesizingContext.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SynthesizingContext.java
@@ -97,6 +97,7 @@
this.featureSplit = featureSplit;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isSyntheticInputClass() {
return synthesizingContextType != inputContextType;
}
@@ -129,6 +130,7 @@
return featureSplit;
}
+ @SuppressWarnings("ReferenceEquality")
SynthesizingContext rewrite(NonIdentityGraphLens lens) {
DexType rewrittenInputContextType = lens.lookupType(inputContextType);
DexType rewrittenSynthesizingContextType = lens.lookupType(synthesizingContextType);
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticClasspathClassReference.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticClasspathClassReference.java
index cd6fcbf..168d05a 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticClasspathClassReference.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticClasspathClassReference.java
@@ -34,6 +34,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
SyntheticClasspathClassReference internalRewrite(
SynthesizingContext rewrittenContext, NonIdentityGraphLens lens) {
assert type == lens.lookupType(type)
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticDefinition.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticDefinition.java
index 1ad0796..f0080f3 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticDefinition.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticDefinition.java
@@ -103,6 +103,7 @@
return compareTo(other, includeContext, graphLens, classToFeatureSplitMap) == 0;
}
+ @SuppressWarnings("ReferenceEquality")
int compareTo(
D other,
boolean includeContext,
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
index 4dcc8c9..a8a25a6 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticFinalization.java
@@ -123,11 +123,13 @@
return false;
}
+ @SuppressWarnings("ReferenceEquality")
void move(DexType from, DexType to) {
DexType old = typeMap.put(from, to);
assert old == null || old == to;
}
+ @SuppressWarnings("ReferenceEquality")
void move(DexField from, DexField to) {
DexField old = fieldMap.put(from, to);
assert old == null || old == to;
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java
index 5446ed9..11ef4e3 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticItems.java
@@ -187,6 +187,7 @@
return definitions.containsKey(type);
}
+ @SuppressWarnings("ReferenceEquality")
boolean containsTypeOfKind(DexType type, SyntheticKind kind) {
SyntheticDefinition<?, ?, ?> definition = definitions.get(type);
return definition != null && definition.getKind() == kind;
@@ -215,6 +216,7 @@
private final ContextsForGlobalSynthetics globalContexts;
private final GlobalSyntheticsStrategy globalSyntheticsStrategy;
+ @SuppressWarnings("ReferenceEquality")
public Set<DexType> collectSyntheticsFromContext(DexType context) {
Set<DexType> result = Sets.newIdentityHashSet();
committed
@@ -407,6 +409,7 @@
return mode.isFinal() || isSyntheticLambda(clazz);
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isSyntheticLambda(DexProgramClass clazz) {
if (!isSynthetic(clazz)) {
return false;
@@ -1194,6 +1197,7 @@
.computeFinalSynthetics(appView, timing);
}
+ @SuppressWarnings("ReferenceEquality")
public void reportSyntheticsInformation(SyntheticInfoConsumer consumer) {
assert isFinalized();
Map<DexType, DexType> seen = new IdentityHashMap<>();
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java
index d2daa6c..64746c9 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodBuilder.java
@@ -63,6 +63,7 @@
return setName(factory.createString(name));
}
+ @SuppressWarnings("ReferenceEquality")
public SyntheticMethodBuilder setName(DexString name) {
assert name != null;
assert this.name == null || this.name == name;
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodReference.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodReference.java
index 8853f7c8..e649f48 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodReference.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticMethodReference.java
@@ -52,6 +52,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
SyntheticMethodReference internalRewrite(
SynthesizingContext rewrittenContext, NonIdentityGraphLens lens) {
DexMethod rewritten = lens.getRenamedMethodSignature(method);
diff --git a/src/main/java/com/android/tools/r8/synthesis/SyntheticProgramClassReference.java b/src/main/java/com/android/tools/r8/synthesis/SyntheticProgramClassReference.java
index 4845892..00493ed 100644
--- a/src/main/java/com/android/tools/r8/synthesis/SyntheticProgramClassReference.java
+++ b/src/main/java/com/android/tools/r8/synthesis/SyntheticProgramClassReference.java
@@ -36,6 +36,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
SyntheticProgramClassReference internalRewrite(
SynthesizingContext rewrittenContext, NonIdentityGraphLens lens) {
DexType rewritten = lens.lookupType(type);
diff --git a/src/main/java/com/android/tools/r8/tracereferences/Tracer.java b/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
index b1d434a..f35f32b 100644
--- a/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
+++ b/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
@@ -215,6 +215,7 @@
addType(field.getType(), referencedFrom);
}
+ @SuppressWarnings("ReferenceEquality")
private void registerMethod(ProgramMethod method) {
DefinitionContext referencedFrom = DefinitionContextUtils.create(method);
addTypes(method.getParameters(), referencedFrom);
@@ -244,6 +245,7 @@
method.registerCodeReferences(new MethodUseCollector(method));
}
+ @SuppressWarnings("ReferenceEquality")
private void registerSuperType(
DexProgramClass clazz, DexType superType, DefinitionContext referencedFrom) {
addType(superType, referencedFrom);
@@ -389,6 +391,7 @@
method, resolvedMethod == null ? null : resolvedMethod.getDefinition());
}
+ @SuppressWarnings("ReferenceEquality")
private void handleRewrittenMethodReference(
DexMethod method, DexEncodedMethod resolvedMethod) {
assert resolvedMethod == null
@@ -451,6 +454,7 @@
handleRewrittenFieldReference(lookupResult.getReference());
}
+ @SuppressWarnings("ReferenceEquality")
private void handleRewrittenFieldReference(DexField field) {
addType(field.getHolderType(), referencedFrom);
addType(field.getType(), referencedFrom);
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidApiLevelUtils.java b/src/main/java/com/android/tools/r8/utils/AndroidApiLevelUtils.java
index 1a2d82b..85c637c 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApiLevelUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApiLevelUtils.java
@@ -35,6 +35,7 @@
caller, inlinee, options, NopWhyAreYouNotInliningReporter.getInstance());
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isApiSafeForInlining(
ProgramMethod caller,
ProgramMethod inlinee,
@@ -121,6 +122,7 @@
definition, appView.apiLevelCompute(), appView.options(), appView.dexItemFactory());
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean isApiSafeForReference(
LibraryDefinition definition,
AndroidApiLevelCompute androidApiLevelCompute,
@@ -153,6 +155,7 @@
return apiLevel.isLessThanOrEqualTo(apiLevelOfOriginal).isTrue();
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isApiSafeForTypeStrengthening(
DexType newType, DexType oldType, AppView<? extends AppInfoWithClassHierarchy> appView) {
// Type strengthening only applies to reference types.
diff --git a/src/main/java/com/android/tools/r8/utils/BooleanLatticeElement.java b/src/main/java/com/android/tools/r8/utils/BooleanLatticeElement.java
index 9e955c6..3049b3f 100644
--- a/src/main/java/com/android/tools/r8/utils/BooleanLatticeElement.java
+++ b/src/main/java/com/android/tools/r8/utils/BooleanLatticeElement.java
@@ -52,6 +52,7 @@
return isFalse() || isUnknown();
}
+ @SuppressWarnings("ReferenceEquality")
public BooleanLatticeElement join(BooleanLatticeElement other) {
if (this == other || other.isBottom() || isUnknown()) {
return this;
diff --git a/src/main/java/com/android/tools/r8/utils/ClassMap.java b/src/main/java/com/android/tools/r8/utils/ClassMap.java
index 915a2f7..ea5e988 100644
--- a/src/main/java/com/android/tools/r8/utils/ClassMap.java
+++ b/src/main/java/com/android/tools/r8/utils/ClassMap.java
@@ -174,11 +174,12 @@
/**
* Forces loading of all the classes satisfying the criteria specified.
- * <p>
- * NOTE: after this method finishes, the class map is considered to be fully-loaded and thus
+ *
+ * <p>NOTE: after this method finishes, the class map is considered to be fully-loaded and thus
* sealed. This has one side-effect: if we filter out some of the classes with `load` predicate,
* these classes will never be loaded.
*/
+ @SuppressWarnings("ReferenceEquality")
public void forceLoad(Predicate<DexType> load) {
Set<DexType> knownClasses;
ClassProvider<T> classProvider;
@@ -268,6 +269,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public T get() {
if (ready) {
return clazz;
diff --git a/src/main/java/com/android/tools/r8/utils/DexClassAndFieldEquivalence.java b/src/main/java/com/android/tools/r8/utils/DexClassAndFieldEquivalence.java
index 8b36c33..154fba4 100644
--- a/src/main/java/com/android/tools/r8/utils/DexClassAndFieldEquivalence.java
+++ b/src/main/java/com/android/tools/r8/utils/DexClassAndFieldEquivalence.java
@@ -18,6 +18,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
protected boolean doEquivalent(DexClassAndField field, DexClassAndField other) {
return field.getDefinition() == other.getDefinition();
}
diff --git a/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java b/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java
index b4282d9..73b664e 100644
--- a/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java
@@ -93,6 +93,7 @@
AbortException.class);
}
+ @SuppressWarnings("ReferenceEquality")
public static <T extends Exception, A extends Exception> T failWithFakeEntry(
DiagnosticsHandler diagnosticsHandler,
Throwable topMostException,
@@ -272,6 +273,7 @@
this.position = position;
}
+ @SuppressWarnings("ReferenceEquality")
private static boolean needsAttachment(RuntimeException e, Origin origin, Position position) {
if (origin == Origin.unknown() && position == Position.UNKNOWN) {
return false;
diff --git a/src/main/java/com/android/tools/r8/utils/FileUtils.java b/src/main/java/com/android/tools/r8/utils/FileUtils.java
index 347e254..c3d670c 100644
--- a/src/main/java/com/android/tools/r8/utils/FileUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/FileUtils.java
@@ -213,6 +213,7 @@
}
}
+ @SuppressWarnings("ReferenceEquality")
public static ZipFile createZipFile(File file, Charset charset) throws IOException {
if (!isAndroid) {
return new ZipFile(file, charset);
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 961117a..93162ce 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -2115,10 +2115,12 @@
|| enableEnumLiteProtoShrinking;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean isEnumLiteProtoShrinkingEnabled() {
return enableEnumLiteProtoShrinking;
}
+ @SuppressWarnings("ReferenceEquality")
public boolean shouldApplyInliningToInlinee(
AppView<?> appView, ProgramMethod inlinee, int inliningDepth) {
if (isProtoShrinkingEnabled()) {
diff --git a/src/main/java/com/android/tools/r8/utils/ProgramClassCollection.java b/src/main/java/com/android/tools/r8/utils/ProgramClassCollection.java
index aca16a9..b177056 100644
--- a/src/main/java/com/android/tools/r8/utils/ProgramClassCollection.java
+++ b/src/main/java/com/android/tools/r8/utils/ProgramClassCollection.java
@@ -67,6 +67,7 @@
return wrappedConflictResolver(null, reporter);
}
+ @SuppressWarnings("ReferenceEquality")
public static ProgramClassConflictResolver wrappedConflictResolver(
ClassConflictResolver clientResolver, Reporter reporter) {
return (a, b) -> {
@@ -99,6 +100,7 @@
ImmutableList.of(a.getOrigin(), b.getOrigin())));
}
+ @SuppressWarnings("ReferenceEquality")
private static DexProgramClass mergeClasses(DexProgramClass a, DexProgramClass b) {
assert a.type == b.type;
boolean syntheticA = a.accessFlags.isSynthetic();
diff --git a/src/main/java/com/android/tools/r8/utils/ProgramMethodEquivalence.java b/src/main/java/com/android/tools/r8/utils/ProgramMethodEquivalence.java
index 91553b8..cdb98b8 100644
--- a/src/main/java/com/android/tools/r8/utils/ProgramMethodEquivalence.java
+++ b/src/main/java/com/android/tools/r8/utils/ProgramMethodEquivalence.java
@@ -18,6 +18,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
protected boolean doEquivalent(ProgramMethod method, ProgramMethod other) {
return method.getDefinition() == other.getDefinition();
}
diff --git a/src/main/java/com/android/tools/r8/utils/ValueUtils.java b/src/main/java/com/android/tools/r8/utils/ValueUtils.java
index 8121493..60b2e4e 100644
--- a/src/main/java/com/android/tools/r8/utils/ValueUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ValueUtils.java
@@ -13,12 +13,14 @@
public class ValueUtils {
+ @SuppressWarnings("ReferenceEquality")
public static boolean isStringBuilder(Value value, DexItemFactory dexItemFactory) {
TypeElement type = value.getType();
return type.isClassType()
&& type.asClassType().getClassType() == dexItemFactory.stringBuilderType;
}
+ @SuppressWarnings("ReferenceEquality")
public static boolean isNonNullStringBuilder(Value value, DexItemFactory dexItemFactory) {
while (true) {
if (value.isPhi()) {
diff --git a/src/main/java/com/android/tools/r8/utils/collections/ProgramMethodSet.java b/src/main/java/com/android/tools/r8/utils/collections/ProgramMethodSet.java
index a53de2f..1147830 100644
--- a/src/main/java/com/android/tools/r8/utils/collections/ProgramMethodSet.java
+++ b/src/main/java/com/android/tools/r8/utils/collections/ProgramMethodSet.java
@@ -86,6 +86,7 @@
return add(new ProgramMethod(clazz, definition));
}
+ @SuppressWarnings("ReferenceEquality")
public ProgramMethodSet rewrittenWithLens(DexDefinitionSupplier definitions, GraphLens lens) {
GraphLens appliedLens = GraphLens.getIdentityLens();
List<ProgramMethod> elementsToRemove = null;
diff --git a/src/main/java/com/android/tools/r8/utils/positions/DexPositionToNoPcMappedRangeMapper.java b/src/main/java/com/android/tools/r8/utils/positions/DexPositionToNoPcMappedRangeMapper.java
index e80a0a7..8e0fcbb 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/DexPositionToNoPcMappedRangeMapper.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/DexPositionToNoPcMappedRangeMapper.java
@@ -117,6 +117,7 @@
// A default event denotes a line table entry and must always be emitted. Remap its line.
@Override
+ @SuppressWarnings("ReferenceEquality")
public void visit(Default defaultEvent) {
super.visit(defaultEvent);
assert getCurrentLine() >= 0;
diff --git a/src/main/java/com/android/tools/r8/utils/positions/LineNumberOptimizer.java b/src/main/java/com/android/tools/r8/utils/positions/LineNumberOptimizer.java
index 881fbe2..68968a8 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/LineNumberOptimizer.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/LineNumberOptimizer.java
@@ -99,6 +99,7 @@
|| newMapVersion.isUnknown();
}
+ @SuppressWarnings("ReferenceEquality")
public static ClassNameMapper run(
AppView<?> appView,
AndroidApp inputApp,
diff --git a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
index 543e7d9..f272a71 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/MappedPositionToClassNameMapperBuilder.java
@@ -187,6 +187,7 @@
return this;
}
+ @SuppressWarnings("ReferenceEquality")
private MappedPositionToClassNamingBuilder addFields() {
MapVersion mapFileVersion = appView.options().getMapFileVersion();
clazz.forEachField(
@@ -216,6 +217,7 @@
return this;
}
+ @SuppressWarnings("ReferenceEquality")
public MappedPositionToClassNamingBuilder addMappedPositions(
ProgramMethod method,
List<MappedPosition> mappedPositions,
@@ -476,6 +478,7 @@
return outermostCaller.isOutline() ? outermostCaller.getMethod() : null;
}
+ @SuppressWarnings("ReferenceEquality")
private boolean isIdentityMapping(
MapVersion mapFileVersion,
List<MappedPosition> mappedPositions,
diff --git a/src/main/java/com/android/tools/r8/utils/positions/PositionRemapper.java b/src/main/java/com/android/tools/r8/utils/positions/PositionRemapper.java
index 861c9dc..1d7e99f 100644
--- a/src/main/java/com/android/tools/r8/utils/positions/PositionRemapper.java
+++ b/src/main/java/com/android/tools/r8/utils/positions/PositionRemapper.java
@@ -77,6 +77,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public Pair<Position, Position> createRemappedPosition(Position position) {
assert position.getMethod() != null;
if (previousMethod == position.getMethod()) {
diff --git a/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithNamingLens.java b/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithNamingLens.java
index 6ccce86..35c709c 100644
--- a/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithNamingLens.java
+++ b/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithNamingLens.java
@@ -31,6 +31,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public int visitDexType(DexType type1, DexType type2) {
if (type1 == type2) {
return 0;
@@ -42,6 +43,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public int visitDexField(DexField field1, DexField field2) {
if (field1 == field2) {
return 0;
@@ -58,6 +60,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public int visitDexMethod(DexMethod method1, DexMethod method2) {
if (method1 == method2) {
return 0;
diff --git a/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithStringTable.java b/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithStringTable.java
index 398e32f..5ed2d5c 100644
--- a/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithStringTable.java
+++ b/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithStringTable.java
@@ -18,6 +18,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public int visitDexString(DexString string1, DexString string2) {
if (string1 == string2) {
return 0;
diff --git a/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithTypeEquivalence.java b/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithTypeEquivalence.java
index f139bc9..152e8c7 100644
--- a/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithTypeEquivalence.java
+++ b/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithTypeEquivalence.java
@@ -28,6 +28,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public int visitDexType(DexType type1, DexType type2) {
if (type1 == type2) {
return 0;
diff --git a/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithTypeTable.java b/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithTypeTable.java
index 2ec2980..a4ae2d4 100644
--- a/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithTypeTable.java
+++ b/src/main/java/com/android/tools/r8/utils/structural/CompareToVisitorWithTypeTable.java
@@ -21,6 +21,7 @@
}
@Override
+ @SuppressWarnings("ReferenceEquality")
public int visitDexType(DexType type1, DexType type2) {
if (type1 == type2) {
return 0;