[ObjCExport] Avoid making driver internals public.
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/Machinery.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/Machinery.kt
index 62787c9..38ce0b9 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/Machinery.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/driver/Machinery.kt
@@ -9,7 +9,6 @@
 import org.jetbrains.kotlin.backend.common.LoggingContext
 import org.jetbrains.kotlin.backend.common.phaser.*
 import org.jetbrains.kotlin.backend.konan.ConfigChecks
-import org.jetbrains.kotlin.backend.konan.InternalKotlinNativeApi
 import org.jetbrains.kotlin.backend.konan.KonanConfig
 import org.jetbrains.kotlin.backend.konan.getCompilerMessageLocation
 import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
@@ -36,8 +35,7 @@
  * * On the other hand, middle- and bitcode phases are hard to decouple due to the way the code was written many years ago.
  * It will take some time to rewrite it properly.
  */
-@InternalKotlinNativeApi
-interface PhaseContext : LoggingContext, ConfigChecks, ErrorReportingContext {
+internal interface PhaseContext : LoggingContext, ConfigChecks, ErrorReportingContext {
     val messageCollector: MessageCollector
 
     /**
@@ -46,8 +44,7 @@
     fun dispose()
 }
 
-@InternalKotlinNativeApi
-open class BasicPhaseContext(
+internal open class BasicPhaseContext(
         override val config: KonanConfig,
 ) : PhaseContext {
     override var inVerbosePhase = false
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt
index 5f6ab0a..76c38b9 100644
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt
+++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt
@@ -11,14 +11,15 @@
 import org.jetbrains.kotlin.backend.konan.llvm.CodeGenerator
 import org.jetbrains.kotlin.backend.konan.llvm.objcexport.ObjCExportBlockCodeGenerator
 import org.jetbrains.kotlin.backend.konan.llvm.objcexport.ObjCExportCodeGenerator
-import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
-import org.jetbrains.kotlin.descriptors.ClassDescriptor
-import org.jetbrains.kotlin.descriptors.ModuleDescriptor
-import org.jetbrains.kotlin.descriptors.SourceFile
+import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
+import org.jetbrains.kotlin.cli.common.messages.MessageUtil
+import org.jetbrains.kotlin.descriptors.*
 import org.jetbrains.kotlin.konan.exec.Command
 import org.jetbrains.kotlin.konan.file.File
 import org.jetbrains.kotlin.konan.file.createTempFile
 import org.jetbrains.kotlin.konan.target.CompilerOutputKind
+import org.jetbrains.kotlin.renderer.DescriptorRenderer
+import org.jetbrains.kotlin.resolve.source.getPsi
 
 @InternalKotlinNativeApi
 class ObjCExportedInterface(
@@ -53,7 +54,7 @@
     val ignoreInterfaceMethodCollisions = config.configuration.getBoolean(BinaryOptions.objcExportIgnoreInterfaceMethodCollisions)
     val reportNameCollisions = config.configuration.getBoolean(BinaryOptions.objcExportReportNameCollisions)
 
-    val problemCollector = ObjCExportHeaderGeneratorImpl.ProblemCollector(context)
+    val problemCollector = ObjCExportCompilerProblemCollector(context)
 
     val namer = ObjCExportNamerImpl(
             moduleDescriptors.toSet(),
@@ -67,11 +68,36 @@
             ignoreInterfaceMethodCollisions = ignoreInterfaceMethodCollisions,
             reportNameCollisions = reportNameCollisions,
     )
-    val headerGenerator = ObjCExportHeaderGeneratorImpl(context, moduleDescriptors, mapper, namer, problemCollector, objcGenerics)
+    val shouldExportKDoc = context.shouldExportKDoc()
+    val additionalImports = context.config.configuration.getNotNull(KonanConfigKeys.FRAMEWORK_IMPORT_HEADERS)
+    val headerGenerator = ObjCExportHeaderGenerator.createInstance(
+            moduleDescriptors, mapper, namer, problemCollector, objcGenerics, shouldExportKDoc = shouldExportKDoc,
+            additionalImports = additionalImports)
     headerGenerator.translateModule()
     return headerGenerator.buildInterface()
 }
 
+private class ObjCExportCompilerProblemCollector(val context: PhaseContext) : ObjCExportProblemCollector {
+    override fun reportWarning(text: String) {
+        context.reportCompilationWarning(text)
+    }
+
+    override fun reportWarning(declaration: DeclarationDescriptor, text: String) {
+        val psi = (declaration as? DeclarationDescriptorWithSource)?.source?.getPsi()
+                ?: return reportWarning(
+                        "$text\n    (at ${DescriptorRenderer.COMPACT_WITH_SHORT_TYPES.render(declaration)})"
+                )
+
+        val location = MessageUtil.psiElementToMessageLocation(psi)
+
+        context.messageCollector.report(CompilerMessageSeverity.WARNING, text, location)
+    }
+
+    override fun reportException(throwable: Throwable) {
+        throw throwable
+    }
+}
+
 /**
  * Populate framework directory with headers, module and info.plist.
  */
diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportHeaderGeneratorImpl.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportHeaderGeneratorImpl.kt
deleted file mode 100644
index 502de2d..0000000
--- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportHeaderGeneratorImpl.kt
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
- * that can be found in the LICENSE file.
- */
-
-package org.jetbrains.kotlin.backend.konan.objcexport
-
-import org.jetbrains.kotlin.backend.konan.InternalKotlinNativeApi
-import org.jetbrains.kotlin.backend.konan.KonanConfigKeys
-import org.jetbrains.kotlin.backend.konan.driver.PhaseContext
-import org.jetbrains.kotlin.backend.konan.reportCompilationWarning
-import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
-import org.jetbrains.kotlin.cli.common.messages.MessageUtil
-import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
-import org.jetbrains.kotlin.descriptors.DeclarationDescriptorWithSource
-import org.jetbrains.kotlin.descriptors.ModuleDescriptor
-import org.jetbrains.kotlin.renderer.DescriptorRenderer
-import org.jetbrains.kotlin.resolve.source.getPsi
-
-@InternalKotlinNativeApi
-class ObjCExportHeaderGeneratorImpl(
-        val context: PhaseContext,
-        moduleDescriptors: List<ModuleDescriptor>,
-        mapper: ObjCExportMapper,
-        namer: ObjCExportNamer,
-        problemCollector: ObjCExportProblemCollector,
-        objcGenerics: Boolean
-) : ObjCExportHeaderGenerator(moduleDescriptors, mapper, namer, objcGenerics, problemCollector) {
-
-    override val shouldExportKDoc = context.shouldExportKDoc()
-
-    internal class ProblemCollector(val context: PhaseContext) : ObjCExportProblemCollector {
-        override fun reportWarning(text: String) {
-            context.reportCompilationWarning(text)
-        }
-
-        override fun reportWarning(declaration: DeclarationDescriptor, text: String) {
-            val psi = (declaration as? DeclarationDescriptorWithSource)?.source?.getPsi()
-                    ?: return reportWarning(
-                            "$text\n    (at ${DescriptorRenderer.COMPACT_WITH_SHORT_TYPES.render(declaration)})"
-                    )
-
-            val location = MessageUtil.psiElementToMessageLocation(psi)
-
-            context.messageCollector.report(CompilerMessageSeverity.WARNING, text, location)
-        }
-
-        override fun reportException(throwable: Throwable) {
-            throw throwable
-        }
-    }
-
-    override fun getAdditionalImports(): List<String> =
-            context.config.configuration.getNotNull(KonanConfigKeys.FRAMEWORK_IMPORT_HEADERS)
-}
diff --git a/kotlin-native/objcexport-header-generator/build.gradle.kts b/kotlin-native/objcexport-header-generator/build.gradle.kts
index 6af3bf9..9d6dee8 100644
--- a/kotlin-native/objcexport-header-generator/build.gradle.kts
+++ b/kotlin-native/objcexport-header-generator/build.gradle.kts
@@ -18,7 +18,6 @@
     testImplementation(libs.junit.jupiter.api)
     testImplementation(libs.junit.jupiter.params)
     testImplementation(project(":compiler:tests-common", "tests-jar"))
-    testImplementation(project(":kotlin-native:backend.native"))
 
     testRuntimeOnly(libs.junit.jupiter.engine)
 }
diff --git a/kotlin-native/objcexport-header-generator/src/main/kotlin/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportHeaderGenerator.kt b/kotlin-native/objcexport-header-generator/src/main/kotlin/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportHeaderGenerator.kt
index 9beebc7..595ea19 100644
--- a/kotlin-native/objcexport-header-generator/src/main/kotlin/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportHeaderGenerator.kt
+++ b/kotlin-native/objcexport-header-generator/src/main/kotlin/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportHeaderGenerator.kt
@@ -1358,6 +1358,18 @@
                 add("#import <$it>")
             }
         }
+
+        fun createInstance(
+            moduleDescriptors: List<ModuleDescriptor>,
+            mapper: ObjCExportMapper,
+            namer: ObjCExportNamer,
+            problemCollector: ObjCExportProblemCollector,
+            objcGenerics: Boolean,
+            shouldExportKDoc: Boolean,
+            additionalImports: List<String>,
+        ): ObjCExportHeaderGenerator = ObjCExportHeaderGeneratorImpl(
+            moduleDescriptors, mapper, namer, problemCollector, objcGenerics, shouldExportKDoc, additionalImports
+        )
     }
 }
 
diff --git a/kotlin-native/objcexport-header-generator/src/main/kotlin/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportHeaderGeneratorImpl.kt b/kotlin-native/objcexport-header-generator/src/main/kotlin/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportHeaderGeneratorImpl.kt
new file mode 100644
index 0000000..df98ea8
--- /dev/null
+++ b/kotlin-native/objcexport-header-generator/src/main/kotlin/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportHeaderGeneratorImpl.kt
@@ -0,0 +1,21 @@
+/*
+ * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.backend.konan.objcexport
+
+import org.jetbrains.kotlin.descriptors.ModuleDescriptor
+
+internal class ObjCExportHeaderGeneratorImpl(
+        moduleDescriptors: List<ModuleDescriptor>,
+        mapper: ObjCExportMapper,
+        namer: ObjCExportNamer,
+        problemCollector: ObjCExportProblemCollector,
+        objcGenerics: Boolean,
+        override val shouldExportKDoc: Boolean,
+        private val additionalImports: List<String>,
+) : ObjCExportHeaderGenerator(moduleDescriptors, mapper, namer, objcGenerics, problemCollector) {
+    override fun getAdditionalImports(): List<String> =
+            additionalImports
+}
diff --git a/kotlin-native/objcexport-header-generator/src/main/kotlin/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportNamer.kt b/kotlin-native/objcexport-header-generator/src/main/kotlin/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportNamer.kt
index f5a16b2..aa8a203 100644
--- a/kotlin-native/objcexport-header-generator/src/main/kotlin/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportNamer.kt
+++ b/kotlin-native/objcexport-header-generator/src/main/kotlin/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportNamer.kt
@@ -284,7 +284,6 @@
         private val problemCollector: ObjCExportProblemCollector,
         private val local: Boolean
 ) : ObjCExportNamer {
-
     constructor(
             moduleDescriptors: Set<ModuleDescriptor>,
             builtIns: KotlinBuiltIns,
diff --git a/kotlin-native/objcexport-header-generator/src/test/kotlin/org/jetbrains/kotlin/backend/konan/testUtils/Fe10ObjCExportHeaderGenerator.kt b/kotlin-native/objcexport-header-generator/src/test/kotlin/org/jetbrains/kotlin/backend/konan/testUtils/Fe10ObjCExportHeaderGenerator.kt
index eda60e4..8b58ea2 100644
--- a/kotlin-native/objcexport-header-generator/src/test/kotlin/org/jetbrains/kotlin/backend/konan/testUtils/Fe10ObjCExportHeaderGenerator.kt
+++ b/kotlin-native/objcexport-header-generator/src/test/kotlin/org/jetbrains/kotlin/backend/konan/testUtils/Fe10ObjCExportHeaderGenerator.kt
@@ -6,43 +6,11 @@
 package org.jetbrains.kotlin.backend.konan.testUtils
 
 import com.intellij.openapi.Disposable
-import org.jetbrains.kotlin.analyzer.ModuleInfo
-import org.jetbrains.kotlin.analyzer.common.CommonDependenciesContainer
-import org.jetbrains.kotlin.analyzer.common.CommonResolverForModuleFactory
-import org.jetbrains.kotlin.backend.konan.KlibFactories
-import org.jetbrains.kotlin.backend.konan.KonanConfig
-import org.jetbrains.kotlin.backend.konan.KonanConfigKeys
-import org.jetbrains.kotlin.backend.konan.KonanConfigKeys.Companion.KONAN_HOME
 import org.jetbrains.kotlin.backend.konan.UnitSuspendFunctionObjCExport
-import org.jetbrains.kotlin.backend.konan.driver.BasicPhaseContext
 import org.jetbrains.kotlin.backend.konan.objcexport.*
-import org.jetbrains.kotlin.backend.konan.objcexport.ObjCExportHeaderGeneratorImpl
-import org.jetbrains.kotlin.backend.konan.objcexport.ObjCExportMapper
-import org.jetbrains.kotlin.backend.konan.objcexport.ObjCExportNamerImpl
 import org.jetbrains.kotlin.builtins.DefaultBuiltIns
-import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
-import org.jetbrains.kotlin.cli.common.arguments.K2NativeCompilerArguments
-import org.jetbrains.kotlin.cli.common.createFlexiblePhaseConfig
-import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
 import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
-import org.jetbrains.kotlin.config.*
 import org.jetbrains.kotlin.descriptors.ModuleDescriptor
-import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
-import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
-import org.jetbrains.kotlin.konan.target.CompilerOutputKind
-import org.jetbrains.kotlin.library.resolveSingleFileKlib
-import org.jetbrains.kotlin.name.Name
-import org.jetbrains.kotlin.platform.CommonPlatforms
-import org.jetbrains.kotlin.platform.TargetPlatform
-import org.jetbrains.kotlin.platform.konan.NativePlatforms
-import org.jetbrains.kotlin.psi.KtPsiFactory
-import org.jetbrains.kotlin.resolve.CompilerEnvironment
-import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
-import org.jetbrains.kotlin.resolve.konan.platform.NativePlatformAnalyzerServices
-import org.jetbrains.kotlin.storage.LockBasedStorageManager
-import org.jetbrains.kotlin.test.KotlinTestUtils
-import org.jetbrains.kotlin.test.testFramework.MockProjectEx
-import org.jetbrains.kotlin.test.util.KtTestUtil
 import java.io.File
 
 object Fe10ObjCExportHeaderGenerator : AbstractObjCExportHeaderGeneratorTest.ObjCExportHeaderGenerator {
@@ -70,19 +38,17 @@
         )
 
         val environment: KotlinCoreEnvironment = createKotlinCoreEnvironment(disposable)
-        val phaseContext = BasicPhaseContext(
-            KonanConfig(environment.project, environment.configuration)
-        )
 
         val kotlinFiles = root.walkTopDown().filter { it.isFile }.filter { it.extension == "kt" }.toList()
 
         return ObjCExportHeaderGeneratorImpl(
-            context = phaseContext,
             moduleDescriptors = listOf(createModuleDescriptor(environment, kotlinFiles)),
             mapper = mapper,
             namer = namer,
             problemCollector = ObjCExportProblemCollector.SILENT,
-            objcGenerics = true
+            objcGenerics = true,
+            shouldExportKDoc = false,
+            additionalImports = emptyList()
         )
     }
 }
\ No newline at end of file
diff --git a/kotlin-native/objcexport-header-generator/src/test/kotlin/org/jetbrains/kotlin/backend/konan/testUtils/Fe10Utils.kt b/kotlin-native/objcexport-header-generator/src/test/kotlin/org/jetbrains/kotlin/backend/konan/testUtils/Fe10Utils.kt
index 6ca5300..132b1df 100644
--- a/kotlin-native/objcexport-header-generator/src/test/kotlin/org/jetbrains/kotlin/backend/konan/testUtils/Fe10Utils.kt
+++ b/kotlin-native/objcexport-header-generator/src/test/kotlin/org/jetbrains/kotlin/backend/konan/testUtils/Fe10Utils.kt
@@ -9,8 +9,6 @@
 import org.jetbrains.kotlin.analyzer.ModuleInfo
 import org.jetbrains.kotlin.analyzer.common.CommonDependenciesContainer
 import org.jetbrains.kotlin.analyzer.common.CommonResolverForModuleFactory
-import org.jetbrains.kotlin.backend.konan.KlibFactories
-import org.jetbrains.kotlin.backend.konan.KonanConfigKeys
 import org.jetbrains.kotlin.builtins.DefaultBuiltIns
 import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
 import org.jetbrains.kotlin.cli.common.arguments.K2NativeCompilerArguments
@@ -21,7 +19,6 @@
 import org.jetbrains.kotlin.descriptors.ModuleDescriptor
 import org.jetbrains.kotlin.descriptors.PackageFragmentProvider
 import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
-import org.jetbrains.kotlin.konan.target.CompilerOutputKind
 import org.jetbrains.kotlin.library.resolveSingleFileKlib
 import org.jetbrains.kotlin.name.Name
 import org.jetbrains.kotlin.platform.CommonPlatforms
@@ -87,13 +84,6 @@
     val configuration = KotlinTestUtils.newConfiguration()
     configuration.put(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, createLanguageVersionSettings())
     configuration.put(CLIConfigurationKeys.FLEXIBLE_PHASE_CONFIG, createFlexiblePhaseConfig(K2NativeCompilerArguments()))
-    configuration.put(KonanConfigKeys.KONAN_HOME, konanHomePath)
-    configuration.put(KonanConfigKeys.PRODUCE, CompilerOutputKind.FRAMEWORK)
-    configuration.put(KonanConfigKeys.AUTO_CACHEABLE_FROM, emptyList())
-    configuration.put(KonanConfigKeys.CACHE_DIRECTORIES, emptyList())
-    configuration.put(KonanConfigKeys.CACHED_LIBRARIES, emptyMap())
-    configuration.put(KonanConfigKeys.FRAMEWORK_IMPORT_HEADERS, emptyList())
-    configuration.put(KonanConfigKeys.EXPORT_KDOC, true)
     return configuration
 }
 
diff --git a/kotlin-native/objcexport-header-generator/src/test/kotlin/org/jetbrains/kotlin/backend/konan/tests/ObjCExportMapperTest.kt b/kotlin-native/objcexport-header-generator/src/test/kotlin/org/jetbrains/kotlin/backend/konan/tests/ObjCExportMapperTest.kt
index e366036..e9d0f5b 100644
--- a/kotlin-native/objcexport-header-generator/src/test/kotlin/org/jetbrains/kotlin/backend/konan/tests/ObjCExportMapperTest.kt
+++ b/kotlin-native/objcexport-header-generator/src/test/kotlin/org/jetbrains/kotlin/backend/konan/tests/ObjCExportMapperTest.kt
@@ -6,8 +6,6 @@
 package org.jetbrains.kotlin.backend.konan.tests
 
 import com.intellij.openapi.util.Disposer
-import org.jetbrains.kotlin.backend.konan.KonanConfig
-import org.jetbrains.kotlin.backend.konan.driver.BasicPhaseContext
 import org.jetbrains.kotlin.backend.konan.objcexport.*
 import org.jetbrains.kotlin.backend.konan.testUtils.*
 import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
@@ -68,14 +66,13 @@
 
         val objcExportTranslator = ObjCExportTranslatorImpl(
             generator = ObjCExportHeaderGeneratorImpl(
-                context = BasicPhaseContext(
-                    KonanConfig(kotlinCoreEnvironment.project, kotlinCoreEnvironment.configuration)
-                ),
                 moduleDescriptors = listOf(module),
                 mapper = objcExportMapper,
                 namer = objcExportNamer,
                 problemCollector = ObjCExportProblemCollector.SILENT,
-                objcGenerics = true
+                objcGenerics = true,
+                shouldExportKDoc = false,
+                additionalImports = emptyList()
             ),
             mapper = objcExportMapper,
             namer = objcExportNamer,