// Copyright (c) 2018, 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.

import 'package:analysis_server/src/analysis_server.dart';

/**
 * A class that can be used to confirm an analysis server instance to better
 * support intermittent file systems.
 *
 * See also [AnalysisServerOptions.detachableFileSystemManager].
 */
abstract class DetachableFileSystemManager {
  /**
   * Indicate that the [DetachableFileSystemManager] and the containing analysis
   * server are being shut down.
   */
  void dispose();

  /**
   * Forward on the 'analysis.setAnalysisRoots' request.
   *
   * This class can choose to pass through all [setAnalysisRoots] calls to the
   * underlying analysis server, it can choose to modify the given
   * [includedPaths] and other parameters, or it could choose to delays calls to
   * [setAnalysisRoots].
   */
  void setAnalysisRoots(String requestId, List<String> includedPaths,
      List<String> excludedPaths, Map<String, String> packageRoots);

  /**
   * Called exactly once before any calls to [setAnalysisRoots].
   */
  void setAnalysisServer(AnalysisServer server);
}
