diff --git a/src/main/kotlin/api/KotlinSignaturesLoading.kt b/src/main/kotlin/api/KotlinSignaturesLoading.kt index 7a259bc6..0acb585f 100644 --- a/src/main/kotlin/api/KotlinSignaturesLoading.kt +++ b/src/main/kotlin/api/KotlinSignaturesLoading.kt @@ -127,11 +127,11 @@ private fun FieldNode.buildFieldSignature( foundAnnotations.addAll(companionClass?.visibleAnnotations.orEmpty()) foundAnnotations.addAll(companionClass?.invisibleAnnotations.orEmpty()) } else if (isStatic(access) && isFinal(access)) { - companionClass = ownerClass.companionName(ownerClass.kotlinMetadata)?.let { + val companionClassCandidate = ownerClass.companionName(ownerClass.kotlinMetadata)?.let { classes[it] } - val property = companionClass?.kmProperty(name) + val property = companionClassCandidate?.kmProperty(name) if (property != null && JvmFlag.Property.IS_MOVED_FROM_INTERFACE_COMPANION(property.flags)) { /* @@ -140,7 +140,11 @@ private fun FieldNode.buildFieldSignature( * * See https://github.com/Kotlin/binary-compatibility-validator/issues/90 */ - foundAnnotations.addAll(companionClass!!.methods.annotationsFor(property.syntheticMethodForAnnotations)) + foundAnnotations.addAll( + companionClassCandidate.methods.annotationsFor( + property.syntheticMethodForAnnotations + ) + ) } } diff --git a/src/test/kotlin/cases/enums/EnumWithInternalCompanion.kt b/src/test/kotlin/cases/enums/EnumWithInternalCompanion.kt new file mode 100644 index 00000000..cab72ff7 --- /dev/null +++ b/src/test/kotlin/cases/enums/EnumWithInternalCompanion.kt @@ -0,0 +1,12 @@ +/* + * Copyright 2016-2024 JetBrains s.r.o. + * Use of this source code is governed by the Apache 2.0 License that can be found in the LICENSE.txt file. + */ + +package cases.enums + +public enum class EnumWithInternalCompanion { + A, B; + + internal companion object +} diff --git a/src/test/kotlin/cases/enums/enums.txt b/src/test/kotlin/cases/enums/enums.txt index d086c780..7bdfab49 100644 --- a/src/test/kotlin/cases/enums/enums.txt +++ b/src/test/kotlin/cases/enums/enums.txt @@ -11,6 +11,14 @@ public final class cases/enums/EnumClass : java/lang/Enum { public static fun values ()[Lcases/enums/EnumClass; } +public final class cases/enums/EnumWithInternalCompanion : java/lang/Enum { + public static final field A Lcases/enums/EnumWithInternalCompanion; + public static final field B Lcases/enums/EnumWithInternalCompanion; + public static fun getEntries ()Lkotlin/enums/EnumEntries; + public static fun valueOf (Ljava/lang/String;)Lcases/enums/EnumWithInternalCompanion; + public static fun values ()[Lcases/enums/EnumWithInternalCompanion; +} + public final class cases/enums/JavaEnum : java/lang/Enum { public static final field JA Lcases/enums/JavaEnum; public static final field JB Lcases/enums/JavaEnum;