[FIR] Support java sealed class interop
This commit is contained in:
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.java
|
|||||||
import com.intellij.openapi.progress.ProcessCanceledException
|
import com.intellij.openapi.progress.ProcessCanceledException
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
|
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
@@ -316,6 +317,13 @@ class JavaSymbolProvider(
|
|||||||
valueParametersForAnnotationConstructor = valueParametersForAnnotationConstructor
|
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(
|
private fun convertJavaFieldToFir(
|
||||||
|
|||||||
@@ -63,6 +63,14 @@ internal val JavaModifierListOwner.modality: Modality
|
|||||||
else -> Modality.OPEN
|
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
|
internal val JavaClass.classKind: ClassKind
|
||||||
get() = when {
|
get() = when {
|
||||||
isAnnotationType -> ClassKind.ANNOTATION_CLASS
|
isAnnotationType -> ClassKind.ANNOTATION_CLASS
|
||||||
|
|||||||
Reference in New Issue
Block a user