Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: tools/gn/desc_builder.cc

Issue 2252293003: Re-write many calls to WrapUnique() with MakeUnique() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/gn/command_desc.cc ('k') | tools/gn/functions_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <set> 5 #include <set>
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "base/strings/string_number_conversions.h" 8 #include "base/strings/string_number_conversions.h"
9 #include "tools/gn/commands.h" 9 #include "tools/gn/commands.h"
10 #include "tools/gn/config.h" 10 #include "tools/gn/config.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 107
108 protected: 108 protected:
109 virtual Label GetToolchainLabel() const = 0; 109 virtual Label GetToolchainLabel() const = 0;
110 110
111 bool what(const std::string& w) const { 111 bool what(const std::string& w) const {
112 return what_.empty() || what_.find(w) != what_.end(); 112 return what_.empty() || what_.find(w) != what_.end();
113 } 113 }
114 114
115 template <typename T> 115 template <typename T>
116 ValuePtr RenderValue(const std::vector<T>& vector) { 116 ValuePtr RenderValue(const std::vector<T>& vector) {
117 auto res = base::WrapUnique(new base::ListValue()); 117 auto res = base::MakeUnique<base::ListValue>();
118 for (const auto& v : vector) 118 for (const auto& v : vector)
119 res->Append(RenderValue(v)); 119 res->Append(RenderValue(v));
120 120
121 return std::move(res); 121 return std::move(res);
122 } 122 }
123 123
124 ValuePtr RenderValue(const std::string& s, bool optional = false) { 124 ValuePtr RenderValue(const std::string& s, bool optional = false) {
125 return (s.empty() && optional) ? base::Value::CreateNullValue() 125 return (s.empty() && optional) ? base::Value::CreateNullValue()
126 : ValuePtr(new base::StringValue(s)); 126 : ValuePtr(new base::StringValue(s));
127 } 127 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 bool tree_; 174 bool tree_;
175 bool blame_; 175 bool blame_;
176 }; 176 };
177 177
178 class ConfigDescBuilder : public BaseDescBuilder { 178 class ConfigDescBuilder : public BaseDescBuilder {
179 public: 179 public:
180 ConfigDescBuilder(const Config* config, const std::set<std::string>& what) 180 ConfigDescBuilder(const Config* config, const std::set<std::string>& what)
181 : BaseDescBuilder(what, false, false, false), config_(config) {} 181 : BaseDescBuilder(what, false, false, false), config_(config) {}
182 182
183 std::unique_ptr<base::DictionaryValue> BuildDescription() { 183 std::unique_ptr<base::DictionaryValue> BuildDescription() {
184 auto res = base::WrapUnique(new base::DictionaryValue()); 184 auto res = base::MakeUnique<base::DictionaryValue>();
185 const ConfigValues& values = config_->resolved_values(); 185 const ConfigValues& values = config_->resolved_values();
186 186
187 if (what_.empty()) 187 if (what_.empty())
188 res->SetString( 188 res->SetString(
189 "toolchain", 189 "toolchain",
190 config_->label().GetToolchainLabel().GetUserVisibleName(false)); 190 config_->label().GetToolchainLabel().GetUserVisibleName(false));
191 191
192 if (what(variables::kConfigs) && !config_->configs().empty()) { 192 if (what(variables::kConfigs) && !config_->configs().empty()) {
193 auto configs = base::WrapUnique(new base::ListValue()); 193 auto configs = base::MakeUnique<base::ListValue>();
194 FillInConfigVector(configs.get(), config_->configs().vector()); 194 FillInConfigVector(configs.get(), config_->configs().vector());
195 res->Set(variables::kConfigs, std::move(configs)); 195 res->Set(variables::kConfigs, std::move(configs));
196 } 196 }
197 197
198 #define CONFIG_VALUE_ARRAY_HANDLER(name, type) \ 198 #define CONFIG_VALUE_ARRAY_HANDLER(name, type) \
199 if (what(#name)) { \ 199 if (what(#name)) { \
200 ValuePtr ptr = \ 200 ValuePtr ptr = \
201 render_config_value_array<type>(values, &ConfigValues::name); \ 201 render_config_value_array<type>(values, &ConfigValues::name); \
202 if (ptr) { \ 202 if (ptr) { \
203 res->Set(#name, std::move(ptr)); \ 203 res->Set(#name, std::move(ptr)); \
(...skipping 22 matching lines...) Expand all
226 protected: 226 protected:
227 Label GetToolchainLabel() const override { 227 Label GetToolchainLabel() const override {
228 return config_->label().GetToolchainLabel(); 228 return config_->label().GetToolchainLabel();
229 } 229 }
230 230
231 private: 231 private:
232 template <typename T> 232 template <typename T>
233 ValuePtr render_config_value_array( 233 ValuePtr render_config_value_array(
234 const ConfigValues& values, 234 const ConfigValues& values,
235 const std::vector<T>& (ConfigValues::*getter)() const) { 235 const std::vector<T>& (ConfigValues::*getter)() const) {
236 auto res = base::WrapUnique(new base::ListValue()); 236 auto res = base::MakeUnique<base::ListValue>();
237 237
238 for (const T& cur : (values.*getter)()) 238 for (const T& cur : (values.*getter)())
239 res->Append(RenderValue(cur)); 239 res->Append(RenderValue(cur));
240 240
241 return res->empty() ? nullptr : std::move(res); 241 return res->empty() ? nullptr : std::move(res);
242 } 242 }
243 243
244 const Config* config_; 244 const Config* config_;
245 }; 245 };
246 246
247 class TargetDescBuilder : public BaseDescBuilder { 247 class TargetDescBuilder : public BaseDescBuilder {
248 public: 248 public:
249 TargetDescBuilder(const Target* target, 249 TargetDescBuilder(const Target* target,
250 const std::set<std::string>& what, 250 const std::set<std::string>& what,
251 bool all, 251 bool all,
252 bool tree, 252 bool tree,
253 bool blame) 253 bool blame)
254 : BaseDescBuilder(what, all, tree, blame), target_(target) {} 254 : BaseDescBuilder(what, all, tree, blame), target_(target) {}
255 255
256 std::unique_ptr<base::DictionaryValue> BuildDescription() { 256 std::unique_ptr<base::DictionaryValue> BuildDescription() {
257 auto res = base::WrapUnique(new base::DictionaryValue()); 257 auto res = base::MakeUnique<base::DictionaryValue>();
258 bool is_binary_output = target_->IsBinary(); 258 bool is_binary_output = target_->IsBinary();
259 259
260 if (what_.empty()) { 260 if (what_.empty()) {
261 res->SetString("type", 261 res->SetString("type",
262 Target::GetStringForOutputType(target_->output_type())); 262 Target::GetStringForOutputType(target_->output_type()));
263 res->SetString( 263 res->SetString(
264 "toolchain", 264 "toolchain",
265 target_->label().GetToolchainLabel().GetUserVisibleName(false)); 265 target_->label().GetToolchainLabel().GetUserVisibleName(false));
266 } 266 }
267 267
268 // General target meta variables. 268 // General target meta variables.
269 if (what(variables::kVisibility)) 269 if (what(variables::kVisibility))
270 res->Set(variables::kVisibility, target_->visibility().AsValue()); 270 res->Set(variables::kVisibility, target_->visibility().AsValue());
271 271
272 if (what(variables::kTestonly)) 272 if (what(variables::kTestonly))
273 res->SetBoolean(variables::kTestonly, target_->testonly()); 273 res->SetBoolean(variables::kTestonly, target_->testonly());
274 274
275 if (is_binary_output) { 275 if (is_binary_output) {
276 if (what(variables::kCheckIncludes)) 276 if (what(variables::kCheckIncludes))
277 res->SetBoolean(variables::kCheckIncludes, target_->check_includes()); 277 res->SetBoolean(variables::kCheckIncludes, target_->check_includes());
278 278
279 if (what(variables::kAllowCircularIncludesFrom)) { 279 if (what(variables::kAllowCircularIncludesFrom)) {
280 auto labels = base::WrapUnique(new base::ListValue()); 280 auto labels = base::MakeUnique<base::ListValue>();
281 for (const auto& cur : target_->allow_circular_includes_from()) 281 for (const auto& cur : target_->allow_circular_includes_from())
282 labels->AppendString(cur.GetUserVisibleName(GetToolchainLabel())); 282 labels->AppendString(cur.GetUserVisibleName(GetToolchainLabel()));
283 283
284 res->Set(variables::kAllowCircularIncludesFrom, std::move(labels)); 284 res->Set(variables::kAllowCircularIncludesFrom, std::move(labels));
285 } 285 }
286 } 286 }
287 287
288 if (what(variables::kSources) && !target_->sources().empty()) 288 if (what(variables::kSources) && !target_->sources().empty())
289 res->Set(variables::kSources, RenderValue(target_->sources())); 289 res->Set(variables::kSources, RenderValue(target_->sources()));
290 290
(...skipping 11 matching lines...) Expand all
302 res->SetString(variables::kPublic, "*"); 302 res->SetString(variables::kPublic, "*");
303 else 303 else
304 res->Set(variables::kPublic, RenderValue(target_->public_headers())); 304 res->Set(variables::kPublic, RenderValue(target_->public_headers()));
305 } 305 }
306 306
307 if (what(variables::kInputs) && !target_->inputs().empty()) 307 if (what(variables::kInputs) && !target_->inputs().empty())
308 res->Set(variables::kInputs, RenderValue(target_->inputs())); 308 res->Set(variables::kInputs, RenderValue(target_->inputs()));
309 309
310 if (is_binary_output && what(variables::kConfigs) && 310 if (is_binary_output && what(variables::kConfigs) &&
311 !target_->configs().empty()) { 311 !target_->configs().empty()) {
312 auto configs = base::WrapUnique(new base::ListValue()); 312 auto configs = base::MakeUnique<base::ListValue>();
313 FillInConfigVector(configs.get(), target_->configs().vector()); 313 FillInConfigVector(configs.get(), target_->configs().vector());
314 res->Set(variables::kConfigs, std::move(configs)); 314 res->Set(variables::kConfigs, std::move(configs));
315 } 315 }
316 316
317 if (what(variables::kPublicConfigs) && !target_->public_configs().empty()) { 317 if (what(variables::kPublicConfigs) && !target_->public_configs().empty()) {
318 auto configs = base::WrapUnique(new base::ListValue()); 318 auto configs = base::MakeUnique<base::ListValue>();
319 FillInConfigVector(configs.get(), target_->public_configs()); 319 FillInConfigVector(configs.get(), target_->public_configs());
320 res->Set(variables::kPublicConfigs, std::move(configs)); 320 res->Set(variables::kPublicConfigs, std::move(configs));
321 } 321 }
322 322
323 if (what(variables::kAllDependentConfigs) && 323 if (what(variables::kAllDependentConfigs) &&
324 !target_->all_dependent_configs().empty()) { 324 !target_->all_dependent_configs().empty()) {
325 auto configs = base::WrapUnique(new base::ListValue()); 325 auto configs = base::MakeUnique<base::ListValue>();
326 FillInConfigVector(configs.get(), target_->all_dependent_configs()); 326 FillInConfigVector(configs.get(), target_->all_dependent_configs());
327 res->Set(variables::kAllDependentConfigs, std::move(configs)); 327 res->Set(variables::kAllDependentConfigs, std::move(configs));
328 } 328 }
329 329
330 // Action 330 // Action
331 if (target_->output_type() == Target::ACTION || 331 if (target_->output_type() == Target::ACTION ||
332 target_->output_type() == Target::ACTION_FOREACH) { 332 target_->output_type() == Target::ACTION_FOREACH) {
333 if (what(variables::kScript)) 333 if (what(variables::kScript))
334 res->SetString(variables::kScript, 334 res->SetString(variables::kScript,
335 target_->action_values().script().value()); 335 target_->action_values().script().value());
336 336
337 if (what(variables::kArgs)) { 337 if (what(variables::kArgs)) {
338 auto args = base::WrapUnique(new base::ListValue()); 338 auto args = base::MakeUnique<base::ListValue>();
339 for (const auto& elem : target_->action_values().args().list()) 339 for (const auto& elem : target_->action_values().args().list())
340 args->AppendString(elem.AsString()); 340 args->AppendString(elem.AsString());
341 341
342 res->Set(variables::kArgs, std::move(args)); 342 res->Set(variables::kArgs, std::move(args));
343 } 343 }
344 if (what(variables::kDepfile) && 344 if (what(variables::kDepfile) &&
345 !target_->action_values().depfile().empty()) { 345 !target_->action_values().depfile().empty()) {
346 res->SetString(variables::kDepfile, 346 res->SetString(variables::kDepfile,
347 target_->action_values().depfile().AsString()); 347 target_->action_values().depfile().AsString());
348 } 348 }
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 // libs and lib_dirs are special in that they're inherited. We don't 398 // libs and lib_dirs are special in that they're inherited. We don't
399 // currently 399 // currently
400 // implement a blame feature for this since the bottom-up inheritance makes 400 // implement a blame feature for this since the bottom-up inheritance makes
401 // this difficult. 401 // this difficult.
402 402
403 // Libs can be part of any target and get recursively pushed up the chain, 403 // Libs can be part of any target and get recursively pushed up the chain,
404 // so display them regardless of target type. 404 // so display them regardless of target type.
405 if (what(variables::kLibs)) { 405 if (what(variables::kLibs)) {
406 const OrderedSet<LibFile>& all_libs = target_->all_libs(); 406 const OrderedSet<LibFile>& all_libs = target_->all_libs();
407 if (!all_libs.empty()) { 407 if (!all_libs.empty()) {
408 auto libs = base::WrapUnique(new base::ListValue()); 408 auto libs = base::MakeUnique<base::ListValue>();
409 for (size_t i = 0; i < all_libs.size(); i++) 409 for (size_t i = 0; i < all_libs.size(); i++)
410 libs->AppendString(all_libs[i].value()); 410 libs->AppendString(all_libs[i].value());
411 res->Set(variables::kLibs, std::move(libs)); 411 res->Set(variables::kLibs, std::move(libs));
412 } 412 }
413 } 413 }
414 414
415 if (what(variables::kLibDirs)) { 415 if (what(variables::kLibDirs)) {
416 const OrderedSet<SourceDir>& all_lib_dirs = target_->all_lib_dirs(); 416 const OrderedSet<SourceDir>& all_lib_dirs = target_->all_lib_dirs();
417 if (!all_lib_dirs.empty()) { 417 if (!all_lib_dirs.empty()) {
418 auto lib_dirs = base::WrapUnique(new base::ListValue()); 418 auto lib_dirs = base::MakeUnique<base::ListValue>();
419 for (size_t i = 0; i < all_lib_dirs.size(); i++) 419 for (size_t i = 0; i < all_lib_dirs.size(); i++)
420 lib_dirs->AppendString(FormatSourceDir(all_lib_dirs[i])); 420 lib_dirs->AppendString(FormatSourceDir(all_lib_dirs[i]));
421 res->Set(variables::kLibDirs, std::move(lib_dirs)); 421 res->Set(variables::kLibDirs, std::move(lib_dirs));
422 } 422 }
423 } 423 }
424 424
425 return res; 425 return res;
426 } 426 }
427 427
428 private: 428 private:
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 } 465 }
466 466
467 out->AppendString(str); 467 out->AppendString(str);
468 468
469 if (print_children) 469 if (print_children)
470 RecursivePrintDeps(out, cur_dep, seen_targets, indent_level + 1); 470 RecursivePrintDeps(out, cur_dep, seen_targets, indent_level + 1);
471 } 471 }
472 } 472 }
473 473
474 ValuePtr RenderDeps() { 474 ValuePtr RenderDeps() {
475 auto res = base::WrapUnique(new base::ListValue()); 475 auto res = base::MakeUnique<base::ListValue>();
476 476
477 // Tree mode is separate. 477 // Tree mode is separate.
478 if (tree_) { 478 if (tree_) {
479 if (all_) { 479 if (all_) {
480 // Show all tree deps with no eliding. 480 // Show all tree deps with no eliding.
481 RecursivePrintDeps(res.get(), target_, nullptr, 0); 481 RecursivePrintDeps(res.get(), target_, nullptr, 0);
482 } else { 482 } else {
483 // Don't recurse into duplicates. 483 // Don't recurse into duplicates.
484 std::set<const Target*> seen_targets; 484 std::set<const Target*> seen_targets;
485 RecursivePrintDeps(res.get(), target_, &seen_targets, 0); 485 RecursivePrintDeps(res.get(), target_, &seen_targets, 0);
(...skipping 13 matching lines...) Expand all
499 deps.push_back(pair.ptr); 499 deps.push_back(pair.ptr);
500 std::sort(deps.begin(), deps.end()); 500 std::sort(deps.begin(), deps.end());
501 commands::FilterAndPrintTargets(&deps, res.get()); 501 commands::FilterAndPrintTargets(&deps, res.get());
502 } 502 }
503 } 503 }
504 504
505 return std::move(res); 505 return std::move(res);
506 } 506 }
507 507
508 ValuePtr RenderRuntimeDeps() { 508 ValuePtr RenderRuntimeDeps() {
509 auto res = base::WrapUnique(new base::ListValue()); 509 auto res = base::MakeUnique<base::ListValue>();
510 510
511 const Target* previous_from = NULL; 511 const Target* previous_from = NULL;
512 for (const auto& pair : ComputeRuntimeDeps(target_)) { 512 for (const auto& pair : ComputeRuntimeDeps(target_)) {
513 std::string str; 513 std::string str;
514 if (blame_) { 514 if (blame_) {
515 // Generally a target's runtime deps will be listed sequentially, so 515 // Generally a target's runtime deps will be listed sequentially, so
516 // group them and don't duplicate the "from" label for two in a row. 516 // group them and don't duplicate the "from" label for two in a row.
517 if (previous_from == pair.second) { 517 if (previous_from == pair.second) {
518 str = " "; 518 str = " ";
519 } else { 519 } else {
520 previous_from = pair.second; 520 previous_from = pair.second;
521 res->AppendString( 521 res->AppendString(
522 str + "From " + 522 str + "From " +
523 pair.second->label().GetUserVisibleName(GetToolchainLabel())); 523 pair.second->label().GetUserVisibleName(GetToolchainLabel()));
524 str = " "; 524 str = " ";
525 } 525 }
526 } 526 }
527 527
528 res->AppendString(str + pair.first.value()); 528 res->AppendString(str + pair.first.value());
529 } 529 }
530 530
531 return std::move(res); 531 return std::move(res);
532 } 532 }
533 533
534 void FillInSourceOutputs(base::DictionaryValue* res) { 534 void FillInSourceOutputs(base::DictionaryValue* res) {
535 auto dict = base::WrapUnique(new base::DictionaryValue()); 535 auto dict = base::MakeUnique<base::DictionaryValue>();
536 for (const auto& source : target_->sources()) { 536 for (const auto& source : target_->sources()) {
537 std::vector<OutputFile> outputs; 537 std::vector<OutputFile> outputs;
538 Toolchain::ToolType tool_type = Toolchain::TYPE_NONE; 538 Toolchain::ToolType tool_type = Toolchain::TYPE_NONE;
539 if (target_->GetOutputFilesForSource(source, &tool_type, &outputs)) { 539 if (target_->GetOutputFilesForSource(source, &tool_type, &outputs)) {
540 auto list = base::WrapUnique(new base::ListValue()); 540 auto list = base::MakeUnique<base::ListValue>();
541 for (const auto& output : outputs) 541 for (const auto& output : outputs)
542 list->AppendString(output.value()); 542 list->AppendString(output.value());
543 543
544 dict->SetWithoutPathExpansion(source.value(), std::move(list)); 544 dict->SetWithoutPathExpansion(source.value(), std::move(list));
545 } 545 }
546 } 546 }
547 res->Set("source_outputs", std::move(dict)); 547 res->Set("source_outputs", std::move(dict));
548 } 548 }
549 549
550 void FillInBundle(base::DictionaryValue* res) { 550 void FillInBundle(base::DictionaryValue* res) {
551 auto data = base::WrapUnique(new base::DictionaryValue()); 551 auto data = base::MakeUnique<base::DictionaryValue>();
552 const BundleData& bundle_data = target_->bundle_data(); 552 const BundleData& bundle_data = target_->bundle_data();
553 const Settings* settings = target_->settings(); 553 const Settings* settings = target_->settings();
554 BundleData::SourceFiles sources; 554 BundleData::SourceFiles sources;
555 bundle_data.GetSourceFiles(&sources); 555 bundle_data.GetSourceFiles(&sources);
556 data->Set("source_files", RenderValue(sources)); 556 data->Set("source_files", RenderValue(sources));
557 data->SetString("root_dir_output", 557 data->SetString("root_dir_output",
558 bundle_data.GetBundleRootDirOutput(settings).value()); 558 bundle_data.GetBundleRootDirOutput(settings).value());
559 data->Set("root_dir", RenderValue(bundle_data.root_dir())); 559 data->Set("root_dir", RenderValue(bundle_data.root_dir()));
560 data->Set("resources_dir", RenderValue(bundle_data.resources_dir())); 560 data->Set("resources_dir", RenderValue(bundle_data.resources_dir()));
561 data->Set("executable_dir", RenderValue(bundle_data.executable_dir())); 561 data->Set("executable_dir", RenderValue(bundle_data.executable_dir()));
562 data->Set("plugins_dir", RenderValue(bundle_data.plugins_dir())); 562 data->Set("plugins_dir", RenderValue(bundle_data.plugins_dir()));
563 data->SetString("product_type", bundle_data.product_type()); 563 data->SetString("product_type", bundle_data.product_type());
564 564
565 auto deps = base::WrapUnique(new base::ListValue()); 565 auto deps = base::MakeUnique<base::ListValue>();
566 for (const auto* dep : bundle_data.bundle_deps()) 566 for (const auto* dep : bundle_data.bundle_deps())
567 deps->AppendString(dep->label().GetUserVisibleName(GetToolchainLabel())); 567 deps->AppendString(dep->label().GetUserVisibleName(GetToolchainLabel()));
568 568
569 data->Set("deps", std::move(deps)); 569 data->Set("deps", std::move(deps));
570 res->Set("bundle_data", std::move(data)); 570 res->Set("bundle_data", std::move(data));
571 } 571 }
572 572
573 void FillInOutputs(base::DictionaryValue* res) { 573 void FillInOutputs(base::DictionaryValue* res) {
574 if (target_->output_type() == Target::ACTION) { 574 if (target_->output_type() == Target::ACTION) {
575 auto list = base::WrapUnique(new base::ListValue()); 575 auto list = base::MakeUnique<base::ListValue>();
576 for (const auto& elem : target_->action_values().outputs().list()) 576 for (const auto& elem : target_->action_values().outputs().list())
577 list->AppendString(elem.AsString()); 577 list->AppendString(elem.AsString());
578 578
579 res->Set(variables::kOutputs, std::move(list)); 579 res->Set(variables::kOutputs, std::move(list));
580 } else if (target_->output_type() == Target::CREATE_BUNDLE) { 580 } else if (target_->output_type() == Target::CREATE_BUNDLE) {
581 std::vector<SourceFile> output_files; 581 std::vector<SourceFile> output_files;
582 target_->bundle_data().GetOutputsAsSourceFiles(target_->settings(), 582 target_->bundle_data().GetOutputsAsSourceFiles(target_->settings(),
583 &output_files); 583 &output_files);
584 res->Set(variables::kOutputs, RenderValue(output_files)); 584 res->Set(variables::kOutputs, RenderValue(output_files));
585 } else if (target_->output_type() == Target::ACTION_FOREACH || 585 } else if (target_->output_type() == Target::ACTION_FOREACH ||
586 target_->output_type() == Target::COPY_FILES) { 586 target_->output_type() == Target::COPY_FILES) {
587 const SubstitutionList& outputs = target_->action_values().outputs(); 587 const SubstitutionList& outputs = target_->action_values().outputs();
588 if (!outputs.required_types().empty()) { 588 if (!outputs.required_types().empty()) {
589 auto patterns = base::WrapUnique(new base::ListValue()); 589 auto patterns = base::MakeUnique<base::ListValue>();
590 for (const auto& elem : outputs.list()) 590 for (const auto& elem : outputs.list())
591 patterns->AppendString(elem.AsString()); 591 patterns->AppendString(elem.AsString());
592 592
593 res->Set("output_patterns", std::move(patterns)); 593 res->Set("output_patterns", std::move(patterns));
594 } 594 }
595 std::vector<SourceFile> output_files; 595 std::vector<SourceFile> output_files;
596 SubstitutionWriter::ApplyListToSources(target_->settings(), outputs, 596 SubstitutionWriter::ApplyListToSources(target_->settings(), outputs,
597 target_->sources(), &output_files); 597 target_->sources(), &output_files);
598 res->Set(variables::kOutputs, RenderValue(output_files)); 598 res->Set(variables::kOutputs, RenderValue(output_files));
599 } else { 599 } else {
(...skipping 12 matching lines...) Expand all
612 res->Set(variables::kOutputs, RenderValue(output_files_as_source_file)); 612 res->Set(variables::kOutputs, RenderValue(output_files_as_source_file));
613 } 613 }
614 } 614 }
615 615
616 // Writes a given config value type to the string, optionally with 616 // Writes a given config value type to the string, optionally with
617 // attribution. 617 // attribution.
618 // This should match RecursiveTargetConfigToStream in the order it traverses. 618 // This should match RecursiveTargetConfigToStream in the order it traverses.
619 template <class T> 619 template <class T>
620 ValuePtr RenderConfigValues(const std::vector<T>& (ConfigValues::*getter)() 620 ValuePtr RenderConfigValues(const std::vector<T>& (ConfigValues::*getter)()
621 const) { 621 const) {
622 auto res = base::WrapUnique(new base::ListValue()); 622 auto res = base::MakeUnique<base::ListValue>();
623 for (ConfigValuesIterator iter(target_); !iter.done(); iter.Next()) { 623 for (ConfigValuesIterator iter(target_); !iter.done(); iter.Next()) {
624 const std::vector<T>& vec = (iter.cur().*getter)(); 624 const std::vector<T>& vec = (iter.cur().*getter)();
625 625
626 if (vec.empty()) 626 if (vec.empty())
627 continue; 627 continue;
628 628
629 if (blame_) { 629 if (blame_) {
630 const Config* config = iter.GetCurrentConfig(); 630 const Config* config = iter.GetCurrentConfig();
631 if (config) { 631 if (config) {
632 // Source of this value is a config. 632 // Source of this value is a config.
(...skipping 13 matching lines...) Expand all
646 res->AppendString(from); 646 res->AppendString(from);
647 } 647 }
648 } 648 }
649 649
650 for (const T& val : vec) { 650 for (const T& val : vec) {
651 ValuePtr rendered = RenderValue(val); 651 ValuePtr rendered = RenderValue(val);
652 std::string str; 652 std::string str;
653 // Indent string values in blame mode 653 // Indent string values in blame mode
654 if (blame_ && rendered->GetAsString(&str)) { 654 if (blame_ && rendered->GetAsString(&str)) {
655 str = " " + str; 655 str = " " + str;
656 rendered = base::WrapUnique(new base::StringValue(str)); 656 rendered = base::MakeUnique<base::StringValue>(str);
657 } 657 }
658 res->Append(std::move(rendered)); 658 res->Append(std::move(rendered));
659 } 659 }
660 } 660 }
661 return res->empty() ? nullptr : std::move(res); 661 return res->empty() ? nullptr : std::move(res);
662 } 662 }
663 663
664 Label GetToolchainLabel() const override { 664 Label GetToolchainLabel() const override {
665 return target_->label().GetToolchainLabel(); 665 return target_->label().GetToolchainLabel();
666 } 666 }
(...skipping 18 matching lines...) Expand all
685 685
686 std::unique_ptr<base::DictionaryValue> DescBuilder::DescriptionForConfig( 686 std::unique_ptr<base::DictionaryValue> DescBuilder::DescriptionForConfig(
687 const Config* config, 687 const Config* config,
688 const std::string& what) { 688 const std::string& what) {
689 std::set<std::string> w; 689 std::set<std::string> w;
690 if (!what.empty()) 690 if (!what.empty())
691 w.insert(what); 691 w.insert(what);
692 ConfigDescBuilder b(config, w); 692 ConfigDescBuilder b(config, w);
693 return b.BuildDescription(); 693 return b.BuildDescription();
694 } 694 }
OLDNEW
« no previous file with comments | « tools/gn/command_desc.cc ('k') | tools/gn/functions_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698