diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaFileFormattingService.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaFileFormattingService.kt new file mode 100644 index 00000000000..16e94be7882 --- /dev/null +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaFileFormattingService.kt @@ -0,0 +1,25 @@ +/* + * 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 com.intellij.psi.codeStyle.CodeStyleManager +import org.jetbrains.kotlin.idea.util.application.runReadAction +import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.tools.projectWizard.core.service.FileFormattingService +import java.io.File + +class IdeaFileFormattingService(private val project: Project) : FileFormattingService, IdeaWizardService { + override fun formatFile(text: String, filename: String): String = runReadAction { + val psiFile = createPsiFile(text, filename) ?: return@runReadAction text + CodeStyleManager.getInstance(project).reformat(psiFile).text + } + + private fun createPsiFile(text: String, filename: String) = when (File(filename.removeSuffix(".vm")).extension) { + "kt" -> KtPsiFactory(project).createFile(text) + else -> null + } +} \ No newline at end of file diff --git a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaWizardService.kt b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaWizardService.kt index 627470273b2..283161d3187 100644 --- a/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaWizardService.kt +++ b/idea/idea-new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/wizard/service/IdeaWizardService.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.tools.projectWizard.wizard.service import com.intellij.openapi.module.ModifiableModuleModel import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.tools.projectWizard.core.service.FileFormattingService import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardService interface IdeaWizardService : WizardService @@ -20,7 +21,8 @@ object IdeaServices { fun createScopeDependent(project: Project, model: ModifiableModuleModel) = listOf( IdeaGradleWizardService(project), IdeaMavenWizardService(project), - IdeaJpsWizardService(project, model) + IdeaJpsWizardService(project, model), + IdeaFileFormattingService(project) ) } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/FileFormattingService.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/FileFormattingService.kt new file mode 100644 index 00000000000..02204d6cd7f --- /dev/null +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/FileFormattingService.kt @@ -0,0 +1,14 @@ +/* + * 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.core.service + +interface FileFormattingService : WizardService { + fun formatFile(text: String, filename: String): String +} + +class DummyFileFormattingService : FileFormattingService, IdeaIndependentWizardService { + override fun formatFile(text: String, filename: String): String = text +} \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/WizardService.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/WizardService.kt index 817724511ff..70bc6674dbe 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/WizardService.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/core/service/WizardService.kt @@ -9,7 +9,8 @@ object Services { ProjectImportingWizardServiceImpl(), OsFileSystemWizardService(), AndroidWizardServiceImpl(), - BuildSystemAvailabilityWizardServiceImpl() + BuildSystemAvailabilityWizardServiceImpl(), + DummyFileFormattingService() ) } diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt index c3b8dd3538e..d8e1e94bbc1 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/plugins/templates/TemplatesPlugin.kt @@ -1,7 +1,6 @@ package org.jetbrains.kotlin.tools.projectWizard.plugins.templates import org.jetbrains.kotlin.tools.projectWizard.core.* -import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService import org.jetbrains.kotlin.tools.projectWizard.ir.buildsystem.* import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin @@ -130,10 +129,9 @@ class TemplatesPlugin(context: Context) : Plugin(context) { val template = sourceset.template ?: return UNIT_SUCCESS val settings = with(template) { settingsAsMap(sourceset.original) } val allSettings = settings + interceptionPointSettings.mapKeys { it.key.name } - return with(template) { getFileTemplates(sourceset) }.map { fileTemplate -> - val fileText = templateEngine.renderTemplate(fileTemplate, allSettings) - val path = sourceset.path / fileTemplate.relativePath - service()!!.createFile(path, fileText) + return with(template) { getFileTemplates(sourceset) }.map { fileTemplateDescriptor -> + val fileTemplate = FileTemplate(fileTemplateDescriptor, sourceset.path, allSettings) + with(templateEngine) { writeTemplate(fileTemplate) } }.sequenceIgnore() } } \ No newline at end of file diff --git a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/TemplateEngine.kt b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/TemplateEngine.kt index bc5336e45a0..6c72efc0c16 100644 --- a/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/TemplateEngine.kt +++ b/libraries/tools/new-project-wizard/src/org/jetbrains/kotlin/tools/projectWizard/templates/TemplateEngine.kt @@ -8,6 +8,7 @@ import org.apache.velocity.runtime.log.LogChute import org.jetbrains.kotlin.tools.projectWizard.core.TaskResult import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext import org.jetbrains.kotlin.tools.projectWizard.core.div +import org.jetbrains.kotlin.tools.projectWizard.core.service.FileFormattingService import org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService import java.io.StringWriter @@ -16,7 +17,10 @@ interface TemplateEngine { fun renderTemplate(template: FileTemplateDescriptor, data: Map): String fun TaskRunningContext.writeTemplate(template: FileTemplate): TaskResult { - val text = renderTemplate(template.descriptor, template.data) + val formatter = service()!! + val text = renderTemplate(template.descriptor, template.data).let { text -> + formatter.formatFile(text, template.descriptor.relativePath.fileName.toString()) + } return service()!!.createFile(template.rootPath / template.descriptor.relativePath, text) } }