[FIR IDE] LC Add anonymous objects support

+minor fixes
This commit is contained in:
Igor Yakovlev
2020-11-25 12:47:48 +03:00
parent 5630667320
commit a1603716ed
27 changed files with 657 additions and 208 deletions
@@ -103,6 +103,8 @@ abstract class KtAnalysisSession(override val token: ValidityToken) : ValidityTo
fun KtProperty.getVariableSymbol(): KtVariableSymbol = symbolProvider.getVariableSymbol(this)
fun KtObjectLiteralExpression.getAnonymousObjectSymbol(): KtAnonymousObjectSymbol = symbolProvider.getAnonymousObjectSymbol(this)
fun KtClassOrObject.getClassOrObjectSymbol(): KtClassOrObjectSymbol = symbolProvider.getClassOrObjectSymbol(this)
fun KtPropertyAccessor.getPropertyAccessorSymbol(): KtPropertyAccessorSymbol = symbolProvider.getPropertyAccessorSymbol(this)
@@ -0,0 +1,18 @@
/*
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.idea.frontend.api.symbols
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotatedSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithDeclarations
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithKind
import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
abstract class KtAnonymousObjectSymbol : KtSymbolWithKind, KtAnnotatedSymbol, KtSymbolWithDeclarations {
abstract val superTypes: List<KtType>
abstract override fun createPointer(): KtSymbolPointer<KtAnonymousObjectSymbol>
}
@@ -21,7 +21,10 @@ abstract class KtSymbolProvider : KtAnalysisSessionComponent() {
is KtEnumEntry -> getEnumEntrySymbol(psi)
is KtLambdaExpression -> getAnonymousFunctionSymbol(psi)
is KtProperty -> getVariableSymbol(psi)
is KtClassOrObject -> getClassOrObjectSymbol(psi)
is KtClassOrObject -> {
val literalExpression = (psi as? KtObjectDeclaration)?.parent as? KtObjectLiteralExpression
literalExpression?.let(::getAnonymousObjectSymbol) ?: getClassOrObjectSymbol(psi)
}
is KtPropertyAccessor -> getPropertyAccessorSymbol(psi)
else -> error("Cannot build symbol for ${psi::class}")
}
@@ -35,6 +38,7 @@ abstract class KtSymbolProvider : KtAnalysisSessionComponent() {
abstract fun getAnonymousFunctionSymbol(psi: KtNamedFunction): KtAnonymousFunctionSymbol
abstract fun getAnonymousFunctionSymbol(psi: KtLambdaExpression): KtAnonymousFunctionSymbol
abstract fun getVariableSymbol(psi: KtProperty): KtVariableSymbol
abstract fun getAnonymousObjectSymbol(psi: KtObjectLiteralExpression): KtAnonymousObjectSymbol
abstract fun getClassOrObjectSymbol(psi: KtClassOrObject): KtClassOrObjectSymbol
abstract fun getPropertyAccessorSymbol(psi: KtPropertyAccessor): KtPropertyAccessorSymbol
@@ -59,6 +59,8 @@ abstract class KtPropertySymbol : KtVariableSymbol(),
abstract val isOverride: Boolean
abstract val initializer: KtConstantValue?
abstract override fun createPointer(): KtSymbolPointer<KtPropertySymbol>
}