From 8dc8db18669a6926a908f2e1fa37779cc8210dcf Mon Sep 17 00:00:00 2001 From: Ugljesa Jovanovic Date: Fri, 14 Aug 2020 10:39:38 +0200 Subject: [PATCH] Add generating js interface class, not used yet --- .../LibsodiumSecretstreamDefinitions.kt | 10 +++++ .../generator/JsLibsodiumGenerator.kt | 38 +++++++++++++------ 2 files changed, 37 insertions(+), 11 deletions(-) create mode 100644 kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/definitions/LibsodiumSecretstreamDefinitions.kt diff --git a/kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/definitions/LibsodiumSecretstreamDefinitions.kt b/kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/definitions/LibsodiumSecretstreamDefinitions.kt new file mode 100644 index 0000000..9854763 --- /dev/null +++ b/kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/definitions/LibsodiumSecretstreamDefinitions.kt @@ -0,0 +1,10 @@ +package com.ionspin.kotlin.crypto.generator.libsodium.definitions + +/** + * Created by Ugljesa Jovanovic (jovanovic.ugljesa@gmail.com) on 14/Aug/2020 + */ +fun ClassDefinition.defineSecretStreamFunctions() { + + + +} diff --git a/kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/generator/JsLibsodiumGenerator.kt b/kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/generator/JsLibsodiumGenerator.kt index 4d05181..03f11b6 100644 --- a/kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/generator/JsLibsodiumGenerator.kt +++ b/kotlin-multiplatform-libsodium-generator/src/main/kotlin/com/ionspin/kotlin/crypto/generator/libsodium/generator/JsLibsodiumGenerator.kt @@ -10,6 +10,8 @@ import com.squareup.kotlinpoet.* */ object JsLibsodiumGenerator { + val jsInterfaceFunctionDefinitions : MutableList = mutableListOf() + fun createJsFile(packageName: String, fileDefinition: KotlinFileDefinition): FileSpec { val fileBuilder = FileSpec.builder(packageName, fileDefinition.name) @@ -29,11 +31,22 @@ object JsLibsodiumGenerator { ) fileBuilder.addType(commonClassSpec.build()) } + createJsInterfaceFile() val file = fileBuilder.build() file.writeTo(System.out) return file } + // This helps with static typing in js target + fun createJsInterfaceFile() { + val fileBuilder = FileSpec.builder(packageName, "JsSodiumInterfaceDebug") + val jsInterface = TypeSpec.interfaceBuilder("JsSodiumInterfaceDebug") + jsInterface.addFunctions(jsInterfaceFunctionDefinitions) + fileBuilder.addType(jsInterface.build()) + val file = fileBuilder.build() + file.writeTo(System.out) + } + fun createJsInnerClassSpec( innerClassDefinition: InnerClassDefinition, multiplatformModifier: MultiplatformModifier @@ -46,7 +59,7 @@ object JsLibsodiumGenerator { fun createJsFunctionImplementation(methodDefinition: FunctionDefinition): FunSpec { val methodBuilder = FunSpec.builder(methodDefinition.name) - methodBuilder.modifiers += MultiplatformModifier.ACTUAL.modifierList + var returnModifierFound = false var returnModifierName = "" var actualReturnType: TypeName = DYNAMIC @@ -69,6 +82,19 @@ object JsLibsodiumGenerator { actualReturnType = paramDefinition.parameterType.typeName } } + if (actualReturnTypeFound) { + methodBuilder.returns(actualReturnType) + } else if (methodDefinition.dynamicJsReturn) { + methodBuilder.returns(Dynamic) + } else { + methodBuilder.returns(methodDefinition.returnType.typeName) + } + //Create a spec for interface + methodBuilder.addModifiers(KModifier.ABSTRACT) + jsInterfaceFunctionDefinitions.add(methodBuilder.build()) + //continue with normal func spec for implementation + methodBuilder.modifiers.clear() + methodBuilder.modifiers += MultiplatformModifier.ACTUAL.modifierList methodBuilder.addStatement("println(\"Debug ${methodDefinition.name}\")") val constructJsCall = StringBuilder() when (methodDefinition.returnType) { @@ -95,16 +121,6 @@ object JsLibsodiumGenerator { } } methodBuilder.addStatement(constructJsCall.toString()) - if (actualReturnTypeFound) { - methodBuilder.returns(actualReturnType) - return methodBuilder.build() - } - - if (methodDefinition.dynamicJsReturn) { - methodBuilder.returns(Dynamic) - } else { - methodBuilder.returns(methodDefinition.returnType.typeName) - } return methodBuilder.build() }