Add generating js interface class, not used yet

This commit is contained in:
Ugljesa Jovanovic 2020-08-14 10:39:38 +02:00
parent bbe2e8429f
commit 8dc8db1866
No known key found for this signature in database
GPG Key ID: 33A5F353387711A5
2 changed files with 37 additions and 11 deletions

View File

@ -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() {
}

View File

@ -10,6 +10,8 @@ import com.squareup.kotlinpoet.*
*/ */
object JsLibsodiumGenerator { object JsLibsodiumGenerator {
val jsInterfaceFunctionDefinitions : MutableList<FunSpec> = mutableListOf()
fun createJsFile(packageName: String, fileDefinition: KotlinFileDefinition): FileSpec { fun createJsFile(packageName: String, fileDefinition: KotlinFileDefinition): FileSpec {
val fileBuilder = FileSpec.builder(packageName, fileDefinition.name) val fileBuilder = FileSpec.builder(packageName, fileDefinition.name)
@ -29,11 +31,22 @@ object JsLibsodiumGenerator {
) )
fileBuilder.addType(commonClassSpec.build()) fileBuilder.addType(commonClassSpec.build())
} }
createJsInterfaceFile()
val file = fileBuilder.build() val file = fileBuilder.build()
file.writeTo(System.out) file.writeTo(System.out)
return file 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( fun createJsInnerClassSpec(
innerClassDefinition: InnerClassDefinition, innerClassDefinition: InnerClassDefinition,
multiplatformModifier: MultiplatformModifier multiplatformModifier: MultiplatformModifier
@ -46,7 +59,7 @@ object JsLibsodiumGenerator {
fun createJsFunctionImplementation(methodDefinition: FunctionDefinition): FunSpec { fun createJsFunctionImplementation(methodDefinition: FunctionDefinition): FunSpec {
val methodBuilder = FunSpec.builder(methodDefinition.name) val methodBuilder = FunSpec.builder(methodDefinition.name)
methodBuilder.modifiers += MultiplatformModifier.ACTUAL.modifierList
var returnModifierFound = false var returnModifierFound = false
var returnModifierName = "" var returnModifierName = ""
var actualReturnType: TypeName = DYNAMIC var actualReturnType: TypeName = DYNAMIC
@ -69,6 +82,19 @@ object JsLibsodiumGenerator {
actualReturnType = paramDefinition.parameterType.typeName 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}\")") methodBuilder.addStatement("println(\"Debug ${methodDefinition.name}\")")
val constructJsCall = StringBuilder() val constructJsCall = StringBuilder()
when (methodDefinition.returnType) { when (methodDefinition.returnType) {
@ -95,16 +121,6 @@ object JsLibsodiumGenerator {
} }
} }
methodBuilder.addStatement(constructJsCall.toString()) 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() return methodBuilder.build()
} }