aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Liam Miller-Cushon <cushon@google.com>2015-09-22 16:10:38 +0000
committerGravatar Laszlo Csomor <laszlocsomor@google.com>2015-09-22 17:10:03 +0000
commit36c0fb7f48bd1548419a5f84897aadcfb79d46ee (patch)
tree6cd7df6398e8080b03d28a9208fb1d6065778cfd /src
parent1d947c685ccce5f229456684876883b1c03621b0 (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')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaCommon.java6
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaConfiguration.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaOptions.java7
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;
}