mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 14:23:28 +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.setupProjectSafe
|
||||
import com.intellij.ide.wizard.whenProjectCreated
|
||||
import com.intellij.openapi.application.invokeAndWaitIfNeeded
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager
|
||||
import com.intellij.openapi.progress.blockingContext
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.openapi.vfs.isFile
|
||||
import com.intellij.openapi.vfs.refreshAndFindVirtualFile
|
||||
import com.intellij.openapi.vfs.refreshAndFindVirtualFileOrDirectory
|
||||
import com.intellij.platform.ide.progress.runWithModalProgressBlocking
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.ui.UIBundle
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
import java.net.URL
|
||||
import java.nio.file.Path
|
||||
@@ -93,8 +98,11 @@ abstract class AssetsNewProjectWizardStep(parent: NewProjectWizardStep) : Abstra
|
||||
val outputDirectory = resolveOutputDirectory()
|
||||
val filesToOpen = resolveFilesToOpen(outputDirectory)
|
||||
|
||||
val assetsProcessor = AssetsProcessor.getInstance()
|
||||
val generatedFiles = assetsProcessor.generateSources(outputDirectory, assets, templateProperties)
|
||||
val generatedFiles = invokeAndWaitIfNeeded {
|
||||
runWithModalProgressBlocking(project, UIBundle.message("label.project.wizard.new.assets.step.generate.sources.progress", project.name)) {
|
||||
generateSources(outputDirectory)
|
||||
}
|
||||
}
|
||||
|
||||
whenProjectCreated(project) { //IDEA-244863
|
||||
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() }
|
||||
}
|
||||
|
||||
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>) {
|
||||
val psiManager = PsiManager.getInstance(project)
|
||||
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.empty.project.generator.name=Empty Project
|
||||
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.sample.code=Unable to generate {0,choice,0#module|1#project} sources
|
||||
|
||||
Reference in New Issue
Block a user