aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java32
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java35
4 files changed, 82 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java
index 6bc1ed10d7..97cb73987f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java
@@ -154,6 +154,7 @@ public final class JavaConfiguration extends Fragment implements JavaConfigurati
private final boolean generateJavaDeps;
private final boolean strictDepsJavaProtos;
private final boolean protoGeneratedStrictDeps;
+ private final boolean isJavaProtoExportsEnabled;
private final OneVersionEnforcementLevel enforceOneVersion;
private final boolean enforceOneVersionOnJavaTests;
private final ImportDepsCheckingLevel importDepsCheckingLevel;
@@ -204,6 +205,7 @@ public final class JavaConfiguration extends Fragment implements JavaConfigurati
this.useLegacyBazelJavaTest = javaOptions.legacyBazelJavaTest;
this.strictDepsJavaProtos = javaOptions.strictDepsJavaProtos;
this.protoGeneratedStrictDeps = javaOptions.protoGeneratedStrictDeps;
+ this.isJavaProtoExportsEnabled = javaOptions.isJavaProtoExportsEnabled;
this.enforceOneVersion = javaOptions.enforceOneVersion;
this.enforceOneVersionOnJavaTests = javaOptions.enforceOneVersionOnJavaTests;
this.importDepsCheckingLevel = javaOptions.importDepsCheckingLevel;
@@ -246,6 +248,7 @@ public final class JavaConfiguration extends Fragment implements JavaConfigurati
boolean generateJavaDeps,
boolean strictDepsJavaProtos,
boolean protoGeneratedStrictDeps,
+ boolean isJavaProtoExportsEnabled,
OneVersionEnforcementLevel enforceOneVersion,
boolean enforceOneVersionOnJavaTests,
ImportDepsCheckingLevel importDepsCheckingLevel,
@@ -276,6 +279,7 @@ public final class JavaConfiguration extends Fragment implements JavaConfigurati
this.generateJavaDeps = generateJavaDeps;
this.strictDepsJavaProtos = strictDepsJavaProtos;
this.protoGeneratedStrictDeps = protoGeneratedStrictDeps;
+ this.isJavaProtoExportsEnabled = isJavaProtoExportsEnabled;
this.enforceOneVersion = enforceOneVersion;
this.enforceOneVersionOnJavaTests = enforceOneVersionOnJavaTests;
this.importDepsCheckingLevel = importDepsCheckingLevel;
@@ -512,6 +516,10 @@ public final class JavaConfiguration extends Fragment implements JavaConfigurati
return protoGeneratedStrictDeps;
}
+ public boolean isJavaProtoExportsEnabled() {
+ return isJavaProtoExportsEnabled;
+ }
+
public boolean jplPropagateCcLinkParamsStore() {
return jplPropagateCcLinkParamsStore;
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
index 5bb7e08106..2b9cbecf05 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java
@@ -467,6 +467,16 @@ public class JavaOptions extends FragmentOptions {
public boolean protoGeneratedStrictDeps;
@Option(
+ name = "experimental_enable_java_proto_exports",
+ defaultValue = "false",
+ documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+ effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS, OptionEffectTag.EAGERNESS_TO_EXIT},
+ help =
+ "Enables exports forwarding for proto_library targets depended on by "
+ + "java_proto_library targets.")
+ public boolean isJavaProtoExportsEnabled;
+
+ @Option(
name = "experimental_java_header_compilation_disable_javac_fallback",
defaultValue = "false",
documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
index 09cf02d0d1..a2649622d5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
@@ -113,6 +113,7 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured
AspectDefinition.Builder result =
new AspectDefinition.Builder(this)
.propagateAlongAttribute("deps")
+ .propagateAlongAttribute("exports")
.requiresConfigurationFragments(JavaConfiguration.class, ProtoConfiguration.class)
.requireProviders(ProtoSourcesProvider.class)
.advertiseProvider(JavaProtoLibraryAspectProvider.class)
@@ -154,9 +155,14 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured
*/
private final JavaCompilationArgsProvider dependencyCompilationArgs;
+ // Compilation-args from all exports, merged together.
+ private final JavaCompilationArgsProvider exportsCompilationArgs;
+
private final JavaProtoAspectCommon aspectCommon;
private final Iterable<JavaProtoLibraryAspectProvider> javaProtoLibraryAspectProviders;
+ private final boolean isJavaProtoExportsEnabled;
+
Impl(
RuleContext ruleContext,
SupportData supportData,
@@ -172,6 +178,22 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured
JavaCompilationArgsProvider.merge(
WrappingProvider.Helper.unwrapProviders(
javaProtoLibraryAspectProviders, JavaCompilationArgsProvider.class));
+
+ this.isJavaProtoExportsEnabled =
+ ruleContext.getFragment(JavaConfiguration.class).isJavaProtoExportsEnabled();
+
+ if (this.isJavaProtoExportsEnabled) {
+ this.exportsCompilationArgs =
+ JavaCompilationArgsProvider.merge(
+ WrappingProvider.Helper.unwrapProviders(
+ ruleContext.getPrerequisites(
+ "exports",
+ RuleConfiguredTarget.Mode.TARGET,
+ JavaProtoLibraryAspectProvider.class),
+ JavaCompilationArgsProvider.class));
+ } else {
+ this.exportsCompilationArgs = null;
+ }
}
void addProviders(ConfiguredAspect.Builder aspect) {
@@ -225,6 +247,12 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured
javaProvidersBuilder.add(JavaRuleOutputJarsProvider.EMPTY);
}
+ if (isJavaProtoExportsEnabled) {
+ generatedCompilationArgsProvider =
+ JavaCompilationArgsProvider.merge(
+ ImmutableList.of(generatedCompilationArgsProvider, exportsCompilationArgs));
+ }
+
javaProvidersBuilder.add(generatedCompilationArgsProvider);
javaProvidersBuilder.add(createCcLinkParamsStore(
ruleContext, aspectCommon.getProtoRuntimeDeps()));
@@ -260,7 +288,9 @@ public class JavaLiteProtoAspect extends NativeAspectClass implements Configured
ruleContext.getLabel(),
ImmutableList.of(sourceJar),
"JavaLite",
- /* allowServices= */ true);
+ /* allowServices= */ true,
+ supportData.getProtosInExports(),
+ supportData.getExportedProtoSourceRoots());
}
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
index a86f703e9b..131c617650 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspect.java
@@ -121,6 +121,7 @@ public class JavaProtoAspect extends NativeAspectClass implements ConfiguredAspe
AspectDefinition.Builder result =
new AspectDefinition.Builder(this)
.propagateAlongAttribute("deps")
+ .propagateAlongAttribute("exports")
.requiresConfigurationFragments(JavaConfiguration.class, ProtoConfiguration.class)
.requireProviders(ProtoSourcesProvider.class)
.advertiseProvider(JavaProtoLibraryAspectProvider.class)
@@ -163,8 +164,13 @@ public class JavaProtoAspect extends NativeAspectClass implements ConfiguredAspe
*/
private final JavaCompilationArgsProvider dependencyCompilationArgs;
+ // Compilation-args from all exports, merged together.
+ private final JavaCompilationArgsProvider exportsCompilationArgs;
+
private final Iterable<JavaProtoLibraryAspectProvider> javaProtoLibraryAspectProviders;
+ private final boolean isJavaProtoExportsEnabled;
+
Impl(
RuleContext ruleContext,
SupportData supportData,
@@ -178,10 +184,27 @@ public class JavaProtoAspect extends NativeAspectClass implements ConfiguredAspe
ruleContext.getPrerequisites(
"deps", RuleConfiguredTarget.Mode.TARGET, JavaProtoLibraryAspectProvider.class);
- dependencyCompilationArgs =
+ this.dependencyCompilationArgs =
JavaCompilationArgsProvider.merge(
WrappingProvider.Helper.unwrapProviders(
javaProtoLibraryAspectProviders, JavaCompilationArgsProvider.class));
+
+ this.isJavaProtoExportsEnabled =
+ ruleContext.getFragment(JavaConfiguration.class).isJavaProtoExportsEnabled();
+
+ if (this.isJavaProtoExportsEnabled) {
+ this.exportsCompilationArgs =
+ JavaCompilationArgsProvider.merge(
+ WrappingProvider.Helper.unwrapProviders(
+ ruleContext.getPrerequisites(
+ "exports",
+ RuleConfiguredTarget.Mode.TARGET,
+ JavaProtoLibraryAspectProvider.class),
+ JavaCompilationArgsProvider.class));
+ } else {
+ this.exportsCompilationArgs = null;
+ }
+
}
void addProviders(ConfiguredAspect.Builder aspect) {
@@ -235,6 +258,12 @@ public class JavaProtoAspect extends NativeAspectClass implements ConfiguredAspe
javaProvidersBuilder.add(JavaRuleOutputJarsProvider.EMPTY);
}
+ if (isJavaProtoExportsEnabled) {
+ generatedCompilationArgsProvider =
+ JavaCompilationArgsProvider.merge(
+ ImmutableList.of(generatedCompilationArgsProvider, exportsCompilationArgs));
+ }
+
javaProvidersBuilder.add(generatedCompilationArgsProvider);
javaProvidersBuilder.add(createCcLinkParamsStore(
ruleContext, aspectCommon.getProtoRuntimeDeps()));
@@ -289,7 +318,9 @@ public class JavaProtoAspect extends NativeAspectClass implements ConfiguredAspe
ruleContext.getLabel(),
ImmutableList.of(sourceJar),
"Java (Immutable)",
- rpcSupport.allowServices(ruleContext));
+ rpcSupport.allowServices(ruleContext),
+ supportData.getProtosInExports(),
+ supportData.getExportedProtoSourceRoots());
}
}
}