Revert "[analyzer] Add experimental_member_use warning."
This reverts commit 3923958595.
Reason for revert: Broke dart->flutter roll https://github.com/flutter/flutter/pull/176234 due to customer testing
Original change's description:
> [analyzer] Add experimental_member_use warning.
>
> Adds the implementation of the `experimental_member_use` warning
> (whose diagnostic code was introduced in
> https://dart-review.googlesource.com/c/sdk/+/451341).
>
> There is very little implementation logic, since the bulk of the
> implementation is shared with the existing `deprecated_member_use`
> warning. Unit tests are adapted from the `deprecated_member_use` unit
> tests.
>
> Since the tests in `non_const_argument_for_const_parameter_test.dart`
> use the annotation `@mustBeConst`, which is marked `@experimental`,
> they had to be modified to expect the new warning.
>
> Change-Id: I6a6a69645bb072b29166b7617b480a890b2bb5aa
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/450970
> Reviewed-by: Samuel Rawlins <srawlins@google.com>
> Commit-Queue: Paul Berry <paulberry@google.com>
Change-Id: I6a6a696447ed61b133e17ffc63ca6067fdbcc1ca
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/452526
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<void> {
|
||||
diagnosticReporter: _diagnosticReporter,
|
||||
),
|
||||
),
|
||||
ElementUsageFrontierDetector(
|
||||
workspacePackage: workspacePackage,
|
||||
elementUsageSet: const ExperimentalElementUsageSet(),
|
||||
elementUsageReporter: ExperimentalElementUsageReporter(
|
||||
diagnosticReporter: _diagnosticReporter,
|
||||
),
|
||||
),
|
||||
],
|
||||
_errorHandlerVerifier = ErrorHandlerVerifier(
|
||||
_diagnosticReporter,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+67
-287
@@ -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<int> 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<String, int> 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)],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<T extends B> {}
|
||||
''');
|
||||
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 extends B>(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),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user