Accessor completion uses code style settings
This commit is contained in:
+36
-10
@@ -26,6 +26,7 @@ import com.intellij.codeInsight.template.TemplateManager
|
|||||||
import com.intellij.patterns.PatternCondition
|
import com.intellij.patterns.PatternCondition
|
||||||
import com.intellij.patterns.StandardPatterns
|
import com.intellij.patterns.StandardPatterns
|
||||||
import com.intellij.psi.JavaPsiFacade
|
import com.intellij.psi.JavaPsiFacade
|
||||||
|
import com.intellij.psi.codeStyle.CodeStyleManager
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import com.intellij.util.ProcessingContext
|
import com.intellij.util.ProcessingContext
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
@@ -310,18 +311,18 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration,
|
|||||||
"get" -> {
|
"get" -> {
|
||||||
collector.addElement(lookupElement)
|
collector.addElement(lookupElement)
|
||||||
|
|
||||||
if (!isUseSiteAnnotationTarget) { //TODO: use code style settings
|
if (!isUseSiteAnnotationTarget) {
|
||||||
collector.addElement(createKeywordWithSuffixLookupElement(keyword, "() = ", ""))
|
collector.addElement(createKeywordConstructLookupElement(keyword, "val v:Int get()=caret", "caret"))
|
||||||
collector.addElement(createKeywordWithSuffixLookupElement(keyword, "() {", "}"))
|
collector.addElement(createKeywordConstructLookupElement(keyword, "val v:Int get(){caret}", "caret", trimSpacesAroundCaret = true))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
"set" -> {
|
"set" -> {
|
||||||
collector.addElement(lookupElement)
|
collector.addElement(lookupElement)
|
||||||
|
|
||||||
if (!isUseSiteAnnotationTarget) { //TODO: use code style settings
|
if (!isUseSiteAnnotationTarget) {
|
||||||
collector.addElement(createKeywordWithSuffixLookupElement(keyword, "(value) {", "}"))
|
collector.addElement(createKeywordConstructLookupElement(keyword, "var v:Int set(value)=caret", "caret"))
|
||||||
collector.addElement(createKeywordWithSuffixLookupElement(keyword, "(value) = ", ""))
|
collector.addElement(createKeywordConstructLookupElement(keyword, "var v:Int set(value){caret}", "caret", trimSpacesAroundCaret = true))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -330,13 +331,38 @@ class BasicCompletionSession(configuration: CompletionSessionConfiguration,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun createKeywordWithSuffixLookupElement(keyword: String, textBeforeCaret: String, textAfterCaret: String): LookupElementBuilder {
|
private fun createKeywordConstructLookupElement(
|
||||||
return LookupElementBuilder.create(KeywordLookupObject(), keyword + textBeforeCaret + textAfterCaret)
|
keyword: String,
|
||||||
|
fileTextToReformat: String,
|
||||||
|
caretPlaceHolder: String,
|
||||||
|
trimSpacesAroundCaret: Boolean = false
|
||||||
|
): LookupElement {
|
||||||
|
val file = KtPsiFactory(project).createFile(fileTextToReformat)
|
||||||
|
CodeStyleManager.getInstance(project).reformat(file)
|
||||||
|
val newFileText = file.text
|
||||||
|
|
||||||
|
val keywordOffset = newFileText.indexOf(keyword)
|
||||||
|
assert(keywordOffset >= 0)
|
||||||
|
val keywordEndOffset = keywordOffset + keyword.length
|
||||||
|
|
||||||
|
val caretOffset = newFileText.indexOf(caretPlaceHolder)
|
||||||
|
assert(caretOffset >= 0)
|
||||||
|
assert(caretOffset >= keywordEndOffset)
|
||||||
|
|
||||||
|
var tailBeforeCaret = newFileText.substring(keywordEndOffset, caretOffset)
|
||||||
|
var tailAfterCaret = newFileText.substring(caretOffset + caretPlaceHolder.length)
|
||||||
|
|
||||||
|
if (trimSpacesAroundCaret) {
|
||||||
|
tailBeforeCaret = tailBeforeCaret.trimEnd()
|
||||||
|
tailAfterCaret = tailAfterCaret.trimStart()
|
||||||
|
}
|
||||||
|
|
||||||
|
return LookupElementBuilder.create(KeywordLookupObject(), keyword + tailBeforeCaret + tailAfterCaret)
|
||||||
.withPresentableText(keyword)
|
.withPresentableText(keyword)
|
||||||
.bold()
|
.bold()
|
||||||
.withTailText(textBeforeCaret + textAfterCaret)
|
.withTailText(tailBeforeCaret + tailAfterCaret)
|
||||||
.withInsertHandler { insertionContext, lookupElement ->
|
.withInsertHandler { insertionContext, lookupElement ->
|
||||||
insertionContext.editor.moveCaret(insertionContext.editor.caretModel.offset - textAfterCaret.length)
|
insertionContext.editor.moveCaret(insertionContext.editor.caretModel.offset - tailAfterCaret.length)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user