override fun findPsiElements()

in jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/java/JavaLambdaHandlerResolver.kt [25:63]


    override fun findPsiElements(
        project: Project,
        handler: String,
        searchScope: GlobalSearchScope
    ): Array<NavigatablePsiElement> {
        val split = handler.split("::")
        val className = split[0]
        val methodName = if (split.size >= 2) split[1] else null

        val psiFacade = JavaPsiFacade.getInstance(project)
        return DumbService.getInstance(project).computeWithAlternativeResolveEnabled<Array<NavigatablePsiElement>, Exception> {
            ApplicationManager.getApplication().runReadAction<Array<NavigatablePsiElement>> {
                val classes = psiFacade.findClasses(className, searchScope).toList()
                return@runReadAction if (methodName.isNullOrEmpty()) {
                    classes.filterIsInstance<NavigatablePsiElement>().toTypedArray()
                } else {
                    val handlerMethod = classes.asSequence()
                        .map { psiClass ->
                            psiClass.findMethodsByName(methodName, true)
                                .filter { it.body != null } // Filter out interfaces
                                .filter {
                                    val file = it.containingFile.virtualFile

                                    return@filter if (psiClass.implementsLambdaHandlerInterface(file)) {
                                        true
                                    } else {
                                        it.isValidHandler(psiClass, file)
                                    }
                                }
                        }
                        .flatMap { it.asSequence() }
                        .pickMostSpecificHandler()
                    handlerMethod?.let {
                        arrayOf(it)
                    } ?: NavigatablePsiElement.EMPTY_NAVIGATABLE_ELEMENT_ARRAY
                }
            }
        }
    }