diff options
| -rw-r--r-- | apex/apex.go | 8 | ||||
| -rw-r--r-- | apex/apex_test.go | 58 |
2 files changed, 66 insertions, 0 deletions
diff --git a/apex/apex.go b/apex/apex.go index 51fa0d614..fc945422c 100644 --- a/apex/apex.go +++ b/apex/apex.go @@ -1011,6 +1011,14 @@ func apexStrictUpdatibilityLintMutator(mctx android.TopDownMutatorContext) { } if apex, ok := mctx.Module().(*apexBundle); ok && apex.checkStrictUpdatabilityLinting() { mctx.WalkDeps(func(child, parent android.Module) bool { + // b/208656169 Do not propagate strict updatability linting to libcore/ + // These libs are available on the classpath during compilation + // These libs are transitive deps of the sdk. See java/sdk.go:decodeSdkDep + // Only skip libraries defined in libcore root, not subdirectories + if mctx.OtherModuleDir(child) == "libcore" { + // Do not traverse transitive deps of libcore/ libs + return false + } if lintable, ok := child.(java.LintDepSetsIntf); ok { lintable.SetStrictUpdatabilityLinting(true) } diff --git a/apex/apex_test.go b/apex/apex_test.go index 9c6f8cbee..1062e758f 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -8937,6 +8937,64 @@ func TestApexStrictUpdtabilityLint(t *testing.T) { } } +func TestUpdatabilityLintSkipLibcore(t *testing.T) { + bp := ` + apex { + name: "myapex", + key: "myapex.key", + java_libs: ["myjavalib"], + updatable: true, + min_sdk_version: "29", + } + apex_key { + name: "myapex.key", + } + java_library { + name: "myjavalib", + srcs: ["MyClass.java"], + apex_available: [ "myapex" ], + sdk_version: "current", + min_sdk_version: "29", + } + ` + + testCases := []struct { + testCaseName string + moduleDirectory string + disallowedFlagExpected bool + }{ + { + testCaseName: "lintable module defined outside libcore", + moduleDirectory: "", + disallowedFlagExpected: true, + }, + { + testCaseName: "lintable module defined in libcore root directory", + moduleDirectory: "libcore/", + disallowedFlagExpected: false, + }, + { + testCaseName: "lintable module defined in libcore child directory", + moduleDirectory: "libcore/childdir/", + disallowedFlagExpected: true, + }, + } + + for _, testCase := range testCases { + lintFileCreator := android.FixtureAddTextFile(testCase.moduleDirectory+"lint-baseline.xml", "") + bpFileCreator := android.FixtureAddTextFile(testCase.moduleDirectory+"Android.bp", bp) + result := testApex(t, "", lintFileCreator, bpFileCreator) + myjavalib := result.ModuleForTests("myjavalib", "android_common_apex29") + sboxProto := android.RuleBuilderSboxProtoForTests(t, myjavalib.Output("lint.sbox.textproto")) + cmdFlags := fmt.Sprintf("--baseline %vlint-baseline.xml --disallowed_issues NewApi", testCase.moduleDirectory) + disallowedFlagActual := strings.Contains(*sboxProto.Commands[0].Command, cmdFlags) + + if disallowedFlagActual != testCase.disallowedFlagExpected { + t.Errorf("Failed testcase: %v \nActual lint cmd: %v", testCase.testCaseName, *sboxProto.Commands[0].Command) + } + } +} + // checks transtive deps of an apex coming from bootclasspath_fragment func TestApexStrictUpdtabilityLintBcpFragmentDeps(t *testing.T) { bp := ` |