11package com.demonwav.mcdev.platform.bukkit.completion
22
3+ import com.demonwav.mcdev.platform.bukkit.util.BukkitConstants
4+ import com.demonwav.mcdev.util.findContainingClass
5+ import com.demonwav.mcdev.util.findContainingMethod
36import com.intellij.codeInsight.completion.CompletionParameters
47import com.intellij.codeInsight.completion.CompletionProvider
58import com.intellij.codeInsight.completion.CompletionResultSet
@@ -18,31 +21,33 @@ import com.intellij.util.ProcessingContext
1821import org.jetbrains.annotations.NotNull
1922
2023class BukkitEventHandlerCompletionProvider : CompletionProvider <CompletionParameters >() {
21- companion object {
22- const val EVENT_LISTENER = " org.bukkit.event.Listener"
23- private const val BUKKIT_EVENT_FQN = " org.bukkit.event.Event"
24- }
2524
2625 override fun addCompletions (
27- @NotNull completionParameters : CompletionParameters ,
28- @NotNull processingContext : ProcessingContext ,
29- @NotNull completionResultSet : CompletionResultSet
26+ completionParameters : CompletionParameters ,
27+ processingContext : ProcessingContext ,
28+ completionResultSet : CompletionResultSet
3029 ) {
3130 val prefix = completionResultSet.prefixMatcher.prefix
32- if (! prefix.startsWith(" on" ) || prefix.length == 2 ) return
31+ if (! prefix.startsWith(" on" ) || prefix.length == 2 ) {
32+ return
33+ }
3334
3435 val position = completionParameters.position
35- val containingClass = PsiTreeUtil .getParentOfType( position, PsiClass :: class .java ) ? : return
36- val project: Project = position.project
37- val facade = JavaPsiFacadeEx .getInstanceEx (project)
36+ val containingClass = position.findContainingClass( ) ? : return
37+ val project = position.project
38+ val facade = JavaPsiFacadeEx .getInstance (project)
3839
39- val eventListenerClass = facade.findClass(EVENT_LISTENER , GlobalSearchScope .allScope(project)) ? : return
40- if (! containingClass.isInheritor(eventListenerClass, true )) return
41- if (PsiTreeUtil .getParentOfType(position, PsiMethod ::class .java) != null ) return
40+ val eventListenerClass = facade.findClass(BukkitConstants .LISTENER_CLASS , GlobalSearchScope .allScope(project)) ? : return
41+ if (! containingClass.isInheritor(eventListenerClass, true )) {
42+ return
43+ }
4244
43- val scope = GlobalSearchScope .allScope(project)
44- val eventBaseClass = facade.findClass(BUKKIT_EVENT_FQN , scope) ? : return
45+ if (position.findContainingMethod() != null ) {
46+ return
47+ }
4548
49+ val scope = GlobalSearchScope .allScope(project)
50+ val eventBaseClass = facade.findClass(BukkitConstants .EVENT_CLASS , scope) ? : return
4651 val eventNameFilter = prefix.substring(2 ).lowercase()
4752
4853 ClassInheritorsSearch .search(eventBaseClass, scope, true )
@@ -57,7 +62,7 @@ class BukkitEventHandlerCompletionProvider : CompletionProvider<CompletionParame
5762 }
5863
5964 val lookupString = " on$eventSimpleName "
60- val methodName = lookupString.replace (" Event" , " " )
65+ val methodName = lookupString.removeSuffix (" Event" )
6166 val qualifiedName = psiClass.qualifiedName
6267
6368 val element = LookupElementBuilder
0 commit comments