blob: b768c52cb1d99244f1d8601cd2947b64b57e34c6 [file] [log] [blame]
// Copyright (c) 2020, 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.tracereferences;
import com.android.tools.r8.references.MethodReference;
import com.android.tools.r8.tracereferences.TraceReferencesConsumer.TracedClass;
import com.android.tools.r8.tracereferences.TraceReferencesConsumer.TracedField;
import com.android.tools.r8.tracereferences.TraceReferencesConsumer.TracedMethod;
import com.android.tools.r8.utils.StringUtils;
import java.util.List;
class KeepRuleFormatter extends Formatter {
final boolean allowObfuscation;
KeepRuleFormatter(boolean allowObfuscation) {
this.allowObfuscation = allowObfuscation;
}
@Override
protected void printTypeHeader(TracedClass tracedClass) {
if (tracedClass.isMissingDefinition()) {
appendLine("# Missing class: " + tracedClass.getReference().getTypeName());
return;
}
append(allowObfuscation ? "-keep,allowobfuscation" : "-keep");
if (tracedClass.getAccessFlags().isInterface()) {
appendLine(" interface " + tracedClass.getReference().getTypeName() + " {");
} else if (tracedClass.getAccessFlags().isEnum()) {
appendLine(" enum " + tracedClass.getReference().getTypeName() + " {");
} else {
appendLine(" class " + tracedClass.getReference().getTypeName() + " {");
}
}
@Override
protected void printConstructorName(MethodReference method) {
append("<init>");
}
@Override
protected void printField(TracedField field) {
append(
" "
+ field.getReference().getFieldType().getTypeName()
+ " "
+ field.getReference().getFieldName()
+ ";"
+ System.lineSeparator());
}
@Override
protected void printMethod(TracedMethod tracedMethod) {
if (tracedMethod.getReference().getMethodName().equals("<clinit>")) {
return;
}
append(" ");
if (tracedMethod.getAccessFlags().isPublic()) {
append("public ");
} else if (tracedMethod.getAccessFlags().isPrivate()) {
append("private ");
} else if (tracedMethod.getAccessFlags().isProtected()) {
append("protected ");
}
if (tracedMethod.getAccessFlags().isStatic()) {
append("static ");
}
printNameAndReturn(tracedMethod.getReference());
printArguments(tracedMethod.getReference());
appendLine(";");
}
@Override
protected void printPackageNames(List<String> packageNames) {
if (!packageNames.isEmpty()) {
append("-keeppackagenames " + StringUtils.join(",", packageNames) + System.lineSeparator());
}
}
@Override
protected void printTypeFooter() {
appendLine("}");
}
}