diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt index 8251fc7d84b..179ce39b4c1 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaSymbolProvider.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.java import com.intellij.openapi.progress.ProcessCanceledException import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope +import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities @@ -316,6 +317,13 @@ class JavaSymbolProvider( valueParametersForAnnotationConstructor = valueParametersForAnnotationConstructor ) } + }.apply { + if (modality == Modality.SEALED) { + sealedInheritors = javaClass.permittedTypes.mapNotNull { classifierType -> + val classifier = classifierType.classifier as? JavaClass + classifier?.let { JavaToKotlinClassMap.mapJavaToKotlin(it.fqName!!) } + } + } } private fun convertJavaFieldToFir( diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt index 19b2634eb67..368ae99b351 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt @@ -63,6 +63,14 @@ internal val JavaModifierListOwner.modality: Modality else -> Modality.OPEN } +internal val JavaClass.modality: Modality + get() = when { + isSealed -> Modality.SEALED + isAbstract -> Modality.ABSTRACT + isFinal -> Modality.FINAL + else -> Modality.OPEN + } + internal val JavaClass.classKind: ClassKind get() = when { isAnnotationType -> ClassKind.ANNOTATION_CLASS