Add --nocode option for disassembling
This makes it easier to compare class and kotlin metadata.
Change-Id: I4f7e3b14f4ccdda349677ce45f9e6b478521b51b
diff --git a/src/main/java/com/android/tools/r8/Disassemble.java b/src/main/java/com/android/tools/r8/Disassemble.java
index 6e3764a..7c4ac49 100644
--- a/src/main/java/com/android/tools/r8/Disassemble.java
+++ b/src/main/java/com/android/tools/r8/Disassemble.java
@@ -34,6 +34,7 @@
private Path proguardMapFile = null;
private boolean useSmali = false;
private boolean allInfo = false;
+ private boolean noCode = false;
private boolean useIr;
@Override
@@ -70,6 +71,11 @@
return this;
}
+ public Builder setNoCode(boolean noCode) {
+ this.noCode = noCode;
+ return this;
+ }
+
@Override
protected DisassembleCommand makeCommand() {
// If printing versions ignore everything else.
@@ -82,7 +88,8 @@
proguardMapFile == null ? null : StringResource.fromFile(proguardMapFile),
allInfo,
useSmali,
- useIr);
+ useIr,
+ noCode);
}
}
@@ -93,6 +100,7 @@
+ " --all # Include all information in disassembly.\n"
+ " --smali # Disassemble using smali syntax.\n"
+ " --ir # Print IR before and after optimization.\n"
+ + " --nocode # No printing of code objects.\n"
+ " --pg-map <file> # Proguard map <file> for mapping names.\n"
+ " --pg-map-charset <charset> # Charset for Proguard map file.\n"
+ " --output # Specify a file or directory to write to.\n"
@@ -102,6 +110,7 @@
private final boolean allInfo;
private final boolean useSmali;
private final boolean useIr;
+ private final boolean noCode;
public static Builder builder() {
return new Builder();
@@ -128,6 +137,8 @@
builder.setUseSmali(true);
} else if (arg.equals("--ir")) {
builder.setUseIr(true);
+ } else if (arg.equals("--nocode")) {
+ builder.setNoCode(true);
} else if (arg.equals("--pg-map")) {
builder.setProguardMapFile(Paths.get(args[++i]));
} else if (arg.equals("--pg-map-charset")) {
@@ -161,13 +172,15 @@
StringResource proguardMap,
boolean allInfo,
boolean useSmali,
- boolean useIr) {
+ boolean useIr,
+ boolean noCode) {
super(inputApp);
this.outputPath = outputPath;
this.proguardMap = proguardMap;
this.allInfo = allInfo;
this.useSmali = useSmali;
this.useIr = useIr;
+ this.noCode = noCode;
}
private DisassembleCommand(boolean printHelp, boolean printVersion) {
@@ -177,6 +190,7 @@
allInfo = false;
useSmali = false;
useIr = false;
+ noCode = false;
}
public Path getOutputPath() {
@@ -191,6 +205,10 @@
return useIr;
}
+ public boolean noCode() {
+ return noCode;
+ }
+
@Override
InternalOptions getInternalOptions() {
InternalOptions internal = new InternalOptions();
@@ -226,7 +244,8 @@
DexByteCodeWriter writer =
command.useSmali()
? new SmaliWriter(application, options)
- : new AssemblyWriter(application, options, command.allInfo, command.useIr());
+ : new AssemblyWriter(
+ application, options, command.allInfo, command.useIr(), !command.noCode());
if (command.getOutputPath() != null) {
writer.write(command.getOutputPath());
} else {
diff --git a/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java b/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
index 3cd5fc5..d10c69f 100644
--- a/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
+++ b/src/main/java/com/android/tools/r8/graph/AssemblyWriter.java
@@ -30,17 +30,23 @@
private final boolean writeFields;
private final boolean writeAnnotations;
private final boolean writeIR;
+ private final boolean writeCode;
private final AppInfoWithClassHierarchy appInfo;
private final Kotlin kotlin;
private final Timing timing = new Timing("AssemblyWriter");
public AssemblyWriter(
- DexApplication application, InternalOptions options, boolean allInfo, boolean writeIR) {
+ DexApplication application,
+ InternalOptions options,
+ boolean allInfo,
+ boolean writeIR,
+ boolean writeCode) {
super(application, options);
this.writeAllClassInfo = allInfo;
this.writeFields = allInfo;
this.writeAnnotations = allInfo;
this.writeIR = writeIR;
+ this.writeCode = writeCode;
if (writeIR) {
this.appInfo = new AppInfoWithClassHierarchy(application.toDirect());
if (options.programConsumer == null) {
@@ -128,6 +134,9 @@
ps.println("# " + definition.accessFlags);
ps.println("#");
ps.println();
+ if (!writeCode) {
+ return;
+ }
Code code = definition.getCode();
if (code != null) {
if (writeIR) {
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 9ad7a70..31150c4 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -2129,7 +2129,7 @@
throws IOException, ExecutionException {
DexApplication application =
new ApplicationReader(app, new InternalOptions(), Timing.empty()).read().toDirect();
- new AssemblyWriter(application, new InternalOptions(), true, false).write(ps);
+ new AssemblyWriter(application, new InternalOptions(), true, false, true).write(ps);
}
public static Path getTestFolderForClass(Class<?> clazz) {