FIR: Expression typing and simple call resolver

This commit is contained in:
Simon Ogorodnik
2019-02-28 18:27:44 +03:00
parent 28873e61d4
commit 099f98f817
31 changed files with 637 additions and 117 deletions
@@ -7,11 +7,14 @@ package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.expressions.FirAnnotationContainer
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirTypedDeclaration : FirDeclaration, FirAnnotationContainer {
val returnTypeRef: FirTypeRef
fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D)
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitTypedDeclaration(this, data)
@@ -23,6 +23,10 @@ abstract class FirAbstractCallableMember : FirAbstractMemberDeclaration, FirCall
final override var receiverTypeRef: FirTypeRef?
final override var returnTypeRef: FirTypeRef
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
}
constructor(
session: FirSession,
psi: PsiElement?,
@@ -28,4 +28,8 @@ class FirAnonymousFunctionImpl(
label = label?.transformSingle(transformer, data)
return super<FirAbstractFunction>.transformChildren(transformer, data)
}
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
}
}
@@ -32,6 +32,12 @@ abstract class FirDefaultPropertyAccessor(
final override val annotations: List<FirAnnotationCall>
get() = emptyList()
abstract override var returnTypeRef: FirTypeRef
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
}
}
class FirDefaultPropertyGetter(
@@ -34,6 +34,10 @@ class FirDefaultSetterValueParameter(
return super<FirAbstractNamedAnnotatedDeclaration>.transformChildren(transformer, data)
}
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
}
companion object {
val name = Name.identifier("value")
}
@@ -32,4 +32,8 @@ class FirPropertyAccessorImpl(
return super<FirAbstractFunction>.transformChildren(transformer, data)
}
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
}
}
@@ -31,4 +31,8 @@ open class FirValueParameterImpl(
return super<FirAbstractNamedAnnotatedDeclaration>.transformChildren(transformer, data)
}
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
}
}
@@ -31,4 +31,8 @@ class FirVariableImpl(
return super<FirAbstractNamedAnnotatedDeclaration>.transformChildren(transformer, data)
}
override fun <D> transformReturnTypeRef(transformer: FirTransformer<D>, data: D) {
returnTypeRef = returnTypeRef.transformSingle(transformer, data)
}
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.FirReference
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
interface FirQualifiedAccess : FirStatement {
@@ -15,6 +16,8 @@ interface FirQualifiedAccess : FirStatement {
val explicitReceiver: FirExpression? get() = null
fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirQualifiedAccess
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
visitor.visitQualifiedAccess(this, data)
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.expressions.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
import org.jetbrains.kotlin.fir.visitors.FirTransformer
abstract class FirAbstractQualifiedAccess(
@@ -24,4 +25,9 @@ abstract class FirAbstractQualifiedAccess(
explicitReceiver = explicitReceiver?.transformSingle(transformer, data)
return super<FirAbstractStatement>.transformChildren(transformer, data)
}
override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirQualifiedAccess {
calleeReference = calleeReference.transformSingle(transformer, data)
return this
}
}
@@ -9,6 +9,7 @@ import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -29,4 +30,9 @@ class FirFunctionCallImpl(
explicitReceiver = explicitReceiver?.transformSingle(transformer, data)
return super<FirAbstractCall>.transformChildren(transformer, data)
}
override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirQualifiedAccess {
calleeReference = calleeReference.transformSingle(transformer, data)
return this
}
}