1d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// found in the LICENSE file. 4d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 5d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#ifndef TOOLS_GN_ITEM_H_ 6d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#define TOOLS_GN_ITEM_H_ 7d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 8d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include <string> 9d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 10d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#include "tools/gn/label.h" 11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "tools/gn/visibility.h" 12d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 13d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochclass Config; 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ParseNode; 150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)class Settings; 16d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochclass Target; 17d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochclass Toolchain; 18d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 19d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// A named item (target, config, etc.) that participates in the dependency 20d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch// graph. 21d3868032626d59662ff73b372b5d584c1d144c53Ben Murdochclass Item { 22d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch public: 230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) Item(const Settings* settings, const Label& label); 24d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual ~Item(); 25d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const Settings* settings() const { return settings_; } 270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // This is guaranteed to never change after construction so this can be 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // accessed from any thread with no locking once the item is constructed. 30d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch const Label& label() const { return label_; } 31d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ParseNode* defined_from() const { return defined_from_; } 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void set_defined_from(const ParseNode* df) { defined_from_ = df; } 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 35e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch Visibility& visibility() { return visibility_; } 36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const Visibility& visibility() const { return visibility_; } 37e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 38d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // Manual RTTI. 39d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual Config* AsConfig(); 40d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual const Config* AsConfig() const; 41d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual Target* AsTarget(); 42d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual const Target* AsTarget() const; 43d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual Toolchain* AsToolchain(); 44d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch virtual const Toolchain* AsToolchain() const; 45d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 46d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // Returns a name like "target" or "config" for the type of item this is, to 47d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // be used in logging and error messages. 48d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch std::string GetItemTypeName() const; 49d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 50d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch // Called when this item is resolved, meaning it and all of its dependents 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // have no unresolved deps. Returns true on success. Sets the error and 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // returns false on failure. 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool OnResolved(Err* err); 54d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 55d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch private: 560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const Settings* settings_; 57d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch Label label_; 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ParseNode* defined_from_; 59e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 60e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch Visibility visibility_; 61d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch}; 62d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch 63d3868032626d59662ff73b372b5d584c1d144c53Ben Murdoch#endif // TOOLS_GN_ITEM_H_ 64