diff --git a/src/main/java/com/android/tools/metalava/model/ClassItem.kt b/src/main/java/com/android/tools/metalava/model/ClassItem.kt index a26b71b3448366b400bb3fd6c0f4ea6b59e5a204..0d072fa6103a9faaf16cf3bc35319c1f7f368eff 100644 --- a/src/main/java/com/android/tools/metalava/model/ClassItem.kt +++ b/src/main/java/com/android/tools/metalava/model/ClassItem.kt @@ -670,6 +670,18 @@ interface ClassItem : Item { if (!predicate.test(superClass)) { superClass.filteredInterfaceTypes(predicate, types, true, includeParents, target) } else if (includeSelf && superClass.isInterface()) { + // Special case: Arguably, IInterface should be included in the system API by the + // general rules. However, this was just added to the system API in 28 at the same + // time as metalava, which did not include some hidden super classes in its analysis. + // This is now marked as an incompatible API change, so treat this the same way as in + // API 28 until this is clarified. + if (superClass.simpleName() == "IInterface" && + (target.qualifiedName() == "android.telephony.mbms.vendor.MbmsDownloadServiceBase" || + target.qualifiedName() == "android.telephony.mbms.vendor.MbmsStreamingServiceBase") + ) { + return types + } + types.add(superClassType) if (includeParents) { superClass.filteredInterfaceTypes(predicate, types, true, includeParents, target)