Wizard: use new api from gradle to import project on >= 193
This commit is contained in:
+16
-55
@@ -5,27 +5,15 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.tools.projectWizard.wizard.service
|
package org.jetbrains.kotlin.tools.projectWizard.wizard.service
|
||||||
|
|
||||||
import com.intellij.execution.executors.DefaultRunExecutor
|
|
||||||
import com.intellij.openapi.actionSystem.ActionPlaces
|
|
||||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
|
||||||
import com.intellij.openapi.actionSystem.CommonDataKeys
|
|
||||||
import com.intellij.openapi.actionSystem.impl.SimpleDataContext
|
|
||||||
import com.intellij.openapi.externalSystem.model.execution.ExternalSystemTaskExecutionSettings
|
|
||||||
import com.intellij.openapi.externalSystem.service.execution.ProgressExecutionMode
|
|
||||||
import com.intellij.openapi.externalSystem.util.ExternalSystemUtil
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.vfs.LocalFileSystem
|
|
||||||
import org.jetbrains.annotations.NonNls
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
|
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult
|
import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.andThen
|
import org.jetbrains.kotlin.tools.projectWizard.core.UNIT_SUCCESS
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.safe
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.ProjectImportingWizardService
|
import org.jetbrains.kotlin.tools.projectWizard.core.service.ProjectImportingWizardService
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleIR
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleIR
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle
|
||||||
import org.jetbrains.plugins.gradle.action.ImportProjectFromScriptAction
|
import org.jetbrains.plugins.gradle.service.project.open.linkAndRefreshGradleProject
|
||||||
import org.jetbrains.plugins.gradle.util.GradleConstants
|
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
|
|
||||||
class IdeaGradleWizardService(private val project: Project) : ProjectImportingWizardService,
|
class IdeaGradleWizardService(private val project: Project) : ProjectImportingWizardService,
|
||||||
@@ -33,54 +21,27 @@ class IdeaGradleWizardService(private val project: Project) : ProjectImportingWi
|
|||||||
override fun isSuitableFor(buildSystemType: BuildSystemType): Boolean =
|
override fun isSuitableFor(buildSystemType: BuildSystemType): Boolean =
|
||||||
buildSystemType.isGradle
|
buildSystemType.isGradle
|
||||||
|
|
||||||
// We have to call action directly as there is no common way
|
|
||||||
// to import Gradle project in all IDEAs from 183 to 193
|
|
||||||
override fun importProject(
|
override fun importProject(
|
||||||
reader: Reader,
|
reader: Reader,
|
||||||
path: Path,
|
path: Path,
|
||||||
modulesIrs: List<ModuleIR>,
|
modulesIrs: List<ModuleIR>,
|
||||||
buildSystem: BuildSystemType
|
buildSystem: BuildSystemType
|
||||||
): TaskResult<Unit> = performImport(path) andThen createGradleWrapper(path)
|
): TaskResult<Unit> {
|
||||||
|
withGradleWrapperEnabled {
|
||||||
private fun performImport(path: Path) = safe {
|
linkAndRefreshGradleProject(path.toString(), project)
|
||||||
val virtualFile = LocalFileSystem.getInstance().findFileByPath(path.toString())!!
|
|
||||||
val dataContext = SimpleDataContext.getSimpleContext(
|
|
||||||
mapOf(
|
|
||||||
CommonDataKeys.PROJECT.name to project,
|
|
||||||
CommonDataKeys.VIRTUAL_FILE.name to virtualFile
|
|
||||||
),
|
|
||||||
null
|
|
||||||
)
|
|
||||||
val action = ImportProjectFromScriptAction()
|
|
||||||
val event = AnActionEvent.createFromAnAction(
|
|
||||||
action,
|
|
||||||
null,
|
|
||||||
ActionPlaces.UNKNOWN,
|
|
||||||
dataContext
|
|
||||||
)
|
|
||||||
action.actionPerformed(event)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private fun createGradleWrapper(path: Path) = safe {
|
|
||||||
val settings = ExternalSystemTaskExecutionSettings().apply {
|
|
||||||
externalProjectPath = path.toString()
|
|
||||||
taskNames = listOf(WRAPPER_TASK_NAME)
|
|
||||||
externalSystemIdString = GradleConstants.SYSTEM_ID.id
|
|
||||||
}
|
}
|
||||||
|
return UNIT_SUCCESS
|
||||||
ExternalSystemUtil.runTask(
|
|
||||||
settings,
|
|
||||||
DefaultRunExecutor.EXECUTOR_ID,
|
|
||||||
project,
|
|
||||||
GradleConstants.SYSTEM_ID,
|
|
||||||
/*callback=*/ null,
|
|
||||||
ProgressExecutionMode.NO_PROGRESS_ASYNC
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
private fun withGradleWrapperEnabled(action: () -> Unit) {
|
||||||
@NonNls
|
val oldGradleDistributionType = System.getProperty("idea.gradle.distributionType")
|
||||||
private const val WRAPPER_TASK_NAME = "wrapper"
|
System.setProperty("idea.gradle.distributionType", "WRAPPED")
|
||||||
|
try {
|
||||||
|
action()
|
||||||
|
} finally {
|
||||||
|
if (oldGradleDistributionType != null) {
|
||||||
|
System.setProperty("idea.gradle.distributionType", oldGradleDistributionType)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+88
@@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* 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.tools.projectWizard.wizard.service
|
||||||
|
|
||||||
|
import com.intellij.execution.executors.DefaultRunExecutor
|
||||||
|
import com.intellij.openapi.actionSystem.ActionPlaces
|
||||||
|
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||||
|
import com.intellij.openapi.actionSystem.CommonDataKeys
|
||||||
|
import com.intellij.openapi.actionSystem.impl.SimpleDataContext
|
||||||
|
import com.intellij.openapi.externalSystem.model.execution.ExternalSystemTaskExecutionSettings
|
||||||
|
import com.intellij.openapi.externalSystem.service.execution.ProgressExecutionMode
|
||||||
|
import com.intellij.openapi.externalSystem.util.ExternalSystemUtil
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.openapi.vfs.LocalFileSystem
|
||||||
|
import org.jetbrains.annotations.NonNls
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.andThen
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.safe
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.service.ProjectImportingWizardService
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleIR
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle
|
||||||
|
import org.jetbrains.plugins.gradle.action.ImportProjectFromScriptAction
|
||||||
|
import org.jetbrains.plugins.gradle.util.GradleConstants
|
||||||
|
import java.nio.file.Path
|
||||||
|
|
||||||
|
// BUNCH: 191
|
||||||
|
class IdeaGradleWizardService(private val project: Project) : ProjectImportingWizardService,
|
||||||
|
IdeaWizardService {
|
||||||
|
override fun isSuitableFor(buildSystemType: BuildSystemType): Boolean =
|
||||||
|
buildSystemType.isGradle
|
||||||
|
|
||||||
|
// We have to call action directly as there is no common way
|
||||||
|
// to import Gradle project in all IDEAs from 183 to 193
|
||||||
|
override fun importProject(
|
||||||
|
reader: Reader,
|
||||||
|
path: Path,
|
||||||
|
modulesIrs: List<ModuleIR>,
|
||||||
|
buildSystem: BuildSystemType
|
||||||
|
): TaskResult<Unit> = performImport(path) andThen createGradleWrapper(path)
|
||||||
|
|
||||||
|
private fun performImport(path: Path) = safe {
|
||||||
|
val virtualFile = LocalFileSystem.getInstance().findFileByPath(path.toString())
|
||||||
|
?: error("No virtual file found for path $path")
|
||||||
|
val dataContext = SimpleDataContext.getSimpleContext(
|
||||||
|
mapOf(
|
||||||
|
CommonDataKeys.PROJECT.name to project,
|
||||||
|
CommonDataKeys.VIRTUAL_FILE.name to virtualFile
|
||||||
|
),
|
||||||
|
null
|
||||||
|
)
|
||||||
|
val action = ImportProjectFromScriptAction()
|
||||||
|
val event = AnActionEvent.createFromAnAction(
|
||||||
|
action,
|
||||||
|
/*event=*/ null,
|
||||||
|
ActionPlaces.UNKNOWN,
|
||||||
|
dataContext
|
||||||
|
)
|
||||||
|
action.actionPerformed(event)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private fun createGradleWrapper(path: Path) = safe {
|
||||||
|
val settings = ExternalSystemTaskExecutionSettings().apply {
|
||||||
|
externalProjectPath = path.toString()
|
||||||
|
taskNames = listOf(WRAPPER_TASK_NAME)
|
||||||
|
externalSystemIdString = GradleConstants.SYSTEM_ID.id
|
||||||
|
}
|
||||||
|
|
||||||
|
ExternalSystemUtil.runTask(
|
||||||
|
settings,
|
||||||
|
DefaultRunExecutor.EXECUTOR_ID,
|
||||||
|
project,
|
||||||
|
GradleConstants.SYSTEM_ID,
|
||||||
|
/*callback=*/ null,
|
||||||
|
ProgressExecutionMode.NO_PROGRESS_ASYNC
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
@NonNls
|
||||||
|
private const val WRAPPER_TASK_NAME = "wrapper"
|
||||||
|
}
|
||||||
|
}
|
||||||
+88
@@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* 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.tools.projectWizard.wizard.service
|
||||||
|
|
||||||
|
import com.intellij.execution.executors.DefaultRunExecutor
|
||||||
|
import com.intellij.openapi.actionSystem.ActionPlaces
|
||||||
|
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||||
|
import com.intellij.openapi.actionSystem.CommonDataKeys
|
||||||
|
import com.intellij.openapi.actionSystem.impl.SimpleDataContext
|
||||||
|
import com.intellij.openapi.externalSystem.model.execution.ExternalSystemTaskExecutionSettings
|
||||||
|
import com.intellij.openapi.externalSystem.service.execution.ProgressExecutionMode
|
||||||
|
import com.intellij.openapi.externalSystem.util.ExternalSystemUtil
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.openapi.vfs.LocalFileSystem
|
||||||
|
import org.jetbrains.annotations.NonNls
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.andThen
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.safe
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.service.ProjectImportingWizardService
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleIR
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle
|
||||||
|
import org.jetbrains.plugins.gradle.action.ImportProjectFromScriptAction
|
||||||
|
import org.jetbrains.plugins.gradle.util.GradleConstants
|
||||||
|
import java.nio.file.Path
|
||||||
|
|
||||||
|
// BUNCH: 192
|
||||||
|
class IdeaGradleWizardService(private val project: Project) : ProjectImportingWizardService,
|
||||||
|
IdeaWizardService {
|
||||||
|
override fun isSuitableFor(buildSystemType: BuildSystemType): Boolean =
|
||||||
|
buildSystemType.isGradle
|
||||||
|
|
||||||
|
// We have to call action directly as there is no common way
|
||||||
|
// to import Gradle project in all IDEAs from 183 to 193
|
||||||
|
override fun importProject(
|
||||||
|
reader: Reader,
|
||||||
|
path: Path,
|
||||||
|
modulesIrs: List<ModuleIR>,
|
||||||
|
buildSystem: BuildSystemType
|
||||||
|
): TaskResult<Unit> = performImport(path) andThen createGradleWrapper(path)
|
||||||
|
|
||||||
|
private fun performImport(path: Path) = safe {
|
||||||
|
val virtualFile = LocalFileSystem.getInstance().findFileByPath(path.toString())
|
||||||
|
?: error("No virtual file found for path $path")
|
||||||
|
val dataContext = SimpleDataContext.getSimpleContext(
|
||||||
|
mapOf(
|
||||||
|
CommonDataKeys.PROJECT.name to project,
|
||||||
|
CommonDataKeys.VIRTUAL_FILE.name to virtualFile
|
||||||
|
),
|
||||||
|
null
|
||||||
|
)
|
||||||
|
val action = ImportProjectFromScriptAction()
|
||||||
|
val event = AnActionEvent.createFromAnAction(
|
||||||
|
action,
|
||||||
|
/*event=*/ null,
|
||||||
|
ActionPlaces.UNKNOWN,
|
||||||
|
dataContext
|
||||||
|
)
|
||||||
|
action.actionPerformed(event)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private fun createGradleWrapper(path: Path) = safe {
|
||||||
|
val settings = ExternalSystemTaskExecutionSettings().apply {
|
||||||
|
externalProjectPath = path.toString()
|
||||||
|
taskNames = listOf(WRAPPER_TASK_NAME)
|
||||||
|
externalSystemIdString = GradleConstants.SYSTEM_ID.id
|
||||||
|
}
|
||||||
|
|
||||||
|
ExternalSystemUtil.runTask(
|
||||||
|
settings,
|
||||||
|
DefaultRunExecutor.EXECUTOR_ID,
|
||||||
|
project,
|
||||||
|
GradleConstants.SYSTEM_ID,
|
||||||
|
/*callback=*/ null,
|
||||||
|
ProgressExecutionMode.NO_PROGRESS_ASYNC
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
@NonNls
|
||||||
|
private const val WRAPPER_TASK_NAME = "wrapper"
|
||||||
|
}
|
||||||
|
}
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
/*
|
||||||
|
* 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.tools.projectWizard.wizard.service
|
||||||
|
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.Reader
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.UNIT_SUCCESS
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.service.ProjectImportingWizardService
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.ModuleIR
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemType
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.isGradle
|
||||||
|
import org.jetbrains.plugins.gradle.service.project.open.linkAndRefreshGradleProject
|
||||||
|
import java.nio.file.Path
|
||||||
|
|
||||||
|
// BUNCH: 201
|
||||||
|
class IdeaGradleWizardService(private val project: Project) : ProjectImportingWizardService,
|
||||||
|
IdeaWizardService {
|
||||||
|
override fun isSuitableFor(buildSystemType: BuildSystemType): Boolean =
|
||||||
|
buildSystemType.isGradle
|
||||||
|
|
||||||
|
override fun importProject(
|
||||||
|
reader: Reader,
|
||||||
|
path: Path,
|
||||||
|
modulesIrs: List<ModuleIR>,
|
||||||
|
buildSystem: BuildSystemType
|
||||||
|
): TaskResult<Unit> {
|
||||||
|
withGradleWrapperEnabled {
|
||||||
|
linkAndRefreshGradleProject(path.toString(), project)
|
||||||
|
}
|
||||||
|
return UNIT_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun withGradleWrapperEnabled(action: () -> Unit) {
|
||||||
|
val oldGradleDistributionType = System.getProperty("idea.gradle.distributionType")
|
||||||
|
System.setProperty("idea.gradle.distributionType", "WRAPPED")
|
||||||
|
try {
|
||||||
|
action()
|
||||||
|
} finally {
|
||||||
|
if (oldGradleDistributionType != null) {
|
||||||
|
System.setProperty("idea.gradle.distributionType", oldGradleDistributionType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user