diff options
author | 2018-07-13 07:52:06 -0700 | |
---|---|---|
committer | 2018-07-13 07:53:41 -0700 | |
commit | bbf8c996b9c45e04c047e8ddb22454b29fae7f6b (patch) | |
tree | d742b963095e1f11cee72fa870cc7915db52e50a /src/main/java/com/google/devtools/build/lib/rules/java | |
parent | b50856275e00b638ec5fe01b441e55923d62f311 (diff) |
Add option to turn on strict deps for the java compilation of proto generated
Java code.
RELNOTES: None
PiperOrigin-RevId: 204471346
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/java')
3 files changed, 26 insertions, 1 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 73055b41a0..29e93541f9 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 @@ -38,6 +38,7 @@ import javax.annotation.Nullable; @AutoCodec @Immutable public final class JavaConfiguration extends Fragment implements JavaConfigurationApi { + /** Values for the --java_classpath option */ public enum JavaClasspathMode { /** Use full transitive classpaths, the default behavior. */ @@ -151,6 +152,7 @@ public final class JavaConfiguration extends Fragment implements JavaConfigurati private final boolean headerCompilationDisableJavacFallback; private final boolean generateJavaDeps; private final boolean strictDepsJavaProtos; + private final boolean protoGeneratedStrictDeps; private final OneVersionEnforcementLevel enforceOneVersion; private final boolean enforceOneVersionOnJavaTests; private final ImportDepsCheckingLevel importDepsCheckingLevel; @@ -200,6 +202,7 @@ public final class JavaConfiguration extends Fragment implements JavaConfigurati this.javaOptimizationMode = javaOptions.javaOptimizationMode; this.useLegacyBazelJavaTest = javaOptions.legacyBazelJavaTest; this.strictDepsJavaProtos = javaOptions.strictDepsJavaProtos; + this.protoGeneratedStrictDeps = javaOptions.protoGeneratedStrictDeps; this.enforceOneVersion = javaOptions.enforceOneVersion; this.enforceOneVersionOnJavaTests = javaOptions.enforceOneVersionOnJavaTests; this.importDepsCheckingLevel = javaOptions.importDepsCheckingLevel; @@ -241,6 +244,7 @@ public final class JavaConfiguration extends Fragment implements JavaConfigurati boolean headerCompilationDisableJavacFallback, boolean generateJavaDeps, boolean strictDepsJavaProtos, + boolean protoGeneratedStrictDeps, OneVersionEnforcementLevel enforceOneVersion, boolean enforceOneVersionOnJavaTests, ImportDepsCheckingLevel importDepsCheckingLevel, @@ -270,6 +274,7 @@ public final class JavaConfiguration extends Fragment implements JavaConfigurati this.headerCompilationDisableJavacFallback = headerCompilationDisableJavacFallback; this.generateJavaDeps = generateJavaDeps; this.strictDepsJavaProtos = strictDepsJavaProtos; + this.protoGeneratedStrictDeps = protoGeneratedStrictDeps; this.enforceOneVersion = enforceOneVersion; this.enforceOneVersionOnJavaTests = enforceOneVersionOnJavaTests; this.importDepsCheckingLevel = importDepsCheckingLevel; @@ -497,6 +502,10 @@ public final class JavaConfiguration extends Fragment implements JavaConfigurati return strictDepsJavaProtos; } + public boolean isProtoGeneratedStrictDeps() { + return protoGeneratedStrictDeps; + } + 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 9245257c01..5bb7e08106 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 @@ -457,6 +457,15 @@ public class JavaOptions extends FragmentOptions { ) public boolean strictDepsJavaProtos; + // TODO(twerth): Remove flag after it's turned on globally. + @Option( + name = "experimental_proto_generated_strict_deps", + defaultValue = "false", + documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, + effectTags = {OptionEffectTag.BUILD_FILE_SEMANTICS, OptionEffectTag.EAGERNESS_TO_EXIT}, + help = "Enables strict deps mode for the java compilation of proto generated Java code.") + public boolean protoGeneratedStrictDeps; + @Option( name = "experimental_java_header_compilation_disable_javac_fallback", defaultValue = "false", @@ -575,6 +584,8 @@ public class JavaOptions extends FragmentOptions { host.jplPropagateCcLinkParamsStore = jplPropagateCcLinkParamsStore; + host.protoGeneratedStrictDeps = protoGeneratedStrictDeps; + return host; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspectCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspectCommon.java index e1d15777f4..1eb1115b79 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspectCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaProtoAspectCommon.java @@ -24,6 +24,7 @@ import com.google.devtools.build.lib.analysis.config.BuildConfiguration.StrictDe import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider; import com.google.devtools.build.lib.rules.java.JavaCompilationArtifacts; import com.google.devtools.build.lib.rules.java.JavaCompilationHelper; +import com.google.devtools.build.lib.rules.java.JavaConfiguration; import com.google.devtools.build.lib.rules.java.JavaInfo; import com.google.devtools.build.lib.rules.java.JavaLibraryHelper; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; @@ -129,7 +130,11 @@ public class JavaProtoAspectCommon { .setOutput(outputJar) .addSourceJars(sourceJar) .setJavacOpts(ProtoJavacOpts.constructJavacOpts(ruleContext)); - helper.addDep(dep).setCompilationStrictDepsMode(StrictDepsMode.OFF); + if (ruleContext.getFragment(JavaConfiguration.class).isProtoGeneratedStrictDeps()) { + helper.addDep(dep).setCompilationStrictDepsMode(StrictDepsMode.ERROR); + } else { + helper.addDep(dep).setCompilationStrictDepsMode(StrictDepsMode.OFF); + } for (TransitiveInfoCollection t : getProtoRuntimeDeps()) { JavaCompilationArgsProvider provider = JavaInfo.getProvider(JavaCompilationArgsProvider.class, t); |