diff --git a/pkg/analyzer/lib/src/dart/analysis/library_context.dart b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
index a383d72..7012a9a 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_context.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_context.dart
@@ -183,6 +183,8 @@
         counterUnlinkedLinkedBytes += resolutionBytes.length;
 
         librariesLinkedTimer.stop();
+        // TODO(scheglov) Uncomment to keep linking elements.
+        // return;
       } else {
         // TODO(scheglov) Take / clear parsed units in files.
         bytesGet += resolutionBytes.length;
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 3fd6aab..852469a 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -751,6 +751,11 @@
   ConstructorElement? getNamedConstructor(String name) =>
       getNamedConstructorFromList(name, constructors);
 
+  void resetMixinApplicationConstructors() {
+    assert(isMixinApplication);
+    _constructors = _Sentinel.constructorElement;
+  }
+
   void setLinkedData(Reference reference, ElementLinkedData linkedData) {
     this.reference = reference;
     reference.element = this;
@@ -3846,14 +3851,8 @@
 
   @override
   Namespace get publicNamespace {
-    if (_publicNamespace != null) return _publicNamespace!;
-
-    if (linkedData != null) {
-      return _publicNamespace =
-          NamespaceBuilder().createPublicNamespaceForLibrary(this);
-    }
-
-    return _publicNamespace!;
+    return _publicNamespace ??=
+        NamespaceBuilder().createPublicNamespaceForLibrary(this);
   }
 
   set publicNamespace(Namespace publicNamespace) {
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index e9a453d..f8033c7 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/src/summary2/library_builder.dart';
 import 'package:analyzer/src/summary2/link.dart';
 import 'package:analyzer/src/summary2/reference.dart';
+import 'package:analyzer/src/util/comment.dart';
 import 'package:collection/collection.dart';
 
 class ElementBuilder extends ThrowingAstVisitor<void> {
@@ -82,6 +83,9 @@
     var firstDirective = unit.directives.firstOrNull;
     if (firstDirective != null) {
       _libraryElement.metadata = _buildAnnotations(firstDirective.metadata);
+      _libraryElement.documentationComment = getCommentNodeRawText(
+        firstDirective.documentationComment,
+      );
     }
   }
 
@@ -94,6 +98,7 @@
     element.isAbstract = node.isAbstract;
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
+    _setDocumentation(element, node);
 
     nameNode.staticElement = element;
     _linker.elementNodes[element] = node;
@@ -126,6 +131,7 @@
     element.isMixinApplication = true;
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
+    _setDocumentation(element, node);
 
     nameNode.staticElement = element;
     _linker.elementNodes[element] = node;
@@ -151,17 +157,23 @@
   void visitConstructorDeclaration(
     covariant ConstructorDeclarationImpl node,
   ) {
-    var nameNode = node.name;
-    var name = nameNode?.name ?? '';
-    var nameOffset = nameNode?.offset ?? -1;
+    var nameNode = node.name ?? node.returnType;
+    var name = node.name?.name ?? '';
+    var nameOffset = nameNode.offset;
 
     var element = ConstructorElementImpl(name, nameOffset);
-    element.constantInitializers = node.initializers;
     element.isConst = node.constKeyword != null;
     element.isExternal = node.externalKeyword != null;
     element.isFactory = node.factoryKeyword != null;
     element.metadata = _buildAnnotations(node.metadata);
+    element.nameEnd = nameNode.end;
+    element.periodOffset = node.period?.offset;
     _setCodeRange(element, node);
+    _setDocumentation(element, node);
+
+    if (element.isConst || element.isFactory) {
+      element.constantInitializers = node.initializers;
+    }
 
     node.declaredElement = element;
     _linker.elementNodes[element] = node;
@@ -188,6 +200,7 @@
     var element = EnumElementImpl(name, nameOffset);
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
+    _setDocumentation(element, node);
 
     nameNode.staticElement = element;
     _linker.elementNodes[element] = node;
@@ -222,6 +235,7 @@
     var element = ExtensionElementImpl(name, nameOffset);
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
+    _setDocumentation(element, node);
 
     node.declaredElement = element;
     _linker.elementNodes[element] = node;
@@ -280,6 +294,8 @@
       element.isLate = node.fields.isLate;
       element.isStatic = node.isStatic;
       element.metadata = _buildAnnotations(node.metadata);
+      _setCodeRange(element, variable);
+      _setDocumentation(element, node);
 
       if (node.fields.type == null) {
         element.hasImplicitType = true;
@@ -401,6 +417,7 @@
     executableElement.isGenerator = body.isGenerator;
     executableElement.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(executableElement, node);
+    _setDocumentation(executableElement, node);
 
     nameNode.staticElement = executableElement;
     _linker.elementNodes[executableElement] = node;
@@ -432,6 +449,7 @@
     element.isFunctionTypeAliasBased = true;
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
+    _setDocumentation(element, node);
 
     nameNode.staticElement = element;
     _linker.elementNodes[element] = node;
@@ -541,6 +559,7 @@
     }
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
+    _setDocumentation(element, node);
 
     nameNode.staticElement = element;
     _linker.elementNodes[element] = node;
@@ -654,6 +673,7 @@
     executableElement.isGenerator = node.body.isGenerator;
     executableElement.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(executableElement, node);
+    _setDocumentation(executableElement, node);
 
     nameNode.staticElement = executableElement;
     _linker.elementNodes[executableElement] = node;
@@ -676,6 +696,7 @@
     var element = MixinElementImpl(name, nameNode.offset);
     element.metadata = _buildAnnotations(node.metadata);
     _setCodeRange(element, node);
+    _setDocumentation(element, node);
 
     nameNode.staticElement = element;
     _linker.elementNodes[element] = node;
@@ -777,6 +798,8 @@
       element.isFinal = node.variables.isFinal;
       element.isLate = node.variables.isLate;
       element.metadata = _buildAnnotations(node.metadata);
+      _setCodeRange(element, variable);
+      _setDocumentation(element, node);
 
       if (node.variables.type == null) {
         element.hasImplicitType = true;
@@ -824,6 +847,7 @@
 
     var element = TypeParameterElementImpl(name, nameNode.offset);
     element.metadata = _buildAnnotations(node.metadata);
+    _setCodeRange(element, node);
 
     nameNode.staticElement = element;
     _linker.elementNodes[element] = node;
@@ -1047,6 +1071,10 @@
           var name = constant.name.name;
           var reference = containerRef.getChild(name);
           var field = ConstFieldElementImpl_EnumValue(element, name, i);
+          // TODO(scheglov) test it
+          field.nameOffset = constant.name.offset;
+          _setCodeRange(field, constant);
+          _setDocumentation(field, constant);
           field.reference = reference;
           field.metadata = _buildAnnotationsWithUnit(
             unitElement as CompilationUnitElementImpl,
@@ -1078,10 +1106,11 @@
 
     var annotations = <ElementAnnotation>[];
     for (int i = 0; i < length; i++) {
-      var ast = nodeList[i];
-      annotations.add(ElementAnnotationImpl(unitElement)
-        ..annotationAst = ast
-        ..element = ast.element);
+      var ast = nodeList[i] as AnnotationImpl;
+      var element = ElementAnnotationImpl(unitElement);
+      element.annotationAst = ast;
+      ast.elementAnnotation = element;
+      annotations.add(element);
     }
     return annotations;
   }
@@ -1096,6 +1125,8 @@
       }
       if (node is ShowCombinator) {
         return ShowElementCombinatorImpl()
+          ..offset = node.keyword.offset
+          ..end = node.end
           ..shownNames = node.shownNames.nameList;
       }
       throw UnimplementedError('${node.runtimeType}');
@@ -1103,8 +1134,27 @@
   }
 
   static void _setCodeRange(ElementImpl element, AstNode node) {
+    var parent = node.parent;
+    if (node is FormalParameter && parent is DefaultFormalParameter) {
+      node = parent;
+    }
+
+    if (node is VariableDeclaration && parent is VariableDeclarationList) {
+      var fieldDeclaration = parent.parent;
+      if (fieldDeclaration != null && parent.variables.first == node) {
+        var offset = fieldDeclaration.offset;
+        element.setCodeRange(offset, node.end - offset);
+        return;
+      }
+    }
+
     element.setCodeRange(node.offset, node.length);
   }
+
+  static void _setDocumentation(ElementImpl element, AnnotatedNode node) {
+    element.documentationComment =
+        getCommentNodeRawText(node.documentationComment);
+  }
 }
 
 class _EnclosingContext {
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index fbff8be..d3531b7 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -200,6 +200,8 @@
     if (entryPoint is FunctionElement) {
       element.entryPoint = entryPoint;
     }
+
+    linker.elementFactory.setExportsOfLibrary('$uri', exports);
   }
 
   static void build(Linker linker, LinkInputLibrary inputLibrary) {
@@ -250,6 +252,7 @@
       unitElement.lineInfo = unitNode.lineInfo;
       unitElement.source = inputUnit.source;
       unitElement.uri = inputUnit.partUriStr;
+      unitElement.setCodeRange(0, unitNode.length);
 
       var unitReference = unitContainerRef.getChild(inputUnit.uriStr);
       _bindReference(unitReference, unitElement);
diff --git a/pkg/analyzer/lib/src/summary2/link.dart b/pkg/analyzer/lib/src/summary2/link.dart
index 8cb08c7..a161473 100644
--- a/pkg/analyzer/lib/src/summary2/link.dart
+++ b/pkg/analyzer/lib/src/summary2/link.dart
@@ -79,6 +79,7 @@
     _writeLibraries();
     timerLinkingLinkingBundle.stop();
 
+    // TODO(scheglov) Remove to keep linking elements.
     timerLinkingRemoveBundle.start();
     elementFactory.removeBundle(
       inputLibraries.map((e) => e.uriStr).toSet(),
diff --git a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
index 92f3296..a449b97 100644
--- a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
+++ b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
@@ -16,6 +16,7 @@
   final AnalysisSessionImpl analysisSession;
   final Reference rootReference;
   final Map<String, LibraryReader> libraryReaders = {};
+  final _exportsOfLibrary = <String, List<Reference>>{};
 
   bool isApplyingInformativeData = false;
 
@@ -150,6 +151,10 @@
   }
 
   List<Reference> exportsOfLibrary(String uriStr) {
+    var exports = _exportsOfLibrary[uriStr];
+    if (exports != null) return exports;
+
+    // TODO(scheglov) Use [setExportsOfLibrary] instead
     var library = libraryReaders[uriStr];
     if (library == null) return const [];
 
@@ -203,6 +208,7 @@
   /// any session level caches.
   void removeLibraries(Set<String> uriStrSet) {
     for (var uriStr in uriStrSet) {
+      _exportsOfLibrary.remove(uriStr);
       libraryReaders.remove(uriStr);
       rootReference.removeChild(uriStr);
     }
@@ -211,6 +217,12 @@
     analysisSession.inheritanceManager.removeOfLibraries(uriStrSet);
   }
 
+  /// Set exports of the library with [uriStr], after building exports during
+  /// linking, or after reading a linked bundle.
+  void setExportsOfLibrary(String uriStr, List<Reference> exports) {
+    _exportsOfLibrary[uriStr] = exports;
+  }
+
   void setLibraryTypeSystem(LibraryElementImpl libraryElement) {
     // During linking we create libraries when typeProvider is not ready.
     // And if we link dart:core and dart:async, we cannot create it.
diff --git a/pkg/analyzer/lib/src/summary2/metadata_resolver.dart b/pkg/analyzer/lib/src/summary2/metadata_resolver.dart
index a999222..4b4a1ad 100644
--- a/pkg/analyzer/lib/src/summary2/metadata_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/metadata_resolver.dart
@@ -22,10 +22,12 @@
 
   @override
   void visitAnnotation(covariant AnnotationImpl node) {
-    node.elementAnnotation = ElementAnnotationImpl(_unitElement);
-
-    var astResolver = AstResolver(_linker, _unitElement, _scope, node);
-    astResolver.resolveAnnotation(node);
+    var annotationElement = node.elementAnnotation;
+    if (annotationElement is ElementAnnotationImpl) {
+      var astResolver = AstResolver(_linker, _unitElement, _scope, node);
+      astResolver.resolveAnnotation(node);
+      annotationElement.element = node.element;
+    }
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/summary2/top_level_inference.dart b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
index 7fd8d02..7fe4fe8 100644
--- a/pkg/analyzer/lib/src/summary2/top_level_inference.dart
+++ b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
@@ -282,6 +282,7 @@
 
   void perform() {
     _walker.walkNodes();
+    _resetMixinApplicationConstructors();
   }
 
   void _addClassConstructorFieldFormals(ClassElement class_) {
@@ -326,6 +327,28 @@
       (element as PropertyInducingElementImpl).type = DynamicTypeImpl.instance;
     }
   }
+
+  /// This is necessary to work around the ordering issue - we infer types
+  /// of fields and types of field formal parameters in constructors as one
+  /// graph walking operation. So, we ask for mixin application constructors,
+  /// and copy not-yet-computed types of formal parameters from base classes.
+  ///
+  /// Here we reset constructors, so that when we create them again, we will
+  /// get inferred types of formal parameters.
+  ///
+  /// TODO(scheglov) Ideally we should use correct ordering instead.
+  void _resetMixinApplicationConstructors() {
+    for (var builder in _linker.builders.values) {
+      for (var unitElement in builder.element.units) {
+        for (var classElement in unitElement.types) {
+          if (classElement is ClassElementImpl &&
+              classElement.isMixinApplication) {
+            classElement.resetMixinApplicationConstructors();
+          }
+        }
+      }
+    }
+  }
 }
 
 class _PropertyInducingElementTypeInference
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 51f3b5b..e3e0548 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -1217,7 +1217,7 @@
   }
 
   String _getElementLocationString(Element? element) {
-    if (element == null) {
+    if (element == null || element is MultiplyDefinedElement) {
       return 'null';
     }
 
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index b90d591..701c255 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -1715,6 +1715,8 @@
         var mapStr = _substitutionMapStr(map);
         _writelnWithIndent('substitution: $mapStr');
       });
+    } else if (element is MultiplyDefinedElement) {
+      _sink.writeln('<null>');
     } else {
       var reference = (element as ElementImpl).reference;
       if (reference != null) {
diff --git a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
index 758cfc0..c51934d 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
@@ -124,6 +124,7 @@
 
     var linkResult = link(elementFactory, inputLibraries, true);
 
+    // TODO(scheglov) Remove to keep linking elements.
     elementFactory.addBundle(
       BundleReader(
         elementFactory: elementFactory,
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 925dec6..8cd8eb7 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -13119,6 +13119,43 @@
 ''');
   }
 
+  @FailingTest(reason: '''
+Synthetic mixin application constructors are created before types of fields
+are inferred.
+''')
+  test_type_inference_field_depends_onFieldFormal_withMixinApp() async {
+    var library = await checkLibrary('''
+class A<T> {
+  T value;
+
+  A(this.value);
+}
+
+class B<T> = A<T> with M;
+
+class C {
+  var a = new B(42);
+}
+
+mixin M {}
+''');
+    checkElementText(library, r'''
+class A<T> {
+  T value;
+  A(final T this.value);
+}
+class alias B<T> extends A<T> with M {
+  synthetic B(final T value) : super(
+        value/*location: test.dart;B;;value*/);
+}
+class C {
+  B<int> a;
+}
+mixin M on Object {
+}
+''');
+  }
+
   test_type_inference_fieldFormal_depends_onField() async {
     var library = await checkLibrary('''
 class A<T> {
@@ -15400,6 +15437,12 @@
     var unit = library.definingCompilationUnit as CompilationUnitElementImpl;
     var reference = unit.reference!;
     names.forEach((name) => reference = reference.getChild(name));
+
+    var element = reference.element;
+    if (element != null) {
+      return element;
+    }
+
     var elementFactory = library.linkedData!.elementFactory;
     return elementFactory.elementOfReference(reference)!;
   }
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index 8ab6fca..42d895a 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -21,7 +21,9 @@
 }
 
 config("libdart_builtin_config") {
-  if (!is_win) {
+  if (is_win) {
+    libs = [ "bcrypt.lib" ]
+  } else {
     libs = [ "dl" ]
   }
   if (is_android) {
@@ -214,7 +216,6 @@
         "Rpcrt4.lib",
         "shlwapi.lib",
         "winmm.lib",
-        "bcrypt.lib",
       ]
       if (target_os != "winuwp") {
         libs += [ "psapi.lib" ]
@@ -785,7 +786,6 @@
         "Rpcrt4.lib",
         "shlwapi.lib",
         "winmm.lib",
-        "bcrypt.lib",
       ]
     }
   }
@@ -960,7 +960,6 @@
       "Rpcrt4.lib",
       "shlwapi.lib",
       "winmm.lib",
-      "bcrypt.lib",
     ]
   }
 }
diff --git a/tools/VERSION b/tools/VERSION
index 91be7bf..bc0a457 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 160
+PRERELEASE 161
 PRERELEASE_PATCH 0
\ No newline at end of file
