Home | History | Annotate | Download | only in gn
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef TOOLS_GN_VISIBILITY_H_
      6 #define TOOLS_GN_VISIBILITY_H_
      7 
      8 #include <vector>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/strings/string_piece.h"
     12 #include "tools/gn/label_pattern.h"
     13 #include "tools/gn/source_dir.h"
     14 
     15 class Err;
     16 class Item;
     17 class Label;
     18 class Scope;
     19 class Value;
     20 
     21 class Visibility {
     22  public:
     23   // Defaults to private visibility (only the current file).
     24   Visibility();
     25   ~Visibility();
     26 
     27   // Set the visibility to the thing specified by the given value. On failure,
     28   // returns false and sets the error.
     29   bool Set(const SourceDir& current_dir, const Value& value, Err* err);
     30 
     31   // Sets the visibility to be public.
     32   void SetPublic();
     33 
     34   // Sets the visibility to be private to the given directory.
     35   void SetPrivate(const SourceDir& current_dir);
     36 
     37   // Returns true if the target with the given label can depend on one with the
     38   // current visibility.
     39   bool CanSeeMe(const Label& label) const;
     40 
     41   // Returns a string listing the visibility. |indent| number of spaces will
     42   // be added on the left side of the output. If |include_brackets| is set, the
     43   // result will be wrapped in "[ ]" and the contents further indented. The
     44   // result will end in a newline.
     45   std::string Describe(int indent, bool include_brackets) const;
     46 
     47   // Helper function to check visibility between the given two items. If
     48   // to is invisible to from, returns false and sets the error.
     49   static bool CheckItemVisibility(const Item* from, const Item* to, Err* err);
     50 
     51   // Helper function to fill an item's visibility from the "visibility" value
     52   // in the current scope.
     53   static bool FillItemVisibility(Item* item, Scope* scope, Err* err);
     54 
     55  private:
     56   std::vector<LabelPattern> patterns_;
     57 
     58   DISALLOW_COPY_AND_ASSIGN(Visibility);
     59 };
     60 
     61 #endif  // TOOLS_GN_VISIBILITY_H_
     62