FIR: annotate 'replaceSource' with '@FirImplementationDetail'

This commit is contained in:
Mikhail Glukhikh
2021-03-12 17:16:05 +03:00
parent c641fa739b
commit 7f7a964b2e
27 changed files with 52 additions and 2 deletions
@@ -498,6 +498,8 @@ class ExpressionsConverter(
}
it.replaceExplicitReceiver(firReceiver)
@OptIn(FirImplementationDetail::class)
it.replaceSource(dotQualifiedExpression.toFirSourceElement())
}
return firSelector
@@ -1993,6 +1993,8 @@ class RawFirBuilder(
}
firSelector.replaceExplicitReceiver(receiver)
@OptIn(FirImplementationDetail::class)
firSelector.replaceSource(expression.toFirSourceElement())
}
return firSelector
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
/*
* This file was generated automatically
@@ -42,6 +43,7 @@ abstract class FirCallableReferenceAccess : FirQualifiedAccessExpression() {
abstract fun replaceHasQuestionMarkAtLHS(newHasQuestionMarkAtLHS: Boolean)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirCallableReferenceAccess
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
/*
* This file was generated automatically
@@ -41,6 +42,7 @@ abstract class FirComponentCall : FirFunctionCall() {
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
/*
* This file was generated automatically
@@ -40,6 +41,7 @@ abstract class FirExpressionWithSmartcast : FirQualifiedAccessExpression() {
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirExpressionWithSmartcast
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
/*
* This file was generated automatically
@@ -42,6 +43,7 @@ abstract class FirFunctionCall : FirQualifiedAccessExpression(), FirCall {
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirFunctionCall
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
/*
* This file was generated automatically
@@ -42,6 +43,7 @@ abstract class FirImplicitInvokeCall : FirFunctionCall() {
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirImplicitInvokeCall
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
/*
* This file was generated automatically
@@ -32,6 +33,7 @@ interface FirQualifiedAccess : FirResolvable, FirStatement {
fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
@FirImplementationDetail
fun replaceSource(newSource: FirSourceElement?)
override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirQualifiedAccess
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
/*
* This file was generated automatically
@@ -36,6 +37,7 @@ abstract class FirQualifiedAccessExpression : FirExpression(), FirQualifiedAcces
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirQualifiedAccessExpression
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.references.FirThisReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
/*
* This file was generated automatically
@@ -39,6 +40,7 @@ abstract class FirThisReceiverExpression : FirQualifiedAccessExpression() {
abstract override fun replaceCalleeReference(newCalleeReference: FirReference)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirThisReceiverExpression
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
/*
* This file was generated automatically
@@ -35,6 +36,7 @@ abstract class FirVariableAssignment : FirPureAbstractElement(), FirQualifiedAcc
abstract override fun replaceExplicitReceiver(newExplicitReceiver: FirExpression?)
@FirImplementationDetail
abstract override fun replaceSource(newSource: FirSourceElement?)
abstract override fun <D> transformCalleeReference(transformer: FirTransformer<D>, data: D): FirVariableAssignment
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.expressions.builder
import kotlin.contracts.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.expressions.builder
import kotlin.contracts.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.expressions.builder
import kotlin.contracts.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.expressions.builder
import kotlin.contracts.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.expressions.builder
import kotlin.contracts.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
/*
* This file was generated automatically
@@ -116,6 +117,7 @@ internal class FirCallableReferenceAccessImpl(
hasQuestionMarkAtLHS = newHasQuestionMarkAtLHS
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
@@ -122,6 +122,7 @@ internal class FirComponentCallImpl(
replaceCalleeReference(newCalleeReference)
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
@@ -120,6 +120,7 @@ open class FirFunctionCallImpl @FirImplementationDetail constructor(
replaceCalleeReference(newCalleeReference)
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
/*
* This file was generated automatically
@@ -121,6 +122,7 @@ internal class FirImplicitInvokeCallImpl(
replaceCalleeReference(newCalleeReference)
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
/*
* This file was generated automatically
@@ -105,6 +106,7 @@ internal class FirQualifiedAccessExpressionImpl(
explicitReceiver = newExplicitReceiver
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.references.FirThisReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
/*
* This file was generated automatically
@@ -113,6 +114,7 @@ internal class FirThisReceiverExpressionImpl(
replaceCalleeReference(newCalleeReference)
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.types.FirTypeProjection
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.fir.FirImplementationDetail
/*
* This file was generated automatically
@@ -111,6 +112,7 @@ internal class FirVariableAssignmentImpl(
explicitReceiver = newExplicitReceiver
}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
source = newSource
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir.expressions.impl
import org.jetbrains.kotlin.fir.FirImplementationDetail
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirExpression
@@ -84,6 +85,7 @@ internal class FirExpressionWithSmartcastImpl(
override fun replaceTypeRef(newTypeRef: FirTypeRef) {}
@FirImplementationDetail
override fun replaceSource(newSource: FirSourceElement?) {
}
}
@@ -89,6 +89,9 @@ fun SmartPrinter.printElement(element: Element) {
fun Field.replaceDeclaration(override: Boolean, overridenType: Importable? = null, forceNullable: Boolean = false) {
println()
if (name == "source") {
println("@FirImplementationDetail")
}
abstract()
if (override) print("override ")
println(replaceFunctionDeclaration(overridenType, forceNullable))
@@ -313,6 +313,9 @@ fun SmartPrinter.printImplementation(implementation: Implementation) {
body: () -> Unit,
) {
println()
if (field.name == "source") {
println("@FirImplementationDetail")
}
abstract()
print("override ${field.replaceFunctionDeclaration(overridenType, forceNullable)}")
if (isInterface || isAbstract) {
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.tree.generator.context.AbstractFirTreeBuilder
import org.jetbrains.kotlin.fir.tree.generator.firImplementationDetailType
import org.jetbrains.kotlin.fir.tree.generator.model.*
import org.jetbrains.kotlin.fir.tree.generator.pureAbstractElementType
import org.jetbrains.kotlin.utils.addToStdlib.runIf
import java.io.File
class GeneratedFile(val file: File, val newText: String)
@@ -71,7 +70,11 @@ private fun Element.collectImportsInternal(base: List<String>, kind: ImportKind)
allFields.flatMap { it.overridenTypes.mapNotNull { it.fullQualifiedName } } +
allFields.flatMap { it.arguments.mapNotNull { it.fullQualifiedName } } +
typeArguments.flatMap { it.upperBounds.mapNotNull { it.fullQualifiedName } }
return fqns.filterRedundantImports(packageName, kind)
val result = fqns.filterRedundantImports(packageName, kind)
if (allFields.any { it.name == "source" && it.withReplace }) {
return (result + "org.jetbrains.kotlin.fir.FirImplementationDetail").distinct()
}
return result
}
private fun List<String>.filterRedundantImports(