diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesParentingTestBase.kt b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesParentingTestBase.kt index 76431777c6a..e7580877958 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesParentingTestBase.kt +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/base/AbstractSymbolLightClassesParentingTestBase.kt @@ -54,6 +54,10 @@ open class AbstractSymbolLightClassesParentingTestBase( checkDeclarationParent(declaration) } + if (declaration is PsiMember && declaration !is PsiTypeParameter) { + visitPsiMemberDeclaration(declaration) + } + declarationStack.addLast(declaration) try { if (declaration is PsiModifierListOwner) { @@ -75,6 +79,27 @@ open class AbstractSymbolLightClassesParentingTestBase( } } + private fun visitPsiMemberDeclaration(member: PsiMember) { + val containingClass = member.containingClass + val expectedClass = declarationStack.lastOrNull() + if (expectedClass != null) { + assertions.assertEquals(expectedClass, containingClass) + } + + val classToCheck: PsiClass = expectedClass?.let { it as PsiClass } ?: containingClass ?: return + val memberToCheck = if (member is PsiEnumConstantInitializer) member.enumConstant else member + val collection = when (memberToCheck) { + is PsiMethod -> classToCheck.methods + is PsiField -> classToCheck.fields + is PsiClass -> classToCheck.innerClasses + else -> error("Unexpected member: ${memberToCheck::class}\nElement: $memberToCheck") + } + + assertions.assertTrue(memberToCheck in collection) { + "$memberToCheck is not found in:\n${collection.joinToString(separator = "\n")}\n" + } + } + override fun visitModifierList(list: PsiModifierList) { checkParentAndVisitChildren(list, notCheckItself = ignoreDecompiledClasses) { visitor -> annotations.forEach { it.accept(visitor) }