blob: 706e67de9162410ef5c3360d787373807bc27fed [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/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;
}
}
}