Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(283)

Side by Side Diff: pkg/analyzer/test/generated/hint_code_test.dart

Issue 2045693002: Fix @protected checks to play nice with generic supers (linter#257). (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library analyzer.test.generated.hint_code_test; 5 library analyzer.test.generated.hint_code_test;
6 6
7 import 'package:analyzer/src/generated/engine.dart'; 7 import 'package:analyzer/src/generated/engine.dart';
8 import 'package:analyzer/src/generated/error.dart'; 8 import 'package:analyzer/src/generated/error.dart';
9 import 'package:analyzer/src/generated/source_io.dart'; 9 import 'package:analyzer/src/generated/source_io.dart';
10 import 'package:unittest/unittest.dart'; 10 import 'package:unittest/unittest.dart';
11 11
12 import '../reflective_tests.dart'; 12 import '../reflective_tests.dart';
13 import '../utils.dart'; 13 import '../utils.dart';
14 import 'analysis_context_factory.dart'; 14 import 'analysis_context_factory.dart';
15 import 'resolver_test_case.dart'; 15 import 'resolver_test_case.dart';
16 16
17 main() { 17 main() {
18 initializeTestEnvironment(); 18 initializeTestEnvironment();
19 runReflectiveTests(HintCodeTest); 19 runReflectiveTests(HintCodeTest);
20 } 20 }
21 21
22 @reflectiveTest 22 @reflectiveTest
23 class HintCodeTest extends ResolverTestCase { 23 class HintCodeTest extends ResolverTestCase {
24 void test_deadCode_statementAfterRethrow() {
25 Source source = addSource(r'''
26 f() {
27 try {
28 var one = 1;
29 } catch (e) {
30 rethrow;
31 var two = 2;
32 }
33 }''');
34 computeLibrarySourceErrors(source);
35 assertErrors(source, [HintCode.DEAD_CODE]);
36 verify([source]);
37 }
38
39 void test_deadCode_statementAfterThrow() {
40 Source source = addSource(r'''
41 f() {
42 var one = 1;
43 throw 'Stop here';
44 var two = 2;
45 }''');
46 computeLibrarySourceErrors(source);
47 assertErrors(source, [HintCode.DEAD_CODE]);
48 verify([source]);
49 }
50
51 void fail_isInt() { 24 void fail_isInt() {
52 Source source = addSource("var v = 1 is int;"); 25 Source source = addSource("var v = 1 is int;");
53 computeLibrarySourceErrors(source); 26 computeLibrarySourceErrors(source);
54 assertErrors(source, [HintCode.IS_INT]); 27 assertErrors(source, [HintCode.IS_INT]);
55 verify([source]); 28 verify([source]);
56 } 29 }
57 30
58 void fail_isNotInt() { 31 void fail_isNotInt() {
59 Source source = addSource("var v = 1 is! int;"); 32 Source source = addSource("var v = 1 is! int;");
60 computeLibrarySourceErrors(source); 33 computeLibrarySourceErrors(source);
(...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after
546 while(v) { 519 while(v) {
547 continue; 520 continue;
548 var a; 521 var a;
549 } 522 }
550 }'''); 523 }''');
551 computeLibrarySourceErrors(source); 524 computeLibrarySourceErrors(source);
552 assertErrors(source, [HintCode.DEAD_CODE]); 525 assertErrors(source, [HintCode.DEAD_CODE]);
553 verify([source]); 526 verify([source]);
554 } 527 }
555 528
529 void test_deadCode_statementAfterExitingIf_returns() {
530 Source source = addSource(r'''
531 f() {
532 if (1 > 2) {
533 return;
534 } else {
535 return;
536 }
537 var one = 1;
538 }''');
539 computeLibrarySourceErrors(source);
540 assertErrors(source, [HintCode.DEAD_CODE]);
541 verify([source]);
542 }
543
544 void test_deadCode_statementAfterRethrow() {
545 Source source = addSource(r'''
546 f() {
547 try {
548 var one = 1;
549 } catch (e) {
550 rethrow;
551 var two = 2;
552 }
553 }''');
554 computeLibrarySourceErrors(source);
555 assertErrors(source, [HintCode.DEAD_CODE]);
556 verify([source]);
557 }
558
556 void test_deadCode_statementAfterReturn_function() { 559 void test_deadCode_statementAfterReturn_function() {
557 Source source = addSource(r''' 560 Source source = addSource(r'''
558 f() { 561 f() {
559 var one = 1; 562 var one = 1;
560 return; 563 return;
561 var two = 2; 564 var two = 2;
562 }'''); 565 }''');
563 computeLibrarySourceErrors(source); 566 computeLibrarySourceErrors(source);
564 assertErrors(source, [HintCode.DEAD_CODE]); 567 assertErrors(source, [HintCode.DEAD_CODE]);
565 verify([source]); 568 verify([source]);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 return; 615 return;
613 var two = 2; 616 var two = 2;
614 return; 617 return;
615 var three = 3; 618 var three = 3;
616 }'''); 619 }''');
617 computeLibrarySourceErrors(source); 620 computeLibrarySourceErrors(source);
618 assertErrors(source, [HintCode.DEAD_CODE]); 621 assertErrors(source, [HintCode.DEAD_CODE]);
619 verify([source]); 622 verify([source]);
620 } 623 }
621 624
622 void test_deadCode_statementAfterExitingIf_returns() { 625 void test_deadCode_statementAfterThrow() {
623 Source source = addSource(r''' 626 Source source = addSource(r'''
624 f() { 627 f() {
625 if (1 > 2) {
626 return;
627 } else {
628 return;
629 }
630 var one = 1; 628 var one = 1;
629 throw 'Stop here';
630 var two = 2;
631 }'''); 631 }''');
632 computeLibrarySourceErrors(source); 632 computeLibrarySourceErrors(source);
633 assertErrors(source, [HintCode.DEAD_CODE]); 633 assertErrors(source, [HintCode.DEAD_CODE]);
634 verify([source]); 634 verify([source]);
635 } 635 }
636 636
637 void test_deprecatedAnnotationUse_assignment() { 637 void test_deprecatedAnnotationUse_assignment() {
638 Source source = addSource(r''' 638 Source source = addSource(r'''
639 class A { 639 class A {
640 @deprecated 640 @deprecated
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
1037 main() { 1037 main() {
1038 var p1 = new Point(0, 0); 1038 var p1 = new Point(0, 0);
1039 var p2 = new Point(10, 10); 1039 var p2 = new Point(10, 10);
1040 int n = p1 + p2; 1040 int n = p1 + p2;
1041 }'''); 1041 }''');
1042 computeLibrarySourceErrors(source); 1042 computeLibrarySourceErrors(source);
1043 assertErrors(source, [HintCode.INVALID_ASSIGNMENT]); 1043 assertErrors(source, [HintCode.INVALID_ASSIGNMENT]);
1044 verify([source]); 1044 verify([source]);
1045 } 1045 }
1046 1046
1047 void test_invalidUseOfProtectedMember_closure() {
1048 Source source = addSource(r'''
1049 import 'package:meta/meta.dart';
1050
1051 class A {
1052 @protected
1053 int a() => 42;
1054 }
1055 void main() {
1056 var leak = new A().a;
1057 print(leak);
1058 }''');
1059 computeLibrarySourceErrors(source);
1060 assertErrors(source, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]);
1061 verify([source]);
1062 }
1063
1047 void test_invalidUseOfProtectedMember_field() { 1064 void test_invalidUseOfProtectedMember_field() {
1048 Source source = addSource(r''' 1065 Source source = addSource(r'''
1049 import 'package:meta/meta.dart'; 1066 import 'package:meta/meta.dart';
1050 class A { 1067 class A {
1051 @protected 1068 @protected
1052 int a; 1069 int a;
1053 } 1070 }
1054 abstract class B { 1071 abstract class B {
1055 int b() => new A().a; 1072 int b() => new A().a;
1056 }'''); 1073 }''');
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1098 } 1115 }
1099 1116
1100 abstract class B implements A { 1117 abstract class B implements A {
1101 int b() => a(); 1118 int b() => a();
1102 }'''); 1119 }''');
1103 computeLibrarySourceErrors(source); 1120 computeLibrarySourceErrors(source);
1104 assertNoErrors(source); 1121 assertNoErrors(source);
1105 verify([source]); 1122 verify([source]);
1106 } 1123 }
1107 1124
1108 void test_invalidUseOfProtectedMember_closure() {
1109 Source source = addSource(r'''
1110 import 'package:meta/meta.dart';
1111
1112 class A {
1113 @protected
1114 int a() => 42;
1115 }
1116 void main() {
1117 var leak = new A().a;
1118 print(leak);
1119 }''');
1120 computeLibrarySourceErrors(source);
1121 assertErrors(source, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]);
1122 verify([source]);
1123 }
1124
1125 void test_invalidUseOfProtectedMember_getter() { 1125 void test_invalidUseOfProtectedMember_getter() {
1126 Source source = addSource(r''' 1126 Source source = addSource(r'''
1127 import 'package:meta/meta.dart'; 1127 import 'package:meta/meta.dart';
1128 class A { 1128 class A {
1129 @protected 1129 @protected
1130 int get a => 42; 1130 int get a => 42;
1131 } 1131 }
1132 class B { 1132 class B {
1133 A a; 1133 A a;
1134 int b() => a.a; 1134 int b() => a.a;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1177 void a(){ } 1177 void a(){ }
1178 } 1178 }
1179 class B { 1179 class B {
1180 void b() => new A().a(); 1180 void b() => new A().a();
1181 }'''); 1181 }''');
1182 computeLibrarySourceErrors(source); 1182 computeLibrarySourceErrors(source);
1183 assertErrors(source, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]); 1183 assertErrors(source, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]);
1184 verify([source]); 1184 verify([source]);
1185 } 1185 }
1186 1186
1187 void test_invalidUseOfProtectedMember_method_OK() {
1188 // https://github.com/dart-lang/linter/issues/257
1189 Source source = addSource(r'''
1190 import 'package:meta/meta.dart';
1191
1192 typedef void VoidCallback();
1193
1194 class State<E> {
1195 @protected
1196 void setState(VoidCallback fn) {}
1197 }
1198
1199 class Button extends State<Object> {
1200 void handleSomething() {
1201 setState(() {});
1202 }
1203 }
1204 ''');
1205 computeLibrarySourceErrors(source);
1206 assertNoErrors(source);
1207 verify([source]);
1208 }
1209
1187 void test_invalidUseOfProtectedMember_OK_1() { 1210 void test_invalidUseOfProtectedMember_OK_1() {
1188 Source source = addSource(r''' 1211 Source source = addSource(r'''
1189 import 'package:meta/meta.dart'; 1212 import 'package:meta/meta.dart';
1190 class A { 1213 class A {
1191 @protected 1214 @protected
1192 void a(){ } 1215 void a(){ }
1193 } 1216 }
1194 class B extends A { 1217 class B extends A {
1195 void b() => a(); 1218 void b() => a();
1196 }'''); 1219 }''');
(...skipping 2281 matching lines...) Expand 10 before | Expand all | Expand 10 after
3478 n() { 3501 n() {
3479 var a = m(), b = m(); 3502 var a = m(), b = m();
3480 } 3503 }
3481 }'''); 3504 }''');
3482 computeLibrarySourceErrors(source); 3505 computeLibrarySourceErrors(source);
3483 assertErrors( 3506 assertErrors(
3484 source, [HintCode.USE_OF_VOID_RESULT, HintCode.USE_OF_VOID_RESULT]); 3507 source, [HintCode.USE_OF_VOID_RESULT, HintCode.USE_OF_VOID_RESULT]);
3485 verify([source]); 3508 verify([source]);
3486 } 3509 }
3487 } 3510 }
OLDNEW
« pkg/analyzer/lib/src/generated/resolver.dart ('K') | « pkg/analyzer/lib/src/generated/resolver.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698