diff options
author | Stephan Herhut <herhut@google.com> | 2017-10-26 11:29:51 +0200 |
---|---|---|
committer | Stephan Herhut <herhut@google.com> | 2017-10-26 11:29:51 +0200 |
commit | 6b06bfbaf7e8bbb3cddfe3889c04aa0f0fba4106 (patch) | |
tree | d9ec97e1b2b6b531d2f0c5a6ec3607fee88c2cec | |
parent | dbb891e86e8cf34b71c7096e1710009292d8e72e (diff) | |
download | r8-6b06bfbaf7e8bbb3cddfe3889c04aa0f0fba4106.tar.gz |
Enable InconsistentOverloads checking in ErrorProne.
Bug:
Change-Id: I1e0be14da4ba39e3f77464e6a249aa32b1b42bb9
45 files changed, 166 insertions, 178 deletions
diff --git a/build.gradle b/build.gradle index 9299592c7..c97aa9dfb 100644 --- a/build.gradle +++ b/build.gradle @@ -23,6 +23,7 @@ def errorProneConfiguration = [ '-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 6c4b9bcd0..6961024fd 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 @@ abstract class BaseCompilerCommand extends BaseCommand { 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 a5213c5b7..ae370ae38 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 @@ public final class D8 { 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 b96dfb73d..d0c99d503 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 @@ public class D8Command extends BaseCompilerCommand { } 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 9d7478d59..d29d9ae19 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 @@ public class GenerateMainDexListCommand extends BaseCommand { * 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 d9066bdf1..c9ede5106 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 @@ public class R8 { 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 1df56dbe7..d24eb43c9 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 @@ public class R8Command extends BaseCompilerCommand { } private Builder(AndroidApp app) { - super(app, CompilationMode.RELEASE); + super(CompilationMode.RELEASE, app); } @Override @@ -105,7 +105,7 @@ public class R8Command extends BaseCompilerCommand { * 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 @@ public class R8Command extends BaseCompilerCommand { * 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 c269fad73..f5123cf70 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 @@ public abstract class Format45cc extends Base4Format { 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 770afdf06..64909cc3a 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 @@ public class DexFileReader { 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 b51c7ecae..a5080d39a 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 class InternalCompilerError extends IllegalStateException { 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 6a2fcbf51..a05299c77 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 class DexCode extends Code { 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 99325f908..19743978f 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 @@ public class DexEncodedMethod extends KeyedDexItem<DexMethod> { 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 153c2e651..a7d44ba31 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 @@ public class DexItemFactory { 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 @@ public class DexItemFactory { 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 @@ public class DexItemFactory { 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 3abe7c5bb..7d7d366ec 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 abstract class GraphLense { } 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 @@ public abstract class GraphLense { @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 757ae71fb..6bf1a1772 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 @@ import org.objectweb.asm.Type; * It does not currently support multithreaded reading. */ public class JarApplicationReader { + public final InternalOptions options; ConcurrentHashMap<String, DexString> stringCache = new ConcurrentHashMap<>(); @@ -111,8 +112,8 @@ public class JarApplicationReader { 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 e8420284f..44bc52926 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 @@ public class JarCode extends Code { 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 @@ public class JarCode extends Code { 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 bfbfb02c6..37b311962 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 @@ public class BasicBlock { * <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 ff9e25732..7bf8ec102 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 @@ public class BasicBlockInstructionIterator implements InstructionIterator, Instr } @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 @@ public class BasicBlockInstructionIterator implements InstructionIterator, Instr 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 5e0fe8ebf..e5fb6edfb 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 @@ public class IRCode { // 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 @@ public class IRCode { 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 fc7817b57..603ce6ecb 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 @@ public interface InstructionListIterator extends ListIterator<Instruction>, * 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 @@ public interface InstructionListIterator extends ListIterator<Instruction>, * @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 78c5c4e45..dc6d50067 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 @@ public class Phi extends Value { 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 1915155fb..ea43cf88c 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 class Value { 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 @@ public class Value { // 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 042232b82..2335f2b46 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 @@ public class DexBuilder { 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 @@ public class DexBuilder { 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 @@ public class DexBuilder { 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 2dceeab8f..4a96ae664 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 @@ public class IRBuilder { 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 class IRBuilder { 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 class IRBuilder { 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 @@ public class IRBuilder { 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 @@ public class IRBuilder { 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 @@ public class IRBuilder { 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 dda8031a6..da022fe86 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 @@ public class IRConverter { 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 class IRConverter { 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 ab3efdbd4..b5fbb0643 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 @@ public class LensCodeRewriter { // 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 160da3c16..1cf64fd2b 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 @@ import java.util.List; 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 31c6de175..408f53b60 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 @@ import java.util.Set; // 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 @@ public final class InterfaceMethodRewriter { */ 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 @@ public final class InterfaceMethodRewriter { } 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 @@ public final class InterfaceMethodRewriter { .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 @@ public final class InterfaceMethodRewriter { .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 539fcf07d..411ab4ced 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 @@ import java.util.Collections; 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 9a3531f14..bd38e1acb 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 @@ abstract class SynthesizedLambdaSourceCode extends SingleBlockSourceCode { 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 9699ec16b..ad4639e7f 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 @@ public class Inliner { 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 e9ec08c3c..0e971c2e5 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 @@ public class MinifiedNameMapPrinter { 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 @@ public class MinifiedNameMapPrinter { } } - 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 @@ public class MinifiedNameMapPrinter { 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 @@ public class MinifiedNameMapPrinter { // 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 17da59b6c..71d6e468d 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 @@ public class MemberRebindingAnalysis { 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 44b3393f0..cb69320e8 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 java.util.List; import joptsimple.internal.Strings; public class ProguardConfigurationSourceStrings implements ProguardConfigurationSource { + private final Path basePath; private final List<String> config; @@ -20,13 +21,13 @@ public class ProguardConfigurationSourceStrings implements ProguardConfiguration * {@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 @@ public class ProguardConfigurationSourceStrings implements ProguardConfiguration } @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 9affabf24..b50d78ea4 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 @@ public class SimpleClassMerger { 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 @@ public class SimpleClassMerger { 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 24f5c08b2..980eb1957 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 @@ public class AndroidApp { /** * 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 a4f223663..0f85cacec 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 @@ public class AndroidAppOutputSink extends ForwardingOutputSink { } 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 a04e28fe5..1c0cc61bb 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 class InternalOptions { public boolean minimalMainDex; public static class InvalidParameterAnnotationInfo { + final DexMethod method; final int expectedParameterCount; final int actualParameterCount; @@ -190,7 +191,7 @@ public class InternalOptions { .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 @@ public class InternalOptions { 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 b2add4aaa..d2c6560a5 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.Diagnostic; 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 cf191de53..ad9a26ae5 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 @@ public class BasicBlockIteratorTest extends SmaliTestBase { // 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 825832416..27a3ce979 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 @@ public class InlineTest extends SmaliTestBase { // 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 @@ public class InlineTest extends SmaliTestBase { // 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 @@ public class InlineTest extends SmaliTestBase { // 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 @@ public class InlineTest extends SmaliTestBase { // 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 @@ public class InlineTest extends SmaliTestBase { // 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 @@ public class InlineTest extends SmaliTestBase { // 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 @@ public class InlineTest extends SmaliTestBase { // 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 @@ public class InlineTest extends SmaliTestBase { // 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 @@ public class InlineTest extends SmaliTestBase { // 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 b9eef9cf3..a688ffe21 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 @@ public class InstructionIteratorTest extends SmaliTestBase { // 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 735120621..9192b2fad 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 @@ public class SplitBlockTest extends SmaliTestBase { // 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 @@ public class SplitBlockTest extends SmaliTestBase { 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 @@ public class SplitBlockTest extends SmaliTestBase { // 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 @@ public class SplitBlockTest extends SmaliTestBase { 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 @@ public class SplitBlockTest extends SmaliTestBase { // 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 @@ public class SplitBlockTest extends SmaliTestBase { // 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 c8ea3bbfc..a1046dbe5 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 @@ public class RegisterMoveSchedulerTest { } @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 9baed4897..caada82c7 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 @@ public class JasminBuilder { } }; builder.addClassProgramData( - origin, compile(clazz), Collections.singleton(clazz.getDescriptor())); + compile(clazz), origin, Collections.singleton(clazz.getDescriptor())); } return builder.build(); } |