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
}
}
}
}