diff --git a/rs_bindings_from_cc/ir.rs b/rs_bindings_from_cc/ir.rs
index 21c41e5..9941436 100644
--- a/rs_bindings_from_cc/ir.rs
+++ b/rs_bindings_from_cc/ir.rs
@@ -608,9 +608,24 @@
             Item::Func(func) => func.enclosing_namespace_id,
             Item::Namespace(namespace) => namespace.enclosing_namespace_id,
             Item::TypeAlias(type_alias) => type_alias.enclosing_namespace_id,
-            Item::Comment(_) => None,
-            Item::UnsupportedItem(_) => None,
-            Item::UseMod(_) => None,
+            Item::Comment(..) => None,
+            Item::UnsupportedItem(..) => None,
+            Item::UseMod(..) => None,
+        }
+    }
+
+    /// Returns the target that this should generate source code in.
+    pub fn owning_target(&self) -> Option<&BazelLabel> {
+        match self {
+            Item::Func(..) => None,
+            Item::IncompleteRecord(record) => Some(&record.owning_target),
+            Item::Record(record) => Some(&record.owning_target),
+            Item::Enum(e) => Some(&e.owning_target),
+            Item::TypeAlias(type_alias) => Some(&type_alias.owning_target),
+            Item::UnsupportedItem(..) => None,
+            Item::Comment(..) => None,
+            Item::Namespace(..) => None,
+            Item::UseMod(..) => None,
         }
     }
 }
diff --git a/rs_bindings_from_cc/src_code_gen.rs b/rs_bindings_from_cc/src_code_gen.rs
index 483c4bb..f27a0f2 100644
--- a/rs_bindings_from_cc/src_code_gen.rs
+++ b/rs_bindings_from_cc/src_code_gen.rs
@@ -2680,6 +2680,11 @@
     errors: &mut dyn ErrorReporting,
 ) -> Result<GeneratedItem> {
     let ir = db.ir();
+    if let Some(owning_target) = item.owning_target() {
+        if !ir.is_current_target(owning_target) && !ir.is_stdlib_target(owning_target) {
+            return Ok(GeneratedItem::default());
+        }
+    }
     let overloaded_funcs = db.overloaded_funcs();
     let generated_item = match item {
         Item::Func(func) => match db.generate_func(func.clone()) {
@@ -2703,39 +2708,11 @@
                 }
             }
         },
-        Item::IncompleteRecord(incomplete_record) => {
-            if !ir.is_current_target(&incomplete_record.owning_target)
-                && !ir.is_stdlib_target(&incomplete_record.owning_target)
-            {
-                GeneratedItem::default()
-            } else {
-                generate_incomplete_record(incomplete_record)?
-            }
-        }
-        Item::Record(record) => {
-            if !ir.is_current_target(&record.owning_target)
-                && !ir.is_stdlib_target(&record.owning_target)
-            {
-                GeneratedItem::default()
-            } else {
-                generate_record(db, record, errors)?
-            }
-        }
-        Item::Enum(enum_) => {
-            if !ir.is_current_target(&enum_.owning_target)
-                && !ir.is_stdlib_target(&enum_.owning_target)
-            {
-                GeneratedItem::default()
-            } else {
-                generate_enum(db, enum_)?
-            }
-        }
+        Item::IncompleteRecord(incomplete_record) => generate_incomplete_record(incomplete_record)?,
+        Item::Record(record) => generate_record(db, record, errors)?,
+        Item::Enum(enum_) => generate_enum(db, enum_)?,
         Item::TypeAlias(type_alias) => {
-            if !ir.is_current_target(&type_alias.owning_target)
-                && !ir.is_stdlib_target(&type_alias.owning_target)
-            {
-                GeneratedItem::default()
-            } else if type_alias.enclosing_record_id.is_some() {
+            if type_alias.enclosing_record_id.is_some() {
                 // TODO(b/200067824): support nested type aliases.
                 generate_unsupported(&make_unsupported_nested_type_alias(type_alias)?, errors)?
             } else {
