feat(@JsExport for interfaces): add ability to export interfaces in TypeScript.

This commit is contained in:
Artem Kobzar
2021-11-18 10:07:38 +00:00
committed by Space
parent 4dcfd38236
commit d5dd35cb20
35 changed files with 366 additions and 55 deletions
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.resolve.checkers.DeclarationChecker
import org.jetbrains.kotlin.resolve.checkers.DeclarationCheckerContext
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
import org.jetbrains.kotlin.resolve.descriptorUtil.isExtensionProperty
import org.jetbrains.kotlin.resolve.descriptorUtil.isInsideInterface
import org.jetbrains.kotlin.resolve.inline.isInlineWithReified
import org.jetbrains.kotlin.resolve.isInlineClass
import org.jetbrains.kotlin.types.KotlinType
@@ -109,12 +110,15 @@ object JsExportDeclarationChecker : DeclarationChecker {
}
val wrongDeclaration: String? = when (descriptor.kind) {
INTERFACE -> if (descriptor.isExternal) null else "interface"
ANNOTATION_CLASS -> "annotation class"
CLASS -> if (descriptor.isInlineClass()) {
"${if (descriptor.isInline) "inline " else ""}${if (descriptor.isValue) "value " else ""}class"
CLASS -> when {
descriptor.isInsideInterface -> "nested class inside exported interface"
descriptor.isInlineClass() -> "${if (descriptor.isInline) "inline " else ""}${if (descriptor.isValue) "value " else ""}class"
else -> null
}
else -> if (descriptor.isInsideInterface) {
"${if (descriptor.isCompanionObject) "companion object" else "nested/inner declaration"} inside exported interface"
} else null
else -> null
}
if (wrongDeclaration != null) {