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

This commit is contained in:
Treehugger Robot 2020-05-15 14:08:24 +00:00 committed by Gerrit Code Review
commit e3fa145692
2 changed files with 35 additions and 0 deletions

View File

@ -500,6 +500,17 @@ func EffectiveVisibilityRules(ctx BaseModuleContext, module Module) []string {
// without checking the visibility rules. Here we need to add that visibility // without checking the visibility rules. Here we need to add that visibility
// explicitly. // explicitly.
if rule != nil && !rule.matches(qualified) { 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}) rule = append(rule, packageRule{dir})
} }

View File

@ -103,6 +103,7 @@ func TestSnapshotVisibility(t *testing.T) {
"myjavalib", "myjavalib",
"mypublicjavalib", "mypublicjavalib",
"mydefaultedjavalib", "mydefaultedjavalib",
"myprivatejavalib",
], ],
} }
@ -140,6 +141,14 @@ func TestSnapshotVisibility(t *testing.T) {
system_modules: "none", system_modules: "none",
sdk_version: "none", sdk_version: "none",
} }
java_library {
name: "myprivatejavalib",
srcs: ["Test.java"],
visibility: ["//visibility:private"],
system_modules: "none",
sdk_version: "none",
}
` `
result := testSdkWithFs(t, ``, result := testSdkWithFs(t, ``,
@ -206,6 +215,20 @@ java_import {
jars: ["java/mydefaultedjavalib.jar"], 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 { sdk_snapshot {
name: "mysdk@current", name: "mysdk@current",
visibility: [ visibility: [
@ -216,6 +239,7 @@ sdk_snapshot {
"mysdk_myjavalib@current", "mysdk_myjavalib@current",
"mysdk_mypublicjavalib@current", "mysdk_mypublicjavalib@current",
"mysdk_mydefaultedjavalib@current", "mysdk_mydefaultedjavalib@current",
"mysdk_myprivatejavalib@current",
], ],
} }
`)) `))