// Copyright (c) 2014, 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 'dart:core';

import 'package:analysis_server/plugin/edit/fix/fix_core.dart';
import 'package:analysis_server/plugin/edit/fix/fix_dart.dart';
import 'package:analysis_server/src/services/correction/base_processor.dart';
import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
import 'package:analysis_server/src/services/correction/dart/add_async.dart';
import 'package:analysis_server/src/services/correction/dart/add_await.dart';
import 'package:analysis_server/src/services/correction/dart/add_const.dart';
import 'package:analysis_server/src/services/correction/dart/add_diagnostic_property_reference.dart';
import 'package:analysis_server/src/services/correction/dart/add_explicit_cast.dart';
import 'package:analysis_server/src/services/correction/dart/add_field_formal_parameters.dart';
import 'package:analysis_server/src/services/correction/dart/add_late.dart';
import 'package:analysis_server/src/services/correction/dart/add_missing_enum_case_clauses.dart';
import 'package:analysis_server/src/services/correction/dart/add_missing_parameter.dart';
import 'package:analysis_server/src/services/correction/dart/add_missing_parameter_named.dart';
import 'package:analysis_server/src/services/correction/dart/add_missing_required_argument.dart';
import 'package:analysis_server/src/services/correction/dart/add_ne_null.dart';
import 'package:analysis_server/src/services/correction/dart/add_null_check.dart';
import 'package:analysis_server/src/services/correction/dart/add_override.dart';
import 'package:analysis_server/src/services/correction/dart/add_required.dart';
import 'package:analysis_server/src/services/correction/dart/add_required_keyword.dart';
import 'package:analysis_server/src/services/correction/dart/add_return_type.dart';
import 'package:analysis_server/src/services/correction/dart/add_static.dart';
import 'package:analysis_server/src/services/correction/dart/add_super_constructor_invocation.dart';
import 'package:analysis_server/src/services/correction/dart/add_type_annotation.dart';
import 'package:analysis_server/src/services/correction/dart/change_argument_name.dart';
import 'package:analysis_server/src/services/correction/dart/change_to.dart';
import 'package:analysis_server/src/services/correction/dart/change_to_nearest_precise_value.dart';
import 'package:analysis_server/src/services/correction/dart/change_to_static_access.dart';
import 'package:analysis_server/src/services/correction/dart/change_type_annotation.dart';
import 'package:analysis_server/src/services/correction/dart/convert_add_all_to_spread.dart';
import 'package:analysis_server/src/services/correction/dart/convert_conditional_expression_to_if_element.dart';
import 'package:analysis_server/src/services/correction/dart/convert_documentation_into_line.dart';
import 'package:analysis_server/src/services/correction/dart/convert_flutter_child.dart';
import 'package:analysis_server/src/services/correction/dart/convert_flutter_children.dart';
import 'package:analysis_server/src/services/correction/dart/convert_into_is_not.dart';
import 'package:analysis_server/src/services/correction/dart/convert_map_from_iterable_to_for_literal.dart';
import 'package:analysis_server/src/services/correction/dart/convert_quotes.dart';
import 'package:analysis_server/src/services/correction/dart/convert_to_contains.dart';
import 'package:analysis_server/src/services/correction/dart/convert_to_expression_function_body.dart';
import 'package:analysis_server/src/services/correction/dart/convert_to_generic_function_syntax.dart';
import 'package:analysis_server/src/services/correction/dart/convert_to_if_null.dart';
import 'package:analysis_server/src/services/correction/dart/convert_to_int_literal.dart';
import 'package:analysis_server/src/services/correction/dart/convert_to_list_literal.dart';
import 'package:analysis_server/src/services/correction/dart/convert_to_map_literal.dart';
import 'package:analysis_server/src/services/correction/dart/convert_to_named_arguments.dart';
import 'package:analysis_server/src/services/correction/dart/convert_to_null_aware.dart';
import 'package:analysis_server/src/services/correction/dart/convert_to_null_aware_spread.dart';
import 'package:analysis_server/src/services/correction/dart/convert_to_on_type.dart';
import 'package:analysis_server/src/services/correction/dart/convert_to_package_import.dart';
import 'package:analysis_server/src/services/correction/dart/convert_to_relative_import.dart';
import 'package:analysis_server/src/services/correction/dart/convert_to_set_literal.dart';
import 'package:analysis_server/src/services/correction/dart/convert_to_where_type.dart';
import 'package:analysis_server/src/services/correction/dart/create_class.dart';
import 'package:analysis_server/src/services/correction/dart/create_constructor.dart';
import 'package:analysis_server/src/services/correction/dart/create_constructor_for_final_fields.dart';
import 'package:analysis_server/src/services/correction/dart/create_constructor_super.dart';
import 'package:analysis_server/src/services/correction/dart/create_field.dart';
import 'package:analysis_server/src/services/correction/dart/create_file.dart';
import 'package:analysis_server/src/services/correction/dart/create_function.dart';
import 'package:analysis_server/src/services/correction/dart/create_getter.dart';
import 'package:analysis_server/src/services/correction/dart/create_local_variable.dart';
import 'package:analysis_server/src/services/correction/dart/create_method.dart';
import 'package:analysis_server/src/services/correction/dart/create_method_or_function.dart';
import 'package:analysis_server/src/services/correction/dart/create_missing_overrides.dart';
import 'package:analysis_server/src/services/correction/dart/create_mixin.dart';
import 'package:analysis_server/src/services/correction/dart/create_no_such_method.dart';
import 'package:analysis_server/src/services/correction/dart/create_setter.dart';
import 'package:analysis_server/src/services/correction/dart/data_driven.dart';
import 'package:analysis_server/src/services/correction/dart/extend_class_for_mixin.dart';
import 'package:analysis_server/src/services/correction/dart/import_library.dart';
import 'package:analysis_server/src/services/correction/dart/inline_invocation.dart';
import 'package:analysis_server/src/services/correction/dart/inline_typedef.dart';
import 'package:analysis_server/src/services/correction/dart/insert_semicolon.dart';
import 'package:analysis_server/src/services/correction/dart/make_class_abstract.dart';
import 'package:analysis_server/src/services/correction/dart/make_field_not_final.dart';
import 'package:analysis_server/src/services/correction/dart/make_final.dart';
import 'package:analysis_server/src/services/correction/dart/make_return_type_nullable.dart';
import 'package:analysis_server/src/services/correction/dart/make_variable_not_final.dart';
import 'package:analysis_server/src/services/correction/dart/make_variable_nullable.dart';
import 'package:analysis_server/src/services/correction/dart/move_type_arguments_to_class.dart';
import 'package:analysis_server/src/services/correction/dart/organize_imports.dart';
import 'package:analysis_server/src/services/correction/dart/qualify_reference.dart';
import 'package:analysis_server/src/services/correction/dart/remove_annotation.dart';
import 'package:analysis_server/src/services/correction/dart/remove_argument.dart';
import 'package:analysis_server/src/services/correction/dart/remove_await.dart';
import 'package:analysis_server/src/services/correction/dart/remove_comparison.dart';
import 'package:analysis_server/src/services/correction/dart/remove_const.dart';
import 'package:analysis_server/src/services/correction/dart/remove_dead_code.dart';
import 'package:analysis_server/src/services/correction/dart/remove_dead_if_null.dart';
import 'package:analysis_server/src/services/correction/dart/remove_duplicate_case.dart';
import 'package:analysis_server/src/services/correction/dart/remove_empty_catch.dart';
import 'package:analysis_server/src/services/correction/dart/remove_empty_constructor_body.dart';
import 'package:analysis_server/src/services/correction/dart/remove_empty_else.dart';
import 'package:analysis_server/src/services/correction/dart/remove_empty_statement.dart';
import 'package:analysis_server/src/services/correction/dart/remove_if_null_operator.dart';
import 'package:analysis_server/src/services/correction/dart/remove_initializer.dart';
import 'package:analysis_server/src/services/correction/dart/remove_interpolation_braces.dart';
import 'package:analysis_server/src/services/correction/dart/remove_method_declaration.dart';
import 'package:analysis_server/src/services/correction/dart/remove_name_from_combinator.dart';
import 'package:analysis_server/src/services/correction/dart/remove_non_null_assertion.dart';
import 'package:analysis_server/src/services/correction/dart/remove_operator.dart';
import 'package:analysis_server/src/services/correction/dart/remove_parameters_in_getter_declaration.dart';
import 'package:analysis_server/src/services/correction/dart/remove_parentheses_in_getter_invocation.dart';
import 'package:analysis_server/src/services/correction/dart/remove_question_mark.dart';
import 'package:analysis_server/src/services/correction/dart/remove_this_expression.dart';
import 'package:analysis_server/src/services/correction/dart/remove_type_annotation.dart';
import 'package:analysis_server/src/services/correction/dart/remove_type_arguments.dart';
import 'package:analysis_server/src/services/correction/dart/remove_unnecessary_cast.dart';
import 'package:analysis_server/src/services/correction/dart/remove_unnecessary_new.dart';
import 'package:analysis_server/src/services/correction/dart/remove_unnecessary_parentheses.dart';
import 'package:analysis_server/src/services/correction/dart/remove_unnecessary_string_interpolation.dart';
import 'package:analysis_server/src/services/correction/dart/remove_unused.dart';
import 'package:analysis_server/src/services/correction/dart/remove_unused_catch_clause.dart';
import 'package:analysis_server/src/services/correction/dart/remove_unused_catch_stack.dart';
import 'package:analysis_server/src/services/correction/dart/remove_unused_import.dart';
import 'package:analysis_server/src/services/correction/dart/remove_unused_label.dart';
import 'package:analysis_server/src/services/correction/dart/remove_unused_local_variable.dart';
import 'package:analysis_server/src/services/correction/dart/remove_unused_parameter.dart';
import 'package:analysis_server/src/services/correction/dart/rename_to_camel_case.dart';
import 'package:analysis_server/src/services/correction/dart/replace_boolean_with_bool.dart';
import 'package:analysis_server/src/services/correction/dart/replace_cascade_with_dot.dart';
import 'package:analysis_server/src/services/correction/dart/replace_colon_with_equals.dart';
import 'package:analysis_server/src/services/correction/dart/replace_final_with_const.dart';
import 'package:analysis_server/src/services/correction/dart/replace_new_with_const.dart';
import 'package:analysis_server/src/services/correction/dart/replace_null_with_closure.dart';
import 'package:analysis_server/src/services/correction/dart/replace_return_type_future.dart';
import 'package:analysis_server/src/services/correction/dart/replace_var_with_dynamic.dart';
import 'package:analysis_server/src/services/correction/dart/replace_with_brackets.dart';
import 'package:analysis_server/src/services/correction/dart/replace_with_conditional_assignment.dart';
import 'package:analysis_server/src/services/correction/dart/replace_with_eight_digit_hex.dart';
import 'package:analysis_server/src/services/correction/dart/replace_with_extension_name.dart';
import 'package:analysis_server/src/services/correction/dart/replace_with_filled.dart';
import 'package:analysis_server/src/services/correction/dart/replace_with_identifier.dart';
import 'package:analysis_server/src/services/correction/dart/replace_with_interpolation.dart';
import 'package:analysis_server/src/services/correction/dart/replace_with_is_empty.dart';
import 'package:analysis_server/src/services/correction/dart/replace_with_not_null_aware.dart';
import 'package:analysis_server/src/services/correction/dart/replace_with_null_aware.dart';
import 'package:analysis_server/src/services/correction/dart/replace_with_tear_off.dart';
import 'package:analysis_server/src/services/correction/dart/replace_with_var.dart';
import 'package:analysis_server/src/services/correction/dart/sort_child_property_last.dart';
import 'package:analysis_server/src/services/correction/dart/update_sdk_constraints.dart';
import 'package:analysis_server/src/services/correction/dart/use_const.dart';
import 'package:analysis_server/src/services/correction/dart/use_curly_braces.dart';
import 'package:analysis_server/src/services/correction/dart/use_effective_integer_division.dart';
import 'package:analysis_server/src/services/correction/dart/use_eq_eq_null.dart';
import 'package:analysis_server/src/services/correction/dart/use_is_not_empty.dart';
import 'package:analysis_server/src/services/correction/dart/use_not_eq_null.dart';
import 'package:analysis_server/src/services/correction/dart/use_rethrow.dart';
import 'package:analysis_server/src/services/correction/dart/wrap_in_future.dart';
import 'package:analysis_server/src/services/correction/dart/wrap_in_text.dart';
import 'package:analysis_server/src/services/correction/fix.dart';
import 'package:analysis_server/src/services/correction/util.dart';
import 'package:analysis_server/src/services/linter/lint_names.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/generated/java_core.dart';
import 'package:analyzer/src/generated/parser.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
import 'package:analyzer_plugin/utilities/change_builder/conflicting_edit_exception.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart' hide FixContributor;
import 'package:meta/meta.dart';

/// A function that can be executed to create a multi-correction producer.
typedef MultiProducerGenerator = MultiCorrectionProducer Function();

/// A function that can be executed to create a correction producer.
typedef ProducerGenerator = CorrectionProducer Function();

/// A fix contributor that provides the default set of fixes for Dart files.
class DartFixContributor implements FixContributor {
  @override
  Future<List<Fix>> computeFixes(DartFixContext context) async {
    try {
      var processor = FixProcessor(context);
      var fixes = await processor.compute();
      var fixInFileProcessor = FixInFileProcessor(context);
      var fixInFileFixes = await fixInFileProcessor.compute();
      fixes.addAll(fixInFileFixes);
      return fixes;
    } on CancelCorrectionException {
      return const <Fix>[];
    }
  }
}

/// Computer for Dart "fix all in file" fixes.
class FixInFileProcessor {
  final DartFixContext context;
  FixInFileProcessor(this.context);

  Future<List<Fix>> compute() async {
    var error = context.error;
    var errors = context.resolveResult.errors
        .where((e) => error.errorCode.name == e.errorCode.name);
    if (errors.length < 2) {
      return const <Fix>[];
    }

    var instrumentationService = context.instrumentationService;
    var workspace = context.workspace;
    var resolveResult = context.resolveResult;

    var generators = _getGenerators(
        error.errorCode,
        CorrectionProducerContext(
          dartFixContext: context,
          diagnostic: error,
          resolvedResult: resolveResult,
          selectionOffset: context.error.offset,
          selectionLength: context.error.length,
          workspace: workspace,
        ));

    var fixes = <Fix>[];
    for (var generator in generators) {
      var fixState = FixState(workspace);
      for (var error in errors) {
        var fixContext = DartFixContextImpl(
          instrumentationService,
          workspace,
          resolveResult,
          error,
          (name) => [],
        );
        await _fixError(fixContext, fixState, generator(), error);
      }
      var sourceChange = fixState.builder.sourceChange;
      if (sourceChange.edits.isNotEmpty) {
        var fixKind = fixState.fixKind;
        if (fixState.fixCount > 1) {
          sourceChange.message = fixKind.message;
          fixes.add(Fix(fixKind, sourceChange));
        }
      }
    }
    return fixes;
  }

  Future<void> _fixError(DartFixContext fixContext, FixState fixState,
      CorrectionProducer producer, AnalysisError diagnostic) async {
    var context = CorrectionProducerContext(
      applyingBulkFixes: true,
      dartFixContext: fixContext,
      diagnostic: diagnostic,
      resolvedResult: fixContext.resolveResult,
      selectionOffset: diagnostic.offset,
      selectionLength: diagnostic.length,
      workspace: fixContext.workspace,
    );

    var setupSuccess = context.setupCompute();
    if (!setupSuccess) {
      return;
    }

    producer.configure(context);

    try {
      var localBuilder = fixState.builder.copy();
      await producer.compute(localBuilder);
      fixState.builder = localBuilder;
      // todo (pq): consider discarding the change if the producer's fixKind
      // doesn't match a previously cached one.
      fixState.fixKind = producer.multiFixKind;
      fixState.fixCount++;
    } on ConflictingEditException {
      // If a conflicting edit was added in [compute], then the [localBuilder]
      // is discarded and we revert to the previous state of the builder.
    }
  }

  List<ProducerGenerator> _getGenerators(
      ErrorCode errorCode, CorrectionProducerContext context) {
    var producers = <ProducerGenerator>[];
    if (errorCode is LintCode) {
      var fixInfos = FixProcessor.lintProducerMap2[errorCode.name] ?? [];
      for (var fixInfo in fixInfos) {
        if (fixInfo.canBeAppliedToFile) {
          producers.addAll(fixInfo.generators);
        }
      }
    } else {
      // todo (pq): add support for non-lint producers and update to a new nonLintProducerMap2
      // var generators = FixProcessor.nonLintProducerMap[errorCode];
      // if (generators != null) {
      //   if (generators != null) {
      //     producers.addAll(generators);
      //   }
      // }
      // todo (pq): consider support for multiGenerators
    }
    return producers;
  }
}

class FixInfo {
  final bool canBeAppliedToFile;
  final bool canBeBulkApplied;
  final List<ProducerGenerator> generators;
  const FixInfo({
    @required this.canBeAppliedToFile,
    @required this.canBeBulkApplied,
    @required this.generators,
  });
}

/// The computer for Dart fixes.
class FixProcessor extends BaseProcessor {
  /// todo (pq): to replace lintProducerMap.
  static const Map<String, List<FixInfo>> lintProducerMap2 = {
    LintNames.always_declare_return_types: [
      FixInfo(
        // todo (pq): enable when tested
        canBeAppliedToFile: false,
        // not currently supported; TODO(pq): consider adding
        canBeBulkApplied: false,
        generators: [
          AddReturnType.newInstance,
        ],
      )
    ],
    LintNames.always_require_non_null_named_parameters: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          AddRequired.newInstance,
        ],
      )
    ],
    LintNames.always_specify_types: [
      FixInfo(
        // todo (pq): enable when tested
        canBeAppliedToFile: false,
        // not currently supported; TODO(pq): consider adding
        canBeBulkApplied: false,
        generators: [
          AddTypeAnnotation.newInstance,
        ],
      )
    ],
    LintNames.annotate_overrides: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          AddOverride.newInstance,
        ],
      )
    ],
    LintNames.avoid_annotating_with_dynamic: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveTypeAnnotation.newInstance,
        ],
      )
    ],
    LintNames.avoid_empty_else: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveEmptyElse.newInstance,
        ],
      )
    ],
    LintNames.avoid_init_to_null: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveInitializer.newInstance,
        ],
      )
    ],
    LintNames.avoid_private_typedef_functions: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          InlineTypedef.newInstance,
        ],
      )
    ],
    LintNames.avoid_redundant_argument_values: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveArgument.newInstance,
        ],
      )
    ],
    LintNames.avoid_relative_lib_imports: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertToPackageImport.newInstance,
        ],
      )
    ],
    LintNames.avoid_return_types_on_setters: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveTypeAnnotation.newInstance,
        ],
      )
    ],
    LintNames.avoid_returning_null_for_future: [
      FixInfo(
        canBeAppliedToFile: false,
        // not currently supported; TODO(pq): consider adding
        canBeBulkApplied: false,
        generators: [
          AddAsync.newInstance,
          WrapInFuture.newInstance,
        ],
      )
    ],
    LintNames.avoid_single_cascade_in_expression_statements: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          // TODO(brianwilkerson) This fix should be applied to some non-lint
          //  diagnostics and should also be available as an assist.
          ReplaceCascadeWithDot.newInstance,
        ],
      )
    ],
    LintNames.avoid_types_as_parameter_names: [
      FixInfo(
        canBeAppliedToFile: false,
        canBeBulkApplied: false,
        generators: [
          ConvertToOnType.newInstance,
        ],
      )
    ],
    LintNames.avoid_types_on_closure_parameters: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ReplaceWithIdentifier.newInstance,
          RemoveTypeAnnotation.newInstance,
        ],
      )
    ],
    LintNames.avoid_unused_constructor_parameters: [
      FixInfo(
        // todo (pq): enable when tested
        canBeAppliedToFile: false,
        canBeBulkApplied: false,
        generators: [
          RemoveUnusedParameter.newInstance,
        ],
      )
    ],
    LintNames.await_only_futures: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveAwait.newInstance,
        ],
      )
    ],
    LintNames.curly_braces_in_flow_control_structures: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          UseCurlyBraces.newInstance,
        ],
      )
    ],
    LintNames.diagnostic_describe_all_properties: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          AddDiagnosticPropertyReference.newInstance,
        ],
      )
    ],
    LintNames.directives_ordering: [
      FixInfo(
        canBeAppliedToFile: false, // Fix will sort all directives.
        canBeBulkApplied: false,
        generators: [
          OrganizeImports.newInstance,
        ],
      )
    ],
    LintNames.empty_catches: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveEmptyCatch.newInstance,
        ],
      )
    ],
    LintNames.empty_constructor_bodies: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveEmptyConstructorBody.newInstance,
        ],
      )
    ],
    LintNames.empty_statements: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveEmptyStatement.newInstance,
          ReplaceWithBrackets.newInstance,
        ],
      )
    ],
    LintNames.hash_and_equals: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          CreateMethod.equalsOrHashCode,
        ],
      )
    ],
    LintNames.no_duplicate_case_values: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveDuplicateCase.newInstance,
        ],
      )
    ],
    LintNames.non_constant_identifier_names: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RenameToCamelCase.newInstance,
        ],
      )
    ],
    LintNames.null_closures: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ReplaceNullWithClosure.newInstance,
        ],
      )
    ],
    LintNames.omit_local_variable_types: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ReplaceWithVar.newInstance,
        ],
      )
    ],
    LintNames.prefer_adjacent_string_concatenation: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveOperator.newInstance,
        ],
      )
    ],
    LintNames.prefer_collection_literals: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertToListLiteral.newInstance,
          ConvertToMapLiteral.newInstance,
          ConvertToSetLiteral.newInstance,
        ],
      )
    ],
    LintNames.prefer_conditional_assignment: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ReplaceWithConditionalAssignment.newInstance,
        ],
      )
    ],
    LintNames.prefer_const_constructors: [
      FixInfo(
        canBeAppliedToFile: false,
        // Can produce results incompatible w/ `unnecessary_const`
        canBeBulkApplied: false,
        generators: [
          AddConst.newInstance,
          ReplaceNewWithConst.newInstance,
        ],
      )
    ],
    LintNames.prefer_const_constructors_in_immutables: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          AddConst.newInstance,
        ],
      )
    ],
    LintNames.prefer_const_declarations: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ReplaceFinalWithConst.newInstance,
        ],
      )
    ],
    LintNames.prefer_contains: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertToContains.newInstance,
        ],
      )
    ],
    LintNames.prefer_equal_for_default_values: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ReplaceColonWithEquals.newInstance,
        ],
      )
    ],
    LintNames.prefer_expression_function_bodies: [
      FixInfo(
        // todo (pq): enable when tested
        canBeAppliedToFile: false,
        // not currently supported; TODO(pq): consider adding
        canBeBulkApplied: false,
        generators: [
          ConvertToExpressionFunctionBody.newInstance,
        ],
      )
    ],
    LintNames.prefer_final_fields: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          MakeFinal.newInstance,
        ],
      )
    ],
    LintNames.prefer_final_in_for_each: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          MakeFinal.newInstance,
        ],
      )
    ],
    LintNames.prefer_final_locals: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          MakeFinal.newInstance,
        ],
      )
    ],
    LintNames.prefer_for_elements_to_map_fromIterable: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertMapFromIterableToForLiteral.newInstance,
        ],
      )
    ],
    LintNames.prefer_generic_function_type_aliases: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertToGenericFunctionSyntax.newInstance,
        ],
      )
    ],
    LintNames.prefer_if_elements_to_conditional_expressions: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertConditionalExpressionToIfElement.newInstance,
        ],
      )
    ],
    LintNames.prefer_is_empty: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ReplaceWithIsEmpty.newInstance,
        ],
      )
    ],
    LintNames.prefer_is_not_empty: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          UseIsNotEmpty.newInstance,
        ],
      )
    ],
    LintNames.prefer_if_null_operators: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertToIfNull.newInstance,
        ],
      )
    ],
    LintNames.prefer_inlined_adds: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertAddAllToSpread.newInstance,
          InlineInvocation.newInstance,
        ],
      )
    ],
    LintNames.prefer_int_literals: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertToIntLiteral.newInstance,
        ],
      )
    ],
    LintNames.prefer_interpolation_to_compose_strings: [
      FixInfo(
        // todo (pq): enable when tested
        canBeAppliedToFile: false,
        // not currently supported; TODO(pq): consider adding
        canBeBulkApplied: false,
        generators: [
          ReplaceWithInterpolation.newInstance,
        ],
      )
    ],
    // todo (pq): note this is not in lintProducerMap
    LintNames.prefer_is_not_operator: [
      FixInfo(
        // todo (pq): consider enabling
        canBeAppliedToFile: false,
        canBeBulkApplied: true,
        generators: [
          ConvertIntoIsNot.newInstance,
        ],
      )
    ],
    LintNames.prefer_iterable_whereType: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertToWhereType.newInstance,
        ],
      )
    ],
    LintNames.prefer_null_aware_operators: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertToNullAware.newInstance,
        ],
      )
    ],
    LintNames.prefer_relative_imports: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertToRelativeImport.newInstance,
        ],
      )
    ],
    LintNames.prefer_single_quotes: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertToSingleQuotes.newInstance,
        ],
      )
    ],
    LintNames.prefer_spread_collections: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertAddAllToSpread.newInstance,
        ],
      )
    ],
    LintNames.slash_for_doc_comments: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertDocumentationIntoLine.newInstance,
        ],
      )
    ],
    LintNames.sort_child_properties_last: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          SortChildPropertyLast.newInstance,
        ],
      )
    ],
    LintNames.type_annotate_public_apis: [
      FixInfo(
        // todo (pq): enable when tested
        canBeAppliedToFile: false,
        // not currently supported; TODO(pq): consider adding
        canBeBulkApplied: false,
        generators: [
          AddTypeAnnotation.newInstance,
        ],
      )
    ],
    LintNames.type_init_formals: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveTypeAnnotation.newInstance,
        ],
      )
    ],
    LintNames.unawaited_futures: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          AddAwait.newInstance,
        ],
      )
    ],
    LintNames.unnecessary_brace_in_string_interps: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveInterpolationBraces.newInstance,
        ],
      )
    ],
    LintNames.unnecessary_const: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveUnnecessaryConst.newInstance,
        ],
      )
    ],
    LintNames.unnecessary_lambdas: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ReplaceWithTearOff.newInstance,
        ],
      )
    ],
    LintNames.unnecessary_new: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveUnnecessaryNew.newInstance,
        ],
      )
    ],
    LintNames.unnecessary_null_in_if_null_operators: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveIfNullOperator.newInstance,
        ],
      )
    ],
    LintNames.unnecessary_nullable_for_final_variable_declarations: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveQuestionMark.newInstance,
        ],
      )
    ],
    LintNames.unnecessary_overrides: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveMethodDeclaration.newInstance,
        ],
      )
    ],
    LintNames.unnecessary_parenthesis: [
      FixInfo(
        // todo (pq): enable when tested
        canBeAppliedToFile: false,
        // not currently supported; TODO(pq): consider adding
        canBeBulkApplied: false,
        generators: [
          RemoveUnnecessaryParentheses.newInstance,
        ],
      )
    ],
    LintNames.unnecessary_string_interpolations: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveUnnecessaryStringInterpolation.newInstance,
        ],
      )
    ],
    LintNames.unnecessary_this: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          RemoveThisExpression.newInstance,
        ],
      )
    ],
    LintNames.use_full_hex_values_for_flutter_colors: [
      FixInfo(
        // todo (pq): enable when tested
        canBeAppliedToFile: false,
        // not currently supported; TODO(pq): consider adding
        canBeBulkApplied: false,
        generators: [
          ReplaceWithEightDigitHex.newInstance,
        ],
      )
    ],
    LintNames.use_function_type_syntax_for_parameters: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          ConvertToGenericFunctionSyntax.newInstance,
        ],
      )
    ],
    LintNames.use_rethrow_when_possible: [
      FixInfo(
        canBeAppliedToFile: true,
        canBeBulkApplied: true,
        generators: [
          UseRethrow.newInstance,
        ],
      )
    ],
  };

  /// A map from the names of lint rules to a list of generators used to create
  /// the correction producers used to build fixes for those diagnostics. The
  /// generators used for non-lint diagnostics are in the [nonLintProducerMap].
  static const Map<String, List<ProducerGenerator>> lintProducerMap = {
    LintNames.always_declare_return_types: [
      AddReturnType.newInstance,
    ],
    LintNames.always_require_non_null_named_parameters: [
      AddRequired.newInstance,
    ],
    LintNames.always_specify_types: [
      AddTypeAnnotation.newInstance,
    ],
    LintNames.annotate_overrides: [
      AddOverride.newInstance,
    ],
    LintNames.avoid_annotating_with_dynamic: [
      RemoveTypeAnnotation.newInstance,
    ],
    LintNames.avoid_empty_else: [
      RemoveEmptyElse.newInstance,
    ],
    LintNames.avoid_init_to_null: [
      RemoveInitializer.newInstance,
    ],
    LintNames.avoid_private_typedef_functions: [
      InlineTypedef.newInstance,
    ],
    LintNames.avoid_redundant_argument_values: [
      RemoveArgument.newInstance,
    ],
    LintNames.avoid_relative_lib_imports: [
      ConvertToPackageImport.newInstance,
    ],
    LintNames.avoid_return_types_on_setters: [
      RemoveTypeAnnotation.newInstance,
    ],
    LintNames.avoid_returning_null_for_future: [
      AddAsync.newInstance,
      WrapInFuture.newInstance,
    ],
    LintNames.avoid_single_cascade_in_expression_statements: [
      // TODO(brianwilkerson) This fix should be applied to some non-lint
      //  diagnostics and should also be available as an assist.
      ReplaceCascadeWithDot.newInstance,
    ],
    LintNames.avoid_types_as_parameter_names: [
      ConvertToOnType.newInstance,
    ],
    LintNames.avoid_types_on_closure_parameters: [
      ReplaceWithIdentifier.newInstance,
      RemoveTypeAnnotation.newInstance,
    ],
    LintNames.avoid_unused_constructor_parameters: [
      RemoveUnusedParameter.newInstance,
    ],
    LintNames.await_only_futures: [
      RemoveAwait.newInstance,
    ],
    LintNames.curly_braces_in_flow_control_structures: [
      UseCurlyBraces.newInstance,
    ],
    LintNames.diagnostic_describe_all_properties: [
      AddDiagnosticPropertyReference.newInstance,
    ],
    LintNames.directives_ordering: [
      OrganizeImports.newInstance,
    ],
    LintNames.empty_catches: [
      RemoveEmptyCatch.newInstance,
    ],
    LintNames.empty_constructor_bodies: [
      RemoveEmptyConstructorBody.newInstance,
    ],
    LintNames.empty_statements: [
      RemoveEmptyStatement.newInstance,
      ReplaceWithBrackets.newInstance,
    ],
    LintNames.hash_and_equals: [
      CreateMethod.equalsOrHashCode,
    ],
    LintNames.no_duplicate_case_values: [
      RemoveDuplicateCase.newInstance,
    ],
    LintNames.non_constant_identifier_names: [
      RenameToCamelCase.newInstance,
    ],
    LintNames.null_closures: [
      ReplaceNullWithClosure.newInstance,
    ],
    LintNames.omit_local_variable_types: [
      ReplaceWithVar.newInstance,
    ],
    LintNames.prefer_adjacent_string_concatenation: [
      RemoveOperator.newInstance,
    ],
    LintNames.prefer_collection_literals: [
      ConvertToListLiteral.newInstance,
      ConvertToMapLiteral.newInstance,
      ConvertToSetLiteral.newInstance,
    ],
    LintNames.prefer_conditional_assignment: [
      ReplaceWithConditionalAssignment.newInstance,
    ],
    LintNames.prefer_const_constructors: [
      AddConst.newInstance,
      ReplaceNewWithConst.newInstance,
    ],
    LintNames.prefer_const_constructors_in_immutables: [
      AddConst.newInstance,
    ],
    LintNames.prefer_const_declarations: [
      ReplaceFinalWithConst.newInstance,
    ],
    LintNames.prefer_contains: [
      ConvertToContains.newInstance,
    ],
    LintNames.prefer_equal_for_default_values: [
      ReplaceColonWithEquals.newInstance,
    ],
    LintNames.prefer_expression_function_bodies: [
      ConvertToExpressionFunctionBody.newInstance,
    ],
    LintNames.prefer_final_fields: [
      MakeFinal.newInstance,
    ],
    LintNames.prefer_final_in_for_each: [
      MakeFinal.newInstance,
    ],
    LintNames.prefer_final_locals: [
      MakeFinal.newInstance,
    ],
    LintNames.prefer_for_elements_to_map_fromIterable: [
      ConvertMapFromIterableToForLiteral.newInstance,
    ],
    LintNames.prefer_generic_function_type_aliases: [
      ConvertToGenericFunctionSyntax.newInstance,
    ],
    LintNames.prefer_if_elements_to_conditional_expressions: [
      ConvertConditionalExpressionToIfElement.newInstance,
    ],
    LintNames.prefer_is_empty: [
      ReplaceWithIsEmpty.newInstance,
    ],
    LintNames.prefer_is_not_empty: [
      UseIsNotEmpty.newInstance,
    ],
    LintNames.prefer_if_null_operators: [
      ConvertToIfNull.newInstance,
    ],
    LintNames.prefer_inlined_adds: [
      ConvertAddAllToSpread.newInstance,
      InlineInvocation.newInstance,
    ],
    LintNames.prefer_int_literals: [
      ConvertToIntLiteral.newInstance,
    ],
    LintNames.prefer_interpolation_to_compose_strings: [
      ReplaceWithInterpolation.newInstance,
    ],
    LintNames.prefer_iterable_whereType: [
      ConvertToWhereType.newInstance,
    ],
    LintNames.prefer_null_aware_operators: [
      ConvertToNullAware.newInstance,
    ],
    LintNames.prefer_relative_imports: [
      ConvertToRelativeImport.newInstance,
    ],
    LintNames.prefer_single_quotes: [
      ConvertToSingleQuotes.newInstance,
    ],
    LintNames.prefer_spread_collections: [
      ConvertAddAllToSpread.newInstance,
    ],
    LintNames.slash_for_doc_comments: [
      ConvertDocumentationIntoLine.newInstance,
    ],
    LintNames.sort_child_properties_last: [
      SortChildPropertyLast.newInstance,
    ],
    LintNames.type_annotate_public_apis: [
      AddTypeAnnotation.newInstance,
    ],
    LintNames.type_init_formals: [
      RemoveTypeAnnotation.newInstance,
    ],
    LintNames.unawaited_futures: [
      AddAwait.newInstance,
    ],
    LintNames.unnecessary_brace_in_string_interps: [
      RemoveInterpolationBraces.newInstance,
    ],
    LintNames.unnecessary_const: [
      RemoveUnnecessaryConst.newInstance,
    ],
    LintNames.unnecessary_lambdas: [
      ReplaceWithTearOff.newInstance,
    ],
    LintNames.unnecessary_new: [
      RemoveUnnecessaryNew.newInstance,
    ],
    LintNames.unnecessary_null_in_if_null_operators: [
      RemoveIfNullOperator.newInstance,
    ],
    LintNames.unnecessary_nullable_for_final_variable_declarations: [
      RemoveQuestionMark.newInstance,
    ],
    LintNames.unnecessary_overrides: [
      RemoveMethodDeclaration.newInstance,
    ],
    LintNames.unnecessary_parenthesis: [
      RemoveUnnecessaryParentheses.newInstance,
    ],
    LintNames.unnecessary_string_interpolations: [
      RemoveUnnecessaryStringInterpolation.newInstance,
    ],
    LintNames.unnecessary_this: [
      RemoveThisExpression.newInstance,
    ],
    LintNames.use_full_hex_values_for_flutter_colors: [
      ReplaceWithEightDigitHex.newInstance,
    ],
    LintNames.use_function_type_syntax_for_parameters: [
      ConvertToGenericFunctionSyntax.newInstance,
    ],
    LintNames.use_rethrow_when_possible: [
      UseRethrow.newInstance,
    ],
  };

  /// A map from error codes to a list of generators used to create multiple
  /// correction producers used to build fixes for those diagnostics. The
  /// generators used for lint rules are in the [lintMultiProducerMap].
  static const Map<ErrorCode, List<MultiProducerGenerator>>
      nonLintMultiProducerMap = {
    CompileTimeErrorCode.CAST_TO_NON_TYPE: [
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.CONST_WITH_NON_TYPE: [
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.EXTENDS_NON_CLASS: [
      DataDriven.newInstance,
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS: [
      AddMissingParameter.newInstance,
      DataDriven.newInstance,
    ],
    CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED: [
      AddMissingParameter.newInstance,
      DataDriven.newInstance,
    ],
    CompileTimeErrorCode.IMPLEMENTS_NON_CLASS: [
      DataDriven.newInstance,
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.INVALID_ANNOTATION: [
      ImportLibrary.forTopLevelVariable,
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.INVALID_OVERRIDE: [
      DataDriven.newInstance,
    ],
    CompileTimeErrorCode.MIXIN_OF_NON_CLASS: [
      DataDriven.newInstance,
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.NEW_WITH_NON_TYPE: [
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT: [
      DataDriven.newInstance,
    ],
    CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT: [
      AddSuperConstructorInvocation.newInstance,
    ],
    CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT: [
      AddSuperConstructorInvocation.newInstance,
      CreateConstructorSuper.newInstance,
    ],
    CompileTimeErrorCode.NON_TYPE_IN_CATCH_CLAUSE: [
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.NON_TYPE_AS_TYPE_ARGUMENT: [
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.NOT_A_TYPE: [
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS: [
      DataDriven.newInstance,
    ],
    CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME: [
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.UNDEFINED_ANNOTATION: [
      ImportLibrary.forTopLevelVariable,
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.UNDEFINED_CLASS: [
      DataDriven.newInstance,
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT: [
      AddSuperConstructorInvocation.newInstance,
    ],
    CompileTimeErrorCode.UNDEFINED_FUNCTION: [
      DataDriven.newInstance,
      ImportLibrary.forExtension,
      ImportLibrary.forFunction,
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.UNDEFINED_GETTER: [
      DataDriven.newInstance,
      ImportLibrary.forTopLevelVariable,
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.UNDEFINED_IDENTIFIER: [
      DataDriven.newInstance,
      ImportLibrary.forExtension,
      ImportLibrary.forFunction,
      ImportLibrary.forTopLevelVariable,
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.UNDEFINED_METHOD: [
      DataDriven.newInstance,
      ImportLibrary.forFunction,
      ImportLibrary.forType,
    ],
    CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER: [
      ChangeArgumentName.newInstance,
      DataDriven.newInstance,
    ],
    CompileTimeErrorCode.UNDEFINED_SETTER: [
      DataDriven.newInstance,
      // TODO(brianwilkerson) Support ImportLibrary
    ],
    CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS: [
      DataDriven.newInstance,
    ],
    CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR: [
      DataDriven.newInstance,
    ],
    CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_EXTENSION: [
      DataDriven.newInstance,
    ],
    CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD: [
      DataDriven.newInstance,
    ],
    HintCode.DEPRECATED_MEMBER_USE: [
      DataDriven.newInstance,
    ],
    HintCode.DEPRECATED_MEMBER_USE_WITH_MESSAGE: [
      DataDriven.newInstance,
    ],
    HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD: [
      DataDriven.newInstance,
    ],
    HintCode.SDK_VERSION_ASYNC_EXPORTED_FROM_CORE: [
      ImportLibrary.dartAsync,
    ],
  };

  /// A map from error codes to a list of generators used to create the
  /// correction producers used to build fixes for those diagnostics. The
  /// generators used for lint rules are in the [lintProducerMap].
  static const Map<ErrorCode, List<ProducerGenerator>> nonLintProducerMap = {
    CompileTimeErrorCode.ASSIGNMENT_TO_FINAL: [
      MakeFieldNotFinal.newInstance,
      AddLate.newInstance,
    ],
    CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL: [
      MakeVariableNotFinal.newInstance,
    ],
    CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE: [
      AddNullCheck.newInstance,
      WrapInText.newInstance,
    ],
    CompileTimeErrorCode.ASYNC_FOR_IN_WRONG_CONTEXT: [
      AddAsync.newInstance,
    ],
    CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT: [
      AddAsync.newInstance,
    ],
    CompileTimeErrorCode.BODY_MIGHT_COMPLETE_NORMALLY: [
      AddAsync.missingReturn,
    ],
    CompileTimeErrorCode.CAST_TO_NON_TYPE: [
      ChangeTo.classOrMixin,
      CreateClass.newInstance,
      CreateMixin.newInstance,
    ],
    CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER: [
      CreateMissingOverrides.newInstance,
      CreateNoSuchMethod.newInstance,
      MakeClassAbstract.newInstance,
    ],
    CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE: [
      UseConst.newInstance,
    ],
    CompileTimeErrorCode.CONST_INSTANCE_FIELD: [
      AddStatic.newInstance,
    ],
    CompileTimeErrorCode.CONST_WITH_NON_CONST: [
      RemoveConst.newInstance,
    ],
    CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR: [
      ReplaceWithFilled.newInstance,
    ],
    CompileTimeErrorCode.CONST_WITH_NON_TYPE: [
      ChangeTo.classOrMixin,
    ],
    CompileTimeErrorCode.EXTENDS_NON_CLASS: [
      ChangeTo.classOrMixin,
      CreateClass.newInstance,
    ],
    CompileTimeErrorCode.EXTENSION_OVERRIDE_ACCESS_TO_STATIC_MEMBER: [
      ReplaceWithExtensionName.newInstance,
    ],
    CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS: [
      CreateConstructor.newInstance,
    ],
    CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED: [
      CreateConstructor.newInstance,
      ConvertToNamedArguments.newInstance,
    ],
    CompileTimeErrorCode.FINAL_NOT_INITIALIZED: [
      AddLate.newInstance,
      CreateConstructorForFinalFields.newInstance,
    ],
    CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1: [
      AddFieldFormalParameters.newInstance,
    ],
    CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2: [
      AddFieldFormalParameters.newInstance,
    ],
    CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS: [
      AddFieldFormalParameters.newInstance,
    ],
    CompileTimeErrorCode.ILLEGAL_ASYNC_RETURN_TYPE: [
      ReplaceReturnTypeFuture.newInstance,
    ],
    CompileTimeErrorCode.IMPLEMENTS_NON_CLASS: [
      ChangeTo.classOrMixin,
      CreateClass.newInstance,
    ],
    CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD: [
      CreateField.newInstance,
    ],
    CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER: [
      ChangeToStaticAccess.newInstance,
    ],
    CompileTimeErrorCode.INTEGER_LITERAL_IMPRECISE_AS_DOUBLE: [
      ChangeToNearestPreciseValue.newInstance,
    ],
    CompileTimeErrorCode.INVALID_ANNOTATION: [
      ChangeTo.annotation,
      CreateClass.newInstance,
    ],
    CompileTimeErrorCode.INVALID_ASSIGNMENT: [
      AddExplicitCast.newInstance,
      AddNullCheck.newInstance,
      ChangeTypeAnnotation.newInstance,
      MakeVariableNullable.newInstance,
    ],
    CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION_EXPRESSION: [
      RemoveParenthesesInGetterInvocation.newInstance,
    ],
    CompileTimeErrorCode.MISSING_DEFAULT_VALUE_FOR_PARAMETER: [
      AddRequiredKeyword.newInstance,
      MakeVariableNullable.newInstance,
    ],
    CompileTimeErrorCode.MISSING_REQUIRED_ARGUMENT: [
      AddMissingRequiredArgument.newInstance,
    ],
    CompileTimeErrorCode.MIXIN_APPLICATION_NOT_IMPLEMENTED_INTERFACE: [
      ExtendClassForMixin.newInstance,
    ],
    CompileTimeErrorCode.MIXIN_OF_NON_CLASS: [
      ChangeTo.classOrMixin,
      CreateClass.newInstance,
    ],
    CompileTimeErrorCode.NEW_WITH_NON_TYPE: [
      ChangeTo.classOrMixin,
    ],
    CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR: [
      CreateConstructor.newInstance,
    ],
    CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS:
        [
      CreateMissingOverrides.newInstance,
      CreateNoSuchMethod.newInstance,
      MakeClassAbstract.newInstance,
    ],
    CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR: [
      CreateMissingOverrides.newInstance,
      CreateNoSuchMethod.newInstance,
      MakeClassAbstract.newInstance,
    ],
    CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE: [
      CreateMissingOverrides.newInstance,
      CreateNoSuchMethod.newInstance,
      MakeClassAbstract.newInstance,
    ],
    CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE: [
      CreateMissingOverrides.newInstance,
      CreateNoSuchMethod.newInstance,
      MakeClassAbstract.newInstance,
    ],
    CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO: [
      CreateMissingOverrides.newInstance,
      CreateNoSuchMethod.newInstance,
      MakeClassAbstract.newInstance,
    ],
    CompileTimeErrorCode.NON_BOOL_CONDITION: [
      AddNeNull.newInstance,
    ],
    CompileTimeErrorCode.NON_TYPE_AS_TYPE_ARGUMENT: [
      CreateClass.newInstance,
      CreateMixin.newInstance,
    ],
    CompileTimeErrorCode.NOT_A_TYPE: [
      ChangeTo.classOrMixin,
      CreateClass.newInstance,
      CreateMixin.newInstance,
    ],
    CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD: [
      AddLate.newInstance,
    ],
    CompileTimeErrorCode.NULLABLE_TYPE_IN_EXTENDS_CLAUSE: [
      RemoveQuestionMark.newInstance,
    ],
    CompileTimeErrorCode.NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE: [
      RemoveQuestionMark.newInstance,
    ],
    CompileTimeErrorCode.NULLABLE_TYPE_IN_ON_CLAUSE: [
      RemoveQuestionMark.newInstance,
    ],
    CompileTimeErrorCode.NULLABLE_TYPE_IN_WITH_CLAUSE: [
      RemoveQuestionMark.newInstance,
    ],
    CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION: [
      MakeReturnTypeNullable.newInstance,
    ],
    CompileTimeErrorCode.RETURN_OF_INVALID_TYPE_FROM_METHOD: [
      MakeReturnTypeNullable.newInstance,
    ],
    CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME: [
      ChangeTo.classOrMixin,
      CreateClass.newInstance,
      CreateMixin.newInstance,
    ],
    CompileTimeErrorCode.UNCHECKED_INVOCATION_OF_NULLABLE_VALUE: [
      AddNullCheck.newInstance,
    ],
    CompileTimeErrorCode.UNCHECKED_METHOD_INVOCATION_OF_NULLABLE_VALUE: [
      AddNullCheck.newInstance,
    ],
    CompileTimeErrorCode.UNCHECKED_OPERATOR_INVOCATION_OF_NULLABLE_VALUE: [
      AddNullCheck.newInstance,
    ],
    CompileTimeErrorCode.UNCHECKED_PROPERTY_ACCESS_OF_NULLABLE_VALUE: [
      AddNullCheck.newInstance,
    ],
    CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE: [
      AddNullCheck.newInstance,
    ],
    CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_CONDITION: [
      AddNullCheck.newInstance,
    ],
    CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_AS_ITERATOR: [
      AddNullCheck.newInstance,
    ],
    CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_IN_SPREAD: [
      AddNullCheck.newInstance,
      ConvertToNullAwareSpread.newInstance,
    ],
    CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE_IN_YIELD_EACH: [
      AddNullCheck.newInstance,
    ],
    CompileTimeErrorCode.UNDEFINED_ANNOTATION: [
      ChangeTo.annotation,
      CreateClass.newInstance,
    ],
    CompileTimeErrorCode.UNDEFINED_CLASS: [
      ChangeTo.classOrMixin,
      CreateClass.newInstance,
      CreateMixin.newInstance,
    ],
    CompileTimeErrorCode.UNDEFINED_CLASS_BOOLEAN: [
      ReplaceBooleanWithBool.newInstance,
    ],
    CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER: [
      ChangeTo.getterOrSetter,
      CreateGetter.newInstance,
    ],
    CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD: [
      ChangeTo.method,
      CreateMethod.method,
    ],
    CompileTimeErrorCode.UNDEFINED_EXTENSION_SETTER: [
      ChangeTo.getterOrSetter,
      CreateSetter.newInstance,
    ],
    CompileTimeErrorCode.UNDEFINED_FUNCTION: [
      ChangeTo.function,
      CreateClass.newInstance,
      CreateFunction.newInstance,
    ],
    CompileTimeErrorCode.UNDEFINED_GETTER: [
      ChangeTo.getterOrSetter,
      CreateClass.newInstance,
      CreateField.newInstance,
      CreateGetter.newInstance,
      CreateLocalVariable.newInstance,
      CreateMethodOrFunction.newInstance,
      CreateMixin.newInstance,
    ],
    CompileTimeErrorCode.UNDEFINED_IDENTIFIER: [
      ChangeTo.getterOrSetter,
      CreateClass.newInstance,
      CreateField.newInstance,
      CreateGetter.newInstance,
      CreateLocalVariable.newInstance,
      CreateMethodOrFunction.newInstance,
      CreateMixin.newInstance,
      CreateSetter.newInstance,
    ],
    CompileTimeErrorCode.UNDEFINED_IDENTIFIER_AWAIT: [
      AddAsync.newInstance,
    ],
    CompileTimeErrorCode.UNDEFINED_METHOD: [
      ChangeTo.method,
      CreateClass.newInstance,
      CreateFunction.newInstance,
      CreateMethod.method,
    ],
    CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER: [
      AddMissingParameterNamed.newInstance,
      ConvertFlutterChild.newInstance,
      ConvertFlutterChildren.newInstance,
    ],
    CompileTimeErrorCode.UNDEFINED_SETTER: [
      ChangeTo.getterOrSetter,
      CreateField.newInstance,
      CreateSetter.newInstance,
    ],
    CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER: [
      // TODO(brianwilkerson) Consider adding fixes to create a field, getter,
      //  method or setter. The existing _addFix methods would need to be
      //  updated so that only the appropriate subset is generated.
      QualifyReference.newInstance,
    ],
    CompileTimeErrorCode
        .UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE: [
      // TODO(brianwilkerson) Consider adding fixes to create a field, getter,
      //  method or setter. The existing producers would need to be updated so
      //  that only the appropriate subset is generated.
      QualifyReference.newInstance,
    ],
    CompileTimeErrorCode.URI_DOES_NOT_EXIST: [
      CreateFile.newInstance,
    ],
    CompileTimeErrorCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR: [
      MoveTypeArgumentsToClass.newInstance,
      RemoveTypeArguments.newInstance,
    ],
    CompileTimeErrorCode.YIELD_OF_INVALID_TYPE: [
      MakeReturnTypeNullable.newInstance,
    ],

    HintCode.CAN_BE_NULL_AFTER_NULL_AWARE: [
      ReplaceWithNullAware.newInstance,
    ],
    HintCode.DEAD_CODE: [
      RemoveDeadCode.newInstance,
    ],
    HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH: [
      // TODO(brianwilkerson) Add a fix to move the unreachable catch clause to
      //  a place where it can be reached (when possible).
      RemoveDeadCode.newInstance,
    ],
    HintCode.DEAD_CODE_ON_CATCH_SUBTYPE: [
      // TODO(brianwilkerson) Add a fix to move the unreachable catch clause to
      //  a place where it can be reached (when possible).
      RemoveDeadCode.newInstance,
    ],
    HintCode.DIVISION_OPTIMIZATION: [
      UseEffectiveIntegerDivision.newInstance,
    ],
    HintCode.DUPLICATE_HIDDEN_NAME: [
      RemoveNameFromCombinator.newInstance,
    ],
    HintCode.DUPLICATE_IMPORT: [
      RemoveUnusedImport.newInstance,
    ],
    HintCode.DUPLICATE_SHOWN_NAME: [
      RemoveNameFromCombinator.newInstance,
    ],
    // TODO(brianwilkerson) Add a fix to convert the path to a package: import.
//    HintCode.FILE_IMPORT_OUTSIDE_LIB_REFERENCES_FILE_INSIDE: [],
    HintCode.INVALID_FACTORY_ANNOTATION: [
      RemoveAnnotation.newInstance,
    ],
    HintCode.INVALID_IMMUTABLE_ANNOTATION: [
      RemoveAnnotation.newInstance,
    ],
    HintCode.INVALID_LITERAL_ANNOTATION: [
      RemoveAnnotation.newInstance,
    ],
    HintCode.INVALID_REQUIRED_NAMED_PARAM: [
      RemoveAnnotation.newInstance,
    ],
    HintCode.INVALID_REQUIRED_OPTIONAL_POSITIONAL_PARAM: [
      RemoveAnnotation.newInstance,
    ],
    HintCode.INVALID_REQUIRED_POSITIONAL_PARAM: [
      RemoveAnnotation.newInstance,
    ],
    HintCode.INVALID_SEALED_ANNOTATION: [
      RemoveAnnotation.newInstance,
    ],
    HintCode.MISSING_REQUIRED_PARAM: [
      AddMissingRequiredArgument.newInstance,
    ],
    HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS: [
      AddMissingRequiredArgument.newInstance,
    ],
    HintCode.MISSING_RETURN: [
      AddAsync.missingReturn,
    ],
    HintCode.NULLABLE_TYPE_IN_CATCH_CLAUSE: [
      RemoveQuestionMark.newInstance,
    ],
    HintCode.OVERRIDE_ON_NON_OVERRIDING_FIELD: [
      RemoveAnnotation.newInstance,
    ],
    HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER: [
      RemoveAnnotation.newInstance,
    ],
    HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD: [
      RemoveAnnotation.newInstance,
    ],
    HintCode.OVERRIDE_ON_NON_OVERRIDING_SETTER: [
      RemoveAnnotation.newInstance,
    ],
    // TODO(brianwilkerson) Add a fix to normalize the path.
//    HintCode.PACKAGE_IMPORT_CONTAINS_DOT_DOT: [],
    HintCode.SDK_VERSION_AS_EXPRESSION_IN_CONST_CONTEXT: [
      UpdateSdkConstraints.version_2_2_2,
    ],
    HintCode.SDK_VERSION_ASYNC_EXPORTED_FROM_CORE: [
      UpdateSdkConstraints.version_2_1_0,
    ],
    HintCode.SDK_VERSION_BOOL_OPERATOR_IN_CONST_CONTEXT: [
      UpdateSdkConstraints.version_2_2_2,
    ],
    HintCode.SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT: [
      UpdateSdkConstraints.version_2_2_2,
    ],
    HintCode.SDK_VERSION_EXTENSION_METHODS: [
      UpdateSdkConstraints.version_2_6_0,
    ],
    HintCode.SDK_VERSION_GT_GT_GT_OPERATOR: [
      UpdateSdkConstraints.version_2_2_2,
    ],
    HintCode.SDK_VERSION_IS_EXPRESSION_IN_CONST_CONTEXT: [
      UpdateSdkConstraints.version_2_2_2,
    ],
    HintCode.SDK_VERSION_SET_LITERAL: [
      UpdateSdkConstraints.version_2_2_0,
    ],
    HintCode.SDK_VERSION_UI_AS_CODE: [
      UpdateSdkConstraints.version_2_2_2,
    ],
    HintCode.TYPE_CHECK_IS_NOT_NULL: [
      UseNotEqNull.newInstance,
    ],
    HintCode.TYPE_CHECK_IS_NULL: [
      UseEqEqNull.newInstance,
    ],
    HintCode.UNDEFINED_HIDDEN_NAME: [
      RemoveNameFromCombinator.newInstance,
    ],
    HintCode.UNDEFINED_SHOWN_NAME: [
      RemoveNameFromCombinator.newInstance,
    ],
    HintCode.UNNECESSARY_CAST: [
      RemoveUnnecessaryCast.newInstance,
    ],
//    HintCode.UNNECESSARY_NO_SUCH_METHOD: [
// TODO(brianwilkerson) Add a fix to remove the method.
//    ],
    HintCode.UNNECESSARY_NULL_COMPARISON_FALSE: [
      RemoveComparison.newInstance,
    ],
    HintCode.UNNECESSARY_NULL_COMPARISON_TRUE: [
      RemoveComparison.newInstance,
    ],
//    HintCode.UNNECESSARY_TYPE_CHECK_FALSE: [
// TODO(brianwilkerson) Add a fix to remove the type check.
//    ],
//    HintCode.UNNECESSARY_TYPE_CHECK_TRUE: [
// TODO(brianwilkerson) Add a fix to remove the type check.
//    ],
    HintCode.UNUSED_CATCH_CLAUSE: [
      RemoveUnusedCatchClause.newInstance,
    ],
    HintCode.UNUSED_CATCH_STACK: [
      RemoveUnusedCatchStack.newInstance,
    ],
    HintCode.UNUSED_ELEMENT: [
      RemoveUnusedElement.newInstance,
    ],
    HintCode.UNUSED_FIELD: [
      RemoveUnusedField.newInstance,
    ],
    HintCode.UNUSED_IMPORT: [
      RemoveUnusedImport.newInstance,
    ],
    HintCode.UNUSED_LABEL: [
      RemoveUnusedLabel.newInstance,
    ],
    HintCode.UNUSED_LOCAL_VARIABLE: [
      RemoveUnusedLocalVariable.newInstance,
    ],
    HintCode.UNUSED_SHOWN_NAME: [
      RemoveNameFromCombinator.newInstance,
    ],
    ParserErrorCode.EXPECTED_TOKEN: [
      InsertSemicolon.newInstance,
    ],
    ParserErrorCode.GETTER_WITH_PARAMETERS: [
      RemoveParametersInGetterDeclaration.newInstance,
    ],
    ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE: [
      AddTypeAnnotation.newInstance,
    ],
    ParserErrorCode.VAR_AS_TYPE_NAME: [
      ReplaceVarWithDynamic.newInstance,
    ],
    StaticWarningCode.DEAD_NULL_AWARE_EXPRESSION: [
      RemoveDeadIfNull.newInstance,
    ],
    StaticWarningCode.INVALID_NULL_AWARE_OPERATOR: [
      ReplaceWithNotNullAware.newInstance,
    ],
    StaticWarningCode.INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT: [
      ReplaceWithNotNullAware.newInstance,
    ],
    StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH: [
      AddMissingEnumCaseClauses.newInstance,
    ],
    StaticWarningCode.UNNECESSARY_NON_NULL_ASSERTION: [
      RemoveNonNullAssertion.newInstance,
    ],
  };

  final DartFixContext fixContext;

  final List<Fix> fixes = <Fix>[];

  FixProcessor(this.fixContext)
      : super(
          resolvedResult: fixContext.resolveResult,
          workspace: fixContext.workspace,
        );

  Future<List<Fix>> compute() async {
    await _addFromProducers();
    return fixes;
  }

  Future<Fix> computeFix() async {
    await _addFromProducers();
    fixes.sort(Fix.SORT_BY_RELEVANCE);
    return fixes.isNotEmpty ? fixes.first : null;
  }

  void _addFixFromBuilder(ChangeBuilder builder, FixKind kind,
      {List<Object> args, bool importsOnly = false}) {
    if (builder == null) return;
    var change = builder.sourceChange;
    if (change.edits.isEmpty && !importsOnly) {
      return;
    }
    change.id = kind.id;
    change.message = formatList(kind.message, args);
    fixes.add(Fix(kind, change));
  }

  Future<void> _addFromProducers() async {
    var error = fixContext.error;
    var context = CorrectionProducerContext(
      dartFixContext: fixContext,
      diagnostic: error,
      resolvedResult: resolvedResult,
      selectionOffset: fixContext.error.offset,
      selectionLength: fixContext.error.length,
      workspace: workspace,
    );

    var setupSuccess = context.setupCompute();
    if (!setupSuccess) {
      return;
    }

    Future<void> compute(CorrectionProducer producer) async {
      producer.configure(context);
      var builder = ChangeBuilder(
          workspace: context.workspace, eol: context.utils.endOfLine);
      try {
        await producer.compute(builder);
        _addFixFromBuilder(builder, producer.fixKind,
            args: producer.fixArguments);
      } on ConflictingEditException catch (exception, stackTrace) {
        // Handle the exception by (a) not adding a fix based on the producer
        // and (b) logging the exception.
        fixContext.instrumentationService.logException(exception, stackTrace);
      }
    }

    var errorCode = error.errorCode;
    if (errorCode is LintCode) {
      var generators = lintProducerMap[errorCode.name];
      if (generators != null) {
        for (var generator in generators) {
          await compute(generator());
        }
      }
    } else {
      var generators = nonLintProducerMap[errorCode];
      if (generators != null) {
        for (var generator in generators) {
          await compute(generator());
        }
      }
      var multiGenerators = nonLintMultiProducerMap[errorCode];
      if (multiGenerators != null) {
        for (var multiGenerator in multiGenerators) {
          var multiProducer = multiGenerator();
          multiProducer.configure(context);
          for (var producer in multiProducer.producers) {
            await compute(producer);
          }
        }
      }
    }
  }
}

/// State associated with producing fix-all-in-file fixes.
class FixState {
  ChangeBuilder builder;
  FixKind fixKind;
  int fixCount = 0;
  FixState(ChangeWorkspace workspace)
      : builder = ChangeBuilder(workspace: workspace);
}
