aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Herhut <herhut@google.com>2017-10-26 11:29:51 +0200
committerStephan Herhut <herhut@google.com>2017-10-26 11:29:51 +0200
commit6b06bfbaf7e8bbb3cddfe3889c04aa0f0fba4106 (patch)
treed9ec97e1b2b6b531d2f0c5a6ec3607fee88c2cec
parentdbb891e86e8cf34b71c7096e1710009292d8e72e (diff)
downloadr8-6b06bfbaf7e8bbb3cddfe3889c04aa0f0fba4106.tar.gz
Enable InconsistentOverloads checking in ErrorProne.
Bug: Change-Id: I1e0be14da4ba39e3f77464e6a249aa32b1b42bb9
-rw-r--r--build.gradle1
-rw-r--r--src/main/java/com/android/tools/r8/BaseCompilerCommand.java10
-rw-r--r--src/main/java/com/android/tools/r8/D8.java2
-rw-r--r--src/main/java/com/android/tools/r8/D8Command.java2
-rw-r--r--src/main/java/com/android/tools/r8/GenerateMainDexListCommand.java2
-rw-r--r--src/main/java/com/android/tools/r8/R8.java2
-rw-r--r--src/main/java/com/android/tools/r8/R8Command.java6
-rw-r--r--src/main/java/com/android/tools/r8/code/Format45cc.java6
-rw-r--r--src/main/java/com/android/tools/r8/dex/DexFileReader.java2
-rw-r--r--src/main/java/com/android/tools/r8/errors/InternalCompilerError.java4
-rw-r--r--src/main/java/com/android/tools/r8/graph/DexCode.java5
-rw-r--r--src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java4
-rw-r--r--src/main/java/com/android/tools/r8/graph/DexItemFactory.java28
-rw-r--r--src/main/java/com/android/tools/r8/graph/GraphLense.java6
-rw-r--r--src/main/java/com/android/tools/r8/graph/JarApplicationReader.java3
-rw-r--r--src/main/java/com/android/tools/r8/graph/JarCode.java20
-rw-r--r--src/main/java/com/android/tools/r8/ir/code/BasicBlock.java4
-rw-r--r--src/main/java/com/android/tools/r8/ir/code/BasicBlockInstructionIterator.java4
-rw-r--r--src/main/java/com/android/tools/r8/ir/code/IRCode.java4
-rw-r--r--src/main/java/com/android/tools/r8/ir/code/InstructionListIterator.java10
-rw-r--r--src/main/java/com/android/tools/r8/ir/code/Phi.java2
-rw-r--r--src/main/java/com/android/tools/r8/ir/code/Value.java8
-rw-r--r--src/main/java/com/android/tools/r8/ir/conversion/DexBuilder.java8
-rw-r--r--src/main/java/com/android/tools/r8/ir/conversion/IRBuilder.java17
-rw-r--r--src/main/java/com/android/tools/r8/ir/conversion/IRConverter.java21
-rw-r--r--src/main/java/com/android/tools/r8/ir/conversion/LensCodeRewriter.java2
-rw-r--r--src/main/java/com/android/tools/r8/ir/desugar/AccessorMethodSourceCode.java2
-rw-r--r--src/main/java/com/android/tools/r8/ir/desugar/InterfaceMethodRewriter.java20
-rw-r--r--src/main/java/com/android/tools/r8/ir/desugar/LambdaClassConstructorSourceCode.java2
-rw-r--r--src/main/java/com/android/tools/r8/ir/desugar/SynthesizedLambdaSourceCode.java4
-rw-r--r--src/main/java/com/android/tools/r8/ir/optimize/Inliner.java6
-rw-r--r--src/main/java/com/android/tools/r8/naming/MinifiedNameMapPrinter.java20
-rw-r--r--src/main/java/com/android/tools/r8/optimize/MemberRebindingAnalysis.java2
-rw-r--r--src/main/java/com/android/tools/r8/shaking/ProguardConfigurationSourceStrings.java7
-rw-r--r--src/main/java/com/android/tools/r8/shaking/SimpleClassMerger.java4
-rw-r--r--src/main/java/com/android/tools/r8/utils/AndroidApp.java4
-rw-r--r--src/main/java/com/android/tools/r8/utils/AndroidAppOutputSink.java2
-rw-r--r--src/main/java/com/android/tools/r8/utils/InternalOptions.java5
-rw-r--r--src/main/java/com/android/tools/r8/utils/StringDiagnostic.java5
-rw-r--r--src/test/java/com/android/tools/r8/ir/BasicBlockIteratorTest.java5
-rw-r--r--src/test/java/com/android/tools/r8/ir/InlineTest.java52
-rw-r--r--src/test/java/com/android/tools/r8/ir/InstructionIteratorTest.java4
-rw-r--r--src/test/java/com/android/tools/r8/ir/SplitBlockTest.java12
-rw-r--r--src/test/java/com/android/tools/r8/ir/regalloc/RegisterMoveSchedulerTest.java3
-rw-r--r--src/test/java/com/android/tools/r8/jasmin/JasminBuilder.java2
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();
}