Skip to content

Commit dec85a9

Browse files
ianoc-stripejohnynek
authored andcommitted
Add an option so we can indicate that no java source jars are produced (bazel-contrib#529)
* Add an option so we can indicate that no java source jars are produced * Add tests * Fix test dep * This still had some bugs for some of them, this covers those cases though and the test is a broader target include * Lint fix
1 parent afa6403 commit dec85a9

File tree

9 files changed

+54
-1
lines changed

9 files changed

+54
-1
lines changed

scala/private/rule_impls.bzl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,7 @@ JavaFiles: {java_files}
199199
Manifest: {manifest}
200200
Plugins: {plugin_arg}
201201
PrintCompileTime: {print_compile_time}
202+
ExpectJavaOutput: {expect_java_output}
202203
ResourceDests: {resource_dest}
203204
ResourceJars: {resource_jars}
204205
ResourceSrcs: {resource_src}
@@ -213,6 +214,7 @@ StatsfileOutput: {statsfile_output}
213214
manifest = ctx.outputs.manifest.path,
214215
scala_opts = ",".join(scalacopts),
215216
print_compile_time = ctx.attr.print_compile_time,
217+
expect_java_output = ctx.attr.expect_java_output,
216218
plugin_arg = plugin_arg,
217219
cp = compiler_classpath,
218220
classpath_resource_src = _join_path(classpath_resources),
@@ -287,7 +289,7 @@ def _interim_java_provider_for_java_compilation(scala_output):
287289

288290
def try_to_compile_java_jar(ctx, scala_output, all_srcjars, java_srcs,
289291
implicit_junit_deps_needed_for_java_compilation):
290-
if not java_srcs and not all_srcjars:
292+
if not java_srcs and (not (all_srcjars and ctx.attr.expect_java_output)):
291293
return False
292294

293295
providers_of_dependencies = collect_java_providers_of(ctx.attr.deps)

scala/scala.bzl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ _common_attrs_for_plugin_bootstrapping = {
112112
"jvm_flags": attr.string_list(),
113113
"scalac_jvm_flags": attr.string_list(),
114114
"javac_jvm_flags": attr.string_list(),
115+
"expect_java_output": attr.bool(default = True, mandatory = False),
115116
"print_compile_time": attr.bool(default = False, mandatory = False),
116117
}
117118

src/java/io/bazel/rulesscala/scalac/CompileOptions.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public class CompileOptions {
99
public final String manifestPath;
1010
public final String[] scalaOpts;
1111
public final boolean printCompileTime;
12+
public final boolean expectJavaOutput;
1213
public final String[] pluginArgs;
1314
public final String classpath;
1415
public final String[] files;
@@ -36,12 +37,17 @@ public CompileOptions(List<String> args) {
3637

3738
scalaOpts = getCommaList(argMap, "ScalacOpts");
3839
printCompileTime = booleanGetOrFalse(argMap, "PrintCompileTime");
40+
expectJavaOutput = booleanGetOrTrue(argMap, "ExpectJavaOutput");
3941
pluginArgs = buildPluginArgs(getOrEmpty(argMap, "Plugins"));
4042
classpath = getOrError(argMap, "Classpath", "Must supply the classpath arg");
4143
files = getCommaList(argMap, "Files");
4244

4345
javaFiles = getCommaList(argMap, "JavaFiles");
4446

47+
if (!expectJavaOutput && javaFiles.length != 0) {
48+
throw new RuntimeException("Cannot hava java source files when no expected java output");
49+
}
50+
4551
sourceJars = getCommaList(argMap, "SourceJars");
4652
iJarEnabled = booleanGetOrFalse(argMap, "EnableIjar");
4753
if (iJarEnabled) {
@@ -150,6 +156,16 @@ private static boolean booleanGetOrFalse(Map<String, String> m, String k) {
150156
return false;
151157
}
152158

159+
private static boolean booleanGetOrTrue(Map<String, String> m, String k) {
160+
if (m.containsKey(k)) {
161+
String v = m.get(k);
162+
if (v.trim().equals("False") || v.trim().equals("false")) {
163+
return false;
164+
}
165+
}
166+
return true;
167+
}
168+
153169
public static String[] buildPluginArgs(String packedPlugins) {
154170
String[] pluginElements = packedPlugins.split(",");
155171
int numPlugins = 0;

src/java/io/bazel/rulesscala/scalac/ScalacProcessor.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ public void processRequest(List<String> args) throws Exception {
4747
List<File> scalaJarFiles = filterFilesByExtension(jarFiles, ".scala");
4848
List<File> javaJarFiles = filterFilesByExtension(jarFiles, ".java");
4949

50+
if (!ops.expectJavaOutput && !javaJarFiles.isEmpty()) {
51+
throw new RuntimeException(
52+
"Found java files in source jars but expect Java output is set to false");
53+
}
54+
5055
String[] scalaSources = collectSrcJarSources(ops.files, scalaJarFiles, javaJarFiles);
5156

5257
String[] javaSources = GenericWorker.appendToString(ops.javaFiles, javaJarFiles);

test/src/main/scala/scalarules/test/twitter_scrooge/BUILD

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,3 +200,13 @@ sh_test(
200200
],
201201
data = [":justscrooges"],
202202
)
203+
204+
sh_test(
205+
name = "java_jar_not_on_classpath",
206+
srcs = ["grep.sh"],
207+
args = [
208+
"_java.jar",
209+
"$(location :justscrooges)",
210+
],
211+
data = [":justscrooges"],
212+
)
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
load("//scala:scala.bzl", "scala_library")
2+
3+
scala_library(
4+
name = "java_source_jar",
5+
# JavaSourceJar.srcjar was constructed with
6+
# `jar -cfM JavaSourceJar.srcjar JavaSource.java`
7+
srcs = ["JavaSourceJar.srcjar"],
8+
expect_java_output = False,
9+
)
241 Bytes
Binary file not shown.

test_rules_scala.sh

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,14 @@ test_scala_library_expect_failure_on_missing_direct_java() {
185185
test_expect_failure_or_warning_on_missing_direct_deps_with_expected_message "${expected_message}" $test_target "--strict_java_deps=error"
186186
}
187187

188+
test_scala_library_expect_failure_on_java_in_src_jar_when_disabled() {
189+
test_target='//test_expect_failure/java_in_src_jar_when_disabled:java_source_jar'
190+
191+
expected_message=".*Found java files in source jars but expect Java output is set to false"
192+
193+
test_expect_failure_with_message "${expected_message}" $test_target
194+
}
195+
188196
test_scala_library_expect_better_failure_message_on_missing_transitive_dependency_labels_from_other_jvm_rules() {
189197
transitive_target='.*transitive_dependency_ijar.jar'
190198
direct_target='//test_expect_failure/missing_direct_deps/internal_deps:direct_java_provider_dependency'
@@ -858,6 +866,7 @@ $runner test_scala_library_expect_no_recompilation_on_internal_change_of_scala_d
858866
$runner test_scala_library_expect_no_recompilation_on_internal_change_of_java_dependency
859867
$runner test_scala_library_expect_no_java_recompilation_on_internal_change_of_scala_sibling
860868
$runner test_scala_library_expect_failure_on_missing_direct_java
869+
$runner test_scala_library_expect_failure_on_java_in_src_jar_when_disabled
861870
$runner bazel run test:test_scala_proto_server
862871
$runner test_scala_library_expect_failure_on_missing_direct_deps_warn_mode_java
863872
$runner test_scala_library_expect_better_failure_message_on_missing_transitive_dependency_labels_from_other_jvm_rules

twitter_scrooge/twitter_scrooge.bzl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,4 +302,5 @@ def scrooge_scala_library(name,
302302
],
303303
jvm_flags = jvm_flags,
304304
visibility = visibility,
305+
expect_java_output = False,
305306
)

0 commit comments

Comments
 (0)