OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012, the Dart project authors. | 2 * Copyright (c) 2012, the Dart project authors. |
3 * | 3 * |
4 * Licensed under the Eclipse Public License v1.0 (the "License"); you may not u
se this file except | 4 * Licensed under the Eclipse Public License v1.0 (the "License"); you may not u
se this file except |
5 * in compliance with the License. You may obtain a copy of the License at | 5 * in compliance with the License. You may obtain a copy of the License at |
6 * | 6 * |
7 * http://www.eclipse.org/legal/epl-v10.html | 7 * http://www.eclipse.org/legal/epl-v10.html |
8 * | 8 * |
9 * Unless required by applicable law or agreed to in writing, software distribut
ed under the License | 9 * Unless required by applicable law or agreed to in writing, software distribut
ed under the License |
10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY K
IND, either express | 10 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY K
IND, either express |
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
611 LibraryElementImpl libraryElement = (LibraryElementImpl) sourceEntry.get
Value(DartEntry.ELEMENT); | 611 LibraryElementImpl libraryElement = (LibraryElementImpl) sourceEntry.get
Value(DartEntry.ELEMENT); |
612 if (libraryElement != null) { | 612 if (libraryElement != null) { |
613 library.setLibraryElement(libraryElement); | 613 library.setLibraryElement(libraryElement); |
614 } | 614 } |
615 } | 615 } |
616 libraryMap.put(librarySource, library); | 616 libraryMap.put(librarySource, library); |
617 return library; | 617 return library; |
618 } | 618 } |
619 | 619 |
620 /** | 620 /** |
| 621 * Ensure that the given library has an element model built for it. If anoth
er task needs to be |
| 622 * executed first in order to build the element model, that task is placed i
n {@link #taskData}. |
| 623 * |
| 624 * @param library the library which needs an element model. |
| 625 */ |
| 626 private void ensureElementModel(ResolvableLibrary library) { |
| 627 Source librarySource = library.getLibrarySource(); |
| 628 DartEntry libraryEntry = getReadableDartEntry(librarySource); |
| 629 if (libraryEntry != null && libraryEntry.getState(DartEntry.PARSED_UNIT) !
= CacheState.ERROR) { |
| 630 workManager.addFirst(librarySource, SourcePriority.LIBRARY); |
| 631 if (taskData == null) { |
| 632 taskData = createResolveDartLibraryTask(librarySource, libraryEntry); |
| 633 } |
| 634 } |
| 635 } |
| 636 |
| 637 /** |
621 * Ensure that all of the libraries that are exported by the given library (
but are not | 638 * Ensure that all of the libraries that are exported by the given library (
but are not |
622 * themselves in the cycle) have element models built for them. | 639 * themselves in the cycle) have element models built for them. If another t
ask needs to be |
| 640 * executed first in order to build the element model, that task is placed i
n {@link #taskData}. |
623 * | 641 * |
624 * @param library the library being tested | 642 * @param library the library being tested |
625 */ | 643 */ |
626 private void ensureExports(ResolvableLibrary library, HashSet<Source> visite
dLibraries) { | 644 private void ensureExports(ResolvableLibrary library, HashSet<Source> visite
dLibraries) { |
627 ResolvableLibrary[] dependencies = library.getExports(); | 645 ResolvableLibrary[] dependencies = library.getExports(); |
628 int dependencyCount = dependencies.length; | 646 int dependencyCount = dependencies.length; |
629 for (int i = 0; i < dependencyCount; i++) { | 647 for (int i = 0; i < dependencyCount; i++) { |
630 ResolvableLibrary dependency = dependencies[i]; | 648 ResolvableLibrary dependency = dependencies[i]; |
631 if (!librariesInCycle.contains(dependency) | 649 if (!librariesInCycle.contains(dependency) |
632 && visitedLibraries.add(dependency.getLibrarySource())) { | 650 && visitedLibraries.add(dependency.getLibrarySource())) { |
633 if (dependency.getLibraryElement() == null) { | 651 if (dependency.getLibraryElement() == null) { |
634 Source dependencySource = dependency.getLibrarySource(); | 652 ensureElementModel(dependency); |
635 workManager.addFirst(dependencySource, SourcePriority.LIBRARY); | |
636 if (taskData == null) { | |
637 taskData = createResolveDartLibraryTask( | |
638 dependencySource, | |
639 getReadableDartEntry(dependencySource)); | |
640 return; | |
641 } | |
642 } else { | 653 } else { |
643 ensureExports(dependency, visitedLibraries); | 654 ensureExports(dependency, visitedLibraries); |
644 if (taskData != null) { | 655 } |
645 return; | 656 if (taskData != null) { |
646 } | 657 return; |
647 } | 658 } |
648 } | 659 } |
649 } | 660 } |
650 } | 661 } |
651 | 662 |
652 /** | 663 /** |
653 * Ensure that all of the libraries that are exported by the given library (
but are not | 664 * Ensure that all of the libraries that are exported by the given library (
but are not |
654 * themselves in the cycle) have element models built for them. | 665 * themselves in the cycle) have element models built for them. If another t
ask needs to be |
| 666 * executed first in order to build the element model, that task is placed i
n {@link #taskData}. |
655 * | 667 * |
656 * @param library the library being tested | 668 * @param library the library being tested |
657 * @throws MissingDataException if there is at least one library being depen
ded on that does not | |
658 * have an element model built for it | |
659 */ | 669 */ |
660 private void ensureImports(ResolvableLibrary library) { | 670 private void ensureImports(ResolvableLibrary library) { |
661 ResolvableLibrary[] dependencies = library.getImports(); | 671 ResolvableLibrary[] dependencies = library.getImports(); |
662 int dependencyCount = dependencies.length; | 672 int dependencyCount = dependencies.length; |
663 for (int i = 0; i < dependencyCount; i++) { | 673 for (int i = 0; i < dependencyCount; i++) { |
664 ResolvableLibrary dependency = dependencies[i]; | 674 ResolvableLibrary dependency = dependencies[i]; |
665 if (!librariesInCycle.contains(dependency) && dependency.getLibraryEleme
nt() == null) { | 675 if (!librariesInCycle.contains(dependency) && dependency.getLibraryEleme
nt() == null) { |
666 Source dependencySource = dependency.getLibrarySource(); | 676 ensureElementModel(dependency); |
667 workManager.addFirst(dependencySource, SourcePriority.LIBRARY); | 677 if (taskData != null) { |
668 if (taskData == null) { | |
669 taskData = createResolveDartLibraryTask( | |
670 dependencySource, | |
671 getReadableDartEntry(dependencySource)); | |
672 return; | 678 return; |
673 } | 679 } |
674 } | 680 } |
675 } | 681 } |
676 } | 682 } |
677 | 683 |
678 /** | 684 /** |
679 * Ensure that all of the libraries that are either imported or exported by
libraries in the | 685 * Ensure that all of the libraries that are either imported or exported by
libraries in the |
680 * cycle (but are not themselves in the cycle) have element models built for
them. | 686 * cycle (but are not themselves in the cycle) have element models built for
them. |
681 */ | 687 */ |
(...skipping 5115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5797 writer.println(" missing sources"); | 5803 writer.println(" missing sources"); |
5798 for (Source source : missingSources) { | 5804 for (Source source : missingSources) { |
5799 writer.print(" "); | 5805 writer.print(" "); |
5800 writer.println(source.getFullName()); | 5806 writer.println(source.getFullName()); |
5801 } | 5807 } |
5802 logInformation(writer.toString()); | 5808 logInformation(writer.toString()); |
5803 } | 5809 } |
5804 return changedSources.size() > 0; | 5810 return changedSources.size() > 0; |
5805 } | 5811 } |
5806 } | 5812 } |
OLD | NEW |