blob: aa904a6c25509827509d1a9866b7dbbcd1c70b04 [file] [log] [blame]
// Copyright (c) 2012, 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.
package com.google.dart.compiler.parser;
import com.google.dart.compiler.ErrorCode;
import com.google.dart.compiler.ErrorSeverity;
import com.google.dart.compiler.SubSystem;
/**
* {@link ErrorCode}s for parser.
* <p>
* The convention in this file (with some exceptions) is that the enumeration name matches at least
* the beginning default English translation of the message.
*/
public enum ParserErrorCode implements ErrorCode {
ABSTRACT_MEMBER_IN_INTERFACE("Abstract members are not allowed in interfaces"),
ABSTRACT_METHOD_WITH_BODY("Abstract method cannot have a body"),
ABSTRACT_TOP_LEVEL_ELEMENT("Only class can be abstract top-level element"),
BREAK_OUTSIDE_OF_LOOP("'break' used outside of loop, case statement"),
BUILT_IN_IDENTIFIER_AS_TYPE_NAME("Built-in identifier cannot be used as type name"),
BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME("Built-in identifier can not be used as type alias name"),
BUILT_IN_IDENTIFIER_AS_TYPE_VARIABLE_NAME("Built-in identifier can not be used as type variable name"),
CANNOT_MIX_OPTIONAL_AND_NAMED_PARAMETERS("Cannot mix both optional and named parameters in the same function"),
CATCH_OR_FINALLY_EXPECTED("catch or finally clause expected."),
CONTINUE_IN_CASE_MUST_HAVE_LABEL("'continue' in case statement must have a label as a target."),
CONTINUE_OUTSIDE_OF_LOOP("'continue' used outside of loop or case statement"),
DEFAULT_VALUE_CAN_NOT_BE_SPECIFIED_IN_CLOSURE(
"Default values cannot be specified in closure parameter"),
DEFAULT_VALUE_CAN_NOT_BE_SPECIFIED_IN_TYPEDEF(
"Default values cannot be specified in closure type definition"),
DEFAULT_POSITIONAL_PARAMETER("Positional parameters cannot have default values"),
DEPRECATED_CATCH("This style of catch clause has been deprecated. Please use the 'on' <type> " +
"'catch' '(' <identifier> (',' <identifier>)? ')' form."),
DEPRECATED_ABSTRACT_METHOD(ErrorSeverity.WARNING, "Modifier 'abstract' is deprecated for methods without body. Remove it."),
DEPRECATED_GETTER("The presence of parentheses after the name of the getter "
+ "has been deprecated and will soon be disallowed. Please remove the parentheses."),
DEPRECATED_INTERFACE("Deprecated declaration of the 'interface', use abstract 'class' instead"),
DEPRECATED_USE_OF_FACTORY_KEYWORD("Deprecated use of the 'factory' keyword: use 'default' instead"),
DEPRECATED_RAW_STRING("The use of '@' to prefix a raw string has been deprecated; use 'r' instead"),
DEPRECATED_RESOURCE_DIRECTIVE("The #resource directive has been deprecated and will soon be disallowed"),
DEPRECATED_LIBRARY_DIRECTIVE("The '#library(url)' directive has been deprecated, use 'library name' instead"),
DEPRECATED_IMPORT_DIRECTIVE("The '#import(url)' directive has been deprecated, use 'import url' instead"),
DEPRECATED_SOURCE_DIRECTIVE("The '#source(url)' directive has been deprecated, use 'part url' instead"),
DIRECTIVE_OUT_OF_ORDER("Directive out of order"),
DISALLOWED_ABSTRACT_KEYWORD("Abstract keyword not allowed here"),
// TODO(zundel): error message needs JUnit test (unreachable code?)
DISALLOWED_FACTORY_KEYWORD("Factory keyword not allowed here"),
DISALLOWED_STATIC_KEYWORD("Static keyword not allowed here"),
ESCAPED_NEWLINE("Escaped new-line characters are not allowed in string literals"),
EXPECTED_ARRAY_OR_MAP_LITERAL("Expected array or map literal"),
// TODO(zundel): error message needs JUnit test (unreachable code?)
EXPECTED_CASE_OR_DEFAULT("Expected 'case' or 'default'"),
EXPECTED_CLASS_DECLARATION_LBRACE("Expected '{' in class or interface declaration"),
// TODO(zundel): error message needs JUnit test
EXPECTED_COMMA_OR_RIGHT_BRACE("Expected ',' or '}'"),
EXPECTED_COMMA_OR_RIGHT_PAREN("Expected ',' or ')', but got '%s'"),
// TODO(zundel): error message needs JUnit test
EXPECTED_EOS("Unexpected token '%s' (expected end of file)"),
EXPECTED_EXPORT("Expected 'export'"),
// TODO(zundel): error message needs JUnit test
EXPECTED_EXPRESSION_AFTER_COMMA("Expected expression after comma"),
EXPECTED_EXTENDS("Expected 'extends'"),
EXPECTED_FUNCTION_STATEMENT_BODY("Expected function statement body"),
// TODO(zundel): error message needs JUnit test
EXPECTED_IDENTIFIER("Expected identifier"),
// TODO(zundel): error message needs JUnit test
EXPECTED_LEFT_PAREN("'(' expected"),
EXPECTED_PREFIX_KEYWORD("Expected 'prefix' after comma"),
EXPECTED_PREFIX_IDENTIFIER("Prefix string can only contain valid identifier characters"),
// TODO(zundel): error message needs JUnit test
EXPECTED_SEMICOLON("Expected ';'"),
// TODO(zundel): error message needs JUnit test
EXPECTED_STRING_LITERAL("Expected string literal"),
// TODO(zundel): error message needs JUnit test (unreachable code?)
EXPECTED_STRING_LITERAL_MAP_ENTRY_KEY("Expected string literal for map entry key"),
EXPECTED_TOKEN("Unexpected token '%s' (expected '%s')"),
// TODO(zundel): error message needs JUnit test
EXPECTED_VAR_FINAL_OR_TYPE("Expected 'var', 'final' or type"),
EXTERNAL_ABSTRACT("External methods cannot be abstract"),
EXTERNAL_ONLY_METHOD("Only a top-level function, a method, a getter, a setter or an non-redirecting constructor can be specified as external"),
EXTERNAL_METHOD_BODY("External methods cannot have body"),
INVALID_SEPARATOR_FOR_NAMED("Use ':' between a named parameter and its value"),
INVALID_SEPARATOR_FOR_OPTIONAL("Use '=' between an optional parameter and its value"),
// TODO(zundel): this error message is out of date
NATIVE_ONLY_CLASS("Native keyword can be specified only for classes"),
NATIVE_ONLY_CORE_LIB("Native keyword can be used only in corelib"),
FACTORY_CANNOT_BE_ABSTRACT("A factory cannot be abstract"),
FACTORY_CANNOT_BE_STATIC("A factory cannot be static"),
FACTORY_CANNOT_BE_TOP_LEVEL("A factory cannot be top level, it must be a member of a class"),
FACTORY_MEMBER_IN_INTERFACE("Factory members are not allowed in interfaces"),
FINAL_IS_NOT_ALLOWED_ON_A_METHOD_DEFINITION("'final' is not allowed on a method definition"),
FOR_IN_WITH_COMPLEX_VARIABLE("Only simple variables can be assigned to in a for-in construct"),
FOR_IN_WITH_MULTIPLE_VARIABLES("Too many variable declarations in a for-in construct"),
FOR_IN_WITH_VARIABLE_INITIALIZER("Cannot initialize for-in variables"),
FORMAL_PARAMETER_IS_CONST("Formal parameters cannot be declared 'const'"),
FUNCTION_TYPED_PARAMETER_IS_FINAL("Formal parameter with a function type cannot be const"),
FUNCTION_TYPED_PARAMETER_IS_VAR("Formal parameter with a function type cannot be var"),
FUNCTION_NAME_EXPECTED_IDENTIFIER("Function name expected to be an identifier"),
ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE("Illegal assignment to non-assignable expression"),
// TODO(zundel): error message needs JUnit test
ILLEGAL_NUMBER_OF_PARAMETERS("Illegal number of parameters"),
INCOMPLETE_STRING_LITERAL("Incomplete string literal"),
INTERFACE_METHOD_WITH_BODY("Interface method cannot have a body"),
// TODO(zundel): error message needs JUnit test
INVALID_FIELD_DECLARATION("Wrong syntax for field declaration"),
INVALID_IDENTIFIER("The token '%s' cannot be used as an identifier"),
INVALID_OPERATOR_CHAINING("Cannot chain '%s'"),
LABEL_NOT_FOLLOWED_BY_CASE_OR_DEFAULT("Label not followed by 'case', 'default', or statement"),
LOCAL_CANNOT_BE_STATIC("Local function cannot be static"),
MISSING_FUNCTION_NAME(ErrorSeverity.WARNING, "a function name is required for a declaration"),
MISSING_NAMED_PARAMETER_END("Expected '}' to close the list of named parameters"),
MISSING_OPTIONAL_PARAMETER_END("Expected ']' to close the list of optional parameters"),
NAMED_PARAMETER_NOT_ALLOWED("Named parameter is not allowed for operator or setter method"),
NO_SPACE_AFTER_PLUS("Cannot have space between plus and numeric literal"),
NO_SOUP_FOR_YOU("Too many errors"),
NO_UNARY_PLUS_OPERATOR("No unary plus operator in Dart"),
NON_CONST_MAP_LITERAL_STATEMENT("Map literals appearing as a statement must be 'const'"),
NON_FINAL_STATIC_MEMBER_IN_INTERFACE("Non-final/const static members are not allowed in interfaces"),
ONLY_FACTORIES_CAN_REDIRECT("Only factory constructors can redirect to another constructor"),
ONLY_ONE_LIBRARY_DIRECTIVE("Only one library directive may be declared in a file"),
OPERATOR_CANNOT_BE_STATIC("Operators cannot be static"),
OPERATOR_IS_NOT_USER_DEFINABLE("Operator is not user definable"),
OPTIONAL_POSITIONAL_PARAMETER_NOT_ALLOWED("Optional positional parameter is not allowed for operator or setter method"),
POSITIONAL_AFTER_NAMED_ARGUMENT("Positional argument after named argument"),
REDIRECTING_CONSTRUCTOR_CANNOT_HAVE_A_BODY("Redirecting constructor cannot have a body"),
REDIRECTING_CONSTRUCTOR_PARAM("Redirecting constructor cannot have initializers"),
REDIRECTING_CONSTRUCTOR_ITSELF("Redirecting constructor cannot have initializers"),
REDIRECTING_CONSTRUCTOR_MULTIPLE("Multiple redirecting constructor invocations"),
REDIRECTING_CONSTRUCTOR_OTHER("Redirecting constructor cannot have initializers"),
STATIC_MEMBERS_CANNOT_BE_ABSTRACT("Static members cannot be abstract"),
SUPER_CONSTRUCTOR_MULTIPLE("'super' must be called only once in the initialization list"),
SUPER_CANNOT_BE_USED_AS_THE_SECOND_OPERAND(
"'super' cannot be used as the second operand in a binary expression."),
SUPER_IS_NOT_VALID_AS_A_BOOLEAN_OPERAND("'super' is not valid as a boolean operand"),
SUPER_IS_NOT_VALID_ALONE_OR_AS_A_BOOLEAN_OPERAND(
"'super' is not valid alone or as a boolean operand"),
TOP_LEVEL_CANNOT_BE_STATIC("Top-level field or method cannot be static"),
UNREACHABLE_CODE_IN_CASE(ErrorSeverity.WARNING, "Unreachable code in case statement"),
UNEXPECTED_TOKEN("Unexpected token '%s'"),
UNEXPECTED_TOKEN_IN_STRING_INTERPOLATION("Unexpected token in string interpolation: %s"),
VAR_IS_NOT_ALLOWED_ON_A_METHOD_DEFINITION("'var' is not allowed on a method definition"),
VOID_FIELD("Field cannot be of type void"),
VOID_PARAMETER("Parameter cannot be of type void");
private final ErrorSeverity severity;
private final String message;
/**
* Initialize a newly created error code to have the given message and ERROR severity.
*/
private ParserErrorCode(String message) {
this(ErrorSeverity.ERROR, message);
}
/**
* Initialize a newly created error code to have the given severity and message.
*/
private ParserErrorCode(ErrorSeverity severity, String message) {
this.severity = severity;
this.message = message;
}
@Override
public String getMessage() {
return message;
}
@Override
public ErrorSeverity getErrorSeverity() {
return severity;
}
@Override
public SubSystem getSubSystem() {
return SubSystem.PARSER;
}
@Override
public boolean needsRecompilation() {
return true;
}
}