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.LightTree2Fir
|
||||||
import org.jetbrains.kotlin.fir.lightTree.fir.ValueParameter
|
import org.jetbrains.kotlin.fir.lightTree.fir.ValueParameter
|
||||||
import org.jetbrains.kotlin.fir.lightTree.fir.WhenEntry
|
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.FirErrorNamedReferenceImpl
|
||||||
import org.jetbrains.kotlin.fir.references.impl.FirExplicitSuperReference
|
import org.jetbrains.kotlin.fir.references.impl.FirExplicitSuperReference
|
||||||
import org.jetbrains.kotlin.fir.references.impl.FirExplicitThisReference
|
import org.jetbrains.kotlin.fir.references.impl.FirExplicitThisReference
|
||||||
@@ -387,7 +387,7 @@ class ExpressionsConverter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return FirCallableReferenceAccessImpl(null).apply {
|
return FirCallableReferenceAccessImpl(null).apply {
|
||||||
calleeReference = firCallableReference.calleeReference
|
calleeReference = firCallableReference.calleeReference as FirNamedReference
|
||||||
explicitReceiver = firReceiverExpression
|
explicitReceiver = firReceiverExpression
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -984,4 +984,4 @@ class ExpressionsConverter(
|
|||||||
else -> firExpression
|
else -> firExpression
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -6,7 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.fir.expressions
|
package org.jetbrains.kotlin.fir.expressions
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
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.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.visitors.*
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ abstract class FirCallableReferenceAccess : FirQualifiedAccessExpression() {
|
|||||||
abstract override val explicitReceiver: FirExpression?
|
abstract override val explicitReceiver: FirExpression?
|
||||||
abstract override val dispatchReceiver: FirExpression
|
abstract override val dispatchReceiver: FirExpression
|
||||||
abstract override val extensionReceiver: 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)
|
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.FirCallableReferenceAccess
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement
|
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.FirTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
|
||||||
import org.jetbrains.kotlin.fir.visitors.*
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
@@ -29,7 +29,7 @@ class FirCallableReferenceAccessImpl(
|
|||||||
override var explicitReceiver: FirExpression? = null
|
override var explicitReceiver: FirExpression? = null
|
||||||
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
|
override var dispatchReceiver: FirExpression = FirNoReceiverExpression
|
||||||
override var extensionReceiver: 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) {
|
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||||
typeRef.accept(visitor, data)
|
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.FirResolvedCallableReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
|
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
|
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.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
|
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirDelegatedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirDelegatedTypeRef
|
||||||
@@ -511,6 +512,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformElement(backingFieldReference, data)
|
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> {
|
open fun transformResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
|
||||||
return transformElement(resolvedTypeRef, data)
|
return transformElement(resolvedTypeRef, data)
|
||||||
}
|
}
|
||||||
@@ -939,6 +944,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
|||||||
return transformBackingFieldReference(backingFieldReference, data)
|
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> {
|
final override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): CompositeTransformResult<FirTypeRef> {
|
||||||
return transformResolvedTypeRef(resolvedTypeRef, data)
|
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.FirResolvedCallableReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
|
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
|
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.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
|
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirDelegatedTypeRef
|
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 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 visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: D): R = visitElement(resolvedTypeRef, data)
|
||||||
|
|
||||||
open fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: D): R = visitElement(errorTypeRef, 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.FirResolvedCallableReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
|
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
|
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.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
|
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirDelegatedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirDelegatedTypeRef
|
||||||
@@ -509,6 +510,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitElement(backingFieldReference)
|
visitElement(backingFieldReference)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
open fun visitResolvedRealCallableReference(resolvedRealCallableReference: FirResolvedRealCallableReference) {
|
||||||
|
visitElement(resolvedRealCallableReference)
|
||||||
|
}
|
||||||
|
|
||||||
open fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) {
|
open fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef) {
|
||||||
visitElement(resolvedTypeRef)
|
visitElement(resolvedTypeRef)
|
||||||
}
|
}
|
||||||
@@ -937,6 +942,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
|||||||
visitBackingFieldReference(backingFieldReference)
|
visitBackingFieldReference(backingFieldReference)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final override fun visitResolvedRealCallableReference(resolvedRealCallableReference: FirResolvedRealCallableReference, data: Nothing?) {
|
||||||
|
visitResolvedRealCallableReference(resolvedRealCallableReference)
|
||||||
|
}
|
||||||
|
|
||||||
final override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: Nothing?) {
|
final override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: Nothing?) {
|
||||||
visitResolvedTypeRef(resolvedTypeRef)
|
visitResolvedTypeRef(resolvedTypeRef)
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -121,6 +121,8 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
|||||||
val delegateFieldReference = element("DelegateFieldReference", Reference, resolvedCallableReference)
|
val delegateFieldReference = element("DelegateFieldReference", Reference, resolvedCallableReference)
|
||||||
val backingFieldReference = element("BackingFieldReference", Reference, resolvedCallableReference)
|
val backingFieldReference = element("BackingFieldReference", Reference, resolvedCallableReference)
|
||||||
|
|
||||||
|
val resolvedRealCallableReference = element("ResolvedRealCallableReference", Reference, resolvedCallableReference)
|
||||||
|
|
||||||
val resolvedTypeRef = element("ResolvedTypeRef", TypeRef, typeRef)
|
val resolvedTypeRef = element("ResolvedTypeRef", TypeRef, typeRef)
|
||||||
val errorTypeRef = element("ErrorTypeRef", TypeRef, resolvedTypeRef)
|
val errorTypeRef = element("ErrorTypeRef", TypeRef, resolvedTypeRef)
|
||||||
val delegatedTypeRef = element("DelegatedTypeRef", TypeRef, typeRef)
|
val delegatedTypeRef = element("DelegatedTypeRef", TypeRef, typeRef)
|
||||||
@@ -130,4 +132,4 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
|||||||
val functionTypeRef = element("FunctionTypeRef", TypeRef, typeRefWithNullability)
|
val functionTypeRef = element("FunctionTypeRef", TypeRef, typeRefWithNullability)
|
||||||
val resolvedFunctionTypeRef = element("ResolvedFunctionTypeRef", TypeRef, resolvedTypeRef, functionTypeRef)
|
val resolvedFunctionTypeRef = element("ResolvedFunctionTypeRef", TypeRef, resolvedTypeRef, functionTypeRef)
|
||||||
val implicitTypeRef = element("ImplicitTypeRef", TypeRef, typeRef)
|
val implicitTypeRef = element("ImplicitTypeRef", TypeRef, typeRef)
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -433,6 +433,10 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
|||||||
defaultNull("candidateSymbol", withGetter = true)
|
defaultNull("candidateSymbol", withGetter = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl(resolvedRealCallableReference) {
|
||||||
|
defaultNull("candidateSymbol", withGetter = true)
|
||||||
|
}
|
||||||
|
|
||||||
impl(namedReference, "FirSimpleNamedReference") {
|
impl(namedReference, "FirSimpleNamedReference") {
|
||||||
kind = OpenClass
|
kind = OpenClass
|
||||||
}
|
}
|
||||||
@@ -615,4 +619,4 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
|||||||
it.addParent(abstractAnnotatedElement)
|
it.addParent(abstractAnnotatedElement)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+8
@@ -396,6 +396,10 @@ object NodeConfigurator : AbstractFieldConfigurator() {
|
|||||||
+field("originalType", typeRef)
|
+field("originalType", typeRef)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
callableReferenceAccess.configure {
|
||||||
|
+field("calleeReference", namedReference)
|
||||||
|
}
|
||||||
|
|
||||||
getClassCall.configure {
|
getClassCall.configure {
|
||||||
+field("argument", expression)
|
+field("argument", expression)
|
||||||
}
|
}
|
||||||
@@ -448,6 +452,10 @@ object NodeConfigurator : AbstractFieldConfigurator() {
|
|||||||
+field("resolvedSymbol", abstractFirBasedSymbolType, "*")
|
+field("resolvedSymbol", abstractFirBasedSymbolType, "*")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resolvedRealCallableReference.configure {
|
||||||
|
+fieldList("inferredTypeArguments", coneKotlinTypeType)
|
||||||
|
}
|
||||||
|
|
||||||
delegateFieldReference.configure {
|
delegateFieldReference.configure {
|
||||||
+field("resolvedSymbol", delegateFieldSymbolType.withArgs("*"))
|
+field("resolvedSymbol", delegateFieldSymbolType.withArgs("*"))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user