| // Copyright 2014 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_VISIBILITY_H_ | 
 | #define TOOLS_GN_VISIBILITY_H_ | 
 |  | 
 | #include <memory> | 
 | #include <string_view> | 
 | #include <vector> | 
 |  | 
 | #include "base/macros.h" | 
 | #include "gn/label_pattern.h" | 
 | #include "gn/source_dir.h" | 
 |  | 
 | namespace base { | 
 | class Value; | 
 | } | 
 |  | 
 | class Err; | 
 | class Item; | 
 | class Label; | 
 | class Scope; | 
 | class Value; | 
 |  | 
 | class Visibility { | 
 |  public: | 
 |   // Defaults to private visibility (only the current file). | 
 |   Visibility(); | 
 |   ~Visibility(); | 
 |  | 
 |   // Set the visibility to the thing specified by the given value. On failure, | 
 |   // returns false and sets the error. | 
 |   bool Set(const SourceDir& current_dir, | 
 |            const std::string_view& source_root, | 
 |            const Value& value, | 
 |            Err* err); | 
 |  | 
 |   // Sets the visibility to be public. | 
 |   void SetPublic(); | 
 |  | 
 |   // Sets the visibility to be private to the given directory. | 
 |   void SetPrivate(const SourceDir& current_dir); | 
 |  | 
 |   // Returns true if the target with the given label can depend on one with the | 
 |   // current visibility. | 
 |   bool CanSeeMe(const Label& label) const; | 
 |  | 
 |   // Returns a string listing the visibility. |indent| number of spaces will | 
 |   // be added on the left side of the output. If |include_brackets| is set, the | 
 |   // result will be wrapped in "[ ]" and the contents further indented. The | 
 |   // result will end in a newline. | 
 |   std::string Describe(int indent, bool include_brackets) const; | 
 |  | 
 |   // Returns value representation of this visibility | 
 |   std::unique_ptr<base::Value> AsValue() const; | 
 |  | 
 |   // Helper function to check visibility between the given two items. If | 
 |   // to is invisible to from, returns false and sets the error. | 
 |   static bool CheckItemVisibility(const Item* from, const Item* to, Err* err); | 
 |  | 
 |   // Helper function to fill an item's visibility from the "visibility" value | 
 |   // in the current scope. | 
 |   static bool FillItemVisibility(Item* item, Scope* scope, Err* err); | 
 |  | 
 |  private: | 
 |   std::vector<LabelPattern> patterns_; | 
 |  | 
 |   DISALLOW_COPY_AND_ASSIGN(Visibility); | 
 | }; | 
 |  | 
 | #endif  // TOOLS_GN_VISIBILITY_H_ |