blob: cd56719d2aeb1572a5260d88a4067b64f28387a1 [file] [log] [blame]
// Copyright (c) 2019, 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:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/dart/element/element.dart';
/// Abstraction layer allowing the mechanism for looking up the types of
/// elements to be customized.
/// This is needed for the NNBD migration engine, which needs to analyze
/// NNBD-disabled code as though it has NNBD enabled.
/// This base class implementation gets types directly from the elements; for
/// other behaviors, create a class that extends or implements this class.
/// Getters in the ElementImpl classes are automatically wired into this
/// indirection mechanism, so it should be transparent to clients, as well as
/// most analyzer internal code.
class ElementTypeProvider {
/// The [ElementTypeProvider] currently in use. Change this value to cause
/// element types to be looked up in a different way.
static ElementTypeProvider current = const ElementTypeProvider();
const ElementTypeProvider();
/// Notifies the [ElementTypeProvider] that a fresh type parameter element has
/// been created. If the [ElementTypeProvider] is storing additional
/// information about type parameter elements, this gives it an opportunity to
/// copy that information.
void freshTypeParameterCreated(TypeParameterElement newTypeParameter,
TypeParameterElement oldTypeParameter) {}
List<InterfaceType> getClassInterfaces(ClassElementImpl element) =>
/// Queries the parameters of an executable element's signature.
/// Equivalent to `getExecutableType(...).parameters`.
List<ParameterElement> getExecutableParameters(
ExecutableElementImpl element) =>
/// Queries the return type of an executable element.
/// Equivalent to `getExecutableType(...).returnType`.
DartType getExecutableReturnType(ElementImplWithFunctionType element) =>
/// Queries the full type of an executable element.
/// Guaranteed to be a function type.
FunctionType getExecutableType(ElementImplWithFunctionType element) =>
DartType getExtendedType(ExtensionElementImpl element) =>
/// Queries the type of a field.
DartType getFieldType(PropertyInducingElementImpl element) =>
/// Queries the bound of a type parameter.
DartType getTypeParameterBound(TypeParameterElementImpl element) =>
/// Queries the type of a variable element.
DartType getVariableType(VariableElementImpl variable) =>
/// Queries whether NNBD is enabled for a library.
bool isLibraryNonNullableByDefault(LibraryElementImpl element) =>