diff --git a/CHANGELOG.md b/CHANGELOG.md
index 192da24..6ebc31a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -57,6 +57,11 @@
       throw UnsupportedError("keyLog not implemented");
   ```
 
+- **Breaking Change** [#34218](https://github.com/dart-lang/sdk/issues/34218):
+  Constants in `dart:io` following the `SCREAMING_CAPS` convention have been
+  removed (they were previously deprecated).  Please use the corresponding
+  `lowerCamelCase` constants instead.
+
 - Add a optional `keyLog` parameter to `SecureSocket.connect` and
   `SecureSocket.startConnect`.
 
diff --git a/pkg/analysis_server/test/integration/support/integration_tests.dart b/pkg/analysis_server/test/integration/support/integration_tests.dart
index 1d0e499..82b7c4a1 100644
--- a/pkg/analysis_server/test/integration/support/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/support/integration_tests.dart
@@ -521,11 +521,11 @@
       var trimmedLine = line.trim();
 
       // Guard against lines like:
-      //   {"event":"server.connected","params":{...}}Observatory listening on ...
-      var observatoryMessage = 'Observatory listening on ';
-      if (trimmedLine.contains(observatoryMessage)) {
+      //   {"event":"server.connected","params":{...}}The Dart VM service is listening on ...
+      var dartVMServiceMessage = 'The Dart VM service is listening on ';
+      if (trimmedLine.contains(dartVMServiceMessage)) {
         trimmedLine = trimmedLine
-            .substring(0, trimmedLine.indexOf(observatoryMessage))
+            .substring(0, trimmedLine.indexOf(dartVMServiceMessage))
             .trim();
       }
       if (trimmedLine.isEmpty) {
diff --git a/pkg/analysis_server/test/stress/utilities/server.dart b/pkg/analysis_server/test/stress/utilities/server.dart
index b2eefa3..68ef712 100644
--- a/pkg/analysis_server/test/stress/utilities/server.dart
+++ b/pkg/analysis_server/test/stress/utilities/server.dart
@@ -762,7 +762,7 @@
 
     var trimmedLine = line.trim();
     if (trimmedLine.isEmpty ||
-        trimmedLine.startsWith('Observatory listening on ')) {
+        trimmedLine.startsWith('The Dart VM service is listening on ')) {
       return;
     }
     logger?.log(fromServer, '$trimmedLine');
diff --git a/pkg/analysis_server_client/lib/src/server_base.dart b/pkg/analysis_server_client/lib/src/server_base.dart
index dd9668c..34f3f2e 100644
--- a/pkg/analysis_server_client/lib/src/server_base.dart
+++ b/pkg/analysis_server_client/lib/src/server_base.dart
@@ -113,11 +113,11 @@
     var trimmedLine = line.trim();
 
     // Guard against lines like:
-    //   {"event":"server.connected","params":{...}}Observatory listening on ...
-    const observatoryMessage = 'Observatory listening on ';
-    if (trimmedLine.contains(observatoryMessage)) {
+    //   {"event":"server.connected","params":{...}}The Dart VM service is listening on ...
+    const dartVMServiceMessage = 'The Dart VM service is listening on ';
+    if (trimmedLine.contains(dartVMServiceMessage)) {
       trimmedLine = trimmedLine
-          .substring(0, trimmedLine.indexOf(observatoryMessage))
+          .substring(0, trimmedLine.indexOf(dartVMServiceMessage))
           .trim();
     }
     if (trimmedLine.isEmpty) {
diff --git a/pkg/analysis_server_client/test/server_test.dart b/pkg/analysis_server_client/test/server_test.dart
index 286938d..504f9f0 100644
--- a/pkg/analysis_server_client/test/server_test.dart
+++ b/pkg/analysis_server_client/test/server_test.dart
@@ -173,7 +173,7 @@
 };
 
 Stream<List<int>> _badMessage() async* {
-  yield utf8.encoder.convert('Observatory listening on foo bar\n');
+  yield utf8.encoder.convert('The Dart VM service is listening on foo bar\n');
   final sampleJson = {
     'id': '0',
     'error': _badErrorMessage,
@@ -182,7 +182,7 @@
 }
 
 Stream<List<int>> _eventMessage() async* {
-  yield utf8.encoder.convert('Observatory listening on foo bar\n');
+  yield utf8.encoder.convert('The Dart VM service is listening on foo bar\n');
   final sampleJson = {
     'event': 'fooEvent',
     'params': {'foo': 'bar', 'baz': 'bang'}
@@ -191,7 +191,7 @@
 }
 
 Stream<List<int>> _goodMessage() async* {
-  yield utf8.encoder.convert('Observatory listening on foo bar\n');
+  yield utf8.encoder.convert('The Dart VM service is listening on foo bar\n');
   final sampleJson = {
     'id': '0',
     'result': {'foo': 'bar'}
diff --git a/pkg/analyzer/test/verify_tests_test.dart b/pkg/analyzer/test/verify_tests_test.dart
index e401e59..cd6a480 100644
--- a/pkg/analyzer/test/verify_tests_test.dart
+++ b/pkg/analyzer/test/verify_tests_test.dart
@@ -17,8 +17,7 @@
 }
 
 class _VerifyTests extends VerifyTests {
-  _VerifyTests(String testDirPath, {List<String>? excludedPaths})
-      : super(testDirPath, excludedPaths: excludedPaths);
+  _VerifyTests(String testDirPath) : super(testDirPath);
 
   @override
   bool isExpensive(Resource resource) =>
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index b982da9..81cf371 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -39,10 +39,10 @@
 import 'package:yaml/yaml.dart';
 
 /// Shared IO sink for standard error reporting.
-late StringSink errorSink = io.stderr;
+StringSink errorSink = io.stderr;
 
 /// Shared IO sink for standard out reporting.
-late StringSink outSink = io.stdout;
+StringSink outSink = io.stdout;
 
 /// Test this option map to see if it specifies lint rules.
 bool containsLintRuleEntry(YamlMap options) {
diff --git a/pkg/analyzer_cli/lib/src/error_formatter.dart b/pkg/analyzer_cli/lib/src/error_formatter.dart
index 88147da..5455b3e 100644
--- a/pkg/analyzer_cli/lib/src/error_formatter.dart
+++ b/pkg/analyzer_cli/lib/src/error_formatter.dart
@@ -20,7 +20,7 @@
   'hint': 1,
 };
 
-String _pluralize(String word, int count) => count == 1 ? word : word + 's';
+String _pluralize(String word, int count) => count == 1 ? word : '${word}s';
 
 /// Given an absolute path, return a relative path if the file is contained in
 /// the current directory; return the original path otherwise.
diff --git a/pkg/analyzer_cli/test/analysis_options_test.dart b/pkg/analyzer_cli/test/analysis_options_test.dart
index 72e1bb4..7733959 100644
--- a/pkg/analyzer_cli/test/analysis_options_test.dart
+++ b/pkg/analyzer_cli/test/analysis_options_test.dart
@@ -18,10 +18,10 @@
 
 @reflectiveTest
 class OptionsTest {
-  final _Runner runner = _Runner.setUp();
+  final _Runner _runner = _Runner.setUp();
 
   void tearDown() {
-    runner.tearDown();
+    _runner.tearDown();
   }
 
   Future<void> test_options() async {
@@ -33,15 +33,15 @@
       var expectedPath = path.join(tempDirPath, 'somepkgs', 'flutter', 'lib',
           'analysis_options_user.yaml');
       expect(FileSystemEntity.isFileSync(expectedPath), isTrue);
-      await runner.run2([
+      await _runner.run2([
         '--packages',
         path.join(tempDirPath, 'packagelist'),
         path.join(tempDirPath, 'lib', 'main.dart')
       ]);
-      expect(runner.stdout, contains('The parameter \'child\' is required'));
+      expect(_runner.stdout, contains('The parameter \'child\' is required'));
       // Should be a warning as specified in analysis_options_user.yaml
       // not a hint
-      expect(runner.stdout, contains('1 warning found'));
+      expect(_runner.stdout, contains('1 warning found'));
     });
   }
 }
diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
index 683562a..c26a9e6 100644
--- a/pkg/analyzer_cli/test/driver_test.dart
+++ b/pkg/analyzer_cli/test/driver_test.dart
@@ -440,8 +440,8 @@
     // Should have the lint in the project with lint rules enabled.
     expect(
         bulletToDash(outSink),
-        contains(path.join('linter_project', 'test_file.dart') +
-            ':7:7 - camel_case_types'));
+        contains(
+            '${path.join('linter_project', 'test_file.dart')}:7:7 - camel_case_types'));
     // Should be just one lint in total.
     expect(outSink.toString(), contains('1 lint found.'));
   }
diff --git a/pkg/analyzer_plugin/test/integration/support/integration_tests.dart b/pkg/analyzer_plugin/test/integration/support/integration_tests.dart
index 8fd6bff..52dbfbd 100644
--- a/pkg/analyzer_plugin/test/integration/support/integration_tests.dart
+++ b/pkg/analyzer_plugin/test/integration/support/integration_tests.dart
@@ -443,7 +443,7 @@
         .listen((String line) {
       lastCommunicationTime = currentElapseTime;
       var trimmedLine = line.trim();
-      if (trimmedLine.startsWith('Observatory listening on ')) {
+      if (trimmedLine.startsWith('The Dart VM service is listening on ')) {
         return;
       }
       _recordStdio('RECV: $trimmedLine');
diff --git a/pkg/dart2js_info/bin/src/debug_info.dart b/pkg/dart2js_info/bin/src/debug_info.dart
index 6199ee4..1de2f7d 100644
--- a/pkg/dart2js_info/bin/src/debug_info.dart
+++ b/pkg/dart2js_info/bin/src/debug_info.dart
@@ -194,7 +194,7 @@
       _debugCode.write(' ' * _indent);
       var endsInNewLine = code.endsWith('\n');
       if (endsInNewLine) code = code.substring(0, code.length - 1);
-      _debugCode.write(code.replaceAll('\n', '\n' + (' ' * _indent)));
+      _debugCode.write(code.replaceAll('\n', '\n${' ' * _indent}'));
       if (endsInNewLine) _debugCode.write(',\n');
       if (isClosureClass) {
         _indent -= 2;
diff --git a/pkg/dart2js_info/bin/src/library_size_split.dart b/pkg/dart2js_info/bin/src/library_size_split.dart
index da6d85d..1721457 100644
--- a/pkg/dart2js_info/bin/src/library_size_split.dart
+++ b/pkg/dart2js_info/bin/src/library_size_split.dart
@@ -138,7 +138,7 @@
 
     _printRow(_Row row) {
       if (row is _Divider) {
-        print(' ' + ('-' * (longest + 18)));
+        print(' ${'-' * (longest + 18)}');
         return;
       }
 
diff --git a/pkg/dart2js_info/lib/src/proto/info.pb.dart b/pkg/dart2js_info/lib/src/proto/info.pb.dart
index 28d20a6..6d56230 100644
--- a/pkg/dart2js_info/lib/src/proto/info.pb.dart
+++ b/pkg/dart2js_info/lib/src/proto/info.pb.dart
@@ -37,14 +37,14 @@
     $core.String? targetId,
     $core.String? mask,
   }) {
-    final _result = create();
+    final result = create();
     if (targetId != null) {
-      _result.targetId = targetId;
+      result.targetId = targetId;
     }
     if (mask != null) {
-      _result.mask = mask;
+      result.mask = mask;
     }
-    return _result;
+    return result;
   }
   factory DependencyInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -139,17 +139,17 @@
     $core.Map<$core.String, InfoPB>? allInfos,
     $core.Iterable<LibraryDeferredImportsPB>? deferredImports,
   }) {
-    final _result = create();
+    final result = create();
     if (program != null) {
-      _result.program = program;
+      result.program = program;
     }
     if (allInfos != null) {
-      _result.allInfos.addAll(allInfos);
+      result.allInfos.addAll(allInfos);
     }
     if (deferredImports != null) {
-      _result.deferredImports.addAll(deferredImports);
+      result.deferredImports.addAll(deferredImports);
     }
-    return _result;
+    return result;
   }
   factory AllInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -354,59 +354,59 @@
     ClosureInfoPB? closureInfo,
     ClassTypeInfoPB? classTypeInfo,
   }) {
-    final _result = create();
+    final result = create();
     if (name != null) {
-      _result.name = name;
+      result.name = name;
     }
     if (id != null) {
-      _result.id = id;
+      result.id = id;
     }
     if (serializedId != null) {
-      _result.serializedId = serializedId;
+      result.serializedId = serializedId;
     }
     if (coverageId != null) {
-      _result.coverageId = coverageId;
+      result.coverageId = coverageId;
     }
     if (size != null) {
-      _result.size = size;
+      result.size = size;
     }
     if (parentId != null) {
-      _result.parentId = parentId;
+      result.parentId = parentId;
     }
     if (uses != null) {
-      _result.uses.addAll(uses);
+      result.uses.addAll(uses);
     }
     if (outputUnitId != null) {
-      _result.outputUnitId = outputUnitId;
+      result.outputUnitId = outputUnitId;
     }
     if (libraryInfo != null) {
-      _result.libraryInfo = libraryInfo;
+      result.libraryInfo = libraryInfo;
     }
     if (classInfo != null) {
-      _result.classInfo = classInfo;
+      result.classInfo = classInfo;
     }
     if (functionInfo != null) {
-      _result.functionInfo = functionInfo;
+      result.functionInfo = functionInfo;
     }
     if (fieldInfo != null) {
-      _result.fieldInfo = fieldInfo;
+      result.fieldInfo = fieldInfo;
     }
     if (constantInfo != null) {
-      _result.constantInfo = constantInfo;
+      result.constantInfo = constantInfo;
     }
     if (outputUnitInfo != null) {
-      _result.outputUnitInfo = outputUnitInfo;
+      result.outputUnitInfo = outputUnitInfo;
     }
     if (typedefInfo != null) {
-      _result.typedefInfo = typedefInfo;
+      result.typedefInfo = typedefInfo;
     }
     if (closureInfo != null) {
-      _result.closureInfo = closureInfo;
+      result.closureInfo = closureInfo;
     }
     if (classTypeInfo != null) {
-      _result.classTypeInfo = classTypeInfo;
+      result.classTypeInfo = classTypeInfo;
     }
-    return _result;
+    return result;
   }
   factory InfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -745,47 +745,47 @@
     $core.bool? isMirrorsUsed,
     $core.bool? minified,
   }) {
-    final _result = create();
+    final result = create();
     if (entrypointId != null) {
-      _result.entrypointId = entrypointId;
+      result.entrypointId = entrypointId;
     }
     if (size != null) {
-      _result.size = size;
+      result.size = size;
     }
     if (dart2jsVersion != null) {
-      _result.dart2jsVersion = dart2jsVersion;
+      result.dart2jsVersion = dart2jsVersion;
     }
     if (compilationMoment != null) {
-      _result.compilationMoment = compilationMoment;
+      result.compilationMoment = compilationMoment;
     }
     if (compilationDuration != null) {
-      _result.compilationDuration = compilationDuration;
+      result.compilationDuration = compilationDuration;
     }
     if (toProtoDuration != null) {
-      _result.toProtoDuration = toProtoDuration;
+      result.toProtoDuration = toProtoDuration;
     }
     if (dumpInfoDuration != null) {
-      _result.dumpInfoDuration = dumpInfoDuration;
+      result.dumpInfoDuration = dumpInfoDuration;
     }
     if (noSuchMethodEnabled != null) {
-      _result.noSuchMethodEnabled = noSuchMethodEnabled;
+      result.noSuchMethodEnabled = noSuchMethodEnabled;
     }
     if (isRuntimeTypeUsed != null) {
-      _result.isRuntimeTypeUsed = isRuntimeTypeUsed;
+      result.isRuntimeTypeUsed = isRuntimeTypeUsed;
     }
     if (isIsolateUsed != null) {
-      _result.isIsolateUsed = isIsolateUsed;
+      result.isIsolateUsed = isIsolateUsed;
     }
     if (isFunctionApplyUsed != null) {
-      _result.isFunctionApplyUsed = isFunctionApplyUsed;
+      result.isFunctionApplyUsed = isFunctionApplyUsed;
     }
     if (isMirrorsUsed != null) {
-      _result.isMirrorsUsed = isMirrorsUsed;
+      result.isMirrorsUsed = isMirrorsUsed;
     }
     if (minified != null) {
-      _result.minified = minified;
+      result.minified = minified;
     }
-    return _result;
+    return result;
   }
   factory ProgramInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -998,14 +998,14 @@
     $core.String? uri,
     $core.Iterable<$core.String>? childrenIds,
   }) {
-    final _result = create();
+    final result = create();
     if (uri != null) {
-      _result.uri = uri;
+      result.uri = uri;
     }
     if (childrenIds != null) {
-      _result.childrenIds.addAll(childrenIds);
+      result.childrenIds.addAll(childrenIds);
     }
-    return _result;
+    return result;
   }
   factory LibraryInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1071,11 +1071,11 @@
   factory OutputUnitInfoPB({
     $core.Iterable<$core.String>? imports,
   }) {
-    final _result = create();
+    final result = create();
     if (imports != null) {
-      _result.imports.addAll(imports);
+      result.imports.addAll(imports);
     }
-    return _result;
+    return result;
   }
   factory OutputUnitInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1135,14 +1135,14 @@
     $core.bool? isAbstract,
     $core.Iterable<$core.String>? childrenIds,
   }) {
-    final _result = create();
+    final result = create();
     if (isAbstract != null) {
-      _result.isAbstract = isAbstract;
+      result.isAbstract = isAbstract;
     }
     if (childrenIds != null) {
-      _result.childrenIds.addAll(childrenIds);
+      result.childrenIds.addAll(childrenIds);
     }
-    return _result;
+    return result;
   }
   factory ClassInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1249,11 +1249,11 @@
   factory ConstantInfoPB({
     $core.String? code,
   }) {
-    final _result = create();
+    final result = create();
     if (code != null) {
-      _result.code = code;
+      result.code = code;
     }
-    return _result;
+    return result;
   }
   factory ConstantInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1346,26 +1346,26 @@
     $core.bool? isConst,
     $core.String? initializerId,
   }) {
-    final _result = create();
+    final result = create();
     if (type != null) {
-      _result.type = type;
+      result.type = type;
     }
     if (inferredType != null) {
-      _result.inferredType = inferredType;
+      result.inferredType = inferredType;
     }
     if (childrenIds != null) {
-      _result.childrenIds.addAll(childrenIds);
+      result.childrenIds.addAll(childrenIds);
     }
     if (code != null) {
-      _result.code = code;
+      result.code = code;
     }
     if (isConst != null) {
-      _result.isConst = isConst;
+      result.isConst = isConst;
     }
     if (initializerId != null) {
-      _result.initializerId = initializerId;
+      result.initializerId = initializerId;
     }
-    return _result;
+    return result;
   }
   factory FieldInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1478,11 +1478,11 @@
   factory TypedefInfoPB({
     $core.String? type,
   }) {
-    final _result = create();
+    final result = create();
     if (type != null) {
-      _result.type = type;
+      result.type = type;
     }
-    return _result;
+    return result;
   }
   factory TypedefInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1563,20 +1563,20 @@
     $core.bool? isFactory,
     $core.bool? isExternal,
   }) {
-    final _result = create();
+    final result = create();
     if (isStatic != null) {
-      _result.isStatic = isStatic;
+      result.isStatic = isStatic;
     }
     if (isConst != null) {
-      _result.isConst = isConst;
+      result.isConst = isConst;
     }
     if (isFactory != null) {
-      _result.isFactory = isFactory;
+      result.isFactory = isFactory;
     }
     if (isExternal != null) {
-      _result.isExternal = isExternal;
+      result.isExternal = isExternal;
     }
-    return _result;
+    return result;
   }
   factory FunctionModifiersPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1687,17 +1687,17 @@
     $core.String? type,
     $core.String? declaredType,
   }) {
-    final _result = create();
+    final result = create();
     if (name != null) {
-      _result.name = name;
+      result.name = name;
     }
     if (type != null) {
-      _result.type = type;
+      result.type = type;
     }
     if (declaredType != null) {
-      _result.declaredType = declaredType;
+      result.declaredType = declaredType;
     }
-    return _result;
+    return result;
   }
   factory ParameterInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1830,32 +1830,32 @@
     $core.int? inlinedCount,
     $core.String? code,
   }) {
-    final _result = create();
+    final result = create();
     if (functionModifiers != null) {
-      _result.functionModifiers = functionModifiers;
+      result.functionModifiers = functionModifiers;
     }
     if (childrenIds != null) {
-      _result.childrenIds.addAll(childrenIds);
+      result.childrenIds.addAll(childrenIds);
     }
     if (returnType != null) {
-      _result.returnType = returnType;
+      result.returnType = returnType;
     }
     if (inferredReturnType != null) {
-      _result.inferredReturnType = inferredReturnType;
+      result.inferredReturnType = inferredReturnType;
     }
     if (parameters != null) {
-      _result.parameters.addAll(parameters);
+      result.parameters.addAll(parameters);
     }
     if (sideEffects != null) {
-      _result.sideEffects = sideEffects;
+      result.sideEffects = sideEffects;
     }
     if (inlinedCount != null) {
-      _result.inlinedCount = inlinedCount;
+      result.inlinedCount = inlinedCount;
     }
     if (code != null) {
-      _result.code = code;
+      result.code = code;
     }
-    return _result;
+    return result;
   }
   factory FunctionInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -1986,11 +1986,11 @@
   factory ClosureInfoPB({
     $core.String? functionId,
   }) {
-    final _result = create();
+    final result = create();
     if (functionId != null) {
-      _result.functionId = functionId;
+      result.functionId = functionId;
     }
-    return _result;
+    return result;
   }
   factory ClosureInfoPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -2059,14 +2059,14 @@
     $core.String? prefix,
     $core.Iterable<$core.String>? files,
   }) {
-    final _result = create();
+    final result = create();
     if (prefix != null) {
-      _result.prefix = prefix;
+      result.prefix = prefix;
     }
     if (files != null) {
-      _result.files.addAll(files);
+      result.files.addAll(files);
     }
-    return _result;
+    return result;
   }
   factory DeferredImportPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
@@ -2146,17 +2146,17 @@
     $core.String? libraryName,
     $core.Iterable<DeferredImportPB>? imports,
   }) {
-    final _result = create();
+    final result = create();
     if (libraryUri != null) {
-      _result.libraryUri = libraryUri;
+      result.libraryUri = libraryUri;
     }
     if (libraryName != null) {
-      _result.libraryName = libraryName;
+      result.libraryName = libraryName;
     }
     if (imports != null) {
-      _result.imports.addAll(imports);
+      result.imports.addAll(imports);
     }
-    return _result;
+    return result;
   }
   factory LibraryDeferredImportsPB.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
diff --git a/pkg/dart2js_info/test/json_to_proto_test.dart b/pkg/dart2js_info/test/json_to_proto_test.dart
index 67f7ef0..dd79ac1 100644
--- a/pkg/dart2js_info/test/json_to_proto_test.dart
+++ b/pkg/dart2js_info/test/json_to_proto_test.dart
@@ -40,7 +40,7 @@
 
       final expectedPrefixes = <InfoKind, String>{};
       for (final kind in InfoKind.values) {
-        expectedPrefixes[kind] = kindToString(kind) + '/';
+        expectedPrefixes[kind] = '${kindToString(kind)}/';
       }
 
       for (final info in proto.allInfos.entries) {
diff --git a/pkg/dartdev/lib/src/analysis_server.dart b/pkg/dartdev/lib/src/analysis_server.dart
index d135042..7c823da 100644
--- a/pkg/dartdev/lib/src/analysis_server.dart
+++ b/pkg/dartdev/lib/src/analysis_server.dart
@@ -205,6 +205,7 @@
       _shutdownResponseReceived = true;
       return null;
     }).timeout(timeout, onTimeout: () async {
+      log.stderr('The analysis server timed out while shutting down.');
       await dispose();
     }).then((value) async {
       await dispose();
diff --git a/pkg/dartdev/lib/src/commands/analyze.dart b/pkg/dartdev/lib/src/commands/analyze.dart
index 7bcc9c5..10d97e2 100644
--- a/pkg/dartdev/lib/src/commands/analyze.dart
+++ b/pkg/dartdev/lib/src/commands/analyze.dart
@@ -144,7 +144,7 @@
     await server.analysisFinished;
     analysisFinished = true;
 
-    await server.shutdown(timeout: Duration(milliseconds: 100));
+    await server.shutdown(timeout: Duration(seconds: 1));
 
     progress?.finish(showTiming: true);
 
diff --git a/pkg/dartdev/lib/src/commands/fix.dart b/pkg/dartdev/lib/src/commands/fix.dart
index dffebaa..0e78626 100644
--- a/pkg/dartdev/lib/src/commands/fix.dart
+++ b/pkg/dartdev/lib/src/commands/fix.dart
@@ -215,7 +215,7 @@
     for (var originalFile in dartFiles) {
       var filePath = originalFile.path;
       var baseName = path.basename(filePath);
-      var expectFileName = baseName + '.expect';
+      var expectFileName = '$baseName.expect';
       var expectFilePath = path.join(path.dirname(filePath), expectFileName);
       var expectFile = expectFileMap.remove(expectFilePath);
       if (expectFile == null) {
diff --git a/pkg/dartdev/lib/src/core.dart b/pkg/dartdev/lib/src/core.dart
index 439bdfd..de1b55e 100644
--- a/pkg/dartdev/lib/src/core.dart
+++ b/pkg/dartdev/lib/src/core.dart
@@ -171,8 +171,8 @@
   PackageConfig(this.contents);
 
   List<Map<String, dynamic>?> get packages {
-    List<dynamic> _packages = contents['packages'];
-    return _packages.map<Map<String, dynamic>?>(castStringKeyedMap).toList();
+    List<dynamic> packages = contents['packages'];
+    return packages.map<Map<String, dynamic>?>(castStringKeyedMap).toList();
   }
 
   bool hasDependency(String packageName) =>
diff --git a/pkg/dartdev/test/commands/analyze_test.dart b/pkg/dartdev/test/commands/analyze_test.dart
index a75b441..2ca1456 100644
--- a/pkg/dartdev/test/commands/analyze_test.dart
+++ b/pkg/dartdev/test/commands/analyze_test.dart
@@ -338,7 +338,7 @@
   });
 
   test('info implicit no --fatal-infos', () async {
-    p = project(mainSrc: dartVersionFilePrefix2_9 + 'String foo() {}');
+    p = project(mainSrc: '${dartVersionFilePrefix2_9}String foo() {}');
     var result = await p.run(['analyze', p.dirPath]);
 
     expect(result.exitCode, 0);
@@ -347,7 +347,7 @@
   });
 
   test('info --fatal-infos', () async {
-    p = project(mainSrc: dartVersionFilePrefix2_9 + 'String foo() {}');
+    p = project(mainSrc: '${dartVersionFilePrefix2_9}String foo() {}');
     var result = await p.run(['analyze', '--fatal-infos', p.dirPath]);
 
     expect(result.exitCode, 1);
diff --git a/pkg/dartdev/test/commands/help_test.dart b/pkg/dartdev/test/commands/help_test.dart
index 8aa3d74..1c9946c 100644
--- a/pkg/dartdev/test/commands/help_test.dart
+++ b/pkg/dartdev/test/commands/help_test.dart
@@ -18,14 +18,14 @@
   tearDown(() async => await p.dispose());
 
   /// Commands not tested by the following loop.
-  List<String> _commandsNotTested = <String>[
+  List<String> commandsNotTested = <String>[
     'help', // `dart help help` is redundant
     'test', // `dart help test` does not call `test:test --help`.
   ];
   DartdevRunner(['--no-analytics'])
       .commands
       .forEach((String commandKey, Command command) {
-    if (!_commandsNotTested.contains(commandKey)) {
+    if (!commandsNotTested.contains(commandKey)) {
       test('(help $commandKey == $commandKey --help)', () async {
         p = project();
         var result = await p.run(['help', commandKey]);
diff --git a/pkg/dartdev/test/commands/migrate_test.dart b/pkg/dartdev/test/commands/migrate_test.dart
index 24b0614..4ad721e 100644
--- a/pkg/dartdev/test/commands/migrate_test.dart
+++ b/pkg/dartdev/test/commands/migrate_test.dart
@@ -54,7 +54,7 @@
   });
 
   test('directory implicit', () async {
-    p = project(mainSrc: dartVersionFilePrefix2_9 + 'int get foo => 1;\n');
+    p = project(mainSrc: '${dartVersionFilePrefix2_9}int get foo => 1;\n');
     var result =
         await p.run(['migrate', '--no-web-preview'], workingDir: p.dirPath);
     expect(result.exitCode, 0);
@@ -63,7 +63,7 @@
   });
 
   test('directory explicit', () async {
-    p = project(mainSrc: dartVersionFilePrefix2_9 + 'int get foo => 1;\n');
+    p = project(mainSrc: '${dartVersionFilePrefix2_9}int get foo => 1;\n');
     var result = await p.run(['migrate', '--no-web-preview', p.dirPath]);
     expect(result.exitCode, 0);
     expect(result.stderr, isEmpty);
diff --git a/pkg/dartdev/test/commands/run_test.dart b/pkg/dartdev/test/commands/run_test.dart
index bf0f031..fc8bee9 100644
--- a/pkg/dartdev/test/commands/run_test.dart
+++ b/pkg/dartdev/test/commands/run_test.dart
@@ -14,7 +14,8 @@
 const String soundNullSafetyMessage = 'Info: Compiling with sound null safety';
 const devToolsMessagePrefix =
     'The Dart DevTools debugger and profiler is available at: http://127.0.0.1:';
-const observatoryMessagePrefix = 'Observatory listening on http://127.0.0.1:';
+const dartVMServiceMessagePrefix =
+    'The Dart VM service is listening on http://127.0.0.1:';
 
 void main() {
   group('run', run, timeout: longTimeout);
@@ -214,7 +215,7 @@
     expect(
       result.stdout,
       matches(
-          r'Observatory listening on http:\/\/127.0.0.1:8181\/[a-zA-Z0-9_-]+=\/\n.*'),
+          r'The Dart VM service is listening on http:\/\/127.0.0.1:8181\/[a-zA-Z0-9_-]+=\/\n.*'),
     );
     expect(result.stderr, isEmpty);
     expect(result.exitCode, 0);
@@ -236,7 +237,7 @@
 
     expect(
       result.stdout,
-      contains('Observatory listening on http://127.0.0.1:8181/\n'),
+      contains('The Dart VM service is listening on http://127.0.0.1:8181/\n'),
     );
     expect(result.stderr, isEmpty);
     expect(result.exitCode, 0);
@@ -258,7 +259,7 @@
     expect(
       result.stdout,
       matches(
-          r'Observatory listening on http:\/\/\[::1\]:8181\/[a-zA-Z0-9_-]+=\/\n.*'),
+          r'The Dart VM service is listening on http:\/\/\[::1\]:8181\/[a-zA-Z0-9_-]+=\/\n.*'),
     );
     expect(result.stderr, isEmpty);
     expect(result.exitCode, 0);
@@ -345,7 +346,8 @@
       ],
     );
     final regexp = RegExp(
-        r'Observatory listening on http:\/\/127.0.0.1:(\d*)\/[a-zA-Z0-9_-]+=\/\n.*');
+      r'The Dart VM service is listening on http:\/\/127.0.0.1:(\d*)\/[a-zA-Z0-9_-]+=\/\n.*',
+    );
     final vmServicePort =
         int.parse(regexp.firstMatch(result.stdout)!.group(1)!);
     expect(server.port != vmServicePort, isTrue);
@@ -380,7 +382,7 @@
           p.relativeFilePath,
         ]);
         expect(result.stdout, isNot(contains(devToolsMessagePrefix)));
-        expect(result.stdout, contains(observatoryMessagePrefix));
+        expect(result.stdout, contains(dartVMServiceMessagePrefix));
       });
 
       test('dart simple', () async {
@@ -391,7 +393,7 @@
           p.relativeFilePath,
         ]);
         expect(result.stdout, isNot(contains(devToolsMessagePrefix)));
-        expect(result.stdout, contains(observatoryMessagePrefix));
+        expect(result.stdout, contains(dartVMServiceMessagePrefix));
       });
     });
 
@@ -405,7 +407,7 @@
           p.relativeFilePath,
         ]);
         expect(result.stdout, contains(devToolsMessagePrefix));
-        expect(result.stdout, contains(observatoryMessagePrefix));
+        expect(result.stdout, contains(dartVMServiceMessagePrefix));
       });
 
       test('dart simple', () async {
@@ -416,7 +418,7 @@
           p.relativeFilePath,
         ]);
         expect(result.stdout, contains(devToolsMessagePrefix));
-        expect(result.stdout, contains(observatoryMessagePrefix));
+        expect(result.stdout, contains(dartVMServiceMessagePrefix));
       });
     });
   });
diff --git a/pkg/dartdev/test/utils_test.dart b/pkg/dartdev/test/utils_test.dart
index 811a0a5..642adbe 100644
--- a/pkg/dartdev/test/utils_test.dart
+++ b/pkg/dartdev/test/utils_test.dart
@@ -57,11 +57,11 @@
   group('castStringKeyedMap', () {
     test('fails', () {
       dynamic contents = json.decode(_packageData);
-      List<dynamic> _packages = contents['packages'];
+      List<dynamic> packages = contents['packages'];
       try {
         // ignore: unused_local_variable
-        List<Map<String, dynamic>> packages =
-            _packages as List<Map<String, dynamic>>;
+        List<Map<String, dynamic>> mappedPackages =
+            packages as List<Map<String, dynamic>>;
         fail('expected implicit cast to fail');
       } on TypeError {
         // TypeError is expected
@@ -70,10 +70,10 @@
 
     test('succeeds', () {
       dynamic contents = json.decode(_packageData);
-      List<dynamic> _packages = contents['packages'];
-      List<Map<String, dynamic>> packages =
-          _packages.map<Map<String, dynamic>>(castStringKeyedMap).toList();
-      expect(packages, isList);
+      List<dynamic> packages = contents['packages'];
+      List<Map<String, dynamic>> mappedPackages =
+          packages.map<Map<String, dynamic>>(castStringKeyedMap).toList();
+      expect(mappedPackages, isList);
     });
   });
 
diff --git a/pkg/dds/test/dap/integration/debug_attach_test.dart b/pkg/dds/test/dap/integration/debug_attach_test.dart
index 810a15f..846b3db 100644
--- a/pkg/dds/test/dap/integration/debug_attach_test.dart
+++ b/pkg/dds/test/dap/integration/debug_attach_test.dart
@@ -50,7 +50,7 @@
           // The stdout also contains the Observatory+DevTools banners.
           .where(
             (line) =>
-                !line.startsWith('Observatory listening on') &&
+                !line.startsWith('The Dart VM service is listening on') &&
                 !line.startsWith(
                     'The Dart DevTools debugger and profiler is available at'),
           )
@@ -103,7 +103,7 @@
           // The stdout also contains the Observatory+DevTools banners.
           .where(
             (line) =>
-                !line.startsWith('Observatory listening on') &&
+                !line.startsWith('The Dart VM service is listening on') &&
                 !line.startsWith(
                     'The Dart DevTools debugger and profiler is available at'),
           )
diff --git a/pkg/dds/test/dap/integration/test_support.dart b/pkg/dds/test/dap/integration/test_support.dart
index 7a55bb2..1c0dc21 100644
--- a/pkg/dds/test/dap/integration/test_support.dart
+++ b/pkg/dds/test/dap/integration/test_support.dart
@@ -44,9 +44,10 @@
 /// an authentication token.
 final vmServiceAuthCodePathPattern = RegExp(r'^/[\w_\-=]{5,15}/ws$');
 
-/// A [RegExp] that matches the "Observatory listening on" banner that is sent
+/// A [RegExp] that matches the "The Dart VM service is listening on" banner that is sent
 /// by the VM when not using --write-service-info.
-final vmServiceBannerPattern = RegExp(r'Observatory listening on ([^\s]+)\s');
+final vmServiceBannerPattern =
+    RegExp(r'The Dart VM service is listening on ([^\s]+)\s');
 
 /// The root of the SDK containing the current running VM.
 final sdkRoot = path.dirname(path.dirname(Platform.resolvedExecutable));
diff --git a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
index 06d5941..379746d 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_metalet.dart
@@ -322,7 +322,7 @@
   /// Compute fresh IDs to avoid
   static int _uniqueId = 0;
 
-  MetaLetVariable(this.displayName) : super(displayName + '@${++_uniqueId}');
+  MetaLetVariable(this.displayName) : super('$displayName@${++_uniqueId}');
 }
 
 class _VariableUseCounter extends BaseVisitor<void> {
diff --git a/pkg/dev_compiler/lib/src/compiler/js_names.dart b/pkg/dev_compiler/lib/src/compiler/js_names.dart
index 186a316..9e95de7 100644
--- a/pkg/dev_compiler/lib/src/compiler/js_names.dart
+++ b/pkg/dev_compiler/lib/src/compiler/js_names.dart
@@ -97,7 +97,7 @@
 /// `function` or `instanceof`, and their `name` field controls whether they
 /// refer to the same variable.
 class TemporaryNamer extends LocalNamer {
-  _FunctionScope scope;
+  _FunctionScope _scope;
 
   /// Listener to be notified when a name is selected (rename or not) for an
   /// `Identifier`.
@@ -106,23 +106,23 @@
   final NameListener _nameListener;
 
   TemporaryNamer(Node node, [this._nameListener])
-      : scope = _RenameVisitor.build(node).rootScope;
+      : _scope = _RenameVisitor.build(node).rootScope;
 
   @override
   String getName(Identifier node) {
-    var name = scope.renames[identifierKey(node)] ?? node.name;
+    var name = _scope.renames[identifierKey(node)] ?? node.name;
     _nameListener?.nameSelected(node, name);
     return name;
   }
 
   @override
   void enterScope(Node node) {
-    scope = scope.childScopes[node];
+    _scope = _scope.childScopes[node];
   }
 
   @override
   void leaveScope() {
-    scope = scope.parent;
+    _scope = _scope.parent;
   }
 }
 
diff --git a/pkg/dev_compiler/lib/src/compiler/module_builder.dart b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
index 14685a4..9e89dc5 100644
--- a/pkg/dev_compiler/lib/src/compiler/module_builder.dart
+++ b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
@@ -490,7 +490,7 @@
 
 /// Creates function name given [moduleName].
 String loadFunctionName(String moduleName) =>
-    'load__' + pathToJSIdentifier(moduleName.replaceAll('.', '_'));
+    'load__${pathToJSIdentifier(moduleName.replaceAll('.', '_'))}';
 
 /// Creates function name identifier given [moduleName].
 Identifier loadFunctionIdentifier(String moduleName) =>
diff --git a/pkg/dev_compiler/lib/src/compiler/module_containers.dart b/pkg/dev_compiler/lib/src/compiler/module_containers.dart
index a669e71..8e954be 100644
--- a/pkg/dev_compiler/lib/src/compiler/module_containers.dart
+++ b/pkg/dev_compiler/lib/src/compiler/module_containers.dart
@@ -9,7 +9,7 @@
 import '../js_ast/js_ast.dart' show js;
 
 /// Defines how to emit a value of a table
-typedef _EmitValue<K> = js_ast.Expression Function(K, ModuleItemData);
+typedef EmitValue<K> = js_ast.Expression Function(K, ModuleItemData);
 
 /// Represents a top-level property hoisted to a top-level object.
 class ModuleItemData {
@@ -125,7 +125,7 @@
   /// necessary.
   ///
   /// Uses [emitValue] to emit the values in the table.
-  List<js_ast.Statement> emit({_EmitValue<K> emitValue});
+  List<js_ast.Statement> emit({EmitValue<K> emitValue});
 }
 
 /// Associates a [K] with a container-unique JS key and arbitrary JS value.
@@ -184,7 +184,7 @@
   }
 
   @override
-  List<js_ast.Statement> emit({_EmitValue<K> emitValue}) {
+  List<js_ast.Statement> emit({EmitValue<K> emitValue}) {
     var containersToProperties = <js_ast.Identifier, List<js_ast.Property>>{};
     moduleItems.forEach((k, v) {
       if (!incrementalMode && _noEmit.contains(k)) return;
@@ -240,7 +240,7 @@
   }
 
   @override
-  List<js_ast.Statement> emit({_EmitValue<K> emitValue}) {
+  List<js_ast.Statement> emit({EmitValue<K> emitValue}) {
     var properties = List<js_ast.Expression>.filled(length, null);
 
     // If the entire array holds just one value, generate a short initializer.
diff --git a/pkg/dev_compiler/lib/src/js_ast/printer.dart b/pkg/dev_compiler/lib/src/js_ast/printer.dart
index ff54cdb..5d81fe5 100644
--- a/pkg/dev_compiler/lib/src/js_ast/printer.dart
+++ b/pkg/dev_compiler/lib/src/js_ast/printer.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.9
 
-// ignore_for_file: always_declare_return_types, prefer_single_quotes
+// ignore_for_file: always_declare_return_types, prefer_single_quotes, prefer_interpolation_to_compose_strings
 // ignore_for_file: prefer_collection_literals, omit_local_variable_types
 // ignore_for_file: prefer_final_fields
 // ignore_for_file: prefer_initializing_formals
diff --git a/pkg/dev_compiler/lib/src/kernel/command.dart b/pkg/dev_compiler/lib/src/kernel/command.dart
index 6f81197..bc13226 100644
--- a/pkg/dev_compiler/lib/src/kernel/command.dart
+++ b/pkg/dev_compiler/lib/src/kernel/command.dart
@@ -177,7 +177,7 @@
 
   Uri toCustomUri(Uri uri) {
     if (!uri.hasScheme) {
-      return Uri(scheme: options.multiRootScheme, path: '/' + uri.path);
+      return Uri(scheme: options.multiRootScheme, path: '/${uri.path}');
     }
     return uri;
   }
@@ -381,7 +381,7 @@
     if (identical(compilerState, oldCompilerState)) {
       component.unbindCanonicalNames();
     }
-    var sink = File(p.withoutExtension(outPaths.first) + '.dill').openWrite();
+    var sink = File('${p.withoutExtension(outPaths.first)}.dill').openWrite();
     // TODO(jmesserly): this appears to save external libraries.
     // Do we need to run them through an outlining step so they can be saved?
     kernel.BinaryPrinter(sink).writeComponentFile(component);
@@ -404,7 +404,7 @@
     if (identical(compilerState, oldCompilerState)) {
       compiledLibraries.unbindCanonicalNames();
     }
-    fullDillUri = p.withoutExtension(outPaths.first) + '.full.dill';
+    fullDillUri = '${p.withoutExtension(outPaths.first)}.full.dill';
     var sink = File(fullDillUri).openWrite();
     kernel.BinaryPrinter(sink).writeComponentFile(compiledLibraries);
     outFiles.add(sink.flush().then((_) => sink.close()));
@@ -418,8 +418,8 @@
     }
     var sb = StringBuffer();
     kernel.Printer(sb).writeComponentFile(component);
-    outFiles.add(File(outPaths.first + '.txt').writeAsString(sb.toString()));
-    outFiles.add(File(outPaths.first.split('.')[0] + '.ast.xml')
+    outFiles.add(File('${outPaths.first}.txt').writeAsString(sb.toString()));
+    outFiles.add(File('${outPaths.first.split('.')[0]}.ast.xml')
         .writeAsString(DebugPrinter.prettyPrint(compiledLibraries)));
   }
 
@@ -583,7 +583,7 @@
         buildSourceMap: options.sourceMap,
         inlineSourceMap: options.inlineSourceMap,
         jsUrl: p.toUri(output).toString(),
-        mapUrl: p.toUri(output + '.map').toString(),
+        mapUrl: p.toUri('$output.map').toString(),
         customScheme: options.multiRootScheme,
         multiRootOutputPath: options.multiRootOutputPath,
         component: component);
@@ -591,7 +591,7 @@
     outFiles.add(file.writeAsString(jsCode.code));
     if (jsCode.sourceMap != null) {
       outFiles.add(
-          File(output + '.map').writeAsString(json.encode(jsCode.sourceMap)));
+          File('$output.map').writeAsString(json.encode(jsCode.sourceMap)));
     }
   }
   await Future.wait(outFiles);
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index f0a8fc7..29d4048 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -1134,8 +1134,8 @@
       var mixinType =
           _hierarchy.getClassAsInstanceOf(c, mixinClass).asInterfaceType;
       var mixinName =
-          getLocalClassName(superclass) + '_' + getLocalClassName(mixinClass);
-      var mixinId = _emitTemporaryId(mixinName + '\$');
+          '${getLocalClassName(superclass)}_${getLocalClassName(mixinClass)}';
+      var mixinId = _emitTemporaryId('$mixinName\$');
       // Collect all forwarding stub setters from anonymous mixins classes.
       // These will contain covariant parameter checks that need to be applied.
       var savedClassProperties = _classProperties;
@@ -1246,7 +1246,7 @@
           case 'Future':
           case 'Stream':
           case 'StreamSubscription':
-            return runtimeCall('is' + interface.name);
+            return runtimeCall('is${interface.name}');
         }
       }
       return null;
@@ -2635,7 +2635,7 @@
 
   js_ast.PropertyAccess _emitFutureOrNameNoInterop({String suffix = ''}) {
     return js_ast.PropertyAccess(emitLibraryName(_coreTypes.asyncLibrary),
-        propertyName('FutureOr' + suffix));
+        propertyName('FutureOr$suffix'));
   }
 
   /// Emits the member name portion of a top-level member.
@@ -6450,11 +6450,11 @@
     // Emit the constant as an integer, if possible.
     if (value.isFinite) {
       var intValue = value.toInt();
-      const _MIN_INT32 = -0x80000000;
-      const _MAX_INT32 = 0x7FFFFFFF;
+      const minInt32 = -0x80000000;
+      const maxInt32 = 0x7FFFFFFF;
       if (intValue.toDouble() == value &&
-          intValue >= _MIN_INT32 &&
-          intValue <= _MAX_INT32) {
+          intValue >= minInt32 &&
+          intValue <= maxInt32) {
         return js.number(intValue);
       }
     }
@@ -6474,7 +6474,7 @@
   js_ast.Expression visitStringConstant(StringConstant node) =>
       js.escapedString(node.value, '"');
 
-  // DDC does not currently use the non-primivite constant nodes; rather these
+  // DDC does not currently use the non-primitive constant nodes; rather these
   // are emitted via their normal expression nodes.
   @override
   js_ast.Expression defaultConstant(Constant node) => _emitInvalidNode(node);
diff --git a/pkg/dev_compiler/test/modular_suite.dart b/pkg/dev_compiler/test/modular_suite.dart
index 77ee34f..0df7a21 100644
--- a/pkg/dev_compiler/test/modular_suite.dart
+++ b/pkg/dev_compiler/test/modular_suite.dart
@@ -266,7 +266,7 @@
     ''';
 
     var wrapper =
-        root.resolveUri(toUri(module, jsId)).toFilePath() + '.wrapper.js';
+        '${root.resolveUri(toUri(module, jsId)).toFilePath()}.wrapper.js';
     await File(wrapper).writeAsString(runjs);
     var d8Args = ['--module', wrapper];
     var result = await _runProcess(
diff --git a/pkg/dev_compiler/test/modular_suite_nnbd.dart b/pkg/dev_compiler/test/modular_suite_nnbd.dart
index 2cba274..4c7c3b0 100644
--- a/pkg/dev_compiler/test/modular_suite_nnbd.dart
+++ b/pkg/dev_compiler/test/modular_suite_nnbd.dart
@@ -270,7 +270,7 @@
     ''';
 
     var wrapper =
-        root.resolveUri(toUri(module, jsId)).toFilePath() + '.wrapper.js';
+        '${root.resolveUri(toUri(module, jsId)).toFilePath()}.wrapper.js';
     await File(wrapper).writeAsString(runjs);
     var d8Args = ['--module', wrapper];
     var result = await _runProcess(
diff --git a/pkg/dev_compiler/web/source_map_stack_trace.dart b/pkg/dev_compiler/web/source_map_stack_trace.dart
index aa9eaa6..cb74f58 100644
--- a/pkg/dev_compiler/web/source_map_stack_trace.dart
+++ b/pkg/dev_compiler/web/source_map_stack_trace.dart
@@ -52,7 +52,7 @@
         }
         var packageRoot = '$root/packages';
         if (p.url.isWithin(packageRoot, sourceUrl)) {
-          sourceUrl = 'package:' + p.url.relative(sourceUrl, from: packageRoot);
+          sourceUrl = 'package:${p.url.relative(sourceUrl, from: packageRoot)}';
           break;
         }
       }
diff --git a/pkg/front_end/test/hot_reload_e2e_test.dart b/pkg/front_end/test/hot_reload_e2e_test.dart
index 07cf63b..aa8e855 100644
--- a/pkg/front_end/test/hot_reload_e2e_test.dart
+++ b/pkg/front_end/test/hot_reload_e2e_test.dart
@@ -86,8 +86,8 @@
 
   Future<int> computeVmPort() async {
     var portLine = await lines[0];
-    Expect.isTrue(observatoryPortRegExp.hasMatch(portLine));
-    var match = observatoryPortRegExp.firstMatch(portLine);
+    Expect.isTrue(dartVMServicePortRegExp.hasMatch(portLine));
+    var match = dartVMServicePortRegExp.firstMatch(portLine);
     return int.parse(match!.group(1)!);
   }
 
@@ -384,5 +384,5 @@
 void g() {}
 ''';
 
-RegExp observatoryPortRegExp =
-    new RegExp("Observatory listening on http://127.0.0.1:\([0-9]*\)/");
+RegExp dartVMServicePortRegExp = new RegExp(
+    "The Dart VM service is listening on http://127.0.0.1:\([0-9]*\)/");
diff --git a/pkg/front_end/test/vm_service_helper.dart b/pkg/front_end/test/vm_service_helper.dart
index f2d3cb6..ac33557 100644
--- a/pkg/front_end/test/vm_service_helper.dart
+++ b/pkg/front_end/test/vm_service_helper.dart
@@ -166,10 +166,10 @@
         .transform(utf8.decoder)
         .transform(new LineSplitter())
         .listen((line) {
-      const kObservatoryListening = 'Observatory listening on ';
-      if (line.startsWith(kObservatoryListening)) {
+      const kDartVMServiceListening = 'The Dart VM service is listening on ';
+      if (line.startsWith(kDartVMServiceListening)) {
         Uri observatoryUri =
-            Uri.parse(line.substring(kObservatoryListening.length));
+            Uri.parse(line.substring(kDartVMServiceListening.length));
         _setupAndRun(observatoryUri).catchError((e, st) {
           // Manually kill the process or it will leak,
           // see http://dartbug.com/42918
diff --git a/pkg/front_end/test/weekly_tester.dart b/pkg/front_end/test/weekly_tester.dart
index 077210e..5f52e98 100644
--- a/pkg/front_end/test/weekly_tester.dart
+++ b/pkg/front_end/test/weekly_tester.dart
@@ -169,7 +169,7 @@
       .transform(new LineSplitter())
       .listen((line) {
     print("$id stderr> $line");
-    if (line.contains("Observatory listening on")) {
+    if (line.contains("The Dart VM service is listening on")) {
       observatoryLines.add(line);
     }
   });
@@ -178,7 +178,7 @@
       .transform(new LineSplitter())
       .listen((line) {
     print("$id stdout> $line");
-    if (line.contains("Observatory listening on")) {
+    if (line.contains("The Dart VM service is listening on")) {
       observatoryLines.add(line);
     }
   });
diff --git a/pkg/native_stack_traces/bin/decode.dart b/pkg/native_stack_traces/bin/decode.dart
index a7ca956..12c61ef 100644
--- a/pkg/native_stack_traces/bin/decode.dart
+++ b/pkg/native_stack_traces/bin/decode.dart
@@ -244,9 +244,9 @@
     final addr = dwarf.virtualAddressOf(offset);
     final frames = dwarf
         .callInfoFor(addr, includeInternalFrames: verbose)
-        ?.map((CallInfo c) => '  ' + c.toString());
+        ?.map((CallInfo c) => '  $c');
     final addrString =
-        addr > 0 ? '0x' + addr.toRadixString(16) : addr.toString();
+        addr > 0 ? '0x${addr.toRadixString(16)}' : addr.toString();
     print('For virtual address $addrString:');
     if (frames == null) {
       print('  Invalid virtual address.');
@@ -283,7 +283,7 @@
       .transform(utf8.decoder)
       .transform(const LineSplitter())
       .transform(DwarfStackTraceDecoder(dwarf, includeInternalFrames: verbose))
-      .map((s) => s + '\n')
+      .map((s) => '$s\n')
       .transform(utf8.encoder);
 
   await output.addStream(convertedStream);
diff --git a/pkg/native_stack_traces/lib/src/dwarf.dart b/pkg/native_stack_traces/lib/src/dwarf.dart
index 06ace82..93a2af4 100644
--- a/pkg/native_stack_traces/lib/src/dwarf.dart
+++ b/pkg/native_stack_traces/lib/src/dwarf.dart
@@ -165,7 +165,7 @@
       case _AttributeForm.flag:
         return value.toString();
       case _AttributeForm.address:
-        return '0x' + paddedHex(value as int, unit?.header.addressSize ?? 0);
+        return '0x${paddedHex(value as int, unit?.header.addressSize ?? 0)}';
       case _AttributeForm.sectionOffset:
         return paddedHex(value as int, 4);
       case _AttributeForm.constant:
@@ -274,6 +274,7 @@
 class DebugInformationEntry {
   // The index of the entry in the abbreviation table for this DIE.
   final int code;
+  // ignore: library_private_types_in_public_api
   final Map<_Attribute, Object> attributes;
   final Map<int, DebugInformationEntry> children;
 
@@ -310,8 +311,10 @@
     return null;
   }
 
+  // ignore: library_private_types_in_public_api
   bool containsKey(_AttributeName name) => _namedAttribute(name) != null;
 
+  // ignore: library_private_types_in_public_api
   Object? operator [](_AttributeName name) => attributes[_namedAttribute(name)];
 
   int? get sectionOffset => this[_AttributeName.statementList] as int?;
@@ -408,7 +411,7 @@
           ..write(' (at offset 0x')
           ..write(paddedHex(offset))
           ..writeln('):');
-        child.writeToStringBuffer(buffer, unit: unit, indent: indent + '  ');
+        child.writeToStringBuffer(buffer, unit: unit, indent: '$indent  ');
       }
     }
   }
@@ -426,13 +429,16 @@
   final int version;
   final int abbreviationsOffset;
   final int addressSize;
+  // ignore: library_private_types_in_public_api
   final _AbbreviationsTable abbreviations;
 
   CompilationUnitHeader._(this.size, this.version, this.abbreviationsOffset,
       this.addressSize, this.abbreviations);
 
   static CompilationUnitHeader? fromReader(
-      Reader reader, Map<int, _AbbreviationsTable> abbreviationsTables) {
+      Reader reader,
+      // ignore: library_private_types_in_public_api
+      Map<int, _AbbreviationsTable> abbreviationsTables) {
     final size = _initialLengthValue(reader);
     // An empty unit is an ending marker.
     if (size == 0) return null;
@@ -481,7 +487,9 @@
   CompilationUnit._(this.header, this.referenceTable);
 
   static CompilationUnit? fromReader(
-      Reader reader, Map<int, _AbbreviationsTable> abbreviationsTables) {
+      Reader reader,
+      // ignore: library_private_types_in_public_api
+      Map<int, _AbbreviationsTable> abbreviationsTables) {
     final header =
         CompilationUnitHeader.fromReader(reader, abbreviationsTables);
     if (header == null) return null;
@@ -553,7 +561,9 @@
   DebugInfo._(this.units);
 
   static DebugInfo fromReader(
-      Reader reader, Map<int, _AbbreviationsTable> abbreviationsTable) {
+      Reader reader,
+      // ignore: library_private_types_in_public_api
+      Map<int, _AbbreviationsTable> abbreviationsTable) {
     final units = reader
         .readRepeated(
             (r) => CompilationUnit.fromReader(reader, abbreviationsTable))
diff --git a/pkg/vm/test/incremental_compiler_test.dart b/pkg/vm/test/incremental_compiler_test.dart
index ef627ac..6e0473c 100644
--- a/pkg/vm/test/incremental_compiler_test.dart
+++ b/pkg/vm/test/incremental_compiler_test.dart
@@ -499,9 +499,9 @@
         list.path
       ]);
 
-      const kObservatoryListening = 'Observatory listening on ';
-      final RegExp observatoryPortRegExp =
-          new RegExp("Observatory listening on http://127.0.0.1:\([0-9]*\)");
+      const kDartVMServiceListening = 'The Dart VM service is listening on ';
+      final RegExp dartVMServicePortRegExp = new RegExp(
+          "The Dart VM service is listening on http://127.0.0.1:\([0-9]*\)");
       int port;
       final splitter = new LineSplitter();
       Completer<String> portLineCompleter = new Completer<String>();
@@ -509,9 +509,9 @@
           .transform(utf8.decoder)
           .transform(splitter)
           .listen((String s) async {
-        if (s.startsWith(kObservatoryListening)) {
-          expect(observatoryPortRegExp.hasMatch(s), isTrue);
-          final match = observatoryPortRegExp.firstMatch(s)!;
+        if (s.startsWith(kDartVMServiceListening)) {
+          expect(dartVMServicePortRegExp.hasMatch(s), isTrue);
+          final match = dartVMServicePortRegExp.firstMatch(s)!;
           port = int.parse(match.group(1)!);
           await collectAndCheckCoverageData(port, true);
           if (!portLineCompleter.isCompleted) {
@@ -603,9 +603,9 @@
         list.path
       ]);
 
-      const kObservatoryListening = 'Observatory listening on ';
-      final RegExp observatoryPortRegExp =
-          new RegExp("Observatory listening on http://127.0.0.1:\([0-9]*\)");
+      const kDartVMServiceListening = 'The Dart VM service is listening on ';
+      final RegExp dartVMServicePortRegExp = new RegExp(
+          "The Dart VM service is listening on http://127.0.0.1:\([0-9]*\)");
       int port;
       final splitter = new LineSplitter();
       Completer<String> portLineCompleter = new Completer<String>();
@@ -618,9 +618,9 @@
         if (s == expectStdoutContains) {
           foundExpectedString = true;
         }
-        if (s.startsWith(kObservatoryListening)) {
-          expect(observatoryPortRegExp.hasMatch(s), isTrue);
-          final match = observatoryPortRegExp.firstMatch(s)!;
+        if (s.startsWith(kDartVMServiceListening)) {
+          expect(dartVMServicePortRegExp.hasMatch(s), isTrue);
+          final match = dartVMServicePortRegExp.firstMatch(s)!;
           port = int.parse(match.group(1)!);
           await collectAndCheckCoverageData(port, true,
               onGetAllVerifyCount: false, coverageForLines: coverageLines);
@@ -869,9 +869,9 @@
         list.path
       ]);
 
-      const kObservatoryListening = 'Observatory listening on ';
-      final RegExp observatoryPortRegExp =
-          new RegExp("Observatory listening on http://127.0.0.1:\([0-9]*\)");
+      const kDartVMServiceListening = 'The Dart VM service is listening on ';
+      final RegExp dartVMServicePortRegExp = new RegExp(
+          "The Dart VM service is listening on http://127.0.0.1:\([0-9]*\)");
       int port;
       final splitter = new LineSplitter();
       Completer<String> portLineCompleter = new Completer<String>();
@@ -879,9 +879,9 @@
           .transform(utf8.decoder)
           .transform(splitter)
           .listen((String s) async {
-        if (s.startsWith(kObservatoryListening)) {
-          expect(observatoryPortRegExp.hasMatch(s), isTrue);
-          final match = observatoryPortRegExp.firstMatch(s)!;
+        if (s.startsWith(kDartVMServiceListening)) {
+          expect(dartVMServicePortRegExp.hasMatch(s), isTrue);
+          final match = dartVMServicePortRegExp.firstMatch(s)!;
           port = int.parse(match.group(1)!);
           Set<int> hits1 =
               await collectAndCheckCoverageData(port, true, resume: false);
@@ -972,10 +972,10 @@
 
       String portLine = await portLineCompleter.future;
 
-      final RegExp observatoryPortRegExp =
-          new RegExp("Observatory listening on http://127.0.0.1:\([0-9]*\)");
-      expect(observatoryPortRegExp.hasMatch(portLine), isTrue);
-      final match = observatoryPortRegExp.firstMatch(portLine)!;
+      final RegExp dartVMServicePortRegExp = new RegExp(
+          "The Dart VM service is listening on http://127.0.0.1:\([0-9]*\)");
+      expect(dartVMServicePortRegExp.hasMatch(portLine), isTrue);
+      final match = dartVMServicePortRegExp.firstMatch(portLine)!;
       final port = int.parse(match.group(1)!);
 
       var remoteVm = new RemoteVm(port);
@@ -1256,9 +1256,9 @@
         scriptOrDill.path
       ]);
 
-      const kObservatoryListening = 'Observatory listening on ';
-      final RegExp observatoryPortRegExp =
-          new RegExp("Observatory listening on http://127.0.0.1:\([0-9]*\)");
+      const kDartVMServiceListening = 'The Dart VM service is listening on ';
+      final RegExp dartVMServicePortRegExp = new RegExp(
+          "The Dart VM service is listening on http://127.0.0.1:\([0-9]*\)");
       int port;
       final splitter = new LineSplitter();
       Completer<String> portLineCompleter = new Completer<String>();
@@ -1267,9 +1267,9 @@
           .transform(splitter)
           .listen((String s) async {
         print("vm stdout: $s");
-        if (s.startsWith(kObservatoryListening)) {
-          expect(observatoryPortRegExp.hasMatch(s), isTrue);
-          final match = observatoryPortRegExp.firstMatch(s)!;
+        if (s.startsWith(kDartVMServiceListening)) {
+          expect(dartVMServicePortRegExp.hasMatch(s), isTrue);
+          final match = dartVMServicePortRegExp.firstMatch(s)!;
           port = int.parse(match.group(1)!);
           RemoteVm remoteVm = new RemoteVm(port);
 
diff --git a/pkg/vm_service/test/common/test_helper.dart b/pkg/vm_service/test/common/test_helper.dart
index 8415c74..7561ce0 100644
--- a/pkg/vm_service/test/common/test_helper.dart
+++ b/pkg/vm_service/test/common/test_helper.dart
@@ -205,9 +205,9 @@
           .transform(utf8.decoder)
           .transform(LineSplitter())
           .listen((line) {
-        const kObservatoryListening = 'Observatory listening on ';
-        if (line.startsWith(kObservatoryListening)) {
-          uri = Uri.parse(line.substring(kObservatoryListening.length));
+        const kDartVMServiceListening = 'The Dart VM service is listening on ';
+        if (line.startsWith(kDartVMServiceListening)) {
+          uri = Uri.parse(line.substring(kDartVMServiceListening.length));
         }
         if (pause_on_start || line == '') {
           // Received blank line.
diff --git a/pkg/vm_snapshot_analysis/lib/ascii_table.dart b/pkg/vm_snapshot_analysis/lib/ascii_table.dart
index 4650cca..39455d8 100644
--- a/pkg/vm_snapshot_analysis/lib/ascii_table.dart
+++ b/pkg/vm_snapshot_analysis/lib/ascii_table.dart
@@ -102,7 +102,7 @@
   String render(int width) {
     if (value.length > width) {
       // Narrowed column.
-      return value.substring(0, width - 2) + '..';
+      return '${value.substring(0, width - 2)}..';
     }
     switch (direction) {
       case AlignmentDirection.left:
diff --git a/pkg/vm_snapshot_analysis/test/utils.dart b/pkg/vm_snapshot_analysis/test/utils.dart
index 0d52b80..cea4a7f 100644
--- a/pkg/vm_snapshot_analysis/test/utils.dart
+++ b/pkg/vm_snapshot_analysis/test/utils.dart
@@ -91,7 +91,7 @@
   });
 }
 
-late final shouldKeepTemporaryDirectories =
+final shouldKeepTemporaryDirectories =
     Platform.environment['KEEP_TEMPORARY_DIRECTORIES']?.isNotEmpty == true;
 
 Future withTempDir(Future Function(String dir) f) async {
diff --git a/runtime/bin/main_options.cc b/runtime/bin/main_options.cc
index 7cb1c3f..fa8401a 100644
--- a/runtime/bin/main_options.cc
+++ b/runtime/bin/main_options.cc
@@ -168,7 +168,7 @@
 "--write-service-info=<file_uri>\n"
 "  Outputs information necessary to connect to the VM service to the\n"
 "  specified file in JSON format. Useful for clients which are unable to\n"
-"  listen to stdout for the Observatory listening message.\n"
+"  listen to stdout for the Dart VM service listening message.\n"
 #endif  // !defined(PRODUCT)
 "--snapshot-kind=<snapshot_kind>\n"
 "--snapshot=<file_name>\n"
diff --git a/runtime/observatory/tests/service/sigquit_starts_service_test.dart b/runtime/observatory/tests/service/sigquit_starts_service_test.dart
index 911c12d..357a986 100644
--- a/runtime/observatory/tests/service/sigquit_starts_service_test.dart
+++ b/runtime/observatory/tests/service/sigquit_starts_service_test.dart
@@ -23,7 +23,7 @@
     sub = process.stdout.transform(utf8.decoder).listen((e) async {
       if (e.contains('ready') && !readyCompleter.isCompleted) {
         readyCompleter.complete();
-      } else if (e.contains('Observatory listening on')) {
+      } else if (e.contains('The Dart VM service is listening on')) {
         await sub.cancel();
         completer.complete();
       }
diff --git a/runtime/observatory_2/tests/service_2/sigquit_starts_service_test.dart b/runtime/observatory_2/tests/service_2/sigquit_starts_service_test.dart
index b056477..7320f09 100644
--- a/runtime/observatory_2/tests/service_2/sigquit_starts_service_test.dart
+++ b/runtime/observatory_2/tests/service_2/sigquit_starts_service_test.dart
@@ -23,7 +23,7 @@
     sub = process.stdout.transform(utf8.decoder).listen((e) async {
       if (e.contains('ready') && !readyCompleter.isCompleted) {
         readyCompleter.complete();
-      } else if (e.contains('Observatory listening on')) {
+      } else if (e.contains('The Dart VM service is listening on')) {
         await sub.cancel();
         completer.complete();
       }
diff --git a/runtime/tests/vm/dart_2/isolates/reload_utils.dart b/runtime/tests/vm/dart_2/isolates/reload_utils.dart
index c973017..c1c9e96 100644
--- a/runtime/tests/vm/dart_2/isolates/reload_utils.dart
+++ b/runtime/tests/vm/dart_2/isolates/reload_utils.dart
@@ -166,7 +166,7 @@
   }
 
   Future _waitUntilService() async {
-    final needle = 'Observatory listening on ';
+    final needle = 'The Dart VM service is listening on ';
     final line = await waitUntilStdoutContains(needle);
     final Uri uri = Uri.parse(line.substring(needle.length));
     assert(_remoteVm == null);
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index eb99152..72b9021 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -1205,9 +1205,9 @@
   if (!ServiceIsolate::IsRunning()) {
     OS::PrintErr("  Start the vm-service to debug.\n");
   } else if (ServiceIsolate::server_address() == NULL) {
-    OS::PrintErr("  Connect to Observatory to debug.\n");
+    OS::PrintErr("  Connect to the Dart VM service to debug.\n");
   } else {
-    OS::PrintErr("  Connect to Observatory at %s to debug.\n",
+    OS::PrintErr("  Connect to the Dart VM service at %s to debug.\n",
                  ServiceIsolate::server_address());
   }
   const Error& err = Error::Handle(Thread::Current()->sticky_error());
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart
index 413116c..a70800f 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart
@@ -389,23 +389,23 @@
 @patch
 class InternetAddress {
   @patch
-  static InternetAddress get LOOPBACK_IP_V4 {
-    throw UnsupportedError("InternetAddress.LOOPBACK_IP_V4");
+  static InternetAddress get loopbackIPv4 {
+    throw UnsupportedError("InternetAddress.loopbackIPv4");
   }
 
   @patch
-  static InternetAddress get LOOPBACK_IP_V6 {
-    throw UnsupportedError("InternetAddress.LOOPBACK_IP_V6");
+  static InternetAddress get loopbackIPv6 {
+    throw UnsupportedError("InternetAddress.loopbackIPv6");
   }
 
   @patch
-  static InternetAddress get ANY_IP_V4 {
-    throw UnsupportedError("InternetAddress.ANY_IP_V4");
+  static InternetAddress get anyIPv4 {
+    throw UnsupportedError("InternetAddress.anyIPv4");
   }
 
   @patch
-  static InternetAddress get ANY_IP_V6 {
-    throw UnsupportedError("InternetAddress.ANY_IP_V6");
+  static InternetAddress get anyIPv6 {
+    throw UnsupportedError("InternetAddress.anyIPv6");
   }
 
   @patch
diff --git a/sdk/lib/_internal/js_runtime/lib/io_patch.dart b/sdk/lib/_internal/js_runtime/lib/io_patch.dart
index ae50e7b..e22aae2 100644
--- a/sdk/lib/_internal/js_runtime/lib/io_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/io_patch.dart
@@ -389,23 +389,23 @@
 @patch
 class InternetAddress {
   @patch
-  static InternetAddress get LOOPBACK_IP_V4 {
-    throw new UnsupportedError("InternetAddress.LOOPBACK_IP_V4");
+  static InternetAddress get loopbackIPv4 {
+    throw new UnsupportedError("InternetAddress.loopbackIPv4");
   }
 
   @patch
-  static InternetAddress get LOOPBACK_IP_V6 {
-    throw new UnsupportedError("InternetAddress.LOOPBACK_IP_V6");
+  static InternetAddress get loopbackIPv6 {
+    throw new UnsupportedError("InternetAddress.loopbackIPv6");
   }
 
   @patch
-  static InternetAddress get ANY_IP_V4 {
-    throw new UnsupportedError("InternetAddress.ANY_IP_V4");
+  static InternetAddress get anyIPv4 {
+    throw new UnsupportedError("InternetAddress.anyIPv4");
   }
 
   @patch
-  static InternetAddress get ANY_IP_V6 {
-    throw new UnsupportedError("InternetAddress.ANY_IP_V6");
+  static InternetAddress get anyIPv6 {
+    throw new UnsupportedError("InternetAddress.anyIPv6");
   }
 
   @patch
diff --git a/sdk/lib/_internal/vm/bin/socket_patch.dart b/sdk/lib/_internal/vm/bin/socket_patch.dart
index d681626..7c9925a 100644
--- a/sdk/lib/_internal/vm/bin/socket_patch.dart
+++ b/sdk/lib/_internal/vm/bin/socket_patch.dart
@@ -48,22 +48,22 @@
 @patch
 class InternetAddress {
   @patch
-  static InternetAddress get LOOPBACK_IP_V4 {
+  static InternetAddress get loopbackIPv4 {
     return _InternetAddress.loopbackIPv4;
   }
 
   @patch
-  static InternetAddress get LOOPBACK_IP_V6 {
+  static InternetAddress get loopbackIPv6 {
     return _InternetAddress.loopbackIPv6;
   }
 
   @patch
-  static InternetAddress get ANY_IP_V4 {
+  static InternetAddress get anyIPv4 {
     return _InternetAddress.anyIPv4;
   }
 
   @patch
-  static InternetAddress get ANY_IP_V6 {
+  static InternetAddress get anyIPv6 {
     return _InternetAddress.anyIPv6;
   }
 
diff --git a/sdk/lib/_internal/vm/bin/vmservice_server.dart b/sdk/lib/_internal/vm/bin/vmservice_server.dart
index 1c06579..129e237 100644
--- a/sdk/lib/_internal/vm/bin/vmservice_server.dart
+++ b/sdk/lib/_internal/vm/bin/vmservice_server.dart
@@ -4,10 +4,12 @@
 
 part of vmservice_io;
 
+// TODO(48602): deprecate SILENT_OBSERVATORY in favor of SILENT_VM_SERVICE
 bool silentObservatory = bool.fromEnvironment('SILENT_OBSERVATORY');
+bool silentVMService = bool.fromEnvironment('SILENT_VM_SERVICE');
 
 void serverPrint(String s) {
-  if (silentObservatory) {
+  if (silentObservatory || silentVMService) {
     // We've been requested to be silent.
     return;
   }
@@ -422,12 +424,13 @@
         _server = await HttpServer.bind(address, _port);
       } catch (e, st) {
         if (_port != 0 && _enableServicePortFallback) {
-          serverPrint('Failed to bind Observatory HTTP server to port $_port. '
+          serverPrint(
+              'Failed to bind Dart VM service HTTP server to port $_port. '
               'Falling back to automatic port selection');
           _port = 0;
           return await startServer();
         } else {
-          serverPrint('Could not start Observatory HTTP server:\n'
+          serverPrint('Could not start Dart VM service HTTP server:\n'
               '$e\n$st');
           _notifyServerState('');
           onServerAddressChange(null);
@@ -441,7 +444,7 @@
       return this;
     }
     if (_service.isExiting) {
-      serverPrint('Observatory HTTP server exiting before listening as '
+      serverPrint('Dart VM service HTTP server exiting before listening as '
           'vm service has received exit request\n');
       await shutdown(true);
       return this;
@@ -458,7 +461,7 @@
   }
 
   Future<void> outputConnectionInformation() async {
-    serverPrint('Observatory listening on $serverAddress');
+    serverPrint('The Dart VM service is listening on $serverAddress');
     if (Platform.isFuchsia) {
       // Create a file with the port number.
       final tmp = Directory.systemTemp.path;
@@ -497,14 +500,14 @@
     // Shutdown HTTP server and subscription.
     Uri oldServerAddress = serverAddress!;
     return cleanup(forced).then((_) {
-      serverPrint('Observatory no longer listening on $oldServerAddress');
+      serverPrint('Dart VM service no longer listening on $oldServerAddress');
       _server = null;
       _notifyServerState('');
       onServerAddressChange(null);
       return this;
     }).catchError((e, st) {
       _server = null;
-      serverPrint('Could not shutdown Observatory HTTP server:\n$e\n$st\n');
+      serverPrint('Could not shutdown Dart VM service HTTP server:\n$e\n$st\n');
       _notifyServerState('');
       onServerAddressChange(null);
       return this;
diff --git a/sdk/lib/io/data_transformer.dart b/sdk/lib/io/data_transformer.dart
index 0928116..f61af6a 100644
--- a/sdk/lib/io/data_transformer.dart
+++ b/sdk/lib/io/data_transformer.dart
@@ -11,82 +11,52 @@
   /// Minimal value for [ZLibCodec.windowBits], [ZLibEncoder.windowBits]
   /// and [ZLibDecoder.windowBits].
   static const int minWindowBits = 8;
-  @Deprecated("Use minWindowBits instead")
-  static const int MIN_WINDOW_BITS = 8;
 
   /// Maximal value for [ZLibCodec.windowBits], [ZLibEncoder.windowBits]
   /// and [ZLibDecoder.windowBits].
   static const int maxWindowBits = 15;
-  @Deprecated("Use maxWindowBits instead")
-  static const int MAX_WINDOW_BITS = 15;
 
   /// Default value for [ZLibCodec.windowBits], [ZLibEncoder.windowBits]
   /// and [ZLibDecoder.windowBits].
   static const int defaultWindowBits = 15;
-  @Deprecated("Use defaultWindowBits instead")
-  static const int DEFAULT_WINDOW_BITS = 15;
 
   /// Minimal value for [ZLibCodec.level] and [ZLibEncoder.level].
   static const int minLevel = -1;
-  @Deprecated("Use minLevel instead")
-  static const int MIN_LEVEL = -1;
 
   /// Maximal value for [ZLibCodec.level] and [ZLibEncoder.level]
   static const int maxLevel = 9;
-  @Deprecated("Use maxLevel instead")
-  static const int MAX_LEVEL = 9;
 
   /// Default value for [ZLibCodec.level] and [ZLibEncoder.level].
   static const int defaultLevel = 6;
-  @Deprecated("Use defaultLevel instead")
-  static const int DEFAULT_LEVEL = 6;
 
   /// Minimal value for [ZLibCodec.memLevel] and [ZLibEncoder.memLevel].
   static const int minMemLevel = 1;
-  @Deprecated("Use minMemLevel instead")
-  static const int MIN_MEM_LEVEL = 1;
 
   /// Maximal value for [ZLibCodec.memLevel] and [ZLibEncoder.memLevel].
   static const int maxMemLevel = 9;
-  @Deprecated("Use maxMemLevel instead")
-  static const int MAX_MEM_LEVEL = 9;
 
   /// Default value for [ZLibCodec.memLevel] and [ZLibEncoder.memLevel].
   static const int defaultMemLevel = 8;
-  @Deprecated("Use defaultMemLevel instead")
-  static const int DEFAULT_MEM_LEVEL = 8;
 
   /// Recommended strategy for data produced by a filter (or predictor)
   static const int strategyFiltered = 1;
-  @Deprecated("Use strategyFiltered instead")
-  static const int STRATEGY_FILTERED = 1;
 
   /// Use this strategy to force Huffman encoding only (no string match)
   static const int strategyHuffmanOnly = 2;
-  @Deprecated("Use strategyHuffmanOnly instead")
-  static const int STRATEGY_HUFFMAN_ONLY = 2;
 
   /// Use this strategy to limit match distances to one (run-length encoding)
   static const int strategyRle = 3;
-  @Deprecated("Use strategyRle instead")
-  static const int STRATEGY_RLE = 3;
 
   /// This strategy prevents the use of dynamic Huffman codes, allowing for a
   /// simpler decoder
   static const int strategyFixed = 4;
-  @Deprecated("Use strategyFixed instead")
-  static const int STRATEGY_FIXED = 4;
 
   /// Recommended strategy for normal data
   static const int strategyDefault = 0;
-  @Deprecated("Use strategyDefault instead")
-  static const int STRATEGY_DEFAULT = 0;
 }
 
 /// An instance of the default implementation of the [ZLibCodec].
 const ZLibCodec zlib = const ZLibCodec._default();
-@Deprecated("Use zlib instead")
-const ZLibCodec ZLIB = zlib;
 
 /// The [ZLibCodec] encodes raw bytes to ZLib compressed bytes and decodes ZLib
 /// compressed bytes to raw bytes.
@@ -176,8 +146,6 @@
 
 /// An instance of the default implementation of the [GZipCodec].
 const GZipCodec gzip = const GZipCodec._default();
-@Deprecated("Use gzip instead")
-const GZipCodec GZIP = gzip;
 
 /// The [GZipCodec] encodes raw bytes to GZip compressed bytes and decodes GZip
 /// compressed bytes to raw bytes.
diff --git a/sdk/lib/io/file.dart b/sdk/lib/io/file.dart
index 4f352ce..bf80c30 100644
--- a/sdk/lib/io/file.dart
+++ b/sdk/lib/io/file.dart
@@ -8,87 +8,43 @@
 class FileMode {
   /// The mode for opening a file only for reading.
   static const read = const FileMode._internal(0);
-  @Deprecated("Use read instead")
-  static const READ = read;
 
   /// Mode for opening a file for reading and writing. The file is
   /// overwritten if it already exists. The file is created if it does not
   /// already exist.
   static const write = const FileMode._internal(1);
-  @Deprecated("Use write instead")
-  static const WRITE = write;
 
   /// Mode for opening a file for reading and writing to the
   /// end of it. The file is created if it does not already exist.
   static const append = const FileMode._internal(2);
-  @Deprecated("Use append instead")
-  static const APPEND = append;
 
   /// Mode for opening a file for writing *only*. The file is
   /// overwritten if it already exists. The file is created if it does not
   /// already exist.
   static const writeOnly = const FileMode._internal(3);
-  @Deprecated("Use writeOnly instead")
-  static const WRITE_ONLY = writeOnly;
 
   /// Mode for opening a file for writing *only* to the
   /// end of it. The file is created if it does not already exist.
   static const writeOnlyAppend = const FileMode._internal(4);
-  @Deprecated("Use writeOnlyAppend instead")
-  static const WRITE_ONLY_APPEND = writeOnlyAppend;
 
   final int _mode;
 
   const FileMode._internal(this._mode);
 }
 
-/// The mode for opening a file only for reading.
-@Deprecated("Use FileMode.read instead")
-const READ = FileMode.read;
-
-/// The mode for opening a file for reading and writing. The file is
-/// overwritten if it already exists. The file is created if it does not
-/// already exist.
-@Deprecated("Use FileMode.write instead")
-const WRITE = FileMode.write;
-
-/// The mode for opening a file for reading and writing to the
-/// end of it. The file is created if it does not already exist.
-@Deprecated("Use FileMode.append instead")
-const APPEND = FileMode.append;
-
-/// Mode for opening a file for writing *only*. The file is
-/// overwritten if it already exists. The file is created if it does not
-/// already exist.
-@Deprecated("Use FileMode.writeOnly instead")
-const WRITE_ONLY = FileMode.writeOnly;
-
-/// Mode for opening a file for writing *only* to the
-/// end of it. The file is created if it does not already exist.
-@Deprecated("Use FileMode.writeOnlyAppend instead")
-const WRITE_ONLY_APPEND = FileMode.writeOnlyAppend;
-
 /// Type of lock when requesting a lock on a file.
 class FileLock {
   /// Shared file lock.
   static const shared = const FileLock._internal(1);
-  @Deprecated("Use shared instead")
-  static const SHARED = shared;
 
   /// Exclusive file lock.
   static const exclusive = const FileLock._internal(2);
-  @Deprecated("Use exclusive instead")
-  static const EXCLUSIVE = exclusive;
 
   /// Blocking shared file lock.
   static const blockingShared = const FileLock._internal(3);
-  @Deprecated("Use blockingShared instead")
-  static const BLOCKING_SHARED = blockingShared;
 
   /// Blocking exclusive file lock.
   static const blockingExclusive = const FileLock._internal(4);
-  @Deprecated("Use blockingExclusive instead")
-  static const BLOCKING_EXCLUSIVE = blockingExclusive;
 
   final int _type;
 
diff --git a/sdk/lib/io/file_system_entity.dart b/sdk/lib/io/file_system_entity.dart
index ca14f1f..738c40b 100644
--- a/sdk/lib/io/file_system_entity.dart
+++ b/sdk/lib/io/file_system_entity.dart
@@ -11,20 +11,12 @@
 /// to indicate the object's type.
 class FileSystemEntityType {
   static const file = const FileSystemEntityType._internal(0);
-  @Deprecated("Use file instead")
-  static const FILE = file;
 
   static const directory = const FileSystemEntityType._internal(1);
-  @Deprecated("Use directory instead")
-  static const DIRECTORY = directory;
 
   static const link = const FileSystemEntityType._internal(2);
-  @Deprecated("Use link instead")
-  static const LINK = link;
 
   static const notFound = const FileSystemEntityType._internal(3);
-  @Deprecated("Use notFound instead")
-  static const NOT_FOUND = notFound;
 
   static const _typeList = const [
     FileSystemEntityType.file,
@@ -447,7 +439,7 @@
   ///
   /// Use `events` to specify what events to listen for. The constants in
   /// [FileSystemEvent] can be or'ed together to mix events. Default is
-  /// [FileSystemEvent.ALL].
+  /// [FileSystemEvent.all].
   ///
   /// A move event may be reported as separate delete and create events.
   Stream<FileSystemEvent> watch(
@@ -870,29 +862,19 @@
 class FileSystemEvent {
   /// Bitfield for [FileSystemEntity.watch], to enable [FileSystemCreateEvent]s.
   static const int create = 1 << 0;
-  @Deprecated("Use create instead")
-  static const int CREATE = 1 << 0;
 
   /// Bitfield for [FileSystemEntity.watch], to enable [FileSystemModifyEvent]s.
   static const int modify = 1 << 1;
-  @Deprecated("Use modify instead")
-  static const int MODIFY = 1 << 1;
 
   /// Bitfield for [FileSystemEntity.watch], to enable [FileSystemDeleteEvent]s.
   static const int delete = 1 << 2;
-  @Deprecated("Use delete instead")
-  static const int DELETE = 1 << 2;
 
   /// Bitfield for [FileSystemEntity.watch], to enable [FileSystemMoveEvent]s.
   static const int move = 1 << 3;
-  @Deprecated("Use move instead")
-  static const int MOVE = 1 << 3;
 
   /// Bitfield for [FileSystemEntity.watch], for enabling all of [create],
   /// [modify], [delete] and [move].
   static const int all = create | modify | delete | move;
-  @Deprecated("Use all instead")
-  static const int ALL = create | modify | delete | move;
 
   static const int _modifyAttributes = 1 << 4;
   static const int _deleteSelf = 1 << 5;
diff --git a/sdk/lib/io/process.dart b/sdk/lib/io/process.dart
index bf2058f..aacdb79 100644
--- a/sdk/lib/io/process.dart
+++ b/sdk/lib/io/process.dart
@@ -130,24 +130,16 @@
 class ProcessStartMode {
   /// Normal child process.
   static const normal = const ProcessStartMode._internal(0);
-  @Deprecated("Use normal instead")
-  static const NORMAL = normal;
 
   /// Stdio handles are inherited by the child process.
   static const inheritStdio = const ProcessStartMode._internal(1);
-  @Deprecated("Use inheritStdio instead")
-  static const INHERIT_STDIO = inheritStdio;
 
   /// Detached child process with no open communication channel.
   static const detached = const ProcessStartMode._internal(2);
-  @Deprecated("Use detached instead")
-  static const DETACHED = detached;
 
   /// Detached child process with stdin, stdout and stderr still open
   /// for communication with the child.
   static const detachedWithStdio = const ProcessStartMode._internal(3);
-  @Deprecated("Use detachedWithStdio instead")
-  static const DETACHED_WITH_STDIO = detachedWithStdio;
 
   static List<ProcessStartMode> get values => const <ProcessStartMode>[
         normal,
@@ -512,65 +504,6 @@
   static const ProcessSignal sigpoll = const ProcessSignal._(29, "SIGPOLL");
   static const ProcessSignal sigsys = const ProcessSignal._(31, "SIGSYS");
 
-  @Deprecated("Use sighup instead")
-  static const ProcessSignal SIGHUP = sighup;
-  @Deprecated("Use sigint instead")
-  static const ProcessSignal SIGINT = sigint;
-  @Deprecated("Use sigquit instead")
-  static const ProcessSignal SIGQUIT = sigquit;
-  @Deprecated("Use sigill instead")
-  static const ProcessSignal SIGILL = sigill;
-  @Deprecated("Use sigtrap instead")
-  static const ProcessSignal SIGTRAP = sigtrap;
-  @Deprecated("Use sigabrt instead")
-  static const ProcessSignal SIGABRT = sigabrt;
-  @Deprecated("Use sigbus instead")
-  static const ProcessSignal SIGBUS = sigbus;
-  @Deprecated("Use sigfpe instead")
-  static const ProcessSignal SIGFPE = sigfpe;
-  @Deprecated("Use sigkill instead")
-  static const ProcessSignal SIGKILL = sigkill;
-  @Deprecated("Use sigusr1 instead")
-  static const ProcessSignal SIGUSR1 = sigusr1;
-  @Deprecated("Use sigsegv instead")
-  static const ProcessSignal SIGSEGV = sigsegv;
-  @Deprecated("Use sigusr2 instead")
-  static const ProcessSignal SIGUSR2 = sigusr2;
-  @Deprecated("Use sigpipe instead")
-  static const ProcessSignal SIGPIPE = sigpipe;
-  @Deprecated("Use sigalrm instead")
-  static const ProcessSignal SIGALRM = sigalrm;
-  @Deprecated("Use sigterm instead")
-  static const ProcessSignal SIGTERM = sigterm;
-  @Deprecated("Use sigchld instead")
-  static const ProcessSignal SIGCHLD = sigchld;
-  @Deprecated("Use sigcont instead")
-  static const ProcessSignal SIGCONT = sigcont;
-  @Deprecated("Use sigstop instead")
-  static const ProcessSignal SIGSTOP = sigstop;
-  @Deprecated("Use sigtstp instead")
-  static const ProcessSignal SIGTSTP = sigtstp;
-  @Deprecated("Use sigttin instead")
-  static const ProcessSignal SIGTTIN = sigttin;
-  @Deprecated("Use sigttou instead")
-  static const ProcessSignal SIGTTOU = sigttou;
-  @Deprecated("Use sigurg instead")
-  static const ProcessSignal SIGURG = sigurg;
-  @Deprecated("Use sigxcpu instead")
-  static const ProcessSignal SIGXCPU = sigxcpu;
-  @Deprecated("Use sigxfsz instead")
-  static const ProcessSignal SIGXFSZ = sigxfsz;
-  @Deprecated("Use sigvtalrm instead")
-  static const ProcessSignal SIGVTALRM = sigvtalrm;
-  @Deprecated("Use sigprof instead")
-  static const ProcessSignal SIGPROF = sigprof;
-  @Deprecated("Use sigwinch instead")
-  static const ProcessSignal SIGWINCH = sigwinch;
-  @Deprecated("Use sigpoll instead")
-  static const ProcessSignal SIGPOLL = sigpoll;
-  @Deprecated("Use sigsys instead")
-  static const ProcessSignal SIGSYS = sigsys;
-
   final int _signalNumber;
   final String _name;
 
diff --git a/sdk/lib/io/socket.dart b/sdk/lib/io/socket.dart
index 3c102c5..dd68941 100644
--- a/sdk/lib/io/socket.dart
+++ b/sdk/lib/io/socket.dart
@@ -16,13 +16,6 @@
   static const InternetAddressType unix = const InternetAddressType._(2);
   static const InternetAddressType any = const InternetAddressType._(-1);
 
-  @Deprecated("Use IPv4 instead")
-  static const InternetAddressType IP_V4 = IPv4;
-  @Deprecated("Use IPv6 instead")
-  static const InternetAddressType IP_V6 = IPv6;
-  @Deprecated("Use any instead")
-  static const InternetAddressType ANY = any;
-
   final int _value;
 
   const InternetAddressType._(this._value);
@@ -53,33 +46,25 @@
   ///
   /// Use this address when listening on or connecting
   /// to the loopback adapter using IP version 4 (IPv4).
-  static InternetAddress get loopbackIPv4 => LOOPBACK_IP_V4;
-  @Deprecated("Use loopbackIPv4 instead")
-  external static InternetAddress get LOOPBACK_IP_V4;
+  external static InternetAddress get loopbackIPv4;
 
   /// IP version 6 loopback address.
   ///
   /// Use this address when listening on or connecting to
   /// the loopback adapter using IP version 6 (IPv6).
-  static InternetAddress get loopbackIPv6 => LOOPBACK_IP_V6;
-  @Deprecated("Use loopbackIPv6 instead")
-  external static InternetAddress get LOOPBACK_IP_V6;
+  external static InternetAddress get loopbackIPv6;
 
   /// IP version 4 any address.
   ///
   /// Use this address when listening on the addresses
   /// of all adapters using IP version 4 (IPv4).
-  static InternetAddress get anyIPv4 => ANY_IP_V4;
-  @Deprecated("Use anyIPv4 instead")
-  external static InternetAddress get ANY_IP_V4;
+  external static InternetAddress get anyIPv4;
 
   /// IP version 6 any address.
   ///
   /// Use this address when listening on the addresses
   /// of all adapters using IP version 6 (IPv6).
-  static InternetAddress get anyIPv6 => ANY_IP_V6;
-  @Deprecated("Use anyIPv6 instead")
-  external static InternetAddress get ANY_IP_V6;
+  external static InternetAddress get anyIPv6;
 
   /// The address family of the [InternetAddress].
   InternetAddressType get type;
@@ -349,13 +334,6 @@
   static const SocketDirection send = const SocketDirection._(1);
   static const SocketDirection both = const SocketDirection._(2);
 
-  @Deprecated("Use receive instead")
-  static const SocketDirection RECEIVE = receive;
-  @Deprecated("Use send instead")
-  static const SocketDirection SEND = send;
-  @Deprecated("Use both instead")
-  static const SocketDirection BOTH = both;
-
   final _value;
 
   const SocketDirection._(this._value);
@@ -373,8 +351,6 @@
   ///
   /// tcpNoDelay is disabled by default.
   static const SocketOption tcpNoDelay = const SocketOption._(0);
-  @Deprecated("Use tcpNoDelay instead")
-  static const SocketOption TCP_NODELAY = tcpNoDelay;
 
   static const SocketOption _ipMulticastLoop = const SocketOption._(1);
   static const SocketOption _ipMulticastHops = const SocketOption._(2);
@@ -504,15 +480,6 @@
   /// An event indicates the socket is closed.
   static const RawSocketEvent closed = const RawSocketEvent._(3);
 
-  @Deprecated("Use read instead")
-  static const RawSocketEvent READ = read;
-  @Deprecated("Use write instead")
-  static const RawSocketEvent WRITE = write;
-  @Deprecated("Use readClosed instead")
-  static const RawSocketEvent READ_CLOSED = readClosed;
-  @Deprecated("Use closed instead")
-  static const RawSocketEvent CLOSED = closed;
-
   final int _value;
 
   const RawSocketEvent._(this._value);
diff --git a/sdk/lib/io/stdio.dart b/sdk/lib/io/stdio.dart
index 42b7bc2..dcaf1d8 100644
--- a/sdk/lib/io/stdio.dart
+++ b/sdk/lib/io/stdio.dart
@@ -348,15 +348,6 @@
   static const StdioType file = const StdioType._("file");
   static const StdioType other = const StdioType._("other");
 
-  @Deprecated("Use terminal instead")
-  static const StdioType TERMINAL = terminal;
-  @Deprecated("Use pipe instead")
-  static const StdioType PIPE = pipe;
-  @Deprecated("Use file instead")
-  static const StdioType FILE = file;
-  @Deprecated("Use other instead")
-  static const StdioType OTHER = other;
-
   final String name;
   const StdioType._(this.name);
   String toString() => "StdioType: $name";
diff --git a/sdk/lib/io/string_transformer.dart b/sdk/lib/io/string_transformer.dart
index bf04327..5bb7f38 100644
--- a/sdk/lib/io/string_transformer.dart
+++ b/sdk/lib/io/string_transformer.dart
@@ -12,8 +12,6 @@
 /// On Windows this will use the currently active code page for the conversion.
 /// On all other systems it will always use UTF-8.
 const SystemEncoding systemEncoding = const SystemEncoding();
-@Deprecated("Use systemEncoding instead")
-const SystemEncoding SYSTEM_ENCODING = const SystemEncoding();
 
 /// The system encoding is the current code page on Windows and UTF-8 on Linux
 /// and Mac.
diff --git a/sdk/lib/io/sync_socket.dart b/sdk/lib/io/sync_socket.dart
index 6feb625..8df113a 100644
--- a/sdk/lib/io/sync_socket.dart
+++ b/sdk/lib/io/sync_socket.dart
@@ -58,7 +58,7 @@
   /// Shuts down a socket in the provided direction.
   ///
   /// Calling shutdown will never throw an exception and calling it several times
-  /// is supported. If both [SocketDirection.RECEIVE] and [SocketDirection.SEND]
+  /// is supported. If both [SocketDirection.receive] and [SocketDirection.send]
   /// directions are closed, the socket is closed completely, the same as if
   /// [closeSync] has been called.
   void shutdown(SocketDirection direction);
diff --git a/tests/web/deferred/trusted_script_url/lib.dart b/tests/web/deferred/trusted_script_url/lib.dart
new file mode 100644
index 0000000..d4933a8
--- /dev/null
+++ b/tests/web/deferred/trusted_script_url/lib.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2022, 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.
+
+import 'package:expect/expect.dart';
+
+class _Thing {}
+
+Object create() => _Thing();
+
+void check(Object o) {
+  Expect.isTrue(o is _Thing);
+}
diff --git a/tests/web/deferred/trusted_script_url/trusted_script_url_test.dart b/tests/web/deferred/trusted_script_url/trusted_script_url_test.dart
new file mode 100644
index 0000000..b7c0f71
--- /dev/null
+++ b/tests/web/deferred/trusted_script_url/trusted_script_url_test.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2022, 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.
+
+import 'package:expect/expect.dart';
+
+import 'lib.dart' deferred as lib;
+
+void main() {
+  lib.loadLibrary().then((_) {
+    lib.check(dontInline(lib.create()));
+  });
+}
+
+@pragma('dart2js:noInline')
+Object dontInline(Object x) => x;
diff --git a/tests/web/deferred/trusted_script_url/trusted_script_url_test.html b/tests/web/deferred/trusted_script_url/trusted_script_url_test.html
new file mode 100644
index 0000000..6d8895a
--- /dev/null
+++ b/tests/web/deferred/trusted_script_url/trusted_script_url_test.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="dart.unittest" content="full-stack-traces">
+  <!-- The following line forces the use of TrustedScriptURLs.
+       This is the key difference between this file and
+       default generated html file.
+  -->
+  <meta http-equiv="Content-Security-Policy" content="require-trusted-types-for 'script'">
+  <title> trusted_script_url_test </title>
+  <style>
+     .unittest-table { font-family:monospace; border:1px; }
+     .unittest-pass { background: #6b3;}
+     .unittest-fail { background: #d55;}
+     .unittest-error { background: #a11;}
+  </style>
+</head>
+<body>
+  <h1> Running trusted_script_url_test </h1>
+  <script type="text/javascript"
+      src="/root_dart/pkg/test_runner/lib/src/test_controller.js"></script>
+  %TEST_SCRIPTS%
+</body>
+</html>
diff --git a/tools/VERSION b/tools/VERSION
index cebbc4c..7353eaa 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 219
+PRERELEASE 220
 PRERELEASE_PATCH 0
\ No newline at end of file
