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) {