/*
 * Copyright (c) 2014, the Dart project authors.
 *
 * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 *
 * This file has been automatically generated.  Please do not edit it manually.
 * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
 */
package org.dartlang.analysis.server.protocol;

/**
 * An enumeration of the kinds of highlighting that can be applied to files.
 *
 * @coverage dart.server.generated.types
 */
public class HighlightRegionType {

  public static final String ANNOTATION = "ANNOTATION";

  public static final String BUILT_IN = "BUILT_IN";

  public static final String CLASS = "CLASS";

  public static final String COMMENT_BLOCK = "COMMENT_BLOCK";

  public static final String COMMENT_DOCUMENTATION = "COMMENT_DOCUMENTATION";

  public static final String COMMENT_END_OF_LINE = "COMMENT_END_OF_LINE";

  public static final String CONSTRUCTOR = "CONSTRUCTOR";

  public static final String DIRECTIVE = "DIRECTIVE";

  public static final String DYNAMIC_TYPE = "DYNAMIC_TYPE";

  public static final String ENUM = "ENUM";

  public static final String ENUM_CONSTANT = "ENUM_CONSTANT";

  public static final String FIELD = "FIELD";

  public static final String FIELD_STATIC = "FIELD_STATIC";

  public static final String FUNCTION = "FUNCTION";

  public static final String FUNCTION_DECLARATION = "FUNCTION_DECLARATION";

  public static final String FUNCTION_TYPE_ALIAS = "FUNCTION_TYPE_ALIAS";

  public static final String GETTER_DECLARATION = "GETTER_DECLARATION";

  public static final String IDENTIFIER_DEFAULT = "IDENTIFIER_DEFAULT";

  public static final String IMPORT_PREFIX = "IMPORT_PREFIX";

  public static final String KEYWORD = "KEYWORD";

  public static final String LABEL = "LABEL";

  public static final String LITERAL_BOOLEAN = "LITERAL_BOOLEAN";

  public static final String LITERAL_DOUBLE = "LITERAL_DOUBLE";

  public static final String LITERAL_INTEGER = "LITERAL_INTEGER";

  public static final String LITERAL_LIST = "LITERAL_LIST";

  public static final String LITERAL_MAP = "LITERAL_MAP";

  public static final String LITERAL_STRING = "LITERAL_STRING";

  public static final String LOCAL_VARIABLE = "LOCAL_VARIABLE";

  public static final String LOCAL_VARIABLE_DECLARATION = "LOCAL_VARIABLE_DECLARATION";

  public static final String METHOD = "METHOD";

  public static final String METHOD_DECLARATION = "METHOD_DECLARATION";

  public static final String METHOD_DECLARATION_STATIC = "METHOD_DECLARATION_STATIC";

  public static final String METHOD_STATIC = "METHOD_STATIC";

  public static final String PARAMETER = "PARAMETER";

  public static final String SETTER_DECLARATION = "SETTER_DECLARATION";

  public static final String TOP_LEVEL_VARIABLE = "TOP_LEVEL_VARIABLE";

  public static final String TYPE_NAME_DYNAMIC = "TYPE_NAME_DYNAMIC";

  public static final String TYPE_PARAMETER = "TYPE_PARAMETER";

}
