From d83355e4c429620177dd74dd08cadc6c51ead2bd Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 2 Sep 2020 20:17:47 +0300 Subject: [PATCH] as42: Remove setupGradleSettings usage --- .../idea/testFramework/gradleRoutines.kt.as42 | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 idea/performanceTests/test/org/jetbrains/kotlin/idea/testFramework/gradleRoutines.kt.as42 diff --git a/idea/performanceTests/test/org/jetbrains/kotlin/idea/testFramework/gradleRoutines.kt.as42 b/idea/performanceTests/test/org/jetbrains/kotlin/idea/testFramework/gradleRoutines.kt.as42 new file mode 100644 index 00000000000..a98c1380304 --- /dev/null +++ b/idea/performanceTests/test/org/jetbrains/kotlin/idea/testFramework/gradleRoutines.kt.as42 @@ -0,0 +1,89 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.testFramework + +import com.intellij.openapi.externalSystem.importing.ImportSpecBuilder +import com.intellij.openapi.externalSystem.service.execution.ProgressExecutionMode +import com.intellij.openapi.externalSystem.service.project.manage.ExternalProjectsManagerImpl +import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil +import com.intellij.openapi.externalSystem.util.ExternalSystemUtil +import com.intellij.openapi.project.DumbService +import com.intellij.openapi.project.Project +import org.gradle.util.GradleVersion +import org.jetbrains.plugins.gradle.service.project.open.setupGradleProjectSettings +import org.jetbrains.plugins.gradle.service.project.open.setupGradleSettings +import org.jetbrains.plugins.gradle.settings.GradleProjectSettings +import org.jetbrains.plugins.gradle.settings.GradleSettings +import org.jetbrains.plugins.gradle.util.GradleConstants +import org.jetbrains.plugins.gradle.util.GradleLog +import org.jetbrains.plugins.gradle.util.setupGradleJvm +import org.jetbrains.plugins.gradle.util.suggestGradleVersion +import java.io.File +import java.nio.file.Paths + +fun refreshGradleProject(projectPath: String, project: Project) { + _importProject(File(projectPath).absolutePath, project) + + dispatchAllInvocationEvents() +} + +const val GRADLE_JDK_NAME = "Gradle JDK" + +/** + * inspired by org.jetbrains.plugins.gradle.service.project.open.importProject(projectDirectory, project) + */ +private fun _importProject(projectPath: String, project: Project) { + GradleLog.LOG.info("Import project at $projectPath") + val gradleProjectSettings = GradleProjectSettings() + val gradleVersion = suggestGradleVersion(project) ?: GradleVersion.current() + + GradleSettings.getInstance(project).gradleVmOptions = + "-Xmx2048m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${System.getProperty("user.dir")}" + + val gradleSettings = GradleSettings.getInstance(project) + gradleSettings.setupGradleSettings() + + gradleProjectSettings.gradleJvm = GRADLE_JDK_NAME + gradleProjectSettings.setupGradleProjectSettings(Paths.get(projectPath)) + + setupGradleJvm(project, gradleProjectSettings, gradleVersion) + + GradleSettings.getInstance(project).getLinkedProjectSettings(projectPath)?.let { linkedProjectSettings -> + linkedProjectSettings.gradleJvm = GRADLE_JDK_NAME + } + + _attachGradleProjectAndRefresh(gradleProjectSettings, project) +} + +/** + * inspired by org.jetbrains.plugins.gradle.service.project.open.attachGradleProjectAndRefresh(gradleProjectSettings, project) + * except everything is MODAL_SYNC + */ +private fun _attachGradleProjectAndRefresh( + gradleProjectSettings: GradleProjectSettings, + project: Project +) { + val externalProjectPath = gradleProjectSettings.externalProjectPath + ExternalProjectsManagerImpl.getInstance(project).runWhenInitialized { + DumbService.getInstance(project).runWhenSmart { + ExternalSystemUtil.ensureToolWindowInitialized(project, GradleConstants.SYSTEM_ID) + } + } + val settings = ExternalSystemApiUtil.getSettings(project, GradleConstants.SYSTEM_ID) + if (settings.getLinkedProjectSettings(externalProjectPath) == null) { + settings.linkProject(gradleProjectSettings) + } + + StatefulTestGradleProjectRefreshCallback(externalProjectPath, project).use { callback -> + ExternalSystemUtil.refreshProject( + externalProjectPath, + ImportSpecBuilder(project, GradleConstants.SYSTEM_ID) + .use(ProgressExecutionMode.MODAL_SYNC) + .callback(callback) + .build() + ) + } +}