blob: 50ff57888b37653a3583ce706a975be62bf5a942 [file] [log] [blame]
// Copyright (c) 2017, 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.graph;
import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.utils.InternalOptions;
import java.io.PrintStream;
public class AssemblyWriter extends DexByteCodeWriter {
public AssemblyWriter(DexApplication application, InternalOptions options) {
super(application, options);
}
@Override
String getFileEnding() {
return ".dump";
}
@Override
void writeClassHeader(DexProgramClass clazz, PrintStream ps) {
String clazzName;
if (application.getProguardMap() != null) {
clazzName = application.getProguardMap().originalNameOf(clazz.type);
} else {
clazzName = clazz.type.toSourceString();
}
ps.println("# Bytecode for");
ps.println("# Class: '" + clazzName + "'");
ps.println();
}
@Override
void writeField(DexEncodedField field, PrintStream ps) {
// Not implemented, yet.
}
@Override
void writeMethod(DexEncodedMethod method, PrintStream ps) {
ClassNameMapper naming = application.getProguardMap();
String methodName = naming != null
? naming.originalSignatureOf(method.method).toString()
: method.method.name.toString();
ps.println("#");
ps.println("# Method: '" + methodName + "':");
ps.println("#");
ps.println();
Code code = method.getCode();
if (code != null) {
ps.println(code.toString(method, naming));
}
}
@Override
void writeClassFooter(DexProgramClass clazz, PrintStream ps) {
}
}