Minor cleanup of Tracer

Change-Id: Idcc15a5683c651ce2aa3eaf11f9da35a27cfbc26
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 35661c5..5af11f7 100644
--- a/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
+++ b/src/main/java/com/android/tools/r8/tracereferences/Tracer.java
@@ -69,12 +69,8 @@
     UseCollector useCollector = new UseCollector(appView, consumer, diagnostics, targetPredicate);
     for (DexProgramClass clazz : appView.appInfo().classes()) {
       DefinitionContext classContext = DefinitionContextUtils.create(clazz);
-      if (clazz.superType != null) {
-        useCollector.registerSuperType(clazz, clazz.superType, classContext);
-      }
-      for (DexType implementsType : clazz.getInterfaces()) {
-        useCollector.registerSuperType(clazz, implementsType, classContext);
-      }
+      clazz.forEachImmediateSupertype(
+          supertype -> useCollector.registerSuperType(clazz, supertype, classContext));
       clazz.forEachProgramField(useCollector::registerField);
       clazz.forEachProgramMethod(
           method -> {
@@ -237,13 +233,12 @@
       addType(field.getType(), referencedFrom);
     }
 
-    @SuppressWarnings("ReferenceEquality")
     private void registerMethod(ProgramMethod method) {
       DefinitionContext referencedFrom = DefinitionContextUtils.create(method);
       addTypes(method.getParameters(), referencedFrom);
       addType(method.getReturnType(), referencedFrom);
-      for (DexAnnotation annotation : method.getDefinition().annotations().annotations) {
-        if (annotation.getAnnotationType() == factory.annotationThrows) {
+      for (DexAnnotation annotation : method.getAnnotations().getAnnotations()) {
+        if (annotation.getAnnotationType().isIdenticalTo(factory.annotationThrows)) {
           DexValueArray dexValues = annotation.annotation.elements[0].value.asDexValueArray();
           for (DexValue dexValType : dexValues.getValues()) {
             addType(dexValType.asDexValueType().value, referencedFrom);
@@ -267,7 +262,6 @@
       method.registerCodeReferences(new MethodUseCollector(method));
     }
 
-    @SuppressWarnings("ReferenceEquality")
     private void registerSuperType(
         DexProgramClass clazz, DexType superType, DefinitionContext referencedFrom) {
       addType(superType, referencedFrom);
@@ -276,7 +270,10 @@
           method -> {
             DexClassAndMethod resolvedMethod =
                 appInfo()
-                    .resolveMethodOn(superType, method.getReference(), superType != clazz.superType)
+                    .resolveMethodOn(
+                        superType,
+                        method.getReference(),
+                        superType.isNotIdenticalTo(clazz.getSuperType()))
                     .getResolutionPair();
             if (resolvedMethod != null
                 && !resolvedMethod.isProgramMethod()
@@ -408,7 +405,6 @@
         }
       }
 
-      @SuppressWarnings("ReferenceEquality")
       private void handleRewrittenMethodReference(
           DexMethod method, DexClassAndMethod resolvedMethod) {
         addType(method.getHolderType(), referencedFrom);
@@ -464,25 +460,22 @@
         handleRewrittenFieldReference(lookupResult.getReference());
       }
 
-      @SuppressWarnings("ReferenceEquality")
       private void handleRewrittenFieldReference(DexField field) {
         addType(field.getHolderType(), referencedFrom);
         addType(field.getType(), referencedFrom);
 
         FieldResolutionResult resolutionResult = appInfo().resolveField(field);
-        resolutionResult.forEachFieldResolutionResult(
-            singleResolutionResult -> {
-              if (!singleResolutionResult.isSingleFieldResolutionResult()) {
-                return;
-              }
-              DexClassAndField resolvedField = singleResolutionResult.getResolutionPair();
-              if (isTargetType(resolvedField.getHolderType())) {
-                handleMemberResolution(field, resolvedField, getContext(), referencedFrom);
-                TracedFieldImpl tracedField = new TracedFieldImpl(resolvedField, referencedFrom);
-                consumer.acceptField(tracedField, diagnostics);
-              }
-            });
-        if (!resolutionResult.hasSuccessfulResolutionResult()) {
+        if (resolutionResult.hasSuccessfulResolutionResult()) {
+          resolutionResult.forEachSuccessfulFieldResolutionResult(
+              singleResolutionResult -> {
+                DexClassAndField resolvedField = singleResolutionResult.getResolutionPair();
+                if (isTargetType(resolvedField.getHolderType())) {
+                  handleMemberResolution(field, resolvedField, getContext(), referencedFrom);
+                  TracedFieldImpl tracedField = new TracedFieldImpl(resolvedField, referencedFrom);
+                  consumer.acceptField(tracedField, diagnostics);
+                }
+              });
+        } else {
           TracedFieldImpl tracedField = new TracedFieldImpl(field, referencedFrom);
           collectMissingField(tracedField);
           consumer.acceptField(tracedField, diagnostics);