Merge "Refine inlining constraints with target holder."
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index 0990f79..4025180 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
// This field is accessed from release scripts using simple pattern matching.
// Therefore, changing this field could break our release scripts.
- public static final String LABEL = "1.3.8-dev";
+ public static final String LABEL = "1.3.9-dev";
private Version() {
}
diff --git a/src/main/java/com/android/tools/r8/cf/code/CfConstString.java b/src/main/java/com/android/tools/r8/cf/code/CfConstString.java
index 54ae1c6..b2114b3 100644
--- a/src/main/java/com/android/tools/r8/cf/code/CfConstString.java
+++ b/src/main/java/com/android/tools/r8/cf/code/CfConstString.java
@@ -13,7 +13,7 @@
public class CfConstString extends CfInstruction {
- private final DexString string;
+ private DexString string;
public CfConstString(DexString string) {
this.string = string;
@@ -23,6 +23,10 @@
return string;
}
+ public void setString(DexString string) {
+ this.string = string;
+ }
+
@Override
public void write(MethodVisitor visitor, NamingLens lens) {
visitor.visitLdcInsn(string.toString());
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
index f276cb2..f5b0a31 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfBuilder.java
@@ -385,6 +385,9 @@
boolean didPositionChange =
position.isSome()
&& position != currentPosition
+ // Ignore synthetic positions prior to any actual position, except when inlined
+ // (that is, callerPosition != null).
+ && !(currentPosition.isNone() && position.synthetic && position.callerPosition == null)
&& (options.debug || instruction.instructionTypeCanThrow());
if (!didLocalsChange && !didPositionChange) {
return;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
index 92645c4..bc2222f 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfSourceCode.java
@@ -182,7 +182,6 @@
private CfState state;
private final CfCode code;
private final DexEncodedMethod method;
- private final Position callerPosition;
private final Origin origin;
private final Reference2IntMap<CfLabel> labelOffsets = new Reference2IntOpenHashMap<>();
@@ -205,7 +204,6 @@
boolean preserveCaller) {
this.code = code;
this.method = method;
- this.callerPosition = callerPosition;
this.origin = origin;
int cfPositionCount = 0;
for (int i = 0; i < code.getInstructions().size(); i++) {
@@ -328,7 +326,7 @@
public void buildPrelude(IRBuilder builder) {
assert !inPrelude;
inPrelude = true;
- state.buildPrelude();
+ state.buildPrelude(canonicalPositions.getPreamblePosition());
setLocalVariableLists();
buildArgumentInstructions(builder);
recordStateForTarget(0, state.getSnapshot());
@@ -395,14 +393,8 @@
if (instruction instanceof CfPosition) {
CfPosition cfPosition = (CfPosition) instruction;
Position position = cfPosition.getPosition();
- Position newPosition =
- canonicalPositions.getCanonical(
- new Position(
- position.line,
- position.file,
- position.method,
- canonicalPositions.canonicalizeCallerPosition(position.callerPosition)));
- CfPosition newCfPosition = new CfPosition(cfPosition.getLabel(), newPosition);
+ CfPosition newCfPosition =
+ new CfPosition(cfPosition.getLabel(), getCanonicalPosition(position));
newCfPosition.buildIR(builder, state, this);
} else {
instruction.buildIR(builder, state, this);
@@ -441,7 +433,8 @@
for (int i = 0; i < stack.length; i++) {
stack[i] = convertUninitialized(frame.getStack().get(i));
}
- state.setStateFromFrame(locals, stack, getDebugPositionAtOffset(currentInstructionIndex));
+ state.setStateFromFrame(
+ locals, stack, getCanonicalDebugPositionAtOffset(currentInstructionIndex));
}
private DexType convertUninitialized(FrameType type) {
@@ -624,7 +617,7 @@
}
@Override
- public Position getDebugPositionAtOffset(int offset) {
+ public Position getCanonicalDebugPositionAtOffset(int offset) {
while (offset + 1 < code.getInstructions().size()) {
CfInstruction insn = code.getInstructions().get(offset);
if (!(insn instanceof CfLabel) && !(insn instanceof CfFrame)) {
@@ -636,13 +629,22 @@
offset -= 1;
}
if (offset < 0) {
- return Position.noneWithMethod(method.method, callerPosition);
+ return canonicalPositions.getPreamblePosition();
}
- return ((CfPosition) code.getInstructions().get(offset)).getPosition();
+ return getCanonicalPosition(((CfPosition) code.getInstructions().get(offset)).getPosition());
}
@Override
public Position getCurrentPosition() {
return state.getPosition();
}
+
+ private Position getCanonicalPosition(Position position) {
+ return canonicalPositions.getCanonical(
+ new Position(
+ position.line,
+ position.file,
+ position.method,
+ canonicalPositions.canonicalizeCallerPosition(position.callerPosition)));
+ }
}
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/CfState.java b/src/main/java/com/android/tools/r8/ir/conversion/CfState.java
index 8174797..7f4ee72 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/CfState.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/CfState.java
@@ -74,8 +74,8 @@
private static final int MAX_UPDATES = 4;
- public void buildPrelude() {
- current = new BaseSnapshot();
+ public void buildPrelude(Position preamblePosition) {
+ current = new BaseSnapshot(preamblePosition);
}
public void clear() {
@@ -92,9 +92,9 @@
current = new BaseSnapshot(locals, stack, position);
}
- public void merge(Snapshot snapshot) {
+ public void merge(Snapshot snapshot, Position preamblePosition) {
if (current == null) {
- current = snapshot == null ? new BaseSnapshot() : snapshot;
+ current = snapshot == null ? new BaseSnapshot(preamblePosition) : snapshot;
} else {
current = merge(current, snapshot, origin);
}
@@ -312,8 +312,8 @@
final SlotType[] stack;
final Position position;
- BaseSnapshot() {
- this(0, 0, Position.none());
+ BaseSnapshot(Position preamblePosition) {
+ this(0, 0, preamblePosition);
}
BaseSnapshot(int locals, int stack, Position position) {
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
index 9a9b836..10bf6a5 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/DexSourceCode.java
@@ -184,7 +184,7 @@
}
@Override
- public Position getDebugPositionAtOffset(int offset) {
+ public Position getCanonicalDebugPositionAtOffset(int offset) {
DexDebugEntry entry = getDebugEntryAtOffset(offset);
return entry == null
? canonicalPositions.getPreamblePosition()
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 963cf41..62450d4 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
@@ -592,7 +592,7 @@
int moveExceptionDest = source.getMoveExceptionRegister(targetIndex);
if (moveExceptionDest >= 0) {
Value out = writeRegister(moveExceptionDest, ValueType.OBJECT, ThrowingInfo.NO_THROW, null);
- Position position = source.getDebugPositionAtOffset(moveExceptionItem.targetOffset);
+ Position position = source.getCanonicalDebugPositionAtOffset(moveExceptionItem.targetOffset);
MoveException moveException = new MoveException(out);
moveException.setPosition(position);
currentBlock.add(moveException);
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 eef5967..00c3754 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
@@ -14,6 +14,7 @@
import com.android.tools.r8.graph.DexAnnotation;
import com.android.tools.r8.graph.DexApplication;
import com.android.tools.r8.graph.DexApplication.Builder;
+import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexMethod;
@@ -51,6 +52,7 @@
import com.android.tools.r8.ir.optimize.lambda.LambdaMerger;
import com.android.tools.r8.ir.regalloc.LinearScanRegisterAllocator;
import com.android.tools.r8.ir.regalloc.RegisterAllocator;
+import com.android.tools.r8.kotlin.KotlinInfo;
import com.android.tools.r8.logging.Log;
import com.android.tools.r8.naming.IdentifierNameStringMarker;
import com.android.tools.r8.shaking.protolite.ProtoLitePruner;
@@ -647,9 +649,10 @@
printC1VisualizerHeader(method);
printMethod(code, "Initial IR (SSA)");
- if (method.getCode() != null && method.getCode().isJarCode() &&
- appInfo.definitionFor(method.method.holder).hasKotlinInfo()) {
- computeKotlinNotNullParamHints(feedback, method, code);
+ DexClass holder = appInfo.definitionFor(method.method.holder);
+ if (method.getCode() != null && method.getCode().isJarCode()
+ && holder.hasKotlinInfo()) {
+ computeKotlinNotNullParamHints(feedback, holder.getKotlinInfo(), method, code);
}
if (options.canHaveArtStringNewInitBug()) {
@@ -807,8 +810,19 @@
}
private void computeKotlinNotNullParamHints(
- OptimizationFeedback feedback, DexEncodedMethod method, IRCode code) {
- // Try to infer Kotlin non-null parameter check to use it as a hint.
+ OptimizationFeedback feedback, KotlinInfo kotlinInfo, DexEncodedMethod method, IRCode code) {
+ // Use non-null parameter hints in Kotlin metadata if available.
+ if (kotlinInfo.hasNonNullParameterHints()) {
+ BitSet hintFromMetadata = kotlinInfo.lookupNonNullParameterHint(
+ method.method.name.toString(), method.method.proto.toDescriptorString());
+ if (hintFromMetadata != null) {
+ if (hintFromMetadata.length() > 0) {
+ feedback.setKotlinNotNullParamHints(method, hintFromMetadata);
+ }
+ return;
+ }
+ }
+ // Otherwise, fall back to inspecting the code.
List<Value> arguments = code.collectArguments(true);
BitSet paramsCheckedForNull = new BitSet();
DexMethod checkParameterIsNotNull =
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 23d9a73..1170dab 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
@@ -493,7 +493,7 @@
// Don't include line changes when processing a label. Doing so will end up emitting local
// writes after the line has changed and thus causing locals to become visible too late.
currentPosition =
- getDebugPositionAtOffset(
+ getCanonicalDebugPositionAtOffset(
((instructionIndex > 0) && (insn instanceof LabelNode))
? instructionIndex - 1
: instructionIndex);
@@ -2832,7 +2832,7 @@
}
@Override
- public Position getDebugPositionAtOffset(int offset) {
+ public Position getCanonicalDebugPositionAtOffset(int offset) {
if (offset == EXCEPTIONAL_SYNC_EXIT_OFFSET) {
return getExceptionalExitPosition();
}
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 1877053..e9b789a 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
@@ -39,17 +39,17 @@
import com.android.tools.r8.ir.code.StaticPut;
import com.android.tools.r8.ir.code.Value;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
public class LensCodeRewriter {
private final GraphLense graphLense;
private final AppInfoWithSubtyping appInfo;
- private final Map<DexProto, DexProto> protoFixupCache = new HashMap<>();
+ private final Map<DexProto, DexProto> protoFixupCache = new ConcurrentHashMap<>();
public LensCodeRewriter(GraphLense graphLense, AppInfoWithSubtyping appInfo) {
this.graphLense = graphLense;
diff --git a/src/main/java/com/android/tools/r8/ir/conversion/SourceCode.java b/src/main/java/com/android/tools/r8/ir/conversion/SourceCode.java
index bf2b51f..2bc2aa1 100644
--- a/src/main/java/com/android/tools/r8/ir/conversion/SourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/conversion/SourceCode.java
@@ -27,7 +27,7 @@
Position getCurrentPosition();
- Position getDebugPositionAtOffset(int offset);
+ Position getCanonicalDebugPositionAtOffset(int offset);
/**
* Trace block structure of the source-program.
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
index 73812ec..505d192 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
@@ -1107,7 +1107,7 @@
}
@Override
- public Position getDebugPositionAtOffset(int offset) {
+ public Position getCanonicalDebugPositionAtOffset(int offset) {
throw new Unreachable();
}
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java
index c64d8ed..991d371 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/SyntheticSourceCode.java
@@ -214,7 +214,7 @@
}
@Override
- public Position getDebugPositionAtOffset(int offset) {
+ public Position getCanonicalDebugPositionAtOffset(int offset) {
throw new Unreachable();
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
index 74184a5..d15ed5a 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClass.java
@@ -4,7 +4,12 @@
package com.android.tools.r8.kotlin;
+import static kotlinx.metadata.Flag.Property.IS_VAR;
+
import kotlinx.metadata.KmClassVisitor;
+import kotlinx.metadata.KmConstructorVisitor;
+import kotlinx.metadata.KmFunctionVisitor;
+import kotlinx.metadata.KmPropertyVisitor;
import kotlinx.metadata.jvm.KotlinClassMetadata;
public class KotlinClass extends KotlinInfo<KotlinClassMetadata.Class> {
@@ -20,13 +25,30 @@
}
@Override
- void validateMetadata(KotlinClassMetadata.Class metadata) {
- ClassMetadataVisitor visitor = new ClassMetadataVisitor();
+ void processMetadata(KotlinClassMetadata.Class metadata) {
// To avoid lazy parsing/verifying metadata.
- metadata.accept(visitor);
+ metadata.accept(new ClassVisitorForNonNullParameterHints());
}
- private static class ClassMetadataVisitor extends KmClassVisitor {
+ private class ClassVisitorForNonNullParameterHints extends KmClassVisitor {
+ @Override
+ public KmFunctionVisitor visitFunction(int functionFlags, String functionName) {
+ return new NonNullParameterHintCollector.FunctionVisitor(nonNullparamHints);
+ }
+
+ @Override
+ public KmConstructorVisitor visitConstructor(int ctorFlags) {
+ return new NonNullParameterHintCollector.ConstructorVisitor(nonNullparamHints);
+ }
+
+ @Override
+ public KmPropertyVisitor visitProperty(
+ int propertyFlags, String name, int getterFlags, int setterFlags) {
+ if (IS_VAR.invoke(propertyFlags)) {
+ return new NonNullParameterHintCollector.PropertyVisitor(nonNullparamHints);
+ }
+ return null;
+ }
}
@Override
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java
index 62db3d1..de8a12a 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassFacade.java
@@ -20,7 +20,7 @@
}
@Override
- void validateMetadata(KotlinClassMetadata.MultiFileClassFacade metadata) {
+ void processMetadata(KotlinClassMetadata.MultiFileClassFacade metadata) {
// No worries about lazy parsing/verifying, since no API to explore metadata details.
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java b/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
index da66e6c..225e63a 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinClassPart.java
@@ -4,7 +4,11 @@
package com.android.tools.r8.kotlin;
+import static kotlinx.metadata.Flag.Property.IS_VAR;
+
+import kotlinx.metadata.KmFunctionVisitor;
import kotlinx.metadata.KmPackageVisitor;
+import kotlinx.metadata.KmPropertyVisitor;
import kotlinx.metadata.jvm.KotlinClassMetadata;
public final class KotlinClassPart extends KotlinInfo<KotlinClassMetadata.MultiFileClassPart> {
@@ -21,12 +25,25 @@
}
@Override
- void validateMetadata(KotlinClassMetadata.MultiFileClassPart metadata) {
+ void processMetadata(KotlinClassMetadata.MultiFileClassPart metadata) {
// To avoid lazy parsing/verifying metadata.
- metadata.accept(new MultiFileClassPartMetadataVisitor());
+ metadata.accept(new PackageVisitorForNonNullParameterHints());
}
- private static class MultiFileClassPartMetadataVisitor extends KmPackageVisitor {
+ private class PackageVisitorForNonNullParameterHints extends KmPackageVisitor {
+ @Override
+ public KmFunctionVisitor visitFunction(int functionFlags, String functionName) {
+ return new NonNullParameterHintCollector.FunctionVisitor(nonNullparamHints);
+ }
+
+ @Override
+ public KmPropertyVisitor visitProperty(
+ int propertyFlags, String name, int getterFlags, int setterFlags) {
+ if (IS_VAR.invoke(propertyFlags)) {
+ return new NonNullParameterHintCollector.PropertyVisitor(nonNullparamHints);
+ }
+ return null;
+ }
}
@Override
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java b/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java
index bcb70ed..2f9477e 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinFile.java
@@ -4,7 +4,11 @@
package com.android.tools.r8.kotlin;
+import static kotlinx.metadata.Flag.Property.IS_VAR;
+
+import kotlinx.metadata.KmFunctionVisitor;
import kotlinx.metadata.KmPackageVisitor;
+import kotlinx.metadata.KmPropertyVisitor;
import kotlinx.metadata.jvm.KotlinClassMetadata;
public final class KotlinFile extends KotlinInfo<KotlinClassMetadata.FileFacade> {
@@ -21,12 +25,25 @@
}
@Override
- void validateMetadata(KotlinClassMetadata.FileFacade metadata) {
+ void processMetadata(KotlinClassMetadata.FileFacade metadata) {
// To avoid lazy parsing/verifying metadata.
- metadata.accept(new FileFacadeMetadataVisitor());
+ metadata.accept(new PackageVisitorForNonNullParameterHints());
}
- private static class FileFacadeMetadataVisitor extends KmPackageVisitor {
+ private class PackageVisitorForNonNullParameterHints extends KmPackageVisitor {
+ @Override
+ public KmFunctionVisitor visitFunction(int functionFlags, String functionName) {
+ return new NonNullParameterHintCollector.FunctionVisitor(nonNullparamHints);
+ }
+
+ @Override
+ public KmPropertyVisitor visitProperty(
+ int propertyFlags, String name, int getterFlags, int setterFlags) {
+ if (IS_VAR.invoke(propertyFlags)) {
+ return new NonNullParameterHintCollector.PropertyVisitor(nonNullparamHints);
+ }
+ return null;
+ }
}
@Override
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java b/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
index 702e0eb..7cc8aa1 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinInfo.java
@@ -4,22 +4,25 @@
package com.android.tools.r8.kotlin;
+import com.google.common.collect.HashBasedTable;
+import java.util.BitSet;
import kotlinx.metadata.jvm.KotlinClassMetadata;
// Provides access to kotlin information.
public abstract class KotlinInfo<MetadataKind extends KotlinClassMetadata> {
MetadataKind metadata;
+ final HashBasedTable<String, String, BitSet> nonNullparamHints = HashBasedTable.create();
KotlinInfo() {
}
KotlinInfo(MetadataKind metadata) {
- validateMetadata(metadata);
+ processMetadata(metadata);
this.metadata = metadata;
}
- // Subtypes will define how to validate the given metadata.
- abstract void validateMetadata(MetadataKind metadata);
+ // Subtypes will define how to process the given metadata.
+ abstract void processMetadata(MetadataKind metadata);
public enum Kind {
Class, File, Synthetic, Part, Facade
@@ -66,4 +69,12 @@
public KotlinClassFacade asClassFacade() {
return null;
}
+
+ public boolean hasNonNullParameterHints() {
+ return !nonNullparamHints.isEmpty();
+ }
+
+ public BitSet lookupNonNullParameterHint(String name, String descriptor) {
+ return nonNullparamHints.get(name, descriptor);
+ }
}
diff --git a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
index 4660800..fc11f8c 100644
--- a/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
+++ b/src/main/java/com/android/tools/r8/kotlin/KotlinSyntheticClass.java
@@ -5,6 +5,7 @@
package com.android.tools.r8.kotlin;
import com.android.tools.r8.graph.DexClass;
+import kotlinx.metadata.KmFunctionVisitor;
import kotlinx.metadata.KmLambdaVisitor;
import kotlinx.metadata.jvm.KotlinClassMetadata;
@@ -32,21 +33,23 @@
}
private KotlinSyntheticClass(Flavour flavour, KotlinClassMetadata.SyntheticClass metadata) {
+ super(metadata);
this.flavour = flavour;
- validateMetadata(metadata);
- this.metadata = metadata;
}
@Override
- void validateMetadata(KotlinClassMetadata.SyntheticClass metadata) {
+ void processMetadata(KotlinClassMetadata.SyntheticClass metadata) {
if (metadata.isLambda()) {
- SyntheticClassMetadataVisitor visitor = new SyntheticClassMetadataVisitor();
// To avoid lazy parsing/verifying metadata.
- metadata.accept(visitor);
+ metadata.accept(new LambdaVisitorForNonNullParameterHints());
}
}
- private static class SyntheticClassMetadataVisitor extends KmLambdaVisitor {
+ private class LambdaVisitorForNonNullParameterHints extends KmLambdaVisitor {
+ @Override
+ public KmFunctionVisitor visitFunction(int functionFlags, String functionName) {
+ return new NonNullParameterHintCollector.FunctionVisitor(nonNullparamHints);
+ }
}
public boolean isLambda() {
diff --git a/src/main/java/com/android/tools/r8/kotlin/NonNullParameterHintCollector.java b/src/main/java/com/android/tools/r8/kotlin/NonNullParameterHintCollector.java
new file mode 100644
index 0000000..21b9409
--- /dev/null
+++ b/src/main/java/com/android/tools/r8/kotlin/NonNullParameterHintCollector.java
@@ -0,0 +1,184 @@
+// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.kotlin;
+
+import static kotlinx.metadata.Flag.Type.IS_NULLABLE;
+
+import com.google.common.collect.HashBasedTable;
+import java.util.BitSet;
+import kotlinx.metadata.KmConstructorExtensionVisitor;
+import kotlinx.metadata.KmConstructorVisitor;
+import kotlinx.metadata.KmExtensionType;
+import kotlinx.metadata.KmFunctionExtensionVisitor;
+import kotlinx.metadata.KmFunctionVisitor;
+import kotlinx.metadata.KmPropertyExtensionVisitor;
+import kotlinx.metadata.KmPropertyVisitor;
+import kotlinx.metadata.KmTypeVisitor;
+import kotlinx.metadata.KmValueParameterVisitor;
+import kotlinx.metadata.jvm.JvmConstructorExtensionVisitor;
+import kotlinx.metadata.jvm.JvmFieldSignature;
+import kotlinx.metadata.jvm.JvmFunctionExtensionVisitor;
+import kotlinx.metadata.jvm.JvmMethodSignature;
+import kotlinx.metadata.jvm.JvmPropertyExtensionVisitor;
+
+class NonNullParameterHintCollector {
+
+ static class FunctionVisitor extends KmFunctionVisitor {
+
+ private final HashBasedTable<String, String, BitSet> paramHints;
+
+ private BitSet paramHint = new BitSet();
+ private int paramIndex = 0;
+ private String name = "";
+ private String descriptor = "";
+
+ FunctionVisitor(HashBasedTable<String, String, BitSet> paramHints) {
+ this.paramHints = paramHints;
+ }
+
+ @Override
+ public KmTypeVisitor visitReceiverParameterType(int typeFlags) {
+ if (!IS_NULLABLE.invoke(typeFlags)) {
+ paramHint.set(paramIndex);
+ }
+ paramIndex++;
+ return null;
+ }
+
+ @Override
+ public KmValueParameterVisitor visitValueParameter(int paramFlags, String paramName) {
+ return new KmValueParameterVisitor() {
+ @Override
+ public KmTypeVisitor visitType(int typeFlags) {
+ if (!IS_NULLABLE.invoke(typeFlags)) {
+ paramHint.set(paramIndex);
+ }
+ paramIndex++;
+ return null;
+ }
+ };
+ }
+
+ @Override
+ public KmFunctionExtensionVisitor visitExtensions(KmExtensionType type) {
+ if (type != JvmFunctionExtensionVisitor.TYPE) {
+ return null;
+ }
+ return new JvmFunctionExtensionVisitor() {
+ @Override
+ public void visit(JvmMethodSignature desc) {
+ name = desc.getName();
+ descriptor = desc.getDesc();
+ }
+ };
+ }
+
+ @Override
+ public void visitEnd() {
+ if (name.isEmpty() || descriptor.isEmpty()) {
+ return;
+ }
+ paramHints.put(name, descriptor, paramHint);
+ }
+ }
+
+ static class ConstructorVisitor extends KmConstructorVisitor {
+ private final HashBasedTable<String, String, BitSet> paramHints;
+
+ private BitSet paramHint = new BitSet();
+ private int paramIndex = 0;
+ private final String name = "<init>";
+ private String descriptor = "";
+
+ ConstructorVisitor(HashBasedTable<String, String, BitSet> paramHints) {
+ this.paramHints = paramHints;
+ }
+
+ @Override
+ public KmValueParameterVisitor visitValueParameter(int paramFlags, String paramName) {
+ return new KmValueParameterVisitor() {
+ @Override
+ public KmTypeVisitor visitType(int typeFlags) {
+ if (!IS_NULLABLE.invoke(typeFlags)) {
+ paramHint.set(paramIndex);
+ }
+ paramIndex++;
+ return null;
+ }
+ };
+ }
+
+ @Override
+ public KmConstructorExtensionVisitor visitExtensions(KmExtensionType type) {
+ if (type != JvmConstructorExtensionVisitor.TYPE) {
+ return null;
+ }
+ return new JvmConstructorExtensionVisitor() {
+ @Override
+ public void visit(JvmMethodSignature desc) {
+ assert name.equals(desc.getName());
+ descriptor = desc.getDesc();
+ }
+ };
+ }
+
+ @Override
+ public void visitEnd() {
+ if (descriptor.isEmpty()) {
+ return;
+ }
+ paramHints.put(name, descriptor, paramHint);
+ }
+ }
+
+ static class PropertyVisitor extends KmPropertyVisitor {
+ private final HashBasedTable<String, String, BitSet> paramHints;
+
+ private BitSet paramHint = new BitSet();
+ private int paramIndex = 0;
+ private String name = "";
+ private String descriptor = "";
+
+ PropertyVisitor(HashBasedTable<String, String, BitSet> paramHints) {
+ this.paramHints = paramHints;
+ }
+
+ @Override
+ public KmTypeVisitor visitReturnType(int typeFlags) {
+ if (!IS_NULLABLE.invoke(typeFlags)) {
+ paramHint.set(paramIndex);
+ }
+ paramIndex++;
+ return null;
+ }
+
+ @Override
+ public KmPropertyExtensionVisitor visitExtensions(KmExtensionType type) {
+ if (type != JvmPropertyExtensionVisitor.TYPE) {
+ return null;
+ }
+ return new JvmPropertyExtensionVisitor() {
+ @Override
+ public void visit(
+ JvmFieldSignature fieldDesc,
+ JvmMethodSignature getterDesc,
+ JvmMethodSignature setterDesc) {
+ if (setterDesc != null) {
+ name = setterDesc.getName();
+ descriptor = setterDesc.getDesc();
+ }
+ }
+ };
+ }
+
+ @Override
+ public void visitEnd() {
+ if (name.isEmpty() || descriptor.isEmpty()) {
+ return;
+ }
+ paramHints.put(name, descriptor, paramHint);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java b/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java
index 2fd66d0..d92de6b 100644
--- a/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java
+++ b/src/main/java/com/android/tools/r8/naming/IdentifierMinifier.java
@@ -5,9 +5,12 @@
import static com.android.tools.r8.utils.DescriptorUtils.descriptorToJavaType;
+import com.android.tools.r8.cf.code.CfConstString;
+import com.android.tools.r8.cf.code.CfInstruction;
import com.android.tools.r8.code.ConstString;
import com.android.tools.r8.code.ConstStringJumbo;
import com.android.tools.r8.code.Instruction;
+import com.android.tools.r8.graph.CfCode;
import com.android.tools.r8.graph.Code;
import com.android.tools.r8.graph.DexCode;
import com.android.tools.r8.graph.DexEncodedField;
@@ -34,9 +37,7 @@
private final Set<DexItem> identifierNameStrings;
IdentifierMinifier(
- AppInfoWithLiveness appInfo,
- ProguardClassFilter adaptClassStrings,
- NamingLens lens) {
+ AppInfoWithLiveness appInfo, ProguardClassFilter adaptClassStrings, NamingLens lens) {
this.appInfo = appInfo;
this.adaptClassStrings = adaptClassStrings;
this.lens = lens;
@@ -86,17 +87,29 @@
if (code == null) {
return;
}
- assert code.isDexCode();
- DexCode dexCode = code.asDexCode();
- for (Instruction instr : dexCode.instructions) {
- if (instr instanceof ConstString) {
- ConstString cnst = (ConstString) instr;
- DexString dexString = cnst.getString();
- cnst.BBBB = getRenamedStringLiteral(dexString);
- } else if (instr instanceof ConstStringJumbo) {
- ConstStringJumbo cnst = (ConstStringJumbo) instr;
- DexString dexString = cnst.getString();
- cnst.BBBBBBBB = getRenamedStringLiteral(dexString);
+ if (code.isDexCode()) {
+ DexCode dexCode = code.asDexCode();
+ for (Instruction instr : dexCode.instructions) {
+ if (instr instanceof ConstString) {
+ ConstString cnst = (ConstString) instr;
+ DexString dexString = cnst.getString();
+ cnst.BBBB = getRenamedStringLiteral(dexString);
+ } else if (instr instanceof ConstStringJumbo) {
+ ConstStringJumbo cnst = (ConstStringJumbo) instr;
+ DexString dexString = cnst.getString();
+ cnst.BBBBBBBB = getRenamedStringLiteral(dexString);
+ }
+ }
+ } else {
+ assert code.isCfCode();
+ CfCode cfCode = code.asCfCode();
+
+ for (CfInstruction instr : cfCode.getInstructions()) {
+ if (instr instanceof CfConstString) {
+ CfConstString cnst = (CfConstString) instr;
+ DexString dexString = cnst.getString();
+ cnst.setString(getRenamedStringLiteral(dexString));
+ }
}
}
}
@@ -153,19 +166,32 @@
if (code == null) {
return;
}
- assert code.isDexCode();
- DexCode dexCode = code.asDexCode();
- for (Instruction instr : dexCode.instructions) {
- if (instr instanceof ConstString
- && ((ConstString) instr).getString() instanceof DexItemBasedString) {
- ConstString cnst = (ConstString) instr;
- DexItemBasedString itemBasedString = (DexItemBasedString) cnst.getString();
- cnst.BBBB = materialize(itemBasedString);
- } else if (instr instanceof ConstStringJumbo
- && ((ConstStringJumbo) instr).getString() instanceof DexItemBasedString) {
- ConstStringJumbo cnst = (ConstStringJumbo) instr;
- DexItemBasedString itemBasedString = (DexItemBasedString) cnst.getString();
- cnst.BBBBBBBB = materialize(itemBasedString);
+ if (code.isDexCode()) {
+ DexCode dexCode = code.asDexCode();
+ for (Instruction instr : dexCode.instructions) {
+ if (instr instanceof ConstString
+ && ((ConstString) instr).getString() instanceof DexItemBasedString) {
+ ConstString cnst = (ConstString) instr;
+ DexItemBasedString itemBasedString = (DexItemBasedString) cnst.getString();
+ cnst.BBBB = materialize(itemBasedString);
+ } else if (instr instanceof ConstStringJumbo
+ && ((ConstStringJumbo) instr).getString() instanceof DexItemBasedString) {
+ ConstStringJumbo cnst = (ConstStringJumbo) instr;
+ DexItemBasedString itemBasedString = (DexItemBasedString) cnst.getString();
+ cnst.BBBBBBBB = materialize(itemBasedString);
+ }
+ }
+ } else {
+ assert code.isCfCode();
+ CfCode cfCode = code.asCfCode();
+
+ for (CfInstruction instr : cfCode.getInstructions()) {
+ if (instr instanceof CfConstString
+ && ((CfConstString) instr).getString() instanceof DexItemBasedString) {
+ CfConstString cnst = (CfConstString) instr;
+ DexItemBasedString itemBasedString = (DexItemBasedString) cnst.getString();
+ cnst.setString(materialize(itemBasedString));
+ }
}
}
}
@@ -184,5 +210,4 @@
return lens.lookupName((DexField) itemBasedString.basedOn);
}
}
-
}
diff --git a/src/test/java/com/android/tools/r8/CfFrontendExamplesTest.java b/src/test/java/com/android/tools/r8/CfFrontendExamplesTest.java
index 4f749b5..70e8445 100644
--- a/src/test/java/com/android/tools/r8/CfFrontendExamplesTest.java
+++ b/src/test/java/com/android/tools/r8/CfFrontendExamplesTest.java
@@ -303,6 +303,7 @@
R8Command command =
R8Command.builder()
.addProgramFiles(inputJar)
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.setMode(CompilationMode.DEBUG)
.setOutput(outputJar, OutputMode.ClassFile)
.build();
diff --git a/src/test/java/com/android/tools/r8/R8CFExamplesTests.java b/src/test/java/com/android/tools/r8/R8CFExamplesTests.java
index 377bfc0..2dbfb37 100644
--- a/src/test/java/com/android/tools/r8/R8CFExamplesTests.java
+++ b/src/test/java/com/android/tools/r8/R8CFExamplesTests.java
@@ -101,7 +101,7 @@
Path outputJar = temp.getRoot().toPath().resolve(outputName);
ToolHelper.runR8(
R8Command.builder()
- .addLibraryFiles(Paths.get(ToolHelper.JAVA_8_RUNTIME))
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.setMode(mode)
.addProgramFiles(inputJar)
.setOutput(outputJar, OutputMode.ClassFile)
diff --git a/src/test/java/com/android/tools/r8/R8CFRunExamplesJava9Test.java b/src/test/java/com/android/tools/r8/R8CFRunExamplesJava9Test.java
index c773989..f0e758d 100644
--- a/src/test/java/com/android/tools/r8/R8CFRunExamplesJava9Test.java
+++ b/src/test/java/com/android/tools/r8/R8CFRunExamplesJava9Test.java
@@ -8,8 +8,7 @@
import static org.junit.Assert.assertEquals;
import com.android.tools.r8.ToolHelper.ProcessResult;
-import com.android.tools.r8.utils.AndroidApiLevel;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.nio.file.Path;
@@ -37,7 +36,7 @@
for (UnaryOperator<R8Command.Builder> transformation : builderTransformations) {
builder = transformation.apply(builder);
}
- builder.addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.P));
+ builder.addLibraryFiles(ToolHelper.getJava8RuntimeJar());
R8Command command =
builder.addProgramFiles(inputFile).setOutput(out, OutputMode.ClassFile).build();
ToolHelper.runR8(command, this::combinedOptionConsumer);
@@ -62,8 +61,8 @@
}
if (!dexInspectorChecks.isEmpty()) {
- DexInspector inspector = new DexInspector(out);
- for (Consumer<DexInspector> check : dexInspectorChecks) {
+ CodeInspector inspector = new CodeInspector(out);
+ for (Consumer<CodeInspector> check : dexInspectorChecks) {
check.accept(inspector);
}
}
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index 801abae..180a5f8 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -22,7 +22,7 @@
import com.android.tools.r8.utils.InternalOptions.LineNumberOptimization;
import com.android.tools.r8.utils.ListUtils;
import com.android.tools.r8.utils.TestDescriptionWatcher;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.base.Charsets;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableListMultimap;
@@ -2059,10 +2059,10 @@
private void failWithDexDiff(File originalFile, File processedFile)
throws IOException, ExecutionException {
- DexInspector inspectOriginal =
- new DexInspector(originalFile.toPath().toAbsolutePath());
- DexInspector inspectProcessed =
- new DexInspector(processedFile.toPath().toAbsolutePath());
+ CodeInspector inspectOriginal =
+ new CodeInspector(originalFile.toPath().toAbsolutePath());
+ CodeInspector inspectProcessed =
+ new CodeInspector(processedFile.toPath().toAbsolutePath());
StringBuilder builderOriginal = new StringBuilder();
StringBuilder builderProcessed = new StringBuilder();
inspectOriginal.forAllClasses((clazz) -> builderOriginal.append(clazz.dumpMethods()));
@@ -2077,10 +2077,10 @@
List<ComparisonFailure> errors;
try {
// Parse all the verification errors.
- DexInspector processed = new DexInspector(processedFile.toPath());
- DexInspector original = DEX_COMPARE_WITH_DEX_REFERENCE_ON_FAILURE
- ? new DexInspector(referenceFile.toPath())
- : new DexInspector(inputFiles.stream().map(Paths::get).collect(Collectors.toList()));
+ CodeInspector processed = new CodeInspector(processedFile.toPath());
+ CodeInspector original = DEX_COMPARE_WITH_DEX_REFERENCE_ON_FAILURE
+ ? new CodeInspector(referenceFile.toPath())
+ : new CodeInspector(inputFiles.stream().map(Paths::get).collect(Collectors.toList()));
List<ArtErrorInfo> errorInfo = ArtErrorParser.parse(verificationError.getMessage());
errors = ListUtils.map(errorInfo, (error) ->
new ComparisonFailure(
diff --git a/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java b/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java
index 36a5fb3..71f4559 100644
--- a/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunExamplesAndroidOTest.java
@@ -12,8 +12,8 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.OffOrAuto;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FoundClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
@@ -174,7 +174,7 @@
.run();
}
- private void checkLambdaCount(DexInspector inspector, int expectedCount, String prefix) {
+ private void checkLambdaCount(CodeInspector inspector, int expectedCount, String prefix) {
int count = 0;
for (FoundClassSubject clazz : inspector.allClasses()) {
if (clazz.isSynthesizedJavaLambdaClass() &&
diff --git a/src/test/java/com/android/tools/r8/R8RunExamplesCommon.java b/src/test/java/com/android/tools/r8/R8RunExamplesCommon.java
index 3d3b4e7..008c6b9 100644
--- a/src/test/java/com/android/tools/r8/R8RunExamplesCommon.java
+++ b/src/test/java/com/android/tools/r8/R8RunExamplesCommon.java
@@ -161,11 +161,15 @@
break;
}
case R8: {
- R8Command command =
- addInputFile(R8Command.builder())
- .setOutput(getOutputFile(), outputMode)
- .setMode(mode)
- .build();
+ R8Command command =
+ addInputFile(R8Command.builder())
+ .addLibraryFiles(
+ output == Output.CF
+ ? ToolHelper.getJava8RuntimeJar()
+ : ToolHelper.getDefaultAndroidJar())
+ .setOutput(getOutputFile(), outputMode)
+ .setMode(mode)
+ .build();
ExceptionUtils.withR8CompilationHandler(
command.getReporter(),
() ->
diff --git a/src/test/java/com/android/tools/r8/RunExamplesAndroidOTest.java b/src/test/java/com/android/tools/r8/RunExamplesAndroidOTest.java
index 2a17917..f638575 100644
--- a/src/test/java/com/android/tools/r8/RunExamplesAndroidOTest.java
+++ b/src/test/java/com/android/tools/r8/RunExamplesAndroidOTest.java
@@ -17,11 +17,11 @@
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.OffOrAuto;
import com.android.tools.r8.utils.TestDescriptionWatcher;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FoundClassSubject;
-import com.android.tools.r8.utils.dexinspector.FoundMethodSubject;
-import com.android.tools.r8.utils.dexinspector.InstructionSubject;
-import com.android.tools.r8.utils.dexinspector.InvokeInstructionSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
+import com.android.tools.r8.utils.codeinspector.FoundMethodSubject;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.InvokeInstructionSubject;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.io.ByteStreams;
@@ -62,7 +62,7 @@
AndroidApiLevel androidJarVersion = null;
final List<Consumer<InternalOptions>> optionConsumers = new ArrayList<>();
- final List<Consumer<DexInspector>> dexInspectorChecks = new ArrayList<>();
+ final List<Consumer<CodeInspector>> dexInspectorChecks = new ArrayList<>();
final List<UnaryOperator<B>> builderTransformations = new ArrayList<>();
TestRunner(String testName, String packageName, String mainClass) {
@@ -73,7 +73,7 @@
abstract C self();
- C withDexCheck(Consumer<DexInspector> check) {
+ C withDexCheck(Consumer<CodeInspector> check) {
dexInspectorChecks.add(check);
return self();
}
@@ -155,8 +155,8 @@
}
if (!dexInspectorChecks.isEmpty()) {
- DexInspector inspector = new DexInspector(out);
- for (Consumer<DexInspector> check : dexInspectorChecks) {
+ CodeInspector inspector = new CodeInspector(out);
+ for (Consumer<CodeInspector> check : dexInspectorChecks) {
check.accept(inspector);
}
}
@@ -495,10 +495,10 @@
mainDexClasses);
// Collect main dex types.
- DexInspector fullInspector = getMainDexInspector(fullDexes);
- DexInspector indexedIntermediateInspector =
+ CodeInspector fullInspector = getMainDexInspector(fullDexes);
+ CodeInspector indexedIntermediateInspector =
getMainDexInspector(dexesThroughIndexedIntermediate);
- DexInspector filePerInputClassIntermediateInspector =
+ CodeInspector filePerInputClassIntermediateInspector =
getMainDexInspector(dexesThroughFilePerInputClassIntermediate);
Collection<String> fullMainClasses = new HashSet<>();
fullInspector.forAllClasses(
@@ -578,12 +578,12 @@
}
}
- protected DexInspector getMainDexInspector(Path zip)
+ protected CodeInspector getMainDexInspector(Path zip)
throws ZipException, IOException, ExecutionException {
try (ZipFile zipFile = new ZipFile(zip.toFile(), StandardCharsets.UTF_8)) {
try (InputStream in =
zipFile.getInputStream(zipFile.getEntry(ToolHelper.DEFAULT_DEX_FILENAME))) {
- return new DexInspector(
+ return new CodeInspector(
AndroidApp.builder()
.addDexProgramData(ByteStreams.toByteArray(in), Origin.unknown())
.build());
diff --git a/src/test/java/com/android/tools/r8/RunExamplesAndroidPTest.java b/src/test/java/com/android/tools/r8/RunExamplesAndroidPTest.java
index aa17280..7f15eca 100644
--- a/src/test/java/com/android/tools/r8/RunExamplesAndroidPTest.java
+++ b/src/test/java/com/android/tools/r8/RunExamplesAndroidPTest.java
@@ -16,10 +16,10 @@
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.OffOrAuto;
import com.android.tools.r8.utils.TestDescriptionWatcher;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FoundClassSubject;
-import com.android.tools.r8.utils.dexinspector.FoundMethodSubject;
-import com.android.tools.r8.utils.dexinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
+import com.android.tools.r8.utils.codeinspector.FoundMethodSubject;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.io.ByteStreams;
@@ -57,7 +57,7 @@
Integer androidJarVersion = null;
final List<Consumer<InternalOptions>> optionConsumers = new ArrayList<>();
- final List<Consumer<DexInspector>> dexInspectorChecks = new ArrayList<>();
+ final List<Consumer<CodeInspector>> dexInspectorChecks = new ArrayList<>();
final List<UnaryOperator<B>> builderTransformations = new ArrayList<>();
TestRunner(String testName, String packageName, String mainClass) {
@@ -68,7 +68,7 @@
abstract C self();
- C withDexCheck(Consumer<DexInspector> check) {
+ C withDexCheck(Consumer<CodeInspector> check) {
dexInspectorChecks.add(check);
return self();
}
@@ -150,8 +150,8 @@
}
if (!dexInspectorChecks.isEmpty()) {
- DexInspector inspector = new DexInspector(out);
- for (Consumer<DexInspector> check : dexInspectorChecks) {
+ CodeInspector inspector = new CodeInspector(out);
+ for (Consumer<CodeInspector> check : dexInspectorChecks) {
check.accept(inspector);
}
}
@@ -255,12 +255,12 @@
}
}
- protected DexInspector getMainDexInspector(Path zip)
+ protected CodeInspector getMainDexInspector(Path zip)
throws ZipException, IOException, ExecutionException {
try (ZipFile zipFile = new ZipFile(zip.toFile(), StandardCharsets.UTF_8)) {
try (InputStream in =
zipFile.getInputStream(zipFile.getEntry(ToolHelper.DEFAULT_DEX_FILENAME))) {
- return new DexInspector(
+ return new CodeInspector(
AndroidApp.builder()
.addDexProgramData(ByteStreams.toByteArray(in), Origin.unknown())
.build());
diff --git a/src/test/java/com/android/tools/r8/RunExamplesJava9Test.java b/src/test/java/com/android/tools/r8/RunExamplesJava9Test.java
index d1894fb..f149cba 100644
--- a/src/test/java/com/android/tools/r8/RunExamplesJava9Test.java
+++ b/src/test/java/com/android/tools/r8/RunExamplesJava9Test.java
@@ -6,7 +6,7 @@
import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
import static com.android.tools.r8.utils.FileUtils.ZIP_EXTENSION;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
@@ -17,12 +17,12 @@
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.OffOrAuto;
import com.android.tools.r8.utils.TestDescriptionWatcher;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FoundClassSubject;
-import com.android.tools.r8.utils.dexinspector.FoundMethodSubject;
-import com.android.tools.r8.utils.dexinspector.InstructionSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
+import com.android.tools.r8.utils.codeinspector.FoundMethodSubject;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.io.IOException;
@@ -54,7 +54,7 @@
Integer androidJarVersion = null;
final List<Consumer<InternalOptions>> optionConsumers = new ArrayList<>();
- final List<Consumer<DexInspector>> dexInspectorChecks = new ArrayList<>();
+ final List<Consumer<CodeInspector>> dexInspectorChecks = new ArrayList<>();
final List<UnaryOperator<B>> builderTransformations = new ArrayList<>();
TestRunner(String testName, String packageName, String mainClass) {
@@ -65,7 +65,7 @@
abstract C self();
- C withDexCheck(Consumer<DexInspector> check) {
+ C withDexCheck(Consumer<CodeInspector> check) {
dexInspectorChecks.add(check);
return self();
}
@@ -147,8 +147,8 @@
}
if (!dexInspectorChecks.isEmpty()) {
- DexInspector inspector = new DexInspector(out);
- for (Consumer<DexInspector> check : dexInspectorChecks) {
+ CodeInspector inspector = new CodeInspector(out);
+ for (Consumer<CodeInspector> check : dexInspectorChecks) {
check.accept(inspector);
}
}
diff --git a/src/test/java/com/android/tools/r8/TestBase.java b/src/test/java/com/android/tools/r8/TestBase.java
index 2d951fa..d5ef221 100644
--- a/src/test/java/com/android/tools/r8/TestBase.java
+++ b/src/test/java/com/android/tools/r8/TestBase.java
@@ -25,9 +25,9 @@
import com.android.tools.r8.utils.PreloadedClassFileProvider;
import com.android.tools.r8.utils.TestDescriptionWatcher;
import com.android.tools.r8.utils.ZipUtils;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
@@ -533,6 +533,25 @@
return result.stdout;
}
+ /** Run application on Java with the specified main class and provided arguments. */
+ protected String runOnJava(AndroidApp app, Class mainClass, String... args) throws IOException {
+ return runOnJava(app, mainClass, Arrays.asList(args));
+ }
+
+ /** Run application on Java with the specified main class and provided arguments. */
+ protected String runOnJava(AndroidApp app, Class mainClass, List<String> args)
+ throws IOException {
+ return runOnJava(app, mainClass.getCanonicalName(), args);
+ }
+
+ /** Run application on Java with the specified main class and provided arguments. */
+ protected String runOnJava(AndroidApp app, String mainClass, List<String> args)
+ throws IOException {
+ Path out = File.createTempFile("junit", ".zip", temp.getRoot()).toPath();
+ app.writeToZip(out, OutputMode.ClassFile);
+ return ToolHelper.runJava(out, mainClass).stdout;
+ }
+
protected ProcessResult runOnJavaRaw(String main, byte[]... classes) throws IOException {
return runOnJavaRaw(main, Arrays.asList(classes));
}
@@ -580,7 +599,7 @@
}
protected DexEncodedMethod getMethod(
- DexInspector inspector,
+ CodeInspector inspector,
String className,
String returnType,
String methodName,
@@ -599,7 +618,7 @@
String methodName,
List<String> parameters) {
try {
- DexInspector inspector = new DexInspector(application);
+ CodeInspector inspector = new CodeInspector(application);
return getMethod(inspector, className, returnType, methodName, parameters);
} catch (Exception e) {
return null;
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 2767df7..2499b5f 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -533,6 +533,10 @@
return getArtDir(version) + "/" + binary;
}
+ public static Path getJava8RuntimeJar() {
+ return Paths.get(JAVA_8_RUNTIME);
+ }
+
public static Path getDefaultAndroidJar() {
return getAndroidJar(AndroidApiLevel.getDefault());
}
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java b/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java
index 706b50b..80541e8 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/AccessRelaxationTestBase.java
@@ -3,8 +3,8 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.accessrelaxation;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPublic;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPublic;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@@ -16,9 +16,9 @@
import com.android.tools.r8.VmTestRunner;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import org.junit.runner.RunWith;
@RunWith(VmTestRunner.class)
@@ -57,15 +57,15 @@
assertEquals(jvmOutput, adjustedArtOutput);
}
- static void assertPublic(DexInspector dexInspector, Class clazz, MethodSignature signature) {
- ClassSubject classSubject = dexInspector.clazz(clazz);
+ static void assertPublic(CodeInspector codeInspector, Class clazz, MethodSignature signature) {
+ ClassSubject classSubject = codeInspector.clazz(clazz);
assertThat(classSubject, isPresent());
MethodSubject methodSubject = classSubject.method(signature);
assertThat(methodSubject, isPublic());
}
- static void assertNotPublic(DexInspector dexInspector, Class clazz, MethodSignature signature) {
- ClassSubject classSubject = dexInspector.clazz(clazz);
+ static void assertNotPublic(CodeInspector codeInspector, Class clazz, MethodSignature signature) {
+ ClassSubject classSubject = codeInspector.clazz(clazz);
assertThat(classSubject, isPresent());
MethodSubject methodSubject = classSubject.method(signature);
assertThat(methodSubject, not(isPublic()));
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/ConstructorRelaxationTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/ConstructorRelaxationTest.java
index 713c467..d90ae45 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/ConstructorRelaxationTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/ConstructorRelaxationTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.accessrelaxation;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
@@ -11,8 +11,8 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import java.util.List;
@@ -185,9 +185,9 @@
});
compareJvmAndArt(app, mainClass);
- DexInspector dexInspector = new DexInspector(app);
+ CodeInspector codeInspector = new CodeInspector(app);
for (Class clazz : CLASSES) {
- ClassSubject classSubject = dexInspector.clazz(clazz);
+ ClassSubject classSubject = codeInspector.clazz(clazz);
assertThat(classSubject, isPresent());
classSubject.getDexClass().forEachMethod(m -> {
assertTrue(!m.isInstanceInitializer() || m.isPublicMethod());
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/InvokeTypeConversionTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/InvokeTypeConversionTest.java
index 4459699..787568b 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/InvokeTypeConversionTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/InvokeTypeConversionTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.accessrelaxation;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -24,8 +24,8 @@
import com.android.tools.r8.smali.SmaliBuilder.MethodSignature;
import com.android.tools.r8.smali.SmaliTestBase;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.List;
import java.util.function.Consumer;
@@ -62,7 +62,7 @@
private void run(
SmaliBuilder builder,
String expectedException,
- Consumer<DexInspector> inspectorConsumer) throws Exception {
+ Consumer<CodeInspector> inspectorConsumer) throws Exception {
AndroidApp app = buildApplication(builder);
List<String> pgConfigs = ImmutableList.of(
keepMainProguardConfiguration(CLASS_NAME),
@@ -82,7 +82,7 @@
assertEquals(1, artResult.exitCode);
assertThat(artResult.stderr, containsString(expectedException));
}
- DexInspector inspector = new DexInspector(processedApp);
+ CodeInspector inspector = new CodeInspector(processedApp);
inspectorConsumer.accept(inspector);
}
diff --git a/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java b/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java
index 9bfd4e2..5b641dc 100644
--- a/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java
+++ b/src/test/java/com/android/tools/r8/accessrelaxation/NonConstructorRelaxationTest.java
@@ -18,7 +18,7 @@
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import org.junit.Test;
@@ -62,20 +62,20 @@
AndroidApp app = ToolHelper.runR8(builder.build());
compareJvmAndArt(app, mainClass);
- DexInspector dexInspector = new DexInspector(app);
- assertPublic(dexInspector, A.class,
+ CodeInspector codeInspector = new CodeInspector(app);
+ assertPublic(codeInspector, A.class,
new MethodSignature("baz", STRING, ImmutableList.of()));
- assertPublic(dexInspector, A.class,
+ assertPublic(codeInspector, A.class,
new MethodSignature("bar", STRING, ImmutableList.of()));
- assertPublic(dexInspector, A.class,
+ assertPublic(codeInspector, A.class,
new MethodSignature("bar", STRING, ImmutableList.of("int")));
- assertPublic(dexInspector, A.class,
+ assertPublic(codeInspector, A.class,
new MethodSignature("blah", STRING, ImmutableList.of("int")));
- assertPublic(dexInspector, B.class,
+ assertPublic(codeInspector, B.class,
new MethodSignature("blah", STRING, ImmutableList.of("int")));
- assertPublic(dexInspector, BB.class,
+ assertPublic(codeInspector, BB.class,
new MethodSignature("blah", STRING, ImmutableList.of("int")));
}
@@ -110,24 +110,24 @@
AndroidApp app = ToolHelper.runR8(builder.build());
compareJvmAndArt(app, mainClass);
- DexInspector dexInspector = new DexInspector(app);
- assertPublic(dexInspector, Base.class,
+ CodeInspector codeInspector = new CodeInspector(app);
+ assertPublic(codeInspector, Base.class,
new MethodSignature("foo", STRING, ImmutableList.of()));
// Base#foo?() can't be publicized due to Itf<1>#foo<1>().
- assertNotPublic(dexInspector, Base.class,
+ assertNotPublic(codeInspector, Base.class,
new MethodSignature("foo1", STRING, ImmutableList.of()));
- assertNotPublic(dexInspector, Base.class,
+ assertNotPublic(codeInspector, Base.class,
new MethodSignature("foo2", STRING, ImmutableList.of()));
// Sub?#bar1(int) can be publicized as they don't bother each other.
- assertPublic(dexInspector, Sub1.class,
+ assertPublic(codeInspector, Sub1.class,
new MethodSignature("bar1", STRING, ImmutableList.of("int")));
- assertPublic(dexInspector, Sub2.class,
+ assertPublic(codeInspector, Sub2.class,
new MethodSignature("bar1", STRING, ImmutableList.of("int")));
// Sub2#bar2(int) is unique throughout the hierarchy, hence publicized.
- assertPublic(dexInspector, Sub2.class,
+ assertPublic(codeInspector, Sub2.class,
new MethodSignature("bar2", STRING, ImmutableList.of("int")));
}
}
diff --git a/src/test/java/com/android/tools/r8/bisect/BisectTest.java b/src/test/java/com/android/tools/r8/bisect/BisectTest.java
index a692b9e..5252f08 100644
--- a/src/test/java/com/android/tools/r8/bisect/BisectTest.java
+++ b/src/test/java/com/android/tools/r8/bisect/BisectTest.java
@@ -16,7 +16,7 @@
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.Timing;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -81,7 +81,7 @@
}
private Result command(DexApplication application) {
- DexInspector inspector = new DexInspector(application);
+ CodeInspector inspector = new CodeInspector(application);
if (inspector
.clazz(ERRONEOUS_CLASS)
.method(erroneousMethodSignature.returnType,
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java b/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java
index 77b251d..37d3914 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/B77836766.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.bridgeremoval;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@@ -16,9 +16,9 @@
import com.android.tools.r8.jasmin.JasminBuilder;
import com.android.tools.r8.jasmin.JasminBuilder.ClassBuilder;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import org.junit.Test;
@@ -129,7 +129,7 @@
AndroidApp processedApp = runAndVerifyOnJvmAndArt(jasminBuilder, mainClassName, proguardConfig);
- DexInspector inspector = new DexInspector(processedApp);
+ CodeInspector inspector = new CodeInspector(processedApp);
ClassSubject absSubject = inspector.clazz(absCls.name);
assertThat(absSubject, isPresent());
ClassSubject cls1Subject = inspector.clazz(cls1.name);
@@ -236,7 +236,7 @@
AndroidApp processedApp = runAndVerifyOnJvmAndArt(jasminBuilder, mainClassName, proguardConfig);
- DexInspector inspector = new DexInspector(processedApp);
+ CodeInspector inspector = new CodeInspector(processedApp);
ClassSubject baseSubject = inspector.clazz(baseCls.name);
assertThat(baseSubject, isPresent());
ClassSubject cls1Subject = inspector.clazz(cls1.name);
@@ -332,7 +332,7 @@
AndroidApp processedApp = runAndVerifyOnJvmAndArt(jasminBuilder, mainClassName, proguardConfig);
- DexInspector inspector = new DexInspector(processedApp);
+ CodeInspector inspector = new CodeInspector(processedApp);
ClassSubject baseSubject = inspector.clazz(baseCls.name);
assertThat(baseSubject, isPresent());
ClassSubject subSubject = inspector.clazz(subCls.name);
@@ -408,7 +408,7 @@
String proguardConfig = keepMainProguardConfiguration(mainClass.name, false, false);
AndroidApp processedApp = runAndVerifyOnJvmAndArt(jasminBuilder, mainClassName, proguardConfig);
- DexInspector inspector = new DexInspector(processedApp);
+ CodeInspector inspector = new CodeInspector(processedApp);
ClassSubject baseSubject = inspector.clazz(cls.name);
assertThat(baseSubject, isPresent());
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/EmptyBridgeTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/EmptyBridgeTest.java
index 8fcf7a3..9c525b5 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/EmptyBridgeTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/EmptyBridgeTest.java
@@ -3,16 +3,16 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.bridgeremoval;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.junit.Assert.assertThat;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.jasmin.JasminBuilder;
import com.android.tools.r8.jasmin.JasminBuilder.ClassBuilder;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import org.junit.Test;
@@ -53,7 +53,7 @@
+ "-keep class " + absClassName + "{ *; }";
AndroidApp processedApp = compileWithR8(jasminBuilder.build(), proguardConfig);
- DexInspector inspector = new DexInspector(processedApp);
+ CodeInspector inspector = new CodeInspector(processedApp);
ClassSubject classSubject = inspector.clazz(absClassName);
assertThat(classSubject, isPresent());
MethodSubject methodSubject = classSubject.method("void", "emptyBridge", ImmutableList.of());
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/RemoveVisibilityBridgeMethodsTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/RemoveVisibilityBridgeMethodsTest.java
index 272406f..c19b308 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/RemoveVisibilityBridgeMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/RemoveVisibilityBridgeMethodsTest.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.bridgeremoval;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
@@ -17,9 +17,9 @@
import com.android.tools.r8.jasmin.JasminBuilder;
import com.android.tools.r8.jasmin.JasminBuilder.ClassBuilder;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.lang.reflect.Method;
import java.nio.file.Path;
@@ -34,7 +34,7 @@
Outer.class,
Main.class);
String proguardConfig = keepMainProguardConfiguration(Main.class, true, obfuscate);
- DexInspector inspector = new DexInspector(compileWithR8(classes, proguardConfig));
+ CodeInspector inspector = new CodeInspector(compileWithR8(classes, proguardConfig));
List<Method> removedMethods = ImmutableList.of(
Outer.SubClass.class.getMethod("method"),
@@ -116,7 +116,7 @@
String artResult = runOnArt(optimizedApp, mainClassName);
assertEquals(javaResult.stdout, artResult);
- DexInspector inspector = new DexInspector(optimizedApp);
+ CodeInspector inspector = new CodeInspector(optimizedApp);
ClassSubject classSubject = inspector.clazz(superClass.name);
assertThat(classSubject, isPresent());
diff --git a/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/KeepNonVisibilityBridgeMethodsTest.java b/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/KeepNonVisibilityBridgeMethodsTest.java
index f1eddcd..4535b6f 100644
--- a/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/KeepNonVisibilityBridgeMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/bridgeremoval/bridgestokeep/KeepNonVisibilityBridgeMethodsTest.java
@@ -7,8 +7,8 @@
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.TestBase;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.lang.reflect.Method;
import java.util.List;
@@ -32,7 +32,7 @@
SimpleObservableList.class,
Main.class);
String proguardConfig = keepMainAllowAccessModification(Main.class, obfuscate);
- DexInspector inspector = new DexInspector(compileWithR8(classes, proguardConfig));
+ CodeInspector inspector = new CodeInspector(compileWithR8(classes, proguardConfig));
// The bridge for registerObserver cannot be removed.
Method registerObserver =
diff --git a/src/test/java/com/android/tools/r8/cf/BootstrapTest.java b/src/test/java/com/android/tools/r8/cf/BootstrapTest.java
index 7fdad0d..90b64900 100644
--- a/src/test/java/com/android/tools/r8/cf/BootstrapTest.java
+++ b/src/test/java/com/android/tools/r8/cf/BootstrapTest.java
@@ -102,7 +102,7 @@
ToolHelper.runR8(
R8Command.builder()
.setMode(mode)
- .addLibraryFiles(Paths.get(ToolHelper.JAVA_8_RUNTIME))
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.setProgramConsumer(new ClassFileConsumer.ArchiveConsumer(outputJar, true))
.addProgramFiles(inputJar)
.addProguardConfigurationFiles(pgConfigFile)
diff --git a/src/test/java/com/android/tools/r8/cf/IdenticalCatchHandlerTest.java b/src/test/java/com/android/tools/r8/cf/IdenticalCatchHandlerTest.java
index d285dc6..450e6d0 100644
--- a/src/test/java/com/android/tools/r8/cf/IdenticalCatchHandlerTest.java
+++ b/src/test/java/com/android/tools/r8/cf/IdenticalCatchHandlerTest.java
@@ -19,11 +19,10 @@
import com.android.tools.r8.graph.DexCode.Try;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.Sets;
import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
import it.unimi.dsi.fastutil.ints.IntSet;
-import java.nio.file.Paths;
import java.util.Set;
import org.junit.Test;
@@ -52,7 +51,7 @@
AndroidApp inputApp =
AndroidApp.builder()
.addClassProgramData(inputBytes, Origin.unknown())
- .addLibraryFiles(Paths.get(ToolHelper.JAVA_8_RUNTIME))
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.build();
assertEquals(2, countCatchHandlers(inputApp));
AndroidApp outputDexApp = ToolHelper.runR8(inputApp);
@@ -64,7 +63,7 @@
}
private int countCatchHandlers(AndroidApp inputApp) throws Exception {
- DexInspector inspector = new DexInspector(inputApp, o -> o.enableCfFrontend = true);
+ CodeInspector inspector = new CodeInspector(inputApp, o -> o.enableCfFrontend = true);
DexClass dexClass = inspector.clazz(TestClass.class).getDexClass();
Code code = dexClass.virtualMethods()[0].getCode();
if (code.isCfCode()) {
diff --git a/src/test/java/com/android/tools/r8/cf/LambdaTestRunner.java b/src/test/java/com/android/tools/r8/cf/LambdaTestRunner.java
index e1d110c..7db1d61 100644
--- a/src/test/java/com/android/tools/r8/cf/LambdaTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/LambdaTestRunner.java
@@ -18,9 +18,8 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.AndroidAppConsumers;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.Collections;
import java.util.List;
import org.junit.Assert;
@@ -52,7 +51,7 @@
R8.run(
R8Command.builder()
.setMode(CompilationMode.DEBUG)
- .addLibraryFiles(Paths.get(ToolHelper.JAVA_8_RUNTIME))
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.setProgramConsumer(appBuilder.wrapClassFileConsumer(new ArchiveConsumer(outPath)))
.addClassProgramData(inputClass, Origin.unknown())
.build());
@@ -70,7 +69,7 @@
private static CfInvokeDynamic findFirstInMethod(AndroidApp app) throws Exception {
String returnType = "void";
- DexInspector inspector = new DexInspector(app, o -> o.enableCfFrontend = true);
+ CodeInspector inspector = new CodeInspector(app, o -> o.enableCfFrontend = true);
List<String> args = Collections.singletonList(String[].class.getTypeName());
DexEncodedMethod method = inspector.clazz(CLASS).method(returnType, METHOD, args).getMethod();
CfCode code = method.getCode().asCfCode();
diff --git a/src/test/java/com/android/tools/r8/cf/NestedExceptionTestRunner.java b/src/test/java/com/android/tools/r8/cf/NestedExceptionTestRunner.java
index c0a5455..a60eda9 100644
--- a/src/test/java/com/android/tools/r8/cf/NestedExceptionTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/NestedExceptionTestRunner.java
@@ -29,7 +29,7 @@
R8Command.builder()
.setMode(CompilationMode.DEBUG)
.addClassProgramData(ToolHelper.getClassAsBytes(CLASS), Origin.unknown())
- .addLibraryFiles(ToolHelper.getAndroidJar(ToolHelper.getMinApiLevelForDexVm()))
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.setProgramConsumer(sink.wrapClassFileConsumer(null))
.build());
Path out = temp.newFolder().toPath().resolve("test.jar");
diff --git a/src/test/java/com/android/tools/r8/cf/SynchronizedNoopTestRunner.java b/src/test/java/com/android/tools/r8/cf/SynchronizedNoopTestRunner.java
index 6196081..e4f9249 100644
--- a/src/test/java/com/android/tools/r8/cf/SynchronizedNoopTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/SynchronizedNoopTestRunner.java
@@ -15,7 +15,7 @@
import com.android.tools.r8.graph.JarCode;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidAppConsumers;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.util.ArrayList;
import java.util.Collections;
import org.junit.Test;
@@ -37,7 +37,7 @@
.addLibraryFiles(ToolHelper.getAndroidJar(ToolHelper.getMinApiLevelForDexVm()))
.setProgramConsumer(a.wrapClassFileConsumer(null))
.build());
- DexInspector inspector = new DexInspector(a.build());
+ CodeInspector inspector = new CodeInspector(a.build());
DexEncodedMethod method =
inspector.clazz(CLASS).method("void", "noop", Collections.emptyList()).getMethod();
ArrayList<AbstractInsnNode> insns = new ArrayList<>();
diff --git a/src/test/java/com/android/tools/r8/classmerging/ClassMergingTest.java b/src/test/java/com/android/tools/r8/classmerging/ClassMergingTest.java
index 91e7b5d..6f3c97a 100644
--- a/src/test/java/com/android/tools/r8/classmerging/ClassMergingTest.java
+++ b/src/test/java/com/android/tools/r8/classmerging/ClassMergingTest.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.classmerging;
import static com.android.tools.r8.smali.SmaliBuilder.buildCode;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -30,10 +30,10 @@
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FoundClassSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import java.io.IOException;
@@ -83,11 +83,11 @@
.setDisableMinification(true)
.build(),
optionsConsumer);
- inspector = new DexInspector(
+ inspector = new CodeInspector(
Paths.get(temp.getRoot().getCanonicalPath()).resolve("classes.dex"));
}
- private DexInspector inspector;
+ private CodeInspector inspector;
private final List<String> CAN_BE_MERGED = ImmutableList.of(
"classmerging.GenericInterface",
@@ -152,7 +152,7 @@
ImmutableSet.of(
"classmerging.ConflictInGeneratedNameTest",
"classmerging.ConflictInGeneratedNameTest$B");
- DexInspector inspector =
+ CodeInspector inspector =
runTestOnInput(
main,
readProgramFiles(programFiles),
@@ -603,7 +603,7 @@
"classmerging.ExceptionTest",
"classmerging.ExceptionTest$ExceptionB",
"classmerging.ExceptionTest$Exception2");
- DexInspector inspector = runTest(main, programFiles, preservedClassNames::contains);
+ CodeInspector inspector = runTest(main, programFiles, preservedClassNames::contains);
ClassSubject mainClass = inspector.clazz(main);
assertThat(mainClass, isPresent());
@@ -645,7 +645,7 @@
// Sanity check that there is actually an invoke-interface instruction in the input. We need
// to make sure that this invoke-interface instruction is translated to invoke-virtual after
// the classes A and B are merged.
- DexInspector inputInspector = new DexInspector(app);
+ CodeInspector inputInspector = new CodeInspector(app);
ClassSubject clazz = inputInspector.clazz("classmerging.MergeDefaultMethodIntoClassTest");
assertThat(clazz, isPresent());
MethodSubject method = clazz.method("void", "main", ImmutableList.of("java.lang.String[]"));
@@ -773,12 +773,12 @@
runTest(main, programFiles, preservedClassNames::contains);
}
- private DexInspector runTest(
+ private CodeInspector runTest(
String main, Path[] programFiles, Predicate<String> preservedClassNames) throws Exception {
return runTest(main, programFiles, preservedClassNames, getProguardConfig(EXAMPLE_KEEP));
}
- private DexInspector runTest(
+ private CodeInspector runTest(
String main,
Path[] programFiles,
Predicate<String> preservedClassNames,
@@ -788,13 +788,13 @@
main, readProgramFiles(programFiles), preservedClassNames, proguardConfig);
}
- private DexInspector runTestOnInput(
+ private CodeInspector runTestOnInput(
String main, AndroidApp input, Predicate<String> preservedClassNames, String proguardConfig)
throws Exception {
return runTestOnInput(main, input, preservedClassNames, proguardConfig, this::configure);
}
- private DexInspector runTestOnInput(
+ private CodeInspector runTestOnInput(
String main,
AndroidApp input,
Predicate<String> preservedClassNames,
@@ -802,8 +802,8 @@
Consumer<InternalOptions> optionsConsumer)
throws Exception {
AndroidApp output = compileWithR8(input, proguardConfig, optionsConsumer);
- DexInspector inputInspector = new DexInspector(input);
- DexInspector outputInspector = new DexInspector(output);
+ CodeInspector inputInspector = new CodeInspector(input);
+ CodeInspector outputInspector = new CodeInspector(output);
// Check that all classes in [preservedClassNames] are in fact preserved.
for (FoundClassSubject classSubject : inputInspector.allClasses()) {
String className = classSubject.getOriginalName();
diff --git a/src/test/java/com/android/tools/r8/code/NativeMethodWithCodeTest.java b/src/test/java/com/android/tools/r8/code/NativeMethodWithCodeTest.java
index d524d7c..5b4f1d4 100644
--- a/src/test/java/com/android/tools/r8/code/NativeMethodWithCodeTest.java
+++ b/src/test/java/com/android/tools/r8/code/NativeMethodWithCodeTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.code;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
@@ -17,9 +17,9 @@
import com.android.tools.r8.jasmin.JasminBuilder;
import com.android.tools.r8.jasmin.JasminBuilder.ClassBuilder;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.nio.file.Path;
@@ -102,7 +102,7 @@
private MethodSubject getNativeMethod(String mainClassName, AndroidApp processedApp)
throws IOException, ExecutionException {
- DexInspector inspector = new DexInspector(processedApp);
+ CodeInspector inspector = new CodeInspector(processedApp);
ClassSubject mainSubject = inspector.clazz(mainClassName);
return mainSubject.method("void", "n1", ImmutableList.of("java.lang.String"));
}
diff --git a/src/test/java/com/android/tools/r8/compatproguard/AtomicFieldUpdaterTest.java b/src/test/java/com/android/tools/r8/compatproguard/AtomicFieldUpdaterTest.java
index 7d27c5e..2521e02 100644
--- a/src/test/java/com/android/tools/r8/compatproguard/AtomicFieldUpdaterTest.java
+++ b/src/test/java/com/android/tools/r8/compatproguard/AtomicFieldUpdaterTest.java
@@ -12,9 +12,9 @@
import com.android.tools.r8.code.ReturnVoid;
import com.android.tools.r8.graph.DexCode;
import com.android.tools.r8.smali.SmaliBuilder;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.util.List;
import org.junit.Test;
@@ -44,11 +44,11 @@
keepMainProguardConfiguration(CLASS_NAME),
"-dontshrink",
"-dontoptimize");
- DexInspector inspector = runCompatProguard(builder, pgConfigs);
+ CodeInspector inspector = runCompatProguard(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
- MethodSubject method = clazz.method(DexInspector.MAIN);
+ MethodSubject method = clazz.method(CodeInspector.MAIN);
assertTrue(method.isPresent());
DexCode code = method.getMethod().getCode().asDexCode();
@@ -80,11 +80,11 @@
keepMainProguardConfiguration(CLASS_NAME),
"-dontshrink",
"-dontoptimize");
- DexInspector inspector = runCompatProguard(builder, pgConfigs);
+ CodeInspector inspector = runCompatProguard(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
- MethodSubject method = clazz.method(DexInspector.MAIN);
+ MethodSubject method = clazz.method(CodeInspector.MAIN);
assertTrue(method.isPresent());
DexCode code = method.getMethod().getCode().asDexCode();
@@ -117,11 +117,11 @@
keepMainProguardConfiguration(CLASS_NAME),
"-dontshrink",
"-dontoptimize");
- DexInspector inspector = runCompatProguard(builder, pgConfigs);
+ CodeInspector inspector = runCompatProguard(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
- MethodSubject method = clazz.method(DexInspector.MAIN);
+ MethodSubject method = clazz.method(CodeInspector.MAIN);
assertTrue(method.isPresent());
DexCode code = method.getMethod().getCode().asDexCode();
diff --git a/src/test/java/com/android/tools/r8/compatproguard/CompatProguardSmaliTestBase.java b/src/test/java/com/android/tools/r8/compatproguard/CompatProguardSmaliTestBase.java
index 0d5849b..ea450e4 100644
--- a/src/test/java/com/android/tools/r8/compatproguard/CompatProguardSmaliTestBase.java
+++ b/src/test/java/com/android/tools/r8/compatproguard/CompatProguardSmaliTestBase.java
@@ -10,12 +10,12 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.smali.SmaliBuilder;
import com.android.tools.r8.smali.SmaliTestBase;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.nio.file.Path;
import java.util.List;
class CompatProguardSmaliTestBase extends SmaliTestBase {
- DexInspector runCompatProguard(SmaliBuilder builder, List<String> proguardConfigurations)
+ CodeInspector runCompatProguard(SmaliBuilder builder, List<String> proguardConfigurations)
throws Exception {
Path dexOutputDir = temp.newFolder().toPath();
R8Command.Builder commandBuilder =
@@ -23,6 +23,6 @@
.setOutput(dexOutputDir, OutputMode.DexIndexed)
.addProguardConfiguration(proguardConfigurations, Origin.unknown());
ToolHelper.getAppBuilder(commandBuilder).addDexProgramData(builder.compile(), Origin.unknown());
- return new DexInspector(ToolHelper.runR8(commandBuilder.build()));
+ return new CodeInspector(ToolHelper.runR8(commandBuilder.build()));
}
}
diff --git a/src/test/java/com/android/tools/r8/compatproguard/ForNameTest.java b/src/test/java/com/android/tools/r8/compatproguard/ForNameTest.java
index 3d9c912..6aa8805 100644
--- a/src/test/java/com/android/tools/r8/compatproguard/ForNameTest.java
+++ b/src/test/java/com/android/tools/r8/compatproguard/ForNameTest.java
@@ -12,9 +12,9 @@
import com.android.tools.r8.code.ReturnVoid;
import com.android.tools.r8.graph.DexCode;
import com.android.tools.r8.smali.SmaliBuilder;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.util.List;
import org.junit.Test;
@@ -39,11 +39,11 @@
keepMainProguardConfiguration(CLASS_NAME),
"-dontshrink",
"-dontoptimize");
- DexInspector inspector = runCompatProguard(builder, pgConfigs);
+ CodeInspector inspector = runCompatProguard(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
- MethodSubject method = clazz.method(DexInspector.MAIN);
+ MethodSubject method = clazz.method(CodeInspector.MAIN);
assertTrue(method.isPresent());
DexCode code = method.getMethod().getCode().asDexCode();
@@ -70,11 +70,11 @@
"-dontshrink",
"-dontoptimize",
"-dontobfuscate");
- DexInspector inspector = runCompatProguard(builder, pgConfigs);
+ CodeInspector inspector = runCompatProguard(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
- MethodSubject method = clazz.method(DexInspector.MAIN);
+ MethodSubject method = clazz.method(CodeInspector.MAIN);
assertTrue(method.isPresent());
DexCode code = method.getMethod().getCode().asDexCode();
diff --git a/src/test/java/com/android/tools/r8/compatproguard/GetMembersTest.java b/src/test/java/com/android/tools/r8/compatproguard/GetMembersTest.java
index e478115..5771019 100644
--- a/src/test/java/com/android/tools/r8/compatproguard/GetMembersTest.java
+++ b/src/test/java/com/android/tools/r8/compatproguard/GetMembersTest.java
@@ -15,9 +15,9 @@
import com.android.tools.r8.code.ReturnVoid;
import com.android.tools.r8.graph.DexCode;
import com.android.tools.r8.smali.SmaliBuilder;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.util.List;
import org.junit.Test;
@@ -45,11 +45,11 @@
keepMainProguardConfiguration(CLASS_NAME),
"-dontshrink",
"-dontoptimize");
- DexInspector inspector = runCompatProguard(builder, pgConfigs);
+ CodeInspector inspector = runCompatProguard(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
- MethodSubject method = clazz.method(DexInspector.MAIN);
+ MethodSubject method = clazz.method(CodeInspector.MAIN);
assertTrue(method.isPresent());
DexCode code = method.getMethod().getCode().asDexCode();
@@ -85,11 +85,11 @@
keepMainProguardConfiguration(CLASS_NAME),
"-dontshrink",
"-dontoptimize");
- DexInspector inspector = runCompatProguard(builder, pgConfigs);
+ CodeInspector inspector = runCompatProguard(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
- MethodSubject method = clazz.method(DexInspector.MAIN);
+ MethodSubject method = clazz.method(CodeInspector.MAIN);
assertTrue(method.isPresent());
DexCode code = method.getMethod().getCode().asDexCode();
diff --git a/src/test/java/com/android/tools/r8/debug/ArrayDimensionGreaterThanSevenTestRunner.java b/src/test/java/com/android/tools/r8/debug/ArrayDimensionGreaterThanSevenTestRunner.java
index 7866e1b..bcc70c6 100644
--- a/src/test/java/com/android/tools/r8/debug/ArrayDimensionGreaterThanSevenTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/ArrayDimensionGreaterThanSevenTestRunner.java
@@ -36,6 +36,7 @@
R8Command.builder()
.addClassProgramData(ToolHelper.getClassAsBytes(CLASS), Origin.unknown())
.setMode(CompilationMode.DEBUG)
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.setOutput(cfOut, OutputMode.ClassFile)
.build(),
optionsConsumer);
diff --git a/src/test/java/com/android/tools/r8/debug/DebugInfoWhenInliningTest.java b/src/test/java/com/android/tools/r8/debug/DebugInfoWhenInliningTest.java
index f010357..29b0e17 100644
--- a/src/test/java/com/android/tools/r8/debug/DebugInfoWhenInliningTest.java
+++ b/src/test/java/com/android/tools/r8/debug/DebugInfoWhenInliningTest.java
@@ -55,7 +55,9 @@
config = new DexDebugTestConfig(outjar);
} else {
assert (runtimeKind == RuntimeKind.CF);
- builder.setOutput(outjar, OutputMode.ClassFile);
+ builder
+ .setOutput(outjar, OutputMode.ClassFile)
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar());
config = new CfDebugTestConfig(outjar);
}
diff --git a/src/test/java/com/android/tools/r8/debug/ExamplesDebugTest.java b/src/test/java/com/android/tools/r8/debug/ExamplesDebugTest.java
index 6de20c6..6dccf0b 100644
--- a/src/test/java/com/android/tools/r8/debug/ExamplesDebugTest.java
+++ b/src/test/java/com/android/tools/r8/debug/ExamplesDebugTest.java
@@ -51,6 +51,7 @@
ToolHelper.runR8(
R8Command.builder()
.addProgramFiles(input)
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.setMode(CompilationMode.DEBUG)
.setOutput(output, OutputMode.ClassFile)
.build(),
diff --git a/src/test/java/com/android/tools/r8/debug/IincDebugTestRunner.java b/src/test/java/com/android/tools/r8/debug/IincDebugTestRunner.java
index bc390b9..a275e6b 100644
--- a/src/test/java/com/android/tools/r8/debug/IincDebugTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/IincDebugTestRunner.java
@@ -17,7 +17,6 @@
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.debug.DebugTestBase.JUnit3Wrapper.DebuggeeState;
import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.stream.Stream;
import org.junit.Assume;
import org.junit.Test;
@@ -115,7 +114,7 @@
.setProgramConsumer(consumer)
.addProgramFiles(inputJar);
if ((consumer instanceof ClassFileConsumer)) {
- builder.addLibraryFiles(Paths.get(ToolHelper.JAVA_8_RUNTIME));
+ builder.addLibraryFiles(ToolHelper.getJava8RuntimeJar());
} else {
builder.addLibraryFiles(ToolHelper.getAndroidJar(ToolHelper.getMinApiLevelForDexVm()));
}
diff --git a/src/test/java/com/android/tools/r8/debug/LineNumberOptimizationTest.java b/src/test/java/com/android/tools/r8/debug/LineNumberOptimizationTest.java
index 6e1c05f..5cbe03d 100644
--- a/src/test/java/com/android/tools/r8/debug/LineNumberOptimizationTest.java
+++ b/src/test/java/com/android/tools/r8/debug/LineNumberOptimizationTest.java
@@ -60,7 +60,9 @@
DebugTestConfig config = null;
if (runtimeKind == RuntimeKind.CF) {
- builder.setOutput(outjar, OutputMode.ClassFile);
+ builder
+ .setOutput(outjar, OutputMode.ClassFile)
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar());
config = new CfDebugTestConfig(outjar);
} else {
assert (runtimeKind == RuntimeKind.DEX);
diff --git a/src/test/java/com/android/tools/r8/debug/LocalsLiveAtBlockEntryDebugTest.java b/src/test/java/com/android/tools/r8/debug/LocalsLiveAtBlockEntryDebugTest.java
index d0f9d20..09a46e5 100644
--- a/src/test/java/com/android/tools/r8/debug/LocalsLiveAtBlockEntryDebugTest.java
+++ b/src/test/java/com/android/tools/r8/debug/LocalsLiveAtBlockEntryDebugTest.java
@@ -7,9 +7,9 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.jasmin.JasminBuilder;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import java.util.Collections;
@@ -53,8 +53,8 @@
}
private void runTest(DebugTestConfig config) throws Throwable {
- DexInspector inspector =
- new DexInspector(
+ CodeInspector inspector =
+ new CodeInspector(
(config instanceof CfDebugTestConfig)
? Collections.singletonList(config.getPaths().get(1).resolve(className + ".class"))
: config.getPaths());
diff --git a/src/test/java/com/android/tools/r8/debug/MinificationTest.java b/src/test/java/com/android/tools/r8/debug/MinificationTest.java
index 1bb357f..1b51cd8 100644
--- a/src/test/java/com/android/tools/r8/debug/MinificationTest.java
+++ b/src/test/java/com/android/tools/r8/debug/MinificationTest.java
@@ -16,8 +16,8 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.InternalOptions.LineNumberOptimization;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import java.util.Collection;
@@ -80,7 +80,6 @@
proguardConfigurations = builder.build();
}
- AndroidApiLevel minSdk = ToolHelper.getMinApiLevelForDexVm();
Path outputPath = temp.getRoot().toPath().resolve("classes.zip");
Path proguardMap = writeProguardMap ? temp.getRoot().toPath().resolve("proguard.map") : null;
OutputMode outputMode =
@@ -89,10 +88,12 @@
R8Command.builder()
.addProgramFiles(DEBUGGEE_JAR)
.setOutput(outputPath, outputMode)
- .setMode(CompilationMode.DEBUG)
- .addLibraryFiles(ToolHelper.getAndroidJar(minSdk));
- if (runtimeKind != RuntimeKind.CF) {
- builder.setMinApiLevel(minSdk.getLevel());
+ .setMode(CompilationMode.DEBUG);
+ if (runtimeKind == RuntimeKind.DEX) {
+ AndroidApiLevel minSdk = ToolHelper.getMinApiLevelForDexVm();
+ builder.setMinApiLevel(minSdk.getLevel()).addLibraryFiles(ToolHelper.getAndroidJar(minSdk));
+ } else if (runtimeKind == RuntimeKind.CF) {
+ builder.addLibraryFiles(ToolHelper.getJava8RuntimeJar());
}
if (proguardMap != null) {
builder.setProguardMapOutputPath(proguardMap);
@@ -187,7 +188,7 @@
throws Throwable {
Path proguardMap = config.getProguardMap();
String mappingFile = proguardMap == null ? null : proguardMap.toString();
- DexInspector inspector = new DexInspector(config.getPaths(), mappingFile);
+ CodeInspector inspector = new CodeInspector(config.getPaths(), mappingFile);
ClassSubject clazz = inspector.clazz(className);
assertTrue(clazz.isPresent());
if (method != null) {
diff --git a/src/test/java/com/android/tools/r8/debug/NopDebugTestRunner.java b/src/test/java/com/android/tools/r8/debug/NopDebugTestRunner.java
index 3ea4017..813a873 100644
--- a/src/test/java/com/android/tools/r8/debug/NopDebugTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debug/NopDebugTestRunner.java
@@ -11,7 +11,6 @@
import com.android.tools.r8.debug.DebugTestBase.JUnit3Wrapper.DebuggeeState;
import com.android.tools.r8.utils.DescriptorUtils;
import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.stream.Stream;
import org.junit.Assume;
import org.junit.Test;
@@ -47,7 +46,7 @@
Path outputJar = temp.getRoot().toPath().resolve(outputName);
ToolHelper.runR8(
R8Command.builder()
- .addLibraryFiles(Paths.get(ToolHelper.JAVA_8_RUNTIME))
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.setMode(CompilationMode.DEBUG)
.addProgramFiles(inputJar)
.setOutput(outputJar, OutputMode.ClassFile)
diff --git a/src/test/java/com/android/tools/r8/debug/R8CfDebugTestResourcesConfig.java b/src/test/java/com/android/tools/r8/debug/R8CfDebugTestResourcesConfig.java
index e4a88f0..67b7c1a 100644
--- a/src/test/java/com/android/tools/r8/debug/R8CfDebugTestResourcesConfig.java
+++ b/src/test/java/com/android/tools/r8/debug/R8CfDebugTestResourcesConfig.java
@@ -8,7 +8,6 @@
import com.android.tools.r8.R8;
import com.android.tools.r8.R8Command;
import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.AndroidAppConsumers;
import java.nio.file.Path;
@@ -21,14 +20,13 @@
private static synchronized AndroidApp getCompiledResources() throws Throwable {
if (compiledResources == null) {
- AndroidApiLevel minApi = ToolHelper.getMinApiLevelForDexVm();
AndroidAppConsumers sink = new AndroidAppConsumers();
R8.run(
R8Command.builder()
.setMode(CompilationMode.DEBUG)
.addProgramFiles(DebugTestBase.DEBUGGEE_JAR)
.setProgramConsumer(sink.wrapClassFileConsumer(null))
- .addLibraryFiles(ToolHelper.getAndroidJar(minApi))
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.build());
compiledResources = sink.build();
}
diff --git a/src/test/java/com/android/tools/r8/debuginfo/DebugInfoInspector.java b/src/test/java/com/android/tools/r8/debuginfo/DebugInfoInspector.java
index aa8bc0c..3ccf46d 100644
--- a/src/test/java/com/android/tools/r8/debuginfo/DebugInfoInspector.java
+++ b/src/test/java/com/android/tools/r8/debuginfo/DebugInfoInspector.java
@@ -20,7 +20,7 @@
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.StringUtils;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
@@ -49,13 +49,13 @@
}
}
- public DebugInfoInspector(DexInspector inspector, String clazz, MethodSignature method) {
+ public DebugInfoInspector(CodeInspector inspector, String clazz, MethodSignature method) {
this(inspector.clazz(clazz).method(method).getMethod(), inspector.getFactory());
}
public DebugInfoInspector(AndroidApp app, String clazz, MethodSignature method)
throws IOException, ExecutionException {
- this(new DexInspector(app), clazz, method);
+ this(new CodeInspector(app), clazz, method);
}
public boolean hasLocalsInfo() {
diff --git a/src/test/java/com/android/tools/r8/debuginfo/InliningWithoutPositionsTestRunner.java b/src/test/java/com/android/tools/r8/debuginfo/InliningWithoutPositionsTestRunner.java
index c67cf32..0f8ac65 100644
--- a/src/test/java/com/android/tools/r8/debuginfo/InliningWithoutPositionsTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debuginfo/InliningWithoutPositionsTestRunner.java
@@ -40,33 +40,49 @@
@RunWith(Parameterized.class)
public class InliningWithoutPositionsTestRunner {
+ enum Backend {
+ CF,
+ DEX
+ }
+
private static final String TEST_CLASS = "InliningWithoutPositionsTestSource";
private static final String TEST_PACKAGE = "com.android.tools.r8.debuginfo";
@ClassRule public static TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
+ private final Backend backend;
private final boolean mainPos;
private final boolean foo1Pos;
private final boolean barPos;
private final boolean foo2Pos;
private final Location throwLocation;
- @Parameters(name = "main/foo1/bar/foo2 positions: {0}/{1}/{2}/{3}, throwLocation: {4}")
+ @Parameters(name = "{0}: main/foo1/bar/foo2 positions: {1}/{2}/{3}/{4}, throwLocation: {5}")
public static Collection<Object[]> data() {
List<Object[]> testCases = new ArrayList<>();
+ for (Backend backend : Backend.values()) {
for (int i = 0; i < 16; ++i) {
for (Location throwLocation : Location.values()) {
if (throwLocation != Location.MAIN) {
- testCases.add(
- new Object[] {(i & 1) != 0, (i & 2) != 0, (i & 4) != 0, (i & 8) != 0, throwLocation});
+ testCases.add(
+ new Object[] {
+ backend, (i & 1) != 0, (i & 2) != 0, (i & 4) != 0, (i & 8) != 0, throwLocation
+ });
}
}
+ }
}
return testCases;
}
public InliningWithoutPositionsTestRunner(
- boolean mainPos, boolean foo1Pos, boolean barPos, boolean foo2Pos, Location throwLocation) {
+ Backend backend,
+ boolean mainPos,
+ boolean foo1Pos,
+ boolean barPos,
+ boolean foo2Pos,
+ Location throwLocation) {
+ this.backend = backend;
this.mainPos = mainPos;
this.foo1Pos = foo1Pos;
this.barPos = barPos;
@@ -79,33 +95,45 @@
// See InliningWithoutPositionsTestSourceDump for the code compiled here.
Path testClassDir = temp.newFolder(TEST_PACKAGE.split(".")).toPath();
Path testClassPath = testClassDir.resolve(TEST_CLASS + ".class");
- Path outputDexPath = temp.newFolder().toPath();
+ Path outputPath = temp.newFolder().toPath();
Files.write(
testClassPath,
InliningWithoutPositionsTestSourceDump.dump(
mainPos, foo1Pos, barPos, foo2Pos, throwLocation));
- AndroidApiLevel minSdk = ToolHelper.getMinApiLevelForDexVm();
Path proguardMapPath = testClassDir.resolve("proguard.map");
- ToolHelper.runR8(
+ R8Command.Builder builder =
R8Command.builder()
.addProgramFiles(testClassPath)
- .setMinApiLevel(minSdk.getLevel())
- .addLibraryFiles(ToolHelper.getAndroidJar(minSdk))
- .setOutput(outputDexPath, OutputMode.DexIndexed)
.setMode(CompilationMode.RELEASE)
- .setProguardMapOutputPath(proguardMapPath)
- .build(),
- options -> options.inliningInstructionLimit = 20);
+ .setProguardMapOutputPath(proguardMapPath);
+ if (backend == Backend.DEX) {
+ AndroidApiLevel minSdk = ToolHelper.getMinApiLevelForDexVm();
+ builder
+ .setMinApiLevel(minSdk.getLevel())
+ .addLibraryFiles(ToolHelper.getAndroidJar(minSdk))
+ .setOutput(outputPath, OutputMode.DexIndexed);
+ } else {
+ assert (backend == Backend.CF);
+ builder
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
+ .setOutput(outputPath, OutputMode.ClassFile);
+ }
- ArtCommandBuilder artCommandBuilder = new ArtCommandBuilder();
- artCommandBuilder.appendClasspath(outputDexPath.resolve("classes.dex").toString());
- artCommandBuilder.setMainClass(TEST_PACKAGE + "." + TEST_CLASS);
+ ToolHelper.runR8(builder.build(), options -> options.inliningInstructionLimit = 40);
- ProcessResult result = ToolHelper.runArtRaw(artCommandBuilder);
+ ProcessResult result;
+ if (backend == Backend.DEX) {
+ ArtCommandBuilder artCommandBuilder = new ArtCommandBuilder();
+ artCommandBuilder.appendClasspath(outputPath.resolve("classes.dex").toString());
+ artCommandBuilder.setMainClass(TEST_PACKAGE + "." + TEST_CLASS);
+ result = ToolHelper.runArtRaw(artCommandBuilder);
+ } else {
+ result = ToolHelper.runJava(outputPath, TEST_PACKAGE + "." + TEST_CLASS);
+ }
assertNotEquals(result.exitCode, 0);
// Verify stack trace.
diff --git a/src/test/java/com/android/tools/r8/debuginfo/InliningWithoutPositionsTestSourceDump.java b/src/test/java/com/android/tools/r8/debuginfo/InliningWithoutPositionsTestSourceDump.java
index 53d6df3..c72a9c5 100644
--- a/src/test/java/com/android/tools/r8/debuginfo/InliningWithoutPositionsTestSourceDump.java
+++ b/src/test/java/com/android/tools/r8/debuginfo/InliningWithoutPositionsTestSourceDump.java
@@ -61,8 +61,7 @@
}
*/
public static byte[] dump(
- boolean mainPos, boolean foo1Pos, boolean barPos, boolean foo2Pos, Location throwLocation)
- throws Exception {
+ boolean mainPos, boolean foo1Pos, boolean barPos, boolean foo2Pos, Location throwLocation) {
ClassWriter cw = new ClassWriter(0);
FieldVisitor fv;
MethodVisitor mv;
diff --git a/src/test/java/com/android/tools/r8/debuginfo/KotlinDebugInfoTestRunner.java b/src/test/java/com/android/tools/r8/debuginfo/KotlinDebugInfoTestRunner.java
index 103c07f..80279d5 100644
--- a/src/test/java/com/android/tools/r8/debuginfo/KotlinDebugInfoTestRunner.java
+++ b/src/test/java/com/android/tools/r8/debuginfo/KotlinDebugInfoTestRunner.java
@@ -15,7 +15,6 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.ProcessResult;
import java.nio.file.Path;
-import java.nio.file.Paths;
import org.junit.Test;
public class KotlinDebugInfoTestRunner extends TestBase {
@@ -74,7 +73,7 @@
.setProgramConsumer(consumer)
.addProgramFiles(inputJar);
if ((consumer instanceof ClassFileConsumer)) {
- builder.addLibraryFiles(Paths.get(ToolHelper.JAVA_8_RUNTIME));
+ builder.addLibraryFiles(ToolHelper.getJava8RuntimeJar());
} else {
builder.addLibraryFiles(ToolHelper.getAndroidJar(ToolHelper.getMinApiLevelForDexVm()));
}
diff --git a/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java b/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java
index f37b5ed..3b1e30a 100644
--- a/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java
+++ b/src/test/java/com/android/tools/r8/dex/JumboStringProcessing.java
@@ -26,7 +26,7 @@
import com.android.tools.r8.naming.NamingLens;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import com.google.common.io.Files;
import java.nio.file.Path;
@@ -127,7 +127,7 @@
AndroidApp application = AndroidApp.builder()
.addDexProgramData(Files.toByteArray(originalDexFile.toFile()), Origin.unknown())
.build();
- DexInspector inspector = new DexInspector(application);
+ CodeInspector inspector = new CodeInspector(application);
DexEncodedMethod method = getMethod(
inspector,
"android.databinding.DataBinderMapperImpl",
diff --git a/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java b/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java
index 7c4c250..f1c8742 100644
--- a/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java
+++ b/src/test/java/com/android/tools/r8/dexsplitter/DexSplitterTests.java
@@ -21,8 +21,8 @@
import com.android.tools.r8.dex.Marker;
import com.android.tools.r8.dexsplitter.DexSplitter.Options;
import com.android.tools.r8.utils.FeatureClassMapping.FeatureMappingException;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import java.io.FileNotFoundException;
@@ -363,7 +363,7 @@
// Ensure that the Class1 is actually in the correct split. Note that Class2 would have been
// shaken away.
- DexInspector inspector = new DexInspector(base, proguardMap.toString());
+ CodeInspector inspector = new CodeInspector(base, proguardMap.toString());
ClassSubject subject = inspector.clazz("dexsplitsample.Class1");
assertTrue(subject.isPresent());
assertTrue(subject.isRenamed());
diff --git a/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java b/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
index 8cba9a0..39b5ff8 100644
--- a/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
+++ b/src/test/java/com/android/tools/r8/graph/TargetLookupTest.java
@@ -23,7 +23,7 @@
import com.android.tools.r8.smali.SmaliBuilder;
import com.android.tools.r8.smali.SmaliTestBase;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import java.util.Collections;
@@ -77,7 +77,7 @@
AndroidApp application = buildApplication(builder);
AppInfo appInfo = getAppInfo(application);
- DexInspector inspector = new DexInspector(appInfo.app);
+ CodeInspector inspector = new CodeInspector(appInfo.app);
DexEncodedMethod method = getMethod(inspector, DEFAULT_CLASS_NAME, "int", "x",
ImmutableList.of());
assertNull(appInfo.lookupVirtualTarget(method.method.holder, method.method));
@@ -147,7 +147,7 @@
AndroidApp application = buildApplication(builder);
AppInfo appInfo = getAppInfo(application);
- DexInspector inspector = new DexInspector(appInfo.app);
+ CodeInspector inspector = new CodeInspector(appInfo.app);
DexMethod methodXOnTestSuper =
getMethod(inspector, "TestSuper", "int", "x", ImmutableList.of()).method;
diff --git a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
index 3987e0a..2ec38b4 100644
--- a/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
+++ b/src/test/java/com/android/tools/r8/internal/CompilationTestBase.java
@@ -30,10 +30,10 @@
import com.android.tools.r8.utils.ArtErrorParser.ArtErrorParserException;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.ListUtils;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FoundClassSubject;
-import com.android.tools.r8.utils.dexinspector.FoundFieldSubject;
-import com.android.tools.r8.utils.dexinspector.FoundMethodSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
+import com.android.tools.r8.utils.codeinspector.FoundFieldSubject;
+import com.android.tools.r8.utils.codeinspector.FoundMethodSubject;
import com.google.common.io.ByteStreams;
import com.google.common.io.Closer;
import java.io.File;
@@ -132,8 +132,8 @@
if (referenceApk == null) {
throw e;
}
- DexInspector theirs = new DexInspector(Paths.get(referenceApk));
- DexInspector ours = new DexInspector(out);
+ CodeInspector theirs = new CodeInspector(Paths.get(referenceApk));
+ CodeInspector ours = new CodeInspector(out);
List<ArtErrorInfo> errors;
try {
errors = ArtErrorParser.parse(e.getMessage());
@@ -194,8 +194,8 @@
public void assertIdenticalApplicationsUpToCode(
AndroidApp app1, AndroidApp app2, boolean allowNewClassesInApp2)
throws IOException, ExecutionException {
- DexInspector inspect1 = new DexInspector(app1);
- DexInspector inspect2 = new DexInspector(app2);
+ CodeInspector inspect1 = new CodeInspector(app1);
+ CodeInspector inspect2 = new CodeInspector(app2);
class Pair<T> {
private T first;
@@ -213,7 +213,7 @@
// Collect all classes from both inspectors, indexed by finalDescriptor.
Map<String, Pair<FoundClassSubject>> allClasses = new HashMap<>();
- BiConsumer<DexInspector, Boolean> collectClasses =
+ BiConsumer<CodeInspector, Boolean> collectClasses =
(inspector, selectFirst) -> {
inspector.forAllClasses(
clazz -> {
diff --git a/src/test/java/com/android/tools/r8/invalid/DuplicateDefinitionsTest.java b/src/test/java/com/android/tools/r8/invalid/DuplicateDefinitionsTest.java
index c011f6f..68daeb8 100644
--- a/src/test/java/com/android/tools/r8/invalid/DuplicateDefinitionsTest.java
+++ b/src/test/java/com/android/tools/r8/invalid/DuplicateDefinitionsTest.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.invalid;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@@ -13,8 +13,8 @@
import com.android.tools.r8.jasmin.JasminBuilder.ClassBuilder;
import com.android.tools.r8.jasmin.JasminTestBase;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
@@ -54,7 +54,7 @@
"Ignoring an implementation of the method `void C.method()` because "
+ "it has multiple definitions"));
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject clazz = inspector.clazz("C");
assertThat(clazz, isPresent());
@@ -89,7 +89,7 @@
assertThat(output, containsString("Field `C C.fld` has multiple definitions"));
assertThat(output, containsString("Field `C C.staticFld` has multiple definitions"));
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject clazz = inspector.clazz("C");
assertThat(clazz, isPresent());
diff --git a/src/test/java/com/android/tools/r8/ir/IrInjectionTestBase.java b/src/test/java/com/android/tools/r8/ir/IrInjectionTestBase.java
index f02098a..b66e6e0 100644
--- a/src/test/java/com/android/tools/r8/ir/IrInjectionTestBase.java
+++ b/src/test/java/com/android/tools/r8/ir/IrInjectionTestBase.java
@@ -22,7 +22,7 @@
import com.android.tools.r8.utils.AndroidAppConsumers;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.Timing;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.io.IOException;
import java.util.List;
import java.util.ListIterator;
@@ -61,7 +61,7 @@
String returnType,
String methodName,
List<String> parameters) {
- DexInspector inspector = new DexInspector(application);
+ CodeInspector inspector = new CodeInspector(application);
return getMethod(inspector, className, returnType, methodName, parameters);
}
diff --git a/src/test/java/com/android/tools/r8/ir/PhiDefinitionsTestRunner.java b/src/test/java/com/android/tools/r8/ir/PhiDefinitionsTestRunner.java
index 4f2bdeb..ba43a10 100644
--- a/src/test/java/com/android/tools/r8/ir/PhiDefinitionsTestRunner.java
+++ b/src/test/java/com/android/tools/r8/ir/PhiDefinitionsTestRunner.java
@@ -17,7 +17,6 @@
import com.android.tools.r8.utils.DescriptorUtils;
import java.io.IOException;
import java.nio.file.Path;
-import java.nio.file.Paths;
import org.junit.Test;
public class PhiDefinitionsTestRunner extends TestBase {
@@ -111,7 +110,7 @@
.setProgramConsumer(consumer)
.addProgramFiles(inputJar);
if (consumer instanceof ClassFileConsumer) {
- builder.addLibraryFiles(Paths.get(ToolHelper.JAVA_8_RUNTIME));
+ builder.addLibraryFiles(ToolHelper.getJava8RuntimeJar());
} else {
builder.addLibraryFiles(ToolHelper.getAndroidJar(ToolHelper.getMinApiLevelForDexVm()));
}
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/NullabilityTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/NullabilityTest.java
index de97052..59bd91b 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/NullabilityTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/NullabilityTest.java
@@ -36,7 +36,7 @@
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.Timing;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableMap;
import java.util.Map;
import java.util.function.BiConsumer;
@@ -56,8 +56,8 @@
new ApplicationReader(app, TEST_OPTIONS, new Timing("NullabilityTest.appReader"))
.read().toDirect();
AppInfo appInfo = new AppInfo(dexApplication);
- DexInspector dexInspector = new DexInspector(appInfo.app);
- DexEncodedMethod foo = dexInspector.clazz(mainClass.getName()).method(signature).getMethod();
+ CodeInspector codeInspector = new CodeInspector(appInfo.app);
+ DexEncodedMethod foo = codeInspector.clazz(mainClass.getName()).method(signature).getMethod();
IRCode irCode = foo.buildIR(appInfo, TEST_OPTIONS, Origin.unknown());
NonNullTracker nonNullTracker = new NonNullTracker();
nonNullTracker.addNonNull(irCode);
diff --git a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java
index 286fb56..d3efebe 100644
--- a/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java
+++ b/src/test/java/com/android/tools/r8/ir/analysis/type/TypeAnalysisTest.java
@@ -33,7 +33,7 @@
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.Smali;
import com.android.tools.r8.utils.Timing;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.nio.charset.StandardCharsets;
@@ -116,7 +116,7 @@
// Simple one path with a lot of arithmetic operations.
private static void arithmetic(AppInfo appInfo) {
- DexInspector inspector = new DexInspector(appInfo.app);
+ CodeInspector inspector = new CodeInspector(appInfo.app);
DexEncodedMethod subtract =
inspector.clazz("Test")
.method(
@@ -131,7 +131,7 @@
// A couple branches, along with some recursive calls.
private static void fibonacci(AppInfo appInfo) {
- DexInspector inspector = new DexInspector(appInfo.app);
+ CodeInspector inspector = new CodeInspector(appInfo.app);
DexEncodedMethod fib =
inspector.clazz("Test")
.method(new MethodSignature("fibonacci", "int", ImmutableList.of("int")))
@@ -145,7 +145,7 @@
// fill-array-data
private static void fillArrayData(AppInfo appInfo) {
- DexInspector inspector = new DexInspector(appInfo.app);
+ CodeInspector inspector = new CodeInspector(appInfo.app);
DexEncodedMethod test1 =
inspector.clazz("Test")
.method(new MethodSignature("test1", "int[]", ImmutableList.of()))
@@ -176,7 +176,7 @@
// filled-new-array
private static void filledNewArray(AppInfo appInfo) {
- DexInspector inspector = new DexInspector(appInfo.app);
+ CodeInspector inspector = new CodeInspector(appInfo.app);
DexEncodedMethod test4 =
inspector.clazz("Test")
.method(new MethodSignature("test4", "int[]", ImmutableList.of()))
@@ -207,7 +207,7 @@
// Make sure the analysis does not hang.
private static void infiniteLoop(AppInfo appInfo) {
- DexInspector inspector = new DexInspector(appInfo.app);
+ CodeInspector inspector = new CodeInspector(appInfo.app);
DexEncodedMethod loop2 =
inspector.clazz("Test")
.method(new MethodSignature("loop2", "void", ImmutableList.of()))
@@ -226,7 +226,7 @@
// move-exception
private static void tryCatch(AppInfo appInfo) {
- DexInspector inspector = new DexInspector(appInfo.app);
+ CodeInspector inspector = new CodeInspector(appInfo.app);
DexEncodedMethod test2 =
inspector.clazz("Test")
.method(new MethodSignature("test2_throw", "int", ImmutableList.of()))
@@ -244,7 +244,7 @@
// One very complicated example.
private static void typeConfusion(AppInfo appInfo) {
- DexInspector inspector = new DexInspector(appInfo.app);
+ CodeInspector inspector = new CodeInspector(appInfo.app);
DexEncodedMethod method =
inspector.clazz("TestObject")
.method(
@@ -264,7 +264,7 @@
// One more complicated example.
private static void typeConfusion5(AppInfo appInfo) {
- DexInspector inspector = new DexInspector(appInfo.app);
+ CodeInspector inspector = new CodeInspector(appInfo.app);
DexEncodedMethod method =
inspector.clazz("TestObject")
.method(
diff --git a/src/test/java/com/android/tools/r8/ir/desugar/annotations/CovariantReturnTypeAnnotationTransformerTest.java b/src/test/java/com/android/tools/r8/ir/desugar/annotations/CovariantReturnTypeAnnotationTransformerTest.java
index 6aecc60..f1f2842 100644
--- a/src/test/java/com/android/tools/r8/ir/desugar/annotations/CovariantReturnTypeAnnotationTransformerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/desugar/annotations/CovariantReturnTypeAnnotationTransformerTest.java
@@ -4,16 +4,16 @@
package com.android.tools.r8.ir.desugar.annotations;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertThat;
import com.android.tools.r8.AsmTestBase;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.util.Collections;
import org.junit.Assert;
import org.junit.Test;
@@ -155,7 +155,7 @@
}
private void checkPresenceOfSyntheticMethods(AndroidApp output) throws Exception {
- DexInspector inspector = new DexInspector(output);
+ CodeInspector inspector = new CodeInspector(output);
// Get classes A, B, and C.
ClassSubject clazzA = inspector.clazz(A.class.getCanonicalName());
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/B87341268.java b/src/test/java/com/android/tools/r8/ir/optimize/B87341268.java
index 11c7c0f..ac3952d 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/B87341268.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/B87341268.java
@@ -3,20 +3,20 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.ir.optimize;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.junit.Assert.assertThat;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import org.junit.Test;
public class B87341268 extends TestBase {
@Test
public void test() throws Exception {
AndroidApp app = compileWithD8(readClasses(TestClass.class));
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject clazz = inspector.clazz(TestClass.class);
assertThat(clazz, isPresent());
}
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/MemberValuePropagationTest.java b/src/test/java/com/android/tools/r8/ir/optimize/MemberValuePropagationTest.java
index 5a2bc22..0eac6bb 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/MemberValuePropagationTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/MemberValuePropagationTest.java
@@ -19,8 +19,8 @@
import com.android.tools.r8.graph.DexCode;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.utils.FileUtils;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -43,7 +43,7 @@
@Test
public void testWriteOnlyField_putObject_gone() throws Exception {
Path processedApp = runR8(EXAMPLE_KEEP);
- DexInspector inspector = new DexInspector(processedApp);
+ CodeInspector inspector = new CodeInspector(processedApp);
ClassSubject clazz = inspector.clazz(WRITE_ONLY_FIELD + ".WriteOnlyCls");
clazz.forAllMethods(
methodSubject -> {
@@ -71,7 +71,7 @@
@Test
public void testWriteOnlyField_dontoptimize() throws Exception {
Path processedApp = runR8(DONT_OPTIMIZE);
- DexInspector inspector = new DexInspector(processedApp);
+ CodeInspector inspector = new CodeInspector(processedApp);
ClassSubject clazz = inspector.clazz(WRITE_ONLY_FIELD + ".WriteOnlyCls");
clazz.forAllMethods(
methodSubject -> {
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/NonNullTrackerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/NonNullTrackerTest.java
index 2ef43fd..9993b68 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/NonNullTrackerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/NonNullTrackerTest.java
@@ -28,7 +28,7 @@
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.Timing;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.util.function.Consumer;
import org.junit.Test;
@@ -46,8 +46,8 @@
new ApplicationReader(app, TEST_OPTIONS, new Timing("NonNullMarkerTest.appReader"))
.read().toDirect();
AppInfo appInfo = new AppInfo(dexApplication);
- DexInspector dexInspector = new DexInspector(appInfo.app);
- DexEncodedMethod foo = dexInspector.clazz(testClass.getName()).method(signature).getMethod();
+ CodeInspector codeInspector = new CodeInspector(appInfo.app);
+ DexEncodedMethod foo = codeInspector.clazz(testClass.getName()).method(signature).getMethod();
IRCode irCode = foo.buildIR(appInfo, TEST_OPTIONS, Origin.unknown());
checkCountOfNonNull(irCode, 0);
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
index 7284384..dd7756b 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/R8InliningTest.java
@@ -30,9 +30,9 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.FileUtils;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.nio.file.Files;
@@ -145,14 +145,14 @@
private void dump(Path path, String title) throws Throwable {
System.out.println(title + ":");
- DexInspector inspector = new DexInspector(path.toAbsolutePath());
+ CodeInspector inspector = new CodeInspector(path.toAbsolutePath());
inspector.clazz("inlining.Inlining").forAllMethods(m -> dump(m.getMethod()));
System.out.println(title + " size: " + Files.size(path));
}
@Test
public void checkNoInvokes() throws Throwable {
- DexInspector inspector = new DexInspector(getGeneratedDexFile().toAbsolutePath(),
+ CodeInspector inspector = new CodeInspector(getGeneratedDexFile().toAbsolutePath(),
getGeneratedProguardMap());
ClassSubject clazz = inspector.clazz("inlining.Inlining");
@@ -189,8 +189,8 @@
@Test
public void invokeOnNullableReceiver() throws Exception {
- DexInspector inspector =
- new DexInspector(getGeneratedDexFile().toAbsolutePath(), getGeneratedProguardMap());
+ CodeInspector inspector =
+ new CodeInspector(getGeneratedDexFile().toAbsolutePath(), getGeneratedProguardMap());
ClassSubject clazz = inspector.clazz("inlining.Nullability");
MethodSubject m = clazz.method("int", "inlinable", ImmutableList.of("inlining.A"));
DexCode code;
@@ -257,8 +257,8 @@
@Test
public void invokeOnNonNullReceiver() throws Exception {
- DexInspector inspector =
- new DexInspector(getGeneratedDexFile().toAbsolutePath(), getGeneratedProguardMap());
+ CodeInspector inspector =
+ new CodeInspector(getGeneratedDexFile().toAbsolutePath(), getGeneratedProguardMap());
ClassSubject clazz = inspector.clazz("inlining.Nullability");
MethodSubject m = clazz.method("int", "conditionalOperator", ImmutableList.of("inlining.A"));
assertTrue(m.isPresent());
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java b/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java
index 43b728e..ad0ae87 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/SimplifyIfNotNullTest.java
@@ -17,7 +17,7 @@
import com.android.tools.r8.ir.optimize.nonnull.NonNullAfterInvoke;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.Arrays;
import java.util.List;
@@ -32,10 +32,10 @@
AndroidApp app = buildAndroidApp(ToolHelper.getClassAsBytes(testClass));
AndroidApp r8Result = compileWithR8(app,
"-keep class " + testClass.getCanonicalName() + " { *; }");
- DexInspector dexInspector = new DexInspector(r8Result);
+ CodeInspector codeInspector = new CodeInspector(r8Result);
for (MethodSignature signature : signatures) {
DexEncodedMethod method =
- dexInspector.clazz(testClass.getName()).method(signature).getMethod();
+ codeInspector.clazz(testClass.getName()).method(signature).getMethod();
long count = Arrays.stream(method.getCode().asDexCode().instructions)
.filter(SimplifyIfNotNullTest::isIf).count();
assertEquals(0, count);
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlinerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlinerTest.java
index d40e202..793da3c 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlinerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/classinliner/ClassInlinerTest.java
@@ -46,8 +46,8 @@
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.Sets;
import java.nio.file.Path;
import java.util.Collections;
@@ -81,7 +81,7 @@
String artOutput = runOnArt(app, TrivialTestClass.class);
assertEquals(javaOutput, artOutput);
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject clazz = inspector.clazz(TrivialTestClass.class);
assertEquals(
@@ -153,7 +153,7 @@
String artOutput = runOnArt(app, BuildersTestClass.class);
assertEquals(javaOutput, artOutput);
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject clazz = inspector.clazz(BuildersTestClass.class);
assertEquals(
@@ -238,7 +238,7 @@
String artOutput = runOnArt(app, CodeTestClass.class);
assertEquals(javaOutput, artOutput);
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject clazz = inspector.clazz(C.class);
assertEquals(
@@ -274,7 +274,7 @@
String artOutput = runOnArt(app, InvalidRootsTestClass.class);
assertEquals(javaOutput, artOutput);
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject clazz = inspector.clazz(InvalidRootsTestClass.class);
assertEquals(
@@ -315,7 +315,7 @@
String artOutput = runOnArt(app, LambdasTestClass.class);
assertEquals(javaOutput, artOutput);
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject clazz = inspector.clazz(LambdasTestClass.class);
assertEquals(
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InvokeInterfaceToInvokeVirtualTest.java b/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InvokeInterfaceToInvokeVirtualTest.java
index 0ae7971..c5d6261 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InvokeInterfaceToInvokeVirtualTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/devirtualize/InvokeInterfaceToInvokeVirtualTest.java
@@ -24,8 +24,8 @@
import com.android.tools.r8.ir.optimize.devirtualize.invokeinterface.Main;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import org.junit.Test;
@@ -67,9 +67,9 @@
Path out = temp.getRoot().toPath();
AndroidApp processedApp = runR8(originalApp, Main.class, out);
- DexInspector dexInspector = new DexInspector(processedApp);
- ClassSubject clazz = dexInspector.clazz(main);
- DexEncodedMethod m = clazz.method(DexInspector.MAIN).getMethod();
+ CodeInspector codeInspector = new CodeInspector(processedApp);
+ ClassSubject clazz = codeInspector.clazz(main);
+ DexEncodedMethod m = clazz.method(CodeInspector.MAIN).getMethod();
DexCode code = m.getCode().asDexCode();
long numOfInvokeInterface = filterInstructionKind(code, InvokeInterface.class).count();
// List#add, List#get
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlinerTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlinerTest.java
index 4b603952..5cdaac8 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlinerTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlinerTest.java
@@ -22,9 +22,9 @@
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.nio.file.Path;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -57,7 +57,7 @@
String artOutput = runOnArt(app, InterfaceTargetsTestClass.class);
assertEquals(javaOutput, artOutput);
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject clazz = inspector.clazz(InterfaceTargetsTestClass.class);
assertFalse(getMethodSubject(clazz,
diff --git a/src/test/java/com/android/tools/r8/ir/regalloc/B77240639.java b/src/test/java/com/android/tools/r8/ir/regalloc/B77240639.java
index c79e50e..2c66eb1 100644
--- a/src/test/java/com/android/tools/r8/ir/regalloc/B77240639.java
+++ b/src/test/java/com/android/tools/r8/ir/regalloc/B77240639.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.ir.regalloc;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertThat;
@@ -11,8 +11,8 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.util.List;
import java.util.Map;
import org.junit.Test;
@@ -21,7 +21,7 @@
@Test
public void test1() throws Exception {
AndroidApp app = compileWithD8(readClasses(TestClass.class));
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject clazz = inspector.clazz(TestClass.class);
assertThat(clazz, isPresent());
}
@@ -29,7 +29,7 @@
@Test
public void test2() throws Exception {
AndroidApp app = compileWithD8(readClasses(OtherTestClass.class));
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject clazz = inspector.clazz(OtherTestClass.class);
assertThat(clazz, isPresent());
ToolHelper.ProcessResult d8Result = runOnArtRaw(app, OtherTestClass.class.getCanonicalName());
diff --git a/src/test/java/com/android/tools/r8/ir/regalloc/B79405526.java b/src/test/java/com/android/tools/r8/ir/regalloc/B79405526.java
index 36156eb..4065493 100644
--- a/src/test/java/com/android/tools/r8/ir/regalloc/B79405526.java
+++ b/src/test/java/com/android/tools/r8/ir/regalloc/B79405526.java
@@ -4,20 +4,20 @@
package com.android.tools.r8.ir.regalloc;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.junit.Assert.assertThat;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import org.junit.Test;
public class B79405526 extends TestBase {
@Test
public void test() throws Exception {
AndroidApp app = compileWithD8(readClasses(TestClass.class));
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject clazz = inspector.clazz(TestClass.class);
assertThat(clazz, isPresent());
// Throws if a method in TestClass does not verify.
diff --git a/src/test/java/com/android/tools/r8/jar/UnicodeSetRegression/UnicodeSetRegressionTest.java b/src/test/java/com/android/tools/r8/jar/UnicodeSetRegression/UnicodeSetRegressionTest.java
index d8861b6..6f8d39c 100644
--- a/src/test/java/com/android/tools/r8/jar/UnicodeSetRegression/UnicodeSetRegressionTest.java
+++ b/src/test/java/com/android/tools/r8/jar/UnicodeSetRegression/UnicodeSetRegressionTest.java
@@ -11,7 +11,7 @@
import com.android.tools.r8.utils.ArtErrorParser;
import com.android.tools.r8.utils.ArtErrorParser.ArtErrorInfo;
import com.android.tools.r8.utils.ArtErrorParser.ArtErrorParserException;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -60,8 +60,8 @@
} catch (AssertionError e) {
AndroidApp fromDexApp =
ToolHelper.runR8(dexFromDX(), options -> options.ignoreMissingClasses = true);
- DexInspector fromDex = new DexInspector(fromDexApp);
- DexInspector fromJar = new DexInspector(result);
+ CodeInspector fromDex = new CodeInspector(fromDexApp);
+ CodeInspector fromJar = new CodeInspector(result);
List<ArtErrorInfo> errors;
try {
errors = ArtErrorParser.parse(e.getMessage());
diff --git a/src/test/java/com/android/tools/r8/jasmin/AnnotationCompanionClassTest.java b/src/test/java/com/android/tools/r8/jasmin/AnnotationCompanionClassTest.java
index ed9194e..7e90163 100644
--- a/src/test/java/com/android/tools/r8/jasmin/AnnotationCompanionClassTest.java
+++ b/src/test/java/com/android/tools/r8/jasmin/AnnotationCompanionClassTest.java
@@ -7,7 +7,7 @@
import com.android.tools.r8.ir.desugar.InterfaceMethodRewriter;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import org.junit.Test;
@@ -33,9 +33,9 @@
JasminBuilder builder = buildClass();
AndroidApp androidApp = compileWithD8(builder);
- DexInspector dexInspector = new DexInspector(androidApp);
+ CodeInspector codeInspector = new CodeInspector(androidApp);
assertFalse(
- dexInspector
+ codeInspector
.clazz("LMyAnnotation" + InterfaceMethodRewriter.COMPANION_CLASS_NAME_SUFFIX + ";")
.isAnnotation());
}
diff --git a/src/test/java/com/android/tools/r8/jasmin/DebugLocalTests.java b/src/test/java/com/android/tools/r8/jasmin/DebugLocalTests.java
index b56824d..a6505c8 100644
--- a/src/test/java/com/android/tools/r8/jasmin/DebugLocalTests.java
+++ b/src/test/java/com/android/tools/r8/jasmin/DebugLocalTests.java
@@ -12,9 +12,9 @@
import com.android.tools.r8.jasmin.JasminBuilder.ClassFileVersion;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import org.junit.Test;
@@ -101,7 +101,7 @@
AndroidApp jasminApp = builder.build();
AndroidApp d8App = ToolHelper.runD8(jasminApp);
- DexInspector inspector = new DexInspector(d8App);
+ CodeInspector inspector = new CodeInspector(d8App);
ClassSubject classSubject = inspector.clazz("Test");
MethodSubject methodSubject = classSubject.method(foo);
DexCode code = methodSubject.getMethod().getCode().asDexCode();
diff --git a/src/test/java/com/android/tools/r8/jasmin/JumboStringTests.java b/src/test/java/com/android/tools/r8/jasmin/JumboStringTests.java
index c7a32b3..40928ee 100644
--- a/src/test/java/com/android/tools/r8/jasmin/JumboStringTests.java
+++ b/src/test/java/com/android/tools/r8/jasmin/JumboStringTests.java
@@ -10,7 +10,7 @@
import com.android.tools.r8.dex.Constants;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.LinkedHashMap;
@@ -91,7 +91,7 @@
AndroidApp d8App = ToolHelper.runD8(jasminApp);
assertEquals(expected, runOnArt(d8App, clazz.name));
- DexInspector inspector = new DexInspector(d8App);
+ CodeInspector inspector = new CodeInspector(d8App);
for (Entry<String, MethodSignature> entry : classes.entrySet()) {
DebugInfoInspector info = new DebugInfoInspector(inspector, entry.getKey(), entry.getValue());
info.checkStartLine(1);
diff --git a/src/test/java/com/android/tools/r8/jasmin/JumpSubroutineTests.java b/src/test/java/com/android/tools/r8/jasmin/JumpSubroutineTests.java
index ec18fac..fd68772 100644
--- a/src/test/java/com/android/tools/r8/jasmin/JumpSubroutineTests.java
+++ b/src/test/java/com/android/tools/r8/jasmin/JumpSubroutineTests.java
@@ -16,7 +16,6 @@
import com.android.tools.r8.utils.AndroidApp;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
-import java.nio.file.Paths;
import org.junit.Test;
public class JumpSubroutineTests extends JasminTestBase {
@@ -40,7 +39,7 @@
R8Command.builder()
.addProgramFiles(inputJar)
.setOutput(outputJar, OutputMode.ClassFile)
- .addLibraryFiles(Paths.get(ToolHelper.JAVA_8_RUNTIME))
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.build(),
options -> options.enableCfFrontend = true);
ProcessResult processResult = ToolHelper.runJava(outputJar, main);
diff --git a/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java b/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
index c2dd7b1..4919227 100644
--- a/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
+++ b/src/test/java/com/android/tools/r8/jsr45/JSR45Tests.java
@@ -14,9 +14,9 @@
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.AndroidAppConsumers;
-import com.android.tools.r8.utils.dexinspector.AnnotationSubject;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.AnnotationSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Files;
@@ -132,9 +132,9 @@
compileWithR8(INPUT_PATH, outputPath, SHRINK_NO_KEEP_CONFIG);
- DexInspector dexInspector =
- new DexInspector(outputPath.resolve("classes.dex"), getGeneratedProguardMap());
- ClassSubject classSubject = dexInspector.clazz("HelloKt");
+ CodeInspector codeInspector =
+ new CodeInspector(outputPath.resolve("classes.dex"), getGeneratedProguardMap());
+ ClassSubject classSubject = codeInspector.clazz("HelloKt");
AnnotationSubject annotationSubject =
classSubject.annotation("dalvik.annotation.SourceDebugExtension");
Assert.assertFalse(annotationSubject.isPresent());
@@ -147,8 +147,8 @@
new ReadSourceDebugExtensionAttribute(Opcodes.ASM6, null);
classReader.accept(sourceDebugExtensionReader, 0);
- DexInspector dexInspector = new DexInspector(androidApp);
- ClassSubject classSubject = dexInspector.clazz("HelloKt");
+ CodeInspector codeInspector = new CodeInspector(androidApp);
+ ClassSubject classSubject = codeInspector.clazz("HelloKt");
AnnotationSubject annotationSubject =
classSubject.annotation("dalvik.annotation.SourceDebugExtension");
diff --git a/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java b/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
index 4fd1d8d..4405565 100644
--- a/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
+++ b/src/test/java/com/android/tools/r8/kotlin/AbstractR8KotlinTestBase.java
@@ -23,10 +23,10 @@
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FieldSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FieldSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -112,7 +112,7 @@
}));
}
- protected ClassSubject checkClassIsKept(DexInspector inspector, String className) {
+ protected ClassSubject checkClassIsKept(CodeInspector inspector, String className) {
checkClassExistsInInput(className);
ClassSubject classSubject = inspector.clazz(className);
assertNotNull(classSubject);
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
index a28d0c5..67afdd7 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinClassInlinerTest.java
@@ -17,8 +17,8 @@
import com.android.tools.r8.graph.DexCode;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
@@ -55,7 +55,7 @@
clazz.interfaces.size() == 1;
}
- private static Predicate<DexType> createLambdaCheck(DexInspector inspector) {
+ private static Predicate<DexType> createLambdaCheck(CodeInspector inspector) {
Set<DexType> lambdaClasses = inspector.allClasses().stream()
.filter(clazz -> isLambda(clazz.getDexClass()))
.map(clazz -> clazz.getDexClass().type)
@@ -67,7 +67,7 @@
public void testJStyleLambdas() throws Exception {
final String mainClassName = "class_inliner_lambda_j_style.MainKt";
runTest("class_inliner_lambda_j_style", mainClassName, false, (app) -> {
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
assertTrue(
inspector.clazz("class_inliner_lambda_j_style.MainKt$testStateful$1").isPresent());
assertTrue(
@@ -77,7 +77,7 @@
});
runTest("class_inliner_lambda_j_style", mainClassName, true, (app) -> {
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
Predicate<DexType> lambdaCheck = createLambdaCheck(inspector);
ClassSubject clazz = inspector.clazz(mainClassName);
@@ -112,7 +112,7 @@
public void testKStyleLambdas() throws Exception {
final String mainClassName = "class_inliner_lambda_k_style.MainKt";
runTest("class_inliner_lambda_k_style", mainClassName, false, (app) -> {
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
assertTrue(inspector.clazz(
"class_inliner_lambda_k_style.MainKt$testKotlinSequencesStateless$1").isPresent());
assertTrue(inspector.clazz(
@@ -135,7 +135,7 @@
});
runTest("class_inliner_lambda_k_style", mainClassName, true, (app) -> {
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
Predicate<DexType> lambdaCheck = createLambdaCheck(inspector);
ClassSubject clazz = inspector.clazz(mainClassName);
@@ -186,7 +186,7 @@
public void testDataClass() throws Exception {
final String mainClassName = "class_inliner_data_class.MainKt";
runTest("class_inliner_data_class", mainClassName, true, (app) -> {
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject clazz = inspector.clazz(mainClassName);
assertTrue(collectAccessedTypes(
type -> !type.toSourceString().startsWith("java."),
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingTest.java
index 658e89a..e43e94c 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingTest.java
@@ -14,7 +14,7 @@
import com.android.tools.r8.ir.optimize.lambda.CaptureSignature;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.Lists;
import java.io.IOException;
import java.util.ArrayList;
@@ -139,21 +139,21 @@
}
static class Verifier {
- final DexInspector dexInspector;
+ final CodeInspector codeInspector;
final List<DexClass> lambdas = new ArrayList<>();
final List<DexClass> groups = new ArrayList<>();
Verifier(AndroidApp app) throws IOException, ExecutionException {
- this(new DexInspector(app));
+ this(new CodeInspector(app));
}
- Verifier(DexInspector dexInspector) {
- this.dexInspector = dexInspector;
+ Verifier(CodeInspector codeInspector) {
+ this.codeInspector = codeInspector;
initGroupsAndLambdas();
}
private void initGroupsAndLambdas() {
- dexInspector.forAllClasses(clazz -> {
+ codeInspector.forAllClasses(clazz -> {
DexClass dexClass = clazz.getDexClass();
if (isLambdaOrGroup(dexClass)) {
if (isLambdaGroupClass(dexClass)) {
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinxMetadataExtensionsServiceTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinxMetadataExtensionsServiceTest.java
index 233bb24..87b9487 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinxMetadataExtensionsServiceTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinxMetadataExtensionsServiceTest.java
@@ -20,7 +20,7 @@
import com.android.tools.r8.kotlin.KotlinLambdaMergingTest.Verifier;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.FileUtils;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -60,7 +60,7 @@
"No MetadataExtensions instances found in the classpath")));
assertTrue(Files.exists(output));
- DexInspector inspector = new DexInspector(output);
+ CodeInspector inspector = new CodeInspector(output);
Verifier verifier = new Verifier(inspector);
String pkg = "lambdas_kstyle_trivial";
verifier.assertLambdaGroups(
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
index 53b7925..4b1b404 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinAccessorTest.java
@@ -16,9 +16,9 @@
import com.android.tools.r8.kotlin.TestKotlinClass.Visibility;
import com.android.tools.r8.naming.MemberNaming;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FieldSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FieldSubject;
import java.nio.file.Path;
import java.util.Collections;
import org.junit.Assert;
@@ -65,8 +65,8 @@
String mainClass = addMainToClasspath("properties.CompanionPropertiesKt",
"companionProperties_usePrimitiveProp");
runTest(PROPERTIES_PACKAGE_NAME, mainClass, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector, testedClass.getOuterClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector, testedClass.getOuterClassName());
String propertyName = "primitiveProp";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, "int", propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -94,8 +94,8 @@
String mainClass = addMainToClasspath("properties.CompanionPropertiesKt",
"companionProperties_usePrivateProp");
runTest(PROPERTIES_PACKAGE_NAME, mainClass, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector, testedClass.getOuterClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector, testedClass.getOuterClassName());
String propertyName = "privateProp";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -124,8 +124,8 @@
String mainClass = addMainToClasspath("properties.CompanionPropertiesKt",
"companionProperties_useInternalProp");
runTest(PROPERTIES_PACKAGE_NAME, mainClass, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector, testedClass.getOuterClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector, testedClass.getOuterClassName());
String propertyName = "internalProp";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -153,8 +153,8 @@
String mainClass = addMainToClasspath("properties.CompanionPropertiesKt",
"companionProperties_usePublicProp");
runTest(PROPERTIES_PACKAGE_NAME, mainClass, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector, testedClass.getOuterClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector, testedClass.getOuterClassName());
String propertyName = "publicProp";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -182,8 +182,8 @@
String mainClass = addMainToClasspath("properties.CompanionLateInitPropertiesKt",
"companionLateInitProperties_usePrivateLateInitProp");
runTest(PROPERTIES_PACKAGE_NAME, mainClass, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector, testedClass.getOuterClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector, testedClass.getOuterClassName());
String propertyName = "privateLateInitProp";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -210,8 +210,8 @@
String mainClass = addMainToClasspath("properties.CompanionLateInitPropertiesKt",
"companionLateInitProperties_useInternalLateInitProp");
runTest(PROPERTIES_PACKAGE_NAME, mainClass, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector, testedClass.getOuterClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector, testedClass.getOuterClassName());
String propertyName = "internalLateInitProp";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -234,8 +234,8 @@
String mainClass = addMainToClasspath("properties.CompanionLateInitPropertiesKt",
"companionLateInitProperties_usePublicLateInitProp");
runTest(PROPERTIES_PACKAGE_NAME, mainClass, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector, testedClass.getOuterClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector, testedClass.getOuterClassName());
String propertyName = "publicLateInitProp";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -258,9 +258,9 @@
String mainClass = addMainToClasspath("accessors.AccessorKt",
"accessor_accessPropertyFromCompanionClass");
runTest("accessors", mainClass, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector, testedClass.getOuterClassName());
- ClassSubject companionClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector, testedClass.getOuterClassName());
+ ClassSubject companionClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "property";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -288,9 +288,9 @@
String mainClass = addMainToClasspath("accessors.AccessorKt",
"accessor_accessPropertyFromOuterClass");
runTest("accessors", mainClass, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector, testedClass.getOuterClassName());
- ClassSubject companionClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector, testedClass.getOuterClassName());
+ ClassSubject companionClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "property";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -318,8 +318,8 @@
String mainClass = addMainToClasspath(testedClass.className + "Kt",
"noUseOfPropertyAccessorFromInnerClass");
runTest("accessors", mainClass, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector, testedClass.getClassName());
for (String propertyName : testedClass.properties.keySet()) {
MemberNaming.MethodSignature getterAccessor =
@@ -340,8 +340,8 @@
String mainClass = addMainToClasspath(testedClass.className + "Kt",
"usePrivatePropertyAccessorFromInnerClass");
runTest("accessors", mainClass, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "privateProp";
FieldSubject fieldSubject = checkFieldIsKept(classSubject, JAVA_LANG_STRING,
@@ -371,8 +371,8 @@
String mainClass = addMainToClasspath(testedClass.className + "Kt",
"usePrivateLateInitPropertyAccessorFromInnerClass");
runTest("accessors", mainClass, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "privateLateInitProp";
FieldSubject fieldSubject = checkFieldIsKept(classSubject, JAVA_LANG_STRING,
@@ -402,8 +402,8 @@
String mainClass = addMainToClasspath(testedClass.className + "Kt",
"noUseOfPropertyAccessorFromLambda");
runTest("accessors", mainClass, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "property";
MemberNaming.MethodSignature getterAccessor =
@@ -423,8 +423,8 @@
String mainClass = addMainToClasspath(testedClass.className + "Kt",
"usePropertyAccessorFromLambda");
runTest("accessors", mainClass, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "property";
FieldSubject fieldSubject = checkFieldIsKept(classSubject, JAVA_LANG_STRING, propertyName);
assertFalse(fieldSubject.getField().accessFlags.isStatic());
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java
index 45f74af..58eae89 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinDataClassTest.java
@@ -8,9 +8,9 @@
import com.android.tools.r8.kotlin.TestKotlinClass.Visibility;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.util.Collections;
import java.util.function.Consumer;
import org.junit.Test;
@@ -44,8 +44,8 @@
new MethodSignature("testDataClassGetters", "void", Collections.emptyList());
final String extraRules = keepClassMethod(mainClassName, testMethodSignature);
runTest("dataclass", mainClassName, extraRules, disableClassInliner, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject dataClass = checkClassIsKept(dexInspector, TEST_DATA_CLASS.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject dataClass = checkClassIsKept(codeInspector, TEST_DATA_CLASS.getClassName());
// Getters should be removed after inlining, which is possible only if access is relaxed.
final boolean areGetterPresent = !allowAccessModification;
@@ -60,7 +60,7 @@
checkMethodIsRemoved(dataClass, COPY_METHOD);
checkMethodIsRemoved(dataClass, COPY_DEFAULT_METHOD);
- ClassSubject classSubject = checkClassIsKept(dexInspector, mainClassName);
+ ClassSubject classSubject = checkClassIsKept(codeInspector, mainClassName);
MethodSubject testMethod = checkMethodIsKept(classSubject, testMethodSignature);
DexCode dexCode = getDexCode(testMethod);
if (allowAccessModification) {
@@ -79,8 +79,8 @@
new MethodSignature("testAllDataClassComponentFunctions", "void", Collections.emptyList());
final String extraRules = keepClassMethod(mainClassName, testMethodSignature);
runTest("dataclass", mainClassName, extraRules, disableClassInliner, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject dataClass = checkClassIsKept(dexInspector, TEST_DATA_CLASS.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject dataClass = checkClassIsKept(codeInspector, TEST_DATA_CLASS.getClassName());
// ComponentN functions should be removed after inlining, which is possible only if access
// is relaxed.
@@ -96,7 +96,7 @@
checkMethodIsRemoved(dataClass, COPY_METHOD);
checkMethodIsRemoved(dataClass, COPY_DEFAULT_METHOD);
- ClassSubject classSubject = checkClassIsKept(dexInspector, mainClassName);
+ ClassSubject classSubject = checkClassIsKept(codeInspector, mainClassName);
MethodSubject testMethod = checkMethodIsKept(classSubject, testMethodSignature);
DexCode dexCode = getDexCode(testMethod);
if (allowAccessModification) {
@@ -114,8 +114,8 @@
new MethodSignature("testSomeDataClassComponentFunctions", "void", Collections.emptyList());
final String extraRules = keepClassMethod(mainClassName, testMethodSignature);
runTest("dataclass", mainClassName, extraRules, disableClassInliner, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject dataClass = checkClassIsKept(dexInspector, TEST_DATA_CLASS.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject dataClass = checkClassIsKept(codeInspector, TEST_DATA_CLASS.getClassName());
boolean component2IsPresent = !allowAccessModification;
checkMethodisKeptOrRemoved(dataClass, COMPONENT2_METHOD, component2IsPresent);
@@ -131,7 +131,7 @@
checkMethodIsRemoved(dataClass, COPY_METHOD);
checkMethodIsRemoved(dataClass, COPY_DEFAULT_METHOD);
- ClassSubject classSubject = checkClassIsKept(dexInspector, mainClassName);
+ ClassSubject classSubject = checkClassIsKept(codeInspector, mainClassName);
MethodSubject testMethod = checkMethodIsKept(classSubject, testMethodSignature);
DexCode dexCode = getDexCode(testMethod);
if (allowAccessModification) {
@@ -149,8 +149,8 @@
new MethodSignature("testDataClassCopy", "void", Collections.emptyList());
final String extraRules = keepClassMethod(mainClassName, testMethodSignature);
runTest("dataclass", mainClassName, extraRules, disableClassInliner, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject dataClass = checkClassIsKept(dexInspector, TEST_DATA_CLASS.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject dataClass = checkClassIsKept(codeInspector, TEST_DATA_CLASS.getClassName());
checkMethodIsRemoved(dataClass, COPY_METHOD);
checkMethodIsRemoved(dataClass, COPY_DEFAULT_METHOD);
@@ -164,8 +164,8 @@
new MethodSignature("testDataClassCopyWithDefault", "void", Collections.emptyList());
final String extraRules = keepClassMethod(mainClassName, testMethodSignature);
runTest("dataclass", mainClassName, extraRules, disableClassInliner, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject dataClass = checkClassIsKept(dexInspector, TEST_DATA_CLASS.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject dataClass = checkClassIsKept(codeInspector, TEST_DATA_CLASS.getClassName());
checkMethodIsRemoved(dataClass, COPY_DEFAULT_METHOD);
});
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
index c764974..c90df04 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinIntrinsicsTest.java
@@ -5,8 +5,8 @@
package com.android.tools.r8.kotlin;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import java.util.Collections;
@@ -27,9 +27,9 @@
"java.lang.String", Lists.newArrayList("java.lang.String", "java.lang.String")));
runTest("intrinsics", "intrinsics.IntrinsicsKt", extraRules, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
+ CodeInspector codeInspector = new CodeInspector(app);
ClassSubject intrinsicsClass = checkClassIsKept(
- dexInspector, KOTLIN_INTRINSICS_CLASS.getClassName());
+ codeInspector, KOTLIN_INTRINSICS_CLASS.getClassName());
checkMethodsPresence(intrinsicsClass,
ImmutableMap.<MethodSignature, Boolean>builder()
diff --git a/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java b/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
index 03c2873..89ff81d 100644
--- a/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/R8KotlinPropertiesTest.java
@@ -11,9 +11,9 @@
import com.android.tools.r8.naming.MemberNaming;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FieldSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FieldSubject;
import java.util.Map.Entry;
import java.util.function.Consumer;
import org.junit.Test;
@@ -93,8 +93,8 @@
String mainClass = addMainToClasspath("properties/MutablePropertyKt",
"mutableProperty_noUseOfProperties");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector,
MUTABLE_PROPERTY_CLASS.getClassName());
for (Entry<String, KotlinProperty> property : MUTABLE_PROPERTY_CLASS.properties.entrySet()) {
MethodSignature getter = MUTABLE_PROPERTY_CLASS.getGetterForProperty(property.getKey());
@@ -116,8 +116,8 @@
String mainClass = addMainToClasspath("properties/MutablePropertyKt",
"mutableProperty_usePrivateProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector,
MUTABLE_PROPERTY_CLASS.getClassName());
String propertyName = "privateProp";
FieldSubject fieldSubject = checkFieldIsKept(classSubject, JAVA_LANG_STRING, propertyName);
@@ -138,8 +138,8 @@
String mainClass = addMainToClasspath("properties/MutablePropertyKt",
"mutableProperty_useProtectedProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector,
MUTABLE_PROPERTY_CLASS.getClassName());
String propertyName = "protectedProp";
FieldSubject fieldSubject = checkFieldIsKept(classSubject, JAVA_LANG_STRING, propertyName);
@@ -161,8 +161,8 @@
String mainClass = addMainToClasspath("properties/MutablePropertyKt",
"mutableProperty_useInternalProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector,
MUTABLE_PROPERTY_CLASS.getClassName());
String propertyName = "internalProp";
FieldSubject fieldSubject = checkFieldIsKept(classSubject, JAVA_LANG_STRING, propertyName);
@@ -184,8 +184,8 @@
String mainClass = addMainToClasspath("properties/MutablePropertyKt",
"mutableProperty_usePublicProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector,
MUTABLE_PROPERTY_CLASS.getClassName());
String propertyName = "publicProp";
FieldSubject fieldSubject = checkFieldIsKept(classSubject, JAVA_LANG_STRING, propertyName);
@@ -207,8 +207,8 @@
String mainClass = addMainToClasspath("properties/MutablePropertyKt",
"mutableProperty_usePrimitiveProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector,
MUTABLE_PROPERTY_CLASS.getClassName());
String propertyName = "primitiveProp";
FieldSubject fieldSubject = checkFieldIsKept(classSubject, "int", propertyName);
@@ -232,8 +232,8 @@
String mainClass = addMainToClasspath("properties/LateInitPropertyKt",
"lateInitProperty_noUseOfProperties");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector,
LATE_INIT_PROPERTY_CLASS.getClassName());
for (Entry<String, KotlinProperty> property : LATE_INIT_PROPERTY_CLASS.properties.entrySet()) {
MethodSignature getter = LATE_INIT_PROPERTY_CLASS.getGetterForProperty(property.getKey());
@@ -256,8 +256,8 @@
String mainClass = addMainToClasspath(
"properties/LateInitPropertyKt", "lateInitProperty_usePrivateLateInitProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector,
LATE_INIT_PROPERTY_CLASS.getClassName());
String propertyName = "privateLateInitProp";
FieldSubject fieldSubject = classSubject.field(JAVA_LANG_STRING, propertyName);
@@ -279,8 +279,8 @@
String mainClass = addMainToClasspath("properties/LateInitPropertyKt",
"lateInitProperty_useProtectedLateInitProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector,
LATE_INIT_PROPERTY_CLASS.getClassName());
String propertyName = "protectedLateInitProp";
FieldSubject fieldSubject = classSubject.field(JAVA_LANG_STRING, propertyName);
@@ -300,8 +300,8 @@
String mainClass = addMainToClasspath(
"properties/LateInitPropertyKt", "lateInitProperty_useInternalLateInitProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector,
LATE_INIT_PROPERTY_CLASS.getClassName());
String propertyName = "internalLateInitProp";
FieldSubject fieldSubject = classSubject.field(JAVA_LANG_STRING, propertyName);
@@ -319,8 +319,8 @@
String mainClass = addMainToClasspath(
"properties/LateInitPropertyKt", "lateInitProperty_usePublicLateInitProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector,
LATE_INIT_PROPERTY_CLASS.getClassName());
String propertyName = "publicLateInitProp";
FieldSubject fieldSubject = classSubject.field(JAVA_LANG_STRING, propertyName);
@@ -338,8 +338,8 @@
String mainClass = addMainToClasspath(
"properties/UserDefinedPropertyKt", "userDefinedProperty_noUseOfProperties");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector,
USER_DEFINED_PROPERTY_CLASS.getClassName());
for (String propertyName : USER_DEFINED_PROPERTY_CLASS.properties.keySet()) {
checkMethodIsRemoved(classSubject,
@@ -355,8 +355,8 @@
String mainClass = addMainToClasspath(
"properties/UserDefinedPropertyKt", "userDefinedProperty_useProperties");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject classSubject = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject classSubject = checkClassIsKept(codeInspector,
USER_DEFINED_PROPERTY_CLASS.getClassName());
String propertyName = "durationInSeconds";
// The 'wrapper' property is not assigned to a backing field, it only relies on the wrapped
@@ -381,10 +381,10 @@
String mainClass = addMainToClasspath(
"properties.CompanionPropertiesKt", "companionProperties_usePrimitiveProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector,
"properties.CompanionProperties");
- ClassSubject companionClass = checkClassIsKept(dexInspector,
+ ClassSubject companionClass = checkClassIsKept(codeInspector,
COMPANION_PROPERTY_CLASS.getClassName());
String propertyName = "primitiveProp";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, "int", propertyName);
@@ -412,10 +412,10 @@
String mainClass = addMainToClasspath(
"properties.CompanionPropertiesKt", "companionProperties_usePrivateProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector,
"properties.CompanionProperties");
- ClassSubject companionClass = checkClassIsKept(dexInspector,
+ ClassSubject companionClass = checkClassIsKept(codeInspector,
COMPANION_PROPERTY_CLASS.getClassName());
String propertyName = "privateProp";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
@@ -446,10 +446,10 @@
String mainClass = addMainToClasspath(
"properties.CompanionPropertiesKt", "companionProperties_useInternalProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector,
"properties.CompanionProperties");
- ClassSubject companionClass = checkClassIsKept(dexInspector,
+ ClassSubject companionClass = checkClassIsKept(codeInspector,
COMPANION_PROPERTY_CLASS.getClassName());
String propertyName = "internalProp";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
@@ -477,10 +477,10 @@
String mainClass = addMainToClasspath(
"properties.CompanionPropertiesKt", "companionProperties_usePublicProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector,
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector,
"properties.CompanionProperties");
- ClassSubject companionClass = checkClassIsKept(dexInspector,
+ ClassSubject companionClass = checkClassIsKept(codeInspector,
COMPANION_PROPERTY_CLASS.getClassName());
String propertyName = "publicProp";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
@@ -509,9 +509,9 @@
String mainClass = addMainToClasspath("properties.CompanionLateInitPropertiesKt",
"companionLateInitProperties_usePrivateLateInitProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector, testedClass.getOuterClassName());
- ClassSubject companionClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector, testedClass.getOuterClassName());
+ ClassSubject companionClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "privateLateInitProp";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -540,9 +540,9 @@
String mainClass = addMainToClasspath("properties.CompanionLateInitPropertiesKt",
"companionLateInitProperties_useInternalLateInitProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector, testedClass.getOuterClassName());
- ClassSubject companionClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector, testedClass.getOuterClassName());
+ ClassSubject companionClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "internalLateInitProp";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -564,9 +564,9 @@
String mainClass = addMainToClasspath("properties.CompanionLateInitPropertiesKt",
"companionLateInitProperties_usePublicLateInitProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject outerClass = checkClassIsKept(dexInspector, testedClass.getOuterClassName());
- ClassSubject companionClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject outerClass = checkClassIsKept(codeInspector, testedClass.getOuterClassName());
+ ClassSubject companionClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "publicLateInitProp";
FieldSubject fieldSubject = checkFieldIsKept(outerClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -588,8 +588,8 @@
String mainClass = addMainToClasspath(
"properties.ObjectPropertiesKt", "objectProperties_usePrimitiveProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject objectClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject objectClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "primitiveProp";
FieldSubject fieldSubject = checkFieldIsKept(objectClass, "int", propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -615,8 +615,8 @@
String mainClass = addMainToClasspath(
"properties.ObjectPropertiesKt", "objectProperties_usePrivateProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject objectClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject objectClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "privateProp";
FieldSubject fieldSubject = checkFieldIsKept(objectClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -642,8 +642,8 @@
String mainClass = addMainToClasspath(
"properties.ObjectPropertiesKt", "objectProperties_useInternalProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject objectClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject objectClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "internalProp";
FieldSubject fieldSubject = checkFieldIsKept(objectClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -669,8 +669,8 @@
String mainClass = addMainToClasspath(
"properties.ObjectPropertiesKt", "objectProperties_usePublicProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject objectClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject objectClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "publicProp";
FieldSubject fieldSubject = checkFieldIsKept(objectClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -696,8 +696,8 @@
String mainClass = addMainToClasspath(
"properties.ObjectPropertiesKt", "objectProperties_useLateInitPrivateProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject objectClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject objectClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "privateLateInitProp";
FieldSubject fieldSubject = checkFieldIsKept(objectClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -723,8 +723,8 @@
String mainClass = addMainToClasspath(
"properties.ObjectPropertiesKt", "objectProperties_useLateInitInternalProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject objectClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject objectClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "internalLateInitProp";
FieldSubject fieldSubject = checkFieldIsKept(objectClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -746,8 +746,8 @@
String mainClass = addMainToClasspath(
"properties.ObjectPropertiesKt", "objectProperties_useLateInitPublicProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject objectClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject objectClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "publicLateInitProp";
FieldSubject fieldSubject = checkFieldIsKept(objectClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -769,8 +769,8 @@
String mainClass = addMainToClasspath(
"properties.FilePropertiesKt", "fileProperties_usePrimitiveProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject objectClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject objectClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "primitiveProp";
FieldSubject fieldSubject = checkFieldIsKept(objectClass, "int", propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -796,8 +796,8 @@
String mainClass = addMainToClasspath(
"properties.FilePropertiesKt", "fileProperties_usePrivateProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject objectClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject objectClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "privateProp";
FieldSubject fieldSubject = checkFieldIsKept(objectClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -822,8 +822,8 @@
String mainClass = addMainToClasspath(
"properties.FilePropertiesKt", "fileProperties_useInternalProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject objectClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject objectClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "internalProp";
FieldSubject fieldSubject = checkFieldIsKept(objectClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -848,8 +848,8 @@
String mainClass = addMainToClasspath(
"properties.FilePropertiesKt", "fileProperties_usePublicProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject objectClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject objectClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "publicProp";
FieldSubject fieldSubject = checkFieldIsKept(objectClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -875,8 +875,8 @@
String mainClass = addMainToClasspath(
"properties.FilePropertiesKt", "fileProperties_useLateInitPrivateProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject fileClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject fileClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "privateLateInitProp";
FieldSubject fieldSubject = checkFieldIsKept(fileClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -901,8 +901,8 @@
String mainClass = addMainToClasspath(
"properties.FilePropertiesKt", "fileProperties_useLateInitInternalProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject objectClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject objectClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "internalLateInitProp";
FieldSubject fieldSubject = checkFieldIsKept(objectClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
@@ -925,8 +925,8 @@
String mainClass = addMainToClasspath(
"properties.FilePropertiesKt", "fileProperties_useLateInitPublicProp");
runTest(PACKAGE_NAME, mainClass, disableClassInliningAndMerging, (app) -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject objectClass = checkClassIsKept(dexInspector, testedClass.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject objectClass = checkClassIsKept(codeInspector, testedClass.getClassName());
String propertyName = "publicLateInitProp";
FieldSubject fieldSubject = checkFieldIsKept(objectClass, JAVA_LANG_STRING, propertyName);
assertTrue(fieldSubject.getField().accessFlags.isStatic());
diff --git a/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java b/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java
index fd41344..12fdaf9 100644
--- a/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/SimplifyIfNotNullKotlinTest.java
@@ -10,9 +10,9 @@
import com.android.tools.r8.code.Instruction;
import com.android.tools.r8.graph.DexCode;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.util.Arrays;
import org.junit.Test;
@@ -35,8 +35,8 @@
final String mainClassName = ex1.getClassName();
final String extraRules = keepAllMembers(mainClassName);
runTest(FOLDER, mainClassName, extraRules, app -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject clazz = checkClassIsKept(dexInspector, ex1.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject clazz = checkClassIsKept(codeInspector, ex1.getClassName());
MethodSubject testMethod = checkMethodIsKept(clazz, testMethodSignature);
DexCode dexCode = getDexCode(testMethod);
@@ -61,8 +61,8 @@
final String mainClassName = ex2.getClassName();
final String extraRules = keepAllMembers(mainClassName);
runTest(FOLDER, mainClassName, extraRules, app -> {
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject clazz = checkClassIsKept(dexInspector, ex2.getClassName());
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject clazz = checkClassIsKept(codeInspector, ex2.getClassName());
MethodSubject testMethod = checkMethodIsKept(clazz, testMethodSignature);
DexCode dexCode = getDexCode(testMethod);
diff --git a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
index dc5347e..fc41672 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/MainDexListTests.java
@@ -66,8 +66,8 @@
import com.android.tools.r8.utils.Reporter;
import com.android.tools.r8.utils.ThreadUtils;
import com.android.tools.r8.utils.Timing;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FoundClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import java.io.IOException;
@@ -484,7 +484,7 @@
.forEach(
p -> {
try {
- DexInspector i = new DexInspector(AndroidApp.builder().addProgramFiles(p).build());
+ CodeInspector i = new CodeInspector(AndroidApp.builder().addProgramFiles(p).build());
assertFalse("Found " + clazz + " in file " + p, i.clazz(clazz).isPresent());
} catch (IOException | ExecutionException e) {
e.printStackTrace();
@@ -519,7 +519,7 @@
throws IOException, ExecutionException, ProguardRuleParserException,
CompilationFailedException {
AndroidApp originalApp = AndroidApp.builder().addProgramFiles(app).build();
- DexInspector originalInspector = new DexInspector(originalApp);
+ CodeInspector originalInspector = new CodeInspector(originalApp);
for (String clazz : mainDex) {
assertTrue("Class " + clazz + " does not exist in input",
originalInspector.clazz(clazz).isPresent());
@@ -583,8 +583,8 @@
assertTrue("Output run only produced one dex file.",
1 < Files.list(outDir).filter(FileUtils::isDexFile).count());
}
- DexInspector inspector =
- new DexInspector(
+ CodeInspector inspector =
+ new CodeInspector(
AndroidApp.builder().addProgramFiles(outDir.resolve("classes.dex")).build());
for (String clazz : mainDex) {
if (!inspector.clazz(clazz).isPresent()) {
@@ -771,7 +771,7 @@
}
@Override
- public Position getDebugPositionAtOffset(int offset) {
+ public Position getCanonicalDebugPositionAtOffset(int offset) {
throw new Unreachable();
}
diff --git a/src/test/java/com/android/tools/r8/maindexlist/b72312389/B72312389.java b/src/test/java/com/android/tools/r8/maindexlist/b72312389/B72312389.java
index fea8160..c1741c9 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/b72312389/B72312389.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/b72312389/B72312389.java
@@ -23,7 +23,7 @@
import com.android.tools.r8.VmTestRunner;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApiLevel;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.nio.file.Paths;
import java.util.ArrayList;
@@ -84,7 +84,7 @@
.setMainDexListConsumer(
(string, handler) -> mainDexList.content = string)
.build();
- DexInspector inspector = new DexInspector(ToolHelper.runR8(command));
+ CodeInspector inspector = new CodeInspector(ToolHelper.runR8(command));
assertTrue(inspector.clazz("instrumentationtest.InstrumentationTest").isPresent());
assertTrue(mainDexList.content.contains("junit/framework/TestCase.class"));
// TODO(72794301): Two copies of this message is a bit over the top.
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/CompositionalLenseTest.java b/src/test/java/com/android/tools/r8/memberrebinding/CompositionalLenseTest.java
index d3805d9..6c6e69d 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/CompositionalLenseTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/CompositionalLenseTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.memberrebinding;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
@@ -17,9 +17,9 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.FileUtils;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import java.util.List;
@@ -74,10 +74,10 @@
options.enableInlining = false;
options.enableClassMerging = false;
});
- DexInspector dexInspector = new DexInspector(processedApp);
- ClassSubject classSubject = dexInspector.clazz(TestMain.class);
+ CodeInspector codeInspector = new CodeInspector(processedApp);
+ ClassSubject classSubject = codeInspector.clazz(TestMain.class);
assertThat(classSubject, isPresent());
- MethodSubject methodSubject = classSubject.method(DexInspector.MAIN);
+ MethodSubject methodSubject = classSubject.method(CodeInspector.MAIN);
assertThat(methodSubject, isPresent());
DexCode dexCode = methodSubject.getMethod().getCode().asDexCode();
assertTrue(dexCode.instructions[2] instanceof InvokeVirtual);
diff --git a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
index c2ec4b7..80379e0 100644
--- a/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
+++ b/src/test/java/com/android/tools/r8/memberrebinding/MemberRebindingTest.java
@@ -12,11 +12,11 @@
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.TestDescriptionWatcher;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FieldAccessInstructionSubject;
-import com.android.tools.r8.utils.dexinspector.InstructionSubject;
-import com.android.tools.r8.utils.dexinspector.InvokeInstructionSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FieldAccessInstructionSubject;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.InvokeInstructionSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.nio.file.Path;
@@ -55,8 +55,8 @@
private final Frontend kind;
private final Path originalDex;
private final Path programFile;
- private final Consumer<DexInspector> inspection;
- private final Consumer<DexInspector> originalInspection;
+ private final Consumer<CodeInspector> inspection;
+ private final Consumer<CodeInspector> originalInspection;
private final int minApiLevel;
@Rule
@@ -101,9 +101,9 @@
return !invoke.holder().is("java.io.PrintStream");
}
- private static void inspectOriginalMain(DexInspector inspector) {
+ private static void inspectOriginalMain(CodeInspector inspector) {
MethodSubject main = inspector.clazz("memberrebinding.Memberrebinding")
- .method(DexInspector.MAIN);
+ .method(CodeInspector.MAIN);
Iterator<InvokeInstructionSubject> iterator =
main.iterateInstructions(MemberRebindingTest::coolInvokes);
assertTrue(iterator.next().holder().is("memberrebinding.ClassAtBottomOfChain"));
@@ -129,9 +129,9 @@
assertFalse(iterator.hasNext());
}
- private static void inspectMain(DexInspector inspector) {
+ private static void inspectMain(CodeInspector inspector) {
MethodSubject main = inspector.clazz("memberrebinding.Memberrebinding")
- .method(DexInspector.MAIN);
+ .method(CodeInspector.MAIN);
Iterator<InvokeInstructionSubject> iterator =
main.iterateInstructions(MemberRebindingTest::coolInvokes);
assertTrue(iterator.next().holder().is("memberrebinding.ClassAtBottomOfChain"));
@@ -160,9 +160,9 @@
assertFalse(iterator.hasNext());
}
- private static void inspectOriginalMain2(DexInspector inspector) {
+ private static void inspectOriginalMain2(CodeInspector inspector) {
MethodSubject main = inspector.clazz("memberrebinding2.Memberrebinding")
- .method(DexInspector.MAIN);
+ .method(CodeInspector.MAIN);
Iterator<FieldAccessInstructionSubject> iterator =
main.iterateInstructions(InstructionSubject::isFieldAccess);
// Run through instance put, static put, instance get and instance get.
@@ -176,9 +176,9 @@
assertFalse(iterator.hasNext());
}
- private static void inspectMain2(DexInspector inspector) {
+ private static void inspectMain2(CodeInspector inspector) {
MethodSubject main = inspector.clazz("memberrebinding2.Memberrebinding")
- .method(DexInspector.MAIN);
+ .method(CodeInspector.MAIN);
Iterator<FieldAccessInstructionSubject> iterator =
main.iterateInstructions(InstructionSubject::isFieldAccess);
// Run through instance put, static put, instance get and instance get.
@@ -195,7 +195,7 @@
public static MethodSignature TEST =
new MethodSignature("test", "void", new String[]{});
- private static void inspectOriginal3(DexInspector inspector) {
+ private static void inspectOriginal3(CodeInspector inspector) {
MethodSubject main = inspector.clazz("memberrebinding3.Memberrebinding").method(TEST);
Iterator<InvokeInstructionSubject> iterator =
main.iterateInstructions(InstructionSubject::isInvoke);
@@ -205,7 +205,7 @@
assertFalse(iterator.hasNext());
}
- private static void inspect3(DexInspector inspector) {
+ private static void inspect3(CodeInspector inspector) {
MethodSubject main = inspector.clazz("memberrebinding3.Memberrebinding").method(TEST);
Iterator<InvokeInstructionSubject> iterator =
main.iterateInstructions(InstructionSubject::isInvoke);
@@ -215,7 +215,7 @@
assertFalse(iterator.hasNext());
}
- private static void inspectOriginal4(DexInspector inspector) {
+ private static void inspectOriginal4(CodeInspector inspector) {
MethodSubject main = inspector.clazz("memberrebinding4.Memberrebinding").method(TEST);
Iterator<InvokeInstructionSubject> iterator =
main.iterateInstructions(InstructionSubject::isInvoke);
@@ -224,7 +224,7 @@
assertFalse(iterator.hasNext());
}
- private static void inspect4(DexInspector inspector) {
+ private static void inspect4(CodeInspector inspector) {
MethodSubject main = inspector.clazz("memberrebinding4.Memberrebinding").method(TEST);
Iterator<InvokeInstructionSubject> iterator =
main.iterateInstructions(InstructionSubject::isInvoke);
@@ -243,14 +243,14 @@
final String name;
final Frontend kind;
final AndroidVersion version;
- final Consumer<DexInspector> originalInspection;
- final Consumer<DexInspector> processedInspection;
+ final Consumer<CodeInspector> originalInspection;
+ final Consumer<CodeInspector> processedInspection;
private TestConfiguration(String name,
Frontend kind,
AndroidVersion version,
- Consumer<DexInspector> originalInspection,
- Consumer<DexInspector> processedInspection) {
+ Consumer<CodeInspector> originalInspection,
+ Consumer<CodeInspector> processedInspection) {
this.name = name;
this.kind = kind;
this.version = version;
@@ -261,8 +261,8 @@
public static void add(ImmutableList.Builder<TestConfiguration> builder,
String name,
AndroidVersion version,
- Consumer<DexInspector> originalInspection,
- Consumer<DexInspector> processedInspection) {
+ Consumer<CodeInspector> originalInspection,
+ Consumer<CodeInspector> processedInspection) {
if (version == AndroidVersion.PRE_N) {
builder.add(new TestConfiguration(name, Frontend.DEX, version, originalInspection,
processedInspection));
@@ -330,11 +330,11 @@
Path processed = Paths.get(out, "classes.dex");
if (kind == Frontend.DEX) {
- DexInspector inspector = new DexInspector(originalDex);
+ CodeInspector inspector = new CodeInspector(originalDex);
originalInspection.accept(inspector);
}
- DexInspector inspector = new DexInspector(processed);
+ CodeInspector inspector = new CodeInspector(processed);
inspection.accept(inspector);
// We don't run Art, as the test R8RunExamplesTest already does that.
diff --git a/src/test/java/com/android/tools/r8/movestringconstants/MoveStringConstantsTest.java b/src/test/java/com/android/tools/r8/movestringconstants/MoveStringConstantsTest.java
index 9b120e6..d7d0538 100644
--- a/src/test/java/com/android/tools/r8/movestringconstants/MoveStringConstantsTest.java
+++ b/src/test/java/com/android/tools/r8/movestringconstants/MoveStringConstantsTest.java
@@ -6,6 +6,7 @@
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.ClassFileConsumer;
import com.android.tools.r8.CompilationMode;
import com.android.tools.r8.DexIndexedConsumer;
import com.android.tools.r8.R8Command;
@@ -13,22 +14,46 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.InstructionSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.CfInstructionSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject.JumboStringMode;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Iterator;
import java.util.function.Consumer;
import java.util.function.Predicate;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+@RunWith(Parameterized.class)
public class MoveStringConstantsTest extends TestBase {
- private void runTest(Consumer<DexInspector> inspection) throws Exception {
+
+ private Backend backend;
+
+ @Parameters(name = "Backend: {0}")
+ public static Collection<Backend> data() {
+ return Arrays.asList(Backend.values());
+ }
+
+ private void runTest(Consumer<CodeInspector> inspection) throws Exception {
R8Command.Builder builder = R8Command.builder();
builder.addProgramFiles(ToolHelper.getClassFileForTestClass(TestClass.class));
builder.addProgramFiles(ToolHelper.getClassFileForTestClass(Utils.class));
- builder.setProgramConsumer(DexIndexedConsumer.emptyConsumer());
+ builder.addLibraryFiles(
+ backend == Backend.DEX
+ ? ToolHelper.getDefaultAndroidJar()
+ : ToolHelper.getJava8RuntimeJar());
+ assert (backend == Backend.CF || backend == Backend.DEX);
+ builder.setProgramConsumer(
+ backend == Backend.DEX
+ ? DexIndexedConsumer.emptyConsumer()
+ : ClassFileConsumer.emptyConsumer());
builder.setMode(CompilationMode.RELEASE);
builder.addProguardConfiguration(
ImmutableList.of(
@@ -37,14 +62,35 @@
"-allowaccessmodification"
),
Origin.unknown());
- AndroidApp app = ToolHelper.runR8(builder.build());
- inspection.accept(new DexInspector(app));
+ AndroidApp app =
+ ToolHelper.runR8(
+ builder.build(),
+ options -> {
+ // This test relies on that TestClass.java/Utils.check will be inlined.
+ // Its size must fit into the inlining instruction limit. For CF, the default
+ // setting (5) is just too small.
+ options.inliningInstructionLimit = 10;
+ });
+ inspection.accept(
+ new CodeInspector(
+ app,
+ options -> {
+ options.enableCfFrontend = true;
+ }));
- // Run on Art to check generated code against verifier.
- runOnArt(app, TestClass.class);
+ if (backend == Backend.DEX) {
+ // Run on Art to check generated code against verifier.
+ runOnArt(app, TestClass.class);
+ } else {
+ runOnJava(app, TestClass.class);
+ }
}
- private void validate(DexInspector inspector) {
+ public MoveStringConstantsTest(Backend backend) {
+ this.backend = backend;
+ }
+
+ private void validate(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz(TestClass.class);
assertTrue(clazz.isPresent());
@@ -53,37 +99,41 @@
clazz.method("void", "foo", ImmutableList.of(
"java.lang.String", "java.lang.String", "java.lang.String", "java.lang.String"));
assertTrue(methodThrowToBeInlined.isPresent());
- validateSequence(methodThrowToBeInlined.iterateInstructions(),
+ assert (backend == Backend.DEX || backend == Backend.CF);
+ Predicate<InstructionSubject> nullCheck =
+ backend == Backend.DEX
+ ? InstructionSubject::isIfEqz
+ : insn -> ((CfInstructionSubject) insn).isIfNull();
+ validateSequence(
+ methodThrowToBeInlined.iterateInstructions(),
// 'if' with "foo#1" is flipped.
- InstructionSubject::isIfEqz,
+ nullCheck,
// 'if' with "foo#2" is removed along with the constant.
// 'if' with "foo#3" is removed so now we have unconditional call.
- insn -> insn.isConstString("StringConstants::foo#3"),
+ insn -> insn.isConstString("StringConstants::foo#3", JumboStringMode.DISALLOW),
InstructionSubject::isInvokeStatic,
InstructionSubject::isThrow,
// 'if's with "foo#4" and "foo#5" are flipped, but their throwing branches
// are not moved to the end of the code (area for improvement?).
- insn -> insn.isConstString("StringConstants::foo#4"),
- InstructionSubject::isIfEqz, // Flipped if
+ insn -> insn.isConstString("StringConstants::foo#4", JumboStringMode.DISALLOW),
+ nullCheck, // Flipped if
InstructionSubject::isGoto, // Jump around throwing branch.
InstructionSubject::isInvokeStatic, // Throwing branch.
InstructionSubject::isThrow,
-
- insn -> insn.isConstString("StringConstants::foo#5"),
- InstructionSubject::isIfEqz, // Flipped if
+ insn -> insn.isConstString("StringConstants::foo#5", JumboStringMode.DISALLOW),
+ nullCheck, // Flipped if
InstructionSubject::isReturnVoid, // Final return statement.
InstructionSubject::isInvokeStatic, // Throwing branch.
InstructionSubject::isThrow,
// After 'if' with "foo#1" flipped, always throwing branch
// moved here along with the constant.
- insn -> insn.isConstString("StringConstants::foo#1"),
+ insn -> insn.isConstString("StringConstants::foo#1", JumboStringMode.DISALLOW),
InstructionSubject::isInvokeStatic,
- InstructionSubject::isThrow
- );
+ InstructionSubject::isThrow);
}
@SafeVarargs
diff --git a/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java b/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java
index 39d7f0b..aaecd58 100644
--- a/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java
+++ b/src/test/java/com/android/tools/r8/naming/ApplyMappingTest.java
@@ -21,11 +21,11 @@
import com.android.tools.r8.shaking.ProguardRuleParserException;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.FileUtils;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.InstructionSubject;
-import com.android.tools.r8.utils.dexinspector.InvokeInstructionSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
-import com.android.tools.r8.utils.dexinspector.NewInstanceInstructionSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.InvokeInstructionSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.NewInstanceInstructionSubject;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -114,8 +114,8 @@
pgConfig -> pgConfig.setApplyMappingFile(proguardMap))
.build());
- DexInspector inspector = createDexInspector(instrApp);
- MethodSubject main = inspector.clazz("applymapping044.Main").method(DexInspector.MAIN);
+ CodeInspector inspector = createDexInspector(instrApp);
+ MethodSubject main = inspector.clazz("applymapping044.Main").method(CodeInspector.MAIN);
Iterator<InvokeInstructionSubject> iterator =
main.iterateInstructions(InstructionSubject::isInvoke);
// B#m()
@@ -169,8 +169,8 @@
.build());
// Make sure the given proguard map is indeed applied.
- DexInspector inspector = createDexInspector(outputApp);
- MethodSubject main = inspector.clazz("applymapping044.Main").method(DexInspector.MAIN);
+ CodeInspector inspector = createDexInspector(outputApp);
+ MethodSubject main = inspector.clazz("applymapping044.Main").method(CodeInspector.MAIN);
Iterator<InvokeInstructionSubject> iterator =
main.iterateInstructions(InstructionSubject::isInvoke);
// B#m() -> y#n()
@@ -211,9 +211,9 @@
assertEquals("p", original_f.invokedMethod().name.toString());
}
- private static DexInspector createDexInspector(AndroidApp outputApp)
+ private static CodeInspector createDexInspector(AndroidApp outputApp)
throws IOException, ExecutionException {
- return new DexInspector(
+ return new CodeInspector(
outputApp,
o -> {
o.enableCfFrontend = true;
@@ -236,8 +236,8 @@
.build());
// Make sure the given proguard map is indeed applied.
- DexInspector inspector = createDexInspector(outputApp);
- MethodSubject main = inspector.clazz("naming001.D").method(DexInspector.MAIN);
+ CodeInspector inspector = createDexInspector(outputApp);
+ MethodSubject main = inspector.clazz("naming001.D").method(CodeInspector.MAIN);
Iterator<InvokeInstructionSubject> iterator =
main.iterateInstructions(InstructionSubject::isInvoke);
// mapping-105 simply includes: naming001.D#keep -> peek
@@ -268,8 +268,8 @@
.build());
// Make sure the given proguard map is indeed applied.
- DexInspector inspector = createDexInspector(outputApp);
- MethodSubject main = inspector.clazz("naming001.D").method(DexInspector.MAIN);
+ CodeInspector inspector = createDexInspector(outputApp);
+ MethodSubject main = inspector.clazz("naming001.D").method(CodeInspector.MAIN);
Iterator<InstructionSubject> iterator = main.iterateInstructions();
// naming001.E is renamed to a.a, so first instruction must be: new-instance La/a;
@@ -300,7 +300,11 @@
private R8Command.Builder getCommandForInstrumentation(
Path out, Path flag, Path mainApp, Path instrApp) throws IOException {
return R8Command.builder()
- .addLibraryFiles(ToolHelper.getDefaultAndroidJar(), mainApp)
+ .addLibraryFiles(
+ backend == Backend.DEX
+ ? ToolHelper.getDefaultAndroidJar()
+ : ToolHelper.getJava8RuntimeJar(),
+ mainApp)
.addProgramFiles(instrApp)
.setOutput(out, backend == Backend.DEX ? OutputMode.DexIndexed : OutputMode.ClassFile)
.addProguardConfigurationFiles(flag);
@@ -309,7 +313,10 @@
private R8Command.Builder getCommandForApps(Path out, Path flag, Path... jars)
throws IOException {
return R8Command.builder()
- .addLibraryFiles(ToolHelper.getDefaultAndroidJar())
+ .addLibraryFiles(
+ backend == Backend.DEX
+ ? ToolHelper.getDefaultAndroidJar()
+ : ToolHelper.getJava8RuntimeJar())
.addProgramFiles(jars)
.setOutput(out, backend == Backend.DEX ? OutputMode.DexIndexed : OutputMode.ClassFile)
.addProguardConfigurationFiles(flag);
diff --git a/src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java b/src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java
index 58e17d1..a9ee851 100644
--- a/src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java
+++ b/src/test/java/com/android/tools/r8/naming/IdentifierMinifierTest.java
@@ -6,28 +6,29 @@
import static com.android.tools.r8.utils.DescriptorUtils.descriptorToJavaType;
import static com.android.tools.r8.utils.DescriptorUtils.isValidJavaType;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.OutputMode;
import com.android.tools.r8.R8Command;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.code.ConstString;
-import com.android.tools.r8.code.ConstStringJumbo;
-import com.android.tools.r8.code.Instruction;
-import com.android.tools.r8.graph.Code;
import com.android.tools.r8.graph.DexEncodedField;
import com.android.tools.r8.graph.DexValue.DexValueString;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.ListUtils;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.ConstStringInstructionSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FoundMethodSubject;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject.JumboStringMode;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
+import com.google.common.collect.Streams;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
@@ -47,15 +48,20 @@
private final String appFileName;
private final List<String> keepRulesFiles;
- private final Consumer<DexInspector> inspection;
+ private final Consumer<CodeInspector> inspection;
+ private final Backend backend;
public IdentifierMinifierTest(
+ Backend backend,
String test,
List<String> keepRulesFiles,
- Consumer<DexInspector> inspection) {
- this.appFileName = ToolHelper.EXAMPLES_BUILD_DIR + test + "/classes.dex";
+ Consumer<CodeInspector> inspection) {
+ assert backend == Backend.DEX || backend == Backend.CF;
+ this.appFileName =
+ ToolHelper.EXAMPLES_BUILD_DIR + test + (backend == Backend.DEX ? "/classes.dex" : ".jar");
this.keepRulesFiles = keepRulesFiles;
this.inspection = inspection;
+ this.backend = backend;
}
private AndroidApp processedApp;
@@ -65,25 +71,34 @@
Path out = temp.getRoot().toPath();
R8Command.Builder builder =
ToolHelper.addProguardConfigurationConsumer(
- R8Command.builder(),
- pgConfig -> {
- pgConfig.setPrintMapping(true);
- pgConfig.setPrintMappingFile(out.resolve(ToolHelper.DEFAULT_PROGUARD_MAP_FILE));
- })
- .setOutput(out, OutputMode.DexIndexed)
- .addProguardConfigurationFiles(ListUtils.map(keepRulesFiles, Paths::get))
- .addLibraryFiles(ToolHelper.getDefaultAndroidJar());
+ R8Command.builder(),
+ pgConfig -> {
+ pgConfig.setPrintMapping(true);
+ pgConfig.setPrintMappingFile(out.resolve(ToolHelper.DEFAULT_PROGUARD_MAP_FILE));
+ })
+ .setOutput(out, backend == Backend.DEX ? OutputMode.DexIndexed : OutputMode.ClassFile)
+ .addProguardConfigurationFiles(ListUtils.map(keepRulesFiles, Paths::get));
+ if (backend == Backend.DEX) {
+ builder.addLibraryFiles(ToolHelper.getDefaultAndroidJar());
+ } else if (backend == Backend.CF) {
+ builder.addLibraryFiles(ToolHelper.getJava8RuntimeJar());
+ }
ToolHelper.getAppBuilder(builder).addProgramFiles(Paths.get(appFileName));
processedApp = ToolHelper.runR8(builder.build(), o -> o.debug = false);
}
@Test
public void identiferMinifierTest() throws Exception {
- DexInspector dexInspector = new DexInspector(processedApp);
- inspection.accept(dexInspector);
+ CodeInspector codeInspector =
+ new CodeInspector(
+ processedApp,
+ options -> {
+ options.enableCfFrontend = true;
+ });
+ inspection.accept(codeInspector);
}
- @Parameters(name = "test: {0} keep: {1}")
+ @Parameters(name = "[{0}] test: {1} keep: {2}")
public static Collection<Object[]> data() {
List<String> tests = Arrays.asList(
"adaptclassstrings",
@@ -92,7 +107,7 @@
"getmembers",
"identifiernamestring");
- Map<String, Consumer<DexInspector>> inspections = new HashMap<>();
+ Map<String, Consumer<CodeInspector>> inspections = new HashMap<>();
inspections.put("adaptclassstrings:keep-rules-1.txt", IdentifierMinifierTest::test1_rule1);
inspections.put("adaptclassstrings:keep-rules-2.txt", IdentifierMinifierTest::test1_rule2);
inspections.put(
@@ -103,25 +118,38 @@
inspections.put("identifiernamestring:keep-rules-2.txt", IdentifierMinifierTest::test2_rule2);
inspections.put("identifiernamestring:keep-rules-3.txt", IdentifierMinifierTest::test2_rule3);
- return NamingTestBase.createTests(tests, inspections);
+ Collection<Object[]> parameters = NamingTestBase.createTests(tests, inspections);
+
+ // Duplicate parameters for each backend.
+ List<Object[]> parametersWithBackend = new ArrayList<>();
+ for (Backend backend : Backend.values()) {
+ for (Object[] row : parameters) {
+ Object[] newRow = new Object[row.length + 1];
+ newRow[0] = backend;
+ System.arraycopy(row, 0, newRow, 1, row.length);
+ parametersWithBackend.add(newRow);
+ }
+ }
+
+ return parametersWithBackend;
}
// Without -adaptclassstrings
- private static void test1_rule1(DexInspector inspector) {
+ private static void test1_rule1(CodeInspector inspector) {
ClassSubject mainClass = inspector.clazz("adaptclassstrings.Main");
- MethodSubject main = mainClass.method(DexInspector.MAIN);
- Code mainCode = main.getMethod().getCode();
- verifyPresenceOfConstString(mainCode.asDexCode().instructions);
- int renamedYetFoundIdentifierCount =
- countRenamedClassIdentifier(inspector, mainCode.asDexCode().instructions);
+ MethodSubject main = mainClass.method(CodeInspector.MAIN);
+ assertTrue(main instanceof FoundMethodSubject);
+ FoundMethodSubject foundMain = (FoundMethodSubject) main;
+ verifyPresenceOfConstString(foundMain);
+ int renamedYetFoundIdentifierCount = countRenamedClassIdentifier(inspector, foundMain);
assertEquals(0, renamedYetFoundIdentifierCount);
ClassSubject aClass = inspector.clazz("adaptclassstrings.A");
MethodSubject bar = aClass.method("void", "bar", ImmutableList.of());
- Code barCode = bar.getMethod().getCode();
- verifyPresenceOfConstString(barCode.asDexCode().instructions);
- renamedYetFoundIdentifierCount =
- countRenamedClassIdentifier(inspector, barCode.asDexCode().instructions);
+ assertTrue(bar instanceof FoundMethodSubject);
+ FoundMethodSubject foundBar = (FoundMethodSubject) bar;
+ verifyPresenceOfConstString(foundBar);
+ renamedYetFoundIdentifierCount = countRenamedClassIdentifier(inspector, foundBar);
assertEquals(0, renamedYetFoundIdentifierCount);
renamedYetFoundIdentifierCount =
@@ -130,21 +158,21 @@
}
// With -adaptclassstrings *.*A
- private static void test1_rule2(DexInspector inspector) {
+ private static void test1_rule2(CodeInspector inspector) {
ClassSubject mainClass = inspector.clazz("adaptclassstrings.Main");
- MethodSubject main = mainClass.method(DexInspector.MAIN);
- Code mainCode = main.getMethod().getCode();
- verifyPresenceOfConstString(mainCode.asDexCode().instructions);
- int renamedYetFoundIdentifierCount =
- countRenamedClassIdentifier(inspector, mainCode.asDexCode().instructions);
+ MethodSubject main = mainClass.method(CodeInspector.MAIN);
+ assertTrue(main instanceof FoundMethodSubject);
+ FoundMethodSubject foundMain = (FoundMethodSubject) main;
+ verifyPresenceOfConstString(foundMain);
+ int renamedYetFoundIdentifierCount = countRenamedClassIdentifier(inspector, foundMain);
assertEquals(0, renamedYetFoundIdentifierCount);
ClassSubject aClass = inspector.clazz("adaptclassstrings.A");
MethodSubject bar = aClass.method("void", "bar", ImmutableList.of());
- Code barCode = bar.getMethod().getCode();
- verifyPresenceOfConstString(barCode.asDexCode().instructions);
- renamedYetFoundIdentifierCount =
- countRenamedClassIdentifier(inspector, barCode.asDexCode().instructions);
+ assertTrue(bar instanceof FoundMethodSubject);
+ FoundMethodSubject foundBar = (FoundMethodSubject) bar;
+ verifyPresenceOfConstString(foundBar);
+ renamedYetFoundIdentifierCount = countRenamedClassIdentifier(inspector, foundBar);
assertEquals(1, renamedYetFoundIdentifierCount);
renamedYetFoundIdentifierCount =
@@ -152,64 +180,66 @@
assertEquals(1, renamedYetFoundIdentifierCount);
}
- private static void test_atomicfieldupdater(DexInspector inspector) {
+ private static void test_atomicfieldupdater(CodeInspector inspector) {
ClassSubject mainClass = inspector.clazz("atomicfieldupdater.Main");
- MethodSubject main = mainClass.method(DexInspector.MAIN);
- Code mainCode = main.getMethod().getCode();
- verifyPresenceOfConstString(mainCode.asDexCode().instructions);
+ MethodSubject main = mainClass.method(CodeInspector.MAIN);
+ assertTrue(main instanceof FoundMethodSubject);
+ FoundMethodSubject foundMain = (FoundMethodSubject) main;
+ verifyPresenceOfConstString(foundMain);
ClassSubject a = inspector.clazz("atomicfieldupdater.A");
- Set<Instruction> constStringInstructions =
- getRenamedMemberIdentifierConstStrings(a, mainCode.asDexCode().instructions);
+ Set<InstructionSubject> constStringInstructions =
+ getRenamedMemberIdentifierConstStrings(a, foundMain);
assertEquals(3, constStringInstructions.size());
}
- private static void test_forname(DexInspector inspector) {
+ private static void test_forname(CodeInspector inspector) {
ClassSubject mainClass = inspector.clazz("forname.Main");
- MethodSubject main = mainClass.method(DexInspector.MAIN);
- Code mainCode = main.getMethod().getCode();
- verifyPresenceOfConstString(mainCode.asDexCode().instructions);
- int renamedYetFoundIdentifierCount =
- countRenamedClassIdentifier(inspector, mainCode.asDexCode().instructions);
+ MethodSubject main = mainClass.method(CodeInspector.MAIN);
+ assertTrue(main instanceof FoundMethodSubject);
+ FoundMethodSubject foundMain = (FoundMethodSubject) main;
+ verifyPresenceOfConstString(foundMain);
+ int renamedYetFoundIdentifierCount = countRenamedClassIdentifier(inspector, foundMain);
assertEquals(1, renamedYetFoundIdentifierCount);
}
- private static void test_getmembers(DexInspector inspector) {
+ private static void test_getmembers(CodeInspector inspector) {
ClassSubject mainClass = inspector.clazz("getmembers.Main");
- MethodSubject main = mainClass.method(DexInspector.MAIN);
- Code mainCode = main.getMethod().getCode();
- verifyPresenceOfConstString(mainCode.asDexCode().instructions);
+ MethodSubject main = mainClass.method(CodeInspector.MAIN);
+ assertTrue(main instanceof FoundMethodSubject);
+ FoundMethodSubject foundMain = (FoundMethodSubject) main;
+ verifyPresenceOfConstString(foundMain);
ClassSubject a = inspector.clazz("getmembers.A");
- Set<Instruction> constStringInstructions =
- getRenamedMemberIdentifierConstStrings(a, mainCode.asDexCode().instructions);
+ Set<InstructionSubject> constStringInstructions =
+ getRenamedMemberIdentifierConstStrings(a, foundMain);
assertEquals(2, constStringInstructions.size());
ClassSubject b = inspector.clazz("getmembers.B");
MethodSubject inliner = b.method("java.lang.String", "inliner", ImmutableList.of());
- Code inlinerCode = inliner.getMethod().getCode();
- constStringInstructions =
- getRenamedMemberIdentifierConstStrings(a, inlinerCode.asDexCode().instructions);
+ assertTrue(inliner instanceof FoundMethodSubject);
+ FoundMethodSubject foundInliner = (FoundMethodSubject) inliner;
+ constStringInstructions = getRenamedMemberIdentifierConstStrings(a, foundInliner);
assertEquals(1, constStringInstructions.size());
}
// Without -identifiernamestring
- private static void test2_rule1(DexInspector inspector) {
+ private static void test2_rule1(CodeInspector inspector) {
ClassSubject mainClass = inspector.clazz("identifiernamestring.Main");
- MethodSubject main = mainClass.method(DexInspector.MAIN);
- Code mainCode = main.getMethod().getCode();
- verifyPresenceOfConstString(mainCode.asDexCode().instructions);
- int renamedYetFoundIdentifierCount =
- countRenamedClassIdentifier(inspector, mainCode.asDexCode().instructions);
+ MethodSubject main = mainClass.method(CodeInspector.MAIN);
+ assertTrue(main instanceof FoundMethodSubject);
+ FoundMethodSubject foundMain = (FoundMethodSubject) main;
+ verifyPresenceOfConstString(foundMain);
+ int renamedYetFoundIdentifierCount = countRenamedClassIdentifier(inspector, foundMain);
assertEquals(0, renamedYetFoundIdentifierCount);
ClassSubject aClass = inspector.clazz("identifiernamestring.A");
MethodSubject aInit =
aClass.method("void", "<init>", ImmutableList.of());
- Code initCode = aInit.getMethod().getCode();
- verifyPresenceOfConstString(initCode.asDexCode().instructions);
- renamedYetFoundIdentifierCount =
- countRenamedClassIdentifier(inspector, initCode.asDexCode().instructions);
+ assertTrue(aInit instanceof FoundMethodSubject);
+ FoundMethodSubject foundAInit = (FoundMethodSubject) aInit;
+ verifyPresenceOfConstString(foundAInit);
+ renamedYetFoundIdentifierCount = countRenamedClassIdentifier(inspector, foundAInit);
assertEquals(0, renamedYetFoundIdentifierCount);
renamedYetFoundIdentifierCount =
@@ -218,24 +248,22 @@
}
// With -identifiernamestring for annotations and name-based filters
- private static void test2_rule2(DexInspector inspector) {
+ private static void test2_rule2(CodeInspector inspector) {
ClassSubject mainClass = inspector.clazz("identifiernamestring.Main");
- MethodSubject main = mainClass.method(DexInspector.MAIN);
- assertTrue(main.isPresent());
- Code mainCode = main.getMethod().getCode();
- assertTrue(mainCode.isDexCode());
- verifyPresenceOfConstString(mainCode.asDexCode().instructions);
- int renamedYetFoundIdentifierCount =
- countRenamedClassIdentifier(inspector, mainCode.asDexCode().instructions);
+ MethodSubject main = mainClass.method(CodeInspector.MAIN);
+ assertTrue(main instanceof FoundMethodSubject);
+ FoundMethodSubject foundMain = (FoundMethodSubject) main;
+ verifyPresenceOfConstString(foundMain);
+ int renamedYetFoundIdentifierCount = countRenamedClassIdentifier(inspector, foundMain);
assertEquals(1, renamedYetFoundIdentifierCount);
ClassSubject aClass = inspector.clazz("identifiernamestring.A");
MethodSubject aInit =
aClass.method("void", "<init>", ImmutableList.of());
- Code initCode = aInit.getMethod().getCode();
- verifyPresenceOfConstString(initCode.asDexCode().instructions);
- renamedYetFoundIdentifierCount =
- countRenamedClassIdentifier(inspector, initCode.asDexCode().instructions);
+ assertTrue(aInit instanceof FoundMethodSubject);
+ FoundMethodSubject foundAInit = (FoundMethodSubject) aInit;
+ verifyPresenceOfConstString(foundAInit);
+ renamedYetFoundIdentifierCount = countRenamedClassIdentifier(inspector, foundAInit);
assertEquals(1, renamedYetFoundIdentifierCount);
renamedYetFoundIdentifierCount =
@@ -244,62 +272,54 @@
}
// With -identifiernamestring for reflective methods
- private static void test2_rule3(DexInspector inspector) {
+ private static void test2_rule3(CodeInspector inspector) {
ClassSubject mainClass = inspector.clazz("identifiernamestring.Main");
- MethodSubject main = mainClass.method(DexInspector.MAIN);
- assertTrue(main.isPresent());
- Code mainCode = main.getMethod().getCode();
- assertTrue(mainCode.isDexCode());
- verifyPresenceOfConstString(mainCode.asDexCode().instructions);
+ MethodSubject main = mainClass.method(CodeInspector.MAIN);
+ assertTrue(main instanceof FoundMethodSubject);
+ FoundMethodSubject foundMain = (FoundMethodSubject) main;
+ verifyPresenceOfConstString(foundMain);
ClassSubject b = inspector.clazz("identifiernamestring.B");
- Set<Instruction> constStringInstructions =
- getRenamedMemberIdentifierConstStrings(b, mainCode.asDexCode().instructions);
+ Set<InstructionSubject> constStringInstructions =
+ getRenamedMemberIdentifierConstStrings(b, foundMain);
assertEquals(2, constStringInstructions.size());
}
- private static void verifyPresenceOfConstString(Instruction[] instructions) {
- boolean presence =
- Arrays.stream(instructions)
- .anyMatch(instr -> instr instanceof ConstString || instr instanceof ConstStringJumbo);
- assertTrue(presence);
+ private static void verifyPresenceOfConstString(FoundMethodSubject method) {
+ assertTrue(
+ method
+ .iterateInstructions(instruction -> instruction.isConstString(JumboStringMode.ALLOW))
+ .hasNext());
}
- private static String retrieveString(Instruction instr) {
- if (instr instanceof ConstString) {
- ConstString cnst = (ConstString) instr;
- return cnst.getString().toString();
- } else if (instr instanceof ConstStringJumbo) {
- ConstStringJumbo cnst = (ConstStringJumbo) instr;
- return cnst.getString().toString();
- }
- return null;
- }
-
- private static Stream<Instruction> getConstStringInstructions(Instruction[] instructions) {
- return Arrays.stream(instructions)
- .filter(instr -> instr instanceof ConstString || instr instanceof ConstStringJumbo);
+ private static Stream<InstructionSubject> getConstStringInstructions(FoundMethodSubject method) {
+ return Streams.stream(method.iterateInstructions())
+ .filter(instr -> instr.isConstString(JumboStringMode.ALLOW));
}
private static int countRenamedClassIdentifier(
- DexInspector inspector, Instruction[] instructions) {
- return getConstStringInstructions(instructions)
- .reduce(0, (cnt, instr) -> {
- String cnstString = retrieveString(instr);
- assertNotNull(cnstString);
- if (isValidJavaType(cnstString)) {
- ClassSubject classSubject = inspector.clazz(cnstString);
- if (classSubject.isRenamed()
- && descriptorToJavaType(classSubject.getFinalDescriptor()).equals(cnstString)) {
- return cnt + 1;
- }
- }
- return cnt;
- }, Integer::sum);
+ CodeInspector inspector, FoundMethodSubject method) {
+ return getConstStringInstructions(method)
+ .reduce(
+ 0,
+ (cnt, instr) -> {
+ assert (instr instanceof ConstStringInstructionSubject);
+ String cnstString =
+ ((ConstStringInstructionSubject) instr).getString().toSourceString();
+ if (isValidJavaType(cnstString)) {
+ ClassSubject classSubject = inspector.clazz(cnstString);
+ if (classSubject.isRenamed()
+ && descriptorToJavaType(classSubject.getFinalDescriptor()).equals(cnstString)) {
+ return cnt + 1;
+ }
+ }
+ return cnt;
+ },
+ Integer::sum);
}
private static int countRenamedClassIdentifier(
- DexInspector inspector, DexEncodedField[] fields) {
+ CodeInspector inspector, DexEncodedField[] fields) {
return Arrays.stream(fields)
.filter(encodedField -> encodedField.getStaticValue() instanceof DexValueString)
.reduce(0, (cnt, encodedField) -> {
@@ -316,22 +336,27 @@
}, Integer::sum);
}
- private static Set<Instruction> getRenamedMemberIdentifierConstStrings(
- ClassSubject clazz, Instruction[] instructions) {
- Set<Instruction> result = Sets.newIdentityHashSet();
- getConstStringInstructions(instructions).forEach(instr -> {
- String cnstString = retrieveString(instr);
- clazz.forAllMethods(foundMethodSubject -> {
- if (foundMethodSubject.getFinalSignature().name.equals(cnstString)) {
- result.add(instr);
- }
- });
- clazz.forAllFields(foundFieldSubject -> {
- if (foundFieldSubject.getFinalSignature().name.equals(cnstString)) {
- result.add(instr);
- }
- });
- });
+ private static Set<InstructionSubject> getRenamedMemberIdentifierConstStrings(
+ ClassSubject clazz, FoundMethodSubject method) {
+ Set<InstructionSubject> result = Sets.newIdentityHashSet();
+ getConstStringInstructions(method)
+ .forEach(
+ instr -> {
+ String cnstString =
+ ((ConstStringInstructionSubject) instr).getString().toSourceString();
+ clazz.forAllMethods(
+ foundMethodSubject -> {
+ if (foundMethodSubject.getFinalSignature().name.equals(cnstString)) {
+ result.add(instr);
+ }
+ });
+ clazz.forAllFields(
+ foundFieldSubject -> {
+ if (foundFieldSubject.getFinalSignature().name.equals(cnstString)) {
+ result.add(instr);
+ }
+ });
+ });
return result;
}
diff --git a/src/test/java/com/android/tools/r8/naming/IdentifierNameStringMarkerTest.java b/src/test/java/com/android/tools/r8/naming/IdentifierNameStringMarkerTest.java
index 41e514a..28884cc 100644
--- a/src/test/java/com/android/tools/r8/naming/IdentifierNameStringMarkerTest.java
+++ b/src/test/java/com/android/tools/r8/naming/IdentifierNameStringMarkerTest.java
@@ -26,9 +26,9 @@
import com.android.tools.r8.smali.SmaliBuilder;
import com.android.tools.r8.smali.SmaliBuilder.MethodSignature;
import com.android.tools.r8.smali.SmaliTestBase;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FieldSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FieldSubject;
import com.google.common.collect.ImmutableList;
import java.util.List;
import org.junit.Test;
@@ -52,7 +52,7 @@
"-identifiernamestring class " + CLASS_NAME + " { java.lang.String aClassName; }",
"-keep class " + CLASS_NAME,
"-dontoptimize");
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -84,7 +84,7 @@
"-identifiernamestring class " + CLASS_NAME + " { java.lang.String aClassName; }",
"-keep class " + CLASS_NAME,
"-dontoptimize");
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -126,7 +126,7 @@
"-keep class " + CLASS_NAME,
"-keep,allowobfuscation class " + BOO,
"-dontoptimize");
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -163,7 +163,7 @@
"-identifiernamestring class " + CLASS_NAME + " { static java.lang.String sClassName; }",
"-keep class " + CLASS_NAME,
"-dontoptimize");
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -194,7 +194,7 @@
"-identifiernamestring class " + CLASS_NAME + " { static java.lang.String sClassName; }",
"-keep class " + CLASS_NAME,
"-dontoptimize");
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -232,7 +232,7 @@
"-keep class " + CLASS_NAME,
"-keep,allowobfuscation class " + BOO,
"-dontoptimize");
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -262,7 +262,7 @@
"-identifiernamestring class " + CLASS_NAME + " { static java.lang.String sClassName; }",
"-keep class " + CLASS_NAME + " { static java.lang.String sClassName; }",
"-dontshrink");
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -284,7 +284,7 @@
"-keep class " + CLASS_NAME + " { static java.lang.String sClassName; }",
"-keep,allowobfuscation class " + BOO,
"-dontshrink");
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -308,7 +308,7 @@
"-keep class " + CLASS_NAME + " { static java.lang.String sFieldName; }",
"-keep,allowobfuscation class " + BOO + " { <fields>; }",
"-dontshrink");
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -332,7 +332,7 @@
"-keep class " + CLASS_NAME + " { static java.lang.String sMethodName; }",
"-keep,allowobfuscation class " + BOO + " { <methods>; }",
"-dontshrink");
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -362,7 +362,7 @@
List<String> pgConfigs = ImmutableList.of(
"-identifiernamestring class " + CLASS_NAME + " { static void foo(...); }",
"-keep class " + CLASS_NAME);
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -404,7 +404,7 @@
List<String> pgConfigs = ImmutableList.of(
"-identifiernamestring class " + CLASS_NAME + " { static void foo(...); }",
"-keep class " + CLASS_NAME);
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -450,7 +450,7 @@
"-identifiernamestring class " + CLASS_NAME + " { static void foo(...); }",
"-keep class " + CLASS_NAME,
"-keep,allowobfuscation class " + BOO);
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -504,7 +504,7 @@
+ "}",
"-keep class " + CLASS_NAME,
"-keep class R { *; }");
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -554,7 +554,7 @@
+ "}",
"-keep class " + CLASS_NAME,
"-keep,allowobfuscation class R { *; }");
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -611,7 +611,7 @@
+ "}",
"-keep class " + CLASS_NAME,
"-keep class R { *; }");
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -672,7 +672,7 @@
+ "}",
"-keep class " + CLASS_NAME,
"-keep,allowobfuscation class R { *; }");
- DexInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
+ CodeInspector inspector = getInspectorAfterRunR8(builder, pgConfigs);
ClassSubject clazz = inspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
@@ -696,8 +696,8 @@
assertNotEquals("foo", constString.getString().toString());
}
- private DexInspector getInspectorAfterRunR8(
+ private CodeInspector getInspectorAfterRunR8(
SmaliBuilder builder, List<String> proguardConfigurations) throws Exception {
- return new DexInspector(runR8(builder, proguardConfigurations));
+ return new CodeInspector(runR8(builder, proguardConfigurations));
}
}
diff --git a/src/test/java/com/android/tools/r8/naming/LambdaRenamingTestRunner.java b/src/test/java/com/android/tools/r8/naming/LambdaRenamingTestRunner.java
index c7c74e9..02bca3a 100644
--- a/src/test/java/com/android/tools/r8/naming/LambdaRenamingTestRunner.java
+++ b/src/test/java/com/android/tools/r8/naming/LambdaRenamingTestRunner.java
@@ -20,7 +20,6 @@
import com.android.tools.r8.utils.FileUtils;
import java.io.IOException;
import java.nio.file.Path;
-import java.nio.file.Paths;
import org.junit.Before;
import org.junit.Test;
@@ -129,7 +128,7 @@
Path outPg = temp.getRoot().toPath().resolve(outName);
ProcessResult proguardResult =
ToolHelper.runProguard6Raw(
- inputJar, outPg, Paths.get(ToolHelper.JAVA_8_RUNTIME), pgConfig, null);
+ inputJar, outPg, ToolHelper.getJava8RuntimeJar(), pgConfig, null);
System.out.println(proguardResult.stdout);
if (proguardResult.exitCode != 0) {
System.out.println(proguardResult.stderr);
diff --git a/src/test/java/com/android/tools/r8/naming/MinifierClassSignatureTest.java b/src/test/java/com/android/tools/r8/naming/MinifierClassSignatureTest.java
index e081f18..a5bbdf6 100644
--- a/src/test/java/com/android/tools/r8/naming/MinifierClassSignatureTest.java
+++ b/src/test/java/com/android/tools/r8/naming/MinifierClassSignatureTest.java
@@ -4,8 +4,8 @@
package com.android.tools.r8.naming;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isRenamed;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isRenamed;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
@@ -29,8 +29,8 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.graph.invokesuper.Consumer;
import com.android.tools.r8.origin.Origin;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.util.Arrays;
@@ -303,12 +303,12 @@
public void runTest(
ImmutableMap<String, String> signatures,
Consumer<DiagnosticsChecker> diagnostics,
- Consumer<DexInspector> inspect)
+ Consumer<CodeInspector> inspect)
throws Exception {
DiagnosticsChecker checker = new DiagnosticsChecker();
assert (backend == Backend.CF || backend == Backend.DEX);
- DexInspector inspector =
- new DexInspector(
+ CodeInspector inspector =
+ new CodeInspector(
ToolHelper.runR8(
R8Command.builder(checker)
.addClassProgramData(dumpSimple(signatures.get("Simple")), Origin.unknown())
@@ -376,7 +376,7 @@
private void testSingleClass(String name, String signature,
Consumer<DiagnosticsChecker> diagnostics,
- Consumer<DexInspector> inspector)
+ Consumer<CodeInspector> inspector)
throws Exception {
ImmutableMap<String, String> signatures = ImmutableMap.of(name, signature);
runTest(signatures, diagnostics, inspector);
@@ -390,7 +390,7 @@
assertEquals(0, checker.warnings.size());
}
- private void noInspection(DexInspector inspector) {
+ private void noInspection(CodeInspector inspector) {
}
private void noSignatureAttribute(ClassSubject clazz) {
diff --git a/src/test/java/com/android/tools/r8/naming/MinifierFieldSignatureTest.java b/src/test/java/com/android/tools/r8/naming/MinifierFieldSignatureTest.java
index 02ec163..c470661 100644
--- a/src/test/java/com/android/tools/r8/naming/MinifierFieldSignatureTest.java
+++ b/src/test/java/com/android/tools/r8/naming/MinifierFieldSignatureTest.java
@@ -4,8 +4,8 @@
package com.android.tools.r8.naming;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isRenamed;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isRenamed;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
@@ -30,9 +30,9 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.graph.invokesuper.Consumer;
import com.android.tools.r8.origin.Origin;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FieldSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FieldSubject;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.util.Arrays;
@@ -159,17 +159,17 @@
return cw.toByteArray();
}
- private FieldSubject lookupAnX(DexInspector inspector) {
+ private FieldSubject lookupAnX(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz("Fields");
return clazz.field("java.lang.String", "anX");
}
- private FieldSubject lookupAnArrayOfX(DexInspector inspector) {
+ private FieldSubject lookupAnArrayOfX(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz("Fields");
return clazz.field("java.lang.String[]", "anArrayOfX");
}
- private FieldSubject lookupAFieldsOfX(DexInspector inspector) {
+ private FieldSubject lookupAFieldsOfX(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz("Fields");
return clazz.field("Fields", "aFieldsOfX");
}
@@ -177,12 +177,12 @@
public void runTest(
ImmutableMap<String, String> signatures,
Consumer<DiagnosticsChecker> diagnostics,
- Consumer<DexInspector> inspect)
+ Consumer<CodeInspector> inspect)
throws Exception {
DiagnosticsChecker checker = new DiagnosticsChecker();
assert (backend == Backend.CF || backend == Backend.DEX);
- DexInspector inspector =
- new DexInspector(
+ CodeInspector inspector =
+ new CodeInspector(
ToolHelper.runR8(
R8Command.builder(checker)
.addClassProgramData(dumpFields(signatures), Origin.unknown())
@@ -242,7 +242,7 @@
private void testSingleField(String name, String signature,
Consumer<DiagnosticsChecker> diagnostics,
- Consumer<DexInspector> inspector)
+ Consumer<CodeInspector> inspector)
throws Exception {
ImmutableMap<String, String> signatures = ImmutableMap.of(name, signature);
runTest(signatures, diagnostics, inspector);
@@ -256,7 +256,7 @@
assertEquals(0, checker.warnings.size());
}
- private void noInspection(DexInspector inspector) {
+ private void noInspection(CodeInspector inspector) {
}
private void noSignatureAttribute(FieldSubject field) {
diff --git a/src/test/java/com/android/tools/r8/naming/MinifierMethodSignatureTest.java b/src/test/java/com/android/tools/r8/naming/MinifierMethodSignatureTest.java
index efc9855..aa5307d 100644
--- a/src/test/java/com/android/tools/r8/naming/MinifierMethodSignatureTest.java
+++ b/src/test/java/com/android/tools/r8/naming/MinifierMethodSignatureTest.java
@@ -4,8 +4,8 @@
package com.android.tools.r8.naming;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isRenamed;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isRenamed;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
@@ -33,9 +33,9 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.graph.invokesuper.Consumer;
import com.android.tools.r8.origin.Origin;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.util.Arrays;
@@ -178,19 +178,19 @@
return cw.toByteArray();
}
- private MethodSubject lookupGeneric(DexInspector inspector) {
+ private MethodSubject lookupGeneric(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz("Methods");
return clazz.method(
"java.lang.Throwable", "generic", ImmutableList.of("java.lang.Throwable", "Methods$Inner"));
}
- private MethodSubject lookupParameterizedReturn(DexInspector inspector) {
+ private MethodSubject lookupParameterizedReturn(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz("Methods");
return clazz.method(
"Methods$Inner", "parameterizedReturn", ImmutableList.of());
}
- private MethodSubject lookupParameterizedArguments(DexInspector inspector) {
+ private MethodSubject lookupParameterizedArguments(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz("Methods");
return clazz.method(
"void", "parameterizedArguments", ImmutableList.of("java.lang.Throwable", "Methods$Inner"));
@@ -199,12 +199,12 @@
public void runTest(
ImmutableMap<String, String> signatures,
Consumer<DiagnosticsChecker> diagnostics,
- Consumer<DexInspector> inspect)
+ Consumer<CodeInspector> inspect)
throws Exception {
DiagnosticsChecker checker = new DiagnosticsChecker();
assert (backend == Backend.CF || backend == Backend.DEX);
- DexInspector inspector =
- new DexInspector(
+ CodeInspector inspector =
+ new CodeInspector(
ToolHelper.runR8(
R8Command.builder(checker)
.addClassProgramData(dumpMethods(signatures), Origin.unknown())
@@ -263,7 +263,7 @@
private void testSingleMethod(String name, String signature,
Consumer<DiagnosticsChecker> diagnostics,
- Consumer<DexInspector> inspector)
+ Consumer<CodeInspector> inspector)
throws Exception {
ImmutableMap<String, String> signatures = ImmutableMap.of(name, signature);
runTest(signatures, diagnostics, inspector);
@@ -277,7 +277,7 @@
assertEquals(0, checker.warnings.size());
}
- private void noInspection(DexInspector inspector) {
+ private void noInspection(CodeInspector inspector) {
}
private void noSignatureAttribute(MethodSubject method) {
diff --git a/src/test/java/com/android/tools/r8/naming/WarnReflectiveAccessTest.java b/src/test/java/com/android/tools/r8/naming/WarnReflectiveAccessTest.java
index 25e2358..829cdd0 100644
--- a/src/test/java/com/android/tools/r8/naming/WarnReflectiveAccessTest.java
+++ b/src/test/java/com/android/tools/r8/naming/WarnReflectiveAccessTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.naming;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -21,8 +21,8 @@
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.KeepingDiagnosticHandler;
import com.android.tools.r8.utils.Reporter;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.lang.reflect.Method;
import java.nio.file.Path;
@@ -113,8 +113,8 @@
enableMinification, forceProguardCompatibility);
String main = WarnReflectiveAccessTestMain.class.getCanonicalName();
- DexInspector dexInspector = new DexInspector(processedApp);
- ClassSubject mainSubject = dexInspector.clazz(main);
+ CodeInspector codeInspector = new CodeInspector(processedApp);
+ ClassSubject mainSubject = codeInspector.clazz(main);
assertThat(mainSubject, isPresent());
ProcessResult javaOutput = runOnJavaRaw(main, classes);
diff --git a/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java b/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java
index 4e46637..fd38d36 100644
--- a/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java
+++ b/src/test/java/com/android/tools/r8/naming/b72391662/B72391662.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.naming.b72391662;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -17,9 +17,9 @@
import com.android.tools.r8.naming.b72391662.subpackage.OtherPackageTestClass;
import com.android.tools.r8.shaking.forceproguardcompatibility.ProguardCompatabilityTestBase;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import java.util.List;
@@ -60,9 +60,9 @@
AndroidApp app = runShrinkerRaw(shrinker, CLASSES, config);
assertEquals("123451234567\nABC\n", runOnArt(app, mainClass.getCanonicalName()));
- DexInspector dexInspector =
- isR8(shrinker) ? new DexInspector(app) : new DexInspector(app, proguardMap);
- ClassSubject testClass = dexInspector.clazz(TestClass.class);
+ CodeInspector codeInspector =
+ isR8(shrinker) ? new CodeInspector(app) : new CodeInspector(app, proguardMap);
+ ClassSubject testClass = codeInspector.clazz(TestClass.class);
assertThat(testClass, isPresent());
// Test the totally unused method.
@@ -150,9 +150,9 @@
AndroidApp app = runShrinkerRaw(shrinker, CLASSES, config);
assertEquals("123451234567\nABC\n", runOnArt(app, mainClass.getCanonicalName()));
- DexInspector dexInspector =
- isR8(shrinker) ? new DexInspector(app) : new DexInspector(app, proguardMap);
- ClassSubject testClass = dexInspector.clazz(TestClass.class);
+ CodeInspector codeInspector =
+ isR8(shrinker) ? new CodeInspector(app) : new CodeInspector(app, proguardMap);
+ ClassSubject testClass = codeInspector.clazz(TestClass.class);
assertThat(testClass, isPresent());
// Test the totally unused method.
@@ -247,9 +247,9 @@
AndroidApp app = runShrinkerRaw(shrinker, CLASSES, config);
assertEquals("123451234567\nABC\n", runOnArt(app, mainClass.getCanonicalName()));
- DexInspector dexInspector =
- isR8(shrinker) ? new DexInspector(app) : new DexInspector(app, proguardMap);
- ClassSubject testClass = dexInspector.clazz(TestClass.class);
+ CodeInspector codeInspector =
+ isR8(shrinker) ? new CodeInspector(app) : new CodeInspector(app, proguardMap);
+ ClassSubject testClass = codeInspector.clazz(TestClass.class);
assertThat(testClass, isPresent());
// Test the totally unused method.
diff --git a/src/test/java/com/android/tools/r8/naming/b80083341/B80083341.java b/src/test/java/com/android/tools/r8/naming/b80083341/B80083341.java
index 1b7d842..9791142 100644
--- a/src/test/java/com/android/tools/r8/naming/b80083341/B80083341.java
+++ b/src/test/java/com/android/tools/r8/naming/b80083341/B80083341.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.naming.b80083341;
import static com.android.tools.r8.utils.DescriptorUtils.getClassNameFromDescriptor;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@@ -12,8 +12,8 @@
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.VmTestRunner;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.List;
import org.junit.Test;
@@ -40,7 +40,7 @@
PackagePrivateClass.class, PackagePrivateClass.Itf.class, PackagePrivateClass.Impl.class
));
AndroidApp processedApp = compileWithR8(app, String.join(System.lineSeparator(), config));
- DexInspector inspector = new DexInspector(processedApp);
+ CodeInspector inspector = new CodeInspector(processedApp);
ClassSubject mainSubject = inspector.clazz(mainClass);
assertThat(mainSubject, isPresent());
diff --git a/src/test/java/com/android/tools/r8/naming/overloadaggressively/OverloadAggressivelyTest.java b/src/test/java/com/android/tools/r8/naming/overloadaggressively/OverloadAggressivelyTest.java
index 0feddfd..f289674 100644
--- a/src/test/java/com/android/tools/r8/naming/overloadaggressively/OverloadAggressivelyTest.java
+++ b/src/test/java/com/android/tools/r8/naming/overloadaggressively/OverloadAggressivelyTest.java
@@ -18,8 +18,8 @@
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import org.junit.Test;
@@ -60,8 +60,8 @@
Path out = temp.getRoot().toPath();
AndroidApp processedApp = runR8(originalApp, FieldUpdater.class, out, overloadaggressively);
- DexInspector dexInspector = new DexInspector(processedApp);
- ClassSubject a = dexInspector.clazz(A.class.getCanonicalName());
+ CodeInspector codeInspector = new CodeInspector(processedApp);
+ ClassSubject a = codeInspector.clazz(A.class.getCanonicalName());
DexEncodedField f1 = a.field("int", "f1").getField();
assertNotNull(f1);
DexEncodedField f2 = a.field("java.lang.Object", "f2").getField();
@@ -112,8 +112,8 @@
Path out = temp.getRoot().toPath();
AndroidApp processedApp = runR8(originalApp, FieldResolution.class, out, overloadaggressively);
- DexInspector dexInspector = new DexInspector(processedApp);
- ClassSubject a = dexInspector.clazz(A.class.getCanonicalName());
+ CodeInspector codeInspector = new CodeInspector(processedApp);
+ ClassSubject a = codeInspector.clazz(A.class.getCanonicalName());
DexEncodedField f1 = a.field("int", "f1").getField();
assertNotNull(f1);
DexEncodedField f3 = a.field(B.class.getCanonicalName(), "f3").getField();
@@ -157,8 +157,8 @@
Path out = temp.getRoot().toPath();
AndroidApp processedApp = runR8(originalApp, MethodResolution.class, out, overloadaggressively);
- DexInspector dexInspector = new DexInspector(processedApp);
- ClassSubject b = dexInspector.clazz(B.class.getCanonicalName());
+ CodeInspector codeInspector = new CodeInspector(processedApp);
+ ClassSubject b = codeInspector.clazz(B.class.getCanonicalName());
DexEncodedMethod m1 =
b.method("int", "getF1", ImmutableList.of()).getMethod();
assertNotNull(m1);
diff --git a/src/test/java/com/android/tools/r8/naming/overloadaggressively/ValidNameConflictTest.java b/src/test/java/com/android/tools/r8/naming/overloadaggressively/ValidNameConflictTest.java
index 6e3e30a..efead2d 100644
--- a/src/test/java/com/android/tools/r8/naming/overloadaggressively/ValidNameConflictTest.java
+++ b/src/test/java/com/android/tools/r8/naming/overloadaggressively/ValidNameConflictTest.java
@@ -14,10 +14,10 @@
import com.android.tools.r8.jasmin.JasminBuilder.ClassBuilder;
import com.android.tools.r8.jasmin.JasminTestBase;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FieldSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FieldSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import java.util.List;
@@ -94,8 +94,8 @@
"-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null);
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject clazz = dexInspector.clazz(CLASS_NAME);
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject clazz = codeInspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
FieldSubject f1 = clazz.field("java.lang.String", "same");
assertTrue(f1.isPresent());
@@ -122,8 +122,8 @@
"-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null);
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject clazz = dexInspector.clazz(CLASS_NAME);
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject clazz = codeInspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
FieldSubject f1 = clazz.field("java.lang.String", "same");
assertTrue(f1.isPresent());
@@ -152,8 +152,8 @@
"-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null);
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject clazz = dexInspector.clazz(CLASS_NAME);
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject clazz = codeInspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
FieldSubject f1 = clazz.field("java.lang.String", "same");
assertTrue(f1.isPresent());
@@ -179,8 +179,8 @@
"-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null);
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject clazz = dexInspector.clazz(CLASS_NAME);
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject clazz = codeInspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
FieldSubject f1 = clazz.field("java.lang.String", "same");
assertTrue(f1.isPresent());
@@ -207,8 +207,8 @@
"-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null);
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject clazz = dexInspector.clazz(CLASS_NAME);
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject clazz = codeInspector.clazz(CLASS_NAME);
assertTrue(clazz.isPresent());
FieldSubject f1 = clazz.field("java.lang.String", "same");
assertTrue(f1.isPresent());
@@ -263,8 +263,8 @@
"-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null);
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject clazz = dexInspector.clazz(ANOTHER_CLASS);
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject clazz = codeInspector.clazz(ANOTHER_CLASS);
assertTrue(clazz.isPresent());
MethodSubject m1 = clazz.method("java.lang.String", "same", ImmutableList.of());
assertTrue(m1.isPresent());
@@ -291,8 +291,8 @@
"-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null);
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject clazz = dexInspector.clazz(ANOTHER_CLASS);
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject clazz = codeInspector.clazz(ANOTHER_CLASS);
assertTrue(clazz.isPresent());
MethodSubject m1 = clazz.method("java.lang.String", "same", ImmutableList.of());
assertTrue(m1.isPresent());
@@ -321,8 +321,8 @@
"-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null);
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject clazz = dexInspector.clazz(ANOTHER_CLASS);
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject clazz = codeInspector.clazz(ANOTHER_CLASS);
assertTrue(clazz.isPresent());
MethodSubject m1 = clazz.method("java.lang.String", "same", ImmutableList.of());
assertTrue(m1.isPresent());
@@ -348,8 +348,8 @@
"-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null);
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject clazz = dexInspector.clazz(ANOTHER_CLASS);
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject clazz = codeInspector.clazz(ANOTHER_CLASS);
assertTrue(clazz.isPresent());
MethodSubject m1 = clazz.method("java.lang.String", "same", ImmutableList.of());
assertTrue(m1.isPresent());
@@ -376,8 +376,8 @@
"-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null);
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject clazz = dexInspector.clazz(ANOTHER_CLASS);
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject clazz = codeInspector.clazz(ANOTHER_CLASS);
assertTrue(clazz.isPresent());
MethodSubject m1 = clazz.method("java.lang.String", "same", ImmutableList.of());
assertTrue(m1.isPresent());
@@ -445,8 +445,8 @@
"-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null);
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject sup = dexInspector.clazz(SUPER_CLASS);
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject sup = codeInspector.clazz(SUPER_CLASS);
assertTrue(sup.isPresent());
MethodSubject m1 = sup.method("java.lang.String", "same", ImmutableList.of());
assertTrue(m1.isPresent());
@@ -456,7 +456,7 @@
assertFalse(m2.isRenamed());
assertEquals(m1.getFinalName(), m2.getFinalName());
- ClassSubject sub = dexInspector.clazz(ANOTHER_CLASS);
+ ClassSubject sub = codeInspector.clazz(ANOTHER_CLASS);
assertTrue(sub.isPresent());
MethodSubject subM1 = sub.method("java.lang.String", "same", ImmutableList.of());
assertTrue(subM1.isPresent());
@@ -487,8 +487,8 @@
"-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null);
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject sup = dexInspector.clazz(SUPER_CLASS);
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject sup = codeInspector.clazz(SUPER_CLASS);
assertTrue(sup.isPresent());
MethodSubject m1 = sup.method("java.lang.String", "same", ImmutableList.of());
assertTrue(m1.isPresent());
@@ -498,7 +498,7 @@
assertTrue(m2.isRenamed());
assertEquals(m1.getFinalName(), m2.getFinalName());
- ClassSubject sub = dexInspector.clazz(ANOTHER_CLASS);
+ ClassSubject sub = codeInspector.clazz(ANOTHER_CLASS);
assertTrue(sub.isPresent());
MethodSubject subM1 = sub.method("java.lang.String", "same", ImmutableList.of());
assertTrue(subM1.isPresent());
@@ -531,8 +531,8 @@
"-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null);
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject sup = dexInspector.clazz(SUPER_CLASS);
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject sup = codeInspector.clazz(SUPER_CLASS);
assertTrue(sup.isPresent());
MethodSubject m1 = sup.method("java.lang.String", "same", ImmutableList.of());
assertTrue(m1.isPresent());
@@ -542,7 +542,7 @@
assertTrue(m2.isRenamed());
assertEquals(m1.getFinalName(), m2.getFinalName());
- ClassSubject sub = dexInspector.clazz(ANOTHER_CLASS);
+ ClassSubject sub = codeInspector.clazz(ANOTHER_CLASS);
assertTrue(sub.isPresent());
MethodSubject subM1 = sub.method("java.lang.String", "same", ImmutableList.of());
assertTrue(subM1.isPresent());
@@ -572,8 +572,8 @@
"-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null);
- DexInspector dexInspector = new DexInspector(app);
- ClassSubject sup = dexInspector.clazz(SUPER_CLASS);
+ CodeInspector codeInspector = new CodeInspector(app);
+ ClassSubject sup = codeInspector.clazz(SUPER_CLASS);
assertTrue(sup.isPresent());
MethodSubject m1 = sup.method("java.lang.String", "same", ImmutableList.of());
assertTrue(m1.isPresent());
@@ -583,7 +583,7 @@
assertTrue(m2.isRenamed());
assertNotEquals(m1.getFinalName(), m2.getFinalName());
- ClassSubject sub = dexInspector.clazz(ANOTHER_CLASS);
+ ClassSubject sub = codeInspector.clazz(ANOTHER_CLASS);
assertTrue(sub.isPresent());
MethodSubject subM1 = sub.method("java.lang.String", "same", ImmutableList.of());
assertTrue(subM1.isPresent());
@@ -614,9 +614,9 @@
"-dontshrink");
AndroidApp app = compileWithR8(builder, pgConfigs, null);
- DexInspector dexInspector = new DexInspector(app);
+ CodeInspector codeInspector = new CodeInspector(app);
- ClassSubject sup = dexInspector.clazz(SUPER_CLASS);
+ ClassSubject sup = codeInspector.clazz(SUPER_CLASS);
assertTrue(sup.isPresent());
MethodSubject m1 = sup.method("java.lang.String", "same", ImmutableList.of());
assertTrue(m1.isPresent());
@@ -626,7 +626,7 @@
assertTrue(m2.isRenamed());
assertEquals(m1.getFinalName(), m2.getFinalName());
- ClassSubject sub = dexInspector.clazz(ANOTHER_CLASS);
+ ClassSubject sub = codeInspector.clazz(ANOTHER_CLASS);
assertTrue(sub.isPresent());
MethodSubject subM1 = sub.method("java.lang.String", "same", ImmutableList.of());
assertTrue(subM1.isPresent());
diff --git a/src/test/java/com/android/tools/r8/neverreturnsnormally/NeverReturnsNormallyTest.java b/src/test/java/com/android/tools/r8/neverreturnsnormally/NeverReturnsNormallyTest.java
index 8ae31f7..73dcdb3 100644
--- a/src/test/java/com/android/tools/r8/neverreturnsnormally/NeverReturnsNormallyTest.java
+++ b/src/test/java/com/android/tools/r8/neverreturnsnormally/NeverReturnsNormallyTest.java
@@ -7,31 +7,61 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.ClassFileConsumer;
import com.android.tools.r8.CompilationMode;
import com.android.tools.r8.DexIndexedConsumer;
import com.android.tools.r8.R8Command;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.cf.code.CfStackInstruction.Opcode;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.DexInstructionSubject;
-import com.android.tools.r8.utils.dexinspector.InstructionSubject;
-import com.android.tools.r8.utils.dexinspector.InvokeInstructionSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.CfInstructionSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.DexInstructionSubject;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject.JumboStringMode;
+import com.android.tools.r8.utils.codeinspector.InvokeInstructionSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Iterator;
import java.util.function.BiConsumer;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+@RunWith(Parameterized.class)
public class NeverReturnsNormallyTest extends TestBase {
+
+ private Backend backend;
+
+ @Parameters(name = "Backend: {0}")
+ public static Collection<Backend> data() {
+ return Arrays.asList(Backend.values());
+ }
+
+ public NeverReturnsNormallyTest(Backend backend) {
+ this.backend = backend;
+ }
+
private void runTest(
- BiConsumer<DexInspector, CompilationMode> inspection,
+ BiConsumer<CodeInspector, CompilationMode> inspection,
boolean enableClassInliner, CompilationMode mode) throws Exception {
R8Command.Builder builder = R8Command.builder();
builder.addProgramFiles(ToolHelper.getClassFileForTestClass(TestClass.class));
- builder.setProgramConsumer(DexIndexedConsumer.emptyConsumer());
+ assert (backend == Backend.DEX || backend == Backend.CF);
+ builder.setProgramConsumer(
+ backend == Backend.DEX
+ ? DexIndexedConsumer.emptyConsumer()
+ : ClassFileConsumer.emptyConsumer());
+ builder.addLibraryFiles(
+ backend == Backend.DEX
+ ? ToolHelper.getDefaultAndroidJar()
+ : ToolHelper.getJava8RuntimeJar());
builder.setMode(mode);
builder.addProguardConfiguration(
ImmutableList.of(
@@ -47,18 +77,28 @@
"}",
"",
"-dontobfuscate",
- "-allowaccessmodification"
- ),
+ "-allowaccessmodification"),
Origin.unknown());
- AndroidApp app = ToolHelper.runR8(builder.build(),
- opts -> opts.enableClassInlining = enableClassInliner);
- inspection.accept(new DexInspector(app), mode);
+ AndroidApp app =
+ ToolHelper.runR8(builder.build(), opts -> opts.enableClassInlining = enableClassInliner);
+ inspection.accept(
+ new CodeInspector(
+ app,
+ options -> {
+ options.enableCfFrontend = true;
+ }),
+ mode);
- // Run on Art to check generated code against verifier.
- runOnArt(app, TestClass.class);
+ if (backend == Backend.DEX) {
+ // Run on Art to check generated code against verifier.
+ runOnArt(app, TestClass.class);
+ } else {
+ runOnJava(app, TestClass.class);
+ }
}
- private void validate(DexInspector inspector, CompilationMode mode) {
+ private void validate(CodeInspector inspector, CompilationMode mode) {
+ assert (backend == Backend.DEX || backend == Backend.CF);
ClassSubject clazz = inspector.clazz(TestClass.class);
assertTrue(clazz.isPresent());
@@ -78,39 +118,34 @@
assertTrue(methodThrowToBeInlined.isPresent());
Iterator<InstructionSubject> instructions = methodThrowToBeInlined.iterateInstructions();
// Call, followed by throw null.
- assertTrue(nextInstruction(instructions).isConstString());
- InstructionSubject insn = nextInstruction(instructions);
+ InstructionSubject insn = nextInstructionSkippingCfPositionAndLabel(instructions);
+ assertTrue(insn != null && insn.isConstString(JumboStringMode.ALLOW));
+ insn = nextInstruction(instructions);
assertTrue(insn.isInvoke());
assertTrue(((InvokeInstructionSubject) insn)
.invokedMethod().name.toString().equals("throwNpe"));
- insn = nextInstruction(instructions);
- assertTrue(insn instanceof DexInstructionSubject && ((DexInstructionSubject) insn).isConst4());
- assertTrue(nextInstruction(instructions).isThrow());
- assertFalse(instructions.hasNext());
+ verifyTrailingPattern(instructions);
// Check the instruction used for testInlinedIntoVoidMethod
MethodSubject methodTestInlinedIntoVoidMethod =
clazz.method("void", "testInlinedIntoVoidMethod", ImmutableList.of());
assertTrue(methodTestInlinedIntoVoidMethod.isPresent());
instructions = methodTestInlinedIntoVoidMethod.iterateInstructions();
+ insn = nextInstructionSkippingCfPositionAndLabel(instructions);
if (mode == CompilationMode.DEBUG) {
// Not inlined call to throwToBeInlined.
- insn = nextInstruction(instructions);
assertTrue(insn.isInvoke());
assertTrue(((InvokeInstructionSubject) insn)
.invokedMethod().name.toString().equals("throwToBeInlined"));
} else {
// Inlined code from throwToBeInlined.
- assertTrue(nextInstruction(instructions).isConstString());
+ assertTrue(insn.isConstString(JumboStringMode.ALLOW));
insn = nextInstruction(instructions);
assertTrue(insn.isInvoke());
assertTrue(((InvokeInstructionSubject) insn)
.invokedMethod().name.toString().equals("throwNpe"));
}
- insn = nextInstruction(instructions);
- assertTrue(insn instanceof DexInstructionSubject && ((DexInstructionSubject) insn).isConst4());
- assertTrue(nextInstruction(instructions).isThrow());
- assertFalse(instructions.hasNext());
+ verifyTrailingPattern(instructions);
// Check the instruction used for testInlinedIntoVoidMethod
MethodSubject methodOuterTrivial =
@@ -118,14 +153,11 @@
assertTrue(methodOuterTrivial.isPresent());
instructions = methodOuterTrivial.iterateInstructions();
// Call, followed by [nop, goto]
- insn = nextInstruction(instructions);
+ insn = nextInstructionSkippingCfPositionAndLabel(instructions);
assertTrue(insn.isInvoke());
assertTrue(((InvokeInstructionSubject) insn)
.invokedMethod().name.toString().equals("innerNotReachable"));
- insn = nextInstruction(instructions);
- assertTrue(insn instanceof DexInstructionSubject && ((DexInstructionSubject) insn).isConst4());
- assertTrue(nextInstruction(instructions).isThrow());
- assertFalse(instructions.hasNext());
+ verifyTrailingPattern(instructions);
}
private InstructionSubject nextInstruction(Iterator<InstructionSubject> instructions) {
@@ -133,6 +165,39 @@
return instructions.next();
}
+ private InstructionSubject nextInstructionSkippingCfPositionAndLabel(
+ Iterator<InstructionSubject> instructions) {
+ InstructionSubject insn = null;
+ while (instructions.hasNext()) {
+ insn = instructions.next();
+ if (!(insn instanceof CfInstructionSubject)) {
+ break;
+ }
+ CfInstructionSubject cfInsn = (CfInstructionSubject) insn;
+ if (!cfInsn.isLabel() && !cfInsn.isPosition()) {
+ break;
+ }
+ }
+ return insn;
+ }
+
+ private void verifyTrailingPattern(Iterator<InstructionSubject> instructions) {
+ InstructionSubject insn = nextInstruction(instructions);
+ if (backend == Backend.DEX) {
+ assertTrue(
+ insn instanceof DexInstructionSubject && ((DexInstructionSubject) insn).isConst4());
+ } else {
+ assertTrue(insn instanceof CfInstructionSubject);
+ assertTrue(((CfInstructionSubject) insn).isStackInstruction(Opcode.Pop));
+ assertTrue(instructions.hasNext());
+ insn = instructions.next();
+ assertTrue(insn instanceof CfInstructionSubject);
+ assertTrue(((CfInstructionSubject) insn).isConstNull());
+ }
+ assertTrue(nextInstruction(instructions).isThrow());
+ assertFalse(instructions.hasNext());
+ }
+
@Test
public void test() throws Exception {
runTest(this::validate, true, CompilationMode.DEBUG);
diff --git a/src/test/java/com/android/tools/r8/regress/B76025099.java b/src/test/java/com/android/tools/r8/regress/B76025099.java
index 68f6fe0..c7a093f 100644
--- a/src/test/java/com/android/tools/r8/regress/B76025099.java
+++ b/src/test/java/com/android/tools/r8/regress/B76025099.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.regress;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@@ -20,9 +20,9 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.FileUtils;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.io.File;
import java.nio.file.Files;
@@ -104,7 +104,7 @@
private void verifyFieldAccess(AndroidApp processedApp, ProcessResult jvmOutput)
throws Exception {
- DexInspector inspector = new DexInspector(processedApp);
+ CodeInspector inspector = new CodeInspector(processedApp);
ClassSubject impl = inspector.clazz(Impl.class);
assertThat(impl, isPresent());
MethodSubject init = impl.init(ImmutableList.of("java.lang.String"));
diff --git a/src/test/java/com/android/tools/r8/regress/Regress37740372.java b/src/test/java/com/android/tools/r8/regress/Regress37740372.java
index 1d2c6fe..e6ac9f8 100644
--- a/src/test/java/com/android/tools/r8/regress/Regress37740372.java
+++ b/src/test/java/com/android/tools/r8/regress/Regress37740372.java
@@ -18,8 +18,8 @@
import com.android.tools.r8.smali.SmaliTestBase;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.AndroidAppConsumers;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.util.Base64;
import java.util.Set;
import org.junit.Test;
@@ -129,7 +129,7 @@
}
private void checkApplicationOnlyHasJavaLangObject(AndroidApp app) throws Throwable {
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
inspector.forAllClasses(this::assertIsJavaLangObjet);
}
diff --git a/src/test/java/com/android/tools/r8/regress/b111250398/B111250398.java b/src/test/java/com/android/tools/r8/regress/b111250398/B111250398.java
index abf43b2..91d8460 100644
--- a/src/test/java/com/android/tools/r8/regress/b111250398/B111250398.java
+++ b/src/test/java/com/android/tools/r8/regress/b111250398/B111250398.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.regress.b111250398;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@@ -16,10 +16,10 @@
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FieldSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FieldSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.util.Arrays;
import org.junit.Test;
@@ -236,7 +236,7 @@
.count();
}
- private void check(DexInspector inspector, int mfOnBGets, int msfOnBGets) {
+ private void check(CodeInspector inspector, int mfOnBGets, int msfOnBGets) {
ClassSubject classA = inspector.clazz(A.class);
assertThat(classA, isPresent());
MethodSubject mfOnA = classA.method("void", "mf", ImmutableList.of());
@@ -293,20 +293,20 @@
@Test
public void testSeparateCompilation() throws Exception {
- DexInspector inspector =
- new DexInspector(compileWithD8(readClasses(A.class, B.class), this::releaseMode));
+ CodeInspector inspector =
+ new CodeInspector(compileWithD8(readClasses(A.class, B.class), this::releaseMode));
check(inspector, 5, 5);
}
@Test
public void testWholeProgram() throws Exception {
- DexInspector inspector =
- new DexInspector(compileWithR8(readClasses(A.class, B.class), this::releaseMode));
+ CodeInspector inspector =
+ new CodeInspector(compileWithR8(readClasses(A.class, B.class), this::releaseMode));
check(inspector, 1, 1);
}
private void checkMixed(AndroidApp app) throws Exception{
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject classC = inspector.clazz(C.class);
assertThat(classC, isPresent());
MethodSubject totalDays = classC.method("int", "totalDays", ImmutableList.of());
@@ -341,7 +341,7 @@
}
private void checkDaggerSingleProviderGet(AndroidApp app) throws Exception {
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
MethodSubject get =
inspector.clazz(SingleCheck.class).method("java.lang.Object", "get", ImmutableList.of());
assertThat(get, isPresent());
diff --git a/src/test/java/com/android/tools/r8/regress/b69825683/Regress69825683Test.java b/src/test/java/com/android/tools/r8/regress/b69825683/Regress69825683Test.java
index 9cc17af..3421cfe 100644
--- a/src/test/java/com/android/tools/r8/regress/b69825683/Regress69825683Test.java
+++ b/src/test/java/com/android/tools/r8/regress/b69825683/Regress69825683Test.java
@@ -13,8 +13,8 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FoundClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FoundClassSubject;
import com.google.common.collect.ImmutableList;
import java.util.List;
import org.junit.Test;
@@ -34,7 +34,7 @@
Origin.unknown());
builder.setProgramConsumer(DexIndexedConsumer.emptyConsumer());
AndroidApp app = ToolHelper.runR8(builder.build(), o -> o.enableClassInlining = false);
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
List<FoundClassSubject> classes = inspector.allClasses();
// Check that the synthetic class is still present.
@@ -67,7 +67,7 @@
Origin.unknown());
builder.setProgramConsumer(DexIndexedConsumer.emptyConsumer());
AndroidApp app = ToolHelper.runR8(builder.build(), o -> o.enableClassInlining = false);
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
List<FoundClassSubject> classes = inspector.allClasses();
// Check that the synthetic class is still present.
diff --git a/src/test/java/com/android/tools/r8/regress/b77496850/B77496850.java b/src/test/java/com/android/tools/r8/regress/b77496850/B77496850.java
index 448e472..a052d86 100644
--- a/src/test/java/com/android/tools/r8/regress/b77496850/B77496850.java
+++ b/src/test/java/com/android/tools/r8/regress/b77496850/B77496850.java
@@ -15,9 +15,9 @@
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import org.junit.Test;
@@ -431,7 +431,7 @@
private void checkPathParserMethods(AndroidApp app, Class testClass, int a, int b)
throws Exception {
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
DexItemFactory factory = inspector.getFactory();
ClassSubject clazz = inspector.clazz(testClass);
MethodSubject drawArc = clazz.method(
@@ -484,7 +484,7 @@
assert compiler == Tool.R8;
app = compileWithR8(app, "-keep class * { *; }", o -> o.minApiLevel = apiLevel.getLevel());
}
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
DexItemFactory factory = inspector.getFactory();
ClassSubject clazz = inspector.clazz(testClass);
MethodSubject arcToBezier = clazz.method(
diff --git a/src/test/java/com/android/tools/r8/resolution/B77944861.java b/src/test/java/com/android/tools/r8/resolution/B77944861.java
index a35adbc..2118b44 100644
--- a/src/test/java/com/android/tools/r8/resolution/B77944861.java
+++ b/src/test/java/com/android/tools/r8/resolution/B77944861.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.resolution;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@@ -20,9 +20,9 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.FileUtils;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -64,8 +64,8 @@
ProcessResult jvmOutput = ToolHelper.runJava(ImmutableList.of(jarPath), mainName);
assertEquals(0, jvmOutput.exitCode);
AndroidApp processedApp = runR8(readJar(jarPath), SomeView.class, out);
- DexInspector dexInspector = new DexInspector(processedApp);
- ClassSubject view = dexInspector.clazz("regress_77944861.SomeView");
+ CodeInspector codeInspector = new CodeInspector(processedApp);
+ ClassSubject view = codeInspector.clazz("regress_77944861.SomeView");
assertThat(view, isPresent());
String className = "regress_77944861.inner.TopLevelPolicy$MobileIconState";
MethodSubject initView = view.method("java.lang.String", "get", ImmutableList.of(className));
diff --git a/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java b/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
index ca62dee..fff9ac3 100644
--- a/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/assertions/RemoveAssertionsTest.java
@@ -19,9 +19,9 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import java.util.function.Consumer;
@@ -149,7 +149,7 @@
ImmutableList.of(testClass),
keepMainProguardConfiguration(testClass, true, false),
options -> options.enableInlining = false);
- DexInspector x = new DexInspector(app);
+ CodeInspector x = new CodeInspector(app);
ClassSubject clazz = x.clazz(ClassWithAssertions.class);
assertTrue(clazz.isPresent());
@@ -166,6 +166,7 @@
R8Command command =
ToolHelper.prepareR8CommandBuilder(readClasses(ClassWithAssertions.class))
.setMode(CompilationMode.DEBUG)
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.setOutput(outputJar, OutputMode.ClassFile)
.build();
ToolHelper.runR8(command, consumer);
diff --git a/src/test/java/com/android/tools/r8/rewrite/longcompare/LongCompare.java b/src/test/java/com/android/tools/r8/rewrite/longcompare/LongCompare.java
index f92b1dc..16b7922 100644
--- a/src/test/java/com/android/tools/r8/rewrite/longcompare/LongCompare.java
+++ b/src/test/java/com/android/tools/r8/rewrite/longcompare/LongCompare.java
@@ -10,11 +10,11 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.ArtCommandBuilder;
import com.android.tools.r8.utils.StringUtils;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.InstructionSubject;
-import com.android.tools.r8.utils.dexinspector.InvokeInstructionSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.InvokeInstructionSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -65,8 +65,8 @@
Path dexPath = outputPath.resolve("classes.dex");
- DexInspector dexInspector = new DexInspector(dexPath);
- ClassSubject classSubject = dexInspector.clazz("rewrite.LongCompare");
+ CodeInspector codeInspector = new CodeInspector(dexPath);
+ ClassSubject classSubject = codeInspector.clazz("rewrite.LongCompare");
MethodSubject methodSubject = classSubject
.method("int", "simpleCompare", Arrays.asList("long", "long"));
// Check that exception handler is removed since it is no longer needed.
diff --git a/src/test/java/com/android/tools/r8/rewrite/longcompare/RequireNonNullRewriteTest.java b/src/test/java/com/android/tools/r8/rewrite/longcompare/RequireNonNullRewriteTest.java
index c3037f8..278bc8b 100644
--- a/src/test/java/com/android/tools/r8/rewrite/longcompare/RequireNonNullRewriteTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/longcompare/RequireNonNullRewriteTest.java
@@ -11,11 +11,11 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.ArtCommandBuilder;
import com.android.tools.r8.ToolHelper.ProcessResult;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.InstructionSubject;
-import com.android.tools.r8.utils.dexinspector.InvokeInstructionSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.InvokeInstructionSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -75,8 +75,8 @@
Path dexPath = outputPath.resolve("classes.dex");
- DexInspector dexInspector = new DexInspector(dexPath);
- ClassSubject classSubject = dexInspector.clazz("rewrite.RequireNonNull");
+ CodeInspector codeInspector = new CodeInspector(dexPath);
+ ClassSubject classSubject = codeInspector.clazz("rewrite.RequireNonNull");
MethodSubject methodSubject = classSubject
.method("java.lang.Object", "nonnullRemove", Collections.emptyList());
diff --git a/src/test/java/com/android/tools/r8/rewrite/staticvalues/StaticValuesTest.java b/src/test/java/com/android/tools/r8/rewrite/staticvalues/StaticValuesTest.java
index 5fe2abd..d3784ee 100644
--- a/src/test/java/com/android/tools/r8/rewrite/staticvalues/StaticValuesTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/staticvalues/StaticValuesTest.java
@@ -26,8 +26,8 @@
import com.android.tools.r8.smali.SmaliTestBase;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.StringUtils;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import org.junit.Test;
public class StaticValuesTest extends SmaliTestBase {
@@ -94,7 +94,7 @@
AndroidApp originalApplication = buildApplication(builder);
AndroidApp processedApplication = processApplication(originalApplication);
- DexInspector inspector = new DexInspector(processedApplication);
+ CodeInspector inspector = new CodeInspector(processedApplication);
// Test is running without tree-shaking, so the empty <clinit> is not removed.
assertTrue(
inspector.clazz("Test").clinit().getMethod().getCode().asDexCode().isEmptyVoidMethod());
@@ -178,7 +178,7 @@
AndroidApp originalApplication = buildApplication(builder);
AndroidApp processedApplication = processApplication(originalApplication);
- DexInspector inspector = new DexInspector(processedApplication);
+ CodeInspector inspector = new CodeInspector(processedApplication);
MethodSubject clinit = inspector.clazz("Test").clinit();
// Nothing changed in the class initializer.
assertEquals(5, clinit.getMethod().getCode().asDexCode().instructions.length);
@@ -219,7 +219,7 @@
AndroidApp originalApplication = buildApplication(builder);
AndroidApp processedApplication = processApplication(originalApplication);
- DexInspector inspector = new DexInspector(processedApplication);
+ CodeInspector inspector = new CodeInspector(processedApplication);
// Test is running without tree-shaking, so the empty <clinit> is not removed.
assertTrue(
inspector.clazz("Test").clinit().getMethod().getCode().asDexCode().isEmptyVoidMethod());
@@ -261,7 +261,7 @@
AndroidApp originalApplication = buildApplication(builder);
AndroidApp processedApplication = processApplication(originalApplication);
- DexInspector inspector = new DexInspector(processedApplication);
+ CodeInspector inspector = new CodeInspector(processedApplication);
// Test is running without tree-shaking, so the empty <clinit> is not removed.
assertTrue(
inspector.clazz("Test").clinit().getMethod().getCode().asDexCode().isEmptyVoidMethod());
@@ -311,7 +311,7 @@
AndroidApp originalApplication = buildApplication(builder);
AndroidApp processedApplication = processApplication(originalApplication);
- DexInspector inspector = new DexInspector(processedApplication);
+ CodeInspector inspector = new CodeInspector(processedApplication);
// Test is running without tree-shaking, so the empty <clinit> is not removed.
assertTrue(
inspector.clazz("Test").clinit().getMethod().getCode().asDexCode().isEmptyVoidMethod());
@@ -384,7 +384,7 @@
AndroidApp originalApplication = buildApplication(builder);
AndroidApp processedApplication = processApplication(originalApplication);
- DexInspector inspector = new DexInspector(processedApplication);
+ CodeInspector inspector = new CodeInspector(processedApplication);
assertTrue(inspector.clazz("Test").clinit().isPresent());
DexValue value;
@@ -471,7 +471,7 @@
AndroidApp originalApplication = buildApplication(builder);
AndroidApp processedApplication = processApplication(originalApplication);
- DexInspector inspector = new DexInspector(processedApplication);
+ CodeInspector inspector = new CodeInspector(processedApplication);
assertTrue(inspector.clazz(className).isPresent());
// Test is running without tree-shaking, so the empty <clinit> is not removed.
assertTrue(
@@ -520,7 +520,7 @@
AndroidApp originalApplication = buildApplication(builder);
AndroidApp processedApplication = processApplication(originalApplication);
- DexInspector inspector = new DexInspector(processedApplication);
+ CodeInspector inspector = new CodeInspector(processedApplication);
assertTrue(inspector.clazz(className).isPresent());
assertTrue(inspector.clazz(className).clinit().isPresent());
@@ -553,7 +553,7 @@
AndroidApp originalApplication = buildApplication(builder);
AndroidApp processedApplication = processApplication(originalApplication);
- DexInspector inspector = new DexInspector(processedApplication);
+ CodeInspector inspector = new CodeInspector(processedApplication);
MethodSubject clinit = inspector.clazz("Test").clinit();
// Nothing changed in the class initializer.
assertEquals(3, clinit.getMethod().getCode().asDexCode().instructions.length);
diff --git a/src/test/java/com/android/tools/r8/rewrite/switches/SwitchRewritingJarTest.java b/src/test/java/com/android/tools/r8/rewrite/switches/SwitchRewritingJarTest.java
index 7ea9cdd..bffcfc5 100644
--- a/src/test/java/com/android/tools/r8/rewrite/switches/SwitchRewritingJarTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/switches/SwitchRewritingJarTest.java
@@ -19,8 +19,8 @@
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.StringUtils;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.util.List;
import java.util.stream.Collectors;
@@ -282,7 +282,7 @@
appBuilder.addProgramFiles(ToolHelper.getClassFileForTestClass(CheckSwitchInTestClass.class));
AndroidApp app = compileWithR8(appBuilder.build());
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
MethodSubject method = inspector.clazz("Test").method("int", "test", ImmutableList.of("int"));
DexCode code = method.getMethod().getCode().asDexCode();
diff --git a/src/test/java/com/android/tools/r8/rewrite/switchmaps/RewriteSwitchMapsTest.java b/src/test/java/com/android/tools/r8/rewrite/switchmaps/RewriteSwitchMapsTest.java
index 7eae052..b2bcb4e 100644
--- a/src/test/java/com/android/tools/r8/rewrite/switchmaps/RewriteSwitchMapsTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/switchmaps/RewriteSwitchMapsTest.java
@@ -10,7 +10,7 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.nio.file.Paths;
import java.util.List;
@@ -45,7 +45,7 @@
.setProgramConsumer(DexIndexedConsumer.emptyConsumer())
.build();
AndroidApp result = ToolHelper.runR8(command);
- DexInspector inspector = new DexInspector(result);
+ CodeInspector inspector = new CodeInspector(result);
Assert.assertFalse(inspector.clazz(SWITCHMAP_CLASS_NAME).isPresent());
}
}
diff --git a/src/test/java/com/android/tools/r8/shaking/ClassKindTest.java b/src/test/java/com/android/tools/r8/shaking/ClassKindTest.java
index 9242842..89cbbbe 100644
--- a/src/test/java/com/android/tools/r8/shaking/ClassKindTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ClassKindTest.java
@@ -9,7 +9,7 @@
import com.android.tools.r8.shaking.classkinds.Enum;
import com.android.tools.r8.shaking.classkinds.Interface;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Sets;
import java.util.Collection;
@@ -59,7 +59,7 @@
Assert.assertTrue(classes.isEmpty());
return;
}
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
HashSet<java.lang.Class<?>> expected = Sets.newHashSet(classes);
CLASSES_TO_INCLUDE.forEach(c -> {
Assert.assertEquals(expected.contains(c), inspector.clazz(c).isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/FieldTypeTest.java b/src/test/java/com/android/tools/r8/shaking/FieldTypeTest.java
index 5fa8edc..2b4865d 100644
--- a/src/test/java/com/android/tools/r8/shaking/FieldTypeTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/FieldTypeTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.shaking;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@@ -17,8 +17,8 @@
import com.android.tools.r8.naming.MemberNaming.FieldSignature;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import org.junit.Test;
@@ -126,7 +126,7 @@
assertThat(artResult.stdout, containsString(impl2.name));
assertEquals(-1, artResult.stderr.indexOf("DoFieldPut"));
- DexInspector inspector = new DexInspector(processedApp);
+ CodeInspector inspector = new CodeInspector(processedApp);
ClassSubject itf1Subject = inspector.clazz(itf1.name);
assertThat(itf1Subject, isPresent());
}
diff --git a/src/test/java/com/android/tools/r8/shaking/InstantiatedLambdasTestRunner.java b/src/test/java/com/android/tools/r8/shaking/InstantiatedLambdasTestRunner.java
index 474af4d..12ef651 100644
--- a/src/test/java/com/android/tools/r8/shaking/InstantiatedLambdasTestRunner.java
+++ b/src/test/java/com/android/tools/r8/shaking/InstantiatedLambdasTestRunner.java
@@ -19,7 +19,6 @@
import com.android.tools.r8.utils.FileUtils;
import java.io.IOException;
import java.nio.file.Path;
-import java.nio.file.Paths;
import org.junit.Before;
import org.junit.Test;
@@ -122,7 +121,7 @@
Path outPg = temp.getRoot().toPath().resolve(outName);
ProcessResult proguardResult =
ToolHelper.runProguard6Raw(
- inputJar, outPg, Paths.get(ToolHelper.JAVA_8_RUNTIME), pgConfig, null);
+ inputJar, outPg, ToolHelper.getJava8RuntimeJar(), pgConfig, null);
System.out.println(proguardResult.stdout);
if (proguardResult.exitCode != 0) {
System.out.println(proguardResult.stderr);
diff --git a/src/test/java/com/android/tools/r8/shaking/LibraryProvidedProguardRulesTest.java b/src/test/java/com/android/tools/r8/shaking/LibraryProvidedProguardRulesTest.java
index c6ccc61..59098d3 100644
--- a/src/test/java/com/android/tools/r8/shaking/LibraryProvidedProguardRulesTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/LibraryProvidedProguardRulesTest.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.shaking;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
@@ -14,6 +14,7 @@
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import com.android.tools.r8.ClassFileConsumer;
import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.DataResourceProvider;
import com.android.tools.r8.DexIndexedConsumer;
@@ -31,7 +32,7 @@
import com.android.tools.r8.origin.PathOrigin;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.DescriptorUtils;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import com.google.common.io.ByteStreams;
import com.google.common.io.CharSource;
@@ -39,12 +40,16 @@
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.jar.JarOutputStream;
import java.util.zip.ZipEntry;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
class A {
private static String buildClassName(String className) {
@@ -65,7 +70,20 @@
}
+@RunWith(Parameterized.class)
public class LibraryProvidedProguardRulesTest extends TestBase {
+
+ private Backend backend;
+
+ @Parameters(name = "Backend: {0}")
+ public static Collection<Backend> data() {
+ return Arrays.asList(Backend.values());
+ }
+
+ public LibraryProvidedProguardRulesTest(Backend backend) {
+ this.backend = backend;
+ }
+
private void addTextJarEntry(JarOutputStream out, String name, String content) throws Exception {
out.putNextEntry(new ZipEntry(name));
ByteStreams.copy(
@@ -84,11 +102,19 @@
}
try {
- R8Command command = (handler != null ? R8Command.builder(handler) : R8Command.builder())
- .addProgramFiles(jar)
- .setProgramConsumer(DexIndexedConsumer.emptyConsumer())
- .build();
- return ToolHelper.runR8(command);
+ R8Command.Builder builder =
+ (handler != null ? R8Command.builder(handler) : R8Command.builder()).addProgramFiles(jar);
+ if (backend == Backend.DEX) {
+ builder
+ .setProgramConsumer(DexIndexedConsumer.emptyConsumer())
+ .addLibraryFiles(ToolHelper.getDefaultAndroidJar());
+ } else {
+ assert backend == Backend.CF;
+ builder
+ .setProgramConsumer(ClassFileConsumer.emptyConsumer())
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar());
+ }
+ return ToolHelper.runR8(builder.build());
} catch (CompilationFailedException e) {
assertNotNull(handler);
return null;
@@ -103,7 +129,7 @@
@Test
public void keepOnlyA() throws Exception {
AndroidApp app = runTest("-keep class " + A.class.getTypeName() +" {}", null);
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
assertThat(inspector.clazz(A.class), isPresent());
assertThat(inspector.clazz(B.class), not(isPresent()));
}
@@ -111,7 +137,7 @@
@Test
public void keepOnlyB() throws Exception {
AndroidApp app = runTest("-keep class **B {}", null);
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
assertThat(inspector.clazz(A.class), not(isPresent()));
assertThat(inspector.clazz(B.class), isPresent());
}
@@ -119,7 +145,7 @@
@Test
public void keepBoth() throws Exception {
AndroidApp app = runTest("-keep class ** {}", null);
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
assertThat(inspector.clazz(A.class), isPresent());
assertThat(inspector.clazz(B.class), isPresent());
}
@@ -127,7 +153,7 @@
@Test
public void multipleFiles() throws Exception {
AndroidApp app = runTest(ImmutableList.of("-keep class **A {}", "-keep class **B {}"), null);
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
assertThat(inspector.clazz(A.class), isPresent());
assertThat(inspector.clazz(B.class), isPresent());
}
@@ -186,10 +212,19 @@
public void throwingDataResourceProvider() throws Exception {
DiagnosticsChecker checker = new DiagnosticsChecker();
try {
- R8Command command = R8Command.builder(checker)
- .addProgramResourceProvider(new TestProvider())
- .setProgramConsumer(DexIndexedConsumer.emptyConsumer())
- .build();
+ R8Command.Builder builder =
+ R8Command.builder(checker).addProgramResourceProvider(new TestProvider());
+ if (backend == Backend.DEX) {
+ builder
+ .setProgramConsumer(DexIndexedConsumer.emptyConsumer())
+ .addLibraryFiles(ToolHelper.getDefaultAndroidJar());
+ } else {
+ assert backend == Backend.CF;
+ builder
+ .setProgramConsumer(ClassFileConsumer.emptyConsumer())
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar());
+ }
+ builder.build();
fail("Should not succeed");
} catch (CompilationFailedException e) {
DiagnosticsChecker.checkDiagnostic(
diff --git a/src/test/java/com/android/tools/r8/shaking/PrintUsageTest.java b/src/test/java/com/android/tools/r8/shaking/PrintUsageTest.java
index bce2e8b..3b5a830 100644
--- a/src/test/java/com/android/tools/r8/shaking/PrintUsageTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/PrintUsageTest.java
@@ -41,8 +41,14 @@
@RunWith(Parameterized.class)
public class PrintUsageTest {
+ private enum Backend {
+ CF,
+ DEX
+ }
+
private static final String PRINT_USAGE_FILE_SUFFIX = "-print-usage.txt";
+ private final Backend backend;
private final String test;
private final String programFile;
private final List<String> keepRulesFiles;
@@ -52,9 +58,11 @@
public TemporaryFolder temp = ToolHelper.getTemporaryFolderForTest();
public PrintUsageTest(
+ Backend backend,
String test,
List<String> keepRulesFiles,
Consumer<PrintUsageInspector> inspection) {
+ this.backend = backend;
this.test = test;
this.programFile = ToolHelper.EXAMPLES_BUILD_DIR + test + ".jar";
this.keepRulesFiles = keepRulesFiles;
@@ -64,22 +72,29 @@
@Before
public void runR8andGetPrintUsage() throws Exception {
Path out = temp.getRoot().toPath();
- R8Command command =
+ R8Command.Builder builder =
ToolHelper.addProguardConfigurationConsumer(
R8Command.builder(),
pgConfig -> {
pgConfig.setPrintUsage(true);
pgConfig.setPrintUsageFile(out.resolve(test + PRINT_USAGE_FILE_SUFFIX));
})
- .setOutput(out, OutputMode.DexIndexed)
.addProgramFiles(Paths.get(programFile))
- .addProguardConfigurationFiles(ListUtils.map(keepRulesFiles, Paths::get))
- .addLibraryFiles(ToolHelper.getDefaultAndroidJar())
- .build();
- ToolHelper.runR8(command, options -> {
- // Disable inlining to make this test not depend on inlining decisions.
- options.enableInlining = false;
- });
+ .addProguardConfigurationFiles(ListUtils.map(keepRulesFiles, Paths::get));
+
+ if (backend == Backend.DEX) {
+ builder
+ .setOutput(out, OutputMode.DexIndexed)
+ .addLibraryFiles(ToolHelper.getDefaultAndroidJar());
+ } else {
+ builder.setOutput(out, OutputMode.ClassFile).addLibraryFiles(ToolHelper.getJava8RuntimeJar());
+ }
+ ToolHelper.runR8(
+ builder.build(),
+ options -> {
+ // Disable inlining to make this test not depend on inlining decisions.
+ options.enableInlining = false;
+ });
}
@Test
@@ -106,6 +121,7 @@
inspections.put("shaking12:keep-rules-printusage.txt", PrintUsageTest::inspectShaking12);
List<Object[]> testCases = new ArrayList<>();
+ for (Backend backend : Backend.values()) {
Set<String> usedInspections = new HashSet<>();
for (String test : tests) {
File[] keepFiles = new File(ToolHelper.EXAMPLES_DIR + test)
@@ -115,11 +131,13 @@
Consumer<PrintUsageInspector> inspection =
getTestOptionalParameter(inspections, usedInspections, test, keepName);
if (inspection != null) {
- testCases.add(new Object[]{test, ImmutableList.of(keepFile.getPath()), inspection});
+ testCases.add(
+ new Object[] {backend, test, ImmutableList.of(keepFile.getPath()), inspection});
}
}
}
- assert usedInspections.size() == inspections.size();
+ assert usedInspections.size() == inspections.size();
+ }
return testCases;
}
diff --git a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
index 22b6790..748866e 100644
--- a/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ProguardConfigurationParserTest.java
@@ -31,7 +31,7 @@
import com.android.tools.r8.utils.InternalOptions.PackageObfuscationMode;
import com.android.tools.r8.utils.KeepingDiagnosticHandler;
import com.android.tools.r8.utils.Reporter;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.io.File;
import java.io.IOException;
@@ -1844,7 +1844,7 @@
ImmutableList.of(proguardConfig, additionalProguardConfig),
null);
assertEquals(0, result.exitCode);
- DexInspector proguardInspector = new DexInspector(readJar(proguardedJar));
+ CodeInspector proguardInspector = new CodeInspector(readJar(proguardedJar));
assertEquals(1, proguardInspector.allClasses().size());
}
}
@@ -1867,7 +1867,7 @@
ImmutableList.of(proguardConfig, additionalProguardConfig),
null);
assertEquals(0, result.exitCode);
- DexInspector proguardInspector = new DexInspector(readJar(proguardedJar));
+ CodeInspector proguardInspector = new CodeInspector(readJar(proguardedJar));
assertEquals(1, proguardInspector.allClasses().size());
}
}
diff --git a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
index 24d4ba5..9eb7815 100644
--- a/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/TreeShakingTest.java
@@ -17,10 +17,10 @@
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.ListUtils;
import com.android.tools.r8.utils.TestDescriptionWatcher;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FoundFieldSubject;
-import com.android.tools.r8.utils.dexinspector.FoundMethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FoundFieldSubject;
+import com.android.tools.r8.utils.codeinspector.FoundMethodSubject;
import com.google.common.collect.ImmutableList;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -137,7 +137,7 @@
});
}
- protected static void checkSameStructure(DexInspector ref, DexInspector inspector) {
+ protected static void checkSameStructure(CodeInspector ref, CodeInspector inspector) {
ref.forAllClasses(refClazz -> checkSameStructure(refClazz,
inspector.clazz(refClazz.getDexClass().toSourceString())));
}
@@ -167,18 +167,18 @@
}
protected void runTest(
- Consumer<DexInspector> inspection,
+ Consumer<CodeInspector> inspection,
BiConsumer<String, String> outputComparator,
- BiConsumer<DexInspector, DexInspector> dexComparator,
+ BiConsumer<CodeInspector, CodeInspector> dexComparator,
List<String> keepRulesFiles)
throws Exception {
runTest(inspection, outputComparator, dexComparator, keepRulesFiles, null);
}
protected void runTest(
- Consumer<DexInspector> inspection,
+ Consumer<CodeInspector> inspection,
BiConsumer<String, String> outputComparator,
- BiConsumer<DexInspector, DexInspector> dexComparator,
+ BiConsumer<CodeInspector, CodeInspector> dexComparator,
List<String> keepRulesFiles,
Consumer<InternalOptions> optionsConsumer)
throws Exception {
@@ -193,7 +193,7 @@
if (backend == Backend.CF) {
jarLibraries =
ImmutableList.of(
- Paths.get(ToolHelper.JAVA_8_RUNTIME),
+ ToolHelper.getJava8RuntimeJar(),
Paths.get(ToolHelper.EXAMPLES_BUILD_DIR + "shakinglib.jar"));
} else {
jarLibraries =
@@ -218,8 +218,8 @@
Assert.assertEquals(resultInput.toString(), resultOutput.toString());
}
if (inspection != null) {
- DexInspector inspector =
- new DexInspector(
+ CodeInspector inspector =
+ new CodeInspector(
out,
minify.isMinify()
? proguardMap.toString()
@@ -249,8 +249,8 @@
}
if (dexComparator != null) {
- DexInspector ref = new DexInspector(Paths.get(originalDex));
- DexInspector inspector = new DexInspector(out,
+ CodeInspector ref = new CodeInspector(Paths.get(originalDex));
+ CodeInspector inspector = new CodeInspector(out,
minify.isMinify() ? proguardMap.toString()
: null);
dexComparator.accept(ref, inspector);
@@ -263,7 +263,7 @@
}
if (inspection != null) {
- DexInspector inspector = new DexInspector(out,
+ CodeInspector inspector = new CodeInspector(out,
minify.isMinify() ? proguardMap.toString()
: null);
inspection.accept(inspector);
diff --git a/src/test/java/com/android/tools/r8/shaking/defaultmethods/DefaultMethodsTest.java b/src/test/java/com/android/tools/r8/shaking/defaultmethods/DefaultMethodsTest.java
index d739348..eab5197 100644
--- a/src/test/java/com/android/tools/r8/shaking/defaultmethods/DefaultMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/defaultmethods/DefaultMethodsTest.java
@@ -15,15 +15,15 @@
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.util.List;
import org.junit.Test;
public class DefaultMethodsTest extends TestBase {
- private void runTest(List<String> additionalKeepRules, Consumer<DexInspector> inspection)
+ private void runTest(List<String> additionalKeepRules, Consumer<CodeInspector> inspection)
throws Exception {
R8Command.Builder builder = R8Command.builder();
builder.addProgramFiles(ToolHelper.getClassFileForTestClass(InterfaceWithDefaultMethods.class));
@@ -40,20 +40,20 @@
Origin.unknown());
builder.addProguardConfiguration(additionalKeepRules, Origin.unknown());
AndroidApp app = ToolHelper.runR8(builder.build(), o -> o.enableClassInlining = false);
- inspection.accept(new DexInspector(app));
+ inspection.accept(new CodeInspector(app));
}
- private void interfaceNotKept(DexInspector inspector) {
+ private void interfaceNotKept(CodeInspector inspector) {
assertFalse(inspector.clazz(InterfaceWithDefaultMethods.class).isPresent());
}
- private void defaultMethodNotKept(DexInspector inspector) {
+ private void defaultMethodNotKept(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz(InterfaceWithDefaultMethods.class);
assertTrue(clazz.isPresent());
assertFalse(clazz.method("int", "method", ImmutableList.of()).isPresent());
}
- private void defaultMethodKept(DexInspector inspector) {
+ private void defaultMethodKept(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz(InterfaceWithDefaultMethods.class);
assertTrue(clazz.isPresent());
MethodSubject method = clazz.method("int", "method", ImmutableList.of());
@@ -61,7 +61,7 @@
assertFalse(method.isAbstract());
}
- private void defaultMethodAbstract(DexInspector inspector) {
+ private void defaultMethodAbstract(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz(InterfaceWithDefaultMethods.class);
assertTrue(clazz.isPresent());
MethodSubject method = clazz.method("int", "method", ImmutableList.of());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/InliningClassVersionTest.java b/src/test/java/com/android/tools/r8/shaking/examples/InliningClassVersionTest.java
index 7fcb318..ba0d468 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/InliningClassVersionTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/InliningClassVersionTest.java
@@ -17,7 +17,6 @@
import com.android.tools.r8.utils.DescriptorUtils;
import com.google.common.io.ByteStreams;
import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
@@ -147,7 +146,7 @@
ToolHelper.runR8(
R8Command.builder()
.addProgramFiles(inputJar)
- .addLibraryFiles(Paths.get(ToolHelper.JAVA_8_RUNTIME))
+ .addLibraryFiles(ToolHelper.getJava8RuntimeJar())
.addProguardConfiguration(keepRule, Origin.unknown())
.setOutput(outputJar, OutputMode.ClassFile)
.build());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking11Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking11Test.java
index f7889ee..f65c1d4 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking11Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking11Test.java
@@ -5,7 +5,7 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -53,24 +53,24 @@
ImmutableList.of("src/test/examples/shaking11/keep-rules-keep-method.txt"));
}
- private static void shaking11OnlyOneClassKept(DexInspector dexInspector) {
- Assert.assertFalse(dexInspector.clazz("shaking11.Subclass").isPresent());
- Assert.assertTrue(dexInspector.clazz("shaking11.SubclassWithMethod").isPresent());
+ private static void shaking11OnlyOneClassKept(CodeInspector codeInspector) {
+ Assert.assertFalse(codeInspector.clazz("shaking11.Subclass").isPresent());
+ Assert.assertTrue(codeInspector.clazz("shaking11.SubclassWithMethod").isPresent());
}
- private static void shaking11BothMethodsKept(DexInspector dexInspector) {
+ private static void shaking11BothMethodsKept(CodeInspector codeInspector) {
Assert.assertFalse(
- dexInspector
+ codeInspector
.clazz("shaking11.Subclass")
.method("void", "aMethod", Collections.emptyList())
.isPresent());
Assert.assertTrue(
- dexInspector
+ codeInspector
.clazz("shaking11.SuperClass")
.method("void", "aMethod", Collections.emptyList())
.isPresent());
Assert.assertTrue(
- dexInspector
+ codeInspector
.clazz("shaking11.SubclassWithMethod")
.method("void", "aMethod", Collections.emptyList())
.isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java
index d58d975..710635d 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking12Test.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -54,7 +54,7 @@
ImmutableList.of("src/test/examples/shaking12/keep-rules-printusage.txt"));
}
- private static void shaking12OnlyInstantiatedClassesHaveConstructors(DexInspector inspector) {
+ private static void shaking12OnlyInstantiatedClassesHaveConstructors(CodeInspector inspector) {
ClassSubject animalClass = inspector.clazz("shaking12.AnimalClass");
Assert.assertTrue(animalClass.isPresent());
Assert.assertFalse(animalClass.method("void", "<init>", Collections.emptyList()).isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking13Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking13Test.java
index 6cfcd87..2157cd3 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking13Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking13Test.java
@@ -5,11 +5,11 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FieldAccessInstructionSubject;
-import com.android.tools.r8.utils.dexinspector.InstructionSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FieldAccessInstructionSubject;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -49,7 +49,7 @@
ImmutableList.of("src/test/examples/shaking13/keep-rules.txt"));
}
- private static void shaking13EnsureFieldWritesCorrect(DexInspector inspector) {
+ private static void shaking13EnsureFieldWritesCorrect(CodeInspector inspector) {
ClassSubject mainClass = inspector.clazz("shaking13.Shaking");
MethodSubject testMethod = mainClass.method("void", "fieldTest", Collections.emptyList());
Assert.assertTrue(testMethod.isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking14Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking14Test.java
index 8ea939a..820afc2 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking14Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking14Test.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -44,7 +44,7 @@
ImmutableList.of("src/test/examples/shaking14/keep-rules.txt"));
}
- private static void shaking14EnsureRightStaticMethodsLive(DexInspector inspector) {
+ private static void shaking14EnsureRightStaticMethodsLive(CodeInspector inspector) {
ClassSubject superclass = inspector.clazz("shaking14.Superclass");
Assert.assertFalse(superclass.method("int", "aMethod", ImmutableList.of("int")).isPresent());
Assert.assertFalse(
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java
index 1651fca..1dd353e 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking15Test.java
@@ -5,10 +5,10 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FieldSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FieldSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -48,7 +48,7 @@
ImmutableList.of("src/test/examples/shaking15/keep-rules.txt"));
}
- private static void shaking15testDictionary(DexInspector inspector) {
+ private static void shaking15testDictionary(CodeInspector inspector) {
inspector.forAllClasses((clazz) -> checkClassAndMemberInDictionary(clazz));
}
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking17Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking17Test.java
index ba01d2f..fac36d6 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking17Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking17Test.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -45,7 +45,7 @@
ImmutableList.of("src/test/examples/shaking17/keep-rules.txt"));
}
- private static void abstractMethodRemains(DexInspector inspector) {
+ private static void abstractMethodRemains(CodeInspector inspector) {
ClassSubject programClass = inspector.clazz("shaking17.AbstractProgramClass");
Assert.assertTrue(programClass.isPresent());
Assert.assertTrue(
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking18Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking18Test.java
index 26ea045..b691046 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking18Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking18Test.java
@@ -5,7 +5,7 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -43,7 +43,7 @@
ImmutableList.of("src/test/examples/shaking18/keep-rules.txt"));
}
- private static void unusedRemoved(DexInspector inspector) {
+ private static void unusedRemoved(CodeInspector inspector) {
// TODO(b/80455722): Change to assertFalse when tree-shaking detects this case.
Assert.assertTrue(
"DerivedUnused should be removed", inspector.clazz("shaking18.DerivedUnused").isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking19Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking19Test.java
index 0c662bb..f30bcac 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking19Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking19Test.java
@@ -3,15 +3,15 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.shaking.examples;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertThat;
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -52,7 +52,7 @@
opt -> opt.enableClassMerging = false);
}
- private static void unusedRemoved(DexInspector inspector) {
+ private static void unusedRemoved(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz("shaking19.Shaking$A");
assertThat(clazz, isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking1Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking1Test.java
index 6b90ec9..17cfb7f 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking1Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking1Test.java
@@ -6,8 +6,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
import com.android.tools.r8.utils.DescriptorUtils;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -165,7 +165,7 @@
"src/test/proguard/valid/empty.flags"));
}
- private static void shaking1IsCorrectlyRepackaged(DexInspector inspector) {
+ private static void shaking1IsCorrectlyRepackaged(CodeInspector inspector) {
inspector.forAllClasses(
clazz -> {
String descriptor = clazz.getFinalDescriptor();
@@ -176,7 +176,7 @@
});
}
- private static void shaking1HasNoClassUnused(DexInspector inspector) {
+ private static void shaking1HasNoClassUnused(CodeInspector inspector) {
Assert.assertFalse(inspector.clazz("shaking1.Unused").isPresent());
ClassSubject used = inspector.clazz("shaking1.Used");
Assert.assertTrue(used.isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java
index 4c2cfe1..5f87781 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking2Test.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -60,7 +60,7 @@
null, null, null, ImmutableList.of("src/test/examples/shaking2/keep-rules-printusage.txt"));
}
- private static void shaking2SuperClassIsAbstract(DexInspector inspector) {
+ private static void shaking2SuperClassIsAbstract(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz("shaking2.SuperClass");
Assert.assertTrue(clazz.isAbstract());
Assert.assertTrue(clazz.method("void", "virtualMethod", Collections.emptyList()).isAbstract());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking3Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking3Test.java
index 3996622..6ed0099 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking3Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking3Test.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -89,12 +89,12 @@
ImmutableList.of("src/test/examples/shaking3/keep-no-abstract-classes.txt"));
}
- private static void shaking3HasNoPrivateClass(DexInspector inspector) {
+ private static void shaking3HasNoPrivateClass(CodeInspector inspector) {
Assert.assertTrue(inspector.clazz("shaking3.B").isPresent());
Assert.assertFalse(inspector.clazz("shaking3.AnAbstractClass").isPresent());
}
- private static void shaking3HasNoClassB(DexInspector inspector) {
+ private static void shaking3HasNoClassB(CodeInspector inspector) {
Assert.assertFalse(inspector.clazz("shaking3.B").isPresent());
ClassSubject classA = inspector.clazz("shaking3.A");
Assert.assertTrue(classA.isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking5Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking5Test.java
index ad13070..7484255 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking5Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking5Test.java
@@ -5,7 +5,7 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -44,7 +44,7 @@
ImmutableList.of("src/test/examples/shaking5/keep-rules.txt"));
}
- private static void shaking5Inspection(DexInspector inspector) {
+ private static void shaking5Inspection(CodeInspector inspector) {
Assert.assertFalse(
inspector
.clazz("shaking5.Superclass")
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking6Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking6Test.java
index 9fb2029..f5733cc 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking6Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking6Test.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -72,7 +72,7 @@
ImmutableList.of("src/test/examples/shaking6/keep-public.txt"));
}
- private static void hasNoPublicMethodsButPrivate(DexInspector inspector) {
+ private static void hasNoPublicMethodsButPrivate(CodeInspector inspector) {
inspector.forAllClasses(
clazz ->
clazz.forAllMethods(
@@ -88,7 +88,7 @@
.isPresent());
}
- private static void hasOnlyIntJustAMethod(DexInspector inspector) {
+ private static void hasOnlyIntJustAMethod(CodeInspector inspector) {
Assert.assertFalse(
inspector
.clazz("shaking6.Superclass")
@@ -105,7 +105,7 @@
subclass.method("int", "justAMethod", Collections.singletonList("double")).isPresent());
}
- private static void hasNoPrivateJustAMethod(DexInspector inspector) {
+ private static void hasNoPrivateJustAMethod(CodeInspector inspector) {
Assert.assertFalse(
inspector
.clazz("shaking6.Superclass")
@@ -122,7 +122,7 @@
subclass.method("int", "justAMethod", Collections.singletonList("double")).isPresent());
}
- private static void hasNoPrivateMethods(DexInspector inspector) {
+ private static void hasNoPrivateMethods(CodeInspector inspector) {
inspector.forAllClasses(
clazz ->
clazz.forAllMethods(
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking7Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking7Test.java
index b44f3aa..9d2faf3 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking7Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking7Test.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -71,7 +71,7 @@
ImmutableList.of("src/test/examples/shaking7/keep-public-theIntField-fields.txt"));
}
- private static void shaking7HasOnlyDoubleFields(DexInspector inspector) {
+ private static void shaking7HasOnlyDoubleFields(CodeInspector inspector) {
inspector.forAllClasses(
clazz -> {
clazz.forAllFields(
@@ -86,7 +86,7 @@
Assert.assertFalse(inspector.clazz("shaking7.Liar").field("int", "theDoubleField").isPresent());
}
- private static void shaking7HasOnlyPublicFieldsNamedTheIntField(DexInspector inspector) {
+ private static void shaking7HasOnlyPublicFieldsNamedTheIntField(CodeInspector inspector) {
inspector.forAllClasses(
clazz -> {
clazz.forAllFields(
@@ -104,7 +104,7 @@
Assert.assertTrue(liar.field("double", "theIntField").isPresent());
}
- private static void shaking7HasOnlyPublicFields(DexInspector inspector) {
+ private static void shaking7HasOnlyPublicFields(CodeInspector inspector) {
inspector.forAllClasses(
clazz -> {
clazz.forAllFields(
@@ -120,7 +120,7 @@
Assert.assertTrue(inspector.clazz("shaking7.Liar").field("int", "theDoubleField").isPresent());
}
- private static void shaking7HasOnlyPublicFieldsNamedTheDoubleField(DexInspector inspector) {
+ private static void shaking7HasOnlyPublicFieldsNamedTheDoubleField(CodeInspector inspector) {
inspector.forAllClasses(
clazz -> {
clazz.forAllFields(
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking8Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking8Test.java
index 02cda2a..b957c64 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking8Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking8Test.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -50,7 +50,7 @@
null, null, null, ImmutableList.of("src/test/examples/shaking8/keep-rules-printusage.txt"));
}
- private static void shaking8ThingClassIsAbstractAndEmpty(DexInspector inspector) {
+ private static void shaking8ThingClassIsAbstractAndEmpty(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz("shaking8.Thing");
Assert.assertTrue(clazz.isAbstract());
clazz.forAllMethods((method) -> Assert.fail());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking9Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking9Test.java
index 18a1141..e64abe1 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking9Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShaking9Test.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -50,7 +50,7 @@
null, null, null, ImmutableList.of("src/test/examples/shaking9/keep-rules-printusage.txt"));
}
- private static void shaking9OnlySuperMethodsKept(DexInspector inspector) {
+ private static void shaking9OnlySuperMethodsKept(CodeInspector inspector) {
ClassSubject superclass = inspector.clazz("shaking9.Superclass");
Assert.assertTrue(superclass.isAbstract());
Assert.assertTrue(superclass.method("void", "aMethod", ImmutableList.of()).isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAnnotationremovalTest.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAnnotationremovalTest.java
index dfe1806..d7d45f0 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAnnotationremovalTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingAnnotationremovalTest.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -68,7 +68,7 @@
});
}
- private static void annotationRemovalHasNoInnerClassAnnotations(DexInspector inspector) {
+ private static void annotationRemovalHasNoInnerClassAnnotations(CodeInspector inspector) {
ClassSubject outer = inspector.clazz("annotationremoval.OuterClass");
Assert.assertTrue(outer.isPresent());
Assert.assertTrue(outer.getDexClass().getInnerClasses().isEmpty());
@@ -86,7 +86,7 @@
Assert.assertTrue(local.getDexClass().getInnerClasses().isEmpty());
}
- private static void annotationRemovalHasAllInnerClassAnnotations(DexInspector inspector) {
+ private static void annotationRemovalHasAllInnerClassAnnotations(CodeInspector inspector) {
ClassSubject outer = inspector.clazz("annotationremoval.OuterClass");
Assert.assertTrue(outer.isPresent());
Assert.assertFalse(outer.getDexClass().getInnerClasses().isEmpty());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingEnumprotoTest.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingEnumprotoTest.java
index e544edf..7f211db 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingEnumprotoTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingEnumprotoTest.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -44,7 +44,7 @@
ImmutableList.of("src/test/examples/enumproto/keep-rules.txt"));
}
- private static void enumprotoUnusedFieldsAreGone(DexInspector inspector) {
+ private static void enumprotoUnusedFieldsAreGone(CodeInspector inspector) {
ClassSubject protoClass = inspector.clazz("enumproto.GeneratedEnumProto$Enum");
Assert.assertTrue(protoClass.isPresent());
Assert.assertFalse(protoClass.field("int", "id_").isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingNestedproto1Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingNestedproto1Test.java
index 6650860..16b5f59 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingNestedproto1Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingNestedproto1Test.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -44,7 +44,7 @@
ImmutableList.of("src/test/examples/nestedproto1/keep-rules.txt"));
}
- private static void nestedproto1UnusedFieldsAreGone(DexInspector inspector) {
+ private static void nestedproto1UnusedFieldsAreGone(CodeInspector inspector) {
ClassSubject protoClass = inspector.clazz("nestedproto1.GeneratedNestedProto$Outer");
Assert.assertTrue(protoClass.isPresent());
Assert.assertFalse(protoClass.field("int", "id_").isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingNestedproto2Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingNestedproto2Test.java
index d7a8af5..a679810 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingNestedproto2Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingNestedproto2Test.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -44,7 +44,7 @@
ImmutableList.of("src/test/examples/nestedproto2/keep-rules.txt"));
}
- private static void nestedproto2UnusedFieldsAreGone(DexInspector inspector) {
+ private static void nestedproto2UnusedFieldsAreGone(CodeInspector inspector) {
ClassSubject protoClass = inspector.clazz("nestedproto2.GeneratedNestedProto$Outer");
Assert.assertTrue(protoClass.isPresent());
Assert.assertTrue(protoClass.field("int", "id_").isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingOneofprotoTest.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingOneofprotoTest.java
index 18f4648..e38258c 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingOneofprotoTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingOneofprotoTest.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -44,7 +44,7 @@
ImmutableList.of("src/test/examples/oneofproto/keep-rules.txt"));
}
- private static void oneofprotoUnusedFieldsAreGone(DexInspector inspector) {
+ private static void oneofprotoUnusedFieldsAreGone(CodeInspector inspector) {
ClassSubject protoClass = inspector.clazz("oneofproto.GeneratedOneOfProto$Oneof");
Assert.assertTrue(protoClass.isPresent());
Assert.assertFalse(protoClass.field("int", "id_").isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingRepeatedprotoTest.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingRepeatedprotoTest.java
index e55d822..923cf34 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingRepeatedprotoTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingRepeatedprotoTest.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -44,7 +44,7 @@
ImmutableList.of("src/test/examples/repeatedproto/keep-rules.txt"));
}
- private static void repeatedUnusedFieldsAreGone(DexInspector inspector) {
+ private static void repeatedUnusedFieldsAreGone(CodeInspector inspector) {
ClassSubject protoClass = inspector.clazz("repeatedproto.GeneratedRepeatedProto$Repeated");
Assert.assertTrue(protoClass.isPresent());
Assert.assertFalse(protoClass.field("int", "id_").isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingSimpleproto1Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingSimpleproto1Test.java
index 2b49803..64e3839 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingSimpleproto1Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingSimpleproto1Test.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -44,7 +44,7 @@
ImmutableList.of("src/test/examples/simpleproto1/keep-rules.txt"));
}
- private static void simpleproto1UnusedFieldIsGone(DexInspector inspector) {
+ private static void simpleproto1UnusedFieldIsGone(CodeInspector inspector) {
ClassSubject protoClass = inspector.clazz("simpleproto1.GeneratedSimpleProto$Simple");
Assert.assertTrue(protoClass.isPresent());
Assert.assertFalse(protoClass.field("boolean", "other_").isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingSimpleproto2Test.java b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingSimpleproto2Test.java
index ce9659b..5304dae 100644
--- a/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingSimpleproto2Test.java
+++ b/src/test/java/com/android/tools/r8/shaking/examples/TreeShakingSimpleproto2Test.java
@@ -5,8 +5,8 @@
import com.android.tools.r8.TestBase.MinifyMode;
import com.android.tools.r8.shaking.TreeShakingTest;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -44,7 +44,7 @@
ImmutableList.of("src/test/examples/simpleproto2/keep-rules.txt"));
}
- private static void simpleproto2UnusedFieldsAreGone(DexInspector inspector) {
+ private static void simpleproto2UnusedFieldsAreGone(CodeInspector inspector) {
ClassSubject protoClass = inspector.clazz("simpleproto2.GeneratedSimpleProto$Simple");
Assert.assertTrue(protoClass.isPresent());
Assert.assertFalse(protoClass.field("int", "id_").isPresent());
diff --git a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java
index 31c97ca..51baed2 100644
--- a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ForceProguardCompatibilityTest.java
@@ -38,10 +38,10 @@
import com.android.tools.r8.utils.DefaultDiagnosticsHandler;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.Reporter;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FieldSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FieldSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import it.unimi.dsi.fastutil.objects.Object2BooleanArrayMap;
@@ -56,7 +56,7 @@
private void test(Class mainClass, Class mentionedClass, boolean forceProguardCompatibility)
throws Exception {
String proguardConfig = keepMainProguardConfiguration(mainClass, true, false);
- DexInspector inspector = new DexInspector(
+ CodeInspector inspector = new CodeInspector(
compileWithR8(
ImmutableList.of(mainClass, mentionedClass),
proguardConfig,
@@ -103,7 +103,7 @@
}
builder.setProgramConsumer(DexIndexedConsumer.emptyConsumer());
- DexInspector inspector = new DexInspector(ToolHelper.runR8(builder.build()));
+ CodeInspector inspector = new CodeInspector(ToolHelper.runR8(builder.build()));
assertTrue(inspector.clazz(mainClass.getCanonicalName()).isPresent());
ClassSubject clazz = inspector.clazz(getJavacGeneratedClassName(mentionedClassWithAnnotations));
assertTrue(clazz.isPresent());
@@ -138,7 +138,7 @@
builder.setProguardCompatibilityRulesOutput(proguardCompatibilityRules);
builder.setProgramConsumer(DexIndexedConsumer.emptyConsumer());
- DexInspector inspector = new DexInspector(ToolHelper.runR8(builder.build()));
+ CodeInspector inspector = new CodeInspector(ToolHelper.runR8(builder.build()));
ClassSubject clazz = inspector.clazz(getJavacGeneratedClassName(testClass));
assertTrue(clazz.isPresent());
assertEquals(forceProguardCompatibility && hasDefaultConstructor,
@@ -195,7 +195,7 @@
builder.addProguardConfiguration(proguardConfig, Origin.unknown());
builder.setProgramConsumer(DexIndexedConsumer.emptyConsumer());
- DexInspector inspector = new DexInspector(ToolHelper.runR8(builder.build()));
+ CodeInspector inspector = new CodeInspector(ToolHelper.runR8(builder.build()));
assertTrue(inspector.clazz(getJavacGeneratedClassName(mainClass)).isPresent());
ClassSubject clazz = inspector.clazz(getJavacGeneratedClassName(instantiatedClass));
assertEquals(containsCheckCast, clazz.isPresent());
@@ -210,7 +210,7 @@
FileUtils.writeTextFile(proguardConfigFile, proguardConfig);
ToolHelper.runProguard(jarTestClasses(ImmutableList.of(mainClass, instantiatedClass)),
proguardedJar, proguardConfigFile, null);
- DexInspector proguardInspector = new DexInspector(readJar(proguardedJar));
+ CodeInspector proguardInspector = new CodeInspector(readJar(proguardedJar));
assertTrue(proguardInspector.clazz(mainClass).isPresent());
assertEquals(
containsCheckCast, proguardInspector.clazz(instantiatedClass).isPresent());
@@ -257,7 +257,7 @@
}
builder.setProgramConsumer(DexIndexedConsumer.emptyConsumer());
- DexInspector inspector = new DexInspector(ToolHelper.runR8(builder.build()));
+ CodeInspector inspector = new CodeInspector(ToolHelper.runR8(builder.build()));
assertTrue(inspector.clazz(getJavacGeneratedClassName(mainClass)).isPresent());
forNameClasses.forEach(clazz -> {
ClassSubject subject = inspector.clazz(getJavacGeneratedClassName(clazz));
@@ -316,7 +316,7 @@
ToolHelper.runProguard(jarTestClasses(
ImmutableList.of(mainClass, forNameClass1, forNameClass2)),
proguardedJar, proguardConfigFile, proguardMapFile);
- DexInspector proguardedInspector = new DexInspector(readJar(proguardedJar), proguardMapFile);
+ CodeInspector proguardedInspector = new CodeInspector(readJar(proguardedJar), proguardMapFile);
assertEquals(3, proguardedInspector.allClasses().size());
assertTrue(proguardedInspector.clazz(mainClass).isPresent());
for (Class clazz : ImmutableList.of(forNameClass1, forNameClass2)) {
@@ -360,7 +360,7 @@
}
builder.setProgramConsumer(DexIndexedConsumer.emptyConsumer());
- DexInspector inspector = new DexInspector(ToolHelper.runR8(builder.build()));
+ CodeInspector inspector = new CodeInspector(ToolHelper.runR8(builder.build()));
assertTrue(inspector.clazz(getJavacGeneratedClassName(mainClass)).isPresent());
ClassSubject classSubject = inspector.clazz(getJavacGeneratedClassName(withMemberClass));
// Due to the direct usage of .class
@@ -424,7 +424,7 @@
ToolHelper.runProguard(jarTestClasses(
ImmutableList.of(mainClass, withMemberClass)),
proguardedJar, proguardConfigFile, proguardMapFile);
- DexInspector proguardedInspector = new DexInspector(readJar(proguardedJar), proguardMapFile);
+ CodeInspector proguardedInspector = new CodeInspector(readJar(proguardedJar), proguardMapFile);
assertEquals(2, proguardedInspector.allClasses().size());
assertTrue(proguardedInspector.clazz(mainClass).isPresent());
classSubject = proguardedInspector.clazz(withMemberClass);
@@ -473,7 +473,7 @@
}
builder.setProgramConsumer(DexIndexedConsumer.emptyConsumer());
- DexInspector inspector = new DexInspector(ToolHelper.runR8(builder.build()));
+ CodeInspector inspector = new CodeInspector(ToolHelper.runR8(builder.build()));
assertTrue(inspector.clazz(getJavacGeneratedClassName(mainClass)).isPresent());
ClassSubject classSubject = inspector.clazz(getJavacGeneratedClassName(withVolatileFields));
// Due to the direct usage of .class
@@ -541,7 +541,7 @@
ToolHelper.runProguard(jarTestClasses(
ImmutableList.of(mainClass, withVolatileFields)),
proguardedJar, proguardConfigFile, proguardMapFile);
- DexInspector proguardedInspector = new DexInspector(readJar(proguardedJar), proguardMapFile);
+ CodeInspector proguardedInspector = new CodeInspector(readJar(proguardedJar), proguardMapFile);
assertEquals(2, proguardedInspector.allClasses().size());
assertTrue(proguardedInspector.clazz(mainClass).isPresent());
classSubject = proguardedInspector.clazz(withVolatileFields);
@@ -604,7 +604,7 @@
assertTrue(!forceProguardCompatibility && (!innerClasses || !enclosingMethod));
return;
}
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
assertTrue(inspector.clazz(getJavacGeneratedClassName(mainClass)).isPresent());
assertEquals(innerClasses || enclosingMethod ? "1" : "0", runOnArt(app, mainClass));
@@ -639,7 +639,7 @@
private void runKeepDefaultMethodsTest(
List<String> additionalKeepRules,
- Consumer<DexInspector> inspection,
+ Consumer<CodeInspector> inspection,
Consumer<ProguardConfiguration> compatInspection) throws Exception {
Class mainClass = TestClass.class;
CompatProguardCommandBuilder builder = new CompatProguardCommandBuilder();
@@ -657,7 +657,7 @@
Path proguardCompatibilityRules = temp.newFile().toPath();
builder.setProguardCompatibilityRulesOutput(proguardCompatibilityRules);
AndroidApp app = ToolHelper.runR8(builder.build(), o -> o.enableClassInlining = false);
- inspection.accept(new DexInspector(app));
+ inspection.accept(new CodeInspector(app));
// Check the Proguard compatibility configuration generated.
ProguardConfigurationParser parser =
new ProguardConfigurationParser(new DexItemFactory(),
@@ -671,7 +671,7 @@
assertEquals(0, configuration.getRules().size());
}
- private void defaultMethodKept(DexInspector inspector) {
+ private void defaultMethodKept(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz(InterfaceWithDefaultMethods.class);
assertTrue(clazz.isPresent());
MethodSubject method = clazz.method("int", "method", ImmutableList.of());
@@ -695,7 +695,7 @@
assertEquals(0, memberRule.getArguments().size());
}
- private void defaultMethod2Kept(DexInspector inspector) {
+ private void defaultMethod2Kept(CodeInspector inspector) {
ClassSubject clazz = inspector.clazz(InterfaceWithDefaultMethods.class);
assertTrue(clazz.isPresent());
MethodSubject method =
diff --git a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatabilityTestBase.java b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatabilityTestBase.java
index f76d402..ef98898 100644
--- a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatabilityTestBase.java
+++ b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/ProguardCompatabilityTestBase.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.shaking.forceproguardcompatibility;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
@@ -19,8 +19,8 @@
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.io.File;
import java.nio.file.Path;
@@ -67,12 +67,12 @@
throw new IllegalArgumentException("Unknown shrinker: " + mode);
}
- protected DexInspector runShrinker(
+ protected CodeInspector runShrinker(
Shrinker mode, List<Class> programClasses, List<String> proguadConfigs) throws Exception {
return runShrinker(mode, programClasses, String.join(System.lineSeparator(), proguadConfigs));
}
- protected DexInspector runShrinker(
+ protected CodeInspector runShrinker(
Shrinker mode, List<Class> programClasses, String proguardConfig) throws Exception {
switch (mode) {
case PROGUARD5:
@@ -104,8 +104,8 @@
return ToolHelper.runR8(builder.build(), configure);
}
- protected DexInspector runR8(List<Class> programClasses, String proguardConfig) throws Exception {
- return new DexInspector(runR8Raw(programClasses, proguardConfig));
+ protected CodeInspector runR8(List<Class> programClasses, String proguardConfig) throws Exception {
+ return new CodeInspector(runR8Raw(programClasses, proguardConfig));
}
protected AndroidApp runR8CompatRaw(
@@ -120,12 +120,12 @@
return ToolHelper.runR8(builder.build());
}
- protected DexInspector runR8Compat(
+ protected CodeInspector runR8Compat(
List<Class> programClasses, String proguardConfig) throws Exception {
- return new DexInspector(runR8CompatRaw(programClasses, proguardConfig));
+ return new CodeInspector(runR8CompatRaw(programClasses, proguardConfig));
}
- protected DexInspector runR8CompatKeepingMain(Class mainClass, List<Class> programClasses)
+ protected CodeInspector runR8CompatKeepingMain(Class mainClass, List<Class> programClasses)
throws Exception {
return runR8Compat(programClasses, keepMainProguardConfiguration(mainClass));
}
@@ -148,10 +148,10 @@
return readJar(proguardedJar);
}
- protected DexInspector runProguard5(
+ protected CodeInspector runProguard5(
List<Class> programClasses, String proguardConfig) throws Exception {
proguardMap = File.createTempFile("proguard", ".map", temp.getRoot()).toPath();
- return new DexInspector(
+ return new CodeInspector(
runProguard5Raw(programClasses, proguardConfig, proguardMap), proguardMap);
}
@@ -173,10 +173,10 @@
return readJar(proguardedJar);
}
- protected DexInspector runProguard6(
+ protected CodeInspector runProguard6(
List<Class> programClasses, String proguardConfig) throws Exception {
proguardMap = File.createTempFile("proguard", ".map", temp.getRoot()).toPath();
- return new DexInspector(
+ return new CodeInspector(
runProguard6Raw(programClasses, proguardConfig, proguardMap), proguardMap);
}
@@ -198,30 +198,30 @@
return ToolHelper.runD8(readJar(proguardedJar));
}
- protected DexInspector runProguard6AndD8(
+ protected CodeInspector runProguard6AndD8(
List<Class> programClasses, String proguardConfig) throws Exception {
proguardMap = File.createTempFile("proguard", ".map", temp.getRoot()).toPath();
- return new DexInspector(
+ return new CodeInspector(
runProguard6AndD8Raw(programClasses, proguardConfig, proguardMap), proguardMap);
}
- protected DexInspector runProguardKeepingMain(Class mainClass, List<Class> programClasses)
+ protected CodeInspector runProguardKeepingMain(Class mainClass, List<Class> programClasses)
throws Exception {
return runProguard6AndD8(programClasses, keepMainProguardConfiguration(mainClass));
}
protected void verifyClassesPresent(
- DexInspector dexInspector, Class<?>... classesOfInterest) {
+ CodeInspector codeInspector, Class<?>... classesOfInterest) {
for (Class klass : classesOfInterest) {
- ClassSubject c = dexInspector.clazz(klass);
+ ClassSubject c = codeInspector.clazz(klass);
assertThat(c, isPresent());
}
}
protected void verifyClassesAbsent(
- DexInspector dexInspector, Class<?>... classesOfInterest) {
+ CodeInspector codeInspector, Class<?>... classesOfInterest) {
for (Class klass : classesOfInterest) {
- ClassSubject c = dexInspector.clazz(klass);
+ ClassSubject c = codeInspector.clazz(klass);
assertThat(c, not(isPresent()));
}
}
diff --git a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/defaultctor/ImplicitlyKeptDefaultConstructorTest.java b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/defaultctor/ImplicitlyKeptDefaultConstructorTest.java
index d752e39..aed1423 100644
--- a/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/defaultctor/ImplicitlyKeptDefaultConstructorTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/forceproguardcompatibility/defaultctor/ImplicitlyKeptDefaultConstructorTest.java
@@ -4,16 +4,16 @@
package com.android.tools.r8.shaking.forceproguardcompatibility.defaultctor;
-import static com.android.tools.r8.utils.dexinspector.Matchers.hasDefaultConstructor;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.hasDefaultConstructor;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import com.android.tools.r8.shaking.forceproguardcompatibility.ProguardCompatabilityTestBase;
import com.android.tools.r8.smali.ConstantFoldingTest.TriConsumer;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.List;
import org.junit.Test;
@@ -103,14 +103,14 @@
}
private void checkAllClassesPresentWithDefaultConstructor(
- Class mainClass, List<Class> programClasses, DexInspector inspector) {
+ Class mainClass, List<Class> programClasses, CodeInspector inspector) {
assert programClasses.contains(mainClass);
assertEquals(programClasses.size(), inspector.allClasses().size());
inspector.forAllClasses(this::checkPresentWithDefaultConstructor);
}
private void checkAllClassesPresentOnlyMainWithDefaultConstructor(
- Class mainClass, List<Class> programClasses, DexInspector inspector) {
+ Class mainClass, List<Class> programClasses, CodeInspector inspector) {
assert programClasses.contains(mainClass);
assertEquals(programClasses.size(), inspector.allClasses().size());
checkPresentWithDefaultConstructor(inspector.clazz(mainClass));
@@ -121,7 +121,7 @@
}
private void checkOnlyMainPresent(
- Class mainClass, List<Class> programClasses, DexInspector inspector) {
+ Class mainClass, List<Class> programClasses, CodeInspector inspector) {
assert programClasses.contains(mainClass);
assertEquals(1, inspector.allClasses().size());
inspector.forAllClasses(this::checkPresentWithDefaultConstructor);
@@ -129,9 +129,9 @@
private void runTest(
Class mainClass, List<Class> programClasses, String proguardConfiguration,
- TriConsumer<Class, List<Class>, DexInspector> r8Checker,
- TriConsumer<Class, List<Class>, DexInspector> proguardChecker) throws Exception {
- DexInspector inspector = runR8Compat(programClasses, proguardConfiguration);
+ TriConsumer<Class, List<Class>, CodeInspector> r8Checker,
+ TriConsumer<Class, List<Class>, CodeInspector> proguardChecker) throws Exception {
+ CodeInspector inspector = runR8Compat(programClasses, proguardConfiguration);
r8Checker.accept(mainClass, programClasses, inspector);
if (isRunProguard()) {
@@ -144,7 +144,7 @@
private void runTest(
Class mainClass, List<Class> programClasses, String proguardConfiguration,
- TriConsumer<Class, List<Class>, DexInspector> checker) throws Exception {
+ TriConsumer<Class, List<Class>, CodeInspector> checker) throws Exception {
runTest(mainClass, programClasses, proguardConfiguration, checker, checker);
}
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
index e64983d..513a01a 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAccessModifierTest.java
@@ -3,7 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.shaking.ifrule;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
@@ -11,9 +11,9 @@
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.shaking.forceproguardcompatibility.ProguardCompatabilityTestBase;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import java.util.List;
@@ -59,8 +59,8 @@
" public <methods>;",
"}"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
- ClassSubject classSubject = dexInspector.clazz(ClassForIf.class);
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+ ClassSubject classSubject = codeInspector.clazz(ClassForIf.class);
assertThat(classSubject, isPresent());
MethodSubject methodSubject = classSubject.method(publicMethod);
assertThat(methodSubject, not(isPresent()));
@@ -68,7 +68,7 @@
assertThat(methodSubject, isPresent());
assertTrue(methodSubject.getMethod().accessFlags.isPublic());
- classSubject = dexInspector.clazz(ClassForSubsequent.class);
+ classSubject = codeInspector.clazz(ClassForSubsequent.class);
if (isR8(shrinker)) {
// TODO(b/72109068): ClassForIf#nonPublicMethod becomes public, and -if rule is not applied
// at the 2nd tree shaking.
@@ -98,8 +98,8 @@
" !public <methods>;",
"}"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
- ClassSubject classSubject = dexInspector.clazz(ClassForIf.class);
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+ ClassSubject classSubject = codeInspector.clazz(ClassForIf.class);
assertThat(classSubject, isPresent());
MethodSubject methodSubject = classSubject.method(publicMethod);
assertThat(methodSubject, not(isPresent()));
@@ -107,7 +107,7 @@
assertThat(methodSubject, isPresent());
assertTrue(methodSubject.getMethod().accessFlags.isPublic());
- classSubject = dexInspector.clazz(ClassForSubsequent.class);
+ classSubject = codeInspector.clazz(ClassForSubsequent.class);
if (isR8(shrinker)) {
// TODO(b/72109068): ClassForIf#nonPublicMethod becomes public, and -if rule is not applied
// at the 2nd tree shaking.
@@ -138,15 +138,15 @@
" public <methods>;",
"}"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
- ClassSubject classSubject = dexInspector.clazz(ClassForIf.class);
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+ ClassSubject classSubject = codeInspector.clazz(ClassForIf.class);
assertThat(classSubject, isPresent());
MethodSubject methodSubject = classSubject.method(publicMethod);
assertThat(methodSubject, isPresent());
methodSubject = classSubject.method(nonPublicMethod);
assertThat(methodSubject, not(isPresent()));
- classSubject = dexInspector.clazz(ClassForSubsequent.class);
+ classSubject = codeInspector.clazz(ClassForSubsequent.class);
assertThat(classSubject, isPresent());
methodSubject = classSubject.method(publicMethod);
assertThat(methodSubject, isPresent());
@@ -170,15 +170,15 @@
" !public <methods>;",
"}"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
- ClassSubject classSubject = dexInspector.clazz(ClassForIf.class);
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+ ClassSubject classSubject = codeInspector.clazz(ClassForIf.class);
assertThat(classSubject, isPresent());
MethodSubject methodSubject = classSubject.method(publicMethod);
assertThat(methodSubject, isPresent());
methodSubject = classSubject.method(nonPublicMethod);
assertThat(methodSubject, not(isPresent()));
- classSubject = dexInspector.clazz(ClassForSubsequent.class);
+ classSubject = codeInspector.clazz(ClassForSubsequent.class);
assertThat(classSubject, isPresent());
methodSubject = classSubject.method(publicMethod);
assertThat(methodSubject, not(isPresent()));
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAnnotationTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAnnotationTest.java
index ac92146..146c3cd 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAnnotationTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnAnnotationTest.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.shaking.ifrule;
import com.android.tools.r8.shaking.forceproguardcompatibility.ProguardCompatabilityTestBase;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import java.util.List;
@@ -50,10 +50,10 @@
"-keep class **.UnusedAnnotation*"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
- verifyClassesAbsent(dexInspector,
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+ verifyClassesAbsent(codeInspector,
UnusedAnnotation.class, UnusedAnnotationDependent.class);
- verifyClassesPresent(dexInspector,
+ verifyClassesPresent(codeInspector,
UsedAnnotation.class, UsedAnnotationDependent.class);
}
@@ -76,10 +76,10 @@
"-keep class <1>.Unused<2>*"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
- verifyClassesAbsent(dexInspector,
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+ verifyClassesAbsent(codeInspector,
UnusedAnnotation.class, UnusedAnnotationDependent.class);
- verifyClassesPresent(dexInspector,
+ verifyClassesPresent(codeInspector,
UsedAnnotation.class, UsedAnnotationDependent.class);
}
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java
index 1f5ba35..167c2f4 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnClassTest.java
@@ -3,18 +3,18 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.shaking.ifrule;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isNotRenamed;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isRenamed;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isNotRenamed;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isRenamed;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import com.android.tools.r8.shaking.forceproguardcompatibility.ProguardCompatabilityTestBase;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FieldSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FieldSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -60,19 +60,19 @@
}
@Override
- protected DexInspector runR8(
+ protected CodeInspector runR8(
List<Class> programClasses, String proguardConfig) throws Exception {
return super.runR8(programClasses, adaptConfiguration(proguardConfig));
}
@Override
- protected DexInspector runProguard5(
+ protected CodeInspector runProguard5(
List<Class> programClasses, String proguardConfig) throws Exception {
return super.runProguard5(programClasses, adaptConfiguration(proguardConfig));
}
@Override
- protected DexInspector runProguard6(
+ protected CodeInspector runProguard6(
List<Class> programClasses, String proguardConfig) throws Exception {
return super.runProguard6(programClasses, adaptConfiguration(proguardConfig));
}
@@ -86,17 +86,17 @@
"-keep,allowobfuscation class **.Dependent"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
if (!keepPrecondition) {
// TODO(b/73708139): Proguard6 kept Dependent (w/o any members), which is not necessary.
if (shrinker == Shrinker.PROGUARD6) {
return;
}
- assertEquals(1, dexInspector.allClasses().size());
+ assertEquals(1, codeInspector.allClasses().size());
return;
}
- ClassSubject clazz = dexInspector.clazz(DependentUser.class);
+ ClassSubject clazz = codeInspector.clazz(DependentUser.class);
assertThat(clazz, isRenamed());
// Members of DependentUser are not used anywhere.
MethodSubject m = clazz.method("void", "callFoo", ImmutableList.of());
@@ -105,7 +105,7 @@
assertThat(f, not(isPresent()));
// Although DependentUser#callFoo is shrinked, Dependent is kept via -if.
- clazz = dexInspector.clazz(Dependent.class);
+ clazz = codeInspector.clazz(Dependent.class);
assertThat(clazz, isRenamed());
// But, its members are gone.
m = clazz.method("java.lang.String", "foo", ImmutableList.of());
@@ -123,17 +123,17 @@
"-keep,allowobfuscation class <1>.<2>"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
if (!keepPrecondition) {
// TODO(b/73708139): Proguard6 kept Dependent (w/o any members), which is not necessary.
if (shrinker == Shrinker.PROGUARD6) {
return;
}
- assertEquals(1, dexInspector.allClasses().size());
+ assertEquals(1, codeInspector.allClasses().size());
return;
}
- ClassSubject clazz = dexInspector.clazz(DependentUser.class);
+ ClassSubject clazz = codeInspector.clazz(DependentUser.class);
assertThat(clazz, isRenamed());
// Members of DependentUser are not used anywhere.
MethodSubject m = clazz.method("void", "callFoo", ImmutableList.of());
@@ -142,7 +142,7 @@
assertThat(f, not(isPresent()));
// Although DependentUser#callFoo is shrinked, Dependent is kept via -if.
- clazz = dexInspector.clazz(Dependent.class);
+ clazz = codeInspector.clazz(Dependent.class);
assertThat(clazz, isRenamed());
// But, its members are gone.
m = clazz.method("java.lang.String", "foo", ImmutableList.of());
@@ -160,13 +160,13 @@
"}"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
if (!keepPrecondition) {
- assertEquals(1, dexInspector.allClasses().size());
+ assertEquals(1, codeInspector.allClasses().size());
return;
}
- ClassSubject clazz = dexInspector.clazz(DependentUser.class);
+ ClassSubject clazz = codeInspector.clazz(DependentUser.class);
assertThat(clazz, isRenamed());
MethodSubject m = clazz.method("void", "callFoo", ImmutableList.of());
assertThat(m, isRenamed());
@@ -174,7 +174,7 @@
assertThat(f, not(isPresent()));
// Dependent is kept due to DependentUser#callFoo, but renamed.
- clazz = dexInspector.clazz(Dependent.class);
+ clazz = codeInspector.clazz(Dependent.class);
assertThat(clazz, isRenamed());
m = clazz.method("java.lang.String", "foo", ImmutableList.of());
assertThat(m, isRenamed());
@@ -196,17 +196,17 @@
"-keep,allowobfuscation class **.*User"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
if (!keepPrecondition) {
// TODO(b/73708139): Proguard6 kept DependentUser (w/o any members), which is not necessary.
if (shrinker == Shrinker.PROGUARD6) {
return;
}
- assertEquals(1, dexInspector.allClasses().size());
+ assertEquals(1, codeInspector.allClasses().size());
return;
}
- ClassSubject clazz = dexInspector.clazz(DependentUser.class);
+ ClassSubject clazz = codeInspector.clazz(DependentUser.class);
assertThat(clazz, isRenamed());
MethodSubject m = clazz.method("void", "callFoo", ImmutableList.of());
assertThat(m, isRenamed());
@@ -214,7 +214,7 @@
assertThat(f, not(isPresent()));
// Dependent is kept due to DependentUser#callFoo, but renamed.
- clazz = dexInspector.clazz(Dependent.class);
+ clazz = codeInspector.clazz(Dependent.class);
assertThat(clazz, isRenamed());
m = clazz.method("java.lang.String", "foo", ImmutableList.of());
assertThat(m, isRenamed());
@@ -236,17 +236,17 @@
"-keep,allowobfuscation class <1>.<2>User"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
if (!keepPrecondition) {
// TODO(b/73708139): Proguard6 kept DependentUser (w/o any members), which is not necessary.
if (shrinker == Shrinker.PROGUARD6) {
return;
}
- assertEquals(1, dexInspector.allClasses().size());
+ assertEquals(1, codeInspector.allClasses().size());
return;
}
- ClassSubject clazz = dexInspector.clazz(DependentUser.class);
+ ClassSubject clazz = codeInspector.clazz(DependentUser.class);
assertThat(clazz, isRenamed());
MethodSubject m = clazz.method("void", "callFoo", ImmutableList.of());
assertThat(m, isRenamed());
@@ -254,7 +254,7 @@
assertThat(f, not(isPresent()));
// Dependent is kept due to DependentUser#callFoo, but renamed.
- clazz = dexInspector.clazz(Dependent.class);
+ clazz = codeInspector.clazz(Dependent.class);
assertThat(clazz, isRenamed());
m = clazz.method("java.lang.String", "foo", ImmutableList.of());
assertThat(m, isRenamed());
@@ -274,9 +274,9 @@
"-keepnames class **.Dependent"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
- ClassSubject clazz = dexInspector.clazz(Dependent.class);
+ ClassSubject clazz = codeInspector.clazz(Dependent.class);
// Only class name is not renamed, if triggered.
assertThat(clazz, keepPrecondition ? isNotRenamed() : isRenamed());
MethodSubject m = clazz.method("java.lang.String", "foo", ImmutableList.of());
@@ -299,9 +299,9 @@
"}"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
- ClassSubject clazz = dexInspector.clazz(Dependent.class);
+ ClassSubject clazz = codeInspector.clazz(Dependent.class);
// Class name is not renamed, if triggered.
assertThat(clazz, keepPrecondition ? isNotRenamed() : isRenamed());
MethodSubject m = clazz.method("java.lang.String", "foo", ImmutableList.of());
@@ -325,9 +325,9 @@
"}"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
- ClassSubject clazz = dexInspector.clazz(Dependent.class);
+ ClassSubject clazz = codeInspector.clazz(Dependent.class);
assertThat(clazz, isRenamed());
MethodSubject m = clazz.method("java.lang.String", "foo", ImmutableList.of());
// Only method name is not renamed, if triggered.
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnFieldTest.java b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnFieldTest.java
index 0292344..d199cd4 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnFieldTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/IfOnFieldTest.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.shaking.ifrule;
import com.android.tools.r8.shaking.forceproguardcompatibility.ProguardCompatabilityTestBase;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collection;
@@ -42,13 +42,13 @@
}
@Override
- protected DexInspector runR8(
+ protected CodeInspector runR8(
List<Class> programClasses, String proguardConfig) throws Exception {
return super.runR8(programClasses, adaptConfiguration(proguardConfig));
}
@Override
- protected DexInspector runProguard6(
+ protected CodeInspector runProguard6(
List<Class> programClasses, String proguardConfig) throws Exception {
return super.runProguard6(programClasses, adaptConfiguration(proguardConfig));
}
@@ -77,10 +77,10 @@
"-keep class **.D"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
- verifyClassesAbsent(dexInspector,
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+ verifyClassesAbsent(codeInspector,
R1.class, R2.class, D.class, D2.class);
- verifyClassesPresent(dexInspector,
+ verifyClassesPresent(codeInspector,
R.class, D1.class);
}
@@ -96,10 +96,10 @@
"-keep class **.D<2>"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
- verifyClassesAbsent(dexInspector,
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+ verifyClassesAbsent(codeInspector,
R1.class, R2.class, D.class, D2.class);
- verifyClassesPresent(dexInspector,
+ verifyClassesPresent(codeInspector,
R.class, D1.class);
}
@@ -119,10 +119,10 @@
"-keep class **.D2"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
- verifyClassesAbsent(dexInspector,
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+ verifyClassesAbsent(codeInspector,
R.class, D.class, R1.class, D1.class);
- verifyClassesPresent(dexInspector,
+ verifyClassesPresent(codeInspector,
R2.class, D2.class);
}
@@ -138,10 +138,10 @@
"-keep class **.D<2>"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
- verifyClassesAbsent(dexInspector,
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+ verifyClassesAbsent(codeInspector,
R.class, D.class, R1.class, D1.class);
- verifyClassesPresent(dexInspector,
+ verifyClassesPresent(codeInspector,
R2.class, D2.class);
}
@@ -158,10 +158,10 @@
"-keep class **$*D"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
- verifyClassesAbsent(dexInspector,
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+ verifyClassesAbsent(codeInspector,
R.class, D.class, R1.class, D1.class, R2.class, D2.class);
- verifyClassesPresent(dexInspector,
+ verifyClassesPresent(codeInspector,
MainWithInner.InnerR.class, MainWithInner.InnerD.class);
}
@@ -178,10 +178,10 @@
"-keep class <1>$<2>D"
);
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
- verifyClassesAbsent(dexInspector,
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+ verifyClassesAbsent(codeInspector,
R.class, D.class, R1.class, D1.class, R2.class, D2.class);
- verifyClassesPresent(dexInspector,
+ verifyClassesPresent(codeInspector,
MainWithInner.InnerR.class, MainWithInner.InnerD.class);
}
@@ -202,9 +202,9 @@
"}",
"-keep class **.D2");
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
- verifyClassesAbsent(dexInspector, D2.class);
- verifyClassesPresent(dexInspector,
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+ verifyClassesAbsent(codeInspector, D2.class);
+ verifyClassesPresent(codeInspector,
I.class, Impl.class, D1.class);
}
@@ -225,9 +225,9 @@
"}",
"-keep class <2>.D2");
- DexInspector dexInspector = runShrinker(shrinker, CLASSES, config);
- verifyClassesAbsent(dexInspector, D2.class);
- verifyClassesPresent(dexInspector,
+ CodeInspector codeInspector = runShrinker(shrinker, CLASSES, config);
+ verifyClassesAbsent(codeInspector, D2.class);
+ verifyClassesPresent(codeInspector,
I.class, Impl.class, D1.class);
}
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/inlining/IfRuleWithInlining.java b/src/test/java/com/android/tools/r8/shaking/ifrule/inlining/IfRuleWithInlining.java
index cd2ce6a..7391986 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/inlining/IfRuleWithInlining.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/inlining/IfRuleWithInlining.java
@@ -4,15 +4,15 @@
package com.android.tools.r8.shaking.ifrule.inlining;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.shaking.forceproguardcompatibility.ProguardCompatabilityTestBase;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import java.util.List;
@@ -65,7 +65,7 @@
}
private void check(AndroidApp app) throws Exception {
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject clazzA = inspector.clazz(A.class);
assertThat(clazzA, isPresent());
// A.a might be inlined.
diff --git a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/IfRuleWithVerticalClassMerging.java b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/IfRuleWithVerticalClassMerging.java
index aed9596..cc574f3 100644
--- a/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/IfRuleWithVerticalClassMerging.java
+++ b/src/test/java/com/android/tools/r8/shaking/ifrule/verticalclassmerging/IfRuleWithVerticalClassMerging.java
@@ -4,7 +4,7 @@
package com.android.tools.r8.shaking.ifrule.verticalclassmerging;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@@ -12,8 +12,8 @@
import com.android.tools.r8.shaking.forceproguardcompatibility.ProguardCompatabilityTestBase;
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.Collection;
import java.util.List;
@@ -90,7 +90,7 @@
}
private void check(AndroidApp app) throws Exception {
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
ClassSubject clazzA = inspector.clazz(A.class);
assertEquals(!enableClassMerging, clazzA.isPresent());
ClassSubject clazzB = inspector.clazz(B.class);
diff --git a/src/test/java/com/android/tools/r8/shaking/includedescriptorclasses/IncludeDescriptorClassesTest.java b/src/test/java/com/android/tools/r8/shaking/includedescriptorclasses/IncludeDescriptorClassesTest.java
index c841996..bc94fa6 100644
--- a/src/test/java/com/android/tools/r8/shaking/includedescriptorclasses/IncludeDescriptorClassesTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/includedescriptorclasses/IncludeDescriptorClassesTest.java
@@ -9,7 +9,7 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import java.util.ArrayList;
@@ -18,10 +18,10 @@
public class IncludeDescriptorClassesTest extends TestBase {
private class Result {
- final DexInspector inspector;
- final DexInspector proguardedInspector;
+ final CodeInspector inspector;
+ final CodeInspector proguardedInspector;
- Result(DexInspector inspector, DexInspector proguardedInspector) {
+ Result(CodeInspector inspector, CodeInspector proguardedInspector) {
this.inspector = inspector;
this.proguardedInspector = proguardedInspector;
}
@@ -62,15 +62,15 @@
List<Class> classes = new ArrayList<>(applicationClasses);
classes.add(mainClass);
- DexInspector inspector = new DexInspector(compileWithR8(classes, proguardConfig));
+ CodeInspector inspector = new CodeInspector(compileWithR8(classes, proguardConfig));
- DexInspector proguardedInspector = null;
+ CodeInspector proguardedInspector = null;
// Actually running Proguard should only be during development.
if (isRunProguard()) {
Path proguardedJar = temp.newFolder().toPath().resolve("proguarded.jar");
Path proguardedMap = temp.newFolder().toPath().resolve("proguarded.map");
ToolHelper.runProguard(jarTestClasses(classes), proguardedJar, proguardConfig, proguardedMap);
- proguardedInspector = new DexInspector(readJar(proguardedJar), proguardedMap);
+ proguardedInspector = new CodeInspector(readJar(proguardedJar), proguardedMap);
}
return new Result(inspector, proguardedInspector);
diff --git a/src/test/java/com/android/tools/r8/shaking/keepclassmembers/KeepClassMembersTest.java b/src/test/java/com/android/tools/r8/shaking/keepclassmembers/KeepClassMembersTest.java
index b1ae8bb..97cad3c 100644
--- a/src/test/java/com/android/tools/r8/shaking/keepclassmembers/KeepClassMembersTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/keepclassmembers/KeepClassMembersTest.java
@@ -4,24 +4,24 @@
package com.android.tools.r8.shaking.keepclassmembers;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isAbstract;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isAbstract;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.shaking.forceproguardcompatibility.ProguardCompatabilityTestBase;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.FieldSubject;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.FieldSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import org.junit.Test;
public class KeepClassMembersTest extends ProguardCompatabilityTestBase {
- private void check(DexInspector inspector, Class mainClass, Class<?> staticClass,
+ private void check(CodeInspector inspector, Class mainClass, Class<?> staticClass,
boolean forceProguardCompatibility, boolean fromProguard) {
assertTrue(inspector.clazz(mainClass).isPresent());
ClassSubject staticClassSubject = inspector.clazz(staticClass);
@@ -70,8 +70,8 @@
"}",
"-dontoptimize", "-dontobfuscate"
));
- DexInspector inspector;
- inspector = new DexInspector(
+ CodeInspector inspector;
+ inspector = new CodeInspector(
compileWithR8(ImmutableList.of(mainClass, staticClass), proguardConfig,
options -> options.forceProguardCompatibility = forceProguardCompatibility));
check(inspector, mainClass, staticClass, forceProguardCompatibility, false);
diff --git a/src/test/java/com/android/tools/r8/shaking/proxy/ProxiesTest.java b/src/test/java/com/android/tools/r8/shaking/proxy/ProxiesTest.java
index 8c71ff7..8d38aee 100644
--- a/src/test/java/com/android/tools/r8/shaking/proxy/ProxiesTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/proxy/ProxiesTest.java
@@ -23,14 +23,14 @@
import com.android.tools.r8.shaking.proxy.testclasses.SubInterface;
import com.android.tools.r8.shaking.proxy.testclasses.TestClass;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.List;
import org.junit.Test;
public class ProxiesTest extends TestBase {
- private void runTest(List<String> additionalKeepRules, Consumer<DexInspector> inspection,
+ private void runTest(List<String> additionalKeepRules, Consumer<CodeInspector> inspection,
String expectedResult)
throws Exception {
Class mainClass = Main.class;
@@ -51,18 +51,18 @@
builder.addProguardConfiguration(additionalKeepRules, Origin.unknown());
builder.setProgramConsumer(DexIndexedConsumer.emptyConsumer());
AndroidApp app = ToolHelper.runR8(builder.build(), o -> o.enableDevirtualization = false);
- inspection.accept(new DexInspector(app));
+ inspection.accept(new CodeInspector(app));
assertEquals(expectedResult, runOnArt(app, mainClass));
}
- private int countInstructionInX(DexInspector inspector, Class<? extends Instruction> invoke) {
+ private int countInstructionInX(CodeInspector inspector, Class<? extends Instruction> invoke) {
MethodSignature signatureForX =
new MethodSignature("x", "void", ImmutableList.of(BaseInterface.class.getCanonicalName()));
DexCode x = inspector.clazz(Main.class).method(signatureForX).getMethod().getCode().asDexCode();
return (int) filterInstructionKind(x, invoke).count();
}
- private int countInstructionInY(DexInspector inspector, Class<? extends Instruction> invoke) {
+ private int countInstructionInY(CodeInspector inspector, Class<? extends Instruction> invoke) {
MethodSignature signatureForY =
new MethodSignature("y", "void", ImmutableList.of(SubInterface.class.getCanonicalName()));
DexCode y = inspector.clazz(Main.class).method(signatureForY).getMethod().getCode().asDexCode();
@@ -71,7 +71,7 @@
.count();
}
- private int countInstructionInZ(DexInspector inspector, Class<? extends Instruction> invoke) {
+ private int countInstructionInZ(CodeInspector inspector, Class<? extends Instruction> invoke) {
MethodSignature signatureForZ =
new MethodSignature("z", "void", ImmutableList.of(TestClass.class.getCanonicalName()));
DexCode z = inspector.clazz(Main.class).method(signatureForZ).getMethod().getCode().asDexCode();
@@ -81,7 +81,7 @@
}
private int countInstructionInZSubClass(
- DexInspector inspector, Class<? extends Instruction> invoke) {
+ CodeInspector inspector, Class<? extends Instruction> invoke) {
MethodSignature signatureForZ =
new MethodSignature("z", "void", ImmutableList.of(SubClass.class.getCanonicalName()));
DexCode z = inspector.clazz(Main.class).method(signatureForZ).getMethod().getCode().asDexCode();
@@ -90,7 +90,7 @@
.count();
}
- private void noInterfaceKept(DexInspector inspector) {
+ private void noInterfaceKept(CodeInspector inspector) {
// Indirectly assert that method is inlined into x, y and z.
assertEquals(1, countInstructionInX(inspector, InvokeInterface.class));
assertEquals(1, countInstructionInY(inspector, InvokeInterface.class));
@@ -104,7 +104,7 @@
"TestClass 1\nTestClass 1\nTestClass 1\nProxy\nEXCEPTION\n");
}
- private void baseInterfaceKept(DexInspector inspector) {
+ private void baseInterfaceKept(CodeInspector inspector) {
// Indirectly assert that method is not inlined into x.
assertEquals(3, countInstructionInX(inspector, InvokeInterface.class));
// Indirectly assert that method is inlined into y and z.
@@ -124,7 +124,7 @@
"TestClass 2\nTestClass 2\nTestClass 2\nProxy\nEXCEPTION\n");
}
- private void subInterfaceKept(DexInspector inspector) {
+ private void subInterfaceKept(CodeInspector inspector) {
// Indirectly assert that method is not inlined into x or y.
assertEquals(3, countInstructionInX(inspector, InvokeInterface.class));
assertEquals(3, countInstructionInY(inspector, InvokeInterface.class));
@@ -146,7 +146,7 @@
"TestClass 4\nTestClass 4\nTestClass 4\nSUCCESS\n");
}
- private void classKept(DexInspector inspector) {
+ private void classKept(CodeInspector inspector) {
// Indirectly assert that method is not inlined into x, y or z.
assertEquals(3, countInstructionInX(inspector, InvokeInterface.class));
assertEquals(3, countInstructionInY(inspector, InvokeInterface.class));
diff --git a/src/test/java/com/android/tools/r8/shaking/testrules/ForceInlineTest.java b/src/test/java/com/android/tools/r8/shaking/testrules/ForceInlineTest.java
index 365d039..147b1b4 100644
--- a/src/test/java/com/android/tools/r8/shaking/testrules/ForceInlineTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/testrules/ForceInlineTest.java
@@ -8,7 +8,7 @@
package com.android.tools.r8.shaking.testrules;
-import static com.android.tools.r8.utils.dexinspector.Matchers.isPresent;
+import static com.android.tools.r8.utils.codeinspector.Matchers.isPresent;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
@@ -17,25 +17,25 @@
import com.android.tools.r8.TestBase;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.origin.Origin;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.List;
import org.junit.Test;
public class ForceInlineTest extends TestBase {
- private DexInspector runTest(List<String> proguardConfiguration) throws Exception {
+ private CodeInspector runTest(List<String> proguardConfiguration) throws Exception {
R8Command.Builder builder =
ToolHelper.prepareR8CommandBuilder(readClasses(Main.class, A.class, B.class, C.class));
ToolHelper.allowTestProguardOptions(builder);
builder.addProguardConfiguration(proguardConfiguration, Origin.unknown());
- return new DexInspector(ToolHelper.runR8(builder.build()));
+ return new CodeInspector(ToolHelper.runR8(builder.build()));
}
@Test
public void testDefaultInlining() throws Exception {
- DexInspector inspector = runTest(ImmutableList.of(
+ CodeInspector inspector = runTest(ImmutableList.of(
"-keep class **.Main { *; }",
"-dontobfuscate"
));
@@ -61,7 +61,7 @@
@Test
public void testNeverInline() throws Exception {
- DexInspector inspector = runTest(ImmutableList.of(
+ CodeInspector inspector = runTest(ImmutableList.of(
"-neverinline class **.A { method(); }",
"-neverinline class **.B { method(); }",
"-keep class **.Main { *; }",
@@ -86,7 +86,7 @@
@Test
public void testForceInline() throws Exception {
- DexInspector inspector = runTest(ImmutableList.of(
+ CodeInspector inspector = runTest(ImmutableList.of(
"-forceinline class **.A { int m(int, int); }",
"-forceinline class **.B { int m(int, int); }",
"-keep class **.Main { *; }",
@@ -108,7 +108,7 @@
@Test
public void testForceInlineFails() throws Exception {
try {
- DexInspector inspector = runTest(ImmutableList.of(
+ CodeInspector inspector = runTest(ImmutableList.of(
"-forceinline class **.A { int x(); }",
"-keep class **.Main { *; }",
"-dontobfuscate"
diff --git a/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java b/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
index 5f9a6fd..ce1fd33 100644
--- a/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
+++ b/src/test/java/com/android/tools/r8/smali/ConstantFoldingTest.java
@@ -20,8 +20,8 @@
import com.android.tools.r8.ir.code.SingleConstant;
import com.android.tools.r8.ir.code.WideConstant;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Collections;
@@ -54,7 +54,7 @@
public void run() throws Exception {
AndroidApp processdApplication = processApplication(buildApplication(builder));
assertEquals(1, getNumberOfProgramClasses(processdApplication));
- DexInspector inspector = new DexInspector(processdApplication);
+ CodeInspector inspector = new CodeInspector(processdApplication);
ClassSubject clazz = inspector.clazz(DEFAULT_CLASS_NAME);
clazz.forAllMethods(method -> {
int index = Integer.parseInt(method.getMethod().method.name.toString().substring(1));
diff --git a/src/test/java/com/android/tools/r8/smali/OutlineTest.java b/src/test/java/com/android/tools/r8/smali/OutlineTest.java
index 41e894e..1479add 100644
--- a/src/test/java/com/android/tools/r8/smali/OutlineTest.java
+++ b/src/test/java/com/android/tools/r8/smali/OutlineTest.java
@@ -34,9 +34,9 @@
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.InternalOptions.OutlineOptions;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.Arrays;
@@ -59,7 +59,7 @@
}
DexEncodedMethod getInvokedMethod(DexApplication application, InvokeStatic invoke) {
- DexInspector inspector = new DexInspector(application);
+ CodeInspector inspector = new CodeInspector(application);
ClassSubject clazz = inspector.clazz(invoke.getMethod().holder.toSourceString());
assertTrue(clazz.isPresent());
DexMethod invokedMethod = invoke.getMethod();
@@ -843,7 +843,7 @@
assertEquals(2, getNumberOfProgramClasses(processedApplication));
// Check that three outlining methods was created.
- DexInspector inspector = new DexInspector(processedApplication);
+ CodeInspector inspector = new CodeInspector(processedApplication);
ClassSubject clazz = inspector.clazz(OutlineOptions.CLASS_NAME);
assertTrue(clazz.isPresent());
assertEquals(3, clazz.getDexClass().directMethods().length);
diff --git a/src/test/java/com/android/tools/r8/smali/RemoveWriteOfUnusedFieldsTest.java b/src/test/java/com/android/tools/r8/smali/RemoveWriteOfUnusedFieldsTest.java
index c8713e3..9c9991e 100644
--- a/src/test/java/com/android/tools/r8/smali/RemoveWriteOfUnusedFieldsTest.java
+++ b/src/test/java/com/android/tools/r8/smali/RemoveWriteOfUnusedFieldsTest.java
@@ -12,8 +12,8 @@
import com.android.tools.r8.graph.DexCode;
import com.android.tools.r8.origin.Origin;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
import java.nio.file.Path;
import org.junit.Test;
@@ -80,7 +80,7 @@
keepMainProguardConfiguration("Test"),
options -> options.enableInlining = false);
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
MethodSubject method = inspector.clazz("Test").method("void", "test", ImmutableList.of());
DexCode code = method.getMethod().getCode().asDexCode();
assertTrue(code.isEmptyVoidMethod());
@@ -153,7 +153,7 @@
keepMainProguardConfiguration("Test"),
options -> options.enableInlining = false);
- DexInspector inspector = new DexInspector(app);
+ CodeInspector inspector = new CodeInspector(app);
MethodSubject method = inspector.clazz("Test").method("void", "test", ImmutableList.of());
DexCode code = method.getMethod().getCode().asDexCode();
assertTrue(code.isEmptyVoidMethod());
diff --git a/src/test/java/com/android/tools/r8/smali/SmaliBuildTest.java b/src/test/java/com/android/tools/r8/smali/SmaliBuildTest.java
index 7287cc3..8d780b4 100644
--- a/src/test/java/com/android/tools/r8/smali/SmaliBuildTest.java
+++ b/src/test/java/com/android/tools/r8/smali/SmaliBuildTest.java
@@ -9,8 +9,8 @@
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.origin.EmbeddedOrigin;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import org.junit.Test;
@@ -19,7 +19,7 @@
private void checkJavaLangString(AndroidApp application, boolean present) {
try {
- DexInspector inspector = new DexInspector(application);
+ CodeInspector inspector = new CodeInspector(application);
ClassSubject clazz = inspector.clazz("java.lang.String");
assertEquals(present, clazz.isPresent());
} catch (IOException | ExecutionException e) {
diff --git a/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java b/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java
index 7aabadb..b12c0b9 100644
--- a/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java
+++ b/src/test/java/com/android/tools/r8/smali/SmaliTestBase.java
@@ -25,8 +25,8 @@
import com.android.tools.r8.utils.AndroidApp;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.Timing;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
import java.io.IOException;
import java.nio.file.Path;
import java.util.Collection;
@@ -112,7 +112,7 @@
}
protected DexClass getClass(DexApplication application, String className) {
- DexInspector inspector = new DexInspector(application);
+ CodeInspector inspector = new CodeInspector(application);
ClassSubject clazz = inspector.clazz(className);
assertTrue(clazz.isPresent());
return clazz.getDexClass();
@@ -124,7 +124,7 @@
protected DexClass getClass(Path appPath, String className) {
try {
- DexInspector inspector = new DexInspector(appPath);
+ CodeInspector inspector = new CodeInspector(appPath);
ClassSubject clazz = inspector.clazz(className);
assertTrue(clazz.isPresent());
return clazz.getDexClass();
@@ -135,14 +135,14 @@
protected DexEncodedMethod getMethod(Path appPath, MethodSignature signature) {
try {
- DexInspector inspector = new DexInspector(appPath);
+ CodeInspector inspector = new CodeInspector(appPath);
return getMethod(inspector, signature);
} catch (IOException | ExecutionException e) {
throw new RuntimeException(e);
}
}
- protected DexEncodedMethod getMethod(DexInspector inspector, MethodSignature signature) {
+ protected DexEncodedMethod getMethod(CodeInspector inspector, MethodSignature signature) {
return getMethod(
inspector, signature.clazz, signature.returnType, signature.name, signature.parameterTypes);
}
diff --git a/src/test/java/com/android/tools/r8/utils/ArtErrorParser.java b/src/test/java/com/android/tools/r8/utils/ArtErrorParser.java
index 51c6ca5..5f00fc9 100644
--- a/src/test/java/com/android/tools/r8/utils/ArtErrorParser.java
+++ b/src/test/java/com/android/tools/r8/utils/ArtErrorParser.java
@@ -4,9 +4,9 @@
package com.android.tools.r8.utils;
import com.android.tools.r8.graph.DexEncodedMethod;
-import com.android.tools.r8.utils.dexinspector.ClassSubject;
-import com.android.tools.r8.utils.dexinspector.DexInspector;
-import com.android.tools.r8.utils.dexinspector.MethodSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import java.util.ArrayList;
import java.util.List;
@@ -72,7 +72,7 @@
public static abstract class ArtErrorInfo {
public abstract int consumedLines();
public abstract String getMessage();
- public abstract String dump(DexInspector inspector, boolean markLocation);
+ public abstract String dump(CodeInspector inspector, boolean markLocation);
}
private static class ArtMethodError extends ArtErrorInfo {
@@ -117,7 +117,7 @@
}
@Override
- public String dump(DexInspector inspector, boolean markLocation) {
+ public String dump(CodeInspector inspector, boolean markLocation) {
ClassSubject clazz = inspector.clazz(className);
MethodSubject method = clazz.method(methodReturn, methodName, methodFormals);
DexEncodedMethod dex = method.getMethod();
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/AbsentAnnotationSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentAnnotationSubject.java
similarity index 91%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/AbsentAnnotationSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/AbsentAnnotationSubject.java
index e6d9306..a82d9b0 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/AbsentAnnotationSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentAnnotationSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.DexEncodedAnnotation;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/AbsentClassSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java
similarity index 97%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/AbsentClassSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java
index e2fa906..167bc8d 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/AbsentClassSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentClassSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.DexClass;
import java.util.List;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/AbsentFieldSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentFieldSubject.java
similarity index 96%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/AbsentFieldSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/AbsentFieldSubject.java
index f79fc00..d4409d1 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/AbsentFieldSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentFieldSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.DexEncodedField;
import com.android.tools.r8.graph.DexValue;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/AbsentMethodSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentMethodSubject.java
similarity index 96%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/AbsentMethodSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/AbsentMethodSubject.java
index 5f10dd7..1396be9 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/AbsentMethodSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/AbsentMethodSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.naming.MemberNaming.Signature;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/AnnotationSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/AnnotationSubject.java
similarity index 88%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/AnnotationSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/AnnotationSubject.java
index 24682be..4bffcca 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/AnnotationSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/AnnotationSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.DexEncodedAnnotation;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/CfInstructionIterator.java b/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionIterator.java
similarity index 73%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/CfInstructionIterator.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionIterator.java
index d000250..0a3263a 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/CfInstructionIterator.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionIterator.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.cf.code.CfInstruction;
import com.android.tools.r8.graph.Code;
@@ -10,11 +10,11 @@
class CfInstructionIterator implements InstructionIterator {
- private final DexInspector dexInspector;
+ private final CodeInspector codeInspector;
private final Iterator<CfInstruction> iterator;
- CfInstructionIterator(DexInspector dexInspector, MethodSubject method) {
- this.dexInspector = dexInspector;
+ CfInstructionIterator(CodeInspector codeInspector, MethodSubject method) {
+ this.codeInspector = codeInspector;
assert method.isPresent();
Code code = method.getMethod().getCode();
assert code != null && code.isCfCode();
@@ -28,6 +28,6 @@
@Override
public InstructionSubject next() {
- return dexInspector.createInstructionSubject(iterator.next());
+ return codeInspector.createInstructionSubject(iterator.next());
}
}
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/CfInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
similarity index 78%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/CfInstructionSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
index ae900f3..fa00432 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/CfInstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
@@ -2,8 +2,9 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
+import com.android.tools.r8.cf.code.CfConstNull;
import com.android.tools.r8.cf.code.CfConstString;
import com.android.tools.r8.cf.code.CfFieldInstruction;
import com.android.tools.r8.cf.code.CfGoto;
@@ -16,6 +17,7 @@
import com.android.tools.r8.cf.code.CfNop;
import com.android.tools.r8.cf.code.CfPosition;
import com.android.tools.r8.cf.code.CfReturnVoid;
+import com.android.tools.r8.cf.code.CfStackInstruction;
import com.android.tools.r8.cf.code.CfThrow;
import org.objectweb.asm.Opcodes;
@@ -55,13 +57,14 @@
}
@Override
- public boolean isConstString() {
+ public boolean isConstString(JumboStringMode jumboStringMode) {
return instruction instanceof CfConstString;
}
@Override
- public boolean isConstString(String value) {
- return isConstString() && ((CfConstString) instruction).getString().toString().equals(value);
+ public boolean isConstString(String value, JumboStringMode jumboStringMode) {
+ return isConstString(jumboStringMode)
+ && ((CfConstString) instruction).getString().toSourceString().equals(value);
}
@Override
@@ -115,4 +118,17 @@
public boolean isPosition() {
return instruction instanceof CfPosition;
}
+
+ public boolean isStackInstruction(CfStackInstruction.Opcode opcode) {
+ return instruction instanceof CfStackInstruction
+ && ((CfStackInstruction) instruction).getOpcode() == opcode;
+ }
+
+ public boolean isConstNull() {
+ return instruction instanceof CfConstNull;
+ }
+
+ public boolean isIfNull() {
+ return instruction instanceof CfIf && ((CfIf) instruction).getOpcode() == Opcodes.IFNULL;
+ }
}
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/ClassSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java
similarity index 97%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/ClassSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java
index afb4928..bbb6213 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/ClassSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/ClassSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.DexClass;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/DexInspector.java b/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
similarity index 90%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/DexInspector.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
index c67a560..ecc78c6 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/DexInspector.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/CodeInspector.java
@@ -1,7 +1,7 @@
// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import static org.junit.Assert.assertTrue;
@@ -30,6 +30,7 @@
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.Timing;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject.JumboStringMode;
import com.google.common.collect.BiMap;
import com.google.common.collect.ImmutableList;
import java.io.IOException;
@@ -44,7 +45,7 @@
import java.util.function.Consumer;
import java.util.function.Function;
-public class DexInspector {
+public class CodeInspector {
private final DexApplication application;
final DexItemFactory dexItemFactory;
@@ -54,19 +55,19 @@
public static MethodSignature MAIN =
new MethodSignature("main", "void", new String[] {"java.lang.String[]"});
- public DexInspector(Path file, String mappingFile) throws IOException, ExecutionException {
+ public CodeInspector(Path file, String mappingFile) throws IOException, ExecutionException {
this(Collections.singletonList(file), mappingFile);
}
- public DexInspector(Path file) throws IOException, ExecutionException {
+ public CodeInspector(Path file) throws IOException, ExecutionException {
this(Collections.singletonList(file), null);
}
- public DexInspector(List<Path> files) throws IOException, ExecutionException {
+ public CodeInspector(List<Path> files) throws IOException, ExecutionException {
this(files, null);
}
- public DexInspector(List<Path> files, String mappingFile) throws IOException, ExecutionException {
+ public CodeInspector(List<Path> files, String mappingFile) throws IOException, ExecutionException {
if (mappingFile != null) {
this.mapping = ClassNameMapper.mapperFromFile(Paths.get(mappingFile));
originalToObfuscatedMapping = this.mapping.getObfuscatedToOriginalMapping().inverse();
@@ -74,23 +75,23 @@
this.mapping = null;
originalToObfuscatedMapping = null;
}
- Timing timing = new Timing("DexInspector");
+ Timing timing = new Timing("CodeInspector");
InternalOptions options = new InternalOptions();
dexItemFactory = options.itemFactory;
AndroidApp input = AndroidApp.builder().addProgramFiles(files).build();
application = new ApplicationReader(input, options, timing).read();
}
- public DexInspector(AndroidApp app) throws IOException, ExecutionException {
+ public CodeInspector(AndroidApp app) throws IOException, ExecutionException {
this(
- new ApplicationReader(app, new InternalOptions(), new Timing("DexInspector"))
+ new ApplicationReader(app, new InternalOptions(), new Timing("CodeInspector"))
.read(app.getProguardMapOutputData()));
}
- public DexInspector(AndroidApp app, Consumer<InternalOptions> optionsConsumer)
+ public CodeInspector(AndroidApp app, Consumer<InternalOptions> optionsConsumer)
throws IOException, ExecutionException {
this(
- new ApplicationReader(app, runOptionsConsumer(optionsConsumer), new Timing("DexInspector"))
+ new ApplicationReader(app, runOptionsConsumer(optionsConsumer), new Timing("CodeInspector"))
.read(app.getProguardMapOutputData()));
}
@@ -100,13 +101,13 @@
return internalOptions;
}
- public DexInspector(AndroidApp app, Path proguardMap) throws IOException, ExecutionException {
+ public CodeInspector(AndroidApp app, Path proguardMap) throws IOException, ExecutionException {
this(
- new ApplicationReader(app, new InternalOptions(), new Timing("DexInspector"))
+ new ApplicationReader(app, new InternalOptions(), new Timing("CodeInspector"))
.read(StringResource.fromFile(proguardMap)));
}
- public DexInspector(DexApplication application) {
+ public CodeInspector(DexApplication application) {
dexItemFactory = application.dexItemFactory;
this.application = application;
this.mapping = application.getProguardMap();
@@ -254,6 +255,8 @@
return new FieldAccessDexInstructionSubject(this, instruction);
} else if (dexInst.isNewInstance()) {
return new NewInstanceDexInstructionSubject(instruction);
+ } else if (dexInst.isConstString(JumboStringMode.ALLOW)) {
+ return new ConstStringDexInstructionSubject(instruction);
} else {
return dexInst;
}
@@ -267,6 +270,8 @@
return new FieldAccessCfInstructionSubject(this, instruction);
} else if (cfInst.isNewInstance()) {
return new NewInstanceCfInstructionSubject(instruction);
+ } else if (cfInst.isConstString(JumboStringMode.ALLOW)) {
+ return new ConstStringCfInstructionSubject(instruction);
} else {
return cfInst;
}
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringCfInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringCfInstructionSubject.java
new file mode 100644
index 0000000..da545e4
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringCfInstructionSubject.java
@@ -0,0 +1,22 @@
+// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.utils.codeinspector;
+
+import com.android.tools.r8.cf.code.CfConstString;
+import com.android.tools.r8.cf.code.CfInstruction;
+import com.android.tools.r8.graph.DexString;
+
+public class ConstStringCfInstructionSubject extends CfInstructionSubject
+ implements ConstStringInstructionSubject {
+ public ConstStringCfInstructionSubject(CfInstruction instruction) {
+ super(instruction);
+ assert isConstString(JumboStringMode.ALLOW);
+ }
+
+ @Override
+ public DexString getString() {
+ return ((CfConstString) instruction).getString();
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringDexInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringDexInstructionSubject.java
new file mode 100644
index 0000000..cb69144
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringDexInstructionSubject.java
@@ -0,0 +1,28 @@
+// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.utils.codeinspector;
+
+import com.android.tools.r8.code.ConstString;
+import com.android.tools.r8.code.ConstStringJumbo;
+import com.android.tools.r8.code.Instruction;
+import com.android.tools.r8.graph.DexString;
+
+public class ConstStringDexInstructionSubject extends DexInstructionSubject
+ implements ConstStringInstructionSubject {
+ public ConstStringDexInstructionSubject(Instruction instruction) {
+ super(instruction);
+ assert isConstString(JumboStringMode.ALLOW);
+ }
+
+ @Override
+ public DexString getString() {
+ if (instruction instanceof ConstString) {
+ return ((ConstString) instruction).getString();
+ } else {
+ assert (instruction instanceof ConstStringJumbo);
+ return ((ConstStringJumbo) instruction).getString();
+ }
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringInstructionSubject.java
new file mode 100644
index 0000000..5914be7
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/ConstStringInstructionSubject.java
@@ -0,0 +1,11 @@
+// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.utils.codeinspector;
+
+import com.android.tools.r8.graph.DexString;
+
+public interface ConstStringInstructionSubject extends InstructionSubject {
+ DexString getString();
+}
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/DexInstructionIterator.java b/src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionIterator.java
similarity index 74%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/DexInstructionIterator.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionIterator.java
index 9ed4de1..8ae5609 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/DexInstructionIterator.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionIterator.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.Code;
import com.android.tools.r8.graph.DexCode;
@@ -10,12 +10,12 @@
class DexInstructionIterator implements InstructionIterator {
- private final DexInspector dexInspector;
+ private final CodeInspector codeInspector;
private final DexCode code;
private int index;
- DexInstructionIterator(DexInspector dexInspector, MethodSubject method) {
- this.dexInspector = dexInspector;
+ DexInstructionIterator(CodeInspector codeInspector, MethodSubject method) {
+ this.codeInspector = codeInspector;
assert method.isPresent();
Code code = method.getMethod().getCode();
assert code != null && code.isDexCode();
@@ -33,6 +33,6 @@
if (index == code.instructions.length) {
throw new NoSuchElementException();
}
- return dexInspector.createInstructionSubject(code.instructions[index++]);
+ return codeInspector.createInstructionSubject(code.instructions[index++]);
}
}
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/DexInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionSubject.java
similarity index 89%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/DexInstructionSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionSubject.java
index 82d725a..9c6d21c 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/DexInstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/DexInstructionSubject.java
@@ -2,10 +2,11 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.code.Const4;
import com.android.tools.r8.code.ConstString;
+import com.android.tools.r8.code.ConstStringJumbo;
import com.android.tools.r8.code.Goto;
import com.android.tools.r8.code.IfEqz;
import com.android.tools.r8.code.IfNez;
@@ -86,14 +87,18 @@
}
@Override
- public boolean isConstString() {
- return instruction instanceof ConstString;
+ public boolean isConstString(JumboStringMode jumboStringMode) {
+ return instruction instanceof ConstString
+ || (jumboStringMode == JumboStringMode.ALLOW && instruction instanceof ConstStringJumbo);
}
@Override
- public boolean isConstString(String value) {
- return instruction instanceof ConstString
- && ((ConstString) instruction).BBBB.toSourceString().equals(value);
+ public boolean isConstString(String value, JumboStringMode jumboStringMode) {
+ return (instruction instanceof ConstString
+ && ((ConstString) instruction).BBBB.toSourceString().equals(value))
+ || (jumboStringMode == JumboStringMode.ALLOW
+ && instruction instanceof ConstStringJumbo
+ && ((ConstStringJumbo) instruction).BBBBBBBB.toSourceString().equals(value));
}
@Override
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/FieldAccessCfInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessCfInstructionSubject.java
similarity index 60%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/FieldAccessCfInstructionSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessCfInstructionSubject.java
index a2103e6..e9ccfd3 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/FieldAccessCfInstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessCfInstructionSubject.java
@@ -2,22 +2,23 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.cf.code.CfFieldInstruction;
import com.android.tools.r8.cf.code.CfInstruction;
public class FieldAccessCfInstructionSubject extends CfInstructionSubject
implements FieldAccessInstructionSubject {
- private final DexInspector dexInspector;
+ private final CodeInspector codeInspector;
- public FieldAccessCfInstructionSubject(DexInspector dexInspector, CfInstruction instruction) {
+ public FieldAccessCfInstructionSubject(CodeInspector codeInspector, CfInstruction instruction) {
super(instruction);
- this.dexInspector = dexInspector;
+ this.codeInspector = codeInspector;
assert isFieldAccess();
}
+ @Override
public TypeSubject holder() {
- return new TypeSubject(dexInspector, ((CfFieldInstruction) instruction).getField().getHolder());
+ return new TypeSubject(codeInspector, ((CfFieldInstruction) instruction).getField().getHolder());
}
}
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessDexInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessDexInstructionSubject.java
new file mode 100644
index 0000000..b9e7fd2
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessDexInstructionSubject.java
@@ -0,0 +1,24 @@
+// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.utils.codeinspector;
+
+import com.android.tools.r8.code.Instruction;
+
+public class FieldAccessDexInstructionSubject extends DexInstructionSubject
+ implements FieldAccessInstructionSubject {
+
+ private final CodeInspector codeInspector;
+
+ public FieldAccessDexInstructionSubject(CodeInspector codeInspector, Instruction instruction) {
+ super(instruction);
+ this.codeInspector = codeInspector;
+ assert isFieldAccess();
+ }
+
+ @Override
+ public TypeSubject holder() {
+ return new TypeSubject(codeInspector, instruction.getField().getHolder());
+ }
+}
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/FieldAccessInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessInstructionSubject.java
similarity index 86%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/FieldAccessInstructionSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessInstructionSubject.java
index 54b27c7..355f3a4 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/FieldAccessInstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FieldAccessInstructionSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
public interface FieldAccessInstructionSubject extends InstructionSubject {
TypeSubject holder();
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/FieldSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FieldSubject.java
similarity index 92%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/FieldSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/FieldSubject.java
index 1e9471b..f9a669a 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/FieldSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FieldSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.DexEncodedField;
import com.android.tools.r8.graph.DexValue;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/FilteredInstructionIterator.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FilteredInstructionIterator.java
similarity index 85%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/FilteredInstructionIterator.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/FilteredInstructionIterator.java
index 5f3c078..870953e 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/FilteredInstructionIterator.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FilteredInstructionIterator.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import java.util.Iterator;
import java.util.NoSuchElementException;
@@ -15,8 +15,8 @@
private InstructionSubject pendingNext = null;
FilteredInstructionIterator(
- DexInspector dexInspector, MethodSubject method, Predicate<InstructionSubject> predicate) {
- this.iterator = dexInspector.createInstructionIterator(method);
+ CodeInspector codeInspector, MethodSubject method, Predicate<InstructionSubject> predicate) {
+ this.iterator = codeInspector.createInstructionIterator(method);
this.predicate = predicate;
hasNext();
}
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/FoundAnnotationSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundAnnotationSubject.java
similarity index 93%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/FoundAnnotationSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/FoundAnnotationSubject.java
index ed85b24..546ef59 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/FoundAnnotationSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundAnnotationSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.DexAnnotation;
import com.android.tools.r8.graph.DexEncodedAnnotation;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/FoundClassSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
similarity index 79%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/FoundClassSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
index 2202f89..9a0661f 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/FoundClassSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundClassSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.DexAnnotation;
import com.android.tools.r8.graph.DexClass;
@@ -25,12 +25,12 @@
public class FoundClassSubject extends ClassSubject {
- private final DexInspector dexInspector;
+ private final CodeInspector codeInspector;
private final DexClass dexClass;
final ClassNamingForNameMapper naming;
- FoundClassSubject(DexInspector dexInspector, DexClass dexClass, ClassNamingForNameMapper naming) {
- this.dexInspector = dexInspector;
+ FoundClassSubject(CodeInspector codeInspector, DexClass dexClass, ClassNamingForNameMapper naming) {
+ this.codeInspector = codeInspector;
this.dexClass = dexClass;
this.naming = naming;
}
@@ -42,14 +42,14 @@
@Override
public void forAllMethods(Consumer<FoundMethodSubject> inspection) {
- DexInspector.forAll(
+ CodeInspector.forAll(
dexClass.directMethods(),
- (encoded, clazz) -> new FoundMethodSubject(dexInspector, encoded, clazz),
+ (encoded, clazz) -> new FoundMethodSubject(codeInspector, encoded, clazz),
this,
inspection);
- DexInspector.forAll(
+ CodeInspector.forAll(
dexClass.virtualMethods(),
- (encoded, clazz) -> new FoundMethodSubject(dexInspector, encoded, clazz),
+ (encoded, clazz) -> new FoundMethodSubject(codeInspector, encoded, clazz),
this,
inspection);
}
@@ -59,11 +59,11 @@
DexType[] parameterTypes = new DexType[parameters.size()];
for (int i = 0; i < parameters.size(); i++) {
parameterTypes[i] =
- dexInspector.toDexType(dexInspector.getObfuscatedTypeName(parameters.get(i)));
+ codeInspector.toDexType(codeInspector.getObfuscatedTypeName(parameters.get(i)));
}
DexProto proto =
- dexInspector.dexItemFactory.createProto(
- dexInspector.toDexType(dexInspector.getObfuscatedTypeName(returnType)), parameterTypes);
+ codeInspector.dexItemFactory.createProto(
+ codeInspector.toDexType(codeInspector.getObfuscatedTypeName(returnType)), parameterTypes);
if (naming != null) {
String[] parameterStrings = new String[parameterTypes.length];
Signature signature =
@@ -74,15 +74,15 @@
}
}
DexMethod dexMethod =
- dexInspector.dexItemFactory.createMethod(
- dexClass.type, proto, dexInspector.dexItemFactory.createString(name));
+ codeInspector.dexItemFactory.createMethod(
+ dexClass.type, proto, codeInspector.dexItemFactory.createString(name));
DexEncodedMethod encoded = findMethod(dexClass.directMethods(), dexMethod);
if (encoded == null) {
encoded = findMethod(dexClass.virtualMethods(), dexMethod);
}
return encoded == null
? new AbsentMethodSubject()
- : new FoundMethodSubject(dexInspector, encoded, this);
+ : new FoundMethodSubject(codeInspector, encoded, this);
}
private DexEncodedMethod findMethod(DexEncodedMethod[] methods, DexMethod dexMethod) {
@@ -96,21 +96,21 @@
@Override
public void forAllFields(Consumer<FoundFieldSubject> inspection) {
- DexInspector.forAll(
+ CodeInspector.forAll(
dexClass.staticFields(),
- (dexField, clazz) -> new FoundFieldSubject(dexInspector, dexField, clazz),
+ (dexField, clazz) -> new FoundFieldSubject(codeInspector, dexField, clazz),
this,
inspection);
- DexInspector.forAll(
+ CodeInspector.forAll(
dexClass.instanceFields(),
- (dexField, clazz) -> new FoundFieldSubject(dexInspector, dexField, clazz),
+ (dexField, clazz) -> new FoundFieldSubject(codeInspector, dexField, clazz),
this,
inspection);
}
@Override
public FieldSubject field(String type, String name) {
- String obfuscatedType = dexInspector.getObfuscatedTypeName(type);
+ String obfuscatedType = codeInspector.getObfuscatedTypeName(type);
MemberNaming fieldNaming = null;
if (naming != null) {
fieldNaming = naming.lookupByOriginalSignature(new FieldSignature(name, type));
@@ -118,17 +118,17 @@
String obfuscatedName = fieldNaming == null ? name : fieldNaming.getRenamedName();
DexField field =
- dexInspector.dexItemFactory.createField(
+ codeInspector.dexItemFactory.createField(
dexClass.type,
- dexInspector.toDexType(obfuscatedType),
- dexInspector.dexItemFactory.createString(obfuscatedName));
+ codeInspector.toDexType(obfuscatedType),
+ codeInspector.dexItemFactory.createString(obfuscatedName));
DexEncodedField encoded = findField(dexClass.staticFields(), field);
if (encoded == null) {
encoded = findField(dexClass.instanceFields(), field);
}
return encoded == null
? new AbsentFieldSubject()
- : new FoundFieldSubject(dexInspector, encoded, this);
+ : new FoundFieldSubject(codeInspector, encoded, this);
}
@Override
@@ -161,7 +161,7 @@
assert !name.endsWith("EnclosingClass")
&& !name.endsWith("EnclosingMethod")
&& !name.endsWith("InnerClass");
- DexAnnotation annotation = dexInspector.findAnnotation(name, dexClass.annotations);
+ DexAnnotation annotation = codeInspector.findAnnotation(name, dexClass.annotations);
return annotation == null
? new AbsentAnnotationSubject()
: new FoundAnnotationSubject(annotation);
@@ -237,13 +237,13 @@
@Override
public String getOriginalSignatureAttribute() {
- return dexInspector.getOriginalSignatureAttribute(
+ return codeInspector.getOriginalSignatureAttribute(
dexClass.annotations, GenericSignatureParser::parseClassSignature);
}
@Override
public String getFinalSignatureAttribute() {
- return dexInspector.getFinalSignatureAttribute(dexClass.annotations);
+ return codeInspector.getFinalSignatureAttribute(dexClass.annotations);
}
@Override
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/FoundFieldSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java
similarity index 84%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/FoundFieldSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java
index 5dfa4f1..ae42b14 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/FoundFieldSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundFieldSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.DexEncodedField;
import com.android.tools.r8.graph.DexValue;
@@ -12,13 +12,13 @@
public class FoundFieldSubject extends FieldSubject {
- private final DexInspector dexInspector;
+ private final CodeInspector codeInspector;
private final FoundClassSubject clazz;
private final DexEncodedField dexField;
public FoundFieldSubject(
- DexInspector dexInspector, DexEncodedField dexField, FoundClassSubject clazz) {
- this.dexInspector = dexInspector;
+ CodeInspector codeInspector, DexEncodedField dexField, FoundClassSubject clazz) {
+ this.codeInspector = codeInspector;
this.clazz = clazz;
this.dexField = dexField;
}
@@ -49,7 +49,7 @@
}
public TypeSubject type() {
- return new TypeSubject(dexInspector, dexField.field.type);
+ return new TypeSubject(codeInspector, dexField.field.type);
}
@Override
@@ -67,7 +67,7 @@
//
// whereas the final signature is for X.a is "a a"
String obfuscatedType = signature.type;
- String originalType = dexInspector.originalToObfuscatedMapping.inverse().get(obfuscatedType);
+ String originalType = codeInspector.originalToObfuscatedMapping.inverse().get(obfuscatedType);
String fieldType = originalType != null ? originalType : obfuscatedType;
FieldSignature lookupSignature = new FieldSignature(signature.name, fieldType);
@@ -98,13 +98,13 @@
@Override
public String getOriginalSignatureAttribute() {
- return dexInspector.getOriginalSignatureAttribute(
+ return codeInspector.getOriginalSignatureAttribute(
dexField.annotations, GenericSignatureParser::parseFieldSignature);
}
@Override
public String getFinalSignatureAttribute() {
- return dexInspector.getFinalSignatureAttribute(dexField.annotations);
+ return codeInspector.getFinalSignatureAttribute(dexField.annotations);
}
@Override
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/FoundMethodSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
similarity index 83%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/FoundMethodSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
index 6eb3858..3fe8186 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/FoundMethodSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/FoundMethodSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.naming.MemberNaming;
@@ -13,13 +13,13 @@
public class FoundMethodSubject extends MethodSubject {
- private final DexInspector dexInspector;
+ private final CodeInspector codeInspector;
private final FoundClassSubject clazz;
private final DexEncodedMethod dexMethod;
public FoundMethodSubject(
- DexInspector dexInspector, DexEncodedMethod encoded, FoundClassSubject clazz) {
- this.dexInspector = dexInspector;
+ CodeInspector codeInspector, DexEncodedMethod encoded, FoundClassSubject clazz) {
+ this.codeInspector = codeInspector;
this.clazz = clazz;
this.dexMethod = encoded;
}
@@ -91,12 +91,12 @@
String[] OriginalParameters = new String[signature.parameters.length];
for (int i = 0; i < OriginalParameters.length; i++) {
String obfuscated = signature.parameters[i];
- String original = dexInspector.originalToObfuscatedMapping.inverse().get(obfuscated);
+ String original = codeInspector.originalToObfuscatedMapping.inverse().get(obfuscated);
OriginalParameters[i] = original != null ? original : obfuscated;
}
String obfuscatedReturnType = signature.type;
String originalReturnType =
- dexInspector.originalToObfuscatedMapping.inverse().get(obfuscatedReturnType);
+ codeInspector.originalToObfuscatedMapping.inverse().get(obfuscatedReturnType);
String returnType = originalReturnType != null ? originalReturnType : obfuscatedReturnType;
MethodSignature lookupSignature =
@@ -113,24 +113,24 @@
@Override
public String getOriginalSignatureAttribute() {
- return dexInspector.getOriginalSignatureAttribute(
+ return codeInspector.getOriginalSignatureAttribute(
dexMethod.annotations, GenericSignatureParser::parseMethodSignature);
}
@Override
public String getFinalSignatureAttribute() {
- return dexInspector.getFinalSignatureAttribute(dexMethod.annotations);
+ return codeInspector.getFinalSignatureAttribute(dexMethod.annotations);
}
@Override
public Iterator<InstructionSubject> iterateInstructions() {
- return dexInspector.createInstructionIterator(this);
+ return codeInspector.createInstructionIterator(this);
}
@Override
public <T extends InstructionSubject> Iterator<T> iterateInstructions(
Predicate<InstructionSubject> filter) {
- return new FilteredInstructionIterator<>(dexInspector, this, filter);
+ return new FilteredInstructionIterator<>(codeInspector, this, filter);
}
@Override
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/InstructionIterator.java b/src/test/java/com/android/tools/r8/utils/codeinspector/InstructionIterator.java
similarity index 86%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/InstructionIterator.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/InstructionIterator.java
index a777319..4685730 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/InstructionIterator.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/InstructionIterator.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import java.util.Iterator;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/InstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/InstructionSubject.java
similarity index 70%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/InstructionSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/InstructionSubject.java
index b6f1e52..6c1f4be 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/InstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/InstructionSubject.java
@@ -2,9 +2,15 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
public interface InstructionSubject {
+
+ enum JumboStringMode {
+ ALLOW,
+ DISALLOW
+ };
+
boolean isFieldAccess();
boolean isInvokeVirtual();
@@ -15,9 +21,9 @@
boolean isNop();
- boolean isConstString();
+ boolean isConstString(JumboStringMode jumboStringMode);
- boolean isConstString(String value);
+ boolean isConstString(String value, JumboStringMode jumboStringMode);
boolean isGoto();
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/InvokeCfInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/InvokeCfInstructionSubject.java
similarity index 72%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/InvokeCfInstructionSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/InvokeCfInstructionSubject.java
index 4d245b2..b307112 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/InvokeCfInstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/InvokeCfInstructionSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.cf.code.CfInstruction;
import com.android.tools.r8.cf.code.CfInvoke;
@@ -11,18 +11,20 @@
public class InvokeCfInstructionSubject extends CfInstructionSubject
implements InvokeInstructionSubject {
- private final DexInspector dexInspector;
+ private final CodeInspector codeInspector;
- public InvokeCfInstructionSubject(DexInspector dexInspector, CfInstruction instruction) {
+ public InvokeCfInstructionSubject(CodeInspector codeInspector, CfInstruction instruction) {
super(instruction);
assert isInvoke();
- this.dexInspector = dexInspector;
+ this.codeInspector = codeInspector;
}
+ @Override
public TypeSubject holder() {
- return new TypeSubject(dexInspector, invokedMethod().getHolder());
+ return new TypeSubject(codeInspector, invokedMethod().getHolder());
}
+ @Override
public DexMethod invokedMethod() {
if (isInvokeDynamic()) {
throw new Unimplemented(
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/InvokeDexInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/InvokeDexInstructionSubject.java
similarity index 64%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/InvokeDexInstructionSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/InvokeDexInstructionSubject.java
index 51d0767..7b5d41c 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/InvokeDexInstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/InvokeDexInstructionSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.code.Instruction;
import com.android.tools.r8.graph.DexMethod;
@@ -10,18 +10,20 @@
public class InvokeDexInstructionSubject extends DexInstructionSubject
implements InvokeInstructionSubject {
- private final DexInspector dexInspector;
+ private final CodeInspector codeInspector;
- public InvokeDexInstructionSubject(DexInspector dexInspector, Instruction instruction) {
+ public InvokeDexInstructionSubject(CodeInspector codeInspector, Instruction instruction) {
super(instruction);
- this.dexInspector = dexInspector;
+ this.codeInspector = codeInspector;
assert isInvoke();
}
+ @Override
public TypeSubject holder() {
- return new TypeSubject(dexInspector, invokedMethod().getHolder());
+ return new TypeSubject(codeInspector, invokedMethod().getHolder());
}
+ @Override
public DexMethod invokedMethod() {
return instruction.getMethod();
}
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/InvokeInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/InvokeInstructionSubject.java
similarity index 88%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/InvokeInstructionSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/InvokeInstructionSubject.java
index 9b59340..b2f99dc 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/InvokeInstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/InvokeInstructionSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.DexMethod;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/Matchers.java b/src/test/java/com/android/tools/r8/utils/codeinspector/Matchers.java
similarity index 98%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/Matchers.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/Matchers.java
index ab3ef13..3b718a4 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/Matchers.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/Matchers.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.google.common.collect.ImmutableList;
import org.hamcrest.Description;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/MemberSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/MemberSubject.java
similarity index 94%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/MemberSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/MemberSubject.java
index 1852659..9e90fde 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/MemberSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/MemberSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.naming.MemberNaming.Signature;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/MethodSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/MethodSubject.java
similarity index 94%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/MethodSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/MethodSubject.java
index 3427924..6eaaf5f 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/MethodSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/MethodSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.DexEncodedMethod;
import java.util.Iterator;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/NewInstanceCfInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceCfInstructionSubject.java
similarity index 92%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/NewInstanceCfInstructionSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceCfInstructionSubject.java
index 598ecf2..d3b0a93 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/NewInstanceCfInstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceCfInstructionSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.cf.code.CfInstruction;
import com.android.tools.r8.cf.code.CfNew;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/NewInstanceDexInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceDexInstructionSubject.java
similarity index 92%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/NewInstanceDexInstructionSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceDexInstructionSubject.java
index 5a1b01c..a396468 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/NewInstanceDexInstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceDexInstructionSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.code.Instruction;
import com.android.tools.r8.code.NewInstance;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/NewInstanceInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceInstructionSubject.java
similarity index 87%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/NewInstanceInstructionSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceInstructionSubject.java
index 7450fbe..2a0f192 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/NewInstanceInstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/NewInstanceInstructionSubject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.DexType;
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/Subject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/Subject.java
similarity index 86%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/Subject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/Subject.java
index f83eb14..d93e19a 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/Subject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/Subject.java
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
public abstract class Subject {
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/TypeSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/TypeSubject.java
similarity index 70%
rename from src/test/java/com/android/tools/r8/utils/dexinspector/TypeSubject.java
rename to src/test/java/com/android/tools/r8/utils/codeinspector/TypeSubject.java
index 5b21c41..ba2230a 100644
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/TypeSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/TypeSubject.java
@@ -2,17 +2,17 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-package com.android.tools.r8.utils.dexinspector;
+package com.android.tools.r8.utils.codeinspector;
import com.android.tools.r8.graph.DexType;
public class TypeSubject extends Subject {
- private final DexInspector dexInspector;
+ private final CodeInspector codeInspector;
private final DexType dexType;
- TypeSubject(DexInspector dexInspector, DexType dexType) {
- this.dexInspector = dexInspector;
+ TypeSubject(CodeInspector codeInspector, DexType dexType) {
+ this.codeInspector = codeInspector;
this.dexType = dexType;
}
@@ -27,7 +27,7 @@
}
public boolean is(String type) {
- return dexType.equals(dexInspector.toDexType(type));
+ return dexType.equals(codeInspector.toDexType(type));
}
public String toString() {
diff --git a/src/test/java/com/android/tools/r8/utils/dexinspector/FieldAccessDexInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/dexinspector/FieldAccessDexInstructionSubject.java
deleted file mode 100644
index ed54f90..0000000
--- a/src/test/java/com/android/tools/r8/utils/dexinspector/FieldAccessDexInstructionSubject.java
+++ /dev/null
@@ -1,23 +0,0 @@
-// Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package com.android.tools.r8.utils.dexinspector;
-
-import com.android.tools.r8.code.Instruction;
-
-public class FieldAccessDexInstructionSubject extends DexInstructionSubject
- implements FieldAccessInstructionSubject {
-
- private final DexInspector dexInspector;
-
- public FieldAccessDexInstructionSubject(DexInspector dexInspector, Instruction instruction) {
- super(instruction);
- this.dexInspector = dexInspector;
- assert isFieldAccess();
- }
-
- public TypeSubject holder() {
- return new TypeSubject(dexInspector, instruction.getField().getHolder());
- }
-}