KT-63748: Pack Swift Export Frontend into compiler plugin
Co-authored-by: Sergej Jaskiewicz <jaskiewiczs@icloud.com> Merge-request: KT-MR-13351 Merged-by: Artem Olkov <artem.olkov@jetbrains.com>
This commit is contained in:
+1
-1
@@ -21,7 +21,7 @@ import java.util.regex.Pattern;
|
||||
public class SirAnalysisGeneratedTests extends AbstractKotlinSirContextTest {
|
||||
@Test
|
||||
public void testAllFilesPresentInTestData() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("native/swift/sir-analysis-api/testData"), Pattern.compile("^([^_](.+)).kt$"), null, false);
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("native/swift/sir-analysis-api/testData"), Pattern.compile("^(.+)\\.kt$"), null, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.sir.visitors.SirTransformer
|
||||
* Pass that for every occurring declaration in package x.y.z generates a mirroring type scope and puts it there.
|
||||
* Right now, enums without cases are used for namespace simulation.
|
||||
*/
|
||||
public class SirInflatePackagesPass : SirPass<SirModule, Unit, SirModule> {
|
||||
public class SirInflatePackagesPass : SirModulePass {
|
||||
private data class Namespace(
|
||||
val elements: MutableList<SirDeclaration> = mutableListOf(),
|
||||
val children: MutableMap<String, Namespace> = mutableMapOf(),
|
||||
@@ -79,7 +79,7 @@ public class SirInflatePackagesPass : SirPass<SirModule, Unit, SirModule> {
|
||||
}.also(SirDeclarationContainer::fixParents)
|
||||
}
|
||||
|
||||
public override fun run(element: SirModule, data: Unit): SirModule = element.transform(Transformer, Context())
|
||||
public override fun run(element: SirModule, data: Nothing?): SirModule = element.transform(Transformer, Context())
|
||||
}
|
||||
|
||||
private fun SirDeclarationContainer.fixParents() = declarations
|
||||
|
||||
@@ -6,6 +6,9 @@
|
||||
package org.jetbrains.sir.passes
|
||||
|
||||
import org.jetbrains.kotlin.sir.SirElement
|
||||
import org.jetbrains.kotlin.sir.SirModule
|
||||
|
||||
public typealias SirModulePass = SirPass<SirModule, Nothing?, SirModule>
|
||||
|
||||
/**
|
||||
* Swift IR is supposed to be transformed by a series of passes.
|
||||
@@ -23,4 +26,4 @@ public interface SirPass<in E : SirElement, in T, out R> {
|
||||
public fun run(element: E, data: T): R
|
||||
}
|
||||
|
||||
public fun <E : SirElement, R> SirPass<E, Unit, R>.run(element: E): R = this.run(element, Unit)
|
||||
public fun <E : SirElement, R> SirPass<E, Nothing?, R>.run(element: E): R = this.run(element, null)
|
||||
|
||||
+2
-2
@@ -21,7 +21,7 @@ import java.lang.IllegalStateException
|
||||
* or `element` does not contain origin of type `SirOrigin.KotlinEntity.Function`,
|
||||
* returns original element.
|
||||
*/
|
||||
public class ForeignIntoSwiftFunctionTranslationPass : SirPass<SirElement, Nothing?, SirElement> {
|
||||
public class ForeignIntoSwiftFunctionTranslationPass : SirPass<SirElement, Nothing?, SirDeclaration> {
|
||||
|
||||
private class Transformer : SirTransformerVoid() {
|
||||
override fun <E : SirElement> transformElement(element: E): E {
|
||||
@@ -45,7 +45,7 @@ public class ForeignIntoSwiftFunctionTranslationPass : SirPass<SirElement, Nothi
|
||||
}
|
||||
}
|
||||
|
||||
override fun run(element: SirElement, data: Nothing?): SirElement = element.transform(Transformer())
|
||||
override fun run(element: SirElement, data: Nothing?): SirDeclaration = element.transform(Transformer())
|
||||
}
|
||||
|
||||
private fun SirKotlinOrigin.Parameter.toSir(): SirParameter = SirParameter(
|
||||
|
||||
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.sir.mock.MockParameter
|
||||
import org.jetbrains.kotlin.sir.passes.asserts.assertSirFunctionsEquals
|
||||
import org.jetbrains.kotlin.sir.passes.mocks.MockSirFunction
|
||||
import org.jetbrains.kotlin.sir.util.SirSwiftModule
|
||||
import org.jetbrains.sir.passes.run
|
||||
import org.jetbrains.sir.passes.translation.ForeignIntoSwiftFunctionTranslationPass
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertNotNull
|
||||
@@ -39,7 +40,7 @@ class SirPassTests {
|
||||
mySirElement.parent = module
|
||||
|
||||
val myPass = ForeignIntoSwiftFunctionTranslationPass()
|
||||
val result = myPass.run(mySirElement, null) as? SirFunction
|
||||
val result = myPass.run(mySirElement) as? SirFunction
|
||||
assertNotNull(result, "SirFunction should be produced")
|
||||
val exp = MockSirFunction(
|
||||
name = "foo",
|
||||
@@ -95,7 +96,7 @@ class SirPassTests {
|
||||
mySirElement.parent = module
|
||||
|
||||
val myPass = ForeignIntoSwiftFunctionTranslationPass()
|
||||
val result = myPass.run(mySirElement, null) as? SirFunction
|
||||
val result = myPass.run(mySirElement) as? SirFunction
|
||||
assertNotNull(result, "SirFunction should be produced")
|
||||
val exp = MockSirFunction(
|
||||
name = "foo",
|
||||
|
||||
@@ -8,6 +8,7 @@ package org.jetbrains.sir.printer
|
||||
import org.jetbrains.kotlin.sir.*
|
||||
import org.jetbrains.kotlin.sir.visitors.SirVisitorVoid
|
||||
import org.jetbrains.kotlin.utils.SmartPrinter
|
||||
import org.jetbrains.kotlin.utils.withIndent
|
||||
|
||||
private const val DEFAULT_INDENT: String = " "
|
||||
|
||||
@@ -46,6 +47,14 @@ public class SirAsSwiftSourcesPrinter(private val printer: SmartPrinter) : SirVi
|
||||
)
|
||||
}
|
||||
|
||||
override fun visitEnum(enum: SirEnum): Unit = with(printer) {
|
||||
println("enum ${enum.name.swiftIdentifier} {")
|
||||
withIndent {
|
||||
enum.acceptChildren(SirAsSwiftSourcesPrinter(printer))
|
||||
}
|
||||
println("}")
|
||||
}
|
||||
|
||||
override fun visitForeignFunction(function: SirForeignFunction) {} // we do not write foreign nodes
|
||||
|
||||
override fun visitElement(element: SirElement): Unit = with(printer) {
|
||||
|
||||
Reference in New Issue
Block a user