Do not suggest to load gradle.kts configurations after project reopening

For projects with distributionType=WRAPPED
Workaround for KT-40394

The original problem is that GradleInstallationManager.resolveGradleVersion returns null is case of distributionType=WRAPPED

^KT-40394 Fixed
This commit is contained in:
Natalia Selezneva
2020-07-17 18:45:29 +03:00
parent 300e9581de
commit e708e3f1c5
2 changed files with 21 additions and 18 deletions
@@ -11,6 +11,7 @@ import com.intellij.diff.util.DiffUtil
import com.intellij.openapi.actionSystem.AnAction import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.CommonDataKeys import com.intellij.openapi.actionSystem.CommonDataKeys
import com.intellij.openapi.components.ServiceManager
import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.Editor
import com.intellij.openapi.externalSystem.importing.ImportSpecBuilder import com.intellij.openapi.externalSystem.importing.ImportSpecBuilder
import com.intellij.openapi.externalSystem.util.ExternalSystemUtil import com.intellij.openapi.externalSystem.util.ExternalSystemUtil
@@ -19,6 +20,7 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.util.registry.Registry import com.intellij.openapi.util.registry.Registry
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.testFramework.LightVirtualFileBase import com.intellij.testFramework.LightVirtualFileBase
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.KotlinIcons import org.jetbrains.kotlin.idea.KotlinIcons
import org.jetbrains.kotlin.idea.KotlinIdeaGradleBundle import org.jetbrains.kotlin.idea.KotlinIdeaGradleBundle
@@ -28,6 +30,7 @@ import org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRoot
import org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRootsManager import org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRootsManager
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionProvider import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionProvider
import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
import org.jetbrains.plugins.gradle.service.GradleInstallationManager
import org.jetbrains.plugins.gradle.service.project.GradlePartialResolverPolicy import org.jetbrains.plugins.gradle.service.project.GradlePartialResolverPolicy
import org.jetbrains.plugins.gradle.settings.GradleProjectSettings import org.jetbrains.plugins.gradle.settings.GradleProjectSettings
import org.jetbrains.plugins.gradle.util.GradleConstants import org.jetbrains.plugins.gradle.util.GradleConstants
@@ -131,5 +134,8 @@ class LoadConfigurationAction : AnAction(
} }
fun getGradleVersion(project: Project, settings: GradleProjectSettings): String { fun getGradleVersion(project: Project, settings: GradleProjectSettings): String {
return settings.resolveGradleVersion().version return GradleInstallationManager.getGradleVersion(
ServiceManager.getService(GradleInstallationManager::class.java)
.getGradleHome(project, settings.externalProjectPath)?.path
) ?: GradleVersion.current().version
} }
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.idea.scripting.gradle
import com.intellij.openapi.application.impl.LaterInvocator import com.intellij.openapi.application.impl.LaterInvocator
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
import com.intellij.openapi.vfs.LocalFileSystem import com.intellij.openapi.vfs.LocalFileSystem
import com.intellij.openapi.vfs.VfsUtil
import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager import org.jetbrains.kotlin.idea.core.script.ScriptConfigurationManager
@@ -42,21 +41,11 @@ open class GradleScriptListenerTest : AbstractScriptConfigurationLoadingTest() {
override fun setUpTestProject() { override fun setUpTestProject() {
val rootDir = "idea/testData/script/definition/loading/gradle/" val rootDir = "idea/testData/script/definition/loading/gradle/"
val settings: KtFile = addFileToProject(rootDir + GradleConstants.KOTLIN_DSL_SETTINGS_FILE_NAME) val settings: KtFile = copyFromTestdataToProject(rootDir + GradleConstants.KOTLIN_DSL_SETTINGS_FILE_NAME)
val prop: PsiFile = addFileToProject(rootDir + "gradle.properties") val prop: PsiFile = copyFromTestdataToProject(rootDir + "gradle.properties")
val gradleWrapperProperties = VfsUtil.virtualToIoFile(settings.virtualFile.parent) val gradleCoreJar = createFileInProject("gradle/lib/gradle-core-1.0.0.jar")
.resolve("gradle/wrapper/gradle-wrapper.properties") val gradleWrapperProperties = createFileInProject("gradle/wrapper/gradle-wrapper.properties")
gradleWrapperProperties.parentFile.mkdirs()
gradleWrapperProperties.writeText(
"""
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-1.0.0-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
""".trimIndent()
)
val buildGradleKts = File(rootDir).walkTopDown().find { it.name == GradleConstants.KOTLIN_DSL_SCRIPT_NAME } val buildGradleKts = File(rootDir).walkTopDown().find { it.name == GradleConstants.KOTLIN_DSL_SCRIPT_NAME }
?: error("Couldn't find main script") ?: error("Couldn't find main script")
@@ -64,7 +53,8 @@ open class GradleScriptListenerTest : AbstractScriptConfigurationLoadingTest() {
val build = (myFile as? KtFile) ?: error("") val build = (myFile as? KtFile) ?: error("")
val newProjectSettings = GradleProjectSettings() val newProjectSettings = GradleProjectSettings()
newProjectSettings.distributionType = DistributionType.DEFAULT_WRAPPED newProjectSettings.gradleHome = gradleCoreJar.parentFile.parent
newProjectSettings.distributionType = DistributionType.LOCAL
newProjectSettings.externalProjectPath = settings.virtualFile.parent.path newProjectSettings.externalProjectPath = settings.virtualFile.parent.path
ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID).linkProject(newProjectSettings) ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID).linkProject(newProjectSettings)
@@ -76,11 +66,18 @@ open class GradleScriptListenerTest : AbstractScriptConfigurationLoadingTest() {
) )
} }
private inline fun <reified T : Any> addFileToProject(file: String): T { private inline fun <reified T : Any> copyFromTestdataToProject(file: String): T {
createFileAndSyncDependencies(File(file)) createFileAndSyncDependencies(File(file))
return (myFile as? T) ?: error("Couldn't configure project by $file") return (myFile as? T) ?: error("Couldn't configure project by $file")
} }
private fun createFileInProject(path: String): File {
val file = File(project.basePath, path)
file.parentFile.mkdirs()
file.createNewFile()
return file
}
fun testSectionChange() { fun testSectionChange() {
assertAndLoadInitialConfiguration(testFiles.buildKts) assertAndLoadInitialConfiguration(testFiles.buildKts)