Files
openide/plugins/gradle/java/testSources/setup/GradleOpenProjectTestCase.kt
Dmitry Kichinsky cd9e4a0399 [maven] IDEA-356082 test linking and unlinking Gradle and Maven projects with the same path
GitOrigin-RevId: 35fc5384928edefb3d37a7b1482050f3a5265dfb
2024-07-23 12:42:01 +00:00

76 lines
3.0 KiB
Kotlin

// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.plugins.gradle.setup
import com.intellij.codeInspection.ex.InspectionProfileImpl
import com.intellij.ide.actions.ImportProjectAction
import com.intellij.openapi.externalSystem.action.AttachExternalProjectAction
import com.intellij.openapi.externalSystem.autolink.ExternalSystemUnlinkedProjectAware.Companion.EP_NAME
import com.intellij.openapi.externalSystem.autolink.forEachExtensionSafeAsync
import com.intellij.openapi.externalSystem.model.ProjectSystemId
import com.intellij.openapi.externalSystem.util.performAction
import com.intellij.openapi.externalSystem.util.performOpenAction
import com.intellij.openapi.project.Project
import com.intellij.testFramework.utils.vfs.getDirectory
import org.jetbrains.plugins.gradle.action.ImportProjectFromScriptAction
import org.jetbrains.plugins.gradle.testFramework.GradleTestCase
import org.jetbrains.plugins.gradle.testFramework.util.ProjectInfo
import org.jetbrains.plugins.gradle.testFramework.util.getSettingsFile
import org.jetbrains.plugins.gradle.util.GradleConstants
abstract class GradleOpenProjectTestCase : GradleTestCase() {
suspend fun importProject(projectInfo: ProjectInfo, numProjectSyncs: Int = 1): Project {
return awaitOpenProjectConfiguration(numProjectSyncs) {
performOpenAction(
action = ImportProjectAction(),
systemId = GradleConstants.SYSTEM_ID,
selectedFile = testRoot.getSettingsFile(projectInfo.relativePath, projectInfo.useKotlinDsl)
)
}
}
suspend fun attachProject(project: Project, relativePath: String) {
awaitProjectConfiguration(project) {
performAction(
action = AttachExternalProjectAction(),
project = project,
systemId = GradleConstants.SYSTEM_ID,
selectedFile = testRoot.getDirectory(relativePath)
)
}
}
suspend fun attachMavenProject(project: Project, relativePath: String) {
val mavenSystemId = ProjectSystemId("MAVEN")
val projectPath = testRoot.getDirectory(relativePath).toNioPath().toString()
EP_NAME.forEachExtensionSafeAsync { extension ->
if (extension.systemId == mavenSystemId) {
extension.linkAndLoadProjectAsync(project, projectPath)
}
}
}
suspend fun attachProjectFromScript(project: Project, relativePath: String) {
awaitProjectConfiguration(project) {
performAction(
action = ImportProjectFromScriptAction(),
project = project,
systemId = GradleConstants.SYSTEM_ID,
selectedFile = testRoot.getDirectory(relativePath)
)
}
}
fun InspectionProfileImpl.ensureInitialized(project: Project) {
if (!wasInitialized()) {
val oldValue = InspectionProfileImpl.INIT_INSPECTIONS
try {
InspectionProfileImpl.INIT_INSPECTIONS = true
initInspectionTools(project)
}
finally {
InspectionProfileImpl.INIT_INSPECTIONS = oldValue
}
}
}
}