OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 /** | 5 /** |
6 * This library is capable of producing linked summaries from unlinked | 6 * This library is capable of producing linked summaries from unlinked |
7 * ones (or prelinked ones). It functions by building a miniature | 7 * ones (or prelinked ones). It functions by building a miniature |
8 * element model to represent the contents of the summaries, and then | 8 * element model to represent the contents of the summaries, and then |
9 * scanning the element model to gather linked information and adding | 9 * scanning the element model to gather linked information and adding |
10 * it to the summary data structures. | 10 * it to the summary data structures. |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 * | 93 * |
94 * The [strong] flag controls whether type inference is performed in strong | 94 * The [strong] flag controls whether type inference is performed in strong |
95 * mode or spec mode. Note that in spec mode, the only types that are inferred | 95 * mode or spec mode. Note that in spec mode, the only types that are inferred |
96 * are the types of initializing formals, which are inferred from the types of | 96 * are the types of initializing formals, which are inferred from the types of |
97 * the corresponding fields. | 97 * the corresponding fields. |
98 * | 98 * |
99 * A map is returned whose keys are the URIs of the libraries in this | 99 * A map is returned whose keys are the URIs of the libraries in this |
100 * build unit, and whose values are the corresponding | 100 * build unit, and whose values are the corresponding |
101 * [LinkedLibraryBuilder]s. | 101 * [LinkedLibraryBuilder]s. |
102 */ | 102 */ |
103 Map<String, LinkedLibraryBuilder> link(Set<String> libraryUris, | 103 Map<String, LinkedLibraryBuilder> link( |
104 GetDependencyCallback getDependency, GetUnitCallback getUnit, bool strong) { | 104 Set<String> libraryUris, |
| 105 GetDependencyCallback getDependency, |
| 106 GetUnitCallback getUnit, |
| 107 GetDeclaredVariable getDeclaredVariable, |
| 108 bool strong) { |
105 Map<String, LinkedLibraryBuilder> linkedLibraries = | 109 Map<String, LinkedLibraryBuilder> linkedLibraries = |
106 setupForLink(libraryUris, getUnit); | 110 setupForLink(libraryUris, getUnit, getDeclaredVariable); |
107 relink(linkedLibraries, getDependency, getUnit, strong); | 111 relink(linkedLibraries, getDependency, getUnit, strong); |
108 return linkedLibraries; | 112 return linkedLibraries; |
109 } | 113 } |
110 | 114 |
111 /** | 115 /** |
112 * Given [libraries] (a map from URI to [LinkedLibraryBuilder] | 116 * Given [libraries] (a map from URI to [LinkedLibraryBuilder] |
113 * containing correct prelinked information), rebuild linked | 117 * containing correct prelinked information), rebuild linked |
114 * information, using [getDependency] to fetch the [LinkedLibrary] | 118 * information, using [getDependency] to fetch the [LinkedLibrary] |
115 * objects from other build units, and [getUnit] to fetch the | 119 * objects from other build units, and [getUnit] to fetch the |
116 * [UnlinkedUnit] objects from both this build unit and other build | 120 * [UnlinkedUnit] objects from both this build unit and other build |
(...skipping 11 matching lines...) Expand all Loading... |
128 | 132 |
129 /** | 133 /** |
130 * Prepare to link together the build unit consisting of [libraryUris], using | 134 * Prepare to link together the build unit consisting of [libraryUris], using |
131 * [getUnit] to fetch the [UnlinkedUnit] objects from both this build unit and | 135 * [getUnit] to fetch the [UnlinkedUnit] objects from both this build unit and |
132 * other build units. | 136 * other build units. |
133 * | 137 * |
134 * The libraries are prelinked, and a map is returned whose keys are the URIs of | 138 * The libraries are prelinked, and a map is returned whose keys are the URIs of |
135 * the libraries in this build unit, and whose values are the corresponding | 139 * the libraries in this build unit, and whose values are the corresponding |
136 * [LinkedLibraryBuilder]s. | 140 * [LinkedLibraryBuilder]s. |
137 */ | 141 */ |
138 Map<String, LinkedLibraryBuilder> setupForLink( | 142 Map<String, LinkedLibraryBuilder> setupForLink(Set<String> libraryUris, |
139 Set<String> libraryUris, GetUnitCallback getUnit) { | 143 GetUnitCallback getUnit, GetDeclaredVariable getDeclaredVariable) { |
140 Map<String, LinkedLibraryBuilder> linkedLibraries = | 144 Map<String, LinkedLibraryBuilder> linkedLibraries = |
141 <String, LinkedLibraryBuilder>{}; | 145 <String, LinkedLibraryBuilder>{}; |
142 for (String absoluteUri in libraryUris) { | 146 for (String absoluteUri in libraryUris) { |
143 Uri uri = Uri.parse(absoluteUri); | 147 Uri uri = Uri.parse(absoluteUri); |
144 UnlinkedUnit getRelativeUnit(String relativeUri) => | 148 UnlinkedUnit getRelativeUnit(String relativeUri) => |
145 getUnit(resolveRelativeUri(uri, Uri.parse(relativeUri)).toString()); | 149 getUnit(resolveRelativeUri(uri, Uri.parse(relativeUri)).toString()); |
146 linkedLibraries[absoluteUri] = prelink( | 150 linkedLibraries[absoluteUri] = prelink( |
147 getUnit(absoluteUri), | 151 getUnit(absoluteUri), |
148 getRelativeUnit, | 152 getRelativeUnit, |
149 (String relativeUri) => getRelativeUnit(relativeUri)?.publicNamespace); | 153 (String relativeUri) => getRelativeUnit(relativeUri)?.publicNamespace, |
| 154 getDeclaredVariable); |
150 } | 155 } |
151 return linkedLibraries; | 156 return linkedLibraries; |
152 } | 157 } |
153 | 158 |
154 /** | 159 /** |
155 * Create an [EntityRefBuilder] representing the given [type], in a form | 160 * Create an [EntityRefBuilder] representing the given [type], in a form |
156 * suitable for inclusion in [LinkedUnit.types]. [compilationUnit] is the | 161 * suitable for inclusion in [LinkedUnit.types]. [compilationUnit] is the |
157 * compilation unit in which the type will be used. If [slot] is provided, it | 162 * compilation unit in which the type will be used. If [slot] is provided, it |
158 * is stored in [EntityRefBuilder.slot]. | 163 * is stored in [EntityRefBuilder.slot]. |
159 */ | 164 */ |
(...skipping 4810 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4970 * there are no type parameters in scope. | 4975 * there are no type parameters in scope. |
4971 */ | 4976 */ |
4972 TypeParameterizedElementMixin get _typeParameterContext; | 4977 TypeParameterizedElementMixin get _typeParameterContext; |
4973 | 4978 |
4974 @override | 4979 @override |
4975 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); | 4980 noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); |
4976 | 4981 |
4977 @override | 4982 @override |
4978 String toString() => '$enclosingElement.$name'; | 4983 String toString() => '$enclosingElement.$name'; |
4979 } | 4984 } |
OLD | NEW |