@@ -4,19 +4,19 @@ import com.intellij.codeInspection.ProblemHighlightType
44import com.intellij.lang.annotation.AnnotationHolder
55import com.intellij.lang.annotation.Annotator
66import com.intellij.psi.PsiElement
7+ import godot.common.constants.Constraints
78import godot.intellij.plugin.GodotPluginBundle
89import godot.intellij.plugin.annotator.general.checkNotGeneric
910import godot.intellij.plugin.data.model.REGISTER_CLASS_ANNOTATION
1011import godot.intellij.plugin.data.model.REGISTER_FUNCTION_ANNOTATION
12+ import godot.intellij.plugin.extension.asClassId
1113import godot.intellij.plugin.extension.isInGodotRoot
1214import godot.intellij.plugin.extension.registerProblem
1315import godot.intellij.plugin.quickfix.FunctionNotRegisteredQuickFix
14- import godot.common.constants.Constraints
1516import godot.tools.common.constants.GodotTypes
17+ import org.jetbrains.kotlin.analysis.api.analyze
1618import org.jetbrains.kotlin.asJava.toLightMethods
17- import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
1819import org.jetbrains.kotlin.idea.util.findAnnotation
19- import org.jetbrains.kotlin.name.FqName
2020import org.jetbrains.kotlin.psi.KtNamedFunction
2121import org.jetbrains.kotlin.psi.psiUtil.containingClass
2222
@@ -41,23 +41,26 @@ class RegisterFunctionAnnotator : Annotator {
4141 )
4242 }
4343
44- if (element.findAnnotation(FqName (REGISTER_FUNCTION_ANNOTATION )) != null ) {
44+ if (element.findAnnotation(asClassId (REGISTER_FUNCTION_ANNOTATION )) != null ) {
4545 checkNotGeneric(element.toLightMethods().first(), holder)
4646 checkFunctionParameterCount(element, holder)
4747 }
4848 }
4949 }
5050
5151 private fun overriddenRegisteredAbstractFunctionNotRegistered (element : KtNamedFunction ): Boolean {
52- return element.containingClass()?.findAnnotation(FqName (REGISTER_CLASS_ANNOTATION )) != null &&
53- element.findAnnotation(FqName (REGISTER_FUNCTION_ANNOTATION )) == null &&
54- element.resolveToDescriptorIfAny()?.overriddenDescriptors?.any { it.annotations.hasAnnotation(FqName (REGISTER_FUNCTION_ANNOTATION )) } == true
52+ val hasRegisterAnnotation = analyze(element) {
53+ element.symbol.allOverriddenSymbols.any { it.annotations.contains(asClassId(REGISTER_FUNCTION_ANNOTATION )) }
54+ }
55+ return element.containingClass()?.findAnnotation(asClassId(REGISTER_CLASS_ANNOTATION )) != null &&
56+ element.findAnnotation(asClassId(REGISTER_FUNCTION_ANNOTATION )) == null &&
57+ hasRegisterAnnotation
5558 }
5659
5760 private fun overriddenNotificationFunctionNotRegistered (element : KtNamedFunction ) =
58- element.containingClass()?.findAnnotation(FqName (REGISTER_CLASS_ANNOTATION )) != null &&
61+ element.containingClass()?.findAnnotation(asClassId (REGISTER_CLASS_ANNOTATION )) != null &&
5962 GodotTypes .notificationFunctions.contains(element.name) &&
60- element.findAnnotation(FqName (REGISTER_FUNCTION_ANNOTATION )) == null
63+ element.findAnnotation(asClassId (REGISTER_FUNCTION_ANNOTATION )) == null
6164
6265
6366 private fun checkFunctionParameterCount (element : KtNamedFunction , holder : AnnotationHolder ) {
0 commit comments