11package org.javacs.kt.compiler
22
3- import com.intellij.codeInsight.NullableNotNullManager
43import com.intellij.lang.Language
5- import com.intellij.openapi.Disposable
64import com.intellij.openapi.util.Disposer
75import com.intellij.openapi.vfs.StandardFileSystems
86import com.intellij.openapi.vfs.VirtualFileManager
97import com.intellij.openapi.vfs.VirtualFileSystem
108import com.intellij.psi.PsiFile
119import com.intellij.psi.PsiFileFactory
12- import com.intellij.mock.MockProject
1310import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
1411import org.jetbrains.kotlin.cli.common.environment.setIdeaIoUseFallback
1512import org.jetbrains.kotlin.cli.jvm.compiler.CliBindingTrace
@@ -18,7 +15,6 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
1815import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
1916import org.jetbrains.kotlin.cli.jvm.config.addJavaSourceRoots
2017import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
21- import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser
2218import org.jetbrains.kotlin.config.CommonConfigurationKeys
2319import org.jetbrains.kotlin.config.CompilerConfiguration as KotlinCompilerConfiguration
2420import org.jetbrains.kotlin.config.JVMConfigurationKeys
@@ -39,26 +35,20 @@ import org.jetbrains.kotlin.resolve.LazyTopDownAnalyzer
3935import org.jetbrains.kotlin.resolve.TopDownAnalysisMode
4036import org.jetbrains.kotlin.resolve.calls.components.InferenceSession
4137import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
42- import org.jetbrains.kotlin.resolve.extensions.ExtraImportsProviderExtension
4338import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory
4439import org.jetbrains.kotlin.resolve.scopes.LexicalScope
4540import org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar
4641import org.jetbrains.kotlin.scripting.compiler.plugin.definitions.CliScriptDefinitionProvider
4742import org.jetbrains.kotlin.scripting.configuration.ScriptingConfigurationKeys
48- import org.jetbrains.kotlin.scripting.definitions.ScriptCompilationConfigurationFromDefinition
4943import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionProvider
50- import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider
51- import org.jetbrains.kotlin.scripting.definitions.StandardScriptDefinition
5244import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
5345import org.jetbrains.kotlin.scripting.definitions.KotlinScriptDefinition // Legacy
5446import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
5547import org.jetbrains.kotlin.scripting.definitions.getEnvironment
56- import org.jetbrains.kotlin.scripting.extensions.ScriptExtraImportsProviderExtension
5748import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate
5849import org.jetbrains.kotlin.types.TypeUtils
5950import org.jetbrains.kotlin.types.expressions.ExpressionTypingServices
6051import org.jetbrains.kotlin.util.KotlinFrontEndException
61- import org.jetbrains.kotlin.utils.PathUtil
6252import java.io.Closeable
6353import java.io.File
6454import java.nio.file.Path
@@ -69,7 +59,6 @@ import kotlin.concurrent.withLock
6959import kotlin.script.dependencies.Environment
7060import kotlin.script.dependencies.ScriptContents
7161import kotlin.script.experimental.dependencies.ScriptDependencies
72- import kotlin.script.experimental.api.ScriptCompilationConfiguration
7362import kotlin.script.experimental.dependencies.DependenciesResolver
7463import kotlin.script.experimental.dependencies.DependenciesResolver.ResolveResult
7564import kotlin.script.experimental.host.ScriptingHostConfiguration
@@ -80,6 +69,12 @@ import org.javacs.kt.LOG
8069import org.javacs.kt.CompilerConfiguration
8170import org.javacs.kt.util.KotlinLSException
8271import org.javacs.kt.util.LoggingMessageCollector
72+ import org.jetbrains.kotlin.cli.common.output.writeAllTo
73+ import org.jetbrains.kotlin.codegen.ClassBuilderFactories
74+ import org.jetbrains.kotlin.codegen.KotlinCodegenFacade
75+ import org.jetbrains.kotlin.codegen.state.GenerationState
76+ import org.jetbrains.kotlin.container.getService
77+ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
8378
8479private val GRADLE_DSL_DEPENDENCY_PATTERN = Regex (" ^gradle-(?:kotlin-dsl|core).*\\ .jar$" )
8580
@@ -445,7 +440,7 @@ enum class CompilationKind {
445440 * Incrementally compiles files and expressions.
446441 * The basic strategy for compiling one file at-a-time is outlined in OneFilePerformance.
447442 */
448- class Compiler (javaSourcePath : Set <Path >, classPath : Set <Path >, buildScriptClassPath : Set <Path > = emptySet()) : Closeable {
443+ class Compiler (javaSourcePath : Set <Path >, classPath : Set <Path >, buildScriptClassPath : Set <Path > = emptySet(), var outputDirectory : File ? = null ) : Closeable {
449444 private var closed = false
450445 private val localFileSystem: VirtualFileSystem
451446
@@ -553,6 +548,34 @@ class Compiler(javaSourcePath: Set<Path>, classPath: Set<Path>, buildScriptClass
553548 }
554549 }
555550
551+ fun removeGeneratedCode (files : Collection <KtFile >) {
552+ files.forEach { file ->
553+ file.declarations.forEach { declaration ->
554+ outputDirectory?.resolve(
555+ file.packageFqName.asString().replace(" ." , File .separator) + File .separator + declaration.name + " .class"
556+ )?.delete()
557+ }
558+ }
559+ }
560+
561+ fun generateCode (container : ComponentProvider , bindingContext : BindingContext , files : Collection <KtFile >) {
562+ outputDirectory?.let {
563+ compileLock.withLock {
564+ val compileEnv = compileEnvironmentFor(CompilationKind .DEFAULT )
565+ val state = GenerationState .Builder (
566+ project = compileEnv.environment.project,
567+ builderFactory = ClassBuilderFactories .BINARIES ,
568+ module = container.getService(ModuleDescriptor ::class .java),
569+ bindingContext = bindingContext,
570+ files = files.toList(),
571+ configuration = compileEnv.environment.configuration
572+ ).build()
573+ KotlinCodegenFacade .compileCorrectFiles(state)
574+ state.factory.writeAllTo(it)
575+ }
576+ }
577+ }
578+
556579 override fun close () {
557580 if (! closed) {
558581 defaultCompileEnvironment.close()
0 commit comments