Version 2.17.0-271.0.dev
Merge commit '434aac2fb5ec6e2fa569adc50d42701c77f5db3f' into 'dev'
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