diff options
author | Liam Miller-Cushon <cushon@google.com> | 2015-09-22 16:10:38 +0000 |
---|---|---|
committer | Laszlo Csomor <laszlocsomor@google.com> | 2015-09-22 17:10:03 +0000 |
commit | 36c0fb7f48bd1548419a5f84897aadcfb79d46ee (patch) | |
tree | 6cd7df6398e8080b03d28a9208fb1d6065778cfd /src | |
parent | 1d947c685ccce5f229456684876883b1c03621b0 (diff) |
Disallow precompiled jars in sources
Adds an option (--allow_precompiled_jars_in_srcs) to control whether
precompiled jars can be used as sources of java and android rules.
--
MOS_MIGRATED_REVID=103651409
Diffstat (limited to 'src')
3 files changed, 20 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java index e24e73978e..e894037541 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java @@ -469,6 +469,12 @@ public class JavaCommon { semantics.commonDependencyProcessing(ruleContext, javaTargetAttributes, targetsTreatedAsDeps(ClasspathType.COMPILE_ONLY)); + if (!ruleContext.getFragment(JavaConfiguration.class).allowPrecompiledJarsInSrcs() + && javaTargetAttributes.hasJarFiles()) { + ruleContext.attributeError( + "srcs", "precompiled jars are not allowed as sources; use java_import instead?"); + } + // Check that we have do not have both sources and jars. if ((javaTargetAttributes.hasSourceFiles() || javaTargetAttributes.hasSourceJars()) && javaTargetAttributes.hasJarFiles()) { 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 0b037d7fa7..aaa982867e 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 @@ -66,6 +66,7 @@ public final class JavaConfiguration extends Fragment { private final TriState bundleTranslations; private final ImmutableList<Label> translationTargets; private final String javaCpu; + private final boolean allowPrecompiledJarsInSrcs; private Label javaToolchain; @@ -91,6 +92,7 @@ public final class JavaConfiguration extends Fragment { this.bundleTranslations = javaOptions.bundleTranslations; this.javaCpu = javaCpu; this.javaToolchain = javaToolchain; + this.allowPrecompiledJarsInSrcs = javaOptions.allowPrecompiledJarsInSrcs; ImmutableList.Builder<Label> translationsBuilder = ImmutableList.builder(); for (String s : javaOptions.translationTargets) { @@ -242,4 +244,9 @@ public final class JavaConfiguration extends Fragment { public Label getToolchainLabel() { return javaToolchain; } + + /** Returns whether pre-compiled jar files should be allowed in srcs. */ + public boolean allowPrecompiledJarsInSrcs() { + return allowPrecompiledJarsInSrcs; + } } 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 cadedffeb0..3733ac00eb 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 @@ -296,6 +296,12 @@ public class JavaOptions extends FragmentOptions { help = "Disables the Jvm configuration entirely.") public boolean disableJvm; + @Option(name = "allow_precompiled_jars_in_srcs", + defaultValue = "true", + category = "undocumented", + help = "Allows pre-compiled jars to be used in srcs of java rules.") + public boolean allowPrecompiledJarsInSrcs; + @Override public FragmentOptions getHost(boolean fallback) { JavaOptions host = (JavaOptions) getDefault(); @@ -318,6 +324,7 @@ public class JavaOptions extends FragmentOptions { host.javaDeps = javaDeps; host.experimentalJavaClasspath = experimentalJavaClasspath; + host.allowPrecompiledJarsInSrcs = allowPrecompiledJarsInSrcs; return host; } |