Skip to content

Commit 739b427

Browse files
committed
info func completion
1 parent 76b6c1a commit 739b427

File tree

2 files changed

+76
-0
lines changed

2 files changed

+76
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package org.tabooproject.development.completion
2+
3+
import com.intellij.codeInsight.completion.CompletionContributor
4+
import com.intellij.codeInsight.completion.CompletionParameters
5+
import com.intellij.codeInsight.completion.CompletionResultSet
6+
import com.intellij.codeInsight.completion.PrioritizedLookupElement
7+
import com.intellij.codeInsight.lookup.LookupElementBuilder
8+
import com.intellij.psi.PsiDocumentManager
9+
import com.intellij.psi.util.PsiTreeUtil
10+
import com.intellij.util.PlatformIcons
11+
import org.jetbrains.kotlin.psi.KtFile
12+
import org.jetbrains.kotlin.psi.KtImportDirective
13+
import org.jetbrains.kotlin.psi.KtPsiFactory
14+
import org.jetbrains.kotlin.resolve.ImportPath
15+
16+
17+
class InfoFuncCompletion: CompletionContributor() {
18+
19+
override fun fillCompletionVariants(parameters: CompletionParameters, result: CompletionResultSet) {
20+
result.addElement(
21+
PrioritizedLookupElement.withPriority(
22+
LookupElementBuilder.create("info")
23+
.withIcon(PlatformIcons.METHOD_ICON)
24+
.withTailText(" 打印日志 ", true)
25+
.withInsertHandler handler@{ context, _ ->
26+
val editor = context.editor
27+
val startOffset = context.startOffset
28+
val tailOffset = context.tailOffset
29+
val element = context.file.findElementAt(startOffset)
30+
if (element != null) {
31+
val parent = element.parent.parent
32+
33+
val ktFile = element.containingFile as? KtFile ?: return@handler
34+
35+
if (parent != null) {
36+
try {
37+
val objectText = parent.text.let {
38+
val index = it.indexOfLast { c -> c == '.' }
39+
it.substring(0, index)
40+
}
41+
context.document.replaceString(
42+
parent.textRange.startOffset,
43+
tailOffset,
44+
"info($objectText)"
45+
)
46+
editor.caretModel
47+
.moveToOffset(parent.textRange.startOffset + 5 + objectText.length)
48+
49+
PsiDocumentManager.getInstance(element.project).commitDocument(context.document)
50+
} catch (e: Exception) {
51+
e.printStackTrace()
52+
}
53+
54+
// 检查和引入info包
55+
val import =
56+
PsiTreeUtil.findChildrenOfType(ktFile, KtImportDirective::class.java)
57+
val hasImport =
58+
import.any { it.importPath?.pathStr == "taboolib.common.platform.function.info" }
59+
if (!hasImport) {
60+
val factory = KtPsiFactory(context.project)
61+
val importDirective =
62+
factory.createImportDirective(ImportPath.fromString("taboolib.common.platform.function.info"))
63+
ktFile.importList?.add(importDirective)
64+
}
65+
}
66+
}
67+
},
68+
-1000.0,
69+
),
70+
)
71+
}
72+
73+
}

src/main/resources/META-INF/plugin.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@
3434
level="WARNING"
3535
hasStaticDescription="false"
3636
implementationClass="org.tabooproject.development.inspection.DatabaseWorkspaceInspection"/>
37+
38+
<completion.contributor language="kotlin"
39+
implementationClass="org.tabooproject.development.completion.InfoFuncCompletion"/>
3740
</extensions>
3841

3942
<resource-bundle/>

0 commit comments

Comments
 (0)