Make current filename accessible to placeholders

This commit is contained in:
Matthias Gugel 2021-06-20 05:46:58 +02:00
parent b8bea349ba
commit 72956bfd58
3 changed files with 14 additions and 20 deletions

View File

@ -10,7 +10,6 @@ import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.InputValidatorEx
import com.intellij.psi.PsiDirectory
import com.intellij.psi.PsiElement
import de.idetools.filename_template.placeholders.PlaceholderContext
import de.idetools.filename_template.placeholders.PlaceholderProcessor
import java.awt.event.InputEvent
import java.util.function.Consumer
@ -31,7 +30,7 @@ class CreateFileWithFilenameTemplateAction(
val contentPanel = NewItemSimplePopupPanel()
val nameField = contentPanel.textField
nameField.text = placeholderProcessor.processTemplate(PlaceholderContext(project, directory))
nameField.text = placeholderProcessor.processTemplate(project, directory)
val popup = NewItemPopupUtil.createNewItemPopup(IdeBundle.message("title.new.file"), contentPanel, nameField)
contentPanel.setApplyAction { event: InputEvent? ->

View File

@ -5,5 +5,6 @@ import com.intellij.psi.PsiDirectory
data class PlaceholderContext(
val project: Project,
val directory: PsiDirectory
val directory: PsiDirectory,
var filename: String = ""
)

View File

@ -1,27 +1,17 @@
package de.idetools.filename_template.placeholders
import java.util.function.Consumer
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiDirectory
import kotlin.math.max
class PlaceholderProcessor(private val template: String, private val placeholders: List<Placeholder>) {
fun processTemplate(placeholderContext: PlaceholderContext): String {
var filename = ""
processTemplate(
template,
{ filename += it },
{ x ->
filename += placeholders
.first { it.supports(x) }
.process(x, placeholderContext)
})
return filename
}
private fun processTemplate(template: String, onCharacter: Consumer<Char>, onPlaceholder: Consumer<String>) {
fun processTemplate(project: Project, directory: PsiDirectory): String {
var placeholderLevel = 0
var placeholder = ""
val context = PlaceholderContext(project, directory)
for (character in template) {
when (character) {
'{' -> {
@ -33,7 +23,9 @@ class PlaceholderProcessor(private val template: String, private val placeholder
}
'}' -> {
if (placeholderLevel == 1) {
onPlaceholder.accept(placeholder)
context.filename += placeholders
.first { it.supports(placeholder) }
.process(placeholder, context)
placeholder = ""
}
@ -47,10 +39,12 @@ class PlaceholderProcessor(private val template: String, private val placeholder
if (0 < placeholderLevel) {
placeholder += character
} else {
onCharacter.accept(character)
context.filename += character
}
}
}
}
return context.filename
}
}