Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion scala/private/rule_impls.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,7 @@ JavaFiles: {java_files}
Manifest: {manifest}
Plugins: {plugin_arg}
PrintCompileTime: {print_compile_time}
ExpectJavaOutput: {expect_java_output}
ResourceDests: {resource_dest}
ResourceJars: {resource_jars}
ResourceSrcs: {resource_src}
Expand All @@ -213,6 +214,7 @@ StatsfileOutput: {statsfile_output}
manifest = ctx.outputs.manifest.path,
scala_opts = ",".join(scalacopts),
print_compile_time = ctx.attr.print_compile_time,
expect_java_output = ctx.attr.expect_java_output,
plugin_arg = plugin_arg,
cp = compiler_classpath,
classpath_resource_src = _join_path(classpath_resources),
Expand Down Expand Up @@ -287,7 +289,7 @@ def _interim_java_provider_for_java_compilation(scala_output):

def try_to_compile_java_jar(ctx, scala_output, all_srcjars, java_srcs,
implicit_junit_deps_needed_for_java_compilation):
if not java_srcs and not all_srcjars:
if not java_srcs and (not (all_srcjars and ctx.attr.expect_java_output)):
return False

providers_of_dependencies = collect_java_providers_of(ctx.attr.deps)
Expand Down
1 change: 1 addition & 0 deletions scala/scala.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ _common_attrs_for_plugin_bootstrapping = {
"jvm_flags": attr.string_list(),
"scalac_jvm_flags": attr.string_list(),
"javac_jvm_flags": attr.string_list(),
"expect_java_output": attr.bool(default = True, mandatory = False),
"print_compile_time": attr.bool(default = False, mandatory = False),
}

Expand Down
16 changes: 16 additions & 0 deletions src/java/io/bazel/rulesscala/scalac/CompileOptions.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ public class CompileOptions {
public final String manifestPath;
public final String[] scalaOpts;
public final boolean printCompileTime;
public final boolean expectJavaOutput;
public final String[] pluginArgs;
public final String classpath;
public final String[] files;
Expand Down Expand Up @@ -36,12 +37,17 @@ public CompileOptions(List<String> args) {

scalaOpts = getCommaList(argMap, "ScalacOpts");
printCompileTime = booleanGetOrFalse(argMap, "PrintCompileTime");
expectJavaOutput = booleanGetOrTrue(argMap, "ExpectJavaOutput");
pluginArgs = buildPluginArgs(getOrEmpty(argMap, "Plugins"));
classpath = getOrError(argMap, "Classpath", "Must supply the classpath arg");
files = getCommaList(argMap, "Files");

javaFiles = getCommaList(argMap, "JavaFiles");

if (!expectJavaOutput && javaFiles.length != 0) {
throw new RuntimeException("Cannot hava java source files when no expected java output");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ianof sorry for the late eyes but aren’t you missing a test for this case? IIUC this is where java files are on srcs “regularly” (not in srcjar)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there is a test for this case: 1d00681#diff-9e850e1e0893c9ea027f87c0b45dffabR188

}

sourceJars = getCommaList(argMap, "SourceJars");
iJarEnabled = booleanGetOrFalse(argMap, "EnableIjar");
if (iJarEnabled) {
Expand Down Expand Up @@ -150,6 +156,16 @@ private static boolean booleanGetOrFalse(Map<String, String> m, String k) {
return false;
}

private static boolean booleanGetOrTrue(Map<String, String> m, String k) {
if (m.containsKey(k)) {
String v = m.get(k);
if (v.trim().equals("False") || v.trim().equals("false")) {
return false;
}
}
return true;
}

public static String[] buildPluginArgs(String packedPlugins) {
String[] pluginElements = packedPlugins.split(",");
int numPlugins = 0;
Expand Down
5 changes: 5 additions & 0 deletions src/java/io/bazel/rulesscala/scalac/ScalacProcessor.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ public void processRequest(List<String> args) throws Exception {
List<File> scalaJarFiles = filterFilesByExtension(jarFiles, ".scala");
List<File> javaJarFiles = filterFilesByExtension(jarFiles, ".java");

if (!ops.expectJavaOutput && !javaJarFiles.isEmpty()) {
throw new RuntimeException(
"Found java files in source jars but expect Java output is set to false");
}

String[] scalaSources = collectSrcJarSources(ops.files, scalaJarFiles, javaJarFiles);

String[] javaSources = GenericWorker.appendToString(ops.javaFiles, javaJarFiles);
Expand Down
10 changes: 10 additions & 0 deletions test/src/main/scala/scalarules/test/twitter_scrooge/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -200,3 +200,13 @@ sh_test(
],
data = [":justscrooges"],
)

sh_test(
name = "java_jar_not_on_classpath",
srcs = ["grep.sh"],
args = [
"_java.jar",
"$(location :justscrooges)",
],
data = [":justscrooges"],
)
9 changes: 9 additions & 0 deletions test_expect_failure/java_in_src_jar_when_disabled/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
load("//scala:scala.bzl", "scala_library")

scala_library(
name = "java_source_jar",
# JavaSourceJar.srcjar was constructed with
# `jar -cfM JavaSourceJar.srcjar JavaSource.java`
srcs = ["JavaSourceJar.srcjar"],
expect_java_output = False,
)
Binary file not shown.
9 changes: 9 additions & 0 deletions test_rules_scala.sh
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,14 @@ test_scala_library_expect_failure_on_missing_direct_java() {
test_expect_failure_or_warning_on_missing_direct_deps_with_expected_message "${expected_message}" $test_target "--strict_java_deps=error"
}

test_scala_library_expect_failure_on_java_in_src_jar_when_disabled() {
test_target='//test_expect_failure/java_in_src_jar_when_disabled:java_source_jar'

expected_message=".*Found java files in source jars but expect Java output is set to false"

test_expect_failure_with_message "${expected_message}" $test_target
}

test_scala_library_expect_better_failure_message_on_missing_transitive_dependency_labels_from_other_jvm_rules() {
transitive_target='.*transitive_dependency_ijar.jar'
direct_target='//test_expect_failure/missing_direct_deps/internal_deps:direct_java_provider_dependency'
Expand Down Expand Up @@ -858,6 +866,7 @@ $runner test_scala_library_expect_no_recompilation_on_internal_change_of_scala_d
$runner test_scala_library_expect_no_recompilation_on_internal_change_of_java_dependency
$runner test_scala_library_expect_no_java_recompilation_on_internal_change_of_scala_sibling
$runner test_scala_library_expect_failure_on_missing_direct_java
$runner test_scala_library_expect_failure_on_java_in_src_jar_when_disabled
$runner bazel run test:test_scala_proto_server
$runner test_scala_library_expect_failure_on_missing_direct_deps_warn_mode_java
$runner test_scala_library_expect_better_failure_message_on_missing_transitive_dependency_labels_from_other_jvm_rules
Expand Down
1 change: 1 addition & 0 deletions twitter_scrooge/twitter_scrooge.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -302,4 +302,5 @@ def scrooge_scala_library(name,
],
jvm_flags = jvm_flags,
visibility = visibility,
expect_java_output = False,
)