Skip to content

Commit

Permalink
RUN: Don't activate Build Tool Window if "Activate tool window" optio…
Browse files Browse the repository at this point in the history
…n is disabled
  • Loading branch information
mchernyavsky authored and Mikhail Chernyavsky committed Oct 28, 2019
1 parent 3e068ce commit c71cfdc
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 8 deletions.
Expand Up @@ -21,6 +21,7 @@ import org.jetbrains.concurrency.AsyncPromise
import org.jetbrains.concurrency.Promise
import org.rust.cargo.runconfig.buildtool.CargoBuildManager.getBuildConfiguration
import org.rust.cargo.runconfig.buildtool.CargoBuildManager.isBuildToolWindowEnabled
import org.rust.cargo.runconfig.buildtool.isActivateToolWindowBeforeRun
import org.rust.cargo.runconfig.command.CargoCommandConfiguration
import org.rust.cargo.toolchain.prependArgument
import org.rust.openapiext.saveAllDocuments
Expand Down Expand Up @@ -58,8 +59,7 @@ class CargoTestCommandRunner : AsyncProgramRunner<RunnerSettings>() {
}
val exitCode = AsyncPromise<Int?>()

val activateToolWindow = environment.runnerAndConfigurationSettings?.isActivateToolWindowBeforeRun == true
if (activateToolWindow) {
if (environment.isActivateToolWindowBeforeRun) {
RunContentExecutor(environment.project, buildProcessHandler)
.apply { createFilters(state.cargoProject).forEach { withFilter(it) } }
.withAfterCompletion { exitCode.setResult(buildProcessHandler.exitCode) }
Expand Down
Expand Up @@ -5,6 +5,7 @@

package org.rust.cargo.runconfig.buildtool

import com.intellij.build.BuildContentDescriptor
import com.intellij.build.BuildProgressListener
import com.intellij.build.DefaultBuildDescriptor
import com.intellij.build.events.impl.*
Expand All @@ -28,6 +29,7 @@ import org.rust.cargo.CargoConstants
import org.rust.cargo.runconfig.RsAnsiEscapeDecoder
import org.rust.cargo.runconfig.RsExecutableRunner.Companion.binaries
import org.rust.cargo.runconfig.createFilters
import javax.swing.JComponent

@Suppress("UnstableApiUsage")
class CargoBuildAdapter(
Expand Down Expand Up @@ -59,6 +61,15 @@ class CargoBuildAdapter(
.withExecutionFilters(*createFilters(context.cargoProject).toTypedArray())
.withRestartAction(createRerunAction(context.processHandler, context.environment))
.withRestartAction(createStopAction(context.processHandler))
.withContentDescriptorSupplier {
val activateToolWindow = context.environment.isActivateToolWindowBeforeRun
BuildContentDescriptor(null, null, object : JComponent() {}, "Build")
.apply {
isActivateToolWindowWhenAdded = activateToolWindow
isActivateToolWindowWhenFailed = activateToolWindow
isAutoFocusContent = activateToolWindow
}
}
buildProgressListener.onEvent(context.buildId, buildStarted)
}

Expand Down
Expand Up @@ -109,7 +109,9 @@ object CargoBuildManager {
if (!isHeadlessEnvironment) {
val buildToolWindow = ToolWindowManager.getInstance(project).getToolWindow(ToolWindowId.BUILD)
buildToolWindow?.setAvailable(true, null)
buildToolWindow?.show(null)
if (environment.isActivateToolWindowBeforeRun) {
buildToolWindow?.activate(null)
}
}

processHandler = state.startProcess(emulateTerminal = true)
Expand Down Expand Up @@ -229,14 +231,20 @@ object CargoBuildManager {
return buildConfiguration
}

fun createBuildEnvironment(buildConfiguration: CargoCommandConfiguration): ExecutionEnvironment? {
fun createBuildEnvironment(
buildConfiguration: CargoCommandConfiguration,
environment: ExecutionEnvironment? = null
): ExecutionEnvironment? {
require(isBuildConfiguration(buildConfiguration))
val project = buildConfiguration.project
val runManager = RunManager.getInstance(project) as? RunManagerImpl ?: return null
val executor = ExecutorRegistry.getInstance().getExecutorById(DefaultRunExecutor.EXECUTOR_ID) ?: return null
val runner = ProgramRunner.findRunnerById(CargoCommandRunner.RUNNER_ID) ?: return null
val settings = RunnerAndConfigurationSettingsImpl(runManager, buildConfiguration)
return ExecutionEnvironment(executor, runner, settings, project)
settings.isActivateToolWindowBeforeRun = environment.isActivateToolWindowBeforeRun
val buildEnvironment = ExecutionEnvironment(executor, runner, settings, project)
environment?.copyUserDataTo(buildEnvironment)
return buildEnvironment
}

fun showBuildNotification(
Expand Down
Expand Up @@ -39,9 +39,7 @@ class CargoBuildTaskProvider : BeforeRunTaskProvider<CargoBuildTaskProvider.Buil
if (configuration !is CargoCommandConfiguration) return false

val buildConfiguration = getBuildConfiguration(configuration) ?: return true
val buildEnvironment = createBuildEnvironment(buildConfiguration)
?.also { environment.copyUserDataTo(it) }
?: return false
val buildEnvironment = createBuildEnvironment(buildConfiguration, environment) ?: return false
val buildableElement = CargoBuildConfiguration(buildConfiguration, buildEnvironment)

val result = CompletableFuture<Boolean>()
Expand Down
3 changes: 3 additions & 0 deletions src/main/kotlin/org/rust/cargo/runconfig/buildtool/Utils.kt
Expand Up @@ -45,6 +45,9 @@ fun ExecutionEnvironment.notifyProcessTerminating(handler: ProcessHandler) =
fun ExecutionEnvironment.notifyProcessTerminated(handler: ProcessHandler, exitCode: Int) =
executionListener.processTerminated(executor.id, this, handler, exitCode)

val ExecutionEnvironment?.isActivateToolWindowBeforeRun: Boolean
get() = this?.runnerAndConfigurationSettings?.isActivateToolWindowBeforeRun != false

class MockProgressIndicator : EmptyProgressIndicator() {
private val _textHistory: MutableList<String?> = mutableListOf()
val textHistory: List<String?> get() = _textHistory
Expand Down

0 comments on commit c71cfdc

Please sign in to comment.