// 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));
  }
}
