// 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.kotlin;

import com.android.tools.r8.graph.AppView;
import com.android.tools.r8.graph.DexDefinitionSupplier;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.shaking.EnqueuerMetadataTraceable;
import com.android.tools.r8.utils.Reporter;
import kotlinx.metadata.KmTypeProjection;
import kotlinx.metadata.KmVariance;

// Provides access to Kotlin information about the type projection of a type (arguments).
public class KotlinTypeProjectionInfo implements EnqueuerMetadataTraceable {

  final KmVariance variance;
  final KotlinTypeInfo typeInfo;

  private KotlinTypeProjectionInfo(KmVariance variance, KotlinTypeInfo typeInfo) {
    this.variance = variance;
    this.typeInfo = typeInfo;
  }

  static KotlinTypeProjectionInfo create(
      KmTypeProjection kmTypeProjection, DexItemFactory factory, Reporter reporter) {
    return new KotlinTypeProjectionInfo(
        kmTypeProjection.getVariance(),
        KotlinTypeInfo.create(kmTypeProjection.getType(), factory, reporter));
  }

  private boolean isStarProjection() {
    return variance == null && typeInfo == null;
  }

  boolean rewrite(
      KmVisitorProviders.KmTypeProjectionVisitorProvider visitorProvider,
      KmVisitorProviders.KmTypeStarProjectionVisitorProvider starProjectionProvider,
      AppView<?> appView) {
    if (isStarProjection()) {
      starProjectionProvider.get();
      return false;
    } else {
      return typeInfo.rewrite(flags -> visitorProvider.get(flags, variance), appView);
    }
  }

  @Override
  public void trace(DexDefinitionSupplier definitionSupplier) {
    if (typeInfo != null) {
      typeInfo.trace(definitionSupplier);
    }
  }
}
