diff --git a/pkg/analysis_server_plugin/pubspec.yaml b/pkg/analysis_server_plugin/pubspec.yaml index fa0c7364343..fcd2d81d73d 100644 --- a/pkg/analysis_server_plugin/pubspec.yaml +++ b/pkg/analysis_server_plugin/pubspec.yaml @@ -11,7 +11,7 @@ resolution: workspace dependencies: # See the release policy for managing this dependency at # pkg/analyzer/doc/implementation/releasing.md. - analyzer: 8.3.0-dev + analyzer: 8.2.0 analyzer_plugin: 0.13.8 meta: ^1.16.0 yaml: ^3.1.0 diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md index 29162eaf6f0..ec1c58e796d 100644 --- a/pkg/analyzer/CHANGELOG.md +++ b/pkg/analyzer/CHANGELOG.md @@ -1,7 +1,3 @@ -## 8.3.0-dev -* Add the `experimental_member_use` warning, which warns about any reference to - a declaration annotated with `@experimental`. - ## 8.2.0 * Updated SDK constraint to `^3.9.0`. * Deprecate `Diagnostic.data`. Instead, please use an expando to attach data to diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart index 5d46e4ad11a..57eb1ae39f3 100644 --- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart +++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart @@ -33,7 +33,6 @@ import 'package:analyzer/src/error/deprecated_member_use_verifier.dart'; import 'package:analyzer/src/error/doc_comment_verifier.dart'; import 'package:analyzer/src/error/element_usage_frontier_detector.dart'; import 'package:analyzer/src/error/error_handler_verifier.dart'; -import 'package:analyzer/src/error/experimental_member_use_verifier.dart'; import 'package:analyzer/src/error/must_call_super_verifier.dart'; import 'package:analyzer/src/error/null_safe_api_verifier.dart'; import 'package:analyzer/src/error/widget_preview_verifier.dart'; @@ -124,13 +123,6 @@ class BestPracticesVerifier extends RecursiveAstVisitor { diagnosticReporter: _diagnosticReporter, ), ), - ElementUsageFrontierDetector( - workspacePackage: workspacePackage, - elementUsageSet: const ExperimentalElementUsageSet(), - elementUsageReporter: ExperimentalElementUsageReporter( - diagnosticReporter: _diagnosticReporter, - ), - ), ], _errorHandlerVerifier = ErrorHandlerVerifier( _diagnosticReporter, diff --git a/pkg/analyzer/lib/src/error/experimental_member_use_verifier.dart b/pkg/analyzer/lib/src/error/experimental_member_use_verifier.dart deleted file mode 100644 index da45cd55128..00000000000 --- a/pkg/analyzer/lib/src/error/experimental_member_use_verifier.dart +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright (c) 2025, 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:analyzer/dart/ast/syntactic_entity.dart'; -import 'package:analyzer/dart/element/element.dart'; -import 'package:analyzer/error/listener.dart'; -import 'package:analyzer/src/error/codes.dart'; -import 'package:analyzer/src/error/element_usage_detector.dart'; - -/// Instance of [ElementUsageReporter] for reporting uses of experimental -/// elements. -class ExperimentalElementUsageReporter implements ElementUsageReporter<()> { - final DiagnosticReporter _diagnosticReporter; - - ExperimentalElementUsageReporter({ - required DiagnosticReporter diagnosticReporter, - }) : _diagnosticReporter = diagnosticReporter; - - @override - void report( - SyntacticEntity errorEntity, - String displayName, - () tagInfo, { - required bool isInSamePackage, - }) { - // Use of an experimental API from within the same package is OK - if (isInSamePackage) return; - - _diagnosticReporter.atEntity( - errorEntity, - WarningCode.experimentalMemberUse, - arguments: [displayName], - ); - } -} - -/// Instance of [ElementUsageSet] for experimental elements. -class ExperimentalElementUsageSet implements ElementUsageSet<()> { - const ExperimentalElementUsageSet(); - - @override - ()? getTagInfo(Element element) => - element.metadata.annotations.any((e) => e.isExperimental) ? () : null; -} diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml index 11d069d4428..453dfa9b0f7 100644 --- a/pkg/analyzer/pubspec.yaml +++ b/pkg/analyzer/pubspec.yaml @@ -1,5 +1,5 @@ name: analyzer -version: 8.3.0-dev +version: 8.2.0 description: >- This package provides a library that performs static analysis of Dart code. repository: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer diff --git a/pkg/analyzer/test/src/diagnostics/experimental_member_use_test.dart b/pkg/analyzer/test/src/diagnostics/experimental_member_use_test.dart deleted file mode 100644 index 44bd59eac2b..00000000000 --- a/pkg/analyzer/test/src/diagnostics/experimental_member_use_test.dart +++ /dev/null @@ -1,2617 +0,0 @@ -// Copyright (c) 2025, 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:analyzer/src/dart/error/syntactic_errors.dart'; -import 'package:analyzer/src/error/codes.dart'; -import 'package:analyzer/utilities/package_config_file_builder.dart'; -import 'package:test_reflective_loader/test_reflective_loader.dart'; - -import '../../generated/test_support.dart'; -import '../dart/resolution/context_collection_resolution.dart'; - -main() { - defineReflectiveSuite(() { - defineReflectiveTests(ExperimentalExtendTest); - defineReflectiveTests(ExperimentalImplementTest); - defineReflectiveTests(ExperimentalInstantiateTest); - defineReflectiveTests(ExperimentalMemberUseTest); - defineReflectiveTests(ExperimentalMixinTest); - }); -} - -@reflectiveTest -class ExperimentalExtendTest extends _TestBase { - test_annotatedClass() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -''', - code: r''' -class Bar extends Foo {} -''', - [error(WarningCode.experimentalMemberUse, 47, 3)], - ); - } - - test_annotatedClass_indirect() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -class Bar extends Foo {} -''', - code: r''' -class Baz extends Bar {} -''', - ); - } - - test_annotatedClass_typedef() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -typedef Foo2 = Foo; -''', - code: r''' -class Bar extends Foo2 {} -''', - ); - } - - test_annotatedClassTypeAlias() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo = Object with M; -mixin M {} -''', - code: r''' -class Bar extends Foo {} -''', - [error(WarningCode.experimentalMemberUse, 47, 3)], - ); - } - - test_classTypeAlias() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -''', - code: r''' -mixin M {} -class Bar = Foo with M; -''', - [error(WarningCode.experimentalMemberUse, 52, 3)], - ); - } - - test_insideLibrary() async { - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -class Bar extends Foo {} -'''); - } - - test_noAnnotation() async { - newFile('$testPackageLibPath/foo.dart', r''' -class Foo {} -'''); - - await assertNoErrorsInCode2( - externalCode: r''' -class Foo {} -''', - code: r''' -class Bar extends Foo {} -''', - ); - } -} - -@reflectiveTest -class ExperimentalImplementTest extends _TestBase { - test_annotatedClass() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -''', - code: r''' -class Bar implements Foo {} -''', - [error(WarningCode.experimentalMemberUse, 50, 3)], - ); - } - - test_annotatedClass_indirect() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -class Bar extends Foo {} -''', - code: r''' -class Baz implements Bar {} -''', - ); - } - - test_annotatedClass_typedef() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -typedef Foo2 = Foo; -''', - code: r''' -class Bar implements Foo2 {} -''', - ); - } - - test_annotatedClassTypeAlias() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo = Object with M; -mixin M {} -''', - code: r''' -class Bar implements Foo {} -''', - [error(WarningCode.experimentalMemberUse, 50, 3)], - ); - } - - test_classTypeAlias() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -''', - code: r''' -mixin M {} -class Bar = Object with M implements Foo; -''', - [error(WarningCode.experimentalMemberUse, 77, 3)], - ); - } - - test_enum() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -''', - code: r''' -enum Bar implements Foo { one; } -''', - [error(WarningCode.experimentalMemberUse, 49, 3)], - ); - } - - test_insideLibrary() async { - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -class Bar implements Foo {} -'''); - } - - test_mixinImplementsClass() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -''', - code: r''' -mixin Bar implements Foo {} -''', - [error(WarningCode.experimentalMemberUse, 50, 3)], - ); - } - - test_mixinOnClass() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -''', - code: r''' -mixin Bar on Foo {} -''', - [error(WarningCode.experimentalMemberUse, 42, 3)], - ); - } - - test_noAnnotation() async { - await assertNoErrorsInCode2( - externalCode: r''' -class Foo {} -''', - code: r''' -class Bar implements Foo {} -''', - ); - } -} - -@reflectiveTest -class ExperimentalInstantiateTest extends _TestBase { - test_annotatedClass() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -''', - code: r''' -var x = Foo(); -''', - [error(WarningCode.experimentalMemberUse, 37, 3)], - ); - } - - test_annotatedClass_tearoff() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -''', - code: r''' -var x = Foo.new; -''', - [error(WarningCode.experimentalMemberUse, 37, 3)], - ); - } - - test_annotatedClass_typedef() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -typedef Foo2 = Foo; -''', - code: r''' -var x = Foo2(); -''', - ); - } - - test_annotatedClass_typedef_tearoff() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo {} -typedef Foo2 = Foo; -''', - code: r''' -var x = Foo2.new; -''', - ); - } - - test_annotatedClassTypeAlias() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class Foo = Object with M; -mixin M {} -''', - code: r''' -var x = Foo(); -''', - [error(WarningCode.experimentalMemberUse, 37, 3)], - ); - } - - test_insideLibrary() async { - await assertNoErrorsInCode(r''' -@Deprecated.implement() -class Foo {} -var x = Foo(); -'''); - } - - test_noAnnotation() async { - await assertNoErrorsInCode2( - externalCode: r''' -class Foo {} -''', - code: r''' -var x = Foo(); -''', - ); - } -} - -@reflectiveTest -class ExperimentalMemberUseTest extends _TestBase { - test_assignmentExpression_compound_experimentalGetter() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int get x => 0; - -set x(int _) {} -''', - code: r''' -void f() { - x += 2; -} -''', - [error(WarningCode.experimentalMemberUse, 42, 1)], - ); - } - - test_assignmentExpression_compound_experimentalSetter() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -int get x => 0; - -@experimental -set x(int _) {} -''', - code: r''' -void f() { - x += 2; -} -''', - [error(WarningCode.experimentalMemberUse, 42, 1)], - ); - } - - test_assignmentExpression_simple_experimentalGetter() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int get x => 0; - -set x(int _) {} -''', - code: r''' -void f() { - x = 0; -} -''', - ); - } - - test_assignmentExpression_simple_experimentalGetterSetter() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int x = 1; -''', - code: r''' -void f() { - x = 0; -} -''', - [error(WarningCode.experimentalMemberUse, 42, 1)], - ); - } - - test_assignmentExpression_simple_experimentalSetter() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -int get x => 0; - -@experimental -set x(int _) {} -''', - code: r''' -void f() { - x = 0; -} -''', - [error(WarningCode.experimentalMemberUse, 42, 1)], - ); - } - - test_call() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - call() {} -} -''', - code: r''' -void f(A a) { - a(); -} -''', - [error(WarningCode.experimentalMemberUse, 45, 3)], - ); - } - - test_class() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class A {} -''', - code: r''' -void f(A a) {} -''', - [error(WarningCode.experimentalMemberUse, 36, 1)], - ); - } - - test_class_inExperimentalFunctionTypeAlias() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -@experimental -class A {} -'''); - - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; -import 'package:aaa/a.dart'; - -@experimental -typedef A T(); -'''); - } - - test_class_inExperimentalGenericTypeAlias() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -@experimental -class A {} -'''); - - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; -import 'package:aaa/a.dart'; - -@experimental -typedef T = A Function(); -'''); - } - - test_compoundAssignment() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - A operator+(A a) { return a; } -} -''', - code: r''' -f(A a, A b) { - a += b; -} -''', - [error(WarningCode.experimentalMemberUse, 45, 6)], - ); - } - - test_dotShorthandConstructorInvocation_experimentalClass_experimentalConstructor() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -@experimental -class A { - @experimental - A(); -} -'''); - - await assertErrorsInCode( - r''' -import 'package:aaa/a.dart'; - -void f() { - A a = .new(); -} -''', - [ - error(WarningCode.experimentalMemberUse, 43, 1), - error(WarningCode.unusedLocalVariable, 45, 1), - error(WarningCode.experimentalMemberUse, 50, 3), - ], - ); - } - - test_dotShorthandConstructorInvocation_experimentalClass_unexperimentalConstructor() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -@experimental -class A { - A(); -} -'''); - - await assertErrorsInCode( - r''' -import 'package:aaa/a.dart'; - -void f() { - A a = .new(); -} -''', - [ - error(WarningCode.experimentalMemberUse, 43, 1), - error(WarningCode.unusedLocalVariable, 45, 1), - ], - ); - } - - test_dotShorthandConstructorInvocation_experimentalClass_unexperimentalNamedConstructor() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -@experimental -class A { - A.a(); -} -'''); - - await assertErrorsInCode( - r''' -import 'package:aaa/a.dart'; - -void f() { - A a = .a(); -} -''', - [ - error(WarningCode.experimentalMemberUse, 43, 1), - error(WarningCode.unusedLocalVariable, 45, 1), - ], - ); - } - - test_dotShorthandConstructorInvocation_namedConstructor() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - A.named(int i) {} -} -''', - code: r''' -f() { - A a = .named(1); -} -''', - [ - error(WarningCode.unusedLocalVariable, 39, 1), - error( - WarningCode.experimentalMemberUse, - 44, - 5, - messageContains: [ - "'A.named' is experimental and could be removed or changed at any time.", - ], - ), - ], - ); - } - - test_dotShorthandConstructorInvocation_unexperimentalClass_experimentalConstructor() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - A(); -} -'''); - - await assertErrorsInCode( - r''' -import 'package:aaa/a.dart'; - -void f() { - A a = .new(); -} -''', - [ - error(WarningCode.unusedLocalVariable, 45, 1), - error(WarningCode.experimentalMemberUse, 50, 3), - ], - ); - } - - test_experimentalField_inObjectPattern_explicitName() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class C { - @experimental - final int foo = 0; -} -''', - code: ''' -int g(Object s) => - switch (s) { - C(foo: var f) => f, - _ => 7, - }; -''', - [error(WarningCode.experimentalMemberUse, 69, 3)], - ); - } - - test_experimentalField_inObjectPattern_inferredName() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class C { - @experimental - final int foo = 0; -} -''', - code: ''' -int g(Object s) => - switch (s) { - C(:var foo) => foo, - _ => 7, - }; -''', - [error(WarningCode.experimentalMemberUse, 74, 3)], - ); - } - - test_export() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -@experimental -library a; -'''); - - await assertErrorsInCode( - ''' -export 'package:aaa/a.dart'; -''', - [error(WarningCode.experimentalMemberUse, 0, 28)], - ); - } - - test_export_fromSamePackage() async { - newFile('$testPackageLibPath/lib2.dart', r''' -import 'package:meta/meta.dart'; - -@experimental -library a; -'''); - - await assertNoErrorsInCode(''' -export 'lib2.dart'; -'''); - } - - test_extensionOverride() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -extension E on int { - int get foo => 0; -} -''', - code: ''' -void f() { - E(0).foo; -} -''', - [error(WarningCode.experimentalMemberUse, 42, 1)], - ); - } - - test_field_implicitGetter() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - int foo = 0; -} -'''); - - await assertErrorsInCode( - r''' -import 'package:aaa/a.dart'; - -void f(A a) { - a.foo; -} -''', - [error(WarningCode.experimentalMemberUse, 48, 3)], - ); - } - - test_field_implicitSetter() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - int foo = 0; -} -'''); - - await assertErrorsInCode( - r''' -import 'package:aaa/a.dart'; - -void f(A a) { - a.foo = 0; -} -''', - [error(WarningCode.experimentalMemberUse, 48, 3)], - ); - } - - test_field_inExperimentalConstructor() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - int x = 0; -} -'''); - - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; -import 'package:aaa/a.dart'; - -class B extends A { - @experimental - B() { - x; - x = 1; - } -} -'''); - } - - test_hideCombinator() async { - newFile(externalLibPath, r''' -import 'package:meta/meta.dart'; - -@experimental -class A {} -'''); - await assertNoErrorsInCode(''' -// ignore: unused_import -import '$externalLibUri' hide A; -'''); - } - - test_import() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -@experimental -library a; -'''); - - await assertErrorsInCode( - r''' -// ignore:unused_import -import 'package:aaa/a.dart'; -''', - [ - error( - WarningCode.experimentalMemberUse, - 24, - 28, - messageContains: ['package:aaa/a.dart'], - ), - ], - ); - } - - test_incorrectlyNestedNamedParameterDeclaration() async { - // This is a regression test; previously this code would cause an analyzer - // crash in ExperimentalMemberUseVerifier. - await assertErrorsInCode( - r''' -class C { - final String x; - final bool y; - - const C({ - required this.x, - {this.y = false} - }); -} - -const z = C(x: ''); -''', - [ - error(CompileTimeErrorCode.finalNotInitializedConstructor1, 53, 1), - error(ParserErrorCode.missingIdentifier, 82, 1), - error(ParserErrorCode.expectedToken, 82, 1), - ], - ); - } - - test_indexExpression() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - operator[](int i) {} -} -''', - code: r''' -void f(A a) { - return a[1]; -} -''', - [error(WarningCode.experimentalMemberUse, 52, 4)], - ); - } - - test_inEnum() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -void f() {} -''', - code: r''' -enum E { - one, two; - - void m() { - f(); - } -} -''', - [error(WarningCode.experimentalMemberUse, 68, 1)], - ); - } - - test_inExperimentalClass() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -f() {} -''', - code: r''' -import 'package:meta/meta.dart'; - -@experimental -class C { - m() { - f(); - } -} -''', - ); - } - - test_inExperimentalDefaultFormalParameter() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class C { - const C(); -} -''', - code: r''' -import 'package:meta/meta.dart'; - -f({@experimental C? c = const C()}) {} -''', - ); - } - - test_inExperimentalEnum() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -void f() {} -''', - code: r''' -import 'package:meta/meta.dart'; - -@experimental -enum E { - one, two; - - void m() { - f(); - } -} -''', - ); - } - - test_inExperimentalExtension() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -void f() {} -''', - code: r''' -import 'package:meta/meta.dart'; - -@experimental -extension E on int { - void m() { - f(); - } -} -''', - ); - } - - test_inExperimentalExtensionType() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -f() {} -''', - code: ''' -import 'package:meta/meta.dart'; - -@experimental -extension type E(int i) { - m() { - f(); - } -} -''', - ); - } - - test_inExperimentalField() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class C {} -''', - code: r''' -import 'package:meta/meta.dart'; - -class X { - @experimental - C f; - X(this.f); -} -''', - ); - } - - test_inExperimentalFieldFormalParameter() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class C {} -''', - code: r''' -import 'package:meta/meta.dart'; - -class A { - Object? o; - A({@experimental C? this.o}); -} -''', - ); - } - - test_inExperimentalFunction() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -f() {} -''', - code: ''' -import 'package:meta/meta.dart'; - -@experimental -g() { - f(); -} -''', - ); - } - - test_inExperimentalFunctionTypedFormalParameter() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class C {} -''', - code: r''' -import 'package:meta/meta.dart'; - -f({@experimental C? callback()?}) {} -''', - ); - } - - test_inExperimentalLibrary() async { - newFile(externalLibPath, r''' -import 'package:meta/meta.dart'; - -@experimental -f() {} -'''); - await assertNoErrorsInCode(''' -@experimental -library lib; -import 'package:meta/meta.dart'; -import '$externalLibUri'; - -class C { - m() { - f(); - } -} -'''); - } - - test_inExperimentalMethod() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -f() {} -''', - code: ''' -import 'package:meta/meta.dart'; - -class C { - @experimental - m() { - f(); - } -} -''', - ); - } - - test_inExperimentalMethod_inExperimentalClass() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -f() {} -''', - code: ''' -import 'package:meta/meta.dart'; - -@experimental -class C { - @experimental - m() { - f(); - } -} -''', - ); - } - - test_inExperimentalMixin() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -f() {} -''', - code: ''' -import 'package:meta/meta.dart'; - -@experimental -mixin M { - m() { - f(); - } -} -''', - ); - } - - test_inExperimentalSimpleFormalParameter() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class C {} -''', - code: r''' -import 'package:meta/meta.dart'; - -f({@experimental C? c}) {} -''', - ); - } - - test_inExperimentalSuperFormalParameter() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class C {} -''', - code: r''' -import 'package:meta/meta.dart'; - -class A { - A({Object? o}); -} -class B extends A { - B({@experimental C? super.o}); -} -''', - ); - } - - test_inExperimentalTopLevelVariable() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class C {} -var x = C(); -''', - code: r''' -import 'package:meta/meta.dart'; - -@experimental -C v = x; -''', - ); - } - - test_inExtension() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -void f() {} -''', - code: r''' -extension E on int { - void m() { - f(); - } -} -''', - [error(WarningCode.experimentalMemberUse, 67, 1)], - ); - } - - test_instanceCreation_experimentalClass_experimentalConstructor() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -@experimental -class A { - @experimental - A(); -} -'''); - - await assertErrorsInCode( - r''' -import 'package:aaa/a.dart'; - -void f() { - A(); -} -''', - [error(WarningCode.experimentalMemberUse, 43, 1)], - ); - } - - test_instanceCreation_experimentalClass_unexperimentalConstructor() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -@experimental -class A { - A(); -} -'''); - - await assertErrorsInCode( - r''' -import 'package:aaa/a.dart'; - -void f() { - A(); -} -''', - [error(WarningCode.experimentalMemberUse, 43, 1)], - ); - } - - test_instanceCreation_experimentalClass_unexperimentalNamedConstructor() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -@experimental -class A { - A.a(); -} -'''); - - await assertErrorsInCode( - r''' -import 'package:aaa/a.dart'; - -void f() { - A.a(); -} -''', - [ - // https://github.com/dart-lang/linter/issues/4752 - // Highlights `A`. - error(WarningCode.experimentalMemberUse, 43, 1), - ], - ); - } - - test_instanceCreation_namedConstructor() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - A.named(int i) {} -} -''', - code: r''' -f() { - return new A.named(1); -} -''', - [ - error( - WarningCode.experimentalMemberUse, - 48, - 7, - messageContains: [ - "'A.named' is experimental and could be removed or changed at any time.", - ], - ), - ], - ); - } - - test_instanceCreation_unexperimentalClass_experimentalConstructor() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - A(); -} -'''); - - await assertErrorsInCode( - r''' -import 'package:aaa/a.dart'; - -void f() { - A(); -} -''', - [error(WarningCode.experimentalMemberUse, 43, 1)], - ); - } - - test_instanceCreation_unnamedConstructor() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - A(int i) {} -} -''', - code: r''' -f() { - return new A(1); -} -''', - [error(WarningCode.experimentalMemberUse, 48, 1)], - ); - } - - test_methodInvocation() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - void foo() {} -} -'''); - - await assertErrorsInCode( - r''' -import 'package:aaa/a.dart'; - -void f(A a) { - a.foo(); -} -''', - [error(WarningCode.experimentalMemberUse, 48, 3)], - ); - } - - test_methodInvocation_constantAnnotation() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int f() => 0; -''', - code: r''' -var x = f(); -''', - [error(WarningCode.experimentalMemberUse, 37, 1)], - ); - } - - test_methodInvocation_constructorAnnotation() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int f() => 0; -''', - code: r''' -var x = f(); -''', - [ - error( - WarningCode.experimentalMemberUse, - 37, - 1, - text: - "'f' is experimental and could be removed or changed at any time.", - ), - ], - ); - } - - test_methodInvocation_fromSamePackage() async { - newFile('$testPackageLibPath/lib2.dart', r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - void foo() {} -} -'''); - - await assertNoErrorsInCode(r''' -import 'lib2.dart'; - -void f(A a) { - a.foo(); -} -'''); - } - - test_methodInvocation_inExperimentalConstructor() async { - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - A() { - foo(); - } - - @experimental - void foo() {} -} -'''); - } - - test_mixin_inExperimentalClassTypeAlias() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -@experimental -mixin A {} -'''); - - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; -import 'package:aaa/a.dart'; - -@experimental -class B = Object with A; -'''); - } - - test_namedParameterMissingName() async { - // This is a regression test; previously this code would cause an analyzer - // crash in ExperimentalMemberUseVerifier. - await assertErrorsInCode( - r''' -class C { - const C({this.}); -} -var z = C(x: ''); -''', - [ - error( - CompileTimeErrorCode.initializingFormalForNonExistentField, - 21, - 5, - ), - error(ParserErrorCode.missingIdentifier, 26, 1), - error(CompileTimeErrorCode.undefinedNamedParameter, 42, 1), - ], - ); - } - - test_operator() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - operator+(A a) {} -} -''', - code: r''' -f(A a, A b) { - return a + b; -} -''', - [error(WarningCode.experimentalMemberUse, 52, 5)], - ); - } - - test_parameter_named() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -void f({@experimental int x = 0}) {} -''', - code: r''' -void g() => f(x: 1); -''', - [error(WarningCode.experimentalMemberUse, 43, 1)], - ); - } - - test_parameter_named_inDefiningConstructor_asFieldFormalParameter() async { - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; - -class C { - int x; - C({@experimental this.x = 0}); -} -'''); - } - - test_parameter_named_inDefiningConstructor_assertInitializer() async { - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; - -class C { - C({@experimental int y = 0}) : assert(y > 0); -} -'''); - } - - test_parameter_named_inDefiningConstructor_fieldInitializer() async { - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; - -class C { - int x; - C({@experimental int y = 0}) : x = y; -} -'''); - } - - test_parameter_named_inDefiningConstructor_inFieldFormalParameter_notName() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class A {} - -@experimental -class B extends A { - const B(); -} - -const B instance = const B(); -''', - code: r''' -class C { - final A a; - C({B this.a = instance}); -} -''', - [error(WarningCode.experimentalMemberUse, 57, 1)], - ); - } - - test_parameter_named_inDefiningFunction() async { - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; - -f({@experimental int x = 0}) => x; -'''); - } - - test_parameter_named_inDefiningLocalFunction() async { - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; - -class C { - m() { - f({@experimental int x = 0}) { - return x; - } - return f(); - } -} -'''); - } - - test_parameter_named_inDefiningMethod() async { - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; - -class C { - m({@experimental int x = 0}) { - return x; - } -} -'''); - } - - test_parameter_named_inNestedLocalFunction() async { - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; - -class C { - m({@experimental int x = 0}) { - f() { - return x; - } - return f(); - } -} -'''); - } - - test_parameter_named_ofFunction() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -void foo({@experimental int a}) {} -'''); - - await assertErrorsInCode( - r''' -import 'package:aaa/a.dart'; - -void f() { - foo(a: 0); -} -''', - [error(WarningCode.experimentalMemberUse, 47, 1)], - ); - } - - test_parameter_named_ofMethod() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -class A { - void foo({@experimental int a}) {} -} -'''); - - await assertErrorsInCode( - r''' -import 'package:aaa/a.dart'; - -void f(A a) { - a.foo(a: 0); -} -''', - [error(WarningCode.experimentalMemberUse, 52, 1)], - ); - } - - test_parameter_positionalOptional() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class A { - void foo([@experimental int x = 0]) {} -} -''', - code: ''' -void f(A a) { - a.foo(0); -} -''', - [error(WarningCode.experimentalMemberUse, 51, 1)], - ); - } - - test_parameter_positionalOptional_inExperimentalConstructor() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -void foo([@experimental int x = 0]) {} -''', - code: r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - A() { - foo(0); - } -} -''', - ); - } - - test_parameter_positionalOptional_inExperimentalFunction() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class A { - void foo([@experimental int x = 0]) {} -} -''', - code: r''' -import 'package:meta/meta.dart'; - -@experimental -void f(A a) { - a.foo(0); -} -''', - ); - } - - test_parameter_positionalRequired() async { - await assertNoErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class A { - void foo(@experimental int x) {} -} -''', - code: r''' -void f(A a) { - a.foo(0); -} -''', - ); - } - - test_postfixExpression_experimentalGetter() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int get x => 0; - -set x(int _) {} -''', - code: r''' -void f() { - x++; -} -''', - [error(WarningCode.experimentalMemberUse, 42, 1)], - ); - } - - test_postfixExpression_experimentalNothing() async { - await assertNoErrorsInCode2( - externalCode: r''' -int get x => 0; - -set x(int _) {} -''', - code: r''' -void f() { - x++; -} -''', - ); - } - - test_postfixExpression_experimentalSetter() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -int get x => 0; - -@experimental -set x(int _) {} -''', - code: r''' -void f() { - x++; -} -''', - [error(WarningCode.experimentalMemberUse, 42, 1)], - ); - } - - test_prefixedIdentifier_identifier() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - static const foo = 0; -} -''', - code: r''' -void f() { - A.foo; -} -''', - [error(WarningCode.experimentalMemberUse, 44, 3)], - ); - } - - test_prefixedIdentifier_prefix() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -class A { - static const foo = 0; -} -''', - code: r''' -void f() { - A.foo; -} -''', - [error(WarningCode.experimentalMemberUse, 42, 1)], - ); - } - - test_prefixExpression_experimentalGetter() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int get x => 0; - -set x(int _) {} -''', - code: r''' -void f() { - ++x; -} -''', - [error(WarningCode.experimentalMemberUse, 44, 1)], - ); - } - - test_prefixExpression_experimentalSetter() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -int get x => 0; - -@experimental -set x(int _) {} -''', - code: r''' -void f() { - ++x; -} -''', - [error(WarningCode.experimentalMemberUse, 44, 1)], - ); - } - - test_propertyAccess_super() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - int get foo => 0; -} -''', - code: r''' -class B extends A { - void bar() { - super.foo; - } -} -''', - [error(WarningCode.experimentalMemberUse, 74, 3)], - ); - } - - test_redirectingConstructorInvocation_namedParameter() async { - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; - -class A { - A({@experimental int a = 0}) {} - A.named() : this(a: 0); -} -'''); - } - - test_setterInvocation() async { - newFile('$workspaceRootPath/aaa/lib/a.dart', r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - set foo(int _) {} -} -'''); - - await assertErrorsInCode( - r''' -import 'package:aaa/a.dart'; - -void f(A a) { - a.foo = 0; -} -''', - [error(WarningCode.experimentalMemberUse, 48, 3)], - ); - } - - test_showCombinator() async { - newFile(externalLibPath, r''' -import 'package:meta/meta.dart'; - -@experimental -class A {} -'''); - await assertErrorsInCode( - ''' -// ignore: unused_import -import '$externalLibUri' show A; -''', - [error(WarningCode.experimentalMemberUse, 58, 1)], - ); - } - - test_superConstructor_namedConstructor() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - A.named() {} -} -''', - code: r''' -class B extends A { - B() : super.named() {} -} -''', - [ - error( - WarningCode.experimentalMemberUse, - 57, - 13, - text: - "'A.named' is experimental and could be removed or changed at any time.", - ), - ], - ); - } - - test_superConstructor_unnamedConstructor() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -class A { - @experimental - A() {} -} -''', - code: r''' -class B extends A { - B() : super() {} -} -''', - [ - error( - WarningCode.experimentalMemberUse, - 57, - 7, - text: - "'A' is experimental and could be removed or changed at any time.", - ), - ], - ); - } - - test_topLevelVariable_argument() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int x = 1; -''', - code: r''' -void f() { - print(x); -} -''', - [error(WarningCode.experimentalMemberUse, 48, 1)], - ); - } - - test_topLevelVariable_assignment_right() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int x = 1; -''', - code: r''' -void f(int a) { - a = x; -} -''', - [error(WarningCode.experimentalMemberUse, 51, 1)], - ); - } - - test_topLevelVariable_binaryExpression() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int x = 1; -''', - code: r''' -void f() { - x + 1; -} -''', - [error(WarningCode.experimentalMemberUse, 42, 1)], - ); - } - - test_topLevelVariable_constructorFieldInitializer() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -const int x = 1; -''', - code: r''' -class A { - final int f; - A() : f = x; -} -''', - [error(WarningCode.experimentalMemberUse, 66, 1)], - ); - } - - test_topLevelVariable_expressionFunctionBody() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int x = 1; -''', - code: r''' -int f() => x; -''', - [error(WarningCode.experimentalMemberUse, 40, 1)], - ); - } - - test_topLevelVariable_expressionStatement() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int x = 1; -''', - code: r''' -void f() { - x; -} -''', - [error(WarningCode.experimentalMemberUse, 42, 1)], - ); - } - - test_topLevelVariable_forElement_condition() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -var x = true; -''', - code: r''' -void f() { - [for (;x;) 0]; -} -''', - [error(WarningCode.experimentalMemberUse, 49, 1)], - ); - } - - test_topLevelVariable_forStatement_condition() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -var x = true; -''', - code: r''' -void f() { - for (;x;) {} -} -''', - [error(WarningCode.experimentalMemberUse, 48, 1)], - ); - } - - test_topLevelVariable_ifElement_condition() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -var x = true; -''', - code: r''' -void f() { - [if (x) 0]; -} -''', - [error(WarningCode.experimentalMemberUse, 47, 1)], - ); - } - - test_topLevelVariable_ifStatement_condition() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -var x = true; -''', - code: r''' -void f() { - if (x) {} -} -''', - [error(WarningCode.experimentalMemberUse, 46, 1)], - ); - } - - test_topLevelVariable_listLiteral() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int x = 1; -''', - code: r''' -void f() { - [x]; -} -''', - [error(WarningCode.experimentalMemberUse, 43, 1)], - ); - } - - test_topLevelVariable_mapLiteralEntry() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int x = 1; -''', - code: r''' -void f() { - ({0: x, x: 0}); -} -''', - [ - error(WarningCode.experimentalMemberUse, 47, 1), - error(WarningCode.experimentalMemberUse, 50, 1), - ], - ); - } - - test_topLevelVariable_namedExpression() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int x = 1; -''', - code: r''' -void g({int a = 0}) {} -void f() { - g(a: x); -} -''', - [error(WarningCode.experimentalMemberUse, 70, 1)], - ); - } - - test_topLevelVariable_returnStatement() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int x = 1; -''', - code: r''' -int f() { - return x; -} -''', - [error(WarningCode.experimentalMemberUse, 48, 1)], - ); - } - - test_topLevelVariable_setLiteral() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int x = 1; -''', - code: r''' -void f() { - ({x}); -} -''', - [error(WarningCode.experimentalMemberUse, 44, 1)], - ); - } - - test_topLevelVariable_spreadElement() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -var x = [0]; -''', - code: r''' -void f() { - [...x]; -} -''', - [error(WarningCode.experimentalMemberUse, 46, 1)], - ); - } - - test_topLevelVariable_switchCase() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -const int x = 1; -''', - code: r''' -void f(int a) { - switch (a) { - case x: - break; - } -} -''', - [error(WarningCode.experimentalMemberUse, 69, 1)], - ); - } - - test_topLevelVariable_switchCase_language219() async { - newFile(externalLibPath, r''' -import 'package:meta/meta.dart'; - -@experimental -const int x = 1; -'''); - await assertErrorsInCode( - ''' -// @dart = 2.19 -import '$externalLibUri'; -void f(int a) { - switch (a) { - case x: - break; - } -} -''', - [error(WarningCode.experimentalMemberUse, 85, 1)], - ); - } - - test_topLevelVariable_switchStatement() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int x = 1; -''', - code: r''' -void f() { - switch (x) {} -} -''', - [error(WarningCode.experimentalMemberUse, 50, 1)], - ); - } - - test_topLevelVariable_switchStatement_language219() async { - newFile(externalLibPath, r''' -import 'package:meta/meta.dart'; - -@experimental -int x = 1; -'''); - await assertErrorsInCode( - ''' -// @dart = 2.19 -import '$externalLibUri'; -void f() { - switch (x) {} -} -''', - [error(WarningCode.experimentalMemberUse, 66, 1)], - ); - } - - test_topLevelVariable_unaryExpression() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -int x = 1; -''', - code: r''' -void f() { - -x; -} -''', - [error(WarningCode.experimentalMemberUse, 43, 1)], - ); - } - - test_topLevelVariable_variableDeclaration_initializer() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -var x = 1; -''', - code: r''' -void f() { - // ignore: unused_local_variable - var v = x; -} -''', - [error(WarningCode.experimentalMemberUse, 85, 1)], - ); - } - - test_topLevelVariable_whileStatement_condition() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -var x = true; -''', - code: r''' -void f() { - while (x) {} -} -''', - [error(WarningCode.experimentalMemberUse, 49, 1)], - ); - } - - @override - void verifyCreatedCollection() { - super.verifyCreatedCollection(); - assertPackageConfigWorkspaceFor(testFile); - } -} - -@reflectiveTest -class ExperimentalMixinTest extends _TestBase { - test_annotatedClass_typedef() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -mixin class Foo {} -typedef Foo2 = Foo; -''', - code: r''' -class Bar with Foo {} -''', - [error(WarningCode.experimentalMemberUse, 44, 3)], - ); - } - - test_annotatedClassTypeAlias() async { - await assertErrorsInCode2( - externalCode: r''' -mixin M {} -import 'package:meta/meta.dart'; - -@experimental -mixin class Foo = Object with M; -''', - code: r''' -class Bar with Foo {} -''', - [error(WarningCode.experimentalMemberUse, 44, 3)], - ); - } - - test_class() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -mixin class Foo {} -''', - code: r''' -class Bar with Foo {} -''', - [error(WarningCode.experimentalMemberUse, 44, 3)], - ); - } - - test_classTypeAlias() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -mixin class Foo {} -''', - code: r''' -class Bar = Object with Foo; -''', - [error(WarningCode.experimentalMemberUse, 53, 3)], - ); - } - - test_enum() async { - await assertErrorsInCode2( - externalCode: r''' -import 'package:meta/meta.dart'; - -@experimental -mixin class Foo {} -''', - code: r''' -enum Bar with Foo { - one, two; -} -''', - [error(WarningCode.experimentalMemberUse, 43, 3)], - ); - } - - test_insideLibrary() async { - await assertNoErrorsInCode(r''' -import 'package:meta/meta.dart'; - -@experimental -mixin class Foo {} -class Bar with Foo {} -'''); - } - - test_noAnnotation() async { - await assertNoErrorsInCode2( - externalCode: r''' -mixin class Foo {} -''', - code: r''' -class Bar with Foo {} -''', - ); - } -} - -class _TestBase extends PubPackageResolutionTest { - String get externalLibPath => '$workspaceRootPath/aaa/lib/a.dart'; - - String get externalLibUri => 'package:aaa/a.dart'; - - Future assertErrorsInCode2( - List expectedErrors, { - required String externalCode, - required String code, - }) async { - newFile(externalLibPath, externalCode); - - await assertErrorsInCode(''' -import '$externalLibUri'; -$code -''', expectedErrors); - } - - Future assertNoErrorsInCode2({ - required String externalCode, - required String code, - }) async { - newFile(externalLibPath, externalCode); - - await assertNoErrorsInCode(''' -import '$externalLibUri'; -$code -'''); - } - - @override - void setUp() { - super.setUp(); - - writeTestPackageConfig( - PackageConfigFileBuilder() - ..add(name: 'aaa', rootPath: '$workspaceRootPath/aaa'), - meta: true, - ); - } -} diff --git a/pkg/analyzer/test/src/diagnostics/non_const_argument_for_const_parameter_test.dart b/pkg/analyzer/test/src/diagnostics/non_const_argument_for_const_parameter_test.dart index d1f513e6bb1..cf2c9916f6b 100644 --- a/pkg/analyzer/test/src/diagnostics/non_const_argument_for_const_parameter_test.dart +++ b/pkg/analyzer/test/src/diagnostics/non_const_argument_for_const_parameter_test.dart @@ -22,8 +22,7 @@ class ConstAnnotationTest extends PubPackageResolutionTest { } test_adjacentLiteral_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; final c = C('H' 'ello'); @@ -31,12 +30,7 @@ final c = C('H' 'ello'); class C { C(@mustBeConst String s); } -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 92, 11), - ], - ); +'''); } test_binaryOperator_fails() async { @@ -53,17 +47,12 @@ class A { bool operator <(@mustBeConst A other) => false; } ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.nonConstArgumentForConstParameter, 86, 1), - error(WarningCode.experimentalMemberUse, 121, 11), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 86, 1)], ); } test_binaryOperator_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; void f(A a) { @@ -76,17 +65,11 @@ class A { bool operator <(@mustBeConst A other) => false; } -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 137, 11), - ], - ); +'''); } test_constExpression_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; void f() { @@ -98,17 +81,11 @@ void g(@mustBeConst C c) {} class C { const C(); } -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 89, 11), - ], - ); +'''); } test_constructor_constantLiteral_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; final c = C(3); @@ -116,12 +93,7 @@ final c = C(3); class C { C(@mustBeConst int i); } -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 83, 11), - ], - ); +'''); } test_constructor_variable_fails() async { @@ -137,29 +109,19 @@ class C { C(@mustBeConst int i); } ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.nonConstArgumentForConstParameter, 77, 1), - error(WarningCode.experimentalMemberUse, 97, 11), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 77, 1)], ); } test_functionExpression_constantLiteral_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; void f() { var g = (@mustBeConst int i) {}; g(3); } -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 74, 11), - ], - ); +'''); } test_functionExpression_variable_fails() async { @@ -172,28 +134,18 @@ void f(int x) { g(x); } ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 79, 11), - error(WarningCode.nonConstArgumentForConstParameter, 106, 1), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 106, 1)], ); } test_functionType_constantLiteral_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; void f(void g(@mustBeConst int i)) { g(3); } -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 66, 11), - ], - ); +'''); } test_functionType_variable_fails() async { @@ -205,17 +157,12 @@ void f(void g(@mustBeConst int i), int x) { g(x); } ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 66, 11), - error(WarningCode.nonConstArgumentForConstParameter, 99, 1), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 99, 1)], ); } test_indexExpression_constExpression_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; void f(A a) { @@ -228,13 +175,7 @@ class A { void operator []=(@mustBeConst int i, @mustBeConst A v) {} } -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 142, 11), - error(WarningCode.experimentalMemberUse, 162, 11), - ], - ); +'''); } test_indexExpression_nonConstant_fails() async { @@ -252,12 +193,7 @@ class A { void operator []=(@mustBeConst int i, @mustBeConst A v) {} } ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.nonConstArgumentForConstParameter, 74, 3), - error(WarningCode.experimentalMemberUse, 127, 11), - error(WarningCode.experimentalMemberUse, 147, 11), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 74, 3)], ); } @@ -274,29 +210,19 @@ class C { C(@mustBeConst String s); } ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.nonConstArgumentForConstParameter, 82, 5), - error(WarningCode.experimentalMemberUse, 106, 11), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 82, 5)], ); } test_localFunction_constantLiteral_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; void f() { void g(@mustBeConst int i) {} g(3); } -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 72, 11), - ], - ); +'''); } test_localFunction_variable_fails() async { @@ -309,17 +235,12 @@ void f(int x) { g(x); } ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 77, 11), - error(WarningCode.nonConstArgumentForConstParameter, 103, 1), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 103, 1)], ); } test_method_constantLiteral_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; void f(C c) => c.g(3); @@ -327,12 +248,7 @@ void f(C c) => c.g(3); class C { void g([@mustBeConst int? value]) {} } -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 96, 11), - ], - ); +'''); } test_method_variable_fails() async { @@ -348,17 +264,12 @@ class C { void g([@mustBeConst int? value]) {} } ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.nonConstArgumentForConstParameter, 84, 1), - error(WarningCode.experimentalMemberUse, 110, 11), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 84, 1)], ); } test_optionalNamed_constVariable_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; const v = 3; @@ -366,28 +277,17 @@ const v = 3; void f() => g(value: v); void g({@mustBeConst int? value}) {} -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 100, 11), - ], - ); +'''); } test_optionalNamed_noArgument_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; void f() => g(); void g({@mustBeConst int? value}) {} -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 78, 11), - ], - ); +'''); } test_optionalNamed_variable_fails() async { @@ -401,17 +301,12 @@ void f() => g(value: v); void g({@mustBeConst int? value}) {} ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.nonConstArgumentForConstParameter, 79, 8), - error(WarningCode.experimentalMemberUse, 100, 11), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 79, 8)], ); } test_optionalPositional_constVariable_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; const v = 3; @@ -419,28 +314,17 @@ const v = 3; void f() => g(v); void g([@mustBeConst int? value]) {} -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 93, 11), - ], - ); +'''); } test_optionalPositional_noArgument_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; void f() => g(); void g([@mustBeConst int? value]) {} -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 78, 11), - ], - ); +'''); } test_optionalPositional_variable_fails() async { @@ -454,11 +338,7 @@ void f() => g(v); void g([@mustBeConst int? value]) {} ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.nonConstArgumentForConstParameter, 79, 1), - error(WarningCode.experimentalMemberUse, 93, 11), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 79, 1)], ); } @@ -472,11 +352,7 @@ class A { A.named(int i) : this(i); } ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 66, 11), - error(WarningCode.nonConstArgumentForConstParameter, 110, 1), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 110, 1)], ); } @@ -486,8 +362,7 @@ class A { // are separate. For example, they can have separate annotations. // TODO(srawlins): It still seems that to be consistent, we should report // `A.named(int i)`. - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; class A { @@ -497,33 +372,21 @@ class A { final v = 3; var a = A.named(v); -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 66, 11), - ], - ); +'''); } test_requiredNamed_constantLiteral_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; void f() => g(value: 3); void g({@mustBeConst required int value}) {} -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 86, 11), - ], - ); +'''); } test_requiredNamed_constVariable_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; const v = 3; @@ -531,17 +394,11 @@ const v = 3; void f() => g(value: v); void g({@mustBeConst required int value}) {} -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 100, 11), - ], - ); +'''); } test_requiredPositional_constVariable_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; const v = 3; @@ -549,17 +406,11 @@ const v = 3; void f() => g(v); void g(@mustBeConst int value) {} -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 92, 11), - ], - ); +'''); } test_requiredPositional_list_constVariable_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; const v = [3,4]; @@ -567,12 +418,7 @@ const v = [3,4]; void f() => g(v); void g(@mustBeConst List value) {} -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 96, 11), - ], - ); +'''); } test_requiredPositional_localVariable_fails() async { @@ -584,17 +430,12 @@ void f(int value) => g(value); void g(@mustBeConst int value) {} ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.nonConstArgumentForConstParameter, 74, 5), - error(WarningCode.experimentalMemberUse, 91, 11), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 74, 5)], ); } test_requiredPositional_map_constVariable_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; const v = {'k1': 3, 'k2': 4}; @@ -602,12 +443,7 @@ const v = {'k1': 3, 'k2': 4}; void f() => g(v); void g(@mustBeConst Map value) {} -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 109, 11), - ], - ); +'''); } test_requiredPositional_topLevelVariable_fails() async { @@ -621,11 +457,7 @@ void f() => g(v); void g(@mustBeConst int value) {} ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.nonConstArgumentForConstParameter, 79, 1), - error(WarningCode.experimentalMemberUse, 92, 11), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 79, 1)], ); } @@ -641,17 +473,12 @@ void f() { set i(@mustBeConst int? value) {} ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.nonConstArgumentForConstParameter, 83, 1), - error(WarningCode.experimentalMemberUse, 96, 11), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 83, 1)], ); } test_setter_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; void f() { @@ -659,17 +486,11 @@ void f() { } set i(@mustBeConst int? value) {} -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 81, 11), - ], - ); +'''); } test_subclassesDontInherit() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; final v = 3; @@ -684,17 +505,11 @@ class B extends A { @override void f(int i) {} } -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 115, 11), - ], - ); +'''); } test_superclassCanBeOverriden_cast_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; final v = 3; @@ -709,12 +524,7 @@ class B extends A { @override void f(@mustBeConst int i) {} } -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 174, 11), - ], - ); +'''); } test_superclassCanBeOverriden_noCast_fails() async { @@ -735,11 +545,7 @@ class B extends A { void f(@mustBeConst int i) {} } ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.nonConstArgumentForConstParameter, 81, 1), - error(WarningCode.experimentalMemberUse, 167, 11), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 81, 1)], ); } @@ -756,18 +562,13 @@ class B extends A { B(int i) : super(i); } ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 66, 11), - error(WarningCode.nonConstArgumentForConstParameter, 128, 1), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 128, 1)], ); } test_superParameter_variable_succeeds() async { // TODO(srawlins): It seems that to be consistent, we should `super.i`. - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; class A { @@ -777,17 +578,11 @@ class A { class B extends A { B(super.i); } -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 66, 11), - ], - ); +'''); } test_typedef_function_constantLiteral_succeeds() async { - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; typedef Td = void Function(@mustBeConst int); @@ -795,18 +590,12 @@ typedef Td = void Function(@mustBeConst int); void f(Td td) { td(3); } -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 79, 11), - ], - ); +'''); } test_typedef_function_variable_succeeds() async { // An annotation on a parameter in a function type is not supported. - await assertErrorsInCode( - r''' + await assertNoErrorsInCode(r''' import 'package:meta/meta.dart' show mustBeConst; typedef Td = void Function(@mustBeConst int); @@ -814,12 +603,7 @@ typedef Td = void Function(@mustBeConst int); void f(int x, Td td) { td(x); } -''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 79, 11), - ], - ); +'''); } test_typedef_nonFunction_variable_fails() async { @@ -835,11 +619,7 @@ class C { void g(int x) => T(x); ''', - [ - error(WarningCode.experimentalMemberUse, 37, 11), - error(WarningCode.experimentalMemberUse, 82, 11), - error(WarningCode.nonConstArgumentForConstParameter, 124, 1), - ], + [error(WarningCode.nonConstArgumentForConstParameter, 124, 1)], ); } } diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart index 02a7ab4b33e..c39585a7486 100644 --- a/pkg/analyzer/test/src/diagnostics/test_all.dart +++ b/pkg/analyzer/test/src/diagnostics/test_all.dart @@ -258,7 +258,6 @@ import 'expected_two_map_pattern_type_arguments_test.dart' import 'expected_two_map_type_arguments_test.dart' as expected_two_map_type_arguments; import 'experiment_not_enabled_test.dart' as experiment_not_enabled; -import 'experimental_member_use_test.dart' as experimental_member_use; import 'export_internal_library_test.dart' as export_internal_library; import 'export_of_non_library_test.dart' as export_of_non_library; import 'expression_in_map_test.dart' as expression_in_map; @@ -1126,7 +1125,6 @@ main() { expected_two_map_pattern_type_arguments.main(); expected_two_map_type_arguments.main(); experiment_not_enabled.main(); - experimental_member_use.main(); export_internal_library.main(); export_of_non_library.main(); expression_in_map.main(); diff --git a/pkg/analyzer/test/verify_diagnostics_test.dart b/pkg/analyzer/test/verify_diagnostics_test.dart index 9b1ca3d0ade..3545fc2a88e 100644 --- a/pkg/analyzer/test/verify_diagnostics_test.dart +++ b/pkg/analyzer/test/verify_diagnostics_test.dart @@ -192,8 +192,6 @@ class DocumentationValidator { 'WarningCode.TEXT_DIRECTION_CODE_POINT_IN_LITERAL', // Produces two diagnostics out of necessity. 'WarningCode.UNNECESSARY_NULL_COMPARISON_NEVER_NULL_FALSE', - // Produced two diagnostics because `mustBeConst` is experimental. - 'WarningCode.NON_CONST_ARGUMENT_FOR_CONST_PARAMETER', ]; /// The buffer to which validation errors are written. diff --git a/pkg/analyzer_plugin/pubspec.yaml b/pkg/analyzer_plugin/pubspec.yaml index 0078891dd75..104ce7cc1b5 100644 --- a/pkg/analyzer_plugin/pubspec.yaml +++ b/pkg/analyzer_plugin/pubspec.yaml @@ -11,7 +11,7 @@ resolution: workspace dependencies: # See the release policy for managing this dependency at # pkg/analyzer/doc/implementation/releasing.md. - analyzer: 8.3.0-dev + analyzer: 8.2.0 collection: ^1.15.0 dart_style: ^3.0.0 pub_semver: ^2.1.0 diff --git a/pkg/analyzer_testing/pubspec.yaml b/pkg/analyzer_testing/pubspec.yaml index f8095255819..963ea05329a 100644 --- a/pkg/analyzer_testing/pubspec.yaml +++ b/pkg/analyzer_testing/pubspec.yaml @@ -11,7 +11,7 @@ resolution: workspace dependencies: # See the release policy for managing this dependency at # pkg/analyzer/doc/implementation/releasing.md. - analyzer: 8.3.0-dev + analyzer: 8.2.0 meta: ^1.10.0 path: ^1.9.0 test: ^1.25.0 diff --git a/pkg/linter/test/rules/analyzer_public_api_test.dart b/pkg/linter/test/rules/analyzer_public_api_test.dart index 984eb5739f3..9cb15641c87 100644 --- a/pkg/linter/test/rules/analyzer_public_api_test.dart +++ b/pkg/linter/test/rules/analyzer_public_api_test.dart @@ -2188,7 +2188,6 @@ class C { '''); await assertDiagnosticsInFile(libFile, [ lint(72, 1, name: experimentalInconsistency), - error(WarningCode.experimentalMemberUse, 74, 1), ]); } @@ -2218,7 +2217,6 @@ class C extends B {} '''); await assertDiagnosticsInFile(libFile, [ lint(66, 1, name: experimentalInconsistency), - error(WarningCode.experimentalMemberUse, 76, 1), ]); } @@ -2246,7 +2244,6 @@ class C implements B {} '''); await assertDiagnosticsInFile(libFile, [ lint(66, 1, name: experimentalInconsistency), - error(WarningCode.experimentalMemberUse, 79, 1), ]); } @@ -2274,7 +2271,6 @@ class C {} '''); await assertDiagnosticsInFile(libFile, [ lint(66, 1, name: experimentalInconsistency), - error(WarningCode.experimentalMemberUse, 78, 1), ]); } @@ -2302,7 +2298,6 @@ class C with B {} '''); await assertDiagnosticsInFile(libFile, [ lint(66, 1, name: experimentalInconsistency), - error(WarningCode.experimentalMemberUse, 73, 1), ]); } @@ -2330,7 +2325,6 @@ extension E on B {} '''); await assertDiagnosticsInFile(libFile, [ lint(70, 1, name: experimentalInconsistency), - error(WarningCode.experimentalMemberUse, 75, 1), ]); } @@ -2358,7 +2352,6 @@ void F(B b) {} '''); await assertDiagnosticsInFile(libFile, [ lint(65, 1, name: experimentalInconsistency), - error(WarningCode.experimentalMemberUse, 67, 1), ]); } @@ -2386,7 +2379,6 @@ typedef void F(B b); '''); await assertDiagnosticsInFile(libFile, [ lint(73, 1, name: experimentalInconsistency), - error(WarningCode.experimentalMemberUse, 75, 1), ]); } @@ -2414,7 +2406,6 @@ typedef void F(T t); '''); await assertDiagnosticsInFile(libFile, [ lint(73, 1, name: experimentalInconsistency), - error(WarningCode.experimentalMemberUse, 85, 1), ]); } @@ -2442,7 +2433,6 @@ mixin M on B {} '''); await assertDiagnosticsInFile(libFile, [ lint(66, 1, name: experimentalInconsistency), - error(WarningCode.experimentalMemberUse, 71, 1), ]); }