blob: 250c391a8137119d38857cbcbae201b4bf94cb2b [file] [log] [blame]
// Copyright (c) 2018, 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' as ir;
import 'package:kernel/class_hierarchy.dart' as ir;
import 'package:kernel/core_types.dart' as ir;
import 'package:kernel/type_environment.dart' as ir;
import '../common.dart';
import '../common_elements.dart';
import '../elements/entities.dart';
import '../elements/indexed.dart';
import '../elements/types.dart';
import '../ordered_typeset.dart';
import '../universe/call_structure.dart';
/// Interface that translates between Kernel IR nodes and entities.
///
/// This interface is used internally to implement [KernelToElementMap] in the
/// frontend and [JsToElementMap] in the backend.
abstract class IrToElementMap {
/// Returns the [DartType] corresponding to [type].
DartType getDartType(ir.DartType type);
/// Returns the [MemberEntity] corresponding to the member [node].
MemberEntity getMember(ir.Member node);
/// Returns the [FunctionEntity] corresponding to the procedure [node].
FunctionEntity getMethod(ir.Procedure node);
/// Returns the [ConstructorEntity] corresponding to the generative or factory
/// constructor [node].
ConstructorEntity getConstructor(ir.Member node);
/// Returns the [FieldEntity] corresponding to the field [node].
FieldEntity getField(ir.Field node);
/// Returns the [ClassEntity] corresponding to the class [node].
ClassEntity getClass(ir.Class node);
/// Returns the [FunctionType] of the [node].
FunctionType getFunctionType(ir.FunctionNode node);
/// Returns the [TypedefType] corresponding to raw type of the typedef [node].
TypedefType getTypedefType(ir.Typedef node);
/// Return the [InterfaceType] corresponding to the [cls] with the given
/// [typeArguments].
InterfaceType createInterfaceType(
ir.Class cls, List<ir.DartType> typeArguments);
/// Returns the [CallStructure] corresponding to the [arguments].
CallStructure getCallStructure(ir.Arguments arguments);
/// Returns the [TypeVariableEntity] corresponding to the type parameter
/// [node].
TypeVariableEntity getTypeVariable(ir.TypeParameter node);
CommonElements get commonElements;
DiagnosticReporter get reporter;
InterfaceType getThisType(IndexedClass cls);
InterfaceType getSuperType(IndexedClass cls);
OrderedTypeSet getOrderedTypeSet(IndexedClass cls);
Iterable<InterfaceType> getInterfaces(IndexedClass cls);
InterfaceType asInstanceOf(InterfaceType type, ClassEntity cls);
DartType substByContext(DartType type, InterfaceType context);
DartType getCallType(InterfaceType type);
int getHierarchyDepth(IndexedClass cls);
DartType getTypeVariableBound(IndexedTypeVariable typeVariable);
}