@@ -64,7 +64,7 @@ object JvmLanguageAssistant : LanguageAssistant() {
6464 val psiElementHandler = PsiElementHandler .makePsiElementHandler(file)
6565
6666 if (psiElementHandler.isCreateTestActionAvailable(element)) {
67- val srcClass = psiElementHandler.containingClass (element) ? : return null
67+ val srcClass = psiElementHandler.identifiedContainingClass (element) ? : return null
6868 val srcSourceRoot = srcClass.getSourceRoot() ? : return null
6969 val srcMembers = srcClass.extractFirstLevelMembers(false )
7070 val focusedMethod = focusedMethodOrNull(element, srcMembers, psiElementHandler)
@@ -94,7 +94,7 @@ object JvmLanguageAssistant : LanguageAssistant() {
9494 val psiElementHandler = PsiElementHandler .makePsiElementHandler(file)
9595
9696 if (psiElementHandler.isCreateTestActionAvailable(element)) {
97- psiElementHandler.containingClass (element)?.let {
97+ psiElementHandler.identifiedContainingClass (element)?.let {
9898 srcClasses + = setOf (it)
9999 extractMembersFromSrcClasses = true
100100 val memberInfoList = runReadAction<List <MemberInfo >> {
@@ -148,6 +148,11 @@ object JvmLanguageAssistant : LanguageAssistant() {
148148 return null
149149 }
150150
151+ private fun PsiElementHandler.identifiedContainingClass (element : PsiElement ): PsiClass ? {
152+ val clazz = containingClass(element)
153+ return if (clazz is PsiAnonymousClass ) PsiTreeUtil .getParentOfType(clazz, PsiClass ::class .java) else clazz
154+ }
155+
151156 /* *
152157 * Validates that a set of source classes matches some requirements from [isInvalid].
153158 * If no one of them matches, shows a warning about the first mismatch reason.
@@ -207,8 +212,13 @@ object JvmLanguageAssistant : LanguageAssistant() {
207212 // Thus, make transition to the Psi if it is required.
208213 val currentMethod = PsiTreeUtil .getParentOfType(element, psiElementHandler.methodClass)
209214 ?.let { psiElementHandler.toPsi(it, PsiMethod ::class .java) }
215+ // For anonymous class, we cannot select the nearest parent method directly.
216+ // So, we have to suggest the nearest "outer" method from the named class.
217+ val topmostCurrentMethod = PsiTreeUtil .getTopmostParentOfType(element, psiElementHandler.methodClass)
218+ ?.let { psiElementHandler.toPsi(it, PsiMethod ::class .java) }
210219
211220 return methods.singleOrNull { it.member == currentMethod }
221+ ? : methods.singleOrNull { it.member == topmostCurrentMethod }
212222 }
213223
214224 private fun getAllClasses (directory : PsiDirectory ): Set <PsiClass > {
0 commit comments