| // Copyright (c) 2013 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_INPUT_FILE_H_ | 
 | #define TOOLS_GN_INPUT_FILE_H_ | 
 |  | 
 | #include <string> | 
 |  | 
 | #include "base/files/file_path.h" | 
 | #include "base/logging.h" | 
 | #include "base/macros.h" | 
 | #include "tools/gn/source_dir.h" | 
 | #include "tools/gn/source_file.h" | 
 |  | 
 | class InputFile { | 
 |  public: | 
 |   explicit InputFile(const SourceFile& name); | 
 |  | 
 |   ~InputFile(); | 
 |  | 
 |   // The virtual name passed into the constructor. This does not take into | 
 |   // account whether the file was loaded from the secondary source tree (see | 
 |   // BuildSettings secondary_source_path). | 
 |   const SourceFile& name() const { return name_; } | 
 |  | 
 |   // The directory is just a cached version of name()->GetDir() but we get this | 
 |   // a lot so computing it once up front saves a bunch of work. | 
 |   const SourceDir& dir() const { return dir_; } | 
 |  | 
 |   // The physical name tells the actual name on disk, if there is one. | 
 |   const base::FilePath& physical_name() const { return physical_name_; } | 
 |  | 
 |   // The friendly name can be set to override the name() in cases where there | 
 |   // is no name (like SetContents is used instead) or if the name doesn't | 
 |   // make sense. This will be displayed in error messages. | 
 |   const std::string& friendly_name() const { return friendly_name_; } | 
 |   void set_friendly_name(const std::string& f) { friendly_name_ = f; } | 
 |  | 
 |   const std::string& contents() const { | 
 |     DCHECK(contents_loaded_); | 
 |     return contents_; | 
 |   } | 
 |  | 
 |   // For testing and in cases where this input doesn't actually refer to | 
 |   // "a file". | 
 |   void SetContents(const std::string& c); | 
 |  | 
 |   // Loads the given file synchronously, returning true on success. This | 
 |   bool Load(const base::FilePath& system_path); | 
 |  | 
 |  private: | 
 |   SourceFile name_; | 
 |   SourceDir dir_; | 
 |  | 
 |   base::FilePath physical_name_; | 
 |   std::string friendly_name_; | 
 |  | 
 |   bool contents_loaded_; | 
 |   std::string contents_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(InputFile); | 
 | }; | 
 |  | 
 | #endif  // TOOLS_GN_INPUT_FILE_H_ |