| // 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/ast/ast.dart'; |
| import 'package:analyzer/dart/element/element.dart'; |
| import 'package:analyzer/src/generated/source.dart'; |
| import 'package:nnbd_migration/instrumentation.dart'; |
| import 'package:nnbd_migration/nnbd_migration.dart'; |
| |
| /// The instrumentation information gathered from the migration engine. |
| class InstrumentationInformation { |
| /// The node used for type sources that are always `null`. |
| NullabilityNodeInfo always; |
| |
| /// A map from elements outside of the code being migrated, to the nullability |
| /// nodes associated with the type of the element. |
| final Map<Element, DecoratedTypeInfo> externalDecoratedType = {}; |
| |
| /// A map from the graph edges between nullability nodes, to information about |
| /// the edge that was created and why it was created. |
| final Map<EdgeInfo, EdgeOriginInfo> edgeOrigin = {}; |
| |
| /// The node used for type sources that are never `null`. |
| NullabilityNodeInfo never; |
| |
| /// A list of the steps in the propagation of nullability information through |
| /// the nullability graph, to report details of the step that was performed |
| /// and why it was performed. |
| final List<PropagationInfo> propagationSteps = []; |
| |
| /// The instrumentation information that is specific to a single source. |
| final Map<Source, SourceInformation> sourceInformation = {}; |
| |
| /// Initialize a newly created holder of instrumentation information. |
| InstrumentationInformation(); |
| } |
| |
| /// The instrumentation information gathered from the migration engine that is |
| /// specific to a single source. |
| class SourceInformation { |
| /// A map from the type annotations found in the source code, to the |
| /// nullability nodes that are associated with that type. |
| final Map<TypeAnnotation, NullabilityNodeInfo> explicitTypeNullability = {}; |
| |
| /// A map from the fixes that were decided on to the reasons for the fix. |
| final Map<SingleNullabilityFix, List<FixReasonInfo>> fixes = {}; |
| |
| /// A map from AST nodes that have an implicit return type to the nullability |
| /// node associated with the implicit return type of the AST node. The node |
| /// can be an |
| /// - executable declaration, |
| /// - function-typed formal parameter declaration, |
| /// - function type alias declaration, |
| /// - generic function type, or |
| /// - function expression. |
| final Map<AstNode, DecoratedTypeInfo> implicitReturnType = {}; |
| |
| /// A map from AST nodes that have an implicit type to the nullability node |
| /// associated with the implicit type of the AST node. The node can be a |
| /// - formal parameter, |
| /// - declared identifier, or |
| /// - variable in a variable declaration list. |
| final Map<AstNode, DecoratedTypeInfo> implicitType = {}; |
| |
| /// Called whenever the migration engine encounters an AST node with implicit |
| /// type arguments, to report the nullability nodes associated with the |
| /// implicit type arguments of the AST node. |
| /// |
| /// A map from AST nodes that have implicit type arguments to the nullability |
| /// nodes associated with the implicit type arguments of the AST node. The |
| /// node can be a |
| /// - constructor redirection, |
| /// - function expression invocation, |
| /// - method invocation, |
| /// - instance creation expression, |
| /// - list/map/set literal, or |
| /// - type annotation. |
| final Map<AstNode, List<DecoratedTypeInfo>> implicitTypeArguments = {}; |
| |
| /// Initialize a newly created holder of instrumentation information that is |
| /// specific to a single source. |
| SourceInformation(); |
| } |