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

Side by Side Diff: pkg/analyzer/lib/src/dart/analysis/file_state.dart

Issue 2520593003: Use AnalysisDriverUnlinkedUnit as a container for UnlinkedUnit and referenced names. (Closed)
Patch Set: Created 4 years, 1 month 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 import 'dart:convert'; 5 import 'dart:convert';
6 import 'dart:typed_data'; 6 import 'dart:typed_data';
7 7
8 import 'package:analyzer/dart/ast/ast.dart'; 8 import 'package:analyzer/dart/ast/ast.dart';
9 import 'package:analyzer/dart/ast/token.dart'; 9 import 'package:analyzer/dart/ast/token.dart';
10 import 'package:analyzer/error/listener.dart'; 10 import 'package:analyzer/error/listener.dart';
11 import 'package:analyzer/file_system/file_system.dart'; 11 import 'package:analyzer/file_system/file_system.dart';
12 import 'package:analyzer/src/dart/analysis/byte_store.dart'; 12 import 'package:analyzer/src/dart/analysis/byte_store.dart';
13 import 'package:analyzer/src/dart/analysis/driver.dart'; 13 import 'package:analyzer/src/dart/analysis/driver.dart';
14 import 'package:analyzer/src/dart/analysis/referenced_names.dart';
14 import 'package:analyzer/src/dart/scanner/reader.dart'; 15 import 'package:analyzer/src/dart/scanner/reader.dart';
15 import 'package:analyzer/src/dart/scanner/scanner.dart'; 16 import 'package:analyzer/src/dart/scanner/scanner.dart';
16 import 'package:analyzer/src/generated/engine.dart'; 17 import 'package:analyzer/src/generated/engine.dart';
17 import 'package:analyzer/src/generated/parser.dart'; 18 import 'package:analyzer/src/generated/parser.dart';
18 import 'package:analyzer/src/generated/source.dart'; 19 import 'package:analyzer/src/generated/source.dart';
19 import 'package:analyzer/src/generated/utilities_dart.dart'; 20 import 'package:analyzer/src/generated/utilities_dart.dart';
20 import 'package:analyzer/src/source/source_resource.dart'; 21 import 'package:analyzer/src/source/source_resource.dart';
21 import 'package:analyzer/src/summary/api_signature.dart'; 22 import 'package:analyzer/src/summary/api_signature.dart';
22 import 'package:analyzer/src/summary/format.dart'; 23 import 'package:analyzer/src/summary/format.dart';
23 import 'package:analyzer/src/summary/idl.dart'; 24 import 'package:analyzer/src/summary/idl.dart';
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 final Uri uri; 79 final Uri uri;
79 80
80 /** 81 /**
81 * The [Source] of the file with the [uri]. 82 * The [Source] of the file with the [uri].
82 */ 83 */
83 Source source; 84 Source source;
84 85
85 String _content; 86 String _content;
86 String _contentHash; 87 String _contentHash;
87 LineInfo _lineInfo; 88 LineInfo _lineInfo;
89 Set<String> _referencedNames;
88 UnlinkedUnit _unlinked; 90 UnlinkedUnit _unlinked;
89 List<int> _apiSignature; 91 List<int> _apiSignature;
90 92
91 List<FileState> _importedFiles; 93 List<FileState> _importedFiles;
92 List<FileState> _exportedFiles; 94 List<FileState> _exportedFiles;
93 List<FileState> _partedFiles; 95 List<FileState> _partedFiles;
94 Set<FileState> _directReferencedFiles = new Set<FileState>(); 96 Set<FileState> _directReferencedFiles = new Set<FileState>();
95 Set<FileState> _transitiveFiles; 97 Set<FileState> _transitiveFiles;
96 98
97 FileState._(this._fsState, this.path, this.uri, this.source); 99 FileState._(this._fsState, this.path, this.uri, this.source);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 * Return information about line in the file. 155 * Return information about line in the file.
154 */ 156 */
155 LineInfo get lineInfo => _lineInfo; 157 LineInfo get lineInfo => _lineInfo;
156 158
157 /** 159 /**
158 * The list of files this library file references as parts. 160 * The list of files this library file references as parts.
159 */ 161 */
160 List<FileState> get partedFiles => _partedFiles; 162 List<FileState> get partedFiles => _partedFiles;
161 163
162 /** 164 /**
165 * The external names referenced by the file.
166 */
167 Set<String> get referencedNames => _referencedNames;
168
169 /**
163 * Return the set of transitive files - the file itself and all of the 170 * Return the set of transitive files - the file itself and all of the
164 * directly or indirectly referenced files. 171 * directly or indirectly referenced files.
165 */ 172 */
166 Set<FileState> get transitiveFiles { 173 Set<FileState> get transitiveFiles {
167 if (_transitiveFiles == null) { 174 if (_transitiveFiles == null) {
168 _transitiveFiles = new Set<FileState>(); 175 _transitiveFiles = new Set<FileState>();
169 176
170 void appendReferenced(FileState file) { 177 void appendReferenced(FileState file) {
171 if (_transitiveFiles.add(file)) { 178 if (_transitiveFiles.add(file)) {
172 file._directReferencedFiles.forEach(appendReferenced); 179 file._directReferencedFiles.forEach(appendReferenced);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 } 253 }
247 254
248 // Prepare bytes of the unlinked bundle - existing or new. 255 // Prepare bytes of the unlinked bundle - existing or new.
249 List<int> bytes; 256 List<int> bytes;
250 { 257 {
251 bytes = _fsState._byteStore.get(unlinkedKey); 258 bytes = _fsState._byteStore.get(unlinkedKey);
252 if (bytes == null) { 259 if (bytes == null) {
253 CompilationUnit unit = parse(AnalysisErrorListener.NULL_LISTENER); 260 CompilationUnit unit = parse(AnalysisErrorListener.NULL_LISTENER);
254 _fsState._logger.run('Create unlinked for $path', () { 261 _fsState._logger.run('Create unlinked for $path', () {
255 UnlinkedUnitBuilder unlinkedUnit = serializeAstUnlinked(unit); 262 UnlinkedUnitBuilder unlinkedUnit = serializeAstUnlinked(unit);
256 bytes = unlinkedUnit.toBuffer(); 263 List<String> referencedNames = computeReferencedNames(unit).toList();
264 bytes = new AnalysisDriverUnlinkedUnitBuilder(
265 unit: unlinkedUnit, referencedNames: referencedNames)
266 .toBuffer();
257 _fsState._byteStore.put(unlinkedKey, bytes); 267 _fsState._byteStore.put(unlinkedKey, bytes);
258 }); 268 });
259 } 269 }
260 } 270 }
261 271
262 // Read the unlinked bundle. 272 // Read the unlinked bundle.
263 _unlinked = new UnlinkedUnit.fromBuffer(bytes); 273 var driverUnlinkedUnit = new AnalysisDriverUnlinkedUnit.fromBuffer(bytes);
274 _referencedNames = new Set<String>.from(driverUnlinkedUnit.referencedNames);
Brian Wilkerson 2016/11/21 15:54:37 This is kind of ugly. Consider adding a getter to
scheglov 2016/11/21 17:04:54 We use flat buffers just as data. Any additional s
275 _unlinked = driverUnlinkedUnit.unit;
264 _lineInfo = new LineInfo(_unlinked.lineStarts); 276 _lineInfo = new LineInfo(_unlinked.lineStarts);
265 List<int> newApiSignature = _unlinked.apiSignature; 277 List<int> newApiSignature = _unlinked.apiSignature;
266 bool apiSignatureChanged = _apiSignature != null && 278 bool apiSignatureChanged = _apiSignature != null &&
267 !_equalByteLists(_apiSignature, newApiSignature); 279 !_equalByteLists(_apiSignature, newApiSignature);
268 _apiSignature = newApiSignature; 280 _apiSignature = newApiSignature;
269 281
270 // This file is potentially not a library for its previous parts anymore. 282 // This file is potentially not a library for its previous parts anymore.
271 if (_partedFiles != null) { 283 if (_partedFiles != null) {
272 for (FileState part in _partedFiles) { 284 for (FileState part in _partedFiles) {
273 _fsState._partToLibraries[part]?.remove(this); 285 _fsState._partToLibraries[part]?.remove(this);
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 final FileSystemState state; 513 final FileSystemState state;
502 514
503 FileSystemStateTestView(this.state); 515 FileSystemStateTestView(this.state);
504 516
505 Set<FileState> get filesWithoutTransitive { 517 Set<FileState> get filesWithoutTransitive {
506 return state._uriToFile.values 518 return state._uriToFile.values
507 .where((f) => f._transitiveFiles == null) 519 .where((f) => f._transitiveFiles == null)
508 .toSet(); 520 .toSet();
509 } 521 }
510 } 522 }
OLDNEW
« no previous file with comments | « pkg/analyzer/lib/src/dart/analysis/driver.dart ('k') | pkg/analyzer/lib/src/summary/format.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698