From 1114c2c7078d0e6e0fe4fa2c744cdffef5522e56 Mon Sep 17 00:00:00 2001 From: Vadym Yaroshchuk Date: Wed, 13 Nov 2024 23:40:29 +0100 Subject: [PATCH] fix: option's resolving --- .../rrpc/codegen/SchemaAsRSResolver.kt | 4 ++-- .../rrpc/generator/kotlin/adapter/Constant.kt | 2 +- .../adapter/KotlinMetadataSchemaAdapter.kt | 18 +++++------------- .../metadata/CombinedFilesMetadataGenerator.kt | 9 ++++++++- .../metadata/OptionsMetadataGenerator.kt | 16 +++++++++++----- .../kotlin/options/KotlinPluginOptions.kt | 11 ++++++----- 6 files changed, 33 insertions(+), 27 deletions(-) diff --git a/generator/core/src/commonMain/kotlin/org/timemates/rrpc/codegen/SchemaAsRSResolver.kt b/generator/core/src/commonMain/kotlin/org/timemates/rrpc/codegen/SchemaAsRSResolver.kt index ce56bf1..dd531e2 100644 --- a/generator/core/src/commonMain/kotlin/org/timemates/rrpc/codegen/SchemaAsRSResolver.kt +++ b/generator/core/src/commonMain/kotlin/org/timemates/rrpc/codegen/SchemaAsRSResolver.kt @@ -16,8 +16,8 @@ private class SchemaAsRSResolver( override fun resolveField(typeMemberUrl: RSTypeMemberUrl): RSField? { return schema.getField( ProtoMember.get( - ProtoType.get(typeMemberUrl.typeUrl.value), - typeMemberUrl.memberName + ProtoType.get(typeMemberUrl.typeUrl.value.replace("type.googleapis.com/", "")), + typeMemberUrl.memberName, ) )?.asRMField() } diff --git a/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/Constant.kt b/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/Constant.kt index 538d87e..a088b62 100644 --- a/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/Constant.kt +++ b/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/Constant.kt @@ -2,7 +2,7 @@ package org.timemates.rrpc.generator.kotlin.adapter internal object Constant { val GENERATED_COMMENT = """ - This file is generated by the `RRpc/rrpc-kotlin` library. + This file is generated by the `timemates/rrpc-kotlin` library. WARNING: DO NOT MODIFY THIS FILE MANUALLY! diff --git a/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/KotlinMetadataSchemaAdapter.kt b/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/KotlinMetadataSchemaAdapter.kt index 392c570..7443051 100644 --- a/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/KotlinMetadataSchemaAdapter.kt +++ b/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/KotlinMetadataSchemaAdapter.kt @@ -18,7 +18,6 @@ public object KotlinMetadataSchemaAdapter : SchemaAdapter { GenerationOptions.METADATA_SCOPE_NAME, ) - @OptIn(NonPlatformSpecificAccess::class) override fun process( options: GenerationOptions, resolver: RSResolver, @@ -26,18 +25,11 @@ public object KotlinMetadataSchemaAdapter : SchemaAdapter { if (metadataGeneration == MetadataGenerationType.SCOPED && metadataScopeName == null) throw GenerationException("Metadata config requires generation to be scoped, but name isn't provided.") - resolver.resolveAvailableFiles() - .filterNot { file -> file.packageName.value.startsWith("wire") } - .toList() - .let { - CombinedFilesMetadataGenerator.generate( - name = metadataScopeName, - scoped = metadataGeneration == MetadataGenerationType.SCOPED, - resolver = RSResolver(it) - ) - }.apply { - writeTo(output.toNioPath()) - } + CombinedFilesMetadataGenerator.generate( + name = metadataScopeName, + scoped = metadataGeneration == MetadataGenerationType.SCOPED, + resolver = resolver, + ).writeTo(output.toNioPath()) return resolver } diff --git a/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/metadata/CombinedFilesMetadataGenerator.kt b/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/metadata/CombinedFilesMetadataGenerator.kt index 4df6bf2..b904c71 100644 --- a/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/metadata/CombinedFilesMetadataGenerator.kt +++ b/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/metadata/CombinedFilesMetadataGenerator.kt @@ -8,10 +8,12 @@ import com.squareup.kotlinpoet.buildCodeBlock import com.squareup.kotlinpoet.withIndent import org.timemates.rrpc.codegen.typemodel.LibClassNames import org.timemates.rrpc.common.schema.RSResolver +import org.timemates.rrpc.common.schema.annotations.NonPlatformSpecificAccess import org.timemates.rrpc.generator.kotlin.adapter.internal.ext.newline import kotlin.random.Random public object CombinedFilesMetadataGenerator { + @OptIn(NonPlatformSpecificAccess::class) public fun generate( name: String?, scoped: Boolean, @@ -29,7 +31,12 @@ public object CombinedFilesMetadataGenerator { delegate = buildCodeBlock { add("RMResolver(") withIndent { - resolver.resolveAvailableFiles().forEach { file -> + resolver.resolveAvailableFiles() + .filterNot { file -> + file.packageName.value.startsWith("wire") + || file.packageName.value.startsWith("google.protobuf") + } + .forEach { file -> newline() add(FileMetadataGenerator.generate(file, resolver)) add(",") diff --git a/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/metadata/OptionsMetadataGenerator.kt b/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/metadata/OptionsMetadataGenerator.kt index 33611e6..58737b3 100644 --- a/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/metadata/OptionsMetadataGenerator.kt +++ b/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/adapter/metadata/OptionsMetadataGenerator.kt @@ -21,25 +21,31 @@ internal object OptionsMetadataGenerator { newline() add("listOf(") options.list.forEach { option -> - val field = resolver.resolveField(option.fieldUrl) ?: return@forEach + val field = resolver.resolveField(option.fieldUrl)!! ?: return@forEach withIndent { + newline() add("%T(", LibClassNames.RS.Option) withIndent { + newline() add("name = %S,", option.name) newline() add("tag = %L,", field.tag) newline() - add("fieldUrl = %1T(", LibClassNames.RS.TypeMemberUrl, option.fieldUrl.typeUrl) - newline() + add("fieldUrl = %T(", LibClassNames.RS.TypeMemberUrl) withIndent { + newline() add("typeUrl = %S,", option.fieldUrl.typeUrl) + newline() add("memberName = %S,", option.fieldUrl.memberName) } + newline() add("),") + newline() option.value?.let { value -> - add("value = %P,", generateValue(value)) + add("value = %L,", generateValue(value)) } } + newline() add("),") } } @@ -53,7 +59,7 @@ internal object OptionsMetadataGenerator { private fun generateValue(value: RSOption.Value): CodeBlock { return buildCodeBlock { when (value) { - is RSOption.Value.Raw -> add("%T(%S)", LibClassNames.RS.OptionValueRaw) + is RSOption.Value.Raw -> add("%T(%S)", LibClassNames.RS.OptionValueRaw, value.string) is RSOption.Value.RawMap -> { add("%T(", LibClassNames.RS.Option) newline() diff --git a/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/options/KotlinPluginOptions.kt b/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/options/KotlinPluginOptions.kt index 0e87999..8ebd844 100644 --- a/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/options/KotlinPluginOptions.kt +++ b/generator/kotlin/src/commonMain/kotlin/org/timemates/rrpc/generator/kotlin/options/KotlinPluginOptions.kt @@ -1,7 +1,6 @@ package org.timemates.rrpc.generator.kotlin.options import okio.Path -import okio.Path.Companion.toPath import org.timemates.rrpc.codegen.configuration.GenerationOptions import org.timemates.rrpc.codegen.exception.GenerationException @@ -10,10 +9,12 @@ public value class KotlinPluginOptions(private val options: GenerationOptions) { public val isClientGenerationEnabled: Boolean get() = options[GenerationOptions.KOTLIN_CLIENT_GENERATION] ?: true public val isServerGenerationEnabled: Boolean get() = options[GenerationOptions.KOTLIN_SERVER_GENERATION] ?: true public val isTypesGenerationEnabled: Boolean get() = options[GenerationOptions.KOTLIN_TYPE_GENERATION] ?: true - public val output: Path get() = options[GenerationOptions.KOTLIN_OUTPUT] ?: throw GenerationException("Kotlin output folder was not specified.") + public val output: Path + get() = options[GenerationOptions.KOTLIN_OUTPUT] + ?: throw GenerationException("Kotlin output folder was not specified.") - public val metadataGeneration: MetadataGenerationType get() = - options[GenerationOptions.METADATA_GENERATION] - ?: MetadataGenerationType.DISABLED + public val metadataGeneration: MetadataGenerationType + get() = options[GenerationOptions.METADATA_GENERATION] + ?: MetadataGenerationType.DISABLED public val metadataScopeName: String? get() = options[GenerationOptions.METADATA_SCOPE_NAME] } \ No newline at end of file