blob: 7084d2d46cbf963be14c1f7f3890422178246d14 [file] [log] [blame]
// Copyright (c) 2023, 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.naming;
import com.android.tools.r8.Version;
import com.android.tools.r8.naming.ProguardMapSupplier.ProguardMapId;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.VersionProperties;
import java.util.ArrayList;
import java.util.List;
public class ProguardMapMarkerInfo {
private static final String MARKER_KEY_COMPILER = "compiler";
private static final String MARKER_KEY_COMPILER_VERSION = "compiler_version";
private static final String MARKER_KEY_COMPILER_HASH = "compiler_hash";
private static final String MARKER_KEY_MIN_API = "min_api";
private static final String MARKER_KEY_PG_MAP_ID = "pg_map_id";
public static final String MARKER_KEY_PG_MAP_HASH = "pg_map_hash";
public static final String SHA_256_KEY = "SHA-256";
private final String compilerName;
private final boolean isGeneratingDex;
private final AndroidApiLevel apiLevel;
private final MapVersion mapVersion;
private final ProguardMapId proguardMapId;
private ProguardMapMarkerInfo(
String compilerName,
boolean isGeneratingDex,
AndroidApiLevel apiLevel,
MapVersion mapVersion,
ProguardMapId proguardMapId) {
this.compilerName = compilerName;
this.isGeneratingDex = isGeneratingDex;
this.apiLevel = apiLevel;
this.mapVersion = mapVersion;
this.proguardMapId = proguardMapId;
}
public List<String> toPreamble() {
List<String> preamble = new ArrayList<>();
preamble.add("# " + MARKER_KEY_COMPILER + ": " + compilerName);
preamble.add("# " + MARKER_KEY_COMPILER_VERSION + ": " + Version.LABEL);
if (isGeneratingDex) {
preamble.add("# " + MARKER_KEY_MIN_API + ": " + apiLevel.getLevel());
}
if (Version.isDevelopmentVersion()) {
preamble.add("# " + MARKER_KEY_COMPILER_HASH + ": " + VersionProperties.INSTANCE.getSha());
}
// Turn off linting of the mapping file in some build systems.
preamble.add("# common_typos_disable");
// Emit the R8 specific map-file version.
if (mapVersion.isGreaterThan(MapVersion.MAP_VERSION_NONE)) {
preamble.add("# " + mapVersion.toMapVersionMappingInformation().serialize());
}
preamble.add("# " + MARKER_KEY_PG_MAP_ID + ": " + proguardMapId.getId());
preamble.add(
"# " + MARKER_KEY_PG_MAP_HASH + ": " + SHA_256_KEY + " " + proguardMapId.getHash());
return preamble;
}
public static Builder builder() {
return new Builder();
}
public static class Builder {
private String compilerName;
private boolean isGeneratingDex;
private AndroidApiLevel apiLevel;
private MapVersion mapVersion;
private ProguardMapId proguardMapId;
public Builder setCompilerName(String compilerName) {
this.compilerName = compilerName;
return this;
}
public Builder setApiLevel(AndroidApiLevel apiLevel) {
this.apiLevel = apiLevel;
return this;
}
public Builder setGeneratingDex(boolean generatingDex) {
isGeneratingDex = generatingDex;
return this;
}
public Builder setMapVersion(MapVersion mapVersion) {
this.mapVersion = mapVersion;
return this;
}
public Builder setProguardMapId(ProguardMapId proguardMapId) {
this.proguardMapId = proguardMapId;
return this;
}
public ProguardMapMarkerInfo build() {
return new ProguardMapMarkerInfo(
compilerName, isGeneratingDex, apiLevel, mapVersion, proguardMapId);
}
}
}