in gdscript/src/main/kotlin/gdscript/action/GdAddTraitAction.kt [31:73]
override fun invoke(project: Project, editor: Editor, file: PsiFile) {
if (!EditorModificationUtil.checkModificationAllowed(editor)) return
val consumer = Consumer { it: GdTraitClass ->
WriteCommandAction.writeCommandAction(project, file).run<Exception> {
val traitFile = GdFileResIndex.getFiles(it.resource, project).firstOrNull() ?: return@run
val titleLine = "${GdTraitLineMarkerContributor.PREFIX}${it.resource.substring("res://".length)}"
val builder = StringBuilder()
builder.appendLine(titleLine)
builder.append(traitFile.getPsiFile(project)?.text?.replace("extends .+\n*".toRegex(), ""))
builder.appendLine()
builder.append(GdTraitLineMarkerContributor.SUFFIX)
EditorModificationUtil.insertStringAtCaret(editor, builder.toString())
PsiDocumentManager.getInstance(project).commitDocument(editor.document)
editor.foldingModel.runBatchFoldingOperation {
val foldingManager = CodeFoldingManager.getInstance(project)
foldingManager.updateFoldRegions(editor)
editor.foldingModel.allFoldRegions.find {
val element = EditorFoldingInfo.get(editor).getPsiElement(it)
element is PsiComment && element.text == titleLine
}?.let {
it.isExpanded = false
}
}
}
}
JBPopupFactory.getInstance()
.createPopupChooserBuilder(ArrayList(
GdFileUtil.listTraits(project).map {
GdTraitClass(it.nameWithoutExtension, it.resourcePath())
}
))
.setRenderer(GdCellRenderer)
.setTitle(GdScriptBundle.message("action.select.trait.class"))
.setItemChosenCallback(consumer)
.setNamerForFiltering { o: GdTraitClass -> o.name }
.createPopup()
.showInBestPositionFor(editor)
}