blob: 0c8111562c5639467549e40a841348b5628c4924 [file] [log] [blame]
// Copyright (c) 2024, 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.metadata;
import com.android.tools.r8.keepanno.annotations.KeepForApi;
import com.android.tools.r8.metadata.impl.R8ApiModelingMetadataImpl;
import com.android.tools.r8.metadata.impl.R8BaselineProfileRewritingMetadataImpl;
import com.android.tools.r8.metadata.impl.R8BuildMetadataImpl;
import com.android.tools.r8.metadata.impl.R8CompilationMetadataImpl;
import com.android.tools.r8.metadata.impl.R8DexFileMetadataImpl;
import com.android.tools.r8.metadata.impl.R8FeatureSplitMetadataImpl;
import com.android.tools.r8.metadata.impl.R8FeatureSplitsMetadataImpl;
import com.android.tools.r8.metadata.impl.R8KeepAttributesMetadataImpl;
import com.android.tools.r8.metadata.impl.R8LibraryDesugaringMetadataImpl;
import com.android.tools.r8.metadata.impl.R8OptionsMetadataImpl;
import com.android.tools.r8.metadata.impl.R8ResourceOptimizationMetadataImpl;
import com.android.tools.r8.metadata.impl.R8StartupOptimizationMetadataImpl;
import com.android.tools.r8.metadata.impl.R8StatsMetadataImpl;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializer;
import java.util.List;
@KeepForApi
public interface R8BuildMetadata {
static R8BuildMetadata fromJson(String json) {
return new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
.registerTypeAdapter(R8OptionsMetadata.class, deserializeTo(R8OptionsMetadataImpl.class))
.registerTypeAdapter(
R8ApiModelingMetadata.class, deserializeTo(R8ApiModelingMetadataImpl.class))
.registerTypeAdapter(
R8BaselineProfileRewritingMetadata.class,
deserializeTo(R8BaselineProfileRewritingMetadataImpl.class))
.registerTypeAdapter(
R8CompilationMetadata.class, deserializeTo(R8CompilationMetadataImpl.class))
.registerTypeAdapter(R8DexFileMetadata.class, deserializeTo(R8DexFileMetadataImpl.class))
.registerTypeAdapter(R8StatsMetadata.class, deserializeTo(R8StatsMetadataImpl.class))
.registerTypeAdapter(
R8FeatureSplitMetadata.class, deserializeTo(R8FeatureSplitMetadataImpl.class))
.registerTypeAdapter(
R8FeatureSplitsMetadata.class, deserializeTo(R8FeatureSplitsMetadataImpl.class))
.registerTypeAdapter(
R8KeepAttributesMetadata.class, deserializeTo(R8KeepAttributesMetadataImpl.class))
.registerTypeAdapter(
R8LibraryDesugaringMetadata.class, deserializeTo(R8LibraryDesugaringMetadataImpl.class))
.registerTypeAdapter(
R8ResourceOptimizationMetadata.class,
deserializeTo(R8ResourceOptimizationMetadataImpl.class))
.registerTypeAdapter(
R8StartupOptimizationMetadata.class,
deserializeTo(R8StartupOptimizationMetadataImpl.class))
.serializeNulls()
.create()
.fromJson(json, R8BuildMetadataImpl.class);
}
private static <T> JsonDeserializer<T> deserializeTo(Class<T> implClass) {
return (element, type, context) -> context.deserialize(element, implClass);
}
R8OptionsMetadata getOptionsMetadata();
/**
* @return null if baseline profile rewriting is disabled.
*/
R8BaselineProfileRewritingMetadata getBaselineProfileRewritingMetadata();
R8CompilationMetadata getCompilationMetadata();
/**
* @return null if not compiling to dex.
*/
List<R8DexFileMetadata> getDexFilesMetadata();
/**
* @return null if not using feature splits.
*/
R8FeatureSplitsMetadata getFeatureSplitsMetadata();
/**
* @return null if resource optimization is disabled.
*/
R8ResourceOptimizationMetadata getResourceOptimizationMetadata();
/**
* @return null if startup optimization is disabled.
*/
R8StartupOptimizationMetadata getStartupOptizationOptions();
R8StatsMetadata getStatsMetadata();
String getVersion();
String toJson();
}