// 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 'package:analysis_server/plugin/edit/fix/fix_dart.dart';
import 'package:analysis_server/src/services/correction/fix/dart/top_level_declarations.dart';
import 'package:analysis_server/src/services/linter/lint_names.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/generated/parser.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';

/// Return true if this [errorCode] is likely to have a fix associated with it.
bool hasFix(ErrorCode errorCode) =>
    errorCode == StaticWarningCode.UNDEFINED_CLASS_BOOLEAN ||
    errorCode == StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER ||
    errorCode == StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR ||
    errorCode ==
        StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE ||
    errorCode ==
        StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO ||
    errorCode ==
        StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE ||
    errorCode ==
        StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR ||
    errorCode ==
        StaticWarningCode
            .NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS ||
    errorCode == StaticWarningCode.CAST_TO_NON_TYPE ||
    errorCode == StaticWarningCode.TYPE_TEST_WITH_UNDEFINED_NAME ||
    errorCode == StaticWarningCode.FINAL_NOT_INITIALIZED ||
    errorCode == StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1 ||
    errorCode == StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2 ||
    errorCode == StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS ||
    errorCode == StaticWarningCode.UNDEFINED_IDENTIFIER ||
    errorCode ==
        CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE ||
    errorCode == CompileTimeErrorCode.INTEGER_LITERAL_IMPRECISE_AS_DOUBLE ||
    errorCode == CompileTimeErrorCode.INVALID_ANNOTATION ||
    errorCode == CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT ||
    errorCode == CompileTimeErrorCode.PART_OF_NON_PART ||
    errorCode == CompileTimeErrorCode.UNDEFINED_ANNOTATION ||
    errorCode ==
        CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT ||
    errorCode == CompileTimeErrorCode.URI_DOES_NOT_EXIST ||
    errorCode == CompileTimeErrorCode.URI_HAS_NOT_BEEN_GENERATED ||
    errorCode == HintCode.CAN_BE_NULL_AFTER_NULL_AWARE ||
    errorCode == HintCode.DEAD_CODE ||
    errorCode == HintCode.DIVISION_OPTIMIZATION ||
    errorCode == HintCode.TYPE_CHECK_IS_NOT_NULL ||
    errorCode == HintCode.TYPE_CHECK_IS_NULL ||
    errorCode == HintCode.UNNECESSARY_CAST ||
    errorCode == HintCode.UNUSED_CATCH_CLAUSE ||
    errorCode == HintCode.UNUSED_CATCH_STACK ||
    errorCode == HintCode.UNUSED_IMPORT ||
    errorCode == ParserErrorCode.EXPECTED_TOKEN ||
    errorCode == ParserErrorCode.GETTER_WITH_PARAMETERS ||
    errorCode == ParserErrorCode.VAR_AS_TYPE_NAME ||
    errorCode == StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE ||
    errorCode == StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER ||
    errorCode == StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION ||
    errorCode == StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT ||
    errorCode == StaticTypeWarningCode.UNDEFINED_FUNCTION ||
    errorCode == StaticTypeWarningCode.UNDEFINED_GETTER ||
    errorCode == StaticTypeWarningCode.UNDEFINED_METHOD ||
    errorCode == StaticTypeWarningCode.UNDEFINED_SETTER ||
    errorCode == CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER ||
    (errorCode is LintCode &&
        (errorCode.name == LintNames.always_require_non_null_named_parameters ||
            errorCode.name == LintNames.annotate_overrides ||
            errorCode.name == LintNames.avoid_annotating_with_dynamic ||
            errorCode.name == LintNames.avoid_empty_else ||
            errorCode.name == LintNames.avoid_init_to_null ||
            errorCode.name == LintNames.avoid_redundant_argument_values ||
            errorCode.name == LintNames.avoid_return_types_on_setters ||
            errorCode.name == LintNames.avoid_types_on_closure_parameters ||
            errorCode.name == LintNames.await_only_futures ||
            errorCode.name == LintNames.empty_catches ||
            errorCode.name == LintNames.empty_constructor_bodies ||
            errorCode.name == LintNames.empty_statements ||
            errorCode.name == LintNames.no_duplicate_case_values ||
            errorCode.name == LintNames.non_constant_identifier_names ||
            errorCode.name == LintNames.null_closures ||
            errorCode.name == LintNames.prefer_collection_literals ||
            errorCode.name == LintNames.prefer_conditional_assignment ||
            errorCode.name == LintNames.prefer_const_constructors ||
            errorCode.name ==
                LintNames.prefer_const_constructors_in_immutables ||
            errorCode.name == LintNames.prefer_const_declarations ||
            errorCode.name == LintNames.prefer_equal_for_default_values ||
            errorCode.name == LintNames.prefer_final_fields ||
            errorCode.name == LintNames.prefer_final_locals ||
            errorCode.name == LintNames.prefer_is_not_empty ||
            errorCode.name == LintNames.type_init_formals ||
            errorCode.name == LintNames.unawaited_futures ||
            errorCode.name == LintNames.unnecessary_brace_in_string_interps ||
            errorCode.name == LintNames.unnecessary_const ||
            errorCode.name == LintNames.unnecessary_lambdas ||
            errorCode.name == LintNames.unnecessary_new ||
            errorCode.name == LintNames.unnecessary_overrides ||
            errorCode.name == LintNames.unnecessary_this ||
            errorCode.name == LintNames.use_rethrow_when_possible));

/// An enumeration of quick fix kinds for the errors found in an analysis
/// options file.
class AnalysisOptionsFixKind {
  static const REMOVE_SETTING =
      FixKind('analysisOptions.fix.removeSetting', 50, "Remove '{0}'");
}

/// The implementation of [DartFixContext].
class DartFixContextImpl implements DartFixContext {
  @override
  final ChangeWorkspace workspace;

  @override
  final ResolvedUnitResult resolveResult;

  @override
  final AnalysisError error;

  final List<TopLevelDeclaration> Function(String name)
      getTopLevelDeclarationsFunction;

  DartFixContextImpl(this.workspace, this.resolveResult, this.error,
      this.getTopLevelDeclarationsFunction);

  @override
  List<TopLevelDeclaration> getTopLevelDeclarations(String name) {
    return getTopLevelDeclarationsFunction(name);
  }
}

/// An enumeration of quick fix kinds found in a Dart file.
class DartFixKind {
  static const ADD_ASYNC =
      FixKind('dart.fix.add.async', 50, "Add 'async' modifier");
  static const ADD_AWAIT =
      FixKind('dart.fix.add.await', 50, "Add 'await' keyword");
  static const ADD_EXPLICIT_CAST = FixKind(
      'dart.fix.add.explicitCast', 50, 'Add cast',
      appliedTogetherMessage: 'Add all casts in file');
  static const ADD_CONST =
      FixKind('dart.fix.add.const', 50, "Add 'const' modifier");
  static const ADD_CURLY_BRACES =
      FixKind('dart.fix.add.curlyBraces', 50, 'Add curly braces');
  static const ADD_DIAGNOSTIC_PROPERTY_REFERENCE = FixKind(
      'dart.fix.add.diagnosticPropertyReference',
      50,
      'Add a debug reference to this property');
  static const ADD_FIELD_FORMAL_PARAMETERS = FixKind(
      'dart.fix.add.fieldFormalParameters',
      70,
      'Add final field formal parameters');
  static const ADD_MISSING_ENUM_CASE_CLAUSES = FixKind(
      'dart.fix.add.missingEnumCaseClauses', 50, 'Add missing case clauses');
  static const ADD_MISSING_PARAMETER_NAMED = FixKind(
      'dart.fix.add.missingParameterNamed', 70, "Add named parameter '{0}'");
  static const ADD_MISSING_PARAMETER_POSITIONAL = FixKind(
      'dart.fix.add.missingParameterPositional',
      69,
      'Add optional positional parameter');
  static const ADD_MISSING_PARAMETER_REQUIRED = FixKind(
      'dart.fix.add.missingParameterRequired', 70, 'Add required parameter');
  static const ADD_MISSING_REQUIRED_ARGUMENT = FixKind(
      'dart.fix.add.missingRequiredArgument',
      70,
      "Add required argument '{0}'");
  static const ADD_NE_NULL = FixKind('dart.fix.add.neNull', 50, 'Add != null',
      appliedTogetherMessage: 'Add != null everywhere in file');
  static const ADD_OVERRIDE =
      FixKind('dart.fix.add.override', 50, "Add '@override' annotation");
  static const ADD_REQUIRED =
      FixKind('dart.fix.add.required', 50, "Add '@required' annotation");
  static const ADD_RETURN_TYPE =
      FixKind('dart.fix.add.returnType', 50, 'Add return type');
  static const ADD_STATIC =
      FixKind('dart.fix.add.static', 50, "Add 'static' modifier");
  static const ADD_SUPER_CONSTRUCTOR_INVOCATION = FixKind(
      'dart.fix.add.superConstructorInvocation',
      50,
      'Add super constructor {0} invocation');
  static const ADD_TYPE_ANNOTATION =
      FixKind('dart.fix.add.typeAnnotation', 50, 'Add type annotation');
  static const CHANGE_ARGUMENT_NAME =
      FixKind('dart.fix.change.argumentName', 60, "Change to '{0}'");
  static const CHANGE_TO = FixKind('dart.fix.change.to', 51, "Change to '{0}'");
  static const CHANGE_TO_NEAREST_PRECISE_VALUE = FixKind(
      'dart.fix.change.toNearestPreciseValue',
      50,
      'Change to nearest precise int-as-double value: {0}');
  static const CHANGE_TO_STATIC_ACCESS = FixKind(
      'dart.fix.change.toStaticAccess',
      50,
      "Change access to static using '{0}'");
  static const CHANGE_TYPE_ANNOTATION = FixKind(
      'dart.fix.change.typeAnnotation',
      50,
      "Change '{0}' to '{1}' type annotation");
  static const CONVERT_FLUTTER_CHILD = FixKind(
      'dart.fix.flutter.convert.childToChildren', 50, 'Convert to children:');
  static const CONVERT_FLUTTER_CHILDREN = FixKind(
      'dart.fix.flutter.convert.childrenToChild', 50, 'Convert to child:');
  static const CONVERT_INTO_EXPRESSION_BODY = FixKind(
      'dart.fix.convert.toExpressionBody', 50, 'Convert to expression body');
  static const CONVERT_TO_CONTAINS =
      FixKind('dart.fix.convert.toContains', 50, "Convert to using 'contains'");
  static const CONVERT_TO_FOR_ELEMENT = FixKind(
      'dart.fix.convert.toForElement', 50, "Convert to a 'for' element");
  static const CONVERT_TO_GENERIC_FUNCTION_SYNTAX = FixKind(
      'dart.fix.convert.toGenericFunctionSyntax',
      50,
      "Convert into 'Function' syntax");
  static const CONVERT_TO_IF_ELEMENT =
      FixKind('dart.fix.convert.toIfElement', 50, "Convert to an 'if' element");
  static const CONVERT_TO_IF_NULL =
      FixKind('dart.fix.convert.toIfNull', 50, "Convert to use '??'");
  static const CONVERT_TO_INT_LITERAL =
      FixKind('dart.fix.convert.toIntLiteral', 50, 'Convert to an int literal');
  static const CONVERT_TO_LINE_COMMENT = FixKind(
      'dart.fix.convert.toLineComment',
      50,
      'Convert to line documentation comment');
  static const CONVERT_TO_LIST_LITERAL =
      FixKind('dart.fix.convert.toListLiteral', 50, 'Convert to list literal');
  static const CONVERT_TO_MAP_LITERAL =
      FixKind('dart.fix.convert.toMapLiteral', 50, 'Convert to map literal');
  static const CONVERT_TO_NAMED_ARGUMENTS = FixKind(
      'dart.fix.convert.toNamedArguments', 50, 'Convert to named arguments');
  static const CONVERT_TO_NULL_AWARE =
      FixKind('dart.fix.convert.toNullAware', 50, "Convert to use '?.'");
  static const CONVERT_TO_PACKAGE_IMPORT = FixKind(
      'dart.fix.convert.toPackageImport', 50, "Convert to 'package:' import");
  static const CONVERT_TO_RELATIVE_IMPORT = FixKind(
      'dart.fix.convert.toRelativeImport', 50, 'Convert to relative import');
  static const CONVERT_TO_SET_LITERAL =
      FixKind('dart.fix.convert.toSetLiteral', 50, 'Convert to set literal');
  static const CONVERT_TO_SINGLE_QUOTED_STRING = FixKind(
      'dart.fix.convert.toSingleQuotedString',
      50,
      'Convert to single quoted string');
  static const CONVERT_TO_SPREAD =
      FixKind('dart.fix.convert.toSpread', 50, 'Convert to a spread');
  static const CONVERT_TO_WHERE_TYPE = FixKind(
      'dart.fix.convert.toWhereType', 50, "Convert to a use 'whereType'");
  static const CREATE_CLASS =
      FixKind('dart.fix.create.class', 50, "Create class '{0}'");
  static const CREATE_CONSTRUCTOR =
      FixKind('dart.fix.create.constructor', 50, "Create constructor '{0}'");
  static const CREATE_CONSTRUCTOR_FOR_FINAL_FIELDS = FixKind(
      'dart.fix.create.constructorForFinalFields',
      50,
      'Create constructor for final fields');
  static const CREATE_CONSTRUCTOR_SUPER = FixKind(
      'dart.fix.create.constructorSuper', 50, 'Create constructor to call {0}');
  static const CREATE_FIELD =
      FixKind('dart.fix.create.field', 49, "Create field '{0}'");
  static const CREATE_FILE =
      FixKind('dart.fix.create.file', 50, "Create file '{0}'");
  static const CREATE_FUNCTION =
      FixKind('dart.fix.create.function', 49, "Create function '{0}'");
  static const CREATE_GETTER =
      FixKind('dart.fix.create.getter', 50, "Create getter '{0}'");
  static const CREATE_LOCAL_VARIABLE = FixKind(
      'dart.fix.create.localVariable', 50, "Create local variable '{0}'");
  static const CREATE_METHOD =
      FixKind('dart.fix.create.method', 50, "Create method '{0}'");
  static const CREATE_MISSING_OVERRIDES = FixKind(
      'dart.fix.create.missingOverrides', 51, 'Create {0} missing override(s)');
  static const CREATE_MIXIN =
      FixKind('dart.fix.create.mixin', 50, "Create mixin '{0}'");
  static const CREATE_NO_SUCH_METHOD = FixKind(
      'dart.fix.create.noSuchMethod', 49, "Create 'noSuchMethod' method");
  static const CREATE_SETTER =
      FixKind('dart.fix.create.setter', 50, "Create setter '{0}'");
  static const EXTEND_CLASS_FOR_MIXIN =
      FixKind('dart.fix.extendClassForMixin', 50, "Extend the class '{0}'");
  static const IMPORT_ASYNC =
      FixKind('dart.fix.import.async', 49, "Import 'dart:async'");
  static const IMPORT_LIBRARY_PREFIX = FixKind('dart.fix.import.libraryPrefix',
      49, "Use imported library '{0}' with prefix '{1}'");
  static const IMPORT_LIBRARY_PROJECT1 =
      FixKind('dart.fix.import.libraryProject1', 53, "Import library '{0}'");
  static const IMPORT_LIBRARY_PROJECT2 =
      FixKind('dart.fix.import.libraryProject2', 52, "Import library '{0}'");
  static const IMPORT_LIBRARY_PROJECT3 =
      FixKind('dart.fix.import.libraryProject3', 51, "Import library '{0}'");
  static const IMPORT_LIBRARY_SDK =
      FixKind('dart.fix.import.librarySdk', 54, "Import library '{0}'");
  static const IMPORT_LIBRARY_SHOW =
      FixKind('dart.fix.import.libraryShow', 55, "Update library '{0}' import");
  static const INLINE_INVOCATION =
      FixKind('dart.fix.inlineInvocation', 30, "Inline invocation of '{0}'");
  static const INLINE_TYPEDEF =
      FixKind('dart.fix.inlineTypedef', 30, "Inline the definition of '{0}'");
  static const INSERT_SEMICOLON =
      FixKind('dart.fix.insertSemicolon', 50, "Insert ';'");
  static const MAKE_CLASS_ABSTRACT =
      FixKind('dart.fix.makeClassAbstract', 50, "Make class '{0}' abstract");
  static const MAKE_FIELD_NOT_FINAL =
      FixKind('dart.fix.makeFieldNotFinal', 50, "Make field '{0}' not final");
  static const MAKE_FINAL = FixKind('dart.fix.makeFinal', 50, 'Make final');
  static const MOVE_TYPE_ARGUMENTS_TO_CLASS = FixKind(
      'dart.fix.moveTypeArgumentsToClass',
      50,
      'Move type arguments to after class name');
  static const MAKE_VARIABLE_NOT_FINAL = FixKind(
      'dart.fix.makeVariableNotFinal', 50, "Make variable '{0}' not final");
  static const QUALIFY_REFERENCE =
      FixKind('dart.fix.qualifyReference', 50, "Use '{0}'");
  static const REMOVE_ANNOTATION =
      FixKind('dart.fix.remove.annotation', 50, "Remove the '{0}' annotation");
  static const REMOVE_ARGUMENT =
      FixKind('dart.fix.remove.argument', 50, 'Remove argument');
  static const REMOVE_AWAIT =
      FixKind('dart.fix.remove.await', 50, 'Remove await');
  static const REMOVE_CONST =
      FixKind('dart.fix.remove.const', 50, 'Remove const');
  static const REMOVE_DEAD_CODE =
      FixKind('dart.fix.remove.deadCode', 50, 'Remove dead code');
  static const REMOVE_DUPLICATE_CASE = FixKind(
      'dart.fix.remove.duplicateCase', 50, 'Remove duplicate case statement');
  static const REMOVE_EMPTY_CATCH =
      FixKind('dart.fix.remove.emptyCatch', 50, 'Remove empty catch clause');
  static const REMOVE_EMPTY_CONSTRUCTOR_BODY = FixKind(
      'dart.fix.remove.emptyConstructorBody',
      50,
      'Remove empty constructor body');
  static const REMOVE_EMPTY_ELSE =
      FixKind('dart.fix.remove.emptyElse', 50, 'Remove empty else clause');
  static const REMOVE_EMPTY_STATEMENT =
      FixKind('dart.fix.remove.emptyStatement', 50, 'Remove empty statement');
  static const REMOVE_IF_NULL_OPERATOR =
      FixKind('dart.fix.remove.ifNullOperator', 50, "Remove the '??' operator");
  static const REMOVE_INITIALIZER =
      FixKind('dart.fix.remove.initializer', 50, 'Remove initializer');
  static const REMOVE_INTERPOLATION_BRACES = FixKind(
      'dart.fix.remove.interpolationBraces',
      50,
      'Remove unnecessary interpolation braces');
  static const REMOVE_METHOD_DECLARATION = FixKind(
      'dart.fix.remove.methodDeclaration', 50, 'Remove method declaration');
  static const REMOVE_NAME_FROM_COMBINATOR = FixKind(
      'dart.fix.remove.nameFromCombinator', 50, "Remove name from '{0}'");
  static const REMOVE_OPERATOR =
      FixKind('dart.fix.remove.operator', 50, 'Remove the operator');
  static const REMOVE_PARAMETERS_IN_GETTER_DECLARATION = FixKind(
      'dart.fix.remove.parametersInGetterDeclaration',
      50,
      'Remove parameters in getter declaration');
  static const REMOVE_PARENTHESIS_IN_GETTER_INVOCATION = FixKind(
      'dart.fix.remove.parenthesisInGetterInvocation',
      50,
      'Remove parentheses in getter invocation');
  static const REMOVE_QUESTION_MARK =
      FixKind('dart.fix.remove.questionMark', 50, "Remove the '?'");
  static const REMOVE_THIS_EXPRESSION =
      FixKind('dart.fix.remove.thisExpression', 50, 'Remove this expression');
  static const REMOVE_TYPE_ANNOTATION =
      FixKind('dart.fix.remove.typeAnnotation', 50, 'Remove type annotation');
  static const REMOVE_TYPE_ARGUMENTS =
      FixKind('dart.fix.remove.typeArguments', 49, 'Remove type arguments');
  static const REMOVE_UNNECESSARY_CAST = FixKind(
      'dart.fix.remove.unnecessaryCast', 50, 'Remove unnecessary cast',
      appliedTogetherMessage: 'Remove all unnecessary casts in file');
  static const REMOVE_UNNECESSARY_CONST = FixKind(
      'dart.fix.remove.unnecessaryConst',
      50,
      'Remove unnecessary const keyword');
  static const REMOVE_UNNECESSARY_NEW = FixKind(
      'dart.fix.remove.unnecessaryNew', 50, 'Remove unnecessary new keyword');
  static const REMOVE_UNUSED_CATCH_CLAUSE = FixKind(
      'dart.fix.remove.unusedCatchClause', 50, "Remove unused 'catch' clause");
  static const REMOVE_UNUSED_CATCH_STACK = FixKind(
      'dart.fix.remove.unusedCatchStack',
      50,
      'Remove unused stack trace variable');
  static const REMOVE_UNUSED_ELEMENT =
      FixKind('dart.fix.remove.unusedElement', 50, 'Remove unused element');
  static const REMOVE_UNUSED_FIELD =
      FixKind('dart.fix.remove.unusedField', 50, 'Remove unused field');
  static const REMOVE_UNUSED_IMPORT = FixKind(
      'dart.fix.remove.unusedImport', 50, 'Remove unused import',
      appliedTogetherMessage: 'Remove all unused imports in this file');
  static const REMOVE_UNUSED_LABEL =
      FixKind('dart.fix.remove.unusedLabel', 50, 'Remove unused label');
  static const REMOVE_UNUSED_LOCAL_VARIABLE = FixKind(
      'dart.fix.remove.unusedLocalVariable',
      50,
      'Remove unused local variable');
  static const RENAME_TO_CAMEL_CASE =
      FixKind('dart.fix.rename.toCamelCase', 50, "Rename to '{0}'");
  static const REPLACE_BOOLEAN_WITH_BOOL = FixKind(
      'dart.fix.replace.booleanWithBool', 50, "Replace 'boolean' with 'bool'",
      appliedTogetherMessage: "Replace all 'boolean' with 'bool' in file");
  static const REPLACE_COLON_WITH_EQUALS =
      FixKind('dart.fix.replace.colonWithEquals', 50, "Replace ':' with '='");
  static const REPLACE_FINAL_WITH_CONST = FixKind(
      'dart.fix.replace.finalWithConst', 50, "Replace 'final' with 'const'");
  static const REPLACE_NEW_WITH_CONST = FixKind(
      'dart.fix.replace.newWithConst', 50, "Replace 'new' with 'const'");
  static const REPLACE_NULL_WITH_CLOSURE = FixKind(
      'dart.fix.replace.nullWithClosure', 50, "Replace 'null' with a closure");
  static const REPLACE_RETURN_TYPE_FUTURE = FixKind(
      'dart.fix.replace.returnTypeFuture',
      50,
      "Return 'Future' from 'async' function");
  static const REPLACE_VAR_WITH_DYNAMIC = FixKind(
      'dart.fix.replace.varWithDynamic', 50, "Replace 'var' with 'dynamic'");
  static const REPLACE_WITH_EIGHT_DIGIT_HEX =
      FixKind('dart.fix.replace.withEightDigitHex', 50, "Replace with '{0}'");
  static const REPLACE_WITH_BRACKETS =
      FixKind('dart.fix.replace.withBrackets', 50, 'Replace with { }');
  static const REPLACE_WITH_CONDITIONAL_ASSIGNMENT = FixKind(
      'dart.fix.replace.withConditionalAssignment', 50, 'Replace with ??=');
  static const REPLACE_WITH_EXTENSION_NAME =
      FixKind('dart.fix.replace.withExtensionName', 50, "Replace with '{0}'");
  static const REPLACE_WITH_IDENTIFIER =
      FixKind('dart.fix.replace.withIdentifier', 50, 'Replace with identifier');
  static const REPLACE_WITH_INTERPOLATION = FixKind(
      'dart.fix.replace.withInterpolation', 50, 'Replace with interpolation');
  static const REPLACE_WITH_IS_EMPTY =
      FixKind('dart.fix.replace.withIsEmpty', 50, "Replace with 'isEmpty'");
  static const REPLACE_WITH_IS_NOT_EMPTY = FixKind(
      'dart.fix.replace.withIsNotEmpty', 50, "Replace with 'isNotEmpty'");
  static const REPLACE_WITH_NULL_AWARE = FixKind(
      'dart.fix.replace.withNullAware',
      50,
      "Replace the '.' with a '?.' in the invocation");
  static const REPLACE_WITH_TEAR_OFF = FixKind('dart.fix.replace.withTearOff',
      50, 'Replace function literal with tear-off');
  static const REPLACE_WITH_VAR = FixKind(
      'dart.fix.replace.withVar', 50, "Replace type annotation with 'var'");
  static const SORT_CHILD_PROPERTY_LAST = FixKind(
      'dart.fix.sort.childPropertyLast',
      50,
      'Move child property to end of arguments');
  static const SORT_DIRECTIVES =
      FixKind('dart.fix.sort.directives', 50, 'Sort directives');
  static const UPDATE_SDK_CONSTRAINTS = FixKind(
      'dart.fix.updateSdkConstraints', 50, 'Update the SDK constraints');
  static const USE_CONST =
      FixKind('dart.fix.use.const', 50, 'Change to constant');
  static const USE_EFFECTIVE_INTEGER_DIVISION = FixKind(
      'dart.fix.use.effectiveIntegerDivision',
      50,
      'Use effective integer division ~/');
  static const USE_EQ_EQ_NULL = FixKind(
      'dart.fix.use.eqEqNull', 50, "Use == null instead of 'is Null'",
      appliedTogetherMessage:
          "Use == null instead of 'is Null' everywhere in file");
  static const USE_IS_NOT_EMPTY = FixKind('dart.fix.use.isNotEmpty', 50,
      "Use x.isNotEmpty instead of '!x.isEmpty'");
  static const USE_NOT_EQ_NULL = FixKind(
      'dart.fix.use.notEqNull', 50, "Use != null instead of 'is! Null'",
      appliedTogetherMessage:
          "Use != null instead of 'is! Null' everywhere in file");
  static const USE_RETHROW =
      FixKind('dart.fix.use.rethrow', 50, 'Replace throw with rethrow');
  static const WRAP_IN_FUTURE =
      FixKind('dart.fix.wrap.future', 50, "Wrap in 'Future.value'");
  static const WRAP_IN_TEXT =
      FixKind('dart.fix.flutter.wrap.text', 50, "Wrap in a 'Text' widget");
}

/// An enumeration of quick fix kinds for the errors found in an Android
/// manifest file.
class ManifestFixKind {}

/// An enumeration of quick fix kinds for the errors found in a pubspec file.
class PubspecFixKind {}
