Skip to content

Commit 381d808

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Add UNDEFINED_EXTENSION_OPERATOR.
[email protected] Change-Id: I5370c9cab5968e520266085e6060f29f42cbedef Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/118469 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]>
1 parent 863694b commit 381d808

File tree

6 files changed

+64
-27
lines changed

6 files changed

+64
-27
lines changed

pkg/analyzer/lib/error/error.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ const List<ErrorCode> errorCodeValues = const [
303303
CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT,
304304
CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER,
305305
CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD,
306+
CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR,
306307
CompileTimeErrorCode.UNDEFINED_EXTENSION_SETTER,
307308
CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER,
308309
CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE,

pkg/analyzer/lib/src/error/codes.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3958,6 +3958,16 @@ class CompileTimeErrorCode extends AnalyzerErrorCode {
39583958
"Try correcting the name to the name of an existing method, or "
39593959
"defining a method named '{0}'.");
39603960

3961+
/**
3962+
* Parameters:
3963+
* 0: the name of the operator that is undefined
3964+
* 1: the name of the extension that was explicitly specified
3965+
*/
3966+
static const CompileTimeErrorCode UNDEFINED_EXTENSION_OPERATOR =
3967+
const CompileTimeErrorCode('UNDEFINED_EXTENSION_OPERATOR',
3968+
"The operator '{0}' isn't defined for the extension '{1}'.",
3969+
correction: "Try defining the operator '{0}'.");
3970+
39613971
/**
39623972
* Parameters:
39633973
* 0: the name of the setter that is undefined

pkg/analyzer/lib/src/generated/element_resolver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1428,7 +1428,7 @@ class ElementResolver extends SimpleAstVisitor<void> {
14281428
MethodElement member = element.getMethod(methodName);
14291429
if (member == null) {
14301430
_resolver.errorReporter.reportErrorForToken(
1431-
CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD,
1431+
CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR,
14321432
node.operator,
14331433
[methodName, element.name]);
14341434
}

pkg/analyzer/test/src/diagnostics/test_all.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ import 'undefined_class_boolean_test.dart' as undefined_class_boolean;
293293
import 'undefined_class_test.dart' as undefined_class;
294294
import 'undefined_extension_getter_test.dart' as undefined_extension_getter;
295295
import 'undefined_extension_method_test.dart' as undefined_extension_method;
296+
import 'undefined_extension_operator_test.dart' as undefined_extension_operator;
296297
import 'undefined_extension_setter_test.dart' as undefined_extension_setter;
297298
import 'undefined_getter_test.dart' as undefined_getter;
298299
import 'undefined_hidden_name_test.dart' as undefined_hidden_name;
@@ -527,6 +528,7 @@ main() {
527528
undefined_class.main();
528529
undefined_extension_getter.main();
529530
undefined_extension_method.main();
531+
undefined_extension_operator.main();
530532
undefined_extension_setter.main();
531533
undefined_getter.main();
532534
undefined_hidden_name.main();

pkg/analyzer/test/src/diagnostics/undefined_extension_method_test.dart

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -51,32 +51,6 @@ f() {
5151
);
5252
}
5353

54-
test_operator_defined() async {
55-
await assertNoErrorsInCode('''
56-
extension E on String {
57-
void operator +(int offset) {}
58-
}
59-
f() {
60-
E('a') + 1;
61-
}
62-
''');
63-
}
64-
65-
test_operator_undefined() async {
66-
await assertErrorsInCode('''
67-
extension E on String {}
68-
f() {
69-
E('a') + 1;
70-
}
71-
''', [
72-
error(CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD, 40, 1),
73-
]);
74-
var binaryExpression = findNode.binary('+ 1');
75-
assertElementNull(binaryExpression);
76-
assertInvokeTypeNull(binaryExpression);
77-
assertTypeDynamic(binaryExpression);
78-
}
79-
8054
test_static_withInference() async {
8155
await assertErrorsInCode('''
8256
extension E on Object {}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:analyzer/dart/analysis/features.dart';
6+
import 'package:analyzer/src/error/codes.dart';
7+
import 'package:analyzer/src/generated/engine.dart';
8+
import 'package:test_reflective_loader/test_reflective_loader.dart';
9+
10+
import '../dart/resolution/driver_resolution.dart';
11+
12+
main() {
13+
defineReflectiveSuite(() {
14+
defineReflectiveTests(UndefinedExtensionMethodTest);
15+
});
16+
}
17+
18+
@reflectiveTest
19+
class UndefinedExtensionMethodTest extends DriverResolutionTest {
20+
@override
21+
AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
22+
..contextFeatures = new FeatureSet.forTesting(
23+
sdkVersion: '2.3.0', additionalFeatures: [Feature.extension_methods]);
24+
25+
test_binary_defined() async {
26+
await assertNoErrorsInCode('''
27+
extension E on String {
28+
void operator +(int offset) {}
29+
}
30+
f() {
31+
E('a') + 1;
32+
}
33+
''');
34+
}
35+
36+
test_binary_undefined() async {
37+
await assertErrorsInCode('''
38+
extension E on String {}
39+
f() {
40+
E('a') + 1;
41+
}
42+
''', [
43+
error(CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR, 40, 1),
44+
]);
45+
var binaryExpression = findNode.binary('+ 1');
46+
assertElementNull(binaryExpression);
47+
assertInvokeTypeNull(binaryExpression);
48+
assertTypeDynamic(binaryExpression);
49+
}
50+
}

0 commit comments

Comments
 (0)