Index: tools/gn/xcode_object.cc |
diff --git a/tools/gn/xcode_object.cc b/tools/gn/xcode_object.cc |
index dc5bfb86a7a942b60bf0956dc6df6be0d024ef87..039cb5210d63cc0e0168634104d869652aea36ab 100644 |
--- a/tools/gn/xcode_object.cc |
+++ b/tools/gn/xcode_object.cc |
@@ -404,7 +404,7 @@ PBXObjectClass PBXFileReference::Class() const { |
} |
std::string PBXFileReference::Name() const { |
- return path_; |
+ return name_; |
} |
void PBXFileReference::Print(std::ostream& out, unsigned indent) const { |
@@ -417,16 +417,17 @@ void PBXFileReference::Print(std::ostream& out, unsigned indent) const { |
PrintProperty(out, rules, "explicitFileType", type_); |
PrintProperty(out, rules, "includeInIndex", 0u); |
} else { |
- base::StringPiece ext = FindExtension(&path_); |
+ base::StringPiece ext = FindExtension(&name_); |
if (HasExplicitFileType(ext)) |
PrintProperty(out, rules, "explicitFileType", GetSourceType(ext)); |
else |
PrintProperty(out, rules, "lastKnownFileType", GetSourceType(ext)); |
} |
- if (name_ != path_ && !name_.empty()) |
+ if (!name_.empty()) |
PrintProperty(out, rules, "name", name_); |
+ DCHECK(!path_.empty()); |
PrintProperty(out, rules, "path", path_); |
PrintProperty(out, rules, "sourceTree", |
type_.empty() ? "<group>" : "BUILT_PRODUCTS_DIR"); |
@@ -471,36 +472,39 @@ PBXObject* PBXGroup::AddChild(std::unique_ptr<PBXObject> child) { |
return children_.back().get(); |
} |
-PBXFileReference* PBXGroup::AddSourceFile(const std::string& source_path) { |
+PBXFileReference* PBXGroup::AddSourceFile(const std::string& navigator_path, |
+ const std::string& source_path) { |
+ DCHECK(!navigator_path.empty()); |
DCHECK(!source_path.empty()); |
- std::string::size_type sep = source_path.find("/"); |
+ std::string::size_type sep = navigator_path.find("/"); |
if (sep == std::string::npos) { |
children_.push_back(base::MakeUnique<PBXFileReference>( |
- std::string(), source_path, std::string())); |
+ navigator_path, source_path, std::string())); |
return static_cast<PBXFileReference*>(children_.back().get()); |
} |
PBXGroup* group = nullptr; |
- base::StringPiece component(source_path.data(), sep); |
+ base::StringPiece component(navigator_path.data(), sep); |
for (const auto& child : children_) { |
if (child->Class() != PBXGroupClass) |
continue; |
PBXGroup* child_as_group = static_cast<PBXGroup*>(child.get()); |
- if (child_as_group->path_ == component) { |
+ if (child_as_group->name_ == component) { |
group = child_as_group; |
break; |
} |
} |
if (!group) { |
- children_.push_back(base::WrapUnique(new PBXGroup(component.as_string()))); |
+ children_.push_back(base::WrapUnique( |
+ new PBXGroup(component.as_string(), component.as_string()))); |
group = static_cast<PBXGroup*>(children_.back().get()); |
} |
DCHECK(group); |
- DCHECK(group->path_ == component); |
- return group->AddSourceFile(source_path.substr(sep + 1)); |
+ DCHECK(group->name_ == component); |
+ return group->AddSourceFile(navigator_path.substr(sep + 1), source_path); |
} |
PBXObjectClass PBXGroup::Class() const { |
@@ -530,7 +534,7 @@ void PBXGroup::Print(std::ostream& out, unsigned indent) const { |
PrintProperty(out, rules, "children", children_); |
if (!name_.empty()) |
PrintProperty(out, rules, "name", name_); |
- if (!path_.empty()) |
+ if (is_source_ && !path_.empty()) |
PrintProperty(out, rules, "path", path_); |
PrintProperty(out, rules, "sourceTree", "<group>"); |
out << indent_str << "};\n"; |
@@ -598,6 +602,7 @@ PBXProject::PBXProject(const std::string& name, |
main_group_.reset(new PBXGroup); |
sources_ = static_cast<PBXGroup*>( |
main_group_->AddChild(base::MakeUnique<PBXGroup>(source_path, "Source"))); |
+ sources_->set_is_source(true); |
products_ = static_cast<PBXGroup*>(main_group_->AddChild( |
base::MakeUnique<PBXGroup>(std::string(), "Product"))); |
main_group_->AddChild(base::MakeUnique<PBXGroup>(std::string(), "Build")); |
@@ -607,8 +612,10 @@ PBXProject::PBXProject(const std::string& name, |
PBXProject::~PBXProject() {} |
-void PBXProject::AddSourceFile(const std::string& source_path) { |
- PBXFileReference* file_reference = sources_->AddSourceFile(source_path); |
+void PBXProject::AddSourceFile(const std::string& navigator_path, |
+ const std::string& source_path) { |
+ PBXFileReference* file_reference = |
+ sources_->AddSourceFile(navigator_path, source_path); |
base::StringPiece ext = FindExtension(&source_path); |
if (!IsSourceFileForIndexing(ext)) |
return; |