// Copyright (c) 2015, 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.

library dart2js.serialization.keys;

/// Keys used for serialization.
class Key {
  static const Key ALIAS = const Key('alias');
  static const Key ARGUMENTS = const Key('arguments');
  static const Key BOUND = const Key('bound');
  static const Key CACHED_TYPE = const Key('cachedType');
  static const Key CALL_STRUCTURE = const Key('callStructure');
  static const Key CALL_TYPE = const Key('callType');
  static const Key CANONICAL_URI = const Key('canonicalUri');
  static const Key CLASS = const Key('class');
  static const Key COMPILATION_UNIT = const Key('compilation-unit');
  static const Key COMPILATION_UNITS = const Key('compilation-units');
  static const Key CONDITION = const Key('condition');
  static const Key CONSTANT = const Key('constant');
  static const Key CONSTANTS = const Key('constants');
  static const Key CONSTRUCTOR = const Key('constructor');
  static const Key DATA = const Key('data');
  static const Key DEFAULT = const Key('default');
  static const Key DEFAULTS = const Key('defaults');
  static const Key DYNAMIC_USES = const Key('dynamic-uses');
  static const Key ELEMENT = const Key('element');
  static const Key ELEMENTS = const Key('elements');
  static const Key EXECUTABLE_CONTEXT = const Key('executable-context');
  static const Key EXPORTS = const Key('exports');
  static const Key EXPORT_SCOPE = const Key('export-scope');
  static const Key EXPRESSION = const Key('expression');
  static const Key FALSE = const Key('false');
  static const Key FEATURES = const Key('features');
  static const Key FIELD = const Key('field');
  static const Key FIELDS = const Key('fields');
  static const Key FUNCTION = const Key('function');
  static const Key GET_OR_SET = const Key('getOrSet');
  static const Key GETTER = const Key('getter');
  static const Key ID = const Key('id');
  static const Key IMPACTS = const Key('impacts');
  static const Key IMPORT = const Key('import');
  static const Key IMPORTS = const Key('imports');
  static const Key IMPORT_SCOPE = const Key('import-scope');
  static const Key INTERFACES = const Key('interfaces');
  static const Key INDEX = const Key('index');
  static const Key IS_ABSTRACT = const Key('isAbstract');
  static const Key IS_CONST = const Key('isConst');
  static const Key IS_DEFERRED = const Key('isDeferred');
  static const Key IS_EMPTY = const Key('isEmpty');
  static const Key IS_EXTERNAL = const Key('isExternal');
  static const Key IS_FINAL = const Key('isFinal');
  static const Key IS_NAMED = const Key('isNamed');
  static const Key IS_OPERATOR = const Key('isOperator');
  static const Key IS_OPTIONAL = const Key('isOptional');
  static const Key IS_PROXY = const Key('isProxy');
  static const Key IS_SETTER = const Key('isSetter');
  static const Key IS_UNNAMED_MIXIN_APPLICATION =
      const Key('isUnnamedMixinApplication');
  static const Key KEYS = const Key('keys');
  static const Key KIND = const Key('kind');
  static const Key LEFT = const Key('left');
  static const Key LENGTH = const Key('length');
  static const Key LIBRARY = const Key('library');
  static const Key LIBRARY_DEPENDENCY = const Key('library-dependency');
  static const Key LIBRARY_NAME = const Key('library-name');
  static const Key LISTS = const Key('lists');
  static const Key MAPS = const Key('maps');
  static const Key MEMBERS = const Key('members');
  static const Key MIXIN = const Key('mixin');
  static const Key MIXINS = const Key('mixins');
  static const Key NAME = const Key('name');
  static const Key NAMES = const Key('names');
  static const Key NAMED_ARGUMENTS = const Key('named-arguments');
  static const Key NAMED_PARAMETERS = const Key('named-parameters');
  static const Key NAMED_PARAMETER_TYPES = const Key('named-parameter-types');
  static const Key NEW_STRUCTURE = const Key('newStructure');
  static const Key OFFSET = const Key('offset');
  static const Key OPERATOR = const Key('operator');
  static const Key OPTIONAL_PARAMETER_TYPES =
      const Key('optional-parameter-types');
  static const Key PARAMETERS = const Key('parameters');
  static const Key PARAMETER_TYPES = const Key('parameter-types');
  static const Key PREFIX = const Key('prefix');
  static const Key RETURN_TYPE = const Key('return-type');
  static const Key RIGHT = const Key('right');
  static const Key SELECTOR = const Key('selector');
  static const Key SEMANTICS = const Key('semantics');
  static const Key SEND_STRUCTURE = const Key('sendStructure');
  static const Key SETTER = const Key('setter');
  static const Key STATIC_USES = const Key('static-uses');
  static const Key SUB_KIND = const Key('subKind');
  static const Key SUPERTYPE = const Key('supertype');
  static const Key SUPERTYPES = const Key('supertypes');
  static const Key SYMBOLS = const Key('symbols');
  static const Key TAGS = const Key('tags');
  static const Key TRUE = const Key('true');
  static const Key TYPE = const Key('type');
  static const Key TYPES = const Key('types');
  static const Key TYPE_ARGUMENTS = const Key('type-arguments');
  static const Key TYPE_DECLARATION = const Key('type-declaration');
  static const Key TYPE_USES = const Key('type-uses');
  static const Key TYPE_VARIABLES = const Key('type-variables');
  static const Key URI = const Key('uri');
  static const Key VALUE = const Key('value');
  static const Key VALUES = const Key('values');

  final String name;

  const Key(this.name);

  String toString() => name;
}
