[FIR] Support java sealed class interop

This commit is contained in:
Dmitriy Novozhilov
2021-02-04 16:13:01 +03:00
parent abd1c8fb30
commit 96038e4b32
2 changed files with 16 additions and 0 deletions
@@ -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(
@@ -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