Skip to content

Commit 3f45bb2

Browse files
committed
Introduce different types of SirFile.
1 parent a9a3160 commit 3f45bb2

37 files changed

+301
-181
lines changed

SKIE/acceptance-tests

SKIE/common/util/src/commonMain/kotlin/co/touchlab/skie/util/directory/SkieBuildDirectory.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,7 @@ class SkieBuildDirectory(
7777

7878
val custom: Custom = Custom(this)
7979

80-
class Generated(parent: Directory) : PermanentDirectory(parent, "generated") {
81-
}
80+
class Generated(parent: Directory) : PermanentDirectory(parent, "generated")
8281

8382
class Custom(parent: Directory) : PermanentDirectory(parent, "custom")
8483
}
@@ -99,9 +98,11 @@ class SkieBuildDirectory(
9998

10099
class ObjectFiles(parent: Directory) : PermanentDirectory(parent, "object-files") {
101100

101+
// WIP Replace
102102
val allFiles: List<File>
103103
get() = directory.walkTopDown().toList()
104104

105+
// WIP Replace
105106
val allObjectFiles: List<File>
106107
get() = allFiles.filter { it.extension == "o" }
107108

SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/context/SirPhaseContext.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ import co.touchlab.skie.oir.type.translation.OirTypeTranslator
1010
import co.touchlab.skie.phases.SirPhase
1111
import co.touchlab.skie.phases.SkiePhase
1212
import co.touchlab.skie.phases.oir.util.ExternalApiNotesProvider
13+
import co.touchlab.skie.sir.ClassNamespaceProvider
14+
import co.touchlab.skie.sir.SirFileProvider
1315
import co.touchlab.skie.sir.SirProvider
14-
import co.touchlab.skie.sir.SkieNamespaceProvider
1516
import co.touchlab.skie.sir.builtin.SirBuiltins
1617
import co.touchlab.skie.sir.type.translation.SirTypeTranslator
1718
import org.jetbrains.kotlin.backend.konan.objcexport.ObjCExportNamer
@@ -30,13 +31,15 @@ class SirPhaseContext(
3031

3132
override val sirProvider: SirProvider = SirProvider(framework, kirProvider, configurationProvider, skieConfiguration)
3233

34+
override val sirFileProvider: SirFileProvider = sirProvider.fileProvider
35+
3336
override val kirBuiltins: KirBuiltins = kirProvider.kirBuiltins
3437

3538
override val oirBuiltins: OirBuiltins = oirProvider.oirBuiltins
3639

3740
override val sirBuiltins: SirBuiltins = sirProvider.sirBuiltins
3841

39-
override val skieNamespaceProvider: SkieNamespaceProvider = SkieNamespaceProvider(
42+
override val classNamespaceProvider: ClassNamespaceProvider = ClassNamespaceProvider(
4043
kirProvider = kirProvider,
4144
sirProvider = sirProvider,
4245
mainModuleDescriptor = mainSkieContext.mainModuleDescriptor,

SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/oir/element/OirExtension.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class OirExtension(
77
override val parent: OirTopLevelDeclarationParent,
88
) : OirTopLevelDeclaration, OirCallableDeclarationParent {
99

10+
// WIP Should be set
1011
lateinit var sirExtension: SirExtension
1112

1213
override val callableDeclarations: MutableList<OirCallableDeclaration> = mutableListOf()

SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/SirPhase.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import co.touchlab.skie.oir.builtin.OirBuiltins
88
import co.touchlab.skie.oir.type.translation.OirTypeTranslator
99
import co.touchlab.skie.phases.oir.util.ExternalApiNotesProvider
1010
import co.touchlab.skie.sir.SirProvider
11-
import co.touchlab.skie.sir.SkieNamespaceProvider
11+
import co.touchlab.skie.sir.ClassNamespaceProvider
12+
import co.touchlab.skie.sir.SirFileProvider
1213
import co.touchlab.skie.sir.builtin.SirBuiltins
1314
import co.touchlab.skie.sir.type.translation.SirTypeTranslator
1415
import org.jetbrains.kotlin.backend.konan.objcexport.ObjCExportNamer
@@ -25,13 +26,15 @@ interface SirPhase : SkiePhase<SirPhase.Context> {
2526

2627
val sirProvider: SirProvider
2728

29+
val sirFileProvider: SirFileProvider
30+
2831
val kirBuiltins: KirBuiltins
2932

3033
val oirBuiltins: OirBuiltins
3134

3235
val sirBuiltins: SirBuiltins
3336

34-
val skieNamespaceProvider: SkieNamespaceProvider
37+
val classNamespaceProvider: ClassNamespaceProvider
3538

3639
val externalApiNotesProvider: ExternalApiNotesProvider
3740

SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/SkiePhaseScheduler.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import co.touchlab.skie.phases.other.DeclareMissingSymbolsPhase
4343
import co.touchlab.skie.phases.other.DeleteSkieFrameworkContentPhase
4444
import co.touchlab.skie.phases.other.DisableWildcardExportPhase
4545
import co.touchlab.skie.phases.other.ExtraClassExportPhase
46-
import co.touchlab.skie.phases.other.FixDuplicatedOverridenFunctionsPhase
46+
import co.touchlab.skie.phases.other.FixDuplicatedOverriddenFunctionsPhase
4747
import co.touchlab.skie.phases.other.FixLibrariesShortNamePhase
4848
import co.touchlab.skie.phases.other.VerifyMinOSVersionPhase
4949
import co.touchlab.skie.phases.other.VerifyNoBitcodeEmbeddingPhase
@@ -61,9 +61,9 @@ import co.touchlab.skie.phases.sir.type.CreateStableNameTypeAliasesPhase
6161
import co.touchlab.skie.phases.sir.type.FixNamesOfInaccessibleNestedClassesPhase
6262
import co.touchlab.skie.phases.sir.type.InitializeSirTypesSuperTypesForOirPhase
6363
import co.touchlab.skie.phases.swift.CompileSwiftPhase
64-
import co.touchlab.skie.phases.swift.GenerateSirFileCodePhase
64+
import co.touchlab.skie.phases.swift.ConvertSirIrFilesToSourceFilesPhase
6565
import co.touchlab.skie.phases.swift.SwiftCacheSetupPhase
66-
import co.touchlab.skie.phases.swift.WriteSirFileContentToDiskPhase
66+
import co.touchlab.skie.phases.swift.ConvertSirSourceFilesToCompilableFilesPhase
6767
import co.touchlab.skie.phases.typeconflicts.RenameTypesConflictingWithKeywordsPhase
6868
import co.touchlab.skie.phases.typeconflicts.RenameTypesConflictingWithKotlinModulePhase
6969
import co.touchlab.skie.phases.typeconflicts.RenameTypesConflictsWithOtherTypesPhase
@@ -145,6 +145,7 @@ class SkiePhaseScheduler {
145145

146146
KotlinRuntimeHidingPhase,
147147
SwiftRuntimeGenerator,
148+
// WIP Load custom files
148149

149150
RenameConflictingCallableDeclarationsPhase,
150151

@@ -181,7 +182,7 @@ class SkiePhaseScheduler {
181182
RenameCallableDeclarationsConflictingWithTypeDeclarationsPhase,
182183
RenameParametersNamedSelfPhase,
183184
RenameConflictingCallableDeclarationsPhase,
184-
FixDuplicatedOverridenFunctionsPhase,
185+
FixDuplicatedOverriddenFunctionsPhase,
185186
TemporarilyRenameTypesConflictingWithExternalModulesPhase,
186187
FixOirFunctionSignaturesForApiNotesPhase(context),
187188
CreateFakeObjCConstructorsPhase,
@@ -195,8 +196,8 @@ class SkiePhaseScheduler {
195196
ApiNotesGenerationPhase.ForSwiftCompilation,
196197
FixForwardDeclarationsPhase(context),
197198
AddTypeDefPhase(context),
198-
GenerateSirFileCodePhase,
199-
WriteSirFileContentToDiskPhase,
199+
ConvertSirIrFilesToSourceFilesPhase,
200+
ConvertSirSourceFilesToCompilableFilesPhase,
200201
GenerateFakeObjCDependenciesPhase,
201202
DisableWildcardExportPhase,
202203
SwiftCacheSetupPhase,

SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/features/enums/ExhaustiveEnumsGenerator.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import co.touchlab.skie.phases.util.doInPhase
1212
import co.touchlab.skie.sir.element.SirClass
1313
import co.touchlab.skie.sir.element.SirEnumCase
1414
import co.touchlab.skie.sir.element.SirExtension
15-
import co.touchlab.skie.sir.element.SirFile
1615
import co.touchlab.skie.sir.element.SirGetter
16+
import co.touchlab.skie.sir.element.SirIrFile
1717
import co.touchlab.skie.sir.element.SirProperty
1818
import co.touchlab.skie.sir.element.SirScope
1919
import co.touchlab.skie.sir.element.SirSimpleFunction
@@ -79,9 +79,9 @@ private fun createBridgingEnum(enumKirClass: KirClass): SirClass =
7979
parent = enumKirClass.originalSirClass.namespace?.let { namespace ->
8080
sirProvider.getExtension(
8181
classDeclaration = namespace.classDeclaration,
82-
parent = skieNamespaceProvider.getNamespaceFile(enumKirClass),
82+
parent = classNamespaceProvider.getNamespaceFile(enumKirClass),
8383
)
84-
} ?: skieNamespaceProvider.getNamespaceFile(enumKirClass),
84+
} ?: classNamespaceProvider.getNamespaceFile(enumKirClass),
8585
kind = SirClass.Kind.Enum,
8686
).apply {
8787
addEnumCases(enumKirClass)
@@ -146,14 +146,14 @@ private fun SirClass.addCompanionObjectPropertyIfNeeded(enum: KirClass) {
146146

147147
context(SirPhase.Context)
148148
private fun KirClass.addConversionExtensions(bridgedEnum: SirClass) {
149-
skieNamespaceProvider.getNamespaceFile(this).apply {
149+
classNamespaceProvider.getNamespaceFile(this).apply {
150150
addToKotlinConversionExtension(originalSirClass, bridgedEnum)
151151
addToSwiftConversionExtension(originalSirClass, bridgedEnum)
152152
}
153153
}
154154

155155
context(SirPhase.Context)
156-
private fun SirFile.addToKotlinConversionExtension(enum: SirClass, bridgedEnum: SirClass) {
156+
private fun SirIrFile.addToKotlinConversionExtension(enum: SirClass, bridgedEnum: SirClass) {
157157
this.getExtension(
158158
classDeclaration = bridgedEnum,
159159
).apply {
@@ -173,7 +173,7 @@ private fun SirExtension.addToKotlinConversionMethod(enum: SirClass) {
173173
}
174174

175175
context(SirPhase.Context)
176-
private fun SirFile.addToSwiftConversionExtension(enum: SirClass, bridgedEnum: SirClass) {
176+
private fun SirIrFile.addToSwiftConversionExtension(enum: SirClass, bridgedEnum: SirClass) {
177177
this.getExtension(
178178
classDeclaration = enum,
179179
).apply {
@@ -200,7 +200,7 @@ private fun createStableNameTypeAliasIfRequested(bridgedEnum: SirClass, kirClass
200200

201201
SirTypeAlias(
202202
baseName = "Enum",
203-
parent = skieNamespaceProvider.getNamespace(kirClass),
203+
parent = classNamespaceProvider.getNamespace(kirClass),
204204
visibility = SirVisibility.PublicButReplaced,
205205
) {
206206
bridgedEnum.defaultType.withFqName()

SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/features/flow/FlowConversionConstructorsGenerator.kt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import co.touchlab.skie.sir.element.SirClass
66
import co.touchlab.skie.sir.element.SirConditionalConstraint
77
import co.touchlab.skie.sir.element.SirConstructor
88
import co.touchlab.skie.sir.element.SirExtension
9-
import co.touchlab.skie.sir.element.SirFile
9+
import co.touchlab.skie.sir.element.SirIrFile
1010
import co.touchlab.skie.sir.element.SirSimpleFunction
1111
import co.touchlab.skie.sir.element.SirTypeParameter
1212
import co.touchlab.skie.sir.element.SirValueParameter
@@ -28,34 +28,34 @@ class FlowConversionConstructorsGenerator(
2828

2929
context(SirPhase.Context)
3030
override fun execute() {
31-
val file = sirProvider.getSkieNamespaceFile("FlowConversions")
31+
val file = sirFileProvider.getIrFileFromSkieNamespace("FlowConversions")
3232

3333
SupportedFlow.values().forEach {
3434
it.generateAllConversions(file)
3535
}
3636
}
3737

38-
private fun SupportedFlow.generateAllConversions(file: SirFile) {
38+
private fun SupportedFlow.generateAllConversions(file: SirIrFile) {
3939
requiredVariant.generateAllConversions(file)
4040
optionalVariant.generateAllConversions(file)
4141
}
4242

43-
private fun SupportedFlow.Variant.generateAllConversions(file: SirFile) {
43+
private fun SupportedFlow.Variant.generateAllConversions(file: SirIrFile) {
4444
generateAllKotlinClassConversions(this, file)
4545
generateAllSwiftClassConversions(this, file)
4646
}
4747

48-
private fun generateAllKotlinClassConversions(variant: SupportedFlow.Variant, file: SirFile) {
48+
private fun generateAllKotlinClassConversions(variant: SupportedFlow.Variant, file: SirIrFile) {
4949
generateKotlinClassWithAnyObjectConversions(variant, file)
5050
generateKotlinClassWithBridgeableConversions(variant, file)
5151
}
5252

53-
private fun generateAllSwiftClassConversions(variant: SupportedFlow.Variant, file: SirFile) {
53+
private fun generateAllSwiftClassConversions(variant: SupportedFlow.Variant, file: SirIrFile) {
5454
generateSwiftClassWithAnyObjectConversions(variant, file)
5555
generateSwiftClassWithBridgeableConversions(variant, file)
5656
}
5757

58-
private fun generateKotlinClassWithAnyObjectConversions(variant: SupportedFlow.Variant, file: SirFile) {
58+
private fun generateKotlinClassWithAnyObjectConversions(variant: SupportedFlow.Variant, file: SirIrFile) {
5959
file.addConversions(variant) { from ->
6060
addSwiftToKotlinConversion(
6161
from,
@@ -65,7 +65,7 @@ class FlowConversionConstructorsGenerator(
6565
}
6666
}
6767

68-
private fun generateKotlinClassWithBridgeableConversions(variant: SupportedFlow.Variant, file: SirFile) {
68+
private fun generateKotlinClassWithBridgeableConversions(variant: SupportedFlow.Variant, file: SirIrFile) {
6969
file.addConversions(variant) { from ->
7070
addSwiftToKotlinConversion(
7171
from,
@@ -75,7 +75,7 @@ class FlowConversionConstructorsGenerator(
7575
}
7676
}
7777

78-
private fun generateSwiftClassWithAnyObjectConversions(variant: SupportedFlow.Variant, file: SirFile) {
78+
private fun generateSwiftClassWithAnyObjectConversions(variant: SupportedFlow.Variant, file: SirIrFile) {
7979
generateSwiftClassConversions(
8080
variant,
8181
file,
@@ -88,7 +88,7 @@ class FlowConversionConstructorsGenerator(
8888
}
8989
}
9090

91-
private fun generateSwiftClassWithBridgeableConversions(variant: SupportedFlow.Variant, file: SirFile) {
91+
private fun generateSwiftClassWithBridgeableConversions(variant: SupportedFlow.Variant, file: SirIrFile) {
9292
generateSwiftClassConversions(
9393
variant,
9494
file,
@@ -107,7 +107,7 @@ class FlowConversionConstructorsGenerator(
107107

108108
private fun generateSwiftClassConversions(
109109
variant: SupportedFlow.Variant,
110-
file: SirFile,
110+
file: SirIrFile,
111111
typeBound: SirType,
112112
bodyFactory: SirExtension.(SirTypeParameter) -> Unit,
113113
) {
@@ -143,7 +143,7 @@ class FlowConversionConstructorsGenerator(
143143
.forEach(action)
144144
}
145145

146-
private fun SirFile.addSwiftToKotlinConversion(
146+
private fun SirIrFile.addSwiftToKotlinConversion(
147147
from: SupportedFlow.Variant,
148148
to: SupportedFlow.Variant,
149149
typeBound: SirType,

SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/features/functions/FileScopeConversionParentProvider.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import co.touchlab.skie.sir.element.SirClass
99
import co.touchlab.skie.sir.element.SirDeclarationParent
1010
import co.touchlab.skie.sir.element.SirExtension
1111
import co.touchlab.skie.sir.element.SirFile
12+
import co.touchlab.skie.sir.element.SirIrFile
1213
import co.touchlab.skie.sir.element.SirSimpleFunction
1314
import co.touchlab.skie.sir.element.receiverDeclaration
1415
import co.touchlab.skie.sir.element.resolveAsKirClass
@@ -54,7 +55,7 @@ class FileScopeConversionParentProvider(
5455
return when (callableDeclaration.origin) {
5556
KirCallableDeclaration.Origin.Member -> error("Member callable are not supported. Was: $callableDeclaration")
5657
KirCallableDeclaration.Origin.Extension -> getExtensions(callableDeclaration, sirCallableDeclaration)
57-
KirCallableDeclaration.Origin.Global -> context.skieNamespaceProvider.getNamespaceFile(callableDeclaration.owner).let(::listOf)
58+
KirCallableDeclaration.Origin.Global -> context.classNamespaceProvider.getNamespaceFile(callableDeclaration.owner).let(::listOf)
5859
}
5960
}
6061

@@ -99,11 +100,11 @@ class FileScopeConversionParentProvider(
99100
private fun getExtensionNamespace(
100101
callableDeclaration: KirCallableDeclaration<*>,
101102
parentType: SirType,
102-
): SirFile {
103+
): SirIrFile {
103104
val extensionReceiverKirClass = getExtensionReceiverKirClassIfExists(parentType)
104105

105-
return extensionReceiverKirClass?.let { context.skieNamespaceProvider.getNamespaceFile(it) }
106-
?: context.skieNamespaceProvider.getNamespaceFile(callableDeclaration.owner)
106+
return extensionReceiverKirClass?.let { context.classNamespaceProvider.getNamespaceFile(it) }
107+
?: context.classNamespaceProvider.getNamespaceFile(callableDeclaration.owner)
107108
}
108109

109110
private fun getExtensionReceiverKirClassIfExists(parentType: SirType): KirClass? =
@@ -114,7 +115,7 @@ class FileScopeConversionParentProvider(
114115
else -> null
115116
}
116117

117-
private fun createNonOptionalExtension(file: SirFile, sirClass: SirClass): SirExtension? =
118+
private fun createNonOptionalExtension(file: SirIrFile, sirClass: SirClass): SirExtension? =
118119
if (sirClass.typeParameters.isEmpty()) {
119120
sirProvider.getExtension(
120121
classDeclaration = sirClass,
@@ -125,6 +126,7 @@ class FileScopeConversionParentProvider(
125126
null
126127
}
127128

129+
@Suppress("UNUSED_PARAMETER")
128130
private fun getOptionalExtensions(callableDeclaration: KirCallableDeclaration<*>, type: NullableSirType, namespace: SirFile): List<SirExtension> {
129131
// val nonNullType = type.type
130132
//

SKIE/compiler/kotlin-plugin/src/kgp_common/kotlin/co/touchlab/skie/phases/features/sealed/SealedEnumGeneratorDelegate.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class SealedEnumGeneratorDelegate(
1717
SirClass(
1818
baseName = "Sealed",
1919
kind = SirClass.Kind.Enum,
20-
parent = skieNamespaceProvider.getNamespace(kirClass),
20+
parent = classNamespaceProvider.getNamespace(kirClass),
2121
visibility = SirVisibility.PublicButReplaced,
2222
).apply {
2323
addConformanceToHashableIfPossible(kirClass)

0 commit comments

Comments
 (0)