// 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/instrumentation/service.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 == CompileTimeErrorCode.CAST_TO_NON_TYPE ||
    errorCode == CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER ||
    errorCode == CompileTimeErrorCode.ILLEGAL_ASYNC_RETURN_TYPE ||
    errorCode == CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER ||
    errorCode == CompileTimeErrorCode.INVOCATION_OF_NON_FUNCTION ||
    errorCode == CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR ||
    errorCode ==
        CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE ||
    errorCode ==
        CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO ||
    errorCode ==
        CompileTimeErrorCode
            .NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE ||
    errorCode ==
        CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR ||
    errorCode ==
        CompileTimeErrorCode
            .NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS ||
    errorCode == CompileTimeErrorCode.NON_TYPE_AS_TYPE_ARGUMENT ||
    errorCode == CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME ||
    errorCode == CompileTimeErrorCode.FINAL_NOT_INITIALIZED ||
    errorCode == CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1 ||
    errorCode == CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2 ||
    errorCode ==
        CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS ||
    errorCode == CompileTimeErrorCode.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_CLASS_BOOLEAN ||
    errorCode ==
        CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT ||
    errorCode == CompileTimeErrorCode.UNDEFINED_FUNCTION ||
    errorCode == CompileTimeErrorCode.UNDEFINED_GETTER ||
    errorCode == CompileTimeErrorCode.UNDEFINED_METHOD ||
    errorCode == CompileTimeErrorCode.UNDEFINED_SETTER ||
    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 == 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_LINT =
      FixKind('analysisOptions.fix.removeLint', 50, "Remove '{0}'");
  static const REMOVE_SETTING =
      FixKind('analysisOptions.fix.removeSetting', 50, "Remove '{0}'");
}

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

  @override
  final ChangeWorkspace workspace;

  @override
  final ResolvedUnitResult resolveResult;

  @override
  final AnalysisError error;

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

  DartFixContextImpl(this.instrumentationService, 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_LATE =
      FixKind('dart.fix.add.late', 50, "Add 'late' modifier");
  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 positional 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_NULL_CHECK =
      FixKind('dart.fix.add.nullCheck', 50, 'Add a null check (!)');
  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_REQUIRED2 =
      FixKind('dart.fix.add.required', 50, "Add 'required' keyword");
  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_NULL_AWARE_SPREAD = FixKind(
      'dart.fix.convert.toNullAwareSpread', 50, "Convert to use '...?'");
  static const CONVERT_TO_ON_TYPE =
      FixKind('dart.fix.convert.toOnType', 50, "Convert to 'on {0}'");
  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 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 DATA_DRIVEN = FixKind('dart.fix.dataDriven', 50, '{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 MAKE_RETURN_TYPE_NULLABLE = FixKind(
      'dart.fix.makeReturnTypeNullable', 50, 'Make the return type nullable');
  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 MAKE_VARIABLE_NULLABLE =
      FixKind('dart.fix.makeVariableNullable', 50, "Make '{0}' nullable");
  static const ORGANIZE_IMPORTS =
      FixKind('dart.fix.organize.imports', 50, 'Organize Imports');
  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_COMPARISON =
      FixKind('dart.fix.remove.comparison', 50, 'Remove comparison');
  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_NON_NULL_ASSERTION =
      FixKind('dart.fix.remove.nonNullAssertion', 50, "Remove the '!'");
  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_UNNECESSARY_PARENTHESES = FixKind(
      'dart.fix.remove.unnecessaryParentheses',
      50,
      'Remove unnecessary parentheses',
      appliedTogetherMessage: 'Remove all unnecessary parentheses in file');
  static const REMOVE_UNNECESSARY_STRING_INTERPOLATION = FixKind(
      'dart.fix.remove.unnecessaryStringInterpolation',
      50,
      'Remove unnecessary string interpolation',
      appliedTogetherMessage:
          'Remove all unnecessary string interpolations in file');
  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 REMOVE_UNUSED_PARAMETER = FixKind(
      'dart.fix.remove.unusedParameter', 50, 'Remove the unused parameter');
  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_CASCADE_WITH_DOT =
      FixKind('dart.fix.replace.cascadeWithDot', 50, "Replace '..' with '.'");
  static const REPLACE_COLON_WITH_EQUALS =
      FixKind('dart.fix.replace.colonWithEquals', 50, "Replace ':' with '='");
  static const REPLACE_WITH_FILLED = FixKind(
      'dart.fix.replace.finalWithListFilled', 50, "Replace with 'List.filled'");
  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_NOT_NULL_AWARE =
      FixKind('dart.fix.replace.withNotNullAware', 50, "Replace with '{0}'");
  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 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 {}
