| // Copyright (c) 2021, 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.mappinginformation; |
| |
| import static com.android.tools.r8.naming.mappinginformation.MappingInformationDiagnostics.noKeyForObjectWithId; |
| |
| import com.android.tools.r8.naming.MapVersion; |
| import com.google.gson.JsonObject; |
| import com.google.gson.JsonPrimitive; |
| import java.util.function.Consumer; |
| |
| public class MapVersionMappingInformation extends MappingInformation { |
| |
| public static final String ID = "com.android.tools.r8.mapping"; |
| public static final String MAP_VERSION_KEY = "version"; |
| |
| private final MapVersion mapVersion; |
| private final String value; |
| |
| public MapVersionMappingInformation(MapVersion mapVersion, String value) { |
| this.mapVersion = mapVersion; |
| this.value = value; |
| } |
| |
| @Override |
| public String getId() { |
| return ID; |
| } |
| |
| @Override |
| public boolean isMapVersionMappingInformation() { |
| return true; |
| } |
| |
| @Override |
| public MapVersionMappingInformation asMapVersionMappingInformation() { |
| return this; |
| } |
| |
| @Override |
| public boolean allowOther(MappingInformation information) { |
| return true; |
| } |
| |
| public MapVersion getMapVersion() { |
| return mapVersion; |
| } |
| |
| public String getValue() { |
| return value; |
| } |
| |
| @Override |
| public boolean isGlobalMappingInformation() { |
| return true; |
| } |
| |
| @Override |
| public String serialize() { |
| JsonObject result = new JsonObject(); |
| result.add(MAPPING_ID_KEY, new JsonPrimitive(ID)); |
| result.add(MAP_VERSION_KEY, new JsonPrimitive(mapVersion.getName())); |
| return result.toString(); |
| } |
| |
| public static void deserialize( |
| JsonObject object, int lineNumber, Consumer<MappingInformation> onMappingInfo) { |
| // Parsing the generator information must support parsing at all map versions as it itself is |
| // what establishes the version. |
| String mapVersionString = object.get(MAP_VERSION_KEY).getAsString(); |
| if (mapVersionString == null) { |
| noKeyForObjectWithId(lineNumber, MAP_VERSION_KEY, MAPPING_ID_KEY, ID); |
| return; |
| } |
| MapVersion mapVersion = MapVersion.fromName(mapVersionString); |
| if (mapVersion == null) { |
| mapVersion = MapVersion.MAP_VERSION_UNKNOWN; |
| } |
| onMappingInfo.accept(new MapVersionMappingInformation(mapVersion, mapVersionString)); |
| } |
| } |