Skip to content

Commit 533f833

Browse files
stereotype441Commit Queue
authored andcommitted
Reapply "[analyzer] Add experimental_member_use warning."
This reverts commit 3bdbced. This change was originally landed as commit 3923958, however it had to be reverted due to breaking the dart->flutter roll. Change-Id: I6a6a6964176a276be1b9b01c74a4500488470219 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/452528 Reviewed-by: Samuel Rawlins <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]> Commit-Queue: Paul Berry <[email protected]>
1 parent 2afa2e8 commit 533f833

File tree

12 files changed

+2979
-71
lines changed

12 files changed

+2979
-71
lines changed

pkg/analysis_server_plugin/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ resolution: workspace
1111
dependencies:
1212
# See the release policy for managing this dependency at
1313
# pkg/analyzer/doc/implementation/releasing.md.
14-
analyzer: 8.3.0
14+
analyzer: 8.4.0-dev
1515
analyzer_plugin: 0.13.9
1616
meta: ^1.16.0
1717
yaml: ^3.1.0

pkg/analyzer/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 8.4.0-dev
2+
* Add the `experimental_member_use` warning, which warns about any reference to
3+
a declaration annotated with `@experimental`.
4+
15
## 8.3.0
26
* Deprecate `TypeDefiningElement`, check for specific elements.
37
* Deprecate `TypeDefiningFragment`, check for specific fragments.

pkg/analyzer/lib/src/error/best_practices_verifier.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import 'package:analyzer/src/error/deprecated_member_use_verifier.dart';
3333
import 'package:analyzer/src/error/doc_comment_verifier.dart';
3434
import 'package:analyzer/src/error/element_usage_frontier_detector.dart';
3535
import 'package:analyzer/src/error/error_handler_verifier.dart';
36+
import 'package:analyzer/src/error/experimental_member_use_verifier.dart';
3637
import 'package:analyzer/src/error/must_call_super_verifier.dart';
3738
import 'package:analyzer/src/error/null_safe_api_verifier.dart';
3839
import 'package:analyzer/src/error/widget_preview_verifier.dart';
@@ -123,6 +124,13 @@ class BestPracticesVerifier extends RecursiveAstVisitor<void> {
123124
diagnosticReporter: _diagnosticReporter,
124125
),
125126
),
127+
ElementUsageFrontierDetector(
128+
workspacePackage: workspacePackage,
129+
elementUsageSet: const ExperimentalElementUsageSet(),
130+
elementUsageReporter: ExperimentalElementUsageReporter(
131+
diagnosticReporter: _diagnosticReporter,
132+
),
133+
),
126134
],
127135
_errorHandlerVerifier = ErrorHandlerVerifier(
128136
_diagnosticReporter,
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// Copyright (c) 2025, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:analyzer/dart/ast/syntactic_entity.dart';
6+
import 'package:analyzer/dart/element/element.dart';
7+
import 'package:analyzer/error/listener.dart';
8+
import 'package:analyzer/src/error/codes.dart';
9+
import 'package:analyzer/src/error/element_usage_detector.dart';
10+
11+
/// Instance of [ElementUsageReporter] for reporting uses of experimental
12+
/// elements.
13+
class ExperimentalElementUsageReporter implements ElementUsageReporter<()> {
14+
final DiagnosticReporter _diagnosticReporter;
15+
16+
ExperimentalElementUsageReporter({
17+
required DiagnosticReporter diagnosticReporter,
18+
}) : _diagnosticReporter = diagnosticReporter;
19+
20+
@override
21+
void report(
22+
SyntacticEntity errorEntity,
23+
String displayName,
24+
() tagInfo, {
25+
required bool isInSamePackage,
26+
}) {
27+
// Use of an experimental API from within the same package is OK
28+
if (isInSamePackage) return;
29+
30+
_diagnosticReporter.atEntity(
31+
errorEntity,
32+
WarningCode.experimentalMemberUse,
33+
arguments: [displayName],
34+
);
35+
}
36+
}
37+
38+
/// Instance of [ElementUsageSet] for experimental elements.
39+
class ExperimentalElementUsageSet implements ElementUsageSet<()> {
40+
const ExperimentalElementUsageSet();
41+
42+
@override
43+
()? getTagInfo(Element element) =>
44+
element.metadata.annotations.any((e) => e.isExperimental) ? () : null;
45+
}

pkg/analyzer/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: analyzer
2-
version: 8.3.0
2+
version: 8.4.0-dev
33
description: >-
44
This package provides a library that performs static analysis of Dart code.
55
repository: https://github.com/dart-lang/sdk/tree/main/pkg/analyzer

0 commit comments

Comments
 (0)