// Copyright (c) 2021, the Dart 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.md file.

import 'package:kernel/src/bounds_checks.dart';

import '../ast.dart';
import '../core_types.dart';
import '../type_algebra.dart';

/// Computes CONST_CANONICAL_TYPE
///
/// The algorithm is specified at
/// https://github.com/dart-lang/language/blob/master/accepted/future-releases/nnbd/feature-specification.md#constant-instances
DartType computeConstCanonicalType(DartType type, CoreTypes coreTypes,
    {required bool isNonNullableByDefault}) {
  // ignore: unnecessary_null_comparison
  assert(isNonNullableByDefault != null);

  if (type is InvalidType) {
    return type;
  }

  // CONST_CANONICAL_TYPE(T) = T if T is dynamic, void, Null
  if (type is DynamicType || type is VoidType || type is NullType) {
    return type;
  }

  // CONST_CANONICAL_TYPE(T) = T* if T is Never or Object
  if (type is NeverType &&
      type.declaredNullability == Nullability.nonNullable) {
    return const NeverType.legacy();
  }
  if (type == coreTypes.objectNonNullableRawType) {
    return coreTypes.objectLegacyRawType;
  }

  // CONST_CANONICAL_TYPE(FutureOr<T>) = FutureOr<S>*
  // where S is CONST_CANONICAL_TYPE(T)
  if (type is FutureOrType &&
      isTypeWithoutNullabilityMarker(type,
          isNonNullableByDefault: isNonNullableByDefault)) {
    return new FutureOrType(
        computeConstCanonicalType(type.typeArgument, coreTypes,
            isNonNullableByDefault: isNonNullableByDefault),
        Nullability.legacy);
  }

  // CONST_CANONICAL_TYPE(T?) =
  // let S be CONST_CANONICAL_TYPE(T)
  // if S is R* then R?
  // else S?
  if (isNullableTypeConstructorApplication(type)) {
    return computeConstCanonicalType(
            computeTypeWithoutNullabilityMarker(type,
                isNonNullableByDefault: isNonNullableByDefault),
            coreTypes,
            isNonNullableByDefault: isNonNullableByDefault)
        .withDeclaredNullability(Nullability.nullable);
  }

  // CONST_CANONICAL_TYPE(T*) = CONST_CANONICAL_TYPE(T)
  if (isLegacyTypeConstructorApplication(type,
      isNonNullableByDefault: isNonNullableByDefault)) {
    return computeConstCanonicalType(
        computeTypeWithoutNullabilityMarker(type,
            isNonNullableByDefault: isNonNullableByDefault),
        coreTypes,
        isNonNullableByDefault: isNonNullableByDefault);
  }

  // CONST_CANONICAL_TYPE(X extends T) = X*
  if (type is TypeParameterType && type.promotedBound == null) {
    return type.withDeclaredNullability(Nullability.legacy);
  }

  // CONST_CANONICAL_TYPE(X & T) =
  // This case should not occur, since intersection types are not permitted as
  // generic arguments.
  assert(!(type is TypeParameterType && type.promotedBound != null),
      "Intersection types are not permitted as generic arguments: '${type}'.");

  // CONST_CANONICAL_TYPE(C<T0, ..., Tn>) = C<R0, ..., Rn>*
  // where Ri is CONST_CANONICAL_TYPE(Ti)
  // Note this includes the case of an interface type with no generic parameters
  // (e.g int).
  if (type is InterfaceType) {
    assert(type.declaredNullability == Nullability.nonNullable);
    List<DartType> typeArguments;
    if (type.typeArguments.isEmpty) {
      typeArguments = const <DartType>[];
    } else {
      typeArguments =
          new List<DartType>.of(type.typeArguments, growable: false);
      for (int i = 0; i < typeArguments.length; ++i) {
        typeArguments[i] = computeConstCanonicalType(
            typeArguments[i], coreTypes,
            isNonNullableByDefault: isNonNullableByDefault);
      }
    }
    return new InterfaceType(type.classNode, Nullability.legacy, typeArguments);
  }

  // CONST_CANONICAL_TYPE(R Function<X extends B>(S)) = F*
  // where F = R1 Function<X extends B1>(S1)
  // and R1 = CONST_CANONICAL_TYPE(R)
  // and B1 = CONST_CANONICAL_TYPE(B)
  // and S1 = CONST_CANONICAL_TYPE(S)
  // Note, this generalizes to arbitrary number of type and term parameters.
  if (type is FunctionType) {
    assert(type.declaredNullability == Nullability.nonNullable);

    List<TypeParameter> canonicalizedTypeParameters;
    Substitution? substitution;
    if (type.typeParameters.isEmpty) {
      canonicalizedTypeParameters = const <TypeParameter>[];
      substitution = null;
    } else {
      FreshTypeParameters freshTypeParameters =
          getFreshTypeParameters(type.typeParameters);
      substitution = freshTypeParameters.substitution;
      canonicalizedTypeParameters = freshTypeParameters.freshTypeParameters;
      for (TypeParameter parameter in canonicalizedTypeParameters) {
        parameter.bound = computeConstCanonicalType(parameter.bound, coreTypes,
            isNonNullableByDefault: isNonNullableByDefault);
      }
      List<DartType> defaultTypes = calculateBoundsInternal(
          canonicalizedTypeParameters, coreTypes.objectClass,
          isNonNullableByDefault: isNonNullableByDefault);
      for (int i = 0; i < canonicalizedTypeParameters.length; ++i) {
        canonicalizedTypeParameters[i].defaultType = defaultTypes[i];
      }
    }

    List<DartType> canonicalizedPositionalParameters;
    if (type.positionalParameters.isEmpty) {
      canonicalizedPositionalParameters = const <DartType>[];
    } else {
      canonicalizedPositionalParameters =
          new List<DartType>.of(type.positionalParameters, growable: false);
      for (int i = 0; i < canonicalizedPositionalParameters.length; ++i) {
        DartType canonicalized = computeConstCanonicalType(
            canonicalizedPositionalParameters[i], coreTypes,
            isNonNullableByDefault: isNonNullableByDefault);
        if (substitution != null) {
          canonicalized = substitution.substituteType(canonicalized);
        }
        canonicalizedPositionalParameters[i] = canonicalized;
      }
    }

    List<NamedType> canonicalizedNamedParameters;
    if (type.namedParameters.isEmpty) {
      canonicalizedNamedParameters = const <NamedType>[];
    } else {
      canonicalizedNamedParameters =
          new List<NamedType>.of(type.namedParameters, growable: false);
      for (int i = 0; i < canonicalizedNamedParameters.length; ++i) {
        DartType canonicalized = computeConstCanonicalType(
            canonicalizedNamedParameters[i].type, coreTypes,
            isNonNullableByDefault: isNonNullableByDefault);
        if (substitution != null) {
          canonicalized = substitution.substituteType(canonicalized);
        }
        canonicalizedNamedParameters[i] = new NamedType(
            canonicalizedNamedParameters[i].name, canonicalized,
            isRequired: canonicalizedNamedParameters[i].isRequired);
      }
    }

    DartType canonicalizedReturnType = computeConstCanonicalType(
        type.returnType, coreTypes,
        isNonNullableByDefault: isNonNullableByDefault);
    if (substitution != null) {
      canonicalizedReturnType =
          substitution.substituteType(canonicalizedReturnType);
    }

    // Canonicalize typedef type, just in case.
    TypedefType? canonicalizedTypedefType;
    TypedefType? typedefType = type.typedefType;
    if (typedefType == null) {
      canonicalizedTypedefType = null;
    } else {
      List<DartType> canonicalizedTypeArguments;
      if (typedefType.typeArguments.isEmpty) {
        canonicalizedTypeArguments = const <DartType>[];
      } else {
        canonicalizedTypeArguments =
            new List<DartType>.of(typedefType.typeArguments, growable: false);
        for (int i = 0; i < canonicalizedTypeArguments.length; ++i) {
          canonicalizedTypeArguments[i] = computeConstCanonicalType(
              canonicalizedTypeArguments[i], coreTypes,
              isNonNullableByDefault: isNonNullableByDefault);
        }
      }
      canonicalizedTypedefType = new TypedefType(typedefType.typedefNode,
          Nullability.legacy, canonicalizedTypeArguments);
    }

    return new FunctionType(canonicalizedPositionalParameters,
        canonicalizedReturnType, Nullability.legacy,
        namedParameters: canonicalizedNamedParameters,
        typeParameters: canonicalizedTypeParameters,
        requiredParameterCount: type.requiredParameterCount,
        typedefType: canonicalizedTypedefType);
  }

  throw new StateError(
      "Unhandled '${type.runtimeType}' in 'computeConstCanonicalType'.");
}
