FIR: Prepare tree for callable references resolution

^KT-32725 In Progress
This commit is contained in:
Denis Zharkov
2019-10-10 18:36:48 +03:00
parent aeceee5af0
commit cdb2bb2b45
11 changed files with 105 additions and 9 deletions
@@ -27,7 +27,7 @@ import org.jetbrains.kotlin.fir.impl.FirLabelImpl
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
import org.jetbrains.kotlin.fir.lightTree.fir.ValueParameter
import org.jetbrains.kotlin.fir.lightTree.fir.WhenEntry
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl
import org.jetbrains.kotlin.fir.references.impl.FirExplicitSuperReference
import org.jetbrains.kotlin.fir.references.impl.FirExplicitThisReference
@@ -387,7 +387,7 @@ class ExpressionsConverter(
}
return FirCallableReferenceAccessImpl(null).apply {
calleeReference = firCallableReference.calleeReference
calleeReference = firCallableReference.calleeReference as FirNamedReference
explicitReceiver = firReceiverExpression
}
}
@@ -984,4 +984,4 @@ class ExpressionsConverter(
else -> firExpression
}
}
}
}
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir.expressions
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.*
@@ -23,7 +23,7 @@ abstract class FirCallableReferenceAccess : FirQualifiedAccessExpression() {
abstract override val explicitReceiver: FirExpression?
abstract override val dispatchReceiver: FirExpression
abstract override val extensionReceiver: FirExpression
abstract override val calleeReference: FirReference
abstract override val calleeReference: FirNamedReference
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitCallableReferenceAccess(this, data)
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.references.FirNamedReference
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
import org.jetbrains.kotlin.fir.visitors.*
@@ -29,7 +29,7 @@ class FirCallableReferenceAccessImpl(
override var explicitReceiver: FirExpression? = null
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
override var extensionReceiver: FirExpression = FirNoReceiverExpression
override lateinit var calleeReference: FirReference
override lateinit var calleeReference: FirNamedReference
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
typeRef.accept(visitor, data)
@@ -0,0 +1,27 @@
/*
* Copyright 2010-2019 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.fir.references
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.name.Name
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirResolvedRealCallableReference : FirResolvedCallableReference() {
abstract override val psi: PsiElement?
abstract override val name: Name
abstract override val candidateSymbol: AbstractFirBasedSymbol<*>?
abstract override val resolvedSymbol: AbstractFirBasedSymbol<*>
abstract val inferredTypeArguments: List<ConeKotlinType>
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitResolvedRealCallableReference(this, data)
}
@@ -0,0 +1,34 @@
/*
* Copyright 2010-2019 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.fir.references.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.references.FirResolvedRealCallableReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
import org.jetbrains.kotlin.name.Name
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
class FirResolvedRealCallableReferenceImpl(
override val psi: PsiElement?,
override val name: Name,
override val resolvedSymbol: AbstractFirBasedSymbol<*>
) : FirResolvedRealCallableReference() {
override val candidateSymbol: AbstractFirBasedSymbol<*>? get() = null
override val inferredTypeArguments: MutableList<ConeKotlinType> = mutableListOf()
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirResolvedRealCallableReferenceImpl {
return this
}
}
@@ -103,6 +103,7 @@ import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
import org.jetbrains.kotlin.fir.references.FirResolvedRealCallableReference
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
import org.jetbrains.kotlin.fir.types.FirDelegatedTypeRef
@@ -511,6 +512,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformElement(backingFieldReference, data)
}
open fun transformResolvedRealCallableReference(resolvedRealCallableReference: FirResolvedRealCallableReference, data: D): CompositeTransformResult<FirReference> {
return transformElement(resolvedRealCallableReference, data)
}
open fun transformResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformElement(resolvedTypeRef, data)
}
@@ -939,6 +944,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
return transformBackingFieldReference(backingFieldReference, data)
}
final override fun visitResolvedRealCallableReference(resolvedRealCallableReference: FirResolvedRealCallableReference, data: D): CompositeTransformResult<FirReference> {
return transformResolvedRealCallableReference(resolvedRealCallableReference, data)
}
final override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
return transformResolvedTypeRef(resolvedTypeRef, data)
}
@@ -103,6 +103,7 @@ import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
import org.jetbrains.kotlin.fir.references.FirResolvedRealCallableReference
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
import org.jetbrains.kotlin.fir.types.FirDelegatedTypeRef
@@ -315,6 +316,8 @@ abstract class FirVisitor<out R, in D> {
open fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference, data: D): R = visitElement(backingFieldReference, data)
open fun visitResolvedRealCallableReference(resolvedRealCallableReference: FirResolvedRealCallableReference, data: D): R = visitElement(resolvedRealCallableReference, data)
open fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): R = visitElement(resolvedTypeRef, data)
open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): R = visitElement(errorTypeRef, data)
@@ -103,6 +103,7 @@ import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
import org.jetbrains.kotlin.fir.references.FirResolvedRealCallableReference
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
import org.jetbrains.kotlin.fir.types.FirDelegatedTypeRef
@@ -509,6 +510,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(backingFieldReference)
}
open fun visitResolvedRealCallableReference(resolvedRealCallableReference: FirResolvedRealCallableReference) {
visitElement(resolvedRealCallableReference)
}
open fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) {
visitElement(resolvedTypeRef)
}
@@ -937,6 +942,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitBackingFieldReference(backingFieldReference)
}
final override fun visitResolvedRealCallableReference(resolvedRealCallableReference: FirResolvedRealCallableReference, data: Nothing?) {
visitResolvedRealCallableReference(resolvedRealCallableReference)
}
final override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: Nothing?) {
visitResolvedTypeRef(resolvedTypeRef)
}
@@ -121,6 +121,8 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val delegateFieldReference = element("DelegateFieldReference", Reference, resolvedCallableReference)
val backingFieldReference = element("BackingFieldReference", Reference, resolvedCallableReference)
val resolvedRealCallableReference = element("ResolvedRealCallableReference", Reference, resolvedCallableReference)
val resolvedTypeRef = element("ResolvedTypeRef", TypeRef, typeRef)
val errorTypeRef = element("ErrorTypeRef", TypeRef, resolvedTypeRef)
val delegatedTypeRef = element("DelegatedTypeRef", TypeRef, typeRef)
@@ -130,4 +132,4 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val functionTypeRef = element("FunctionTypeRef", TypeRef, typeRefWithNullability)
val resolvedFunctionTypeRef = element("ResolvedFunctionTypeRef", TypeRef, resolvedTypeRef, functionTypeRef)
val implicitTypeRef = element("ImplicitTypeRef", TypeRef, typeRef)
}
}
@@ -433,6 +433,10 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
defaultNull("candidateSymbol", withGetter = true)
}
impl(resolvedRealCallableReference) {
defaultNull("candidateSymbol", withGetter = true)
}
impl(namedReference, "FirSimpleNamedReference") {
kind = OpenClass
}
@@ -615,4 +619,4 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
it.addParent(abstractAnnotatedElement)
}
}
}
}
@@ -396,6 +396,10 @@ object NodeConfigurator : AbstractFieldConfigurator() {
+field("originalType", typeRef)
}
callableReferenceAccess.configure {
+field("calleeReference", namedReference)
}
getClassCall.configure {
+field("argument", expression)
}
@@ -448,6 +452,10 @@ object NodeConfigurator : AbstractFieldConfigurator() {
+field("resolvedSymbol", abstractFirBasedSymbolType, "*")
}
resolvedRealCallableReference.configure {
+fieldList("inferredTypeArguments", coneKotlinTypeType)
}
delegateFieldReference.configure {
+field("resolvedSymbol", delegateFieldSymbolType.withArgs("*"))
}