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