Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(81)

Side by Side Diff: sdk/lib/_internal/compiler/implementation/mirrors_used.dart

Issue 330913004: Move Compiler.libraries to LibraryLoader. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix compiler_isolate.dart Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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.mirrors_used; 5 library dart2js.mirrors_used;
6 6
7 import 'dart2jslib.dart' show 7 import 'dart2jslib.dart' show
8 Compiler, 8 Compiler,
9 CompilerTask, 9 CompilerTask,
10 Constant, 10 Constant,
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 MirrorUsageAnalyzer(Compiler compiler, this.task) 168 MirrorUsageAnalyzer(Compiler compiler, this.task)
169 : compiler = compiler, 169 : compiler = compiler,
170 librariesWithUsage = new Set<LibraryElement>(), 170 librariesWithUsage = new Set<LibraryElement>(),
171 cachedStrings = new Map<Constant, List<String>>(), 171 cachedStrings = new Map<Constant, List<String>>(),
172 cachedElements = new Map<Constant, List<Element>>(); 172 cachedElements = new Map<Constant, List<Element>>();
173 173
174 /// Collect and merge all @MirrorsUsed annotations. As a side-effect, also 174 /// Collect and merge all @MirrorsUsed annotations. As a side-effect, also
175 /// compute which libraries have the annotation (which is used by 175 /// compute which libraries have the annotation (which is used by
176 /// [MirrorUsageAnalyzerTask.hasMirrorUsage]). 176 /// [MirrorUsageAnalyzerTask.hasMirrorUsage]).
177 void run() { 177 void run() {
178 wildcard = compiler.libraries.values.toList(); 178 wildcard = compiler.libraryLoader.libraries.toList();
179 Map<LibraryElement, List<MirrorUsage>> usageMap = 179 Map<LibraryElement, List<MirrorUsage>> usageMap =
180 collectMirrorsUsedAnnotation(); 180 collectMirrorsUsedAnnotation();
181 propagateOverrides(usageMap); 181 propagateOverrides(usageMap);
182 Set<LibraryElement> librariesWithoutUsage = new Set<LibraryElement>(); 182 Set<LibraryElement> librariesWithoutUsage = new Set<LibraryElement>();
183 usageMap.forEach((LibraryElement library, List<MirrorUsage> usage) { 183 usageMap.forEach((LibraryElement library, List<MirrorUsage> usage) {
184 if (usage.isEmpty) librariesWithoutUsage.add(library); 184 if (usage.isEmpty) librariesWithoutUsage.add(library);
185 }); 185 });
186 if (librariesWithoutUsage.isEmpty) { 186 if (librariesWithoutUsage.isEmpty) {
187 mergedMirrorUsage = mergeUsages(usageMap); 187 mergedMirrorUsage = mergeUsages(usageMap);
188 } else { 188 } else {
189 mergedMirrorUsage = new MirrorUsage(null, null, null, null); 189 mergedMirrorUsage = new MirrorUsage(null, null, null, null);
190 } 190 }
191 } 191 }
192 192
193 /// Collect all @MirrorsUsed from all libraries and represent them as 193 /// Collect all @MirrorsUsed from all libraries and represent them as
194 /// [MirrorUsage]. 194 /// [MirrorUsage].
195 Map<LibraryElement, List<MirrorUsage>> collectMirrorsUsedAnnotation() { 195 Map<LibraryElement, List<MirrorUsage>> collectMirrorsUsedAnnotation() {
196 Map<LibraryElement, List<MirrorUsage>> result = 196 Map<LibraryElement, List<MirrorUsage>> result =
197 new Map<LibraryElement, List<MirrorUsage>>(); 197 new Map<LibraryElement, List<MirrorUsage>>();
198 for (LibraryElement library in compiler.libraries.values) { 198 for (LibraryElement library in compiler.libraryLoader.libraries) {
199 if (library.isInternalLibrary) continue; 199 if (library.isInternalLibrary) continue;
200 for (LibraryTag tag in library.tags) { 200 for (LibraryTag tag in library.tags) {
201 Import importTag = tag.asImport(); 201 Import importTag = tag.asImport();
202 if (importTag == null) continue; 202 if (importTag == null) continue;
203 compiler.withCurrentElement(library, () { 203 compiler.withCurrentElement(library, () {
204 List<MirrorUsage> usages = 204 List<MirrorUsage> usages =
205 mirrorsUsedOnLibraryTag(library, importTag); 205 mirrorsUsedOnLibraryTag(library, importTag);
206 if (usages != null) { 206 if (usages != null) {
207 List<MirrorUsage> existing = result[library]; 207 List<MirrorUsage> existing = result[library];
208 if (existing != null) { 208 if (existing != null) {
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 } 464 }
465 List<Element> result = <Element>[]; 465 List<Element> result = <Element>[];
466 for (var entry in list) { 466 for (var entry in list) {
467 if (entry is DartType) { 467 if (entry is DartType) {
468 DartType type = entry; 468 DartType type = entry;
469 result.add(type.element); 469 result.add(type.element);
470 } else { 470 } else {
471 String string = entry; 471 String string = entry;
472 LibraryElement libraryCandiate; 472 LibraryElement libraryCandiate;
473 String libraryNameCandiate; 473 String libraryNameCandiate;
474 for (LibraryElement l in compiler.libraries.values) { 474 for (LibraryElement l in compiler.libraryLoader.libraries) {
475 if (l.hasLibraryName()) { 475 if (l.hasLibraryName()) {
476 String libraryName = l.getLibraryOrScriptName(); 476 String libraryName = l.getLibraryOrScriptName();
477 if (string == libraryName) { 477 if (string == libraryName) {
478 // Found an exact match. 478 // Found an exact match.
479 libraryCandiate = l; 479 libraryCandiate = l;
480 libraryNameCandiate = libraryName; 480 libraryNameCandiate = libraryName;
481 break; 481 break;
482 } else if (string.startsWith('$libraryName.')) { 482 } else if (string.startsWith('$libraryName.')) {
483 if (libraryNameCandiate == null 483 if (libraryNameCandiate == null
484 || libraryNameCandiate.length < libraryName.length) { 484 || libraryNameCandiate.length < libraryName.length) {
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 // @MirrorsUsed(targets: fisk) 582 // @MirrorsUsed(targets: fisk)
583 // ^^^^ 583 // ^^^^
584 // 584 //
585 // Instead of saying 'fisk' should pretty print the problematic constant 585 // Instead of saying 'fisk' should pretty print the problematic constant
586 // value. 586 // value.
587 return spannable; 587 return spannable;
588 } 588 }
589 return node; 589 return node;
590 } 590 }
591 } 591 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698