override fun getVariants()

in gdscript/src/main/kotlin/gdscript/reference/GdTypeHintReference.kt [68:102]


    override fun getVariants(): Array<LookupElement> {
        val variants = mutableListOf<LookupElement>()
        val container: PsiElement?

        if (key.contains(".")) {
            val classId = getOwnerClass() ?: return emptyArray()
            container = GdClassUtil.getOwningClassElement(classId)
        } else {
            container = GdClassUtil.getOwningClassElement(element)
            variants.addAll(GdClassCompletionUtil.allRootClasses(project))
            PsiTreeUtil.getParentOfType(element, GdMethodDeclTl::class.java)?.let { methodDecl ->
                PsiTreeUtil.findChildOfType(methodDecl, GdSuite::class.java)?.let { suite ->
                    variants.addAll(loadedClasses(suite).map {
                        GdLookup.create(
                            GdCommonUtil.getName(it),
                            priority = GdLookup.LOCAL_USER_DEFINED,
                            icon = GdScriptPluginIcons.GDScriptIcons.OBJECT,
                        )
                    })
                }
            }
            ProjectAutoloadUtil.listGlobals(project).forEach {
                variants.add(GdLookup.create(
                    it.key,
                    priority = GdLookup.USER_DEFINED,
                    icon = GdScriptPluginIcons.GDScriptIcons.OBJECT,
                ))
            }
        }

        variantsInner(container, variants)
        if (container is GdClassDeclTl) variantsInner(container.parent, variants)

        return variants.toTypedArray()
    }