Version 2.14.0-166.0.dev

Merge commit '0742ed66a70a8cc9acf57ea4448eb251e66bd564' into 'dev'
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
index db58a6d..2dfbd42 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
@@ -60,7 +60,7 @@
         var node = _findNode();
         if (node != null) {
           var uriEnd = node.uri.end;
-          var prefixEnd = element.prefixOffset + prefix.nameLength;
+          var prefixEnd = prefix.nameOffset + prefix.nameLength;
           edit = newSourceEdit_range(
               range.startOffsetEndOffset(uriEnd, prefixEnd), '');
         }
@@ -72,7 +72,7 @@
             edit = newSourceEdit_range(SourceRange(uriEnd, 0), ' as $newName');
           }
         } else {
-          var offset = element.prefixOffset;
+          var offset = prefix.nameOffset;
           var length = prefix.nameLength;
           edit = newSourceEdit_range(SourceRange(offset, length), newName);
         }
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 2dd64a6..6853504 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -2,6 +2,7 @@
 * Added `StringInterpolation.firstString` and `lastString`, to express
   explicitly  that there are always (possibly empty) strings as the first
   and the last elements of an interpolation.
+* Deprecated `ImportElement.prefixOffset`, use `prefix.nameOffset` instead.
 
 ## 1.7.0
 * Require `meta: ^1.4.0`.
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 596c1b6..eb07ad0 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -1284,6 +1284,7 @@
   /// Return the offset of the prefix of this import in the file that contains
   /// this import directive, or `-1` if this import is synthetic, does not have
   /// a prefix, or otherwise does not have an offset.
+  @Deprecated('Use prefix.nameOffset instead')
   int get prefixOffset;
 }
 
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index e41c39c..b8b5942 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -3434,9 +3434,6 @@
   PrefixElement? prefix;
 
   @override
-  int prefixOffset = -1;
-
-  @override
   List<NamespaceCombinator> combinators = const [];
 
   /// The cached value of [namespace].
@@ -3474,6 +3471,10 @@
         NamespaceBuilder().createImportNamespaceForDirective(this);
   }
 
+  @Deprecated('Use prefix.nameOffset instead')
+  @override
+  int get prefixOffset => prefix?.nameOffset ?? -1;
+
   @override
   T? accept<T>(ElementVisitor<T> visitor) => visitor.visitImportElement(this);
 
diff --git a/pkg/analyzer/lib/src/summary2/informative_data.dart b/pkg/analyzer/lib/src/summary2/informative_data.dart
index 132f6fd..3e691ca 100644
--- a/pkg/analyzer/lib/src/summary2/informative_data.dart
+++ b/pkg/analyzer/lib/src/summary2/informative_data.dart
@@ -340,7 +340,6 @@
       (element, info) {
         element as ImportElementImpl;
         element.nameOffset = info.nameOffset;
-        element.prefixOffset = info.prefixOffset;
 
         var prefix = element.prefix;
         if (prefix is PrefixElementImpl) {
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index e3e0548..bd68a35 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -442,11 +442,12 @@
 
       writeIf(e.isDeferred, ' deferred');
 
-      if (e.prefix != null) {
+      var prefix = e.prefix;
+      if (prefix != null) {
         buffer.write(' as ');
-        writeName(e.prefix!);
+        writeName(prefix);
         if (withOffsets) {
-          buffer.write('(${e.prefixOffset})');
+          buffer.write('(${prefix.nameOffset})');
         }
       }
 
diff --git a/runtime/bin/socket_base.cc b/runtime/bin/socket_base.cc
index 7a62ab8..d97ced4 100644
--- a/runtime/bin/socket_base.cc
+++ b/runtime/bin/socket_base.cc
@@ -34,7 +34,8 @@
   }
 }
 
-intptr_t SocketAddress::GetAddrLength(const RawAddr& addr) {
+intptr_t SocketAddress::GetAddrLength(const RawAddr& addr,
+                                      bool unnamed_unix_socket) {
   ASSERT((addr.ss.ss_family == AF_INET) || (addr.ss.ss_family == AF_INET6) ||
          (addr.ss.ss_family == AF_UNIX));
   switch (addr.ss.ss_family) {
@@ -53,7 +54,7 @@
       // trailing null bytes on purpose.
       // https://github.com/dart-lang/sdk/issues/46158
       intptr_t nulls = 0;
-      if (addr.un.sun_path[0] == '\0') {
+      if (!unnamed_unix_socket && addr.un.sun_path[0] == '\0') {
         intptr_t i = sizeof(addr.un.sun_path) - 1;
         while (addr.un.sun_path[i] == '\0') {
           nulls++;
diff --git a/runtime/bin/socket_base.h b/runtime/bin/socket_base.h
index bf9405e..07ee42e 100644
--- a/runtime/bin/socket_base.h
+++ b/runtime/bin/socket_base.h
@@ -69,7 +69,8 @@
   const char* as_string() const { return as_string_; }
   const RawAddr& addr() const { return addr_; }
 
-  static intptr_t GetAddrLength(const RawAddr& addr);
+  static intptr_t GetAddrLength(const RawAddr& addr,
+                                bool unnamed_unix_socket = false);
   static intptr_t GetInAddrLength(const RawAddr& addr);
   static bool AreAddressesEqual(const RawAddr& a, const RawAddr& b);
   static void GetSockAddr(Dart_Handle obj, RawAddr* addr);
diff --git a/runtime/bin/socket_base_android.cc b/runtime/bin/socket_base_android.cc
index 9085f14..68163c6 100644
--- a/runtime/bin/socket_base_android.cc
+++ b/runtime/bin/socket_base_android.cc
@@ -40,7 +40,8 @@
       as_string_[0] = 0;
     }
   }
-  socklen_t salen = GetAddrLength(*reinterpret_cast<RawAddr*>(sa));
+  socklen_t salen =
+      GetAddrLength(*reinterpret_cast<RawAddr*>(sa), unnamed_unix_socket);
   memmove(reinterpret_cast<void*>(&addr_), sa, salen);
 }
 
diff --git a/runtime/bin/socket_base_linux.cc b/runtime/bin/socket_base_linux.cc
index 8734aa6..89e579f 100644
--- a/runtime/bin/socket_base_linux.cc
+++ b/runtime/bin/socket_base_linux.cc
@@ -40,7 +40,8 @@
       as_string_[0] = 0;
     }
   }
-  socklen_t salen = GetAddrLength(*reinterpret_cast<RawAddr*>(sa));
+  socklen_t salen =
+      GetAddrLength(*reinterpret_cast<RawAddr*>(sa), unnamed_unix_socket);
   memmove(reinterpret_cast<void*>(&addr_), sa, salen);
 }
 
diff --git a/runtime/bin/socket_base_macos.cc b/runtime/bin/socket_base_macos.cc
index 74bf924..0b259ee 100644
--- a/runtime/bin/socket_base_macos.cc
+++ b/runtime/bin/socket_base_macos.cc
@@ -39,7 +39,8 @@
       as_string_[0] = 0;
     }
   }
-  socklen_t salen = GetAddrLength(*reinterpret_cast<RawAddr*>(sa));
+  socklen_t salen =
+      GetAddrLength(*reinterpret_cast<RawAddr*>(sa), unnamed_unix_socket);
   memmove(reinterpret_cast<void*>(&addr_), sa, salen);
 }
 
diff --git a/tests/standalone/io/unix_socket_test.dart b/tests/standalone/io/unix_socket_test.dart
index d5ee7cb..7c84792 100644
--- a/tests/standalone/io/unix_socket_test.dart
+++ b/tests/standalone/io/unix_socket_test.dart
@@ -179,6 +179,11 @@
   try {
     var socketAddress = '@hidden';
     var abstractSocketServer = getAbstractSocketTestFileName();
+    // check if the executable exists, some build configurations do not
+    // build it (e.g: precompiled simarm/simarm64)
+    if (!File(abstractSocketServer).existsSync()) {
+      return;
+    }
     process = await Process.start(abstractSocketServer, [socketAddress]);
     var serverAddress =
         InternetAddress(socketAddress, type: InternetAddressType.unix);
diff --git a/tests/standalone_2/io/unix_socket_test.dart b/tests/standalone_2/io/unix_socket_test.dart
index aa86ae8..0549fea 100644
--- a/tests/standalone_2/io/unix_socket_test.dart
+++ b/tests/standalone_2/io/unix_socket_test.dart
@@ -181,6 +181,11 @@
   try {
     var socketAddress = '@hidden';
     var abstractSocketServer = getAbstractSocketTestFileName();
+    // check if the executable exists, some build configurations do not
+    // build it (e.g: precompiled simarm/simarm64)
+    if (!File(abstractSocketServer).existsSync()) {
+      return;
+    }
     process = await Process.start(abstractSocketServer, [socketAddress]);
     var serverAddress =
         InternetAddress(socketAddress, type: InternetAddressType.unix);
diff --git a/tools/VERSION b/tools/VERSION
index e162905..41f2002 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 165
+PRERELEASE 166
 PRERELEASE_PATCH 0
\ No newline at end of file