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

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

Issue 2864243004: Revert "Start using FileState/FileSystemState to provide consistent view." (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';
11 import 'package:front_end/src/fasta/dill/dill_target.dart'; 11 import 'package:front_end/src/fasta/dill/dill_target.dart';
12 import 'package:front_end/src/fasta/kernel/kernel_target.dart'; 12 import 'package:front_end/src/fasta/kernel/kernel_target.dart';
13 import 'package:front_end/src/fasta/ticker.dart'; 13 import 'package:front_end/src/fasta/ticker.dart';
14 import 'package:front_end/src/fasta/translate_uri.dart'; 14 import 'package:front_end/src/fasta/translate_uri.dart';
15 import 'package:front_end/src/incremental/file_state.dart';
16 import 'package:kernel/kernel.dart' hide Source; 15 import 'package:kernel/kernel.dart' hide Source;
17 import 'package:kernel/target/vm.dart';
18 16
19 dynamic unimplemented() { 17 dynamic unimplemented() {
20 // TODO(paulberry): get rid of this. 18 // TODO(paulberry): get rid of this.
21 throw new UnimplementedError(); 19 throw new UnimplementedError();
22 } 20 }
23 21
24 /// Implementation of [IncrementalKernelGenerator]. 22 /// Implementation of [IncrementalKernelGenerator].
25 /// 23 ///
26 /// TODO(scheglov) Update the documentation. 24 /// TODO(scheglov) Update the documentation.
27 /// 25 ///
28 /// Theory of operation: an instance of [IncrementalResolvedAstGenerator] is 26 /// Theory of operation: an instance of [IncrementalResolvedAstGenerator] is
29 /// used to obtain resolved ASTs, and these are fed into kernel code generation 27 /// used to obtain resolved ASTs, and these are fed into kernel code generation
30 /// logic. 28 /// logic.
31 class IncrementalKernelGeneratorImpl implements IncrementalKernelGenerator { 29 class IncrementalKernelGeneratorImpl implements IncrementalKernelGenerator {
32 /// The URI of the program entry point. 30 /// The URI of the program entry point.
33 final Uri _entryPoint; 31 final Uri _entryPoint;
34 32
35 /// The compiler options, such as the [FileSystem], the SDK dill location, 33 /// The compiler options, such as the [FileSystem], the SDK dill location,
36 /// etc. 34 /// etc.
37 final ProcessedOptions _options; 35 final ProcessedOptions _options;
38 36
39 /// The set of absolute file URIs that were reported through [invalidate]
40 /// and not checked for actual changes yet.
41 final Set<Uri> _invalidatedFiles = new Set<Uri>();
42
43 /// The object that knows how to resolve "package:" and "dart:" URIs. 37 /// The object that knows how to resolve "package:" and "dart:" URIs.
44 TranslateUri _uriTranslator; 38 TranslateUri _uriTranslator;
45 39
46 /// The current file system state.
47 FileSystemState _fsState;
48
49 /// The cached SDK kernel. 40 /// The cached SDK kernel.
50 DillTarget _sdkDillTarget; 41 DillTarget _sdkDillTarget;
51 42
52 IncrementalKernelGeneratorImpl(this._entryPoint, this._options); 43 IncrementalKernelGeneratorImpl(this._entryPoint, this._options);
53 44
54 @override 45 @override
55 Future<DeltaProgram> computeDelta( 46 Future<DeltaProgram> computeDelta(
56 {Future<Null> watch(Uri uri, bool used)}) async { 47 {Future<Null> watch(Uri uri, bool used)}) async {
57 await _initialize(); 48 _uriTranslator ??= await _options.getUriTranslator();
58 await _ensureVmLibrariesLoaded();
59 await _refreshInvalidatedFiles();
60
61 // Ensure that the graph starting at the entry point is ready.
62 await _fsState.getFile(_entryPoint);
63 49
64 DillTarget sdkTarget = await _getSdkDillTarget(); 50 DillTarget sdkTarget = await _getSdkDillTarget();
65 // TODO(scheglov) Use it to also serve other package kernels. 51 // TODO(scheglov) Use it to also serve other package kernels.
66 52
67 KernelTarget kernelTarget = new KernelTarget(_fsState.fileSystemView, 53 KernelTarget kernelTarget = new KernelTarget(_options.fileSystem, sdkTarget,
68 sdkTarget, _uriTranslator, _options.strongMode, null); 54 _uriTranslator, _options.strongMode, null);
69 kernelTarget.read(_entryPoint); 55 kernelTarget.read(_entryPoint);
70 56
71 // TODO(scheglov) Replace with a better API. 57 // TODO(scheglov) Replace with a better API.
72 // Firstly, we don't "write" anything here. 58 // Firstly, we don't "write" anything here.
73 // Secondly, it catches all the exceptions and write them to `stderr`. 59 // Secondly, it catches all the exceptions and write them to `stderr`.
74 // This is too interactive and not API-clients friendly. 60 // This is too interactive and not API-clients friendly.
75 await kernelTarget.writeOutline(null); 61 await kernelTarget.writeOutline(null);
76 62
77 // TODO(scheglov) Replace with a better API. 63 // TODO(scheglov) Replace with a better API.
78 Program program = await kernelTarget.writeProgram(null); 64 Program program = await kernelTarget.writeProgram(null);
79 return new DeltaProgram(program); 65 return new DeltaProgram(program);
80 } 66 }
81 67
82 @override 68 @override
83 void invalidate(Uri uri) { 69 void invalidate(String path) => unimplemented();
84 _invalidatedFiles.add(uri);
85 }
86 70
87 @override 71 @override
88 void invalidateAll() => unimplemented(); 72 void invalidateAll() => unimplemented();
89 73
90 /// Fasta unconditionally loads all VM libraries. In order to be able to
91 /// serve them using the file system view, we need to ask [_fsState] for
92 /// the corresponding files.
93 Future<Null> _ensureVmLibrariesLoaded() async {
94 List<String> extraLibraries = new VmTarget(null).extraRequiredLibraries;
95 for (String absoluteUriStr in extraLibraries) {
96 Uri absoluteUri = Uri.parse(absoluteUriStr);
97 Uri fileUri = _uriTranslator.translate(absoluteUri);
98 await _fsState.getFile(fileUri);
99 }
100 }
101
102 /// Return the [DillTarget] that is used inside of [KernelTarget] to 74 /// Return the [DillTarget] that is used inside of [KernelTarget] to
103 /// resynthesize SDK libraries. 75 /// resynthesize SDK libraries.
104 Future<DillTarget> _getSdkDillTarget() async { 76 Future<DillTarget> _getSdkDillTarget() async {
105 if (_sdkDillTarget == null) { 77 if (_sdkDillTarget == null) {
106 _sdkDillTarget = 78 _sdkDillTarget =
107 new DillTarget(new Ticker(isVerbose: false), _uriTranslator); 79 new DillTarget(new Ticker(isVerbose: false), _uriTranslator);
108 // TODO(scheglov) Read the SDK kernel. 80 // TODO(scheglov) Read the SDK kernel.
109 // _sdkDillTarget.read(options.sdkSummary); 81 // _sdkDillTarget.read(options.sdkSummary);
110 // await _sdkDillTarget.writeOutline(null); 82 // await _sdkDillTarget.writeOutline(null);
111 } else { 83 } else {
112 // Program sdkProgram = _sdkDillTarget.loader.program; 84 // Program sdkProgram = _sdkDillTarget.loader.program;
113 // sdkProgram.visitChildren(new _ClearCanonicalNamesVisitor()); 85 // sdkProgram.visitChildren(new _ClearCanonicalNamesVisitor());
114 } 86 }
115 return _sdkDillTarget; 87 return _sdkDillTarget;
116 } 88 }
117
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.
128 Future<Null> _refreshInvalidatedFiles() async {
129 for (Uri fileUri in _invalidatedFiles) {
130 FileState file = await _fsState.getFile(fileUri);
131 await file.refresh();
132 }
133 _invalidatedFiles.clear();
134 }
135 } 89 }
136 90
137 ///// Clears canonical names of [NamedNode] references. 91 ///// Clears canonical names of [NamedNode] references.
138 //class _ClearCanonicalNamesVisitor extends Visitor { 92 //class _ClearCanonicalNamesVisitor extends Visitor {
139 // defaultNode(Node node) { 93 // defaultNode(Node node) {
140 // if (node is NamedNode) { 94 // if (node is NamedNode) {
141 // node.reference.canonicalName = null; 95 // node.reference.canonicalName = null;
142 // } 96 // }
143 // node.visitChildren(this); 97 // node.visitChildren(this);
144 // } 98 // }
145 //} 99 //}
OLDNEW
« no previous file with comments | « pkg/front_end/lib/src/incremental/file_state.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