Expose `CcCompilationContext` `direct_headers` and `direct_textual_headers` to Starlark.
This change allows Starlark to consume this field set by native rules, but does *not* yet provide an API for Starlark rules to set it when creating new compilation contexts (this is a bit more complicated when it merging `CcInfo` from dependencies is also involved).
RELNOTES: None.
PiperOrigin-RevId: 300773814
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");
+ }
}