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

Side by Side Diff: pkg/front_end/lib/src/fasta/source/source_loader.dart

Issue 2723113002: Consolidate analyzer dependencies. (Closed)
Patch Set: Remove new dependency on AsyncMarker. Created 3 years, 9 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
OLDNEW
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 library fasta.source_loader; 5 library fasta.source_loader;
6 6
7 import 'dart:async' show Future; 7 import 'dart:async' show Future;
8 8
9 import 'dart:io' show FileSystemException; 9 import 'dart:io' show FileSystemException;
10 10
11 import '../scanner/io.dart' show readBytesFromFile; 11 import '../scanner/io.dart' show readBytesFromFile;
12 12
13 import '../scanner.dart' show ErrorToken, ScannerResult, Token, scan; 13 import '../scanner.dart' show ErrorToken, ScannerResult, Token, scan;
14 14
15 import '../parser/class_member_parser.dart' show ClassMemberParser; 15 import '../parser/class_member_parser.dart' show ClassMemberParser;
16 16
17 import 'package:kernel/ast.dart' show Program; 17 import 'package:kernel/ast.dart' show Program;
18 18
19 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy; 19 import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
20 20
21 import 'package:kernel/core_types.dart' show CoreTypes; 21 import 'package:kernel/core_types.dart' show CoreTypes;
22 22
23 import '../errors.dart' show inputError, printUnexpected; 23 import '../errors.dart' show inputError, printUnexpected;
24 24
25 import '../messages.dart' show warning; 25 import '../messages.dart' show warning;
26 26
27 import '../export.dart' show Export; 27 import '../export.dart' show Export;
28 28
29 import '../analyzer/element_store.dart' show ElementStore;
30
31 import '../builder/builder.dart' show Builder, ClassBuilder, LibraryBuilder; 29 import '../builder/builder.dart' show Builder, ClassBuilder, LibraryBuilder;
32 30
33 import 'outline_builder.dart' show OutlineBuilder; 31 import 'outline_builder.dart' show OutlineBuilder;
34 32
35 import '../loader.dart' show Loader; 33 import '../loader.dart' show Loader;
36 34
37 import '../target_implementation.dart' show TargetImplementation; 35 import '../target_implementation.dart' show TargetImplementation;
38 36
39 import 'diet_listener.dart' show DietListener; 37 import 'diet_listener.dart' show DietListener;
40 38
41 import 'diet_parser.dart' show DietParser; 39 import 'diet_parser.dart' show DietParser;
42 40
43 import 'source_library_builder.dart' show SourceLibraryBuilder; 41 import 'source_library_builder.dart' show SourceLibraryBuilder;
44 42
45 import '../ast_kind.dart' show AstKind;
46
47 class SourceLoader<L> extends Loader<L> { 43 class SourceLoader<L> extends Loader<L> {
48 final Map<Uri, List<int>> sourceBytes = <Uri, List<int>>{}; 44 final Map<Uri, List<int>> sourceBytes = <Uri, List<int>>{};
49 45
50 // Used when building directly to kernel. 46 // Used when building directly to kernel.
51 ClassHierarchy hierarchy; 47 ClassHierarchy hierarchy;
52 CoreTypes coreTypes; 48 CoreTypes coreTypes;
53 49
54 // Used when building analyzer ASTs.
55 ElementStore elementStore;
56
57 SourceLoader(TargetImplementation target) : super(target); 50 SourceLoader(TargetImplementation target) : super(target);
58 51
59 Future<Token> tokenize(SourceLibraryBuilder library, 52 Future<Token> tokenize(SourceLibraryBuilder library,
60 {bool suppressLexicalErrors: false}) async { 53 {bool suppressLexicalErrors: false}) async {
61 Uri uri = library.fileUri; 54 Uri uri = library.fileUri;
62 if (uri == null || uri.scheme != "file") { 55 if (uri == null || uri.scheme != "file") {
63 return inputError(library.uri, -1, "Not found: ${library.uri}."); 56 return inputError(library.uri, -1, "Not found: ${library.uri}.");
64 } 57 }
65 try { 58 try {
66 List<int> bytes = sourceBytes[uri]; 59 List<int> bytes = sourceBytes[uri];
(...skipping 24 matching lines...) Expand all
91 } 84 }
92 } 85 }
93 86
94 Future<Null> buildOutline(SourceLibraryBuilder library) async { 87 Future<Null> buildOutline(SourceLibraryBuilder library) async {
95 Token tokens = await tokenize(library); 88 Token tokens = await tokenize(library);
96 if (tokens == null) return; 89 if (tokens == null) return;
97 OutlineBuilder listener = new OutlineBuilder(library); 90 OutlineBuilder listener = new OutlineBuilder(library);
98 new ClassMemberParser(listener).parseUnit(tokens); 91 new ClassMemberParser(listener).parseUnit(tokens);
99 } 92 }
100 93
101 Future<Null> buildBody(LibraryBuilder library, AstKind astKind) async { 94 Future<Null> buildBody(LibraryBuilder library) async {
102 if (library is SourceLibraryBuilder) { 95 if (library is SourceLibraryBuilder) {
103 // We tokenize source files twice to keep memory usage low. This is the 96 // We tokenize source files twice to keep memory usage low. This is the
104 // second time, and the first time was in [buildOutline] above. So this 97 // second time, and the first time was in [buildOutline] above. So this
105 // time we suppress lexical errors. 98 // time we suppress lexical errors.
106 Token tokens = await tokenize(library, suppressLexicalErrors: true); 99 Token tokens = await tokenize(library, suppressLexicalErrors: true);
107 if (tokens == null) return; 100 if (tokens == null) return;
108 DietListener listener = new DietListener( 101 DietListener listener = createDietListener(library);
109 library, elementStore, hierarchy, coreTypes, astKind);
110 DietParser parser = new DietParser(listener); 102 DietParser parser = new DietParser(listener);
111 parser.parseUnit(tokens); 103 parser.parseUnit(tokens);
112 for (SourceLibraryBuilder part in library.parts) { 104 for (SourceLibraryBuilder part in library.parts) {
113 Token tokens = await tokenize(part); 105 Token tokens = await tokenize(part);
114 if (tokens != null) { 106 if (tokens != null) {
115 listener.uri = part.fileUri; 107 listener.uri = part.fileUri;
116 parser.parseUnit(tokens); 108 parser.parseUnit(tokens);
117 } 109 }
118 } 110 }
119 } 111 }
120 } 112 }
121 113
114 DietListener createDietListener(LibraryBuilder library) {
115 return new DietListener(library, hierarchy, coreTypes);
116 }
117
122 void resolveParts() { 118 void resolveParts() {
123 List<Uri> parts = <Uri>[]; 119 List<Uri> parts = <Uri>[];
124 builders.forEach((Uri uri, LibraryBuilder library) { 120 builders.forEach((Uri uri, LibraryBuilder library) {
125 if (library is SourceLibraryBuilder) { 121 if (library is SourceLibraryBuilder) {
126 if (library.isPart) { 122 if (library.isPart) {
127 library.validatePart(); 123 library.validatePart();
128 parts.add(uri); 124 parts.add(uri);
129 } else { 125 } else {
130 library.includeParts(); 126 library.includeParts();
131 } 127 }
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 328
333 void buildProgram() { 329 void buildProgram() {
334 builders.forEach((Uri uri, LibraryBuilder library) { 330 builders.forEach((Uri uri, LibraryBuilder library) {
335 if (library is SourceLibraryBuilder) { 331 if (library is SourceLibraryBuilder) {
336 libraries.add(library.build()); 332 libraries.add(library.build());
337 } 333 }
338 }); 334 });
339 ticker.logMs("Built program"); 335 ticker.logMs("Built program");
340 } 336 }
341 337
342 void buildElementStore() {
343 elementStore = new ElementStore(coreLibrary, builders);
344 ticker.logMs("Built analyzer element model.");
345 }
346
347 void computeHierarchy(Program program) { 338 void computeHierarchy(Program program) {
348 hierarchy = new ClassHierarchy(program); 339 hierarchy = new ClassHierarchy(program);
349 ticker.logMs("Computed class hierarchy"); 340 ticker.logMs("Computed class hierarchy");
350 coreTypes = new CoreTypes(program); 341 coreTypes = new CoreTypes(program);
351 ticker.logMs("Computed core types"); 342 ticker.logMs("Computed core types");
352 } 343 }
353 } 344 }
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/fasta/source/diet_listener.dart ('k') | pkg/front_end/lib/src/fasta/target.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698