From 043f5e78811df7cff70aeefec99e7f8172bf48ab Mon Sep 17 00:00:00 2001 From: Paul Duffin Date: Fri, 5 Mar 2021 00:00:01 +0000 Subject: [PATCH] Treat core_platform as stable unless module uses legacy The sdk_version: "core_platform" refers to the stable core platform unless the module is in the exception list. This change makes sure that CheckStableSdkVersion() reflects that behavior. Bug: 180399951 Test: m nothing Change-Id: Ia0b1e13322352b87f5a3c6621e37f23ba637ffb6 --- apex/apex_test.go | 9 ++++++--- java/java.go | 11 ++++++++++- java/legacy_core_platform_api_usage.go | 6 +++++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/apex/apex_test.go b/apex/apex_test.go index 3e5ba7fc7..44ddbcbc1 100644 --- a/apex/apex_test.go +++ b/apex/apex_test.go @@ -1971,7 +1971,7 @@ func TestJavaStableSdkVersion(t *testing.T) { java_library { name: "myjar", srcs: ["foo/bar/MyClass.java"], - sdk_version: "core_platform", + sdk_version: "test_current", apex_available: ["myapex"], } `, @@ -2018,13 +2018,16 @@ func TestJavaStableSdkVersion(t *testing.T) { java_library { name: "myjar", srcs: ["foo/bar/MyClass.java"], - sdk_version: "core_platform", + sdk_version: "test_current", apex_available: ["myapex"], } `, }, { - name: "Updatable apex with non-stable transitive dep", + name: "Updatable apex with non-stable transitive dep", + // This is not actually detecting that the transitive dependency is unstable, rather it is + // detecting that the transitive dependency is building against a wider API surface than the + // module that depends on it is using. expectedError: "compiles against Android API, but dependency \"transitive-jar\" is compiling against private API.", bp: ` apex { diff --git a/java/java.go b/java/java.go index 9e3583501..2f8edff62 100644 --- a/java/java.go +++ b/java/java.go @@ -122,7 +122,16 @@ func (j *Module) CheckStableSdkVersion() error { if sdkVersion.stable() { return nil } - return fmt.Errorf("non stable SDK %v", sdkVersion) + if sdkVersion.kind == sdkCorePlatform { + if useLegacyCorePlatformApiByName(j.BaseModuleName()) { + return fmt.Errorf("non stable SDK %v - uses legacy core platform", sdkVersion) + } else { + // Treat stable core platform as stable. + return nil + } + } else { + return fmt.Errorf("non stable SDK %v", sdkVersion) + } } func (j *Module) checkSdkVersions(ctx android.ModuleContext) { diff --git a/java/legacy_core_platform_api_usage.go b/java/legacy_core_platform_api_usage.go index 874338d10..7927d2aed 100644 --- a/java/legacy_core_platform_api_usage.go +++ b/java/legacy_core_platform_api_usage.go @@ -160,7 +160,11 @@ func init() { } func useLegacyCorePlatformApi(ctx android.EarlyModuleContext) bool { - _, found := legacyCorePlatformApiLookup[ctx.ModuleName()] + return useLegacyCorePlatformApiByName(ctx.ModuleName()) +} + +func useLegacyCorePlatformApiByName(name string) bool { + _, found := legacyCorePlatformApiLookup[name] return found }