@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
1111import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback
1212import org.jetbrains.kotlin.cli.jvm.config.addJavaSourceRoots
1313import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
14+ import org.jetbrains.kotlin.config.CommonConfigurationKeys
1415import org.jetbrains.kotlin.config.CompilerConfiguration as KotlinCompilerConfiguration
1516import org.jetbrains.kotlin.container.ComponentProvider
1617import org.jetbrains.kotlin.container.get
@@ -22,6 +23,8 @@ import org.jetbrains.kotlin.resolve.BindingContext
2223import org.jetbrains.kotlin.resolve.BindingTraceContext
2324import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer
2425import org.jetbrains.kotlin.resolve.TopDownAnalysisMode
26+ import org.jetbrains.kotlin.resolve.calls.components.InferenceSession
27+ import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
2528import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
2629import org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar
2730import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.CliScriptDefinitionProvider
@@ -32,6 +35,9 @@ import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition // Lega
3235import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
3336import org.jetbrains.kotlin.scripting.definitions.getEnvironment
3437import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate
38+ import org.jetbrains.kotlin.types.TypeUtils
39+ import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices
40+ import org.jetbrains.kotlin.util.KotlinFrontEndException
3541import java.io.Closeable
3642import java.nio.file.Path
3743import java.nio.file.Paths
@@ -51,19 +57,19 @@ import org.javacs.kt.LOG
5157import org.javacs.kt.CompilerConfiguration
5258import org.javacs.kt.util.KotlinLSException
5359import org.javacs.kt.util.LoggingMessageCollector
60+ import org.jetbrains.kotlin.cli.common.output.writeAllTo
61+ import org.jetbrains.kotlin.codegen.ClassBuilderFactories
62+ import org.jetbrains.kotlin.codegen.KotlinCodegenFacade
63+ import org.jetbrains.kotlin.codegen.state.GenerationState
64+ import org.jetbrains.kotlin.container.getService
65+ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
5466import org.jetbrains.kotlin.cli.jvm.compiler.CliBindingTrace
5567import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
5668import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
5769import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
5870import org.jetbrains.kotlin.config.*
59- import org.jetbrains.kotlin.container.getService
60- import org.jetbrains.kotlin.descriptors.ModuleDescriptor
61- import org.jetbrains.kotlin.resolve.calls.components.InferenceSession
62- import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
6371import org.jetbrains.kotlin.resolve.scopes.LexicalScope
64- import org.jetbrains.kotlin.types.TypeUtils
65- import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices
66- import org.jetbrains.kotlin.util.KotlinFrontEndException
72+ import java.io.File
6773
6874private val GRADLE_DSL_DEPENDENCY_PATTERN = Regex (" ^gradle-(?:kotlin-dsl|core).*\\ .jar$" )
6975
@@ -429,7 +435,7 @@ enum class CompilationKind {
429435 * Incrementally compiles files and expressions.
430436 * The basic strategy for compiling one file at-a-time is outlined in OneFilePerformance.
431437 */
432- class Compiler (javaSourcePath : Set <Path >, classPath : Set <Path >, buildScriptClassPath : Set <Path > = emptySet()) : Closeable {
438+ class Compiler (javaSourcePath : Set <Path >, classPath : Set <Path >, buildScriptClassPath : Set <Path > = emptySet(), private val outputDirectory : File ) : Closeable {
433439 private var closed = false
434440 private val localFileSystem: VirtualFileSystem
435441
@@ -539,6 +545,34 @@ class Compiler(javaSourcePath: Set<Path>, classPath: Set<Path>, buildScriptClass
539545 }
540546 }
541547
548+ fun removeGeneratedCode (files : Collection <KtFile >) {
549+ files.forEach { file ->
550+ file.declarations.forEach { declaration ->
551+ outputDirectory.resolve(
552+ file.packageFqName.asString().replace(" ." , File .separator) + File .separator + declaration.name + " .class"
553+ ).delete()
554+ }
555+ }
556+ }
557+
558+ fun generateCode (module : ModuleDescriptor , bindingContext : BindingContext , files : Collection <KtFile >) {
559+ outputDirectory.let {
560+ compileLock.withLock {
561+ val compileEnv = compileEnvironmentFor(CompilationKind .DEFAULT )
562+ val state = GenerationState .Builder (
563+ project = compileEnv.environment.project,
564+ builderFactory = ClassBuilderFactories .BINARIES ,
565+ module = module,
566+ bindingContext = bindingContext,
567+ files = files.toList(),
568+ configuration = compileEnv.environment.configuration
569+ ).build()
570+ KotlinCodegenFacade .compileCorrectFiles(state)
571+ state.factory.writeAllTo(it)
572+ }
573+ }
574+ }
575+
542576 override fun close () {
543577 if (! closed) {
544578 defaultCompileEnvironment.close()
0 commit comments