[element model] migrate `implementation_imports`
Bug: https://github.com/dart-lang/linter/issues/5099
Change-Id: Idffbe4e5072fbdc5900bf8cfa74bb2b42b336332
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/391520
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
diff --git a/pkg/linter/analyzer_use_new_elements.txt b/pkg/linter/analyzer_use_new_elements.txt
index d78cd8f..cc5b1ba 100644
--- a/pkg/linter/analyzer_use_new_elements.txt
+++ b/pkg/linter/analyzer_use_new_elements.txt
@@ -71,6 +71,7 @@
lib/src/rules/file_names.dart
lib/src/rules/flutter_style_todos.dart
lib/src/rules/hash_and_equals.dart
+lib/src/rules/implementation_imports.dart
lib/src/rules/implicit_call_tearoffs.dart
lib/src/rules/implicit_reopen.dart
lib/src/rules/invalid_case_patterns.dart
@@ -163,6 +164,7 @@
lib/src/rules/type_annotate_public_apis.dart
lib/src/rules/type_literal_in_constant_pattern.dart
lib/src/rules/unintended_html_in_doc_comment.dart
+lib/src/rules/unnecessary_await_in_return.dart
lib/src/rules/unnecessary_brace_in_string_interps.dart
lib/src/rules/unnecessary_breaks.dart
lib/src/rules/unnecessary_const.dart
diff --git a/pkg/linter/lib/src/rules/implementation_imports.dart b/pkg/linter/lib/src/rules/implementation_imports.dart
index a0d4dc1..5a894bb 100644
--- a/pkg/linter/lib/src/rules/implementation_imports.dart
+++ b/pkg/linter/lib/src/rules/implementation_imports.dart
@@ -4,8 +4,10 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/dart/element/element2.dart';
import '../analyzer.dart';
+import '../extensions.dart';
const _desc = r"Don't import implementation files from another package.";
@@ -46,30 +48,32 @@
@override
void registerNodeProcessors(
NodeLintRegistry registry, LinterContext context) {
- var visitor = _Visitor(this);
+ var libraryUri = context.libraryElement2?.uri;
+ if (libraryUri == null) return;
+
+ // If the source URI is not a `package` URI bail out.
+ if (!isPackage(libraryUri)) return;
+
+ var visitor = _Visitor(this, libraryUri);
registry.addImportDirective(this, visitor);
}
}
class _Visitor extends SimpleAstVisitor<void> {
final LintRule rule;
+ final Uri sourceUri;
- _Visitor(this.rule);
+ _Visitor(this.rule, this.sourceUri);
@override
void visitImportDirective(ImportDirective node) {
- var importUri = node.element?.importedLibrary?.source.uri;
- var sourceUri = node.element?.source.uri;
+ Uri? importUri;
+ if (node.libraryImport?.uri case DirectiveUriWithSource importedLibrary) {
+ importUri = importedLibrary.source.uri;
+ }
// Test for 'package:*/src/'.
- if (!isImplementation(importUri)) {
- return;
- }
-
- // If the source URI is not a `package` URI bail out.
- if (!isPackage(sourceUri)) {
- return;
- }
+ if (!isImplementation(importUri)) return;
if (!samePackage(importUri, sourceUri)) {
rule.reportLint(node.uri);