From 955b8e14900af3290bf8da7a4c34378aa6daec9d Mon Sep 17 00:00:00 2001 From: "Denis.Zharkov" Date: Mon, 13 Mar 2023 18:07:30 +0100 Subject: [PATCH] K2: Introduce new FIR node kind FirFromMissingDependenciesNamedReference The basic idea is that during deserialization/loading compiled Java classes, there might be some of the dependencies absent that are referenced from enum arguments in annotations. Such situation is not considered as totally ill-formed, thus supporting it, allowing to read the names of mentioned in the annotation argument might be useful for Java enhancement ^KT-56656 In Progress --- ...irFromMissingDependenciesNamedReference.kt | 27 ++++++++++++ ...issingDependenciesNamedReferenceBuilder.kt | 43 +++++++++++++++++++ ...omMissingDependenciesNamedReferenceImpl.kt | 29 +++++++++++++ .../kotlin/fir/visitors/FirDefaultVisitor.kt | 3 ++ .../fir/visitors/FirDefaultVisitorVoid.kt | 3 ++ .../kotlin/fir/visitors/FirTransformer.kt | 9 ++++ .../kotlin/fir/visitors/FirVisitor.kt | 3 ++ .../kotlin/fir/visitors/FirVisitorVoid.kt | 9 ++++ .../fir/tree/generator/FirTreeBuilder.kt | 1 + .../generator/ImplementationConfigurator.kt | 4 +- 10 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 compiler/fir/tree/gen/org/jetbrains/kotlin/fir/references/FirFromMissingDependenciesNamedReference.kt create mode 100644 compiler/fir/tree/gen/org/jetbrains/kotlin/fir/references/builder/FirFromMissingDependenciesNamedReferenceBuilder.kt create mode 100644 compiler/fir/tree/gen/org/jetbrains/kotlin/fir/references/impl/FirFromMissingDependenciesNamedReferenceImpl.kt diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/references/FirFromMissingDependenciesNamedReference.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/references/FirFromMissingDependenciesNamedReference.kt new file mode 100644 index 00000000000..d4f087856df --- /dev/null +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/references/FirFromMissingDependenciesNamedReference.kt @@ -0,0 +1,27 @@ +/* + * Copyright 2010-2023 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.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +abstract class FirFromMissingDependenciesNamedReference : FirNamedReference() { + abstract override val source: KtSourceElement? + abstract override val name: Name + + override fun accept(visitor: FirVisitor, data: D): R = visitor.visitFromMissingDependenciesNamedReference(this, data) + + @Suppress("UNCHECKED_CAST") + override fun transform(transformer: FirTransformer, data: D): E = + transformer.transformFromMissingDependenciesNamedReference(this, data) as E +} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/references/builder/FirFromMissingDependenciesNamedReferenceBuilder.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/references/builder/FirFromMissingDependenciesNamedReferenceBuilder.kt new file mode 100644 index 00000000000..c15258edcd9 --- /dev/null +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/references/builder/FirFromMissingDependenciesNamedReferenceBuilder.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2010-2023 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.references.FirFromMissingDependenciesNamedReference +import org.jetbrains.kotlin.fir.references.impl.FirFromMissingDependenciesNamedReferenceImpl +import org.jetbrains.kotlin.fir.visitors.* +import org.jetbrains.kotlin.name.Name + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +@FirBuilderDsl +class FirFromMissingDependenciesNamedReferenceBuilder { + var source: KtSourceElement? = null + lateinit var name: Name + + fun build(): FirFromMissingDependenciesNamedReference { + return FirFromMissingDependenciesNamedReferenceImpl( + source, + name, + ) + } + +} + +@OptIn(ExperimentalContracts::class) +inline fun buildFromMissingDependenciesNamedReference(init: FirFromMissingDependenciesNamedReferenceBuilder.() -> Unit): FirFromMissingDependenciesNamedReference { + contract { + callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE) + } + return FirFromMissingDependenciesNamedReferenceBuilder().apply(init).build() +} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/references/impl/FirFromMissingDependenciesNamedReferenceImpl.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/references/impl/FirFromMissingDependenciesNamedReferenceImpl.kt new file mode 100644 index 00000000000..c56f19e1496 --- /dev/null +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/references/impl/FirFromMissingDependenciesNamedReferenceImpl.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2010-2023 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.references.FirFromMissingDependenciesNamedReference +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.fir.visitors.* + +/* + * This file was generated automatically + * DO NOT MODIFY IT MANUALLY + */ + +internal class FirFromMissingDependenciesNamedReferenceImpl( + override val source: KtSourceElement?, + override val name: Name, +) : FirFromMissingDependenciesNamedReference() { + override fun acceptChildren(visitor: FirVisitor, data: D) {} + + override fun transformChildren(transformer: FirTransformer, data: D): FirFromMissingDependenciesNamedReferenceImpl { + return this + } +} diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt index 77bbbdfbb07..041793a42bd 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitor.kt @@ -129,6 +129,7 @@ import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirNamedReferenceWithCandidateBase import org.jetbrains.kotlin.fir.references.FirErrorNamedReference +import org.jetbrains.kotlin.fir.references.FirFromMissingDependenciesNamedReference import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference @@ -271,6 +272,8 @@ abstract class FirDefaultVisitor : FirVisitor() { override fun visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase, data: D): R = visitNamedReference(namedReferenceWithCandidateBase, data) + override fun visitFromMissingDependenciesNamedReference(fromMissingDependenciesNamedReference: FirFromMissingDependenciesNamedReference, data: D): R = visitNamedReference(fromMissingDependenciesNamedReference, data) + override fun visitSuperReference(superReference: FirSuperReference, data: D): R = visitReference(superReference, data) override fun visitThisReference(thisReference: FirThisReference, data: D): R = visitReference(thisReference, data) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt index cd8701bf331..d478b60cd5d 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirDefaultVisitorVoid.kt @@ -129,6 +129,7 @@ import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirNamedReferenceWithCandidateBase import org.jetbrains.kotlin.fir.references.FirErrorNamedReference +import org.jetbrains.kotlin.fir.references.FirFromMissingDependenciesNamedReference import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference @@ -271,6 +272,8 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() { override fun visitNamedReferenceWithCandidateBase(namedReferenceWithCandidateBase: FirNamedReferenceWithCandidateBase) = visitNamedReference(namedReferenceWithCandidateBase) + override fun visitFromMissingDependenciesNamedReference(fromMissingDependenciesNamedReference: FirFromMissingDependenciesNamedReference) = visitNamedReference(fromMissingDependenciesNamedReference) + override fun visitSuperReference(superReference: FirSuperReference) = visitReference(superReference) override fun visitThisReference(thisReference: FirThisReference) = visitReference(thisReference) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt index bda864a3460..21fd4aaf37a 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirTransformer.kt @@ -129,6 +129,7 @@ import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirNamedReferenceWithCandidateBase import org.jetbrains.kotlin.fir.references.FirErrorNamedReference +import org.jetbrains.kotlin.fir.references.FirFromMissingDependenciesNamedReference import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference @@ -652,6 +653,10 @@ abstract class FirTransformer : FirVisitor() { return transformElement(errorNamedReference, data) } + open fun transformFromMissingDependenciesNamedReference(fromMissingDependenciesNamedReference: FirFromMissingDependenciesNamedReference, data: D): FirReference { + return transformElement(fromMissingDependenciesNamedReference, data) + } + open fun transformSuperReference(superReference: FirSuperReference, data: D): FirReference { return transformElement(superReference, data) } @@ -1232,6 +1237,10 @@ abstract class FirTransformer : FirVisitor() { return transformErrorNamedReference(errorNamedReference, data) } + final override fun visitFromMissingDependenciesNamedReference(fromMissingDependenciesNamedReference: FirFromMissingDependenciesNamedReference, data: D): FirReference { + return transformFromMissingDependenciesNamedReference(fromMissingDependenciesNamedReference, data) + } + final override fun visitSuperReference(superReference: FirSuperReference, data: D): FirReference { return transformSuperReference(superReference, data) } diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt index bb89ea093f5..9e5e138f5f8 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitor.kt @@ -129,6 +129,7 @@ import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirNamedReferenceWithCandidateBase import org.jetbrains.kotlin.fir.references.FirErrorNamedReference +import org.jetbrains.kotlin.fir.references.FirFromMissingDependenciesNamedReference import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference @@ -405,6 +406,8 @@ abstract class FirVisitor { open fun visitErrorNamedReference(errorNamedReference: FirErrorNamedReference, data: D): R = visitElement(errorNamedReference, data) + open fun visitFromMissingDependenciesNamedReference(fromMissingDependenciesNamedReference: FirFromMissingDependenciesNamedReference, data: D): R = visitElement(fromMissingDependenciesNamedReference, data) + open fun visitSuperReference(superReference: FirSuperReference, data: D): R = visitElement(superReference, data) open fun visitThisReference(thisReference: FirThisReference, data: D): R = visitElement(thisReference, data) diff --git a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt index a4e3f2cccab..b25c96f3fa9 100644 --- a/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt +++ b/compiler/fir/tree/gen/org/jetbrains/kotlin/fir/visitors/FirVisitorVoid.kt @@ -129,6 +129,7 @@ import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirNamedReferenceWithCandidateBase import org.jetbrains.kotlin.fir.references.FirErrorNamedReference +import org.jetbrains.kotlin.fir.references.FirFromMissingDependenciesNamedReference import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference @@ -651,6 +652,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitElement(errorNamedReference) } + open fun visitFromMissingDependenciesNamedReference(fromMissingDependenciesNamedReference: FirFromMissingDependenciesNamedReference) { + visitElement(fromMissingDependenciesNamedReference) + } + open fun visitSuperReference(superReference: FirSuperReference) { visitElement(superReference) } @@ -1231,6 +1236,10 @@ abstract class FirVisitorVoid : FirVisitor() { visitErrorNamedReference(errorNamedReference) } + final override fun visitFromMissingDependenciesNamedReference(fromMissingDependenciesNamedReference: FirFromMissingDependenciesNamedReference, data: Nothing?) { + visitFromMissingDependenciesNamedReference(fromMissingDependenciesNamedReference) + } + final override fun visitSuperReference(superReference: FirSuperReference, data: Nothing?) { visitSuperReference(superReference) } diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt index da4d7f5646f..b2b7b7b7092 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/FirTreeBuilder.kt @@ -156,6 +156,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() { val namedReference by element(Reference, reference) val namedReferenceWithCandidateBase by element(Reference, namedReference) val errorNamedReference by element(Reference, namedReference, diagnosticHolder) + val fromMissingDependenciesNamedReference by element(Reference, namedReference) val superReference by element(Reference, reference) val thisReference by element(Reference, reference) val controlFlowGraphReference by element(Reference, reference) diff --git a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt index 622fb7de9c1..832eda165a4 100644 --- a/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt +++ b/compiler/fir/tree/tree-generator/src/org/jetbrains/kotlin/fir/tree/generator/ImplementationConfigurator.kt @@ -499,6 +499,8 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() default("name", "Name.special(\"<\${diagnostic.reason}>\")") } + impl(fromMissingDependenciesNamedReference) + impl(breakExpression) { defaultTypeRefWithSource("FirImplicitNothingTypeRef") useTypes(implicitNothingTypeRefType) @@ -650,5 +652,3 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator() } } } - -