diff --git a/idea/idea-repl/src/org/jetbrains/kotlin/console/ConsoleCompilerHelper.kt.201 b/idea/idea-repl/src/org/jetbrains/kotlin/console/ConsoleCompilerHelper.kt.201 new file mode 100644 index 00000000000..573c2368332 --- /dev/null +++ b/idea/idea-repl/src/org/jetbrains/kotlin/console/ConsoleCompilerHelper.kt.201 @@ -0,0 +1,54 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.console + +import com.intellij.execution.ExecutionManager +import com.intellij.execution.Executor +import com.intellij.execution.ui.RunContentDescriptor +import com.intellij.openapi.compiler.CompilerManager +import com.intellij.openapi.module.Module +import com.intellij.openapi.project.Project +import com.intellij.task.ProjectTaskContext +import com.intellij.task.ProjectTaskManager +import com.intellij.task.ProjectTaskNotification +import com.intellij.task.ProjectTaskResult + +class ConsoleCompilerHelper( + private val project: Project, + private val module: Module, + private val executor: Executor, + private val contentDescriptor: RunContentDescriptor +) { + + fun moduleIsUpToDate(): Boolean { + val compilerManager = CompilerManager.getInstance(project) + val compilerScope = compilerManager.createModuleCompileScope(module, true) + return compilerManager.isUpToDate(compilerScope) + } + + fun compileModule() { + if (ExecutionManager.getInstance(project).getContentManager().removeRunContent(executor, contentDescriptor)) { + ProjectTaskManager.getInstance(project).build(arrayOf(module), object : ProjectTaskNotification { + override fun finished(context: ProjectTaskContext, executionResult: ProjectTaskResult) { + if (!module.isDisposed) { + KotlinConsoleKeeper.getInstance(project).run(module, previousCompilationFailed = executionResult.errors > 0) + } + } + }) + } + } +} \ No newline at end of file