Remove more warnings

Mostly missing @Overrides and missing generics.

Change-Id: I6161d53827eb68ea7146ddacd3ee32c3edd3ce3c
diff --git a/src/main/java/com/android/tools/r8/compatdx/CompatDx.java b/src/main/java/com/android/tools/r8/compatdx/CompatDx.java
index 09f3321..7da21b9 100644
--- a/src/main/java/com/android/tools/r8/compatdx/CompatDx.java
+++ b/src/main/java/com/android/tools/r8/compatdx/CompatDx.java
@@ -310,7 +310,7 @@
       maxIndexNumber = options.valueOf(spec.maxIndexNumber);
     }
 
-    public static DxCompatOptions parse(String[] args) throws DxParseError {
+    public static DxCompatOptions parse(String[] args) {
       Spec spec = new Spec();
       return new DxCompatOptions(spec.parser.parse(args), spec);
     }
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java b/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
index 9381c90..8d64cf4 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugEvent.java
@@ -21,10 +21,13 @@
   }
 
   // Make sure all concrete subclasses implements toString, hashCode, and equals.
+  @Override
   abstract public String toString();
 
+  @Override
   abstract public int hashCode();
 
+  @Override
   abstract public boolean equals(Object other);
 
   public abstract void writeOn(DebugBytecodeWriter writer, ObjectToOffsetMapping mapping);
@@ -35,6 +38,7 @@
 
     public final int delta;
 
+    @Override
     public void writeOn(DebugBytecodeWriter writer, ObjectToOffsetMapping mapping) {
       writer.putByte(Constants.DBG_ADVANCE_PC);
       writer.putUleb128(delta);
@@ -44,21 +48,24 @@
       this.delta = delta;
     }
 
+    @Override
     public void addToBuilder(DexDebugEntryBuilder builder) {
       assert delta >= 0;
       builder.advancePC(delta);
     }
 
-
+    @Override
     public String toString() {
       return "ADVANCE_PC " + delta;
     }
 
+    @Override
     public int hashCode() {
       return Constants.DBG_ADVANCE_PC
           + delta * 7;
     }
 
+    @Override
     public boolean equals(Object other) {
       return (other instanceof AdvancePC)
           && (delta == ((AdvancePC) other).delta);
@@ -70,23 +77,28 @@
     SetPrologueEnd() {
     }
 
+    @Override
     public void writeOn(DebugBytecodeWriter writer, ObjectToOffsetMapping mapping) {
       writer.putByte(Constants.DBG_SET_PROLOGUE_END);
     }
 
+    @Override
     public void addToBuilder(DexDebugEntryBuilder builder) {
       builder.endPrologue();
     }
 
+    @Override
     public String toString() {
       return "SET_PROLOGUE_END";
     }
 
 
+    @Override
     public int hashCode() {
       return Constants.DBG_SET_PROLOGUE_END;
     }
 
+    @Override
     public boolean equals(Object other) {
       return other instanceof SetPrologueEnd;
     }
@@ -98,22 +110,27 @@
     SetEpilogueBegin() {
     }
 
+    @Override
     public void writeOn(DebugBytecodeWriter writer, ObjectToOffsetMapping mapping) {
       writer.putByte(Constants.DBG_SET_EPILOGUE_BEGIN);
     }
 
+    @Override
     public void addToBuilder(DexDebugEntryBuilder builder) {
       builder.beginEpilogue();
     }
 
+    @Override
     public String toString() {
       return "SET_EPILOGUE_BEGIN";
     }
 
+    @Override
     public int hashCode() {
       return Constants.DBG_SET_EPILOGUE_BEGIN;
     }
 
+    @Override
     public boolean equals(Object other) {
       return other instanceof SetEpilogueBegin;
     }
@@ -127,24 +144,29 @@
       this.delta = delta;
     }
 
+    @Override
     public void writeOn(DebugBytecodeWriter writer, ObjectToOffsetMapping mapping) {
       writer.putByte(Constants.DBG_ADVANCE_LINE);
       writer.putSleb128(delta);
     }
 
+    @Override
     public void addToBuilder(DexDebugEntryBuilder builder) {
       builder.advanceLine(delta);
     }
 
+    @Override
     public String toString() {
       return "ADVANCE_LINE " + delta;
     }
 
+    @Override
     public int hashCode() {
       return Constants.DBG_ADVANCE_LINE
           + delta * 7;
     }
 
+    @Override
     public boolean equals(Object other) {
       return (other instanceof AdvanceLine)
           && (delta == ((AdvanceLine) other).delta);
@@ -173,6 +195,7 @@
       this(registerNum, local.name, local.type, local.signature);
     }
 
+    @Override
     public void writeOn(DebugBytecodeWriter writer, ObjectToOffsetMapping mapping) {
       writer.putByte(signature == null
           ? Constants.DBG_START_LOCAL
@@ -194,14 +217,17 @@
       }
     }
 
+    @Override
     public void addToBuilder(DexDebugEntryBuilder builder) {
       builder.startLocal(registerNum, name, type, signature);
     }
 
+    @Override
     public String toString() {
       return "START_LOCAL " + registerNum;
     }
 
+    @Override
     public int hashCode() {
       return Constants.DBG_START_LOCAL
           + registerNum * 7
@@ -210,6 +236,7 @@
           + (signature == null ? 0 : signature.hashCode()) * 19;
     }
 
+    @Override
     public boolean equals(Object other) {
       if (!(other instanceof StartLocal)) {
         return false;
@@ -236,24 +263,29 @@
       this.registerNum = registerNum;
     }
 
+    @Override
     public void writeOn(DebugBytecodeWriter writer, ObjectToOffsetMapping mapping) {
       writer.putByte(Constants.DBG_END_LOCAL);
       writer.putUleb128(registerNum);
     }
 
+    @Override
     public void addToBuilder(DexDebugEntryBuilder builder) {
       builder.endLocal(registerNum);
     }
 
+    @Override
     public String toString() {
       return "END_LOCAL " + registerNum;
     }
 
+    @Override
     public int hashCode() {
       return Constants.DBG_END_LOCAL
           + registerNum * 7;
     }
 
+    @Override
     public boolean equals(Object other) {
       return (other instanceof EndLocal)
           && (registerNum == ((EndLocal) other).registerNum);
@@ -268,24 +300,29 @@
       this.registerNum = registerNum;
     }
 
+    @Override
     public void writeOn(DebugBytecodeWriter writer, ObjectToOffsetMapping mapping) {
       writer.putByte(Constants.DBG_RESTART_LOCAL);
       writer.putUleb128(registerNum);
     }
 
+    @Override
     public void addToBuilder(DexDebugEntryBuilder builder) {
       builder.restartLocal(registerNum);
     }
 
+    @Override
     public String toString() {
       return "RESTART_LOCAL " + registerNum;
     }
 
+    @Override
     public int hashCode() {
       return Constants.DBG_RESTART_LOCAL
           + registerNum * 7;
     }
 
+    @Override
     public boolean equals(Object other) {
       return (other instanceof RestartLocal)
           && (registerNum == ((RestartLocal) other).registerNum);
@@ -308,6 +345,7 @@
       this.fileName = fileName;
     }
 
+    @Override
     public void writeOn(DebugBytecodeWriter writer, ObjectToOffsetMapping mapping) {
       writer.putByte(Constants.DBG_SET_FILE);
       writer.putString(fileName);
@@ -318,19 +356,23 @@
       fileName.collectIndexedItems(collection);
     }
 
+    @Override
     public void addToBuilder(DexDebugEntryBuilder builder) {
       builder.setFile(fileName);
     }
 
+    @Override
     public String toString() {
       return "SET_FILE " + fileName.toString();
     }
 
+    @Override
     public int hashCode() {
       return Constants.DBG_SET_FILE
           + fileName.hashCode() * 7;
     }
 
+    @Override
     public boolean equals(Object other) {
       return (other instanceof SetFile)
           && fileName.equals(((SetFile) other).fileName);
@@ -346,10 +388,12 @@
       this.value = value;
     }
 
+    @Override
     public void writeOn(DebugBytecodeWriter writer, ObjectToOffsetMapping mapping) {
       writer.putByte(value);
     }
 
+    @Override
     public void addToBuilder(DexDebugEntryBuilder builder) {
       int adjustedOpcode = value - Constants.DBG_FIRST_SPECIAL;
       int line = Constants.DBG_LINE_BASE + (adjustedOpcode % Constants.DBG_LINE_RANGE);
@@ -367,15 +411,18 @@
       return Constants.DBG_LINE_BASE + (adjustedOpcode % Constants.DBG_LINE_RANGE);
     }
 
+    @Override
     public String toString() {
       return "DEFAULT " + value;
     }
 
+    @Override
     public int hashCode() {
       return Constants.DBG_FIRST_SPECIAL
           + value * 7;
     }
 
+    @Override
     public boolean equals(Object other) {
       return (other instanceof Default)
           && (value == ((Default) other).value);
diff --git a/src/main/java/com/android/tools/r8/graph/DexDebugInfo.java b/src/main/java/com/android/tools/r8/graph/DexDebugInfo.java
index 5236d12..ae669a2 100644
--- a/src/main/java/com/android/tools/r8/graph/DexDebugInfo.java
+++ b/src/main/java/com/android/tools/r8/graph/DexDebugInfo.java
@@ -32,12 +32,14 @@
     return builder.build();
   }
 
+  @Override
   public int computeHashCode() {
     return startLine
         + Arrays.hashCode(parameters) * 7
         + Arrays.hashCode(events) * 13;
   }
 
+  @Override
   public boolean computeEquals(Object other) {
     if (other instanceof DexDebugInfo) {
       DexDebugInfo o = (DexDebugInfo) other;
@@ -63,6 +65,7 @@
     collection.add(this);
   }
 
+  @Override
   public String toString() {
     StringBuilder builder = new StringBuilder();
     builder.append("DebugInfo (line " + startLine + ") events: [\n");
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 b421a9c..a8f41d6 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedAnnotation.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedAnnotation.java
@@ -33,6 +33,7 @@
     assert false;
   }
 
+  @Override
   public String toString() {
     return "Encoded annotation " + type + " " + Arrays.toString(elements);
   }
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 882bd99..3552cf7 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -137,7 +137,7 @@
             return emitted - rhs.emitted;
           }
         }
-      };
+      }
 
       public void add(int original, int emitted) {
         list.add(new Mapping(original, emitted));
@@ -281,6 +281,7 @@
     code = builder.build(method.getArity());
   }
 
+  @Override
   public String toString() {
     return "Encoded method " + method;
   }
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 5616967..fa3d6ad 100644
--- a/src/main/java/com/android/tools/r8/graph/DexField.java
+++ b/src/main/java/com/android/tools/r8/graph/DexField.java
@@ -115,6 +115,7 @@
     return clazz;
   }
 
+  @Override
   public String toSmaliString() {
     return clazz.toSmaliString() + "->" + name + ":" + type.toSmaliString();
   }
diff --git a/src/main/java/com/android/tools/r8/graph/DexMemberAnnotation.java b/src/main/java/com/android/tools/r8/graph/DexMemberAnnotation.java
index 11a9396..7defdaa 100644
--- a/src/main/java/com/android/tools/r8/graph/DexMemberAnnotation.java
+++ b/src/main/java/com/android/tools/r8/graph/DexMemberAnnotation.java
@@ -38,7 +38,7 @@
       return true;
     }
     if (other instanceof DexMemberAnnotation) {
-      DexMemberAnnotation otherMember = (DexMemberAnnotation) other;
+      DexMemberAnnotation<?,?> otherMember = (DexMemberAnnotation<?,?>) other;
       return item.equals(otherMember.item) && annotations.equals(otherMember.annotations);
     }
     return false;
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 f8b3c8c..cc8e0db 100644
--- a/src/main/java/com/android/tools/r8/graph/DexMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexMethod.java
@@ -50,12 +50,14 @@
     return mapping.getOffsetFor(this);
   }
 
+  @Override
   public int computeHashCode() {
     return holder.hashCode()
         + proto.hashCode() * 7
         + name.hashCode() * 31;
   }
 
+  @Override
   public boolean computeEquals(Object other) {
     if (other instanceof DexMethod) {
       DexMethod o = (DexMethod) other;
@@ -124,10 +126,12 @@
     return holder + "." + name;
   }
 
+  @Override
   public String toSmaliString() {
     return holder.toSmaliString() + "->" + name + proto.toSmaliString();
   }
 
+  @Override
   public String toSourceString() {
     StringBuilder builder = new StringBuilder();
     builder.append(proto.returnType.toSourceString());
diff --git a/src/main/java/com/android/tools/r8/graph/DexProto.java b/src/main/java/com/android/tools/r8/graph/DexProto.java
index 946eb6a..69eaeb5 100644
--- a/src/main/java/com/android/tools/r8/graph/DexProto.java
+++ b/src/main/java/com/android/tools/r8/graph/DexProto.java
@@ -18,12 +18,14 @@
     this.parameters = parameters;
   }
 
+  @Override
   public int computeHashCode() {
     return shorty.hashCode()
         + returnType.hashCode() * 7
         + parameters.hashCode() * 31;
   }
 
+  @Override
   public boolean computeEquals(Object other) {
     if (other instanceof DexProto) {
       DexProto o = (DexProto) other;
@@ -34,6 +36,7 @@
     return false;
   }
 
+  @Override
   public String toString() {
     return "Proto " + shorty + " " + returnType + " " + parameters;
   }
diff --git a/src/main/java/com/android/tools/r8/graph/DexString.java b/src/main/java/com/android/tools/r8/graph/DexString.java
index 75a6d35..73339f1 100644
--- a/src/main/java/com/android/tools/r8/graph/DexString.java
+++ b/src/main/java/com/android/tools/r8/graph/DexString.java
@@ -26,10 +26,12 @@
     this.content = encode(string);
   }
 
+  @Override
   public int computeHashCode() {
     return size * 7 + Arrays.hashCode(content);
   }
 
+  @Override
   public boolean computeEquals(Object other) {
     if (other instanceof DexString) {
       DexString o = (DexString) other;
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 0d81ea4..60afb69 100644
--- a/src/main/java/com/android/tools/r8/graph/DexType.java
+++ b/src/main/java/com/android/tools/r8/graph/DexType.java
@@ -37,10 +37,12 @@
     this.descriptor = descriptor;
   }
 
+  @Override
   public int computeHashCode() {
     return descriptor.hashCode();
   }
 
+  @Override
   public boolean computeEquals(Object other) {
     if (other instanceof DexType) {
       return descriptor.equals(((DexType) other).descriptor);
@@ -218,6 +220,7 @@
     return descriptor.toString();
   }
 
+  @Override
   public String toSourceString() {
     if (toStringCache == null) {
       // TODO(ager): Pass in a ProguardMapReader to map names back to original names.
diff --git a/src/main/java/com/android/tools/r8/graph/KeyedDexItem.java b/src/main/java/com/android/tools/r8/graph/KeyedDexItem.java
index ad852eb..066ca69 100644
--- a/src/main/java/com/android/tools/r8/graph/KeyedDexItem.java
+++ b/src/main/java/com/android/tools/r8/graph/KeyedDexItem.java
@@ -12,7 +12,7 @@
     if (other == this) {
       return true;
     }
-    return (other.getClass() == getClass()) && ((KeyedDexItem) other).getKey().equals(getKey());
+    return (other.getClass() == getClass()) && ((KeyedDexItem<?>) other).getKey().equals(getKey());
   }
 
   @Override
diff --git a/src/main/java/com/android/tools/r8/ir/code/Add.java b/src/main/java/com/android/tools/r8/ir/code/Add.java
index 1577968..cfebbac 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Add.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Add.java
@@ -26,10 +26,12 @@
     return true;
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateInt(int dest, int left, int right) {
     return new AddInt(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateLong(int dest, int left, int right) {
     // The dalvik jit had a bug where the long operations add, sub, or, xor and and would write
     // the first part of the result long before reading the second part of the input longs.
@@ -40,34 +42,42 @@
     return new AddLong(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateFloat(int dest, int left, int right) {
     return new AddFloat(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateDouble(int dest, int left, int right) {
     return new AddDouble(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateInt2Addr(int left, int right) {
     return new AddInt2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateLong2Addr(int left, int right) {
     return new AddLong2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateFloat2Addr(int left, int right) {
     return new AddFloat2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateDouble2Addr(int left, int right) {
     return new AddDouble2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateIntLit8(int dest, int left, int constant) {
     return new AddIntLit8(dest, left, constant);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateIntLit16(int dest, int left, int constant) {
     return new AddIntLit16(dest, left, constant);
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/ArithmeticBinop.java b/src/main/java/com/android/tools/r8/ir/code/ArithmeticBinop.java
index 49adcb4..20a7580 100644
--- a/src/main/java/com/android/tools/r8/ir/code/ArithmeticBinop.java
+++ b/src/main/java/com/android/tools/r8/ir/code/ArithmeticBinop.java
@@ -41,6 +41,7 @@
         && leftValue().isConstant() && rightValue().isConstant();
   }
 
+  @Override
   public boolean needsValueInRegister(Value value) {
     assert !isSub();  // Constants in instructions for sub must be handled in subclass Sub.
     // Always require the left value in a register. If left and right are the same value, then
diff --git a/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionIterator.java b/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionIterator.java
index 41db4d9..ff9e257 100644
--- a/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionIterator.java
+++ b/src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionIterator.java
@@ -177,6 +177,7 @@
     current.clearBlock();
   }
 
+  @Override
   public BasicBlock split(IRCode code, ListIterator<BasicBlock> blocksIterator) {
     List<BasicBlock> blocks = code.blocks;
     assert blocksIterator == null || IteratorUtils.peekPrevious(blocksIterator) == block;
@@ -217,6 +218,7 @@
     return newBlock;
   }
 
+  @Override
   public BasicBlock split(int instructions, IRCode code, ListIterator<BasicBlock> blocksIterator) {
     // Split at the current cursor position.
     BasicBlock newBlock = split(code, blocksIterator);
@@ -333,6 +335,7 @@
     }
   }
 
+  @Override
   public BasicBlock inlineInvoke(
       IRCode code, IRCode inlinee, ListIterator<BasicBlock> blocksIterator,
       List<BasicBlock> blocksToRemove, DexType downcast) {
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 d67c359..99ce3cc 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
@@ -69,7 +69,7 @@
     if (!(o instanceof CatchHandlers)) {
       return false;
     }
-    CatchHandlers that = (CatchHandlers) o;
+    CatchHandlers<?> that = (CatchHandlers<?>) o;
     return guards.equals(that.guards) && targets.equals(that.targets);
   }
 
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 c43ce44..bed6e99 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
@@ -50,6 +50,7 @@
     return true;
   }
 
+  @Override
   public boolean identicalNonValueNonPositionParts(Instruction other) {
     return other.asConstClass().clazz == clazz;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/Div.java b/src/main/java/com/android/tools/r8/ir/code/Div.java
index 69541c1..872bc63 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Div.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Div.java
@@ -36,42 +36,52 @@
     return false;
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateInt(int dest, int left, int right) {
     return new DivInt(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateLong(int dest, int left, int right) {
     return new DivLong(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateFloat(int dest, int left, int right) {
     return new DivFloat(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateDouble(int dest, int left, int right) {
     return new DivDouble(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateInt2Addr(int left, int right) {
     return new DivInt2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateLong2Addr(int left, int right) {
     return new DivLong2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateFloat2Addr(int left, int right) {
     return new DivFloat2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateDouble2Addr(int left, int right) {
     return new DivDouble2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateIntLit8(int dest, int left, int constant) {
     return new DivIntLit8(dest, left, constant);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateIntLit16(int dest, int left, int constant) {
     return new DivIntLit16(dest, left, constant);
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/Goto.java b/src/main/java/com/android/tools/r8/ir/code/Goto.java
index f88020d..eef666b 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Goto.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Goto.java
@@ -67,6 +67,7 @@
     return super.toString() + "block <unknown>";
   }
 
+  @Override
   public void print(CfgPrinter printer) {
     super.print(printer);
     printer.append(" B").append(getTarget().getNumber());
diff --git a/src/main/java/com/android/tools/r8/ir/code/IRCodeInstructionsIterator.java b/src/main/java/com/android/tools/r8/ir/code/IRCodeInstructionsIterator.java
index 1bedf26..5da5eb6 100644
--- a/src/main/java/com/android/tools/r8/ir/code/IRCodeInstructionsIterator.java
+++ b/src/main/java/com/android/tools/r8/ir/code/IRCodeInstructionsIterator.java
@@ -38,6 +38,7 @@
     return instructionIterator.next();
   }
 
+  @Override
   public void add(Instruction instruction) {
     instructionIterator.add(instruction);
   }
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 b286544..bebbea1 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
@@ -88,6 +88,7 @@
     return o.field == field && o.type == type;
   }
 
+  @Override
   public int compareNonValueParts(Instruction other) {
     InstanceGet o = other.asInstanceGet();
     int result = field.slowCompareTo(o.field);
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 0866205..25cb64b 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
@@ -78,6 +78,7 @@
     return o.field == field && o.type == type;
   }
 
+  @Override
   public int compareNonValueParts(Instruction other) {
     InstancePut o = other.asInstancePut();
     int result = field.slowCompareTo(o.field);
diff --git a/src/main/java/com/android/tools/r8/ir/code/InstructionListIterator.java b/src/main/java/com/android/tools/r8/ir/code/InstructionListIterator.java
index 56a3e1f..fc7817b 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InstructionListIterator.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InstructionListIterator.java
@@ -49,6 +49,7 @@
    * @return the instruction that matched the predicate or {@code null} if all instructions fails
    * the predicate test
    */
+  @Override
   default Instruction nextUntil(Predicate<Instruction> predicate) {
     while (hasNext()) {
       Instruction instruction = next();
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 e0e816b..adbb602 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
@@ -83,10 +83,12 @@
     return 0;
   }
 
+  @Override
   public boolean isInvokeCustom() {
     return true;
   }
 
+  @Override
   public InvokeCustom asInvokeCustom() {
     return this;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeSuper.java b/src/main/java/com/android/tools/r8/ir/code/InvokeSuper.java
index 428be6f..4840f23 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeSuper.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeSuper.java
@@ -58,6 +58,7 @@
     addInvokeAndMoveResult(instruction, builder);
   }
 
+  @Override
   public boolean identicalNonValueNonPositionParts(Instruction other) {
     if (!other.isInvokeSuper()) {
       return false;
diff --git a/src/main/java/com/android/tools/r8/ir/code/LogicalBinop.java b/src/main/java/com/android/tools/r8/ir/code/LogicalBinop.java
index 770278a..3d6a3a0 100644
--- a/src/main/java/com/android/tools/r8/ir/code/LogicalBinop.java
+++ b/src/main/java/com/android/tools/r8/ir/code/LogicalBinop.java
@@ -55,6 +55,7 @@
     }
   }
 
+  @Override
   public boolean needsValueInRegister(Value value) {
     // Always require the left value in a register. If left and right are the same value, then
     // both will use its register.
diff --git a/src/main/java/com/android/tools/r8/ir/code/Mul.java b/src/main/java/com/android/tools/r8/ir/code/Mul.java
index 42c7f09..9c676df 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Mul.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Mul.java
@@ -26,6 +26,7 @@
     return true;
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateInt(int dest, int left, int right) {
     // Flip arguments if dest and right are the same to work around x86 code generation bug on
     // Android L. See https://android-review.googlesource.com/#/c/114932/ for the fix for Android
@@ -33,6 +34,7 @@
     return dest == right ? new MulInt(dest, right, left) : new MulInt(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateLong(int dest, int left, int right) {
     // Flip arguments if dest and right are the same to work around x86 code generation bug on
     // Android L. See https://android-review.googlesource.com/#/c/114932/ for the fix for Android
@@ -40,6 +42,7 @@
     return dest == right ? new MulLong(dest, right, left) : new MulLong(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateFloat(int dest, int left, int right) {
     // Flip arguments if dest and right are the same to work around x86 code generation bug on
     // Android L. See https://android-review.googlesource.com/#/c/114932/ for the fix for Android
@@ -47,6 +50,7 @@
     return dest == right ? new MulFloat(dest, right, left) : new MulFloat(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateDouble(int dest, int left, int right) {
     // Flip arguments if dest and right are the same to work around x86 code generation bug on
     // Android L. See https://android-review.googlesource.com/#/c/114932/ for the fix for Android
@@ -54,26 +58,32 @@
     return dest == right ? new MulDouble(dest, right, left) : new MulDouble(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateInt2Addr(int left, int right) {
     return new MulInt2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateLong2Addr(int left, int right) {
     return new MulLong2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateFloat2Addr(int left, int right) {
     return new MulFloat2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateDouble2Addr(int left, int right) {
     return new MulDouble2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateIntLit8(int dest, int left, int constant) {
     return new MulIntLit8(dest, left, constant);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateIntLit16(int dest, int left, int constant) {
     return new MulIntLit16(dest, left, constant);
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/Or.java b/src/main/java/com/android/tools/r8/ir/code/Or.java
index 24b8995..66eaaaa 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Or.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Or.java
@@ -77,10 +77,12 @@
     return type.ordinal() - other.asOr().type.ordinal();
   }
 
+  @Override
   int foldIntegers(int left, int right) {
     return left | right;
   }
 
+  @Override
   long foldLongs(long left, long right) {
     return left | right;
   }
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 22c8380..78c5c4e 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
@@ -281,6 +281,7 @@
   /**
    * Determine if the only possible values for the phi are the integers 0 or 1.
    */
+  @Override
   public boolean knownToBeBoolean() {
     return knownToBeBoolean(new HashSet<>());
   }
@@ -356,6 +357,7 @@
     return false;
   }
 
+  @Override
   public boolean needsRegister() {
     return true;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/Rem.java b/src/main/java/com/android/tools/r8/ir/code/Rem.java
index 7232012..dc8213b 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Rem.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Rem.java
@@ -36,42 +36,52 @@
     return false;
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateInt(int dest, int left, int right) {
     return new RemInt(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateLong(int dest, int left, int right) {
     return new RemLong(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateFloat(int dest, int left, int right) {
     return new RemFloat(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateDouble(int dest, int left, int right) {
     return new RemDouble(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateInt2Addr(int left, int right) {
     return new RemInt2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateLong2Addr(int left, int right) {
     return new RemLong2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateFloat2Addr(int left, int right) {
     return new RemFloat2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateDouble2Addr(int left, int right) {
     return new RemDouble2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateIntLit8(int dest, int left, int constant) {
     return new RemIntLit8(dest, left, constant);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateIntLit16(int dest, int left, int constant) {
     return new RemIntLit16(dest, left, constant);
   }
diff --git a/src/main/java/com/android/tools/r8/ir/code/Sub.java b/src/main/java/com/android/tools/r8/ir/code/Sub.java
index 7bb1107..4bf7e66 100644
--- a/src/main/java/com/android/tools/r8/ir/code/Sub.java
+++ b/src/main/java/com/android/tools/r8/ir/code/Sub.java
@@ -31,10 +31,12 @@
     return false;
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateInt(int dest, int left, int right) {
     return new SubInt(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateLong(int dest, int left, int right) {
     // The dalvik jit had a bug where the long operations add, sub, or, xor and and would write
     // the first part of the result long before reading the second part of the input longs.
@@ -45,35 +47,43 @@
     return new SubLong(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateFloat(int dest, int left, int right) {
     return new SubFloat(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateDouble(int dest, int left, int right) {
     return new SubDouble(dest, left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateInt2Addr(int left, int right) {
     return new SubInt2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateLong2Addr(int left, int right) {
     return new SubLong2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateFloat2Addr(int left, int right) {
     return new SubFloat2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateDouble2Addr(int left, int right) {
     return new SubDouble2Addr(left, right);
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateIntLit8(int dest, int left, int constant) {
     // The sub instructions with constants are rsub, and is handled below.
     throw new Unreachable("Unsupported instruction SubIntLit8");
   }
 
+  @Override
   public com.android.tools.r8.code.Instruction CreateIntLit16(int dest, int left, int constant) {
     // The sub instructions with constants are rsub, and is handled below.
     throw new Unreachable("Unsupported instruction SubIntLit16");
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
index 2312320..b8324d9 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java
@@ -187,7 +187,7 @@
     }
   }
 
-  private void synthesizeLambdaClasses(Builder builder) throws ApiLevelException {
+  private void synthesizeLambdaClasses(Builder<?> builder) throws ApiLevelException {
     if (lambdaRewriter != null) {
       lambdaRewriter.adjustAccessibility();
       lambdaRewriter.synthesizeLambdaClasses(builder);
@@ -195,7 +195,7 @@
   }
 
   private void desugarInterfaceMethods(
-      Builder builder, InterfaceMethodRewriter.Flavor includeAllResources)
+      Builder<?> builder, InterfaceMethodRewriter.Flavor includeAllResources)
       throws ApiLevelException {
     if (interfaceMethodRewriter != null) {
       interfaceMethodRewriter.desugarInterfaceMethods(builder, includeAllResources);
@@ -209,7 +209,7 @@
     convertClassesToDex(application.classes(), executor);
 
     // Build a new application with jumbo string info,
-    Builder builder = application.builder();
+    Builder<?> builder = application.builder();
     builder.setHighestSortingString(highestSortingString);
 
     synthesizeLambdaClasses(builder);
@@ -346,7 +346,7 @@
     }
 
     // Build a new application with jumbo string info.
-    Builder builder = application.builder();
+    Builder<?> builder = application.builder();
     builder.setHighestSortingString(highestSortingString);
 
     // Second inlining pass for dealing with double inline callers.
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
index 3be3466..64513c3 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
@@ -757,11 +757,11 @@
     }
   }
 
-  private int[] getSwitchTargets(LabelNode dflt, List<LabelNode> labels) {
+  private int[] getSwitchTargets(LabelNode dflt, List labels) {
     int[] targets = new int[1 + labels.size()];
     targets[0] = getOffset(dflt);
     for (int i = 1; i < targets.length; i++) {
-      targets[i] = getOffset(labels.get(i - 1));
+      targets[i] = getOffset((LabelNode) labels.get(i - 1));
     }
     return targets;
   }
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/JarState.java b/src/main/java/com/android/tools/r8/ir/conversion/JarState.java
index d211a03..67f6c93 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/JarState.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/JarState.java
@@ -649,6 +649,7 @@
 
   // Printing helpers.
 
+  @Override
   public String toString() {
     return "locals: " + localsToString(Arrays.asList(locals)) + ", stack: " + stackToString(stack);
   }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
index 2c43bd7..31c6de1 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java
@@ -224,7 +224,7 @@
    * Move static and default interface methods to companion classes,
    * add missing methods to forward to moved default methods implementation.
    */
-  public void desugarInterfaceMethods(Builder builder, Flavor flavour) throws ApiLevelException {
+  public void desugarInterfaceMethods(Builder<?> builder, Flavor flavour) throws ApiLevelException {
     // Process all classes first. Add missing forwarding methods to
     // replace desugared default interface methods.
     forwardingMethods.addAll(processClasses(builder, flavour));
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
index 357a813..f9a7f1f 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaRewriter.java
@@ -201,7 +201,7 @@
   }
 
   /** Generates lambda classes and adds them to the builder. */
-  public void synthesizeLambdaClasses(Builder builder) throws ApiLevelException {
+  public void synthesizeLambdaClasses(Builder<?> builder) throws ApiLevelException {
     for (LambdaClass lambdaClass : knownLambdaClasses.values()) {
       DexProgramClass synthesizedClass = lambdaClass.synthesizeLambdaClass();
       converter.optimizeSynthesizedClass(synthesizedClass);
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 fd3e433..256194d 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
@@ -251,6 +251,7 @@
       super(position);
     }
 
+    @Override
     public SwitchBuilder self() {
       return this;
     }
@@ -313,6 +314,7 @@
       this.code = code;
     }
 
+    @Override
     public IfBuilder self() {
       return this;
     }
@@ -478,7 +480,7 @@
                 if (current.size() == 1) {
                   outliers.add(previousKey);
                 } else {
-                  sequences.add(current);;
+                  sequences.add(current);
                 }
                 current = new IntArrayList();
               }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/InliningInfo.java b/src/main/java/com/android/tools/r8/ir/optimize/InliningInfo.java
index 543aba4..f58cadd 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/InliningInfo.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/InliningInfo.java
@@ -45,6 +45,7 @@
       this.target = target;
     }
 
+    @Override
     void appendOn(StringBuffer buffer) {
       buffer.append("<< INLINED");
     }
@@ -58,6 +59,7 @@
       this.reason = reason;
     }
 
+    @Override
     public void appendOn(StringBuffer buffer) {
       buffer.append("-- no inlining: ");
       buffer.append(reason);
@@ -79,6 +81,7 @@
     edges.add(new Edge(invoke.getType(), invoke.getInvokedMethod(), new NotInlining(reason)));
   }
 
+  @Override
   public String toString() {
     StringBuffer buffer = new StringBuffer(method.method.toSourceString());
     buffer.append(" {\n");
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
index 35d2e14..9385f11 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
@@ -670,6 +670,7 @@
       super(method, block);
     }
 
+    @Override
     protected void handle(int start, int end, Outline outline) {
       synchronized (candidates) {
         candidates.computeIfAbsent(outline, k -> new ArrayList<>()).add(method);
@@ -695,6 +696,7 @@
       this.toRemove = toRemove;
     }
 
+    @Override
     protected void handle(int start, int end, Outline outline) {
       if (candidates.containsKey(outline)) {
         DexMethod m = generatedOutlines.get(outline);
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/SwitchUtils.java b/src/main/java/com/android/tools/r8/ir/optimize/SwitchUtils.java
index 0c33561..e95919b 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/SwitchUtils.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/SwitchUtils.java
@@ -24,13 +24,13 @@
     public final Instruction arrayGet;
     public final Instruction staticGet;
     public final Int2ReferenceMap<DexField> indexMap;
-    public final Reference2IntMap ordinalsMap;
+    public final Reference2IntMap<DexField> ordinalsMap;
 
     private EnumSwitchInfo(DexType enumClass,
         Instruction ordinalInvoke,
         Instruction arrayGet, Instruction staticGet,
         Int2ReferenceMap<DexField> indexMap,
-        Reference2IntMap ordinalsMap) {
+        Reference2IntMap<DexField> ordinalsMap) {
       this.enumClass = enumClass;
       this.ordinalInvoke = ordinalInvoke;
       this.arrayGet = arrayGet;
@@ -89,7 +89,7 @@
     // Due to member rebinding, only the fields are certain to provide the actual enums
     // class.
     DexType enumTyoe = indexMap.values().iterator().next().getHolder();
-    Reference2IntMap ordinalsMap
+    Reference2IntMap<DexField> ordinalsMap
         = EnumOrdinalMapCollector.getOrdinalsMapFor(enumTyoe, appInfo);
     if (ordinalsMap == null) {
       return null;
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 01dc4fd..7903463 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
@@ -167,6 +167,7 @@
   /**
    * Perform register allocation for the IRCode.
    */
+  @Override
   public void allocateRegisters(boolean debug) {
     // There are no linked values prior to register allocation.
     assert noLinkedValues();
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 604190c..69c165d 100644
--- a/src/main/java/com/android/tools/r8/naming/NamingLens.java
+++ b/src/main/java/com/android/tools/r8/naming/NamingLens.java
@@ -74,6 +74,7 @@
       // Intentionally left empty.
     }
 
+    @Override
     public boolean checkTargetCanBeTranslated(DexMethod item) {
       return true;
     }
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 0b683e2..415b8a7 100644
--- a/src/main/java/com/android/tools/r8/naming/ProguardMapReader.java
+++ b/src/main/java/com/android/tools/r8/naming/ProguardMapReader.java
@@ -416,6 +416,7 @@
       this.msg = msg;
     }
 
+    @Override
     public String toString() {
       return "Parse error [" + lineNo + ":" + lineOffset + "] " + msg;
     }
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 da89ff1..31a81f9 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -807,10 +807,11 @@
             .entrySet()) {
           allLive.addAll(entry.getValue().getItems());
         }
-        Set reachableNotLive = Sets.difference(allLive, liveMethods.getItems());
+        Set<DexEncodedMethod> reachableNotLive = Sets.difference(allLive, liveMethods.getItems());
         Log.debug(getClass(), "%s methods are reachable but not live", reachableNotLive.size());
         Log.info(getClass(), "Only reachable: %s", reachableNotLive);
-        Set liveButNotInstantiated = Sets.difference(liveTypes, instantiatedTypes.getItems());
+        Set<DexType> liveButNotInstantiated =
+            Sets.difference(liveTypes, instantiatedTypes.getItems());
         Log.debug(getClass(), "%s classes are live but not instantiated",
             liveButNotInstantiated.size());
         Log.info(getClass(), "Live but not instantiated: %s", liveButNotInstantiated);
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 4e2f0b2..a6ce411 100644
--- a/src/main/java/com/android/tools/r8/shaking/KeepReason.java
+++ b/src/main/java/com/android/tools/r8/shaking/KeepReason.java
@@ -79,6 +79,7 @@
 
     abstract String getKind();
 
+    @Override
     public void print(ReasonFormatter formatter) {
       formatter.addReason("is " + getKind() + " " + method.toSourceString());
       formatter.addMethodReferenceReason(method);
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceFile.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceFile.java
index 058c14f..f3bb3d9 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceFile.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceFile.java
@@ -17,10 +17,12 @@
     this.path = path;
   }
 
+  @Override
   public String get() throws IOException{
     return new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
   }
 
+  @Override
   public Path getBaseDirectory() {
     Path baseDirectory = path.getParent();
     if (baseDirectory == null) {
@@ -31,6 +33,7 @@
     return baseDirectory;
   }
 
+  @Override
   public String getName() {
     return path.toString();
   }
diff --git a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceStrings.java b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceStrings.java
index ac5f0ab..a4c89e0 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceStrings.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceStrings.java
@@ -17,14 +17,17 @@
     this.config = config;
   }
 
+  @Override
   public String get() throws IOException{
     return Strings.join(config, "\n");
   }
 
+  @Override
   public Path getBaseDirectory() {
     return Paths.get(".");
   }
 
+  @Override
   public String getName() {
     return "<no file>";
   }
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 9b06a2f..e50a1e3 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardTypeMatcher.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardTypeMatcher.java
@@ -25,6 +25,7 @@
 
   public abstract boolean matches(DexType type);
 
+  @Override
   public abstract String toString();
 
   public boolean isTripleDotPattern() {
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 10716bd..8995259 100644
--- a/src/main/java/com/android/tools/r8/shaking/TreePruner.java
+++ b/src/main/java/com/android/tools/r8/shaking/TreePruner.java
@@ -58,7 +58,7 @@
     return result;
   }
 
-  private DexApplication.Builder removeUnused(DexApplication application) {
+  private DexApplication.Builder<?> removeUnused(DexApplication application) {
     return application.builder()
         .replaceProgramClasses(getNewProgramClasses(application.classes()));
   }
diff --git a/src/main/java/com/android/tools/r8/shaking/protolite/ProtoLiteExtension.java b/src/main/java/com/android/tools/r8/shaking/protolite/ProtoLiteExtension.java
index b217194..ceff21e 100644
--- a/src/main/java/com/android/tools/r8/shaking/protolite/ProtoLiteExtension.java
+++ b/src/main/java/com/android/tools/r8/shaking/protolite/ProtoLiteExtension.java
@@ -82,6 +82,7 @@
     return superMethods;
   }
 
+  @Override
   boolean isSetterThatNeedsProcessing(DexEncodedMethod method) {
     return method.accessFlags.isPrivate()
         && method.method.name.beginsWith(setterNamePrefix)
diff --git a/src/main/java/com/android/tools/r8/shaking/protolite/ProtoLitePruner.java b/src/main/java/com/android/tools/r8/shaking/protolite/ProtoLitePruner.java
index 9ccdedc..7773e11 100644
--- a/src/main/java/com/android/tools/r8/shaking/protolite/ProtoLitePruner.java
+++ b/src/main/java/com/android/tools/r8/shaking/protolite/ProtoLitePruner.java
@@ -111,6 +111,7 @@
         && fieldName.startsWith("bitField");
   }
 
+  @Override
   boolean isSetterThatNeedsProcessing(DexEncodedMethod method) {
     // The pruner does not need to process setters, so this method always returns false.
     return false;
diff --git a/src/main/java/com/android/tools/r8/utils/SimpleHashMap.java b/src/main/java/com/android/tools/r8/utils/SimpleHashMap.java
index 05481c5..73f607a 100644
--- a/src/main/java/com/android/tools/r8/utils/SimpleHashMap.java
+++ b/src/main/java/com/android/tools/r8/utils/SimpleHashMap.java
@@ -37,6 +37,7 @@
     return size;
   }
 
+  @Override
   public String toString() {
     return this.getClass().getName() + ", " + size + "(length " + length() + ")";
   }
diff --git a/src/main/java/com/android/tools/r8/utils/Timing.java b/src/main/java/com/android/tools/r8/utils/Timing.java
index 0fa316e..ff2aa68 100644
--- a/src/main/java/com/android/tools/r8/utils/Timing.java
+++ b/src/main/java/com/android/tools/r8/utils/Timing.java
@@ -46,6 +46,7 @@
       return stop_time - start_time;
     }
 
+    @Override
     public String toString() {
       return title + ": " + (duration() / 1000000) + "ms.";
     }