https://mooseframework.inl.gov
Builder.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
12 // MOOSE includes
13 #include "ConsoleStreamInterface.h"
14 #include "MooseTypes.h"
15 #include "InputParameters.h"
16 #include "Syntax.h"
17 #include "Parser.h"
18 
19 #include "hit/hit.h"
20 
21 #include <vector>
22 #include <string>
23 #include <iomanip>
24 #include <optional>
25 
26 // Forward declarations
27 class ActionWarehouse;
28 class SyntaxTree;
29 class MooseApp;
30 class Factory;
31 class ActionFactory;
32 class GlobalParamsAction;
33 class JsonSyntaxTree;
34 
35 namespace Moose
36 {
37 class Builder;
38 
39 class UnusedWalker : public hit::Walker
40 {
41 public:
42  UnusedWalker(std::set<std::string> used, Builder & p) : _used(used), _builder(p) {}
43 
44  void walk(const std::string & fullpath, const std::string & nodename, hit::Node * n) override;
45 
46  std::vector<std::string> errors;
47 
48 private:
49  std::set<std::string> _used;
51 };
52 
56 class Builder : public ConsoleStreamInterface, public hit::Walker
57 {
58 public:
60  {
63  };
64 
65  Builder(MooseApp & app, ActionWarehouse & action_wh, std::shared_ptr<Parser> parser);
66  virtual ~Builder();
67 
72 
76  std::string getPrimaryFileName(bool stripLeadingPath = true) const;
77 
82  void build();
83 
89  void extractParams(const std::string & prefix, InputParameters & p);
90 
94  void initSyntaxFormatter(SyntaxFormatterType type, bool dump_mode);
95 
99  void buildFullTree(const std::string & search_string);
100 
104  void buildJsonSyntaxTree(JsonSyntaxTree & tree) const;
105 
106  void walk(const std::string & fullpath, const std::string & nodepath, hit::Node * n);
107 
108  void errorCheck(const libMesh::Parallel::Communicator & comm, bool warn_unused, bool err_unused);
109 
110  std::vector<std::string> listValidParams(std::string & section_name);
111 
115  hit::Node * root();
116 
117 protected:
122  template <typename T, typename Base>
124  void setScalarParameter(const std::string & full_name,
125  const std::string & short_name,
126  InputParameters::Parameter<T> * param,
127  bool in_global,
128  GlobalParamsAction * global_block);
129 
130  template <typename T, typename UP_T, typename Base>
131  void setScalarValueTypeParameter(const std::string & full_name,
132  const std::string & short_name,
133  InputParameters::Parameter<T> * param,
134  bool in_global,
135  GlobalParamsAction * global_block);
136 
138  template <typename T, typename Base>
139  void setVectorParameter(const std::string & full_name,
140  const std::string & short_name,
141  InputParameters::Parameter<std::vector<T>> * param,
142  bool in_global,
143  GlobalParamsAction * global_block);
144 
146  template <typename KeyType, typename MappedType>
147  void setMapParameter(const std::string & full_name,
148  const std::string & short_name,
149  InputParameters::Parameter<std::map<KeyType, MappedType>> * param,
150  bool in_global,
151  GlobalParamsAction * global_block);
152 
157  template <typename T>
158  void setDoubleIndexParameter(const std::string & full_name,
159  const std::string & short_name,
160  InputParameters::Parameter<std::vector<std::vector<T>>> * param,
161  bool in_global,
162  GlobalParamsAction * global_block);
163 
168  template <typename T>
170  const std::string & full_name,
171  const std::string & short_name,
172  InputParameters::Parameter<std::vector<std::vector<std::vector<T>>>> * param,
173  bool in_global,
174  GlobalParamsAction * global_block);
175 
180  template <typename T>
181  void setScalarComponentParameter(const std::string & full_name,
182  const std::string & short_name,
183  InputParameters::Parameter<T> * param,
184  bool in_global,
185  GlobalParamsAction * global_block);
186 
191  template <typename T>
192  void setVectorComponentParameter(const std::string & full_name,
193  const std::string & short_name,
194  InputParameters::Parameter<std::vector<T>> * param,
195  bool in_global,
196  GlobalParamsAction * global_block);
197 
209  template <typename T>
210  void
211  setVectorVectorComponentParameter(const std::string & full_name,
212  const std::string & short_name,
213  InputParameters::Parameter<std::vector<std::vector<T>>> * param,
214  bool in_global,
215  GlobalParamsAction * global_block);
216 
217  std::unique_ptr<hit::Node> _cli_root = nullptr;
220  hit::Node * _root;
221  std::vector<std::string> _secs_need_first;
222 
234  const std::shared_ptr<Parser> _parser;
235 
237  std::unique_ptr<SyntaxTree> _syntax_formatter;
238 
240  std::set<std::string> _extracted_vars;
241 
244 
247 
249  std::ostringstream * _current_error_stream;
250 
252  std::unordered_set<std::string> _deprec_param_tracker;
253 
254 private:
255  std::string _errmsg;
256  std::string _warnmsg;
257  void walkRaw(std::string fullpath, std::string nodepath, hit::Node * n);
258 };
259 }
hit::Node * root()
Definition: Builder.C:321
void build()
Parse an input file (or text string if provided) consisting of hit syntax and setup objects in the MO...
Definition: Builder.C:328
ActionFactory & _action_factory
The Factory that builds actions.
Definition: Builder.h:230
MooseApp & _app
The MooseApp this Parser is part of.
Definition: Builder.h:224
void walk(const std::string &fullpath, const std::string &nodename, hit::Node *n) override
Definition: Builder.C:179
std::unordered_set< std::string > _deprec_param_tracker
Tracks whether a deprecated param has had its warning message printed already.
Definition: Builder.h:252
void walkRaw(std::string fullpath, std::string nodepath, hit::Node *n)
Definition: Builder.C:206
void setTripleIndexParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< std::vector< std::vector< std::vector< T >>>> *param, bool in_global, GlobalParamsAction *global_block)
Template method for setting any triple indexed type parameter read from the input file or command lin...
Definition: Builder.C:1616
void buildFullTree(const std::string &search_string)
Use MOOSE Factories to construct a full parse tree for documentation or echoing input.
Definition: Builder.C:640
Generic factory class for build all sorts of objects.
Definition: Factory.h:28
std::vector< std::string > _secs_need_first
Definition: Builder.h:221
void setVectorVectorComponentParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< std::vector< std::vector< T >>> *param, bool in_global, GlobalParamsAction *global_block)
Template method for setting vector of several multivalue "scalar" type parameter read from the input ...
Definition: Builder.C:1790
InputParameters * _current_params
The current parameter object for which parameters are being extracted.
Definition: Builder.h:246
void setScalarComponentParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< T > *param, bool in_global, GlobalParamsAction *global_block)
Template method for setting any multivalue "scalar" type parameter read from the input file or comman...
Definition: Builder.C:1692
Builder & _builder
Definition: Builder.h:50
static InputParameters validParams()
Parameters that are processed directly by the Parser and are valid anywhere in the input...
Definition: Builder.C:141
Base class for MOOSE-based applications.
Definition: MooseApp.h:85
void setMapParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< std::map< KeyType, MappedType >> *param, bool in_global, GlobalParamsAction *global_block)
Template method for setting any map type parameter read from the input file or command line...
Definition: Builder.C:1468
Storage for action instances.
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
std::unique_ptr< SyntaxTree > _syntax_formatter
Object for holding the syntax parse tree.
Definition: Builder.h:237
Holds the syntax in a Json::Value tree.
void extractParams(const std::string &prefix, InputParameters &p)
This function attempts to extract values from the input file based on the contents of the passed para...
Definition: Builder.C:887
std::vector< std::string > errors
Definition: Builder.h:46
void setScalarValueTypeParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< T > *param, bool in_global, GlobalParamsAction *global_block)
Definition: Builder.C:1416
const std::shared_ptr< Parser > _parser
The front parser.
Definition: Builder.h:234
std::string _warnmsg
Definition: Builder.h:256
std::set< std::string > _extracted_vars
The set of all variables extracted from the input file.
Definition: Builder.h:240
UnusedWalker(std::set< std::string > used, Builder &p)
Definition: Builder.h:42
void initSyntaxFormatter(SyntaxFormatterType type, bool dump_mode)
Creates a syntax formatter for printing.
Definition: Builder.C:463
Specialized factory for generic Action System objects.
Definition: ActionFactory.h:50
An inteface for the _console for outputting to the Console object.
hit::Node * _root
The root node from the Parser; in the future, we should probably clone this so that we don&#39;t muck wit...
Definition: Builder.h:220
void buildJsonSyntaxTree(JsonSyntaxTree &tree) const
Use MOOSE Factories to construct a parameter tree for documentation or echoing input.
Definition: Builder.C:480
void errorCheck(const libMesh::Parallel::Communicator &comm, bool warn_unused, bool err_unused)
Definition: Builder.C:419
std::string getPrimaryFileName(bool stripLeadingPath=true) const
Return the primary (first) filename that was parsed.
Definition: Builder.C:199
std::unique_ptr< hit::Node > _cli_root
Definition: Builder.h:217
void setScalarParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< T > *param, bool in_global, GlobalParamsAction *global_block)
Helper functions for setting parameters of arbitrary types - bodies are in the .C file since they are...
Definition: Builder.C:1356
bool _sections_read
Boolean to indicate whether parsing has started (sections have been extracted)
Definition: Builder.h:243
void setDoubleIndexParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< std::vector< std::vector< T >>> *param, bool in_global, GlobalParamsAction *global_block)
Template method for setting any double indexed type parameter read from the input file or command lin...
Definition: Builder.C:1569
std::ostringstream * _current_error_stream
The current stream object used for capturing errors during extraction.
Definition: Builder.h:249
std::string _errmsg
Definition: Builder.h:255
Syntax & _syntax
Reference to an object that defines input file syntax.
Definition: Builder.h:232
std::set< std::string > _used
Definition: Builder.h:49
void setVectorParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< std::vector< T >> *param, bool in_global, GlobalParamsAction *global_block)
Template method for setting any vector type parameter read from the input file or command line...
Definition: Builder.C:1433
Holding syntax for parsing input files.
Definition: Syntax.h:21
void setVectorComponentParameter(const std::string &full_name, const std::string &short_name, InputParameters::Parameter< std::vector< T >> *param, bool in_global, GlobalParamsAction *global_block)
Template method for setting several multivalue "scalar" type parameter read from the input file or co...
Definition: Builder.C:1738
Factory & _factory
The Factory associated with that MooseApp.
Definition: Builder.h:226
virtual ~Builder()
Definition: Builder.C:138
std::vector< std::string > listValidParams(std::string &section_name)
Definition: Builder.C:162
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
Builder(MooseApp &app, ActionWarehouse &action_wh, std::shared_ptr< Parser > parser)
Definition: Builder.C:122
ActionWarehouse & _action_wh
Action warehouse that will be filled by actions.
Definition: Builder.h:228
Parses MOOSE input using HIT/WASP.
Definition: Builder.h:56
void walk(const std::string &fullpath, const std::string &nodepath, hit::Node *n)
Definition: Builder.C:311