From 4d42e73295006e0cd99030438bcf6db932393560 Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Thu, 19 Aug 2021 20:20:26 +0000 Subject: [PATCH] Report EXPERIMENT_NOT_ENABLED instead of ANNOTATION_WITH_TYPE_ARGUMENTS. On one hand this is less precise, OTOH this tells which feature and the language version it requires. Change-Id: I1d24a2d7cf2c7b7ca305d5bfc9f094fce0734bc4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/210644 Reviewed-by: Brian Wilkerson Reviewed-by: Samuel Rawlins Commit-Queue: Konstantin Shcheglov --- pkg/analyzer/lib/src/fasta/ast_builder.dart | 12 ++++++-- .../generic_metadata_parser_test.dart | 28 +++++++++---------- .../metadata_in_function_body_test.dart | 4 +-- tests/language/generic/metadata_test.dart | 4 +-- .../metadata_in_function_body_test.dart | 4 +-- tests/language_2/generic/metadata_test.dart | 4 +-- 6 files changed, 31 insertions(+), 25 deletions(-) diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart index f698b3d76d3..873ca31a7f8 100644 --- a/pkg/analyzer/lib/src/fasta/ast_builder.dart +++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart @@ -23,7 +23,6 @@ import 'package:_fe_analyzer_shared/src/messages/codes.dart' messageInvalidInitializer, messageInvalidSuperInInitializer, messageInvalidThisInInitializer, - messageMetadataTypeArguments, messageMissingAssignableSelector, messageNativeClauseShouldBeAnnotation, messageOperatorWithTypeParameters, @@ -1867,8 +1866,15 @@ class AstBuilder extends StackListener { var typeArguments = pop() as TypeArgumentList?; if (typeArguments != null && !_featureSet.isEnabled(Feature.generic_metadata)) { - handleRecoverableError(messageMetadataTypeArguments, - typeArguments.beginToken, typeArguments.beginToken); + var feature = Feature.generic_metadata; + handleRecoverableError( + templateExperimentNotEnabled.withArguments( + feature.enableString, + _versionAsString(feature.releaseVersion!), + ), + typeArguments.beginToken, + typeArguments.beginToken, + ); } var name = pop() as Identifier; push(ast.annotation( diff --git a/pkg/analyzer/test/generated/generic_metadata_parser_test.dart b/pkg/analyzer/test/generated/generic_metadata_parser_test.dart index d3ff54e3a63..05e1c6d771f 100644 --- a/pkg/analyzer/test/generated/generic_metadata_parser_test.dart +++ b/pkg/analyzer/test/generated/generic_metadata_parser_test.dart @@ -49,8 +49,8 @@ class GenericMetadataEnabledParserTest extends FastaParserTestCase mixin GenericMetadataParserTest on FastaParserTestCase { void test_className_prefixed_constructorName_absent() { var compilationUnit = _parseCompilationUnit('@p.A() class C {}', - disabledError: expectedError( - ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS, 4, 1)); + disabledError: + expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 4, 1)); var classDeclaration = compilationUnit.declarations.single as ClassDeclaration; var annotation = classDeclaration.metadata.single; @@ -65,8 +65,8 @@ mixin GenericMetadataParserTest on FastaParserTestCase { void test_className_prefixed_constructorName_present() { var compilationUnit = _parseCompilationUnit('@p.A.ctor() class C {}', - disabledError: expectedError( - ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS, 4, 1)); + disabledError: + expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 4, 1)); var classDeclaration = compilationUnit.declarations.single as ClassDeclaration; var annotation = classDeclaration.metadata.single; @@ -81,8 +81,8 @@ mixin GenericMetadataParserTest on FastaParserTestCase { void test_className_unprefixed_constructorName_absent() { var compilationUnit = _parseCompilationUnit('@A() class C {}', - disabledError: expectedError( - ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS, 2, 1)); + disabledError: + expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 2, 1)); var classDeclaration = compilationUnit.declarations.single as ClassDeclaration; var annotation = classDeclaration.metadata.single; @@ -96,8 +96,8 @@ mixin GenericMetadataParserTest on FastaParserTestCase { void test_className_unprefixed_constructorName_present() { var compilationUnit = _parseCompilationUnit('@A.ctor() class C {}', - disabledError: expectedError( - ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS, 2, 1)); + disabledError: + expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 2, 1)); var classDeclaration = compilationUnit.declarations.single as ClassDeclaration; var annotation = classDeclaration.metadata.single; @@ -117,8 +117,8 @@ mixin GenericMetadataParserTest on FastaParserTestCase { 6, 1), ], - disabledError: expectedError( - ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS, 4, 1)); + disabledError: + expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 4, 1)); var classDeclaration = compilationUnit.declarations.single as ClassDeclaration; var annotation = classDeclaration.metadata.single; @@ -139,8 +139,8 @@ mixin GenericMetadataParserTest on FastaParserTestCase { 4, 1), ], - disabledError: expectedError( - ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS, 2, 1)); + disabledError: + expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 2, 1)); var classDeclaration = compilationUnit.declarations.single as ClassDeclaration; var annotation = classDeclaration.metadata.single; @@ -174,8 +174,8 @@ mixin GenericMetadataParserTest on FastaParserTestCase { expectedError(ParserErrorCode.EXPECTED_EXECUTABLE, 7, 1), expectedError(ParserErrorCode.MISSING_FUNCTION_BODY, 15, 5), ], - disabledError: expectedError( - ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS, 2, 1)); + disabledError: + expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 2, 1)); } CompilationUnit _parseCompilationUnit(String content, diff --git a/tests/language/generic/metadata_in_function_body_test.dart b/tests/language/generic/metadata_in_function_body_test.dart index 8b64190d42b..de229e5535f 100644 --- a/tests/language/generic/metadata_in_function_body_test.dart +++ b/tests/language/generic/metadata_in_function_body_test.dart @@ -17,11 +17,11 @@ main() { @C() @C() //^ - // [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS + // [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED // [cfe] An annotation can't use type arguments. @C() //^ - // [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS + // [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED // [cfe] An annotation can't use type arguments. int i = 0; ignore(i); diff --git a/tests/language/generic/metadata_test.dart b/tests/language/generic/metadata_test.dart index 70156d66b91..851dda95f48 100644 --- a/tests/language/generic/metadata_test.dart +++ b/tests/language/generic/metadata_test.dart @@ -13,10 +13,10 @@ class C { @C() @C() //^ -// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS +// [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED // [cfe] An annotation can't use type arguments. @C() //^ -// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS +// [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED // [cfe] An annotation can't use type arguments. main() {} diff --git a/tests/language_2/generic/metadata_in_function_body_test.dart b/tests/language_2/generic/metadata_in_function_body_test.dart index d98f7437344..79af7e05ac1 100644 --- a/tests/language_2/generic/metadata_in_function_body_test.dart +++ b/tests/language_2/generic/metadata_in_function_body_test.dart @@ -19,11 +19,11 @@ main() { @C() @C() //^ - // [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS + // [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED // [cfe] An annotation can't use type arguments. @C() //^ - // [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS + // [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED // [cfe] An annotation can't use type arguments. int i = 0; ignore(i); diff --git a/tests/language_2/generic/metadata_test.dart b/tests/language_2/generic/metadata_test.dart index 4a4dcad4899..29ec0d9b565 100644 --- a/tests/language_2/generic/metadata_test.dart +++ b/tests/language_2/generic/metadata_test.dart @@ -15,10 +15,10 @@ class C { @C() @C() //^ -// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS +// [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED // [cfe] An annotation can't use type arguments. @C() //^ -// [analyzer] SYNTACTIC_ERROR.ANNOTATION_WITH_TYPE_ARGUMENTS +// [analyzer] SYNTACTIC_ERROR.EXPERIMENT_NOT_ENABLED // [cfe] An annotation can't use type arguments. main() {}