Wizard: format templates code
This commit is contained in:
+25
@@ -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
|
||||
}
|
||||
}
|
||||
+3
-1
@@ -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)
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+14
@@ -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
|
||||
}
|
||||
+2
-1
@@ -9,7 +9,8 @@ object Services {
|
||||
ProjectImportingWizardServiceImpl(),
|
||||
OsFileSystemWizardService(),
|
||||
AndroidWizardServiceImpl(),
|
||||
BuildSystemAvailabilityWizardServiceImpl()
|
||||
BuildSystemAvailabilityWizardServiceImpl(),
|
||||
DummyFileFormattingService()
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+3
-5
@@ -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<FileSystemWizardService>()!!.createFile(path, fileText)
|
||||
return with(template) { getFileTemplates(sourceset) }.map { fileTemplateDescriptor ->
|
||||
val fileTemplate = FileTemplate(fileTemplateDescriptor, sourceset.path, allSettings)
|
||||
with(templateEngine) { writeTemplate(fileTemplate) }
|
||||
}.sequenceIgnore()
|
||||
}
|
||||
}
|
||||
+5
-1
@@ -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, Any?>): String
|
||||
|
||||
fun TaskRunningContext.writeTemplate(template: FileTemplate): TaskResult<Unit> {
|
||||
val text = renderTemplate(template.descriptor, template.data)
|
||||
val formatter = service<FileFormattingService>()!!
|
||||
val text = renderTemplate(template.descriptor, template.data).let { text ->
|
||||
formatter.formatFile(text, template.descriptor.relativePath.fileName.toString())
|
||||
}
|
||||
return service<FileSystemWizardService>()!!.createFile(template.rootPath / template.descriptor.relativePath, text)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user