[go: nahoru, domu]

Add deprecation suppressions to generated fromBundle

The getParcelableArray() and get() functions on Bundle have been
deprecated in SDK 33. This causes warning in the generated Safe Args
classes that use the fromBundle function with custom types.

We need to continue to use the old functions since we need to support
older platform versions so we should suppress the warnings on these
calls.

RelNote: "Navigation Safe Args will no longer cause deprecation warnings
in generated classes when using custom types."
Test: ./gradlew :navigation:navigation-safe-args-generator:test
--rerun-tasks
Bug: 237725966

Change-Id: Id86edf231b90176b5a0f03239bff628171a0284c
diff --git a/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/java/JavaNavWriter.kt b/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/java/JavaNavWriter.kt
index 4ec2cfb..e9ae219 100644
--- a/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/java/JavaNavWriter.kt
+++ b/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/java/JavaNavWriter.kt
@@ -205,7 +205,15 @@
         val fromBundleMethod = MethodSpec.methodBuilder("fromBundle").apply {
             addAnnotation(annotations.NONNULL_CLASSNAME)
             addModifiers(Modifier.PUBLIC, Modifier.STATIC)
-            addAnnotation(specs.suppressAnnotationSpec)
+            if (args.any { it.type is ObjectArrayType || it.type is ObjectType }) {
+                addAnnotation(
+                    specs.suppressAnnotationSpec.toBuilder()
+                        .addMember("value", "$S", "deprecation")
+                        .build()
+                )
+            } else {
+                addAnnotation(specs.suppressAnnotationSpec)
+            }
             val bundle = "bundle"
             addParameter(
                 ParameterSpec.builder(BUNDLE_CLASSNAME, bundle)
diff --git a/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/kotlin/KotlinNavWriter.kt b/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/kotlin/KotlinNavWriter.kt
index 2ab4454..de7bb7b 100644
--- a/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/kotlin/KotlinNavWriter.kt
+++ b/navigation/navigation-safe-args-generator/src/main/kotlin/androidx/navigation/safe/args/generator/kotlin/KotlinNavWriter.kt
@@ -222,7 +222,13 @@
             if (destination.args.any { it.type is ObjectArrayType }) {
                 addAnnotation(
                     AnnotationSpec.builder(Suppress::class)
-                        .addMember("%S", "UNCHECKED_CAST")
+                        .addMember("%S,%S", "UNCHECKED_CAST", "DEPRECATION")
+                        .build()
+                )
+            } else if (destination.args.any { it.type is ObjectType }) {
+                addAnnotation(
+                    AnnotationSpec.builder(Suppress::class)
+                        .addMember("%S", "DEPRECATION")
                         .build()
                 )
             }
diff --git a/navigation/navigation-safe-args-generator/src/test/test-data/expected/java_nav_writer_test/MainFragmentArgs.java b/navigation/navigation-safe-args-generator/src/test/test-data/expected/java_nav_writer_test/MainFragmentArgs.java
index 246b480..ab257cd 100644
--- a/navigation/navigation-safe-args-generator/src/test/test-data/expected/java_nav_writer_test/MainFragmentArgs.java
+++ b/navigation/navigation-safe-args-generator/src/test/test-data/expected/java_nav_writer_test/MainFragmentArgs.java
@@ -29,7 +29,7 @@
     }
 
     @NonNull
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings({"unchecked","deprecation"})
     public static MainFragmentArgs fromBundle(@NonNull Bundle bundle) {
         MainFragmentArgs __result = new MainFragmentArgs();
         bundle.setClassLoader(MainFragmentArgs.class.getClassLoader());
diff --git a/navigation/navigation-safe-args-generator/src/test/test-data/expected/kotlin_nav_writer_test/MainFragmentArgs.kt b/navigation/navigation-safe-args-generator/src/test/test-data/expected/kotlin_nav_writer_test/MainFragmentArgs.kt
index c321c7c..478ecd3 100644
--- a/navigation/navigation-safe-args-generator/src/test/test-data/expected/kotlin_nav_writer_test/MainFragmentArgs.kt
+++ b/navigation/navigation-safe-args-generator/src/test/test-data/expected/kotlin_nav_writer_test/MainFragmentArgs.kt
@@ -80,7 +80,7 @@
 
   public companion object {
     @JvmStatic
-    @Suppress("UNCHECKED_CAST")
+    @Suppress("UNCHECKED_CAST","DEPRECATION")
     public fun fromBundle(bundle: Bundle): MainFragmentArgs {
       bundle.setClassLoader(MainFragmentArgs::class.java.classLoader)
       val __main : String?