Make current filename accessible to placeholders
This commit is contained in:
parent
b8bea349ba
commit
72956bfd58
|
|
@ -10,7 +10,6 @@ import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.ui.InputValidatorEx
|
import com.intellij.openapi.ui.InputValidatorEx
|
||||||
import com.intellij.psi.PsiDirectory
|
import com.intellij.psi.PsiDirectory
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import de.idetools.filename_template.placeholders.PlaceholderContext
|
|
||||||
import de.idetools.filename_template.placeholders.PlaceholderProcessor
|
import de.idetools.filename_template.placeholders.PlaceholderProcessor
|
||||||
import java.awt.event.InputEvent
|
import java.awt.event.InputEvent
|
||||||
import java.util.function.Consumer
|
import java.util.function.Consumer
|
||||||
|
|
@ -31,7 +30,7 @@ class CreateFileWithFilenameTemplateAction(
|
||||||
val contentPanel = NewItemSimplePopupPanel()
|
val contentPanel = NewItemSimplePopupPanel()
|
||||||
val nameField = contentPanel.textField
|
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)
|
val popup = NewItemPopupUtil.createNewItemPopup(IdeBundle.message("title.new.file"), contentPanel, nameField)
|
||||||
contentPanel.setApplyAction { event: InputEvent? ->
|
contentPanel.setApplyAction { event: InputEvent? ->
|
||||||
|
|
|
||||||
|
|
@ -5,5 +5,6 @@ import com.intellij.psi.PsiDirectory
|
||||||
|
|
||||||
data class PlaceholderContext(
|
data class PlaceholderContext(
|
||||||
val project: Project,
|
val project: Project,
|
||||||
val directory: PsiDirectory
|
val directory: PsiDirectory,
|
||||||
|
var filename: String = ""
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,17 @@
|
||||||
package de.idetools.filename_template.placeholders
|
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
|
import kotlin.math.max
|
||||||
|
|
||||||
class PlaceholderProcessor(private val template: String, private val placeholders: List<Placeholder>) {
|
class PlaceholderProcessor(private val template: String, private val placeholders: List<Placeholder>) {
|
||||||
|
|
||||||
fun processTemplate(placeholderContext: PlaceholderContext): String {
|
fun processTemplate(project: Project, directory: PsiDirectory): 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>) {
|
|
||||||
var placeholderLevel = 0
|
var placeholderLevel = 0
|
||||||
var placeholder = ""
|
var placeholder = ""
|
||||||
|
|
||||||
|
val context = PlaceholderContext(project, directory)
|
||||||
|
|
||||||
for (character in template) {
|
for (character in template) {
|
||||||
when (character) {
|
when (character) {
|
||||||
'{' -> {
|
'{' -> {
|
||||||
|
|
@ -33,7 +23,9 @@ class PlaceholderProcessor(private val template: String, private val placeholder
|
||||||
}
|
}
|
||||||
'}' -> {
|
'}' -> {
|
||||||
if (placeholderLevel == 1) {
|
if (placeholderLevel == 1) {
|
||||||
onPlaceholder.accept(placeholder)
|
context.filename += placeholders
|
||||||
|
.first { it.supports(placeholder) }
|
||||||
|
.process(placeholder, context)
|
||||||
placeholder = ""
|
placeholder = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -47,10 +39,12 @@ class PlaceholderProcessor(private val template: String, private val placeholder
|
||||||
if (0 < placeholderLevel) {
|
if (0 < placeholderLevel) {
|
||||||
placeholder += character
|
placeholder += character
|
||||||
} else {
|
} else {
|
||||||
onCharacter.accept(character)
|
context.filename += character
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return context.filename
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user