[FIR] Make FirPlaceholderProjection having source element
This commit is contained in:
@@ -36,7 +36,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirTypePlaceholderProjection
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
@@ -873,7 +872,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
|
||||
generate(typeProjection.typeRef)
|
||||
}
|
||||
is FirStarProjection -> +"*"
|
||||
is FirTypePlaceholderProjection -> +"_"
|
||||
is FirPlaceholderProjection -> +"_"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-1
@@ -2064,7 +2064,9 @@ class DeclarationsConverter(
|
||||
//annotations from modifiers must be ignored
|
||||
return when {
|
||||
isStarProjection -> buildStarProjection { source = typeProjection.toFirSourceElement() }
|
||||
allowedUnderscoredTypeArgument && (firType as? FirUserTypeRef)?.isUnderscored == true -> FirTypePlaceholderProjection
|
||||
allowedUnderscoredTypeArgument && (firType as? FirUserTypeRef)?.isUnderscored == true -> buildPlaceholderProjection {
|
||||
source = typeProjection.toFirSourceElement()
|
||||
}
|
||||
else -> buildTypeProjectionWithVariance {
|
||||
source = typeProjection.toFirSourceElement()
|
||||
typeRef = firType
|
||||
|
||||
@@ -33,7 +33,6 @@ import org.jetbrains.kotlin.fir.types.builder.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirQualifierPartImpl
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirTypeArgumentListImpl
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirTypePlaceholderProjection
|
||||
import org.jetbrains.kotlin.lexer.KtTokens.*
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
@@ -1785,7 +1784,9 @@ open class RawFirBuilder(
|
||||
}
|
||||
val typeReference = typeProjection.typeReference
|
||||
if (typeReference?.isPlaceholder == true) {
|
||||
return FirTypePlaceholderProjection
|
||||
return buildPlaceholderProjection {
|
||||
source = projectionSource
|
||||
}
|
||||
}
|
||||
val firType = typeReference.toFirOrErrorType()
|
||||
return buildTypeProjectionWithVariance {
|
||||
|
||||
+1
-2
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.scopes.impl.toConeType
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
||||
import org.jetbrains.kotlin.fir.symbols.ensureResolved
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirTypePlaceholderProjection
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemOperation
|
||||
import org.jetbrains.kotlin.resolve.calls.inference.model.SimpleConstraintSystemConstraintPosition
|
||||
@@ -80,7 +79,7 @@ internal object CreateFreshTypeVariableSubstitutorStage : ResolutionStage() {
|
||||
?: context.session.builtinTypes.nullableAnyType.type,
|
||||
SimpleConstraintSystemConstraintPosition
|
||||
)
|
||||
else -> assert(typeArgument == FirTypePlaceholderProjection) {
|
||||
else -> assert(typeArgument is FirPlaceholderProjection) {
|
||||
"Unexpected typeArgument: ${typeArgument.renderWithType()}"
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -7,18 +7,18 @@ package org.jetbrains.kotlin.fir.resolve.calls
|
||||
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirTypePlaceholderProjection
|
||||
import org.jetbrains.kotlin.fir.types.builder.buildPlaceholderProjection
|
||||
|
||||
sealed class TypeArgumentMapping {
|
||||
abstract operator fun get(typeParameterIndex: Int): FirTypeProjection
|
||||
|
||||
object NoExplicitArguments : TypeArgumentMapping() {
|
||||
override fun get(typeParameterIndex: Int): FirTypeProjection = FirTypePlaceholderProjection
|
||||
override fun get(typeParameterIndex: Int): FirTypeProjection = buildPlaceholderProjection()
|
||||
}
|
||||
|
||||
class Mapped(private val ordered: List<FirTypeProjection>) : TypeArgumentMapping() {
|
||||
override fun get(typeParameterIndex: Int): FirTypeProjection {
|
||||
return ordered.getOrElse(typeParameterIndex) { FirTypePlaceholderProjection }
|
||||
return ordered.getOrElse(typeParameterIndex) { buildPlaceholderProjection() }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
+38
@@ -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()
|
||||
}
|
||||
+5
-6
@@ -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)
|
||||
}
|
||||
|
||||
+1
@@ -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`?
|
||||
|
||||
-5
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user