| 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 fasta.kernel_class_builder; | 5 library fasta.kernel_class_builder; |
| 6 | 6 |
| 7 import 'package:kernel/ast.dart' | 7 import 'package:kernel/ast.dart' |
| 8 show | 8 show |
| 9 Class, | 9 Class, |
| 10 Constructor, | 10 Constructor, |
| 11 DartType, | 11 DartType, |
| 12 Expression, | 12 Expression, |
| 13 Field, | 13 Field, |
| 14 FunctionNode, | 14 FunctionNode, |
| 15 InterfaceType, | 15 InterfaceType, |
| 16 ListLiteral, | 16 ListLiteral, |
| 17 Member, | 17 Member, |
| 18 Name, | 18 Name, |
| 19 Procedure, | 19 Procedure, |
| 20 ProcedureKind, | 20 ProcedureKind, |
| 21 StaticGet, | 21 StaticGet, |
| 22 Supertype, | 22 Supertype, |
| 23 VariableDeclaration; | 23 VariableDeclaration; |
| 24 | 24 |
| 25 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy; | 25 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy; |
| 26 | 26 |
| 27 import '../dill/dill_member_builder.dart' show DillMemberBuilder; | 27 import '../dill/dill_member_builder.dart' show DillMemberBuilder; |
| 28 | 28 |
| 29 import '../fasta_codes.dart' show templateRedirectionTargetNotFound; | 29 import '../fasta_codes.dart' |
| 30 show |
| 31 templateOverrideFewerNamedArguments, |
| 32 templateOverrideFewerPositionalArguments, |
| 33 templateOverrideMismatchNamedParameter, |
| 34 templateOverrideMoreRequiredArguments, |
| 35 templateOverrideTypeVariablesMismatch, |
| 36 templateRedirectionTargetNotFound; |
| 30 | 37 |
| 31 import '../problems.dart' show unhandled, unimplemented; | 38 import '../problems.dart' show unhandled, unimplemented; |
| 32 | 39 |
| 33 import 'kernel_builder.dart' | 40 import 'kernel_builder.dart' |
| 34 show | 41 show |
| 35 Builder, | 42 Builder, |
| 36 ClassBuilder, | 43 ClassBuilder, |
| 37 ConstructorReferenceBuilder, | 44 ConstructorReferenceBuilder, |
| 38 KernelLibraryBuilder, | 45 KernelLibraryBuilder, |
| 39 KernelProcedureBuilder, | 46 KernelProcedureBuilder, |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 // TODO(ahe): Include these checks as well, but the message needs to | 233 // TODO(ahe): Include these checks as well, but the message needs to |
| 227 // explain that [declaredMember] is inherited. | 234 // explain that [declaredMember] is inherited. |
| 228 return; | 235 return; |
| 229 } | 236 } |
| 230 assert(declaredMember.kind == ProcedureKind.Method); | 237 assert(declaredMember.kind == ProcedureKind.Method); |
| 231 assert(interfaceMember.kind == ProcedureKind.Method); | 238 assert(interfaceMember.kind == ProcedureKind.Method); |
| 232 FunctionNode declaredFunction = declaredMember.function; | 239 FunctionNode declaredFunction = declaredMember.function; |
| 233 FunctionNode interfaceFunction = interfaceMember.function; | 240 FunctionNode interfaceFunction = interfaceMember.function; |
| 234 if (declaredFunction.typeParameters?.length != | 241 if (declaredFunction.typeParameters?.length != |
| 235 interfaceFunction.typeParameters?.length) { | 242 interfaceFunction.typeParameters?.length) { |
| 236 deprecated_addWarning( | 243 addWarning( |
| 237 declaredMember.fileOffset, | 244 templateOverrideTypeVariablesMismatch.withArguments( |
| 238 "Declared type variables of '$name::${declaredMember.name.name}' " | 245 "$name::${declaredMember.name.name}", |
| 239 "doesn't match those on overridden method " | 246 "${interfaceMember.enclosingClass.name}::" |
| 240 "'${interfaceMember.enclosingClass.name}::" | 247 "${interfaceMember.name.name}"), |
| 241 "${interfaceMember.name.name}'."); | 248 declaredMember.fileOffset); |
| 242 } | 249 } |
| 243 if (declaredFunction.positionalParameters.length < | 250 if (declaredFunction.positionalParameters.length < |
| 244 interfaceFunction.requiredParameterCount || | 251 interfaceFunction.requiredParameterCount || |
| 245 declaredFunction.positionalParameters.length < | 252 declaredFunction.positionalParameters.length < |
| 246 interfaceFunction.positionalParameters.length) { | 253 interfaceFunction.positionalParameters.length) { |
| 247 deprecated_addWarning( | 254 addWarning( |
| 248 declaredMember.fileOffset, | 255 templateOverrideFewerPositionalArguments.withArguments( |
| 249 "The method '$name::${declaredMember.name.name}' has fewer " | 256 "$name::${declaredMember.name.name}", |
| 250 "positional arguments than those of overridden method " | 257 "${interfaceMember.enclosingClass.name}::" |
| 251 "'${interfaceMember.enclosingClass.name}::" | 258 "${interfaceMember.name.name}"), |
| 252 "${interfaceMember.name.name}'."); | 259 declaredMember.fileOffset); |
| 253 } | 260 } |
| 254 if (interfaceFunction.requiredParameterCount < | 261 if (interfaceFunction.requiredParameterCount < |
| 255 declaredFunction.requiredParameterCount) { | 262 declaredFunction.requiredParameterCount) { |
| 256 deprecated_addWarning( | 263 addWarning( |
| 257 declaredMember.fileOffset, | 264 templateOverrideMoreRequiredArguments.withArguments( |
| 258 "The method '$name::${declaredMember.name.name}' has more " | 265 "$name::${declaredMember.name.name}", |
| 259 "required arguments than those of overridden method " | 266 "${interfaceMember.enclosingClass.name}::" |
| 260 "'${interfaceMember.enclosingClass.name}::" | 267 "${interfaceMember.name.name}"), |
| 261 "${interfaceMember.name.name}'."); | 268 declaredMember.fileOffset); |
| 262 } | 269 } |
| 263 if (declaredFunction.namedParameters.isEmpty && | 270 if (declaredFunction.namedParameters.isEmpty && |
| 264 interfaceFunction.namedParameters.isEmpty) { | 271 interfaceFunction.namedParameters.isEmpty) { |
| 265 return; | 272 return; |
| 266 } | 273 } |
| 267 if (declaredFunction.namedParameters.length < | 274 if (declaredFunction.namedParameters.length < |
| 268 interfaceFunction.namedParameters.length) { | 275 interfaceFunction.namedParameters.length) { |
| 269 deprecated_addWarning( | 276 addWarning( |
| 270 declaredMember.fileOffset, | 277 templateOverrideFewerNamedArguments.withArguments( |
| 271 "The method '$name::${declaredMember.name.name}' has fewer named " | 278 "$name::${declaredMember.name.name}", |
| 272 "arguments than those of overridden method " | 279 "${interfaceMember.enclosingClass.name}::" |
| 273 "'${interfaceMember.enclosingClass.name}::" | 280 "${interfaceMember.name.name}"), |
| 274 "${interfaceMember.name.name}'."); | 281 declaredMember.fileOffset); |
| 275 } | 282 } |
| 276 Iterator<VariableDeclaration> declaredNamedParameters = | 283 Iterator<VariableDeclaration> declaredNamedParameters = |
| 277 declaredFunction.namedParameters.iterator; | 284 declaredFunction.namedParameters.iterator; |
| 278 Iterator<VariableDeclaration> interfaceNamedParameters = | 285 Iterator<VariableDeclaration> interfaceNamedParameters = |
| 279 interfaceFunction.namedParameters.iterator; | 286 interfaceFunction.namedParameters.iterator; |
| 280 outer: | 287 outer: |
| 281 while (declaredNamedParameters.moveNext() && | 288 while (declaredNamedParameters.moveNext() && |
| 282 interfaceNamedParameters.moveNext()) { | 289 interfaceNamedParameters.moveNext()) { |
| 283 while (declaredNamedParameters.current.name != | 290 while (declaredNamedParameters.current.name != |
| 284 interfaceNamedParameters.current.name) { | 291 interfaceNamedParameters.current.name) { |
| 285 if (!declaredNamedParameters.moveNext()) { | 292 if (!declaredNamedParameters.moveNext()) { |
| 286 deprecated_addWarning( | 293 addWarning( |
| 287 declaredMember.fileOffset, | 294 templateOverrideMismatchNamedParameter.withArguments( |
| 288 "The method '$name::${declaredMember.name.name}' doesn't have " | 295 "$name::${declaredMember.name.name}", |
| 289 "the named parameter '${interfaceNamedParameters.current.name}' " | 296 interfaceNamedParameters.current.name, |
| 290 "of overriden method '${interfaceMember.enclosingClass.name}::" | 297 "${interfaceMember.enclosingClass.name}::" |
| 291 "${interfaceMember.name.name}'."); | 298 "${interfaceMember.name.name}"), |
| 299 declaredMember.fileOffset); |
| 292 break outer; | 300 break outer; |
| 293 } | 301 } |
| 294 } | 302 } |
| 295 } | 303 } |
| 296 } | 304 } |
| 297 | 305 |
| 298 String get fullNameForErrors { | 306 String get fullNameForErrors { |
| 299 return isMixinApplication | 307 return isMixinApplication |
| 300 ? "${supertype.fullNameForErrors} with ${mixedInType.fullNameForErrors}" | 308 ? "${supertype.fullNameForErrors} with ${mixedInType.fullNameForErrors}" |
| 301 : name; | 309 : name; |
| 302 } | 310 } |
| 303 } | 311 } |
| OLD | NEW |