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

Commit adb18952 authored by Martin Stjernholm's avatar Martin Stjernholm Committed by Paul Duffin
Browse files

Fix special case when appending a visibility rule to //visibility:private.

Test: m nothing
Bug: 151303681
Merged-In: Ibe7e953219e4660c653063e87cb08407a2cb513d
Change-Id: Ibe7e953219e4660c653063e87cb08407a2cb513d
(cherry picked from commit 64aeaadd)
parent f8533bc6
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -500,6 +500,17 @@ func EffectiveVisibilityRules(ctx BaseModuleContext, module Module) []string {
	// without checking the visibility rules. Here we need to add that visibility
	// explicitly.
	if rule != nil && !rule.matches(qualified) {
		if len(rule) == 1 {
			if _, ok := rule[0].(privateRule); ok {
				// If the rule is //visibility:private we can't append another
				// visibility to it. Semantically we need to convert it to a package
				// visibility rule for the location where the result is used, but since
				// modules are implicitly visible within the package we get the same
				// result without any rule at all, so just make it an empty list to be
				// appended below.
				rule = compositeRule{}
			}
		}
		rule = append(rule, packageRule{dir})
	}

+24 −0
Original line number Diff line number Diff line
@@ -103,6 +103,7 @@ func TestSnapshotVisibility(t *testing.T) {
				"myjavalib",
				"mypublicjavalib",
				"mydefaultedjavalib",
				"myprivatejavalib",
			],
		}

@@ -140,6 +141,14 @@ func TestSnapshotVisibility(t *testing.T) {
			system_modules: "none",
			sdk_version: "none",
		}

		java_library {
			name: "myprivatejavalib",
			srcs: ["Test.java"],
			visibility: ["//visibility:private"],
			system_modules: "none",
			sdk_version: "none",
		}
	`

	result := testSdkWithFs(t, ``,
@@ -206,6 +215,20 @@ java_import {
    jars: ["java/mydefaultedjavalib.jar"],
}

java_import {
    name: "mysdk_myprivatejavalib@current",
    sdk_member_name: "myprivatejavalib",
    visibility: ["//package"],
    jars: ["java/myprivatejavalib.jar"],
}

java_import {
    name: "myprivatejavalib",
    prefer: false,
    visibility: ["//package"],
    jars: ["java/myprivatejavalib.jar"],
}

sdk_snapshot {
    name: "mysdk@current",
    visibility: [
@@ -216,6 +239,7 @@ sdk_snapshot {
        "mysdk_myjavalib@current",
        "mysdk_mypublicjavalib@current",
        "mysdk_mydefaultedjavalib@current",
        "mysdk_myprivatejavalib@current",
    ],
}
`))