| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 /// Tracks the shape of the import/export graph and dependencies between files. | 5 /// Tracks the shape of the import/export graph and dependencies between files. |
| 6 library dev_compiler.src.dependency_graph; | 6 library dev_compiler.src.dependency_graph; |
| 7 | 7 |
| 8 import 'dart:collection' show HashSet; | 8 import 'dart:collection' show HashSet; |
| 9 | 9 |
| 10 import 'package:analyzer/analyzer.dart' show parseDirectives; | 10 import 'package:analyzer/analyzer.dart' show parseDirectives; |
| 11 import 'package:analyzer/src/generated/ast.dart' | 11 import 'package:analyzer/src/generated/ast.dart' |
| 12 show | 12 show |
| 13 AstNode, | 13 AstNode, |
| 14 CompilationUnit, | 14 CompilationUnit, |
| 15 ExportDirective, | 15 ExportDirective, |
| 16 Identifier, | 16 Identifier, |
| 17 ImportDirective, | 17 ImportDirective, |
| 18 LibraryDirective, | 18 LibraryDirective, |
| 19 PartDirective, | 19 PartDirective, |
| 20 PartOfDirective; | 20 PartOfDirective, |
| 21 UriBasedDirective; |
| 21 import 'package:analyzer/src/generated/engine.dart' | 22 import 'package:analyzer/src/generated/engine.dart' |
| 22 show ParseDartTask, AnalysisContext; | 23 show ParseDartTask, AnalysisContext; |
| 23 import 'package:analyzer/src/generated/source.dart' show Source, SourceKind; | 24 import 'package:analyzer/src/generated/source.dart' show Source, SourceKind; |
| 24 import 'package:html/dom.dart' show Document, Node; | 25 import 'package:html/dom.dart' show Document, Node; |
| 25 import 'package:html/parser.dart' as html; | 26 import 'package:html/parser.dart' as html; |
| 26 import 'package:logging/logging.dart' show Logger, Level; | 27 import 'package:logging/logging.dart' show Logger, Level; |
| 27 import 'package:path/path.dart' as path; | 28 import 'package:path/path.dart' as path; |
| 28 | 29 |
| 29 import 'info.dart'; | 30 import 'info.dart'; |
| 30 import 'options.dart'; | 31 import 'options.dart'; |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 // changed. | 273 // changed. |
| 273 var unit = parseDirectives(contents, name: _source.fullName); | 274 var unit = parseDirectives(contents, name: _source.fullName); |
| 274 var newImports = new Set<DartSourceNode>(); | 275 var newImports = new Set<DartSourceNode>(); |
| 275 var newExports = new Set<DartSourceNode>(); | 276 var newExports = new Set<DartSourceNode>(); |
| 276 var newParts = new Set<DartSourceNode>(); | 277 var newParts = new Set<DartSourceNode>(); |
| 277 for (var d in unit.directives) { | 278 for (var d in unit.directives) { |
| 278 // Nothing to do for parts. | 279 // Nothing to do for parts. |
| 279 if (d is PartOfDirective) return; | 280 if (d is PartOfDirective) return; |
| 280 if (d is LibraryDirective) continue; | 281 if (d is LibraryDirective) continue; |
| 281 | 282 |
| 283 var directiveUri = (d as UriBasedDirective).uri; |
| 284 |
| 282 // `dart:core` and other similar URLs only contain a name, but it is | 285 // `dart:core` and other similar URLs only contain a name, but it is |
| 283 // meant to be a folder when resolving relative paths from it. | 286 // meant to be a folder when resolving relative paths from it. |
| 284 var targetUri = uri.scheme == 'dart' && uri.pathSegments.length == 1 | 287 var targetUri = uri.scheme == 'dart' && uri.pathSegments.length == 1 |
| 285 ? Uri.parse('$uri/').resolve(d.uri.stringValue) | 288 ? Uri.parse('$uri/').resolve(directiveUri.stringValue) |
| 286 : uri.resolve(d.uri.stringValue); | 289 : uri.resolve(directiveUri.stringValue); |
| 287 var target = | 290 var target = |
| 288 ParseDartTask.resolveDirective(graph._context, _source, d, null); | 291 ParseDartTask.resolveDirective(graph._context, _source, d, null); |
| 289 if (target != null) { | 292 if (target != null) { |
| 290 if (targetUri != target.uri) print(">> ${target.uri} $targetUri"); | 293 if (targetUri != target.uri) print(">> ${target.uri} $targetUri"); |
| 291 } | 294 } |
| 292 var node = graph.nodes.putIfAbsent( | 295 var node = graph.nodes.putIfAbsent( |
| 293 targetUri, () => new DartSourceNode(graph, targetUri, target)); | 296 targetUri, () => new DartSourceNode(graph, targetUri, target)); |
| 294 //var node = graph.nodeFromUri(targetUri); | 297 //var node = graph.nodeFromUri(targetUri); |
| 295 if (node._source == null || !node._source.exists()) { | 298 if (node._source == null || !node._source.exists()) { |
| 296 _reportError(graph, 'File $targetUri not found', unit, d); | 299 _reportError(graph, 'File $targetUri not found', unit, d); |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 516 'dart._interceptors', | 519 'dart._interceptors', |
| 517 'dart._native_typed_data', | 520 'dart._native_typed_data', |
| 518 */ | 521 */ |
| 519 ]; | 522 ]; |
| 520 | 523 |
| 521 /// Runtime files added to applications when running in server mode. | 524 /// Runtime files added to applications when running in server mode. |
| 522 final runtimeFilesForServerMode = new List<String>.from(defaultRuntimeFiles) | 525 final runtimeFilesForServerMode = new List<String>.from(defaultRuntimeFiles) |
| 523 ..addAll(const ['messages_widget.js', 'messages.css']); | 526 ..addAll(const ['messages_widget.js', 'messages.css']); |
| 524 | 527 |
| 525 final _log = new Logger('dev_compiler.dependency_graph'); | 528 final _log = new Logger('dev_compiler.dependency_graph'); |
| OLD | NEW |