diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/SealedInterface/SealedInterface.txt b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/SealedInterface/SealedInterface.txt index 54d3de7b2c6..5625c10895d 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/SealedInterface/SealedInterface.txt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/clsFileStubBuilder/SealedInterface/SealedInterface.txt @@ -3,7 +3,7 @@ PsiJetFileStubImpl[package=test] REFERENCE_EXPRESSION[referencedName=test] IMPORT_LIST CLASS[classId=test/SealedInterface, fqName=test.SealedInterface, isEnumEntry=false, isInterface=true, isLocal=false, isTopLevel=true, name=SealedInterface, superNames=[]] - MODIFIER_LIST[public] + MODIFIER_LIST[public sealed] CLASS_BODY CLASS[classId=test/SealedInterface.Nested, fqName=test.SealedInterface.Nested, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=false, name=Nested, superNames=[SealedInterface]] MODIFIER_LIST[public final] diff --git a/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/ClassClsStubBuilder.kt b/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/ClassClsStubBuilder.kt index 7d43e56ab58..e2493f86b35 100644 --- a/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/ClassClsStubBuilder.kt +++ b/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/ClassClsStubBuilder.kt @@ -103,6 +103,7 @@ private class ClassClsStubBuilder( } if (isInterface()) { relevantFlags.add(FUN_INTERFACE) + relevantFlags.add(INTERFACE_MODALITY) } val additionalModifiers = when (classKind) { ProtoBuf.Class.Kind.ENUM_CLASS -> listOf(KtTokens.ENUM_KEYWORD) diff --git a/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/flags/flags.kt b/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/flags/flags.kt index b8266079c70..3f3eae8a60d 100644 --- a/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/flags/flags.kt +++ b/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/flags/flags.kt @@ -24,6 +24,16 @@ val MODALITY: FlagsToModifiers = object : FlagsToModifiers() { } } +/** + * For interfaces, we only need to remember a `sealed` modifier in the stub, as the interface will be abstract by default. + */ +val INTERFACE_MODALITY: FlagsToModifiers = object : FlagsToModifiers() { + override fun getModifiers(flags: Int): KtModifierKeywordToken? { + val modality = Flags.MODALITY.get(flags) + return KtTokens.SEALED_KEYWORD.takeIf { modality == ProtoBuf.Modality.SEALED } + } +} + val VISIBILITY: FlagsToModifiers = object : FlagsToModifiers() { override fun getModifiers(flags: Int): KtModifierKeywordToken? { val visibility = Flags.VISIBILITY.get(flags) diff --git a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt index ecec4972cc9..a2d0b1f81da 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt +++ b/compiler/psi/src/org/jetbrains/kotlin/psi/stubs/KotlinStubVersions.kt @@ -17,7 +17,7 @@ object KotlinStubVersions { // Binary stub version should be increased if stub format (org.jetbrains.kotlin.psi.stubs.impl) is changed // or changes are made to the core stub building code (org.jetbrains.kotlin.idea.decompiler.stubBuilder). // Increasing this version will lead to reindexing of all binary files that are potentially kotlin binaries (including all class files). - private const val BINARY_STUB_VERSION = 94 + private const val BINARY_STUB_VERSION = 95 // Classfile stub version should be increased if changes are made to classfile stub building subsystem (org.jetbrains.kotlin.idea.decompiler.classFile) // Increasing this version will lead to reindexing of all classfiles.