| OLD | NEW | 
|---|
| 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'; | 
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 294     return _transitiveFiles; | 294     return _transitiveFiles; | 
| 295   } | 295   } | 
| 296 | 296 | 
| 297   /** | 297   /** | 
| 298    * Return the signature of the file, based on the [transitiveFiles]. | 298    * Return the signature of the file, based on the [transitiveFiles]. | 
| 299    */ | 299    */ | 
| 300   String get transitiveSignature { | 300   String get transitiveSignature { | 
| 301     if (_transitiveSignature == null) { | 301     if (_transitiveSignature == null) { | 
| 302       ApiSignature signature = new ApiSignature(); | 302       ApiSignature signature = new ApiSignature(); | 
| 303       signature.addUint32List(_fsState._salt); | 303       signature.addUint32List(_fsState._salt); | 
| 304       signature.addString(_fsState._sdkApiSignature); |  | 
| 305       signature.addInt(transitiveFiles.length); | 304       signature.addInt(transitiveFiles.length); | 
| 306       transitiveFiles | 305       transitiveFiles | 
| 307           .map((file) => file.apiSignature) | 306           .map((file) => file.apiSignature) | 
| 308           .forEach(signature.addBytes); | 307           .forEach(signature.addBytes); | 
| 309       signature.addString(uri.toString()); | 308       signature.addString(uri.toString()); | 
| 310       _transitiveSignature = signature.toHex(); | 309       _transitiveSignature = signature.toHex(); | 
| 311     } | 310     } | 
| 312     return _transitiveSignature; | 311     return _transitiveSignature; | 
| 313   } | 312   } | 
| 314 | 313 | 
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 429         _fsState._partToLibraries[part]?.remove(this); | 428         _fsState._partToLibraries[part]?.remove(this); | 
| 430       } | 429       } | 
| 431     } | 430     } | 
| 432 | 431 | 
| 433     // Build the graph. | 432     // Build the graph. | 
| 434     _importedFiles = <FileState>[]; | 433     _importedFiles = <FileState>[]; | 
| 435     _exportedFiles = <FileState>[]; | 434     _exportedFiles = <FileState>[]; | 
| 436     _partedFiles = <FileState>[]; | 435     _partedFiles = <FileState>[]; | 
| 437     _exportFilters = <NameFilter>[]; | 436     _exportFilters = <NameFilter>[]; | 
| 438     for (UnlinkedImport import in _unlinked.imports) { | 437     for (UnlinkedImport import in _unlinked.imports) { | 
| 439       if (!import.isImplicit) { | 438       String uri = import.isImplicit ? 'dart:core' : import.uri; | 
| 440         String uri = import.uri; | 439       FileState file = _fileForRelativeUri(uri); | 
| 441         if (_isDartFileUri(uri)) { | 440       if (file != null) { | 
| 442           FileState file = _fileForRelativeUri(uri); | 441         _importedFiles.add(file); | 
| 443           if (file != null) { |  | 
| 444             _importedFiles.add(file); |  | 
| 445           } |  | 
| 446         } |  | 
| 447       } | 442       } | 
| 448     } | 443     } | 
| 449     for (UnlinkedExportPublic export in _unlinked.publicNamespace.exports) { | 444     for (UnlinkedExportPublic export in _unlinked.publicNamespace.exports) { | 
| 450       String uri = export.uri; | 445       String uri = export.uri; | 
| 451       if (_isDartFileUri(uri)) { | 446       FileState file = _fileForRelativeUri(uri); | 
| 452         FileState file = _fileForRelativeUri(uri); | 447       if (file != null) { | 
| 453         if (file != null) { | 448         _exportedFiles.add(file); | 
| 454           _exportedFiles.add(file); | 449         _exportFilters | 
| 455           _exportFilters | 450             .add(new NameFilter.forUnlinkedCombinators(export.combinators)); | 
| 456               .add(new NameFilter.forUnlinkedCombinators(export.combinators)); |  | 
| 457         } |  | 
| 458       } | 451       } | 
| 459     } | 452     } | 
| 460     for (String uri in _unlinked.publicNamespace.parts) { | 453     for (String uri in _unlinked.publicNamespace.parts) { | 
| 461       if (_isDartFileUri(uri)) { | 454       FileState file = _fileForRelativeUri(uri); | 
| 462         FileState file = _fileForRelativeUri(uri); | 455       if (file != null) { | 
| 463         if (file != null) { | 456         _partedFiles.add(file); | 
| 464           _partedFiles.add(file); | 457         // TODO(scheglov) Sort for stable results? | 
| 465           // TODO(scheglov) Sort for stable results? | 458         _fsState._partToLibraries | 
| 466           _fsState._partToLibraries | 459             .putIfAbsent(file, () => <FileState>[]) | 
| 467               .putIfAbsent(file, () => <FileState>[]) | 460             .add(this); | 
| 468               .add(this); |  | 
| 469         } |  | 
| 470       } | 461       } | 
| 471     } | 462     } | 
| 472 | 463 | 
| 473     // Compute referenced files. | 464     // Compute referenced files. | 
| 474     Set<FileState> oldDirectReferencedFiles = _directReferencedFiles; | 465     Set<FileState> oldDirectReferencedFiles = _directReferencedFiles; | 
| 475     _directReferencedFiles = new Set<FileState>() | 466     _directReferencedFiles = new Set<FileState>() | 
| 476       ..addAll(_importedFiles) | 467       ..addAll(_importedFiles) | 
| 477       ..addAll(_exportedFiles) | 468       ..addAll(_exportedFiles) | 
| 478       ..addAll(_partedFiles); | 469       ..addAll(_partedFiles); | 
| 479 | 470 | 
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 517     if (a.length != b.length) { | 508     if (a.length != b.length) { | 
| 518       return false; | 509       return false; | 
| 519     } | 510     } | 
| 520     for (int i = 0; i < a.length; i++) { | 511     for (int i = 0; i < a.length; i++) { | 
| 521       if (a[i] != b[i]) { | 512       if (a[i] != b[i]) { | 
| 522         return false; | 513         return false; | 
| 523       } | 514       } | 
| 524     } | 515     } | 
| 525     return true; | 516     return true; | 
| 526   } | 517   } | 
| 527 |  | 
| 528   static bool _isDartFileUri(String uri) { |  | 
| 529     return !uri.startsWith('dart:'); |  | 
| 530   } |  | 
| 531 } | 518 } | 
| 532 | 519 | 
| 533 /** | 520 /** | 
| 534  * Information about known file system state. | 521  * Information about known file system state. | 
| 535  */ | 522  */ | 
| 536 class FileSystemState { | 523 class FileSystemState { | 
| 537   final PerformanceLog _logger; | 524   final PerformanceLog _logger; | 
| 538   final ResourceProvider _resourceProvider; | 525   final ResourceProvider _resourceProvider; | 
| 539   final ByteStore _byteStore; | 526   final ByteStore _byteStore; | 
| 540   final FileContentOverlay _contentOverlay; | 527   final FileContentOverlay _contentOverlay; | 
| 541   final SourceFactory _sourceFactory; | 528   final SourceFactory _sourceFactory; | 
| 542   final AnalysisOptions _analysisOptions; | 529   final AnalysisOptions _analysisOptions; | 
| 543   final Uint32List _salt; | 530   final Uint32List _salt; | 
| 544   final String _sdkApiSignature; |  | 
| 545 | 531 | 
| 546   /** | 532   /** | 
| 547    * Mapping from a URI to the corresponding [FileState]. | 533    * Mapping from a URI to the corresponding [FileState]. | 
| 548    */ | 534    */ | 
| 549   final Map<Uri, FileState> _uriToFile = {}; | 535   final Map<Uri, FileState> _uriToFile = {}; | 
| 550 | 536 | 
| 551   /** | 537   /** | 
| 552    * All known file paths. | 538    * All known file paths. | 
| 553    */ | 539    */ | 
| 554   final Set<String> knownFilePaths = new Set<String>(); | 540   final Set<String> knownFilePaths = new Set<String>(); | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 570 | 556 | 
| 571   FileSystemStateTestView _testView; | 557   FileSystemStateTestView _testView; | 
| 572 | 558 | 
| 573   FileSystemState( | 559   FileSystemState( | 
| 574       this._logger, | 560       this._logger, | 
| 575       this._byteStore, | 561       this._byteStore, | 
| 576       this._contentOverlay, | 562       this._contentOverlay, | 
| 577       this._resourceProvider, | 563       this._resourceProvider, | 
| 578       this._sourceFactory, | 564       this._sourceFactory, | 
| 579       this._analysisOptions, | 565       this._analysisOptions, | 
| 580       this._salt, | 566       this._salt) { | 
| 581       this._sdkApiSignature) { |  | 
| 582     _testView = new FileSystemStateTestView(this); | 567     _testView = new FileSystemStateTestView(this); | 
| 583   } | 568   } | 
| 584 | 569 | 
| 585   /** | 570   /** | 
| 586    * Return the known files. | 571    * Return the known files. | 
| 587    */ | 572    */ | 
| 588   Iterable<FileState> get knownFiles => | 573   Iterable<FileState> get knownFiles => | 
| 589       _pathToFiles.values.map((files) => files.first); | 574       _pathToFiles.values.map((files) => files.first); | 
| 590 | 575 | 
| 591   @visibleForTesting | 576   @visibleForTesting | 
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 695         .where((f) => f._transitiveFiles == null) | 680         .where((f) => f._transitiveFiles == null) | 
| 696         .toSet(); | 681         .toSet(); | 
| 697   } | 682   } | 
| 698 | 683 | 
| 699   Set<FileState> get filesWithoutTransitiveSignature { | 684   Set<FileState> get filesWithoutTransitiveSignature { | 
| 700     return state._uriToFile.values | 685     return state._uriToFile.values | 
| 701         .where((f) => f._transitiveSignature == null) | 686         .where((f) => f._transitiveSignature == null) | 
| 702         .toSet(); | 687         .toSet(); | 
| 703   } | 688   } | 
| 704 } | 689 } | 
| OLD | NEW | 
|---|