From f9dc1da309779698fb15ef0415b4e3b7a462c2c3 Mon Sep 17 00:00:00 2001 From: Michael Hoisie Date: Fri, 26 Apr 2024 13:47:55 -0700 Subject: [PATCH] Fix SDK compat issues in 4.12 Update several shadows to use `isInAndroidSdk=false`, which disables shadowOf method generation. This fixes compile issues for apps that have compileSdkVersion < Q. --- .../sdkcompat/JavaClassResolveCompatibilityTest.java | 6 +++--- .../java/org/robolectric/shadows/ShadowVpnManagerTest.java | 4 ++-- .../org/robolectric/shadows/ShadowInformationElement.java | 5 ++++- .../robolectric/shadows/ShadowNativePositionedGlyphs.java | 1 + .../org/robolectric/shadows/ShadowNativeRenderEffect.java | 1 + .../org/robolectric/shadows/ShadowNativeRuntimeShader.java | 1 + .../org/robolectric/shadows/ShadowNativeTextRunShaper.java | 1 + .../org/robolectric/shadows/ShadowTranslationManager.java | 2 +- .../main/java/org/robolectric/shadows/ShadowVpnManager.java | 2 +- 9 files changed, 15 insertions(+), 8 deletions(-) diff --git a/integration_tests/sdkcompat/src/test/java/org/robolectric/integrationtests/sdkcompat/JavaClassResolveCompatibilityTest.java b/integration_tests/sdkcompat/src/test/java/org/robolectric/integrationtests/sdkcompat/JavaClassResolveCompatibilityTest.java index 5721d17a410..06324c734d0 100644 --- a/integration_tests/sdkcompat/src/test/java/org/robolectric/integrationtests/sdkcompat/JavaClassResolveCompatibilityTest.java +++ b/integration_tests/sdkcompat/src/test/java/org/robolectric/integrationtests/sdkcompat/JavaClassResolveCompatibilityTest.java @@ -6,6 +6,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.Shadows; /** * Test class for Java's class resolve compatibility test. We must keep it with Java instead of @@ -21,8 +23,6 @@ public void sdkIs29() { @Test public void shadowOf() { // https://github.com/robolectric/robolectric/issues/7095 - // Enable this assertion when resolving all shadowOf compatibility problem - // assertThat(Shadows.shadowOf((Application) ApplicationProvider.getApplicationContext())) - // .isNotNull(); + assertThat(Shadows.shadowOf(RuntimeEnvironment.getApplication())).isNotNull(); } } diff --git a/robolectric/src/test/java/org/robolectric/shadows/ShadowVpnManagerTest.java b/robolectric/src/test/java/org/robolectric/shadows/ShadowVpnManagerTest.java index dbf7250efd2..b47f5a1dcd8 100644 --- a/robolectric/src/test/java/org/robolectric/shadows/ShadowVpnManagerTest.java +++ b/robolectric/src/test/java/org/robolectric/shadows/ShadowVpnManagerTest.java @@ -1,7 +1,6 @@ package org.robolectric.shadows; import static com.google.common.truth.Truth.assertThat; -import static org.robolectric.Shadows.shadowOf; import android.content.Intent; import android.net.Ikev2VpnProfile; @@ -15,6 +14,7 @@ import org.junit.runner.RunWith; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import org.robolectric.shadow.api.Shadow; @RunWith(AndroidJUnit4.class) @Config(minSdk = VERSION_CODES.R) @@ -25,7 +25,7 @@ public class ShadowVpnManagerTest { @Before public void setUp() throws Exception { vpnManager = ApplicationProvider.getApplicationContext().getSystemService(VpnManager.class); - shadowVpnManager = shadowOf(vpnManager); + shadowVpnManager = Shadow.extract(vpnManager); } @Test diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowInformationElement.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowInformationElement.java index 76fc9a172ae..f1fcac40c40 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowInformationElement.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowInformationElement.java @@ -5,7 +5,10 @@ import org.robolectric.annotation.Implements; /** Shadow for {@link android.net.wifi.ScanResult.InformationElement}. */ -@Implements(value = ScanResult.InformationElement.class, minSdk = VERSION_CODES.R) +@Implements( + value = ScanResult.InformationElement.class, + minSdk = VERSION_CODES.R, + isInAndroidSdk = false) public class ShadowInformationElement { /** * A builder for creating ShadowInformationElement objects. Use build() to return the diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativePositionedGlyphs.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativePositionedGlyphs.java index 5b65023af08..63f20f28b4e 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativePositionedGlyphs.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativePositionedGlyphs.java @@ -15,6 +15,7 @@ value = PositionedGlyphs.class, minSdk = S.SDK_INT, shadowPicker = Picker.class, + isInAndroidSdk = false, callNativeMethodsByDefault = true) public class ShadowNativePositionedGlyphs { /** diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeRenderEffect.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeRenderEffect.java index d56feb57960..6d412495189 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeRenderEffect.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeRenderEffect.java @@ -16,6 +16,7 @@ value = RenderEffect.class, minSdk = O, shadowPicker = Picker.class, + isInAndroidSdk = false, callNativeMethodsByDefault = true) public class ShadowNativeRenderEffect { static { diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeRuntimeShader.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeRuntimeShader.java index c048f62c40c..712512c3714 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeRuntimeShader.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeRuntimeShader.java @@ -22,6 +22,7 @@ value = RuntimeShader.class, minSdk = O, shadowPicker = Picker.class, + isInAndroidSdk = false, callNativeMethodsByDefault = true) public class ShadowNativeRuntimeShader { diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeTextRunShaper.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeTextRunShaper.java index f6aed6be28a..c6cc10d68e1 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeTextRunShaper.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowNativeTextRunShaper.java @@ -14,6 +14,7 @@ value = TextRunShaper.class, minSdk = S.SDK_INT, shadowPicker = Picker.class, + isInAndroidSdk = false, callNativeMethodsByDefault = true) public class ShadowNativeTextRunShaper { diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowTranslationManager.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowTranslationManager.java index ed33b592896..afbc347dbe1 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowTranslationManager.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowTranslationManager.java @@ -11,7 +11,7 @@ import org.robolectric.annotation.Implements; /** Shadow for {@link TranslationManager}. */ -@Implements(value = TranslationManager.class, minSdk = VERSION_CODES.S) +@Implements(value = TranslationManager.class, minSdk = VERSION_CODES.S, isInAndroidSdk = false) public class ShadowTranslationManager { private final Table> onDeviceTranslationCapabilities = HashBasedTable.create(); diff --git a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowVpnManager.java b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowVpnManager.java index 99f807b07c8..17d150775a5 100644 --- a/shadows/framework/src/main/java/org/robolectric/shadows/ShadowVpnManager.java +++ b/shadows/framework/src/main/java/org/robolectric/shadows/ShadowVpnManager.java @@ -11,7 +11,7 @@ import org.robolectric.annotation.Implements; /** Shadow for {@link VpnManager}. */ -@Implements(value = VpnManager.class, minSdk = VERSION_CODES.R) +@Implements(value = VpnManager.class, minSdk = VERSION_CODES.R, isInAndroidSdk = false) public class ShadowVpnManager { private VpnProfileState vpnProfileState;