Enable InconsistentOverloads checking in ErrorProne.

Bug:
Change-Id: I1e0be14da4ba39e3f77464e6a249aa32b1b42bb9
diff --git a/build.gradle b/build.gradle
index 9299592..c97aa9d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -23,6 +23,7 @@
     '-Xep:OvershadowingSubclassFields:WARN',
     '-Xep:IntLongMath:WARN',
     '-Xep:EqualsHashCode:WARN',
+    '-Xep:InconsistentOverloads:WARN',
     '-Xep:ArrayHashCode:WARN',
     '-Xep:EqualsIncompatibleType:WARN',
     '-Xep:NonOverridingEquals:WARN',
diff --git a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
index 6c4b9bc..6961024 100644
--- a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
+++ b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
@@ -109,19 +109,19 @@
     private boolean enableDesugaring = true;
 
     protected Builder(CompilationMode mode) {
-      this(AndroidApp.builder(), mode, false);
+      this(mode, false, AndroidApp.builder());
     }
 
     protected Builder(CompilationMode mode, boolean ignoreDexInArchive) {
-      this(AndroidApp.builder(), mode, ignoreDexInArchive);
+      this(mode, ignoreDexInArchive, AndroidApp.builder());
     }
 
     // Internal constructor for testing.
-    Builder(AndroidApp app, CompilationMode mode) {
-      this(AndroidApp.builder(app), mode, false);
+    Builder(CompilationMode mode, AndroidApp app) {
+      this(mode, false, AndroidApp.builder(app));
     }
 
-    private Builder(AndroidApp.Builder builder, CompilationMode mode, boolean ignoreDexInArchive) {
+    private Builder(CompilationMode mode, boolean ignoreDexInArchive, AndroidApp.Builder builder) {
       super(builder, ignoreDexInArchive);
       assert mode != null;
       this.mode = mode;
diff --git a/src/main/java/com/android/tools/r8/D8.java b/src/main/java/com/android/tools/r8/D8.java
index a5213c5..ae370ae 100644
--- a/src/main/java/com/android/tools/r8/D8.java
+++ b/src/main/java/com/android/tools/r8/D8.java
@@ -199,7 +199,7 @@
       throws IOException, ExecutionException, ApiLevelException {
     final CfgPrinter printer = options.printCfg ? new CfgPrinter() : null;
 
-    IRConverter converter = new IRConverter(timing, appInfo, options, printer);
+    IRConverter converter = new IRConverter(appInfo, options, timing, printer);
     application = converter.convertToDex(application, executor);
 
     if (options.printCfg) {
diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
index b96dfb7..d0c99d5 100644
--- a/src/main/java/com/android/tools/r8/D8Command.java
+++ b/src/main/java/com/android/tools/r8/D8Command.java
@@ -44,7 +44,7 @@
     }
 
     private Builder(AndroidApp app) {
-      super(app, CompilationMode.DEBUG);
+      super(CompilationMode.DEBUG, app);
     }
 
     /** Add classpath file resources. */
diff --git a/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java b/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java
index 9d7478d..d29d9ae 100644
--- a/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java
+++ b/src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java
@@ -68,7 +68,7 @@
      * Add proguard configuration for automatic main dex list calculation.
      */
     public GenerateMainDexListCommand.Builder addMainDexRules(List<String> lines) {
-      mainDexRules.add(new ProguardConfigurationSourceStrings(Paths.get("."), lines));
+      mainDexRules.add(new ProguardConfigurationSourceStrings(lines, Paths.get(".")));
       return self();
     }
 
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index d9066bd..c9ede51 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -129,7 +129,7 @@
     timing.begin("Create IR");
     try {
       IRConverter converter = new IRConverter(
-          timing, appInfo, options, printer, graphLense);
+          appInfo, options, timing, printer, graphLense);
       application = converter.optimize(application, executorService);
     } finally {
       timing.end();
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index 1df56db..d24eb43 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -49,7 +49,7 @@
     }
 
     private Builder(AndroidApp app) {
-      super(app, CompilationMode.RELEASE);
+      super(CompilationMode.RELEASE, app);
     }
 
     @Override
@@ -105,7 +105,7 @@
      * Add proguard configuration for automatic main dex list calculation.
      */
     public Builder addMainDexRules(List<String> lines) {
-      mainDexRules.add(new ProguardConfigurationSourceStrings(Paths.get("."), lines));
+      mainDexRules.add(new ProguardConfigurationSourceStrings(lines, Paths.get(".")));
       return self();
     }
 
@@ -138,7 +138,7 @@
      * Add proguard configuration.
      */
     public Builder addProguardConfiguration(List<String> lines) {
-      proguardConfigs.add(new ProguardConfigurationSourceStrings(Paths.get("."), lines));
+      proguardConfigs.add(new ProguardConfigurationSourceStrings(lines, Paths.get(".")));
       return self();
     }
 
diff --git a/src/main/java/com/android/tools/r8/code/Format45cc.java b/src/main/java/com/android/tools/r8/code/Format45cc.java
index c269fad..f5123cf 100644
--- a/src/main/java/com/android/tools/r8/code/Format45cc.java
+++ b/src/main/java/com/android/tools/r8/code/Format45cc.java
@@ -117,13 +117,13 @@
     StringBuilder builder = new StringBuilder();
     appendRegisterArguments(builder, " ");
     builder.append(" ");
-    builder.append(toString(BBBB, naming));
+    builder.append(itemToString(BBBB, naming));
     builder.append(", ");
-    builder.append(toString(HHHH, naming));
+    builder.append(itemToString(HHHH, naming));
     return formatString(builder.toString());
   }
 
-  private String toString(IndexedDexItem indexedDexItem, ClassNameMapper naming) {
+  private String itemToString(IndexedDexItem indexedDexItem, ClassNameMapper naming) {
     String str;
     if (naming == null) {
       str = indexedDexItem.toSmaliString();
diff --git a/src/main/java/com/android/tools/r8/dex/DexFileReader.java b/src/main/java/com/android/tools/r8/dex/DexFileReader.java
index 770afdf..64909cc 100644
--- a/src/main/java/com/android/tools/r8/dex/DexFileReader.java
+++ b/src/main/java/com/android/tools/r8/dex/DexFileReader.java
@@ -983,7 +983,7 @@
     DexString shorty = indexedItems.getString(shortyIndex);
     DexType returnType = indexedItems.getType(returnTypeIndex);
     DexTypeList parameters = typeListAt(parametersOffsetIndex);
-    return dexItemFactory.createProto(shorty, returnType, parameters);
+    return dexItemFactory.createProto(returnType, shorty, parameters);
   }
 
   private DexMethod methodAt(int index) {
diff --git a/src/main/java/com/android/tools/r8/errors/InternalCompilerError.java b/src/main/java/com/android/tools/r8/errors/InternalCompilerError.java
index b51c7ec..a5080d3 100644
--- a/src/main/java/com/android/tools/r8/errors/InternalCompilerError.java
+++ b/src/main/java/com/android/tools/r8/errors/InternalCompilerError.java
@@ -14,8 +14,8 @@
   public InternalCompilerError() {
   }
 
-  public InternalCompilerError(String s) {
-    super(s);
+  public InternalCompilerError(String message) {
+    super(message);
   }
 
   public InternalCompilerError(String message, Throwable cause) {
diff --git a/src/main/java/com/android/tools/r8/graph/DexCode.java b/src/main/java/com/android/tools/r8/graph/DexCode.java
index 6a2fcbf..a05299c 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -168,11 +168,10 @@
 
   public IRCode buildIR(
       DexEncodedMethod encodedMethod,
-      ValueNumberGenerator valueNumberGenerator,
-      InternalOptions options)
+      InternalOptions options, ValueNumberGenerator valueNumberGenerator)
       throws ApiLevelException {
     DexSourceCode source = new DexSourceCode(this, encodedMethod);
-    IRBuilder builder = new IRBuilder(encodedMethod, source, valueNumberGenerator, options);
+    IRBuilder builder = new IRBuilder(encodedMethod, source, options, valueNumberGenerator);
     return builder.build();
   }
 
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 99325f9..1974397 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -265,11 +265,11 @@
     return code == null ? null : code.buildIR(this, options);
   }
 
-  public IRCode buildIR(ValueNumberGenerator valueNumberGenerator, InternalOptions options)
+  public IRCode buildIR(InternalOptions options, ValueNumberGenerator valueNumberGenerator)
       throws ApiLevelException {
     return code == null
         ? null
-        : code.asDexCode().buildIR(this, valueNumberGenerator, options);
+        : code.asDexCode().buildIR(this, options, valueNumberGenerator);
   }
 
   public void setCode(
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 153c2e6..a7d44ba 100644
--- a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
+++ b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
@@ -346,23 +346,19 @@
     return createField(clazz, type, createString(name));
   }
 
-  public DexProto createProto(DexString shorty, DexType returnType, DexTypeList parameters) {
+  public DexProto createProto(DexType returnType, DexString shorty, DexTypeList parameters) {
     assert !sorted;
     DexProto proto = new DexProto(shorty, returnType, parameters);
     return canonicalize(protos, proto);
   }
 
-  public DexProto createProto(DexString shorty, DexType returnType, DexType[] parameters) {
+  public DexProto createProto(DexType returnType, DexType... parameters) {
     assert !sorted;
-    return createProto(shorty, returnType,
+    return createProto(returnType, createShorty(returnType, parameters),
         parameters.length == 0 ? DexTypeList.empty() : new DexTypeList(parameters));
   }
 
-  public DexProto createProto(DexType returnType, DexType... parameters) {
-    return createProto(createShorty(returnType, parameters), returnType, parameters);
-  }
-
-  public DexString createShorty(DexType returnType, DexType[] argumentTypes) {
+  private DexString createShorty(DexType returnType, DexType[] argumentTypes) {
     StringBuilder shortyBuilder = new StringBuilder();
     shortyBuilder.append(returnType.toShorty());
     for (DexType argumentType : argumentTypes) {
@@ -407,7 +403,7 @@
     for (int i = 0; i < parameterDescriptors.length; i++) {
       parameterTypes[i] = createType(parameterDescriptors[i]);
     }
-    DexProto proto = createProto(shorty(returnType, parameterTypes), returnType, parameterTypes);
+    DexProto proto = createProto(returnType, parameterTypes);
 
     return createMethod(clazz, proto, name);
   }
@@ -464,20 +460,6 @@
     return method.name == classConstructorMethodName;
   }
 
-  private DexString shorty(DexType returnType, DexType[] parameters) {
-    StringBuilder builder = new StringBuilder();
-    addToShorty(builder, returnType);
-    for (DexType parameter : parameters) {
-      addToShorty(builder, parameter);
-    }
-    return createString(builder.toString());
-  }
-
-  private void addToShorty(StringBuilder builder, DexType type) {
-    char first = type.toDescriptorString().charAt(0);
-    builder.append(first == '[' ? 'L' : first);
-  }
-
   private static <S extends PresortedComparable<S>> void assignSortedIndices(Collection<S> items,
       NamingLens namingLens) {
     List<S> sorted = new ArrayList<>(items);
diff --git a/src/main/java/com/android/tools/r8/graph/GraphLense.java b/src/main/java/com/android/tools/r8/graph/GraphLense.java
index 3abe7c5..7d7d366 100644
--- a/src/main/java/com/android/tools/r8/graph/GraphLense.java
+++ b/src/main/java/com/android/tools/r8/graph/GraphLense.java
@@ -44,10 +44,10 @@
     }
 
     public GraphLense build(DexItemFactory dexItemFactory) {
-      return build(new IdentityGraphLense(), dexItemFactory);
+      return build(dexItemFactory, new IdentityGraphLense());
     }
 
-    public GraphLense build(GraphLense previousLense, DexItemFactory dexItemFactory) {
+    public GraphLense build(DexItemFactory dexItemFactory, GraphLense previousLense) {
       return new NestedGraphLense(typeMap, methodMap, fieldMap, previousLense, dexItemFactory);
     }
 
@@ -118,7 +118,7 @@
     @Override
     public DexType lookupType(DexType type, DexEncodedMethod context) {
       if (type.isArrayType()) {
-        synchronized(this) {
+        synchronized (this) {
           // This block need to be synchronized due to arrayTypeCache.
           DexType result = arrayTypeCache.get(type);
           if (result == null) {
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 757ae71..6bf1a17 100644
--- a/src/main/java/com/android/tools/r8/graph/JarApplicationReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarApplicationReader.java
@@ -18,6 +18,7 @@
  * It does not currently support multithreaded reading.
  */
 public class JarApplicationReader {
+
   public final InternalOptions options;
 
   ConcurrentHashMap<String, DexString> stringCache = new ConcurrentHashMap<>();
@@ -111,8 +112,8 @@
       argumentDescriptors[i] = arguments[i].getDescriptor();
     }
     DexProto proto = options.itemFactory.createProto(
-        getString(shortyDescriptor.toString()),
         getTypeFromDescriptor(returnType.getDescriptor()),
+        getString(shortyDescriptor.toString()),
         getTypeListFromDescriptors(argumentDescriptors));
     return proto;
   }
diff --git a/src/main/java/com/android/tools/r8/graph/JarCode.java b/src/main/java/com/android/tools/r8/graph/JarCode.java
index e842028..44bc529 100644
--- a/src/main/java/com/android/tools/r8/graph/JarCode.java
+++ b/src/main/java/com/android/tools/r8/graph/JarCode.java
@@ -94,34 +94,34 @@
       throws ApiLevelException {
     triggerDelayedParsingIfNeccessary();
     return options.debug
-        ? internalBuildWithLocals(encodedMethod, null, options)
-        : internalBuild(encodedMethod, null, options);
+        ? internalBuildWithLocals(encodedMethod, options, null)
+        : internalBuild(encodedMethod, options, null);
   }
 
   public IRCode buildIR(
-      DexEncodedMethod encodedMethod, ValueNumberGenerator generator, InternalOptions options)
+      DexEncodedMethod encodedMethod, InternalOptions options, ValueNumberGenerator generator)
       throws ApiLevelException {
     assert generator != null;
     triggerDelayedParsingIfNeccessary();
     return options.debug
-        ? internalBuildWithLocals(encodedMethod, generator, options)
-        : internalBuild(encodedMethod, generator, options);
+        ? internalBuildWithLocals(encodedMethod, options, generator)
+        : internalBuild(encodedMethod, options, generator);
   }
 
   private IRCode internalBuildWithLocals(
-      DexEncodedMethod encodedMethod, ValueNumberGenerator generator, InternalOptions options)
+      DexEncodedMethod encodedMethod, InternalOptions options, ValueNumberGenerator generator)
       throws ApiLevelException {
     try {
-      return internalBuild(encodedMethod, generator, options);
+      return internalBuild(encodedMethod, options, generator);
     } catch (InvalidDebugInfoException e) {
       options.warningInvalidDebugInfo(encodedMethod, origin, e);
       node.localVariables.clear();
-      return internalBuild(encodedMethod, generator, options);
+      return internalBuild(encodedMethod, options, generator);
     }
   }
 
   private IRCode internalBuild(
-      DexEncodedMethod encodedMethod, ValueNumberGenerator generator, InternalOptions options)
+      DexEncodedMethod encodedMethod, InternalOptions options, ValueNumberGenerator generator)
       throws ApiLevelException {
     if (!options.debug) {
       node.localVariables.clear();
@@ -130,7 +130,7 @@
     IRBuilder builder =
         (generator == null)
             ? new IRBuilder(encodedMethod, source, options)
-            : new IRBuilder(encodedMethod, source, generator, options);
+            : new IRBuilder(encodedMethod, source, options, generator);
     return builder.build();
   }
 
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 bfbfb02..37b3119 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
@@ -959,10 +959,10 @@
    * <p>The constructed basic block has no predecessors and has one
    * successors which is the target block.
    *
-   * @param target the target of the goto block
    * @param blockNumber the block number of the goto block
+   * @param target the target of the goto block
    */
-  public static BasicBlock createGotoBlock(BasicBlock target, int blockNumber) {
+  public static BasicBlock createGotoBlock(int blockNumber, BasicBlock target) {
     BasicBlock block = createGotoBlock(blockNumber);
     block.getSuccessors().add(target);
     return block;
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 ff9e257..7bf8ec1 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
@@ -219,7 +219,7 @@
   }
 
   @Override
-  public BasicBlock split(int instructions, IRCode code, ListIterator<BasicBlock> blocksIterator) {
+  public BasicBlock split(IRCode code, int instructions, ListIterator<BasicBlock> blocksIterator) {
     // Split at the current cursor position.
     BasicBlock newBlock = split(code, blocksIterator);
     assert blocksIterator == null || IteratorUtils.peekPrevious(blocksIterator) == newBlock;
@@ -341,7 +341,7 @@
       List<BasicBlock> blocksToRemove, DexType downcast) {
     assert blocksToRemove != null;
     boolean inlineeCanThrow = canThrow(inlinee);
-    BasicBlock invokeBlock = split(1, code, blocksIterator);
+    BasicBlock invokeBlock = split(code, 1, blocksIterator);
     assert invokeBlock.getInstructions().size() == 2;
     assert invokeBlock.getInstructions().getFirst().isInvoke();
 
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 5e0fe8e..e5fb6ed 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
@@ -74,7 +74,7 @@
           // correct predecessor and successor structure. It is inserted
           // at the end of the list of blocks disregarding branching
           // structure.
-          BasicBlock newBlock = BasicBlock.createGotoBlock(block, nextBlockNumber++);
+          BasicBlock newBlock = BasicBlock.createGotoBlock(nextBlockNumber++, block);
           newBlocks.add(newBlock);
           pred.replaceSuccessor(block, newBlock);
           newBlock.getPredecessors().add(pred);
@@ -108,7 +108,7 @@
           fallthrough = fallthrough.exit().fallthroughBlock();
         }
         if (fallthrough != null) {
-          BasicBlock newFallthrough = BasicBlock.createGotoBlock(fallthrough, nextBlockNumber++);
+          BasicBlock newFallthrough = BasicBlock.createGotoBlock(nextBlockNumber++, fallthrough);
           current.exit().setFallthroughBlock(newFallthrough);
           newFallthrough.getPredecessors().add(current);
           fallthrough.replacePredecessor(current, newFallthrough);
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 fc7817b..603ce6e 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
@@ -126,8 +126,8 @@
    * If the current block have catch handlers these catch handlers will be attached to the block
    * containing the throwing instruction after the split.
    *
-   * @param instructions the number of instructions to include in the second block.
    * @param code the IR code for the block this iterator originates from.
+   * @param instructions the number of instructions to include in the second block.
    * @param blockIterator basic block iterator used to iterate the blocks. This must be positioned
    * just after the block for this is the instruction iterator. After this method returns it will be
    * positioned just after the second block inserted. Calling {@link #remove} without further
@@ -135,13 +135,13 @@
    * @return Returns the new block with the instructions after the cursor.
    */
   // TODO(sgjesse): Refactor to avoid the need for passing code and blockIterator.
-  BasicBlock split(int instructions, IRCode code, ListIterator<BasicBlock> blockIterator);
+  BasicBlock split(IRCode code, int instructions, ListIterator<BasicBlock> blockIterator);
 
   /**
-   * See {@link #split(int, IRCode, ListIterator)}.
+   * See {@link #split(IRCode, int, ListIterator)}.
    */
-  default BasicBlock split(int instructions, IRCode code) {
-    return split(instructions, code, null);
+  default BasicBlock split(IRCode code, int instructions) {
+    return split(code, instructions, null);
   }
 
   /**
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 78c5c4e..dc6d500 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
@@ -70,7 +70,7 @@
     for (BasicBlock pred : block.getPredecessors()) {
       EdgeType edgeType = pred.getEdgeType(block);
       // Since this read has been delayed we must provide the local info for the value.
-      Value operand = builder.readRegister(register, pred, edgeType, type, getLocalInfo());
+      Value operand = builder.readRegister(register, type, pred, edgeType, getLocalInfo());
       canBeNull |= operand.canBeNull();
       appendOperand(operand);
     }
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 1915155..ea43cf8 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
@@ -593,10 +593,10 @@
 
   public boolean isDead(InternalOptions options) {
     // Totally unused values are trivially dead.
-    return !isUsed() || isDead(new HashSet<>(), options);
+    return !isUsed() || isDead(options, new HashSet<>());
   }
 
-  protected boolean isDead(Set<Value> active, InternalOptions options) {
+  protected boolean isDead(InternalOptions options, Set<Value> active) {
     // If the value has debug users we cannot eliminate it since it represents a value in a local
     // variable that should be visible in the debugger.
     if (numberOfDebugUsers() != 0) {
@@ -613,12 +613,12 @@
       // Instructions with no out value cannot be dead code by the current definition
       // (unused out value). They typically side-effect input values or deals with control-flow.
       assert outValue != null;
-      if (!active.contains(outValue) && !outValue.isDead(active, options)) {
+      if (!active.contains(outValue) && !outValue.isDead(options, active)) {
         return false;
       }
     }
     for (Phi phi : uniquePhiUsers()) {
-      if (!active.contains(phi) && !phi.isDead(active, options)) {
+      if (!active.contains(phi) && !phi.isDead(options, active)) {
         return false;
       }
     }
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 042232b..2335f2b 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
@@ -386,7 +386,7 @@
       if (ifsNeedingRewrite.contains(block)) {
         If theIf = block.exit().asIf();
         BasicBlock trueTarget = theIf.getTrueTarget();
-        BasicBlock newBlock = BasicBlock.createGotoBlock(trueTarget, ir.blocks.size());
+        BasicBlock newBlock = BasicBlock.createGotoBlock(ir.blocks.size(), trueTarget);
         theIf.setTrueTarget(newBlock);
         theIf.invert();
         it.add(newBlock);
@@ -641,7 +641,8 @@
       item = tryItems.get(i);
       coalescedTryItems.add(item);
       // Trim the range start for non-throwing instructions when starting a new range.
-      List<com.android.tools.r8.ir.code.Instruction> instructions = blocksWithHandlers.get(i).getInstructions();
+      List<com.android.tools.r8.ir.code.Instruction> instructions = blocksWithHandlers.get(i)
+          .getInstructions();
       for (com.android.tools.r8.ir.code.Instruction insn : instructions) {
         if (insn.instructionTypeCanThrow()) {
           item.start = getInfo(insn).getOffset();
@@ -819,7 +820,8 @@
     private Instruction[] instructions;
     private final int size;
 
-    public MultiFixedSizeInfo(com.android.tools.r8.ir.code.Instruction ir, Instruction[] instructions) {
+    public MultiFixedSizeInfo(com.android.tools.r8.ir.code.Instruction ir,
+        Instruction[] instructions) {
       super(ir);
       this.instructions = instructions;
       int size = 0;
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 2dceeab..4a96ae6 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
@@ -291,14 +291,13 @@
   private int nextBlockNumber = 0;
 
   public IRBuilder(DexEncodedMethod method, SourceCode source, InternalOptions options) {
-    this(method, source, new ValueNumberGenerator(), options);
+    this(method, source, options, new ValueNumberGenerator());
   }
 
   public IRBuilder(
       DexEncodedMethod method,
       SourceCode source,
-      ValueNumberGenerator valueNumberGenerator,
-      InternalOptions options) {
+      InternalOptions options, ValueNumberGenerator valueNumberGenerator) {
     assert source != null;
     this.method = method;
     this.source = source;
@@ -1624,7 +1623,7 @@
 
   public Value readRegister(int register, MoveType type) {
     DebugLocalInfo local = getCurrentLocal(register);
-    Value value = readRegister(register, currentBlock, EdgeType.NON_EDGE, type, local);
+    Value value = readRegister(register, type, currentBlock, EdgeType.NON_EDGE, local);
     // Check that any information about a current-local is consistent with the read.
     if (local != null && value.getLocalInfo() != local && !value.isUninitializedLocal()) {
       throw new InvalidDebugInfoException(
@@ -1643,10 +1642,10 @@
 
   public Value readRegisterIgnoreLocal(int register, MoveType type) {
     DebugLocalInfo local = getCurrentLocal(register);
-    return readRegister(register, currentBlock, EdgeType.NON_EDGE, type, local);
+    return readRegister(register, type, currentBlock, EdgeType.NON_EDGE, local);
   }
 
-  public Value readRegister(int register, BasicBlock block, EdgeType readingEdge, MoveType type,
+  public Value readRegister(int register, MoveType type, BasicBlock block, EdgeType readingEdge,
       DebugLocalInfo local) {
     checkRegister(register);
     Value value = block.readCurrentDefinition(register, readingEdge);
@@ -1665,7 +1664,7 @@
       assert block.verifyFilledPredecessors();
       BasicBlock pred = block.getPredecessors().get(0);
       EdgeType edgeType = pred.getEdgeType(block);
-      value = readRegister(register, pred, edgeType, type, local);
+      value = readRegister(register, type, pred, edgeType, local);
     } else {
       Phi phi = new Phi(valueNumberGenerator.next(), block, type, local);
       // We need to write the phi before adding operands to break cycles. If the phi is trivial
@@ -1939,7 +1938,7 @@
       BasicBlock target = pair.second;
 
       // New block with one unfilled predecessor.
-      BasicBlock newBlock = BasicBlock.createGotoBlock(target, nextBlockNumber++);
+      BasicBlock newBlock = BasicBlock.createGotoBlock(nextBlockNumber++, target);
       blocks.add(newBlock);
       newBlock.incrementUnfilledPredecessorCount();
 
@@ -2018,7 +2017,7 @@
             int otherPredecessorIndex = values.get(v);
             BasicBlock joinBlock = joinBlocks.get(otherPredecessorIndex);
             if (joinBlock == null) {
-              joinBlock = BasicBlock.createGotoBlock(block, blocks.size() + blocksToAdd.size());
+              joinBlock = BasicBlock.createGotoBlock(blocks.size() + blocksToAdd.size(), block);
               joinBlocks.put(otherPredecessorIndex, joinBlock);
               blocksToAdd.add(joinBlock);
               BasicBlock otherPredecessor = block.getPredecessors().get(otherPredecessorIndex);
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 dda8031..da022fe 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
@@ -82,11 +82,8 @@
   private DexString highestSortingString;
 
   private IRConverter(
-      Timing timing,
-      AppInfo appInfo,
-      GraphLense graphLense,
-      InternalOptions options,
-      CfgPrinter printer,
+      AppInfo appInfo, InternalOptions options, Timing timing,
+      CfgPrinter printer, GraphLense graphLense,
       boolean enableWholeProgramOptimizations) {
     assert appInfo != null;
     assert options != null;
@@ -127,30 +124,26 @@
   public IRConverter(
       AppInfo appInfo,
       InternalOptions options) {
-    this(null, appInfo, null, options, null, false);
+    this(appInfo, options, null, null, null, false);
   }
 
   /**
    * Create an IR converter for processing methods with full program optimization disabled.
    */
   public IRConverter(
-      Timing timing,
-      AppInfo appInfo,
-      InternalOptions options,
+      AppInfo appInfo, InternalOptions options, Timing timing,
       CfgPrinter printer) {
-    this(timing, appInfo, null, options, printer, false);
+    this(appInfo, options, timing, printer, null, false);
   }
 
   /**
    * Create an IR converter for processing methods with full program optimization enabled.
    */
   public IRConverter(
-      Timing timing,
-      AppInfoWithSubtyping appInfo,
-      InternalOptions options,
+      AppInfoWithSubtyping appInfo, InternalOptions options, Timing timing,
       CfgPrinter printer,
       GraphLense graphLense) {
-    this(timing, appInfo, graphLense, options, printer, true);
+    this(appInfo, options, timing, printer, graphLense, true);
   }
 
   private boolean enableInterfaceMethodDesugaring() {
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 ab3efdb..b5fbb06 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
@@ -116,7 +116,7 @@
               // If the current block has catch handlers split the check cast into its own block.
               if (newInvoke.getBlock().hasCatchHandlers()) {
                 iterator.previous();
-                iterator.split(1, code, blocks);
+                iterator.split(code, 1, blocks);
               }
             }
           }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/AccessorMethodSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/AccessorMethodSourceCode.java
index 160da3c..1cf64fd 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/AccessorMethodSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/AccessorMethodSourceCode.java
@@ -20,7 +20,7 @@
 final class AccessorMethodSourceCode extends SynthesizedLambdaSourceCode {
 
   AccessorMethodSourceCode(LambdaClass lambda) {
-    super(/* no receiver for static method */ null, lambda, lambda.target.callTarget);
+    super(lambda, lambda.target.callTarget, null /* no receiver for static method */);
     // We should never need an accessor for interface methods since
     // they are supposed to be public.
     assert !descriptor().implHandle.type.isInvokeInterface();
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 31c6de1..408f53b 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
@@ -58,6 +58,7 @@
 //       forward the call to an appropriate method in interface companion class.
 //
 public final class InterfaceMethodRewriter {
+
   // Public for testing.
   public static final String COMPANION_CLASS_NAME_SUFFIX = "-CC";
   private static final String DEFAULT_METHOD_PREFIX = "$default$";
@@ -75,11 +76,17 @@
    */
   private Set<DexItem> reportedMissing = Sets.newIdentityHashSet();
 
-  /** Defines a minor variation in desugaring. */
+  /**
+   * Defines a minor variation in desugaring.
+   */
   public enum Flavor {
-    /** Process all application resources. */
+    /**
+     * Process all application resources.
+     */
     IncludeAllResources,
-    /** Process all but DEX application resources. */
+    /**
+     * Process all but DEX application resources.
+     */
     ExcludeDexResources
   }
 
@@ -174,13 +181,14 @@
       } else if (holderClass.isInterface()) {
         throw new Unimplemented(
             "Desugaring of static interface method handle as in `"
-            + referencedFrom.toSourceString() + "` in is not yet supported.");
+                + referencedFrom.toSourceString() + "` in is not yet supported.");
       }
     }
   }
 
   /**
    * Returns the class definition for the specified type.
+   *
    * @return may return null if no definition for the given type is available.
    */
   final DexClass findDefinitionFor(DexType type) {
@@ -313,7 +321,7 @@
           .append("`");
     }
     options.diagnosticsHandler.warning(
-        new StringDiagnostic(classToDesugar.getOrigin(), builder.toString()));
+        new StringDiagnostic(builder.toString(), classToDesugar.getOrigin()));
   }
 
   private void warnMissingType(DexMethod referencedFrom, DexType missing) {
@@ -331,6 +339,6 @@
         .append("`");
     DexClass referencedFromClass = converter.appInfo.definitionFor(referencedFrom.getHolder());
     options.diagnosticsHandler.warning(
-        new StringDiagnostic(referencedFromClass.getOrigin(), builder.toString()));
+        new StringDiagnostic(builder.toString(), referencedFromClass.getOrigin()));
   }
 }
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java
index 539fcf0..411ab4c 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java
@@ -15,7 +15,7 @@
 final class LambdaClassConstructorSourceCode extends SynthesizedLambdaSourceCode {
 
   LambdaClassConstructorSourceCode(LambdaClass lambda) {
-    super(null /* Class initializer is static */, lambda, lambda.classConstructor);
+    super(lambda, lambda.classConstructor, null /* Class initializer is static */);
     assert lambda.instanceField != null;
   }
 
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/SynthesizedLambdaSourceCode.java b/src/main/java/com/android/tools/r8/ir/desugar/SynthesizedLambdaSourceCode.java
index 9a3531f..bd38e1a 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/SynthesizedLambdaSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/SynthesizedLambdaSourceCode.java
@@ -16,14 +16,14 @@
   final DexMethod currentMethod;
   final LambdaClass lambda;
 
-  SynthesizedLambdaSourceCode(DexType receiver, LambdaClass lambda, DexMethod currentMethod) {
+  SynthesizedLambdaSourceCode(LambdaClass lambda, DexMethod currentMethod, DexType receiver) {
     super(receiver, currentMethod.proto);
     this.lambda = lambda;
     this.currentMethod = currentMethod;
   }
 
   SynthesizedLambdaSourceCode(LambdaClass lambda, DexMethod currentMethod) {
-    this(lambda.type, lambda, currentMethod);
+    this(lambda, currentMethod, lambda.type);
   }
 
   final LambdaDescriptor descriptor() {
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 9699ec1..ad4639e 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
@@ -232,14 +232,14 @@
         GraphLense graphLense, InternalOptions options) throws ApiLevelException {
       if (target.isProcessed()) {
         assert target.getCode().isDexCode();
-        return target.buildIR(generator, options);
+        return target.buildIR(options, generator);
       } else {
         // Build the IR for a yet not processed method, and perform minimal IR processing.
         IRCode code;
         if (target.getCode().isJarCode()) {
-          code = target.getCode().asJarCode().buildIR(target, generator, options);
+          code = target.getCode().asJarCode().buildIR(target, options, generator);
         } else {
-          code = target.getCode().asDexCode().buildIR(target, generator, options);
+          code = target.getCode().asDexCode().buildIR(target, options, generator);
         }
         new LensCodeRewriter(graphLense, appInfo).rewrite(code, target);
         return code;
diff --git a/src/main/java/com/android/tools/r8/naming/MinifiedNameMapPrinter.java b/src/main/java/com/android/tools/r8/naming/MinifiedNameMapPrinter.java
index e9ec08c..0e971c2 100644
--- a/src/main/java/com/android/tools/r8/naming/MinifiedNameMapPrinter.java
+++ b/src/main/java/com/android/tools/r8/naming/MinifiedNameMapPrinter.java
@@ -43,24 +43,24 @@
     return copy;
   }
 
-  private void write(DexProgramClass clazz, PrintStream out) {
+  private void writeClass(DexProgramClass clazz, PrintStream out) {
     seenTypes.add(clazz.type);
     DexString descriptor = namingLens.lookupDescriptor(clazz.type);
     out.print(DescriptorUtils.descriptorToJavaType(clazz.type.descriptor.toSourceString()));
     out.print(" -> ");
     out.print(DescriptorUtils.descriptorToJavaType(descriptor.toSourceString()));
     out.println(":");
-    write(sortedCopy(
+    writeFields(sortedCopy(
         clazz.instanceFields(), Comparator.comparing(DexEncodedField::toSourceString)), out);
-    write(sortedCopy(
+    writeFields(sortedCopy(
         clazz.staticFields(), Comparator.comparing(DexEncodedField::toSourceString)), out);
-    write(sortedCopy(
+    writeMethods(sortedCopy(
         clazz.directMethods(), Comparator.comparing(DexEncodedMethod::toSourceString)), out);
-    write(sortedCopy(
+    writeMethods(sortedCopy(
         clazz.virtualMethods(), Comparator.comparing(DexEncodedMethod::toSourceString)), out);
   }
 
-  private void write(DexType type, PrintStream out) {
+  private void writeType(DexType type, PrintStream out) {
     if (type.isClassType() && seenTypes.add(type)) {
       DexString descriptor = namingLens.lookupDescriptor(type);
       out.print(DescriptorUtils.descriptorToJavaType(type.descriptor.toSourceString()));
@@ -70,7 +70,7 @@
     }
   }
 
-  private void write(DexEncodedField[] fields, PrintStream out) {
+  private void writeFields(DexEncodedField[] fields, PrintStream out) {
     for (DexEncodedField encodedField : fields) {
       DexField field = encodedField.field;
       DexString renamed = namingLens.lookupName(field);
@@ -102,7 +102,7 @@
     out.println(renamed);
   }
 
-  private void write(DexEncodedMethod[] methods, PrintStream out) {
+  private void writeMethods(DexEncodedMethod[] methods, PrintStream out) {
     for (DexEncodedMethod encodedMethod : methods) {
       DexMethod method = encodedMethod.method;
       DexString renamed = namingLens.lookupName(method);
@@ -125,9 +125,9 @@
     // First write out all classes that have been renamed.
     List<DexProgramClass> classes = new ArrayList<>(application.classes());
     classes.sort(Comparator.comparing(DexProgramClass::toSourceString));
-    classes.forEach(clazz -> write(clazz, out));
+    classes.forEach(clazz -> writeClass(clazz, out));
     // Now write out all types only mentioned in descriptors that have been renamed.
-    namingLens.forAllRenamedTypes(type -> write(type, out));
+    namingLens.forAllRenamedTypes(type -> writeType(type, out));
   }
 
   public void write(Path destination) throws IOException {
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 17da59b..71d6e46 100644
--- a/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
+++ b/src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java
@@ -219,6 +219,6 @@
         appInfo::lookupStaticTarget, DexClass::findStaticTarget);
     computeFieldRebinding(Sets.union(appInfo.instanceFieldReads, appInfo.instanceFieldWrites),
         appInfo::lookupInstanceTarget, DexClass::findInstanceTarget);
-    return builder.build(lense, appInfo.dexItemFactory);
+    return builder.build(appInfo.dexItemFactory, lense);
   }
 }
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 44b3393..cb69320 100644
--- a/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceStrings.java
+++ b/src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceStrings.java
@@ -12,6 +12,7 @@
 import joptsimple.internal.Strings;
 
 public class ProguardConfigurationSourceStrings implements ProguardConfigurationSource {
+
   private final Path basePath;
   private final List<String> config;
 
@@ -20,13 +21,13 @@
    * {@param basePath}, which allows all other options that use a relative path to reach out
    * to desired paths appropriately.
    */
-  public ProguardConfigurationSourceStrings(Path basePath, List<String> config) {
+  public ProguardConfigurationSourceStrings(List<String> config, Path basePath) {
     this.basePath = basePath;
     this.config = config;
   }
 
   private ProguardConfigurationSourceStrings(List<String> config) {
-    this(Paths.get("."), config);
+    this(config, Paths.get("."));
   }
 
   @VisibleForTesting
@@ -36,7 +37,7 @@
   }
 
   @Override
-  public String get() throws IOException{
+  public String get() throws IOException {
     return Strings.join(config, System.lineSeparator());
   }
 
diff --git a/src/main/java/com/android/tools/r8/shaking/SimpleClassMerger.java b/src/main/java/com/android/tools/r8/shaking/SimpleClassMerger.java
index 9affabf..b50d78e 100644
--- a/src/main/java/com/android/tools/r8/shaking/SimpleClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/SimpleClassMerger.java
@@ -181,7 +181,7 @@
     if (Log.ENABLED) {
       Log.debug(getClass(), "Merged %d classes.", numberOfMerges);
     }
-    return renamedMembersLense.build(graphLense, application.dexItemFactory);
+    return renamedMembersLense.build(application.dexItemFactory, graphLense);
   }
 
   private class ClassMerger {
@@ -438,7 +438,7 @@
         DexType fixed = fixupType(type);
         lense.map(type, fixed);
       }
-      return lense.build(graphLense, application.dexItemFactory);
+      return lense.build(application.dexItemFactory, graphLense);
     }
 
     private DexEncodedMethod[] removeDupes(DexEncodedMethod[] methods) {
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidApp.java b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
index 24f5c08..980eb19 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApp.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
@@ -596,11 +596,11 @@
     /**
      * Add Java-bytecode program data.
      */
-    public Builder addClassProgramData(Origin origin, byte[] data) {
+    public Builder addClassProgramData(byte[] data, Origin origin) {
       return addProgramResources(Kind.CLASS, Resource.fromBytes(origin, data));
     }
 
-    public Builder addClassProgramData(Origin origin, byte[] data, Set<String> classDescriptors) {
+    public Builder addClassProgramData(byte[] data, Origin origin, Set<String> classDescriptors) {
       return addProgramResources(Kind.CLASS, Resource.fromBytes(origin, data, classDescriptors));
     }
 
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidAppOutputSink.java b/src/main/java/com/android/tools/r8/utils/AndroidAppOutputSink.java
index a4f2236..0f85cac 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidAppOutputSink.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidAppOutputSink.java
@@ -92,7 +92,7 @@
     } else if (!classFiles.isEmpty()) {
       assert dexFilesWithPrimary.isEmpty() && dexFilesWithId.isEmpty();
       classFiles.forEach(
-          d -> builder.addClassProgramData(Origin.unknown(), d.contents, d.descriptors));
+          d -> builder.addClassProgramData(d.contents, Origin.unknown(), d.descriptors));
     }
     closed = true;
     super.close();
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 a04e28f..1c0cc61 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -125,6 +125,7 @@
   public boolean minimalMainDex;
 
   public static class InvalidParameterAnnotationInfo {
+
     final DexMethod method;
     final int expectedParameterCount;
     final int actualParameterCount;
@@ -190,7 +191,7 @@
               .append(" actual count: ")
               .append(info.actualParameterCount);
         }
-        diagnosticsHandler.info(new StringDiagnostic(origin, builder.toString()));
+        diagnosticsHandler.info(new StringDiagnostic(builder.toString(), origin));
       }
       printed = true;
     }
@@ -209,7 +210,7 @@
         for (DexEncodedMethod method : warningInvalidDebugInfo.get(origin)) {
           builder.append("\n  ").append(method.toSourceString());
         }
-        diagnosticsHandler.info(new StringDiagnostic(origin, builder.toString()));
+        diagnosticsHandler.info(new StringDiagnostic(builder.toString(), origin));
       }
       printed = true;
       printOutdatedToolchain = true;
diff --git a/src/main/java/com/android/tools/r8/utils/StringDiagnostic.java b/src/main/java/com/android/tools/r8/utils/StringDiagnostic.java
index b2add4a..d2c6560 100644
--- a/src/main/java/com/android/tools/r8/utils/StringDiagnostic.java
+++ b/src/main/java/com/android/tools/r8/utils/StringDiagnostic.java
@@ -7,14 +7,15 @@
 import com.android.tools.r8.Resource.Origin;
 
 public class StringDiagnostic implements Diagnostic {
+
   private final Origin origin;
   private final String message;
 
   public StringDiagnostic(String message) {
-    this(Origin.unknown(), message);
+    this(message, Origin.unknown());
   }
 
-  public StringDiagnostic(Origin origin, String message) {
+  public StringDiagnostic(String message, Origin origin) {
     this.origin = origin;
     this.message = message;
   }
diff --git a/src/test/java/com/android/tools/r8/ir/BasicBlockIteratorTest.java b/src/test/java/com/android/tools/r8/ir/BasicBlockIteratorTest.java
index cf191de..ad9a26a 100644
--- a/src/test/java/com/android/tools/r8/ir/BasicBlockIteratorTest.java
+++ b/src/test/java/com/android/tools/r8/ir/BasicBlockIteratorTest.java
@@ -4,7 +4,6 @@
 
 package com.android.tools.r8.ir;
 
-import com.android.tools.r8.CompilationException;
 import com.android.tools.r8.graph.DexApplication;
 import com.android.tools.r8.graph.DexEncodedMethod;
 import com.android.tools.r8.ir.code.BasicBlock;
@@ -52,12 +51,12 @@
     // Build the code, and split the code into three blocks.
     ValueNumberGenerator valueNumberGenerator = new ValueNumberGenerator();
     DexEncodedMethod method = getMethod(application, signature);
-    IRCode code = method.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode code = method.buildIR(new InternalOptions(), valueNumberGenerator);
     ListIterator<BasicBlock> blocks = code.listIterator();
     InstructionListIterator iter = blocks.next().listIterator();
     iter.nextUntil(i -> !i.isArgument());
     iter.previous();
-    iter.split(1, code, blocks);
+    iter.split(code, 1, blocks);
     return code;
   }
 
diff --git a/src/test/java/com/android/tools/r8/ir/InlineTest.java b/src/test/java/com/android/tools/r8/ir/InlineTest.java
index 8258324..27a3ce9 100644
--- a/src/test/java/com/android/tools/r8/ir/InlineTest.java
+++ b/src/test/java/com/android/tools/r8/ir/InlineTest.java
@@ -76,13 +76,13 @@
     // Return the processed method for inspection.
     ValueNumberGenerator valueNumberGenerator = new ValueNumberGenerator();
     DexEncodedMethod method = getMethod(application, signature);
-    IRCode code = method.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode code = method.buildIR(new InternalOptions(), valueNumberGenerator);
 
     DexEncodedMethod methodA = getMethod(application, signatureA);
-    IRCode codeA = methodA.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode codeA = methodA.buildIR(new InternalOptions(), valueNumberGenerator);
 
     DexEncodedMethod methodB = getMethod(application, signatureB);
-    IRCode codeB = methodB.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode codeB = methodB.buildIR(new InternalOptions(), valueNumberGenerator);
 
     return new SmaliTestBase.TestApplication(application, method, code,
         ImmutableList.of(codeA, codeB), valueNumberGenerator, options);
@@ -159,10 +159,10 @@
     // Return the processed method for inspection.
     ValueNumberGenerator valueNumberGenerator = new ValueNumberGenerator();
     DexEncodedMethod method = getMethod(application, signature);
-    IRCode code = method.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode code = method.buildIR(new InternalOptions(), valueNumberGenerator);
 
     DexEncodedMethod methodA = getMethod(application, signatureA);
-    IRCode codeA = methodA.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode codeA = methodA.buildIR(new InternalOptions(), valueNumberGenerator);
 
     return new TestApplication(application, method, code,
         ImmutableList.of(codeA), valueNumberGenerator, options);
@@ -239,19 +239,19 @@
     // Return the processed method for inspection.
     ValueNumberGenerator valueNumberGenerator = new ValueNumberGenerator();
     DexEncodedMethod method = getMethod(application, signature);
-    IRCode code = method.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode code = method.buildIR(new InternalOptions(), valueNumberGenerator);
 
     // Build three copies of a and b for inlining three times.
     List<IRCode> additionalCode = new ArrayList<>();
     for (int i = 0; i < 3; i++) {
       DexEncodedMethod methodA = getMethod(application, signatureA);
-      IRCode codeA = methodA.buildIR(valueNumberGenerator, new InternalOptions());
+      IRCode codeA = methodA.buildIR(new InternalOptions(), valueNumberGenerator);
       additionalCode.add(codeA);
     }
 
     for (int i = 0; i < 3; i++) {
       DexEncodedMethod methodB = getMethod(application, signatureB);
-      IRCode codeB = methodB.buildIR(valueNumberGenerator, new InternalOptions());
+      IRCode codeB = methodB.buildIR(new InternalOptions(), valueNumberGenerator);
       additionalCode.add(codeB);
     }
 
@@ -373,13 +373,13 @@
     // Return the processed method for inspection.
     ValueNumberGenerator valueNumberGenerator = new ValueNumberGenerator();
     DexEncodedMethod method = getMethod(application, signature);
-    IRCode code = method.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode code = method.buildIR(new InternalOptions(), valueNumberGenerator);
 
     DexEncodedMethod methodA = getMethod(application, signatureA);
-    IRCode codeA = methodA.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode codeA = methodA.buildIR(new InternalOptions(), valueNumberGenerator);
 
     DexEncodedMethod methodB = getMethod(application, signatureB);
-    IRCode codeB = methodB.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode codeB = methodB.buildIR(new InternalOptions(), valueNumberGenerator);
 
     return new TestApplication(application, method, code,
         ImmutableList.of(codeA, codeB), valueNumberGenerator, options);
@@ -487,13 +487,13 @@
     // Return the processed method for inspection.
     ValueNumberGenerator valueNumberGenerator = new ValueNumberGenerator();
     DexEncodedMethod method = getMethod(application, signature);
-    IRCode code = method.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode code = method.buildIR(new InternalOptions(), valueNumberGenerator);
 
     DexEncodedMethod methodA = getMethod(application, signatureA);
-    IRCode codeA = methodA.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode codeA = methodA.buildIR(new InternalOptions(), valueNumberGenerator);
 
     DexEncodedMethod methodB = getMethod(application, signatureB);
-    IRCode codeB = methodB.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode codeB = methodB.buildIR(new InternalOptions(), valueNumberGenerator);
 
     return new TestApplication(application, method, code,
         ImmutableList.of(codeA, codeB), valueNumberGenerator, options);
@@ -600,13 +600,13 @@
     // Return the processed method for inspection.
     ValueNumberGenerator valueNumberGenerator = new ValueNumberGenerator();
     DexEncodedMethod method = getMethod(application, signature);
-    IRCode code = method.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode code = method.buildIR(new InternalOptions(), valueNumberGenerator);
 
     DexEncodedMethod methodA = getMethod(application, signatureA);
-    IRCode codeA = methodA.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode codeA = methodA.buildIR(new InternalOptions(), valueNumberGenerator);
 
     DexEncodedMethod methodB = getMethod(application, signatureB);
-    IRCode codeB = methodB.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode codeB = methodB.buildIR(new InternalOptions(), valueNumberGenerator);
 
     return new TestApplication(application, method, code,
         ImmutableList.of(codeA, codeB), valueNumberGenerator, options);
@@ -714,19 +714,19 @@
     // Return the processed method for inspection.
     ValueNumberGenerator valueNumberGenerator = new ValueNumberGenerator();
     DexEncodedMethod method = getMethod(application, signature);
-    IRCode code = method.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode code = method.buildIR(new InternalOptions(), valueNumberGenerator);
 
     // Build three copies of a and b for inlining three times.
     List<IRCode> additionalCode = new ArrayList<>();
     for (int i = 0; i < 3; i++) {
       DexEncodedMethod methodA = getMethod(application, signatureA);
-      IRCode codeA = methodA.buildIR(valueNumberGenerator, new InternalOptions());
+      IRCode codeA = methodA.buildIR(new InternalOptions(), valueNumberGenerator);
       additionalCode.add(codeA);
     }
 
     for (int i = 0; i < 3; i++) {
       DexEncodedMethod methodB = getMethod(application, signatureB);
-      IRCode codeB = methodB.buildIR(valueNumberGenerator, new InternalOptions());
+      IRCode codeB = methodB.buildIR(new InternalOptions(), valueNumberGenerator);
       additionalCode.add(codeB);
     }
 
@@ -871,19 +871,19 @@
     // Return the processed method for inspection.
     ValueNumberGenerator valueNumberGenerator = new ValueNumberGenerator();
     DexEncodedMethod method = getMethod(application, signature);
-    IRCode code = method.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode code = method.buildIR(new InternalOptions(), valueNumberGenerator);
 
     // Build three copies of a and b for inlining three times.
     List<IRCode> additionalCode = new ArrayList<>();
     for (int i = 0; i < 3; i++) {
       DexEncodedMethod methodA = getMethod(application, signatureA);
-      IRCode codeA = methodA.buildIR(valueNumberGenerator, new InternalOptions());
+      IRCode codeA = methodA.buildIR(new InternalOptions(), valueNumberGenerator);
       additionalCode.add(codeA);
     }
 
     for (int i = 0; i < 3; i++) {
       DexEncodedMethod methodB = getMethod(application, signatureB);
-      IRCode codeB = methodB.buildIR(valueNumberGenerator, new InternalOptions());
+      IRCode codeB = methodB.buildIR(new InternalOptions(), valueNumberGenerator);
       additionalCode.add(codeB);
     }
 
@@ -1118,13 +1118,13 @@
     // Return the processed method for inspection.
     ValueNumberGenerator valueNumberGenerator = new ValueNumberGenerator();
     DexEncodedMethod method = getMethod(application, signature);
-    IRCode code = method.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode code = method.buildIR(new InternalOptions(), valueNumberGenerator);
 
     DexEncodedMethod methodA = getMethod(application, signatureA);
-    IRCode codeA = methodA.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode codeA = methodA.buildIR(new InternalOptions(), valueNumberGenerator);
 
     DexEncodedMethod methodB = getMethod(application, signatureB);
-    IRCode codeB = methodB.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode codeB = methodB.buildIR(new InternalOptions(), valueNumberGenerator);
 
     return new TestApplication(application, method, code,
         ImmutableList.of(codeA, codeB), valueNumberGenerator, options);
diff --git a/src/test/java/com/android/tools/r8/ir/InstructionIteratorTest.java b/src/test/java/com/android/tools/r8/ir/InstructionIteratorTest.java
index b9eef9c..a688ffe 100644
--- a/src/test/java/com/android/tools/r8/ir/InstructionIteratorTest.java
+++ b/src/test/java/com/android/tools/r8/ir/InstructionIteratorTest.java
@@ -52,12 +52,12 @@
     // Build the code, and split the code into three blocks.
     ValueNumberGenerator valueNumberGenerator = new ValueNumberGenerator();
     DexEncodedMethod method = getMethod(application, signature);
-    IRCode code = method.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode code = method.buildIR(new InternalOptions(), valueNumberGenerator);
     ListIterator<BasicBlock> blocks = code.listIterator();
     InstructionListIterator iter = blocks.next().listIterator();
     iter.nextUntil(i -> !i.isArgument());
     iter.previous();
-    iter.split(1, code, blocks);
+    iter.split(code, 1, blocks);
     return code;
   }
 
diff --git a/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java b/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java
index 7351206..9192b2f 100644
--- a/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java
+++ b/src/test/java/com/android/tools/r8/ir/SplitBlockTest.java
@@ -64,7 +64,7 @@
     // Return the processed method for inspection.
     ValueNumberGenerator valueNumberGenerator = new ValueNumberGenerator();
     DexEncodedMethod method = getMethod(application, signature);
-    IRCode code = method.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode code = method.buildIR(new InternalOptions(), valueNumberGenerator);
 
     return new TestApplication(application, method, code, valueNumberGenerator, options);
   }
@@ -123,7 +123,7 @@
       assertTrue(!block.getInstructions().get(i).isArgument());
 
       InstructionListIterator iterator = test.listIteratorAt(block, i);
-      BasicBlock newBlock = iterator.split(1, code);
+      BasicBlock newBlock = iterator.split(code, 1);
       assertTrue(code.isConsistentSSA());
 
       assertEquals(initialBlockCount + 2, code.blocks.size());
@@ -182,7 +182,7 @@
     // Return the processed method for inspection.
     ValueNumberGenerator valueNumberGenerator = new ValueNumberGenerator();
     DexEncodedMethod method = getMethod(application, signature);
-    IRCode code = method.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode code = method.buildIR(new InternalOptions(), valueNumberGenerator);
     return new TestApplication(application, method, code, valueNumberGenerator, options);
   }
 
@@ -247,7 +247,7 @@
       assertEquals(secondBlockInstructions, instructionCount);
 
       InstructionListIterator iterator = test.listIteratorAt(block, i);
-      BasicBlock newBlock = iterator.split(1, code);
+      BasicBlock newBlock = iterator.split(code, 1);
       assertTrue(code.isConsistentSSA());
 
       assertEquals(initialBlockCount + 2, code.blocks.size());
@@ -307,7 +307,7 @@
     // Return the processed method for inspection.
     ValueNumberGenerator valueNumberGenerator = new ValueNumberGenerator();
     DexEncodedMethod method = getMethod(application, signature);
-    IRCode code = method.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode code = method.buildIR(new InternalOptions(), valueNumberGenerator);
 
     return new TestApplication(application, method, code, valueNumberGenerator, options);
   }
@@ -431,7 +431,7 @@
     // Return the processed method for inspection.
     ValueNumberGenerator valueNumberGenerator = new ValueNumberGenerator();
     DexEncodedMethod method = getMethod(application, signature);
-    IRCode code = method.buildIR(valueNumberGenerator, new InternalOptions());
+    IRCode code = method.buildIR(new InternalOptions(), valueNumberGenerator);
 
     return new TestApplication(application, method, code, valueNumberGenerator, options);
   }
diff --git a/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java b/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java
index c8ea3bb..a1046db 100644
--- a/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java
@@ -99,7 +99,8 @@
     }
 
     @Override
-    public BasicBlock split(int instructions, IRCode code, ListIterator<BasicBlock> blockIterator) {
+    public BasicBlock split(IRCode code, int instructions,
+        ListIterator<BasicBlock> blockIterator) {
       throw new Unimplemented();
     }
 
diff --git a/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java b/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
index 9baed48..caada82 100644
--- a/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
+++ b/src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java
@@ -191,7 +191,7 @@
         }
       };
       builder.addClassProgramData(
-          origin, compile(clazz), Collections.singleton(clazz.getDescriptor()));
+          compile(clazz), origin, Collections.singleton(clazz.getDescriptor()));
     }
     return builder.build();
   }