Add generating js interface class, not used yet
This commit is contained in:
parent
bbe2e8429f
commit
8dc8db1866
@ -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() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user