From 5e351061e8ad4c335082de8f815d4ceb2925da72 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 5 Apr 2017 16:17:17 +0300 Subject: [PATCH] Light classes: test consistency for inner classes --- .../resolve/AbstractIdeLightClassTest.kt | 44 ++++++++++++------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractIdeLightClassTest.kt b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractIdeLightClassTest.kt index 312b1e6693a..41f2fe59e17 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractIdeLightClassTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/AbstractIdeLightClassTest.kt @@ -193,10 +193,8 @@ object LightClassLazinessChecker { tracker.allowLevel(EXACT) } - // collect method class results on light members that should not trigger exact context evaluation - val classInfo = classInfo(lightClass) - val fieldsToInfo = lightClass.fields.asList().keysToMap { fieldInfo(it) } - val methodsToInfo = lightClass.methods.asList().keysToMap { methodInfo(it) } + // collect api method call results on light members that should not trigger exact context evaluation + val lazinessInfo = LazinessInfo(lightClass) tracker.allowLevel(EXACT) @@ -207,26 +205,40 @@ object LightClassLazinessChecker { // still running code above to catch possible exceptions if (lazinessMode == Mode.NoConsistency) return - // check collected data against delegates which should contain correct data - for ((field, lightFieldInfo) in fieldsToInfo) { - val delegate = (field as KtLightField).clsDelegate - assertEquals(fieldInfo(delegate), lightFieldInfo) - } - for ((method, lightMethodInfo) in methodsToInfo) { - val delegate = (method as KtLightMethod).clsDelegate - assertEquals(methodInfo(delegate), lightMethodInfo) - } + lazinessInfo.checkConsistency() + } - assertEquals(classInfo(lightClass.clsDelegate), classInfo) + private class LazinessInfo(val lightClass: KtLightClass) { + val classInfo = classInfo(lightClass) + val fieldsToInfo = lightClass.fields.asList().keysToMap { fieldInfo(it) } + val methodsToInfo = lightClass.methods.asList().keysToMap { methodInfo(it) } + val innerClasses = lightClass.innerClasses.map { LazinessInfo(it as KtLightClass) } + + fun checkConsistency() { + // check collected data against delegates which should contain correct data + for ((field, lightFieldInfo) in fieldsToInfo) { + val delegate = (field as KtLightField).clsDelegate + assertEquals(fieldInfo(delegate), lightFieldInfo) + } + for ((method, lightMethodInfo) in methodsToInfo) { + val delegate = (method as KtLightMethod).clsDelegate + assertEquals(methodInfo(delegate), lightMethodInfo) + } + + assertEquals(classInfo(lightClass.clsDelegate), classInfo) + + innerClasses.forEach(LazinessInfo::checkConsistency) + } } private data class ClassInfo( val fieldNames: Collection, - val methodNames: Collection + val methodNames: Collection, + val modifiers: List ) private fun classInfo(psiClass: PsiClass) = with(psiClass) { - ClassInfo(fields.names(), methods.names()) + ClassInfo(fields.names(), methods.names(), PsiModifier.MODIFIERS.asList().filter { modifierList!!.hasModifierProperty(it) }) } private data class FieldInfo(