| // 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/src/dart/element/type_constraint_gatherer.dart'; |
| import 'package:analyzer/src/dart/resolver/flow_analysis_visitor.dart'; |
| import 'package:analyzer/src/generated/exhaustiveness.dart'; |
| |
| /// Data structure maintaining intermediate analysis results for testing |
| /// purposes. Under normal execution, no instance of this class should be |
| /// created. |
| class TestingData { |
| /// Map containing the results of flow analysis. |
| final Map<Uri, FlowAnalysisDataForTesting> uriToFlowAnalysisData = {}; |
| |
| final Map<Uri, ExhaustivenessDataForTesting> uriToExhaustivenessData = {}; |
| |
| final Map<Uri, TypeConstraintGenerationDataForTesting> |
| uriToTypeConstraintGenerationData = {}; |
| |
| /// Called by the constant verifier, to record exhaustiveness data used in |
| /// testing. |
| void recordExhaustivenessDataForTesting( |
| Uri uri, ExhaustivenessDataForTesting result) { |
| uriToExhaustivenessData[uri] = result; |
| } |
| |
| /// Called by the analysis driver after performing flow analysis, to record |
| /// flow analysis results. |
| void recordFlowAnalysisDataForTesting( |
| Uri uri, FlowAnalysisDataForTesting result) { |
| uriToFlowAnalysisData[uri] = result; |
| } |
| |
| /// Called by the type inference engine, to record generated type constraints. |
| /// |
| /// The procedure is destructive to [result] in the sense that it reuses its |
| /// internal data structures where possible to avoid extra allocations. |
| void recordTypeConstraintGenerationDataForTesting( |
| Uri uri, TypeConstraintGenerationDataForTesting result) { |
| TypeConstraintGenerationDataForTesting? existing = |
| uriToTypeConstraintGenerationData[uri]; |
| if (existing != null) { |
| existing.mergeIn(result); |
| } else { |
| uriToTypeConstraintGenerationData[uri] = result; |
| } |
| } |
| } |