| // 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.shaking; |
| |
| import com.android.tools.r8.graph.DexProgramClass; |
| import com.android.tools.r8.graph.DexType; |
| import com.android.tools.r8.graph.GraphLens; |
| import com.android.tools.r8.graph.PrunedItems; |
| import com.google.common.collect.Sets; |
| import java.util.Set; |
| |
| public class ProguardCompatibilityActions { |
| |
| private final Set<DexType> compatInstantiatedTypes; |
| |
| private ProguardCompatibilityActions(Set<DexType> compatInstantiatedTypes) { |
| this.compatInstantiatedTypes = compatInstantiatedTypes; |
| } |
| |
| public static Builder builder() { |
| return new Builder(); |
| } |
| |
| public boolean isCompatInstantiated(DexProgramClass clazz) { |
| return compatInstantiatedTypes.contains(clazz.getType()); |
| } |
| |
| public ProguardCompatibilityActions withoutPrunedItems(PrunedItems prunedItems) { |
| Builder builder = builder(); |
| for (DexType compatInstantiatedType : compatInstantiatedTypes) { |
| if (!prunedItems.isRemoved(compatInstantiatedType)) { |
| builder.addCompatInstantiatedType(compatInstantiatedType); |
| } |
| } |
| return builder.build(); |
| } |
| |
| public ProguardCompatibilityActions rewrittenWithLens(GraphLens lens) { |
| Builder builder = builder(); |
| for (DexType compatInstantiatedType : compatInstantiatedTypes) { |
| builder.addCompatInstantiatedType(lens.lookupType(compatInstantiatedType)); |
| } |
| return builder.build(); |
| } |
| |
| public static class Builder { |
| |
| private final Set<DexType> compatInstantiatedTypes = Sets.newIdentityHashSet(); |
| |
| public void addCompatInstantiatedType(DexProgramClass clazz) { |
| addCompatInstantiatedType(clazz.getType()); |
| } |
| |
| private void addCompatInstantiatedType(DexType type) { |
| compatInstantiatedTypes.add(type); |
| } |
| |
| public ProguardCompatibilityActions build() { |
| return new ProguardCompatibilityActions(compatInstantiatedTypes); |
| } |
| } |
| } |