[FIR] Implement CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON diagnostic

This commit is contained in:
Andrey Zinovyev
2021-06-01 16:33:07 +03:00
committed by Space
parent fdd9287836
commit bf153ab0f0
39 changed files with 347 additions and 139 deletions
@@ -0,0 +1,35 @@
/*
* 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.declarations
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.*
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirErrorImport : FirPureAbstractElement(), FirImport, FirDiagnosticHolder {
abstract override val source: FirSourceElement?
abstract override val importedFqName: FqName?
abstract override val isAllUnder: Boolean
abstract override val aliasName: Name?
abstract override val diagnostic: ConeDiagnostic
abstract val delegate: FirImport
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorImport(this, data)
@Suppress("UNCHECKED_CAST")
override fun <E: FirElement, D> transform(transformer: FirTransformer<D>, data: D): E =
transformer.transformErrorImport(this, data) as E
}
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -17,11 +16,11 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirImport : FirPureAbstractElement(), FirElement {
abstract override val source: FirSourceElement?
abstract val importedFqName: FqName?
abstract val isAllUnder: Boolean
abstract val aliasName: Name?
interface FirImport : FirElement {
override val source: FirSourceElement?
val importedFqName: FqName?
val isAllUnder: Boolean
val aliasName: Name?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitImport(this, data)
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
@@ -17,7 +18,7 @@ import org.jetbrains.kotlin.fir.visitors.*
* DO NOT MODIFY IT MANUALLY
*/
abstract class FirResolvedImport : FirImport() {
abstract class FirResolvedImport : FirPureAbstractElement(), FirImport {
abstract override val source: FirSourceElement?
abstract override val importedFqName: FqName?
abstract override val isAllUnder: Boolean
@@ -0,0 +1,43 @@
/*
* 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.declarations.builder
import kotlin.contracts.*
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.declarations.FirErrorImport
import org.jetbrains.kotlin.fir.declarations.FirImport
import org.jetbrains.kotlin.fir.declarations.impl.FirErrorImportImpl
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.visitors.*
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
@FirBuilderDsl
class FirErrorImportBuilder {
lateinit var diagnostic: ConeDiagnostic
lateinit var delegate: FirImport
fun build(): FirErrorImport {
return FirErrorImportImpl(
diagnostic,
delegate,
)
}
}
@OptIn(ExperimentalContracts::class)
inline fun buildErrorImport(init: FirErrorImportBuilder.() -> Unit): FirErrorImport {
contract {
callsInPlace(init, kotlin.contracts.InvocationKind.EXACTLY_ONCE)
}
return FirErrorImportBuilder().apply(init).build()
}
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.declarations.builder
import kotlin.contracts.*
import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.declarations.FirImport
@@ -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.declarations.impl
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirErrorImport
import org.jetbrains.kotlin.fir.declarations.FirImport
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.fir.visitors.*
/*
* This file was generated automatically
* DO NOT MODIFY IT MANUALLY
*/
internal class FirErrorImportImpl(
override val diagnostic: ConeDiagnostic,
override var delegate: FirImport,
) : FirErrorImport() {
override val source: FirSourceElement? get() = delegate.source
override val importedFqName: FqName? get() = delegate.importedFqName
override val isAllUnder: Boolean get() = delegate.isAllUnder
override val aliasName: Name? get() = delegate.aliasName
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
delegate.accept(visitor, data)
}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirErrorImportImpl {
delegate = delegate.transform(transformer, data)
return this
}
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.fir.declarations.impl
import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirImport
import org.jetbrains.kotlin.name.FqName
@@ -21,7 +22,7 @@ internal class FirImportImpl(
override val importedFqName: FqName?,
override val isAllUnder: Boolean,
override val aliasName: Name?,
) : FirImport() {
) : FirPureAbstractElement(), FirImport {
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {}
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirImportImpl {
@@ -10,8 +10,6 @@ import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.FirLabel
import org.jetbrains.kotlin.fir.declarations.FirImport
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.expressions.FirResolvable
import org.jetbrains.kotlin.fir.FirTargetElement
@@ -49,6 +47,9 @@ import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
import org.jetbrains.kotlin.fir.declarations.FirImport
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
import org.jetbrains.kotlin.fir.declarations.FirErrorImport
import org.jetbrains.kotlin.fir.expressions.FirLoop
import org.jetbrains.kotlin.fir.expressions.FirErrorLoop
import org.jetbrains.kotlin.fir.expressions.FirDoWhileLoop
@@ -157,14 +158,6 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformElement(label, data)
}
open fun transformImport(import: FirImport, data: D): FirImport {
return transformElement(import, data)
}
open fun transformResolvedImport(resolvedImport: FirResolvedImport, data: D): FirImport {
return transformElement(resolvedImport, data)
}
open fun <E> transformSymbolOwner(symbolOwner: FirSymbolOwner<E>, data: D): FirSymbolOwner<E> where E : FirSymbolOwner<E>, E : FirDeclaration {
return transformElement(symbolOwner, data)
}
@@ -313,6 +306,18 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformElement(diagnosticHolder, data)
}
open fun transformImport(import: FirImport, data: D): FirImport {
return transformElement(import, data)
}
open fun transformResolvedImport(resolvedImport: FirResolvedImport, data: D): FirImport {
return transformElement(resolvedImport, data)
}
open fun transformErrorImport(errorImport: FirErrorImport, data: D): FirImport {
return transformElement(errorImport, data)
}
open fun transformLoop(loop: FirLoop, data: D): FirStatement {
return transformElement(loop, data)
}
@@ -661,14 +666,6 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformLabel(label, data)
}
final override fun visitImport(import: FirImport, data: D): FirImport {
return transformImport(import, data)
}
final override fun visitResolvedImport(resolvedImport: FirResolvedImport, data: D): FirImport {
return transformResolvedImport(resolvedImport, data)
}
final override fun <E> visitSymbolOwner(symbolOwner: FirSymbolOwner<E>, data: D): FirSymbolOwner<E> where E : FirSymbolOwner<E>, E : FirDeclaration {
return transformSymbolOwner(symbolOwner, data)
}
@@ -817,6 +814,18 @@ abstract class FirTransformer<in D> : FirVisitor<FirElement, D>() {
return transformDiagnosticHolder(diagnosticHolder, data)
}
final override fun visitImport(import: FirImport, data: D): FirImport {
return transformImport(import, data)
}
final override fun visitResolvedImport(resolvedImport: FirResolvedImport, data: D): FirImport {
return transformResolvedImport(resolvedImport, data)
}
final override fun visitErrorImport(errorImport: FirErrorImport, data: D): FirImport {
return transformErrorImport(errorImport, data)
}
final override fun visitLoop(loop: FirLoop, data: D): FirStatement {
return transformLoop(loop, data)
}
@@ -10,8 +10,6 @@ import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.FirLabel
import org.jetbrains.kotlin.fir.declarations.FirImport
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.expressions.FirResolvable
import org.jetbrains.kotlin.fir.FirTargetElement
@@ -49,6 +47,9 @@ import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
import org.jetbrains.kotlin.fir.declarations.FirImport
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
import org.jetbrains.kotlin.fir.declarations.FirErrorImport
import org.jetbrains.kotlin.fir.expressions.FirLoop
import org.jetbrains.kotlin.fir.expressions.FirErrorLoop
import org.jetbrains.kotlin.fir.expressions.FirDoWhileLoop
@@ -148,10 +149,6 @@ abstract class FirVisitor<out R, in D> {
open fun visitLabel(label: FirLabel, data: D): R = visitElement(label, data)
open fun visitImport(import: FirImport, data: D): R = visitElement(import, data)
open fun visitResolvedImport(resolvedImport: FirResolvedImport, data: D): R = visitElement(resolvedImport, data)
open fun <E> visitSymbolOwner(symbolOwner: FirSymbolOwner<E>, data: D): R where E : FirSymbolOwner<E>, E : FirDeclaration = visitElement(symbolOwner, data)
open fun visitResolvable(resolvable: FirResolvable, data: D): R = visitElement(resolvable, data)
@@ -226,6 +223,12 @@ abstract class FirVisitor<out R, in D> {
open fun visitDiagnosticHolder(diagnosticHolder: FirDiagnosticHolder, data: D): R = visitElement(diagnosticHolder, data)
open fun visitImport(import: FirImport, data: D): R = visitElement(import, data)
open fun visitResolvedImport(resolvedImport: FirResolvedImport, data: D): R = visitElement(resolvedImport, data)
open fun visitErrorImport(errorImport: FirErrorImport, data: D): R = visitElement(errorImport, data)
open fun visitLoop(loop: FirLoop, data: D): R = visitElement(loop, data)
open fun visitErrorLoop(errorLoop: FirErrorLoop, data: D): R = visitElement(errorLoop, data)
@@ -10,8 +10,6 @@ import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.fir.FirLabel
import org.jetbrains.kotlin.fir.declarations.FirImport
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
import org.jetbrains.kotlin.fir.FirSymbolOwner
import org.jetbrains.kotlin.fir.expressions.FirResolvable
import org.jetbrains.kotlin.fir.FirTargetElement
@@ -49,6 +47,9 @@ import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.declarations.FirAnonymousFunction
import org.jetbrains.kotlin.fir.declarations.FirAnonymousObject
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
import org.jetbrains.kotlin.fir.declarations.FirImport
import org.jetbrains.kotlin.fir.declarations.FirResolvedImport
import org.jetbrains.kotlin.fir.declarations.FirErrorImport
import org.jetbrains.kotlin.fir.expressions.FirLoop
import org.jetbrains.kotlin.fir.expressions.FirErrorLoop
import org.jetbrains.kotlin.fir.expressions.FirDoWhileLoop
@@ -156,14 +157,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(label)
}
open fun visitImport(import: FirImport) {
visitElement(import)
}
open fun visitResolvedImport(resolvedImport: FirResolvedImport) {
visitElement(resolvedImport)
}
open fun <E> visitSymbolOwner(symbolOwner: FirSymbolOwner<E>) where E : FirSymbolOwner<E>, E : FirDeclaration {
visitElement(symbolOwner)
}
@@ -312,6 +305,18 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitElement(diagnosticHolder)
}
open fun visitImport(import: FirImport) {
visitElement(import)
}
open fun visitResolvedImport(resolvedImport: FirResolvedImport) {
visitElement(resolvedImport)
}
open fun visitErrorImport(errorImport: FirErrorImport) {
visitElement(errorImport)
}
open fun visitLoop(loop: FirLoop) {
visitElement(loop)
}
@@ -660,14 +665,6 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitLabel(label)
}
final override fun visitImport(import: FirImport, data: Nothing?) {
visitImport(import)
}
final override fun visitResolvedImport(resolvedImport: FirResolvedImport, data: Nothing?) {
visitResolvedImport(resolvedImport)
}
final override fun <E> visitSymbolOwner(symbolOwner: FirSymbolOwner<E>, data: Nothing?) where E : FirSymbolOwner<E>, E : FirDeclaration {
visitSymbolOwner(symbolOwner)
}
@@ -816,6 +813,18 @@ abstract class FirVisitorVoid : FirVisitor<Unit, Nothing?>() {
visitDiagnosticHolder(diagnosticHolder)
}
final override fun visitImport(import: FirImport, data: Nothing?) {
visitImport(import)
}
final override fun visitResolvedImport(resolvedImport: FirResolvedImport, data: Nothing?) {
visitResolvedImport(resolvedImport)
}
final override fun visitErrorImport(errorImport: FirErrorImport, data: Nothing?) {
visitErrorImport(errorImport)
}
final override fun visitLoop(loop: FirLoop, data: Nothing?) {
visitLoop(loop)
}
@@ -14,8 +14,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val typeRef = sealedElement("TypeRef", TypeRef, annotationContainer)
val reference = element("Reference", Reference)
val label = element("Label", Other)
val import = element("Import", Declaration)
val resolvedImport = element("ResolvedImport", Declaration, import)
val symbolOwner = element("SymbolOwner", Other)
val resolvable = sealedElement("Resolvable", Expression)
@@ -64,6 +63,10 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val diagnosticHolder = element("DiagnosticHolder", Diagnostics)
val import = element("Import", Declaration)
val resolvedImport = element("ResolvedImport", Declaration, import)
val errorImport = element("ErrorImport", Declaration, import, diagnosticHolder)
val loop = sealedElement("Loop", Expression, statement, targetElement)
val errorLoop = element("ErrorLoop", Expression, loop, diagnosticHolder)
val doWhileLoop = element("DoWhileLoop", Expression, loop)
@@ -65,6 +65,10 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
}
}
impl(errorImport) {
delegateFields(listOf("aliasName", "importedFqName", "isAllUnder", "source"), "delegate")
}
impl(annotationCall) {
default("typeRef") {
value = "annotationTypeRef"
@@ -432,6 +432,10 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
)
}
errorImport.configure {
+field("delegate", import)
}
annotationCall.configure {
+field("useSiteTarget", annotationUseSiteTargetType, nullable = true)
+field("annotationTypeRef", typeRef).withTransform()