diff --git a/pkg/analysis_server/lib/src/lsp/semantic_tokens/encoder.dart b/pkg/analysis_server/lib/src/lsp/semantic_tokens/encoder.dart
index 903aa12..b3e34c0 100644
--- a/pkg/analysis_server/lib/src/lsp/semantic_tokens/encoder.dart
+++ b/pkg/analysis_server/lib/src/lsp/semantic_tokens/encoder.dart
@@ -33,21 +33,22 @@
 
     Iterable<HighlightRegion> translatedRegions = regions;
 
+    // Remove any tokens that will not be mapped as there's no point further processing
+    // them (eg. splitting multiline/overlaps) if they will be dropped.
+    translatedRegions = translatedRegions
+        .where((region) => highlightRegionTokenTypes.containsKey(region.type));
+
     if (!allowMultilineTokens) {
       translatedRegions = translatedRegions.expand(
           (region) => _splitMultilineRegions(region, lineInfo, fileContent));
     }
+
     if (!allowOverlappingTokens) {
       translatedRegions = _splitOverlappingTokens(translatedRegions);
     }
 
     for (final region in translatedRegions) {
       final tokenType = highlightRegionTokenTypes[region.type];
-      if (tokenType == null) {
-        // Skip over tokens we don't have mappings for.
-        continue;
-      }
-
       final start = lineInfo.getLocation(region.offset);
 
       tokens.add(SemanticTokenInfo(
@@ -142,8 +143,12 @@
       return;
     }
 
+    // When tokens have the same offset, the longest should come first so
+    // the nested token "overwrites" it during the flattening.
     final sortedRegions = regions.toList()
-      ..sort((r1, r2) => r1.offset.compareTo(r2.offset));
+      ..sort((r1, r2) => r1.offset != r2.offset
+          ? r1.offset.compareTo(r2.offset)
+          : -r1.length.compareTo(r2.length));
 
     final firstRegion = sortedRegions.first;
     final stack = ListQueue<HighlightRegion>()..add(firstRegion);
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index 8bd57b2..d097a92 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -259,8 +259,8 @@
       'Convert to single quoted string');
   static const CONVERT_TO_SPREAD =
       FixKind('dart.fix.convert.toSpread', 50, 'Convert to a spread');
-  static const CONVERT_TO_WHERE_TYPE = FixKind(
-      'dart.fix.convert.toWhereType', 50, "Convert to a use 'whereType'");
+  static const CONVERT_TO_WHERE_TYPE =
+      FixKind('dart.fix.convert.toWhereType', 50, "Convert to use 'whereType'");
   static const CREATE_CLASS =
       FixKind('dart.fix.create.class', 50, "Create class '{0}'");
   static const CREATE_CONSTRUCTOR =
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/changes_selector.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/changes_selector.dart
index 85f7b7e..c441575 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/changes_selector.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/changes_selector.dart
@@ -26,7 +26,8 @@
   @override
   List<Change> getChanges(TemplateContext context) {
     for (var entry in changeMap.entries) {
-      if (entry.key.evaluateIn(context)) {
+      var value = entry.key.evaluateIn(context);
+      if (value is bool && value) {
         return entry.value;
       }
     }
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/value_generator.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/value_generator.dart
index b59bac9..527669f 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/value_generator.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/value_generator.dart
@@ -21,8 +21,12 @@
   @override
   String evaluateIn(TemplateContext context) {
     Object target = context.node;
-    for (var accessor in accessors) {
-      target = accessor.getValue(target).result;
+    for (var i = 0; i < accessors.length; i++) {
+      var result = accessors[i].getValue(target);
+      if (!result.isValid) {
+        return '';
+      }
+      target = result.result;
     }
     if (target is AstNode) {
       return context.utils.getRangeText(range.node(target));
diff --git a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
index 50b5a3f..5c6836b 100644
--- a/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
+++ b/pkg/analysis_server/test/lsp/semantic_tokens_test.dart
@@ -429,6 +429,44 @@
     expect(decoded, equals(expected));
   }
 
+  Future<void> test_manyImports_sortBug() async {
+    // This test is for a bug where some "import" tokens would not be highlighted
+    // correctly. Imports are made up of a DIRECTIVE token that spans a
+    // BUILT_IN ("import") and LITERAL_STRING. The original code sorted by only
+    // offset when handling overlapping tokens, which for certain lists (such as
+    // the one created for the code below) would result in the BUILTIN coming before
+    // the DIRECTIVE, which resulted in the DIRECTIVE overwriting it.
+    final content = '''
+import 'dart:async';
+import 'dart:async';
+import 'dart:async';
+import 'dart:async';
+import 'dart:async';
+import 'dart:async';
+import 'dart:async';
+import 'dart:async';
+import 'dart:async';
+import 'dart:async';
+import 'dart:async';
+import 'dart:async';
+import 'dart:async';
+    ''';
+
+    final expected = [
+      for (var i = 0; i < 13; i++) ...[
+        _Token('import', SemanticTokenTypes.keyword),
+        _Token("'dart:async'", SemanticTokenTypes.string),
+      ],
+    ];
+
+    await initialize();
+    await openFile(mainFileUri, withoutMarkers(content));
+
+    final tokens = await getSemanticTokens(mainFileUri);
+    final decoded = decodeSemanticTokens(content, tokens);
+    expect(decoded, equals(expected));
+  }
+
   Future<void> test_multilineRegions() async {
     final content = '''
     /**
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/flutter_use_case_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/flutter_use_case_test.dart
index 7932354..cca4aef 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/flutter_use_case_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/flutter_use_case_test.dart
@@ -1001,6 +1001,94 @@
 ''');
   }
 
+  Future<void> test_material_Scaffold_of_missingArgument() async {
+    setPackageContent('''
+class Scaffold {
+  static ScaffoldState of(BuildContext context) => ScaffoldState();
+  static ScaffoldState maybeOf(BuildContext context) => ScaffoldState();
+}
+class ScaffoldState {}
+class BuildContext {}
+''');
+    addPackageDataFile('''
+version: 1
+transforms:
+  - title: 'Remove nullOk'
+    date: 2020-11-04
+    element:
+      uris: ['$importUri']
+      method: 'of'
+      inClass: 'Scaffold'
+    oneOf:
+      - if: "nullOk == 'true'"
+        changes:
+          - kind: 'rename'
+            newName: 'maybeOf'
+          - kind: 'removeParameter'
+            name: 'nullOk'
+      - if: "nullOk == 'false'"
+        changes:
+          - kind: 'removeParameter'
+            name: 'nullOk'
+    variables:
+      nullOk:
+        kind: 'fragment'
+        value: 'arguments[nullOk]'
+''');
+    await resolveTestCode('''
+import '$importUri';
+
+void f(BuildContext context) {
+  Scaffold.of(context, undefined: 3);
+}
+''');
+    await assertNoFix();
+  }
+
+  @failingTest
+  Future<void> test_material_Scaffold_of_wrongType() async {
+    setPackageContent('''
+class Theme {
+  static ThemeData of(BuildContext context, {bool shadowThemeOnly: false}) => ThemeData();
+}
+class ThemeData {}
+class BuildContext {}
+''');
+    addPackageDataFile('''
+version: 1
+transforms:
+  - title: 'Remove nullOk'
+    date: 2020-11-04
+    element:
+      uris: ['$importUri']
+      method: 'of'
+      inClass: 'Scaffold'
+    oneOf:
+      - if: "nullOk == 'true'"
+        changes:
+          - kind: 'rename'
+            newName: 'maybeOf'
+          - kind: 'removeParameter'
+            name: 'nullOk'
+      - if: "nullOk == 'false'"
+        changes:
+          - kind: 'removeParameter'
+            name: 'nullOk'
+    variables:
+      nullOk:
+        kind: 'fragment'
+        value: 'arguments[nullOk]'
+''');
+    await resolveTestCode('''
+import '$importUri';
+
+void f(BuildContext context) {
+  Theme.of(context, nullOk: true);
+}
+''');
+    await assertNoFix();
+  }
+
   Future<void>
       test_material_Scaffold_resizeToAvoidBottomPadding_deprecated() async {
     setPackageContent('''
diff --git a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
index 29516e9..84d29d8 100644
--- a/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
+++ b/pkg/analyzer/lib/src/dart/micro/resolve_file.dart
@@ -511,8 +511,9 @@
     YamlMap optionMap;
 
     var separator = resourceProvider.pathContext.separator;
-    var isThirdParty =
-        path.contains('${separator}third_party${separator}dart$separator');
+    var isThirdParty = path
+            .contains('${separator}third_party${separator}dart$separator') ||
+        path.contains('${separator}third_party${separator}dart_lang$separator');
 
     File optionsFile;
     if (!isThirdParty) {
diff --git a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
index b462f39..2f77d87 100644
--- a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
+++ b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
@@ -273,6 +273,30 @@
     ]);
   }
 
+  test_analysisOptions_file_inThirdPartyDartLang() async {
+    newFile('/workspace/dart/analysis_options/lib/third_party.yaml',
+        content: r'''
+analyzer:
+  strong-mode:
+    implicit-casts: false
+''');
+
+    newFile('/workspace/thid_party/dart_lang/aaa/analysis_options.yaml',
+        content: r'''
+analyzer:
+  strong-mode:
+    implicit-casts: true
+''');
+
+    var aPath = convertPath('/workspace/third_party/dart_lang/aaa/lib/a.dart');
+    await assertErrorsInFile(aPath, r'''
+num a = 0;
+int b = a;
+''', [
+      error(CompileTimeErrorCode.INVALID_ASSIGNMENT, 19, 1),
+    ]);
+  }
+
   test_analysisOptions_lints() async {
     newFile('/workspace/dart/analysis_options/lib/default.yaml', content: r'''
 linter:
diff --git a/pkg/front_end/test/unit_test_suites.dart b/pkg/front_end/test/unit_test_suites.dart
index a0d190f..0bd8b66 100644
--- a/pkg/front_end/test/unit_test_suites.dart
+++ b/pkg/front_end/test/unit_test_suites.dart
@@ -288,7 +288,7 @@
       "../../testing.json"),
 ];
 
-const Duration timeoutDuration = Duration(minutes: 25);
+const Duration timeoutDuration = Duration(minutes: 30);
 
 class SuiteConfiguration {
   final String name;
diff --git a/runtime/bin/priority_heap_test.cc b/runtime/bin/priority_heap_test.cc
index 165f1a4..b0fdb5b 100644
--- a/runtime/bin/priority_heap_test.cc
+++ b/runtime/bin/priority_heap_test.cc
@@ -1,6 +1,6 @@
-// Copyright (c) 2020, the dart project authors. Please see the AUTHORS file
-// for details. all rights reserved. use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE.md file.
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
 
 #include "vm/unit_test.h"
 
diff --git a/runtime/observatory_2/tests/service_2/breakpoint_in_package_parts_class_file_uri_test.dart b/runtime/observatory_2/tests/service_2/breakpoint_in_package_parts_class_file_uri_test.dart
index 03a57f6..da48c7d 100644
--- a/runtime/observatory_2/tests/service_2/breakpoint_in_package_parts_class_file_uri_test.dart
+++ b/runtime/observatory_2/tests/service_2/breakpoint_in_package_parts_class_file_uri_test.dart
@@ -14,7 +14,8 @@
 // Chop off the file name.
 String baseDirectory = path.dirname(Platform.script.path) + '/';
 Uri baseUri = Platform.script.replace(path: baseDirectory);
-Uri breakpointFile = baseUri.resolve('observatory_test_package/the_part.dart');
+Uri breakpointFile =
+    baseUri.resolve('observatory_test_package_2/the_part.dart');
 const String shortFile = "the_part.dart";
 
 const int LINE = 87;
diff --git a/tools/VERSION b/tools/VERSION
index 5e98251..6bda5c1 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 159
+PRERELEASE 160
 PRERELEASE_PATCH 0
\ No newline at end of file
