| OLD | NEW |
| 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/error/error.dart'; | 7 import 'package:analyzer/error/error.dart'; |
| 8 import 'package:analyzer/src/error/codes.dart'; | 8 import 'package:analyzer/src/error/codes.dart'; |
| 9 import 'package:analyzer/src/generated/engine.dart'; | 9 import 'package:analyzer/src/generated/engine.dart'; |
| 10 import 'package:analyzer/src/generated/parser.dart'; | 10 import 'package:analyzer/src/generated/parser.dart'; |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 abstract class A { | 70 abstract class A { |
| 71 int get test; | 71 int get test; |
| 72 } | 72 } |
| 73 class B extends A { | 73 class B extends A { |
| 74 int get test { | 74 int get test { |
| 75 super.test; | 75 super.test; |
| 76 return 0; | 76 return 0; |
| 77 } | 77 } |
| 78 } | 78 } |
| 79 '''); | 79 '''); |
| 80 await assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]); | 80 await computeAnalysisResult(source); |
| 81 assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]); |
| 81 verify([source]); | 82 verify([source]); |
| 82 } | 83 } |
| 83 | 84 |
| 84 test_abstractSuperMemberReference_method_invocation() async { | 85 test_abstractSuperMemberReference_method_invocation() async { |
| 85 Source source = addSource(r''' | 86 Source source = addSource(r''' |
| 86 abstract class A { | 87 abstract class A { |
| 87 void test(); | 88 void test(); |
| 88 } | 89 } |
| 89 class B extends A { | 90 class B extends A { |
| 90 void test() { | 91 void test() { |
| 91 super.test(); | 92 super.test(); |
| 92 } | 93 } |
| 93 } | 94 } |
| 94 '''); | 95 '''); |
| 95 await assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]); | 96 await computeAnalysisResult(source); |
| 97 assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]); |
| 96 verify([source]); | 98 verify([source]); |
| 97 } | 99 } |
| 98 | 100 |
| 99 test_abstractSuperMemberReference_method_reference() async { | 101 test_abstractSuperMemberReference_method_reference() async { |
| 100 Source source = addSource(r''' | 102 Source source = addSource(r''' |
| 101 abstract class A { | 103 abstract class A { |
| 102 void test(); | 104 void test(); |
| 103 } | 105 } |
| 104 class B extends A { | 106 class B extends A { |
| 105 void test() { | 107 void test() { |
| 106 super.test; | 108 super.test; |
| 107 } | 109 } |
| 108 } | 110 } |
| 109 '''); | 111 '''); |
| 110 await assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]); | 112 await computeAnalysisResult(source); |
| 113 assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]); |
| 111 verify([source]); | 114 verify([source]); |
| 112 } | 115 } |
| 113 | 116 |
| 114 test_abstractSuperMemberReference_setter() async { | 117 test_abstractSuperMemberReference_setter() async { |
| 115 Source source = addSource(r''' | 118 Source source = addSource(r''' |
| 116 abstract class A { | 119 abstract class A { |
| 117 void set test(int v); | 120 void set test(int v); |
| 118 } | 121 } |
| 119 class B extends A { | 122 class B extends A { |
| 120 void set test(int v){ | 123 void set test(int v){ |
| 121 super.test = 0; | 124 super.test = 0; |
| 122 } | 125 } |
| 123 } | 126 } |
| 124 '''); | 127 '''); |
| 125 await assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]); | 128 await computeAnalysisResult(source); |
| 129 assertErrors(source, [HintCode.ABSTRACT_SUPER_MEMBER_REFERENCE]); |
| 126 verify([source]); | 130 verify([source]); |
| 127 } | 131 } |
| 128 | 132 |
| 129 test_argumentTypeNotAssignable_functionType() async { | 133 test_argumentTypeNotAssignable_functionType() async { |
| 130 Source source = addSource(r''' | 134 Source source = addSource(r''' |
| 131 m() { | 135 m() { |
| 132 var a = new A(); | 136 var a = new A(); |
| 133 a.n(() => 0); | 137 a.n(() => 0); |
| 134 } | 138 } |
| 135 class A { | 139 class A { |
| 136 n(void f(int i)) {} | 140 n(void f(int i)) {} |
| 137 }'''); | 141 }'''); |
| 138 await assertErrors(source, [HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 142 await computeAnalysisResult(source); |
| 143 assertErrors(source, [HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 139 verify([source]); | 144 verify([source]); |
| 140 } | 145 } |
| 141 | 146 |
| 142 test_argumentTypeNotAssignable_message() async { | 147 test_argumentTypeNotAssignable_message() async { |
| 143 // The implementation of HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE assumes that | 148 // The implementation of HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE assumes that |
| 144 // StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE has the same message. | 149 // StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE has the same message. |
| 145 expect(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE.message, | 150 expect(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE.message, |
| 146 HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE.message); | 151 HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE.message); |
| 147 } | 152 } |
| 148 | 153 |
| 149 test_argumentTypeNotAssignable_type() async { | 154 test_argumentTypeNotAssignable_type() async { |
| 150 Source source = addSource(r''' | 155 Source source = addSource(r''' |
| 151 m() { | 156 m() { |
| 152 var i = ''; | 157 var i = ''; |
| 153 n(i); | 158 n(i); |
| 154 } | 159 } |
| 155 n(int i) {}'''); | 160 n(int i) {}'''); |
| 156 await assertErrors(source, [HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); | 161 await computeAnalysisResult(source); |
| 162 assertErrors(source, [HintCode.ARGUMENT_TYPE_NOT_ASSIGNABLE]); |
| 157 verify([source]); | 163 verify([source]); |
| 158 } | 164 } |
| 159 | 165 |
| 160 test_canBeNullAfterNullAware_false_methodInvocation() async { | 166 test_canBeNullAfterNullAware_false_methodInvocation() async { |
| 161 Source source = addSource(r''' | 167 Source source = addSource(r''' |
| 162 m(x) { | 168 m(x) { |
| 163 x?.a()?.b(); | 169 x?.a()?.b(); |
| 164 } | 170 } |
| 165 '''); | 171 '''); |
| 166 await assertNoErrors(source); | 172 await computeAnalysisResult(source); |
| 173 assertNoErrors(source); |
| 167 verify([source]); | 174 verify([source]); |
| 168 } | 175 } |
| 169 | 176 |
| 170 test_canBeNullAfterNullAware_false_null() async { | 177 test_canBeNullAfterNullAware_false_null() async { |
| 171 Source source = addSource(r''' | 178 Source source = addSource(r''' |
| 172 m(x) { | 179 m(x) { |
| 173 x?.a.hashCode; | 180 x?.a.hashCode; |
| 174 x?.a.runtimeType; | 181 x?.a.runtimeType; |
| 175 x?.a.toString(); | 182 x?.a.toString(); |
| 176 x?.b().hashCode; | 183 x?.b().hashCode; |
| 177 x?.b().runtimeType; | 184 x?.b().runtimeType; |
| 178 x?.b().toString(); | 185 x?.b().toString(); |
| 179 } | 186 } |
| 180 '''); | 187 '''); |
| 181 await assertNoErrors(source); | 188 await computeAnalysisResult(source); |
| 189 assertNoErrors(source); |
| 182 verify([source]); | 190 verify([source]); |
| 183 } | 191 } |
| 184 | 192 |
| 185 test_canBeNullAfterNullAware_false_propertyAccess() async { | 193 test_canBeNullAfterNullAware_false_propertyAccess() async { |
| 186 Source source = addSource(r''' | 194 Source source = addSource(r''' |
| 187 m(x) { | 195 m(x) { |
| 188 x?.a?.b; | 196 x?.a?.b; |
| 189 } | 197 } |
| 190 '''); | 198 '''); |
| 191 await assertNoErrors(source); | 199 await computeAnalysisResult(source); |
| 200 assertNoErrors(source); |
| 192 verify([source]); | 201 verify([source]); |
| 193 } | 202 } |
| 194 | 203 |
| 195 test_canBeNullAfterNullAware_methodInvocation() async { | 204 test_canBeNullAfterNullAware_methodInvocation() async { |
| 196 Source source = addSource(r''' | 205 Source source = addSource(r''' |
| 197 m(x) { | 206 m(x) { |
| 198 x?.a.b(); | 207 x?.a.b(); |
| 199 } | 208 } |
| 200 '''); | 209 '''); |
| 201 await assertErrors(source, [HintCode.CAN_BE_NULL_AFTER_NULL_AWARE]); | 210 await computeAnalysisResult(source); |
| 211 assertErrors(source, [HintCode.CAN_BE_NULL_AFTER_NULL_AWARE]); |
| 202 verify([source]); | 212 verify([source]); |
| 203 } | 213 } |
| 204 | 214 |
| 205 test_canBeNullAfterNullAware_parenthesized() async { | 215 test_canBeNullAfterNullAware_parenthesized() async { |
| 206 Source source = addSource(r''' | 216 Source source = addSource(r''' |
| 207 m(x) { | 217 m(x) { |
| 208 (x?.a).b; | 218 (x?.a).b; |
| 209 } | 219 } |
| 210 '''); | 220 '''); |
| 211 await assertErrors(source, [HintCode.CAN_BE_NULL_AFTER_NULL_AWARE]); | 221 await computeAnalysisResult(source); |
| 222 assertErrors(source, [HintCode.CAN_BE_NULL_AFTER_NULL_AWARE]); |
| 212 verify([source]); | 223 verify([source]); |
| 213 } | 224 } |
| 214 | 225 |
| 215 test_canBeNullAfterNullAware_propertyAccess() async { | 226 test_canBeNullAfterNullAware_propertyAccess() async { |
| 216 Source source = addSource(r''' | 227 Source source = addSource(r''' |
| 217 m(x) { | 228 m(x) { |
| 218 x?.a.b; | 229 x?.a.b; |
| 219 } | 230 } |
| 220 '''); | 231 '''); |
| 221 await assertErrors(source, [HintCode.CAN_BE_NULL_AFTER_NULL_AWARE]); | 232 await computeAnalysisResult(source); |
| 233 assertErrors(source, [HintCode.CAN_BE_NULL_AFTER_NULL_AWARE]); |
| 222 verify([source]); | 234 verify([source]); |
| 223 } | 235 } |
| 224 | 236 |
| 225 test_deadCode_deadBlock_conditionalElse() async { | 237 test_deadCode_deadBlock_conditionalElse() async { |
| 226 Source source = addSource(r''' | 238 Source source = addSource(r''' |
| 227 f() { | 239 f() { |
| 228 true ? 1 : 2; | 240 true ? 1 : 2; |
| 229 }'''); | 241 }'''); |
| 230 await assertErrors(source, [HintCode.DEAD_CODE]); | 242 await computeAnalysisResult(source); |
| 243 assertErrors(source, [HintCode.DEAD_CODE]); |
| 231 verify([source]); | 244 verify([source]); |
| 232 } | 245 } |
| 233 | 246 |
| 234 test_deadCode_deadBlock_conditionalElse_nested() async { | 247 test_deadCode_deadBlock_conditionalElse_nested() async { |
| 235 // test that a dead else-statement can't generate additional violations | 248 // test that a dead else-statement can't generate additional violations |
| 236 Source source = addSource(r''' | 249 Source source = addSource(r''' |
| 237 f() { | 250 f() { |
| 238 true ? true : false && false; | 251 true ? true : false && false; |
| 239 }'''); | 252 }'''); |
| 240 await assertErrors(source, [HintCode.DEAD_CODE]); | 253 await computeAnalysisResult(source); |
| 254 assertErrors(source, [HintCode.DEAD_CODE]); |
| 241 verify([source]); | 255 verify([source]); |
| 242 } | 256 } |
| 243 | 257 |
| 244 test_deadCode_deadBlock_conditionalIf() async { | 258 test_deadCode_deadBlock_conditionalIf() async { |
| 245 Source source = addSource(r''' | 259 Source source = addSource(r''' |
| 246 f() { | 260 f() { |
| 247 false ? 1 : 2; | 261 false ? 1 : 2; |
| 248 }'''); | 262 }'''); |
| 249 await assertErrors(source, [HintCode.DEAD_CODE]); | 263 await computeAnalysisResult(source); |
| 264 assertErrors(source, [HintCode.DEAD_CODE]); |
| 250 verify([source]); | 265 verify([source]); |
| 251 } | 266 } |
| 252 | 267 |
| 253 test_deadCode_deadBlock_conditionalIf_nested() async { | 268 test_deadCode_deadBlock_conditionalIf_nested() async { |
| 254 // test that a dead then-statement can't generate additional violations | 269 // test that a dead then-statement can't generate additional violations |
| 255 Source source = addSource(r''' | 270 Source source = addSource(r''' |
| 256 f() { | 271 f() { |
| 257 false ? false && false : true; | 272 false ? false && false : true; |
| 258 }'''); | 273 }'''); |
| 259 await assertErrors(source, [HintCode.DEAD_CODE]); | 274 await computeAnalysisResult(source); |
| 275 assertErrors(source, [HintCode.DEAD_CODE]); |
| 260 verify([source]); | 276 verify([source]); |
| 261 } | 277 } |
| 262 | 278 |
| 263 test_deadCode_deadBlock_else() async { | 279 test_deadCode_deadBlock_else() async { |
| 264 Source source = addSource(r''' | 280 Source source = addSource(r''' |
| 265 f() { | 281 f() { |
| 266 if(true) {} else {} | 282 if(true) {} else {} |
| 267 }'''); | 283 }'''); |
| 268 await assertErrors(source, [HintCode.DEAD_CODE]); | 284 await computeAnalysisResult(source); |
| 285 assertErrors(source, [HintCode.DEAD_CODE]); |
| 269 verify([source]); | 286 verify([source]); |
| 270 } | 287 } |
| 271 | 288 |
| 272 test_deadCode_deadBlock_else_nested() async { | 289 test_deadCode_deadBlock_else_nested() async { |
| 273 // test that a dead else-statement can't generate additional violations | 290 // test that a dead else-statement can't generate additional violations |
| 274 Source source = addSource(r''' | 291 Source source = addSource(r''' |
| 275 f() { | 292 f() { |
| 276 if(true) {} else {if (false) {}} | 293 if(true) {} else {if (false) {}} |
| 277 }'''); | 294 }'''); |
| 278 await assertErrors(source, [HintCode.DEAD_CODE]); | 295 await computeAnalysisResult(source); |
| 296 assertErrors(source, [HintCode.DEAD_CODE]); |
| 279 verify([source]); | 297 verify([source]); |
| 280 } | 298 } |
| 281 | 299 |
| 282 test_deadCode_deadBlock_if() async { | 300 test_deadCode_deadBlock_if() async { |
| 283 Source source = addSource(r''' | 301 Source source = addSource(r''' |
| 284 f() { | 302 f() { |
| 285 if(false) {} | 303 if(false) {} |
| 286 }'''); | 304 }'''); |
| 287 await assertErrors(source, [HintCode.DEAD_CODE]); | 305 await computeAnalysisResult(source); |
| 306 assertErrors(source, [HintCode.DEAD_CODE]); |
| 288 verify([source]); | 307 verify([source]); |
| 289 } | 308 } |
| 290 | 309 |
| 291 test_deadCode_deadBlock_if_nested() async { | 310 test_deadCode_deadBlock_if_nested() async { |
| 292 // test that a dead then-statement can't generate additional violations | 311 // test that a dead then-statement can't generate additional violations |
| 293 Source source = addSource(r''' | 312 Source source = addSource(r''' |
| 294 f() { | 313 f() { |
| 295 if(false) {if(false) {}} | 314 if(false) {if(false) {}} |
| 296 }'''); | 315 }'''); |
| 297 await assertErrors(source, [HintCode.DEAD_CODE]); | 316 await computeAnalysisResult(source); |
| 317 assertErrors(source, [HintCode.DEAD_CODE]); |
| 298 verify([source]); | 318 verify([source]); |
| 299 } | 319 } |
| 300 | 320 |
| 301 test_deadCode_deadBlock_while() async { | 321 test_deadCode_deadBlock_while() async { |
| 302 Source source = addSource(r''' | 322 Source source = addSource(r''' |
| 303 f() { | 323 f() { |
| 304 while(false) {} | 324 while(false) {} |
| 305 }'''); | 325 }'''); |
| 306 await assertErrors(source, [HintCode.DEAD_CODE]); | 326 await computeAnalysisResult(source); |
| 327 assertErrors(source, [HintCode.DEAD_CODE]); |
| 307 verify([source]); | 328 verify([source]); |
| 308 } | 329 } |
| 309 | 330 |
| 310 test_deadCode_deadBlock_while_nested() async { | 331 test_deadCode_deadBlock_while_nested() async { |
| 311 // test that a dead while body can't generate additional violations | 332 // test that a dead while body can't generate additional violations |
| 312 Source source = addSource(r''' | 333 Source source = addSource(r''' |
| 313 f() { | 334 f() { |
| 314 while(false) {if(false) {}} | 335 while(false) {if(false) {}} |
| 315 }'''); | 336 }'''); |
| 316 await assertErrors(source, [HintCode.DEAD_CODE]); | 337 await computeAnalysisResult(source); |
| 338 assertErrors(source, [HintCode.DEAD_CODE]); |
| 317 verify([source]); | 339 verify([source]); |
| 318 } | 340 } |
| 319 | 341 |
| 320 test_deadCode_deadCatch_catchFollowingCatch() async { | 342 test_deadCode_deadCatch_catchFollowingCatch() async { |
| 321 Source source = addSource(r''' | 343 Source source = addSource(r''' |
| 322 class A {} | 344 class A {} |
| 323 f() { | 345 f() { |
| 324 try {} catch (e) {} catch (e) {} | 346 try {} catch (e) {} catch (e) {} |
| 325 }'''); | 347 }'''); |
| 326 await assertErrors(source, [HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH]); | 348 await computeAnalysisResult(source); |
| 349 assertErrors(source, [HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH]); |
| 327 verify([source]); | 350 verify([source]); |
| 328 } | 351 } |
| 329 | 352 |
| 330 test_deadCode_deadCatch_catchFollowingCatch_nested() async { | 353 test_deadCode_deadCatch_catchFollowingCatch_nested() async { |
| 331 // test that a dead catch clause can't generate additional violations | 354 // test that a dead catch clause can't generate additional violations |
| 332 Source source = addSource(r''' | 355 Source source = addSource(r''' |
| 333 class A {} | 356 class A {} |
| 334 f() { | 357 f() { |
| 335 try {} catch (e) {} catch (e) {if(false) {}} | 358 try {} catch (e) {} catch (e) {if(false) {}} |
| 336 }'''); | 359 }'''); |
| 337 await assertErrors(source, [HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH]); | 360 await computeAnalysisResult(source); |
| 361 assertErrors(source, [HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH]); |
| 338 verify([source]); | 362 verify([source]); |
| 339 } | 363 } |
| 340 | 364 |
| 341 test_deadCode_deadCatch_catchFollowingCatch_object() async { | 365 test_deadCode_deadCatch_catchFollowingCatch_object() async { |
| 342 Source source = addSource(r''' | 366 Source source = addSource(r''' |
| 343 f() { | 367 f() { |
| 344 try {} on Object catch (e) {} catch (e) {} | 368 try {} on Object catch (e) {} catch (e) {} |
| 345 }'''); | 369 }'''); |
| 346 await assertErrors(source, [HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH]); | 370 await computeAnalysisResult(source); |
| 371 assertErrors(source, [HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH]); |
| 347 verify([source]); | 372 verify([source]); |
| 348 } | 373 } |
| 349 | 374 |
| 350 test_deadCode_deadCatch_catchFollowingCatch_object_nested() async { | 375 test_deadCode_deadCatch_catchFollowingCatch_object_nested() async { |
| 351 // test that a dead catch clause can't generate additional violations | 376 // test that a dead catch clause can't generate additional violations |
| 352 Source source = addSource(r''' | 377 Source source = addSource(r''' |
| 353 f() { | 378 f() { |
| 354 try {} on Object catch (e) {} catch (e) {if(false) {}} | 379 try {} on Object catch (e) {} catch (e) {if(false) {}} |
| 355 }'''); | 380 }'''); |
| 356 await assertErrors(source, [HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH]); | 381 await computeAnalysisResult(source); |
| 382 assertErrors(source, [HintCode.DEAD_CODE_CATCH_FOLLOWING_CATCH]); |
| 357 verify([source]); | 383 verify([source]); |
| 358 } | 384 } |
| 359 | 385 |
| 360 test_deadCode_deadCatch_onCatchSubtype() async { | 386 test_deadCode_deadCatch_onCatchSubtype() async { |
| 361 Source source = addSource(r''' | 387 Source source = addSource(r''' |
| 362 class A {} | 388 class A {} |
| 363 class B extends A {} | 389 class B extends A {} |
| 364 f() { | 390 f() { |
| 365 try {} on A catch (e) {} on B catch (e) {} | 391 try {} on A catch (e) {} on B catch (e) {} |
| 366 }'''); | 392 }'''); |
| 367 await assertErrors(source, [HintCode.DEAD_CODE_ON_CATCH_SUBTYPE]); | 393 await computeAnalysisResult(source); |
| 394 assertErrors(source, [HintCode.DEAD_CODE_ON_CATCH_SUBTYPE]); |
| 368 verify([source]); | 395 verify([source]); |
| 369 } | 396 } |
| 370 | 397 |
| 371 test_deadCode_deadCatch_onCatchSubtype_nested() async { | 398 test_deadCode_deadCatch_onCatchSubtype_nested() async { |
| 372 // test that a dead catch clause can't generate additional violations | 399 // test that a dead catch clause can't generate additional violations |
| 373 Source source = addSource(r''' | 400 Source source = addSource(r''' |
| 374 class A {} | 401 class A {} |
| 375 class B extends A {} | 402 class B extends A {} |
| 376 f() { | 403 f() { |
| 377 try {} on A catch (e) {} on B catch (e) {if(false) {}} | 404 try {} on A catch (e) {} on B catch (e) {if(false) {}} |
| 378 }'''); | 405 }'''); |
| 379 await assertErrors(source, [HintCode.DEAD_CODE_ON_CATCH_SUBTYPE]); | 406 await computeAnalysisResult(source); |
| 407 assertErrors(source, [HintCode.DEAD_CODE_ON_CATCH_SUBTYPE]); |
| 380 verify([source]); | 408 verify([source]); |
| 381 } | 409 } |
| 382 | 410 |
| 383 test_deadCode_deadFinalReturnInCase() async { | 411 test_deadCode_deadFinalReturnInCase() async { |
| 384 Source source = addSource(r''' | 412 Source source = addSource(r''' |
| 385 f() { | 413 f() { |
| 386 switch (true) { | 414 switch (true) { |
| 387 case true: | 415 case true: |
| 388 try { | 416 try { |
| 389 int a = 1; | 417 int a = 1; |
| 390 } finally { | 418 } finally { |
| 391 return; | 419 return; |
| 392 } | 420 } |
| 393 return; | 421 return; |
| 394 default: | 422 default: |
| 395 break; | 423 break; |
| 396 } | 424 } |
| 397 }'''); | 425 }'''); |
| 398 await assertErrors(source, [HintCode.DEAD_CODE]); | 426 await computeAnalysisResult(source); |
| 427 assertErrors(source, [HintCode.DEAD_CODE]); |
| 399 verify([source]); | 428 verify([source]); |
| 400 } | 429 } |
| 401 | 430 |
| 402 test_deadCode_deadFinalStatementInCase() async { | 431 test_deadCode_deadFinalStatementInCase() async { |
| 403 Source source = addSource(r''' | 432 Source source = addSource(r''' |
| 404 f() { | 433 f() { |
| 405 switch (true) { | 434 switch (true) { |
| 406 case true: | 435 case true: |
| 407 try { | 436 try { |
| 408 int a = 1; | 437 int a = 1; |
| 409 } finally { | 438 } finally { |
| 410 return; | 439 return; |
| 411 } | 440 } |
| 412 int b = 1; | 441 int b = 1; |
| 413 default: | 442 default: |
| 414 break; | 443 break; |
| 415 } | 444 } |
| 416 }'''); | 445 }'''); |
| 417 // A single dead statement at the end of a switch case that is not a | 446 // A single dead statement at the end of a switch case that is not a |
| 418 // terminating statement will yield two errors. | 447 // terminating statement will yield two errors. |
| 419 await assertErrors(source, | 448 await computeAnalysisResult(source); |
| 449 assertErrors(source, |
| 420 [HintCode.DEAD_CODE, StaticWarningCode.CASE_BLOCK_NOT_TERMINATED]); | 450 [HintCode.DEAD_CODE, StaticWarningCode.CASE_BLOCK_NOT_TERMINATED]); |
| 421 verify([source]); | 451 verify([source]); |
| 422 } | 452 } |
| 423 | 453 |
| 424 test_deadCode_deadOperandLHS_and() async { | 454 test_deadCode_deadOperandLHS_and() async { |
| 425 Source source = addSource(r''' | 455 Source source = addSource(r''' |
| 426 f() { | 456 f() { |
| 427 bool b = false && false; | 457 bool b = false && false; |
| 428 }'''); | 458 }'''); |
| 429 await assertErrors(source, [HintCode.DEAD_CODE]); | 459 await computeAnalysisResult(source); |
| 460 assertErrors(source, [HintCode.DEAD_CODE]); |
| 430 verify([source]); | 461 verify([source]); |
| 431 } | 462 } |
| 432 | 463 |
| 433 test_deadCode_deadOperandLHS_and_nested() async { | 464 test_deadCode_deadOperandLHS_and_nested() async { |
| 434 Source source = addSource(r''' | 465 Source source = addSource(r''' |
| 435 f() { | 466 f() { |
| 436 bool b = false && (false && false); | 467 bool b = false && (false && false); |
| 437 }'''); | 468 }'''); |
| 438 await assertErrors(source, [HintCode.DEAD_CODE]); | 469 await computeAnalysisResult(source); |
| 470 assertErrors(source, [HintCode.DEAD_CODE]); |
| 439 verify([source]); | 471 verify([source]); |
| 440 } | 472 } |
| 441 | 473 |
| 442 test_deadCode_deadOperandLHS_or() async { | 474 test_deadCode_deadOperandLHS_or() async { |
| 443 Source source = addSource(r''' | 475 Source source = addSource(r''' |
| 444 f() { | 476 f() { |
| 445 bool b = true || true; | 477 bool b = true || true; |
| 446 }'''); | 478 }'''); |
| 447 await assertErrors(source, [HintCode.DEAD_CODE]); | 479 await computeAnalysisResult(source); |
| 480 assertErrors(source, [HintCode.DEAD_CODE]); |
| 448 verify([source]); | 481 verify([source]); |
| 449 } | 482 } |
| 450 | 483 |
| 451 test_deadCode_deadOperandLHS_or_nested() async { | 484 test_deadCode_deadOperandLHS_or_nested() async { |
| 452 Source source = addSource(r''' | 485 Source source = addSource(r''' |
| 453 f() { | 486 f() { |
| 454 bool b = true || (false && false); | 487 bool b = true || (false && false); |
| 455 }'''); | 488 }'''); |
| 456 await assertErrors(source, [HintCode.DEAD_CODE]); | 489 await computeAnalysisResult(source); |
| 490 assertErrors(source, [HintCode.DEAD_CODE]); |
| 457 verify([source]); | 491 verify([source]); |
| 458 } | 492 } |
| 459 | 493 |
| 460 test_deadCode_statementAfterBreak_inDefaultCase() async { | 494 test_deadCode_statementAfterBreak_inDefaultCase() async { |
| 461 Source source = addSource(r''' | 495 Source source = addSource(r''' |
| 462 f(v) { | 496 f(v) { |
| 463 switch(v) { | 497 switch(v) { |
| 464 case 1: | 498 case 1: |
| 465 default: | 499 default: |
| 466 break; | 500 break; |
| 467 var a; | 501 var a; |
| 468 } | 502 } |
| 469 }'''); | 503 }'''); |
| 470 await assertErrors(source, [HintCode.DEAD_CODE]); | 504 await computeAnalysisResult(source); |
| 505 assertErrors(source, [HintCode.DEAD_CODE]); |
| 471 verify([source]); | 506 verify([source]); |
| 472 } | 507 } |
| 473 | 508 |
| 474 test_deadCode_statementAfterBreak_inForEachStatement() async { | 509 test_deadCode_statementAfterBreak_inForEachStatement() async { |
| 475 Source source = addSource(r''' | 510 Source source = addSource(r''' |
| 476 f() { | 511 f() { |
| 477 var list; | 512 var list; |
| 478 for(var l in list) { | 513 for(var l in list) { |
| 479 break; | 514 break; |
| 480 var a; | 515 var a; |
| 481 } | 516 } |
| 482 }'''); | 517 }'''); |
| 483 await assertErrors(source, [HintCode.DEAD_CODE]); | 518 await computeAnalysisResult(source); |
| 519 assertErrors(source, [HintCode.DEAD_CODE]); |
| 484 verify([source]); | 520 verify([source]); |
| 485 } | 521 } |
| 486 | 522 |
| 487 test_deadCode_statementAfterBreak_inForStatement() async { | 523 test_deadCode_statementAfterBreak_inForStatement() async { |
| 488 Source source = addSource(r''' | 524 Source source = addSource(r''' |
| 489 f() { | 525 f() { |
| 490 for(;;) { | 526 for(;;) { |
| 491 break; | 527 break; |
| 492 var a; | 528 var a; |
| 493 } | 529 } |
| 494 }'''); | 530 }'''); |
| 495 await assertErrors(source, [HintCode.DEAD_CODE]); | 531 await computeAnalysisResult(source); |
| 532 assertErrors(source, [HintCode.DEAD_CODE]); |
| 496 verify([source]); | 533 verify([source]); |
| 497 } | 534 } |
| 498 | 535 |
| 499 test_deadCode_statementAfterBreak_inSwitchCase() async { | 536 test_deadCode_statementAfterBreak_inSwitchCase() async { |
| 500 Source source = addSource(r''' | 537 Source source = addSource(r''' |
| 501 f(v) { | 538 f(v) { |
| 502 switch(v) { | 539 switch(v) { |
| 503 case 1: | 540 case 1: |
| 504 break; | 541 break; |
| 505 var a; | 542 var a; |
| 506 } | 543 } |
| 507 }'''); | 544 }'''); |
| 508 await assertErrors(source, [HintCode.DEAD_CODE]); | 545 await computeAnalysisResult(source); |
| 546 assertErrors(source, [HintCode.DEAD_CODE]); |
| 509 verify([source]); | 547 verify([source]); |
| 510 } | 548 } |
| 511 | 549 |
| 512 test_deadCode_statementAfterBreak_inWhileStatement() async { | 550 test_deadCode_statementAfterBreak_inWhileStatement() async { |
| 513 Source source = addSource(r''' | 551 Source source = addSource(r''' |
| 514 f(v) { | 552 f(v) { |
| 515 while(v) { | 553 while(v) { |
| 516 break; | 554 break; |
| 517 var a; | 555 var a; |
| 518 } | 556 } |
| 519 }'''); | 557 }'''); |
| 520 await assertErrors(source, [HintCode.DEAD_CODE]); | 558 await computeAnalysisResult(source); |
| 559 assertErrors(source, [HintCode.DEAD_CODE]); |
| 521 verify([source]); | 560 verify([source]); |
| 522 } | 561 } |
| 523 | 562 |
| 524 test_deadCode_statementAfterContinue_inForEachStatement() async { | 563 test_deadCode_statementAfterContinue_inForEachStatement() async { |
| 525 Source source = addSource(r''' | 564 Source source = addSource(r''' |
| 526 f() { | 565 f() { |
| 527 var list; | 566 var list; |
| 528 for(var l in list) { | 567 for(var l in list) { |
| 529 continue; | 568 continue; |
| 530 var a; | 569 var a; |
| 531 } | 570 } |
| 532 }'''); | 571 }'''); |
| 533 await assertErrors(source, [HintCode.DEAD_CODE]); | 572 await computeAnalysisResult(source); |
| 573 assertErrors(source, [HintCode.DEAD_CODE]); |
| 534 verify([source]); | 574 verify([source]); |
| 535 } | 575 } |
| 536 | 576 |
| 537 test_deadCode_statementAfterContinue_inForStatement() async { | 577 test_deadCode_statementAfterContinue_inForStatement() async { |
| 538 Source source = addSource(r''' | 578 Source source = addSource(r''' |
| 539 f() { | 579 f() { |
| 540 for(;;) { | 580 for(;;) { |
| 541 continue; | 581 continue; |
| 542 var a; | 582 var a; |
| 543 } | 583 } |
| 544 }'''); | 584 }'''); |
| 545 await assertErrors(source, [HintCode.DEAD_CODE]); | 585 await computeAnalysisResult(source); |
| 586 assertErrors(source, [HintCode.DEAD_CODE]); |
| 546 verify([source]); | 587 verify([source]); |
| 547 } | 588 } |
| 548 | 589 |
| 549 test_deadCode_statementAfterContinue_inWhileStatement() async { | 590 test_deadCode_statementAfterContinue_inWhileStatement() async { |
| 550 Source source = addSource(r''' | 591 Source source = addSource(r''' |
| 551 f(v) { | 592 f(v) { |
| 552 while(v) { | 593 while(v) { |
| 553 continue; | 594 continue; |
| 554 var a; | 595 var a; |
| 555 } | 596 } |
| 556 }'''); | 597 }'''); |
| 557 await assertErrors(source, [HintCode.DEAD_CODE]); | 598 await computeAnalysisResult(source); |
| 599 assertErrors(source, [HintCode.DEAD_CODE]); |
| 558 verify([source]); | 600 verify([source]); |
| 559 } | 601 } |
| 560 | 602 |
| 561 test_deadCode_statementAfterExitingIf_returns() async { | 603 test_deadCode_statementAfterExitingIf_returns() async { |
| 562 Source source = addSource(r''' | 604 Source source = addSource(r''' |
| 563 f() { | 605 f() { |
| 564 if (1 > 2) { | 606 if (1 > 2) { |
| 565 return; | 607 return; |
| 566 } else { | 608 } else { |
| 567 return; | 609 return; |
| 568 } | 610 } |
| 569 var one = 1; | 611 var one = 1; |
| 570 }'''); | 612 }'''); |
| 571 await assertErrors(source, [HintCode.DEAD_CODE]); | 613 await computeAnalysisResult(source); |
| 614 assertErrors(source, [HintCode.DEAD_CODE]); |
| 572 verify([source]); | 615 verify([source]); |
| 573 } | 616 } |
| 574 | 617 |
| 575 test_deadCode_statementAfterRethrow() async { | 618 test_deadCode_statementAfterRethrow() async { |
| 576 Source source = addSource(r''' | 619 Source source = addSource(r''' |
| 577 f() { | 620 f() { |
| 578 try { | 621 try { |
| 579 var one = 1; | 622 var one = 1; |
| 580 } catch (e) { | 623 } catch (e) { |
| 581 rethrow; | 624 rethrow; |
| 582 var two = 2; | 625 var two = 2; |
| 583 } | 626 } |
| 584 }'''); | 627 }'''); |
| 585 await assertErrors(source, [HintCode.DEAD_CODE]); | 628 await computeAnalysisResult(source); |
| 629 assertErrors(source, [HintCode.DEAD_CODE]); |
| 586 verify([source]); | 630 verify([source]); |
| 587 } | 631 } |
| 588 | 632 |
| 589 test_deadCode_statementAfterReturn_function() async { | 633 test_deadCode_statementAfterReturn_function() async { |
| 590 Source source = addSource(r''' | 634 Source source = addSource(r''' |
| 591 f() { | 635 f() { |
| 592 var one = 1; | 636 var one = 1; |
| 593 return; | 637 return; |
| 594 var two = 2; | 638 var two = 2; |
| 595 }'''); | 639 }'''); |
| 596 await assertErrors(source, [HintCode.DEAD_CODE]); | 640 await computeAnalysisResult(source); |
| 641 assertErrors(source, [HintCode.DEAD_CODE]); |
| 597 verify([source]); | 642 verify([source]); |
| 598 } | 643 } |
| 599 | 644 |
| 600 test_deadCode_statementAfterReturn_ifStatement() async { | 645 test_deadCode_statementAfterReturn_ifStatement() async { |
| 601 Source source = addSource(r''' | 646 Source source = addSource(r''' |
| 602 f(bool b) { | 647 f(bool b) { |
| 603 if(b) { | 648 if(b) { |
| 604 var one = 1; | 649 var one = 1; |
| 605 return; | 650 return; |
| 606 var two = 2; | 651 var two = 2; |
| 607 } | 652 } |
| 608 }'''); | 653 }'''); |
| 609 await assertErrors(source, [HintCode.DEAD_CODE]); | 654 await computeAnalysisResult(source); |
| 655 assertErrors(source, [HintCode.DEAD_CODE]); |
| 610 verify([source]); | 656 verify([source]); |
| 611 } | 657 } |
| 612 | 658 |
| 613 test_deadCode_statementAfterReturn_method() async { | 659 test_deadCode_statementAfterReturn_method() async { |
| 614 Source source = addSource(r''' | 660 Source source = addSource(r''' |
| 615 class A { | 661 class A { |
| 616 m() { | 662 m() { |
| 617 var one = 1; | 663 var one = 1; |
| 618 return; | 664 return; |
| 619 var two = 2; | 665 var two = 2; |
| 620 } | 666 } |
| 621 }'''); | 667 }'''); |
| 622 await assertErrors(source, [HintCode.DEAD_CODE]); | 668 await computeAnalysisResult(source); |
| 669 assertErrors(source, [HintCode.DEAD_CODE]); |
| 623 verify([source]); | 670 verify([source]); |
| 624 } | 671 } |
| 625 | 672 |
| 626 test_deadCode_statementAfterReturn_nested() async { | 673 test_deadCode_statementAfterReturn_nested() async { |
| 627 Source source = addSource(r''' | 674 Source source = addSource(r''' |
| 628 f() { | 675 f() { |
| 629 var one = 1; | 676 var one = 1; |
| 630 return; | 677 return; |
| 631 if(false) {} | 678 if(false) {} |
| 632 }'''); | 679 }'''); |
| 633 await assertErrors(source, [HintCode.DEAD_CODE]); | 680 await computeAnalysisResult(source); |
| 681 assertErrors(source, [HintCode.DEAD_CODE]); |
| 634 verify([source]); | 682 verify([source]); |
| 635 } | 683 } |
| 636 | 684 |
| 637 test_deadCode_statementAfterReturn_twoReturns() async { | 685 test_deadCode_statementAfterReturn_twoReturns() async { |
| 638 Source source = addSource(r''' | 686 Source source = addSource(r''' |
| 639 f() { | 687 f() { |
| 640 var one = 1; | 688 var one = 1; |
| 641 return; | 689 return; |
| 642 var two = 2; | 690 var two = 2; |
| 643 return; | 691 return; |
| 644 var three = 3; | 692 var three = 3; |
| 645 }'''); | 693 }'''); |
| 646 await assertErrors(source, [HintCode.DEAD_CODE]); | 694 await computeAnalysisResult(source); |
| 695 assertErrors(source, [HintCode.DEAD_CODE]); |
| 647 verify([source]); | 696 verify([source]); |
| 648 } | 697 } |
| 649 | 698 |
| 650 test_deadCode_statementAfterThrow() async { | 699 test_deadCode_statementAfterThrow() async { |
| 651 Source source = addSource(r''' | 700 Source source = addSource(r''' |
| 652 f() { | 701 f() { |
| 653 var one = 1; | 702 var one = 1; |
| 654 throw 'Stop here'; | 703 throw 'Stop here'; |
| 655 var two = 2; | 704 var two = 2; |
| 656 }'''); | 705 }'''); |
| 657 await assertErrors(source, [HintCode.DEAD_CODE]); | 706 await computeAnalysisResult(source); |
| 707 assertErrors(source, [HintCode.DEAD_CODE]); |
| 658 verify([source]); | 708 verify([source]); |
| 659 } | 709 } |
| 660 | 710 |
| 661 test_deprecatedAnnotationUse_assignment() async { | 711 test_deprecatedAnnotationUse_assignment() async { |
| 662 Source source = addSource(r''' | 712 Source source = addSource(r''' |
| 663 class A { | 713 class A { |
| 664 @deprecated | 714 @deprecated |
| 665 A operator+(A a) { return a; } | 715 A operator+(A a) { return a; } |
| 666 } | 716 } |
| 667 f(A a) { | 717 f(A a) { |
| 668 A b; | 718 A b; |
| 669 a += b; | 719 a += b; |
| 670 }'''); | 720 }'''); |
| 671 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 721 await computeAnalysisResult(source); |
| 722 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 672 verify([source]); | 723 verify([source]); |
| 673 } | 724 } |
| 674 | 725 |
| 675 test_deprecatedAnnotationUse_call() async { | 726 test_deprecatedAnnotationUse_call() async { |
| 676 Source source = addSource(r''' | 727 Source source = addSource(r''' |
| 677 class A { | 728 class A { |
| 678 @deprecated | 729 @deprecated |
| 679 call() {} | 730 call() {} |
| 680 m() { | 731 m() { |
| 681 A a = new A(); | 732 A a = new A(); |
| 682 a(); | 733 a(); |
| 683 } | 734 } |
| 684 }'''); | 735 }'''); |
| 685 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 736 await computeAnalysisResult(source); |
| 737 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 686 verify([source]); | 738 verify([source]); |
| 687 } | 739 } |
| 688 | 740 |
| 689 test_deprecatedAnnotationUse_deprecated() async { | 741 test_deprecatedAnnotationUse_deprecated() async { |
| 690 Source source = addSource(r''' | 742 Source source = addSource(r''' |
| 691 class A { | 743 class A { |
| 692 @deprecated | 744 @deprecated |
| 693 m() {} | 745 m() {} |
| 694 n() {m();} | 746 n() {m();} |
| 695 }'''); | 747 }'''); |
| 696 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 748 await computeAnalysisResult(source); |
| 749 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 697 verify([source]); | 750 verify([source]); |
| 698 } | 751 } |
| 699 | 752 |
| 700 test_deprecatedAnnotationUse_Deprecated() async { | 753 test_deprecatedAnnotationUse_Deprecated() async { |
| 701 Source source = addSource(r''' | 754 Source source = addSource(r''' |
| 702 class A { | 755 class A { |
| 703 @Deprecated('0.9') | 756 @Deprecated('0.9') |
| 704 m() {} | 757 m() {} |
| 705 n() {m();} | 758 n() {m();} |
| 706 }'''); | 759 }'''); |
| 707 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 760 await computeAnalysisResult(source); |
| 761 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 708 verify([source]); | 762 verify([source]); |
| 709 } | 763 } |
| 710 | 764 |
| 711 test_deprecatedAnnotationUse_export() async { | 765 test_deprecatedAnnotationUse_export() async { |
| 712 Source source = addSource("export 'deprecated_library.dart';"); | 766 Source source = addSource("export 'deprecated_library.dart';"); |
| 713 addNamedSource( | 767 addNamedSource( |
| 714 "/deprecated_library.dart", | 768 "/deprecated_library.dart", |
| 715 r''' | 769 r''' |
| 716 @deprecated | 770 @deprecated |
| 717 library deprecated_library; | 771 library deprecated_library; |
| 718 class A {}'''); | 772 class A {}'''); |
| 719 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 773 await computeAnalysisResult(source); |
| 774 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 720 verify([source]); | 775 verify([source]); |
| 721 } | 776 } |
| 722 | 777 |
| 723 test_deprecatedAnnotationUse_field() async { | 778 test_deprecatedAnnotationUse_field() async { |
| 724 Source source = addSource(r''' | 779 Source source = addSource(r''' |
| 725 class A { | 780 class A { |
| 726 @deprecated | 781 @deprecated |
| 727 int x = 1; | 782 int x = 1; |
| 728 } | 783 } |
| 729 f(A a) { | 784 f(A a) { |
| 730 return a.x; | 785 return a.x; |
| 731 }'''); | 786 }'''); |
| 732 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 787 await computeAnalysisResult(source); |
| 788 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 733 verify([source]); | 789 verify([source]); |
| 734 } | 790 } |
| 735 | 791 |
| 736 test_deprecatedAnnotationUse_getter() async { | 792 test_deprecatedAnnotationUse_getter() async { |
| 737 Source source = addSource(r''' | 793 Source source = addSource(r''' |
| 738 class A { | 794 class A { |
| 739 @deprecated | 795 @deprecated |
| 740 get m => 1; | 796 get m => 1; |
| 741 } | 797 } |
| 742 f(A a) { | 798 f(A a) { |
| 743 return a.m; | 799 return a.m; |
| 744 }'''); | 800 }'''); |
| 745 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 801 await computeAnalysisResult(source); |
| 802 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 746 verify([source]); | 803 verify([source]); |
| 747 } | 804 } |
| 748 | 805 |
| 749 test_deprecatedAnnotationUse_import() async { | 806 test_deprecatedAnnotationUse_import() async { |
| 750 Source source = addSource(r''' | 807 Source source = addSource(r''' |
| 751 import 'deprecated_library.dart'; | 808 import 'deprecated_library.dart'; |
| 752 f(A a) {}'''); | 809 f(A a) {}'''); |
| 753 addNamedSource( | 810 addNamedSource( |
| 754 "/deprecated_library.dart", | 811 "/deprecated_library.dart", |
| 755 r''' | 812 r''' |
| 756 @deprecated | 813 @deprecated |
| 757 library deprecated_library; | 814 library deprecated_library; |
| 758 class A {}'''); | 815 class A {}'''); |
| 759 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 816 await computeAnalysisResult(source); |
| 817 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 760 verify([source]); | 818 verify([source]); |
| 761 } | 819 } |
| 762 | 820 |
| 763 test_deprecatedAnnotationUse_indexExpression() async { | 821 test_deprecatedAnnotationUse_indexExpression() async { |
| 764 Source source = addSource(r''' | 822 Source source = addSource(r''' |
| 765 class A { | 823 class A { |
| 766 @deprecated | 824 @deprecated |
| 767 operator[](int i) {} | 825 operator[](int i) {} |
| 768 } | 826 } |
| 769 f(A a) { | 827 f(A a) { |
| 770 return a[1]; | 828 return a[1]; |
| 771 }'''); | 829 }'''); |
| 772 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 830 await computeAnalysisResult(source); |
| 831 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 773 verify([source]); | 832 verify([source]); |
| 774 } | 833 } |
| 775 | 834 |
| 776 test_deprecatedAnnotationUse_instanceCreation() async { | 835 test_deprecatedAnnotationUse_instanceCreation() async { |
| 777 Source source = addSource(r''' | 836 Source source = addSource(r''' |
| 778 class A { | 837 class A { |
| 779 @deprecated | 838 @deprecated |
| 780 A(int i) {} | 839 A(int i) {} |
| 781 } | 840 } |
| 782 f() { | 841 f() { |
| 783 A a = new A(1); | 842 A a = new A(1); |
| 784 }'''); | 843 }'''); |
| 785 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 844 await computeAnalysisResult(source); |
| 845 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 786 verify([source]); | 846 verify([source]); |
| 787 } | 847 } |
| 788 | 848 |
| 789 test_deprecatedAnnotationUse_instanceCreation_namedConstructor() async { | 849 test_deprecatedAnnotationUse_instanceCreation_namedConstructor() async { |
| 790 Source source = addSource(r''' | 850 Source source = addSource(r''' |
| 791 class A { | 851 class A { |
| 792 @deprecated | 852 @deprecated |
| 793 A.named(int i) {} | 853 A.named(int i) {} |
| 794 } | 854 } |
| 795 f() { | 855 f() { |
| 796 A a = new A.named(1); | 856 A a = new A.named(1); |
| 797 }'''); | 857 }'''); |
| 798 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 858 await computeAnalysisResult(source); |
| 859 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 799 verify([source]); | 860 verify([source]); |
| 800 } | 861 } |
| 801 | 862 |
| 802 test_deprecatedAnnotationUse_named() async { | 863 test_deprecatedAnnotationUse_named() async { |
| 803 Source source = addSource(r''' | 864 Source source = addSource(r''' |
| 804 class A { | 865 class A { |
| 805 m({@deprecated int x}) {} | 866 m({@deprecated int x}) {} |
| 806 n() {m(x: 1);} | 867 n() {m(x: 1);} |
| 807 }'''); | 868 }'''); |
| 808 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 869 await computeAnalysisResult(source); |
| 870 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 809 verify([source]); | 871 verify([source]); |
| 810 } | 872 } |
| 811 | 873 |
| 812 test_deprecatedAnnotationUse_operator() async { | 874 test_deprecatedAnnotationUse_operator() async { |
| 813 Source source = addSource(r''' | 875 Source source = addSource(r''' |
| 814 class A { | 876 class A { |
| 815 @deprecated | 877 @deprecated |
| 816 operator+(A a) {} | 878 operator+(A a) {} |
| 817 } | 879 } |
| 818 f(A a) { | 880 f(A a) { |
| 819 A b; | 881 A b; |
| 820 return a + b; | 882 return a + b; |
| 821 }'''); | 883 }'''); |
| 822 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 884 await computeAnalysisResult(source); |
| 885 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 823 verify([source]); | 886 verify([source]); |
| 824 } | 887 } |
| 825 | 888 |
| 826 test_deprecatedAnnotationUse_positional() async { | 889 test_deprecatedAnnotationUse_positional() async { |
| 827 Source source = addSource(r''' | 890 Source source = addSource(r''' |
| 828 class A { | 891 class A { |
| 829 m([@deprecated int x]) {} | 892 m([@deprecated int x]) {} |
| 830 n() {m(1);} | 893 n() {m(1);} |
| 831 }'''); | 894 }'''); |
| 832 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 895 await computeAnalysisResult(source); |
| 896 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 833 verify([source]); | 897 verify([source]); |
| 834 } | 898 } |
| 835 | 899 |
| 836 test_deprecatedAnnotationUse_setter() async { | 900 test_deprecatedAnnotationUse_setter() async { |
| 837 Source source = addSource(r''' | 901 Source source = addSource(r''' |
| 838 class A { | 902 class A { |
| 839 @deprecated | 903 @deprecated |
| 840 set s(v) {} | 904 set s(v) {} |
| 841 } | 905 } |
| 842 f(A a) { | 906 f(A a) { |
| 843 return a.s = 1; | 907 return a.s = 1; |
| 844 }'''); | 908 }'''); |
| 845 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 909 await computeAnalysisResult(source); |
| 910 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 846 verify([source]); | 911 verify([source]); |
| 847 } | 912 } |
| 848 | 913 |
| 849 test_deprecatedAnnotationUse_superConstructor() async { | 914 test_deprecatedAnnotationUse_superConstructor() async { |
| 850 Source source = addSource(r''' | 915 Source source = addSource(r''' |
| 851 class A { | 916 class A { |
| 852 @deprecated | 917 @deprecated |
| 853 A() {} | 918 A() {} |
| 854 } | 919 } |
| 855 class B extends A { | 920 class B extends A { |
| 856 B() : super() {} | 921 B() : super() {} |
| 857 }'''); | 922 }'''); |
| 858 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 923 await computeAnalysisResult(source); |
| 924 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 859 verify([source]); | 925 verify([source]); |
| 860 } | 926 } |
| 861 | 927 |
| 862 test_deprecatedAnnotationUse_superConstructor_namedConstructor() async { | 928 test_deprecatedAnnotationUse_superConstructor_namedConstructor() async { |
| 863 Source source = addSource(r''' | 929 Source source = addSource(r''' |
| 864 class A { | 930 class A { |
| 865 @deprecated | 931 @deprecated |
| 866 A.named() {} | 932 A.named() {} |
| 867 } | 933 } |
| 868 class B extends A { | 934 class B extends A { |
| 869 B() : super.named() {} | 935 B() : super.named() {} |
| 870 }'''); | 936 }'''); |
| 871 await assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); | 937 await computeAnalysisResult(source); |
| 938 assertErrors(source, [HintCode.DEPRECATED_MEMBER_USE]); |
| 872 verify([source]); | 939 verify([source]); |
| 873 } | 940 } |
| 874 | 941 |
| 875 test_divisionOptimization_double() async { | 942 test_divisionOptimization_double() async { |
| 876 Source source = addSource(r''' | 943 Source source = addSource(r''' |
| 877 f(double x, double y) { | 944 f(double x, double y) { |
| 878 var v = (x / y).toInt(); | 945 var v = (x / y).toInt(); |
| 879 }'''); | 946 }'''); |
| 880 await assertErrors(source, [HintCode.DIVISION_OPTIMIZATION]); | 947 await computeAnalysisResult(source); |
| 948 assertErrors(source, [HintCode.DIVISION_OPTIMIZATION]); |
| 881 verify([source]); | 949 verify([source]); |
| 882 } | 950 } |
| 883 | 951 |
| 884 test_divisionOptimization_int() async { | 952 test_divisionOptimization_int() async { |
| 885 Source source = addSource(r''' | 953 Source source = addSource(r''' |
| 886 f(int x, int y) { | 954 f(int x, int y) { |
| 887 var v = (x / y).toInt(); | 955 var v = (x / y).toInt(); |
| 888 }'''); | 956 }'''); |
| 889 await assertErrors(source, [HintCode.DIVISION_OPTIMIZATION]); | 957 await computeAnalysisResult(source); |
| 958 assertErrors(source, [HintCode.DIVISION_OPTIMIZATION]); |
| 890 verify([source]); | 959 verify([source]); |
| 891 } | 960 } |
| 892 | 961 |
| 893 test_divisionOptimization_propagatedType() async { | 962 test_divisionOptimization_propagatedType() async { |
| 894 // Tests the propagated type information of the '/' method | 963 // Tests the propagated type information of the '/' method |
| 895 Source source = addSource(r''' | 964 Source source = addSource(r''' |
| 896 f(x, y) { | 965 f(x, y) { |
| 897 x = 1; | 966 x = 1; |
| 898 y = 1; | 967 y = 1; |
| 899 var v = (x / y).toInt(); | 968 var v = (x / y).toInt(); |
| 900 }'''); | 969 }'''); |
| 901 await assertErrors(source, [HintCode.DIVISION_OPTIMIZATION]); | 970 await computeAnalysisResult(source); |
| 971 assertErrors(source, [HintCode.DIVISION_OPTIMIZATION]); |
| 902 verify([source]); | 972 verify([source]); |
| 903 } | 973 } |
| 904 | 974 |
| 905 test_divisionOptimization_wrappedBinaryExpression() async { | 975 test_divisionOptimization_wrappedBinaryExpression() async { |
| 906 Source source = addSource(r''' | 976 Source source = addSource(r''' |
| 907 f(int x, int y) { | 977 f(int x, int y) { |
| 908 var v = (((x / y))).toInt(); | 978 var v = (((x / y))).toInt(); |
| 909 }'''); | 979 }'''); |
| 910 await assertErrors(source, [HintCode.DIVISION_OPTIMIZATION]); | 980 await computeAnalysisResult(source); |
| 981 assertErrors(source, [HintCode.DIVISION_OPTIMIZATION]); |
| 911 verify([source]); | 982 verify([source]); |
| 912 } | 983 } |
| 913 | 984 |
| 914 test_duplicateImport() async { | 985 test_duplicateImport() async { |
| 915 Source source = addSource(r''' | 986 Source source = addSource(r''' |
| 916 library L; | 987 library L; |
| 917 import 'lib1.dart'; | 988 import 'lib1.dart'; |
| 918 import 'lib1.dart'; | 989 import 'lib1.dart'; |
| 919 A a;'''); | 990 A a;'''); |
| 920 addNamedSource( | 991 addNamedSource( |
| 921 "/lib1.dart", | 992 "/lib1.dart", |
| 922 r''' | 993 r''' |
| 923 library lib1; | 994 library lib1; |
| 924 class A {}'''); | 995 class A {}'''); |
| 925 await assertErrors(source, [HintCode.DUPLICATE_IMPORT]); | 996 await computeAnalysisResult(source); |
| 997 assertErrors(source, [HintCode.DUPLICATE_IMPORT]); |
| 926 verify([source]); | 998 verify([source]); |
| 927 } | 999 } |
| 928 | 1000 |
| 929 test_duplicateImport2() async { | 1001 test_duplicateImport2() async { |
| 930 Source source = addSource(r''' | 1002 Source source = addSource(r''' |
| 931 library L; | 1003 library L; |
| 932 import 'lib1.dart'; | 1004 import 'lib1.dart'; |
| 933 import 'lib1.dart'; | 1005 import 'lib1.dart'; |
| 934 import 'lib1.dart'; | 1006 import 'lib1.dart'; |
| 935 A a;'''); | 1007 A a;'''); |
| 936 addNamedSource( | 1008 addNamedSource( |
| 937 "/lib1.dart", | 1009 "/lib1.dart", |
| 938 r''' | 1010 r''' |
| 939 library lib1; | 1011 library lib1; |
| 940 class A {}'''); | 1012 class A {}'''); |
| 941 await assertErrors( | 1013 await computeAnalysisResult(source); |
| 1014 assertErrors( |
| 942 source, [HintCode.DUPLICATE_IMPORT, HintCode.DUPLICATE_IMPORT]); | 1015 source, [HintCode.DUPLICATE_IMPORT, HintCode.DUPLICATE_IMPORT]); |
| 943 verify([source]); | 1016 verify([source]); |
| 944 } | 1017 } |
| 945 | 1018 |
| 946 test_duplicateImport3() async { | 1019 test_duplicateImport3() async { |
| 947 Source source = addSource(r''' | 1020 Source source = addSource(r''' |
| 948 library L; | 1021 library L; |
| 949 import 'lib1.dart' as M show A hide B; | 1022 import 'lib1.dart' as M show A hide B; |
| 950 import 'lib1.dart' as M show A hide B; | 1023 import 'lib1.dart' as M show A hide B; |
| 951 M.A a;'''); | 1024 M.A a;'''); |
| 952 addNamedSource( | 1025 addNamedSource( |
| 953 "/lib1.dart", | 1026 "/lib1.dart", |
| 954 r''' | 1027 r''' |
| 955 library lib1; | 1028 library lib1; |
| 956 class A {} | 1029 class A {} |
| 957 class B {}'''); | 1030 class B {}'''); |
| 958 await assertErrors(source, [HintCode.DUPLICATE_IMPORT]); | 1031 await computeAnalysisResult(source); |
| 1032 assertErrors(source, [HintCode.DUPLICATE_IMPORT]); |
| 959 verify([source]); | 1033 verify([source]); |
| 960 } | 1034 } |
| 961 | 1035 |
| 962 test_factory__expr_return_null_OK() async { | 1036 test_factory__expr_return_null_OK() async { |
| 963 Source source = addSource(r''' | 1037 Source source = addSource(r''' |
| 964 import 'package:meta/meta.dart'; | 1038 import 'package:meta/meta.dart'; |
| 965 | 1039 |
| 966 class Stateful { | 1040 class Stateful { |
| 967 @factory | 1041 @factory |
| 968 State createState() => null; | 1042 State createState() => null; |
| 969 } | 1043 } |
| 970 | 1044 |
| 971 class State { } | 1045 class State { } |
| 972 '''); | 1046 '''); |
| 973 await assertNoErrors(source); | 1047 await computeAnalysisResult(source); |
| 1048 assertNoErrors(source); |
| 974 verify([source]); | 1049 verify([source]); |
| 975 } | 1050 } |
| 976 | 1051 |
| 977 test_factory_abstract_OK() async { | 1052 test_factory_abstract_OK() async { |
| 978 Source source = addSource(r''' | 1053 Source source = addSource(r''' |
| 979 import 'package:meta/meta.dart'; | 1054 import 'package:meta/meta.dart'; |
| 980 | 1055 |
| 981 abstract class Stateful { | 1056 abstract class Stateful { |
| 982 @factory | 1057 @factory |
| 983 State createState(); | 1058 State createState(); |
| 984 } | 1059 } |
| 985 | 1060 |
| 986 class State { } | 1061 class State { } |
| 987 '''); | 1062 '''); |
| 988 await assertNoErrors(source); | 1063 await computeAnalysisResult(source); |
| 1064 assertNoErrors(source); |
| 989 verify([source]); | 1065 verify([source]); |
| 990 } | 1066 } |
| 991 | 1067 |
| 992 test_factory_bad_return() async { | 1068 test_factory_bad_return() async { |
| 993 Source source = addSource(r''' | 1069 Source source = addSource(r''' |
| 994 import 'package:meta/meta.dart'; | 1070 import 'package:meta/meta.dart'; |
| 995 | 1071 |
| 996 class Stateful { | 1072 class Stateful { |
| 997 State _s = new State(); | 1073 State _s = new State(); |
| 998 | 1074 |
| 999 @factory | 1075 @factory |
| 1000 State createState() => _s; | 1076 State createState() => _s; |
| 1001 } | 1077 } |
| 1002 | 1078 |
| 1003 class State { } | 1079 class State { } |
| 1004 '''); | 1080 '''); |
| 1005 await assertErrors(source, [HintCode.INVALID_FACTORY_METHOD_IMPL]); | 1081 await computeAnalysisResult(source); |
| 1082 assertErrors(source, [HintCode.INVALID_FACTORY_METHOD_IMPL]); |
| 1006 verify([source]); | 1083 verify([source]); |
| 1007 } | 1084 } |
| 1008 | 1085 |
| 1009 test_factory_block_OK() async { | 1086 test_factory_block_OK() async { |
| 1010 Source source = addSource(r''' | 1087 Source source = addSource(r''' |
| 1011 import 'package:meta/meta.dart'; | 1088 import 'package:meta/meta.dart'; |
| 1012 | 1089 |
| 1013 class Stateful { | 1090 class Stateful { |
| 1014 @factory | 1091 @factory |
| 1015 State createState() { | 1092 State createState() { |
| 1016 return new State(); | 1093 return new State(); |
| 1017 } | 1094 } |
| 1018 } | 1095 } |
| 1019 | 1096 |
| 1020 class State { } | 1097 class State { } |
| 1021 '''); | 1098 '''); |
| 1022 await assertNoErrors(source); | 1099 await computeAnalysisResult(source); |
| 1100 assertNoErrors(source); |
| 1023 verify([source]); | 1101 verify([source]); |
| 1024 } | 1102 } |
| 1025 | 1103 |
| 1026 test_factory_block_return_null_OK() async { | 1104 test_factory_block_return_null_OK() async { |
| 1027 Source source = addSource(r''' | 1105 Source source = addSource(r''' |
| 1028 import 'package:meta/meta.dart'; | 1106 import 'package:meta/meta.dart'; |
| 1029 | 1107 |
| 1030 class Stateful { | 1108 class Stateful { |
| 1031 @factory | 1109 @factory |
| 1032 State createState() { | 1110 State createState() { |
| 1033 return null; | 1111 return null; |
| 1034 } | 1112 } |
| 1035 } | 1113 } |
| 1036 | 1114 |
| 1037 class State { } | 1115 class State { } |
| 1038 '''); | 1116 '''); |
| 1039 await assertNoErrors(source); | 1117 await computeAnalysisResult(source); |
| 1118 assertNoErrors(source); |
| 1040 verify([source]); | 1119 verify([source]); |
| 1041 } | 1120 } |
| 1042 | 1121 |
| 1043 test_factory_expr_OK() async { | 1122 test_factory_expr_OK() async { |
| 1044 Source source = addSource(r''' | 1123 Source source = addSource(r''' |
| 1045 import 'package:meta/meta.dart'; | 1124 import 'package:meta/meta.dart'; |
| 1046 | 1125 |
| 1047 class Stateful { | 1126 class Stateful { |
| 1048 @factory | 1127 @factory |
| 1049 State createState() => new State(); | 1128 State createState() => new State(); |
| 1050 } | 1129 } |
| 1051 | 1130 |
| 1052 class State { } | 1131 class State { } |
| 1053 '''); | 1132 '''); |
| 1054 await assertNoErrors(source); | 1133 await computeAnalysisResult(source); |
| 1134 assertNoErrors(source); |
| 1055 verify([source]); | 1135 verify([source]); |
| 1056 } | 1136 } |
| 1057 | 1137 |
| 1058 test_factory_misplaced_annotation() async { | 1138 test_factory_misplaced_annotation() async { |
| 1059 Source source = addSource(r''' | 1139 Source source = addSource(r''' |
| 1060 import 'package:meta/meta.dart'; | 1140 import 'package:meta/meta.dart'; |
| 1061 | 1141 |
| 1062 @factory | 1142 @factory |
| 1063 class X { | 1143 class X { |
| 1064 @factory | 1144 @factory |
| 1065 int x; | 1145 int x; |
| 1066 } | 1146 } |
| 1067 | 1147 |
| 1068 @factory | 1148 @factory |
| 1069 main() { } | 1149 main() { } |
| 1070 '''); | 1150 '''); |
| 1071 await assertErrors(source, [ | 1151 await computeAnalysisResult(source); |
| 1152 assertErrors(source, [ |
| 1072 HintCode.INVALID_FACTORY_ANNOTATION, | 1153 HintCode.INVALID_FACTORY_ANNOTATION, |
| 1073 HintCode.INVALID_FACTORY_ANNOTATION, | 1154 HintCode.INVALID_FACTORY_ANNOTATION, |
| 1074 HintCode.INVALID_FACTORY_ANNOTATION | 1155 HintCode.INVALID_FACTORY_ANNOTATION |
| 1075 ]); | 1156 ]); |
| 1076 verify([source]); | 1157 verify([source]); |
| 1077 } | 1158 } |
| 1078 | 1159 |
| 1079 test_factory_no_return_type_OK() async { | 1160 test_factory_no_return_type_OK() async { |
| 1080 Source source = addSource(r''' | 1161 Source source = addSource(r''' |
| 1081 import 'package:meta/meta.dart'; | 1162 import 'package:meta/meta.dart'; |
| 1082 | 1163 |
| 1083 class Stateful { | 1164 class Stateful { |
| 1084 @factory | 1165 @factory |
| 1085 createState() { | 1166 createState() { |
| 1086 return new Stateful(); | 1167 return new Stateful(); |
| 1087 } | 1168 } |
| 1088 } | 1169 } |
| 1089 '''); | 1170 '''); |
| 1090 // Null return types will get flagged elsewhere, no need to pile-on here. | 1171 // Null return types will get flagged elsewhere, no need to pile-on here. |
| 1091 await assertNoErrors(source); | 1172 await computeAnalysisResult(source); |
| 1173 assertNoErrors(source); |
| 1092 verify([source]); | 1174 verify([source]); |
| 1093 } | 1175 } |
| 1094 | 1176 |
| 1095 test_factory_subclass_OK() async { | 1177 test_factory_subclass_OK() async { |
| 1096 Source source = addSource(r''' | 1178 Source source = addSource(r''' |
| 1097 import 'package:meta/meta.dart'; | 1179 import 'package:meta/meta.dart'; |
| 1098 | 1180 |
| 1099 abstract class Stateful { | 1181 abstract class Stateful { |
| 1100 @factory | 1182 @factory |
| 1101 State createState(); | 1183 State createState(); |
| 1102 } | 1184 } |
| 1103 | 1185 |
| 1104 class MyThing extends Stateful { | 1186 class MyThing extends Stateful { |
| 1105 @override | 1187 @override |
| 1106 State createState() { | 1188 State createState() { |
| 1107 print('my state'); | 1189 print('my state'); |
| 1108 return new MyState(); | 1190 return new MyState(); |
| 1109 } | 1191 } |
| 1110 } | 1192 } |
| 1111 | 1193 |
| 1112 class State { } | 1194 class State { } |
| 1113 class MyState extends State { } | 1195 class MyState extends State { } |
| 1114 '''); | 1196 '''); |
| 1115 await assertNoErrors(source); | 1197 await computeAnalysisResult(source); |
| 1198 assertNoErrors(source); |
| 1116 verify([source]); | 1199 verify([source]); |
| 1117 } | 1200 } |
| 1118 | 1201 |
| 1119 test_factory_void_return() async { | 1202 test_factory_void_return() async { |
| 1120 Source source = addSource(r''' | 1203 Source source = addSource(r''' |
| 1121 import 'package:meta/meta.dart'; | 1204 import 'package:meta/meta.dart'; |
| 1122 | 1205 |
| 1123 class Stateful { | 1206 class Stateful { |
| 1124 @factory | 1207 @factory |
| 1125 void createState() {} | 1208 void createState() {} |
| 1126 } | 1209 } |
| 1127 '''); | 1210 '''); |
| 1128 await assertErrors(source, [HintCode.INVALID_FACTORY_METHOD_DECL]); | 1211 await computeAnalysisResult(source); |
| 1212 assertErrors(source, [HintCode.INVALID_FACTORY_METHOD_DECL]); |
| 1129 verify([source]); | 1213 verify([source]); |
| 1130 } | 1214 } |
| 1131 | 1215 |
| 1132 test_importDeferredLibraryWithLoadFunction() async { | 1216 test_importDeferredLibraryWithLoadFunction() async { |
| 1133 await resolveWithErrors(<String>[ | 1217 await resolveWithErrors(<String>[ |
| 1134 r''' | 1218 r''' |
| 1135 library lib1; | 1219 library lib1; |
| 1136 loadLibrary() {} | 1220 loadLibrary() {} |
| 1137 f() {}''', | 1221 f() {}''', |
| 1138 r''' | 1222 r''' |
| 1139 library root; | 1223 library root; |
| 1140 import 'lib1.dart' deferred as lib1; | 1224 import 'lib1.dart' deferred as lib1; |
| 1141 main() { lib1.f(); }''' | 1225 main() { lib1.f(); }''' |
| 1142 ], <ErrorCode>[ | 1226 ], <ErrorCode>[ |
| 1143 HintCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION | 1227 HintCode.IMPORT_DEFERRED_LIBRARY_WITH_LOAD_FUNCTION |
| 1144 ]); | 1228 ]); |
| 1145 } | 1229 } |
| 1146 | 1230 |
| 1147 test_invalidAssignment_instanceVariable() async { | 1231 test_invalidAssignment_instanceVariable() async { |
| 1148 Source source = addSource(r''' | 1232 Source source = addSource(r''' |
| 1149 class A { | 1233 class A { |
| 1150 int x; | 1234 int x; |
| 1151 } | 1235 } |
| 1152 f(var y) { | 1236 f(var y) { |
| 1153 A a; | 1237 A a; |
| 1154 if(y is String) { | 1238 if(y is String) { |
| 1155 a.x = y; | 1239 a.x = y; |
| 1156 } | 1240 } |
| 1157 }'''); | 1241 }'''); |
| 1158 await assertErrors(source, [HintCode.INVALID_ASSIGNMENT]); | 1242 await computeAnalysisResult(source); |
| 1243 assertErrors(source, [HintCode.INVALID_ASSIGNMENT]); |
| 1159 verify([source]); | 1244 verify([source]); |
| 1160 } | 1245 } |
| 1161 | 1246 |
| 1162 test_invalidAssignment_localVariable() async { | 1247 test_invalidAssignment_localVariable() async { |
| 1163 Source source = addSource(r''' | 1248 Source source = addSource(r''' |
| 1164 f(var y) { | 1249 f(var y) { |
| 1165 if(y is String) { | 1250 if(y is String) { |
| 1166 int x = y; | 1251 int x = y; |
| 1167 } | 1252 } |
| 1168 }'''); | 1253 }'''); |
| 1169 await assertErrors(source, [HintCode.INVALID_ASSIGNMENT]); | 1254 await computeAnalysisResult(source); |
| 1255 assertErrors(source, [HintCode.INVALID_ASSIGNMENT]); |
| 1170 verify([source]); | 1256 verify([source]); |
| 1171 } | 1257 } |
| 1172 | 1258 |
| 1173 test_invalidAssignment_message() async { | 1259 test_invalidAssignment_message() async { |
| 1174 // The implementation of HintCode.INVALID_ASSIGNMENT assumes that | 1260 // The implementation of HintCode.INVALID_ASSIGNMENT assumes that |
| 1175 // StaticTypeWarningCode.INVALID_ASSIGNMENT has the same message. | 1261 // StaticTypeWarningCode.INVALID_ASSIGNMENT has the same message. |
| 1176 expect(StaticTypeWarningCode.INVALID_ASSIGNMENT.message, | 1262 expect(StaticTypeWarningCode.INVALID_ASSIGNMENT.message, |
| 1177 HintCode.INVALID_ASSIGNMENT.message); | 1263 HintCode.INVALID_ASSIGNMENT.message); |
| 1178 } | 1264 } |
| 1179 | 1265 |
| 1180 test_invalidAssignment_staticVariable() async { | 1266 test_invalidAssignment_staticVariable() async { |
| 1181 Source source = addSource(r''' | 1267 Source source = addSource(r''' |
| 1182 class A { | 1268 class A { |
| 1183 static int x; | 1269 static int x; |
| 1184 } | 1270 } |
| 1185 f(var y) { | 1271 f(var y) { |
| 1186 if(y is String) { | 1272 if(y is String) { |
| 1187 A.x = y; | 1273 A.x = y; |
| 1188 } | 1274 } |
| 1189 }'''); | 1275 }'''); |
| 1190 await assertErrors(source, [HintCode.INVALID_ASSIGNMENT]); | 1276 await computeAnalysisResult(source); |
| 1277 assertErrors(source, [HintCode.INVALID_ASSIGNMENT]); |
| 1191 verify([source]); | 1278 verify([source]); |
| 1192 } | 1279 } |
| 1193 | 1280 |
| 1194 test_invalidAssignment_variableDeclaration() async { | 1281 test_invalidAssignment_variableDeclaration() async { |
| 1195 // 17971 | 1282 // 17971 |
| 1196 Source source = addSource(r''' | 1283 Source source = addSource(r''' |
| 1197 class Point { | 1284 class Point { |
| 1198 final num x, y; | 1285 final num x, y; |
| 1199 Point(this.x, this.y); | 1286 Point(this.x, this.y); |
| 1200 Point operator +(Point other) { | 1287 Point operator +(Point other) { |
| 1201 return new Point(x+other.x, y+other.y); | 1288 return new Point(x+other.x, y+other.y); |
| 1202 } | 1289 } |
| 1203 } | 1290 } |
| 1204 main() { | 1291 main() { |
| 1205 var p1 = new Point(0, 0); | 1292 var p1 = new Point(0, 0); |
| 1206 var p2 = new Point(10, 10); | 1293 var p2 = new Point(10, 10); |
| 1207 int n = p1 + p2; | 1294 int n = p1 + p2; |
| 1208 }'''); | 1295 }'''); |
| 1209 await assertErrors(source, [HintCode.INVALID_ASSIGNMENT]); | 1296 await computeAnalysisResult(source); |
| 1297 assertErrors(source, [HintCode.INVALID_ASSIGNMENT]); |
| 1210 verify([source]); | 1298 verify([source]); |
| 1211 } | 1299 } |
| 1212 | 1300 |
| 1213 test_invalidUseOfProtectedMember_closure() async { | 1301 test_invalidUseOfProtectedMember_closure() async { |
| 1214 Source source = addNamedSource( | 1302 Source source = addNamedSource( |
| 1215 '/lib1.dart', | 1303 '/lib1.dart', |
| 1216 r''' | 1304 r''' |
| 1217 import 'package:meta/meta.dart'; | 1305 import 'package:meta/meta.dart'; |
| 1218 | 1306 |
| 1219 class A { | 1307 class A { |
| 1220 @protected | 1308 @protected |
| 1221 int a() => 42; | 1309 int a() => 42; |
| 1222 } | 1310 } |
| 1223 '''); | 1311 '''); |
| 1224 Source source2 = addNamedSource( | 1312 Source source2 = addNamedSource( |
| 1225 '/lib2.dart', | 1313 '/lib2.dart', |
| 1226 r''' | 1314 r''' |
| 1227 import 'lib1.dart'; | 1315 import 'lib1.dart'; |
| 1228 | 1316 |
| 1229 void main() { | 1317 void main() { |
| 1230 var leak = new A().a; | 1318 var leak = new A().a; |
| 1231 print(leak); | 1319 print(leak); |
| 1232 } | 1320 } |
| 1233 '''); | 1321 '''); |
| 1234 await assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]); | 1322 await computeAnalysisResult(source); |
| 1235 await assertNoErrors(source); | 1323 await computeAnalysisResult(source2); |
| 1324 assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]); |
| 1325 assertNoErrors(source); |
| 1236 verify([source, source2]); | 1326 verify([source, source2]); |
| 1237 } | 1327 } |
| 1238 | 1328 |
| 1239 test_invalidUseOfProtectedMember_field() async { | 1329 test_invalidUseOfProtectedMember_field() async { |
| 1240 Source source = addNamedSource( | 1330 Source source = addNamedSource( |
| 1241 '/lib1.dart', | 1331 '/lib1.dart', |
| 1242 r''' | 1332 r''' |
| 1243 import 'package:meta/meta.dart'; | 1333 import 'package:meta/meta.dart'; |
| 1244 class A { | 1334 class A { |
| 1245 @protected | 1335 @protected |
| 1246 int a; | 1336 int a; |
| 1247 } | 1337 } |
| 1248 '''); | 1338 '''); |
| 1249 Source source2 = addNamedSource( | 1339 Source source2 = addNamedSource( |
| 1250 '/lib2.dart', | 1340 '/lib2.dart', |
| 1251 r''' | 1341 r''' |
| 1252 import 'lib1.dart'; | 1342 import 'lib1.dart'; |
| 1253 | 1343 |
| 1254 abstract class B { | 1344 abstract class B { |
| 1255 int b() => new A().a; | 1345 int b() => new A().a; |
| 1256 } | 1346 } |
| 1257 '''); | 1347 '''); |
| 1258 await assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]); | 1348 await computeAnalysisResult(source); |
| 1259 await assertNoErrors(source); | 1349 await computeAnalysisResult(source2); |
| 1350 assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]); |
| 1351 assertNoErrors(source); |
| 1260 verify([source, source2]); | 1352 verify([source, source2]); |
| 1261 } | 1353 } |
| 1262 | 1354 |
| 1263 test_invalidUseOfProtectedMember_field_OK() async { | 1355 test_invalidUseOfProtectedMember_field_OK() async { |
| 1264 Source source = addSource(r''' | 1356 Source source = addSource(r''' |
| 1265 import 'package:meta/meta.dart'; | 1357 import 'package:meta/meta.dart'; |
| 1266 class A { | 1358 class A { |
| 1267 @protected | 1359 @protected |
| 1268 int a; | 1360 int a; |
| 1269 } | 1361 } |
| 1270 abstract class B implements A { | 1362 abstract class B implements A { |
| 1271 int b() => a; | 1363 int b() => a; |
| 1272 }'''); | 1364 }'''); |
| 1273 await assertNoErrors(source); | 1365 await computeAnalysisResult(source); |
| 1366 assertNoErrors(source); |
| 1274 verify([source]); | 1367 verify([source]); |
| 1275 } | 1368 } |
| 1276 | 1369 |
| 1277 test_invalidUseOfProtectedMember_function() async { | 1370 test_invalidUseOfProtectedMember_function() async { |
| 1278 Source source = addNamedSource( | 1371 Source source = addNamedSource( |
| 1279 '/lib1.dart', | 1372 '/lib1.dart', |
| 1280 r''' | 1373 r''' |
| 1281 import 'package:meta/meta.dart'; | 1374 import 'package:meta/meta.dart'; |
| 1282 class A { | 1375 class A { |
| 1283 @protected | 1376 @protected |
| 1284 void a(){ } | 1377 void a(){ } |
| 1285 } | 1378 } |
| 1286 '''); | 1379 '''); |
| 1287 Source source2 = addNamedSource( | 1380 Source source2 = addNamedSource( |
| 1288 '/lib2.dart', | 1381 '/lib2.dart', |
| 1289 r''' | 1382 r''' |
| 1290 import 'lib1.dart'; | 1383 import 'lib1.dart'; |
| 1291 | 1384 |
| 1292 main() { | 1385 main() { |
| 1293 new A().a(); | 1386 new A().a(); |
| 1294 } | 1387 } |
| 1295 '''); | 1388 '''); |
| 1296 await assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]); | 1389 await computeAnalysisResult(source); |
| 1297 await assertNoErrors(source); | 1390 await computeAnalysisResult(source2); |
| 1391 assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]); |
| 1392 assertNoErrors(source); |
| 1298 verify([source, source2]); | 1393 verify([source, source2]); |
| 1299 } | 1394 } |
| 1300 | 1395 |
| 1301 test_invalidUseOfProtectedMember_function_OK() async { | 1396 test_invalidUseOfProtectedMember_function_OK() async { |
| 1302 Source source = addSource(r''' | 1397 Source source = addSource(r''' |
| 1303 import 'package:meta/meta.dart'; | 1398 import 'package:meta/meta.dart'; |
| 1304 class A { | 1399 class A { |
| 1305 @protected | 1400 @protected |
| 1306 int a() => 0; | 1401 int a() => 0; |
| 1307 } | 1402 } |
| 1308 | 1403 |
| 1309 abstract class B implements A { | 1404 abstract class B implements A { |
| 1310 int b() => a(); | 1405 int b() => a(); |
| 1311 }'''); | 1406 }'''); |
| 1312 await assertNoErrors(source); | 1407 await computeAnalysisResult(source); |
| 1408 assertNoErrors(source); |
| 1313 verify([source]); | 1409 verify([source]); |
| 1314 } | 1410 } |
| 1315 | 1411 |
| 1316 test_invalidUseOfProtectedMember_function_OK2() async { | 1412 test_invalidUseOfProtectedMember_function_OK2() async { |
| 1317 Source source = addSource(r''' | 1413 Source source = addSource(r''' |
| 1318 import 'package:meta/meta.dart'; | 1414 import 'package:meta/meta.dart'; |
| 1319 class A { | 1415 class A { |
| 1320 @protected | 1416 @protected |
| 1321 void a(){ } | 1417 void a(){ } |
| 1322 } | 1418 } |
| 1323 main() { | 1419 main() { |
| 1324 new A().a(); | 1420 new A().a(); |
| 1325 }'''); | 1421 }'''); |
| 1326 await assertNoErrors(source); | 1422 await computeAnalysisResult(source); |
| 1423 assertNoErrors(source); |
| 1327 verify([source]); | 1424 verify([source]); |
| 1328 } | 1425 } |
| 1329 | 1426 |
| 1330 test_invalidUseOfProtectedMember_getter() async { | 1427 test_invalidUseOfProtectedMember_getter() async { |
| 1331 Source source = addNamedSource( | 1428 Source source = addNamedSource( |
| 1332 '/lib1.dart', | 1429 '/lib1.dart', |
| 1333 r''' | 1430 r''' |
| 1334 import 'package:meta/meta.dart'; | 1431 import 'package:meta/meta.dart'; |
| 1335 class A { | 1432 class A { |
| 1336 @protected | 1433 @protected |
| 1337 int get a => 42; | 1434 int get a => 42; |
| 1338 } | 1435 } |
| 1339 '''); | 1436 '''); |
| 1340 Source source2 = addNamedSource( | 1437 Source source2 = addNamedSource( |
| 1341 '/lib2.dart', | 1438 '/lib2.dart', |
| 1342 r''' | 1439 r''' |
| 1343 import 'lib1.dart'; | 1440 import 'lib1.dart'; |
| 1344 | 1441 |
| 1345 class B { | 1442 class B { |
| 1346 A a; | 1443 A a; |
| 1347 int b() => a.a; | 1444 int b() => a.a; |
| 1348 } | 1445 } |
| 1349 '''); | 1446 '''); |
| 1350 await assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]); | 1447 await computeAnalysisResult(source); |
| 1351 await assertNoErrors(source); | 1448 await computeAnalysisResult(source2); |
| 1449 assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]); |
| 1450 assertNoErrors(source); |
| 1352 verify([source, source2]); | 1451 verify([source, source2]); |
| 1353 } | 1452 } |
| 1354 | 1453 |
| 1355 test_invalidUseOfProtectedMember_getter_OK() async { | 1454 test_invalidUseOfProtectedMember_getter_OK() async { |
| 1356 Source source = addSource(r''' | 1455 Source source = addSource(r''' |
| 1357 import 'package:meta/meta.dart'; | 1456 import 'package:meta/meta.dart'; |
| 1358 class A { | 1457 class A { |
| 1359 @protected | 1458 @protected |
| 1360 int get a => 42; | 1459 int get a => 42; |
| 1361 } | 1460 } |
| 1362 abstract class B implements A { | 1461 abstract class B implements A { |
| 1363 int b() => a; | 1462 int b() => a; |
| 1364 }'''); | 1463 }'''); |
| 1365 await assertNoErrors(source); | 1464 await computeAnalysisResult(source); |
| 1465 assertNoErrors(source); |
| 1366 verify([source]); | 1466 verify([source]); |
| 1367 } | 1467 } |
| 1368 | 1468 |
| 1369 test_invalidUseOfProtectedMember_in_docs_OK() async { | 1469 test_invalidUseOfProtectedMember_in_docs_OK() async { |
| 1370 Source source = addSource(r''' | 1470 Source source = addSource(r''' |
| 1371 import 'package:meta/meta.dart'; | 1471 import 'package:meta/meta.dart'; |
| 1372 | 1472 |
| 1373 class A { | 1473 class A { |
| 1374 @protected | 1474 @protected |
| 1375 int a() => c; | 1475 int a() => c; |
| 1376 @protected | 1476 @protected |
| 1377 int get b => a(); | 1477 int get b => a(); |
| 1378 @protected | 1478 @protected |
| 1379 int c = 42; | 1479 int c = 42; |
| 1380 } | 1480 } |
| 1381 | 1481 |
| 1382 /// OK: [A.a], [A.b], [A.c]. | 1482 /// OK: [A.a], [A.b], [A.c]. |
| 1383 f() {} | 1483 f() {} |
| 1384 '''); | 1484 '''); |
| 1385 await assertNoErrors(source); | 1485 await computeAnalysisResult(source); |
| 1486 assertNoErrors(source); |
| 1386 verify([source]); | 1487 verify([source]); |
| 1387 } | 1488 } |
| 1388 | 1489 |
| 1389 test_invalidUseOfProtectedMember_message() async { | 1490 test_invalidUseOfProtectedMember_message() async { |
| 1390 Source source = addNamedSource( | 1491 Source source = addNamedSource( |
| 1391 '/lib1.dart', | 1492 '/lib1.dart', |
| 1392 r''' | 1493 r''' |
| 1393 import 'package:meta/meta.dart'; | 1494 import 'package:meta/meta.dart'; |
| 1394 class A { | 1495 class A { |
| 1395 @protected | 1496 @protected |
| 1396 void a(){ } | 1497 void a(){ } |
| 1397 } | 1498 } |
| 1398 '''); | 1499 '''); |
| 1399 Source source2 = addNamedSource( | 1500 Source source2 = addNamedSource( |
| 1400 '/lib2.dart', | 1501 '/lib2.dart', |
| 1401 r''' | 1502 r''' |
| 1402 import 'lib1.dart'; | 1503 import 'lib1.dart'; |
| 1403 | 1504 |
| 1404 class B { | 1505 class B { |
| 1405 void b() => new A().a(); | 1506 void b() => new A().a(); |
| 1406 } | 1507 } |
| 1407 '''); | 1508 '''); |
| 1408 List<AnalysisError> errors = analysisContext2.computeErrors(source2); | 1509 await computeAnalysisResult(source); |
| 1409 expect(errors, hasLength(1)); | 1510 await computeAnalysisResult(source2); |
| 1410 expect(errors[0].errorCode, HintCode.INVALID_USE_OF_PROTECTED_MEMBER); | 1511 assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]); |
| 1411 verify([source, source2]); | 1512 verify([source, source2]); |
| 1412 } | 1513 } |
| 1413 | 1514 |
| 1414 test_invalidUseOfProtectedMember_method_1() async { | 1515 test_invalidUseOfProtectedMember_method_1() async { |
| 1415 Source source = addNamedSource( | 1516 Source source = addNamedSource( |
| 1416 '/lib1.dart', | 1517 '/lib1.dart', |
| 1417 r''' | 1518 r''' |
| 1418 import 'package:meta/meta.dart'; | 1519 import 'package:meta/meta.dart'; |
| 1419 class A { | 1520 class A { |
| 1420 @protected | 1521 @protected |
| 1421 void a(){ } | 1522 void a(){ } |
| 1422 } | 1523 } |
| 1423 '''); | 1524 '''); |
| 1424 Source source2 = addNamedSource( | 1525 Source source2 = addNamedSource( |
| 1425 '/lib2.dart', | 1526 '/lib2.dart', |
| 1426 r''' | 1527 r''' |
| 1427 import 'lib1.dart'; | 1528 import 'lib1.dart'; |
| 1428 | 1529 |
| 1429 class B { | 1530 class B { |
| 1430 void b() => new A().a(); | 1531 void b() => new A().a(); |
| 1431 } | 1532 } |
| 1432 '''); | 1533 '''); |
| 1433 | 1534 |
| 1434 await assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]); | 1535 await computeAnalysisResult(source); |
| 1435 await assertNoErrors(source); | 1536 await computeAnalysisResult(source2); |
| 1537 assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]); |
| 1538 assertNoErrors(source); |
| 1436 verify([source, source2]); | 1539 verify([source, source2]); |
| 1437 } | 1540 } |
| 1438 | 1541 |
| 1439 test_invalidUseOfProtectedMember_method_OK() async { | 1542 test_invalidUseOfProtectedMember_method_OK() async { |
| 1440 // https://github.com/dart-lang/linter/issues/257 | 1543 // https://github.com/dart-lang/linter/issues/257 |
| 1441 Source source = addSource(r''' | 1544 Source source = addSource(r''' |
| 1442 import 'package:meta/meta.dart'; | 1545 import 'package:meta/meta.dart'; |
| 1443 | 1546 |
| 1444 typedef void VoidCallback(); | 1547 typedef void VoidCallback(); |
| 1445 | 1548 |
| 1446 class State<E> { | 1549 class State<E> { |
| 1447 @protected | 1550 @protected |
| 1448 void setState(VoidCallback fn) {} | 1551 void setState(VoidCallback fn) {} |
| 1449 } | 1552 } |
| 1450 | 1553 |
| 1451 class Button extends State<Object> { | 1554 class Button extends State<Object> { |
| 1452 void handleSomething() { | 1555 void handleSomething() { |
| 1453 setState(() {}); | 1556 setState(() {}); |
| 1454 } | 1557 } |
| 1455 } | 1558 } |
| 1456 '''); | 1559 '''); |
| 1457 await assertNoErrors(source); | 1560 await computeAnalysisResult(source); |
| 1561 assertNoErrors(source); |
| 1458 verify([source]); | 1562 verify([source]); |
| 1459 } | 1563 } |
| 1460 | 1564 |
| 1461 test_invalidUseOfProtectedMember_OK_1() async { | 1565 test_invalidUseOfProtectedMember_OK_1() async { |
| 1462 Source source = addSource(r''' | 1566 Source source = addSource(r''' |
| 1463 import 'package:meta/meta.dart'; | 1567 import 'package:meta/meta.dart'; |
| 1464 class A { | 1568 class A { |
| 1465 @protected | 1569 @protected |
| 1466 void a(){ } | 1570 void a(){ } |
| 1467 } | 1571 } |
| 1468 class B extends A { | 1572 class B extends A { |
| 1469 void b() => a(); | 1573 void b() => a(); |
| 1470 }'''); | 1574 }'''); |
| 1471 await assertNoErrors(source); | 1575 await computeAnalysisResult(source); |
| 1576 assertNoErrors(source); |
| 1472 verify([source]); | 1577 verify([source]); |
| 1473 } | 1578 } |
| 1474 | 1579 |
| 1475 test_invalidUseOfProtectedMember_OK_2() async { | 1580 test_invalidUseOfProtectedMember_OK_2() async { |
| 1476 Source source = addSource(r''' | 1581 Source source = addSource(r''' |
| 1477 import 'package:meta/meta.dart'; | 1582 import 'package:meta/meta.dart'; |
| 1478 class A { | 1583 class A { |
| 1479 @protected | 1584 @protected |
| 1480 void a(){ } | 1585 void a(){ } |
| 1481 } | 1586 } |
| 1482 class B extends Object with A { | 1587 class B extends Object with A { |
| 1483 void b() => a(); | 1588 void b() => a(); |
| 1484 }'''); | 1589 }'''); |
| 1485 await assertNoErrors(source); | 1590 await computeAnalysisResult(source); |
| 1591 assertNoErrors(source); |
| 1486 verify([source]); | 1592 verify([source]); |
| 1487 } | 1593 } |
| 1488 | 1594 |
| 1489 test_invalidUseOfProtectedMember_OK_3() async { | 1595 test_invalidUseOfProtectedMember_OK_3() async { |
| 1490 Source source = addSource(r''' | 1596 Source source = addSource(r''' |
| 1491 import 'package:meta/meta.dart'; | 1597 import 'package:meta/meta.dart'; |
| 1492 class A { | 1598 class A { |
| 1493 @protected m1() {} | 1599 @protected m1() {} |
| 1494 } | 1600 } |
| 1495 class B extends A { | 1601 class B extends A { |
| 1496 static m2(A a) => a.m1(); | 1602 static m2(A a) => a.m1(); |
| 1497 }'''); | 1603 }'''); |
| 1498 await assertNoErrors(source); | 1604 await computeAnalysisResult(source); |
| 1605 assertNoErrors(source); |
| 1499 verify([source]); | 1606 verify([source]); |
| 1500 } | 1607 } |
| 1501 | 1608 |
| 1502 test_invalidUseOfProtectedMember_OK_4() async { | 1609 test_invalidUseOfProtectedMember_OK_4() async { |
| 1503 Source source = addSource(r''' | 1610 Source source = addSource(r''' |
| 1504 import 'package:meta/meta.dart'; | 1611 import 'package:meta/meta.dart'; |
| 1505 class A { | 1612 class A { |
| 1506 @protected | 1613 @protected |
| 1507 void a(){ } | 1614 void a(){ } |
| 1508 } | 1615 } |
| 1509 class B extends A { | 1616 class B extends A { |
| 1510 void a() => a(); | 1617 void a() => a(); |
| 1511 } | 1618 } |
| 1512 main() { | 1619 main() { |
| 1513 new B().a(); | 1620 new B().a(); |
| 1514 }'''); | 1621 }'''); |
| 1515 await assertNoErrors(source); | 1622 await computeAnalysisResult(source); |
| 1623 assertNoErrors(source); |
| 1516 verify([source]); | 1624 verify([source]); |
| 1517 } | 1625 } |
| 1518 | 1626 |
| 1519 test_invalidUseOfProtectedMember_OK_field() async { | 1627 test_invalidUseOfProtectedMember_OK_field() async { |
| 1520 Source source = addSource(r''' | 1628 Source source = addSource(r''' |
| 1521 import 'package:meta/meta.dart'; | 1629 import 'package:meta/meta.dart'; |
| 1522 class A { | 1630 class A { |
| 1523 @protected | 1631 @protected |
| 1524 int a = 42; | 1632 int a = 42; |
| 1525 } | 1633 } |
| 1526 class B extends A { | 1634 class B extends A { |
| 1527 int b() => a; | 1635 int b() => a; |
| 1528 } | 1636 } |
| 1529 '''); | 1637 '''); |
| 1530 await assertNoErrors(source); | 1638 await computeAnalysisResult(source); |
| 1639 assertNoErrors(source); |
| 1531 verify([source]); | 1640 verify([source]); |
| 1532 } | 1641 } |
| 1533 | 1642 |
| 1534 test_invalidUseOfProtectedMember_OK_getter() async { | 1643 test_invalidUseOfProtectedMember_OK_getter() async { |
| 1535 Source source = addSource(r''' | 1644 Source source = addSource(r''' |
| 1536 import 'package:meta/meta.dart'; | 1645 import 'package:meta/meta.dart'; |
| 1537 class A { | 1646 class A { |
| 1538 @protected | 1647 @protected |
| 1539 int get a => 42; | 1648 int get a => 42; |
| 1540 } | 1649 } |
| 1541 class B extends A { | 1650 class B extends A { |
| 1542 int b() => a; | 1651 int b() => a; |
| 1543 } | 1652 } |
| 1544 '''); | 1653 '''); |
| 1545 await assertNoErrors(source); | 1654 await computeAnalysisResult(source); |
| 1655 assertNoErrors(source); |
| 1546 verify([source]); | 1656 verify([source]); |
| 1547 } | 1657 } |
| 1548 | 1658 |
| 1549 test_invalidUseOfProtectedMember_OK_setter() async { | 1659 test_invalidUseOfProtectedMember_OK_setter() async { |
| 1550 Source source = addSource(r''' | 1660 Source source = addSource(r''' |
| 1551 import 'package:meta/meta.dart'; | 1661 import 'package:meta/meta.dart'; |
| 1552 class A { | 1662 class A { |
| 1553 @protected | 1663 @protected |
| 1554 void set a(int i) { } | 1664 void set a(int i) { } |
| 1555 } | 1665 } |
| 1556 class B extends A { | 1666 class B extends A { |
| 1557 void b(int i) { | 1667 void b(int i) { |
| 1558 a = i; | 1668 a = i; |
| 1559 } | 1669 } |
| 1560 } | 1670 } |
| 1561 '''); | 1671 '''); |
| 1562 await assertNoErrors(source); | 1672 await computeAnalysisResult(source); |
| 1673 assertNoErrors(source); |
| 1563 verify([source]); | 1674 verify([source]); |
| 1564 } | 1675 } |
| 1565 | 1676 |
| 1566 test_invalidUseOfProtectedMember_OK_setter_2() async { | 1677 test_invalidUseOfProtectedMember_OK_setter_2() async { |
| 1567 Source source = addSource(r''' | 1678 Source source = addSource(r''' |
| 1568 import 'package:meta/meta.dart'; | 1679 import 'package:meta/meta.dart'; |
| 1569 class A { | 1680 class A { |
| 1570 int _a; | 1681 int _a; |
| 1571 @protected | 1682 @protected |
| 1572 void set a(int a) { _a = a; } | 1683 void set a(int a) { _a = a; } |
| 1573 A(int a) { | 1684 A(int a) { |
| 1574 this.a = a; | 1685 this.a = a; |
| 1575 } | 1686 } |
| 1576 } | 1687 } |
| 1577 '''); | 1688 '''); |
| 1578 await assertNoErrors(source); | 1689 await computeAnalysisResult(source); |
| 1690 assertNoErrors(source); |
| 1579 verify([source]); | 1691 verify([source]); |
| 1580 } | 1692 } |
| 1581 | 1693 |
| 1582 test_invalidUseOfProtectedMember_setter() async { | 1694 test_invalidUseOfProtectedMember_setter() async { |
| 1583 Source source = addNamedSource( | 1695 Source source = addNamedSource( |
| 1584 '/lib1.dart', | 1696 '/lib1.dart', |
| 1585 r''' | 1697 r''' |
| 1586 import 'package:meta/meta.dart'; | 1698 import 'package:meta/meta.dart'; |
| 1587 class A { | 1699 class A { |
| 1588 @protected | 1700 @protected |
| 1589 void set a(int i) { } | 1701 void set a(int i) { } |
| 1590 } | 1702 } |
| 1591 '''); | 1703 '''); |
| 1592 Source source2 = addNamedSource( | 1704 Source source2 = addNamedSource( |
| 1593 '/lib2.dart', | 1705 '/lib2.dart', |
| 1594 r''' | 1706 r''' |
| 1595 import 'lib1.dart'; | 1707 import 'lib1.dart'; |
| 1596 | 1708 |
| 1597 class B{ | 1709 class B{ |
| 1598 A a; | 1710 A a; |
| 1599 b(int i) { | 1711 b(int i) { |
| 1600 a.a = i; | 1712 a.a = i; |
| 1601 } | 1713 } |
| 1602 } | 1714 } |
| 1603 '''); | 1715 '''); |
| 1604 await assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]); | 1716 await computeAnalysisResult(source); |
| 1605 await assertNoErrors(source); | 1717 await computeAnalysisResult(source2); |
| 1718 assertErrors(source2, [HintCode.INVALID_USE_OF_PROTECTED_MEMBER]); |
| 1719 assertNoErrors(source); |
| 1606 verify([source, source2]); | 1720 verify([source, source2]); |
| 1607 } | 1721 } |
| 1608 | 1722 |
| 1609 test_invalidUseOfProtectedMember_setter_OK() async { | 1723 test_invalidUseOfProtectedMember_setter_OK() async { |
| 1610 Source source = addSource(r''' | 1724 Source source = addSource(r''' |
| 1611 import 'package:meta/meta.dart'; | 1725 import 'package:meta/meta.dart'; |
| 1612 class A { | 1726 class A { |
| 1613 @protected | 1727 @protected |
| 1614 void set a(int i) { } | 1728 void set a(int i) { } |
| 1615 } | 1729 } |
| 1616 abstract class B implements A { | 1730 abstract class B implements A { |
| 1617 b(int i) { | 1731 b(int i) { |
| 1618 a = i; | 1732 a = i; |
| 1619 } | 1733 } |
| 1620 }'''); | 1734 }'''); |
| 1621 await assertNoErrors(source); | 1735 await computeAnalysisResult(source); |
| 1736 assertNoErrors(source); |
| 1622 verify([source]); | 1737 verify([source]); |
| 1623 } | 1738 } |
| 1624 | 1739 |
| 1625 test_invalidUseOfProtectedMember_topLevelVariable() async { | 1740 test_invalidUseOfProtectedMember_topLevelVariable() async { |
| 1626 Source source = addSource(r''' | 1741 Source source = addSource(r''' |
| 1627 import 'package:meta/meta.dart'; | 1742 import 'package:meta/meta.dart'; |
| 1628 @protected | 1743 @protected |
| 1629 int x = 0; | 1744 int x = 0; |
| 1630 main() { | 1745 main() { |
| 1631 print(x); | 1746 print(x); |
| 1632 }'''); | 1747 }'''); |
| 1633 // TODO(brianwilkerson) This should produce a hint because the annotation is | 1748 // TODO(brianwilkerson) This should produce a hint because the annotation is |
| 1634 // being applied to the wrong kind of declaration. | 1749 // being applied to the wrong kind of declaration. |
| 1635 await assertNoErrors(source); | 1750 await computeAnalysisResult(source); |
| 1751 assertNoErrors(source); |
| 1636 verify([source]); | 1752 verify([source]); |
| 1637 } | 1753 } |
| 1638 | 1754 |
| 1639 test_isDouble() async { | 1755 test_isDouble() async { |
| 1640 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); | 1756 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); |
| 1641 options.dart2jsHint = true; | 1757 options.dart2jsHint = true; |
| 1642 resetWithOptions(options); | 1758 resetWithOptions(options); |
| 1643 Source source = addSource("var v = 1 is double;"); | 1759 Source source = addSource("var v = 1 is double;"); |
| 1644 await assertErrors(source, [HintCode.IS_DOUBLE]); | 1760 await computeAnalysisResult(source); |
| 1761 assertErrors(source, [HintCode.IS_DOUBLE]); |
| 1645 verify([source]); | 1762 verify([source]); |
| 1646 } | 1763 } |
| 1647 | 1764 |
| 1648 @failingTest | 1765 @failingTest |
| 1649 test_isInt() async { | 1766 test_isInt() async { |
| 1650 Source source = addSource("var v = 1 is int;"); | 1767 Source source = addSource("var v = 1 is int;"); |
| 1651 await assertErrors(source, [HintCode.IS_INT]); | 1768 await computeAnalysisResult(source); |
| 1769 assertErrors(source, [HintCode.IS_INT]); |
| 1652 verify([source]); | 1770 verify([source]); |
| 1653 } | 1771 } |
| 1654 | 1772 |
| 1655 test_isNotDouble() async { | 1773 test_isNotDouble() async { |
| 1656 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); | 1774 AnalysisOptionsImpl options = new AnalysisOptionsImpl(); |
| 1657 options.dart2jsHint = true; | 1775 options.dart2jsHint = true; |
| 1658 resetWithOptions(options); | 1776 resetWithOptions(options); |
| 1659 Source source = addSource("var v = 1 is! double;"); | 1777 Source source = addSource("var v = 1 is! double;"); |
| 1660 await assertErrors(source, [HintCode.IS_NOT_DOUBLE]); | 1778 await computeAnalysisResult(source); |
| 1779 assertErrors(source, [HintCode.IS_NOT_DOUBLE]); |
| 1661 verify([source]); | 1780 verify([source]); |
| 1662 } | 1781 } |
| 1663 | 1782 |
| 1664 @failingTest | 1783 @failingTest |
| 1665 test_isNotInt() async { | 1784 test_isNotInt() async { |
| 1666 Source source = addSource("var v = 1 is! int;"); | 1785 Source source = addSource("var v = 1 is! int;"); |
| 1667 await assertErrors(source, [HintCode.IS_NOT_INT]); | 1786 await computeAnalysisResult(source); |
| 1787 assertErrors(source, [HintCode.IS_NOT_INT]); |
| 1668 verify([source]); | 1788 verify([source]); |
| 1669 } | 1789 } |
| 1670 | 1790 |
| 1671 test_js_lib_OK() async { | 1791 test_js_lib_OK() async { |
| 1672 Source source = addSource(r''' | 1792 Source source = addSource(r''' |
| 1673 @JS() | 1793 @JS() |
| 1674 library foo; | 1794 library foo; |
| 1675 | 1795 |
| 1676 import 'package:js/js.dart'; | 1796 import 'package:js/js.dart'; |
| 1677 | 1797 |
| 1678 @JS() | 1798 @JS() |
| 1679 class A { } | 1799 class A { } |
| 1680 '''); | 1800 '''); |
| 1681 await assertNoErrors(source); | 1801 await computeAnalysisResult(source); |
| 1802 assertNoErrors(source); |
| 1682 verify([source]); | 1803 verify([source]); |
| 1683 } | 1804 } |
| 1684 | 1805 |
| 1685 test_missingJsLibAnnotation_class() async { | 1806 test_missingJsLibAnnotation_class() async { |
| 1686 Source source = addSource(r''' | 1807 Source source = addSource(r''' |
| 1687 library foo; | 1808 library foo; |
| 1688 | 1809 |
| 1689 import 'package:js/js.dart'; | 1810 import 'package:js/js.dart'; |
| 1690 | 1811 |
| 1691 @JS() | 1812 @JS() |
| 1692 class A { } | 1813 class A { } |
| 1693 '''); | 1814 '''); |
| 1694 await assertErrors(source, [HintCode.MISSING_JS_LIB_ANNOTATION]); | 1815 await computeAnalysisResult(source); |
| 1816 assertErrors(source, [HintCode.MISSING_JS_LIB_ANNOTATION]); |
| 1695 verify([source]); | 1817 verify([source]); |
| 1696 } | 1818 } |
| 1697 | 1819 |
| 1698 test_missingJsLibAnnotation_externalField() async { | 1820 test_missingJsLibAnnotation_externalField() async { |
| 1699 // https://github.com/dart-lang/sdk/issues/26987 | 1821 // https://github.com/dart-lang/sdk/issues/26987 |
| 1700 Source source = addSource(r''' | 1822 Source source = addSource(r''' |
| 1701 import 'package:js/js.dart'; | 1823 import 'package:js/js.dart'; |
| 1702 | 1824 |
| 1703 @JS() | 1825 @JS() |
| 1704 external dynamic exports; | 1826 external dynamic exports; |
| 1705 '''); | 1827 '''); |
| 1706 await assertErrors(source, | 1828 await computeAnalysisResult(source); |
| 1829 assertErrors(source, |
| 1707 [ParserErrorCode.EXTERNAL_FIELD, HintCode.MISSING_JS_LIB_ANNOTATION]); | 1830 [ParserErrorCode.EXTERNAL_FIELD, HintCode.MISSING_JS_LIB_ANNOTATION]); |
| 1708 verify([source]); | 1831 verify([source]); |
| 1709 } | 1832 } |
| 1710 | 1833 |
| 1711 test_missingJsLibAnnotation_function() async { | 1834 test_missingJsLibAnnotation_function() async { |
| 1712 Source source = addSource(r''' | 1835 Source source = addSource(r''' |
| 1713 library foo; | 1836 library foo; |
| 1714 | 1837 |
| 1715 import 'package:js/js.dart'; | 1838 import 'package:js/js.dart'; |
| 1716 | 1839 |
| 1717 @JS('acxZIndex') | 1840 @JS('acxZIndex') |
| 1718 set _currentZIndex(int value) { } | 1841 set _currentZIndex(int value) { } |
| 1719 '''); | 1842 '''); |
| 1720 await assertErrors(source, [HintCode.MISSING_JS_LIB_ANNOTATION]); | 1843 await computeAnalysisResult(source); |
| 1844 assertErrors(source, [HintCode.MISSING_JS_LIB_ANNOTATION]); |
| 1721 verify([source]); | 1845 verify([source]); |
| 1722 } | 1846 } |
| 1723 | 1847 |
| 1724 test_missingJsLibAnnotation_method() async { | 1848 test_missingJsLibAnnotation_method() async { |
| 1725 Source source = addSource(r''' | 1849 Source source = addSource(r''' |
| 1726 library foo; | 1850 library foo; |
| 1727 | 1851 |
| 1728 import 'package:js/js.dart'; | 1852 import 'package:js/js.dart'; |
| 1729 | 1853 |
| 1730 class A { | 1854 class A { |
| 1731 @JS() | 1855 @JS() |
| 1732 void a() { } | 1856 void a() { } |
| 1733 } | 1857 } |
| 1734 '''); | 1858 '''); |
| 1735 await assertErrors(source, [HintCode.MISSING_JS_LIB_ANNOTATION]); | 1859 await computeAnalysisResult(source); |
| 1860 assertErrors(source, [HintCode.MISSING_JS_LIB_ANNOTATION]); |
| 1736 verify([source]); | 1861 verify([source]); |
| 1737 } | 1862 } |
| 1738 | 1863 |
| 1739 test_missingJsLibAnnotation_variable() async { | 1864 test_missingJsLibAnnotation_variable() async { |
| 1740 Source source = addSource(r''' | 1865 Source source = addSource(r''' |
| 1741 import 'package:js/js.dart'; | 1866 import 'package:js/js.dart'; |
| 1742 | 1867 |
| 1743 @JS() | 1868 @JS() |
| 1744 dynamic variable; | 1869 dynamic variable; |
| 1745 '''); | 1870 '''); |
| 1746 await assertErrors(source, [HintCode.MISSING_JS_LIB_ANNOTATION]); | 1871 await computeAnalysisResult(source); |
| 1872 assertErrors(source, [HintCode.MISSING_JS_LIB_ANNOTATION]); |
| 1747 verify([source]); | 1873 verify([source]); |
| 1748 } | 1874 } |
| 1749 | 1875 |
| 1750 test_missingReturn_async() async { | 1876 test_missingReturn_async() async { |
| 1751 Source source = addSource(''' | 1877 Source source = addSource(''' |
| 1752 import 'dart:async'; | 1878 import 'dart:async'; |
| 1753 Future<int> f() async {} | 1879 Future<int> f() async {} |
| 1754 '''); | 1880 '''); |
| 1755 await assertErrors(source, [HintCode.MISSING_RETURN]); | 1881 await computeAnalysisResult(source); |
| 1882 assertErrors(source, [HintCode.MISSING_RETURN]); |
| 1756 verify([source]); | 1883 verify([source]); |
| 1757 } | 1884 } |
| 1758 | 1885 |
| 1759 test_missingReturn_factory() async { | 1886 test_missingReturn_factory() async { |
| 1760 Source source = addSource(r''' | 1887 Source source = addSource(r''' |
| 1761 class A { | 1888 class A { |
| 1762 factory A() {} | 1889 factory A() {} |
| 1763 } | 1890 } |
| 1764 '''); | 1891 '''); |
| 1765 await assertErrors(source, [HintCode.MISSING_RETURN]); | 1892 await computeAnalysisResult(source); |
| 1893 assertErrors(source, [HintCode.MISSING_RETURN]); |
| 1766 verify([source]); | 1894 verify([source]); |
| 1767 } | 1895 } |
| 1768 | 1896 |
| 1769 test_missingReturn_function() async { | 1897 test_missingReturn_function() async { |
| 1770 Source source = addSource("int f() {}"); | 1898 Source source = addSource("int f() {}"); |
| 1771 await assertErrors(source, [HintCode.MISSING_RETURN]); | 1899 await computeAnalysisResult(source); |
| 1900 assertErrors(source, [HintCode.MISSING_RETURN]); |
| 1772 verify([source]); | 1901 verify([source]); |
| 1773 } | 1902 } |
| 1774 | 1903 |
| 1775 test_missingReturn_method() async { | 1904 test_missingReturn_method() async { |
| 1776 Source source = addSource(r''' | 1905 Source source = addSource(r''' |
| 1777 class A { | 1906 class A { |
| 1778 int m() {} | 1907 int m() {} |
| 1779 }'''); | 1908 }'''); |
| 1780 await assertErrors(source, [HintCode.MISSING_RETURN]); | 1909 await computeAnalysisResult(source); |
| 1910 assertErrors(source, [HintCode.MISSING_RETURN]); |
| 1781 verify([source]); | 1911 verify([source]); |
| 1782 } | 1912 } |
| 1783 | 1913 |
| 1784 test_mustCallSuper() async { | 1914 test_mustCallSuper() async { |
| 1785 Source source = addSource(r''' | 1915 Source source = addSource(r''' |
| 1786 import 'package:meta/meta.dart'; | 1916 import 'package:meta/meta.dart'; |
| 1787 class A { | 1917 class A { |
| 1788 @mustCallSuper | 1918 @mustCallSuper |
| 1789 void a() {} | 1919 void a() {} |
| 1790 } | 1920 } |
| 1791 class B extends A { | 1921 class B extends A { |
| 1792 @override | 1922 @override |
| 1793 void a() | 1923 void a() |
| 1794 {} | 1924 {} |
| 1795 } | 1925 } |
| 1796 '''); | 1926 '''); |
| 1797 await assertErrors(source, [HintCode.MUST_CALL_SUPER]); | 1927 await computeAnalysisResult(source); |
| 1928 assertErrors(source, [HintCode.MUST_CALL_SUPER]); |
| 1798 verify([source]); | 1929 verify([source]); |
| 1799 } | 1930 } |
| 1800 | 1931 |
| 1801 test_mustCallSuper_fromInterface() async { | 1932 test_mustCallSuper_fromInterface() async { |
| 1802 Source source = addSource(r''' | 1933 Source source = addSource(r''' |
| 1803 import 'package:meta/meta.dart'; | 1934 import 'package:meta/meta.dart'; |
| 1804 class A { | 1935 class A { |
| 1805 @mustCallSuper | 1936 @mustCallSuper |
| 1806 void a() {} | 1937 void a() {} |
| 1807 } | 1938 } |
| 1808 class C implements A { | 1939 class C implements A { |
| 1809 @override | 1940 @override |
| 1810 void a() {} | 1941 void a() {} |
| 1811 } | 1942 } |
| 1812 '''); | 1943 '''); |
| 1813 await assertErrors(source, []); | 1944 await computeAnalysisResult(source); |
| 1945 assertErrors(source, []); |
| 1814 verify([source]); | 1946 verify([source]); |
| 1815 } | 1947 } |
| 1816 | 1948 |
| 1817 test_mustCallSuper_indirect() async { | 1949 test_mustCallSuper_indirect() async { |
| 1818 Source source = addSource(r''' | 1950 Source source = addSource(r''' |
| 1819 import 'package:meta/meta.dart'; | 1951 import 'package:meta/meta.dart'; |
| 1820 class A { | 1952 class A { |
| 1821 @mustCallSuper | 1953 @mustCallSuper |
| 1822 void a() {} | 1954 void a() {} |
| 1823 } | 1955 } |
| 1824 class C extends A { | 1956 class C extends A { |
| 1825 @override | 1957 @override |
| 1826 void a() { | 1958 void a() { |
| 1827 super.a(); | 1959 super.a(); |
| 1828 } | 1960 } |
| 1829 } | 1961 } |
| 1830 class D extends C { | 1962 class D extends C { |
| 1831 @override | 1963 @override |
| 1832 void a() {} | 1964 void a() {} |
| 1833 } | 1965 } |
| 1834 '''); | 1966 '''); |
| 1835 await assertErrors(source, [HintCode.MUST_CALL_SUPER]); | 1967 await computeAnalysisResult(source); |
| 1968 assertErrors(source, [HintCode.MUST_CALL_SUPER]); |
| 1836 verify([source]); | 1969 verify([source]); |
| 1837 } | 1970 } |
| 1838 | 1971 |
| 1839 test_mustCallSuper_overridden() async { | 1972 test_mustCallSuper_overridden() async { |
| 1840 Source source = addSource(r''' | 1973 Source source = addSource(r''' |
| 1841 import 'package:meta/meta.dart'; | 1974 import 'package:meta/meta.dart'; |
| 1842 class A { | 1975 class A { |
| 1843 @mustCallSuper | 1976 @mustCallSuper |
| 1844 void a() {} | 1977 void a() {} |
| 1845 } | 1978 } |
| 1846 class C extends A { | 1979 class C extends A { |
| 1847 @override | 1980 @override |
| 1848 void a() { | 1981 void a() { |
| 1849 super.a(); //OK | 1982 super.a(); //OK |
| 1850 } | 1983 } |
| 1851 } | 1984 } |
| 1852 '''); | 1985 '''); |
| 1853 await assertErrors(source, []); | 1986 await computeAnalysisResult(source); |
| 1987 assertErrors(source, []); |
| 1854 verify([source]); | 1988 verify([source]); |
| 1855 } | 1989 } |
| 1856 | 1990 |
| 1857 test_nullAwareInCondition_assert() async { | 1991 test_nullAwareInCondition_assert() async { |
| 1858 Source source = addSource(r''' | 1992 Source source = addSource(r''' |
| 1859 m(x) { | 1993 m(x) { |
| 1860 assert (x?.a); | 1994 assert (x?.a); |
| 1861 } | 1995 } |
| 1862 '''); | 1996 '''); |
| 1863 await assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); | 1997 await computeAnalysisResult(source); |
| 1998 assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); |
| 1864 verify([source]); | 1999 verify([source]); |
| 1865 } | 2000 } |
| 1866 | 2001 |
| 1867 test_nullAwareInCondition_conditionalExpression() async { | 2002 test_nullAwareInCondition_conditionalExpression() async { |
| 1868 Source source = addSource(r''' | 2003 Source source = addSource(r''' |
| 1869 m(x) { | 2004 m(x) { |
| 1870 return x?.a ? 0 : 1; | 2005 return x?.a ? 0 : 1; |
| 1871 } | 2006 } |
| 1872 '''); | 2007 '''); |
| 1873 await assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); | 2008 await computeAnalysisResult(source); |
| 2009 assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); |
| 1874 verify([source]); | 2010 verify([source]); |
| 1875 } | 2011 } |
| 1876 | 2012 |
| 1877 test_nullAwareInCondition_do() async { | 2013 test_nullAwareInCondition_do() async { |
| 1878 Source source = addSource(r''' | 2014 Source source = addSource(r''' |
| 1879 m(x) { | 2015 m(x) { |
| 1880 do {} while (x?.a); | 2016 do {} while (x?.a); |
| 1881 } | 2017 } |
| 1882 '''); | 2018 '''); |
| 1883 await assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); | 2019 await computeAnalysisResult(source); |
| 2020 assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); |
| 1884 verify([source]); | 2021 verify([source]); |
| 1885 } | 2022 } |
| 1886 | 2023 |
| 1887 test_nullAwareInCondition_for() async { | 2024 test_nullAwareInCondition_for() async { |
| 1888 Source source = addSource(r''' | 2025 Source source = addSource(r''' |
| 1889 m(x) { | 2026 m(x) { |
| 1890 for (var v = x; v?.a; v = v.next) {} | 2027 for (var v = x; v?.a; v = v.next) {} |
| 1891 } | 2028 } |
| 1892 '''); | 2029 '''); |
| 1893 await assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); | 2030 await computeAnalysisResult(source); |
| 2031 assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); |
| 1894 verify([source]); | 2032 verify([source]); |
| 1895 } | 2033 } |
| 1896 | 2034 |
| 1897 test_nullAwareInCondition_if() async { | 2035 test_nullAwareInCondition_if() async { |
| 1898 Source source = addSource(r''' | 2036 Source source = addSource(r''' |
| 1899 m(x) { | 2037 m(x) { |
| 1900 if (x?.a) {} | 2038 if (x?.a) {} |
| 1901 } | 2039 } |
| 1902 '''); | 2040 '''); |
| 1903 await assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); | 2041 await computeAnalysisResult(source); |
| 2042 assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); |
| 1904 verify([source]); | 2043 verify([source]); |
| 1905 } | 2044 } |
| 1906 | 2045 |
| 1907 test_nullAwareInCondition_if_conditionalAnd_first() async { | 2046 test_nullAwareInCondition_if_conditionalAnd_first() async { |
| 1908 Source source = addSource(r''' | 2047 Source source = addSource(r''' |
| 1909 m(x) { | 2048 m(x) { |
| 1910 if (x?.a && x.b) {} | 2049 if (x?.a && x.b) {} |
| 1911 } | 2050 } |
| 1912 '''); | 2051 '''); |
| 1913 await assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); | 2052 await computeAnalysisResult(source); |
| 2053 assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); |
| 1914 verify([source]); | 2054 verify([source]); |
| 1915 } | 2055 } |
| 1916 | 2056 |
| 1917 test_nullAwareInCondition_if_conditionalAnd_second() async { | 2057 test_nullAwareInCondition_if_conditionalAnd_second() async { |
| 1918 Source source = addSource(r''' | 2058 Source source = addSource(r''' |
| 1919 m(x) { | 2059 m(x) { |
| 1920 if (x.a && x?.b) {} | 2060 if (x.a && x?.b) {} |
| 1921 } | 2061 } |
| 1922 '''); | 2062 '''); |
| 1923 await assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); | 2063 await computeAnalysisResult(source); |
| 2064 assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); |
| 1924 verify([source]); | 2065 verify([source]); |
| 1925 } | 2066 } |
| 1926 | 2067 |
| 1927 test_nullAwareInCondition_if_conditionalAnd_third() async { | 2068 test_nullAwareInCondition_if_conditionalAnd_third() async { |
| 1928 Source source = addSource(r''' | 2069 Source source = addSource(r''' |
| 1929 m(x) { | 2070 m(x) { |
| 1930 if (x.a && x.b && x?.c) {} | 2071 if (x.a && x.b && x?.c) {} |
| 1931 } | 2072 } |
| 1932 '''); | 2073 '''); |
| 1933 await assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); | 2074 await computeAnalysisResult(source); |
| 2075 assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); |
| 1934 verify([source]); | 2076 verify([source]); |
| 1935 } | 2077 } |
| 1936 | 2078 |
| 1937 test_nullAwareInCondition_if_conditionalOr_first() async { | 2079 test_nullAwareInCondition_if_conditionalOr_first() async { |
| 1938 Source source = addSource(r''' | 2080 Source source = addSource(r''' |
| 1939 m(x) { | 2081 m(x) { |
| 1940 if (x?.a || x.b) {} | 2082 if (x?.a || x.b) {} |
| 1941 } | 2083 } |
| 1942 '''); | 2084 '''); |
| 1943 await assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); | 2085 await computeAnalysisResult(source); |
| 2086 assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); |
| 1944 verify([source]); | 2087 verify([source]); |
| 1945 } | 2088 } |
| 1946 | 2089 |
| 1947 test_nullAwareInCondition_if_conditionalOr_second() async { | 2090 test_nullAwareInCondition_if_conditionalOr_second() async { |
| 1948 Source source = addSource(r''' | 2091 Source source = addSource(r''' |
| 1949 m(x) { | 2092 m(x) { |
| 1950 if (x.a || x?.b) {} | 2093 if (x.a || x?.b) {} |
| 1951 } | 2094 } |
| 1952 '''); | 2095 '''); |
| 1953 await assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); | 2096 await computeAnalysisResult(source); |
| 2097 assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); |
| 1954 verify([source]); | 2098 verify([source]); |
| 1955 } | 2099 } |
| 1956 | 2100 |
| 1957 test_nullAwareInCondition_if_conditionalOr_third() async { | 2101 test_nullAwareInCondition_if_conditionalOr_third() async { |
| 1958 Source source = addSource(r''' | 2102 Source source = addSource(r''' |
| 1959 m(x) { | 2103 m(x) { |
| 1960 if (x.a || x.b || x?.c) {} | 2104 if (x.a || x.b || x?.c) {} |
| 1961 } | 2105 } |
| 1962 '''); | 2106 '''); |
| 1963 await assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); | 2107 await computeAnalysisResult(source); |
| 2108 assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); |
| 1964 verify([source]); | 2109 verify([source]); |
| 1965 } | 2110 } |
| 1966 | 2111 |
| 1967 test_nullAwareInCondition_if_not() async { | 2112 test_nullAwareInCondition_if_not() async { |
| 1968 Source source = addSource(r''' | 2113 Source source = addSource(r''' |
| 1969 m(x) { | 2114 m(x) { |
| 1970 if (!x?.a) {} | 2115 if (!x?.a) {} |
| 1971 } | 2116 } |
| 1972 '''); | 2117 '''); |
| 1973 await assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); | 2118 await computeAnalysisResult(source); |
| 2119 assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); |
| 1974 verify([source]); | 2120 verify([source]); |
| 1975 } | 2121 } |
| 1976 | 2122 |
| 1977 test_nullAwareInCondition_if_parenthesized() async { | 2123 test_nullAwareInCondition_if_parenthesized() async { |
| 1978 Source source = addSource(r''' | 2124 Source source = addSource(r''' |
| 1979 m(x) { | 2125 m(x) { |
| 1980 if ((x?.a)) {} | 2126 if ((x?.a)) {} |
| 1981 } | 2127 } |
| 1982 '''); | 2128 '''); |
| 1983 await assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); | 2129 await computeAnalysisResult(source); |
| 2130 assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); |
| 1984 verify([source]); | 2131 verify([source]); |
| 1985 } | 2132 } |
| 1986 | 2133 |
| 1987 test_nullAwareInCondition_while() async { | 2134 test_nullAwareInCondition_while() async { |
| 1988 Source source = addSource(r''' | 2135 Source source = addSource(r''' |
| 1989 m(x) { | 2136 m(x) { |
| 1990 while (x?.a) {} | 2137 while (x?.a) {} |
| 1991 } | 2138 } |
| 1992 '''); | 2139 '''); |
| 1993 await assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); | 2140 await computeAnalysisResult(source); |
| 2141 assertErrors(source, [HintCode.NULL_AWARE_IN_CONDITION]); |
| 1994 verify([source]); | 2142 verify([source]); |
| 1995 } | 2143 } |
| 1996 | 2144 |
| 1997 @failingTest | 2145 @failingTest |
| 1998 test_overrideEqualsButNotHashCode() async { | 2146 test_overrideEqualsButNotHashCode() async { |
| 1999 Source source = addSource(r''' | 2147 Source source = addSource(r''' |
| 2000 class A { | 2148 class A { |
| 2001 bool operator ==(x) {} | 2149 bool operator ==(x) {} |
| 2002 }'''); | 2150 }'''); |
| 2003 await assertErrors(source, [HintCode.OVERRIDE_EQUALS_BUT_NOT_HASH_CODE]); | 2151 await computeAnalysisResult(source); |
| 2152 assertErrors(source, [HintCode.OVERRIDE_EQUALS_BUT_NOT_HASH_CODE]); |
| 2004 verify([source]); | 2153 verify([source]); |
| 2005 } | 2154 } |
| 2006 | 2155 |
| 2007 test_overrideOnNonOverridingField_invalid() async { | 2156 test_overrideOnNonOverridingField_invalid() async { |
| 2008 Source source = addSource(r''' | 2157 Source source = addSource(r''' |
| 2009 class A { | 2158 class A { |
| 2010 } | 2159 } |
| 2011 class B extends A { | 2160 class B extends A { |
| 2012 @override | 2161 @override |
| 2013 final int m = 1; | 2162 final int m = 1; |
| 2014 }'''); | 2163 }'''); |
| 2015 await assertErrors(source, [HintCode.OVERRIDE_ON_NON_OVERRIDING_FIELD]); | 2164 await computeAnalysisResult(source); |
| 2165 assertErrors(source, [HintCode.OVERRIDE_ON_NON_OVERRIDING_FIELD]); |
| 2016 verify([source]); | 2166 verify([source]); |
| 2017 } | 2167 } |
| 2018 | 2168 |
| 2019 test_overrideOnNonOverridingGetter_invalid() async { | 2169 test_overrideOnNonOverridingGetter_invalid() async { |
| 2020 Source source = addSource(r''' | 2170 Source source = addSource(r''' |
| 2021 class A { | 2171 class A { |
| 2022 } | 2172 } |
| 2023 class B extends A { | 2173 class B extends A { |
| 2024 @override | 2174 @override |
| 2025 int get m => 1; | 2175 int get m => 1; |
| 2026 }'''); | 2176 }'''); |
| 2027 await assertErrors(source, [HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER]); | 2177 await computeAnalysisResult(source); |
| 2178 assertErrors(source, [HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER]); |
| 2028 verify([source]); | 2179 verify([source]); |
| 2029 } | 2180 } |
| 2030 | 2181 |
| 2031 test_overrideOnNonOverridingMethod_invalid() async { | 2182 test_overrideOnNonOverridingMethod_invalid() async { |
| 2032 Source source = addSource(r''' | 2183 Source source = addSource(r''' |
| 2033 class A { | 2184 class A { |
| 2034 } | 2185 } |
| 2035 class B extends A { | 2186 class B extends A { |
| 2036 @override | 2187 @override |
| 2037 int m() => 1; | 2188 int m() => 1; |
| 2038 }'''); | 2189 }'''); |
| 2039 await assertErrors(source, [HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD]); | 2190 await computeAnalysisResult(source); |
| 2191 assertErrors(source, [HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD]); |
| 2040 verify([source]); | 2192 verify([source]); |
| 2041 } | 2193 } |
| 2042 | 2194 |
| 2043 test_overrideOnNonOverridingSetter_invalid() async { | 2195 test_overrideOnNonOverridingSetter_invalid() async { |
| 2044 Source source = addSource(r''' | 2196 Source source = addSource(r''' |
| 2045 class A { | 2197 class A { |
| 2046 } | 2198 } |
| 2047 class B extends A { | 2199 class B extends A { |
| 2048 @override | 2200 @override |
| 2049 set m(int x) {} | 2201 set m(int x) {} |
| 2050 }'''); | 2202 }'''); |
| 2051 await assertErrors(source, [HintCode.OVERRIDE_ON_NON_OVERRIDING_SETTER]); | 2203 await computeAnalysisResult(source); |
| 2204 assertErrors(source, [HintCode.OVERRIDE_ON_NON_OVERRIDING_SETTER]); |
| 2052 verify([source]); | 2205 verify([source]); |
| 2053 } | 2206 } |
| 2054 | 2207 |
| 2055 test_required_constructor_param() async { | 2208 test_required_constructor_param() async { |
| 2056 Source source = addSource(r''' | 2209 Source source = addSource(r''' |
| 2057 import 'package:meta/meta.dart'; | 2210 import 'package:meta/meta.dart'; |
| 2058 | 2211 |
| 2059 class C { | 2212 class C { |
| 2060 C({@Required('must specify an `a`') int a}) {} | 2213 C({@Required('must specify an `a`') int a}) {} |
| 2061 } | 2214 } |
| 2062 | 2215 |
| 2063 main() { | 2216 main() { |
| 2064 new C(); | 2217 new C(); |
| 2065 } | 2218 } |
| 2066 '''); | 2219 '''); |
| 2067 await assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS]); | 2220 await computeAnalysisResult(source); |
| 2221 assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS]); |
| 2068 verify([source]); | 2222 verify([source]); |
| 2069 } | 2223 } |
| 2070 | 2224 |
| 2071 test_required_constructor_param_no_reason() async { | 2225 test_required_constructor_param_no_reason() async { |
| 2072 Source source = addSource(r''' | 2226 Source source = addSource(r''' |
| 2073 import 'package:meta/meta.dart'; | 2227 import 'package:meta/meta.dart'; |
| 2074 | 2228 |
| 2075 class C { | 2229 class C { |
| 2076 C({@required int a}) {} | 2230 C({@required int a}) {} |
| 2077 } | 2231 } |
| 2078 | 2232 |
| 2079 main() { | 2233 main() { |
| 2080 new C(); | 2234 new C(); |
| 2081 } | 2235 } |
| 2082 '''); | 2236 '''); |
| 2083 await assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM]); | 2237 await computeAnalysisResult(source); |
| 2238 assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM]); |
| 2084 verify([source]); | 2239 verify([source]); |
| 2085 } | 2240 } |
| 2086 | 2241 |
| 2087 test_required_constructor_param_null_reason() async { | 2242 test_required_constructor_param_null_reason() async { |
| 2088 Source source = addSource(r''' | 2243 Source source = addSource(r''' |
| 2089 import 'package:meta/meta.dart'; | 2244 import 'package:meta/meta.dart'; |
| 2090 | 2245 |
| 2091 class C { | 2246 class C { |
| 2092 C({@Required(null) int a}) {} | 2247 C({@Required(null) int a}) {} |
| 2093 } | 2248 } |
| 2094 | 2249 |
| 2095 main() { | 2250 main() { |
| 2096 new C(); | 2251 new C(); |
| 2097 } | 2252 } |
| 2098 '''); | 2253 '''); |
| 2099 await assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM]); | 2254 await computeAnalysisResult(source); |
| 2255 assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM]); |
| 2100 verify([source]); | 2256 verify([source]); |
| 2101 } | 2257 } |
| 2102 | 2258 |
| 2103 test_required_constructor_param_OK() async { | 2259 test_required_constructor_param_OK() async { |
| 2104 Source source = addSource(r''' | 2260 Source source = addSource(r''' |
| 2105 import 'package:meta/meta.dart'; | 2261 import 'package:meta/meta.dart'; |
| 2106 | 2262 |
| 2107 class C { | 2263 class C { |
| 2108 C({@required int a}) {} | 2264 C({@required int a}) {} |
| 2109 } | 2265 } |
| 2110 | 2266 |
| 2111 main() { | 2267 main() { |
| 2112 new C(a: 2); | 2268 new C(a: 2); |
| 2113 } | 2269 } |
| 2114 '''); | 2270 '''); |
| 2115 await assertNoErrors(source); | 2271 await computeAnalysisResult(source); |
| 2272 assertNoErrors(source); |
| 2116 verify([source]); | 2273 verify([source]); |
| 2117 } | 2274 } |
| 2118 | 2275 |
| 2119 test_required_constructor_param_redirecting_cons_call() async { | 2276 test_required_constructor_param_redirecting_cons_call() async { |
| 2120 Source source = addSource(r''' | 2277 Source source = addSource(r''' |
| 2121 import 'package:meta/meta.dart'; | 2278 import 'package:meta/meta.dart'; |
| 2122 | 2279 |
| 2123 class C { | 2280 class C { |
| 2124 C({@required int x}); | 2281 C({@required int x}); |
| 2125 C.named() : this(); | 2282 C.named() : this(); |
| 2126 } | 2283 } |
| 2127 '''); | 2284 '''); |
| 2128 await assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM]); | 2285 await computeAnalysisResult(source); |
| 2286 assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM]); |
| 2129 verify([source]); | 2287 verify([source]); |
| 2130 } | 2288 } |
| 2131 | 2289 |
| 2132 test_required_constructor_param_super_call() async { | 2290 test_required_constructor_param_super_call() async { |
| 2133 Source source = addSource(r''' | 2291 Source source = addSource(r''' |
| 2134 import 'package:meta/meta.dart'; | 2292 import 'package:meta/meta.dart'; |
| 2135 | 2293 |
| 2136 class C { | 2294 class C { |
| 2137 C({@Required('must specify an `a`') int a}) {} | 2295 C({@Required('must specify an `a`') int a}) {} |
| 2138 } | 2296 } |
| 2139 | 2297 |
| 2140 class D extends C { | 2298 class D extends C { |
| 2141 D() : super(); | 2299 D() : super(); |
| 2142 } | 2300 } |
| 2143 '''); | 2301 '''); |
| 2144 await assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS]); | 2302 await computeAnalysisResult(source); |
| 2303 assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS]); |
| 2145 verify([source]); | 2304 verify([source]); |
| 2146 } | 2305 } |
| 2147 | 2306 |
| 2148 test_required_function_param() async { | 2307 test_required_function_param() async { |
| 2149 Source source = addSource(r''' | 2308 Source source = addSource(r''' |
| 2150 import 'package:meta/meta.dart'; | 2309 import 'package:meta/meta.dart'; |
| 2151 | 2310 |
| 2152 void f({@Required('must specify an `a`') int a}) {} | 2311 void f({@Required('must specify an `a`') int a}) {} |
| 2153 | 2312 |
| 2154 main() { | 2313 main() { |
| 2155 f(); | 2314 f(); |
| 2156 } | 2315 } |
| 2157 '''); | 2316 '''); |
| 2158 await assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS]); | 2317 await computeAnalysisResult(source); |
| 2318 assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS]); |
| 2159 verify([source]); | 2319 verify([source]); |
| 2160 } | 2320 } |
| 2161 | 2321 |
| 2162 test_required_method_param() async { | 2322 test_required_method_param() async { |
| 2163 Source source = addSource(r''' | 2323 Source source = addSource(r''' |
| 2164 import 'package:meta/meta.dart'; | 2324 import 'package:meta/meta.dart'; |
| 2165 class A { | 2325 class A { |
| 2166 void m({@Required('must specify an `a`') int a}) {} | 2326 void m({@Required('must specify an `a`') int a}) {} |
| 2167 } | 2327 } |
| 2168 f() { | 2328 f() { |
| 2169 new A().m(); | 2329 new A().m(); |
| 2170 } | 2330 } |
| 2171 '''); | 2331 '''); |
| 2172 await assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS]); | 2332 await computeAnalysisResult(source); |
| 2333 assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS]); |
| 2173 verify([source]); | 2334 verify([source]); |
| 2174 } | 2335 } |
| 2175 | 2336 |
| 2176 test_required_method_param_in_other_lib() async { | 2337 test_required_method_param_in_other_lib() async { |
| 2177 addNamedSource( | 2338 addNamedSource( |
| 2178 '/a_lib.dart', | 2339 '/a_lib.dart', |
| 2179 r''' | 2340 r''' |
| 2180 library a_lib; | 2341 library a_lib; |
| 2181 import 'package:meta/meta.dart'; | 2342 import 'package:meta/meta.dart'; |
| 2182 class A { | 2343 class A { |
| 2183 void m({@Required('must specify an `a`') int a}) {} | 2344 void m({@Required('must specify an `a`') int a}) {} |
| 2184 } | 2345 } |
| 2185 '''); | 2346 '''); |
| 2186 | 2347 |
| 2187 Source source = addSource(r''' | 2348 Source source = addSource(r''' |
| 2188 import "a_lib.dart"; | 2349 import "a_lib.dart"; |
| 2189 f() { | 2350 f() { |
| 2190 new A().m(); | 2351 new A().m(); |
| 2191 } | 2352 } |
| 2192 '''); | 2353 '''); |
| 2193 | 2354 |
| 2194 await assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS]); | 2355 await computeAnalysisResult(source); |
| 2356 assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM_WITH_DETAILS]); |
| 2195 verify([source]); | 2357 verify([source]); |
| 2196 } | 2358 } |
| 2197 | 2359 |
| 2198 test_required_typedef_function_param() async { | 2360 test_required_typedef_function_param() async { |
| 2199 Source source = addSource(r''' | 2361 Source source = addSource(r''' |
| 2200 import 'package:meta/meta.dart'; | 2362 import 'package:meta/meta.dart'; |
| 2201 | 2363 |
| 2202 String test(C c) => c.m()(); | 2364 String test(C c) => c.m()(); |
| 2203 | 2365 |
| 2204 typedef String F({@required String x}); | 2366 typedef String F({@required String x}); |
| 2205 | 2367 |
| 2206 class C { | 2368 class C { |
| 2207 F m() => ({@required String x}) => null; | 2369 F m() => ({@required String x}) => null; |
| 2208 } | 2370 } |
| 2209 '''); | 2371 '''); |
| 2210 await assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM]); | 2372 await computeAnalysisResult(source); |
| 2373 assertErrors(source, [HintCode.MISSING_REQUIRED_PARAM]); |
| 2211 verify([source]); | 2374 verify([source]); |
| 2212 } | 2375 } |
| 2213 | 2376 |
| 2214 test_typeCheck_type_is_Null() async { | 2377 test_typeCheck_type_is_Null() async { |
| 2215 Source source = addSource(r''' | 2378 Source source = addSource(r''' |
| 2216 m(i) { | 2379 m(i) { |
| 2217 bool b = i is Null; | 2380 bool b = i is Null; |
| 2218 }'''); | 2381 }'''); |
| 2219 await assertErrors(source, [HintCode.TYPE_CHECK_IS_NULL]); | 2382 await computeAnalysisResult(source); |
| 2383 assertErrors(source, [HintCode.TYPE_CHECK_IS_NULL]); |
| 2220 verify([source]); | 2384 verify([source]); |
| 2221 } | 2385 } |
| 2222 | 2386 |
| 2223 test_typeCheck_type_not_Null() async { | 2387 test_typeCheck_type_not_Null() async { |
| 2224 Source source = addSource(r''' | 2388 Source source = addSource(r''' |
| 2225 m(i) { | 2389 m(i) { |
| 2226 bool b = i is! Null; | 2390 bool b = i is! Null; |
| 2227 }'''); | 2391 }'''); |
| 2228 await assertErrors(source, [HintCode.TYPE_CHECK_IS_NOT_NULL]); | 2392 await computeAnalysisResult(source); |
| 2393 assertErrors(source, [HintCode.TYPE_CHECK_IS_NOT_NULL]); |
| 2229 verify([source]); | 2394 verify([source]); |
| 2230 } | 2395 } |
| 2231 | 2396 |
| 2232 test_undefinedGetter() async { | 2397 test_undefinedGetter() async { |
| 2233 Source source = addSource(r''' | 2398 Source source = addSource(r''' |
| 2234 class A {} | 2399 class A {} |
| 2235 f(var a) { | 2400 f(var a) { |
| 2236 if(a is A) { | 2401 if(a is A) { |
| 2237 return a.m; | 2402 return a.m; |
| 2238 } | 2403 } |
| 2239 }'''); | 2404 }'''); |
| 2240 await assertErrors(source, [HintCode.UNDEFINED_GETTER]); | 2405 await computeAnalysisResult(source); |
| 2406 assertErrors(source, [HintCode.UNDEFINED_GETTER]); |
| 2241 } | 2407 } |
| 2242 | 2408 |
| 2243 test_undefinedGetter_message() async { | 2409 test_undefinedGetter_message() async { |
| 2244 // The implementation of HintCode.UNDEFINED_SETTER assumes that | 2410 // The implementation of HintCode.UNDEFINED_SETTER assumes that |
| 2245 // UNDEFINED_SETTER in StaticTypeWarningCode and StaticWarningCode are the | 2411 // UNDEFINED_SETTER in StaticTypeWarningCode and StaticWarningCode are the |
| 2246 // same, this verifies that assumption. | 2412 // same, this verifies that assumption. |
| 2247 expect(StaticWarningCode.UNDEFINED_GETTER.message, | 2413 expect(StaticWarningCode.UNDEFINED_GETTER.message, |
| 2248 StaticTypeWarningCode.UNDEFINED_GETTER.message); | 2414 StaticTypeWarningCode.UNDEFINED_GETTER.message); |
| 2249 } | 2415 } |
| 2250 | 2416 |
| 2251 test_undefinedIdentifier_exportHide() async { | 2417 test_undefinedIdentifier_exportHide() async { |
| 2252 Source source = addSource(r''' | 2418 Source source = addSource(r''' |
| 2253 library L; | 2419 library L; |
| 2254 export 'lib1.dart' hide a;'''); | 2420 export 'lib1.dart' hide a;'''); |
| 2255 addNamedSource("/lib1.dart", "library lib1;"); | 2421 addNamedSource("/lib1.dart", "library lib1;"); |
| 2256 await assertErrors(source, [HintCode.UNDEFINED_HIDDEN_NAME]); | 2422 await computeAnalysisResult(source); |
| 2423 assertErrors(source, [HintCode.UNDEFINED_HIDDEN_NAME]); |
| 2257 verify([source]); | 2424 verify([source]); |
| 2258 } | 2425 } |
| 2259 | 2426 |
| 2260 test_undefinedIdentifier_exportShow() async { | 2427 test_undefinedIdentifier_exportShow() async { |
| 2261 Source source = addSource(r''' | 2428 Source source = addSource(r''' |
| 2262 library L; | 2429 library L; |
| 2263 export 'lib1.dart' show a;'''); | 2430 export 'lib1.dart' show a;'''); |
| 2264 addNamedSource("/lib1.dart", "library lib1;"); | 2431 addNamedSource("/lib1.dart", "library lib1;"); |
| 2265 await assertErrors(source, [HintCode.UNDEFINED_SHOWN_NAME]); | 2432 await computeAnalysisResult(source); |
| 2433 assertErrors(source, [HintCode.UNDEFINED_SHOWN_NAME]); |
| 2266 verify([source]); | 2434 verify([source]); |
| 2267 } | 2435 } |
| 2268 | 2436 |
| 2269 test_undefinedIdentifier_importHide() async { | 2437 test_undefinedIdentifier_importHide() async { |
| 2270 Source source = addSource(r''' | 2438 Source source = addSource(r''' |
| 2271 library L; | 2439 library L; |
| 2272 import 'lib1.dart' hide a;'''); | 2440 import 'lib1.dart' hide a;'''); |
| 2273 addNamedSource("/lib1.dart", "library lib1;"); | 2441 addNamedSource("/lib1.dart", "library lib1;"); |
| 2274 await assertErrors( | 2442 await computeAnalysisResult(source); |
| 2443 assertErrors( |
| 2275 source, [HintCode.UNUSED_IMPORT, HintCode.UNDEFINED_HIDDEN_NAME]); | 2444 source, [HintCode.UNUSED_IMPORT, HintCode.UNDEFINED_HIDDEN_NAME]); |
| 2276 verify([source]); | 2445 verify([source]); |
| 2277 } | 2446 } |
| 2278 | 2447 |
| 2279 test_undefinedIdentifier_importShow() async { | 2448 test_undefinedIdentifier_importShow() async { |
| 2280 Source source = addSource(r''' | 2449 Source source = addSource(r''' |
| 2281 library L; | 2450 library L; |
| 2282 import 'lib1.dart' show a;'''); | 2451 import 'lib1.dart' show a;'''); |
| 2283 addNamedSource("/lib1.dart", "library lib1;"); | 2452 addNamedSource("/lib1.dart", "library lib1;"); |
| 2284 await assertErrors( | 2453 await computeAnalysisResult(source); |
| 2454 assertErrors( |
| 2285 source, [HintCode.UNUSED_IMPORT, HintCode.UNDEFINED_SHOWN_NAME]); | 2455 source, [HintCode.UNUSED_IMPORT, HintCode.UNDEFINED_SHOWN_NAME]); |
| 2286 verify([source]); | 2456 verify([source]); |
| 2287 } | 2457 } |
| 2288 | 2458 |
| 2289 test_undefinedMethod() async { | 2459 test_undefinedMethod() async { |
| 2290 Source source = addSource(r''' | 2460 Source source = addSource(r''' |
| 2291 f() { | 2461 f() { |
| 2292 var a = 'str'; | 2462 var a = 'str'; |
| 2293 a.notAMethodOnString(); | 2463 a.notAMethodOnString(); |
| 2294 }'''); | 2464 }'''); |
| 2295 await assertErrors(source, [HintCode.UNDEFINED_METHOD]); | 2465 await computeAnalysisResult(source); |
| 2466 assertErrors(source, [HintCode.UNDEFINED_METHOD]); |
| 2296 } | 2467 } |
| 2297 | 2468 |
| 2298 test_undefinedMethod_assignmentExpression() async { | 2469 test_undefinedMethod_assignmentExpression() async { |
| 2299 Source source = addSource(r''' | 2470 Source source = addSource(r''' |
| 2300 class A {} | 2471 class A {} |
| 2301 class B { | 2472 class B { |
| 2302 f(var a, var a2) { | 2473 f(var a, var a2) { |
| 2303 a = new A(); | 2474 a = new A(); |
| 2304 a2 = new A(); | 2475 a2 = new A(); |
| 2305 a += a2; | 2476 a += a2; |
| 2306 } | 2477 } |
| 2307 }'''); | 2478 }'''); |
| 2308 await assertErrors(source, [HintCode.UNDEFINED_METHOD]); | 2479 await computeAnalysisResult(source); |
| 2480 assertErrors(source, [HintCode.UNDEFINED_METHOD]); |
| 2309 } | 2481 } |
| 2310 | 2482 |
| 2311 test_undefinedOperator_binaryExpression() async { | 2483 test_undefinedOperator_binaryExpression() async { |
| 2312 Source source = addSource(r''' | 2484 Source source = addSource(r''' |
| 2313 class A {} | 2485 class A {} |
| 2314 f(var a) { | 2486 f(var a) { |
| 2315 if(a is A) { | 2487 if(a is A) { |
| 2316 a + 1; | 2488 a + 1; |
| 2317 } | 2489 } |
| 2318 }'''); | 2490 }'''); |
| 2319 await assertErrors(source, [HintCode.UNDEFINED_OPERATOR]); | 2491 await computeAnalysisResult(source); |
| 2492 assertErrors(source, [HintCode.UNDEFINED_OPERATOR]); |
| 2320 } | 2493 } |
| 2321 | 2494 |
| 2322 test_undefinedOperator_indexBoth() async { | 2495 test_undefinedOperator_indexBoth() async { |
| 2323 Source source = addSource(r''' | 2496 Source source = addSource(r''' |
| 2324 class A {} | 2497 class A {} |
| 2325 f(var a) { | 2498 f(var a) { |
| 2326 if(a is A) { | 2499 if(a is A) { |
| 2327 a[0]++; | 2500 a[0]++; |
| 2328 } | 2501 } |
| 2329 }'''); | 2502 }'''); |
| 2330 await assertErrors(source, [HintCode.UNDEFINED_OPERATOR]); | 2503 await computeAnalysisResult(source); |
| 2504 assertErrors(source, [HintCode.UNDEFINED_OPERATOR]); |
| 2331 } | 2505 } |
| 2332 | 2506 |
| 2333 test_undefinedOperator_indexGetter() async { | 2507 test_undefinedOperator_indexGetter() async { |
| 2334 Source source = addSource(r''' | 2508 Source source = addSource(r''' |
| 2335 class A {} | 2509 class A {} |
| 2336 f(var a) { | 2510 f(var a) { |
| 2337 if(a is A) { | 2511 if(a is A) { |
| 2338 a[0]; | 2512 a[0]; |
| 2339 } | 2513 } |
| 2340 }'''); | 2514 }'''); |
| 2341 await assertErrors(source, [HintCode.UNDEFINED_OPERATOR]); | 2515 await computeAnalysisResult(source); |
| 2516 assertErrors(source, [HintCode.UNDEFINED_OPERATOR]); |
| 2342 } | 2517 } |
| 2343 | 2518 |
| 2344 test_undefinedOperator_indexSetter() async { | 2519 test_undefinedOperator_indexSetter() async { |
| 2345 Source source = addSource(r''' | 2520 Source source = addSource(r''' |
| 2346 class A {} | 2521 class A {} |
| 2347 f(var a) { | 2522 f(var a) { |
| 2348 if(a is A) { | 2523 if(a is A) { |
| 2349 a[0] = 1; | 2524 a[0] = 1; |
| 2350 } | 2525 } |
| 2351 }'''); | 2526 }'''); |
| 2352 await assertErrors(source, [HintCode.UNDEFINED_OPERATOR]); | 2527 await computeAnalysisResult(source); |
| 2528 assertErrors(source, [HintCode.UNDEFINED_OPERATOR]); |
| 2353 } | 2529 } |
| 2354 | 2530 |
| 2355 test_undefinedOperator_postfixExpression() async { | 2531 test_undefinedOperator_postfixExpression() async { |
| 2356 Source source = addSource(r''' | 2532 Source source = addSource(r''' |
| 2357 class A {} | 2533 class A {} |
| 2358 f(var a) { | 2534 f(var a) { |
| 2359 if(a is A) { | 2535 if(a is A) { |
| 2360 a++; | 2536 a++; |
| 2361 } | 2537 } |
| 2362 }'''); | 2538 }'''); |
| 2363 await assertErrors(source, [HintCode.UNDEFINED_OPERATOR]); | 2539 await computeAnalysisResult(source); |
| 2540 assertErrors(source, [HintCode.UNDEFINED_OPERATOR]); |
| 2364 } | 2541 } |
| 2365 | 2542 |
| 2366 test_undefinedOperator_prefixExpression() async { | 2543 test_undefinedOperator_prefixExpression() async { |
| 2367 Source source = addSource(r''' | 2544 Source source = addSource(r''' |
| 2368 class A {} | 2545 class A {} |
| 2369 f(var a) { | 2546 f(var a) { |
| 2370 if(a is A) { | 2547 if(a is A) { |
| 2371 ++a; | 2548 ++a; |
| 2372 } | 2549 } |
| 2373 }'''); | 2550 }'''); |
| 2374 await assertErrors(source, [HintCode.UNDEFINED_OPERATOR]); | 2551 await computeAnalysisResult(source); |
| 2552 assertErrors(source, [HintCode.UNDEFINED_OPERATOR]); |
| 2375 } | 2553 } |
| 2376 | 2554 |
| 2377 test_undefinedSetter() async { | 2555 test_undefinedSetter() async { |
| 2378 Source source = addSource(r''' | 2556 Source source = addSource(r''' |
| 2379 class A {} | 2557 class A {} |
| 2380 f(var a) { | 2558 f(var a) { |
| 2381 if(a is A) { | 2559 if(a is A) { |
| 2382 a.m = 0; | 2560 a.m = 0; |
| 2383 } | 2561 } |
| 2384 }'''); | 2562 }'''); |
| 2385 await assertErrors(source, [HintCode.UNDEFINED_SETTER]); | 2563 await computeAnalysisResult(source); |
| 2564 assertErrors(source, [HintCode.UNDEFINED_SETTER]); |
| 2386 } | 2565 } |
| 2387 | 2566 |
| 2388 test_undefinedSetter_message() async { | 2567 test_undefinedSetter_message() async { |
| 2389 // The implementation of HintCode.UNDEFINED_SETTER assumes that | 2568 // The implementation of HintCode.UNDEFINED_SETTER assumes that |
| 2390 // UNDEFINED_SETTER in StaticTypeWarningCode and StaticWarningCode are the | 2569 // UNDEFINED_SETTER in StaticTypeWarningCode and StaticWarningCode are the |
| 2391 // same, this verifies that assumption. | 2570 // same, this verifies that assumption. |
| 2392 expect(StaticWarningCode.UNDEFINED_SETTER.message, | 2571 expect(StaticWarningCode.UNDEFINED_SETTER.message, |
| 2393 StaticTypeWarningCode.UNDEFINED_SETTER.message); | 2572 StaticTypeWarningCode.UNDEFINED_SETTER.message); |
| 2394 } | 2573 } |
| 2395 | 2574 |
| 2396 test_unnecessaryCast_type_supertype() async { | 2575 test_unnecessaryCast_type_supertype() async { |
| 2397 Source source = addSource(r''' | 2576 Source source = addSource(r''' |
| 2398 m(int i) { | 2577 m(int i) { |
| 2399 var b = i as Object; | 2578 var b = i as Object; |
| 2400 }'''); | 2579 }'''); |
| 2401 await assertErrors(source, [HintCode.UNNECESSARY_CAST]); | 2580 await computeAnalysisResult(source); |
| 2581 assertErrors(source, [HintCode.UNNECESSARY_CAST]); |
| 2402 verify([source]); | 2582 verify([source]); |
| 2403 } | 2583 } |
| 2404 | 2584 |
| 2405 test_unnecessaryCast_type_type() async { | 2585 test_unnecessaryCast_type_type() async { |
| 2406 Source source = addSource(r''' | 2586 Source source = addSource(r''' |
| 2407 m(num i) { | 2587 m(num i) { |
| 2408 var b = i as num; | 2588 var b = i as num; |
| 2409 }'''); | 2589 }'''); |
| 2410 await assertErrors(source, [HintCode.UNNECESSARY_CAST]); | 2590 await computeAnalysisResult(source); |
| 2591 assertErrors(source, [HintCode.UNNECESSARY_CAST]); |
| 2411 verify([source]); | 2592 verify([source]); |
| 2412 } | 2593 } |
| 2413 | 2594 |
| 2414 test_unnecessaryNoSuchMethod_blockBody() async { | 2595 test_unnecessaryNoSuchMethod_blockBody() async { |
| 2415 Source source = addSource(r''' | 2596 Source source = addSource(r''' |
| 2416 class A { | 2597 class A { |
| 2417 noSuchMethod(x) => super.noSuchMethod(x); | 2598 noSuchMethod(x) => super.noSuchMethod(x); |
| 2418 } | 2599 } |
| 2419 class B extends A { | 2600 class B extends A { |
| 2420 mmm(); | 2601 mmm(); |
| 2421 noSuchMethod(y) { | 2602 noSuchMethod(y) { |
| 2422 return super.noSuchMethod(y); | 2603 return super.noSuchMethod(y); |
| 2423 } | 2604 } |
| 2424 }'''); | 2605 }'''); |
| 2425 await assertErrors(source, [HintCode.UNNECESSARY_NO_SUCH_METHOD]); | 2606 await computeAnalysisResult(source); |
| 2607 assertErrors(source, [HintCode.UNNECESSARY_NO_SUCH_METHOD]); |
| 2426 verify([source]); | 2608 verify([source]); |
| 2427 } | 2609 } |
| 2428 | 2610 |
| 2429 test_unnecessaryNoSuchMethod_expressionBody() async { | 2611 test_unnecessaryNoSuchMethod_expressionBody() async { |
| 2430 Source source = addSource(r''' | 2612 Source source = addSource(r''' |
| 2431 class A { | 2613 class A { |
| 2432 noSuchMethod(x) => super.noSuchMethod(x); | 2614 noSuchMethod(x) => super.noSuchMethod(x); |
| 2433 } | 2615 } |
| 2434 class B extends A { | 2616 class B extends A { |
| 2435 mmm(); | 2617 mmm(); |
| 2436 noSuchMethod(y) => super.noSuchMethod(y); | 2618 noSuchMethod(y) => super.noSuchMethod(y); |
| 2437 }'''); | 2619 }'''); |
| 2438 await assertErrors(source, [HintCode.UNNECESSARY_NO_SUCH_METHOD]); | 2620 await computeAnalysisResult(source); |
| 2621 assertErrors(source, [HintCode.UNNECESSARY_NO_SUCH_METHOD]); |
| 2439 verify([source]); | 2622 verify([source]); |
| 2440 } | 2623 } |
| 2441 | 2624 |
| 2442 test_unnecessaryTypeCheck_null_is_Null() async { | 2625 test_unnecessaryTypeCheck_null_is_Null() async { |
| 2443 Source source = addSource("bool b = null is Null;"); | 2626 Source source = addSource("bool b = null is Null;"); |
| 2444 await assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_TRUE]); | 2627 await computeAnalysisResult(source); |
| 2628 assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_TRUE]); |
| 2445 verify([source]); | 2629 verify([source]); |
| 2446 } | 2630 } |
| 2447 | 2631 |
| 2448 test_unnecessaryTypeCheck_null_not_Null() async { | 2632 test_unnecessaryTypeCheck_null_not_Null() async { |
| 2449 Source source = addSource("bool b = null is! Null;"); | 2633 Source source = addSource("bool b = null is! Null;"); |
| 2450 await assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_FALSE]); | 2634 await computeAnalysisResult(source); |
| 2635 assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_FALSE]); |
| 2451 verify([source]); | 2636 verify([source]); |
| 2452 } | 2637 } |
| 2453 | 2638 |
| 2454 test_unnecessaryTypeCheck_type_is_dynamic() async { | 2639 test_unnecessaryTypeCheck_type_is_dynamic() async { |
| 2455 Source source = addSource(r''' | 2640 Source source = addSource(r''' |
| 2456 m(i) { | 2641 m(i) { |
| 2457 bool b = i is dynamic; | 2642 bool b = i is dynamic; |
| 2458 }'''); | 2643 }'''); |
| 2459 await assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_TRUE]); | 2644 await computeAnalysisResult(source); |
| 2645 assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_TRUE]); |
| 2460 verify([source]); | 2646 verify([source]); |
| 2461 } | 2647 } |
| 2462 | 2648 |
| 2463 test_unnecessaryTypeCheck_type_is_object() async { | 2649 test_unnecessaryTypeCheck_type_is_object() async { |
| 2464 Source source = addSource(r''' | 2650 Source source = addSource(r''' |
| 2465 m(i) { | 2651 m(i) { |
| 2466 bool b = i is Object; | 2652 bool b = i is Object; |
| 2467 }'''); | 2653 }'''); |
| 2468 await assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_TRUE]); | 2654 await computeAnalysisResult(source); |
| 2655 assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_TRUE]); |
| 2469 verify([source]); | 2656 verify([source]); |
| 2470 } | 2657 } |
| 2471 | 2658 |
| 2472 test_unnecessaryTypeCheck_type_not_dynamic() async { | 2659 test_unnecessaryTypeCheck_type_not_dynamic() async { |
| 2473 Source source = addSource(r''' | 2660 Source source = addSource(r''' |
| 2474 m(i) { | 2661 m(i) { |
| 2475 bool b = i is! dynamic; | 2662 bool b = i is! dynamic; |
| 2476 }'''); | 2663 }'''); |
| 2477 await assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_FALSE]); | 2664 await computeAnalysisResult(source); |
| 2665 assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_FALSE]); |
| 2478 verify([source]); | 2666 verify([source]); |
| 2479 } | 2667 } |
| 2480 | 2668 |
| 2481 test_unnecessaryTypeCheck_type_not_object() async { | 2669 test_unnecessaryTypeCheck_type_not_object() async { |
| 2482 Source source = addSource(r''' | 2670 Source source = addSource(r''' |
| 2483 m(i) { | 2671 m(i) { |
| 2484 bool b = i is! Object; | 2672 bool b = i is! Object; |
| 2485 }'''); | 2673 }'''); |
| 2486 await assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_FALSE]); | 2674 await computeAnalysisResult(source); |
| 2675 assertErrors(source, [HintCode.UNNECESSARY_TYPE_CHECK_FALSE]); |
| 2487 verify([source]); | 2676 verify([source]); |
| 2488 } | 2677 } |
| 2489 | 2678 |
| 2490 test_unusedElement_class_isUsed_extends() async { | 2679 test_unusedElement_class_isUsed_extends() async { |
| 2491 enableUnusedElement = true; | 2680 enableUnusedElement = true; |
| 2492 Source source = addSource(r''' | 2681 Source source = addSource(r''' |
| 2493 class _A {} | 2682 class _A {} |
| 2494 class B extends _A {} | 2683 class B extends _A {} |
| 2495 '''); | 2684 '''); |
| 2496 await assertNoErrors(source); | 2685 await computeAnalysisResult(source); |
| 2686 assertNoErrors(source); |
| 2497 verify([source]); | 2687 verify([source]); |
| 2498 } | 2688 } |
| 2499 | 2689 |
| 2500 test_unusedElement_class_isUsed_fieldDeclaration() async { | 2690 test_unusedElement_class_isUsed_fieldDeclaration() async { |
| 2501 enableUnusedElement = true; | 2691 enableUnusedElement = true; |
| 2502 var src = r''' | 2692 var src = r''' |
| 2503 class Foo { | 2693 class Foo { |
| 2504 _Bar x; | 2694 _Bar x; |
| 2505 } | 2695 } |
| 2506 | 2696 |
| 2507 class _Bar { | 2697 class _Bar { |
| 2508 } | 2698 } |
| 2509 '''; | 2699 '''; |
| 2510 Source source = addSource(src); | 2700 Source source = addSource(src); |
| 2511 await assertNoErrors(source); | 2701 await computeAnalysisResult(source); |
| 2702 assertNoErrors(source); |
| 2512 verify([source]); | 2703 verify([source]); |
| 2513 } | 2704 } |
| 2514 | 2705 |
| 2515 test_unusedElement_class_isUsed_implements() async { | 2706 test_unusedElement_class_isUsed_implements() async { |
| 2516 enableUnusedElement = true; | 2707 enableUnusedElement = true; |
| 2517 Source source = addSource(r''' | 2708 Source source = addSource(r''' |
| 2518 class _A {} | 2709 class _A {} |
| 2519 class B implements _A {} | 2710 class B implements _A {} |
| 2520 '''); | 2711 '''); |
| 2521 await assertNoErrors(source); | 2712 await computeAnalysisResult(source); |
| 2713 assertNoErrors(source); |
| 2522 verify([source]); | 2714 verify([source]); |
| 2523 } | 2715 } |
| 2524 | 2716 |
| 2525 test_unusedElement_class_isUsed_instanceCreation() async { | 2717 test_unusedElement_class_isUsed_instanceCreation() async { |
| 2526 enableUnusedElement = true; | 2718 enableUnusedElement = true; |
| 2527 Source source = addSource(r''' | 2719 Source source = addSource(r''' |
| 2528 class _A {} | 2720 class _A {} |
| 2529 main() { | 2721 main() { |
| 2530 new _A(); | 2722 new _A(); |
| 2531 }'''); | 2723 }'''); |
| 2532 await assertNoErrors(source); | 2724 await computeAnalysisResult(source); |
| 2725 assertNoErrors(source); |
| 2533 verify([source]); | 2726 verify([source]); |
| 2534 } | 2727 } |
| 2535 | 2728 |
| 2536 test_unusedElement_class_isUsed_staticFieldAccess() async { | 2729 test_unusedElement_class_isUsed_staticFieldAccess() async { |
| 2537 enableUnusedElement = true; | 2730 enableUnusedElement = true; |
| 2538 Source source = addSource(r''' | 2731 Source source = addSource(r''' |
| 2539 class _A { | 2732 class _A { |
| 2540 static const F = 42; | 2733 static const F = 42; |
| 2541 } | 2734 } |
| 2542 main() { | 2735 main() { |
| 2543 _A.F; | 2736 _A.F; |
| 2544 }'''); | 2737 }'''); |
| 2545 await assertNoErrors(source); | 2738 await computeAnalysisResult(source); |
| 2739 assertNoErrors(source); |
| 2546 verify([source]); | 2740 verify([source]); |
| 2547 } | 2741 } |
| 2548 | 2742 |
| 2549 test_unusedElement_class_isUsed_staticMethodInvocation() async { | 2743 test_unusedElement_class_isUsed_staticMethodInvocation() async { |
| 2550 enableUnusedElement = true; | 2744 enableUnusedElement = true; |
| 2551 Source source = addSource(r''' | 2745 Source source = addSource(r''' |
| 2552 class _A { | 2746 class _A { |
| 2553 static m() {} | 2747 static m() {} |
| 2554 } | 2748 } |
| 2555 main() { | 2749 main() { |
| 2556 _A.m(); | 2750 _A.m(); |
| 2557 }'''); | 2751 }'''); |
| 2558 await assertNoErrors(source); | 2752 await computeAnalysisResult(source); |
| 2753 assertNoErrors(source); |
| 2559 verify([source]); | 2754 verify([source]); |
| 2560 } | 2755 } |
| 2561 | 2756 |
| 2562 test_unusedElement_class_isUsed_typeArgument() async { | 2757 test_unusedElement_class_isUsed_typeArgument() async { |
| 2563 enableUnusedElement = true; | 2758 enableUnusedElement = true; |
| 2564 Source source = addSource(r''' | 2759 Source source = addSource(r''' |
| 2565 class _A {} | 2760 class _A {} |
| 2566 main() { | 2761 main() { |
| 2567 var v = new List<_A>(); | 2762 var v = new List<_A>(); |
| 2568 print(v); | 2763 print(v); |
| 2569 }'''); | 2764 }'''); |
| 2570 await assertNoErrors(source); | 2765 await computeAnalysisResult(source); |
| 2766 assertNoErrors(source); |
| 2571 verify([source]); | 2767 verify([source]); |
| 2572 } | 2768 } |
| 2573 | 2769 |
| 2574 test_unusedElement_class_notUsed_inClassMember() async { | 2770 test_unusedElement_class_notUsed_inClassMember() async { |
| 2575 enableUnusedElement = true; | 2771 enableUnusedElement = true; |
| 2576 Source source = addSource(r''' | 2772 Source source = addSource(r''' |
| 2577 class _A { | 2773 class _A { |
| 2578 static staticMethod() { | 2774 static staticMethod() { |
| 2579 new _A(); | 2775 new _A(); |
| 2580 } | 2776 } |
| 2581 instanceMethod() { | 2777 instanceMethod() { |
| 2582 new _A(); | 2778 new _A(); |
| 2583 } | 2779 } |
| 2584 } | 2780 } |
| 2585 '''); | 2781 '''); |
| 2586 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 2782 await computeAnalysisResult(source); |
| 2783 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 2587 verify([source]); | 2784 verify([source]); |
| 2588 } | 2785 } |
| 2589 | 2786 |
| 2590 test_unusedElement_class_notUsed_inConstructorName() async { | 2787 test_unusedElement_class_notUsed_inConstructorName() async { |
| 2591 enableUnusedElement = true; | 2788 enableUnusedElement = true; |
| 2592 Source source = addSource(r''' | 2789 Source source = addSource(r''' |
| 2593 class _A { | 2790 class _A { |
| 2594 _A() {} | 2791 _A() {} |
| 2595 _A.named() {} | 2792 _A.named() {} |
| 2596 } | 2793 } |
| 2597 '''); | 2794 '''); |
| 2598 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 2795 await computeAnalysisResult(source); |
| 2796 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 2599 verify([source]); | 2797 verify([source]); |
| 2600 } | 2798 } |
| 2601 | 2799 |
| 2602 test_unusedElement_class_notUsed_isExpression() async { | 2800 test_unusedElement_class_notUsed_isExpression() async { |
| 2603 enableUnusedElement = true; | 2801 enableUnusedElement = true; |
| 2604 Source source = addSource(r''' | 2802 Source source = addSource(r''' |
| 2605 class _A {} | 2803 class _A {} |
| 2606 main(p) { | 2804 main(p) { |
| 2607 if (p is _A) { | 2805 if (p is _A) { |
| 2608 } | 2806 } |
| 2609 } | 2807 } |
| 2610 '''); | 2808 '''); |
| 2611 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 2809 await computeAnalysisResult(source); |
| 2810 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 2612 verify([source]); | 2811 verify([source]); |
| 2613 } | 2812 } |
| 2614 | 2813 |
| 2615 test_unusedElement_class_notUsed_noReference() async { | 2814 test_unusedElement_class_notUsed_noReference() async { |
| 2616 enableUnusedElement = true; | 2815 enableUnusedElement = true; |
| 2617 Source source = addSource(r''' | 2816 Source source = addSource(r''' |
| 2618 class _A {} | 2817 class _A {} |
| 2619 main() { | 2818 main() { |
| 2620 }'''); | 2819 }'''); |
| 2621 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 2820 await computeAnalysisResult(source); |
| 2821 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 2622 verify([source]); | 2822 verify([source]); |
| 2623 } | 2823 } |
| 2624 | 2824 |
| 2625 test_unusedElement_class_notUsed_variableDeclaration() async { | 2825 test_unusedElement_class_notUsed_variableDeclaration() async { |
| 2626 enableUnusedElement = true; | 2826 enableUnusedElement = true; |
| 2627 Source source = addSource(r''' | 2827 Source source = addSource(r''' |
| 2628 class _A {} | 2828 class _A {} |
| 2629 main() { | 2829 main() { |
| 2630 _A v; | 2830 _A v; |
| 2631 print(v); | 2831 print(v); |
| 2632 } | 2832 } |
| 2633 print(x) {} | 2833 print(x) {} |
| 2634 '''); | 2834 '''); |
| 2635 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 2835 await computeAnalysisResult(source); |
| 2836 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 2636 verify([source]); | 2837 verify([source]); |
| 2637 } | 2838 } |
| 2638 | 2839 |
| 2639 test_unusedElement_enum_isUsed_fieldReference() async { | 2840 test_unusedElement_enum_isUsed_fieldReference() async { |
| 2640 enableUnusedElement = true; | 2841 enableUnusedElement = true; |
| 2641 Source source = addSource(r''' | 2842 Source source = addSource(r''' |
| 2642 enum _MyEnum {A, B, C} | 2843 enum _MyEnum {A, B, C} |
| 2643 main() { | 2844 main() { |
| 2644 print(_MyEnum.B); | 2845 print(_MyEnum.B); |
| 2645 }'''); | 2846 }'''); |
| 2646 await assertNoErrors(source); | 2847 await computeAnalysisResult(source); |
| 2848 assertNoErrors(source); |
| 2647 verify([source]); | 2849 verify([source]); |
| 2648 } | 2850 } |
| 2649 | 2851 |
| 2650 test_unusedElement_enum_notUsed_noReference() async { | 2852 test_unusedElement_enum_notUsed_noReference() async { |
| 2651 enableUnusedElement = true; | 2853 enableUnusedElement = true; |
| 2652 Source source = addSource(r''' | 2854 Source source = addSource(r''' |
| 2653 enum _MyEnum {A, B, C} | 2855 enum _MyEnum {A, B, C} |
| 2654 main() { | 2856 main() { |
| 2655 }'''); | 2857 }'''); |
| 2656 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 2858 await computeAnalysisResult(source); |
| 2859 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 2657 verify([source]); | 2860 verify([source]); |
| 2658 } | 2861 } |
| 2659 | 2862 |
| 2660 test_unusedElement_functionLocal_isUsed_closure() async { | 2863 test_unusedElement_functionLocal_isUsed_closure() async { |
| 2661 enableUnusedElement = true; | 2864 enableUnusedElement = true; |
| 2662 Source source = addSource(r''' | 2865 Source source = addSource(r''' |
| 2663 main() { | 2866 main() { |
| 2664 print(() {}); | 2867 print(() {}); |
| 2665 } | 2868 } |
| 2666 print(x) {} | 2869 print(x) {} |
| 2667 '''); | 2870 '''); |
| 2668 await assertNoErrors(source); | 2871 await computeAnalysisResult(source); |
| 2872 assertNoErrors(source); |
| 2669 verify([source]); | 2873 verify([source]); |
| 2670 } | 2874 } |
| 2671 | 2875 |
| 2672 test_unusedElement_functionLocal_isUsed_invocation() async { | 2876 test_unusedElement_functionLocal_isUsed_invocation() async { |
| 2673 enableUnusedElement = true; | 2877 enableUnusedElement = true; |
| 2674 Source source = addSource(r''' | 2878 Source source = addSource(r''' |
| 2675 main() { | 2879 main() { |
| 2676 f() {} | 2880 f() {} |
| 2677 f(); | 2881 f(); |
| 2678 }'''); | 2882 }'''); |
| 2679 await assertNoErrors(source); | 2883 await computeAnalysisResult(source); |
| 2884 assertNoErrors(source); |
| 2680 verify([source]); | 2885 verify([source]); |
| 2681 } | 2886 } |
| 2682 | 2887 |
| 2683 test_unusedElement_functionLocal_isUsed_reference() async { | 2888 test_unusedElement_functionLocal_isUsed_reference() async { |
| 2684 enableUnusedElement = true; | 2889 enableUnusedElement = true; |
| 2685 Source source = addSource(r''' | 2890 Source source = addSource(r''' |
| 2686 main() { | 2891 main() { |
| 2687 f() {} | 2892 f() {} |
| 2688 print(f); | 2893 print(f); |
| 2689 } | 2894 } |
| 2690 print(x) {} | 2895 print(x) {} |
| 2691 '''); | 2896 '''); |
| 2692 await assertNoErrors(source); | 2897 await computeAnalysisResult(source); |
| 2898 assertNoErrors(source); |
| 2693 verify([source]); | 2899 verify([source]); |
| 2694 } | 2900 } |
| 2695 | 2901 |
| 2696 test_unusedElement_functionLocal_notUsed_noReference() async { | 2902 test_unusedElement_functionLocal_notUsed_noReference() async { |
| 2697 enableUnusedElement = true; | 2903 enableUnusedElement = true; |
| 2698 Source source = addSource(r''' | 2904 Source source = addSource(r''' |
| 2699 main() { | 2905 main() { |
| 2700 f() {} | 2906 f() {} |
| 2701 }'''); | 2907 }'''); |
| 2702 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 2908 await computeAnalysisResult(source); |
| 2909 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 2703 verify([source]); | 2910 verify([source]); |
| 2704 } | 2911 } |
| 2705 | 2912 |
| 2706 test_unusedElement_functionLocal_notUsed_referenceFromItself() async { | 2913 test_unusedElement_functionLocal_notUsed_referenceFromItself() async { |
| 2707 enableUnusedElement = true; | 2914 enableUnusedElement = true; |
| 2708 Source source = addSource(r''' | 2915 Source source = addSource(r''' |
| 2709 main() { | 2916 main() { |
| 2710 _f(int p) { | 2917 _f(int p) { |
| 2711 _f(p - 1); | 2918 _f(p - 1); |
| 2712 } | 2919 } |
| 2713 }'''); | 2920 }'''); |
| 2714 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 2921 await computeAnalysisResult(source); |
| 2922 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 2715 verify([source]); | 2923 verify([source]); |
| 2716 } | 2924 } |
| 2717 | 2925 |
| 2718 test_unusedElement_functionTop_isUsed_invocation() async { | 2926 test_unusedElement_functionTop_isUsed_invocation() async { |
| 2719 enableUnusedElement = true; | 2927 enableUnusedElement = true; |
| 2720 Source source = addSource(r''' | 2928 Source source = addSource(r''' |
| 2721 _f() {} | 2929 _f() {} |
| 2722 main() { | 2930 main() { |
| 2723 _f(); | 2931 _f(); |
| 2724 }'''); | 2932 }'''); |
| 2725 await assertNoErrors(source); | 2933 await computeAnalysisResult(source); |
| 2934 assertNoErrors(source); |
| 2726 verify([source]); | 2935 verify([source]); |
| 2727 } | 2936 } |
| 2728 | 2937 |
| 2729 test_unusedElement_functionTop_isUsed_reference() async { | 2938 test_unusedElement_functionTop_isUsed_reference() async { |
| 2730 enableUnusedElement = true; | 2939 enableUnusedElement = true; |
| 2731 Source source = addSource(r''' | 2940 Source source = addSource(r''' |
| 2732 _f() {} | 2941 _f() {} |
| 2733 main() { | 2942 main() { |
| 2734 print(_f); | 2943 print(_f); |
| 2735 } | 2944 } |
| 2736 print(x) {} | 2945 print(x) {} |
| 2737 '''); | 2946 '''); |
| 2738 await assertNoErrors(source); | 2947 await computeAnalysisResult(source); |
| 2948 assertNoErrors(source); |
| 2739 verify([source]); | 2949 verify([source]); |
| 2740 } | 2950 } |
| 2741 | 2951 |
| 2742 test_unusedElement_functionTop_notUsed_noReference() async { | 2952 test_unusedElement_functionTop_notUsed_noReference() async { |
| 2743 enableUnusedElement = true; | 2953 enableUnusedElement = true; |
| 2744 Source source = addSource(r''' | 2954 Source source = addSource(r''' |
| 2745 _f() {} | 2955 _f() {} |
| 2746 main() { | 2956 main() { |
| 2747 }'''); | 2957 }'''); |
| 2748 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 2958 await computeAnalysisResult(source); |
| 2959 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 2749 verify([source]); | 2960 verify([source]); |
| 2750 } | 2961 } |
| 2751 | 2962 |
| 2752 test_unusedElement_functionTop_notUsed_referenceFromItself() async { | 2963 test_unusedElement_functionTop_notUsed_referenceFromItself() async { |
| 2753 enableUnusedElement = true; | 2964 enableUnusedElement = true; |
| 2754 Source source = addSource(r''' | 2965 Source source = addSource(r''' |
| 2755 _f(int p) { | 2966 _f(int p) { |
| 2756 _f(p - 1); | 2967 _f(p - 1); |
| 2757 } | 2968 } |
| 2758 main() { | 2969 main() { |
| 2759 }'''); | 2970 }'''); |
| 2760 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 2971 await computeAnalysisResult(source); |
| 2972 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 2761 verify([source]); | 2973 verify([source]); |
| 2762 } | 2974 } |
| 2763 | 2975 |
| 2764 test_unusedElement_functionTypeAlias_isUsed_isExpression() async { | 2976 test_unusedElement_functionTypeAlias_isUsed_isExpression() async { |
| 2765 enableUnusedElement = true; | 2977 enableUnusedElement = true; |
| 2766 Source source = addSource(r''' | 2978 Source source = addSource(r''' |
| 2767 typedef _F(a, b); | 2979 typedef _F(a, b); |
| 2768 main(f) { | 2980 main(f) { |
| 2769 if (f is _F) { | 2981 if (f is _F) { |
| 2770 print('F'); | 2982 print('F'); |
| 2771 } | 2983 } |
| 2772 }'''); | 2984 }'''); |
| 2773 await assertNoErrors(source); | 2985 await computeAnalysisResult(source); |
| 2986 assertNoErrors(source); |
| 2774 verify([source]); | 2987 verify([source]); |
| 2775 } | 2988 } |
| 2776 | 2989 |
| 2777 test_unusedElement_functionTypeAlias_isUsed_reference() async { | 2990 test_unusedElement_functionTypeAlias_isUsed_reference() async { |
| 2778 enableUnusedElement = true; | 2991 enableUnusedElement = true; |
| 2779 Source source = addSource(r''' | 2992 Source source = addSource(r''' |
| 2780 typedef _F(a, b); | 2993 typedef _F(a, b); |
| 2781 main(_F f) { | 2994 main(_F f) { |
| 2782 }'''); | 2995 }'''); |
| 2783 await assertNoErrors(source); | 2996 await computeAnalysisResult(source); |
| 2997 assertNoErrors(source); |
| 2784 verify([source]); | 2998 verify([source]); |
| 2785 } | 2999 } |
| 2786 | 3000 |
| 2787 test_unusedElement_functionTypeAlias_isUsed_typeArgument() async { | 3001 test_unusedElement_functionTypeAlias_isUsed_typeArgument() async { |
| 2788 enableUnusedElement = true; | 3002 enableUnusedElement = true; |
| 2789 Source source = addSource(r''' | 3003 Source source = addSource(r''' |
| 2790 typedef _F(a, b); | 3004 typedef _F(a, b); |
| 2791 main() { | 3005 main() { |
| 2792 var v = new List<_F>(); | 3006 var v = new List<_F>(); |
| 2793 print(v); | 3007 print(v); |
| 2794 }'''); | 3008 }'''); |
| 2795 await assertNoErrors(source); | 3009 await computeAnalysisResult(source); |
| 3010 assertNoErrors(source); |
| 2796 verify([source]); | 3011 verify([source]); |
| 2797 } | 3012 } |
| 2798 | 3013 |
| 2799 test_unusedElement_functionTypeAlias_isUsed_variableDeclaration() async { | 3014 test_unusedElement_functionTypeAlias_isUsed_variableDeclaration() async { |
| 2800 enableUnusedElement = true; | 3015 enableUnusedElement = true; |
| 2801 Source source = addSource(r''' | 3016 Source source = addSource(r''' |
| 2802 typedef _F(a, b); | 3017 typedef _F(a, b); |
| 2803 class A { | 3018 class A { |
| 2804 _F f; | 3019 _F f; |
| 2805 }'''); | 3020 }'''); |
| 2806 await assertNoErrors(source); | 3021 await computeAnalysisResult(source); |
| 3022 assertNoErrors(source); |
| 2807 verify([source]); | 3023 verify([source]); |
| 2808 } | 3024 } |
| 2809 | 3025 |
| 2810 test_unusedElement_functionTypeAlias_notUsed_noReference() async { | 3026 test_unusedElement_functionTypeAlias_notUsed_noReference() async { |
| 2811 enableUnusedElement = true; | 3027 enableUnusedElement = true; |
| 2812 Source source = addSource(r''' | 3028 Source source = addSource(r''' |
| 2813 typedef _F(a, b); | 3029 typedef _F(a, b); |
| 2814 main() { | 3030 main() { |
| 2815 }'''); | 3031 }'''); |
| 2816 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 3032 await computeAnalysisResult(source); |
| 3033 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 2817 verify([source]); | 3034 verify([source]); |
| 2818 } | 3035 } |
| 2819 | 3036 |
| 2820 test_unusedElement_getter_isUsed_invocation_implicitThis() async { | 3037 test_unusedElement_getter_isUsed_invocation_implicitThis() async { |
| 2821 enableUnusedElement = true; | 3038 enableUnusedElement = true; |
| 2822 Source source = addSource(r''' | 3039 Source source = addSource(r''' |
| 2823 class A { | 3040 class A { |
| 2824 get _g => null; | 3041 get _g => null; |
| 2825 useGetter() { | 3042 useGetter() { |
| 2826 var v = _g; | 3043 var v = _g; |
| 2827 } | 3044 } |
| 2828 }'''); | 3045 }'''); |
| 2829 await assertNoErrors(source); | 3046 await computeAnalysisResult(source); |
| 3047 assertNoErrors(source); |
| 2830 verify([source]); | 3048 verify([source]); |
| 2831 } | 3049 } |
| 2832 | 3050 |
| 2833 test_unusedElement_getter_isUsed_invocation_PrefixedIdentifier() async { | 3051 test_unusedElement_getter_isUsed_invocation_PrefixedIdentifier() async { |
| 2834 enableUnusedElement = true; | 3052 enableUnusedElement = true; |
| 2835 Source source = addSource(r''' | 3053 Source source = addSource(r''' |
| 2836 class A { | 3054 class A { |
| 2837 get _g => null; | 3055 get _g => null; |
| 2838 } | 3056 } |
| 2839 main(A a) { | 3057 main(A a) { |
| 2840 var v = a._g; | 3058 var v = a._g; |
| 2841 } | 3059 } |
| 2842 '''); | 3060 '''); |
| 2843 await assertNoErrors(source); | 3061 await computeAnalysisResult(source); |
| 3062 assertNoErrors(source); |
| 2844 verify([source]); | 3063 verify([source]); |
| 2845 } | 3064 } |
| 2846 | 3065 |
| 2847 test_unusedElement_getter_isUsed_invocation_PropertyAccess() async { | 3066 test_unusedElement_getter_isUsed_invocation_PropertyAccess() async { |
| 2848 enableUnusedElement = true; | 3067 enableUnusedElement = true; |
| 2849 Source source = addSource(r''' | 3068 Source source = addSource(r''' |
| 2850 class A { | 3069 class A { |
| 2851 get _g => null; | 3070 get _g => null; |
| 2852 } | 3071 } |
| 2853 main() { | 3072 main() { |
| 2854 var v = new A()._g; | 3073 var v = new A()._g; |
| 2855 } | 3074 } |
| 2856 '''); | 3075 '''); |
| 2857 await assertNoErrors(source); | 3076 await computeAnalysisResult(source); |
| 3077 assertNoErrors(source); |
| 2858 verify([source]); | 3078 verify([source]); |
| 2859 } | 3079 } |
| 2860 | 3080 |
| 2861 test_unusedElement_getter_notUsed_noReference() async { | 3081 test_unusedElement_getter_notUsed_noReference() async { |
| 2862 enableUnusedElement = true; | 3082 enableUnusedElement = true; |
| 2863 Source source = addSource(r''' | 3083 Source source = addSource(r''' |
| 2864 class A { | 3084 class A { |
| 2865 get _g => null; | 3085 get _g => null; |
| 2866 }'''); | 3086 }'''); |
| 2867 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 3087 await computeAnalysisResult(source); |
| 3088 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 2868 verify([source]); | 3089 verify([source]); |
| 2869 } | 3090 } |
| 2870 | 3091 |
| 2871 test_unusedElement_getter_notUsed_referenceFromItself() async { | 3092 test_unusedElement_getter_notUsed_referenceFromItself() async { |
| 2872 enableUnusedElement = true; | 3093 enableUnusedElement = true; |
| 2873 Source source = addSource(r''' | 3094 Source source = addSource(r''' |
| 2874 class A { | 3095 class A { |
| 2875 get _g { | 3096 get _g { |
| 2876 return _g; | 3097 return _g; |
| 2877 } | 3098 } |
| 2878 }'''); | 3099 }'''); |
| 2879 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 3100 await computeAnalysisResult(source); |
| 3101 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 2880 verify([source]); | 3102 verify([source]); |
| 2881 } | 3103 } |
| 2882 | 3104 |
| 2883 test_unusedElement_method_isUsed_hasReference_implicitThis() async { | 3105 test_unusedElement_method_isUsed_hasReference_implicitThis() async { |
| 2884 enableUnusedElement = true; | 3106 enableUnusedElement = true; |
| 2885 Source source = addSource(r''' | 3107 Source source = addSource(r''' |
| 2886 class A { | 3108 class A { |
| 2887 _m() {} | 3109 _m() {} |
| 2888 useMethod() { | 3110 useMethod() { |
| 2889 print(_m); | 3111 print(_m); |
| 2890 } | 3112 } |
| 2891 } | 3113 } |
| 2892 print(x) {} | 3114 print(x) {} |
| 2893 '''); | 3115 '''); |
| 2894 await assertNoErrors(source); | 3116 await computeAnalysisResult(source); |
| 3117 assertNoErrors(source); |
| 2895 verify([source]); | 3118 verify([source]); |
| 2896 } | 3119 } |
| 2897 | 3120 |
| 2898 test_unusedElement_method_isUsed_hasReference_implicitThis_subclass() async { | 3121 test_unusedElement_method_isUsed_hasReference_implicitThis_subclass() async { |
| 2899 enableUnusedElement = true; | 3122 enableUnusedElement = true; |
| 2900 Source source = addSource(r''' | 3123 Source source = addSource(r''' |
| 2901 class A { | 3124 class A { |
| 2902 _m() {} | 3125 _m() {} |
| 2903 useMethod() { | 3126 useMethod() { |
| 2904 print(_m); | 3127 print(_m); |
| 2905 } | 3128 } |
| 2906 } | 3129 } |
| 2907 class B extends A { | 3130 class B extends A { |
| 2908 _m() {} | 3131 _m() {} |
| 2909 } | 3132 } |
| 2910 print(x) {} | 3133 print(x) {} |
| 2911 '''); | 3134 '''); |
| 2912 await assertNoErrors(source); | 3135 await computeAnalysisResult(source); |
| 3136 assertNoErrors(source); |
| 2913 verify([source]); | 3137 verify([source]); |
| 2914 } | 3138 } |
| 2915 | 3139 |
| 2916 test_unusedElement_method_isUsed_hasReference_PrefixedIdentifier() async { | 3140 test_unusedElement_method_isUsed_hasReference_PrefixedIdentifier() async { |
| 2917 enableUnusedElement = true; | 3141 enableUnusedElement = true; |
| 2918 Source source = addSource(r''' | 3142 Source source = addSource(r''' |
| 2919 class A { | 3143 class A { |
| 2920 _m() {} | 3144 _m() {} |
| 2921 } | 3145 } |
| 2922 main(A a) { | 3146 main(A a) { |
| 2923 a._m; | 3147 a._m; |
| 2924 }'''); | 3148 }'''); |
| 2925 await assertNoErrors(source); | 3149 await computeAnalysisResult(source); |
| 3150 assertNoErrors(source); |
| 2926 verify([source]); | 3151 verify([source]); |
| 2927 } | 3152 } |
| 2928 | 3153 |
| 2929 test_unusedElement_method_isUsed_hasReference_PropertyAccess() async { | 3154 test_unusedElement_method_isUsed_hasReference_PropertyAccess() async { |
| 2930 enableUnusedElement = true; | 3155 enableUnusedElement = true; |
| 2931 Source source = addSource(r''' | 3156 Source source = addSource(r''' |
| 2932 class A { | 3157 class A { |
| 2933 _m() {} | 3158 _m() {} |
| 2934 } | 3159 } |
| 2935 main() { | 3160 main() { |
| 2936 new A()._m; | 3161 new A()._m; |
| 2937 }'''); | 3162 }'''); |
| 2938 await assertNoErrors(source); | 3163 await computeAnalysisResult(source); |
| 3164 assertNoErrors(source); |
| 2939 verify([source]); | 3165 verify([source]); |
| 2940 } | 3166 } |
| 2941 | 3167 |
| 2942 test_unusedElement_method_isUsed_invocation_implicitThis() async { | 3168 test_unusedElement_method_isUsed_invocation_implicitThis() async { |
| 2943 enableUnusedElement = true; | 3169 enableUnusedElement = true; |
| 2944 Source source = addSource(r''' | 3170 Source source = addSource(r''' |
| 2945 class A { | 3171 class A { |
| 2946 _m() {} | 3172 _m() {} |
| 2947 useMethod() { | 3173 useMethod() { |
| 2948 _m(); | 3174 _m(); |
| 2949 } | 3175 } |
| 2950 }'''); | 3176 }'''); |
| 2951 await assertNoErrors(source); | 3177 await computeAnalysisResult(source); |
| 3178 assertNoErrors(source); |
| 2952 verify([source]); | 3179 verify([source]); |
| 2953 } | 3180 } |
| 2954 | 3181 |
| 2955 test_unusedElement_method_isUsed_invocation_implicitThis_subclass() async { | 3182 test_unusedElement_method_isUsed_invocation_implicitThis_subclass() async { |
| 2956 enableUnusedElement = true; | 3183 enableUnusedElement = true; |
| 2957 Source source = addSource(r''' | 3184 Source source = addSource(r''' |
| 2958 class A { | 3185 class A { |
| 2959 _m() {} | 3186 _m() {} |
| 2960 useMethod() { | 3187 useMethod() { |
| 2961 _m(); | 3188 _m(); |
| 2962 } | 3189 } |
| 2963 } | 3190 } |
| 2964 class B extends A { | 3191 class B extends A { |
| 2965 _m() {} | 3192 _m() {} |
| 2966 }'''); | 3193 }'''); |
| 2967 await assertNoErrors(source); | 3194 await computeAnalysisResult(source); |
| 3195 assertNoErrors(source); |
| 2968 verify([source]); | 3196 verify([source]); |
| 2969 } | 3197 } |
| 2970 | 3198 |
| 2971 test_unusedElement_method_isUsed_invocation_MemberElement() async { | 3199 test_unusedElement_method_isUsed_invocation_MemberElement() async { |
| 2972 enableUnusedElement = true; | 3200 enableUnusedElement = true; |
| 2973 Source source = addSource(r''' | 3201 Source source = addSource(r''' |
| 2974 class A<T> { | 3202 class A<T> { |
| 2975 _m(T t) {} | 3203 _m(T t) {} |
| 2976 } | 3204 } |
| 2977 main(A<int> a) { | 3205 main(A<int> a) { |
| 2978 a._m(0); | 3206 a._m(0); |
| 2979 }'''); | 3207 }'''); |
| 2980 await assertNoErrors(source); | 3208 await computeAnalysisResult(source); |
| 3209 assertNoErrors(source); |
| 2981 verify([source]); | 3210 verify([source]); |
| 2982 } | 3211 } |
| 2983 | 3212 |
| 2984 test_unusedElement_method_isUsed_invocation_propagated() async { | 3213 test_unusedElement_method_isUsed_invocation_propagated() async { |
| 2985 enableUnusedElement = true; | 3214 enableUnusedElement = true; |
| 2986 Source source = addSource(r''' | 3215 Source source = addSource(r''' |
| 2987 class A { | 3216 class A { |
| 2988 _m() {} | 3217 _m() {} |
| 2989 } | 3218 } |
| 2990 main() { | 3219 main() { |
| 2991 var a = new A(); | 3220 var a = new A(); |
| 2992 a._m(); | 3221 a._m(); |
| 2993 }'''); | 3222 }'''); |
| 2994 await assertNoErrors(source); | 3223 await computeAnalysisResult(source); |
| 3224 assertNoErrors(source); |
| 2995 verify([source]); | 3225 verify([source]); |
| 2996 } | 3226 } |
| 2997 | 3227 |
| 2998 test_unusedElement_method_isUsed_invocation_static() async { | 3228 test_unusedElement_method_isUsed_invocation_static() async { |
| 2999 enableUnusedElement = true; | 3229 enableUnusedElement = true; |
| 3000 Source source = addSource(r''' | 3230 Source source = addSource(r''' |
| 3001 class A { | 3231 class A { |
| 3002 _m() {} | 3232 _m() {} |
| 3003 } | 3233 } |
| 3004 main() { | 3234 main() { |
| 3005 A a = new A(); | 3235 A a = new A(); |
| 3006 a._m(); | 3236 a._m(); |
| 3007 }'''); | 3237 }'''); |
| 3008 await assertNoErrors(source); | 3238 await computeAnalysisResult(source); |
| 3239 assertNoErrors(source); |
| 3009 verify([source]); | 3240 verify([source]); |
| 3010 } | 3241 } |
| 3011 | 3242 |
| 3012 test_unusedElement_method_isUsed_invocation_subclass() async { | 3243 test_unusedElement_method_isUsed_invocation_subclass() async { |
| 3013 enableUnusedElement = true; | 3244 enableUnusedElement = true; |
| 3014 Source source = addSource(r''' | 3245 Source source = addSource(r''' |
| 3015 class A { | 3246 class A { |
| 3016 _m() {} | 3247 _m() {} |
| 3017 } | 3248 } |
| 3018 class B extends A { | 3249 class B extends A { |
| 3019 _m() {} | 3250 _m() {} |
| 3020 } | 3251 } |
| 3021 main(A a) { | 3252 main(A a) { |
| 3022 a._m(); | 3253 a._m(); |
| 3023 }'''); | 3254 }'''); |
| 3024 await assertNoErrors(source); | 3255 await computeAnalysisResult(source); |
| 3256 assertNoErrors(source); |
| 3025 verify([source]); | 3257 verify([source]); |
| 3026 } | 3258 } |
| 3027 | 3259 |
| 3028 test_unusedElement_method_isUsed_notPrivate() async { | 3260 test_unusedElement_method_isUsed_notPrivate() async { |
| 3029 enableUnusedElement = true; | 3261 enableUnusedElement = true; |
| 3030 Source source = addSource(r''' | 3262 Source source = addSource(r''' |
| 3031 class A { | 3263 class A { |
| 3032 m() {} | 3264 m() {} |
| 3033 } | 3265 } |
| 3034 main() { | 3266 main() { |
| 3035 }'''); | 3267 }'''); |
| 3036 await assertNoErrors(source); | 3268 await computeAnalysisResult(source); |
| 3269 assertNoErrors(source); |
| 3037 verify([source]); | 3270 verify([source]); |
| 3038 } | 3271 } |
| 3039 | 3272 |
| 3040 test_unusedElement_method_isUsed_staticInvocation() async { | 3273 test_unusedElement_method_isUsed_staticInvocation() async { |
| 3041 enableUnusedElement = true; | 3274 enableUnusedElement = true; |
| 3042 Source source = addSource(r''' | 3275 Source source = addSource(r''' |
| 3043 class A { | 3276 class A { |
| 3044 static _m() {} | 3277 static _m() {} |
| 3045 } | 3278 } |
| 3046 main() { | 3279 main() { |
| 3047 A._m(); | 3280 A._m(); |
| 3048 }'''); | 3281 }'''); |
| 3049 await assertNoErrors(source); | 3282 await computeAnalysisResult(source); |
| 3283 assertNoErrors(source); |
| 3050 verify([source]); | 3284 verify([source]); |
| 3051 } | 3285 } |
| 3052 | 3286 |
| 3053 test_unusedElement_method_notUsed_noReference() async { | 3287 test_unusedElement_method_notUsed_noReference() async { |
| 3054 enableUnusedElement = true; | 3288 enableUnusedElement = true; |
| 3055 Source source = addSource(r''' | 3289 Source source = addSource(r''' |
| 3056 class A { | 3290 class A { |
| 3057 static _m() {} | 3291 static _m() {} |
| 3058 }'''); | 3292 }'''); |
| 3059 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 3293 await computeAnalysisResult(source); |
| 3294 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 3060 verify([source]); | 3295 verify([source]); |
| 3061 } | 3296 } |
| 3062 | 3297 |
| 3063 test_unusedElement_method_notUsed_referenceFromItself() async { | 3298 test_unusedElement_method_notUsed_referenceFromItself() async { |
| 3064 enableUnusedElement = true; | 3299 enableUnusedElement = true; |
| 3065 Source source = addSource(r''' | 3300 Source source = addSource(r''' |
| 3066 class A { | 3301 class A { |
| 3067 static _m(int p) { | 3302 static _m(int p) { |
| 3068 _m(p - 1); | 3303 _m(p - 1); |
| 3069 } | 3304 } |
| 3070 }'''); | 3305 }'''); |
| 3071 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 3306 await computeAnalysisResult(source); |
| 3307 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 3072 verify([source]); | 3308 verify([source]); |
| 3073 } | 3309 } |
| 3074 | 3310 |
| 3075 test_unusedElement_setter_isUsed_invocation_implicitThis() async { | 3311 test_unusedElement_setter_isUsed_invocation_implicitThis() async { |
| 3076 enableUnusedElement = true; | 3312 enableUnusedElement = true; |
| 3077 Source source = addSource(r''' | 3313 Source source = addSource(r''' |
| 3078 class A { | 3314 class A { |
| 3079 set _s(x) {} | 3315 set _s(x) {} |
| 3080 useSetter() { | 3316 useSetter() { |
| 3081 _s = 42; | 3317 _s = 42; |
| 3082 } | 3318 } |
| 3083 }'''); | 3319 }'''); |
| 3084 await assertNoErrors(source); | 3320 await computeAnalysisResult(source); |
| 3321 assertNoErrors(source); |
| 3085 verify([source]); | 3322 verify([source]); |
| 3086 } | 3323 } |
| 3087 | 3324 |
| 3088 test_unusedElement_setter_isUsed_invocation_PrefixedIdentifier() async { | 3325 test_unusedElement_setter_isUsed_invocation_PrefixedIdentifier() async { |
| 3089 enableUnusedElement = true; | 3326 enableUnusedElement = true; |
| 3090 Source source = addSource(r''' | 3327 Source source = addSource(r''' |
| 3091 class A { | 3328 class A { |
| 3092 set _s(x) {} | 3329 set _s(x) {} |
| 3093 } | 3330 } |
| 3094 main(A a) { | 3331 main(A a) { |
| 3095 a._s = 42; | 3332 a._s = 42; |
| 3096 } | 3333 } |
| 3097 '''); | 3334 '''); |
| 3098 await assertNoErrors(source); | 3335 await computeAnalysisResult(source); |
| 3336 assertNoErrors(source); |
| 3099 verify([source]); | 3337 verify([source]); |
| 3100 } | 3338 } |
| 3101 | 3339 |
| 3102 test_unusedElement_setter_isUsed_invocation_PropertyAccess() async { | 3340 test_unusedElement_setter_isUsed_invocation_PropertyAccess() async { |
| 3103 enableUnusedElement = true; | 3341 enableUnusedElement = true; |
| 3104 Source source = addSource(r''' | 3342 Source source = addSource(r''' |
| 3105 class A { | 3343 class A { |
| 3106 set _s(x) {} | 3344 set _s(x) {} |
| 3107 } | 3345 } |
| 3108 main() { | 3346 main() { |
| 3109 new A()._s = 42; | 3347 new A()._s = 42; |
| 3110 } | 3348 } |
| 3111 '''); | 3349 '''); |
| 3112 await assertNoErrors(source); | 3350 await computeAnalysisResult(source); |
| 3351 assertNoErrors(source); |
| 3113 verify([source]); | 3352 verify([source]); |
| 3114 } | 3353 } |
| 3115 | 3354 |
| 3116 test_unusedElement_setter_notUsed_noReference() async { | 3355 test_unusedElement_setter_notUsed_noReference() async { |
| 3117 enableUnusedElement = true; | 3356 enableUnusedElement = true; |
| 3118 Source source = addSource(r''' | 3357 Source source = addSource(r''' |
| 3119 class A { | 3358 class A { |
| 3120 set _s(x) {} | 3359 set _s(x) {} |
| 3121 }'''); | 3360 }'''); |
| 3122 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 3361 await computeAnalysisResult(source); |
| 3362 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 3123 verify([source]); | 3363 verify([source]); |
| 3124 } | 3364 } |
| 3125 | 3365 |
| 3126 test_unusedElement_setter_notUsed_referenceFromItself() async { | 3366 test_unusedElement_setter_notUsed_referenceFromItself() async { |
| 3127 enableUnusedElement = true; | 3367 enableUnusedElement = true; |
| 3128 Source source = addSource(r''' | 3368 Source source = addSource(r''' |
| 3129 class A { | 3369 class A { |
| 3130 set _s(int x) { | 3370 set _s(int x) { |
| 3131 if (x > 5) { | 3371 if (x > 5) { |
| 3132 _s = x - 1; | 3372 _s = x - 1; |
| 3133 } | 3373 } |
| 3134 } | 3374 } |
| 3135 }'''); | 3375 }'''); |
| 3136 await assertErrors(source, [HintCode.UNUSED_ELEMENT]); | 3376 await computeAnalysisResult(source); |
| 3377 assertErrors(source, [HintCode.UNUSED_ELEMENT]); |
| 3137 verify([source]); | 3378 verify([source]); |
| 3138 } | 3379 } |
| 3139 | 3380 |
| 3140 test_unusedField_isUsed_argument() async { | 3381 test_unusedField_isUsed_argument() async { |
| 3141 enableUnusedElement = true; | 3382 enableUnusedElement = true; |
| 3142 Source source = addSource(r''' | 3383 Source source = addSource(r''' |
| 3143 class A { | 3384 class A { |
| 3144 int _f = 0; | 3385 int _f = 0; |
| 3145 main() { | 3386 main() { |
| 3146 print(++_f); | 3387 print(++_f); |
| 3147 } | 3388 } |
| 3148 } | 3389 } |
| 3149 print(x) {}'''); | 3390 print(x) {}'''); |
| 3150 await assertErrors(source); | 3391 await computeAnalysisResult(source); |
| 3392 assertErrors(source); |
| 3151 verify([source]); | 3393 verify([source]); |
| 3152 } | 3394 } |
| 3153 | 3395 |
| 3154 test_unusedField_isUsed_reference_implicitThis() async { | 3396 test_unusedField_isUsed_reference_implicitThis() async { |
| 3155 enableUnusedElement = true; | 3397 enableUnusedElement = true; |
| 3156 Source source = addSource(r''' | 3398 Source source = addSource(r''' |
| 3157 class A { | 3399 class A { |
| 3158 int _f; | 3400 int _f; |
| 3159 main() { | 3401 main() { |
| 3160 print(_f); | 3402 print(_f); |
| 3161 } | 3403 } |
| 3162 } | 3404 } |
| 3163 print(x) {}'''); | 3405 print(x) {}'''); |
| 3164 await assertErrors(source); | 3406 await computeAnalysisResult(source); |
| 3407 assertErrors(source); |
| 3165 verify([source]); | 3408 verify([source]); |
| 3166 } | 3409 } |
| 3167 | 3410 |
| 3168 test_unusedField_isUsed_reference_implicitThis_expressionFunctionBody() async
{ | 3411 test_unusedField_isUsed_reference_implicitThis_expressionFunctionBody() async
{ |
| 3169 enableUnusedElement = true; | 3412 enableUnusedElement = true; |
| 3170 Source source = addSource(r''' | 3413 Source source = addSource(r''' |
| 3171 class A { | 3414 class A { |
| 3172 int _f; | 3415 int _f; |
| 3173 m() => _f; | 3416 m() => _f; |
| 3174 }'''); | 3417 }'''); |
| 3175 await assertErrors(source); | 3418 await computeAnalysisResult(source); |
| 3419 assertErrors(source); |
| 3176 verify([source]); | 3420 verify([source]); |
| 3177 } | 3421 } |
| 3178 | 3422 |
| 3179 test_unusedField_isUsed_reference_implicitThis_subclass() async { | 3423 test_unusedField_isUsed_reference_implicitThis_subclass() async { |
| 3180 enableUnusedElement = true; | 3424 enableUnusedElement = true; |
| 3181 Source source = addSource(r''' | 3425 Source source = addSource(r''' |
| 3182 class A { | 3426 class A { |
| 3183 int _f; | 3427 int _f; |
| 3184 main() { | 3428 main() { |
| 3185 print(_f); | 3429 print(_f); |
| 3186 } | 3430 } |
| 3187 } | 3431 } |
| 3188 class B extends A { | 3432 class B extends A { |
| 3189 int _f; | 3433 int _f; |
| 3190 } | 3434 } |
| 3191 print(x) {}'''); | 3435 print(x) {}'''); |
| 3192 await assertErrors(source); | 3436 await computeAnalysisResult(source); |
| 3437 assertErrors(source); |
| 3193 verify([source]); | 3438 verify([source]); |
| 3194 } | 3439 } |
| 3195 | 3440 |
| 3196 test_unusedField_isUsed_reference_qualified_propagatedElement() async { | 3441 test_unusedField_isUsed_reference_qualified_propagatedElement() async { |
| 3197 enableUnusedElement = true; | 3442 enableUnusedElement = true; |
| 3198 Source source = addSource(r''' | 3443 Source source = addSource(r''' |
| 3199 class A { | 3444 class A { |
| 3200 int _f; | 3445 int _f; |
| 3201 } | 3446 } |
| 3202 main() { | 3447 main() { |
| 3203 var a = new A(); | 3448 var a = new A(); |
| 3204 print(a._f); | 3449 print(a._f); |
| 3205 } | 3450 } |
| 3206 print(x) {}'''); | 3451 print(x) {}'''); |
| 3207 await assertErrors(source); | 3452 await computeAnalysisResult(source); |
| 3453 assertErrors(source); |
| 3208 verify([source]); | 3454 verify([source]); |
| 3209 } | 3455 } |
| 3210 | 3456 |
| 3211 test_unusedField_isUsed_reference_qualified_staticElement() async { | 3457 test_unusedField_isUsed_reference_qualified_staticElement() async { |
| 3212 enableUnusedElement = true; | 3458 enableUnusedElement = true; |
| 3213 Source source = addSource(r''' | 3459 Source source = addSource(r''' |
| 3214 class A { | 3460 class A { |
| 3215 int _f; | 3461 int _f; |
| 3216 } | 3462 } |
| 3217 main() { | 3463 main() { |
| 3218 A a = new A(); | 3464 A a = new A(); |
| 3219 print(a._f); | 3465 print(a._f); |
| 3220 } | 3466 } |
| 3221 print(x) {}'''); | 3467 print(x) {}'''); |
| 3222 await assertErrors(source); | 3468 await computeAnalysisResult(source); |
| 3469 assertErrors(source); |
| 3223 verify([source]); | 3470 verify([source]); |
| 3224 } | 3471 } |
| 3225 | 3472 |
| 3226 test_unusedField_isUsed_reference_qualified_unresolved() async { | 3473 test_unusedField_isUsed_reference_qualified_unresolved() async { |
| 3227 enableUnusedElement = true; | 3474 enableUnusedElement = true; |
| 3228 Source source = addSource(r''' | 3475 Source source = addSource(r''' |
| 3229 class A { | 3476 class A { |
| 3230 int _f; | 3477 int _f; |
| 3231 } | 3478 } |
| 3232 main(a) { | 3479 main(a) { |
| 3233 print(a._f); | 3480 print(a._f); |
| 3234 } | 3481 } |
| 3235 print(x) {}'''); | 3482 print(x) {}'''); |
| 3236 await assertErrors(source); | 3483 await computeAnalysisResult(source); |
| 3484 assertErrors(source); |
| 3237 verify([source]); | 3485 verify([source]); |
| 3238 } | 3486 } |
| 3239 | 3487 |
| 3240 test_unusedField_notUsed_compoundAssign() async { | 3488 test_unusedField_notUsed_compoundAssign() async { |
| 3241 enableUnusedElement = true; | 3489 enableUnusedElement = true; |
| 3242 Source source = addSource(r''' | 3490 Source source = addSource(r''' |
| 3243 class A { | 3491 class A { |
| 3244 int _f; | 3492 int _f; |
| 3245 main() { | 3493 main() { |
| 3246 _f += 2; | 3494 _f += 2; |
| 3247 } | 3495 } |
| 3248 }'''); | 3496 }'''); |
| 3249 await assertErrors(source, [HintCode.UNUSED_FIELD]); | 3497 await computeAnalysisResult(source); |
| 3498 assertErrors(source, [HintCode.UNUSED_FIELD]); |
| 3250 verify([source]); | 3499 verify([source]); |
| 3251 } | 3500 } |
| 3252 | 3501 |
| 3253 test_unusedField_notUsed_constructorFieldInitializers() async { | 3502 test_unusedField_notUsed_constructorFieldInitializers() async { |
| 3254 enableUnusedElement = true; | 3503 enableUnusedElement = true; |
| 3255 Source source = addSource(r''' | 3504 Source source = addSource(r''' |
| 3256 class A { | 3505 class A { |
| 3257 int _f; | 3506 int _f; |
| 3258 A() : _f = 0; | 3507 A() : _f = 0; |
| 3259 }'''); | 3508 }'''); |
| 3260 await assertErrors(source, [HintCode.UNUSED_FIELD]); | 3509 await computeAnalysisResult(source); |
| 3510 assertErrors(source, [HintCode.UNUSED_FIELD]); |
| 3261 verify([source]); | 3511 verify([source]); |
| 3262 } | 3512 } |
| 3263 | 3513 |
| 3264 test_unusedField_notUsed_fieldFormalParameter() async { | 3514 test_unusedField_notUsed_fieldFormalParameter() async { |
| 3265 enableUnusedElement = true; | 3515 enableUnusedElement = true; |
| 3266 Source source = addSource(r''' | 3516 Source source = addSource(r''' |
| 3267 class A { | 3517 class A { |
| 3268 int _f; | 3518 int _f; |
| 3269 A(this._f); | 3519 A(this._f); |
| 3270 }'''); | 3520 }'''); |
| 3271 await assertErrors(source, [HintCode.UNUSED_FIELD]); | 3521 await computeAnalysisResult(source); |
| 3522 assertErrors(source, [HintCode.UNUSED_FIELD]); |
| 3272 verify([source]); | 3523 verify([source]); |
| 3273 } | 3524 } |
| 3274 | 3525 |
| 3275 test_unusedField_notUsed_noReference() async { | 3526 test_unusedField_notUsed_noReference() async { |
| 3276 enableUnusedElement = true; | 3527 enableUnusedElement = true; |
| 3277 Source source = addSource(r''' | 3528 Source source = addSource(r''' |
| 3278 class A { | 3529 class A { |
| 3279 int _f; | 3530 int _f; |
| 3280 } | 3531 } |
| 3281 '''); | 3532 '''); |
| 3282 await assertErrors(source, [HintCode.UNUSED_FIELD]); | 3533 await computeAnalysisResult(source); |
| 3534 assertErrors(source, [HintCode.UNUSED_FIELD]); |
| 3283 verify([source]); | 3535 verify([source]); |
| 3284 } | 3536 } |
| 3285 | 3537 |
| 3286 test_unusedField_notUsed_postfixExpr() async { | 3538 test_unusedField_notUsed_postfixExpr() async { |
| 3287 enableUnusedElement = true; | 3539 enableUnusedElement = true; |
| 3288 Source source = addSource(r''' | 3540 Source source = addSource(r''' |
| 3289 class A { | 3541 class A { |
| 3290 int _f = 0; | 3542 int _f = 0; |
| 3291 main() { | 3543 main() { |
| 3292 _f++; | 3544 _f++; |
| 3293 } | 3545 } |
| 3294 }'''); | 3546 }'''); |
| 3295 await assertErrors(source, [HintCode.UNUSED_FIELD]); | 3547 await computeAnalysisResult(source); |
| 3548 assertErrors(source, [HintCode.UNUSED_FIELD]); |
| 3296 verify([source]); | 3549 verify([source]); |
| 3297 } | 3550 } |
| 3298 | 3551 |
| 3299 test_unusedField_notUsed_prefixExpr() async { | 3552 test_unusedField_notUsed_prefixExpr() async { |
| 3300 enableUnusedElement = true; | 3553 enableUnusedElement = true; |
| 3301 Source source = addSource(r''' | 3554 Source source = addSource(r''' |
| 3302 class A { | 3555 class A { |
| 3303 int _f = 0; | 3556 int _f = 0; |
| 3304 main() { | 3557 main() { |
| 3305 ++_f; | 3558 ++_f; |
| 3306 } | 3559 } |
| 3307 }'''); | 3560 }'''); |
| 3308 await assertErrors(source, [HintCode.UNUSED_FIELD]); | 3561 await computeAnalysisResult(source); |
| 3562 assertErrors(source, [HintCode.UNUSED_FIELD]); |
| 3309 verify([source]); | 3563 verify([source]); |
| 3310 } | 3564 } |
| 3311 | 3565 |
| 3312 test_unusedField_notUsed_simpleAssignment() async { | 3566 test_unusedField_notUsed_simpleAssignment() async { |
| 3313 enableUnusedElement = true; | 3567 enableUnusedElement = true; |
| 3314 Source source = addSource(r''' | 3568 Source source = addSource(r''' |
| 3315 class A { | 3569 class A { |
| 3316 int _f; | 3570 int _f; |
| 3317 m() { | 3571 m() { |
| 3318 _f = 1; | 3572 _f = 1; |
| 3319 } | 3573 } |
| 3320 } | 3574 } |
| 3321 main(A a) { | 3575 main(A a) { |
| 3322 a._f = 2; | 3576 a._f = 2; |
| 3323 } | 3577 } |
| 3324 '''); | 3578 '''); |
| 3325 await assertErrors(source, [HintCode.UNUSED_FIELD]); | 3579 await computeAnalysisResult(source); |
| 3580 assertErrors(source, [HintCode.UNUSED_FIELD]); |
| 3326 verify([source]); | 3581 verify([source]); |
| 3327 } | 3582 } |
| 3328 | 3583 |
| 3329 test_unusedImport() async { | 3584 test_unusedImport() async { |
| 3330 Source source = addSource(r''' | 3585 Source source = addSource(r''' |
| 3331 library L; | 3586 library L; |
| 3332 import 'lib1.dart';'''); | 3587 import 'lib1.dart';'''); |
| 3333 Source source2 = addNamedSource("/lib1.dart", "library lib1;"); | 3588 Source source2 = addNamedSource("/lib1.dart", "library lib1;"); |
| 3334 await assertErrors(source, [HintCode.UNUSED_IMPORT]); | 3589 await computeAnalysisResult(source); |
| 3335 await assertNoErrors(source2); | 3590 await computeAnalysisResult(source2); |
| 3591 assertErrors(source, [HintCode.UNUSED_IMPORT]); |
| 3592 assertNoErrors(source2); |
| 3336 verify([source, source2]); | 3593 verify([source, source2]); |
| 3337 } | 3594 } |
| 3338 | 3595 |
| 3339 test_unusedImport_as() async { | 3596 test_unusedImport_as() async { |
| 3340 Source source = addSource(r''' | 3597 Source source = addSource(r''' |
| 3341 library L; | 3598 library L; |
| 3342 import 'lib1.dart'; | 3599 import 'lib1.dart'; |
| 3343 import 'lib1.dart' as one; | 3600 import 'lib1.dart' as one; |
| 3344 one.A a;'''); | 3601 one.A a;'''); |
| 3345 Source source2 = addNamedSource( | 3602 Source source2 = addNamedSource( |
| 3346 "/lib1.dart", | 3603 "/lib1.dart", |
| 3347 r''' | 3604 r''' |
| 3348 library lib1; | 3605 library lib1; |
| 3349 class A {}'''); | 3606 class A {}'''); |
| 3350 await assertErrors(source, [HintCode.UNUSED_IMPORT]); | 3607 await computeAnalysisResult(source); |
| 3351 await assertNoErrors(source2); | 3608 await computeAnalysisResult(source2); |
| 3609 assertErrors(source, [HintCode.UNUSED_IMPORT]); |
| 3610 assertNoErrors(source2); |
| 3352 verify([source, source2]); | 3611 verify([source, source2]); |
| 3353 } | 3612 } |
| 3354 | 3613 |
| 3355 @failingTest | 3614 @failingTest |
| 3356 test_unusedImport_as_equalPrefixes() async { | 3615 test_unusedImport_as_equalPrefixes() async { |
| 3357 // See todo at ImportsVerifier.prefixElementMap. | 3616 // See todo at ImportsVerifier.prefixElementMap. |
| 3358 Source source = addSource(r''' | 3617 Source source = addSource(r''' |
| 3359 library L; | 3618 library L; |
| 3360 import 'lib1.dart' as one; | 3619 import 'lib1.dart' as one; |
| 3361 import 'lib2.dart' as one; | 3620 import 'lib2.dart' as one; |
| 3362 one.A a;'''); | 3621 one.A a;'''); |
| 3363 Source source2 = addNamedSource( | 3622 Source source2 = addNamedSource( |
| 3364 "/lib1.dart", | 3623 "/lib1.dart", |
| 3365 r''' | 3624 r''' |
| 3366 library lib1; | 3625 library lib1; |
| 3367 class A {}'''); | 3626 class A {}'''); |
| 3368 Source source3 = addNamedSource( | 3627 Source source3 = addNamedSource( |
| 3369 "/lib2.dart", | 3628 "/lib2.dart", |
| 3370 r''' | 3629 r''' |
| 3371 library lib2; | 3630 library lib2; |
| 3372 class B {}'''); | 3631 class B {}'''); |
| 3373 await assertErrors(source, [HintCode.UNUSED_IMPORT]); | 3632 await computeAnalysisResult(source); |
| 3374 await assertNoErrors(source2); | 3633 await computeAnalysisResult(source2); |
| 3375 await assertNoErrors(source3); | 3634 await computeAnalysisResult(source3); |
| 3635 assertErrors(source, [HintCode.UNUSED_IMPORT]); |
| 3636 assertNoErrors(source2); |
| 3637 assertNoErrors(source3); |
| 3376 verify([source, source2, source3]); | 3638 verify([source, source2, source3]); |
| 3377 } | 3639 } |
| 3378 | 3640 |
| 3379 test_unusedImport_hide() async { | 3641 test_unusedImport_hide() async { |
| 3380 Source source = addSource(r''' | 3642 Source source = addSource(r''' |
| 3381 library L; | 3643 library L; |
| 3382 import 'lib1.dart'; | 3644 import 'lib1.dart'; |
| 3383 import 'lib1.dart' hide A; | 3645 import 'lib1.dart' hide A; |
| 3384 A a;'''); | 3646 A a;'''); |
| 3385 Source source2 = addNamedSource( | 3647 Source source2 = addNamedSource( |
| 3386 "/lib1.dart", | 3648 "/lib1.dart", |
| 3387 r''' | 3649 r''' |
| 3388 library lib1; | 3650 library lib1; |
| 3389 class A {}'''); | 3651 class A {}'''); |
| 3390 await assertErrors(source, [HintCode.UNUSED_IMPORT]); | 3652 await computeAnalysisResult(source); |
| 3391 await assertNoErrors(source2); | 3653 await computeAnalysisResult(source2); |
| 3654 assertErrors(source, [HintCode.UNUSED_IMPORT]); |
| 3655 assertNoErrors(source2); |
| 3392 verify([source, source2]); | 3656 verify([source, source2]); |
| 3393 } | 3657 } |
| 3394 | 3658 |
| 3395 test_unusedImport_inComment_libraryDirective() async { | 3659 test_unusedImport_inComment_libraryDirective() async { |
| 3396 Source source = addSource(r''' | 3660 Source source = addSource(r''' |
| 3397 /// Use [Future] class. | 3661 /// Use [Future] class. |
| 3398 library L; | 3662 library L; |
| 3399 import 'dart:async'; | 3663 import 'dart:async'; |
| 3400 '''); | 3664 '''); |
| 3401 await assertNoErrors(source); | 3665 await computeAnalysisResult(source); |
| 3666 assertNoErrors(source); |
| 3402 } | 3667 } |
| 3403 | 3668 |
| 3404 test_unusedImport_show() async { | 3669 test_unusedImport_show() async { |
| 3405 Source source = addSource(r''' | 3670 Source source = addSource(r''' |
| 3406 library L; | 3671 library L; |
| 3407 import 'lib1.dart' show A; | 3672 import 'lib1.dart' show A; |
| 3408 import 'lib1.dart' show B; | 3673 import 'lib1.dart' show B; |
| 3409 A a;'''); | 3674 A a;'''); |
| 3410 Source source2 = addNamedSource( | 3675 Source source2 = addNamedSource( |
| 3411 "/lib1.dart", | 3676 "/lib1.dart", |
| 3412 r''' | 3677 r''' |
| 3413 library lib1; | 3678 library lib1; |
| 3414 class A {} | 3679 class A {} |
| 3415 class B {}'''); | 3680 class B {}'''); |
| 3416 await assertErrors(source, [HintCode.UNUSED_IMPORT]); | 3681 await computeAnalysisResult(source); |
| 3417 await assertNoErrors(source2); | 3682 await computeAnalysisResult(source2); |
| 3683 assertErrors(source, [HintCode.UNUSED_IMPORT]); |
| 3684 assertNoErrors(source2); |
| 3418 verify([source, source2]); | 3685 verify([source, source2]); |
| 3419 } | 3686 } |
| 3420 | 3687 |
| 3421 test_unusedLocalVariable_inCatch_exception() async { | 3688 test_unusedLocalVariable_inCatch_exception() async { |
| 3422 enableUnusedLocalVariable = true; | 3689 enableUnusedLocalVariable = true; |
| 3423 Source source = addSource(r''' | 3690 Source source = addSource(r''' |
| 3424 main() { | 3691 main() { |
| 3425 try { | 3692 try { |
| 3426 } on String catch (exception) { | 3693 } on String catch (exception) { |
| 3427 } | 3694 } |
| 3428 }'''); | 3695 }'''); |
| 3429 await assertErrors(source, [HintCode.UNUSED_CATCH_CLAUSE]); | 3696 await computeAnalysisResult(source); |
| 3697 assertErrors(source, [HintCode.UNUSED_CATCH_CLAUSE]); |
| 3430 verify([source]); | 3698 verify([source]); |
| 3431 } | 3699 } |
| 3432 | 3700 |
| 3433 test_unusedLocalVariable_inCatch_exception_hasStack() async { | 3701 test_unusedLocalVariable_inCatch_exception_hasStack() async { |
| 3434 enableUnusedLocalVariable = true; | 3702 enableUnusedLocalVariable = true; |
| 3435 Source source = addSource(r''' | 3703 Source source = addSource(r''' |
| 3436 main() { | 3704 main() { |
| 3437 try { | 3705 try { |
| 3438 } catch (exception, stack) { | 3706 } catch (exception, stack) { |
| 3439 print(stack); | 3707 print(stack); |
| 3440 } | 3708 } |
| 3441 }'''); | 3709 }'''); |
| 3442 await assertNoErrors(source); | 3710 await computeAnalysisResult(source); |
| 3711 assertNoErrors(source); |
| 3443 verify([source]); | 3712 verify([source]); |
| 3444 } | 3713 } |
| 3445 | 3714 |
| 3446 test_unusedLocalVariable_inCatch_exception_noOnClause() async { | 3715 test_unusedLocalVariable_inCatch_exception_noOnClause() async { |
| 3447 enableUnusedLocalVariable = true; | 3716 enableUnusedLocalVariable = true; |
| 3448 Source source = addSource(r''' | 3717 Source source = addSource(r''' |
| 3449 main() { | 3718 main() { |
| 3450 try { | 3719 try { |
| 3451 } catch (exception) { | 3720 } catch (exception) { |
| 3452 } | 3721 } |
| 3453 }'''); | 3722 }'''); |
| 3454 await assertNoErrors(source); | 3723 await computeAnalysisResult(source); |
| 3724 assertNoErrors(source); |
| 3455 verify([source]); | 3725 verify([source]); |
| 3456 } | 3726 } |
| 3457 | 3727 |
| 3458 test_unusedLocalVariable_inCatch_stackTrace() async { | 3728 test_unusedLocalVariable_inCatch_stackTrace() async { |
| 3459 enableUnusedLocalVariable = true; | 3729 enableUnusedLocalVariable = true; |
| 3460 Source source = addSource(r''' | 3730 Source source = addSource(r''' |
| 3461 main() { | 3731 main() { |
| 3462 try { | 3732 try { |
| 3463 } catch (exception, stackTrace) { | 3733 } catch (exception, stackTrace) { |
| 3464 } | 3734 } |
| 3465 }'''); | 3735 }'''); |
| 3466 await assertErrors(source, [HintCode.UNUSED_CATCH_STACK]); | 3736 await computeAnalysisResult(source); |
| 3737 assertErrors(source, [HintCode.UNUSED_CATCH_STACK]); |
| 3467 verify([source]); | 3738 verify([source]); |
| 3468 } | 3739 } |
| 3469 | 3740 |
| 3470 test_unusedLocalVariable_inCatch_stackTrace_used() async { | 3741 test_unusedLocalVariable_inCatch_stackTrace_used() async { |
| 3471 enableUnusedLocalVariable = true; | 3742 enableUnusedLocalVariable = true; |
| 3472 Source source = addSource(r''' | 3743 Source source = addSource(r''' |
| 3473 main() { | 3744 main() { |
| 3474 try { | 3745 try { |
| 3475 } catch (exception, stackTrace) { | 3746 } catch (exception, stackTrace) { |
| 3476 print('exception at $stackTrace'); | 3747 print('exception at $stackTrace'); |
| 3477 } | 3748 } |
| 3478 } | 3749 } |
| 3479 print(x) {}'''); | 3750 print(x) {}'''); |
| 3480 await assertErrors(source); | 3751 await computeAnalysisResult(source); |
| 3752 assertErrors(source); |
| 3481 verify([source]); | 3753 verify([source]); |
| 3482 } | 3754 } |
| 3483 | 3755 |
| 3484 test_unusedLocalVariable_inFor_underscore_ignored() async { | 3756 test_unusedLocalVariable_inFor_underscore_ignored() async { |
| 3485 enableUnusedLocalVariable = true; | 3757 enableUnusedLocalVariable = true; |
| 3486 Source source = addSource(r''' | 3758 Source source = addSource(r''' |
| 3487 main() { | 3759 main() { |
| 3488 for (var _ in [1,2,3]) { | 3760 for (var _ in [1,2,3]) { |
| 3489 for (var __ in [4,5,6]) { | 3761 for (var __ in [4,5,6]) { |
| 3490 // do something | 3762 // do something |
| 3491 } | 3763 } |
| 3492 } | 3764 } |
| 3493 }'''); | 3765 }'''); |
| 3494 await assertErrors(source); | 3766 await computeAnalysisResult(source); |
| 3767 assertErrors(source); |
| 3495 verify([source]); | 3768 verify([source]); |
| 3496 } | 3769 } |
| 3497 | 3770 |
| 3498 test_unusedLocalVariable_inFunction() async { | 3771 test_unusedLocalVariable_inFunction() async { |
| 3499 enableUnusedLocalVariable = true; | 3772 enableUnusedLocalVariable = true; |
| 3500 Source source = addSource(r''' | 3773 Source source = addSource(r''' |
| 3501 main() { | 3774 main() { |
| 3502 var v = 1; | 3775 var v = 1; |
| 3503 v = 2; | 3776 v = 2; |
| 3504 }'''); | 3777 }'''); |
| 3505 await assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]); | 3778 await computeAnalysisResult(source); |
| 3779 assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]); |
| 3506 verify([source]); | 3780 verify([source]); |
| 3507 } | 3781 } |
| 3508 | 3782 |
| 3509 test_unusedLocalVariable_inMethod() async { | 3783 test_unusedLocalVariable_inMethod() async { |
| 3510 enableUnusedLocalVariable = true; | 3784 enableUnusedLocalVariable = true; |
| 3511 Source source = addSource(r''' | 3785 Source source = addSource(r''' |
| 3512 class A { | 3786 class A { |
| 3513 foo() { | 3787 foo() { |
| 3514 var v = 1; | 3788 var v = 1; |
| 3515 v = 2; | 3789 v = 2; |
| 3516 } | 3790 } |
| 3517 }'''); | 3791 }'''); |
| 3518 await assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]); | 3792 await computeAnalysisResult(source); |
| 3793 assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]); |
| 3519 verify([source]); | 3794 verify([source]); |
| 3520 } | 3795 } |
| 3521 | 3796 |
| 3522 test_unusedLocalVariable_isInvoked() async { | 3797 test_unusedLocalVariable_isInvoked() async { |
| 3523 enableUnusedLocalVariable = true; | 3798 enableUnusedLocalVariable = true; |
| 3524 Source source = addSource(r''' | 3799 Source source = addSource(r''' |
| 3525 typedef Foo(); | 3800 typedef Foo(); |
| 3526 main() { | 3801 main() { |
| 3527 Foo foo; | 3802 Foo foo; |
| 3528 foo(); | 3803 foo(); |
| 3529 }'''); | 3804 }'''); |
| 3530 await assertErrors(source); | 3805 await computeAnalysisResult(source); |
| 3806 assertErrors(source); |
| 3531 verify([source]); | 3807 verify([source]); |
| 3532 } | 3808 } |
| 3533 | 3809 |
| 3534 test_unusedLocalVariable_isRead_notUsed_compoundAssign() async { | 3810 test_unusedLocalVariable_isRead_notUsed_compoundAssign() async { |
| 3535 enableUnusedLocalVariable = true; | 3811 enableUnusedLocalVariable = true; |
| 3536 Source source = addSource(r''' | 3812 Source source = addSource(r''' |
| 3537 main() { | 3813 main() { |
| 3538 var v = 1; | 3814 var v = 1; |
| 3539 v += 2; | 3815 v += 2; |
| 3540 }'''); | 3816 }'''); |
| 3541 await assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]); | 3817 await computeAnalysisResult(source); |
| 3818 assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]); |
| 3542 verify([source]); | 3819 verify([source]); |
| 3543 } | 3820 } |
| 3544 | 3821 |
| 3545 test_unusedLocalVariable_isRead_notUsed_postfixExpr() async { | 3822 test_unusedLocalVariable_isRead_notUsed_postfixExpr() async { |
| 3546 enableUnusedLocalVariable = true; | 3823 enableUnusedLocalVariable = true; |
| 3547 Source source = addSource(r''' | 3824 Source source = addSource(r''' |
| 3548 main() { | 3825 main() { |
| 3549 var v = 1; | 3826 var v = 1; |
| 3550 v++; | 3827 v++; |
| 3551 }'''); | 3828 }'''); |
| 3552 await assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]); | 3829 await computeAnalysisResult(source); |
| 3830 assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]); |
| 3553 verify([source]); | 3831 verify([source]); |
| 3554 } | 3832 } |
| 3555 | 3833 |
| 3556 test_unusedLocalVariable_isRead_notUsed_prefixExpr() async { | 3834 test_unusedLocalVariable_isRead_notUsed_prefixExpr() async { |
| 3557 enableUnusedLocalVariable = true; | 3835 enableUnusedLocalVariable = true; |
| 3558 Source source = addSource(r''' | 3836 Source source = addSource(r''' |
| 3559 main() { | 3837 main() { |
| 3560 var v = 1; | 3838 var v = 1; |
| 3561 ++v; | 3839 ++v; |
| 3562 }'''); | 3840 }'''); |
| 3563 await assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]); | 3841 await computeAnalysisResult(source); |
| 3842 assertErrors(source, [HintCode.UNUSED_LOCAL_VARIABLE]); |
| 3564 verify([source]); | 3843 verify([source]); |
| 3565 } | 3844 } |
| 3566 | 3845 |
| 3567 test_unusedLocalVariable_isRead_usedArgument() async { | 3846 test_unusedLocalVariable_isRead_usedArgument() async { |
| 3568 enableUnusedLocalVariable = true; | 3847 enableUnusedLocalVariable = true; |
| 3569 Source source = addSource(r''' | 3848 Source source = addSource(r''' |
| 3570 main() { | 3849 main() { |
| 3571 var v = 1; | 3850 var v = 1; |
| 3572 print(++v); | 3851 print(++v); |
| 3573 } | 3852 } |
| 3574 print(x) {}'''); | 3853 print(x) {}'''); |
| 3575 await assertErrors(source); | 3854 await computeAnalysisResult(source); |
| 3855 assertErrors(source); |
| 3576 verify([source]); | 3856 verify([source]); |
| 3577 } | 3857 } |
| 3578 | 3858 |
| 3579 test_unusedLocalVariable_isRead_usedInvocationTarget() async { | 3859 test_unusedLocalVariable_isRead_usedInvocationTarget() async { |
| 3580 enableUnusedLocalVariable = true; | 3860 enableUnusedLocalVariable = true; |
| 3581 Source source = addSource(r''' | 3861 Source source = addSource(r''' |
| 3582 class A { | 3862 class A { |
| 3583 foo() {} | 3863 foo() {} |
| 3584 } | 3864 } |
| 3585 main() { | 3865 main() { |
| 3586 var a = new A(); | 3866 var a = new A(); |
| 3587 a.foo(); | 3867 a.foo(); |
| 3588 } | 3868 } |
| 3589 '''); | 3869 '''); |
| 3590 await assertErrors(source); | 3870 await computeAnalysisResult(source); |
| 3871 assertErrors(source); |
| 3591 verify([source]); | 3872 verify([source]); |
| 3592 } | 3873 } |
| 3593 | 3874 |
| 3594 test_unusedShownName() async { | 3875 test_unusedShownName() async { |
| 3595 Source source = addSource(r''' | 3876 Source source = addSource(r''' |
| 3596 library L; | 3877 library L; |
| 3597 import 'lib1.dart' show A, B; | 3878 import 'lib1.dart' show A, B; |
| 3598 A a;'''); | 3879 A a;'''); |
| 3599 Source source2 = addNamedSource( | 3880 Source source2 = addNamedSource( |
| 3600 "/lib1.dart", | 3881 "/lib1.dart", |
| 3601 r''' | 3882 r''' |
| 3602 library lib1; | 3883 library lib1; |
| 3603 class A {} | 3884 class A {} |
| 3604 class B {}'''); | 3885 class B {}'''); |
| 3605 await assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]); | 3886 await computeAnalysisResult(source); |
| 3606 await assertNoErrors(source2); | 3887 await computeAnalysisResult(source2); |
| 3888 assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]); |
| 3889 assertNoErrors(source2); |
| 3607 verify([source, source2]); | 3890 verify([source, source2]); |
| 3608 } | 3891 } |
| 3609 | 3892 |
| 3610 test_unusedShownName_as() async { | 3893 test_unusedShownName_as() async { |
| 3611 Source source = addSource(r''' | 3894 Source source = addSource(r''' |
| 3612 library L; | 3895 library L; |
| 3613 import 'lib1.dart' as p show A, B; | 3896 import 'lib1.dart' as p show A, B; |
| 3614 p.A a;'''); | 3897 p.A a;'''); |
| 3615 Source source2 = addNamedSource( | 3898 Source source2 = addNamedSource( |
| 3616 "/lib1.dart", | 3899 "/lib1.dart", |
| 3617 r''' | 3900 r''' |
| 3618 library lib1; | 3901 library lib1; |
| 3619 class A {} | 3902 class A {} |
| 3620 class B {}'''); | 3903 class B {}'''); |
| 3621 await assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]); | 3904 await computeAnalysisResult(source); |
| 3622 await assertNoErrors(source2); | 3905 await computeAnalysisResult(source2); |
| 3906 assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]); |
| 3907 assertNoErrors(source2); |
| 3623 verify([source, source2]); | 3908 verify([source, source2]); |
| 3624 } | 3909 } |
| 3625 | 3910 |
| 3626 test_unusedShownName_duplicates() async { | 3911 test_unusedShownName_duplicates() async { |
| 3627 Source source = addSource(r''' | 3912 Source source = addSource(r''' |
| 3628 library L; | 3913 library L; |
| 3629 import 'lib1.dart' show A, B; | 3914 import 'lib1.dart' show A, B; |
| 3630 import 'lib1.dart' show C, D; | 3915 import 'lib1.dart' show C, D; |
| 3631 A a; | 3916 A a; |
| 3632 C c;'''); | 3917 C c;'''); |
| 3633 Source source2 = addNamedSource( | 3918 Source source2 = addNamedSource( |
| 3634 "/lib1.dart", | 3919 "/lib1.dart", |
| 3635 r''' | 3920 r''' |
| 3636 library lib1; | 3921 library lib1; |
| 3637 class A {} | 3922 class A {} |
| 3638 class B {} | 3923 class B {} |
| 3639 class C {} | 3924 class C {} |
| 3640 class D {}'''); | 3925 class D {}'''); |
| 3641 await assertErrors( | 3926 await computeAnalysisResult(source); |
| 3927 await computeAnalysisResult(source2); |
| 3928 assertErrors( |
| 3642 source, [HintCode.UNUSED_SHOWN_NAME, HintCode.UNUSED_SHOWN_NAME]); | 3929 source, [HintCode.UNUSED_SHOWN_NAME, HintCode.UNUSED_SHOWN_NAME]); |
| 3643 await assertNoErrors(source2); | 3930 assertNoErrors(source2); |
| 3644 verify([source, source2]); | 3931 verify([source, source2]); |
| 3645 } | 3932 } |
| 3646 | 3933 |
| 3647 test_unusedShownName_topLevelVariable() async { | 3934 test_unusedShownName_topLevelVariable() async { |
| 3648 Source source = addSource(r''' | 3935 Source source = addSource(r''' |
| 3649 library L; | 3936 library L; |
| 3650 import 'lib1.dart' show var1, var2; | 3937 import 'lib1.dart' show var1, var2; |
| 3651 import 'lib1.dart' show var3, var4; | 3938 import 'lib1.dart' show var3, var4; |
| 3652 int a = var1; | 3939 int a = var1; |
| 3653 int b = var2; | 3940 int b = var2; |
| 3654 int c = var3;'''); | 3941 int c = var3;'''); |
| 3655 Source source2 = addNamedSource( | 3942 Source source2 = addNamedSource( |
| 3656 "/lib1.dart", | 3943 "/lib1.dart", |
| 3657 r''' | 3944 r''' |
| 3658 library lib1; | 3945 library lib1; |
| 3659 const int var1 = 1; | 3946 const int var1 = 1; |
| 3660 const int var2 = 2; | 3947 const int var2 = 2; |
| 3661 const int var3 = 3; | 3948 const int var3 = 3; |
| 3662 const int var4 = 4;'''); | 3949 const int var4 = 4;'''); |
| 3663 await assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]); | 3950 await computeAnalysisResult(source); |
| 3664 await assertNoErrors(source2); | 3951 await computeAnalysisResult(source2); |
| 3952 assertErrors(source, [HintCode.UNUSED_SHOWN_NAME]); |
| 3953 assertNoErrors(source2); |
| 3665 verify([source, source2]); | 3954 verify([source, source2]); |
| 3666 } | 3955 } |
| 3667 | 3956 |
| 3668 test_useOfVoidResult_assignmentExpression_function() async { | 3957 test_useOfVoidResult_assignmentExpression_function() async { |
| 3669 Source source = addSource(r''' | 3958 Source source = addSource(r''' |
| 3670 void f() {} | 3959 void f() {} |
| 3671 class A { | 3960 class A { |
| 3672 n() { | 3961 n() { |
| 3673 var a; | 3962 var a; |
| 3674 a = f(); | 3963 a = f(); |
| 3675 } | 3964 } |
| 3676 }'''); | 3965 }'''); |
| 3677 await assertErrors(source, [HintCode.USE_OF_VOID_RESULT]); | 3966 await computeAnalysisResult(source); |
| 3967 assertErrors(source, [HintCode.USE_OF_VOID_RESULT]); |
| 3678 verify([source]); | 3968 verify([source]); |
| 3679 } | 3969 } |
| 3680 | 3970 |
| 3681 test_useOfVoidResult_assignmentExpression_method() async { | 3971 test_useOfVoidResult_assignmentExpression_method() async { |
| 3682 Source source = addSource(r''' | 3972 Source source = addSource(r''' |
| 3683 class A { | 3973 class A { |
| 3684 void m() {} | 3974 void m() {} |
| 3685 n() { | 3975 n() { |
| 3686 var a; | 3976 var a; |
| 3687 a = m(); | 3977 a = m(); |
| 3688 } | 3978 } |
| 3689 }'''); | 3979 }'''); |
| 3690 await assertErrors(source, [HintCode.USE_OF_VOID_RESULT]); | 3980 await computeAnalysisResult(source); |
| 3981 assertErrors(source, [HintCode.USE_OF_VOID_RESULT]); |
| 3691 verify([source]); | 3982 verify([source]); |
| 3692 } | 3983 } |
| 3693 | 3984 |
| 3694 test_useOfVoidResult_inForLoop() async { | 3985 test_useOfVoidResult_inForLoop() async { |
| 3695 Source source = addSource(r''' | 3986 Source source = addSource(r''' |
| 3696 class A { | 3987 class A { |
| 3697 void m() {} | 3988 void m() {} |
| 3698 n() { | 3989 n() { |
| 3699 for(var a = m();;) {} | 3990 for(var a = m();;) {} |
| 3700 } | 3991 } |
| 3701 }'''); | 3992 }'''); |
| 3702 await assertErrors(source, [HintCode.USE_OF_VOID_RESULT]); | 3993 await computeAnalysisResult(source); |
| 3994 assertErrors(source, [HintCode.USE_OF_VOID_RESULT]); |
| 3703 verify([source]); | 3995 verify([source]); |
| 3704 } | 3996 } |
| 3705 | 3997 |
| 3706 test_useOfVoidResult_variableDeclaration_function() async { | 3998 test_useOfVoidResult_variableDeclaration_function() async { |
| 3707 Source source = addSource(r''' | 3999 Source source = addSource(r''' |
| 3708 void f() {} | 4000 void f() {} |
| 3709 class A { | 4001 class A { |
| 3710 n() { | 4002 n() { |
| 3711 var a = f(); | 4003 var a = f(); |
| 3712 } | 4004 } |
| 3713 }'''); | 4005 }'''); |
| 3714 await assertErrors(source, [HintCode.USE_OF_VOID_RESULT]); | 4006 await computeAnalysisResult(source); |
| 4007 assertErrors(source, [HintCode.USE_OF_VOID_RESULT]); |
| 3715 verify([source]); | 4008 verify([source]); |
| 3716 } | 4009 } |
| 3717 | 4010 |
| 3718 test_useOfVoidResult_variableDeclaration_method() async { | 4011 test_useOfVoidResult_variableDeclaration_method() async { |
| 3719 Source source = addSource(r''' | 4012 Source source = addSource(r''' |
| 3720 class A { | 4013 class A { |
| 3721 void m() {} | 4014 void m() {} |
| 3722 n() { | 4015 n() { |
| 3723 var a = m(); | 4016 var a = m(); |
| 3724 } | 4017 } |
| 3725 }'''); | 4018 }'''); |
| 3726 await assertErrors(source, [HintCode.USE_OF_VOID_RESULT]); | 4019 await computeAnalysisResult(source); |
| 4020 assertErrors(source, [HintCode.USE_OF_VOID_RESULT]); |
| 3727 verify([source]); | 4021 verify([source]); |
| 3728 } | 4022 } |
| 3729 | 4023 |
| 3730 test_useOfVoidResult_variableDeclaration_method2() async { | 4024 test_useOfVoidResult_variableDeclaration_method2() async { |
| 3731 Source source = addSource(r''' | 4025 Source source = addSource(r''' |
| 3732 class A { | 4026 class A { |
| 3733 void m() {} | 4027 void m() {} |
| 3734 n() { | 4028 n() { |
| 3735 var a = m(), b = m(); | 4029 var a = m(), b = m(); |
| 3736 } | 4030 } |
| 3737 }'''); | 4031 }'''); |
| 3738 await assertErrors( | 4032 await computeAnalysisResult(source); |
| 4033 assertErrors( |
| 3739 source, [HintCode.USE_OF_VOID_RESULT, HintCode.USE_OF_VOID_RESULT]); | 4034 source, [HintCode.USE_OF_VOID_RESULT, HintCode.USE_OF_VOID_RESULT]); |
| 3740 verify([source]); | 4035 verify([source]); |
| 3741 } | 4036 } |
| 3742 } | 4037 } |
| OLD | NEW |