diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java
index 6c9cb87..98a4370 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCcLinkParamsProvider.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.rules.android;
 
+import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
@@ -24,7 +25,7 @@
 /** A target that provides C++ libraries to be linked into Android targets. */
 @Immutable
 public final class AndroidCcLinkParamsProvider extends NativeInfo
-    implements AndroidCcLinkParamsProviderApi<CcInfo> {
+    implements AndroidCcLinkParamsProviderApi<Artifact, CcInfo> {
 
   public static final Provider PROVIDER = new Provider();
 
@@ -42,13 +43,14 @@
 
   /** Provider class for {@link AndroidCcLinkParamsProvider} objects. */
   public static class Provider extends BuiltinProvider<AndroidCcLinkParamsProvider>
-      implements AndroidCcLinkParamsProviderApi.Provider<CcInfo> {
+      implements AndroidCcLinkParamsProviderApi.Provider<Artifact, CcInfo> {
     private Provider() {
       super(NAME, AndroidCcLinkParamsProvider.class);
     }
 
     @Override
-    public AndroidCcLinkParamsProviderApi<CcInfo> createInfo(CcInfo ccInfo) throws EvalException {
+    public AndroidCcLinkParamsProviderApi<Artifact, CcInfo> createInfo(CcInfo ccInfo)
+        throws EvalException {
       return new AndroidCcLinkParamsProvider(ccInfo);
     }
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
index 2cca679..628a6f2 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationContext.java
@@ -40,6 +40,7 @@
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcCompilationContextApi;
 import com.google.devtools.build.lib.syntax.Depset;
 import com.google.devtools.build.lib.syntax.SkylarkType;
+import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.devtools.build.skyframe.SkyFunction.Environment;
@@ -61,7 +62,7 @@
  */
 @Immutable
 @AutoCodec
-public final class CcCompilationContext implements CcCompilationContextApi {
+public final class CcCompilationContext implements CcCompilationContextApi<Artifact> {
   /** An empty {@code CcCompilationContext}. */
   public static final CcCompilationContext EMPTY =
       builder(/* actionConstructionContext= */ null, /* configuration= */ null, /* label= */ null)
@@ -155,6 +156,16 @@
   }
 
   @Override
+  public StarlarkList<Artifact> getSkylarkDirectModularHeaders() {
+    return StarlarkList.immutableCopyOf(getDirectHdrs());
+  }
+
+  @Override
+  public StarlarkList<Artifact> getSkylarkDirectTextualHeaders() {
+    return StarlarkList.immutableCopyOf(getTextualHdrs());
+  }
+
+  @Override
   public Depset getSkylarkSystemIncludeDirs() {
     return Depset.of(
         SkylarkType.STRING,
@@ -280,10 +291,15 @@
   }
 
   /** Returns headers given as textual_hdrs in this target. */
-  public Iterable<Artifact> getTextualHdrs() {
+  public ImmutableList<Artifact> getTextualHdrs() {
     return headerInfo.textualHeaders;
   }
 
+  /** Returns headers given as textual_hdrs in this target. */
+  public ImmutableList<Artifact> getDirectHdrs() {
+    return headerInfo.modularHeaders;
+  }
+
   public ImmutableList<HeaderInfo> getTransitiveHeaderInfos() {
     return transitiveHeaderInfos.toList();
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
index c135a77..a7c7d1b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationHelper.java
@@ -198,7 +198,7 @@
   // TODO(plf): Rename so that it's not confused with CcCompilationContext and also consider
   // merging
   // this class with {@code CcCompilationOutputs}.
-  public static final class CompilationInfo implements CompilationInfoApi {
+  public static final class CompilationInfo implements CompilationInfoApi<Artifact> {
     private final CcCompilationContext ccCompilationContext;
     private final CcCompilationOutputs compilationOutputs;
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java
index e97d95a..0e2f0f5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcInfo.java
@@ -17,6 +17,7 @@
 import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
@@ -28,7 +29,7 @@
 
 /** Provider for C++ compilation and linking information. */
 @Immutable
-public final class CcInfo extends NativeInfo implements CcInfoApi {
+public final class CcInfo extends NativeInfo implements CcInfoApi<Artifact> {
   public static final Provider PROVIDER = new Provider();
   public static final CcInfo EMPTY = builder().build();
 
@@ -148,14 +149,15 @@
   }
 
   /** Provider class for {@link CcInfo} objects. */
-  public static class Provider extends BuiltinProvider<CcInfo> implements CcInfoApi.Provider {
+  public static class Provider extends BuiltinProvider<CcInfo>
+      implements CcInfoApi.Provider<Artifact> {
     private Provider() {
       super(CcInfoApi.NAME, CcInfo.class);
     }
 
     @Override
-    public CcInfoApi createInfo(Object skylarkCcCompilationContext, Object skylarkCcLinkingInfo)
-        throws EvalException {
+    public CcInfoApi<Artifact> createInfo(
+        Object skylarkCcCompilationContext, Object skylarkCcLinkingInfo) throws EvalException {
       CcCompilationContext ccCompilationContext =
           nullIfNone(skylarkCcCompilationContext, CcCompilationContext.class);
       // TODO(b/118663806): Eventually only CcLinkingContext will be allowed, this is for
diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java
index 4b563d7..9922402 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/GoogleLegacyStubs.java
@@ -56,9 +56,9 @@
           ConstraintValueInfoApi,
           SkylarkRuleContextApi<ConstraintValueInfoApi>,
           CcToolchainProviderApi<FeatureConfigurationApi>,
-          CompilationInfoApi,
+          CompilationInfoApi<FileApi>,
           FileApi,
-          CcCompilationContextApi,
+          CcCompilationContextApi<FileApi>,
           WrapCcIncludeProviderApi> {
 
     @Override
@@ -76,7 +76,7 @@
     }
 
     @Override
-    public CompilationInfoApi skylarkCreateCompileActions(
+    public CompilationInfoApi<FileApi> skylarkCreateCompileActions(
         SkylarkRuleContextApi<ConstraintValueInfoApi> skylarkRuleContext,
         FeatureConfigurationApi featureConfiguration,
         CcToolchainProviderApi<FeatureConfigurationApi> ccToolchain,
@@ -107,7 +107,7 @@
         SkylarkRuleContextApi<ConstraintValueInfoApi> skylarkRuleContext,
         CcToolchainProviderApi<FeatureConfigurationApi> ccToolchain,
         FeatureConfigurationApi featureConfiguration,
-        CcCompilationContextApi wrapperCcCompilationContext,
+        CcCompilationContextApi<FileApi> wrapperCcCompilationContext,
         Depset swigIncludes,
         FileApi swigSource,
         Sequence<?> subParameters, // <String>
@@ -131,11 +131,11 @@
           FileApi,
           ConstraintValueInfoApi,
           SkylarkRuleContextApi<ConstraintValueInfoApi>,
-          CcInfoApi,
+          CcInfoApi<FileApi>,
           FeatureConfigurationApi,
           CcToolchainProviderApi<FeatureConfigurationApi>,
-          CompilationInfoApi,
-          CcCompilationContextApi,
+          CompilationInfoApi<FileApi>,
+          CcCompilationContextApi<FileApi>,
           WrapCcIncludeProviderApi> {
 
     @Override
@@ -157,8 +157,9 @@
     }
 
     @Override
-    public PyWrapCcInfoApi getPyWrapCcInfo(
-        SkylarkRuleContextApi<ConstraintValueInfoApi> skylarkRuleContext, CcInfoApi ccInfo) {
+    public PyWrapCcInfoApi<FileApi> getPyWrapCcInfo(
+        SkylarkRuleContextApi<ConstraintValueInfoApi> skylarkRuleContext,
+        CcInfoApi<FileApi> ccInfo) {
       return null;
     }
   }
@@ -172,15 +173,15 @@
           FileApi,
           ConstraintValueInfoApi,
           SkylarkRuleContextApi<ConstraintValueInfoApi>,
-          CcInfoApi,
+          CcInfoApi<FileApi>,
           FeatureConfigurationApi,
           CcToolchainProviderApi<FeatureConfigurationApi>,
           CcLinkingContextApi<FileApi>,
           GoConfigurationApi,
           GoContextInfoApi,
           TransitiveInfoCollectionApi,
-          CompilationInfoApi,
-          CcCompilationContextApi,
+          CompilationInfoApi<FileApi>,
+          CcCompilationContextApi<FileApi>,
           WrapCcIncludeProviderApi> {
 
     @Override
@@ -201,13 +202,14 @@
         FileApi pkg,
         FileApi gopkg,
         Object skylarkWrapContext,
-        CcInfoApi ccInfo) {
+        CcInfoApi<FileApi> ccInfo) {
       return null;
     }
 
     @Override
-    public GoWrapCcInfoApi getGoWrapCcInfo(
-        SkylarkRuleContextApi<ConstraintValueInfoApi> skylarkRuleContext, CcInfoApi ccInfo) {
+    public GoWrapCcInfoApi<FileApi> getGoWrapCcInfo(
+        SkylarkRuleContextApi<ConstraintValueInfoApi> skylarkRuleContext,
+        CcInfoApi<FileApi> ccInfo) {
       return null;
     }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
index 245540bd..89d5c05 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCcLinkParamsProvider.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.rules.java;
 
+import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.Info;
@@ -23,7 +24,8 @@
 
 /** A target that provides C++ libraries to be linked into Java targets. */
 @Immutable
-public final class JavaCcLinkParamsProvider implements Info, JavaCcLinkParamsProviderApi<CcInfo> {
+public final class JavaCcLinkParamsProvider
+    implements Info, JavaCcLinkParamsProviderApi<Artifact, CcInfo> {
   public static final String PROVIDER_NAME = "JavaCcLinkParamsInfo";
   public static final Provider PROVIDER = new Provider();
 
@@ -45,13 +47,14 @@
 
   /** Provider class for {@link JavaCcLinkParamsProvider} objects. */
   public static class Provider extends BuiltinProvider<JavaCcLinkParamsProvider>
-      implements JavaCcLinkParamsProviderApi.Provider<CcInfo> {
+      implements JavaCcLinkParamsProviderApi.Provider<Artifact, CcInfo> {
     private Provider() {
       super(PROVIDER_NAME, JavaCcLinkParamsProvider.class);
     }
 
     @Override
-    public JavaCcLinkParamsProviderApi<CcInfo> createInfo(CcInfo ccInfo) throws EvalException {
+    public JavaCcLinkParamsProviderApi<Artifact, CcInfo> createInfo(CcInfo ccInfo)
+        throws EvalException {
       return new JavaCcLinkParamsProvider(ccInfo);
     }
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/python/PyCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/python/PyCcLinkParamsProvider.java
index 7badc9b..df1c9bc 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/python/PyCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/python/PyCcLinkParamsProvider.java
@@ -13,6 +13,7 @@
 // limitations under the License.
 package com.google.devtools.build.lib.rules.python;
 
+import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
 import com.google.devtools.build.lib.packages.BuiltinProvider;
 import com.google.devtools.build.lib.packages.NativeInfo;
@@ -23,7 +24,8 @@
 /** A target that provides C++ libraries to be linked into Python targets. */
 @Immutable
 @AutoCodec
-public final class PyCcLinkParamsProvider extends NativeInfo implements PyCcLinkParamsProviderApi {
+public final class PyCcLinkParamsProvider extends NativeInfo
+    implements PyCcLinkParamsProviderApi<Artifact> {
   public static final Provider PROVIDER = new Provider();
 
   private final CcInfo ccInfo;
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidCcLinkParamsProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidCcLinkParamsProviderApi.java
index 24c91be..07020cc 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidCcLinkParamsProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidCcLinkParamsProviderApi.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.skylarkbuildapi.android;
 
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.skylarkbuildapi.core.StructApi;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcInfoApi;
@@ -33,13 +34,15 @@
             + "Information about the c++ libraries to be linked into Android targets.",
     documented = false,
     category = SkylarkModuleCategory.PROVIDER)
-public interface AndroidCcLinkParamsProviderApi<T extends CcInfoApi> extends StructApi {
+public interface AndroidCcLinkParamsProviderApi<
+        FileT extends FileApi, CcInfoT extends CcInfoApi<FileT>>
+    extends StructApi {
   /** Name of this info object. */
   String NAME = "AndroidCcLinkParamsInfo";
 
   /** Returns the cc link params. */
   @SkylarkCallable(name = "link_params", structField = true, doc = "", documented = false)
-  T getLinkParams();
+  CcInfoT getLinkParams();
 
   /** The provider implementing this can construct the AndroidCcLinkParamsInfo provider. */
   @SkylarkModule(
@@ -48,7 +51,7 @@
           "Do not use this module. It is intended for migration purposes only. If you depend on "
               + "it, you will be broken when it is removed.",
       documented = false)
-  interface Provider<T extends CcInfoApi> extends ProviderApi {
+  interface Provider<FileT extends FileApi, CcInfoT extends CcInfoApi<FileT>> extends ProviderApi {
 
     @SkylarkCallable(
         name = NAME,
@@ -66,6 +69,7 @@
     @SkylarkConstructor(
         objectType = AndroidCcLinkParamsProviderApi.class,
         receiverNameForDoc = NAME)
-    AndroidCcLinkParamsProviderApi<T> createInfo(T store) throws EvalException;
+    public AndroidCcLinkParamsProviderApi<FileT, CcInfoT> createInfo(CcInfoT store)
+        throws EvalException;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/ObjcProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/ObjcProviderApi.java
index 1fbdcd2..205a399 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/ObjcProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/apple/ObjcProviderApi.java
@@ -277,5 +277,5 @@
           "Returns the embedded <code>CcCompilationContext</code> that contains the"
               + "provider's compilation information.",
       structField = true)
-  CcCompilationContextApi getCcCompilationContext();
+  CcCompilationContextApi<FileApiT> getCcCompilationContext();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java
index 30f697e..69ec207 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/BazelCcModuleApi.java
@@ -40,7 +40,7 @@
         SkylarkRuleContextT extends SkylarkRuleContextApi<ConstraintValueT>,
         CcToolchainProviderT extends CcToolchainProviderApi<FeatureConfigurationT>,
         FeatureConfigurationT extends FeatureConfigurationApi,
-        CompilationContextT extends CcCompilationContextApi,
+        CompilationContextT extends CcCompilationContextApi<FileT>,
         CompilationOutputsT extends CcCompilationOutputsApi<FileT>,
         LinkingOutputsT extends CcLinkingOutputsApi<FileT>,
         LinkerInputT extends LinkerInputApi<LibraryToLinkT, FileT>,
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcBootstrap.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcBootstrap.java
index 09c160b..69bf27b 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcBootstrap.java
@@ -32,7 +32,7 @@
           ? extends FileApi,
           ? extends CcToolchainProviderApi<? extends FeatureConfigurationApi>,
           ? extends FeatureConfigurationApi,
-          ? extends CcCompilationContextApi,
+          ? extends CcCompilationContextApi<? extends FileApi>,
           ? extends
               LinkerInputApi<? extends LibraryToLinkApi<? extends FileApi>, ? extends FileApi>,
           ? extends CcLinkingContextApi<? extends FileApi>,
@@ -44,7 +44,7 @@
           ? extends CcCompilationOutputsApi<? extends FileApi>>
       ccModule;
 
-  private final CcInfoApi.Provider ccInfoProvider;
+  private final CcInfoApi.Provider<? extends FileApi> ccInfoProvider;
   private final CcToolchainConfigInfoApi.Provider ccToolchainConfigInfoProvider;
   private final PyWrapCcHelperApi<?, ?, ?, ?, ?, ?, ?, ?, ?> pyWrapCcHelper;
   private final GoWrapCcHelperApi<?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?> goWrapCcHelper;
@@ -57,7 +57,7 @@
               ? extends FileApi,
               ? extends CcToolchainProviderApi<? extends FeatureConfigurationApi>,
               ? extends FeatureConfigurationApi,
-              ? extends CcCompilationContextApi,
+              ? extends CcCompilationContextApi<? extends FileApi>,
               ? extends
                   LinkerInputApi<? extends LibraryToLinkApi<? extends FileApi>, ? extends FileApi>,
               ? extends CcLinkingContextApi<? extends FileApi>,
@@ -68,7 +68,7 @@
               ? extends CcToolchainConfigInfoApi,
               ? extends CcCompilationOutputsApi<? extends FileApi>>
           ccModule,
-      CcInfoApi.Provider ccInfoProvider,
+      CcInfoApi.Provider<? extends FileApi> ccInfoProvider,
       CcToolchainConfigInfoApi.Provider ccToolchainConfigInfoProvider,
       PyWrapCcHelperApi<?, ?, ?, ?, ?, ?, ?, ?, ?> pyWrapCcHelper,
       GoWrapCcHelperApi<?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?> goWrapCcHelper,
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java
index 30f7038..4c17c28 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcCompilationContextApi.java
@@ -14,10 +14,12 @@
 
 package com.google.devtools.build.lib.skylarkbuildapi.cpp;
 
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
 import com.google.devtools.build.lib.syntax.Depset;
+import com.google.devtools.build.lib.syntax.StarlarkList;
 import com.google.devtools.build.lib.syntax.StarlarkValue;
 
 /**
@@ -29,7 +31,7 @@
     doc =
         "Immutable store of information needed for C++ compilation that is aggregated across "
             + "dependencies.")
-public interface CcCompilationContextApi extends StarlarkValue {
+public interface CcCompilationContextApi<FileT extends FileApi> extends StarlarkValue {
   @SkylarkCallable(
       name = "defines",
       doc =
@@ -85,4 +87,20 @@
               + " or absolute. Usually passed with -iquote.",
       structField = true)
   Depset getSkylarkQuoteIncludeDirs();
+
+  @SkylarkCallable(
+      name = "direct_headers",
+      doc =
+          "Returns the list of header files that are declared by the \"hdrs\" attribute of this"
+              + " target.",
+      structField = true)
+  StarlarkList<FileT> getSkylarkDirectModularHeaders();
+
+  @SkylarkCallable(
+      name = "direct_textual_headers",
+      doc =
+          "Returns the list of header files that are declared by the \"textual_hdrs\" attribute of"
+              + " this target.",
+      structField = true)
+  StarlarkList<FileT> getSkylarkDirectTextualHeaders();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcInfoApi.java
index c24fc1c..548dcd7 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcInfoApi.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.skylarkbuildapi.cpp;
 
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.skylarkbuildapi.core.StructApi;
 import com.google.devtools.build.lib.skylarkinterface.Param;
@@ -34,14 +35,14 @@
             + "is also a marking provider telling C++ rules that they can depend on the rule "
             + "with this provider. If it is not intended for the rule to be depended on by C++, "
             + "the rule should wrap the CcInfo in some other provider.")
-public interface CcInfoApi extends StructApi {
+public interface CcInfoApi<FileT extends FileApi> extends StructApi {
   String NAME = "CcInfo";
 
   @SkylarkCallable(
       name = "compilation_context",
       doc = "Returns the <code>CompilationContext</code>",
       structField = true)
-  CcCompilationContextApi getCcCompilationContext();
+  CcCompilationContextApi<FileT> getCcCompilationContext();
 
   @SkylarkCallable(
       name = "linking_context",
@@ -56,7 +57,7 @@
       // This object is documented via the CcInfo documentation and the docuemntation of its
       // callable function.
       documented = false)
-  interface Provider extends ProviderApi {
+  interface Provider<FileT extends FileApi> extends ProviderApi {
 
     @SkylarkCallable(
         name = NAME,
@@ -87,6 +88,7 @@
         },
         selfCall = true)
     @SkylarkConstructor(objectType = CcInfoApi.class, receiverNameForDoc = NAME)
-    CcInfoApi createInfo(Object ccCompilationContext, Object ccLinkingInfo) throws EvalException;
+    CcInfoApi<FileT> createInfo(Object ccCompilationContext, Object ccLinkingInfo)
+        throws EvalException;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
index b4d83cf..6d87106 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CcModuleApi.java
@@ -43,7 +43,7 @@
         FileT extends FileApi,
         CcToolchainProviderT extends CcToolchainProviderApi<?>,
         FeatureConfigurationT extends FeatureConfigurationApi,
-        CompilationContextT extends CcCompilationContextApi,
+        CompilationContextT extends CcCompilationContextApi<FileT>,
         LinkerInputT extends LinkerInputApi<LibraryToLinkT, FileT>,
         LinkingContextT extends CcLinkingContextApi<?>,
         LibraryToLinkT extends LibraryToLinkApi<FileT>,
@@ -714,7 +714,7 @@
             defaultValue = "[]",
             type = Sequence.class)
       })
-  CcInfoApi mergeCcInfos(Sequence<?> ccInfos) // <CcInfoApi> expected
+  CcInfoApi<FileT> mergeCcInfos(Sequence<?> ccInfos) // <CcInfoApi> expected
       throws EvalException;
 
   @SkylarkCallable(
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CompilationInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CompilationInfoApi.java
index 97b8a0b..0f0dd49 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CompilationInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/CompilationInfoApi.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.skylarkbuildapi.cpp;
 
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
@@ -25,10 +26,10 @@
     documented = false,
     category = SkylarkModuleCategory.BUILTIN,
     doc = "Helper class containing CC compilation providers.")
-public interface CompilationInfoApi extends StarlarkValue {
+public interface CompilationInfoApi<FileT extends FileApi> extends StarlarkValue {
   @SkylarkCallable(name = "cc_compilation_outputs", structField = true, documented = false)
   CcCompilationOutputsApi<?> getCcCompilationOutputs();
 
   @SkylarkCallable(name = "compilation_context", structField = true, documented = false)
-  CcCompilationContextApi getCcCompilationContext();
+  CcCompilationContextApi<FileT> getCcCompilationContext();
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcHelperApi.java
index 57c741e..31d1d3a 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcHelperApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcHelperApi.java
@@ -47,15 +47,15 @@
         FileT extends FileApi,
         ConstraintValueT extends ConstraintValueInfoApi,
         SkylarkRuleContextT extends SkylarkRuleContextApi<ConstraintValueT>,
-        CcInfoT extends CcInfoApi,
+        CcInfoT extends CcInfoApi<FileT>,
         FeatureConfigurationT extends FeatureConfigurationApi,
         CcToolchainProviderT extends CcToolchainProviderApi<FeatureConfigurationT>,
         CcLinkingContextT extends CcLinkingContextApi<FileT>,
         GoConfigurationT extends GoConfigurationApi,
         GoContextInfoT extends GoContextInfoApi,
         TransitiveInfoCollectionT extends TransitiveInfoCollectionApi,
-        CompilationInfoT extends CompilationInfoApi,
-        CcCompilationContextT extends CcCompilationContextApi,
+        CompilationInfoT extends CompilationInfoApi<FileT>,
+        CcCompilationContextT extends CcCompilationContextApi<FileT>,
         WrapCcIncludeProviderT extends WrapCcIncludeProviderApi>
     extends WrapCcHelperApi<
         FeatureConfigurationT,
@@ -126,7 +126,8 @@
         @Param(name = "cc_info", positional = false, named = true, type = CcInfoApi.class),
       })
   // TODO(b/113797843): GoWrapCcInfo is not written in Skylark because several native rules use it.
-  public GoWrapCcInfoApi getGoWrapCcInfo(SkylarkRuleContextT skylarkRuleContext, CcInfoT ccInfo)
+  public GoWrapCcInfoApi<FileT> getGoWrapCcInfo(
+      SkylarkRuleContextT skylarkRuleContext, CcInfoT ccInfo)
       throws EvalException, InterruptedException;
 
   @SkylarkCallable(
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcInfoApi.java
index 5d97f57..fe18c3e 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/GoWrapCcInfoApi.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.skylarkbuildapi.cpp;
 
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.skylarkbuildapi.core.StructApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
@@ -33,10 +34,10 @@
     documented = false,
     category = SkylarkModuleCategory.PROVIDER,
     doc = "")
-public interface GoWrapCcInfoApi extends StructApi {
+public interface GoWrapCcInfoApi<FileT extends FileApi> extends StructApi {
 
   @SkylarkCallable(name = "cc_info", structField = true, documented = false, doc = "")
-  CcInfoApi getCcInfo();
+  CcInfoApi<FileT> getCcInfo();
 
   /** Provider for GoWrapCcInfo objects. */
   @SkylarkModule(name = "Provider", doc = "", documented = false)
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyCcLinkParamsProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyCcLinkParamsProviderApi.java
index 8a869d8..fe7e9b8 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyCcLinkParamsProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyCcLinkParamsProviderApi.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.skylarkbuildapi.cpp;
 
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.skylarkbuildapi.core.StructApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
@@ -26,9 +27,9 @@
     documented = false,
     category = SkylarkModuleCategory.PROVIDER,
     doc = "Wrapper for every C++ linking provider")
-public interface PyCcLinkParamsProviderApi extends StructApi {
+public interface PyCcLinkParamsProviderApi<FileT extends FileApi> extends StructApi {
   @SkylarkCallable(name = "cc_info", doc = "", structField = true, documented = false)
-  CcInfoApi getCcInfo();
+  CcInfoApi<FileT> getCcInfo();
 
   /** Provider for PyCcLinkParamsProvider objects. */
   @SkylarkModule(name = "Provider", doc = "", documented = false)
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcHelperApi.java
index 5800034..777d06f 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcHelperApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcHelperApi.java
@@ -42,11 +42,11 @@
         FileT extends FileApi,
         ConstraintValueT extends ConstraintValueInfoApi,
         SkylarkRuleContextT extends SkylarkRuleContextApi<ConstraintValueT>,
-        CcInfoT extends CcInfoApi,
+        CcInfoT extends CcInfoApi<FileT>,
         FeatureConfigurationT extends FeatureConfigurationApi,
         CcToolchainProviderT extends CcToolchainProviderApi<FeatureConfigurationT>,
-        CompilationInfoT extends CompilationInfoApi,
-        CcCompilationContextT extends CcCompilationContextApi,
+        CompilationInfoT extends CompilationInfoApi<FileT>,
+        CcCompilationContextT extends CcCompilationContextApi<FileT>,
         WrapCcIncludeProviderT extends WrapCcIncludeProviderApi>
     extends WrapCcHelperApi<
         FeatureConfigurationT,
@@ -102,6 +102,7 @@
         @Param(name = "cc_info", positional = false, named = true, type = CcInfoApi.class),
       })
   // TODO(plf): PyWrapCcInfo is not written in Skylark because several native rules use it.
-  public PyWrapCcInfoApi getPyWrapCcInfo(SkylarkRuleContextT skylarkRuleContext, CcInfoT ccInfo)
+  public PyWrapCcInfoApi<FileT> getPyWrapCcInfo(
+      SkylarkRuleContextT skylarkRuleContext, CcInfoT ccInfo)
       throws EvalException, InterruptedException;
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcInfoApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcInfoApi.java
index 39a2897..b31665a 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcInfoApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/PyWrapCcInfoApi.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.skylarkbuildapi.cpp;
 
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.skylarkbuildapi.core.StructApi;
 import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
@@ -33,10 +34,10 @@
     documented = false,
     category = SkylarkModuleCategory.PROVIDER,
     doc = "")
-public interface PyWrapCcInfoApi extends StructApi {
+public interface PyWrapCcInfoApi<FileT extends FileApi> extends StructApi {
 
   @SkylarkCallable(name = "cc_info", documented = false, structField = true, doc = "")
-  CcInfoApi getCcInfo();
+  CcInfoApi<FileT> getCcInfo();
 
   /** Provider for PyWrapCcInfo objects. */
   @SkylarkModule(name = "Provider", doc = "", documented = false)
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java
index 9cd2edf..27d5206 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/cpp/WrapCcHelperApi.java
@@ -41,9 +41,9 @@
         ConstraintValueT extends ConstraintValueInfoApi,
         SkylarkRuleContextT extends SkylarkRuleContextApi<ConstraintValueT>,
         CcToolchainProviderT extends CcToolchainProviderApi<FeatureConfigurationT>,
-        CompilationInfoT extends CompilationInfoApi,
+        CompilationInfoT extends CompilationInfoApi<FileT>,
         FileT extends FileApi,
-        CcCompilationContextT extends CcCompilationContextApi,
+        CcCompilationContextT extends CcCompilationContextApi<FileT>,
         WrapCcIncludeProviderT extends WrapCcIncludeProviderApi>
     extends StarlarkValue {
 
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaBootstrap.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaBootstrap.java
index 87e8a52..b15253f 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaBootstrap.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaBootstrap.java
@@ -26,13 +26,13 @@
   private final JavaCommonApi<?, ?, ?, ?, ?, ?, ?> javaCommonApi;
   private final JavaInfoProviderApi javaInfoProviderApi;
   private final JavaProtoCommonApi<?, ?, ?, ?> javaProtoCommonApi;
-  private final JavaCcLinkParamsProviderApi.Provider<?> javaCcLinkParamsProviderApiProvider;
+  private final JavaCcLinkParamsProviderApi.Provider<?, ?> javaCcLinkParamsProviderApiProvider;
 
   public JavaBootstrap(
       JavaCommonApi<?, ?, ?, ?, ?, ?, ?> javaCommonApi,
       JavaInfoProviderApi javaInfoProviderApi,
       JavaProtoCommonApi<?, ?, ?, ?> javaProtoCommonApi,
-      JavaCcLinkParamsProviderApi.Provider<?> javaCcLinkParamsProviderApiProvider) {
+      JavaCcLinkParamsProviderApi.Provider<?, ?> javaCcLinkParamsProviderApiProvider) {
     this.javaCommonApi = javaCommonApi;
     this.javaInfoProviderApi = javaInfoProviderApi;
     this.javaProtoCommonApi = javaProtoCommonApi;
diff --git a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCcLinkParamsProviderApi.java b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCcLinkParamsProviderApi.java
index 969fe4d..7586b5b 100644
--- a/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCcLinkParamsProviderApi.java
+++ b/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/java/JavaCcLinkParamsProviderApi.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.lib.skylarkbuildapi.java;
 
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.core.ProviderApi;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcInfoApi;
 import com.google.devtools.build.lib.skylarkinterface.Param;
@@ -34,7 +35,9 @@
             + "Information about the c++ libraries to be linked into Java targets.",
     documented = true,
     category = SkylarkModuleCategory.PROVIDER)
-public interface JavaCcLinkParamsProviderApi<CcInfoApiT extends CcInfoApi> extends StarlarkValue {
+public interface JavaCcLinkParamsProviderApi<
+        FileT extends FileApi, CcInfoApiT extends CcInfoApi<FileT>>
+    extends StarlarkValue {
   /** Name of this info object. */
   String NAME = "JavaCcLinkParamsInfo";
 
@@ -54,7 +57,8 @@
           "Do not use this module. It is intended for migration purposes only. If you depend on "
               + "it, you will be broken when it is removed.",
       documented = false)
-  interface Provider<CcInfoApiT extends CcInfoApi> extends ProviderApi {
+  public interface Provider<FileT extends FileApi, CcInfoApiT extends CcInfoApi<FileT>>
+      extends ProviderApi {
 
     @SkylarkCallable(
         name = NAME,
@@ -71,6 +75,7 @@
         },
         selfCall = true)
     @SkylarkConstructor(objectType = JavaCcLinkParamsProviderApi.class, receiverNameForDoc = NAME)
-    JavaCcLinkParamsProviderApi<CcInfoApiT> createInfo(CcInfoApiT store) throws EvalException;
+    public JavaCcLinkParamsProviderApi<FileT, CcInfoApiT> createInfo(CcInfoApiT store)
+        throws EvalException;
   }
 }
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java
index 54b5259..ee8d027 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcInfo.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.skydoc.fakebuildapi.cpp;
 
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcCompilationContextApi;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcInfoApi;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcLinkingContextApi;
@@ -21,10 +22,10 @@
 import com.google.devtools.build.lib.syntax.Printer;
 
 /** Fake implementation of {@link CcInfoApi}. */
-public class FakeCcInfo implements CcInfoApi {
+public class FakeCcInfo implements CcInfoApi<FileApi> {
 
   @Override
-  public CcCompilationContextApi getCcCompilationContext() {
+  public CcCompilationContextApi<FileApi> getCcCompilationContext() {
     return null;
   }
 
@@ -47,10 +48,10 @@
   public void repr(Printer printer) {}
 
   /** Fake implementation of {@link CcInfoApi.Provider}. */
-  public static class Provider implements CcInfoApi.Provider {
+  public static class Provider implements CcInfoApi.Provider<FileApi> {
 
     @Override
-    public CcInfoApi createInfo(Object ccCompilationContext, Object ccLinkingInfo)
+    public CcInfoApi<FileApi> createInfo(Object ccCompilationContext, Object ccLinkingInfo)
         throws EvalException {
       return new FakeCcInfo();
     }
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java
index d371a9e..6f21a43 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeCcModule.java
@@ -50,7 +50,7 @@
         SkylarkRuleContextApi<ConstraintValueInfoApi>,
         CcToolchainProviderApi<FeatureConfigurationApi>,
         FeatureConfigurationApi,
-        CcCompilationContextApi,
+        CcCompilationContextApi<FileApi>,
         CcCompilationOutputsApi<FileApi>,
         CcLinkingOutputsApi<FileApi>,
         LinkerInputApi<LibraryToLinkApi<FileApi>, FileApi>,
@@ -193,12 +193,12 @@
   }
 
   @Override
-  public CcInfoApi mergeCcInfos(Sequence<?> ccInfos) {
+  public CcInfoApi<FileApi> mergeCcInfos(Sequence<?> ccInfos) {
     return null;
   }
 
   @Override
-  public CcCompilationContextApi createCcCompilationContext(
+  public CcCompilationContextApi<FileApi> createCcCompilationContext(
       Object headers,
       Object systemIncludes,
       Object includes,
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java
index 389fc64..bf9936e 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakeGoWrapCcHelper.java
@@ -42,15 +42,15 @@
         FileApi,
         ConstraintValueInfoApi,
         SkylarkRuleContextApi<ConstraintValueInfoApi>,
-        CcInfoApi,
+        CcInfoApi<FileApi>,
         FeatureConfigurationApi,
         CcToolchainProviderApi<FeatureConfigurationApi>,
         CcLinkingContextApi<FileApi>,
         GoConfigurationApi,
         GoContextInfoApi,
         TransitiveInfoCollectionApi,
-        CompilationInfoApi,
-        CcCompilationContextApi,
+        CompilationInfoApi<FileApi>,
+        CcCompilationContextApi<FileApi>,
         WrapCcIncludeProviderApi> {
 
   @Override
@@ -71,13 +71,13 @@
       FileApi pkg,
       FileApi gopkg,
       Object skylarkWrapContext,
-      CcInfoApi ccInfo) {
+      CcInfoApi<FileApi> ccInfo) {
     return null;
   }
 
   @Override
-  public GoWrapCcInfoApi getGoWrapCcInfo(
-      SkylarkRuleContextApi<ConstraintValueInfoApi> skylarkRuleContext, CcInfoApi ccInfo) {
+  public GoWrapCcInfoApi<FileApi> getGoWrapCcInfo(
+      SkylarkRuleContextApi<ConstraintValueInfoApi> skylarkRuleContext, CcInfoApi<FileApi> ccInfo) {
     return null;
   }
 
@@ -135,7 +135,7 @@
   }
 
   @Override
-  public CompilationInfoApi skylarkCreateCompileActions(
+  public CompilationInfoApi<FileApi> skylarkCreateCompileActions(
       SkylarkRuleContextApi<ConstraintValueInfoApi> skylarkRuleContext,
       FeatureConfigurationApi featureConfiguration,
       CcToolchainProviderApi<FeatureConfigurationApi> ccToolchain,
@@ -163,7 +163,7 @@
       SkylarkRuleContextApi<ConstraintValueInfoApi> skylarkRuleContext,
       CcToolchainProviderApi<FeatureConfigurationApi> ccToolchain,
       FeatureConfigurationApi featureConfiguration,
-      CcCompilationContextApi wrapperCcCompilationContext,
+      CcCompilationContextApi<FileApi> wrapperCcCompilationContext,
       Depset swigIncludes,
       FileApi swigSource,
       Sequence<?> subParameters,
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java
index b4954ee..e8e7986 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyCcLinkParamsProvider.java
@@ -14,16 +14,17 @@
 
 package com.google.devtools.build.skydoc.fakebuildapi.cpp;
 
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcInfoApi;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.PyCcLinkParamsProviderApi;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Printer;
 
 /** Fake implementation of {@link PyCcLinkParamsProviderApi}. */
-public class FakePyCcLinkParamsProvider implements PyCcLinkParamsProviderApi {
+public class FakePyCcLinkParamsProvider implements PyCcLinkParamsProviderApi<FileApi> {
 
   @Override
-  public CcInfoApi getCcInfo() {
+  public CcInfoApi<FileApi> getCcInfo() {
     return null;
   }
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java
index 8d45288..35b135c 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcHelper.java
@@ -35,11 +35,11 @@
         FileApi,
         ConstraintValueInfoApi,
         SkylarkRuleContextApi<ConstraintValueInfoApi>,
-        CcInfoApi,
+        CcInfoApi<FileApi>,
         FeatureConfigurationApi,
         CcToolchainProviderApi<FeatureConfigurationApi>,
-        CompilationInfoApi,
-        CcCompilationContextApi,
+        CompilationInfoApi<FileApi>,
+        CcCompilationContextApi<FileApi>,
         WrapCcIncludeProviderApi> {
 
   @Override
@@ -61,8 +61,8 @@
   }
 
   @Override
-  public PyWrapCcInfoApi getPyWrapCcInfo(
-      SkylarkRuleContextApi<ConstraintValueInfoApi> skylarkRuleContext, CcInfoApi ccInfo) {
+  public PyWrapCcInfoApi<FileApi> getPyWrapCcInfo(
+      SkylarkRuleContextApi<ConstraintValueInfoApi> skylarkRuleContext, CcInfoApi<FileApi> ccInfo) {
     return null;
   }
 
@@ -96,7 +96,7 @@
       SkylarkRuleContextApi<ConstraintValueInfoApi> skylarkRuleContext,
       CcToolchainProviderApi<FeatureConfigurationApi> ccToolchain,
       FeatureConfigurationApi featureConfiguration,
-      CcCompilationContextApi wrapperCcCompilationContext,
+      CcCompilationContextApi<FileApi> wrapperCcCompilationContext,
       Depset swigIncludes,
       FileApi swigSource,
       Sequence<?> subParameters,
@@ -110,7 +110,7 @@
       Object zipTool) {}
 
   @Override
-  public CompilationInfoApi skylarkCreateCompileActions(
+  public CompilationInfoApi<FileApi> skylarkCreateCompileActions(
       SkylarkRuleContextApi<ConstraintValueInfoApi> skylarkRuleContext,
       FeatureConfigurationApi featureConfiguration,
       CcToolchainProviderApi<FeatureConfigurationApi> ccToolchain,
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java
index a8648aa..926ee4d 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/cpp/FakePyWrapCcInfo.java
@@ -14,6 +14,7 @@
 
 package com.google.devtools.build.skydoc.fakebuildapi.cpp;
 
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcInfoApi;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.PyWrapCcHelperApi;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.PyWrapCcInfoApi;
@@ -21,10 +22,10 @@
 import com.google.devtools.build.lib.syntax.Printer;
 
 /** Fake implementation of {@link PyWrapCcHelperApi}. */
-public class FakePyWrapCcInfo implements PyWrapCcInfoApi {
+public class FakePyWrapCcInfo implements PyWrapCcInfoApi<FileApi> {
 
   @Override
-  public CcInfoApi getCcInfo() {
+  public CcInfoApi<FileApi> getCcInfo() {
     return null;
   }
 
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCcLinkParamsProvider.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCcLinkParamsProvider.java
index d130b49..6cac2b5 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCcLinkParamsProvider.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/java/FakeJavaCcLinkParamsProvider.java
@@ -14,24 +14,28 @@
 
 package com.google.devtools.build.skydoc.fakebuildapi.java;
 
+import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
 import com.google.devtools.build.lib.skylarkbuildapi.cpp.CcInfoApi;
 import com.google.devtools.build.lib.skylarkbuildapi.java.JavaCcLinkParamsProviderApi;
 import com.google.devtools.build.lib.syntax.EvalException;
 import com.google.devtools.build.lib.syntax.Printer;
 
 /** Fake implementation of {@link JavaCcLinkParamsProvider}. */
-public class FakeJavaCcLinkParamsProvider implements JavaCcLinkParamsProviderApi<CcInfoApi> {
+public class FakeJavaCcLinkParamsProvider
+    implements JavaCcLinkParamsProviderApi<FileApi, CcInfoApi<FileApi>> {
 
   @Override
-  public CcInfoApi getCcInfo() {
+  public CcInfoApi<FileApi> getCcInfo() {
     return null;
   }
 
   /** Fake implementation of {@link JavaCcLinkParamsProvider#Provider}. */
-  public static class Provider implements JavaCcLinkParamsProviderApi.Provider<CcInfoApi> {
+  public static class Provider
+      implements JavaCcLinkParamsProviderApi.Provider<FileApi, CcInfoApi<FileApi>> {
 
     @Override
-    public FakeJavaCcLinkParamsProvider createInfo(CcInfoApi ccInfoApi) throws EvalException {
+    public FakeJavaCcLinkParamsProvider createInfo(CcInfoApi<FileApi> ccInfoApi)
+        throws EvalException {
       return new FakeJavaCcLinkParamsProvider();
     }
 
diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
index 1e8527f..004d998 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/SkylarkCcCommonTest.java
@@ -14,6 +14,7 @@
 package com.google.devtools.build.lib.rules.cpp;
 
 import static com.google.common.truth.Truth.assertThat;
+import static com.google.devtools.build.lib.actions.util.ActionsTestUtil.baseArtifactNames;
 import static com.google.devtools.build.lib.testutil.MoreAsserts.assertThrows;
 
 import com.google.common.base.Joiner;
@@ -88,13 +89,22 @@
     scratch.file("myinfo/BUILD");
   }
 
-  private StructImpl getMyInfoFromTarget(ConfiguredTarget configuredTarget) throws Exception {
+  private static StructImpl getMyInfoFromTarget(ConfiguredTarget configuredTarget)
+      throws Exception {
     Provider.Key key =
         new SkylarkProvider.SkylarkKey(
             Label.parseAbsolute("//myinfo:myinfo.bzl", ImmutableMap.of()), "MyInfo");
     return (StructImpl) configuredTarget.get(key);
   }
 
+  private static Iterable<Artifact> getArtifactsFromMyInfo(ConfiguredTarget target, String field)
+      throws Exception {
+    StructImpl myInfo = getMyInfoFromTarget(target);
+    @SuppressWarnings("unchecked")
+    Iterable<Artifact> artifacts = (Iterable<Artifact>) myInfo.getValue(field);
+    return artifacts;
+  }
+
   @Test
   public void testAllFiles() throws Exception {
     scratch.file(
@@ -6185,4 +6195,79 @@
         "    deps = [':dep1', ':dep2'],",
         ")");
   }
+
+  private static void setupDirectHeaderExtractionSupport(Scratch scratch) throws Exception {
+    scratch.file(
+        "direct/cc_info_extractor.bzl",
+        "load('//myinfo:myinfo.bzl', 'MyInfo')",
+        "def _cc_info_extractor_impl(ctx):",
+        "    compilation_context = ctx.attr.dep[CcInfo].compilation_context",
+        "    return [MyInfo(",
+        "        direct_headers = compilation_context.direct_headers,",
+        "        direct_textual_headers = compilation_context.direct_textual_headers,",
+        "    )]",
+        "cc_info_extractor = rule(",
+        "    _cc_info_extractor_impl,",
+        "    attrs = {",
+        "        'dep': attr.label(providers = [[CcInfo]]),",
+        "    }",
+        ")");
+    scratch.file(
+        "direct/BUILD",
+        "load('//direct:cc_info_extractor.bzl', 'cc_info_extractor')",
+        "cc_info_extractor(",
+        "    name = 'foo',",
+        "    dep = '//direct/libs:foo_lib',",
+        ")",
+        "cc_info_extractor(",
+        "    name = 'bar',",
+        "    dep = '//direct/libs:bar_lib',",
+        ")");
+  }
+
+  private static void setupCcLibraryDirectPropagationTestTargets(Scratch scratch) throws Exception {
+    scratch.file(
+        "direct/libs/BUILD",
+        "cc_library(",
+        "    name = 'foo_lib',",
+        "    hdrs = ['foo.h'],",
+        "    textual_hdrs = ['foo.def'],",
+        ")",
+        "cc_library(",
+        "    name = 'bar_lib',",
+        "    hdrs = ['bar.h'],",
+        "    textual_hdrs = ['bar.def'],",
+        "    deps = [':foo_lib'],",
+        ")");
+  }
+
+  @Test
+  public void testCcLibraryPropagatesCcInfoWithDirectHeaders() throws Exception {
+    setupDirectHeaderExtractionSupport(scratch);
+    setupCcLibraryDirectPropagationTestTargets(scratch);
+
+    ConfiguredTarget fooTarget = getConfiguredTarget("//direct:foo");
+    Iterable<Artifact> fooDirectHeaders = getArtifactsFromMyInfo(fooTarget, "direct_headers");
+    assertThat(baseArtifactNames(fooDirectHeaders)).containsExactly("foo.h");
+
+    ConfiguredTarget barTarget = getConfiguredTarget("//direct:bar");
+    Iterable<Artifact> barDirectHeaders = getArtifactsFromMyInfo(barTarget, "direct_headers");
+    assertThat(baseArtifactNames(barDirectHeaders)).containsExactly("bar.h");
+  }
+
+  @Test
+  public void testCcLibraryPropagatesCcInfoWithDirectTextualHeaders() throws Exception {
+    setupDirectHeaderExtractionSupport(scratch);
+    setupCcLibraryDirectPropagationTestTargets(scratch);
+
+    ConfiguredTarget fooTarget = getConfiguredTarget("//direct:foo");
+    Iterable<Artifact> fooDirectTextualHeaders =
+        getArtifactsFromMyInfo(fooTarget, "direct_textual_headers");
+    assertThat(baseArtifactNames(fooDirectTextualHeaders)).containsExactly("foo.def");
+
+    ConfiguredTarget barTarget = getConfiguredTarget("//direct:bar");
+    Iterable<Artifact> barDirectTextualHeaders =
+        getArtifactsFromMyInfo(barTarget, "direct_textual_headers");
+    assertThat(baseArtifactNames(barDirectTextualHeaders)).containsExactly("bar.def");
+  }
 }
