text: // Copyright 2018 The Goma 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 DEVTOOLS_GOMA_LIB_JAVA_FLAGS_H_
  #define DEVTOOLS_GOMA_LIB_JAVA_FLAGS_H_
  
  #include <string>
  #include <vector>
  
  #include "lib/compiler_flags.h"
  using std::string;
  
  namespace devtools_goma {
  
  class JavacFlags : public CompilerFlags {
   public:
    JavacFlags(const std::vector<string>& args, const string& cwd);
  
    string compiler_name() const override { return "javac"; }
  
    CompilerFlagType type() const override { return CompilerFlagType::Javac; }
  
    bool IsClientImportantEnv(const char* env) const override { return false; }
    bool IsServerImportantEnv(const char* env) const override { return false; }
  
    static void DefineFlags(FlagParser* parser);
    static bool IsJavacCommand(absl::string_view arg);
    static string GetCompilerName(absl::string_view arg);
  
    const std::vector<string>& jar_files() const { return jar_files_; }
  
    const std::vector<string>& processors() const { return processors_; }
  
   private:
    friend class JavacFlagsTest;
  
    std::vector<string> jar_files_;
    std::vector<string> processors_;
  };
  
  class JavaFlags : public CompilerFlags {
   public:
    JavaFlags(const std::vector<string>& args, const string& cwd);
  
    string compiler_name() const override { return "java"; }
  
    CompilerFlagType type() const override { return CompilerFlagType::Java; }
  
    bool IsClientImportantEnv(const char* env) const override { return false; }
    bool IsServerImportantEnv(const char* env) const override { return false; }
  
    static void DefineFlags(FlagParser* parser);
    static bool IsJavaCommand(absl::string_view arg);
    static string GetCompilerName(absl::string_view arg) { return "java"; }
    const std::vector<string>& jar_files() const { return jar_files_; }
  
   private:
    std::vector<string> jar_files_;
  };
  
  // Parses list of given class paths, and appends .jar and .zip to |jar_files|.
  // Note: |jar_files| will not be cleared inside, and the output will be
  // appended.
  void ParseJavaClassPaths(const std::vector<string>& class_paths,
                           std::vector<string>* jar_files);
  
  }  // namespace devtools_goma
  
  #endif  // DEVTOOLS_GOMA_LIB_JAVA_FLAGS_H_
  