// 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;
    }
  }
}
