// Copyright (c) 2023, 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.graph.lens;

import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.ir.optimize.CustomLensCodeRewriter;
import com.android.tools.r8.utils.collections.BidirectionalManyToManyRepresentativeMap;
import com.android.tools.r8.utils.collections.BidirectionalManyToOneRepresentativeMap;
import java.util.Map;

public class NestedGraphLensWithCustomLensCodeRewriter extends NestedGraphLens {

  private CustomLensCodeRewriter customLensCodeRewriter;

  public NestedGraphLensWithCustomLensCodeRewriter(
      AppView<?> appView,
      BidirectionalManyToOneRepresentativeMap<DexField, DexField> fieldMap,
      BidirectionalManyToOneRepresentativeMap<DexMethod, DexMethod> methodMap,
      BidirectionalManyToManyRepresentativeMap<DexType, DexType> typeMap,
      CustomLensCodeRewriter customLensCodeRewriter) {
    super(appView, fieldMap, methodMap, typeMap);
    this.customLensCodeRewriter = customLensCodeRewriter;
  }

  public NestedGraphLensWithCustomLensCodeRewriter(
      AppView<?> appView,
      BidirectionalManyToOneRepresentativeMap<DexField, DexField> fieldMap,
      Map<DexMethod, DexMethod> methodMap,
      BidirectionalManyToManyRepresentativeMap<DexType, DexType> typeMap,
      BidirectionalManyToManyRepresentativeMap<DexMethod, DexMethod> newMethodSignatures) {
    super(appView, fieldMap, methodMap, typeMap, newMethodSignatures);
  }

  @Override
  public boolean hasCustomLensCodeRewriter() {
    return true;
  }

  public void setCustomLensCodeRewriter(CustomLensCodeRewriter customLensCodeRewriter) {
    this.customLensCodeRewriter = customLensCodeRewriter;
  }

  @Override
  public CustomLensCodeRewriter getCustomLensCodeRewriter() {
    assert customLensCodeRewriter != null;
    return customLensCodeRewriter;
  }
}
