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.module.ModifiableModuleModel
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
import org.jetbrains.kotlin.tools.projectWizard.core.service.FileFormattingService
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardService
|
import org.jetbrains.kotlin.tools.projectWizard.core.service.WizardService
|
||||||
|
|
||||||
interface IdeaWizardService : WizardService
|
interface IdeaWizardService : WizardService
|
||||||
@@ -20,7 +21,8 @@ object IdeaServices {
|
|||||||
fun createScopeDependent(project: Project, model: ModifiableModuleModel) = listOf(
|
fun createScopeDependent(project: Project, model: ModifiableModuleModel) = listOf(
|
||||||
IdeaGradleWizardService(project),
|
IdeaGradleWizardService(project),
|
||||||
IdeaMavenWizardService(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(),
|
ProjectImportingWizardServiceImpl(),
|
||||||
OsFileSystemWizardService(),
|
OsFileSystemWizardService(),
|
||||||
AndroidWizardServiceImpl(),
|
AndroidWizardServiceImpl(),
|
||||||
BuildSystemAvailabilityWizardServiceImpl()
|
BuildSystemAvailabilityWizardServiceImpl(),
|
||||||
|
DummyFileFormattingService()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-5
@@ -1,7 +1,6 @@
|
|||||||
package org.jetbrains.kotlin.tools.projectWizard.plugins.templates
|
package org.jetbrains.kotlin.tools.projectWizard.plugins.templates
|
||||||
|
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.*
|
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.ir.buildsystem.*
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
import org.jetbrains.kotlin.tools.projectWizard.phases.GenerationPhase
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.plugins.buildSystem.BuildSystemPlugin
|
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 template = sourceset.template ?: return UNIT_SUCCESS
|
||||||
val settings = with(template) { settingsAsMap(sourceset.original) }
|
val settings = with(template) { settingsAsMap(sourceset.original) }
|
||||||
val allSettings = settings + interceptionPointSettings.mapKeys { it.key.name }
|
val allSettings = settings + interceptionPointSettings.mapKeys { it.key.name }
|
||||||
return with(template) { getFileTemplates(sourceset) }.map { fileTemplate ->
|
return with(template) { getFileTemplates(sourceset) }.map { fileTemplateDescriptor ->
|
||||||
val fileText = templateEngine.renderTemplate(fileTemplate, allSettings)
|
val fileTemplate = FileTemplate(fileTemplateDescriptor, sourceset.path, allSettings)
|
||||||
val path = sourceset.path / fileTemplate.relativePath
|
with(templateEngine) { writeTemplate(fileTemplate) }
|
||||||
service<FileSystemWizardService>()!!.createFile(path, fileText)
|
|
||||||
}.sequenceIgnore()
|
}.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.TaskResult
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext
|
import org.jetbrains.kotlin.tools.projectWizard.core.TaskRunningContext
|
||||||
import org.jetbrains.kotlin.tools.projectWizard.core.div
|
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 org.jetbrains.kotlin.tools.projectWizard.core.service.FileSystemWizardService
|
||||||
import java.io.StringWriter
|
import java.io.StringWriter
|
||||||
|
|
||||||
@@ -16,7 +17,10 @@ interface TemplateEngine {
|
|||||||
fun renderTemplate(template: FileTemplateDescriptor, data: Map<String, Any?>): String
|
fun renderTemplate(template: FileTemplateDescriptor, data: Map<String, Any?>): String
|
||||||
|
|
||||||
fun TaskRunningContext.writeTemplate(template: FileTemplate): TaskResult<Unit> {
|
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)
|
return service<FileSystemWizardService>()!!.createFile(template.rootPath / template.descriptor.relativePath, text)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user