FIR: support resolving to objects

This commit is contained in:
Simon Ogorodnik
2019-04-09 20:21:47 +03:00
committed by Mikhail Glukhikh
parent b38f3a1272
commit c6aff9380b
21 changed files with 160 additions and 61 deletions
@@ -14,6 +14,8 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
import org.jetbrains.kotlin.fir.expressions.impl.FirExpressionStub
import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.types.*
@@ -763,13 +765,16 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
override fun visitResolvedCallableReference(resolvedCallableReference: FirResolvedCallableReference) {
print("R|")
val isFakeOverride = (resolvedCallableReference.callableSymbol as? FirFunctionSymbol)?.isFakeOverride == true
val isFakeOverride = (resolvedCallableReference.coneSymbol as? FirFunctionSymbol)?.isFakeOverride == true
if (isFakeOverride) {
print("FakeOverride<")
}
val symbol = resolvedCallableReference.callableSymbol
print(symbol.callableId)
val symbol = resolvedCallableReference.coneSymbol
if (symbol is ConeCallableSymbol)
print(symbol.callableId)
else if (symbol is ConeClassLikeSymbol)
print(symbol.classId)
if (isFakeOverride) {
when (symbol) {
is FirFunctionSymbol -> {
@@ -5,11 +5,11 @@
package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
import org.jetbrains.kotlin.fir.symbols.ConeSymbol
import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirResolvedCallableReference : FirNamedReference {
val callableSymbol: ConeCallableSymbol
val coneSymbol: ConeSymbol
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitResolvedCallableReference(this, data)
@@ -28,6 +28,7 @@ fun FirExpression.toResolvedCallableReference(): FirResolvedCallableReference? {
return (this as? FirQualifiedAccess)?.calleeReference as? FirResolvedCallableReference
}
fun FirExpression.toResolvedCallableSymbol(): ConeCallableSymbol? {
return toResolvedCallableReference()?.callableSymbol
return toResolvedCallableReference()?.coneSymbol as ConeCallableSymbol?
}
@@ -16,5 +16,5 @@ class FirPropertyFromParameterCallableReference(
session: FirSession,
psi: PsiElement?,
override val name: Name,
override val callableSymbol: FirVariableSymbol
override val coneSymbol: FirVariableSymbol
) : FirAbstractElement(session, psi), FirResolvedCallableReference
@@ -9,12 +9,12 @@ import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirAbstractElement
import org.jetbrains.kotlin.fir.FirResolvedCallableReference
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.symbols.ConeCallableSymbol
import org.jetbrains.kotlin.fir.symbols.ConeSymbol
import org.jetbrains.kotlin.name.Name
open class FirResolvedCallableReferenceImpl(
session: FirSession,
psi: PsiElement?,
override val name: Name,
override val callableSymbol: ConeCallableSymbol
override val coneSymbol: ConeSymbol
) : FirAbstractElement(session, psi), FirResolvedCallableReference