Version 2.12.0-126.0.dev
Merge commit '3f8ce51efd6f16e9630ea85a3f22c1c3536e7b9f' into 'dev'
diff --git a/pkg/analyzer/lib/src/error/imports_verifier.dart b/pkg/analyzer/lib/src/error/imports_verifier.dart
index 8a9b8c3..713b451 100644
--- a/pkg/analyzer/lib/src/error/imports_verifier.dart
+++ b/pkg/analyzer/lib/src/error/imports_verifier.dart
@@ -447,9 +447,21 @@
// Find import directives using namespaces.
for (ImportDirective importDirective in _allImports) {
Namespace namespace = _computeNamespace(importDirective);
- if (namespace?.get(extensionElement.name) == extensionElement) {
- _unusedImports.remove(importDirective);
- _removeFromUnusedShownNamesMap(extensionElement, importDirective);
+ var prefix = importDirective.prefix?.name;
+ var elementName = extensionElement.name;
+ if (prefix == null) {
+ if (namespace?.get(elementName) == extensionElement) {
+ _unusedImports.remove(importDirective);
+ _removeFromUnusedShownNamesMap(extensionElement, importDirective);
+ }
+ } else {
+ // An extension might be used solely because one or more instance
+ // members are referenced, which does not require explicit use of the
+ // prefix. We still indicate that the import directive is used.
+ if (namespace?.getPrefixed(prefix, elementName) == extensionElement) {
+ _unusedImports.remove(importDirective);
+ _removeFromUnusedShownNamesMap(extensionElement, importDirective);
+ }
}
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/unused_import_test.dart b/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
index de780d7..04fd740 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
@@ -318,6 +318,34 @@
''');
}
+ test_extension_prefixed_isUsed() async {
+ newFile('$testPackageLibPath/lib1.dart', content: r'''
+extension E on String {
+ String empty() => '';
+}
+''');
+ await assertNoErrorsInCode('''
+import 'lib1.dart' as lib1;
+
+f() {
+ ''.empty();
+}
+''');
+ }
+
+ test_extension_prefixed_notUsed() async {
+ newFile('$testPackageLibPath/lib1.dart', content: r'''
+extension E on String {
+ String empty() => '';
+}
+''');
+ await assertErrorsInCode('''
+import 'lib1.dart' as lib1;
+''', [
+ error(HintCode.UNUSED_IMPORT, 7, 11),
+ ]);
+ }
+
test_extension_static_field() async {
newFile('$testPackageLibPath/lib1.dart', content: r'''
extension E on String {
diff --git a/tools/VERSION b/tools/VERSION
index 7ae2f46..ef0ab58 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 12
PATCH 0
-PRERELEASE 125
+PRERELEASE 126
PRERELEASE_PATCH 0
\ No newline at end of file