diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index ffe0eb4..d2e352f 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -341,6 +341,7 @@
     _checkForDivisionOptimizationHint(node);
     _deprecatedVerifier.binaryExpression(node);
     _checkForInvariantNullComparison(node);
+    _invalidAccessVerifier.verifyBinary(node);
     super.visitBinaryExpression(node);
   }
 
@@ -1849,6 +1850,25 @@
     _checkForOtherInvalidAccess(identifier, element);
   }
 
+  void verifyBinary(BinaryExpression node) {
+    var element = node.staticElement;
+    if (element != null && _hasVisibleForOverriding(element)) {
+      var operator = node.operator;
+
+      if (node.leftOperand is SuperExpression) {
+        var methodDeclaration = node.thisOrAncestorOfType<MethodDeclaration>();
+        if (methodDeclaration?.name.name == operator.lexeme) {
+          return;
+        }
+      }
+
+      _errorReporter.reportErrorForToken(
+          HintCode.INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER,
+          operator,
+          [operator.type.lexeme]);
+    }
+  }
+
   void verifyImport(ImportDirective node) {
     var element = node.uriElement;
     if (_hasInternal(element) &&
@@ -1968,7 +1988,7 @@
           parent is PropertyAccess && parent.target is SuperExpression) {
         var methodDeclaration =
             grandparent?.thisOrAncestorOfType<MethodDeclaration>();
-        if (methodDeclaration?.name.token.value() == identifier.token.value()) {
+        if (methodDeclaration?.name.name == identifier.name) {
           validOverride = true;
         }
       }
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_overriding_member_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_overriding_member_test.dart
index d4e5892..04c59dd 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_overriding_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_use_of_visible_for_overriding_member_test.dart
@@ -111,6 +111,27 @@
     ]);
   }
 
+  test_operator() async {
+    newFile2('$testPackageLibPath/a.dart', '''
+import 'package:meta/meta.dart';
+
+class A {
+  @visibleForOverriding
+  operator >(A other) => true;
+}
+''');
+
+    await assertErrorsInCode('''
+import 'a.dart';
+
+class B {
+  void m(A a) => a > A();
+}
+''', [
+      error(HintCode.INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER, 47, 1),
+    ]);
+  }
+
   test_overriding_getter() async {
     newFile2('$testPackageLibPath/a.dart', '''
 import 'package:meta/meta.dart';
@@ -169,14 +190,18 @@
 }
 ''');
 
-    await assertNoErrorsInCode('''
+    await assertErrorsInCode('''
 import 'a.dart';
 
 class B extends A {
   @override
   operator >(A other) => super > other;
+
+  void m() => super > A();
 }
-''');
+''', [
+      error(HintCode.INVALID_USE_OF_VISIBLE_FOR_OVERRIDING_MEMBER, 111, 1),
+    ]);
   }
 
   test_overriding_setter() async {
diff --git a/pkg/analyzer/test/src/workspace/bazel_test.dart b/pkg/analyzer/test/src/workspace/bazel_test.dart
index 474d1e5..2aabbdc 100644
--- a/pkg/analyzer/test/src/workspace/bazel_test.dart
+++ b/pkg/analyzer/test/src/workspace/bazel_test.dart
@@ -133,7 +133,7 @@
       '/workspace/my/lib/a.dart',
     ]);
     _assertResolve(
-      'file:///workspace/my/lib/a.dart',
+      toUriStr('/workspace/my/lib/a.dart'),
       getFile('/workspace/my/lib/a.dart'),
     );
   }
@@ -143,7 +143,7 @@
       '/workspace/WORKSPACE',
     ]);
     _assertResolve(
-      'file:///workspace/my/lib/a.dart',
+      toUriStr('/workspace/my/lib/a.dart'),
       getFile('/workspace/my/lib/a.dart'),
       exists: false,
     );
@@ -231,7 +231,7 @@
       '/workspace/WORKSPACE',
       '/workspace/my/foo/test',
     ]);
-    _assertResolve('file:///workspace/bazel-bin/my/test/a .dart',
+    _assertResolve(toUriStr('/workspace/bazel-bin/my/test/a .dart'),
         '/workspace/my/test/a .dart',
         exists: false, restore: false);
   }
@@ -242,7 +242,7 @@
       '/workspace/bazel-genfiles/my/foo/test/foo1.dart',
       '/workspace/bazel-bin/'
     ]);
-    _assertResolve('file:///workspace/bazel-bin/my/foo/test/foo1.dart',
+    _assertResolve(toUriStr('/workspace/bazel-bin/my/foo/test/foo1.dart'),
         '/workspace/bazel-genfiles/my/foo/test/foo1.dart',
         restore: false);
   }
@@ -253,7 +253,7 @@
       '/workspace/bazel-genfiles/',
       '/workspace/my/foo/test/foo1.dart'
     ]);
-    _assertResolve('file:///workspace/bazel-genfiles/my/foo/test/foo1.dart',
+    _assertResolve(toUriStr('/workspace/bazel-genfiles/my/foo/test/foo1.dart'),
         '/workspace/my/foo/test/foo1.dart',
         restore: false);
   }
@@ -264,7 +264,7 @@
       '/workspace/bazel-genfiles/',
       '/other/my/foo/test/foo1.dart'
     ]);
-    _assertNoResolve('file:///other/my/foo/test/foo1.dart');
+    _assertNoResolve(toUriStr('/other/my/foo/test/foo1.dart'));
   }
 
   void test_resolveAbsolute_file_readonly_to_workspace() {
@@ -273,7 +273,7 @@
       '/READONLY/workspace/',
       '/workspace/my/foo/test/foo1.dart'
     ]);
-    _assertResolve('file:///READONLY/workspace/my/foo/test/foo1.dart',
+    _assertResolve(toUriStr('/READONLY/workspace/my/foo/test/foo1.dart'),
         '/workspace/my/foo/test/foo1.dart',
         restore: false);
   }
@@ -283,7 +283,7 @@
       '/workspace/WORKSPACE',
       '/workspace/bazel-genfiles/my/foo/test/foo1.dart'
     ]);
-    _assertResolve('file:///workspace/my/foo/test/foo1.dart',
+    _assertResolve(toUriStr('/workspace/my/foo/test/foo1.dart'),
         '/workspace/bazel-genfiles/my/foo/test/foo1.dart',
         restore: false);
   }
diff --git a/sdk/lib/_internal/vm/bin/vmservice_server.dart b/sdk/lib/_internal/vm/bin/vmservice_server.dart
index 03ea982..2fdff43 100644
--- a/sdk/lib/_internal/vm/bin/vmservice_server.dart
+++ b/sdk/lib/_internal/vm/bin/vmservice_server.dart
@@ -373,7 +373,7 @@
       request.response.close();
       return;
     }
-    final asset = assets[path];
+    final asset = assets![path];
     if (asset != null) {
       // Serving up a static asset (e.g. .css, .html, .png).
       request.response.headers.contentType = ContentType.parse(asset.mimeType);
diff --git a/sdk/lib/vmservice/asset.dart b/sdk/lib/vmservice/asset.dart
index 985c905..7e086ff 100644
--- a/sdk/lib/vmservice/asset.dart
+++ b/sdk/lib/vmservice/asset.dart
@@ -58,7 +58,7 @@
 external List<Object> _decodeAssets(Uint8List data);
 
 Map<String, Asset>? _assets;
-Map<String, Asset> get assets {
+Map<String, Asset>? get assets {
   if (_assets == null) {
     try {
       _assets = Asset.request();
@@ -66,5 +66,5 @@
       print('Could not load Observatory assets: $e');
     }
   }
-  return _assets!;
+  return _assets;
 }
diff --git a/tools/VERSION b/tools/VERSION
index 812e398..858518f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 270
+PRERELEASE 271
 PRERELEASE_PATCH 0
\ No newline at end of file
