Propagate effectivelyDeprecated after setting removed

Previously, the `effectivelyDeprecated` property was propagated in the
`visitItem(Item)` method which was called before all the `visit<X>()`
type specific methods. That was a problem as it is necessary to modify
it to take into account the `removed` property. So, this change adds
`markAsDeprecatedIfNonPackageParentIsDeprecated` and calls it
explicitly at the end of the `visit<X>()` methods in preparation for a
follow up change that will factor in the `removed` value.

Bug: 315206833
Test: ./gradlew
Change-Id: I2bdd0622adb5c7d1199531db4c7b64d799e2e61e
diff --git a/metalava/src/main/java/com/android/tools/metalava/ApiAnalyzer.kt b/metalava/src/main/java/com/android/tools/metalava/ApiAnalyzer.kt
index 394bebb..1efb4e2 100644
--- a/metalava/src/main/java/com/android/tools/metalava/ApiAnalyzer.kt
+++ b/metalava/src/main/java/com/android/tools/metalava/ApiAnalyzer.kt
@@ -611,7 +611,14 @@
     private fun propagateHiddenRemovedAndDocOnly() {
         packages.accept(
             object : BaseItemVisitor(visitConstructorsAsMethods = true, nestInnerClasses = true) {
-                override fun visitItem(item: Item) {
+                /**
+                 * Mark [item] as deprecated if [Item.parent] is deprecated, and it is not a
+                 * package.
+                 *
+                 * This must be called from the type specific `visit*()` methods after any other
+                 * logic as it will depend on the value of [Item.removed] set in that method.
+                 */
+                private fun markAsDeprecatedIfNonPackageParentIsDeprecated(item: Item) {
                     val parent = item.parent() ?: return
                     if (parent !is PackageItem && parent.effectivelyDeprecated) {
                         item.effectivelyDeprecated = true
@@ -686,6 +693,8 @@
                             cls.removed = true
                         }
                     }
+
+                    markAsDeprecatedIfNonPackageParentIsDeprecated(cls)
                 }
 
                 override fun visitMethod(method: MethodItem) {
@@ -715,6 +724,12 @@
                             method.removed = true
                         }
                     }
+
+                    markAsDeprecatedIfNonPackageParentIsDeprecated(method)
+                }
+
+                override fun visitParameter(parameter: ParameterItem) {
+                    markAsDeprecatedIfNonPackageParentIsDeprecated(parameter)
                 }
 
                 override fun visitField(field: FieldItem) {
@@ -740,6 +755,12 @@
                             field.removed = true
                         }
                     }
+
+                    markAsDeprecatedIfNonPackageParentIsDeprecated(field)
+                }
+
+                override fun visitProperty(property: PropertyItem) {
+                    markAsDeprecatedIfNonPackageParentIsDeprecated(property)
                 }
 
                 private fun ensureParentVisible(item: Item) {