diff --git a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiOutputExtension.kt b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiOutputExtension.kt index 58e3e2c3847..bed777a15e2 100644 --- a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiOutputExtension.kt +++ b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiOutputExtension.kt @@ -150,10 +150,15 @@ class JvmAbiOutputExtension( override fun visitEnd() {} }, 0) + innerClassesToKeep.retainAll(innerClassInfos.keys) for (name in innerClassesToKeep.toList()) { - val info = innerClassInfos[name] ?: continue - generateSequence(info) { it.outerName?.takeIf(innerClassesToKeep::add)?.let(innerClassInfos::get) } - .forEach { writer.visitInnerClass(it.name, it.outerName, it.innerName, it.access) } + var info = innerClassInfos[name] + while (info != null) { + info = info.outerName?.takeIf(innerClassesToKeep::add)?.let(innerClassInfos::get) + } + } + for (name in innerClassesToKeep.sorted()) { + innerClassInfos[name]?.let { writer.visitInnerClass(it.name, it.outerName, it.innerName, it.access) } } writer.visitEnd() diff --git a/plugins/jvm-abi-gen/testData/content/class/signatures.txt b/plugins/jvm-abi-gen/testData/content/class/signatures.txt index c6e0393eedd..9c5e866a3d1 100644 --- a/plugins/jvm-abi-gen/testData/content/class/signatures.txt +++ b/plugins/jvm-abi-gen/testData/content/class/signatures.txt @@ -21,15 +21,15 @@ public class test/BaseClass { @kotlin.Metadata public final class test/Class$NestedInnerClass$NestedNestedInnerClass { // source: 'classes.kt' - public final inner class test/Class$NestedInnerClass$NestedNestedInnerClass private final inner class test/Class$NestedInnerClass + public final inner class test/Class$NestedInnerClass$NestedNestedInnerClass public method (): void } @kotlin.Metadata final class test/Class$NestedInnerClass { // source: 'classes.kt' - public final inner class test/Class$NestedInnerClass$NestedNestedInnerClass private final inner class test/Class$NestedInnerClass + public final inner class test/Class$NestedInnerClass$NestedNestedInnerClass public method (): void } @kotlin.Metadata diff --git a/plugins/jvm-abi-gen/testData/content/innerClasses/signatures.txt b/plugins/jvm-abi-gen/testData/content/innerClasses/signatures.txt index 1691dceda99..bdc5b748fe6 100644 --- a/plugins/jvm-abi-gen/testData/content/innerClasses/signatures.txt +++ b/plugins/jvm-abi-gen/testData/content/innerClasses/signatures.txt @@ -6,15 +6,15 @@ public annotation class Anno { @kotlin.Metadata public final class InAnnotation { // source: 'innerClasses.kt' - public inner class Outer$Middle$Inner public inner class Outer$Middle + public inner class Outer$Middle$Inner public method (): void } @kotlin.Metadata public final class InInlineMethod { // source: 'innerClasses.kt' - public inner class Outer$Middle$Inner public inner class Outer$Middle + public inner class Outer$Middle$Inner public method (): void public final @org.jetbrains.annotations.NotNull method foo(): java.lang.Class } @@ -26,8 +26,8 @@ public final class InPrivateMethod { @kotlin.Metadata public final class InPublicMethod { // source: 'innerClasses.kt' - public inner class Outer$Middle$Inner public inner class Outer$Middle + public inner class Outer$Middle$Inner public method (): void public final method foo(@org.jetbrains.annotations.NotNull p0: Outer$Middle$Inner): void }