// Copyright (c) 2022, 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 file.

import 'package:kernel/ast.dart';
import 'package:kernel/library_index.dart';

/// Kernel nodes for classes and members referenced specifically by the
/// compiler.
mixin KernelNodes {
  Component get component;

  late final LibraryIndex index = LibraryIndex(component, [
    "dart:async",
    "dart:collection",
    "dart:core",
    "dart:ffi",
    "dart:_internal",
    "dart:typed_data",
    "dart:wasm"
  ]);

  // dart:collection classes
  late final Class hashFieldBaseClass =
      index.getClass("dart:collection", "_HashFieldBase");
  late final Class immutableMapClass =
      index.getClass("dart:collection", "_WasmImmutableLinkedHashMap");
  late final Class immutableSetClass =
      index.getClass("dart:collection", "_WasmImmutableLinkedHashSet");

  // dart:core various classes
  late final Class boxedBoolClass = index.getClass("dart:core", "_BoxedBool");
  late final Class boxedDoubleClass =
      index.getClass("dart:core", "_BoxedDouble");
  late final Class boxedIntClass = index.getClass("dart:core", "_BoxedInt");
  late final Class functionClass = index.getClass("dart:core", "_Function");
  late final Class listBaseClass = index.getClass("dart:core", "_ListBase");
  late final Class fixedLengthListClass = index.getClass("dart:core", "_List");
  late final Class growableListClass =
      index.getClass("dart:core", "_GrowableList");
  late final Class immutableListClass =
      index.getClass("dart:core", "_ImmutableList");
  late final Class stringBaseClass = index.getClass("dart:core", "_StringBase");
  late final Class oneByteStringClass =
      index.getClass("dart:core", "_OneByteString");
  late final Class twoByteStringClass =
      index.getClass("dart:core", "_TwoByteString");
  late final Class invocationClass = index.getClass("dart:core", 'Invocation');
  late final Class noSuchMethodErrorClass =
      index.getClass("dart:core", "NoSuchMethodError");
  late final Class typeErrorClass = index.getClass("dart:core", "_TypeError");

  // dart:core runtime type classes
  late final Class typeClass = index.getClass("dart:core", "_Type");
  late final Class dynamicTypeClass =
      index.getClass("dart:core", "_DynamicType");
  late final Class functionTypeClass =
      index.getClass("dart:core", "_FunctionType");
  late final Class functionTypeParameterTypeClass =
      index.getClass("dart:core", "_FunctionTypeParameterType");
  late final Class futureOrTypeClass =
      index.getClass("dart:core", "_FutureOrType");
  late final Class interfaceTypeClass =
      index.getClass("dart:core", "_InterfaceType");
  late final Class interfaceTypeParameterTypeClass =
      index.getClass("dart:core", "_InterfaceTypeParameterType");
  late final Class namedParameterClass =
      index.getClass("dart:core", "_NamedParameter");
  late final Class neverTypeClass = index.getClass("dart:core", "_NeverType");
  late final Class nullTypeClass = index.getClass("dart:core", "_NullType");
  late final Class voidTypeClass = index.getClass("dart:core", "_VoidType");
  late final Class stackTraceClass = index.getClass("dart:core", "StackTrace");
  late final Class typeUniverseClass =
      index.getClass("dart:core", "_TypeUniverse");

  // dart:ffi classes
  late final Class ffiCompoundClass = index.getClass("dart:ffi", "_Compound");
  late final Class ffiPointerClass = index.getClass("dart:ffi", "Pointer");

  // dart:typed_data classes
  late final Class typedListBaseClass =
      index.getClass("dart:typed_data", "_TypedListBase");
  late final Class typedListClass =
      index.getClass("dart:typed_data", "_TypedList");
  late final Class typedListViewClass =
      index.getClass("dart:typed_data", "_TypedListView");
  late final Class byteDataViewClass =
      index.getClass("dart:typed_data", "_ByteDataView");
  late final Class unmodifiableByteDataViewClass =
      index.getClass("dart:typed_data", "_UnmodifiableByteDataView");

  // dart:_internal classes
  late final Class symbolClass = index.getClass("dart:_internal", "Symbol");

  // dart:wasm classes
  late final Class wasmTypesBaseClass =
      index.getClass("dart:wasm", "_WasmBase");
  late final wasmI8Class = index.getClass("dart:wasm", "WasmI8");
  late final wasmI16Class = index.getClass("dart:wasm", "WasmI16");
  late final wasmI32Class = index.getClass("dart:wasm", "WasmI32");
  late final wasmI64Class = index.getClass("dart:wasm", "WasmI64");
  late final wasmF32Class = index.getClass("dart:wasm", "WasmF32");
  late final wasmF64Class = index.getClass("dart:wasm", "WasmF64");
  late final Class wasmArrayBaseClass =
      index.getClass("dart:wasm", "_WasmArray");
  late final Class wasmAnyRefClass = index.getClass("dart:wasm", "WasmAnyRef");
  late final Class wasmExternRefClass =
      index.getClass("dart:wasm", "WasmExternRef");
  late final Class wasmFuncRefClass =
      index.getClass("dart:wasm", "WasmFuncRef");
  late final Class wasmEqRefClass = index.getClass("dart:wasm", "WasmEqRef");
  late final Class wasmDataRefClass =
      index.getClass("dart:wasm", "WasmDataRef");
  late final Class wasmFunctionClass =
      index.getClass("dart:wasm", "WasmFunction");
  late final Class wasmTableClass = index.getClass("dart:wasm", "WasmTable");

  // dart:async procedures
  late final Procedure asyncHelper =
      index.getTopLevelProcedure("dart:async", "_asyncHelper");
  late final Procedure awaitHelper =
      index.getTopLevelProcedure("dart:async", "_awaitHelper");

  // dart:collection procedures
  late final Procedure mapFactory =
      index.getProcedure("dart:collection", "LinkedHashMap", "_default");
  late final Procedure mapPut = index
      .getClass("dart:collection", "_CompactLinkedCustomHashMap")
      .superclass! // _LinkedHashMapMixin<K, V>
      .procedures
      .firstWhere((p) => p.name.text == "[]=");
  late final Procedure setFactory =
      index.getProcedure("dart:collection", "LinkedHashSet", "_default");
  late final Procedure setAdd = index
      .getClass("dart:collection", "_CompactLinkedCustomHashSet")
      .superclass! // _LinkedHashSetMixin<K, V>
      .procedures
      .firstWhere((p) => p.name.text == "add");
  late final Procedure hashImmutableIndexNullable = index.getProcedure(
      "dart:collection", "_HashAbstractImmutableBase", "get:_indexNullable");

  // dart:core various procedures
  late final Procedure objectNoSuchMethod =
      index.getProcedure("dart:core", "Object", "noSuchMethod");
  late final Procedure objectRuntimeType =
      index.getProcedure("dart:core", "Object", "get:_runtimeType");
  late final Procedure nullToString =
      index.getProcedure("dart:core", "Object", "_nullToString");
  late final Procedure nullNoSuchMethod =
      index.getProcedure("dart:core", "Object", "_nullNoSuchMethod");
  late final Procedure stringEquals =
      index.getProcedure("dart:core", "_StringBase", "==");
  late final Procedure stringInterpolate =
      index.getProcedure("dart:core", "_StringBase", "_interpolate");

  // dart:core invocation/exception procedures
  late final Procedure invocationGetterFactory =
      index.getProcedure("dart:core", "Invocation", "getter");
  late final Procedure invocationSetterFactory =
      index.getProcedure("dart:core", "Invocation", "setter");
  late final Procedure invocationMethodFactory =
      index.getProcedure("dart:core", "Invocation", "method");
  late final Procedure invocationGenericMethodFactory =
      index.getProcedure("dart:core", "Invocation", "genericMethod");
  late final Procedure noSuchMethodErrorThrowWithInvocation = index
      .getProcedure("dart:core", "NoSuchMethodError", "_throwWithInvocation");
  late final Procedure stackTraceCurrent =
      index.getProcedure("dart:core", "StackTrace", "get:current");
  late final Procedure throwNullCheckError =
      index.getProcedure("dart:core", "_TypeError", "_throwNullCheckError");
  late final Procedure throwThrowNullError =
      index.getProcedure("dart:core", "_TypeError", "_throwThrowNullError");
  late final Procedure throwAsCheckError =
      index.getProcedure("dart:core", "_TypeError", "_throwAsCheckError");
  late final Procedure throwWasmRefError =
      index.getProcedure("dart:core", "_TypeError", "_throwWasmRefError");

  // dart:core type procedures
  late final Procedure isSubtype =
      index.getTopLevelProcedure("dart:core", "_isSubtype");
  late final Procedure typeAsNullable =
      index.getProcedure("dart:core", "_Type", "get:asNullable");
  late final Procedure createNormalizedFutureOrType = index.getProcedure(
      "dart:core", "_TypeUniverse", "createNormalizedFutureOrType");

  // dart:wasm procedures
  late final Procedure wasmFunctionCall =
      index.getProcedure("dart:wasm", "WasmFunction", "get:call");
  late final Procedure wasmTableCallIndirect =
      index.getProcedure("dart:wasm", "WasmTable", "callIndirect");
}
