FIR: Prepare tree for callable references resolution
^KT-32725 In Progress
This commit is contained in:
+3
-3
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -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)
|
||||
|
||||
|
||||
+2
-2
@@ -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)
|
||||
|
||||
+27
@@ -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)
|
||||
}
|
||||
+34
@@ -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)
|
||||
}
|
||||
|
||||
+3
-1
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+5
-1
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+8
@@ -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("*"))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user