// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef TOOLS_GN_ECLIPSE_WRITER_H_
#define TOOLS_GN_ECLIPSE_WRITER_H_

#include <iosfwd>
#include <map>
#include <set>
#include <string>
#include <vector>

class BuildSettings;
class Builder;
class Err;
class Target;

class EclipseWriter {
 public:
  static bool RunAndWriteFile(const BuildSettings* build_settings,
                              const Builder& builder,
                              Err* err);

 private:
  EclipseWriter(const BuildSettings* build_settings,
                const Builder& builder,
                std::ostream& out);
  ~EclipseWriter();

  void Run();

  // Populates |include_dirs_| with the include dirs of all the targets for the
  // default toolchain.
  void GetAllIncludeDirs();

  // Populates |defines_| with the defines of all the targets for the default
  // toolchain.
  void GetAllDefines();

  // Returns true if |target| uses the default toolchain.
  bool UsesDefaultToolchain(const Target* target) const;

  // Writes the XML settings file.
  void WriteCDTSettings();

  const BuildSettings* build_settings_;
  const Builder& builder_;

  // The output stream for the settings file.
  std::ostream& out_;

  // Eclipse languages for which the include dirs and defines apply.
  std::vector<std::string> languages_;

  // The include dirs of all the targets which use the default toolchain.
  std::set<std::string> include_dirs_;

  // The defines of all the targets which use the default toolchain.
  std::map<std::string, std::string> defines_;

  EclipseWriter(const EclipseWriter&) = delete;
  EclipseWriter& operator=(const EclipseWriter&) = delete;
};

#endif  // TOOLS_GN_ECLIPSE_WRITER_H_
