Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dd93636f authored by Zi Wang's avatar Zi Wang
Browse files

Always drop deps from java_library with no srcs

This is the follow up from aosp/2750763

Test: CI and added unit test

Bug: 285952385
Change-Id: I64703ee4fa742b718ffb43f2af1b6ab43ddeb606
parent f038cde8
Loading
Loading
Loading
Loading
+24 −21
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@
package bp2build

import (
	"fmt"
	"testing"

	"android/soong/android"
@@ -143,26 +142,6 @@ java_library {
	})
}

func TestJavaLibraryFailsToConvertLibsWithNoSrcs(t *testing.T) {
	runJavaLibraryTestCase(t, Bp2buildTestCase{
		ExpectedErr: fmt.Errorf("Module has direct dependencies but no sources. Bazel will not allow this."),
		Blueprint: `java_library {
    name: "java-lib-1",
    libs: ["java-lib-2"],
    sdk_version: "current",
    bazel_module: { bp2build_available: true },
}

java_library {
    name: "java-lib-2",
    srcs: ["a.java"],
    sdk_version: "current",
    bazel_module: { bp2build_available: false },
}`,
		ExpectedBazelTargets: []string{},
	})
}

func TestJavaLibraryPlugins(t *testing.T) {
	runJavaLibraryTestCaseWithRegistrationCtxFunc(t, Bp2buildTestCase{
		Blueprint: `java_library {
@@ -869,6 +848,30 @@ func TestJavaLibraryKotlinCommonSrcs(t *testing.T) {
	})
}

func TestJavaLibraryLibsWithNoSrcs(t *testing.T) {
	runJavaLibraryTestCase(t, Bp2buildTestCase{
		Description: "java_library that has libs but no srcs",
		Blueprint: `java_library {
    name: "java-lib-1",
    libs: ["java-lib-2"],
    sdk_version: "current",
    bazel_module: { bp2build_available: true },
}

java_library{
    name: "java-lib-2",
    bazel_module: { bp2build_available: false },
}
`,
		ExpectedBazelTargets: []string{
			MakeBazelTarget("java_library", "java-lib-1", AttrNameToString{
				"sdk_version": `"current"`,
			}),
			MakeNeverlinkDuplicateTarget("java_library", "java-lib-1"),
		},
	})
}

func TestJavaLibraryArchVariantDeps(t *testing.T) {
	runJavaLibraryTestCase(t, Bp2buildTestCase{
		Description: "java_library with arch variant libs",
+10 −20
Original line number Diff line number Diff line
@@ -2888,7 +2888,6 @@ type bp2BuildJavaInfo struct {
	// separates dependencies into dynamic dependencies and static dependencies.
	DepLabels *javaDependencyLabels
	hasKotlin bool
	onlyProtoInSrcs bool
}

func javaXsdTargetName(xsd android.XsdConfigBp2buildTargets) string {
@@ -2951,9 +2950,6 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext)

	staticDeps.Append(srcPartitions[xsdSrcPartition])

	_, protoInSrcs := srcPartitions[protoSrcPartition]
	onlyProtoInSrcs := protoInSrcs && len(srcPartitions) == 1

	if !srcPartitions[logtagSrcPartition].IsEmpty() {
		logtagsLibName := m.Name() + "_logtags"
		ctx.CreateBazelTargetModule(
@@ -3093,7 +3089,6 @@ func (m *Library) convertLibraryAttrsBp2Build(ctx android.TopDownMutatorContext)
	bp2BuildInfo := &bp2BuildJavaInfo{
		DepLabels: depLabels,
		hasKotlin: hasKotlin,
		onlyProtoInSrcs: onlyProtoInSrcs,
	}

	return commonAttrs, bp2BuildInfo, true
@@ -3137,17 +3132,12 @@ func javaLibraryBp2Build(ctx android.TopDownMutatorContext, m *Library) {
	if !commonAttrs.Srcs.IsEmpty() {
		deps.Append(exports) // we should only append these if there are sources to use them
	} else if !deps.IsEmpty() {
		if bp2BuildInfo.onlyProtoInSrcs {
		// java_library does not accept deps when there are no srcs because
		// there is no compilation happening, but it accepts exports.
			// bp2build converts this module to 2 java_libraries + java_xx_proto_library + proto_library
			// the non-empty deps here are not necessary for compiling the protos, in which case
			// they're unnecessary as deps on the java_library as well since they aren't
			// being propagated to any dependencies. So we can drop deps here.
		// The non-empty deps here are unnecessary as deps on the java_library
		// since they aren't being propagated to any dependencies.
		// So we can drop deps here.
		deps = bazel.LabelListAttribute{}
		} else {
			ctx.ModuleErrorf("Module has direct dependencies but no sources. Bazel will not allow this.")
		}
	}
	var props bazel.BazelTargetModuleProperties
	attrs := &javaLibraryAttributes{