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 /// ----------------------------------------------------------------------- | 5 /// ----------------------------------------------------------------------- |
6 /// ERROR HANDLING | 6 /// ERROR HANDLING |
7 /// ----------------------------------------------------------------------- | 7 /// ----------------------------------------------------------------------- |
8 /// | 8 /// |
9 /// As a rule of thumb, errors that can be detected statically are handled by | 9 /// As a rule of thumb, errors that can be detected statically are handled by |
10 /// the frontend, typically by translating the erroneous code into a 'throw' or | 10 /// the frontend, typically by translating the erroneous code into a 'throw' or |
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 transformChildren(Transformer v) {} | 486 transformChildren(Transformer v) {} |
487 } | 487 } |
488 | 488 |
489 /// Declaration of a type alias. | 489 /// Declaration of a type alias. |
490 class Typedef extends NamedNode { | 490 class Typedef extends NamedNode { |
491 /// The uri of the source file that contains the declaration of this typedef. | 491 /// The uri of the source file that contains the declaration of this typedef. |
492 String fileUri; | 492 String fileUri; |
493 List<Expression> annotations = const <Expression>[]; | 493 List<Expression> annotations = const <Expression>[]; |
494 String name; | 494 String name; |
495 final List<TypeParameter> typeParameters; | 495 final List<TypeParameter> typeParameters; |
| 496 |
| 497 @informative |
| 498 int requiredParameterCount = 0; |
| 499 |
| 500 @informative |
| 501 List<VariableDeclaration> positionalParameters = <VariableDeclaration>[]; |
| 502 |
| 503 @informative |
| 504 List<VariableDeclaration> namedParameters = <VariableDeclaration>[]; |
| 505 |
496 DartType type; | 506 DartType type; |
497 | 507 |
498 Typedef(this.name, this.type, | 508 Typedef(this.name, this.type, |
499 {Reference reference, this.fileUri, List<TypeParameter> typeParameters}) | 509 {Reference reference, this.fileUri, List<TypeParameter> typeParameters}) |
500 : this.typeParameters = typeParameters ?? <TypeParameter>[], | 510 : this.typeParameters = typeParameters ?? <TypeParameter>[], |
501 super(reference) { | 511 super(reference) { |
502 setParents(this.typeParameters, this); | 512 setParents(this.typeParameters, this); |
503 } | 513 } |
504 | 514 |
505 Library get enclosingLibrary => parent; | 515 Library get enclosingLibrary => parent; |
506 | 516 |
507 accept(TreeVisitor v) { | 517 accept(TreeVisitor v) { |
508 return v.visitTypedef(this); | 518 return v.visitTypedef(this); |
509 } | 519 } |
510 | 520 |
| 521 void setParameters( |
| 522 int requiredParameterCount, |
| 523 List<VariableDeclaration> positionalParameters, |
| 524 List<VariableDeclaration> namedParameters) { |
| 525 this.requiredParameterCount = requiredParameterCount; |
| 526 this.positionalParameters = positionalParameters; |
| 527 this.namedParameters = namedParameters; |
| 528 setParents(this.positionalParameters, this); |
| 529 setParents(this.namedParameters, this); |
| 530 } |
| 531 |
511 transformChildren(Transformer v) { | 532 transformChildren(Transformer v) { |
512 transformList(annotations, v, this); | 533 transformList(annotations, v, this); |
513 transformList(typeParameters, v, this); | 534 transformList(typeParameters, v, this); |
| 535 transformList(positionalParameters, v, this); |
| 536 transformList(namedParameters, v, this); |
514 if (type != null) { | 537 if (type != null) { |
515 type = v.visitDartType(type); | 538 type = v.visitDartType(type); |
516 } | 539 } |
517 } | 540 } |
518 | 541 |
519 visitChildren(Visitor v) { | 542 visitChildren(Visitor v) { |
520 visitList(annotations, v); | 543 visitList(annotations, v); |
521 visitList(typeParameters, v); | 544 visitList(typeParameters, v); |
| 545 visitList(typeParameters, v); |
| 546 visitList(positionalParameters, v); |
| 547 visitList(namedParameters, v); |
522 type?.accept(v); | 548 type?.accept(v); |
523 } | 549 } |
524 | 550 |
525 void addAnnotation(Expression node) { | 551 void addAnnotation(Expression node) { |
526 if (annotations.isEmpty) { | 552 if (annotations.isEmpty) { |
527 annotations = <Expression>[]; | 553 annotations = <Expression>[]; |
528 } | 554 } |
529 annotations.add(node); | 555 annotations.add(node); |
530 node.parent = this; | 556 node.parent = this; |
531 } | 557 } |
(...skipping 4144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4676 if (typedef_.canonicalName == null) { | 4702 if (typedef_.canonicalName == null) { |
4677 throw '$typedef_ has no canonical name'; | 4703 throw '$typedef_ has no canonical name'; |
4678 } | 4704 } |
4679 return typedef_.canonicalName; | 4705 return typedef_.canonicalName; |
4680 } | 4706 } |
4681 | 4707 |
4682 /// Annotation describing information which is not part of Dart semantics; in | 4708 /// Annotation describing information which is not part of Dart semantics; in |
4683 /// other words, if this information (or any information it refers to) changes, | 4709 /// other words, if this information (or any information it refers to) changes, |
4684 /// static analysis and runtime behavior of the library are unaffected. | 4710 /// static analysis and runtime behavior of the library are unaffected. |
4685 const informative = null; | 4711 const informative = null; |
OLD | NEW |