| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 import "package:expect/expect.dart"; | 5 import 'dart:async'; |
| 6 | 6 import 'package:async_helper/async_helper.dart'; |
| 7 import "compiler_helper.dart"; | 7 import 'compiler_helper.dart'; |
| 8 import "../../../sdk/lib/_internal/compiler/implementation/resolution/class_memb
ers.dart" | 8 import '../../../sdk/lib/_internal/compiler/implementation/resolution/class_memb
ers.dart' |
| 9 show MembersCreator; | 9 show MembersCreator; |
| 10 | 10 |
| 11 main() { | 11 main() { |
| 12 testRequiredParameters(); | 12 asyncTest(() => Future.wait([ |
| 13 testPositionalParameters(); | 13 testRequiredParameters(), |
| 14 testNamedParameters(); | 14 testPositionalParameters(), |
| 15 testNotSubtype(); | 15 testNamedParameters(), |
| 16 testGetterNotSubtype(); | 16 testNotSubtype(), |
| 17 testSetterNotSubtype(); | 17 testGetterNotSubtype(), |
| 18 testGenericNotSubtype(); | 18 testSetterNotSubtype(), |
| 19 testFieldNotSubtype(); | 19 testGenericNotSubtype(), |
| 20 testMixedOverride(); | 20 testFieldNotSubtype(), |
| 21 testAbstractMethods(); | 21 testMixedOverride(), |
| 22 testNoSuchMethod(); | 22 testAbstractMethods(), |
| 23 testNoSuchMethod(), |
| 24 ])); |
| 23 } | 25 } |
| 24 | 26 |
| 25 check(String source, {errors, warnings, hints, infos}) { | 27 Future check(String source, {errors, warnings, hints, infos}) { |
| 26 MockCompiler compiler = new MockCompiler(); | 28 return MockCompiler.create((MockCompiler compiler) { |
| 27 compiler.diagnosticHandler = createHandler(compiler, source); | 29 compiler.diagnosticHandler = createHandler(compiler, source); |
| 28 compiler.parseScript(source); | 30 compiler.parseScript(source); |
| 29 var cls = compiler.mainApp.find('Class'); | 31 var cls = compiler.mainApp.find('Class'); |
| 30 cls.ensureResolved(compiler); | 32 cls.ensureResolved(compiler); |
| 31 MembersCreator.computeAllClassMembers(compiler, cls); | 33 MembersCreator.computeAllClassMembers(compiler, cls); |
| 32 | 34 |
| 33 toList(o) => o == null ? [] : o is List ? o : [o]; | 35 toList(o) => o == null ? [] : o is List ? o : [o]; |
| 34 | 36 |
| 35 compareMessageKinds(source, toList(errors), compiler.errors, 'error'); | 37 compareMessageKinds(source, toList(errors), compiler.errors, 'error'); |
| 36 | 38 |
| 37 compareMessageKinds(source, toList(warnings), compiler.warnings, 'warning'); | 39 compareMessageKinds(source, toList(warnings), compiler.warnings, 'warning'); |
| 38 | 40 |
| 39 if (infos != null) { | 41 if (infos != null) { |
| 40 compareMessageKinds(source, toList(infos), compiler.infos, 'info'); | 42 compareMessageKinds(source, toList(infos), compiler.infos, 'info'); |
| 41 } | 43 } |
| 42 | 44 |
| 43 if (hints != null) { | 45 if (hints != null) { |
| 44 compareMessageKinds(source, toList(hints), compiler.hints, 'hint'); | 46 compareMessageKinds(source, toList(hints), compiler.hints, 'hint'); |
| 45 } | 47 } |
| 48 }); |
| 46 } | 49 } |
| 47 | 50 |
| 48 testRequiredParameters() { | 51 Future testRequiredParameters() { |
| 49 check(""" | 52 return Future.wait([ |
| 50 class A { | 53 check(""" |
| 51 method() => null; // testRequiredParameters:0 | 54 class A { |
| 52 } | 55 method() => null; // testRequiredParameters:0 |
| 53 class Class extends A { | 56 } |
| 54 method() => null; // testRequiredParameters:1 | 57 class Class extends A { |
| 55 } | 58 method() => null; // testRequiredParameters:1 |
| 56 """); | 59 } |
| 57 | 60 """), |
| 58 check(""" | 61 |
| 59 class A { | 62 check(""" |
| 60 method(a) => null; // testRequiredParameters:2 | 63 class A { |
| 61 } | 64 method(a) => null; // testRequiredParameters:2 |
| 62 class Class extends A { | 65 } |
| 63 method(b) => null; // testRequiredParameters:3 | 66 class Class extends A { |
| 64 } | 67 method(b) => null; // testRequiredParameters:3 |
| 65 """); | 68 } |
| 66 | 69 """), |
| 67 check(""" | 70 |
| 68 class A { | 71 check(""" |
| 69 method(a, b, c, d) => null; // testRequiredParameters:3 | 72 class A { |
| 70 } | 73 method(a, b, c, d) => null; // testRequiredParameters:3 |
| 71 class Class extends A { | 74 } |
| 72 method(b, a, d, c) => null; // testRequiredParameters:4 | 75 class Class extends A { |
| 73 } | 76 method(b, a, d, c) => null; // testRequiredParameters:4 |
| 74 """); | 77 } |
| 75 | 78 """), |
| 76 check(""" | 79 |
| 77 class A { | 80 check(""" |
| 78 method() => null; // testRequiredParameters:5 | 81 class A { |
| 79 } | 82 method() => null; // testRequiredParameters:5 |
| 80 class Class extends A { | 83 } |
| 81 method(a) => null; // testRequiredParameters:6 | 84 class Class extends A { |
| 82 } | 85 method(a) => null; // testRequiredParameters:6 |
| 83 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 86 } |
| 84 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 87 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 85 | 88 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 86 check(""" | 89 |
| 87 class A { | 90 check(""" |
| 88 method() => null; // testRequiredParameters:7 | 91 class A { |
| 89 } | 92 method() => null; // testRequiredParameters:7 |
| 90 class Class implements A { | 93 } |
| 91 method(a) => null; // testRequiredParameters:8 | 94 class Class implements A { |
| 92 } | 95 method(a) => null; // testRequiredParameters:8 |
| 93 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 96 } |
| 94 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 97 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 95 | 98 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 96 check(""" | 99 |
| 97 class A { | 100 check(""" |
| 98 method(a, b, c) => null; // testRequiredParameters:9 | 101 class A { |
| 99 } | 102 method(a, b, c) => null; // testRequiredParameters:9 |
| 100 class Class extends A { | 103 } |
| 101 method(a, b, c, d) => null; // testRequiredParameters:10 | 104 class Class extends A { |
| 102 } | 105 method(a, b, c, d) => null; // testRequiredParameters:10 |
| 103 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 106 } |
| 104 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 107 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 108 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 109 ]); |
| 105 } | 110 } |
| 106 | 111 |
| 107 testPositionalParameters() { | 112 Future testPositionalParameters() { |
| 108 check(""" | 113 return Future.wait([ |
| 109 class A { | 114 check(""" |
| 110 method([a]) => null; // testPositionalParameters:1 | 115 class A { |
| 111 } | 116 method([a]) => null; // testPositionalParameters:1 |
| 112 class Class extends A { | 117 } |
| 113 method([a]) => null; // testPositionalParameters:2 | 118 class Class extends A { |
| 114 } | 119 method([a]) => null; // testPositionalParameters:2 |
| 115 """); | 120 } |
| 116 | 121 """), |
| 117 check(""" | 122 |
| 118 class A { | 123 check(""" |
| 119 method([a, b]) => null; // testPositionalParameters:3 | 124 class A { |
| 120 } | 125 method([a, b]) => null; // testPositionalParameters:3 |
| 121 class Class extends A { | 126 } |
| 122 method([b, a]) => null; // testPositionalParameters:4 | 127 class Class extends A { |
| 123 } | 128 method([b, a]) => null; // testPositionalParameters:4 |
| 124 """); | 129 } |
| 125 | 130 """), |
| 126 check(""" | 131 |
| 127 class A { | 132 check(""" |
| 128 method([a, b, c]) => null; // testPositionalParameters:5 | 133 class A { |
| 129 } | 134 method([a, b, c]) => null; // testPositionalParameters:5 |
| 130 class Class extends A { | 135 } |
| 131 method([b, d, a, c]) => null; // testPositionalParameters:6 | 136 class Class extends A { |
| 132 } | 137 method([b, d, a, c]) => null; // testPositionalParameters:6 |
| 133 """); | 138 } |
| 134 | 139 """), |
| 135 check(""" | 140 |
| 136 class A { | 141 check(""" |
| 137 method([a]) => null; // testPositionalParameters:7 | 142 class A { |
| 138 } | 143 method([a]) => null; // testPositionalParameters:7 |
| 139 class Class extends A { | 144 } |
| 140 method([a]) => null; // testPositionalParameters:8 | 145 class Class extends A { |
| 141 } | 146 method([a]) => null; // testPositionalParameters:8 |
| 142 """); | 147 } |
| 143 | 148 """), |
| 144 check(""" | 149 |
| 145 class A { | 150 check(""" |
| 146 method(a) => null; // testPositionalParameters:9 | 151 class A { |
| 147 } | 152 method(a) => null; // testPositionalParameters:9 |
| 148 class Class extends A { | 153 } |
| 149 method() => null; // testPositionalParameters:10 | 154 class Class extends A { |
| 150 } | 155 method() => null; // testPositionalParameters:10 |
| 151 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 156 } |
| 152 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 157 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 153 | 158 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 154 check(""" | 159 |
| 155 class A { | 160 check(""" |
| 156 method(a, [b]) => null; // testPositionalParameters:11 | 161 class A { |
| 157 } | 162 method(a, [b]) => null; // testPositionalParameters:11 |
| 158 class Class extends A { | 163 } |
| 159 method(a) => null; // testPositionalParameters:12 | 164 class Class extends A { |
| 160 } | 165 method(a) => null; // testPositionalParameters:12 |
| 161 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 166 } |
| 162 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 167 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 163 | 168 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 164 check(""" | 169 |
| 165 class A { | 170 check(""" |
| 166 method(a, [b]) => null; // testPositionalParameters:13 | 171 class A { |
| 167 } | 172 method(a, [b]) => null; // testPositionalParameters:13 |
| 168 class Class extends A { | 173 } |
| 169 method([a]) => null; // testPositionalParameters:14 | 174 class Class extends A { |
| 170 } | 175 method([a]) => null; // testPositionalParameters:14 |
| 171 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 176 } |
| 172 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 177 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 173 | 178 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 174 check(""" | 179 |
| 175 class A { | 180 check(""" |
| 176 method(a, b, [c, d, e]) => null; // testPositionalParameters:15 | 181 class A { |
| 177 } | 182 method(a, b, [c, d, e]) => null; // testPositionalParameters:15 |
| 178 class Class extends A { | 183 } |
| 179 method([a, b, c, d]) => null; // testPositionalParameters:16 | 184 class Class extends A { |
| 180 } | 185 method([a, b, c, d]) => null; // testPositionalParameters:16 |
| 181 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 186 } |
| 182 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 187 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 188 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 189 ]); |
| 183 } | 190 } |
| 184 | 191 |
| 185 testNamedParameters() { | 192 Future testNamedParameters() { |
| 186 check(""" | 193 return Future.wait([ |
| 187 class A { | 194 check(""" |
| 188 method({a}) => null; // testNamedParameters:1 | 195 class A { |
| 189 } | 196 method({a}) => null; // testNamedParameters:1 |
| 190 class Class extends A { | 197 } |
| 191 method({a}) => null; // testNamedParameters:2 | 198 class Class extends A { |
| 192 } | 199 method({a}) => null; // testNamedParameters:2 |
| 193 """); | 200 } |
| 194 | 201 """), |
| 195 check(""" | 202 |
| 196 class A { | 203 check(""" |
| 197 method({a, b}) => null; // testNamedParameters:3 | 204 class A { |
| 198 } | 205 method({a, b}) => null; // testNamedParameters:3 |
| 199 class Class extends A { | 206 } |
| 200 method({b, a}) => null; // testNamedParameters:4 | 207 class Class extends A { |
| 201 } | 208 method({b, a}) => null; // testNamedParameters:4 |
| 202 """); | 209 } |
| 203 | 210 """), |
| 204 check(""" | 211 |
| 205 class A { | 212 check(""" |
| 206 method({a, b, c}) => null; // testNamedParameters:5 | 213 class A { |
| 207 } | 214 method({a, b, c}) => null; // testNamedParameters:5 |
| 208 class Class extends A { | 215 } |
| 209 method({b, c, a, d}) => null; // testNamedParameters:6 | 216 class Class extends A { |
| 210 } | 217 method({b, c, a, d}) => null; // testNamedParameters:6 |
| 211 """); | 218 } |
| 212 | 219 """), |
| 213 check(""" | 220 |
| 214 class A { | 221 check(""" |
| 215 method(d, {a, b, c}) => null; // testNamedParameters:7 | 222 class A { |
| 216 } | 223 method(d, {a, b, c}) => null; // testNamedParameters:7 |
| 217 class Class extends A { | 224 } |
| 218 method(e, {b, c, a, d}) => null; // testNamedParameters:8 | 225 class Class extends A { |
| 219 } | 226 method(e, {b, c, a, d}) => null; // testNamedParameters:8 |
| 220 """); | 227 } |
| 221 | 228 """), |
| 222 check(""" | 229 |
| 223 class A { | 230 check(""" |
| 224 method({a}) => null; // testNamedParameters:9 | 231 class A { |
| 225 } | 232 method({a}) => null; // testNamedParameters:9 |
| 226 class Class extends A { | 233 } |
| 227 method() => null; // testNamedParameters:10 | 234 class Class extends A { |
| 228 } | 235 method() => null; // testNamedParameters:10 |
| 229 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 236 } |
| 230 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 237 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 231 | 238 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 232 check(""" | 239 |
| 233 class A { | 240 check(""" |
| 234 method({a, b}) => null; // testNamedParameters:11 | 241 class A { |
| 235 } | 242 method({a, b}) => null; // testNamedParameters:11 |
| 236 class Class extends A { | 243 } |
| 237 method({b}) => null; // testNamedParameters:12 | 244 class Class extends A { |
| 238 } | 245 method({b}) => null; // testNamedParameters:12 |
| 239 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 246 } |
| 240 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 247 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 241 | 248 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 242 check(""" | 249 |
| 243 class A { | 250 check(""" |
| 244 method({a, b, c, d}) => null; // testNamedParameters:13 | 251 class A { |
| 245 } | 252 method({a, b, c, d}) => null; // testNamedParameters:13 |
| 246 class Class extends A { | 253 } |
| 247 method({a, e, d, c}) => null; // testNamedParameters:14 | 254 class Class extends A { |
| 248 } | 255 method({a, e, d, c}) => null; // testNamedParameters:14 |
| 249 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 256 } |
| 250 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 257 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 258 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 259 ]); |
| 251 } | 260 } |
| 252 | 261 |
| 253 testNotSubtype() { | 262 Future testNotSubtype() { |
| 254 check(""" | 263 return Future.wait([ |
| 255 class A { | 264 check(""" |
| 256 method(int a) => null; // testNotSubtype:1 | 265 class A { |
| 257 } | 266 method(int a) => null; // testNotSubtype:1 |
| 258 class Class extends A { | 267 } |
| 259 method(int a) => null; // testNotSubtype:2 | 268 class Class extends A { |
| 260 } | 269 method(int a) => null; // testNotSubtype:2 |
| 261 """); | 270 } |
| 262 | 271 """), |
| 263 check(""" | 272 |
| 264 class A { | 273 check(""" |
| 265 method(int a) => null; // testNotSubtype:3 | 274 class A { |
| 266 } | 275 method(int a) => null; // testNotSubtype:3 |
| 267 class Class extends A { | 276 } |
| 268 method(num a) => null; // testNotSubtype:4 | 277 class Class extends A { |
| 269 } | 278 method(num a) => null; // testNotSubtype:4 |
| 270 """); | 279 } |
| 271 | 280 """), |
| 272 check(""" | 281 |
| 273 class A { | 282 check(""" |
| 274 void method() {} // testNotSubtype:5 | 283 class A { |
| 275 } | 284 void method() {} // testNotSubtype:5 |
| 276 class Class extends A { | 285 } |
| 277 method() => null; // testNotSubtype:6 | 286 class Class extends A { |
| 278 } | 287 method() => null; // testNotSubtype:6 |
| 279 """); | 288 } |
| 280 | 289 """), |
| 281 check(""" | 290 |
| 282 class A { | 291 check(""" |
| 283 method() => null; // testNotSubtype:7 | 292 class A { |
| 284 } | 293 method() => null; // testNotSubtype:7 |
| 285 class Class extends A { | 294 } |
| 286 void method() {} // testNotSubtype:8 | 295 class Class extends A { |
| 287 } | 296 void method() {} // testNotSubtype:8 |
| 288 """); | 297 } |
| 289 | 298 """), |
| 290 check(""" | 299 |
| 291 class A { | 300 check(""" |
| 292 void method() {} // testNotSubtype:9 | 301 class A { |
| 293 } | 302 void method() {} // testNotSubtype:9 |
| 294 class Class extends A { | 303 } |
| 295 int method() => null; // testNotSubtype:10 | 304 class Class extends A { |
| 296 } | 305 int method() => null; // testNotSubtype:10 |
| 297 """); | 306 } |
| 298 | 307 """), |
| 299 check(""" | 308 |
| 300 class A { | 309 check(""" |
| 301 int method() => null; // testNotSubtype:11 | 310 class A { |
| 302 } | 311 int method() => null; // testNotSubtype:11 |
| 303 class Class extends A { | 312 } |
| 304 void method() {} // testNotSubtype:12 | 313 class Class extends A { |
| 305 } | 314 void method() {} // testNotSubtype:12 |
| 306 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 315 } |
| 307 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 316 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 308 | 317 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 309 check(""" | 318 |
| 310 class A { | 319 check(""" |
| 311 method(int a) => null; // testNotSubtype:13 | 320 class A { |
| 312 } | 321 method(int a) => null; // testNotSubtype:13 |
| 313 class B extends A { | 322 } |
| 314 method(num a) => null; // testNotSubtype:14 | 323 class B extends A { |
| 315 } | 324 method(num a) => null; // testNotSubtype:14 |
| 316 class Class extends B { | 325 } |
| 317 method(double a) => null; // testNotSubtype:15 | 326 class Class extends B { |
| 318 } | 327 method(double a) => null; // testNotSubtype:15 |
| 319 """); | 328 } |
| 320 | 329 """), |
| 321 check(""" | 330 |
| 322 class A { | 331 check(""" |
| 323 method(int a) => null; // testNotSubtype:16 | 332 class A { |
| 324 } | 333 method(int a) => null; // testNotSubtype:16 |
| 325 class B extends A { | 334 } |
| 326 method(a) => null; // testNotSubtype:17 | 335 class B extends A { |
| 327 } | 336 method(a) => null; // testNotSubtype:17 |
| 328 class Class extends B { | 337 } |
| 329 method(String a) => null; // testNotSubtype:18 | 338 class Class extends B { |
| 330 } | 339 method(String a) => null; // testNotSubtype:18 |
| 331 """); | 340 } |
| 332 | 341 """), |
| 333 check(""" | 342 |
| 334 class A { | 343 check(""" |
| 335 method(int a) => null; // testNotSubtype:19 | 344 class A { |
| 336 } | 345 method(int a) => null; // testNotSubtype:19 |
| 337 class Class extends A { | 346 } |
| 338 method(String a) => null; // testNotSubtype:20 | 347 class Class extends A { |
| 339 } | 348 method(String a) => null; // testNotSubtype:20 |
| 340 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 349 } |
| 341 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 350 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 342 | 351 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 343 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed. | 352 |
| 344 check(""" | 353 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed. |
| 345 class A { | 354 check(""" |
| 346 method(int a) => null; // testNotSubtype:23 | 355 class A { |
| 347 } | 356 method(int a) => null; // testNotSubtype:23 |
| 348 class B { | 357 } |
| 349 method(num a) => null; // testNotSubtype:24 | 358 class B { |
| 350 } | 359 method(num a) => null; // testNotSubtype:24 |
| 351 abstract class C implements A, B { | 360 } |
| 352 } | 361 abstract class C implements A, B { |
| 353 class Class implements C { | 362 } |
| 354 method(double a) => null; // testNotSubtype:25 | 363 class Class implements C { |
| 355 } | 364 method(double a) => null; // testNotSubtype:25 |
| 356 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 365 } |
| 357 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 366 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 358 | 367 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 359 check(""" | 368 |
| 360 class A { | 369 check(""" |
| 361 method(num a) => null; // testNotSubtype:29 | 370 class A { |
| 362 } | 371 method(num a) => null; // testNotSubtype:29 |
| 363 class B { | 372 } |
| 364 method(int a) => null; // testNotSubtype:30 | 373 class B { |
| 365 } | 374 method(int a) => null; // testNotSubtype:30 |
| 366 abstract class C implements A, B { | 375 } |
| 367 } | 376 abstract class C implements A, B { |
| 368 class Class implements C { | 377 } |
| 369 method(double a) => null; // testNotSubtype:31 | 378 class Class implements C { |
| 370 } | 379 method(double a) => null; // testNotSubtype:31 |
| 371 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 380 } |
| 372 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 381 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 373 | 382 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 374 check(""" | 383 |
| 375 class A { | 384 check(""" |
| 376 method(int a) => null; // testNotSubtype:26 | 385 class A { |
| 377 } | 386 method(int a) => null; // testNotSubtype:26 |
| 378 class B { | 387 } |
| 379 method(num a) => null; // testNotSubtype:27 | 388 class B { |
| 380 } | 389 method(num a) => null; // testNotSubtype:27 |
| 381 abstract class C implements A, B { | 390 } |
| 382 } | 391 abstract class C implements A, B { |
| 383 class Class implements C { | 392 } |
| 384 method(String a) => null; // testNotSubtype:28 | 393 class Class implements C { |
| 385 } | 394 method(String a) => null; // testNotSubtype:28 |
| 386 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD, | 395 } |
| 387 MessageKind.INVALID_OVERRIDE_METHOD], | 396 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD, |
| 388 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD, | 397 MessageKind.INVALID_OVERRIDE_METHOD], |
| 389 MessageKind.INVALID_OVERRIDDEN_METHOD]); | 398 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD, |
| 399 MessageKind.INVALID_OVERRIDDEN_METHOD]), |
| 400 ]); |
| 390 } | 401 } |
| 391 | 402 |
| 392 testGetterNotSubtype() { | 403 Future testGetterNotSubtype() { |
| 393 check(""" | 404 return Future.wait([ |
| 394 class A { | 405 check(""" |
| 395 get getter => null; // testGetterNotSubtype:1 | 406 class A { |
| 396 } | 407 get getter => null; // testGetterNotSubtype:1 |
| 397 class Class extends A { | 408 } |
| 398 get getter => null; // testGetterNotSubtype:2 | 409 class Class extends A { |
| 399 } | 410 get getter => null; // testGetterNotSubtype:2 |
| 400 """); | 411 } |
| 401 | 412 """), |
| 402 check(""" | 413 |
| 403 class A { | 414 check(""" |
| 404 num get getter => null; // testGetterNotSubtype:3 | 415 class A { |
| 405 } | 416 num get getter => null; // testGetterNotSubtype:3 |
| 406 class Class extends A { | 417 } |
| 407 num get getter => null; // testGetterNotSubtype:4 | 418 class Class extends A { |
| 408 } | 419 num get getter => null; // testGetterNotSubtype:4 |
| 409 """); | 420 } |
| 410 | 421 """), |
| 411 check(""" | 422 |
| 412 class A { | 423 check(""" |
| 413 num get getter => null; // testGetterNotSubtype:5 | 424 class A { |
| 414 } | 425 num get getter => null; // testGetterNotSubtype:5 |
| 415 class Class extends A { | 426 } |
| 416 int get getter => null; // testGetterNotSubtype:6 | 427 class Class extends A { |
| 417 } | 428 int get getter => null; // testGetterNotSubtype:6 |
| 418 """); | 429 } |
| 419 | 430 """), |
| 420 check(""" | 431 |
| 421 class A { | 432 check(""" |
| 422 int get getter => null; // testGetterNotSubtype:7 | 433 class A { |
| 423 } | 434 int get getter => null; // testGetterNotSubtype:7 |
| 424 class Class extends A { | 435 } |
| 425 num get getter => null; // testGetterNotSubtype:8 | 436 class Class extends A { |
| 426 } | 437 num get getter => null; // testGetterNotSubtype:8 |
| 427 """); | 438 } |
| 428 | 439 """), |
| 429 check(""" | 440 |
| 430 class A { | 441 check(""" |
| 431 int get getter => null; // testGetterNotSubtype:9 | 442 class A { |
| 432 } | 443 int get getter => null; // testGetterNotSubtype:9 |
| 433 class Class extends A { | 444 } |
| 434 double get getter => null; // testGetterNotSubtype:10 | 445 class Class extends A { |
| 435 } | 446 double get getter => null; // testGetterNotSubtype:10 |
| 436 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER, | 447 } |
| 437 infos: MessageKind.INVALID_OVERRIDDEN_GETTER); | 448 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER, |
| 438 | 449 infos: MessageKind.INVALID_OVERRIDDEN_GETTER), |
| 439 check(""" | 450 |
| 440 class A { | 451 check(""" |
| 441 int get getter => null; // testGetterNotSubtype:11 | 452 class A { |
| 442 } | 453 int get getter => null; // testGetterNotSubtype:11 |
| 443 class B extends A { | 454 } |
| 444 num get getter => null; // testGetterNotSubtype:12 | 455 class B extends A { |
| 445 } | 456 num get getter => null; // testGetterNotSubtype:12 |
| 446 class Class extends B { | 457 } |
| 447 double get getter => null; // testGetterNotSubtype:13 | 458 class Class extends B { |
| 448 } | 459 double get getter => null; // testGetterNotSubtype:13 |
| 449 """); | 460 } |
| 450 | 461 """), |
| 451 check(""" | 462 |
| 452 class A { | 463 check(""" |
| 453 int get getter => null; // testGetterNotSubtype:14 | 464 class A { |
| 454 } | 465 int get getter => null; // testGetterNotSubtype:14 |
| 455 class B { | 466 } |
| 456 num get getter => null; // testGetterNotSubtype:15 | 467 class B { |
| 457 } | 468 num get getter => null; // testGetterNotSubtype:15 |
| 458 class Class extends A implements B { | 469 } |
| 459 double get getter => null; // testGetterNotSubtype:16 | 470 class Class extends A implements B { |
| 460 } | 471 double get getter => null; // testGetterNotSubtype:16 |
| 461 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER, | 472 } |
| 462 infos: MessageKind.INVALID_OVERRIDDEN_GETTER); | 473 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER, |
| 463 | 474 infos: MessageKind.INVALID_OVERRIDDEN_GETTER), |
| 464 check(""" | 475 |
| 465 class A { | 476 check(""" |
| 466 int get getter => null; // testGetterNotSubtype:17 | 477 class A { |
| 467 } | 478 int get getter => null; // testGetterNotSubtype:17 |
| 468 class B { | 479 } |
| 469 String get getter => null; // testGetterNotSubtype:18 | 480 class B { |
| 470 } | 481 String get getter => null; // testGetterNotSubtype:18 |
| 471 class Class extends A implements B { | 482 } |
| 472 double get getter => null; // testGetterNotSubtype:19 | 483 class Class extends A implements B { |
| 473 } | 484 double get getter => null; // testGetterNotSubtype:19 |
| 474 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER, | 485 } |
| 475 MessageKind.INVALID_OVERRIDE_GETTER], | 486 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER, |
| 476 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER, | 487 MessageKind.INVALID_OVERRIDE_GETTER], |
| 477 MessageKind.INVALID_OVERRIDDEN_GETTER]); | 488 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER, |
| 478 | 489 MessageKind.INVALID_OVERRIDDEN_GETTER]), |
| 479 check(""" | 490 |
| 480 class A { | 491 check(""" |
| 481 int get getter => null; // testGetterNotSubtype:20 | 492 class A { |
| 482 } | 493 int get getter => null; // testGetterNotSubtype:20 |
| 483 class B { | 494 } |
| 484 String get getter => null; // testGetterNotSubtype:21 | 495 class B { |
| 485 } | 496 String get getter => null; // testGetterNotSubtype:21 |
| 486 class Class implements A, B { | 497 } |
| 487 double get getter => null; // testGetterNotSubtype:22 | 498 class Class implements A, B { |
| 488 } | 499 double get getter => null; // testGetterNotSubtype:22 |
| 489 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER, | 500 } |
| 490 MessageKind.INVALID_OVERRIDE_GETTER], | 501 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER, |
| 491 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER, | 502 MessageKind.INVALID_OVERRIDE_GETTER], |
| 492 MessageKind.INVALID_OVERRIDDEN_GETTER]); | 503 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER, |
| 493 | 504 MessageKind.INVALID_OVERRIDDEN_GETTER]), |
| 494 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed. | 505 |
| 495 check(""" | 506 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed. |
| 496 class A { | 507 check(""" |
| 497 int get getter => null; // testGetterNotSubtype:23 | 508 class A { |
| 498 } | 509 int get getter => null; // testGetterNotSubtype:23 |
| 499 class B { | 510 } |
| 500 num get getter => null; // testGetterNotSubtype:24 | 511 class B { |
| 501 } | 512 num get getter => null; // testGetterNotSubtype:24 |
| 502 abstract class C implements A, B { | 513 } |
| 503 } | 514 abstract class C implements A, B { |
| 504 class Class implements C { | 515 } |
| 505 double get getter => null; // testGetterNotSubtype:25 | 516 class Class implements C { |
| 506 } | 517 double get getter => null; // testGetterNotSubtype:25 |
| 507 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER, | 518 } |
| 508 infos: MessageKind.INVALID_OVERRIDDEN_GETTER); | 519 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER, |
| 509 | 520 infos: MessageKind.INVALID_OVERRIDDEN_GETTER), |
| 510 check(""" | 521 |
| 511 class A { | 522 check(""" |
| 512 int get getter => null; // testGetterNotSubtype:26 | 523 class A { |
| 513 } | 524 int get getter => null; // testGetterNotSubtype:26 |
| 514 class B { | 525 } |
| 515 num get getter => null; // testGetterNotSubtype:27 | 526 class B { |
| 516 } | 527 num get getter => null; // testGetterNotSubtype:27 |
| 517 abstract class C implements A, B { | 528 } |
| 518 } | 529 abstract class C implements A, B { |
| 519 class Class implements C { | 530 } |
| 520 String get getter => null; // testGetterNotSubtype:28 | 531 class Class implements C { |
| 521 } | 532 String get getter => null; // testGetterNotSubtype:28 |
| 522 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER, | 533 } |
| 523 MessageKind.INVALID_OVERRIDE_GETTER], | 534 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER, |
| 524 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER, | 535 MessageKind.INVALID_OVERRIDE_GETTER], |
| 525 MessageKind.INVALID_OVERRIDDEN_GETTER]); | 536 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER, |
| 537 MessageKind.INVALID_OVERRIDDEN_GETTER]), |
| 538 ]); |
| 526 } | 539 } |
| 527 | 540 |
| 528 testGenericNotSubtype() { | 541 Future testGenericNotSubtype() { |
| 529 check(""" | 542 return Future.wait([ |
| 530 class A<T> { | 543 check(""" |
| 531 method(T t) => null; // testGenericNotSubtype:1 | 544 class A<T> { |
| 532 } | 545 method(T t) => null; // testGenericNotSubtype:1 |
| 533 class Class<S> extends A<S> { | 546 } |
| 534 method(S s) => null; // testGenericNotSubtype:2 | 547 class Class<S> extends A<S> { |
| 535 } | 548 method(S s) => null; // testGenericNotSubtype:2 |
| 536 """); | 549 } |
| 537 | 550 """), |
| 538 check(""" | 551 |
| 539 class A<T> { | 552 check(""" |
| 540 method(T t) => null; // testGenericNotSubtype:3 | 553 class A<T> { |
| 541 } | 554 method(T t) => null; // testGenericNotSubtype:3 |
| 542 class Class extends A<num> { | 555 } |
| 543 method(int i) => null; // testGenericNotSubtype:4 | 556 class Class extends A<num> { |
| 544 } | 557 method(int i) => null; // testGenericNotSubtype:4 |
| 545 """); | 558 } |
| 546 | 559 """), |
| 547 check(""" | 560 |
| 548 class A<T> { | 561 check(""" |
| 549 method(T t) => null; // testGenericNotSubtype:5 | 562 class A<T> { |
| 550 } | 563 method(T t) => null; // testGenericNotSubtype:5 |
| 551 class B<S> { | 564 } |
| 552 method(S s) => null; // testGenericNotSubtype:6 | 565 class B<S> { |
| 553 } | 566 method(S s) => null; // testGenericNotSubtype:6 |
| 554 class Class extends A<double> implements B<int> { | 567 } |
| 555 method(num i) => null; // testGenericNotSubtype:7 | 568 class Class extends A<double> implements B<int> { |
| 556 } | 569 method(num i) => null; // testGenericNotSubtype:7 |
| 557 """); | 570 } |
| 558 | 571 """), |
| 559 check(""" | 572 |
| 560 class A<T> { | 573 check(""" |
| 561 method(T t) => null; // testGenericNotSubtype:8 | 574 class A<T> { |
| 562 } | 575 method(T t) => null; // testGenericNotSubtype:8 |
| 563 class Class<S> extends A<S> { | 576 } |
| 564 method(int i) => null; // testGenericNotSubtype:9 | 577 class Class<S> extends A<S> { |
| 565 } | 578 method(int i) => null; // testGenericNotSubtype:9 |
| 566 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 579 } |
| 567 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 580 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 568 | 581 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 569 check(""" | 582 |
| 570 class A<T> { | 583 check(""" |
| 571 method(T t) => null; // testGenericNotSubtype:10 | 584 class A<T> { |
| 572 } | 585 method(T t) => null; // testGenericNotSubtype:10 |
| 573 class B<S> extends A<S> { | 586 } |
| 574 | 587 class B<S> extends A<S> { |
| 575 } | 588 |
| 576 class Class<U> extends B<U> { | 589 } |
| 577 method(U u) => null; // testGenericNotSubtype:11 | 590 class Class<U> extends B<U> { |
| 578 } | 591 method(U u) => null; // testGenericNotSubtype:11 |
| 579 """); | 592 } |
| 580 | 593 """), |
| 581 check(""" | 594 |
| 582 class A<T> { | 595 check(""" |
| 583 method(T t) => null; // testGenericNotSubtype:12 | 596 class A<T> { |
| 584 } | 597 method(T t) => null; // testGenericNotSubtype:12 |
| 585 class B<S> { | 598 } |
| 586 method(S s) => null; // testGenericNotSubtype:13 | 599 class B<S> { |
| 587 } | 600 method(S s) => null; // testGenericNotSubtype:13 |
| 588 class Class<U> extends A<U> implements B<num> { | 601 } |
| 589 method(int i) => null; // testGenericNotSubtype:14 | 602 class Class<U> extends A<U> implements B<num> { |
| 590 } | 603 method(int i) => null; // testGenericNotSubtype:14 |
| 591 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 604 } |
| 592 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 605 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 593 | 606 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 594 check(""" | 607 |
| 595 class A<T> { | 608 check(""" |
| 596 method(T t) => null; // testGenericNotSubtype:15 | 609 class A<T> { |
| 597 } | 610 method(T t) => null; // testGenericNotSubtype:15 |
| 598 class B<S> { | 611 } |
| 599 method(S s) => null; // testGenericNotSubtype:16 | 612 class B<S> { |
| 600 } | 613 method(S s) => null; // testGenericNotSubtype:16 |
| 601 class Class extends A<int> implements B<String> { | 614 } |
| 602 method(double d) => null; // testGenericNotSubtype:17 | 615 class Class extends A<int> implements B<String> { |
| 603 } | 616 method(double d) => null; // testGenericNotSubtype:17 |
| 604 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD, | 617 } |
| 605 MessageKind.INVALID_OVERRIDE_METHOD], | 618 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD, |
| 606 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD, | 619 MessageKind.INVALID_OVERRIDE_METHOD], |
| 607 MessageKind.INVALID_OVERRIDDEN_METHOD]); | 620 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD, |
| 608 | 621 MessageKind.INVALID_OVERRIDDEN_METHOD]), |
| 609 check(""" | 622 |
| 610 class A<T> { | 623 check(""" |
| 611 method(T t) => null; // testGenericNotSubtype:18 | 624 class A<T> { |
| 612 } | 625 method(T t) => null; // testGenericNotSubtype:18 |
| 613 class B<S> { | 626 } |
| 614 method(S s) => null; // testGenericNotSubtype:19 | 627 class B<S> { |
| 615 } | 628 method(S s) => null; // testGenericNotSubtype:19 |
| 616 class Class implements A<int>, B<String> { | 629 } |
| 617 method(double d) => null; // testGenericNotSubtype:20 | 630 class Class implements A<int>, B<String> { |
| 618 } | 631 method(double d) => null; // testGenericNotSubtype:20 |
| 619 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD, | 632 } |
| 620 MessageKind.INVALID_OVERRIDE_METHOD], | 633 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD, |
| 621 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD, | 634 MessageKind.INVALID_OVERRIDE_METHOD], |
| 622 MessageKind.INVALID_OVERRIDDEN_METHOD]); | 635 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD, |
| 623 | 636 MessageKind.INVALID_OVERRIDDEN_METHOD]), |
| 624 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed. | 637 |
| 625 check(""" | 638 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed. |
| 626 class A<T> { | 639 check(""" |
| 627 method(T t) => null; // testGenericNotSubtype:21 | 640 class A<T> { |
| 628 } | 641 method(T t) => null; // testGenericNotSubtype:21 |
| 629 class B<S> { | 642 } |
| 630 method(S s) => null; // testGenericNotSubtype:22 | 643 class B<S> { |
| 631 } | 644 method(S s) => null; // testGenericNotSubtype:22 |
| 632 abstract class C implements A<int>, B<num> { | 645 } |
| 633 } | 646 abstract class C implements A<int>, B<num> { |
| 634 class Class implements C { | 647 } |
| 635 method(double d) => null; // testGenericNotSubtype:23 | 648 class Class implements C { |
| 636 } | 649 method(double d) => null; // testGenericNotSubtype:23 |
| 637 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, | 650 } |
| 638 infos: MessageKind.INVALID_OVERRIDDEN_METHOD); | 651 """, warnings: MessageKind.INVALID_OVERRIDE_METHOD, |
| 639 | 652 infos: MessageKind.INVALID_OVERRIDDEN_METHOD), |
| 640 check(""" | 653 |
| 641 class A<T> { | 654 check(""" |
| 642 method(T t) => null; // testGenericNotSubtype:24 | 655 class A<T> { |
| 643 } | 656 method(T t) => null; // testGenericNotSubtype:24 |
| 644 class B<S> { | 657 } |
| 645 method(S s) => null; // testGenericNotSubtype:25 | 658 class B<S> { |
| 646 } | 659 method(S s) => null; // testGenericNotSubtype:25 |
| 647 abstract class C implements A<int>, B<num> { | 660 } |
| 648 } | 661 abstract class C implements A<int>, B<num> { |
| 649 class Class implements C { | 662 } |
| 650 method(String s) => null; // testGenericNotSubtype:26 | 663 class Class implements C { |
| 651 } | 664 method(String s) => null; // testGenericNotSubtype:26 |
| 652 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD, | 665 } |
| 653 MessageKind.INVALID_OVERRIDE_METHOD], | 666 """, warnings: [MessageKind.INVALID_OVERRIDE_METHOD, |
| 654 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD, | 667 MessageKind.INVALID_OVERRIDE_METHOD], |
| 655 MessageKind.INVALID_OVERRIDDEN_METHOD]); | 668 infos: [MessageKind.INVALID_OVERRIDDEN_METHOD, |
| 669 MessageKind.INVALID_OVERRIDDEN_METHOD]), |
| 670 ]); |
| 656 } | 671 } |
| 657 | 672 |
| 658 testSetterNotSubtype() { | 673 Future testSetterNotSubtype() { |
| 674 return Future.wait([ |
| 659 check(""" | 675 check(""" |
| 660 class A { | 676 class A { |
| 661 set setter(_) => null; // testSetterNotSubtype:1 | 677 set setter(_) => null; // testSetterNotSubtype:1 |
| 662 } | 678 } |
| 663 class Class extends A { | 679 class Class extends A { |
| 664 set setter(_) => null; // testSetterNotSubtype:2 | 680 set setter(_) => null; // testSetterNotSubtype:2 |
| 665 } | 681 } |
| 666 """); | 682 """), |
| 667 | 683 |
| 668 check(""" | 684 check(""" |
| 669 class A { | 685 class A { |
| 670 void set setter(_) {} // testSetterNotSubtype:3 | 686 void set setter(_) {} // testSetterNotSubtype:3 |
| 671 } | 687 } |
| 672 class Class extends A { | 688 class Class extends A { |
| 673 set setter(_) => null; // testSetterNotSubtype:4 | 689 set setter(_) => null; // testSetterNotSubtype:4 |
| 674 } | 690 } |
| 675 """); | 691 """), |
| 676 | 692 |
| 677 check(""" | 693 check(""" |
| 678 class A { | 694 class A { |
| 679 set setter(_) => null; // testSetterNotSubtype:5 | 695 set setter(_) => null; // testSetterNotSubtype:5 |
| 680 } | 696 } |
| 681 class Class extends A { | 697 class Class extends A { |
| 682 void set setter(_) {} // testSetterNotSubtype:6 | 698 void set setter(_) {} // testSetterNotSubtype:6 |
| 683 } | 699 } |
| 684 """); | 700 """), |
| 685 | 701 |
| 686 check(""" | 702 check(""" |
| 687 class A { | 703 class A { |
| 688 set setter(_) => null; // testSetterNotSubtype:7 | 704 set setter(_) => null; // testSetterNotSubtype:7 |
| 689 } | 705 } |
| 690 class Class extends A { | 706 class Class extends A { |
| 691 void set setter(_) {} // testSetterNotSubtype:8 | 707 void set setter(_) {} // testSetterNotSubtype:8 |
| 692 } | 708 } |
| 693 """); | 709 """), |
| 694 | 710 |
| 695 check(""" | 711 check(""" |
| 696 class A { | 712 class A { |
| 697 set setter(num _) => null; // testSetterNotSubtype:9 | 713 set setter(num _) => null; // testSetterNotSubtype:9 |
| 698 } | 714 } |
| 699 class Class extends A { | 715 class Class extends A { |
| 700 set setter(num _) => null; // testSetterNotSubtype:10 | 716 set setter(num _) => null; // testSetterNotSubtype:10 |
| 701 } | 717 } |
| 702 """); | 718 """), |
| 703 | 719 |
| 704 check(""" | 720 check(""" |
| 705 class A { | 721 class A { |
| 706 set setter(num _) => null; // testSetterNotSubtype:11 | 722 set setter(num _) => null; // testSetterNotSubtype:11 |
| 707 } | 723 } |
| 708 class Class extends A { | 724 class Class extends A { |
| 709 set setter(int _) => null; // testSetterNotSubtype:12 | 725 set setter(int _) => null; // testSetterNotSubtype:12 |
| 710 } | 726 } |
| 711 """); | 727 """), |
| 712 | 728 |
| 713 check(""" | 729 check(""" |
| 714 class A { | 730 class A { |
| 715 set setter(int _) => null; // testSetterNotSubtype:13 | 731 set setter(int _) => null; // testSetterNotSubtype:13 |
| 716 } | 732 } |
| 717 class Class extends A { | 733 class Class extends A { |
| 718 set setter(num _) => null; // testSetterNotSubtype:14 | 734 set setter(num _) => null; // testSetterNotSubtype:14 |
| 719 } | 735 } |
| 720 """); | 736 """), |
| 721 | 737 |
| 722 check(""" | 738 check(""" |
| 723 class A { | 739 class A { |
| 724 set setter(int _) => null; // testSetterNotSubtype:15 | 740 set setter(int _) => null; // testSetterNotSubtype:15 |
| 725 } | 741 } |
| 726 class Class extends A { | 742 class Class extends A { |
| 727 set setter(double _) => null; // testSetterNotSubtype:16 | 743 set setter(double _) => null; // testSetterNotSubtype:16 |
| 728 } | 744 } |
| 729 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER, | 745 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER, |
| 730 infos: MessageKind.INVALID_OVERRIDDEN_SETTER); | 746 infos: MessageKind.INVALID_OVERRIDDEN_SETTER), |
| 731 | 747 |
| 732 check(""" | 748 check(""" |
| 733 class A { | 749 class A { |
| 734 set setter(int _) => null; // testSetterNotSubtype:17 | 750 set setter(int _) => null; // testSetterNotSubtype:17 |
| 735 } | 751 } |
| 736 class B extends A { | 752 class B extends A { |
| 737 set setter(num _) => null; // testSetterNotSubtype:18 | 753 set setter(num _) => null; // testSetterNotSubtype:18 |
| 738 } | 754 } |
| 739 class Class extends B { | 755 class Class extends B { |
| 740 set setter(double _) => null; // testSetterNotSubtype:19 | 756 set setter(double _) => null; // testSetterNotSubtype:19 |
| 741 } | 757 } |
| 742 """); | 758 """), |
| 743 | 759 |
| 744 check(""" | 760 check(""" |
| 745 class A { | 761 class A { |
| 746 set setter(int _) => null; // testSetterNotSubtype:20 | 762 set setter(int _) => null; // testSetterNotSubtype:20 |
| 747 } | 763 } |
| 748 class B { | 764 class B { |
| 749 set setter(num _) => null; // testSetterNotSubtype:21 | 765 set setter(num _) => null; // testSetterNotSubtype:21 |
| 750 } | 766 } |
| 751 class Class extends A implements B { | 767 class Class extends A implements B { |
| 752 set setter(double _) => null; // testSetterNotSubtype:22 | 768 set setter(double _) => null; // testSetterNotSubtype:22 |
| 753 } | 769 } |
| 754 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER, | 770 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER, |
| 755 infos: MessageKind.INVALID_OVERRIDDEN_SETTER); | 771 infos: MessageKind.INVALID_OVERRIDDEN_SETTER), |
| 756 | 772 |
| 757 check(""" | 773 check(""" |
| 758 class A { | 774 class A { |
| 759 set setter(int _) => null; // testSetterNotSubtype:23 | 775 set setter(int _) => null; // testSetterNotSubtype:23 |
| 760 } | 776 } |
| 761 class B { | 777 class B { |
| 762 set setter(String _) => null; // testSetterNotSubtype:24 | 778 set setter(String _) => null; // testSetterNotSubtype:24 |
| 763 } | 779 } |
| 764 class Class extends A implements B { | 780 class Class extends A implements B { |
| 765 set setter(double _) => null; // testSetterNotSubtype:25 | 781 set setter(double _) => null; // testSetterNotSubtype:25 |
| 766 } | 782 } |
| 767 """, warnings: [MessageKind.INVALID_OVERRIDE_SETTER, | 783 """, warnings: [MessageKind.INVALID_OVERRIDE_SETTER, |
| 768 MessageKind.INVALID_OVERRIDE_SETTER], | 784 MessageKind.INVALID_OVERRIDE_SETTER], |
| 769 infos: [MessageKind.INVALID_OVERRIDDEN_SETTER, | 785 infos: [MessageKind.INVALID_OVERRIDDEN_SETTER, |
| 770 MessageKind.INVALID_OVERRIDDEN_SETTER]); | 786 MessageKind.INVALID_OVERRIDDEN_SETTER]), |
| 771 | 787 |
| 772 check(""" | 788 check(""" |
| 773 class A { | 789 class A { |
| 774 set setter(int _) => null; // testSetterNotSubtype:26 | 790 set setter(int _) => null; // testSetterNotSubtype:26 |
| 775 } | 791 } |
| 776 class B { | 792 class B { |
| 777 set setter(String _) => null; // testSetterNotSubtype:27 | 793 set setter(String _) => null; // testSetterNotSubtype:27 |
| 778 } | 794 } |
| 779 class Class implements A, B { | 795 class Class implements A, B { |
| 780 set setter(double _) => null; // testSetterNotSubtype:28 | 796 set setter(double _) => null; // testSetterNotSubtype:28 |
| 781 } | 797 } |
| 782 """, warnings: [MessageKind.INVALID_OVERRIDE_SETTER, | 798 """, warnings: [MessageKind.INVALID_OVERRIDE_SETTER, |
| 783 MessageKind.INVALID_OVERRIDE_SETTER], | 799 MessageKind.INVALID_OVERRIDE_SETTER], |
| 784 infos: [MessageKind.INVALID_OVERRIDDEN_SETTER, | 800 infos: [MessageKind.INVALID_OVERRIDDEN_SETTER, |
| 785 MessageKind.INVALID_OVERRIDDEN_SETTER]); | 801 MessageKind.INVALID_OVERRIDDEN_SETTER]), |
| 786 | 802 |
| 787 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed. | 803 // TODO(johnniwinther): These are unclear. Issue 16443 has been filed. |
| 788 check(""" | 804 check(""" |
| 789 class A { | 805 class A { |
| 790 set setter(int _) => null; // testSetterNotSubtype:29 | 806 set setter(int _) => null; // testSetterNotSubtype:29 |
| 791 } | 807 } |
| 792 class B { | 808 class B { |
| 793 set setter(num _) => null; // testSetterNotSubtype:30 | 809 set setter(num _) => null; // testSetterNotSubtype:30 |
| 794 } | 810 } |
| 795 abstract class C implements A, B { | 811 abstract class C implements A, B { |
| 796 } | 812 } |
| 797 class Class implements C { | 813 class Class implements C { |
| 798 set setter(double _) => null; // testSetterNotSubtype:31 | 814 set setter(double _) => null; // testSetterNotSubtype:31 |
| 799 } | 815 } |
| 800 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER, | 816 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER, |
| 801 infos: MessageKind.INVALID_OVERRIDDEN_SETTER); | 817 infos: MessageKind.INVALID_OVERRIDDEN_SETTER), |
| 802 | 818 |
| 803 check(""" | 819 check(""" |
| 804 class A { | 820 class A { |
| 805 set setter(int _) => null; // testSetterNotSubtype:32 | 821 set setter(int _) => null; // testSetterNotSubtype:32 |
| 806 } | 822 } |
| 807 class B { | 823 class B { |
| 808 set setter(num _) => null; // testSetterNotSubtype:33 | 824 set setter(num _) => null; // testSetterNotSubtype:33 |
| 809 } | 825 } |
| 810 abstract class C implements A, B { | 826 abstract class C implements A, B { |
| 811 } | 827 } |
| 812 class Class implements C { | 828 class Class implements C { |
| 813 set setter(String _) => null; // testSetterNotSubtype:34 | 829 set setter(String _) => null; // testSetterNotSubtype:34 |
| 814 } | 830 } |
| 815 """, warnings: [MessageKind.INVALID_OVERRIDE_SETTER, | 831 """, warnings: [MessageKind.INVALID_OVERRIDE_SETTER, |
| 816 MessageKind.INVALID_OVERRIDE_SETTER], | 832 MessageKind.INVALID_OVERRIDE_SETTER], |
| 817 infos: [MessageKind.INVALID_OVERRIDDEN_SETTER, | 833 infos: [MessageKind.INVALID_OVERRIDDEN_SETTER, |
| 818 MessageKind.INVALID_OVERRIDDEN_SETTER]); | 834 MessageKind.INVALID_OVERRIDDEN_SETTER]), |
| 835 ]); |
| 819 } | 836 } |
| 820 | 837 |
| 821 testFieldNotSubtype() { | 838 Future testFieldNotSubtype() { |
| 822 check(""" | 839 return Future.wait([ |
| 823 class A { | 840 check(""" |
| 824 int field; // testFieldNotSubtype:1 | 841 class A { |
| 825 } | 842 int field; // testFieldNotSubtype:1 |
| 826 class Class extends A { | 843 } |
| 827 int field; // testFieldNotSubtype:2 | 844 class Class extends A { |
| 828 } | 845 int field; // testFieldNotSubtype:2 |
| 829 """); | 846 } |
| 830 | 847 """), |
| 831 check(""" | 848 |
| 832 class A { | 849 check(""" |
| 833 num field; // testFieldNotSubtype:3 | 850 class A { |
| 834 } | 851 num field; // testFieldNotSubtype:3 |
| 835 class Class extends A { | 852 } |
| 836 int field; // testFieldNotSubtype:4 | 853 class Class extends A { |
| 837 } | 854 int field; // testFieldNotSubtype:4 |
| 838 """); | 855 } |
| 839 | 856 """), |
| 840 check(""" | 857 |
| 841 class A { | 858 check(""" |
| 842 int field; // testFieldNotSubtype:5 | 859 class A { |
| 843 } | 860 int field; // testFieldNotSubtype:5 |
| 844 class Class extends A { | 861 } |
| 845 num field; // testFieldNotSubtype:6 | 862 class Class extends A { |
| 846 } | 863 num field; // testFieldNotSubtype:6 |
| 847 """); | 864 } |
| 848 | 865 """), |
| 849 check(""" | 866 |
| 850 class A { | 867 check(""" |
| 851 int field; // testFieldNotSubtype:7 | 868 class A { |
| 852 } | 869 int field; // testFieldNotSubtype:7 |
| 853 class Class extends A { | 870 } |
| 854 double field; // testFieldNotSubtype:8 | 871 class Class extends A { |
| 855 } | 872 double field; // testFieldNotSubtype:8 |
| 856 """, warnings: MessageKind.INVALID_OVERRIDE_FIELD, | 873 } |
| 857 infos: MessageKind.INVALID_OVERRIDDEN_FIELD); | 874 """, warnings: MessageKind.INVALID_OVERRIDE_FIELD, |
| 858 | 875 infos: MessageKind.INVALID_OVERRIDDEN_FIELD), |
| 859 check(""" | 876 |
| 860 class A { | 877 check(""" |
| 861 int field; // testFieldNotSubtype:9 | 878 class A { |
| 862 } | 879 int field; // testFieldNotSubtype:9 |
| 863 class B extends A { | 880 } |
| 864 num field; // testFieldNotSubtype:10 | 881 class B extends A { |
| 865 } | 882 num field; // testFieldNotSubtype:10 |
| 866 class Class extends B { | 883 } |
| 867 double field; // testFieldNotSubtype:11 | 884 class Class extends B { |
| 868 } | 885 double field; // testFieldNotSubtype:11 |
| 869 """); | 886 } |
| 870 | 887 """), |
| 871 check(""" | 888 |
| 872 class A { | 889 check(""" |
| 873 num field; // testFieldNotSubtype:12 | 890 class A { |
| 874 } | 891 num field; // testFieldNotSubtype:12 |
| 875 class Class extends A { | 892 } |
| 876 int get field => null; // testFieldNotSubtype:13 | 893 class Class extends A { |
| 877 } | 894 int get field => null; // testFieldNotSubtype:13 |
| 878 """); | 895 } |
| 879 | 896 """), |
| 880 check(""" | 897 |
| 881 class A { | 898 check(""" |
| 882 num field; // testFieldNotSubtype:14 | 899 class A { |
| 883 } | 900 num field; // testFieldNotSubtype:14 |
| 884 class Class extends A { | 901 } |
| 885 String get field => null; // testFieldNotSubtype:15 | 902 class Class extends A { |
| 886 } | 903 String get field => null; // testFieldNotSubtype:15 |
| 887 """, warnings: MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER, | 904 } |
| 888 infos: MessageKind.INVALID_OVERRIDDEN_FIELD); | 905 """, warnings: MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER, |
| 889 | 906 infos: MessageKind.INVALID_OVERRIDDEN_FIELD), |
| 890 check(""" | 907 |
| 891 class A { | 908 check(""" |
| 892 num get field => null; // testFieldNotSubtype:16 | 909 class A { |
| 893 } | 910 num get field => null; // testFieldNotSubtype:16 |
| 894 class Class extends A { | 911 } |
| 895 String field; // testFieldNotSubtype:17 | 912 class Class extends A { |
| 896 } | 913 String field; // testFieldNotSubtype:17 |
| 897 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD, | 914 } |
| 898 infos: MessageKind.INVALID_OVERRIDDEN_GETTER); | 915 """, warnings: MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD, |
| 899 | 916 infos: MessageKind.INVALID_OVERRIDDEN_GETTER), |
| 900 check(""" | 917 |
| 901 class A { | 918 check(""" |
| 902 num field; // testFieldNotSubtype:18 | 919 class A { |
| 903 } | 920 num field; // testFieldNotSubtype:18 |
| 904 class Class extends A { | 921 } |
| 905 set field(int _) {} // testFieldNotSubtype:19 | 922 class Class extends A { |
| 906 } | 923 set field(int _) {} // testFieldNotSubtype:19 |
| 907 """); | 924 } |
| 908 | 925 """), |
| 909 check(""" | 926 |
| 910 class A { | 927 check(""" |
| 911 num field; // testFieldNotSubtype:19 | 928 class A { |
| 912 } | 929 num field; // testFieldNotSubtype:19 |
| 913 class Class extends A { | 930 } |
| 914 void set field(int _) {} // testFieldNotSubtype:20 | 931 class Class extends A { |
| 915 } | 932 void set field(int _) {} // testFieldNotSubtype:20 |
| 916 """); | 933 } |
| 917 | 934 """), |
| 918 check(""" | 935 |
| 919 class A { | 936 check(""" |
| 920 set field(int _) {} // testFieldNotSubtype:21 | 937 class A { |
| 921 } | 938 set field(int _) {} // testFieldNotSubtype:21 |
| 922 class Class extends A { | 939 } |
| 923 num field; // testFieldNotSubtype:22 | 940 class Class extends A { |
| 924 } | 941 num field; // testFieldNotSubtype:22 |
| 925 """); | 942 } |
| 926 | 943 """), |
| 927 check(""" | 944 |
| 928 class A { | 945 check(""" |
| 929 void set field(int _) {} // testFieldNotSubtype:23 | 946 class A { |
| 930 } | 947 void set field(int _) {} // testFieldNotSubtype:23 |
| 931 class Class extends A { | 948 } |
| 932 num field; // testFieldNotSubtype:24 | 949 class Class extends A { |
| 933 } | 950 num field; // testFieldNotSubtype:24 |
| 934 """); | 951 } |
| 935 | 952 """), |
| 936 check(""" | 953 |
| 937 class A { | 954 check(""" |
| 938 num field; // testFieldNotSubtype:25 | 955 class A { |
| 939 } | 956 num field; // testFieldNotSubtype:25 |
| 940 class Class extends A { | 957 } |
| 941 set field(String _) {} // testFieldNotSubtype:26 | 958 class Class extends A { |
| 942 } | 959 set field(String _) {} // testFieldNotSubtype:26 |
| 943 """, warnings: MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER, | 960 } |
| 944 infos: MessageKind.INVALID_OVERRIDDEN_FIELD); | 961 """, warnings: MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER, |
| 945 | 962 infos: MessageKind.INVALID_OVERRIDDEN_FIELD), |
| 946 check(""" | 963 |
| 947 class A { | 964 check(""" |
| 948 set field(num _) {} // testFieldNotSubtype:27 | 965 class A { |
| 949 } | 966 set field(num _) {} // testFieldNotSubtype:27 |
| 950 class Class extends A { | 967 } |
| 951 String field; // testFieldNotSubtype:28 | 968 class Class extends A { |
| 952 } | 969 String field; // testFieldNotSubtype:28 |
| 953 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD, | 970 } |
| 954 infos: MessageKind.INVALID_OVERRIDDEN_SETTER); | 971 """, warnings: MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD, |
| 955 | 972 infos: MessageKind.INVALID_OVERRIDDEN_SETTER), |
| 956 check(""" | 973 |
| 957 class A { | 974 check(""" |
| 958 int field; // testFieldNotSubtype:29 | 975 class A { |
| 959 } | 976 int field; // testFieldNotSubtype:29 |
| 960 class Class implements A { | 977 } |
| 961 String get field => null; // testFieldNotSubtype:30 | 978 class Class implements A { |
| 962 void set field(String s) {} // testFieldNotSubtype:31 | 979 String get field => null; // testFieldNotSubtype:30 |
| 963 } | 980 void set field(String s) {} // testFieldNotSubtype:31 |
| 964 """, warnings: [MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER, | 981 } |
| 965 MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER], | 982 """, warnings: [MessageKind.INVALID_OVERRIDE_FIELD_WITH_GETTER, |
| 966 infos: [MessageKind.INVALID_OVERRIDDEN_FIELD, | 983 MessageKind.INVALID_OVERRIDE_FIELD_WITH_SETTER], |
| 967 MessageKind.INVALID_OVERRIDDEN_FIELD]); | 984 infos: [MessageKind.INVALID_OVERRIDDEN_FIELD, |
| 968 | 985 MessageKind.INVALID_OVERRIDDEN_FIELD]), |
| 969 | 986 |
| 970 check(""" | 987 |
| 971 class A { | 988 check(""" |
| 972 String get field => null; // testFieldNotSubtype:32 | 989 class A { |
| 973 void set field(String s) {} // testFieldNotSubtype:33 | 990 String get field => null; // testFieldNotSubtype:32 |
| 974 } | 991 void set field(String s) {} // testFieldNotSubtype:33 |
| 975 class Class implements A { | 992 } |
| 976 int field; // testFieldNotSubtype:34 | 993 class Class implements A { |
| 977 } | 994 int field; // testFieldNotSubtype:34 |
| 978 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD, | 995 } |
| 979 MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD], | 996 """, warnings: [MessageKind.INVALID_OVERRIDE_GETTER_WITH_FIELD, |
| 980 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER, | 997 MessageKind.INVALID_OVERRIDE_SETTER_WITH_FIELD], |
| 981 MessageKind.INVALID_OVERRIDDEN_SETTER]); | 998 infos: [MessageKind.INVALID_OVERRIDDEN_GETTER, |
| 999 MessageKind.INVALID_OVERRIDDEN_SETTER]), |
| 1000 ]); |
| 982 } | 1001 } |
| 983 | 1002 |
| 984 testMixedOverride() { | 1003 Future testMixedOverride() { |
| 985 check(""" | 1004 return Future.wait([ |
| 986 class A { | 1005 check(""" |
| 987 var member; // testMixedOverride:1 | 1006 class A { |
| 988 } | 1007 var member; // testMixedOverride:1 |
| 989 class Class extends A { | 1008 } |
| 990 member() {} // testMixedOverride:2 | 1009 class Class extends A { |
| 991 } | 1010 member() {} // testMixedOverride:2 |
| 992 """, errors: MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD, | 1011 } |
| 993 infos: MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT); | 1012 """, errors: MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD, |
| 994 | 1013 infos: MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT), |
| 995 check(""" | 1014 |
| 996 class A { | 1015 check(""" |
| 997 member() {} // testMixedOverride:3 | 1016 class A { |
| 998 } | 1017 member() {} // testMixedOverride:3 |
| 999 class Class extends A { | 1018 } |
| 1000 var member; // testMixedOverride:4 | 1019 class Class extends A { |
| 1001 } | 1020 var member; // testMixedOverride:4 |
| 1002 """, errors: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD, | 1021 } |
| 1003 infos: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT); | 1022 """, errors: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD, |
| 1004 | 1023 infos: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT), |
| 1005 check(""" | 1024 |
| 1006 class A { | 1025 check(""" |
| 1007 get member => null; // testMixedOverride:5 | 1026 class A { |
| 1008 } | 1027 get member => null; // testMixedOverride:5 |
| 1009 class Class extends A { | 1028 } |
| 1010 member() {} // testMixedOverride:6 | 1029 class Class extends A { |
| 1011 } | 1030 member() {} // testMixedOverride:6 |
| 1012 """, errors: MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD, | 1031 } |
| 1013 infos: MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT); | 1032 """, errors: MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD, |
| 1014 | 1033 infos: MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT), |
| 1015 check(""" | 1034 |
| 1016 class A { | 1035 check(""" |
| 1017 member() {} // testMixedOverride:7 | 1036 class A { |
| 1018 } | 1037 member() {} // testMixedOverride:7 |
| 1019 class Class extends A { | 1038 } |
| 1020 get member => null; // testMixedOverride:8 | 1039 class Class extends A { |
| 1021 } | 1040 get member => null; // testMixedOverride:8 |
| 1022 """, errors: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER, | 1041 } |
| 1023 infos: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT); | 1042 """, errors: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER, |
| 1024 | 1043 infos: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT), |
| 1025 check(""" | 1044 |
| 1026 abstract class A { | 1045 check(""" |
| 1027 var member; // testMixedOverride:9 | 1046 abstract class A { |
| 1028 } | 1047 var member; // testMixedOverride:9 |
| 1029 abstract class B { | 1048 } |
| 1030 get member; // testMixedOverride:10 | 1049 abstract class B { |
| 1031 } | 1050 get member; // testMixedOverride:10 |
| 1032 abstract class Class implements A, B { | 1051 } |
| 1033 } | 1052 abstract class Class implements A, B { |
| 1034 """); | 1053 } |
| 1035 | 1054 """), |
| 1036 check(""" | 1055 |
| 1037 abstract class A { | 1056 check(""" |
| 1038 var member; // testMixedOverride:11 | 1057 abstract class A { |
| 1039 } | 1058 var member; // testMixedOverride:11 |
| 1040 abstract class B { | 1059 } |
| 1041 member() {} // testMixedOverride:12 | 1060 abstract class B { |
| 1042 } | 1061 member() {} // testMixedOverride:12 |
| 1043 abstract class Class implements A, B { | 1062 } |
| 1044 } | 1063 abstract class Class implements A, B { |
| 1045 """, warnings: MessageKind.INHERIT_GETTER_AND_METHOD, | 1064 } |
| 1046 infos: [MessageKind.INHERITED_METHOD, | 1065 """, warnings: MessageKind.INHERIT_GETTER_AND_METHOD, |
| 1047 MessageKind.INHERITED_IMPLICIT_GETTER]); | 1066 infos: [MessageKind.INHERITED_METHOD, |
| 1048 | 1067 MessageKind.INHERITED_IMPLICIT_GETTER]), |
| 1049 check(""" | 1068 |
| 1050 abstract class A { | 1069 check(""" |
| 1051 get member; // testMixedOverride:13 | 1070 abstract class A { |
| 1052 } | 1071 get member; // testMixedOverride:13 |
| 1053 abstract class B { | 1072 } |
| 1054 member() {} // testMixedOverride:14 | 1073 abstract class B { |
| 1055 } | 1074 member() {} // testMixedOverride:14 |
| 1056 abstract class Class implements A, B { | 1075 } |
| 1057 } | 1076 abstract class Class implements A, B { |
| 1058 """, warnings: MessageKind.INHERIT_GETTER_AND_METHOD, | 1077 } |
| 1059 infos: [MessageKind.INHERITED_METHOD, | 1078 """, warnings: MessageKind.INHERIT_GETTER_AND_METHOD, |
| 1060 MessageKind.INHERITED_EXPLICIT_GETTER]); | 1079 infos: [MessageKind.INHERITED_METHOD, |
| 1061 | 1080 MessageKind.INHERITED_EXPLICIT_GETTER]), |
| 1062 check(""" | 1081 |
| 1063 abstract class A { | 1082 check(""" |
| 1064 get member; // testMixedOverride:15 | 1083 abstract class A { |
| 1065 } | 1084 get member; // testMixedOverride:15 |
| 1066 abstract class B { | 1085 } |
| 1067 member() {} // testMixedOverride:16 | 1086 abstract class B { |
| 1068 } | 1087 member() {} // testMixedOverride:16 |
| 1069 abstract class C { | 1088 } |
| 1070 var member; // testMixedOverride:17 | 1089 abstract class C { |
| 1071 } | 1090 var member; // testMixedOverride:17 |
| 1072 abstract class D { | 1091 } |
| 1073 member() {} // testMixedOverride:18 | 1092 abstract class D { |
| 1074 } | 1093 member() {} // testMixedOverride:18 |
| 1075 abstract class E { | 1094 } |
| 1076 get member; // testMixedOverride:19 | 1095 abstract class E { |
| 1077 } | 1096 get member; // testMixedOverride:19 |
| 1078 abstract class Class implements A, B, C, D, E { | 1097 } |
| 1079 } | 1098 abstract class Class implements A, B, C, D, E { |
| 1080 """, warnings: MessageKind.INHERIT_GETTER_AND_METHOD, | 1099 } |
| 1081 infos: [MessageKind.INHERITED_EXPLICIT_GETTER, | 1100 """, warnings: MessageKind.INHERIT_GETTER_AND_METHOD, |
| 1082 MessageKind.INHERITED_METHOD, | 1101 infos: [MessageKind.INHERITED_EXPLICIT_GETTER, |
| 1083 MessageKind.INHERITED_IMPLICIT_GETTER, | 1102 MessageKind.INHERITED_METHOD, |
| 1084 MessageKind.INHERITED_METHOD, | 1103 MessageKind.INHERITED_IMPLICIT_GETTER, |
| 1085 MessageKind.INHERITED_EXPLICIT_GETTER]); | 1104 MessageKind.INHERITED_METHOD, |
| 1086 | 1105 MessageKind.INHERITED_EXPLICIT_GETTER]), |
| 1087 check(""" | 1106 |
| 1088 abstract class A { | 1107 check(""" |
| 1089 get member; // testMixedOverride:20 | 1108 abstract class A { |
| 1090 } | 1109 get member; // testMixedOverride:20 |
| 1091 abstract class B { | 1110 } |
| 1092 member() {} // testMixedOverride:21 | 1111 abstract class B { |
| 1093 } | 1112 member() {} // testMixedOverride:21 |
| 1094 abstract class C implements A, B { | 1113 } |
| 1095 } | 1114 abstract class C implements A, B { |
| 1096 class Class extends C { | 1115 } |
| 1097 member() {} // testMixedOverride:22 | 1116 class Class extends C { |
| 1098 } | 1117 member() {} // testMixedOverride:22 |
| 1099 """, errors: MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD, | 1118 } |
| 1100 warnings: MessageKind.INHERIT_GETTER_AND_METHOD, | 1119 """, errors: MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD, |
| 1101 infos: [MessageKind.INHERITED_METHOD, | 1120 warnings: MessageKind.INHERIT_GETTER_AND_METHOD, |
| 1102 MessageKind.INHERITED_EXPLICIT_GETTER, | 1121 infos: [MessageKind.INHERITED_METHOD, |
| 1103 MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT]); | 1122 MessageKind.INHERITED_EXPLICIT_GETTER, |
| 1104 | 1123 MessageKind.CANNOT_OVERRIDE_GETTER_WITH_METHOD_CONT]), |
| 1105 check(""" | 1124 |
| 1106 abstract class A { | 1125 check(""" |
| 1107 get member; // testMixedOverride:23 | 1126 abstract class A { |
| 1108 } | 1127 get member; // testMixedOverride:23 |
| 1109 abstract class B { | 1128 } |
| 1110 member() {} // testMixedOverride:24 | 1129 abstract class B { |
| 1111 } | 1130 member() {} // testMixedOverride:24 |
| 1112 abstract class C implements A, B { | 1131 } |
| 1113 } | 1132 abstract class C implements A, B { |
| 1114 class Class extends C { | 1133 } |
| 1115 get member => null; // testMixedOverride:25 | 1134 class Class extends C { |
| 1116 } | 1135 get member => null; // testMixedOverride:25 |
| 1117 """, errors: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER, | 1136 } |
| 1118 warnings: MessageKind.INHERIT_GETTER_AND_METHOD, | 1137 """, errors: MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER, |
| 1119 infos: [MessageKind.INHERITED_METHOD, | 1138 warnings: MessageKind.INHERIT_GETTER_AND_METHOD, |
| 1120 MessageKind.INHERITED_EXPLICIT_GETTER, | 1139 infos: [MessageKind.INHERITED_METHOD, |
| 1121 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT]); | 1140 MessageKind.INHERITED_EXPLICIT_GETTER, |
| 1141 MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT]), |
| 1142 ]); |
| 1122 } | 1143 } |
| 1123 | 1144 |
| 1124 testAbstractMethods() { | 1145 Future testAbstractMethods() { |
| 1125 check(""" | 1146 return Future.wait([ |
| 1126 abstract class Class { | 1147 check(""" |
| 1127 method(); // testAbstractMethod:1 | 1148 abstract class Class { |
| 1128 } | 1149 method(); // testAbstractMethod:1 |
| 1129 """); | 1150 } |
| 1130 | 1151 """), |
| 1131 check(""" | 1152 |
| 1132 class Class { | 1153 check(""" |
| 1133 method(); // testAbstractMethod:2 | 1154 class Class { |
| 1134 } | 1155 method(); // testAbstractMethod:2 |
| 1135 """, warnings: MessageKind.ABSTRACT_METHOD, | 1156 } |
| 1136 infos: []); | 1157 """, warnings: MessageKind.ABSTRACT_METHOD, |
| 1137 | 1158 infos: []), |
| 1138 check(""" | 1159 |
| 1139 class Class { | 1160 check(""" |
| 1140 get getter; // testAbstractMethod:3 | 1161 class Class { |
| 1141 } | 1162 get getter; // testAbstractMethod:3 |
| 1142 """, warnings: MessageKind.ABSTRACT_GETTER, | 1163 } |
| 1143 infos: []); | 1164 """, warnings: MessageKind.ABSTRACT_GETTER, |
| 1144 | 1165 infos: []), |
| 1145 check(""" | 1166 |
| 1146 class Class { | 1167 check(""" |
| 1147 set setter(_); // testAbstractMethod:4 | 1168 class Class { |
| 1148 } | 1169 set setter(_); // testAbstractMethod:4 |
| 1149 """, warnings: MessageKind.ABSTRACT_SETTER, | 1170 } |
| 1150 infos: []); | 1171 """, warnings: MessageKind.ABSTRACT_SETTER, |
| 1151 | 1172 infos: []), |
| 1152 check(""" | 1173 |
| 1153 abstract class A { | 1174 check(""" |
| 1154 method(); // testAbstractMethod:5 | 1175 abstract class A { |
| 1155 } | 1176 method(); // testAbstractMethod:5 |
| 1156 class Class extends A { | 1177 } |
| 1157 method() {} // testAbstractMethod:6 | 1178 class Class extends A { |
| 1158 } | 1179 method() {} // testAbstractMethod:6 |
| 1159 """); | 1180 } |
| 1160 | 1181 """), |
| 1161 check(""" | 1182 |
| 1162 abstract class A { | 1183 check(""" |
| 1163 method(); // testAbstractMethod:7 | 1184 abstract class A { |
| 1164 } | 1185 method(); // testAbstractMethod:7 |
| 1165 class Class extends A { | 1186 } |
| 1166 method([a]) {} // testAbstractMethod:8 | 1187 class Class extends A { |
| 1167 } | 1188 method([a]) {} // testAbstractMethod:8 |
| 1168 """); | 1189 } |
| 1169 | 1190 """), |
| 1170 check(""" | 1191 |
| 1171 abstract class A { | 1192 check(""" |
| 1172 method(); // testAbstractMethod:9 | 1193 abstract class A { |
| 1173 } | 1194 method(); // testAbstractMethod:9 |
| 1174 class Class extends A { | 1195 } |
| 1175 } | 1196 class Class extends A { |
| 1176 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, | 1197 } |
| 1177 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); | 1198 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, |
| 1178 | 1199 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT), |
| 1179 check(""" | 1200 |
| 1180 abstract class A { | 1201 check(""" |
| 1181 get getter; // testAbstractMethod:10 | 1202 abstract class A { |
| 1182 } | 1203 get getter; // testAbstractMethod:10 |
| 1183 class Class extends A { | 1204 } |
| 1184 } | 1205 class Class extends A { |
| 1185 """, warnings: MessageKind.UNIMPLEMENTED_GETTER_ONE, | 1206 } |
| 1186 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER); | 1207 """, warnings: MessageKind.UNIMPLEMENTED_GETTER_ONE, |
| 1187 | 1208 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER), |
| 1188 check(""" | 1209 |
| 1189 abstract class A { | 1210 check(""" |
| 1190 set setter(_); // testAbstractMethod:11 | 1211 abstract class A { |
| 1191 } | 1212 set setter(_); // testAbstractMethod:11 |
| 1192 class Class extends A { | 1213 } |
| 1193 } | 1214 class Class extends A { |
| 1194 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE, | 1215 } |
| 1195 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER); | 1216 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE, |
| 1196 | 1217 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER), |
| 1197 check(""" | 1218 |
| 1198 abstract class A { | 1219 check(""" |
| 1199 method(); // testAbstractMethod:12 | 1220 abstract class A { |
| 1200 } | 1221 method(); // testAbstractMethod:12 |
| 1201 class B { | 1222 } |
| 1202 method() {} // testAbstractMethod:13 | 1223 class B { |
| 1203 } | 1224 method() {} // testAbstractMethod:13 |
| 1204 class Class extends A implements B { | 1225 } |
| 1205 } | 1226 class Class extends A implements B { |
| 1206 """, warnings: MessageKind.UNIMPLEMENTED_METHOD, | 1227 } |
| 1207 infos: [MessageKind.UNIMPLEMENTED_METHOD_CONT, | 1228 """, warnings: MessageKind.UNIMPLEMENTED_METHOD, |
| 1208 MessageKind.UNIMPLEMENTED_METHOD_CONT]); | 1229 infos: [MessageKind.UNIMPLEMENTED_METHOD_CONT, |
| 1209 | 1230 MessageKind.UNIMPLEMENTED_METHOD_CONT]), |
| 1210 check(""" | 1231 |
| 1211 abstract class A { | 1232 check(""" |
| 1212 get getter; // testAbstractMethod:14 | 1233 abstract class A { |
| 1213 } | 1234 get getter; // testAbstractMethod:14 |
| 1214 class B { | 1235 } |
| 1215 get getter => 0; // testAbstractMethod:15 | 1236 class B { |
| 1216 } | 1237 get getter => 0; // testAbstractMethod:15 |
| 1217 class Class extends A implements B { | 1238 } |
| 1218 } | 1239 class Class extends A implements B { |
| 1219 """, warnings: MessageKind.UNIMPLEMENTED_GETTER, | 1240 } |
| 1220 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER, | 1241 """, warnings: MessageKind.UNIMPLEMENTED_GETTER, |
| 1221 MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER]); | 1242 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER, |
| 1222 | 1243 MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER]), |
| 1223 check(""" | 1244 |
| 1224 abstract class A { | 1245 check(""" |
| 1225 set setter(_); // testAbstractMethod:16 | 1246 abstract class A { |
| 1226 } | 1247 set setter(_); // testAbstractMethod:16 |
| 1227 class B { | 1248 } |
| 1228 set setter(_) {} // testAbstractMethod:17 | 1249 class B { |
| 1229 } | 1250 set setter(_) {} // testAbstractMethod:17 |
| 1230 class Class extends A implements B { | 1251 } |
| 1231 } | 1252 class Class extends A implements B { |
| 1232 """, warnings: MessageKind.UNIMPLEMENTED_SETTER, | 1253 } |
| 1233 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER, | 1254 """, warnings: MessageKind.UNIMPLEMENTED_SETTER, |
| 1234 MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER]); | 1255 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER, |
| 1235 | 1256 MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER]), |
| 1236 check(""" | 1257 |
| 1237 abstract class A { | 1258 check(""" |
| 1238 get field; // testAbstractMethod:18 | 1259 abstract class A { |
| 1239 } | 1260 get field; // testAbstractMethod:18 |
| 1240 class B { | 1261 } |
| 1241 var field; // testAbstractMethod:19 | 1262 class B { |
| 1242 } | 1263 var field; // testAbstractMethod:19 |
| 1243 class Class extends A implements B { | 1264 } |
| 1244 set field(_) {} // testAbstractMethod:20 | 1265 class Class extends A implements B { |
| 1245 } | 1266 set field(_) {} // testAbstractMethod:20 |
| 1246 """, warnings: MessageKind.UNIMPLEMENTED_GETTER, | 1267 } |
| 1247 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER, | 1268 """, warnings: MessageKind.UNIMPLEMENTED_GETTER, |
| 1248 MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER]); | 1269 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER, |
| 1249 | 1270 MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER]), |
| 1250 check(""" | 1271 |
| 1251 abstract class A { | 1272 check(""" |
| 1252 set field(_); // testAbstractMethod:21 | 1273 abstract class A { |
| 1253 } | 1274 set field(_); // testAbstractMethod:21 |
| 1254 class B { | 1275 } |
| 1255 var field; // testAbstractMethod:22 | 1276 class B { |
| 1256 } | 1277 var field; // testAbstractMethod:22 |
| 1257 class Class extends A implements B { | 1278 } |
| 1258 get field => 0; // testAbstractMethod:23 | 1279 class Class extends A implements B { |
| 1259 } | 1280 get field => 0; // testAbstractMethod:23 |
| 1260 """, warnings: MessageKind.UNIMPLEMENTED_SETTER, | 1281 } |
| 1261 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER, | 1282 """, warnings: MessageKind.UNIMPLEMENTED_SETTER, |
| 1262 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]); | 1283 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER, |
| 1263 | 1284 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]), |
| 1264 check(""" | 1285 |
| 1265 class A { | 1286 check(""" |
| 1266 method() {} // testAbstractMethod:24 | 1287 class A { |
| 1267 } | 1288 method() {} // testAbstractMethod:24 |
| 1268 class Class implements A { | 1289 } |
| 1269 method() {} // testAbstractMethod:25 | 1290 class Class implements A { |
| 1270 } | 1291 method() {} // testAbstractMethod:25 |
| 1271 """); | 1292 } |
| 1272 | 1293 """), |
| 1273 check(""" | 1294 |
| 1274 class A { | 1295 check(""" |
| 1275 method() {} // testAbstractMethod:26 | 1296 class A { |
| 1276 } | 1297 method() {} // testAbstractMethod:26 |
| 1277 class Class implements A { | 1298 } |
| 1278 method([a]) {} // testAbstractMethod:27 | 1299 class Class implements A { |
| 1279 } | 1300 method([a]) {} // testAbstractMethod:27 |
| 1280 """); | 1301 } |
| 1281 | 1302 """), |
| 1282 check(""" | 1303 |
| 1283 class A { | 1304 check(""" |
| 1284 method() {} // testAbstractMethod:28 | 1305 class A { |
| 1285 } | 1306 method() {} // testAbstractMethod:28 |
| 1286 class Class implements A { | 1307 } |
| 1287 } | 1308 class Class implements A { |
| 1288 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, | 1309 } |
| 1289 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); | 1310 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, |
| 1290 | 1311 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT), |
| 1291 check(""" | 1312 |
| 1292 class A { | 1313 check(""" |
| 1293 method() {} // testAbstractMethod:29 | 1314 class A { |
| 1294 } | 1315 method() {} // testAbstractMethod:29 |
| 1295 class B { | 1316 } |
| 1296 method() {} // testAbstractMethod:30 | 1317 class B { |
| 1297 } | 1318 method() {} // testAbstractMethod:30 |
| 1298 class Class extends A implements B { | 1319 } |
| 1299 } | 1320 class Class extends A implements B { |
| 1300 """); | 1321 } |
| 1301 | 1322 """), |
| 1302 check(""" | 1323 |
| 1303 class A { | 1324 check(""" |
| 1304 var member; // testAbstractMethod:31 | 1325 class A { |
| 1305 } | 1326 var member; // testAbstractMethod:31 |
| 1306 class Class implements A { | 1327 } |
| 1307 } | 1328 class Class implements A { |
| 1308 """, warnings: [MessageKind.UNIMPLEMENTED_GETTER_ONE, | 1329 } |
| 1309 MessageKind.UNIMPLEMENTED_SETTER_ONE], | 1330 """, warnings: [MessageKind.UNIMPLEMENTED_GETTER_ONE, |
| 1310 infos: [MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER, | 1331 MessageKind.UNIMPLEMENTED_SETTER_ONE], |
| 1311 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]); | 1332 infos: [MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER, |
| 1312 | 1333 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]), |
| 1313 check(""" | 1334 |
| 1314 class A { | 1335 check(""" |
| 1315 var member; // testAbstractMethod:32 | 1336 class A { |
| 1316 } | 1337 var member; // testAbstractMethod:32 |
| 1317 class B { | 1338 } |
| 1318 get member => null; // testAbstractMethod:33 | 1339 class B { |
| 1319 set member(_) {} // testAbstractMethod:34 | 1340 get member => null; // testAbstractMethod:33 |
| 1320 } | 1341 set member(_) {} // testAbstractMethod:34 |
| 1321 class Class implements A, B { | 1342 } |
| 1322 } | 1343 class Class implements A, B { |
| 1323 """, warnings: [MessageKind.UNIMPLEMENTED_GETTER, | 1344 } |
| 1324 MessageKind.UNIMPLEMENTED_SETTER], | 1345 """, warnings: [MessageKind.UNIMPLEMENTED_GETTER, |
| 1325 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER, | 1346 MessageKind.UNIMPLEMENTED_SETTER], |
| 1326 MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER, | 1347 infos: [MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER, |
| 1327 MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER, | 1348 MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER, |
| 1328 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]); | 1349 MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER, |
| 1329 | 1350 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]), |
| 1330 check(""" | 1351 |
| 1331 class A { | 1352 check(""" |
| 1332 var member; // testAbstractMethod:35 | 1353 class A { |
| 1333 } | 1354 var member; // testAbstractMethod:35 |
| 1334 class B { | 1355 } |
| 1335 var member; // testAbstractMethod:36 | 1356 class B { |
| 1336 } | 1357 var member; // testAbstractMethod:36 |
| 1337 class Class implements A, B { | 1358 } |
| 1338 } | 1359 class Class implements A, B { |
| 1339 """, warnings: [MessageKind.UNIMPLEMENTED_GETTER, | 1360 } |
| 1340 MessageKind.UNIMPLEMENTED_SETTER], | 1361 """, warnings: [MessageKind.UNIMPLEMENTED_GETTER, |
| 1341 infos: [MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER, | 1362 MessageKind.UNIMPLEMENTED_SETTER], |
| 1342 MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER, | 1363 infos: [MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER, |
| 1343 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER, | 1364 MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER, |
| 1344 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]); | 1365 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER, |
| 1345 | 1366 MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER]), |
| 1346 check(""" | 1367 |
| 1347 class A { | 1368 check(""" |
| 1348 get member => 0; // testAbstractMethod:37 | 1369 class A { |
| 1349 } | 1370 get member => 0; // testAbstractMethod:37 |
| 1350 class Class implements A { | 1371 } |
| 1351 } | 1372 class Class implements A { |
| 1352 """, warnings: MessageKind.UNIMPLEMENTED_GETTER_ONE, | 1373 } |
| 1353 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER); | 1374 """, warnings: MessageKind.UNIMPLEMENTED_GETTER_ONE, |
| 1354 | 1375 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_GETTER), |
| 1355 check(""" | 1376 |
| 1356 class A { | 1377 check(""" |
| 1357 set member(_) {} // testAbstractMethod:38 | 1378 class A { |
| 1358 } | 1379 set member(_) {} // testAbstractMethod:38 |
| 1359 class Class implements A { | 1380 } |
| 1360 } | 1381 class Class implements A { |
| 1361 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE, | 1382 } |
| 1362 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER); | 1383 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE, |
| 1363 | 1384 infos: MessageKind.UNIMPLEMENTED_EXPLICIT_SETTER), |
| 1364 check(""" | 1385 |
| 1365 class A { | 1386 check(""" |
| 1366 var member; // testAbstractMethod:39 | 1387 class A { |
| 1367 } | 1388 var member; // testAbstractMethod:39 |
| 1368 class Class implements A { | 1389 } |
| 1369 get member => 0; | 1390 class Class implements A { |
| 1370 } | 1391 get member => 0; |
| 1371 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE, | 1392 } |
| 1372 infos: MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER); | 1393 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE, |
| 1373 | 1394 infos: MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER), |
| 1374 check(""" | 1395 |
| 1375 class A { | 1396 check(""" |
| 1376 var field; // testAbstractMethod:40 | 1397 class A { |
| 1377 } | 1398 var field; // testAbstractMethod:40 |
| 1378 class Class implements A { | 1399 } |
| 1379 final field = 0; // testAbstractMethod:41 | 1400 class Class implements A { |
| 1380 } | 1401 final field = 0; // testAbstractMethod:41 |
| 1381 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE, | 1402 } |
| 1382 infos: MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER); | 1403 """, warnings: MessageKind.UNIMPLEMENTED_SETTER_ONE, |
| 1383 | 1404 infos: MessageKind.UNIMPLEMENTED_IMPLICIT_SETTER), |
| 1384 check(""" | 1405 |
| 1385 class A { | 1406 check(""" |
| 1386 var member; // testAbstractMethod:42 | 1407 class A { |
| 1387 } | 1408 var member; // testAbstractMethod:42 |
| 1388 class Class implements A { | 1409 } |
| 1389 set member(_) {} | 1410 class Class implements A { |
| 1390 } | 1411 set member(_) {} |
| 1391 """, warnings: MessageKind.UNIMPLEMENTED_GETTER_ONE, | 1412 } |
| 1392 infos: MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER); | 1413 """, warnings: MessageKind.UNIMPLEMENTED_GETTER_ONE, |
| 1393 | 1414 infos: MessageKind.UNIMPLEMENTED_IMPLICIT_GETTER), |
| 1394 check(""" | 1415 |
| 1395 abstract class A { | 1416 check(""" |
| 1396 method() {} // testAbstractMethod:43 | 1417 abstract class A { |
| 1397 } | 1418 method() {} // testAbstractMethod:43 |
| 1398 class Class extends A { | 1419 } |
| 1399 method(); | 1420 class Class extends A { |
| 1400 } | 1421 method(); |
| 1401 """); | 1422 } |
| 1423 """), |
| 1424 ]); |
| 1402 } | 1425 } |
| 1403 | 1426 |
| 1404 testNoSuchMethod() { | 1427 Future testNoSuchMethod() { |
| 1405 check(""" | 1428 return Future.wait([ |
| 1406 class Class { | 1429 check(""" |
| 1407 method(); // testNoSuchMethod:1 | 1430 class Class { |
| 1408 } | 1431 method(); // testNoSuchMethod:1 |
| 1409 """, warnings: MessageKind.ABSTRACT_METHOD, | 1432 } |
| 1410 infos: []); | 1433 """, warnings: MessageKind.ABSTRACT_METHOD, |
| 1411 | 1434 infos: []), |
| 1412 check(""" | 1435 |
| 1413 @proxy | 1436 check(""" |
| 1414 class Class { | 1437 @proxy |
| 1415 method(); // testNoSuchMethod:2 | 1438 class Class { |
| 1416 } | 1439 method(); // testNoSuchMethod:2 |
| 1417 """, warnings: MessageKind.ABSTRACT_METHOD, | 1440 } |
| 1418 infos: []); | 1441 """, warnings: MessageKind.ABSTRACT_METHOD, |
| 1419 | 1442 infos: []), |
| 1420 check(""" | 1443 |
| 1421 class Class { | 1444 check(""" |
| 1422 noSuchMethod(_) => null; | 1445 class Class { |
| 1423 method(); // testNoSuchMethod:3 | 1446 noSuchMethod(_) => null; |
| 1424 } | 1447 method(); // testNoSuchMethod:3 |
| 1425 """); | 1448 } |
| 1426 | 1449 """), |
| 1427 check(""" | 1450 |
| 1428 class Class { | 1451 check(""" |
| 1429 noSuchMethod(_, [__]) => null; | 1452 class Class { |
| 1430 method(); // testNoSuchMethod:4 | 1453 noSuchMethod(_, [__]) => null; |
| 1431 } | 1454 method(); // testNoSuchMethod:4 |
| 1432 """); | 1455 } |
| 1433 | 1456 """), |
| 1434 check(""" | 1457 |
| 1435 class Class { | 1458 check(""" |
| 1436 noSuchMethod(_); | 1459 class Class { |
| 1437 method(); // testNoSuchMethod:5 | 1460 noSuchMethod(_); |
| 1438 } | 1461 method(); // testNoSuchMethod:5 |
| 1439 """); | 1462 } |
| 1440 | 1463 """), |
| 1441 check(""" | 1464 |
| 1442 abstract class A { | 1465 check(""" |
| 1443 method(); // testNoSuchMethod:6 | 1466 abstract class A { |
| 1444 } | 1467 method(); // testNoSuchMethod:6 |
| 1445 class Class extends A { | 1468 } |
| 1446 } | 1469 class Class extends A { |
| 1447 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, | 1470 } |
| 1448 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); | 1471 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, |
| 1449 | 1472 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT), |
| 1450 check(""" | 1473 |
| 1451 abstract class A { | 1474 check(""" |
| 1452 method(); // testNoSuchMethod:7 | 1475 abstract class A { |
| 1453 } | 1476 method(); // testNoSuchMethod:7 |
| 1454 @proxy | 1477 } |
| 1455 class Class extends A { | 1478 @proxy |
| 1456 } | 1479 class Class extends A { |
| 1457 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, | 1480 } |
| 1458 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); | 1481 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, |
| 1459 | 1482 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT), |
| 1460 check(""" | 1483 |
| 1461 abstract class A { | 1484 check(""" |
| 1462 method(); // testNoSuchMethod:8 | 1485 abstract class A { |
| 1463 } | 1486 method(); // testNoSuchMethod:8 |
| 1464 class Class extends A { | 1487 } |
| 1465 noSuchMethod(_) => null; | 1488 class Class extends A { |
| 1466 } | 1489 noSuchMethod(_) => null; |
| 1467 """); | 1490 } |
| 1468 | 1491 """), |
| 1469 check(""" | 1492 |
| 1470 class A { | 1493 check(""" |
| 1471 method() {} // testNoSuchMethod:9 | 1494 class A { |
| 1472 } | 1495 method() {} // testNoSuchMethod:9 |
| 1473 class Class implements A { | 1496 } |
| 1474 } | 1497 class Class implements A { |
| 1475 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, | 1498 } |
| 1476 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); | 1499 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, |
| 1477 | 1500 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT), |
| 1478 check(""" | 1501 |
| 1479 class A { | 1502 check(""" |
| 1480 method() {} // testNoSuchMethod:10 | 1503 class A { |
| 1481 } | 1504 method() {} // testNoSuchMethod:10 |
| 1482 class Class implements A { | 1505 } |
| 1483 } | 1506 class Class implements A { |
| 1484 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, | 1507 } |
| 1485 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); | 1508 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, |
| 1486 | 1509 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT), |
| 1487 check(""" | 1510 |
| 1488 class A { | 1511 check(""" |
| 1489 method() {} // testNoSuchMethod:11 | 1512 class A { |
| 1490 } | 1513 method() {} // testNoSuchMethod:11 |
| 1491 @proxy | 1514 } |
| 1492 class Class implements A { | 1515 @proxy |
| 1493 } | 1516 class Class implements A { |
| 1494 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, | 1517 } |
| 1495 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); | 1518 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, |
| 1496 | 1519 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT), |
| 1497 check(""" | 1520 |
| 1498 class A { | 1521 check(""" |
| 1499 method() {} // testNoSuchMethod:12 | 1522 class A { |
| 1500 } | 1523 method() {} // testNoSuchMethod:12 |
| 1501 class Class implements A { | 1524 } |
| 1502 noSuchMethod(_) => null; | 1525 class Class implements A { |
| 1503 } | 1526 noSuchMethod(_) => null; |
| 1504 """); | 1527 } |
| 1505 | 1528 """), |
| 1506 check(""" | 1529 |
| 1507 class A { | 1530 check(""" |
| 1508 noSuchMethod(_) => null; | 1531 class A { |
| 1509 method(); // testNoSuchMethod:13 | 1532 noSuchMethod(_) => null; |
| 1510 } | 1533 method(); // testNoSuchMethod:13 |
| 1511 class Class extends A { | 1534 } |
| 1512 } | 1535 class Class extends A { |
| 1513 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, | 1536 } |
| 1514 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT); | 1537 """, warnings: MessageKind.UNIMPLEMENTED_METHOD_ONE, |
| 1538 infos: MessageKind.UNIMPLEMENTED_METHOD_CONT), |
| 1539 ]); |
| 1515 } | 1540 } |
| OLD | NEW |