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

Side by Side Diff: pkg/front_end/lib/src/incremental_kernel_generator_impl.dart

Issue 2869273006: Replace factory constructor with a static method for creating IncrementalKernelGenerator. (Closed)
Patch Set: Created 3 years, 7 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) 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 import 'dart:async'; 5 import 'dart:async';
6 6
7 import 'package:front_end/file_system.dart'; 7 import 'package:front_end/file_system.dart';
8 import 'package:front_end/incremental_kernel_generator.dart'; 8 import 'package:front_end/incremental_kernel_generator.dart';
9 import 'package:front_end/incremental_resolved_ast_generator.dart'; 9 import 'package:front_end/incremental_resolved_ast_generator.dart';
10 import 'package:front_end/src/base/processed_options.dart'; 10 import 'package:front_end/src/base/processed_options.dart';
(...skipping 11 matching lines...) Expand all
22 } 22 }
23 23
24 /// Implementation of [IncrementalKernelGenerator]. 24 /// Implementation of [IncrementalKernelGenerator].
25 /// 25 ///
26 /// TODO(scheglov) Update the documentation. 26 /// TODO(scheglov) Update the documentation.
27 /// 27 ///
28 /// Theory of operation: an instance of [IncrementalResolvedAstGenerator] is 28 /// Theory of operation: an instance of [IncrementalResolvedAstGenerator] is
29 /// used to obtain resolved ASTs, and these are fed into kernel code generation 29 /// used to obtain resolved ASTs, and these are fed into kernel code generation
30 /// logic. 30 /// logic.
31 class IncrementalKernelGeneratorImpl implements IncrementalKernelGenerator { 31 class IncrementalKernelGeneratorImpl implements IncrementalKernelGenerator {
32 /// The URI of the program entry point.
33 final Uri _entryPoint;
34
35 /// The compiler options, such as the [FileSystem], the SDK dill location, 32 /// The compiler options, such as the [FileSystem], the SDK dill location,
36 /// etc. 33 /// etc.
37 final ProcessedOptions _options; 34 final ProcessedOptions _options;
38 35
36 /// The object that knows how to resolve "package:" and "dart:" URIs.
37 final TranslateUri _uriTranslator;
38
39 /// The current file system state.
40 final FileSystemState _fsState;
41
42 /// The URI of the program entry point.
43 final Uri _entryPoint;
44
39 /// The set of absolute file URIs that were reported through [invalidate] 45 /// The set of absolute file URIs that were reported through [invalidate]
40 /// and not checked for actual changes yet. 46 /// and not checked for actual changes yet.
41 final Set<Uri> _invalidatedFiles = new Set<Uri>(); 47 final Set<Uri> _invalidatedFiles = new Set<Uri>();
42 48
43 /// The object that knows how to resolve "package:" and "dart:" URIs.
44 TranslateUri _uriTranslator;
45
46 /// The current file system state.
47 FileSystemState _fsState;
48
49 /// The cached SDK kernel. 49 /// The cached SDK kernel.
50 DillTarget _sdkDillTarget; 50 DillTarget _sdkDillTarget;
51 51
52 IncrementalKernelGeneratorImpl(this._entryPoint, this._options); 52 IncrementalKernelGeneratorImpl(
53 this._options, this._uriTranslator, this._entryPoint)
54 : _fsState = new FileSystemState(_options.fileSystem, _uriTranslator);
53 55
54 @override 56 @override
55 Future<DeltaProgram> computeDelta( 57 Future<DeltaProgram> computeDelta(
56 {Future<Null> watch(Uri uri, bool used)}) async { 58 {Future<Null> watch(Uri uri, bool used)}) async {
57 await _initialize();
58 await _ensureVmLibrariesLoaded(); 59 await _ensureVmLibrariesLoaded();
59 await _refreshInvalidatedFiles(); 60 await _refreshInvalidatedFiles();
60 61
61 // Ensure that the graph starting at the entry point is ready. 62 // Ensure that the graph starting at the entry point is ready.
62 await _fsState.getFile(_entryPoint); 63 await _fsState.getFile(_entryPoint);
63 64
64 DillTarget sdkTarget = await _getSdkDillTarget(); 65 DillTarget sdkTarget = await _getSdkDillTarget();
65 // TODO(scheglov) Use it to also serve other package kernels. 66 // TODO(scheglov) Use it to also serve other package kernels.
66 67
67 KernelTarget kernelTarget = new KernelTarget(_fsState.fileSystemView, 68 KernelTarget kernelTarget = new KernelTarget(_fsState.fileSystemView,
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 // TODO(scheglov) Read the SDK kernel. 109 // TODO(scheglov) Read the SDK kernel.
109 // _sdkDillTarget.read(options.sdkSummary); 110 // _sdkDillTarget.read(options.sdkSummary);
110 // await _sdkDillTarget.writeOutline(null); 111 // await _sdkDillTarget.writeOutline(null);
111 } else { 112 } else {
112 // Program sdkProgram = _sdkDillTarget.loader.program; 113 // Program sdkProgram = _sdkDillTarget.loader.program;
113 // sdkProgram.visitChildren(new _ClearCanonicalNamesVisitor()); 114 // sdkProgram.visitChildren(new _ClearCanonicalNamesVisitor());
114 } 115 }
115 return _sdkDillTarget; 116 return _sdkDillTarget;
116 } 117 }
117 118
118 /// Ensure that asynchronous data from options is ready.
119 ///
120 /// Ideally this data should be prepared in the constructor, but constructors
121 /// cannot be asynchronous.
122 Future<Null> _initialize() async {
123 _uriTranslator ??= await _options.getUriTranslator();
124 _fsState ??= new FileSystemState(_options.fileSystem, _uriTranslator);
125 }
126
127 /// Refresh all the invalidated files and update dependencies. 119 /// Refresh all the invalidated files and update dependencies.
128 Future<Null> _refreshInvalidatedFiles() async { 120 Future<Null> _refreshInvalidatedFiles() async {
129 for (Uri fileUri in _invalidatedFiles) { 121 for (Uri fileUri in _invalidatedFiles) {
130 FileState file = await _fsState.getFile(fileUri); 122 FileState file = await _fsState.getFile(fileUri);
131 await file.refresh(); 123 await file.refresh();
132 } 124 }
133 _invalidatedFiles.clear(); 125 _invalidatedFiles.clear();
134 } 126 }
135 } 127 }
136 128
137 ///// Clears canonical names of [NamedNode] references. 129 ///// Clears canonical names of [NamedNode] references.
138 //class _ClearCanonicalNamesVisitor extends Visitor { 130 //class _ClearCanonicalNamesVisitor extends Visitor {
139 // defaultNode(Node node) { 131 // defaultNode(Node node) {
140 // if (node is NamedNode) { 132 // if (node is NamedNode) {
141 // node.reference.canonicalName = null; 133 // node.reference.canonicalName = null;
142 // } 134 // }
143 // node.visitChildren(this); 135 // node.visitChildren(this);
144 // } 136 // }
145 //} 137 //}
OLDNEW
« no previous file with comments | « pkg/front_end/lib/incremental_kernel_generator.dart ('k') | pkg/front_end/test/incremental_kernel_generator_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698