override fun getDocumentationElementForLink()

in gdscript/src/main/kotlin/gdscript/codeInsight/GdDocumentationProvider.kt [31:67]


    override fun getDocumentationElementForLink(
            psiManager: PsiManager?,
            link: String?,
            context: PsiElement?,
    ): PsiElement? {
        if (link.isNullOrBlank() || context == null) return null
        val project = context.project
        if (link.contains(":") && !link.startsWith("res://")) {
            val prefix = link.substringBefore(":")
            val subLink = link.substringAfter(":")
            if (prefix == LINK_ENUM_VALUE) {
                val enumName = subLink.substringBefore(".")
                val enumValue = subLink.substringAfter(".")
                GdClassMemberUtil.listDeclarations(context, enumName).firstOrNull()?.let {
                    if (it is GdEnumDeclTl) {
                        return it.enumValueList.find { it.enumValueNmi.name == enumValue }?.enumValueNmi
                    }
                }
            } else if (prefix == LINK_PACKAGE) {
                var directory = ProjectFileIndex.getInstance(project).getContentRootForFile(project.projectFile!!) ?: return null
                if (subLink.contains("/")) directory = directory.findDirectory(subLink.substringAfter("/")) ?: return null

                return PsiManager.getInstance(project).findDirectory(directory)
            }

            return null
        }

        if (context.containingFile != null) {
            GdClassMemberUtil.listDeclarations(context, link).firstOrNull()?.psi()?.let {
                return GdClassMemberReference.resolveId(it)
            }
        }
        GdClassUtil.getClassIdElement(link, project)?.let { return it }

        return null
    }