diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/java')
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()); } } } |