mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 22:51:17 +07:00
[NPW|Assets] fix: generate sources on a background thread under modal progress
Issues: IDEA-349863, IDEA-341180 GitOrigin-RevId: 06c621f3d98cd15231b5b083fba3884626e06b1d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
e4012cbda4
commit
d6db8e23b3
@@ -14,14 +14,19 @@ import com.intellij.ide.wizard.NewProjectWizardBaseData.Companion.baseData
|
|||||||
import com.intellij.ide.wizard.NewProjectWizardStep
|
import com.intellij.ide.wizard.NewProjectWizardStep
|
||||||
import com.intellij.ide.wizard.setupProjectSafe
|
import com.intellij.ide.wizard.setupProjectSafe
|
||||||
import com.intellij.ide.wizard.whenProjectCreated
|
import com.intellij.ide.wizard.whenProjectCreated
|
||||||
|
import com.intellij.openapi.application.invokeAndWaitIfNeeded
|
||||||
import com.intellij.openapi.fileEditor.FileEditorManager
|
import com.intellij.openapi.fileEditor.FileEditorManager
|
||||||
|
import com.intellij.openapi.progress.blockingContext
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.openapi.vfs.isFile
|
import com.intellij.openapi.vfs.isFile
|
||||||
import com.intellij.openapi.vfs.refreshAndFindVirtualFile
|
import com.intellij.openapi.vfs.refreshAndFindVirtualFile
|
||||||
import com.intellij.openapi.vfs.refreshAndFindVirtualFileOrDirectory
|
import com.intellij.openapi.vfs.refreshAndFindVirtualFileOrDirectory
|
||||||
|
import com.intellij.platform.ide.progress.runWithModalProgressBlocking
|
||||||
import com.intellij.psi.PsiManager
|
import com.intellij.psi.PsiManager
|
||||||
import com.intellij.ui.UIBundle
|
import com.intellij.ui.UIBundle
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
import org.jetbrains.annotations.ApiStatus
|
import org.jetbrains.annotations.ApiStatus
|
||||||
import java.net.URL
|
import java.net.URL
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
@@ -93,8 +98,11 @@ abstract class AssetsNewProjectWizardStep(parent: NewProjectWizardStep) : Abstra
|
|||||||
val outputDirectory = resolveOutputDirectory()
|
val outputDirectory = resolveOutputDirectory()
|
||||||
val filesToOpen = resolveFilesToOpen(outputDirectory)
|
val filesToOpen = resolveFilesToOpen(outputDirectory)
|
||||||
|
|
||||||
val assetsProcessor = AssetsProcessor.getInstance()
|
val generatedFiles = invokeAndWaitIfNeeded {
|
||||||
val generatedFiles = assetsProcessor.generateSources(outputDirectory, assets, templateProperties)
|
runWithModalProgressBlocking(project, UIBundle.message("label.project.wizard.new.assets.step.generate.sources.progress", project.name)) {
|
||||||
|
generateSources(outputDirectory)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
whenProjectCreated(project) { //IDEA-244863
|
whenProjectCreated(project) { //IDEA-244863
|
||||||
reformatCode(project, generatedFiles.mapNotNull { it.refreshAndFindVirtualFileOrDirectory() }.filter { it.isFile })
|
reformatCode(project, generatedFiles.mapNotNull { it.refreshAndFindVirtualFileOrDirectory() }.filter { it.isFile })
|
||||||
@@ -121,6 +129,15 @@ abstract class AssetsNewProjectWizardStep(parent: NewProjectWizardStep) : Abstra
|
|||||||
return filesToOpen.map { outputDirectory.resolve(it).normalize() }
|
return filesToOpen.map { outputDirectory.resolve(it).normalize() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private suspend fun generateSources(outputDirectory: Path): List<Path> {
|
||||||
|
return withContext(Dispatchers.IO) {
|
||||||
|
blockingContext {
|
||||||
|
val assetsProcessor = AssetsProcessor.getInstance()
|
||||||
|
assetsProcessor.generateSources(outputDirectory, assets, templateProperties)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun reformatCode(project: Project, files: List<VirtualFile>) {
|
private fun reformatCode(project: Project, files: List<VirtualFile>) {
|
||||||
val psiManager = PsiManager.getInstance(project)
|
val psiManager = PsiManager.getInstance(project)
|
||||||
val psiFiles = files.mapNotNull { psiManager.findFile(it) }
|
val psiFiles = files.mapNotNull { psiManager.findFile(it) }
|
||||||
|
|||||||
@@ -313,6 +313,7 @@ label.project.wizard.new.module.name.exists.error=Module ''{0}'' already exists
|
|||||||
label.project.wizard.new.module.directory.already.taken.error=Module {0} already exists in this location
|
label.project.wizard.new.module.directory.already.taken.error=Module {0} already exists in this location
|
||||||
label.project.wizard.empty.project.generator.name=Empty Project
|
label.project.wizard.empty.project.generator.name=Empty Project
|
||||||
label.project.wizard.empty.project.generator.full.description=A basic project with free structure.
|
label.project.wizard.empty.project.generator.full.description=A basic project with free structure.
|
||||||
|
label.project.wizard.new.assets.step.generate.sources.progress=Generating project {0} sources\u2026
|
||||||
|
|
||||||
error.project.wizard.new.project.title=New {0,choice,0#Module|1#Project} Wizard Error
|
error.project.wizard.new.project.title=New {0,choice,0#Module|1#Project} Wizard Error
|
||||||
error.project.wizard.new.project.sample.code=Unable to generate {0,choice,0#module|1#project} sources
|
error.project.wizard.new.project.sample.code=Unable to generate {0,choice,0#module|1#project} sources
|
||||||
|
|||||||
Reference in New Issue
Block a user