[FIR] Introduce FirResolvedErrorReference node
This commit is contained in:
committed by
Space Team
parent
db5913bbb6
commit
9e4e5eed68
+33
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2010-2022 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 org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
|
||||
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
|
||||
/*
|
||||
* This file was generated automatically
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
abstract class FirResolvedErrorReference : FirResolvedNamedReference(), FirDiagnosticHolder {
|
||||
abstract override val source: KtSourceElement?
|
||||
abstract override val name: Name
|
||||
abstract override val candidateSymbol: FirBasedSymbol<*>?
|
||||
abstract override val resolvedSymbol: FirBasedSymbol<*>
|
||||
abstract override val diagnostic: ConeDiagnostic
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitResolvedErrorReference(this, data)
|
||||
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
|
||||
transformer.transformResolvedErrorReference(this, data) as E
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright 2010-2022 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.
|
||||
*/
|
||||
|
||||
@file:Suppress("DuplicatedCode")
|
||||
|
||||
package org.jetbrains.kotlin.fir.references.builder
|
||||
|
||||
import kotlin.contracts.*
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
|
||||
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedErrorReference
|
||||
import org.jetbrains.kotlin.fir.references.impl.FirResolvedErrorReferenceImpl
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
/*
|
||||
* This file was generated automatically
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
@FirBuilderDsl
|
||||
class FirResolvedErrorReferenceBuilder {
|
||||
var source: KtSourceElement? = null
|
||||
lateinit var name: Name
|
||||
lateinit var resolvedSymbol: FirBasedSymbol<*>
|
||||
lateinit var diagnostic: ConeDiagnostic
|
||||
|
||||
fun build(): FirResolvedErrorReference {
|
||||
return FirResolvedErrorReferenceImpl(
|
||||
source,
|
||||
name,
|
||||
resolvedSymbol,
|
||||
diagnostic,
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalContracts::class)
|
||||
inline fun buildResolvedErrorReference(init: FirResolvedErrorReferenceBuilder.() -> Unit): FirResolvedErrorReference {
|
||||
contract {
|
||||
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
|
||||
}
|
||||
return FirResolvedErrorReferenceBuilder().apply(init).build()
|
||||
}
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright 2010-2022 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.
|
||||
*/
|
||||
|
||||
@file:Suppress("DuplicatedCode")
|
||||
|
||||
package org.jetbrains.kotlin.fir.references.impl
|
||||
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedErrorReference
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.fir.visitors.*
|
||||
|
||||
/*
|
||||
* This file was generated automatically
|
||||
* DO NOT MODIFY IT MANUALLY
|
||||
*/
|
||||
|
||||
internal class FirResolvedErrorReferenceImpl(
|
||||
override val source: KtSourceElement?,
|
||||
override val name: Name,
|
||||
override val resolvedSymbol: FirBasedSymbol<*>,
|
||||
override val diagnostic: ConeDiagnostic,
|
||||
) : FirResolvedErrorReference() {
|
||||
override val candidateSymbol: FirBasedSymbol<*>? get() = null
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
|
||||
|
||||
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirResolvedErrorReferenceImpl {
|
||||
return this
|
||||
}
|
||||
}
|
||||
@@ -130,6 +130,7 @@ import org.jetbrains.kotlin.fir.references.FirSuperReference
|
||||
import org.jetbrains.kotlin.fir.references.FirThisReference
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedErrorReference
|
||||
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
|
||||
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference
|
||||
@@ -269,6 +270,8 @@ abstract class FirDefaultVisitor<out R, in D> : FirVisitor<R, D>() {
|
||||
|
||||
override fun visitResolvedNamedReference(resolvedNamedReference: FirResolvedNamedReference, data: D): R = visitNamedReference(resolvedNamedReference, data)
|
||||
|
||||
override fun visitResolvedErrorReference(resolvedErrorReference: FirResolvedErrorReference, data: D): R = visitResolvedNamedReference(resolvedErrorReference, data)
|
||||
|
||||
override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: D): R = visitResolvedNamedReference(delegateFieldReference, data)
|
||||
|
||||
override fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference, data: D): R = visitResolvedNamedReference(backingFieldReference, data)
|
||||
|
||||
@@ -130,6 +130,7 @@ import org.jetbrains.kotlin.fir.references.FirSuperReference
|
||||
import org.jetbrains.kotlin.fir.references.FirThisReference
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedErrorReference
|
||||
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
|
||||
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference
|
||||
@@ -269,6 +270,8 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() {
|
||||
|
||||
override fun visitResolvedNamedReference(resolvedNamedReference: FirResolvedNamedReference) = visitNamedReference(resolvedNamedReference)
|
||||
|
||||
override fun visitResolvedErrorReference(resolvedErrorReference: FirResolvedErrorReference) = visitResolvedNamedReference(resolvedErrorReference)
|
||||
|
||||
override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference) = visitResolvedNamedReference(delegateFieldReference)
|
||||
|
||||
override fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference) = visitResolvedNamedReference(backingFieldReference)
|
||||
|
||||
@@ -130,6 +130,7 @@ import org.jetbrains.kotlin.fir.references.FirSuperReference
|
||||
import org.jetbrains.kotlin.fir.references.FirThisReference
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedErrorReference
|
||||
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
|
||||
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference
|
||||
@@ -652,6 +653,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
|
||||
return transformElement(resolvedNamedReference, data)
|
||||
}
|
||||
|
||||
open fun transformResolvedErrorReference(resolvedErrorReference: FirResolvedErrorReference, data: D): FirReference {
|
||||
return transformElement(resolvedErrorReference, data)
|
||||
}
|
||||
|
||||
open fun transformDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: D): FirReference {
|
||||
return transformElement(delegateFieldReference, data)
|
||||
}
|
||||
@@ -1216,6 +1221,10 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
|
||||
return transformResolvedNamedReference(resolvedNamedReference, data)
|
||||
}
|
||||
|
||||
final override fun visitResolvedErrorReference(resolvedErrorReference: FirResolvedErrorReference, data: D): FirReference {
|
||||
return transformResolvedErrorReference(resolvedErrorReference, data)
|
||||
}
|
||||
|
||||
final override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: D): FirReference {
|
||||
return transformDelegateFieldReference(delegateFieldReference, data)
|
||||
}
|
||||
|
||||
@@ -130,6 +130,7 @@ import org.jetbrains.kotlin.fir.references.FirSuperReference
|
||||
import org.jetbrains.kotlin.fir.references.FirThisReference
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedErrorReference
|
||||
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
|
||||
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference
|
||||
@@ -403,6 +404,8 @@ abstract class FirVisitor<out R, in D> {
|
||||
|
||||
open fun visitResolvedNamedReference(resolvedNamedReference: FirResolvedNamedReference, data: D): R = visitElement(resolvedNamedReference, data)
|
||||
|
||||
open fun visitResolvedErrorReference(resolvedErrorReference: FirResolvedErrorReference, data: D): R = visitElement(resolvedErrorReference, data)
|
||||
|
||||
open fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: D): R = visitElement(delegateFieldReference, data)
|
||||
|
||||
open fun visitBackingFieldReference(backingFieldReference: FirBackingFieldReference, data: D): R = visitElement(backingFieldReference, data)
|
||||
|
||||
@@ -130,6 +130,7 @@ import org.jetbrains.kotlin.fir.references.FirSuperReference
|
||||
import org.jetbrains.kotlin.fir.references.FirThisReference
|
||||
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedErrorReference
|
||||
import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference
|
||||
import org.jetbrains.kotlin.fir.references.FirBackingFieldReference
|
||||
import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference
|
||||
@@ -651,6 +652,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitElement(resolvedNamedReference)
|
||||
}
|
||||
|
||||
open fun visitResolvedErrorReference(resolvedErrorReference: FirResolvedErrorReference) {
|
||||
visitElement(resolvedErrorReference)
|
||||
}
|
||||
|
||||
open fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference) {
|
||||
visitElement(delegateFieldReference)
|
||||
}
|
||||
@@ -1215,6 +1220,10 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
|
||||
visitResolvedNamedReference(resolvedNamedReference)
|
||||
}
|
||||
|
||||
final override fun visitResolvedErrorReference(resolvedErrorReference: FirResolvedErrorReference, data: Nothing?) {
|
||||
visitResolvedErrorReference(resolvedErrorReference)
|
||||
}
|
||||
|
||||
final override fun visitDelegateFieldReference(delegateFieldReference: FirDelegateFieldReference, data: Nothing?) {
|
||||
visitDelegateFieldReference(delegateFieldReference)
|
||||
}
|
||||
|
||||
+1
@@ -158,6 +158,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
|
||||
val controlFlowGraphReference by element(Reference, reference)
|
||||
|
||||
val resolvedNamedReference by element(Reference, namedReference)
|
||||
val resolvedErrorReference by element(Reference, resolvedNamedReference, diagnosticHolder)
|
||||
val delegateFieldReference by element(Reference, resolvedNamedReference)
|
||||
val backingFieldReference by element(Reference, resolvedNamedReference)
|
||||
|
||||
|
||||
+4
@@ -413,6 +413,10 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
publicImplementation()
|
||||
}
|
||||
|
||||
impl(resolvedErrorReference) {
|
||||
defaultNull("candidateSymbol", withGetter = true)
|
||||
}
|
||||
|
||||
impl(resolvedCallableReference) {
|
||||
defaultNull("candidateSymbol", withGetter = true)
|
||||
}
|
||||
|
||||
+21
-6
@@ -5,12 +5,28 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.tree.generator.printer
|
||||
|
||||
import org.jetbrains.kotlin.fir.tree.generator.FirTreeBuilder
|
||||
import org.jetbrains.kotlin.fir.tree.generator.context.AbstractFirTreeBuilder
|
||||
import org.jetbrains.kotlin.fir.tree.generator.model.Element
|
||||
import org.jetbrains.kotlin.util.SmartPrinter
|
||||
import org.jetbrains.kotlin.util.withIndent
|
||||
import java.io.File
|
||||
|
||||
private val elementsWithMultipleSupertypesForDefaultVisitor = mapOf(
|
||||
FirTreeBuilder.resolvedErrorReference to FirTreeBuilder.resolvedNamedReference
|
||||
)
|
||||
|
||||
private fun Element.isAcceptableForDefaultVisiting(): Boolean {
|
||||
if (this == AbstractFirTreeBuilder.baseFirElement) return false
|
||||
val hasSingleSupertype = parents.size == 1 && parents.single().name != "Element"
|
||||
return hasSingleSupertype || this in elementsWithMultipleSupertypesForDefaultVisitor
|
||||
}
|
||||
|
||||
private fun Element.getNameOfSupertypeForDefaultVisiting(): String {
|
||||
val parentForDefaultVisiting = parents.singleOrNull() ?: elementsWithMultipleSupertypesForDefaultVisitor.getValue(this)
|
||||
return parentForDefaultVisiting.name
|
||||
}
|
||||
|
||||
fun printVisitor(elements: List<Element>, generationPath: File, visitSuperTypeByDefault: Boolean): GeneratedFile {
|
||||
val className = if (visitSuperTypeByDefault) "FirDefaultVisitor" else "FirVisitor"
|
||||
val dir = File(generationPath, VISITOR_PACKAGE.replace(".", "/"))
|
||||
@@ -35,9 +51,8 @@ fun printVisitor(elements: List<Element>, generationPath: File, visitSuperTypeBy
|
||||
println("abstract fun visitElement(element: FirElement, data: D): R\n")
|
||||
}
|
||||
for (element in elements) {
|
||||
if (element == AbstractFirTreeBuilder.baseFirElement ||
|
||||
visitSuperTypeByDefault && (element.parents.size != 1 || element.parents.single().name == "Element")
|
||||
) continue
|
||||
if (element == AbstractFirTreeBuilder.baseFirElement) continue
|
||||
if (visitSuperTypeByDefault && !element.isAcceptableForDefaultVisiting()) continue
|
||||
with(element) {
|
||||
val varName = safeDecapitalizedName
|
||||
if (visitSuperTypeByDefault) {
|
||||
@@ -47,7 +62,7 @@ fun printVisitor(elements: List<Element>, generationPath: File, visitSuperTypeBy
|
||||
}
|
||||
print(" fun ${typeParameters}visit$name($varName: $typeWithArguments, data: D): R${multipleUpperBoundsList()} = visit")
|
||||
if (visitSuperTypeByDefault) {
|
||||
print(parents.single().name)
|
||||
print(element.getNameOfSupertypeForDefaultVisiting())
|
||||
} else {
|
||||
print("Element")
|
||||
}
|
||||
@@ -126,10 +141,10 @@ fun printDefaultVisitorVoid(elements: List<Element>, generationPath: File): Gene
|
||||
|
||||
pushIndent()
|
||||
for (element in elements) {
|
||||
if (element == AbstractFirTreeBuilder.baseFirElement || element.parents.size != 1 || element.parents.single().name == "Element") continue
|
||||
if (!element.isAcceptableForDefaultVisiting()) continue
|
||||
with(element) {
|
||||
val varName = safeDecapitalizedName
|
||||
println("override fun ${typeParameters}visit$name($varName: $typeWithArguments)${multipleUpperBoundsList()} = visit${parents.first().name}($varName)")
|
||||
println("override fun ${typeParameters}visit$name($varName: $typeWithArguments)${multipleUpperBoundsList()} = visit${element.getNameOfSupertypeForDefaultVisiting()}($varName)")
|
||||
println()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user