| OLD | NEW |
| 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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:analyzer/dart/ast/ast.dart'; | 5 import 'package:analyzer/dart/ast/ast.dart'; |
| 6 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; | 6 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; |
| 7 import 'package:analyzer/dart/ast/token.dart'; | 7 import 'package:analyzer/dart/ast/token.dart'; |
| 8 import 'package:analyzer/dart/element/element.dart'; | 8 import 'package:analyzer/dart/element/element.dart'; |
| 9 import 'package:analyzer/dart/element/type.dart'; | 9 import 'package:analyzer/dart/element/type.dart'; |
| 10 import 'package:analyzer/src/dart/element/element.dart'; | 10 import 'package:analyzer/src/dart/element/element.dart'; |
| (...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 377 class _KernelLibraryResynthesizerContextImpl | 377 class _KernelLibraryResynthesizerContextImpl |
| 378 implements KernelLibraryResynthesizerContext { | 378 implements KernelLibraryResynthesizerContext { |
| 379 final KernelResynthesizer _resynthesizer; | 379 final KernelResynthesizer _resynthesizer; |
| 380 | 380 |
| 381 @override | 381 @override |
| 382 final kernel.Library library; | 382 final kernel.Library library; |
| 383 | 383 |
| 384 _KernelLibraryResynthesizerContextImpl(this._resynthesizer, this.library); | 384 _KernelLibraryResynthesizerContextImpl(this._resynthesizer, this.library); |
| 385 | 385 |
| 386 @override | 386 @override |
| 387 List<ElementAnnotation> buildAnnotations( |
| 388 CompilationUnitElementImpl unit, List<kernel.Expression> expressions) { |
| 389 int length = expressions.length; |
| 390 if (length != 0) { |
| 391 var annotations = new List<ElementAnnotation>(length); |
| 392 for (int i = 0; i < length; i++) { |
| 393 annotations[i] = _buildAnnotation(unit, expressions[i]); |
| 394 } |
| 395 return annotations; |
| 396 } else { |
| 397 return const <ElementAnnotation>[]; |
| 398 } |
| 399 } |
| 400 |
| 401 @override |
| 387 UnitExplicitTopLevelAccessors buildTopLevelAccessors( | 402 UnitExplicitTopLevelAccessors buildTopLevelAccessors( |
| 388 CompilationUnitElementImpl unit) { | 403 CompilationUnitElementImpl unit) { |
| 389 var accessorsData = new UnitExplicitTopLevelAccessors(); | 404 var accessorsData = new UnitExplicitTopLevelAccessors(); |
| 390 var implicitVariables = <String, TopLevelVariableElementImpl>{}; | 405 var implicitVariables = <String, TopLevelVariableElementImpl>{}; |
| 391 // Build explicit property accessors and implicit fields. | 406 // Build explicit property accessors and implicit fields. |
| 392 for (var procedure in library.procedures) { | 407 for (var procedure in library.procedures) { |
| 393 bool isGetter = procedure.kind == kernel.ProcedureKind.Getter; | 408 bool isGetter = procedure.kind == kernel.ProcedureKind.Getter; |
| 394 bool isSetter = procedure.kind == kernel.ProcedureKind.Setter; | 409 bool isSetter = procedure.kind == kernel.ProcedureKind.Setter; |
| 395 if (isGetter || isSetter) { | 410 if (isGetter || isSetter) { |
| 396 var accessor = | 411 var accessor = |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 537 | 552 |
| 538 functionElement.returnType = | 553 functionElement.returnType = |
| 539 getType(functionElement, kernelType.returnType); | 554 getType(functionElement, kernelType.returnType); |
| 540 return functionElement.type; | 555 return functionElement.type; |
| 541 } | 556 } |
| 542 | 557 |
| 543 // TODO(scheglov) Support other kernel types. | 558 // TODO(scheglov) Support other kernel types. |
| 544 throw new UnimplementedError('For ${kernelType.runtimeType}'); | 559 throw new UnimplementedError('For ${kernelType.runtimeType}'); |
| 545 } | 560 } |
| 546 | 561 |
| 562 ElementAnnotationImpl _buildAnnotation( |
| 563 CompilationUnitElementImpl unit, kernel.Expression expression) { |
| 564 ElementAnnotationImpl elementAnnotation = new ElementAnnotationImpl(unit); |
| 565 Expression constExpr = getExpression(expression); |
| 566 if (constExpr is Identifier) { |
| 567 elementAnnotation.element = constExpr.staticElement; |
| 568 elementAnnotation.annotationAst = AstTestFactory.annotation(constExpr); |
| 569 } else if (constExpr is InstanceCreationExpression) { |
| 570 elementAnnotation.element = constExpr.staticElement; |
| 571 Identifier typeName = constExpr.constructorName.type.name; |
| 572 SimpleIdentifier constructorName = constExpr.constructorName.name; |
| 573 elementAnnotation.annotationAst = AstTestFactory.annotation2( |
| 574 typeName, constructorName, constExpr.argumentList) |
| 575 ..element = constExpr.staticElement; |
| 576 } else { |
| 577 throw new StateError( |
| 578 'Unexpected annotation type: ${constExpr.runtimeType}'); |
| 579 } |
| 580 return elementAnnotation; |
| 581 } |
| 582 |
| 547 /** | 583 /** |
| 548 * Return the [ElementImpl] that corresponds to the given [name], or `null` | 584 * Return the [ElementImpl] that corresponds to the given [name], or `null` |
| 549 * if the corresponding element cannot be found. | 585 * if the corresponding element cannot be found. |
| 550 */ | 586 */ |
| 551 ElementImpl _getElement(kernel.CanonicalName name) { | 587 ElementImpl _getElement(kernel.CanonicalName name) { |
| 552 if (name == null) return null; | 588 if (name == null) return null; |
| 553 kernel.CanonicalName parentName = name.parent; | 589 kernel.CanonicalName parentName = name.parent; |
| 554 | 590 |
| 555 // If the parent is the root, then this name is a library. | 591 // If the parent is the root, then this name is a library. |
| 556 if (parentName.isRoot) { | 592 if (parentName.isRoot) { |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 650 for (var typeParameter in ctx.typeParameters) { | 686 for (var typeParameter in ctx.typeParameters) { |
| 651 if (typeParameter.name == name) { | 687 if (typeParameter.name == name) { |
| 652 return typeParameter; | 688 return typeParameter; |
| 653 } | 689 } |
| 654 } | 690 } |
| 655 } | 691 } |
| 656 } | 692 } |
| 657 throw new StateError('Not found $kernelTypeParameter in $context'); | 693 throw new StateError('Not found $kernelTypeParameter in $context'); |
| 658 } | 694 } |
| 659 } | 695 } |
| OLD | NEW |