kotlin-objective-c cross resolve: public objc types

This commit is contained in:
Max Medvedev
2018-05-26 22:25:39 +03:00
committed by Svyatoslav Scherbina
parent 2faf7908ee
commit 2a63c409fa
@@ -29,19 +29,23 @@ sealed class ObjCType {
if (attrsAndName.isEmpty()) this else "$this ${attrsAndName.trimStart()}" if (attrsAndName.isEmpty()) this else "$this ${attrsAndName.trimStart()}"
} }
internal class ObjCRawType(private val rawText: String) : ObjCType() { class ObjCRawType(
val rawText: String
) : ObjCType() {
override fun render(attrsAndName: String): String = rawText.withAttrsAndName(attrsAndName) override fun render(attrsAndName: String): String = rawText.withAttrsAndName(attrsAndName)
} }
internal sealed class ObjCReferenceType : ObjCType() sealed class ObjCReferenceType : ObjCType()
internal sealed class ObjCNonNullReferenceType : ObjCReferenceType() sealed class ObjCNonNullReferenceType : ObjCReferenceType()
internal data class ObjCNullableReferenceType(val nonNullType: ObjCNonNullReferenceType) : ObjCReferenceType() { data class ObjCNullableReferenceType(
val nonNullType: ObjCNonNullReferenceType
) : ObjCReferenceType() {
override fun render(attrsAndName: String) = nonNullType.render(" _Nullable".withAttrsAndName(attrsAndName)) override fun render(attrsAndName: String) = nonNullType.render(" _Nullable".withAttrsAndName(attrsAndName))
} }
internal class ObjCClassType( class ObjCClassType(
val className: String, val className: String,
val typeArguments: List<ObjCNonNullReferenceType> = emptyList() val typeArguments: List<ObjCNonNullReferenceType> = emptyList()
) : ObjCNonNullReferenceType() { ) : ObjCNonNullReferenceType() {
@@ -58,21 +62,23 @@ internal class ObjCClassType(
} }
} }
internal class ObjCProtocolType(val protocolName: String) : ObjCNonNullReferenceType() { class ObjCProtocolType(
val protocolName: String
) : ObjCNonNullReferenceType() {
override fun render(attrsAndName: String) = "id<$protocolName>".withAttrsAndName(attrsAndName) override fun render(attrsAndName: String) = "id<$protocolName>".withAttrsAndName(attrsAndName)
} }
internal object ObjCIdType : ObjCNonNullReferenceType() { object ObjCIdType : ObjCNonNullReferenceType() {
override fun render(attrsAndName: String) = "id".withAttrsAndName(attrsAndName) override fun render(attrsAndName: String) = "id".withAttrsAndName(attrsAndName)
} }
internal object ObjCInstanceType : ObjCNonNullReferenceType() { object ObjCInstanceType : ObjCNonNullReferenceType() {
override fun render(attrsAndName: String): String = "instancetype".withAttrsAndName(attrsAndName) override fun render(attrsAndName: String): String = "instancetype".withAttrsAndName(attrsAndName)
} }
internal class ObjCBlockPointerType( class ObjCBlockPointerType(
val returnType: ObjCReferenceType, val parameterTypes: List<ObjCReferenceType> val returnType: ObjCReferenceType,
val parameterTypes: List<ObjCReferenceType>
) : ObjCNonNullReferenceType() { ) : ObjCNonNullReferenceType() {
override fun render(attrsAndName: String) = returnType.render(buildString { override fun render(attrsAndName: String) = returnType.render(buildString {
@@ -85,11 +91,16 @@ internal class ObjCBlockPointerType(
}) })
} }
internal class ObjCPrimitiveType(val cName: String) : ObjCType() { class ObjCPrimitiveType(
val cName: String
) : ObjCType() {
override fun render(attrsAndName: String) = cName.withAttrsAndName(attrsAndName) override fun render(attrsAndName: String) = cName.withAttrsAndName(attrsAndName)
} }
internal class ObjCPointerType(val pointee: ObjCType, val nullable: Boolean = false) : ObjCType() { class ObjCPointerType(
val pointee: ObjCType,
val nullable: Boolean = false
) : ObjCType() {
override fun render(attrsAndName: String) = override fun render(attrsAndName: String) =
pointee.render("*${if (nullable) { pointee.render("*${if (nullable) {
" _Nullable".withAttrsAndName(attrsAndName) " _Nullable".withAttrsAndName(attrsAndName)
@@ -98,7 +109,7 @@ internal class ObjCPointerType(val pointee: ObjCType, val nullable: Boolean = fa
}}") }}")
} }
internal object ObjCVoidType : ObjCType() { object ObjCVoidType : ObjCType() {
override fun render(attrsAndName: String) = "void".withAttrsAndName(attrsAndName) override fun render(attrsAndName: String) = "void".withAttrsAndName(attrsAndName)
} }