| Index: pkg/analysis_server/lib/src/services/dependencies/reachable_source_collector.dart
|
| diff --git a/pkg/analysis_server/lib/src/services/dependencies/reachable_source_collector.dart b/pkg/analysis_server/lib/src/services/dependencies/reachable_source_collector.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a0273cea86dc04b06a0814d7a316671b480b6716
|
| --- /dev/null
|
| +++ b/pkg/analysis_server/lib/src/services/dependencies/reachable_source_collector.dart
|
| @@ -0,0 +1,53 @@
|
| +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library services.dependencies.reachable_source_collector;
|
| +
|
| +import 'dart:collection';
|
| +
|
| +import 'package:analyzer/src/generated/engine.dart';
|
| +import 'package:analyzer/src/generated/source.dart';
|
| +import 'package:analyzer/task/dart.dart';
|
| +
|
| +/// Collects reachable sources.
|
| +class ReachableSourceCollector {
|
| + final Map<String, List<String>> _sourceMap =
|
| + new HashMap<String, List<String>>();
|
| +
|
| + final Source source;
|
| + final AnalysisContext context;
|
| + ReachableSourceCollector(this.source, this.context) {
|
| + if (source == null) {
|
| + throw new ArgumentError.notNull('source');
|
| + }
|
| + if (context == null) {
|
| + throw new ArgumentError.notNull('context');
|
| + }
|
| + }
|
| +
|
| + /// Collect reachable sources.
|
| + Map<String, List<String>> collectSources() {
|
| + _addDependencies(source);
|
| + return _sourceMap;
|
| + }
|
| +
|
| + void _addDependencies(Source source) {
|
| +
|
| + String sourceUri = source.uri.toString();
|
| +
|
| + // Careful not to revisit.
|
| + if (_sourceMap[source.uri.toString()] != null) {
|
| + return;
|
| + }
|
| +
|
| + List<Source> sources = <Source>[];
|
| + sources.addAll(context.computeResult(source, IMPORTED_LIBRARIES));
|
| + sources.addAll(context.computeResult(source, EXPORTED_LIBRARIES));
|
| +
|
| + _sourceMap[sourceUri] =
|
| + sources.map((source) => source.uri.toString()).toList();
|
| +
|
| + sources.forEach((s) => _addDependencies(s));
|
| + }
|
| +}
|
|
|