Skip to content

Commit

Permalink
Merge #4550
Browse files Browse the repository at this point in the history
4550: RUN: Don't activate Build Tool Window if "Activate tool window" option is disabled r=Undin a=mchernyavsky

Closes #4535.

Co-authored-by: Mikhail Chernyavsky <Mikhail.Chernyavsky@jetbrains.com>
  • Loading branch information
bors[bot] and mchernyavsky committed Jan 15, 2021
2 parents 4fb1485 + 5c2dec5 commit 2041ec3
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 16 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.openapiext.saveAllDocuments

Expand Down Expand Up @@ -57,8 +58,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 @@ -26,6 +27,7 @@ import com.intellij.openapi.util.text.StringUtil.convertLineSeparators
import com.intellij.openapi.vfs.VfsUtil
import org.rust.cargo.CargoConstants
import org.rust.cargo.runconfig.createFilters
import javax.swing.JComponent

@Suppress("UnstableApiUsage")
class CargoBuildAdapter(
Expand All @@ -42,16 +44,19 @@ class CargoBuildAdapter(
init {
val processHandler = checkNotNull(context.processHandler) { "Process handler can't be null" }
context.environment.notifyProcessStarted(processHandler)
val descriptor = DefaultBuildDescriptor(
context.buildId,
"Run Cargo command",
context.workingDirectory.toString(),
context.started
)
val buildStarted = StartBuildEventImpl(descriptor, "${context.taskName} running...")
.withExecutionFilters(*createFilters(context.cargoProject).toTypedArray())

val buildContentDescriptor = BuildContentDescriptor(null, null, object : JComponent() {}, "Build")
val activateToolWindow = context.environment.isActivateToolWindowBeforeRun
buildContentDescriptor.isActivateToolWindowWhenAdded = activateToolWindow
buildContentDescriptor.isActivateToolWindowWhenFailed = activateToolWindow

val descriptor = DefaultBuildDescriptor(context.buildId, "Run Cargo command", context.workingDirectory.toString(), context.started)
.withContentDescriptor { buildContentDescriptor }
.withRestartAction(createRerunAction(processHandler, context.environment))
.withRestartAction(createStopAction(processHandler))
.apply { createFilters(context.cargoProject).forEach { withExecutionFilter(it) } }

val buildStarted = StartBuildEventImpl(descriptor, "${context.taskName} running...")
buildProgressListener.onEvent(context.buildId, buildStarted)
}

Expand Down
Expand Up @@ -110,7 +110,9 @@ object CargoBuildManager {
@Suppress("UsePropertyAccessSyntax")
val buildToolWindow = BuildContentManager.getInstance(project).getOrCreateToolWindow()
buildToolWindow.setAvailable(true, null)
buildToolWindow.show(null)
if (environment.isActivateToolWindowBeforeRun) {
buildToolWindow.activate(null)
}
}

processHandler = state.startProcess(processColors = false)
Expand Down Expand Up @@ -233,14 +235,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 @@ -22,9 +22,7 @@ abstract class RsBuildTaskProvider<T : RsBuildTaskProvider.BuildTask<T>> : Befor
override fun isSingleton(): Boolean = true

protected fun doExecuteTask(buildConfiguration: CargoCommandConfiguration, environment: ExecutionEnvironment): Boolean {
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 @@ -49,6 +49,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 2041ec3

Please sign in to comment.