FIR: implementation of delegateProvider in delegate resolve
This commit is contained in:
@@ -625,6 +625,10 @@ class FirRenderer(builder: StringBuilder) : FirVisitorVoid() {
|
||||
print("${constExpression.kind}(${constExpression.value})")
|
||||
}
|
||||
|
||||
override fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression) {
|
||||
wrappedDelegateExpression.expression.accept(this)
|
||||
}
|
||||
|
||||
override fun visitNamedArgumentExpression(namedArgumentExpression: FirNamedArgumentExpression) {
|
||||
print(namedArgumentExpression.name)
|
||||
print(" = ")
|
||||
|
||||
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.declarations.impl
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirVariable
|
||||
|
||||
+1
-12
@@ -13,24 +13,13 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
abstract class FirWrappedArgumentExpression(
|
||||
session: FirSession,
|
||||
psi: PsiElement?
|
||||
) : FirExpression(session, psi) {
|
||||
abstract val expression: FirExpression
|
||||
|
||||
) : FirWrappedExpression(session, psi) {
|
||||
open val isSpread: Boolean
|
||||
get() = false
|
||||
|
||||
override val typeRef: FirTypeRef
|
||||
get() = expression.typeRef
|
||||
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||
throw AssertionError("We should not try to replace type reference in ${this::class}")
|
||||
}
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitWrappedArgumentExpression(this, data)
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
expression.accept(visitor, data)
|
||||
super.acceptChildren(visitor, data)
|
||||
}
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* 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.expressions
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
abstract class FirWrappedDelegateExpression(
|
||||
session: FirSession,
|
||||
psi: PsiElement?
|
||||
) : FirWrappedExpression(session, psi) {
|
||||
abstract val delegateProvider: FirExpression
|
||||
|
||||
override val typeRef: FirTypeRef
|
||||
get() = expression.typeRef
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R {
|
||||
return visitor.visitWrappedDelegateExpression(this, data)
|
||||
}
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
delegateProvider.accept(visitor, data)
|
||||
super.acceptChildren(visitor, data)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* 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.expressions
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitor
|
||||
|
||||
abstract class FirWrappedExpression(
|
||||
session: FirSession,
|
||||
psi: PsiElement?
|
||||
) : FirExpression(session, psi) {
|
||||
abstract val expression: FirExpression
|
||||
|
||||
override fun replaceTypeRef(newTypeRef: FirTypeRef) {
|
||||
throw AssertionError("We should not try to replace type reference in ${this::class}")
|
||||
}
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R =
|
||||
visitor.visitWrappedExpression(this, data)
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
expression.accept(visitor, data)
|
||||
super.acceptChildren(visitor, data)
|
||||
}
|
||||
}
|
||||
+29
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* 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.expressions.impl
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
|
||||
import org.jetbrains.kotlin.fir.transformSingle
|
||||
import org.jetbrains.kotlin.fir.visitors.FirTransformer
|
||||
|
||||
class FirWrappedDelegateExpressionImpl(
|
||||
session: FirSession,
|
||||
psi: PsiElement?,
|
||||
override var expression: FirExpression
|
||||
) : FirWrappedDelegateExpression(session, psi) {
|
||||
override lateinit var delegateProvider: FirExpression
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
|
||||
expression = expression.transformSingle(transformer, data)
|
||||
delegateProvider = delegateProvider.transformSingle(transformer, data)
|
||||
|
||||
return super.transformChildren(transformer, data)
|
||||
}
|
||||
}
|
||||
+17
-1
@@ -320,8 +320,12 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformUnknownTypeExpression(whenSubjectExpression, data)
|
||||
}
|
||||
|
||||
open fun transformWrappedExpression(wrappedExpression: FirWrappedExpression, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformExpression(wrappedExpression, data)
|
||||
}
|
||||
|
||||
open fun transformWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformExpression(wrappedArgumentExpression, data)
|
||||
return transformWrappedExpression(wrappedArgumentExpression, data)
|
||||
}
|
||||
|
||||
open fun transformLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: D): CompositeTransformResult<FirStatement> {
|
||||
@@ -336,6 +340,10 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformWrappedArgumentExpression(spreadArgumentExpression, data)
|
||||
}
|
||||
|
||||
open fun transformWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformWrappedExpression(wrappedDelegateExpression, data)
|
||||
}
|
||||
|
||||
open fun transformClass(klass: FirClass, data: D): CompositeTransformResult<FirStatement> {
|
||||
return transformStatement(klass, data)
|
||||
}
|
||||
@@ -872,6 +880,14 @@ abstract class FirTransformer<in D> : FirVisitor<CompositeTransformResult<FirEle
|
||||
return transformWrappedArgumentExpression(wrappedArgumentExpression, data)
|
||||
}
|
||||
|
||||
final override fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformWrappedDelegateExpression(wrappedDelegateExpression, data)
|
||||
}
|
||||
|
||||
final override fun visitWrappedExpression(wrappedExpression: FirWrappedExpression, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformWrappedExpression(wrappedExpression, data)
|
||||
}
|
||||
|
||||
final override fun visitElement(element: FirElement, data: D): CompositeTransformResult<FirElement> {
|
||||
return transformElement(element, data)
|
||||
}
|
||||
|
||||
@@ -320,8 +320,12 @@ abstract class FirVisitor<out R, in D> {
|
||||
return visitUnknownTypeExpression(whenSubjectExpression, data)
|
||||
}
|
||||
|
||||
open fun visitWrappedExpression(wrappedExpression: FirWrappedExpression, data: D): R {
|
||||
return visitExpression(wrappedExpression, data)
|
||||
}
|
||||
|
||||
open fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression, data: D): R {
|
||||
return visitExpression(wrappedArgumentExpression, data)
|
||||
return visitWrappedExpression(wrappedArgumentExpression, data)
|
||||
}
|
||||
|
||||
open fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression, data: D): R {
|
||||
@@ -336,6 +340,10 @@ abstract class FirVisitor<out R, in D> {
|
||||
return visitWrappedArgumentExpression(spreadArgumentExpression, data)
|
||||
}
|
||||
|
||||
open fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: D): R {
|
||||
return visitWrappedExpression(wrappedDelegateExpression, data)
|
||||
}
|
||||
|
||||
open fun visitClass(klass: FirClass, data: D): R {
|
||||
return visitStatement(klass, data)
|
||||
}
|
||||
|
||||
+17
-1
@@ -320,8 +320,12 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitUnknownTypeExpression(whenSubjectExpression, null)
|
||||
}
|
||||
|
||||
open fun visitWrappedExpression(wrappedExpression: FirWrappedExpression) {
|
||||
visitExpression(wrappedExpression, null)
|
||||
}
|
||||
|
||||
open fun visitWrappedArgumentExpression(wrappedArgumentExpression: FirWrappedArgumentExpression) {
|
||||
visitExpression(wrappedArgumentExpression, null)
|
||||
visitWrappedExpression(wrappedArgumentExpression, null)
|
||||
}
|
||||
|
||||
open fun visitLambdaArgumentExpression(lambdaArgumentExpression: FirLambdaArgumentExpression) {
|
||||
@@ -336,6 +340,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitWrappedArgumentExpression(spreadArgumentExpression, null)
|
||||
}
|
||||
|
||||
open fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression) {
|
||||
visitWrappedExpression(wrappedDelegateExpression, null)
|
||||
}
|
||||
|
||||
open fun visitClass(klass: FirClass) {
|
||||
visitStatement(klass, null)
|
||||
}
|
||||
@@ -872,6 +880,14 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitWrappedArgumentExpression(wrappedArgumentExpression)
|
||||
}
|
||||
|
||||
final override fun visitWrappedDelegateExpression(wrappedDelegateExpression: FirWrappedDelegateExpression, data: Nothing?) {
|
||||
visitWrappedDelegateExpression(wrappedDelegateExpression)
|
||||
}
|
||||
|
||||
final override fun visitWrappedExpression(wrappedExpression: FirWrappedExpression, data: Nothing?) {
|
||||
visitWrappedExpression(wrappedExpression)
|
||||
}
|
||||
|
||||
final override fun visitElement(element: FirElement, data: Nothing?) {
|
||||
visitElement(element)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user