| 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 library dart2js.resolution_strategy; | 5 library dart2js.resolution_strategy; |
| 6 | 6 |
| 7 import 'package:front_end/src/fasta/scanner.dart' show Token; | 7 import 'package:front_end/src/fasta/scanner.dart' show Token; |
| 8 | 8 |
| 9 import '../common.dart'; | 9 import '../common.dart'; |
| 10 import '../common_elements.dart'; | 10 import '../common_elements.dart'; |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 _compiler.reporter, | 101 _compiler.reporter, |
| 102 elementEnvironment, | 102 elementEnvironment, |
| 103 commonElements, | 103 commonElements, |
| 104 nativeBasicData); | 104 nativeBasicData); |
| 105 } | 105 } |
| 106 | 106 |
| 107 NoSuchMethodResolver createNoSuchMethodResolver() => | 107 NoSuchMethodResolver createNoSuchMethodResolver() => |
| 108 new ResolutionNoSuchMethodResolver(); | 108 new ResolutionNoSuchMethodResolver(); |
| 109 | 109 |
| 110 MirrorsDataBuilder createMirrorsDataBuilder() { | 110 MirrorsDataBuilder createMirrorsDataBuilder() { |
| 111 return new MirrorsDataImpl(_compiler, _compiler.options, commonElements); | 111 return new MirrorsDataImpl( |
| 112 _compiler, _compiler.options, elementEnvironment, commonElements); |
| 112 } | 113 } |
| 113 | 114 |
| 114 MirrorsResolutionAnalysis createMirrorsResolutionAnalysis( | 115 MirrorsResolutionAnalysis createMirrorsResolutionAnalysis( |
| 115 JavaScriptBackend backend) => | 116 JavaScriptBackend backend) => |
| 116 new MirrorsResolutionAnalysisImpl(backend, _compiler.resolution); | 117 new MirrorsResolutionAnalysisImpl(backend, _compiler.resolution); |
| 117 | 118 |
| 118 RuntimeTypesNeedBuilder createRuntimeTypesNeedBuilder() { | 119 RuntimeTypesNeedBuilder createRuntimeTypesNeedBuilder() { |
| 119 return new ResolutionRuntimeTypesNeedBuilderImpl( | 120 return new ResolutionRuntimeTypesNeedBuilderImpl( |
| 120 elementEnvironment, dartTypes); | 121 elementEnvironment, dartTypes); |
| 121 } | 122 } |
| (...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 657 return function.type; | 658 return function.type; |
| 658 } | 659 } |
| 659 | 660 |
| 660 @override | 661 @override |
| 661 ResolutionDartType getUnaliasedType(covariant ResolutionDartType type) { | 662 ResolutionDartType getUnaliasedType(covariant ResolutionDartType type) { |
| 662 type.computeUnaliased(_resolution); | 663 type.computeUnaliased(_resolution); |
| 663 return type.unaliased; | 664 return type.unaliased; |
| 664 } | 665 } |
| 665 | 666 |
| 666 @override | 667 @override |
| 667 Iterable<ConstantValue> getMemberMetadata(covariant MemberElement element) { | 668 Iterable<ConstantValue> getMemberMetadata(covariant MemberElement element, |
| 669 {bool includeParameterMetadata: false}) { |
| 668 List<ConstantValue> values = <ConstantValue>[]; | 670 List<ConstantValue> values = <ConstantValue>[]; |
| 671 values.addAll(_getMetadataOf(element)); |
| 672 if (includeParameterMetadata) { |
| 673 if (element.isFunction || element.isConstructor || element.isSetter) { |
| 674 MethodElement function = element.implementation; |
| 675 function.functionSignature.forEachParameter( |
| 676 (parameter) => values.addAll(_getMetadataOf(parameter))); |
| 677 } |
| 678 } |
| 679 return values; |
| 680 } |
| 681 |
| 682 @override |
| 683 Iterable<ConstantValue> getLibraryMetadata(covariant LibraryElement element) { |
| 684 return _getMetadataOf(element); |
| 685 } |
| 686 |
| 687 @override |
| 688 Iterable<ConstantValue> getClassMetadata(covariant ClassElement element) { |
| 689 return _getMetadataOf(element); |
| 690 } |
| 691 |
| 692 @override |
| 693 Iterable<ConstantValue> getTypedefMetadata(covariant TypedefElement element) { |
| 694 return _getMetadataOf(element); |
| 695 } |
| 696 |
| 697 Iterable<ConstantValue> _getMetadataOf(Element element) { |
| 698 List<ConstantValue> constants = <ConstantValue>[]; |
| 669 _compiler.reporter.withCurrentElement(element, () { | 699 _compiler.reporter.withCurrentElement(element, () { |
| 670 for (MetadataAnnotation metadata in element.implementation.metadata) { | 700 for (MetadataAnnotation metadata in element.implementation.metadata) { |
| 671 metadata.ensureResolved(_compiler.resolution); | 701 metadata.ensureResolved(_compiler.resolution); |
| 672 assert(metadata.constant != null, | 702 assert(metadata.constant != null, |
| 673 failedAt(metadata, "Unevaluated metadata constant.")); | 703 failedAt(metadata, "Unevaluated metadata constant.")); |
| 674 ConstantValue value = | 704 constants.add( |
| 675 _compiler.constants.getConstantValue(metadata.constant); | 705 _compiler.backend.constants.getConstantValue(metadata.constant)); |
| 676 values.add(value); | |
| 677 } | 706 } |
| 678 }); | 707 }); |
| 679 return values; | 708 return constants; |
| 680 } | 709 } |
| 681 | 710 |
| 682 @override | 711 @override |
| 683 ResolutionFunctionType getFunctionTypeOfTypedef( | 712 ResolutionFunctionType getFunctionTypeOfTypedef( |
| 684 covariant TypedefElement typedef) { | 713 covariant TypedefElement typedef) { |
| 685 return typedef.alias; | 714 return typedef.alias; |
| 686 } | 715 } |
| 687 } | 716 } |
| 688 | 717 |
| 689 /// AST-based logic for processing annotations. These annotations are processed | 718 /// AST-based logic for processing annotations. These annotations are processed |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 887 @override | 916 @override |
| 888 WorkItem createWorkItem(MemberElement element) { | 917 WorkItem createWorkItem(MemberElement element) { |
| 889 assert(element.isDeclaration, failedAt(element)); | 918 assert(element.isDeclaration, failedAt(element)); |
| 890 if (element.isMalformed) return null; | 919 if (element.isMalformed) return null; |
| 891 | 920 |
| 892 assert(element is AnalyzableElement, | 921 assert(element is AnalyzableElement, |
| 893 failedAt(element, 'Element $element is not analyzable.')); | 922 failedAt(element, 'Element $element is not analyzable.')); |
| 894 return _resolution.createWorkItem(element); | 923 return _resolution.createWorkItem(element); |
| 895 } | 924 } |
| 896 } | 925 } |
| OLD | NEW |