[NPW] cleanup: create project/module directory inside NewProjectWizardBaseStep

The base NPW step specifies, prepares and validates project location. Therefore it should ensure that the project/module directory is created.

Also, all project file and scripts generators should ensure that the parent directories is created. Because the IO cannot be protected from external modification. And the NPW API cannot guarantee that project/module directory is exists during the whole project/module creation process.

GitOrigin-RevId: e1332ce096846629c6c86234032fbee142dbb7e5
This commit is contained in:
Sergei Vorobyov
2025-06-26 17:46:24 +00:00
committed by intellij-monorepo-bot
parent 425c84ef60
commit 21e4d0cf71
3 changed files with 5 additions and 2 deletions
@@ -333,6 +333,7 @@ label.project.wizard.new.assets.step.generate.sources.progress=Generating projec
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.git=Unable to create a Git repository
error.project.wizard.new.project.directory=Unable to create a {0,choice,0#module|1#project} directory
kotlin.dsl.validation.missing.value=Field must be set
kotlin.dsl.validation.no.whitespaces=Whitespaces are not allowed here
@@ -33,6 +33,7 @@ import com.intellij.ui.UIBundle
import com.intellij.ui.dsl.builder.*
import com.intellij.ui.util.getTextWidth
import com.intellij.util.applyIf
import java.nio.file.Files
import java.nio.file.Path
import kotlin.io.path.name
@@ -141,6 +142,9 @@ class NewProjectWizardBaseStep(parent: NewProjectWizardStep) : AbstractNewProjec
}
override fun setupProject(project: Project) {
setupProjectSafe(project, UIBundle.message("error.project.wizard.new.project.directory", context.isCreatingNewProjectInt)) {
Files.createDirectories(Path.of(path).resolve(name))
}
if (context.isCreatingNewProject) {
invokeAndWaitIfNeeded {
runWriteAction {
@@ -43,7 +43,6 @@ import com.intellij.openapi.startup.StartupManager;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.io.FileUtilRt;
import com.intellij.openapi.util.io.NioPathUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.*;
@@ -149,7 +148,6 @@ public abstract class AbstractGradleModuleBuilder extends AbstractExternalModule
return;
}
File contentRootDir = new File(contentEntryPath);
FileUtilRt.createDirectory(contentRootDir);
LocalFileSystem fileSystem = LocalFileSystem.getInstance();
VirtualFile modelContentRootDir = fileSystem.refreshAndFindFileByIoFile(contentRootDir);
if (modelContentRootDir == null) {