From 703d06c50d234f4983772ae050ec0803eafa87a2 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Sat, 22 Feb 2025 15:22:01 +0100 Subject: [PATCH] IDEA-368012 New run/debug configurations should use the project folder as default working directory implemented for java & kotlin GitOrigin-RevId: b9dd9940016cba3cb9a421680fc15540c21288a0 --- .../application/ApplicationConfiguration.java | 2 +- platform/execution-impl/api-dump-unreviewed.txt | 1 + .../execution/util/ProgramParametersUtil.java | 12 ++++++++++++ .../kotlin/idea/run/KotlinRunConfiguration.kt | 4 +++- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java index aa4738cb15f1..d8c92fd66c07 100644 --- a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java +++ b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java @@ -376,7 +376,7 @@ public class ApplicationConfiguration extends JavaRunConfigurationBase String workingDirectory = options.getWorkingDirectory(); if (workingDirectory == null) { - workingDirectory = PathUtil.toSystemDependentName(getProject().getBasePath()); + workingDirectory = ProgramParametersUtil.getWorkingDirectoryByModule(this); } else { workingDirectory = FileUtilRt.toSystemDependentName(VirtualFileManager.extractPath(workingDirectory)); diff --git a/platform/execution-impl/api-dump-unreviewed.txt b/platform/execution-impl/api-dump-unreviewed.txt index 0bc529e79dcf..935d5617b78d 100644 --- a/platform/execution-impl/api-dump-unreviewed.txt +++ b/platform/execution-impl/api-dump-unreviewed.txt @@ -2053,6 +2053,7 @@ f:com.intellij.execution.util.ProgramParametersUtil - s:expandPathAndMacros(java.lang.String,com.intellij.openapi.module.Module,com.intellij.openapi.project.Project):java.lang.String - s:getModule(com.intellij.execution.CommonProgramRunConfigurationParameters):com.intellij.openapi.module.Module - s:getWorkingDir(com.intellij.execution.CommonProgramRunConfigurationParameters,com.intellij.openapi.project.Project,com.intellij.openapi.module.Module):java.lang.String +- s:getWorkingDirectoryByModule(com.intellij.execution.configurations.ModuleBasedConfiguration):java.lang.String f:com.intellij.execution.util.ScriptFileUtil - s:copyToTempFile(java.lang.String):java.io.File - s:findScriptFileByPath(java.lang.String):com.intellij.openapi.vfs.VirtualFile diff --git a/platform/execution-impl/src/com/intellij/execution/util/ProgramParametersUtil.java b/platform/execution-impl/src/com/intellij/execution/util/ProgramParametersUtil.java index f74acbb0ade8..f48562ff4751 100644 --- a/platform/execution-impl/src/com/intellij/execution/util/ProgramParametersUtil.java +++ b/platform/execution-impl/src/com/intellij/execution/util/ProgramParametersUtil.java @@ -2,11 +2,14 @@ package com.intellij.execution.util; import com.intellij.execution.CommonProgramRunConfigurationParameters; +import com.intellij.execution.configurations.ModuleBasedConfiguration; import com.intellij.execution.configurations.RuntimeConfigurationWarning; import com.intellij.execution.configurations.SimpleProgramParameters; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; +import com.intellij.openapi.project.workspace.SubprojectInfoProvider; import com.intellij.util.IncorrectOperationException; +import com.intellij.util.PathUtil; import org.jetbrains.annotations.Nullable; public final class ProgramParametersUtil { @@ -40,4 +43,13 @@ public final class ProgramParametersUtil { public static @Nullable Module getModule(CommonProgramRunConfigurationParameters configuration) { return new ProgramParametersConfigurator().getModule(configuration); } + + public static String getWorkingDirectoryByModule(ModuleBasedConfiguration configuration) { + Module module = configuration.getConfigurationModule().getModule(); + if (module != null) { + String path = SubprojectInfoProvider.Companion.getSubprojectPath(module); + if (path != null) return path; + } + return PathUtil.toSystemDependentName(configuration.getProject().getBasePath()); + } } diff --git a/plugins/kotlin/run-configurations/jvm/src/org/jetbrains/kotlin/idea/run/KotlinRunConfiguration.kt b/plugins/kotlin/run-configurations/jvm/src/org/jetbrains/kotlin/idea/run/KotlinRunConfiguration.kt index d48f3bfa0c3e..0cb06e002674 100644 --- a/plugins/kotlin/run-configurations/jvm/src/org/jetbrains/kotlin/idea/run/KotlinRunConfiguration.kt +++ b/plugins/kotlin/run-configurations/jvm/src/org/jetbrains/kotlin/idea/run/KotlinRunConfiguration.kt @@ -112,7 +112,9 @@ open class KotlinRunConfiguration(name: String?, runConfigurationModule: JavaRun FileUtilRt.toSystemDependentName(VirtualFileManager.extractPath(it)) } ?: PathUtil.toSystemDependentName(defaultWorkingDirectory()) - protected open fun defaultWorkingDirectory() = project.basePath + protected open fun defaultWorkingDirectory(): String? { + return ProgramParametersUtil.getWorkingDirectoryByModule(this) + } override fun setVMParameters(value: String?) { options.vmParameters = value