From 49f60b0072dcb6068adbda8fc5a7b2ad2925d5f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Doln=C3=ADk?= Date: Mon, 13 Nov 2023 17:16:14 +0100 Subject: [PATCH] Fix collision of types and parameter name in Apinotes for extensions. --- SKIE/acceptance-tests | 2 +- .../kotlin/co/touchlab/skie/oir/element/OirClass.kt | 10 ++++++++-- .../touchlab/skie/phases/oir/CreateOirMembersPhase.kt | 2 +- .../oir/FixOirFunctionSignaturesForApiNotesPhase.kt | 6 +++--- .../other/FixDuplicatedOverridenFunctionsPhase.kt | 4 ++-- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/SKIE/acceptance-tests b/SKIE/acceptance-tests index 152c0f8d..3711d1b7 160000 --- a/SKIE/acceptance-tests +++ b/SKIE/acceptance-tests @@ -1 +1 @@ -Subproject commit 152c0f8db2969726b8260c05efa22b41c9c20739 +Subproject commit 3711d1b7abdb77feb8903035d596a7dceba00b9d diff --git a/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/oir/element/OirClass.kt b/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/oir/element/OirClass.kt index 1631b783..dcdbc2e2 100644 --- a/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/oir/element/OirClass.kt +++ b/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/oir/element/OirClass.kt @@ -63,11 +63,17 @@ val OirClass.superClass: OirClass? fun OirClass.renderForwardDeclaration(): String = if (typeParameters.isEmpty()) name else "$name<${typeParameters.joinToString(", ") { it.name }}>" -val OirClass.functions: List +val OirClass.memberFunctions: List get() = callableDeclarations.filterIsInstance() val OirClass.constructors: List get() = callableDeclarations.filterIsInstance() -val OirClass.simpleFunctions: List +val OirClass.memberSimpleFunctions: List get() = callableDeclarations.filterIsInstance() + +val OirClass.allFunctions: List + get() = callableDeclarationsIncludingExtensions.filterIsInstance() + +val OirClass.allSimpleFunctions: List + get() = callableDeclarationsIncludingExtensions.filterIsInstance() diff --git a/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/oir/CreateOirMembersPhase.kt b/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/oir/CreateOirMembersPhase.kt index 8291da2e..79291965 100644 --- a/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/oir/CreateOirMembersPhase.kt +++ b/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/oir/CreateOirMembersPhase.kt @@ -93,7 +93,7 @@ class CreateOirMembersPhase( } private fun getOirCallableDeclarationParent(kirCallableDeclaration: KirCallableDeclaration<*>): OirCallableDeclarationParent = - if (kirCallableDeclaration.origin == KirCallableDeclaration.Origin.Extension && kirCallableDeclaration.owner.kind != KirClass.Kind.Interface) { + if (kirCallableDeclaration.origin == KirCallableDeclaration.Origin.Extension && kirCallableDeclaration.owner.kind != KirClass.Kind.File) { getOrCreateExtension(kirCallableDeclaration.owner.oirClass) } else { kirCallableDeclaration.owner.oirClass diff --git a/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/oir/FixOirFunctionSignaturesForApiNotesPhase.kt b/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/oir/FixOirFunctionSignaturesForApiNotesPhase.kt index f13f93eb..86d29adb 100644 --- a/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/oir/FixOirFunctionSignaturesForApiNotesPhase.kt +++ b/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/oir/FixOirFunctionSignaturesForApiNotesPhase.kt @@ -5,10 +5,10 @@ import co.touchlab.skie.oir.element.OirFunction import co.touchlab.skie.oir.element.OirSimpleFunction import co.touchlab.skie.oir.element.OirTypeDef import co.touchlab.skie.oir.element.OirVisibility -import co.touchlab.skie.oir.element.functions +import co.touchlab.skie.oir.element.allFunctions +import co.touchlab.skie.oir.element.memberFunctions import co.touchlab.skie.oir.type.BlockPointerOirType import co.touchlab.skie.oir.type.DeclaredOirType -import co.touchlab.skie.oir.type.NonNullReferenceOirType import co.touchlab.skie.oir.type.NullableReferenceOirType import co.touchlab.skie.oir.type.OirType import co.touchlab.skie.oir.type.PointerOirType @@ -39,7 +39,7 @@ class FixOirFunctionSignaturesForApiNotesPhase( } private fun fixFunctionSignatures(oirClass: OirClass) { - oirClass.functions.forEach { + oirClass.allFunctions.forEach { fixFunctionSignature(it) } } diff --git a/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/other/FixDuplicatedOverridenFunctionsPhase.kt b/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/other/FixDuplicatedOverridenFunctionsPhase.kt index cf7a6571..b08f0f95 100644 --- a/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/other/FixDuplicatedOverridenFunctionsPhase.kt +++ b/SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/other/FixDuplicatedOverridenFunctionsPhase.kt @@ -2,7 +2,7 @@ package co.touchlab.skie.phases.other import co.touchlab.skie.oir.element.OirSimpleFunction import co.touchlab.skie.oir.element.copyValueParametersFrom -import co.touchlab.skie.oir.element.simpleFunctions +import co.touchlab.skie.oir.element.memberSimpleFunctions import co.touchlab.skie.phases.SirPhase import co.touchlab.skie.sir.element.SirVisibility import co.touchlab.skie.sir.element.copyValueParametersFrom @@ -16,7 +16,7 @@ object FixDuplicatedOverridenFunctionsPhase : SirPhase { context(SirPhase.Context) override fun execute() { oirProvider.allKotlinClassesAndProtocols - .flatMap { it.simpleFunctions } + .flatMap { it.memberSimpleFunctions } .forEach { fixDuplicates(it) }