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 |