[FIR] Make FirPlaceholderProjection having source element

This commit is contained in:
Victor Petukhov
2021-10-26 13:39:41 +03:00
parent 5047751b85
commit 697ef03d57
15 changed files with 107 additions and 21 deletions
@@ -0,0 +1,25 @@
/*
* Copyright 2010-2021 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.types
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.visitors.*
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirPlaceholderProjection : FirTypeProjection() {
abstract override val source: KtSourceElement?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitPlaceholderProjection(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
transformer.transformPlaceholderProjection(this, data) as E
}
@@ -0,0 +1,38 @@
/*
* Copyright 2010-2021 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.types.builder
import kotlin.contracts.*
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.types.FirPlaceholderProjection
import org.jetbrains.kotlin.fir.types.impl.FirPlaceholderProjectionImpl
import org.jetbrains.kotlin.fir.visitors.*
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
@FirBuilderDsl
class FirPlaceholderProjectionBuilder {
var source: KtSourceElement? = null
fun build(): FirPlaceholderProjection {
return FirPlaceholderProjectionImpl(
source,
)
}
}
@OptIn(ExperimentalContracts::class)
inline fun buildPlaceholderProjection(init: FirPlaceholderProjectionBuilder.() -> Unit = {}): FirPlaceholderProjection {
contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
}
return FirPlaceholderProjectionBuilder().apply(init).build()
}
@@ -6,8 +6,7 @@
package org.jetbrains.kotlin.fir.types.impl
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirPlaceholderProjection
import org.jetbrains.kotlin.fir.visitors.*
/*
@@ -15,12 +14,12 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
object FirTypePlaceholderProjection : FirTypeProjection() {
override val source: KtSourceElement? get() = null
internal class FirPlaceholderProjectionImpl(
override val source: KtSourceElement?,
) : FirPlaceholderProjection() {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirTypePlaceholderProjection {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirPlaceholderProjectionImpl {
return this
}
}
@@ -66,6 +66,7 @@ import org.jetbrains.kotlin.fir.expressions.FirTryExpression
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirStarProjection
import org.jetbrains.kotlin.fir.types.FirPlaceholderProjection
import org.jetbrains.kotlin.fir.types.FirTypeProjectionWithVariance
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
import org.jetbrains.kotlin.fir.expressions.FirCall
@@ -191,6 +192,8 @@ abstract class FirDefaultVisitor<out R, in D> : FirVisitor<R, D>() {
override fun visitStarProjection(starProjection: FirStarProjection, data: D): R = visitTypeProjection(starProjection, data)
override fun visitPlaceholderProjection(placeholderProjection: FirPlaceholderProjection, data: D): R = visitTypeProjection(placeholderProjection, data)
override fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance, data: D): R = visitTypeProjection(typeProjectionWithVariance, data)
override fun visitCall(call: FirCall, data: D): R = visitStatement(call, data)
@@ -66,6 +66,7 @@ import org.jetbrains.kotlin.fir.expressions.FirTryExpression
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirStarProjection
import org.jetbrains.kotlin.fir.types.FirPlaceholderProjection
import org.jetbrains.kotlin.fir.types.FirTypeProjectionWithVariance
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
import org.jetbrains.kotlin.fir.expressions.FirCall
@@ -191,6 +192,8 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() {
override fun visitStarProjection(starProjection: FirStarProjection) = visitTypeProjection(starProjection)
override fun visitPlaceholderProjection(placeholderProjection: FirPlaceholderProjection) = visitTypeProjection(placeholderProjection)
override fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance) = visitTypeProjection(typeProjectionWithVariance)
override fun visitCall(call: FirCall) = visitStatement(call)
@@ -66,6 +66,7 @@ import org.jetbrains.kotlin.fir.expressions.FirTryExpression
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirStarProjection
import org.jetbrains.kotlin.fir.types.FirPlaceholderProjection
import org.jetbrains.kotlin.fir.types.FirTypeProjectionWithVariance
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
import org.jetbrains.kotlin.fir.expressions.FirCall
@@ -386,6 +387,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformElement(starProjection, data)
}
open fun transformPlaceholderProjection(placeholderProjection: FirPlaceholderProjection, data: D): FirTypeProjection {
return transformElement(placeholderProjection, data)
}
open fun transformTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance, data: D): FirTypeProjection {
return transformElement(typeProjectionWithVariance, data)
}
@@ -910,6 +915,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformStarProjection(starProjection, data)
}
final override fun visitPlaceholderProjection(placeholderProjection: FirPlaceholderProjection, data: D): FirTypeProjection {
return transformPlaceholderProjection(placeholderProjection, data)
}
final override fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance, data: D): FirTypeProjection {
return transformTypeProjectionWithVariance(typeProjectionWithVariance, data)
}
@@ -66,6 +66,7 @@ import org.jetbrains.kotlin.fir.expressions.FirTryExpression
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirStarProjection
import org.jetbrains.kotlin.fir.types.FirPlaceholderProjection
import org.jetbrains.kotlin.fir.types.FirTypeProjectionWithVariance
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
import org.jetbrains.kotlin.fir.expressions.FirCall
@@ -265,6 +266,8 @@ abstract class FirVisitor<out R, in D> {
open fun visitStarProjection(starProjection: FirStarProjection, data: D): R = visitElement(starProjection, data)
open fun visitPlaceholderProjection(placeholderProjection: FirPlaceholderProjection, data: D): R = visitElement(placeholderProjection, data)
open fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance, data: D): R = visitElement(typeProjectionWithVariance, data)
open fun visitArgumentList(argumentList: FirArgumentList, data: D): R = visitElement(argumentList, data)
@@ -66,6 +66,7 @@ import org.jetbrains.kotlin.fir.expressions.FirTryExpression
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirStarProjection
import org.jetbrains.kotlin.fir.types.FirPlaceholderProjection
import org.jetbrains.kotlin.fir.types.FirTypeProjectionWithVariance
import org.jetbrains.kotlin.fir.expressions.FirArgumentList
import org.jetbrains.kotlin.fir.expressions.FirCall
@@ -385,6 +386,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(starProjection)
}
open fun visitPlaceholderProjection(placeholderProjection: FirPlaceholderProjection) {
visitElement(placeholderProjection)
}
open fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance) {
visitElement(typeProjectionWithVariance)
}
@@ -909,6 +914,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitStarProjection(starProjection)
}
final override fun visitPlaceholderProjection(placeholderProjection: FirPlaceholderProjection, data: Nothing?) {
visitPlaceholderProjection(placeholderProjection)
}
final override fun visitTypeProjectionWithVariance(typeProjectionWithVariance: FirTypeProjectionWithVariance, data: Nothing?) {
visitTypeProjectionWithVariance(typeProjectionWithVariance)
}
@@ -85,6 +85,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val constExpression by element(Expression, expression)
val typeProjection by element(TypeRef)
val starProjection by element(TypeRef, typeProjection)
val placeholderProjection by element(TypeRef, typeProjection)
val typeProjectionWithVariance by element(TypeRef, typeProjection)
val argumentList by element(Expression)
val call by sealedElement(Expression, statement) // TODO: may smth like `CallWithArguments` or `ElementWithArguments`?
@@ -453,11 +453,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
default("name", "Name.special(\"<\${diagnostic.reason}>\")")
}
impl(typeProjection, "FirTypePlaceholderProjection") {
kind = Object
noSource()
}
impl(breakExpression) {
defaultTypeRefWithSource("FirImplicitNothingTypeRef")
useTypes(implicitNothingTypeRefType)