diff --git a/plugins/devkit/intellij.devkit.workspaceModel/src/WorkspaceModelGenerator.kt b/plugins/devkit/intellij.devkit.workspaceModel/src/WorkspaceModelGenerator.kt index e203f64cdee8..3a1cf502cb68 100644 --- a/plugins/devkit/intellij.devkit.workspaceModel/src/WorkspaceModelGenerator.kt +++ b/plugins/devkit/intellij.devkit.workspaceModel/src/WorkspaceModelGenerator.kt @@ -62,10 +62,10 @@ class WorkspaceModelGenerator(private val project: Project, private val coroutin project, module, sourceRoot.file!!, processAbstractTypes = module.withAbstractTypes, explicitApiEnabled = module.explicitApiEnabled, - isTestModule = module.isTestModule // TODO(It doesn't work for all modules) - ) { - createGeneratedSourceFolder(module, sourceRoot) - } + isTestModule = module.isTestModule, // TODO(It doesn't work for all modules) + targetFolderGenerator = { createGeneratedSourceFolder(module, sourceRoot) }, + existingTargetFolder = { sourceRoot.file?.parent?.children?.find { it.name == GENERATED_FOLDER_NAME } } + ) } } } diff --git a/plugins/devkit/intellij.devkit.workspaceModel/src/codegen/writer/CodeWriter.kt b/plugins/devkit/intellij.devkit.workspaceModel/src/codegen/writer/CodeWriter.kt index 0c6f25b70613..85aa5122c647 100644 --- a/plugins/devkit/intellij.devkit.workspaceModel/src/codegen/writer/CodeWriter.kt +++ b/plugins/devkit/intellij.devkit.workspaceModel/src/codegen/writer/CodeWriter.kt @@ -46,7 +46,8 @@ object CodeWriter { suspend fun generate( project: Project, module: Module, sourceFolder: VirtualFile, processAbstractTypes: Boolean, explicitApiEnabled: Boolean, isTestModule: Boolean, - targetFolderGenerator: () -> VirtualFile? + targetFolderGenerator: () -> VirtualFile?, + existingTargetFolder: () -> VirtualFile? ) { val sourceFilePerObjModule = HashMap() val ktClasses = HashMap() @@ -91,6 +92,11 @@ object CodeWriter { if (generatedCode.isEmpty() || problems.any { it.level == GenerationProblem.Level.ERROR }) { LOG.info("Not found types for generation") + val genFolder = existingTargetFolder.invoke() + if (genFolder != null) { + indicator.text = DevKitWorkspaceModelBundle.message("progress.text.removing.old.code") + removeGeneratedCode(ktClasses, genFolder) + } return@runWriteActionWithCancellableProgressInDispatchThread } @@ -101,8 +107,6 @@ object CodeWriter { } indicator.text = DevKitWorkspaceModelBundle.message("progress.text.removing.old.code") - val psiFactory = KtPsiFactory(project) - removeGeneratedCode(ktClasses, genFolder) val topLevelDeclarations = MultiMap.create>>() @@ -113,6 +117,7 @@ object CodeWriter { indicator.isIndeterminate = false generatedCode.forEachIndexed { i, code -> + val psiFactory = KtPsiFactory(project) indicator.fraction = 0.15 + 0.1 * i / generatedCode.size when (code) { is ObjModuleFileGeneratedCode -> diff --git a/plugins/devkit/intellij.devkit.workspaceModel/tests/testSrc/com/intellij/devkit/workspaceModel/CodeGenerationTestBase.kt b/plugins/devkit/intellij.devkit.workspaceModel/tests/testSrc/com/intellij/devkit/workspaceModel/CodeGenerationTestBase.kt index 33d130c2349b..521a0e7e76ac 100644 --- a/plugins/devkit/intellij.devkit.workspaceModel/tests/testSrc/com/intellij/devkit/workspaceModel/CodeGenerationTestBase.kt +++ b/plugins/devkit/intellij.devkit.workspaceModel/tests/testSrc/com/intellij/devkit/workspaceModel/CodeGenerationTestBase.kt @@ -147,8 +147,10 @@ abstract class CodeGenerationTestBase : KotlinLightCodeInsightFixtureTestCase() project, module, srcRoot, processAbstractTypes = processAbstractTypes, explicitApiEnabled = explicitApiEnabled, - isTestModule = isTestModule - ) { genRoot } + isTestModule = isTestModule, + targetFolderGenerator = { genRoot }, + existingTargetFolder = { genRoot } + ) FileDocumentManager.getInstance().saveAllDocuments() } return srcRoot to genRoot