diff --git a/src/gn/ninja_action_target_writer.cc b/src/gn/ninja_action_target_writer.cc
index f4f0867..644b845 100644
--- a/src/gn/ninja_action_target_writer.cc
+++ b/src/gn/ninja_action_target_writer.cc
@@ -36,11 +36,13 @@
   // serialize these.
   std::vector<const Target*> additional_hard_deps;
   std::vector<OutputFile> data_outs;
-  for (const auto& pair : target_->GetDeps(Target::DEPS_LINKED)) {
-    if (pair.ptr->IsDataOnly()) {
-      data_outs.push_back(pair.ptr->dependency_output_file());
+  const auto& target_deps = resolved().GetTargetDeps(target_);
+
+  for (const Target* dep : target_deps.linked_deps()) {
+    if (dep->IsDataOnly()) {
+      data_outs.push_back(dep->dependency_output_file());
     } else {
-      additional_hard_deps.push_back(pair.ptr);
+      additional_hard_deps.push_back(dep);
     }
   }
 
@@ -97,8 +99,8 @@
   // done before we run the action.
   // TODO(thakis): If the action has just a single output, make things depend
   // on that output directly without writing a stamp file.
-  for (const auto& dep : target_->data_deps())
-    data_outs.push_back(dep.ptr->dependency_output_file());
+  for (const Target* data_dep : target_deps.data_deps())
+    data_outs.push_back(data_dep->dependency_output_file());
   WriteStampForTarget(output_files, data_outs);
 }
 
diff --git a/src/gn/ninja_binary_target_writer.cc b/src/gn/ninja_binary_target_writer.cc
index e14954d..b9ecc21 100644
--- a/src/gn/ninja_binary_target_writer.cc
+++ b/src/gn/ninja_binary_target_writer.cc
@@ -129,9 +129,11 @@
 NinjaBinaryTargetWriter::GetClassifiedDeps() const {
   ClassifiedDeps classified_deps;
 
+  const auto& target_deps = resolved().GetTargetDeps(target_);
+
   // Normal public/private deps.
-  for (const auto& pair : target_->GetDeps(Target::DEPS_LINKED)) {
-    ClassifyDependency(pair.ptr, &classified_deps);
+  for (const Target* dep : target_deps.linked_deps()) {
+    ClassifyDependency(dep, &classified_deps);
   }
 
   // Inherited libraries.
@@ -140,8 +142,8 @@
   }
 
   // Data deps.
-  for (const auto& data_dep_pair : target_->data_deps())
-    classified_deps.non_linkable_deps.push_back(data_dep_pair.ptr);
+  for (const Target* data_dep : target_deps.data_deps())
+    classified_deps.non_linkable_deps.push_back(data_dep);
 
   return classified_deps;
 }
diff --git a/src/gn/ninja_bundle_data_target_writer.cc b/src/gn/ninja_bundle_data_target_writer.cc
index 0e3bcb0..da3bb4e 100644
--- a/src/gn/ninja_bundle_data_target_writer.cc
+++ b/src/gn/ninja_bundle_data_target_writer.cc
@@ -26,8 +26,8 @@
   output_files.insert(output_files.end(), input_deps.begin(), input_deps.end());
 
   std::vector<OutputFile> order_only_deps;
-  for (const auto& pair : target_->data_deps())
-    order_only_deps.push_back(pair.ptr->dependency_output_file());
+  for (const Target* data_dep : resolved().GetDataDeps(target_))
+    order_only_deps.push_back(data_dep->dependency_output_file());
 
   WriteStampForTarget(output_files, order_only_deps);
 }
diff --git a/src/gn/ninja_c_binary_target_writer.cc b/src/gn/ninja_c_binary_target_writer.cc
index 1ef0475..c0f73b8 100644
--- a/src/gn/ninja_c_binary_target_writer.cc
+++ b/src/gn/ninja_c_binary_target_writer.cc
@@ -83,7 +83,9 @@
   return nullptr;
 }
 
-std::vector<ModuleDep> GetModuleDepsInformation(const Target* target) {
+std::vector<ModuleDep> GetModuleDepsInformation(
+    const Target* target,
+    const ResolvedTargetData& resolved) {
   std::vector<ModuleDep> ret;
 
   auto add = [&ret](const Target* t, bool is_self) {
@@ -107,10 +109,10 @@
     add(target, true);
   }
 
-  for (const auto& pair: target->GetDeps(Target::DEPS_LINKED)) {
+  for (const Target* dep : resolved.GetLinkedDeps(target)) {
     // Having a .modulemap source means that the dependency is modularized.
-    if (pair.ptr->source_types_used().Get(SourceFile::SOURCE_MODULEMAP)) {
-      add(pair.ptr, false);
+    if (dep->source_types_used().Get(SourceFile::SOURCE_MODULEMAP)) {
+      add(dep, false);
     }
   }
 
@@ -127,7 +129,8 @@
 NinjaCBinaryTargetWriter::~NinjaCBinaryTargetWriter() = default;
 
 void NinjaCBinaryTargetWriter::Run() {
-  std::vector<ModuleDep> module_dep_info = GetModuleDepsInformation(target_);
+  std::vector<ModuleDep> module_dep_info =
+      GetModuleDepsInformation(target_, resolved());
 
   WriteCompilerVars(module_dep_info);
 
diff --git a/src/gn/ninja_copy_target_writer.cc b/src/gn/ninja_copy_target_writer.cc
index 9299223..8a95cea 100644
--- a/src/gn/ninja_copy_target_writer.cc
+++ b/src/gn/ninja_copy_target_writer.cc
@@ -74,8 +74,8 @@
       std::vector<const Target*>(), num_stamp_uses);
 
   std::vector<OutputFile> data_outs;
-  for (const auto& dep : target_->data_deps())
-    data_outs.push_back(dep.ptr->dependency_output_file());
+  for (const Target* data_dep : resolved().GetDataDeps(target_))
+    data_outs.push_back(data_dep->dependency_output_file());
 
   // Note that we don't write implicit deps for copy steps. "copy" only
   // depends on the output files themselves, rather than having includes
diff --git a/src/gn/ninja_create_bundle_target_writer.cc b/src/gn/ninja_create_bundle_target_writer.cc
index d05f5f0..23936ab 100644
--- a/src/gn/ninja_create_bundle_target_writer.cc
+++ b/src/gn/ninja_create_bundle_target_writer.cc
@@ -89,8 +89,8 @@
   WriteCompileAssetsCatalogStep(order_only_deps, &output_files);
   WriteCodeSigningStep(code_signing_rule_name, order_only_deps, &output_files);
 
-  for (const auto& pair : target_->data_deps())
-    order_only_deps.push_back(pair.ptr->dependency_output_file());
+  for (const Target* data_dep : resolved().GetDataDeps(target_))
+    order_only_deps.push_back(data_dep->dependency_output_file());
   WriteStampForTarget(output_files, order_only_deps);
 
   // Write a phony target for the outer bundle directory. This allows other
diff --git a/src/gn/ninja_generated_file_target_writer.cc b/src/gn/ninja_generated_file_target_writer.cc
index 3e07090..1abdc05 100644
--- a/src/gn/ninja_generated_file_target_writer.cc
+++ b/src/gn/ninja_generated_file_target_writer.cc
@@ -31,17 +31,17 @@
   // done at gen time, and so ninja doesn't need to know about it.
   std::vector<OutputFile> output_files;
   std::vector<OutputFile> data_output_files;
-  for (const auto& pair : target_->GetDeps(Target::DEPS_LINKED)) {
-    if (pair.ptr->IsDataOnly()) {
-      data_output_files.push_back(pair.ptr->dependency_output_file());
+  const auto& target_deps = resolved().GetTargetDeps(target_);
+  for (const Target* dep : target_deps.linked_deps()) {
+    if (dep->IsDataOnly()) {
+      data_output_files.push_back(dep->dependency_output_file());
     } else {
-      output_files.push_back(pair.ptr->dependency_output_file());
+      output_files.push_back(dep->dependency_output_file());
     }
   }
 
-  const LabelTargetVector& data_deps = target_->data_deps();
-  for (const auto& pair : data_deps)
-    data_output_files.push_back(pair.ptr->dependency_output_file());
+  for (const Target* data_dep : target_deps.data_deps())
+    data_output_files.push_back(data_dep->dependency_output_file());
 
   WriteStampForTarget(output_files, data_output_files);
 }
diff --git a/src/gn/ninja_group_target_writer.cc b/src/gn/ninja_group_target_writer.cc
index beeb54a..58d6ce7 100644
--- a/src/gn/ninja_group_target_writer.cc
+++ b/src/gn/ninja_group_target_writer.cc
@@ -21,17 +21,18 @@
   // the deps and data_deps in the group.
   std::vector<OutputFile> output_files;
   std::vector<OutputFile> data_output_files;
-  for (const auto& pair : target_->GetDeps(Target::DEPS_LINKED)) {
-    if (pair.ptr->IsDataOnly()) {
-      data_output_files.push_back(pair.ptr->dependency_output_file());
+  const auto& target_deps = resolved().GetTargetDeps(target_);
+
+  for (const Target* dep : target_deps.linked_deps()) {
+    if (dep->IsDataOnly()) {
+      data_output_files.push_back(dep->dependency_output_file());
     } else {
-      output_files.push_back(pair.ptr->dependency_output_file());
+      output_files.push_back(dep->dependency_output_file());
     }
   }
 
-  const LabelTargetVector& data_deps = target_->data_deps();
-  for (const auto& pair : data_deps)
-    data_output_files.push_back(pair.ptr->dependency_output_file());
+  for (const Target* data_dep : target_deps.data_deps())
+    data_output_files.push_back(data_dep->dependency_output_file());
 
   WriteStampForTarget(output_files, data_output_files);
 }
