Merge "Build and archive compatproguard.jar"
diff --git a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
index e6f099e..314c388 100644
--- a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
+++ b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
@@ -170,6 +170,7 @@
return enableDesugaring;
}
+ @Override
protected void validate() throws CompilationException {
super.validate();
if (getAppBuilder().hasMainDexList() && outputMode == OutputMode.FilePerInputClass) {
diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
index 3ce1ea1..b96dfb7 100644
--- a/src/main/java/com/android/tools/r8/D8Command.java
+++ b/src/main/java/com/android/tools/r8/D8Command.java
@@ -74,6 +74,7 @@
return this;
}
+ @Override
protected void validate() throws CompilationException {
super.validate();
if (getAppBuilder().hasMainDexList() && intermediate) {
diff --git a/src/main/java/com/android/tools/r8/R8Command.java b/src/main/java/com/android/tools/r8/R8Command.java
index d8a5be5..0af7f92 100644
--- a/src/main/java/com/android/tools/r8/R8Command.java
+++ b/src/main/java/com/android/tools/r8/R8Command.java
@@ -179,6 +179,7 @@
return self();
}
+ @Override
protected void validate() throws CompilationException {
super.validate();
if (mainDexListOutput != null && mainDexRules.isEmpty() && !getAppBuilder()
diff --git a/src/main/java/com/android/tools/r8/compatdx/CompatDx.java b/src/main/java/com/android/tools/r8/compatdx/CompatDx.java
index c0d4bbb..905b356 100644
--- a/src/main/java/com/android/tools/r8/compatdx/CompatDx.java
+++ b/src/main/java/com/android/tools/r8/compatdx/CompatDx.java
@@ -18,7 +18,6 @@
import com.android.tools.r8.Resource;
import com.android.tools.r8.compatdx.CompatDx.DxCompatOptions.DxUsageMessage;
import com.android.tools.r8.compatdx.CompatDx.DxCompatOptions.PositionInfo;
-import com.android.tools.r8.dex.Constants;
import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.errors.Unimplemented;
import com.android.tools.r8.logging.Log;
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
index cc75fd0..d389a8c 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
@@ -106,7 +106,7 @@
return computedMinApiLevel;
}
- private void readProguardMap(DexApplication.Builder builder, ExecutorService executorService,
+ private void readProguardMap(DexApplication.Builder<?> builder, ExecutorService executorService,
List<Future<?>> futures) {
// Read the Proguard mapping file in parallel with DexCode and DexProgramClass items.
if (inputApp.hasProguardMap()) {
diff --git a/src/main/java/com/android/tools/r8/dex/DexFile.java b/src/main/java/com/android/tools/r8/dex/DexFile.java
index d2db9d6..7501528 100644
--- a/src/main/java/com/android/tools/r8/dex/DexFile.java
+++ b/src/main/java/com/android/tools/r8/dex/DexFile.java
@@ -76,6 +76,7 @@
return version;
}
+ @Override
void setByteOrder() {
// Make sure we set the right endian for reading.
buffer.order(ByteOrder.LITTLE_ENDIAN);
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 7bf5e8c..f3542be 100644
--- a/src/main/java/com/android/tools/r8/dex/DexFileReader.java
+++ b/src/main/java/com/android/tools/r8/dex/DexFileReader.java
@@ -662,7 +662,7 @@
}
clazz = classKind.create(
type,
- Resource.Kind.DEX,
+ Resource.Kind.DEX,
flags,
superclass,
typeListAt(interfacesOffsets[i]),
@@ -918,7 +918,7 @@
MethodHandleType type = MethodHandleType.getKind(file.getUshort());
file.getUshort(); // unused
int indexFieldOrMethod = file.getUshort();
- Descriptor<? extends DexItem, ? extends Descriptor> fieldOrMethod;
+ Descriptor<? extends DexItem, ? extends Descriptor<?,?>> fieldOrMethod;
switch (type) {
case INSTANCE_GET:
case INSTANCE_PUT:
diff --git a/src/main/java/com/android/tools/r8/dex/VDexFile.java b/src/main/java/com/android/tools/r8/dex/VDexFile.java
index 990b3f6..4f936a5 100644
--- a/src/main/java/com/android/tools/r8/dex/VDexFile.java
+++ b/src/main/java/com/android/tools/r8/dex/VDexFile.java
@@ -69,6 +69,7 @@
+ numberOfDexFiles * Constants.VDEX_DEX_CHECKSUM_SIZE;
}
+ @Override
void setByteOrder() {
// Make sure we set the right endian for reading.
buffer.order(ByteOrder.LITTLE_ENDIAN);
diff --git a/src/main/java/com/android/tools/r8/graph/Code.java b/src/main/java/com/android/tools/r8/graph/Code.java
index 0ae2cbc..47bf267 100644
--- a/src/main/java/com/android/tools/r8/graph/Code.java
+++ b/src/main/java/com/android/tools/r8/graph/Code.java
@@ -19,6 +19,7 @@
public abstract void registerReachableDefinitions(UseRegistry registry);
+ @Override
public abstract String toString();
public abstract String toString(DexEncodedMethod method, ClassNameMapper naming);
diff --git a/src/main/java/com/android/tools/r8/graph/DexApplication.java b/src/main/java/com/android/tools/r8/graph/DexApplication.java
index a84c90b..242add5 100644
--- a/src/main/java/com/android/tools/r8/graph/DexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DexApplication.java
@@ -84,13 +84,14 @@
return clazz == null ? null : clazz.asProgramClass();
}
+ @Override
public abstract String toString();
public ClassNameMapper getProguardMap() {
return proguardMap;
}
- public abstract static class Builder<T extends Builder> {
+ public abstract static class Builder<T extends Builder<T>> {
// We handle program class collection separately from classpath
// and library class collections. Since while we assume program
// class collection should always be fully loaded and thus fully
@@ -189,7 +190,7 @@
return mainDexList;
}
- public Builder addToMainDexList(Collection<DexType> mainDexList) {
+ public Builder<T> addToMainDexList(Collection<DexType> mainDexList) {
this.mainDexList.addAll(mainDexList);
return this;
}
diff --git a/src/main/java/com/android/tools/r8/graph/DexCallSite.java b/src/main/java/com/android/tools/r8/graph/DexCallSite.java
index 1d5720d..b228098 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCallSite.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCallSite.java
@@ -40,6 +40,7 @@
this.bootstrapArgs = bootstrapArgs;
}
+ @Override
public int computeHashCode() {
return methodName.hashCode()
+ methodProto.hashCode() * 7
@@ -47,6 +48,7 @@
+ bootstrapArgs.hashCode() * 101;
}
+ @Override
public boolean computeEquals(Object other) {
// Call sites are equal only when this == other, which was already computed by the caller of
// computeEquals. Do not share call site entries, each invoke-custom must have its own
@@ -54,6 +56,7 @@
return false;
}
+ @Override
public String toString() {
StringBuilder builder =
new StringBuilder("CallSite: { Name: ").append(methodName.toSourceString())
@@ -91,6 +94,7 @@
}
// TODO(mikaelpeltier): Adapt syntax when invoke-custom will be available into smali.
+ @Override
public String toSmaliString() {
return toString();
}
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 8da2178..9267f7d 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -183,10 +183,12 @@
}
}
+ @Override
public String toString() {
return toString(null, null);
}
+ @Override
public String toString(DexEncodedMethod method, ClassNameMapper naming) {
StringBuilder builder = new StringBuilder();
if (method != null) {
@@ -313,6 +315,7 @@
return builder.toString();
}
+ @Override
public void collectIndexedItems(IndexedItemCollection indexedItems) {
for (Instruction insn : instructions) {
insn.collectIndexedItems(indexedItems);
@@ -360,10 +363,12 @@
handlerIndex = map.get(handlerOffset);
}
+ @Override
public int hashCode() {
return startAddress * 2 + instructionCount * 3 + handlerIndex * 5;
}
+ @Override
public boolean equals(Object other) {
if (this == other) {
return true;
@@ -381,6 +386,7 @@
return false;
}
+ @Override
public String toString() {
return "["
+ StringUtils.hexString(startAddress, 2)
@@ -415,10 +421,12 @@
this.catchAllAddr = catchAllAddr;
}
+ @Override
public int hashCode() {
return catchAllAddr + Arrays.hashCode(pairs) * 7;
}
+ @Override
public boolean equals(Object other) {
if (this == other) {
return true;
@@ -433,6 +441,7 @@
return false;
}
+ @Override
public void collectIndexedItems(IndexedItemCollection indexedItems) {
collectAll(indexedItems, pairs);
}
@@ -443,6 +452,7 @@
assert false;
}
+ @Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("[\n");
@@ -472,6 +482,7 @@
this.addr = addr;
}
+ @Override
public void collectIndexedItems(IndexedItemCollection indexedItems) {
type.collectIndexedItems(indexedItems);
}
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 b7e41fe..2f80250 100644
--- a/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
+++ b/src/main/java/com/android/tools/r8/graph/DexItemFactory.java
@@ -377,7 +377,8 @@
}
public DexMethodHandle createMethodHandle(
- MethodHandleType type, Descriptor<? extends DexItem, ? extends Descriptor> fieldOrMethod) {
+ MethodHandleType type,
+ Descriptor<? extends DexItem, ? extends Descriptor<?, ?>> fieldOrMethod) {
assert !sorted;
DexMethodHandle methodHandle = new DexMethodHandle(type, fieldOrMethod);
return canonicalize(methodHandles, methodHandle);
diff --git a/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java b/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java
index d64a893..12ea053 100644
--- a/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java
+++ b/src/main/java/com/android/tools/r8/graph/DexMethodHandle.java
@@ -125,18 +125,21 @@
}
public MethodHandleType type;
- public Descriptor<? extends DexItem, ? extends Descriptor> fieldOrMethod;
+ public Descriptor<? extends DexItem, ? extends Descriptor<?,?>> fieldOrMethod;
public DexMethodHandle(
- MethodHandleType type, Descriptor<? extends DexItem, ? extends Descriptor> fieldOrMethod) {
+ MethodHandleType type,
+ Descriptor<? extends DexItem, ? extends Descriptor<?,?>> fieldOrMethod) {
this.type = type;
this.fieldOrMethod = fieldOrMethod;
}
+ @Override
public int computeHashCode() {
return type.hashCode() + fieldOrMethod.computeHashCode() * 7;
}
+ @Override
public boolean computeEquals(Object other) {
if (other instanceof DexMethodHandle) {
DexMethodHandle o = (DexMethodHandle) other;
@@ -145,6 +148,7 @@
return false;
}
+ @Override
public String toString() {
StringBuilder builder = new StringBuilder("MethodHandle: {")
.append(type)
@@ -167,6 +171,7 @@
}
// TODO(mikaelpeltier): Adapt syntax when invoke-custom will be available into smali.
+ @Override
public String toSmaliString() {
return toString();
}
diff --git a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
index b68b1d4..f67e808 100644
--- a/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DirectMappedDexApplication.java
@@ -60,6 +60,7 @@
return this;
}
+ @Override
public String toString() {
return "DexApplication (direct)";
}
diff --git a/src/main/java/com/android/tools/r8/graph/IndexedDexItem.java b/src/main/java/com/android/tools/r8/graph/IndexedDexItem.java
index 5c8f439..7cc5738 100644
--- a/src/main/java/com/android/tools/r8/graph/IndexedDexItem.java
+++ b/src/main/java/com/android/tools/r8/graph/IndexedDexItem.java
@@ -36,6 +36,7 @@
*/
private int[] virtualFileIndexes;
+ @Override
public abstract void collectIndexedItems(IndexedItemCollection indexedItems);
@Override
@@ -132,22 +133,26 @@
// Partial implementation of PresortedComparable.
+ @Override
final public void setSortedIndex(int sortedIndex) {
assert sortedIndex > SORTED_INDEX_UNKNOWN;
assert this.sortedIndex == SORTED_INDEX_UNKNOWN;
this.sortedIndex = sortedIndex;
}
+ @Override
final public int getSortedIndex() {
return sortedIndex;
}
+ @Override
final public int sortedCompareTo(int other) {
assert sortedIndex > SORTED_INDEX_UNKNOWN;
assert other > SORTED_INDEX_UNKNOWN;
return Integer.compare(sortedIndex, other);
}
+ @Override
public void flushCachedValues() {
super.flushCachedValues();
resetSortedIndex();
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 e03b392..757ae71 100644
--- a/src/main/java/com/android/tools/r8/graph/JarApplicationReader.java
+++ b/src/main/java/com/android/tools/r8/graph/JarApplicationReader.java
@@ -93,7 +93,8 @@
}
public DexMethodHandle getMethodHandle(
- MethodHandleType type, Descriptor<? extends DexItem, ? extends Descriptor> fieldOrMethod) {
+ MethodHandleType type,
+ Descriptor<? extends DexItem, ? extends Descriptor<?, ?>> fieldOrMethod) {
return options.itemFactory.createMethodHandle(type, fieldOrMethod);
}
diff --git a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
index bd7b266..c35b10e 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyLoadedDexApplication.java
@@ -95,6 +95,7 @@
this.libraryClasses = application.libraryClasses;
}
+ @Override
Builder self() {
return this;
}
@@ -109,6 +110,7 @@
return this;
}
+ @Override
public LazyLoadedDexApplication build() {
return new LazyLoadedDexApplication(proguardMap,
ProgramClassCollection.create(programClasses),
@@ -127,6 +129,7 @@
return new DirectMappedDexApplication.Builder(this).build().asDirect();
}
+ @Override
public String toString() {
return "Application (" + programClasses + "; " + classpathClasses + "; " + libraryClasses
+ ")";
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
index 0473cbc..7f640c3 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/JarSourceCode.java
@@ -782,11 +782,11 @@
}
}
- private int[] getSwitchTargets(LabelNode dflt, List labels) {
+ private int[] getSwitchTargets(LabelNode dflt, List<LabelNode> labels) {
int[] targets = new int[1 + labels.size()];
targets[0] = getOffset(dflt);
for (int i = 1; i < targets.length; i++) {
- targets[i] = getOffset((LabelNode) labels.get(i - 1));
+ targets[i] = getOffset(labels.get(i - 1));
}
return targets;
}
@@ -2654,7 +2654,7 @@
private DexMethodHandle getMethodHandle(JarApplicationReader application, Handle handle) {
MethodHandleType methodHandleType = getMethodHandleType(handle);
- Descriptor<? extends DexItem, ? extends Descriptor> descriptor =
+ Descriptor<? extends DexItem, ? extends Descriptor<?,?>> descriptor =
methodHandleType.isFieldType()
? application.getField(handle.getOwner(), handle.getName(), handle.getDesc())
: application.getMethod(handle.getOwner(), handle.getName(), handle.getDesc());