| 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 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 462 cls.ensureResolved(_resolution); | 462 cls.ensureResolved(_resolution); |
| 463 Element member = cls.implementation.lookupLocalMember(name); | 463 Element member = cls.implementation.lookupLocalMember(name); |
| 464 if (member != null && member.isAbstractField) { | 464 if (member != null && member.isAbstractField) { |
| 465 AbstractFieldElement abstractField = member; | 465 AbstractFieldElement abstractField = member; |
| 466 if (setter) { | 466 if (setter) { |
| 467 member = abstractField.setter; | 467 member = abstractField.setter; |
| 468 } else { | 468 } else { |
| 469 member = abstractField.getter; | 469 member = abstractField.getter; |
| 470 } | 470 } |
| 471 if (member == null && required) { | 471 if (member == null && required) { |
| 472 throw new SpannableAssertionFailure( | 472 failedAt( |
| 473 cls, | 473 cls, |
| 474 "The class '${cls.name}' does not contain required " | 474 "The class '${cls.name}' does not contain required " |
| 475 "${setter ? 'setter' : 'getter'}: '$name'."); | 475 "${setter ? 'setter' : 'getter'}: '$name'."); |
| 476 } | 476 } |
| 477 } | 477 } |
| 478 if (member == null && required) { | 478 if (member == null && required) { |
| 479 throw new SpannableAssertionFailure( | 479 throw new SpannableAssertionFailure( |
| 480 cls, | 480 cls, |
| 481 "The class '${cls.name}' does not " | 481 "The class '${cls.name}' does not " |
| 482 "contain required member: '$name'."); | 482 "contain required member: '$name'."); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 564 {bool setter: false, bool required: false}) { | 564 {bool setter: false, bool required: false}) { |
| 565 Element member = library.implementation.findLocal(name); | 565 Element member = library.implementation.findLocal(name); |
| 566 if (member != null && member.isAbstractField) { | 566 if (member != null && member.isAbstractField) { |
| 567 AbstractFieldElement abstractField = member; | 567 AbstractFieldElement abstractField = member; |
| 568 if (setter) { | 568 if (setter) { |
| 569 member = abstractField.setter; | 569 member = abstractField.setter; |
| 570 } else { | 570 } else { |
| 571 member = abstractField.getter; | 571 member = abstractField.getter; |
| 572 } | 572 } |
| 573 if (member == null && required) { | 573 if (member == null && required) { |
| 574 throw new SpannableAssertionFailure( | 574 failedAt( |
| 575 library, | 575 library, |
| 576 "The library '${library.canonicalUri}' does not contain required " | 576 "The library '${library.canonicalUri}' does not contain required " |
| 577 "${setter ? 'setter' : 'getter'}: '$name'."); | 577 "${setter ? 'setter' : 'getter'}: '$name'."); |
| 578 } | 578 } |
| 579 } | 579 } |
| 580 if (member == null && required) { | 580 if (member == null && required) { |
| 581 throw new SpannableAssertionFailure( | 581 failedAt( |
| 582 member, | 582 member, |
| 583 "The library '${library.libraryName}' does not " | 583 "The library '${library.libraryName}' does not " |
| 584 "contain required member: '$name'."); | 584 "contain required member: '$name'."); |
| 585 } | 585 } |
| 586 return member?.declaration; | 586 return member?.declaration; |
| 587 } | 587 } |
| 588 | 588 |
| 589 @override | 589 @override |
| 590 void forEachLibraryMember( | 590 void forEachLibraryMember( |
| 591 covariant LibraryElement library, void f(MemberEntity member)) { | 591 covariant LibraryElement library, void f(MemberEntity member)) { |
| 592 library.implementation.forEachLocalMember((Element element) { | 592 library.implementation.forEachLocalMember((Element element) { |
| 593 if (!element.isClass && !element.isTypedef) { | 593 if (!element.isClass && !element.isTypedef) { |
| 594 MemberElement member = element; | 594 MemberElement member = element; |
| 595 f(member); | 595 f(member); |
| 596 } | 596 } |
| 597 }); | 597 }); |
| 598 } | 598 } |
| 599 | 599 |
| 600 @override | 600 @override |
| 601 ClassElement lookupClass(covariant LibraryElement library, String name, | 601 ClassElement lookupClass(covariant LibraryElement library, String name, |
| 602 {bool required: false}) { | 602 {bool required: false}) { |
| 603 ClassElement cls = library.implementation.findLocal(name); | 603 ClassElement cls = library.implementation.findLocal(name); |
| 604 if (cls == null && required) { | 604 if (cls == null && required) { |
| 605 throw new SpannableAssertionFailure( | 605 failedAt( |
| 606 library, | 606 library, |
| 607 "The library '${library.libraryName}' does not " | 607 "The library '${library.libraryName}' does not " |
| 608 "contain required class: '$name'."); | 608 "contain required class: '$name'."); |
| 609 } | 609 } |
| 610 return cls?.declaration; | 610 return cls?.declaration; |
| 611 } | 611 } |
| 612 | 612 |
| 613 @override | 613 @override |
| 614 void forEachClass(covariant LibraryElement library, void f(ClassEntity cls)) { | 614 void forEachClass(covariant LibraryElement library, void f(ClassEntity cls)) { |
| 615 library.implementation.forEachLocalMember((dynamic member) { | 615 library.implementation.forEachLocalMember((dynamic member) { |
| 616 if (member.isClass) { | 616 if (member.isClass) { |
| 617 ClassElement cls = member; | 617 ClassElement cls = member; |
| 618 f(cls); | 618 f(cls); |
| 619 } | 619 } |
| 620 }); | 620 }); |
| 621 } | 621 } |
| 622 | 622 |
| 623 @override | 623 @override |
| 624 LibraryElement lookupLibrary(Uri uri, {bool required: false}) { | 624 LibraryElement lookupLibrary(Uri uri, {bool required: false}) { |
| 625 LibraryElement library = _libraryProvider.lookupLibrary(uri); | 625 LibraryElement library = _libraryProvider.lookupLibrary(uri); |
| 626 // If the script of the library is synthesized, the library does not exist | 626 // If the script of the library is synthesized, the library does not exist |
| 627 // and we do not try to load the helpers. | 627 // and we do not try to load the helpers. |
| 628 // | 628 // |
| 629 // This could for example happen if dart:async is disabled, then loading it | 629 // This could for example happen if dart:async is disabled, then loading it |
| 630 // should not try to find the given element. | 630 // should not try to find the given element. |
| 631 if (library != null && library.isSynthesized) { | 631 if (library != null && library.isSynthesized) { |
| 632 return null; | 632 return null; |
| 633 } | 633 } |
| 634 if (library == null && required) { | 634 if (library == null && required) { |
| 635 throw new SpannableAssertionFailure( | 635 failedAt(NO_LOCATION_SPANNABLE, "The library '${uri}' was not found."); |
| 636 NO_LOCATION_SPANNABLE, "The library '${uri}' was not found."); | |
| 637 } | 636 } |
| 638 return library; | 637 return library; |
| 639 } | 638 } |
| 640 | 639 |
| 641 @override | 640 @override |
| 642 bool isDeferredLoadLibraryGetter(covariant MemberElement member) { | 641 bool isDeferredLoadLibraryGetter(covariant MemberElement member) { |
| 643 return member.isDeferredLoaderGetter; | 642 return member.isDeferredLoaderGetter; |
| 644 } | 643 } |
| 645 | 644 |
| 646 @override | 645 @override |
| (...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 929 @override | 928 @override |
| 930 WorkItem createWorkItem(MemberElement element) { | 929 WorkItem createWorkItem(MemberElement element) { |
| 931 assert(element.isDeclaration, failedAt(element)); | 930 assert(element.isDeclaration, failedAt(element)); |
| 932 if (element.isMalformed) return null; | 931 if (element.isMalformed) return null; |
| 933 | 932 |
| 934 assert(element is AnalyzableElement, | 933 assert(element is AnalyzableElement, |
| 935 failedAt(element, 'Element $element is not analyzable.')); | 934 failedAt(element, 'Element $element is not analyzable.')); |
| 936 return _resolution.createWorkItem(element); | 935 return _resolution.createWorkItem(element); |
| 937 } | 936 } |
| 938 } | 937 } |
| OLD | NEW |