mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-04-19 13:02:30 +07:00
IDEA-379009 Gradle/Spring/Micronaut: Use project root directory to run Gradle tasks.
Removed the old workaround: define the settings file to be used explicitly. Adjusted attach source task to still use location-based execution (avoid unnecessary refactoring) Updated task name locator in test, as tasks now have full names (relative to the root Gradle project) (cherry picked from commit 7ac4254d9e3a8ac04114c7529bc3a2416892c49c) IJ-MR-182170 GitOrigin-RevId: a1b827f3013d328866b00457fd5394462b16f346
This commit is contained in:
committed by
intellij-monorepo-bot
parent
f92798bb47
commit
1a065fbaae
@@ -5,11 +5,8 @@ import com.intellij.codeInsight.TestFrameworks;
|
||||
import com.intellij.execution.Location;
|
||||
import com.intellij.execution.junit2.PsiMemberParameterizedLocation;
|
||||
import com.intellij.execution.junit2.info.MethodLocation;
|
||||
import com.intellij.openapi.externalSystem.model.execution.ExternalSystemTaskExecutionSettings;
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
@@ -90,34 +87,4 @@ public final class GradleRunnerUtil {
|
||||
if (virtualFile == null) return false;
|
||||
return GradleConstants.EXTENSION.equals(virtualFile.getExtension());
|
||||
}
|
||||
|
||||
/**
|
||||
* For a given IDEA module, adds settings.gradle(.kts) file from the root Gradle project as explicit commandline flag.
|
||||
* <p>
|
||||
* Workaround for IDEA-316566 and IDEA-317008
|
||||
* @param module module of a Gradle-based project
|
||||
* @param taskSettings execution settings of a task inside this module.
|
||||
*/
|
||||
public static void addExplicitSettingsFileParameter(@NotNull Module module, @NotNull ExternalSystemTaskExecutionSettings taskSettings) {
|
||||
if (!isGradleModule(module)) {
|
||||
return;
|
||||
}
|
||||
|
||||
String path = ExternalSystemApiUtil.getExternalRootProjectPath(module);
|
||||
String settingsPath = null;
|
||||
|
||||
String groovySettingsPath = path + "/" + GradleConstants.SETTINGS_FILE_NAME;
|
||||
if (FileUtil.exists(groovySettingsPath)) {
|
||||
settingsPath = groovySettingsPath;
|
||||
}
|
||||
String ktsSettingsPath = path + "/" + GradleConstants.KOTLIN_DSL_SETTINGS_FILE_NAME;
|
||||
if (FileUtil.exists(ktsSettingsPath)) {
|
||||
settingsPath = ktsSettingsPath;
|
||||
}
|
||||
|
||||
if (settingsPath != null) {
|
||||
taskSettings.setScriptParameters(
|
||||
StringUtil.notNullize(taskSettings.getScriptParameters()) + " --settings-file \"" + settingsPath + "\"");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,13 +5,11 @@ import com.intellij.execution.Executor
|
||||
import com.intellij.execution.application.ApplicationConfiguration
|
||||
import com.intellij.execution.runners.ExecutionEnvironment
|
||||
import com.intellij.openapi.application.ReadAction
|
||||
import com.intellij.openapi.externalSystem.model.execution.ExternalSystemTaskExecutionSettings
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.ThrowableComputable
|
||||
import com.intellij.task.ExecuteRunConfigurationTask
|
||||
import org.jetbrains.annotations.ApiStatus.Experimental
|
||||
import org.jetbrains.plugins.gradle.execution.GradleRunnerUtil
|
||||
|
||||
|
||||
/**
|
||||
@@ -46,11 +44,6 @@ abstract class CustomGradleApplicationEnvironmentProvider<T : ApplicationConfigu
|
||||
|
||||
abstract fun getRunConfiguration(task: ExecuteRunConfigurationTask): T?
|
||||
|
||||
override fun customiseTaskExecutionsSettings(taskSettings: ExternalSystemTaskExecutionSettings, module: Module) {
|
||||
GradleRunnerUtil.addExplicitSettingsFileParameter(module, taskSettings)
|
||||
super.customiseTaskExecutionsSettings(taskSettings, module)
|
||||
}
|
||||
|
||||
override fun generateInitScript(params: GradleInitScriptParameters): String? {
|
||||
val generator = findGenerator(params.module) ?: return super.generateInitScript(params)
|
||||
return generator.generateInitScript(params)
|
||||
|
||||
@@ -68,7 +68,7 @@ object GradleLibrarySourcesDownloader {
|
||||
}
|
||||
val module = findAssociatedGradleModule(orderEntries) ?: return null
|
||||
val gradleModuleData = CachedModuleDataFinder.getGradleModuleData(module) ?: return null
|
||||
val externalProjectPath = gradleModuleData.directoryToRunTask
|
||||
val externalProjectPath = gradleModuleData.moduleData.linkedExternalProjectPath ?: return null
|
||||
val libraryOrderEntry = orderEntries.first()
|
||||
val sourceArtifactNotation = libraryOrderEntry.getArtifactCoordinates()?.let { "$it:sources" } ?: return null
|
||||
val cachedSourcesPath = lookupSourcesPathFromCache(libraryOrderEntry, sourceArtifactNotation, project, externalProjectPath)
|
||||
|
||||
@@ -108,15 +108,13 @@ tasks.register("hello-module") {
|
||||
|
||||
val taskData: TaskData = ExternalSystemApiUtil
|
||||
.findProjectTasks(myProject, GradleConstants.SYSTEM_ID, "$projectPath/m1/m2/m3")
|
||||
.find { it.name == "hello-module" } ?: throw AssertionFailedError("Task 'hello-module' not found")
|
||||
.find { it.name.contains("hello-module") } ?: throw AssertionFailedError("Task 'hello-module' not found")
|
||||
|
||||
val output = runTask(taskData)
|
||||
assertThat(output).contains("expected!");
|
||||
}
|
||||
|
||||
// Checks the workaround for IDEA-316566 IDEA-317008
|
||||
@Test
|
||||
@TargetVersions("<9.0") // --settings-file was removed in Gradle 9.0
|
||||
fun `run task from misconfigured subproject with explicit script parameter`() {
|
||||
val properSettingsFilePaths = createProjectSubFile("settings.gradle", """
|
||||
rootProject.name = "rootProject"
|
||||
@@ -154,10 +152,9 @@ tasks.register("hello-module") {
|
||||
|
||||
val taskData: TaskData = ExternalSystemApiUtil
|
||||
.findProjectTasks(myProject, GradleConstants.SYSTEM_ID, "$projectPath/projectA")
|
||||
.find { it.name == "hello" } ?: throw AssertionFailedError("Task 'hello' not found")
|
||||
.find { it.name.contains("hello") } ?: throw AssertionFailedError("Task 'hello' not found")
|
||||
|
||||
// this script parameter allows to skip malicious settings.gradle files.
|
||||
val output = runTask(taskData, "--settings-file \"$properSettingsFilePaths\"")
|
||||
val output = runTask(taskData)
|
||||
assertThat(output).contains("expected!")
|
||||
}
|
||||
|
||||
|
||||
@@ -135,7 +135,7 @@ public final class GradleProjectResolverUtil {
|
||||
|
||||
String directoryToRunTask;
|
||||
if (compositeBuildGradlePath.isEmpty()) {
|
||||
directoryToRunTask = isUnderProjectRoot ? mainModuleConfigPath : rootProjectPath;
|
||||
directoryToRunTask = rootProjectPath;
|
||||
}
|
||||
else {
|
||||
directoryToRunTask = mainBuildRootPath;
|
||||
|
||||
@@ -28,7 +28,7 @@ class GradleTasksImportingTest : BuildViewMessagesImportingTestCase() {
|
||||
.contains("help", "init", "wrapper", "projects", "tasks", "properties")
|
||||
|
||||
assertThat(findTasks(path("subproject")).map { it.name })
|
||||
.contains("help", "projects", "tasks", "properties")
|
||||
.contains(":subproject:help", ":subproject:projects", ":subproject:tasks", ":subproject:properties")
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user