FIR LC: populate ctor in anonymous objects

Note that enum entries are modeled as anonymous objects in FIR too.
This commit is contained in:
Jinseong Jeon
2021-08-05 23:42:52 -07:00
committed by Ilya Kirillov
parent 75c76e2b57
commit e64f7ffb98
3 changed files with 13 additions and 6 deletions
@@ -59,8 +59,11 @@ internal class FirLightAnonymousClassForSymbol(
val result = mutableListOf<KtLightMethod>() val result = mutableListOf<KtLightMethod>()
analyzeWithSymbolAsContext(anonymousObjectSymbol) { analyzeWithSymbolAsContext(anonymousObjectSymbol) {
val callableSymbols = anonymousObjectSymbol.getDeclaredMemberScope().getCallableSymbols() val declaredMemberScope = anonymousObjectSymbol.getDeclaredMemberScope()
createMethods(callableSymbols, result)
createMethods(declaredMemberScope.getCallableSymbols(), result)
createConstructors(declaredMemberScope.getConstructors(), result)
} }
result result
@@ -151,4 +154,4 @@ internal class FirLightAnonymousClassForSymbol(
override fun toString() = override fun toString() =
"${this::class.java.simpleName}:${kotlinOrigin?.getDebugText()}" "${this::class.java.simpleName}:${kotlinOrigin?.getDebugText()}"
} }
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.idea.asJava.* import org.jetbrains.kotlin.idea.asJava.*
import org.jetbrains.kotlin.idea.asJava.FirLightClassModifierList import org.jetbrains.kotlin.idea.asJava.FirLightClassModifierList
import org.jetbrains.kotlin.idea.asJava.FirLightPsiJavaCodeReferenceElementWithNoReference import org.jetbrains.kotlin.idea.asJava.FirLightPsiJavaCodeReferenceElementWithNoReference
import org.jetbrains.kotlin.idea.asJava.classes.createConstructors
import org.jetbrains.kotlin.idea.asJava.classes.createMethods import org.jetbrains.kotlin.idea.asJava.classes.createMethods
import org.jetbrains.kotlin.idea.frontend.api.fir.analyzeWithSymbolAsContext import org.jetbrains.kotlin.idea.frontend.api.fir.analyzeWithSymbolAsContext
import org.jetbrains.kotlin.idea.frontend.api.isValid import org.jetbrains.kotlin.idea.frontend.api.isValid
@@ -127,8 +128,11 @@ internal class FirLightClassForEnumEntry(
val result = mutableListOf<KtLightMethod>() val result = mutableListOf<KtLightMethod>()
analyzeWithSymbolAsContext(enumEntrySymbol) { analyzeWithSymbolAsContext(enumEntrySymbol) {
val callableSymbols = enumEntrySymbol.getDeclaredMemberScope().getCallableSymbols() val declaredMemberScope = enumEntrySymbol.getDeclaredMemberScope()
createMethods(callableSymbols, result)
createMethods(declaredMemberScope.getCallableSymbols(), result)
createConstructors(declaredMemberScope.getConstructors(), result)
} }
return result return result
@@ -119,7 +119,7 @@ private fun lightClassForEnumEntry(ktEnumEntry: KtEnumEntry): KtLightClass? {
return (targetField as? FirLightFieldForEnumEntry)?.initializingClass as? KtLightClass return (targetField as? FirLightFieldForEnumEntry)?.initializingClass as? KtLightClass
} }
internal fun FirLightClassForSymbol.createConstructors( internal fun FirLightClassBase.createConstructors(
declarations: Sequence<KtConstructorSymbol>, declarations: Sequence<KtConstructorSymbol>,
result: MutableList<KtLightMethod> result: MutableList<KtLightMethod>
) { ) {