Skip to content

Commit b5db379

Browse files
kotlajacopybara-github
authored andcommitted
Set neverlink inside java_common.merge
I've added 3 tests inside JavaStarlarkApiTest which check whether neverlink is propagated with: 1. JavaInfo constructor 2. java_common.compile 3. java_common.merge PiperOrigin-RevId: 483415276 Change-Id: I862c938f1ade5e9ccc9d740115cb02f65733e695
1 parent d60ce2c commit b5db379

File tree

4 files changed

+112
-1
lines changed

4 files changed

+112
-1
lines changed

src/main/java/com/google/devtools/build/lib/rules/java/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ java_library(
7373
"//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
7474
"//src/main/java/net/starlark/java/eval",
7575
"//src/main/java/net/starlark/java/syntax",
76+
"//third_party:error_prone_annotations",
7677
"//third_party:guava",
7778
"//third_party:jsr305",
7879
],

src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
3939
import com.google.devtools.build.lib.starlarkbuildapi.cpp.CcInfoApi;
4040
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaInfoApi;
41+
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaInfoApi.JavaInfoProviderApi;
4142
import com.google.devtools.build.lib.starlarkbuildapi.java.JavaModuleFlagsProviderApi;
4243
import com.google.errorprone.annotations.CanIgnoreReturnValue;
4344
import java.util.ArrayList;
@@ -136,11 +137,13 @@ public static JavaInfo merge(
136137

137138
NestedSetBuilder<Artifact> runtimeJars = NestedSetBuilder.stableOrder();
138139
NestedSetBuilder<String> javaConstraints = NestedSetBuilder.stableOrder();
140+
boolean neverlink = false;
139141
for (JavaInfo javaInfo : providers) {
140142
if (mergeJavaOutputs) {
141143
runtimeJars.addAll(javaInfo.getDirectRuntimeJars());
142144
}
143145
javaConstraints.addAll(javaInfo.getJavaConstraints());
146+
neverlink = neverlink || javaInfo.neverlink;
144147
}
145148

146149
ImmutableList<JavaModuleFlagsProvider> javaModuleFlagsProviderProviders =
@@ -162,6 +165,7 @@ public static JavaInfo merge(
162165
// TODO(iirina): merge or remove JavaCompilationInfoProvider
163166
.setRuntimeJars(runtimeJars.build().toList())
164167
.setJavaConstraints(javaConstraints.build().toList())
168+
.setNeverlink(neverlink)
165169
.addProvider(
166170
JavaModuleFlagsProvider.class,
167171
JavaModuleFlagsProvider.merge(javaModuleFlagsProviderProviders));

src/test/java/com/google/devtools/build/lib/rules/java/BUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,6 @@ java_test(
168168
"//src/main/java/com/google/devtools/build/lib/packages",
169169
"//src/main/java/com/google/devtools/build/lib/rules/cpp",
170170
"//src/main/java/com/google/devtools/build/lib/rules/java:java-compilation",
171-
"//src/main/java/com/google/devtools/build/lib/rules/java:java-rules",
172171
"//src/main/java/com/google/devtools/build/lib/util:filetype",
173172
"//src/main/java/net/starlark/java/eval",
174173
"//src/test/java/com/google/devtools/build/lib/actions/util",

src/test/java/com/google/devtools/build/lib/rules/java/JavaStarlarkApiTest.java

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2234,6 +2234,113 @@ public void javaCommonCompileNeverlink() throws Exception {
22342234
.isEqualTo("plugin.jar libsomedep.jar");
22352235
}
22362236

2237+
@Test
2238+
public void javaInfoConstructorWithNeverlink() throws Exception {
2239+
JavaToolchainTestUtil.writeBuildFileForJavaToolchain(scratch);
2240+
scratch.file(
2241+
"java/test/BUILD",
2242+
"load(':custom_rule.bzl', 'java_custom_library')",
2243+
"java_custom_library(name = 'somedep')");
2244+
scratch.file(
2245+
"java/test/custom_rule.bzl",
2246+
"def _impl(ctx):",
2247+
" output_jar = ctx.actions.declare_file('lib' + ctx.label.name + '.jar')",
2248+
" ctx.actions.write(output_jar, '')",
2249+
" java_info = JavaInfo(",
2250+
" output_jar = output_jar,",
2251+
" compile_jar = None,",
2252+
" neverlink = True,",
2253+
" )",
2254+
" return [",
2255+
" java_info",
2256+
" ]",
2257+
"java_custom_library = rule(",
2258+
" implementation = _impl,",
2259+
" fragments = ['java'],",
2260+
" provides = [JavaInfo],",
2261+
")");
2262+
2263+
ConfiguredTarget target = getConfiguredTarget("//java/test:somedep");
2264+
2265+
JavaInfo javaInfo = (JavaInfo) target.get(JavaInfo.PROVIDER.getKey());
2266+
assertThat(javaInfo.isNeverlink()).isTrue();
2267+
}
2268+
2269+
@Test
2270+
public void javaCommonMergeWithNeverlink() throws Exception {
2271+
JavaToolchainTestUtil.writeBuildFileForJavaToolchain(scratch);
2272+
scratch.file(
2273+
"java/test/BUILD",
2274+
"load(':custom_rule.bzl', 'java_custom_library')",
2275+
"java_custom_library(name = 'somedep')");
2276+
scratch.file(
2277+
"java/test/custom_rule.bzl",
2278+
"def _impl(ctx):",
2279+
" output_jar = ctx.actions.declare_file('lib' + ctx.label.name + '.jar')",
2280+
" ctx.actions.write(output_jar, '')",
2281+
" java_info_with_neverlink = JavaInfo(",
2282+
" output_jar = output_jar,",
2283+
" compile_jar = None,",
2284+
" neverlink = True,",
2285+
" )",
2286+
" java_info_without_neverlink = JavaInfo(",
2287+
" output_jar = output_jar,",
2288+
" compile_jar = None,",
2289+
" )",
2290+
" java_info = java_common.merge([java_info_with_neverlink, java_info_without_neverlink])",
2291+
" return [",
2292+
" java_info",
2293+
" ]",
2294+
"java_custom_library = rule(",
2295+
" implementation = _impl,",
2296+
" fragments = ['java'],",
2297+
" provides = [JavaInfo],",
2298+
")");
2299+
2300+
ConfiguredTarget target = getConfiguredTarget("//java/test:somedep");
2301+
2302+
JavaInfo javaInfo = (JavaInfo) target.get(JavaInfo.PROVIDER.getKey());
2303+
assertThat(javaInfo.isNeverlink()).isTrue();
2304+
}
2305+
2306+
@Test
2307+
public void javaCommonCompileWithNeverlink() throws Exception {
2308+
JavaToolchainTestUtil.writeBuildFileForJavaToolchain(scratch);
2309+
scratch.file(
2310+
"java/test/BUILD",
2311+
"load(':custom_rule.bzl', 'java_custom_library')",
2312+
"java_custom_library(name = 'somedep',",
2313+
" srcs = ['Dependency.java'])");
2314+
scratch.file(
2315+
"java/test/custom_rule.bzl",
2316+
"def _impl(ctx):",
2317+
" output_jar = ctx.actions.declare_file('lib' + ctx.label.name + '.jar')",
2318+
" java_info = java_common.compile(",
2319+
" ctx,",
2320+
" source_files = ctx.files.srcs,",
2321+
" output = output_jar,",
2322+
" java_toolchain = ctx.attr._java_toolchain[java_common.JavaToolchainInfo],",
2323+
" neverlink = True,",
2324+
" )",
2325+
" return [",
2326+
" java_info",
2327+
" ]",
2328+
"java_custom_library = rule(",
2329+
" implementation = _impl,",
2330+
" attrs = {",
2331+
" 'srcs': attr.label_list(allow_files=['.java']),",
2332+
" '_java_toolchain': attr.label(default = Label('//java/com/google/test:toolchain')),",
2333+
" },",
2334+
" fragments = ['java'],",
2335+
" provides = [JavaInfo],",
2336+
")");
2337+
2338+
ConfiguredTarget target = getConfiguredTarget("//java/test:somedep");
2339+
2340+
JavaInfo javaInfo = (JavaInfo) target.get(JavaInfo.PROVIDER.getKey());
2341+
assertThat(javaInfo.isNeverlink()).isTrue();
2342+
}
2343+
22372344
/**
22382345
* Tests that java_common.compile propagates native libraries from deps, runtime_deps, and
22392346
* exports.

0 commit comments

Comments
 (0)