// Copyright (c) 2020, 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.utils;

import com.android.tools.r8.graph.DexDefinitionSupplier;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexReference;
import com.android.tools.r8.graph.GraphLens;
import com.google.common.collect.Sets;
import java.util.Set;
import java.util.function.Consumer;

public class LensUtils {

  public static Set<DexEncodedMethod> rewrittenWithRenamedSignature(
      Set<DexEncodedMethod> methods, DexDefinitionSupplier definitions, GraphLens lens) {
    Set<DexEncodedMethod> result = Sets.newIdentityHashSet();
    for (DexEncodedMethod method : methods) {
      result.add(lens.mapDexEncodedMethod(method, definitions));
    }
    return result;
  }

  public static <T extends DexReference> void rewriteAndApplyIfNotPrimitiveType(
      GraphLens graphLens, T reference, Consumer<T> rewrittenConsumer) {
    T rewrittenReference = graphLens.rewriteReference(reference);
    // Enum unboxing can change a class type to int which leads to errors going forward since
    // the root set should not have primitive types.
    if (rewrittenReference.isDexType() && rewrittenReference.asDexType().isPrimitiveType()) {
      return;
    }
    rewrittenConsumer.accept(rewrittenReference);
  }
}
