blob: 3e50bf5cec502688d2b9e0221fcdd9c74d895a3f [file] [log] [blame]
// 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.synthesis;
import com.android.tools.r8.FeatureSplit;
import com.android.tools.r8.graph.DexProgramClass;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.graph.ProgramDefinition;
import com.android.tools.r8.utils.IterableUtils;
import com.google.common.collect.ImmutableSet;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
public class LegacySyntheticDefinition {
private final DexProgramClass clazz;
private final Map<DexType, FeatureSplit> contexts = new ConcurrentHashMap<>();
public LegacySyntheticDefinition(DexProgramClass clazz) {
this.clazz = clazz;
}
public void addContext(ProgramDefinition clazz, FeatureSplit featureSplit) {
DexType type = clazz.getContextType();
contexts.put(type, featureSplit);
}
public Set<DexType> getContexts() {
return contexts.keySet();
}
public LegacySyntheticReference toReference() {
return new LegacySyntheticReference(
clazz.getType(), ImmutableSet.copyOf(contexts.keySet()), getFeatureSplit());
}
public FeatureSplit getFeatureSplit() {
assert verifyConsistentFeatures();
if (contexts.isEmpty()) {
return FeatureSplit.BASE;
}
return IterableUtils.first(contexts.values());
}
private boolean verifyConsistentFeatures() {
HashSet<FeatureSplit> features = new HashSet<>(contexts.values());
assert features.size() < 2;
return true;
}
public DexProgramClass getDefinition() {
return clazz;
}
}