diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index 71c5780..b4ef46b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -44,10 +44,12 @@
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Sets;
+import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.actions.CommandLine;
 import com.google.devtools.build.lib.actions.ParamFileInfo;
 import com.google.devtools.build.lib.actions.ParameterFile;
+import com.google.devtools.build.lib.analysis.AnalysisEnvironment;
 import com.google.devtools.build.lib.analysis.FilesToRunProvider;
 import com.google.devtools.build.lib.analysis.PrerequisiteArtifacts;
 import com.google.devtools.build.lib.analysis.RuleContext;
@@ -55,6 +57,10 @@
 import com.google.devtools.build.lib.analysis.actions.CustomCommandLine.VectorArg;
 import com.google.devtools.build.lib.analysis.actions.ParameterFileWriteAction;
 import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
+import com.google.devtools.build.lib.analysis.test.InstrumentedFilesCollector;
+import com.google.devtools.build.lib.analysis.test.InstrumentedFilesCollector.InstrumentationSpec;
+import com.google.devtools.build.lib.analysis.test.InstrumentedFilesCollector.LocalMetadataCollector;
+import com.google.devtools.build.lib.analysis.test.InstrumentedFilesInfo;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
@@ -87,6 +93,7 @@
 import com.google.devtools.build.lib.rules.cpp.Link.LinkTargetType;
 import com.google.devtools.build.lib.rules.cpp.Link.LinkingMode;
 import com.google.devtools.build.lib.rules.objc.ObjcVariablesExtension.VariableCategory;
+import com.google.devtools.build.lib.util.FileTypeSet;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.errorprone.annotations.CanIgnoreReturnValue;
@@ -152,6 +159,17 @@
     return ruleContext.getExecutablePrerequisite("$xcrunwrapper");
   }
 
+  /**
+   * Files which can be instrumented along with the attributes in which they may occur and the
+   * attributes along which they are propagated from dependencies (via {@link
+   * InstrumentedFilesInfo}).
+   */
+  private static final InstrumentationSpec INSTRUMENTATION_SPEC =
+      new InstrumentationSpec(
+              FileTypeSet.of(ObjcRuleClasses.NON_CPP_SOURCES, ObjcRuleClasses.CPP_SOURCES, HEADERS))
+          .withSourceAttributes("srcs", "non_arc_srcs", "hdrs")
+          .withDependencyAttributes("deps", "data", "binary", "xctest_app");
+
   /** Iterable wrapper providing strong type safety for arguments to binary linking. */
   static final class ExtraLinkArgs extends IterableWrapper<String> {
     ExtraLinkArgs(String... args) {
@@ -356,6 +374,34 @@
   }
 
   /**
+   * Returns a provider that collects this target's instrumented sources as well as those of its
+   * dependencies.
+   *
+   * @param ruleContext the rule context of the target
+   * @param toolchain the toolchain used by the target
+   * @param buildConfiguration the build configuration of the target
+   * @param objectFiles the object files generated by the target
+   * @return an instrumented files provider
+   */
+  protected static InstrumentedFilesInfo getInstrumentedFilesProvider(
+      RuleContext ruleContext,
+      CcToolchainProvider toolchain,
+      BuildConfigurationValue buildConfiguration,
+      ImmutableList<Artifact> objectFiles)
+      throws RuleErrorException {
+    CppConfiguration cppConfiguration = buildConfiguration.getFragment(CppConfiguration.class);
+    return InstrumentedFilesCollector.collect(
+        ruleContext,
+        INSTRUMENTATION_SPEC,
+        OBJC_METADATA_COLLECTOR,
+        objectFiles,
+        CppHelper.getGcovFilesIfNeeded(ruleContext, toolchain),
+        CppHelper.getCoverageEnvironmentIfNeeded(ruleContext, cppConfiguration, toolchain),
+        /* withBaselineCoverage= */ true,
+        /* reportedToActualSources= */ NestedSetBuilder.create(Order.STABLE_ORDER));
+  }
+
+  /**
    * Validates compilation-related attributes on this rule.
    *
    * @return this compilation support
@@ -1031,6 +1077,27 @@
             .build(ruleContext));
   }
 
+  /**
+   * Collector that, given a list of output artifacts, finds and registers coverage notes metadata
+   * for any compilation action.
+   */
+  private static final LocalMetadataCollector OBJC_METADATA_COLLECTOR =
+      new LocalMetadataCollector() {
+        @Override
+        public void collectMetadataArtifacts(
+            Iterable<Artifact> artifacts,
+            AnalysisEnvironment analysisEnvironment,
+            NestedSetBuilder<Artifact> metadataFilesBuilder) {
+          for (Artifact artifact : artifacts) {
+            ActionAnalysisMetadata action = analysisEnvironment.getLocalGeneratingAction(artifact);
+            if (action.getMnemonic().equals("ObjcCompile")
+                || action.getMnemonic().equals("ObjcCompileHeader")) {
+              addOutputs(metadataFilesBuilder, action, ObjcRuleClasses.COVERAGE_NOTES);
+            }
+          }
+        }
+      };
+
   public static Optional<Artifact> getCustomModuleMap(RuleContext ruleContext) {
     if (ruleContext.attributes().has("module_map", BuildType.LABEL)) {
       return Optional.fromNullable(ruleContext.getPrerequisiteArtifact("module_map"));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcStarlarkInternal.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcStarlarkInternal.java
index 1683b47..92d73c8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcStarlarkInternal.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcStarlarkInternal.java
@@ -24,11 +24,15 @@
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.analysis.LocationExpander;
 import com.google.devtools.build.lib.analysis.TemplateVariableInfo;
+import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue;
 import com.google.devtools.build.lib.analysis.starlark.StarlarkRuleContext;
+import com.google.devtools.build.lib.analysis.test.InstrumentedFilesInfo;
 import com.google.devtools.build.lib.packages.NativeInfo;
+import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
 import com.google.devtools.build.lib.packages.Type;
 import com.google.devtools.build.lib.rules.cpp.CcCompilationContext;
 import com.google.devtools.build.lib.rules.cpp.CcLinkingContext;
+import com.google.devtools.build.lib.rules.cpp.CcToolchainProvider;
 import com.google.devtools.build.lib.shell.ShellUtils;
 import com.google.devtools.build.lib.shell.ShellUtils.TokenizationException;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -222,6 +226,32 @@
   }
 
   @StarlarkMethod(
+      name = "instrumented_files_info",
+      documented = false,
+      parameters = {
+        @Param(name = "ctx", positional = false, named = true),
+        @Param(name = "cc_toolchain", positional = false, named = true),
+        @Param(name = "config", positional = false, named = true),
+        @Param(name = "object_files", positional = false, defaultValue = "[]", named = true),
+      })
+  public InstrumentedFilesInfo createInstrumentedFilesInfo(
+      StarlarkRuleContext starlarkRuleContext,
+      CcToolchainProvider ccToolchain,
+      BuildConfigurationValue config,
+      Sequence<?> objectFiles)
+      throws EvalException {
+    try {
+      return CompilationSupport.getInstrumentedFilesProvider(
+          starlarkRuleContext.getRuleContext(),
+          ccToolchain,
+          config,
+          Sequence.cast(objectFiles, Artifact.class, "object_files").getImmutableList());
+    } catch (RuleErrorException e) {
+      throw new EvalException(e);
+    }
+  }
+
+  @StarlarkMethod(
       name = "create_compilation_context",
       documented = false,
       parameters = {
diff --git a/src/main/starlark/builtins_bzl/common/objc/attrs.bzl b/src/main/starlark/builtins_bzl/common/objc/attrs.bzl
index 3873291..6349049 100644
--- a/src/main/starlark/builtins_bzl/common/objc/attrs.bzl
+++ b/src/main/starlark/builtins_bzl/common/objc/attrs.bzl
@@ -15,7 +15,6 @@
 """Attributes common to Objc rules"""
 
 load("@_builtins//:common/objc/semantics.bzl", "semantics")
-load("@_builtins//:common/objc/objc_common.bzl", "extensions")
 
 CcInfo = _builtins.toplevel.CcInfo
 AppleDynamicFrameworkInfo = _builtins.toplevel.apple_common.AppleDynamicFramework
@@ -30,11 +29,28 @@
 
 _COMPILING_RULE = {
     "srcs": attr.label_list(
-        allow_files = extensions.NON_CPP_SOURCES +
-                      extensions.CPP_SOURCES +
-                      extensions.ASSEMBLY_SOURCES +
-                      extensions.OBJECT_FILE_SOURCES +
-                      extensions.HEADERS,
+        allow_files = [
+            # NON_CPP_SOURCES
+            ".m",
+            ".c",
+            # CPP_SOURCES
+            ".cc",
+            ".cpp",
+            ".mm",
+            ".cxx",
+            ".C",
+            # ASSEMBLY_SOURCES
+            ".s",
+            ".S",
+            ".asm",
+            # OBJECT_FILE_SOURCES
+            ".o",
+            # HEADERS
+            ".h",
+            ".inc",
+            ".hpp",
+            ".hh",
+        ],
         flags = ["DIRECT_COMPILE_TIME_INPUT"],
     ),
     "non_arc_srcs": attr.label_list(
diff --git a/src/main/starlark/builtins_bzl/common/objc/objc_common.bzl b/src/main/starlark/builtins_bzl/common/objc/objc_common.bzl
index 515b869..550d89c 100644
--- a/src/main/starlark/builtins_bzl/common/objc/objc_common.bzl
+++ b/src/main/starlark/builtins_bzl/common/objc/objc_common.bzl
@@ -12,26 +12,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-"""Common functionality for Objc rules."""
+"""Builds the Objective-C provider"""
 
 objc_internal = _builtins.internal.objc_internal
 CcInfo = _builtins.toplevel.CcInfo
 apple_common = _builtins.toplevel.apple_common
 
-CPP_SOURCES = [".cc", ".cpp", ".mm", ".cxx", ".C"]
-NON_CPP_SOURCES = [".m", ".c"]
-ASSEMBLY_SOURCES = [".s", ".S", ".asm"]
-OBJECT_FILE_SOURCES = [".o"]
-HEADERS = [".h", ".inc", ".hpp", ".hh"]
-
-extensions = struct(
-    CPP_SOURCES = CPP_SOURCES,
-    NON_CPP_SOURCES = NON_CPP_SOURCES,
-    ASSEMBLY_SOURCES = ASSEMBLY_SOURCES,
-    OBJECT_FILE_SOURCES = OBJECT_FILE_SOURCES,
-    HEADERS = HEADERS,
-)
-
 def _create_context_and_provider(
         ctx,
         compilation_attributes,
@@ -255,7 +241,7 @@
     )
 
 def _is_cpp_source(source_file):
-    return "." + source_file.extension in CPP_SOURCES
+    return source_file.extension in ["cc", "cpp", "mm", "cxx", "C"]
 
 def _add_linkopts(objc_provider_kwargs, linkopts):
     non_sdk_linkopts = []
diff --git a/src/main/starlark/builtins_bzl/common/objc/objc_library.bzl b/src/main/starlark/builtins_bzl/common/objc/objc_library.bzl
index 14384ad..fc62bdfc 100644
--- a/src/main/starlark/builtins_bzl/common/objc/objc_library.bzl
+++ b/src/main/starlark/builtins_bzl/common/objc/objc_library.bzl
@@ -16,7 +16,6 @@
 
 load("@_builtins//:common/objc/compilation_support.bzl", "compilation_support")
 load("@_builtins//:common/objc/attrs.bzl", "common_attrs")
-load("@_builtins//:common/objc/objc_common.bzl", "extensions")
 load("@_builtins//:common/objc/transitions.bzl", "apple_crosstool_transition")
 load("@_builtins//:common/cc/cc_helper.bzl", "cc_helper")
 
@@ -64,16 +63,6 @@
 
     objc_provider = common_variables.objc_provider
 
-    instrumented_files_info = coverage_common.instrumented_files_info(
-        ctx = ctx,
-        source_attributes = ["srcs", "non_arc_srcs", "hdrs"],
-        dependency_attributes = ["deps", "data", "binary", "xctest_app"],
-        extensions = extensions.NON_CPP_SOURCES + extensions.CPP_SOURCES + extensions.HEADERS,
-        coverage_environment = cc_helper.get_coverage_environment(ctx, ctx.fragments.cpp, cc_toolchain),
-        coverage_support_files = cc_toolchain.coverage_files() if ctx.coverage_instrumented() else depset([]),
-        metadata_files = compilation_outputs.gcno_files() + compilation_outputs.pic_gcno_files(),
-    )
-
     return [
         DefaultInfo(
             files = depset(files),
@@ -86,7 +75,12 @@
         objc_provider,
         j2objc_providers[0],
         j2objc_providers[1],
-        instrumented_files_info,
+        objc_internal.instrumented_files_info(
+            ctx = ctx,
+            cc_toolchain = cc_toolchain,
+            config = ctx.configuration,
+            object_files = compilation_outputs.objects,
+        ),
         OutputGroupInfo(**output_groups),
     ]
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
index 58cf3b3..43e275c 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcLibraryTest.java
@@ -2509,30 +2509,6 @@
     assertThat(instrumentedFilesInfo.getCoverageSupportFiles().toList()).isEmpty();
   }
 
-  @Test
-  public void testCoverageMetadataFiles() throws Exception {
-    scratch.file(
-        "a/BUILD",
-        "cc_toolchain_alias(name = 'toolchain')",
-        "objc_library(",
-        "    name = 'foo',",
-        "    srcs = ['foo.m'],",
-        ")",
-        "objc_library(",
-        "     name = 'bar',",
-        "     srcs = ['bar.m'],",
-        "     deps = [':foo'],",
-        ")");
-    useConfiguration("--collect_code_coverage", "--instrumentation_filter=//a[:/]");
-
-    InstrumentedFilesInfo instrumentedFilesInfo =
-        getConfiguredTarget("//a:bar").get(InstrumentedFilesInfo.STARLARK_CONSTRUCTOR);
-
-    assertThat(
-            Artifact.toRootRelativePaths(instrumentedFilesInfo.getInstrumentationMetadataFiles()))
-        .containsExactly("a/_objs/foo/arc/foo.gcno", "a/_objs/bar/arc/bar.gcno");
-  }
-
   private ImmutableList<String> getCcInfoUserLinkFlagsFromTarget(String target)
       throws LabelSyntaxException {
     return getConfiguredTarget(target)
