|  | // Copyright 2020 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. | 
|  |  | 
|  | #include "gn/swift_values_generator.h" | 
|  |  | 
|  | #include "gn/label.h" | 
|  | #include "gn/scope.h" | 
|  | #include "gn/settings.h" | 
|  | #include "gn/swift_values.h" | 
|  | #include "gn/swift_variables.h" | 
|  | #include "gn/target.h" | 
|  | #include "gn/value_extractors.h" | 
|  |  | 
|  | SwiftValuesGenerator::SwiftValuesGenerator(Target* target, | 
|  | Scope* scope, | 
|  | Err* err) | 
|  | : target_(target), scope_(scope), err_(err) {} | 
|  |  | 
|  | SwiftValuesGenerator::~SwiftValuesGenerator() = default; | 
|  |  | 
|  | void SwiftValuesGenerator::Run() { | 
|  | if (!FillBridgeHeader()) | 
|  | return; | 
|  |  | 
|  | if (!FillModuleName()) | 
|  | return; | 
|  | } | 
|  |  | 
|  | bool SwiftValuesGenerator::FillBridgeHeader() { | 
|  | const Value* value = scope_->GetValue(variables::kSwiftBridgeHeader, true); | 
|  | if (!value) | 
|  | return true; | 
|  |  | 
|  | if (!value->VerifyTypeIs(Value::STRING, err_)) | 
|  | return false; | 
|  |  | 
|  | SourceFile dest; | 
|  | if (!ExtractRelativeFile(scope_->settings()->build_settings(), *value, | 
|  | scope_->GetSourceDir(), &dest, err_)) | 
|  | return false; | 
|  |  | 
|  | target_->swift_values().bridge_header() = std::move(dest); | 
|  | return true; | 
|  | } | 
|  |  | 
|  | bool SwiftValuesGenerator::FillModuleName() { | 
|  | const Value* value = scope_->GetValue(variables::kSwiftModuleName, true); | 
|  | if (!value) { | 
|  | // The target name will be used. | 
|  | target_->swift_values().module_name() = target_->label().name(); | 
|  | return true; | 
|  | } | 
|  |  | 
|  | if (!value->VerifyTypeIs(Value::STRING, err_)) | 
|  | return false; | 
|  |  | 
|  | target_->swift_values().module_name() = std::move(value->string_value()); | 
|  | return true; | 
|  | } |