[FIR] Switch names of FirDiagnostic and ConeDiagnostic

This commit is contained in:
Dmitriy Novozhilov
2020-03-23 14:11:38 +03:00
parent e6102599ce
commit 1a3fef5fa1
54 changed files with 248 additions and 254 deletions
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.analysis.checkers.context.PersistentCheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.context.PersistentCheckerContext
import org.jetbrains.kotlin.fir.analysis.collectors.components.* import org.jetbrains.kotlin.fir.analysis.collectors.components.*
import org.jetbrains.kotlin.fir.analysis.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.ScopeSession
@@ -27,7 +27,7 @@ abstract class AbstractDiagnosticCollector(
override val session: FirSession, override val session: FirSession,
override val scopeSession: ScopeSession = ScopeSession() override val scopeSession: ScopeSession = ScopeSession()
) : SessionHolder { ) : SessionHolder {
fun collectDiagnostics(firFile: FirFile): Iterable<ConeDiagnostic> { fun collectDiagnostics(firFile: FirFile): Iterable<FirDiagnostic> {
if (!componentsInitialized) { if (!componentsInitialized) {
throw IllegalStateException("Components are not initialized") throw IllegalStateException("Components are not initialized")
} }
@@ -37,7 +37,7 @@ abstract class AbstractDiagnosticCollector(
} }
protected abstract fun initializeCollector() protected abstract fun initializeCollector()
protected abstract fun getCollectedDiagnostics(): Iterable<ConeDiagnostic> protected abstract fun getCollectedDiagnostics(): Iterable<FirDiagnostic>
abstract fun runCheck(block: (DiagnosticReporter) -> Unit) abstract fun runCheck(block: (DiagnosticReporter) -> Unit)
private val components: MutableList<AbstractDiagnosticCollectorComponent> = mutableListOf() private val components: MutableList<AbstractDiagnosticCollectorComponent> = mutableListOf()
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir.analysis.collectors package org.jetbrains.kotlin.fir.analysis.collectors
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.analysis.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.analysis.diagnostics.SimpleDiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.SimpleDiagnosticReporter
import java.util.* import java.util.*
@@ -42,10 +42,10 @@ class ParallelDiagnosticsCollector(session: FirSession, private val numberOfThre
futures.clear() futures.clear()
} }
override fun getCollectedDiagnostics(): Iterable<ConeDiagnostic> { override fun getCollectedDiagnostics(): Iterable<FirDiagnostic> {
futures.forEach { it.get() } futures.forEach { it.get() }
return Iterable { return Iterable {
object : Iterator<ConeDiagnostic> { object : Iterator<FirDiagnostic> {
private val globalIterator = reporters.iterator() private val globalIterator = reporters.iterator()
private var localIterator = globalIterator.next().diagnostics.iterator() private var localIterator = globalIterator.next().diagnostics.iterator()
@@ -60,7 +60,7 @@ class ParallelDiagnosticsCollector(session: FirSession, private val numberOfThre
return localIterator.hasNext() return localIterator.hasNext()
} }
override fun next(): ConeDiagnostic { override fun next(): FirDiagnostic {
update() update()
return localIterator.next() return localIterator.next()
} }
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir.analysis.collectors package org.jetbrains.kotlin.fir.analysis.collectors
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.analysis.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.analysis.diagnostics.SimpleDiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.SimpleDiagnosticReporter
@@ -17,7 +17,7 @@ class SimpleDiagnosticsCollector(session: FirSession) : AbstractDiagnosticCollec
reporter = SimpleDiagnosticReporter() reporter = SimpleDiagnosticReporter()
} }
override fun getCollectedDiagnostics(): Iterable<ConeDiagnostic> { override fun getCollectedDiagnostics(): Iterable<FirDiagnostic> {
return reporter.diagnostics return reporter.diagnostics
} }
@@ -12,10 +12,7 @@ import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector
import org.jetbrains.kotlin.fir.analysis.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.analysis.diagnostics.*
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.fir.analysis.diagnostics.onSource
import org.jetbrains.kotlin.fir.declarations.FirErrorFunction import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
import org.jetbrains.kotlin.fir.diagnostics.* import org.jetbrains.kotlin.fir.diagnostics.*
import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
@@ -50,25 +47,25 @@ class ErrorNodeDiagnosticCollectorComponent(collector: AbstractDiagnosticCollect
runCheck { reportFirDiagnostic(errorFunction.diagnostic, source, it) } runCheck { reportFirDiagnostic(errorFunction.diagnostic, source, it) }
} }
private fun reportFirDiagnostic(diagnostic: FirDiagnostic, source: FirSourceElement, reporter: DiagnosticReporter) { private fun reportFirDiagnostic(diagnostic: ConeDiagnostic, source: FirSourceElement, reporter: DiagnosticReporter) {
val coneDiagnostic = when (diagnostic) { val coneDiagnostic = when (diagnostic) {
is FirUnresolvedReferenceError -> FirErrors.UNRESOLVED_REFERENCE.onSource(source, diagnostic.name?.asString()) is ConeUnresolvedReferenceError -> FirErrors.UNRESOLVED_REFERENCE.onSource(source, diagnostic.name?.asString())
is FirUnresolvedSymbolError -> FirErrors.UNRESOLVED_REFERENCE.onSource(source, diagnostic.classId.asString()) is ConeUnresolvedSymbolError -> FirErrors.UNRESOLVED_REFERENCE.onSource(source, diagnostic.classId.asString())
is FirUnresolvedNameError -> FirErrors.UNRESOLVED_REFERENCE.onSource(source, diagnostic.name.asString()) is ConeUnresolvedNameError -> FirErrors.UNRESOLVED_REFERENCE.onSource(source, diagnostic.name.asString())
is FirInapplicableCandidateError -> FirErrors.INAPPLICABLE_CANDIDATE.onSource(source, diagnostic.candidates.map { it.symbol }) is ConeInapplicableCandidateError -> FirErrors.INAPPLICABLE_CANDIDATE.onSource(source, diagnostic.candidates.map { it.symbol })
is FirAmbiguityError -> FirErrors.AMBIGUITY.onSource(source, diagnostic.candidates) is ConeAmbiguityError -> FirErrors.AMBIGUITY.onSource(source, diagnostic.candidates)
is FirOperatorAmbiguityError -> FirErrors.ASSIGN_OPERATOR_AMBIGUITY.onSource(source, diagnostic.candidates) is ConeOperatorAmbiguityError -> FirErrors.ASSIGN_OPERATOR_AMBIGUITY.onSource(source, diagnostic.candidates)
is FirVariableExpectedError -> Errors.VARIABLE_EXPECTED.onSource(source) is ConeVariableExpectedError -> Errors.VARIABLE_EXPECTED.onSource(source)
is FirTypeMismatchError -> FirErrors.TYPE_MISMATCH.onSource(source, diagnostic.expectedType, diagnostic.actualType) is ConeTypeMismatchError -> FirErrors.TYPE_MISMATCH.onSource(source, diagnostic.expectedType, diagnostic.actualType)
is FirSimpleDiagnostic -> diagnostic.getFactory().onSource(source) is ConeSimpleDiagnostic -> diagnostic.getFactory().onSource(source)
is FirDiagnosticWithParameters1<*> -> diagnostic.getFactory().tryOnSource(source, diagnostic.a) is ConeSimpleDiagnosticWithParameters1<*> -> diagnostic.getFactory().tryOnSource(source, diagnostic.a)
is FirStubDiagnostic -> null is ConeStubDiagnostic -> null
else -> throw IllegalArgumentException("Unsupported diagnostic type: ${diagnostic.javaClass}") else -> throw IllegalArgumentException("Unsupported diagnostic type: ${diagnostic.javaClass}")
} }
reporter.report(coneDiagnostic) reporter.report(coneDiagnostic)
} }
private fun FirSimpleDiagnostic.getFactory(): DiagnosticFactory0<PsiElement> { private fun ConeSimpleDiagnostic.getFactory(): DiagnosticFactory0<PsiElement> {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
return when (kind) { return when (kind) {
DiagnosticKind.Syntax -> FirErrors.SYNTAX_ERROR DiagnosticKind.Syntax -> FirErrors.SYNTAX_ERROR
@@ -89,19 +86,11 @@ class ErrorNodeDiagnosticCollectorComponent(collector: AbstractDiagnosticCollect
} as DiagnosticFactory0<PsiElement> } as DiagnosticFactory0<PsiElement>
} }
private fun FirDiagnosticWithParameters1<*>.getFactory(): DiagnosticFactory1<PsiElement, Any?> { private fun ConeSimpleDiagnosticWithParameters1<*>.getFactory(): DiagnosticFactory1<PsiElement, Any?> {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
return when (kind) { return when (kind) {
DiagnosticKind.SuperNotAllowed -> Errors.SUPER_IS_NOT_AN_EXPRESSION DiagnosticKind.SuperNotAllowed -> Errors.SUPER_IS_NOT_AN_EXPRESSION
else -> throw IllegalArgumentException("Unsupported diagnostic kind: $kind at $javaClass") else -> throw IllegalArgumentException("Unsupported diagnostic kind: $kind at $javaClass")
} as DiagnosticFactory1<PsiElement, Any?> } as DiagnosticFactory1<PsiElement, Any?>
} }
private inline fun <reified E : PsiElement, reified A> DiagnosticFactory1<E, A>.tryOnSource(
source: FirSourceElement,
a: Any?
): ConeDiagnostic? {
val aa = a as? A ?: throw IllegalArgumentException("Parameter passed to the factory is of incompatible type!")
return onSource(source, aa)
}
} }
@@ -6,13 +6,13 @@
package org.jetbrains.kotlin.fir.analysis.diagnostics package org.jetbrains.kotlin.fir.analysis.diagnostics
abstract class DiagnosticReporter { abstract class DiagnosticReporter {
abstract fun report(diagnostic: ConeDiagnostic?) abstract fun report(diagnostic: FirDiagnostic?)
} }
class SimpleDiagnosticReporter : DiagnosticReporter() { class SimpleDiagnosticReporter : DiagnosticReporter() {
val diagnostics: MutableList<ConeDiagnostic> = mutableListOf() val diagnostics: MutableList<FirDiagnostic> = mutableListOf()
override fun report(diagnostic: ConeDiagnostic?) { override fun report(diagnostic: FirDiagnostic?) {
if (diagnostic == null) return if (diagnostic == null) return
diagnostics += diagnostic diagnostics += diagnostic
} }
@@ -10,31 +10,39 @@ import org.jetbrains.kotlin.diagnostics.*
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.fir.psi
class ConeDiagnostic( class FirDiagnostic(
val diagnostic: Diagnostic, val diagnostic: Diagnostic,
val source: FirSourceElement val source: FirSourceElement
) )
inline fun <reified E : PsiElement> DiagnosticFactory0<E>.onSource(source: FirSourceElement): ConeDiagnostic? { inline fun <reified E : PsiElement> DiagnosticFactory0<E>.onSource(source: FirSourceElement): FirDiagnostic? {
val psi = source.psi as? E val psi = source.psi as? E
?: throw IllegalArgumentException("Incompatible PSI: expected ${E::class}, actual ${source.psi?.let { it::class }}") ?: throw IllegalArgumentException("Incompatible PSI: expected ${E::class}, actual ${source.psi?.let { it::class }}")
return ConeDiagnostic(this.on(psi), source) return FirDiagnostic(this.on(psi), source)
} }
inline fun <reified E : PsiElement, A> DiagnosticFactory1<E, A>.onSource(source: FirSourceElement, a: A): ConeDiagnostic? { inline fun <reified E : PsiElement, A> DiagnosticFactory1<E, A>.onSource(source: FirSourceElement, a: A): FirDiagnostic? {
val psi = source.psi as? E val psi = source.psi as? E
?: throw IllegalArgumentException("Incompatible PSI: expected ${E::class}, actual ${source.psi?.let { it::class }}") ?: throw IllegalArgumentException("Incompatible PSI: expected ${E::class}, actual ${source.psi?.let { it::class }}")
return ConeDiagnostic(this.on(psi, a), source) return FirDiagnostic(this.on(psi, a), source)
} }
inline fun <reified E : PsiElement, A, B> DiagnosticFactory2<E, A, B>.onSource(source: FirSourceElement, a: A, b: B): ConeDiagnostic? { inline fun <reified E : PsiElement, A, B> DiagnosticFactory2<E, A, B>.onSource(source: FirSourceElement, a: A, b: B): FirDiagnostic? {
val psi = source.psi as? E val psi = source.psi as? E
?: throw IllegalArgumentException("Incompatible PSI: expected ${E::class}, actual ${source.psi?.let { it::class }}") ?: throw IllegalArgumentException("Incompatible PSI: expected ${E::class}, actual ${source.psi?.let { it::class }}")
return ConeDiagnostic(this.on(psi, a, b), source) return FirDiagnostic(this.on(psi, a, b), source)
} }
inline fun <reified E : PsiElement, A, B, C> DiagnosticFactory3<E, A, B, C>.onSource(source: FirSourceElement, a: A, b: B, c: C): ConeDiagnostic? { inline fun <reified E : PsiElement, A, B, C> DiagnosticFactory3<E, A, B, C>.onSource(source: FirSourceElement, a: A, b: B, c: C): FirDiagnostic? {
val psi = source.psi as? E val psi = source.psi as? E
?: throw IllegalArgumentException("Incompatible PSI: expected ${E::class}, actual ${source.psi?.let { it::class }}") ?: throw IllegalArgumentException("Incompatible PSI: expected ${E::class}, actual ${source.psi?.let { it::class }}")
return ConeDiagnostic(this.on(psi, a, b, c), source) return FirDiagnostic(this.on(psi, a, b, c), source)
} }
inline fun <reified E : PsiElement, reified A> DiagnosticFactory1<E, A>.tryOnSource(
source: FirSourceElement,
a: Any?
): FirDiagnostic? {
val aa = a as? A ?: throw IllegalArgumentException("Parameter passed to the factory is of incompatible type!")
return onSource(source, aa)
}
@@ -17,14 +17,14 @@ import org.jetbrains.kotlin.fir.backend.left
import org.jetbrains.kotlin.fir.backend.right import org.jetbrains.kotlin.fir.backend.right
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression
import org.jetbrains.kotlin.fir.references.* import org.jetbrains.kotlin.fir.references.*
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.resolve.diagnostics.FirAmbiguityError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError
import org.jetbrains.kotlin.fir.resolve.diagnostics.FirInapplicableCandidateError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError
import org.jetbrains.kotlin.fir.resolve.directExpansionType import org.jetbrains.kotlin.fir.resolve.directExpansionType
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
@@ -1183,9 +1183,9 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
} }
} }
private fun FlowContent.generate(diagnostic: FirDiagnostic) { private fun FlowContent.generate(diagnostic: ConeDiagnostic) {
when (diagnostic) { when (diagnostic) {
is FirInapplicableCandidateError -> { is ConeInapplicableCandidateError -> {
for (candidate in diagnostic.candidates) { for (candidate in diagnostic.candidates) {
describeVerbose(candidate.symbol) describeVerbose(candidate.symbol)
br br
@@ -1210,7 +1210,7 @@ class HtmlFirDump internal constructor(private var linkResolver: FirLinkResolver
} }
} }
} }
is FirAmbiguityError -> { is ConeAmbiguityError -> {
+"Ambiguity: " +"Ambiguity: "
br br
for (candidate in diagnostic.candidates) { for (candidate in diagnostic.candidates) {
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.* import org.jetbrains.kotlin.fir.expressions.builder.*
import org.jetbrains.kotlin.fir.java.declarations.buildJavaValueParameter import org.jetbrains.kotlin.fir.java.declarations.buildJavaValueParameter
@@ -423,7 +423,7 @@ private fun JavaAnnotationArgument.toFirExpression(
} }
this.calleeReference = calleeReference this.calleeReference = calleeReference
?: buildErrorNamedReference { ?: buildErrorNamedReference {
diagnostic = FirSimpleDiagnostic("Strange Java enum value: $classId.$entryName", DiagnosticKind.Java) diagnostic = ConeSimpleDiagnostic("Strange Java enum value: $classId.$entryName", DiagnosticKind.Java)
} }
} }
} }
@@ -437,7 +437,7 @@ private fun JavaAnnotationArgument.toFirExpression(
} }
is JavaAnnotationAsAnnotationArgument -> getAnnotation().toFirAnnotationCall(session, javaTypeParameterStack) is JavaAnnotationAsAnnotationArgument -> getAnnotation().toFirAnnotationCall(session, javaTypeParameterStack)
else -> buildErrorExpression { else -> buildErrorExpression {
diagnostic = FirSimpleDiagnostic("Unknown JavaAnnotationArgument: ${this::class.java}", DiagnosticKind.Java) diagnostic = ConeSimpleDiagnostic("Unknown JavaAnnotationArgument: ${this::class.java}", DiagnosticKind.Java)
} }
} }
} }
@@ -475,7 +475,7 @@ internal fun Any?.createConstant(session: FirSession): FirExpression {
null -> buildConstExpression(null, FirConstKind.Null, null) null -> buildConstExpression(null, FirConstKind.Null, null)
else -> buildErrorExpression { else -> buildErrorExpression {
diagnostic = FirSimpleDiagnostic("Unknown value in JavaLiteralAnnotationArgument: $this", DiagnosticKind.Java) diagnostic = ConeSimpleDiagnostic("Unknown value in JavaLiteralAnnotationArgument: $this", DiagnosticKind.Java)
} }
} }
} }
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl
import org.jetbrains.kotlin.fir.deserialization.FirDeserializationContext import org.jetbrains.kotlin.fir.deserialization.FirDeserializationContext
import org.jetbrains.kotlin.fir.deserialization.deserializeClassToSymbol import org.jetbrains.kotlin.fir.deserialization.deserializeClassToSymbol
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.* import org.jetbrains.kotlin.fir.expressions.builder.*
import org.jetbrains.kotlin.fir.java.JavaSymbolProvider import org.jetbrains.kotlin.fir.java.JavaSymbolProvider
@@ -167,7 +167,7 @@ class KotlinDeserializedJvmSymbolsProvider(
buildResolvedTypeRef { buildResolvedTypeRef {
type = it.constructType(emptyList(), isNullable = false) type = it.constructType(emptyList(), isNullable = false)
} }
} ?: buildErrorTypeRef { diagnostic = FirSimpleDiagnostic("Symbol not found for $classId", DiagnosticKind.Java) } } ?: buildErrorTypeRef { diagnostic = ConeSimpleDiagnostic("Symbol not found for $classId", DiagnosticKind.Java) }
} }
@@ -210,7 +210,7 @@ class KotlinDeserializedJvmSymbolsProvider(
} }
else -> { else -> {
buildErrorNamedReference { buildErrorNamedReference {
diagnostic = FirSimpleDiagnostic( diagnostic = ConeSimpleDiagnostic(
"Strange deserialized enum value: ${this@toEnumEntryReferenceExpression}.$name", "Strange deserialized enum value: ${this@toEnumEntryReferenceExpression}.$name",
DiagnosticKind.Java, DiagnosticKind.Java,
) )
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.* import org.jetbrains.kotlin.fir.expressions.builder.*
import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock
@@ -716,7 +716,7 @@ class DeclarationsConverter(
val delegatedSelfTypeRef = val delegatedSelfTypeRef =
if (classWrapper.isObjectLiteral()) buildErrorTypeRef { if (classWrapper.isObjectLiteral()) buildErrorTypeRef {
source = secondaryConstructor.toFirSourceElement() source = secondaryConstructor.toFirSourceElement()
diagnostic = FirSimpleDiagnostic( diagnostic = ConeSimpleDiagnostic(
"Constructor in object", "Constructor in object",
DiagnosticKind.ConstructorInObject DiagnosticKind.ConstructorInObject
) )
@@ -774,10 +774,10 @@ class DeclarationsConverter(
val delegatedType = val delegatedType =
if (classWrapper.isObjectLiteral() || classWrapper.isInterface()) when { if (classWrapper.isObjectLiteral() || classWrapper.isInterface()) when {
isThis -> buildErrorTypeRef { isThis -> buildErrorTypeRef {
diagnostic = FirSimpleDiagnostic("Constructor in object", DiagnosticKind.ConstructorInObject) diagnostic = ConeSimpleDiagnostic("Constructor in object", DiagnosticKind.ConstructorInObject)
} }
else -> buildErrorTypeRef { else -> buildErrorTypeRef {
diagnostic = FirSimpleDiagnostic("No super type", DiagnosticKind.Syntax) diagnostic = ConeSimpleDiagnostic("No super type", DiagnosticKind.Syntax)
} }
} }
else when { else when {
@@ -945,7 +945,7 @@ class DeclarationsConverter(
var isVar = false var isVar = false
val entries = mutableListOf<FirVariable<*>>() val entries = mutableListOf<FirVariable<*>>()
var firExpression: FirExpression = var firExpression: FirExpression =
buildErrorExpression(null, FirSimpleDiagnostic("Destructuring declaration without initializer", DiagnosticKind.Syntax)) buildErrorExpression(null, ConeSimpleDiagnostic("Destructuring declaration without initializer", DiagnosticKind.Syntax))
destructingDeclaration.forEachChildren { destructingDeclaration.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
VAR_KEYWORD -> isVar = true VAR_KEYWORD -> isVar = true
@@ -1259,7 +1259,7 @@ class DeclarationsConverter(
private fun convertExplicitDelegation(explicitDelegation: LighterASTNode): FirDelegatedTypeRef { private fun convertExplicitDelegation(explicitDelegation: LighterASTNode): FirDelegatedTypeRef {
lateinit var firTypeRef: FirTypeRef lateinit var firTypeRef: FirTypeRef
var firExpression: FirExpression? = buildErrorExpression( var firExpression: FirExpression? = buildErrorExpression(
explicitDelegation.toFirSourceElement(), FirSimpleDiagnostic("Should have delegate", DiagnosticKind.Syntax) explicitDelegation.toFirSourceElement(), ConeSimpleDiagnostic("Should have delegate", DiagnosticKind.Syntax)
) )
explicitDelegation.forEachChildren { explicitDelegation.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
@@ -1355,10 +1355,10 @@ class DeclarationsConverter(
*/ */
fun convertType(type: LighterASTNode): FirTypeRef { fun convertType(type: LighterASTNode): FirTypeRef {
if (type.asText.isEmpty()) { if (type.asText.isEmpty()) {
return buildErrorTypeRef { diagnostic = FirSimpleDiagnostic("Unwrapped type is null", DiagnosticKind.Syntax) } return buildErrorTypeRef { diagnostic = ConeSimpleDiagnostic("Unwrapped type is null", DiagnosticKind.Syntax) }
} }
var typeModifiers = TypeModifier() //TODO what with suspend? var typeModifiers = TypeModifier() //TODO what with suspend?
var firType: FirTypeRef = buildErrorTypeRef { diagnostic = FirSimpleDiagnostic("Incomplete code", DiagnosticKind.Syntax) } var firType: FirTypeRef = buildErrorTypeRef { diagnostic = ConeSimpleDiagnostic("Incomplete code", DiagnosticKind.Syntax) }
var afterLPar = false var afterLPar = false
type.forEachChildren { type.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
@@ -1373,7 +1373,7 @@ class DeclarationsConverter(
isMarkedNullable = false isMarkedNullable = false
} }
TokenType.ERROR_ELEMENT -> firType = TokenType.ERROR_ELEMENT -> firType =
buildErrorTypeRef { diagnostic = FirSimpleDiagnostic("Unwrapped type is null", DiagnosticKind.Syntax) } buildErrorTypeRef { diagnostic = ConeSimpleDiagnostic("Unwrapped type is null", DiagnosticKind.Syntax) }
} }
} }
@@ -1431,7 +1431,7 @@ class DeclarationsConverter(
} }
if (identifier == null) if (identifier == null)
return buildErrorTypeRef { diagnostic = FirSimpleDiagnostic("Incomplete user type", DiagnosticKind.Syntax) } return buildErrorTypeRef { diagnostic = ConeSimpleDiagnostic("Incomplete user type", DiagnosticKind.Syntax) }
val qualifierPart = FirQualifierPartImpl(identifier.nameAsSafeName()).apply { typeArguments += firTypeArguments } val qualifierPart = FirQualifierPartImpl(identifier.nameAsSafeName()).apply { typeArguments += firTypeArguments }
@@ -19,8 +19,8 @@ import org.jetbrains.kotlin.fir.declarations.builder.buildProperty
import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticWithParameters1 import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnosticWithParameters1
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.* import org.jetbrains.kotlin.fir.expressions.builder.*
import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess
@@ -55,7 +55,7 @@ class ExpressionsConverter(
) : BaseConverter(session, tree, context) { ) : BaseConverter(session, tree, context) {
inline fun <reified R : FirElement> getAsFirExpression(expression: LighterASTNode?, errorReason: String = ""): R { inline fun <reified R : FirElement> getAsFirExpression(expression: LighterASTNode?, errorReason: String = ""): R {
return expression?.let { convertExpression(it, errorReason) } as? R ?: (buildErrorExpression(null, FirSimpleDiagnostic(errorReason, DiagnosticKind.Syntax)) as R) return expression?.let { convertExpression(it, errorReason) } as? R ?: (buildErrorExpression(null, ConeSimpleDiagnostic(errorReason, DiagnosticKind.Syntax)) as R)
} }
/***** EXPRESSIONS *****/ /***** EXPRESSIONS *****/
@@ -103,7 +103,7 @@ class ExpressionsConverter(
OBJECT_LITERAL -> declarationsConverter.convertObjectLiteral(expression) OBJECT_LITERAL -> declarationsConverter.convertObjectLiteral(expression)
FUN -> declarationsConverter.convertFunctionDeclaration(expression) FUN -> declarationsConverter.convertFunctionDeclaration(expression)
else -> buildErrorExpression(null, FirSimpleDiagnostic(errorReason, DiagnosticKind.Syntax)) else -> buildErrorExpression(null, ConeSimpleDiagnostic(errorReason, DiagnosticKind.Syntax))
} }
} }
@@ -176,7 +176,7 @@ class ExpressionsConverter(
} }
}.build() }.build()
} else { } else {
buildSingleExpressionBlock(buildErrorExpression(null, FirSimpleDiagnostic("Lambda has no body", DiagnosticKind.Syntax))) buildSingleExpressionBlock(buildErrorExpression(null, ConeSimpleDiagnostic("Lambda has no body", DiagnosticKind.Syntax)))
} }
context.firFunctionTargets.removeLast() context.firFunctionTargets.removeLast()
}.also { }.also {
@@ -192,7 +192,7 @@ class ExpressionsConverter(
var isLeftArgument = true var isLeftArgument = true
lateinit var operationTokenName: String lateinit var operationTokenName: String
var leftArgNode: LighterASTNode? = null var leftArgNode: LighterASTNode? = null
var rightArgAsFir: FirExpression = buildErrorExpression(null, FirSimpleDiagnostic("No right operand", DiagnosticKind.Syntax)) var rightArgAsFir: FirExpression = buildErrorExpression(null, ConeSimpleDiagnostic("No right operand", DiagnosticKind.Syntax))
var rightArg: LighterASTNode? = null var rightArg: LighterASTNode? = null
binaryExpression.forEachChildren { binaryExpression.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
@@ -265,7 +265,7 @@ class ExpressionsConverter(
toFirOperation: String.() -> FirOperation toFirOperation: String.() -> FirOperation
): FirTypeOperatorCall { ): FirTypeOperatorCall {
lateinit var operationTokenName: String lateinit var operationTokenName: String
var leftArgAsFir: FirExpression = buildErrorExpression(null, FirSimpleDiagnostic("No left operand", DiagnosticKind.Syntax)) var leftArgAsFir: FirExpression = buildErrorExpression(null, ConeSimpleDiagnostic("No left operand", DiagnosticKind.Syntax))
lateinit var firType: FirTypeRef lateinit var firType: FirTypeRef
binaryExpression.forEachChildren { binaryExpression.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
@@ -303,7 +303,7 @@ class ExpressionsConverter(
context.firLabels.removeLast() context.firLabels.removeLast()
//println("Unused label: ${labeledExpression.getAsString()}") //println("Unused label: ${labeledExpression.getAsString()}")
} }
return firExpression ?: buildErrorExpression(null, FirSimpleDiagnostic("Empty label", DiagnosticKind.Syntax)) return firExpression ?: buildErrorExpression(null, ConeSimpleDiagnostic("Empty label", DiagnosticKind.Syntax))
} }
/** /**
@@ -375,7 +375,7 @@ class ExpressionsConverter(
return firExpression?.also { return firExpression?.also {
require(it is FirAnnotationContainer) require(it is FirAnnotationContainer)
(it.annotations as MutableList<FirAnnotationCall>) += firAnnotationList (it.annotations as MutableList<FirAnnotationCall>) += firAnnotationList
} ?: buildErrorExpression(null, FirSimpleDiagnostic("Strange annotated expression: ${firExpression?.render()}", DiagnosticKind.Syntax)) } ?: buildErrorExpression(null, ConeSimpleDiagnostic("Strange annotated expression: ${firExpression?.render()}", DiagnosticKind.Syntax))
} }
/** /**
@@ -383,7 +383,7 @@ class ExpressionsConverter(
* @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitClassLiteralExpression * @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitClassLiteralExpression
*/ */
private fun convertClassLiteralExpression(classLiteralExpression: LighterASTNode): FirExpression { private fun convertClassLiteralExpression(classLiteralExpression: LighterASTNode): FirExpression {
var firReceiverExpression: FirExpression = buildErrorExpression(null, FirSimpleDiagnostic("No receiver in class literal", DiagnosticKind.Syntax)) var firReceiverExpression: FirExpression = buildErrorExpression(null, ConeSimpleDiagnostic("No receiver in class literal", DiagnosticKind.Syntax))
classLiteralExpression.forEachChildren { classLiteralExpression.forEachChildren {
if (it.isExpression()) firReceiverExpression = getAsFirExpression(it, "No receiver in class literal") if (it.isExpression()) firReceiverExpression = getAsFirExpression(it, "No receiver in class literal")
} }
@@ -432,7 +432,7 @@ class ExpressionsConverter(
private fun convertQualifiedExpression(dotQualifiedExpression: LighterASTNode): FirExpression { private fun convertQualifiedExpression(dotQualifiedExpression: LighterASTNode): FirExpression {
var isSelector = false var isSelector = false
var isSafe = false var isSafe = false
var firSelector: FirExpression = buildErrorExpression(null, FirSimpleDiagnostic("Qualified expression without selector", DiagnosticKind.Syntax)) //after dot var firSelector: FirExpression = buildErrorExpression(null, ConeSimpleDiagnostic("Qualified expression without selector", DiagnosticKind.Syntax)) //after dot
var firReceiver: FirExpression? = null //before dot var firReceiver: FirExpression? = null //before dot
dotQualifiedExpression.forEachChildren { dotQualifiedExpression.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
@@ -504,11 +504,11 @@ class ExpressionsConverter(
buildErrorNamedReference { buildErrorNamedReference {
val node = superNode!! val node = superNode!!
source = node.toFirSourceElement() source = node.toFirSourceElement()
diagnostic = FirDiagnosticWithParameters1("Super cannot be a callee", node.asText, DiagnosticKind.SuperNotAllowed) diagnostic = ConeSimpleDiagnosticWithParameters1("Super cannot be a callee", node.asText, DiagnosticKind.SuperNotAllowed)
} to null } to null
} }
else -> buildErrorNamedReference { else -> buildErrorNamedReference {
diagnostic = FirSimpleDiagnostic("Call has no callee", DiagnosticKind.Syntax) diagnostic = ConeSimpleDiagnostic("Call has no callee", DiagnosticKind.Syntax)
} to null } to null
} }
@@ -541,7 +541,7 @@ class ExpressionsConverter(
} }
private fun LighterASTNode?.convertShortOrLongStringTemplate(errorReason: String): FirExpression { private fun LighterASTNode?.convertShortOrLongStringTemplate(errorReason: String): FirExpression {
var firExpression: FirExpression = buildErrorExpression(null, FirSimpleDiagnostic(errorReason, DiagnosticKind.Syntax)) var firExpression: FirExpression = buildErrorExpression(null, ConeSimpleDiagnostic(errorReason, DiagnosticKind.Syntax))
this?.forEachChildren(LONG_TEMPLATE_ENTRY_START, LONG_TEMPLATE_ENTRY_END) { this?.forEachChildren(LONG_TEMPLATE_ENTRY_START, LONG_TEMPLATE_ENTRY_END) {
firExpression = getAsFirExpression(it, errorReason) firExpression = getAsFirExpression(it, errorReason)
} }
@@ -647,7 +647,7 @@ class ExpressionsConverter(
} }
private fun convertWhenConditionExpression(whenCondition: LighterASTNode, subject: FirWhenSubject?): FirExpression { private fun convertWhenConditionExpression(whenCondition: LighterASTNode, subject: FirWhenSubject?): FirExpression {
var firExpression: FirExpression = buildErrorExpression(null, FirSimpleDiagnostic("No expression in condition with expression", DiagnosticKind.Syntax)) var firExpression: FirExpression = buildErrorExpression(null, ConeSimpleDiagnostic("No expression in condition with expression", DiagnosticKind.Syntax))
whenCondition.forEachChildren { whenCondition.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
else -> if (it.isExpression()) firExpression = getAsFirExpression(it, "No expression in condition with expression") else -> if (it.isExpression()) firExpression = getAsFirExpression(it, "No expression in condition with expression")
@@ -671,7 +671,7 @@ class ExpressionsConverter(
private fun convertWhenConditionInRange(whenCondition: LighterASTNode, subject: FirWhenSubject?): FirExpression { private fun convertWhenConditionInRange(whenCondition: LighterASTNode, subject: FirWhenSubject?): FirExpression {
var isNegate = false var isNegate = false
var firExpression: FirExpression = buildErrorExpression(null, FirSimpleDiagnostic("No range in condition with range", DiagnosticKind.Syntax)) var firExpression: FirExpression = buildErrorExpression(null, ConeSimpleDiagnostic("No range in condition with range", DiagnosticKind.Syntax))
whenCondition.forEachChildren { whenCondition.forEachChildren {
when { when {
it.tokenType == OPERATION_REFERENCE && it.asText == NOT_IN.value -> isNegate = true it.tokenType == OPERATION_REFERENCE && it.asText == NOT_IN.value -> isNegate = true
@@ -686,7 +686,7 @@ class ExpressionsConverter(
} else { } else {
return buildErrorExpression { return buildErrorExpression {
source = whenCondition.toFirSourceElement() source = whenCondition.toFirSourceElement()
diagnostic = FirSimpleDiagnostic("No expression in condition with expression", DiagnosticKind.Syntax) diagnostic = ConeSimpleDiagnostic("No expression in condition with expression", DiagnosticKind.Syntax)
} }
} }
@@ -716,7 +716,7 @@ class ExpressionsConverter(
} else { } else {
return buildErrorExpression { return buildErrorExpression {
source = whenCondition.toFirSourceElement() source = whenCondition.toFirSourceElement()
diagnostic = FirSimpleDiagnostic("No expression in condition with expression", DiagnosticKind.Syntax) diagnostic = ConeSimpleDiagnostic("No expression in condition with expression", DiagnosticKind.Syntax)
} }
} }
@@ -733,7 +733,7 @@ class ExpressionsConverter(
* @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitArrayAccessExpression * @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitArrayAccessExpression
*/ */
private fun convertArrayAccessExpression(arrayAccess: LighterASTNode): FirFunctionCall { private fun convertArrayAccessExpression(arrayAccess: LighterASTNode): FirFunctionCall {
var firExpression: FirExpression = buildErrorExpression(null, FirSimpleDiagnostic("No array expression", DiagnosticKind.Syntax)) var firExpression: FirExpression = buildErrorExpression(null, ConeSimpleDiagnostic("No array expression", DiagnosticKind.Syntax))
val indices: MutableList<FirExpression> = mutableListOf() val indices: MutableList<FirExpression> = mutableListOf()
arrayAccess.forEachChildren { arrayAccess.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
@@ -801,7 +801,7 @@ class ExpressionsConverter(
*/ */
private fun convertDoWhile(doWhileLoop: LighterASTNode): FirElement { private fun convertDoWhile(doWhileLoop: LighterASTNode): FirElement {
var block: LighterASTNode? = null var block: LighterASTNode? = null
var firCondition: FirExpression = buildErrorExpression(null, FirSimpleDiagnostic("No condition in do-while loop", DiagnosticKind.Syntax)) var firCondition: FirExpression = buildErrorExpression(null, ConeSimpleDiagnostic("No condition in do-while loop", DiagnosticKind.Syntax))
doWhileLoop.forEachChildren { doWhileLoop.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
BODY -> block = it BODY -> block = it
@@ -821,7 +821,7 @@ class ExpressionsConverter(
*/ */
private fun convertWhile(whileLoop: LighterASTNode): FirElement { private fun convertWhile(whileLoop: LighterASTNode): FirElement {
var block: LighterASTNode? = null var block: LighterASTNode? = null
var firCondition: FirExpression = buildErrorExpression(null, FirSimpleDiagnostic("No condition in while loop", DiagnosticKind.Syntax)) var firCondition: FirExpression = buildErrorExpression(null, ConeSimpleDiagnostic("No condition in while loop", DiagnosticKind.Syntax))
whileLoop.forEachChildren { whileLoop.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
BODY -> block = it BODY -> block = it
@@ -841,7 +841,7 @@ class ExpressionsConverter(
*/ */
private fun convertFor(forLoop: LighterASTNode): FirElement { private fun convertFor(forLoop: LighterASTNode): FirElement {
var parameter: ValueParameter? = null var parameter: ValueParameter? = null
var rangeExpression: FirExpression = buildErrorExpression(null, FirSimpleDiagnostic("No range in for loop", DiagnosticKind.Syntax)) var rangeExpression: FirExpression = buildErrorExpression(null, ConeSimpleDiagnostic("No range in for loop", DiagnosticKind.Syntax))
var blockNode: LighterASTNode? = null var blockNode: LighterASTNode? = null
forLoop.forEachChildren { forLoop.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
@@ -989,7 +989,7 @@ class ExpressionsConverter(
* @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitIfExpression * @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitIfExpression
*/ */
private fun convertIfExpression(ifExpression: LighterASTNode): FirExpression { private fun convertIfExpression(ifExpression: LighterASTNode): FirExpression {
var firCondition: FirExpression = buildErrorExpression(null, FirSimpleDiagnostic("If statement should have condition", DiagnosticKind.Syntax)) var firCondition: FirExpression = buildErrorExpression(null, ConeSimpleDiagnostic("If statement should have condition", DiagnosticKind.Syntax))
var thenBlock: LighterASTNode? = null var thenBlock: LighterASTNode? = null
var elseBlock: LighterASTNode? = null var elseBlock: LighterASTNode? = null
ifExpression.forEachChildren { ifExpression.forEachChildren {
@@ -1061,7 +1061,7 @@ class ExpressionsConverter(
* @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitThrowExpression * @see org.jetbrains.kotlin.fir.builder.RawFirBuilder.Visitor.visitThrowExpression
*/ */
private fun convertThrow(throwExpression: LighterASTNode): FirExpression { private fun convertThrow(throwExpression: LighterASTNode): FirExpression {
var firExpression: FirExpression = buildErrorExpression(null, FirSimpleDiagnostic("Nothing to throw", DiagnosticKind.Syntax)) var firExpression: FirExpression = buildErrorExpression(null, ConeSimpleDiagnostic("Nothing to throw", DiagnosticKind.Syntax))
throwExpression.forEachChildren { throwExpression.forEachChildren {
if (it.isExpression()) firExpression = getAsFirExpression(it, "Nothing to throw") if (it.isExpression()) firExpression = getAsFirExpression(it, "Nothing to throw")
} }
@@ -1128,7 +1128,7 @@ class ExpressionsConverter(
private fun convertValueArgument(valueArgument: LighterASTNode): FirExpression { private fun convertValueArgument(valueArgument: LighterASTNode): FirExpression {
var identifier: String? = null var identifier: String? = null
var isSpread = false var isSpread = false
var firExpression: FirExpression = buildErrorExpression(null, FirSimpleDiagnostic("Argument is absent", DiagnosticKind.Syntax)) var firExpression: FirExpression = buildErrorExpression(null, ConeSimpleDiagnostic("Argument is absent", DiagnosticKind.Syntax))
valueArgument.forEachChildren { valueArgument.forEachChildren {
when (it.tokenType) { when (it.tokenType) {
VALUE_ARGUMENT_NAME -> identifier = it.asText VALUE_ARGUMENT_NAME -> identifier = it.asText
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.builder.buildQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.builder.buildQualifiedAccessExpression
import org.jetbrains.kotlin.fir.lightTree.fir.modifier.Modifier import org.jetbrains.kotlin.fir.lightTree.fir.modifier.Modifier
import org.jetbrains.kotlin.fir.references.builder.buildPropertyFromParameterResolvedNamedReference import org.jetbrains.kotlin.fir.references.builder.buildPropertyFromParameterResolvedNamedReference
@@ -41,7 +41,7 @@ class ValueParameter(
type = type.convertToArrayType() type = type.convertToArrayType()
} }
if (type is FirImplicitTypeRef) { if (type is FirImplicitTypeRef) {
type = buildErrorTypeRef { diagnostic = FirSimpleDiagnostic("Incomplete code", DiagnosticKind.Syntax) } type = buildErrorTypeRef { diagnostic = ConeSimpleDiagnostic("Incomplete code", DiagnosticKind.Syntax) }
} }
return buildProperty { return buildProperty {
@@ -5,15 +5,12 @@
package org.jetbrains.kotlin.fir.lightTree.fir package org.jetbrains.kotlin.fir.lightTree.fir
import org.jetbrains.kotlin.fir.FirWhenSubject
import org.jetbrains.kotlin.fir.builder.generateLazyLogicalOperation import org.jetbrains.kotlin.fir.builder.generateLazyLogicalOperation
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirOperatorCall
import org.jetbrains.kotlin.fir.expressions.buildErrorExpression import org.jetbrains.kotlin.fir.expressions.buildErrorExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildWhenSubjectExpression
data class WhenEntry( data class WhenEntry(
val conditions: List<FirExpression>, val conditions: List<FirExpression>,
@@ -39,7 +36,7 @@ data class WhenEntry(
fun toFirWhenConditionWithoutSubject(): FirExpression { fun toFirWhenConditionWithoutSubject(): FirExpression {
return when (val condition = conditions.firstOrNull()) { return when (val condition = conditions.firstOrNull()) {
// is FirOperatorCall -> condition.arguments.first() // is FirOperatorCall -> condition.arguments.first()
null -> buildErrorExpression(null, FirSimpleDiagnostic("No expression in condition with expression", DiagnosticKind.Syntax)) null -> buildErrorExpression(null, ConeSimpleDiagnostic("No expression in condition with expression", DiagnosticKind.Syntax))
else -> condition else -> condition
} }
} }
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.builder.* import org.jetbrains.kotlin.fir.declarations.builder.*
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.* import org.jetbrains.kotlin.fir.expressions.builder.*
import org.jetbrains.kotlin.fir.expressions.impl.buildSingleExpressionBlock import org.jetbrains.kotlin.fir.expressions.impl.buildSingleExpressionBlock
@@ -108,7 +108,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
buildErrorFunction { buildErrorFunction {
source = baseSource source = baseSource
session = this@BaseFirBuilder.baseSession session = this@BaseFirBuilder.baseSession
diagnostic = FirSimpleDiagnostic(message, kind) diagnostic = ConeSimpleDiagnostic(message, kind)
symbol = FirErrorFunctionSymbol() symbol = FirErrorFunctionSymbol()
} }
) )
@@ -178,7 +178,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
bind( bind(
buildErrorLoop( buildErrorLoop(
expression.getSourceOrNull(), expression.getSourceOrNull(),
FirSimpleDiagnostic("Cannot bind unlabeled jump to a loop", DiagnosticKind.Syntax) ConeSimpleDiagnostic("Cannot bind unlabeled jump to a loop", DiagnosticKind.Syntax)
) )
) )
} }
@@ -192,7 +192,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
target = FirLoopTarget(labelName).apply { target = FirLoopTarget(labelName).apply {
bind( bind(
buildErrorLoop( buildErrorLoop(
expression.getSourceOrNull(), FirSimpleDiagnostic("Cannot bind label $labelName to a loop", DiagnosticKind.Syntax) expression.getSourceOrNull(), ConeSimpleDiagnostic("Cannot bind label $labelName to a loop", DiagnosticKind.Syntax)
) )
) )
} }
@@ -218,7 +218,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
val kind = when { val kind = when {
convertedText !is Long -> return buildErrorExpression { convertedText !is Long -> return buildErrorExpression {
source = expression.getSourceOrNull() source = expression.getSourceOrNull()
diagnostic = FirSimpleDiagnostic( diagnostic = ConeSimpleDiagnostic(
"Incorrect constant expression: $text", "Incorrect constant expression: $text",
DiagnosticKind.IllegalConstExpression DiagnosticKind.IllegalConstExpression
) )
@@ -243,7 +243,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
expression.getSourceOrNull(), expression.getSourceOrNull(),
kind, kind,
convertedText, convertedText,
FirSimpleDiagnostic("Incorrect integer literal: $text", DiagnosticKind.Syntax) ConeSimpleDiagnostic("Incorrect integer literal: $text", DiagnosticKind.Syntax)
) )
} }
FLOAT_CONSTANT -> FLOAT_CONSTANT ->
@@ -252,14 +252,14 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
expression.getSourceOrNull(), expression.getSourceOrNull(),
FirConstKind.Float, FirConstKind.Float,
convertedText, convertedText,
FirSimpleDiagnostic("Incorrect float: $text", DiagnosticKind.Syntax) ConeSimpleDiagnostic("Incorrect float: $text", DiagnosticKind.Syntax)
) )
} else { } else {
buildConstOrErrorExpression( buildConstOrErrorExpression(
expression.getSourceOrNull(), expression.getSourceOrNull(),
FirConstKind.Double, FirConstKind.Double,
convertedText as Double, convertedText as Double,
FirSimpleDiagnostic("Incorrect double: $text", DiagnosticKind.Syntax) ConeSimpleDiagnostic("Incorrect double: $text", DiagnosticKind.Syntax)
) )
} }
CHARACTER_CONSTANT -> CHARACTER_CONSTANT ->
@@ -267,7 +267,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
expression.getSourceOrNull(), expression.getSourceOrNull(),
FirConstKind.Char, FirConstKind.Char,
text.parseCharacter(), text.parseCharacter(),
FirSimpleDiagnostic("Incorrect character: $text", DiagnosticKind.Syntax) ConeSimpleDiagnostic("Incorrect character: $text", DiagnosticKind.Syntax)
) )
BOOLEAN_CONSTANT -> BOOLEAN_CONSTANT ->
buildConstExpression( buildConstExpression(
@@ -323,7 +323,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
hasExpressions = true hasExpressions = true
buildErrorExpression { buildErrorExpression {
source = entry.getSourceOrNull() source = entry.getSourceOrNull()
diagnostic = FirSimpleDiagnostic("Incorrect template entry: ${entry.asText}", DiagnosticKind.Syntax) diagnostic = ConeSimpleDiagnostic("Incorrect template entry: ${entry.asText}", DiagnosticKind.Syntax)
} }
} }
} }
@@ -370,7 +370,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
if (argument == null) { if (argument == null) {
return buildErrorExpression { return buildErrorExpression {
source = argument source = argument
diagnostic = FirSimpleDiagnostic("Inc/dec without operand", DiagnosticKind.Syntax) diagnostic = ConeSimpleDiagnostic("Inc/dec without operand", DiagnosticKind.Syntax)
} }
} }
return buildBlock { return buildBlock {
@@ -451,7 +451,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
} else { } else {
buildErrorNamedReference { buildErrorNamedReference {
source = left.getSourceOrNull() source = left.getSourceOrNull()
diagnostic = FirSimpleDiagnostic("Unsupported qualified LValue: ${left.asText}", DiagnosticKind.Syntax) diagnostic = ConeSimpleDiagnostic("Unsupported qualified LValue: ${left.asText}", DiagnosticKind.Syntax)
} }
} }
} }
@@ -462,7 +462,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
} }
return buildErrorNamedReference { return buildErrorNamedReference {
source = left.getSourceOrNull() source = left.getSourceOrNull()
diagnostic = FirSimpleDiagnostic("Unsupported LValue: $tokenType", DiagnosticKind.Syntax) diagnostic = ConeSimpleDiagnostic("Unsupported LValue: $tokenType", DiagnosticKind.Syntax)
} }
} }
@@ -497,7 +497,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
argumentList = buildBinaryArgumentList( argumentList = buildBinaryArgumentList(
this@generateAssignment?.convert() ?: buildErrorExpression { this@generateAssignment?.convert() ?: buildErrorExpression {
source = null source = null
diagnostic = FirSimpleDiagnostic("Unsupported left value of assignment: ${baseSource?.psi?.text}", DiagnosticKind.Syntax) diagnostic = ConeSimpleDiagnostic("Unsupported left value of assignment: ${baseSource?.psi?.text}", DiagnosticKind.Syntax)
}, },
value value
) )
@@ -543,7 +543,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
argumentList = buildArgumentList { argumentList = buildArgumentList {
arguments += rhs?.convert() ?: buildErrorExpression( arguments += rhs?.convert() ?: buildErrorExpression(
null, null,
FirSimpleDiagnostic("No value for array set", DiagnosticKind.Syntax) ConeSimpleDiagnostic("No value for array set", DiagnosticKind.Syntax)
) )
} }
} }
@@ -574,7 +574,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
"<array>", "<array>",
baseCall.explicitReceiver ?: buildErrorExpression { baseCall.explicitReceiver ?: buildErrorExpression {
source = baseSource source = baseSource
diagnostic = FirSimpleDiagnostic("No receiver for array access", DiagnosticKind.Syntax) diagnostic = ConeSimpleDiagnostic("No receiver for array access", DiagnosticKind.Syntax)
} }
) )
statements += arrayVariable statements += arrayVariable
@@ -613,7 +613,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
argumentList = buildArgumentList { argumentList = buildArgumentList {
arguments += rhs?.convert() ?: buildErrorExpression( arguments += rhs?.convert() ?: buildErrorExpression(
null, null,
FirSimpleDiagnostic( ConeSimpleDiagnostic(
"No value for array set", "No value for array set",
DiagnosticKind.Syntax DiagnosticKind.Syntax
) )
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.* import org.jetbrains.kotlin.fir.expressions.builder.*
import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock
@@ -228,7 +228,7 @@ internal fun KtWhenCondition.toFirWhenCondition(
} }
} }
else -> { else -> {
buildErrorExpression(baseSource, FirSimpleDiagnostic("Unsupported when condition: ${this.javaClass}", DiagnosticKind.Syntax)) buildErrorExpression(baseSource, ConeSimpleDiagnostic("Unsupported when condition: ${this.javaClass}", DiagnosticKind.Syntax))
} }
} }
} }
@@ -19,8 +19,8 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticWithParameters1 import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnosticWithParameters1
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.* import org.jetbrains.kotlin.fir.expressions.builder.*
import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess import org.jetbrains.kotlin.fir.expressions.impl.FirModifiableQualifiedAccess
@@ -126,7 +126,7 @@ class RawFirBuilder(
private fun KtTypeReference?.toFirOrErrorType(): FirTypeRef = private fun KtTypeReference?.toFirOrErrorType(): FirTypeRef =
convertSafe() ?: buildErrorTypeRef { convertSafe() ?: buildErrorTypeRef {
source = this@toFirOrErrorType?.toFirSourceElement() source = this@toFirOrErrorType?.toFirSourceElement()
diagnostic = FirSimpleDiagnostic( diagnostic = ConeSimpleDiagnostic(
if (this@toFirOrErrorType == null) "Incomplete code" else "Conversion failed", DiagnosticKind.Syntax if (this@toFirOrErrorType == null) "Incomplete code" else "Conversion failed", DiagnosticKind.Syntax
) )
} }
@@ -136,18 +136,18 @@ class RawFirBuilder(
if (stubMode) buildExpressionStub() if (stubMode) buildExpressionStub()
else with(this()) { else with(this()) {
convertSafe() ?: buildErrorExpression( convertSafe() ?: buildErrorExpression(
this?.toFirSourceElement(), FirSimpleDiagnostic(errorReason, DiagnosticKind.Syntax), this?.toFirSourceElement(), ConeSimpleDiagnostic(errorReason, DiagnosticKind.Syntax),
) )
} }
private fun KtExpression?.toFirExpression(errorReason: String): FirExpression = private fun KtExpression?.toFirExpression(errorReason: String): FirExpression =
if (stubMode) buildExpressionStub() if (stubMode) buildExpressionStub()
else convertSafe() ?: buildErrorExpression( else convertSafe() ?: buildErrorExpression(
this?.toFirSourceElement(), FirSimpleDiagnostic(errorReason, DiagnosticKind.Syntax), this?.toFirSourceElement(), ConeSimpleDiagnostic(errorReason, DiagnosticKind.Syntax),
) )
private fun KtExpression.toFirStatement(errorReason: String): FirStatement = private fun KtExpression.toFirStatement(errorReason: String): FirStatement =
convertSafe() ?: buildErrorExpression(this.toFirSourceElement(), FirSimpleDiagnostic(errorReason, DiagnosticKind.Syntax)) convertSafe() ?: buildErrorExpression(this.toFirSourceElement(), ConeSimpleDiagnostic(errorReason, DiagnosticKind.Syntax))
private fun KtExpression.toFirStatement(): FirStatement = private fun KtExpression.toFirStatement(): FirStatement =
convert() convert()
@@ -161,7 +161,7 @@ class RawFirBuilder(
delegatedSuperType, delegatedSuperType,
delegatedSelfType ?: buildErrorTypeRef { delegatedSelfType ?: buildErrorTypeRef {
source = this@toFirDeclaration.toFirSourceElement() source = this@toFirDeclaration.toFirSourceElement()
diagnostic = FirSimpleDiagnostic("Constructor in object", DiagnosticKind.ConstructorInObject) diagnostic = ConeSimpleDiagnostic("Constructor in object", DiagnosticKind.ConstructorInObject)
}, },
owner, owner,
hasPrimaryConstructor, hasPrimaryConstructor,
@@ -209,7 +209,7 @@ class RawFirBuilder(
if (this == null) { if (this == null) {
return buildErrorExpression( return buildErrorExpression(
(this as? KtElement)?.toFirSourceElement(), (this as? KtElement)?.toFirSourceElement(),
FirSimpleDiagnostic("No argument given", DiagnosticKind.Syntax), ConeSimpleDiagnostic("No argument given", DiagnosticKind.Syntax),
) )
} }
val name = this.getArgumentName()?.asName val name = this.getArgumentName()?.asName
@@ -846,7 +846,7 @@ class RawFirBuilder(
} }
val ktBody = literal.bodyExpression val ktBody = literal.bodyExpression
body = if (ktBody == null) { body = if (ktBody == null) {
val errorExpression = buildErrorExpression(source, FirSimpleDiagnostic("Lambda has no body", DiagnosticKind.Syntax)) val errorExpression = buildErrorExpression(source, ConeSimpleDiagnostic("Lambda has no body", DiagnosticKind.Syntax))
FirSingleExpressionBlock(errorExpression.toReturn()) FirSingleExpressionBlock(errorExpression.toReturn())
} else { } else {
configureBlockWithoutBuilding(ktBody).apply { configureBlockWithoutBuilding(ktBody).apply {
@@ -909,7 +909,7 @@ class RawFirBuilder(
isThis -> delegatedSelfTypeRef isThis -> delegatedSelfTypeRef
else -> delegatedSuperTypeRef ?: buildErrorTypeRef { else -> delegatedSuperTypeRef ?: buildErrorTypeRef {
this.source = source this.source = source
diagnostic = FirSimpleDiagnostic("No super type", DiagnosticKind.Syntax) diagnostic = ConeSimpleDiagnostic("No super type", DiagnosticKind.Syntax)
} }
} }
return buildDelegatedConstructorCall { return buildDelegatedConstructorCall {
@@ -1034,7 +1034,7 @@ class RawFirBuilder(
} else { } else {
FirErrorTypeRefBuilder().apply { FirErrorTypeRefBuilder().apply {
this.source = source this.source = source
diagnostic = FirSimpleDiagnostic("Incomplete user type", DiagnosticKind.Syntax) diagnostic = ConeSimpleDiagnostic("Incomplete user type", DiagnosticKind.Syntax)
} }
} }
} }
@@ -1055,7 +1055,7 @@ class RawFirBuilder(
} }
null -> FirErrorTypeRefBuilder().apply { null -> FirErrorTypeRefBuilder().apply {
this.source = source this.source = source
diagnostic = FirSimpleDiagnostic("Unwrapped type is null", DiagnosticKind.Syntax) diagnostic = ConeSimpleDiagnostic("Unwrapped type is null", DiagnosticKind.Syntax)
} }
else -> throw AssertionError("Unexpected type element: ${unwrappedElement.text}") else -> throw AssertionError("Unexpected type element: ${unwrappedElement.text}")
} }
@@ -1487,13 +1487,13 @@ class RawFirBuilder(
is KtParenthesizedExpression -> splitToCalleeAndReceiver(calleeExpression.expression, defaultSource) is KtParenthesizedExpression -> splitToCalleeAndReceiver(calleeExpression.expression, defaultSource)
null -> { null -> {
buildErrorNamedReference { diagnostic = FirSimpleDiagnostic("Call has no callee", DiagnosticKind.Syntax) } to null buildErrorNamedReference { diagnostic = ConeSimpleDiagnostic("Call has no callee", DiagnosticKind.Syntax) } to null
} }
is KtSuperExpression -> { is KtSuperExpression -> {
buildErrorNamedReference { buildErrorNamedReference {
source = calleeExpression.toFirSourceElement() source = calleeExpression.toFirSourceElement()
diagnostic = FirDiagnosticWithParameters1("Super cannot be a callee", calleeExpression.text, DiagnosticKind.SuperNotAllowed) diagnostic = ConeSimpleDiagnosticWithParameters1("Super cannot be a callee", calleeExpression.text, DiagnosticKind.SuperNotAllowed)
} to null } to null
} }
@@ -1566,7 +1566,7 @@ class RawFirBuilder(
override fun visitQualifiedExpression(expression: KtQualifiedExpression, data: Unit): FirElement { override fun visitQualifiedExpression(expression: KtQualifiedExpression, data: Unit): FirElement {
val selector = expression.selectorExpression val selector = expression.selectorExpression
?: return buildErrorExpression( ?: return buildErrorExpression(
expression.toFirSourceElement(), FirSimpleDiagnostic("Qualified expression without selector", DiagnosticKind.Syntax), expression.toFirSourceElement(), ConeSimpleDiagnostic("Qualified expression without selector", DiagnosticKind.Syntax),
) )
val firSelector = selector.toFirExpression("Incorrect selector expression") val firSelector = selector.toFirExpression("Incorrect selector expression")
if (firSelector is FirModifiableQualifiedAccess) { if (firSelector is FirModifiableQualifiedAccess) {
@@ -1601,7 +1601,7 @@ class RawFirBuilder(
override fun visitParenthesizedExpression(expression: KtParenthesizedExpression, data: Unit): FirElement { override fun visitParenthesizedExpression(expression: KtParenthesizedExpression, data: Unit): FirElement {
return expression.expression?.accept(this, data) return expression.expression?.accept(this, data)
?: buildErrorExpression(expression.toFirSourceElement(), FirSimpleDiagnostic("Empty parentheses", DiagnosticKind.Syntax)) ?: buildErrorExpression(expression.toFirSourceElement(), ConeSimpleDiagnostic("Empty parentheses", DiagnosticKind.Syntax))
} }
override fun visitLabeledExpression(expression: KtLabeledExpression, data: Unit): FirElement { override fun visitLabeledExpression(expression: KtLabeledExpression, data: Unit): FirElement {
@@ -1615,7 +1615,7 @@ class RawFirBuilder(
} }
} }
val result = expression.baseExpression?.accept(this, data) val result = expression.baseExpression?.accept(this, data)
?: buildErrorExpression(sourceElement, FirSimpleDiagnostic("Empty label", DiagnosticKind.Syntax)) ?: buildErrorExpression(sourceElement, ConeSimpleDiagnostic("Empty label", DiagnosticKind.Syntax))
if (size != context.firLabels.size) { if (size != context.firLabels.size) {
context.firLabels.removeLast() context.firLabels.removeLast()
println("Unused label: ${expression.text}") println("Unused label: ${expression.text}")
@@ -1633,7 +1633,7 @@ class RawFirBuilder(
val result = rawResult as? FirAnnotationContainer val result = rawResult as? FirAnnotationContainer
?: return buildErrorExpression( ?: return buildErrorExpression(
expression.toFirSourceElement(), expression.toFirSourceElement(),
FirSimpleDiagnostic("Strange annotated expression: ${rawResult?.render()}", DiagnosticKind.Syntax), ConeSimpleDiagnostic("Strange annotated expression: ${rawResult?.render()}", DiagnosticKind.Syntax),
) )
expression.extractAnnotationsTo(result.annotations as MutableList<FirAnnotationCall>) expression.extractAnnotationsTo(result.annotations as MutableList<FirAnnotationCall>)
return result return result
@@ -20,9 +20,9 @@ import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference import org.jetbrains.kotlin.fir.references.impl.FirSimpleNamedReference
import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.resolve.calls.* import org.jetbrains.kotlin.fir.resolve.calls.*
import org.jetbrains.kotlin.fir.resolve.diagnostics.FirAmbiguityError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError
import org.jetbrains.kotlin.fir.resolve.diagnostics.FirInapplicableCandidateError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError
import org.jetbrains.kotlin.fir.resolve.diagnostics.FirUnresolvedNameError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedNameError
import org.jetbrains.kotlin.fir.resolve.inference.ResolvedCallableReferenceAtom import org.jetbrains.kotlin.fir.resolve.inference.ResolvedCallableReferenceAtom
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.transformers.StoreNameReference import org.jetbrains.kotlin.fir.resolve.transformers.StoreNameReference
@@ -392,15 +392,15 @@ class FirCallResolver(
return when { return when {
candidates.isEmpty() -> buildErrorNamedReference { candidates.isEmpty() -> buildErrorNamedReference {
this.source = source this.source = source
diagnostic = FirUnresolvedNameError(name) diagnostic = ConeUnresolvedNameError(name)
} }
applicability < CandidateApplicability.SYNTHETIC_RESOLVED -> { applicability < CandidateApplicability.SYNTHETIC_RESOLVED -> {
buildErrorNamedReference { buildErrorNamedReference {
this.source = source this.source = source
diagnostic = FirInapplicableCandidateError( diagnostic = ConeInapplicableCandidateError(
applicability, applicability,
candidates.map { candidates.map {
FirInapplicableCandidateError.CandidateInfo( ConeInapplicableCandidateError.CandidateInfo(
it.symbol, it.symbol,
if (it.systemInitialized) it.system.diagnostics else emptyList(), if (it.systemInitialized) it.system.diagnostics else emptyList(),
) )
@@ -432,7 +432,7 @@ class FirCallResolver(
} }
else -> buildErrorNamedReference { else -> buildErrorNamedReference {
this.source = source this.source = source
diagnostic = FirAmbiguityError(name, candidates.map { it.symbol }) diagnostic = ConeAmbiguityError(name, candidates.map { it.symbol })
} }
} }
} }
@@ -11,13 +11,13 @@ import org.jetbrains.kotlin.fir.declarations.FirConstructor
import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.collectEnumEntries import org.jetbrains.kotlin.fir.declarations.collectEnumEntries
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.* import org.jetbrains.kotlin.fir.expressions.builder.*
import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
import org.jetbrains.kotlin.fir.resolve.constructType import org.jetbrains.kotlin.fir.resolve.constructType
import org.jetbrains.kotlin.fir.resolve.diagnostics.FirUnresolvedSymbolError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedSymbolError
import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
@@ -100,7 +100,7 @@ abstract class AbstractAnnotationDeserializer(
buildResolvedTypeRef { buildResolvedTypeRef {
type = it.constructType(emptyList(), isNullable = false) type = it.constructType(emptyList(), isNullable = false)
} }
} ?: buildErrorTypeRef { diagnostic =FirUnresolvedSymbolError(classId) } } ?: buildErrorTypeRef { diagnostic = ConeUnresolvedSymbolError(classId) }
argumentList = buildArgumentList { argumentList = buildArgumentList {
this.arguments += arguments this.arguments += arguments
} }
@@ -151,7 +151,7 @@ abstract class AbstractAnnotationDeserializer(
resolvedSymbol = it.symbol resolvedSymbol = it.symbol
} }
} ?: buildErrorNamedReference { } ?: buildErrorNamedReference {
diagnostic = FirSimpleDiagnostic("Strange deserialized enum value: $classId.$entryName", DiagnosticKind.DeserializationError) diagnostic = ConeSimpleDiagnostic("Strange deserialized enum value: $classId.$entryName", DiagnosticKind.DeserializationError)
} }
} }
// ARRAY -> { // ARRAY -> {
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor
import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.diagnostics.FirStubDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeStubDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.expressions.FirResolvable import org.jetbrains.kotlin.fir.expressions.FirResolvable
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.fir.references.FirSuperReference
import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.FirThisReference
import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate
import org.jetbrains.kotlin.fir.resolve.calls.isSuperReferenceExpression import org.jetbrains.kotlin.fir.resolve.calls.isSuperReferenceExpression
import org.jetbrains.kotlin.fir.resolve.diagnostics.FirUnresolvedNameError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedNameError
import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType
import org.jetbrains.kotlin.fir.scopes.impl.FirDeclaredMemberScopeProvider import org.jetbrains.kotlin.fir.scopes.impl.FirDeclaredMemberScopeProvider
@@ -308,7 +308,7 @@ fun <T : FirResolvable> BodyResolveComponents.typeFromCallee(access: T): FirReso
is FirErrorNamedReference -> is FirErrorNamedReference ->
buildErrorTypeRef { buildErrorTypeRef {
source = access.source source = access.source
diagnostic = FirStubDiagnostic(newCallee.diagnostic) diagnostic = ConeStubDiagnostic(newCallee.diagnostic)
} }
is FirNamedReferenceWithCandidate -> { is FirNamedReferenceWithCandidate -> {
typeFromSymbol(newCallee.candidateSymbol, makeNullable) typeFromSymbol(newCallee.candidateSymbol, makeNullable)
@@ -327,7 +327,7 @@ fun <T : FirResolvable> BodyResolveComponents.typeFromCallee(access: T): FirReso
is FirSuperReference -> { is FirSuperReference -> {
newCallee.superTypeRef as? FirResolvedTypeRef ?: buildErrorTypeRef { newCallee.superTypeRef as? FirResolvedTypeRef ?: buildErrorTypeRef {
source = newCallee.source source = newCallee.source
diagnostic = FirUnresolvedNameError(Name.identifier("super")) diagnostic = ConeUnresolvedNameError(Name.identifier("super"))
} }
} }
else -> error("Failed to extract type from: $newCallee") else -> error("Failed to extract type from: $newCallee")
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.fir.resolve.diagnostics package org.jetbrains.kotlin.fir.resolve.diagnostics
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.resolve.calls.CandidateApplicability import org.jetbrains.kotlin.fir.resolve.calls.CandidateApplicability
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
@@ -15,40 +15,40 @@ import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.calls.model.KotlinCallDiagnostic import org.jetbrains.kotlin.resolve.calls.model.KotlinCallDiagnostic
class FirUnresolvedReferenceError(val name: Name? = null) : FirDiagnostic() { class ConeUnresolvedReferenceError(val name: Name? = null) : ConeDiagnostic() {
override val reason: String get() = "Unresolved reference" + if (name != null) ": ${name.asString()}" else "" override val reason: String get() = "Unresolved reference" + if (name != null) ": ${name.asString()}" else ""
} }
class FirUnresolvedSymbolError(val classId: ClassId) : FirDiagnostic() { class ConeUnresolvedSymbolError(val classId: ClassId) : ConeDiagnostic() {
override val reason: String get() = "Symbol not found for $classId" override val reason: String get() = "Symbol not found for $classId"
} }
class FirUnresolvedNameError(val name: Name) : FirDiagnostic() { class ConeUnresolvedNameError(val name: Name) : ConeDiagnostic() {
override val reason: String get() = "Unresolved name: $name" override val reason: String get() = "Unresolved name: $name"
} }
class FirInapplicableCandidateError( class ConeInapplicableCandidateError(
val applicability: CandidateApplicability, val applicability: CandidateApplicability,
val candidates: Collection<CandidateInfo> val candidates: Collection<CandidateInfo>
) : FirDiagnostic() { ) : ConeDiagnostic() {
data class CandidateInfo(val symbol: AbstractFirBasedSymbol<*>, val diagnostics: List<KotlinCallDiagnostic>) data class CandidateInfo(val symbol: AbstractFirBasedSymbol<*>, val diagnostics: List<KotlinCallDiagnostic>)
override val reason: String get() = "Inapplicable($applicability): ${candidates.map { describeSymbol(it.symbol) }}" override val reason: String get() = "Inapplicable($applicability): ${candidates.map { describeSymbol(it.symbol) }}"
} }
class FirAmbiguityError(val name: Name, val candidates: Collection<AbstractFirBasedSymbol<*>>) : FirDiagnostic() { class ConeAmbiguityError(val name: Name, val candidates: Collection<AbstractFirBasedSymbol<*>>) : ConeDiagnostic() {
override val reason: String get() = "Ambiguity: $name, ${candidates.map { describeSymbol(it) }}" override val reason: String get() = "Ambiguity: $name, ${candidates.map { describeSymbol(it) }}"
} }
class FirOperatorAmbiguityError(val candidates: Collection<AbstractFirBasedSymbol<*>>) : FirDiagnostic() { class ConeOperatorAmbiguityError(val candidates: Collection<AbstractFirBasedSymbol<*>>) : ConeDiagnostic() {
override val reason: String get() = "Operator overload ambiguity. Compatible candidates: ${candidates.map { describeSymbol(it) }}" override val reason: String get() = "Operator overload ambiguity. Compatible candidates: ${candidates.map { describeSymbol(it) }}"
} }
class FirVariableExpectedError : FirDiagnostic() { class ConeVariableExpectedError : ConeDiagnostic() {
override val reason: String get() = "Variable expected" override val reason: String get() = "Variable expected"
} }
class FirTypeMismatchError(val expectedType: ConeKotlinType, val actualType: ConeKotlinType) : FirDiagnostic() { class ConeTypeMismatchError(val expectedType: ConeKotlinType, val actualType: ConeKotlinType) : ConeDiagnostic() {
override val reason: String override val reason: String
get() = "Type mismatch. Expected: $expectedType, Actual: $actualType" get() = "Type mismatch. Expected: $expectedType, Actual: $actualType"
} }
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference
import org.jetbrains.kotlin.fir.resolve.calls.* import org.jetbrains.kotlin.fir.resolve.calls.*
import org.jetbrains.kotlin.fir.resolve.diagnostics.FirUnresolvedReferenceError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedReferenceError
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
import org.jetbrains.kotlin.fir.resolve.transformers.StoreNameReference import org.jetbrains.kotlin.fir.resolve.transformers.StoreNameReference
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -81,7 +81,7 @@ class PostponedArgumentsAnalyzer(
candidate == null || applicability < CandidateApplicability.SYNTHETIC_RESOLVED -> candidate == null || applicability < CandidateApplicability.SYNTHETIC_RESOLVED ->
buildErrorNamedReference { buildErrorNamedReference {
source = callableReferenceAccess.source source = callableReferenceAccess.source
diagnostic = FirUnresolvedReferenceError(callableReferenceAccess.calleeReference.name) diagnostic = ConeUnresolvedReferenceError(callableReferenceAccess.calleeReference.name)
} }
else -> FirNamedReferenceWithCandidate(callableReferenceAccess.source, callableReferenceAccess.calleeReference.name, candidate) else -> FirNamedReferenceWithCandidate(callableReferenceAccess.source, callableReferenceAccess.calleeReference.name, candidate)
} }
@@ -7,9 +7,8 @@ package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.buildArgumentList
import org.jetbrains.kotlin.fir.expressions.builder.buildVarargArgumentsExpression import org.jetbrains.kotlin.fir.expressions.builder.buildVarargArgumentsExpression
import org.jetbrains.kotlin.fir.references.builder.buildResolvedCallableReference import org.jetbrains.kotlin.fir.references.builder.buildResolvedCallableReference
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
@@ -62,7 +61,7 @@ class FirCallCompletionResultsWriterTransformer(
typeCalculator.tryCalculateReturnType(it) typeCalculator.tryCalculateReturnType(it)
} ?: buildErrorTypeRef { } ?: buildErrorTypeRef {
source = calleeReference.source source = calleeReference.source
diagnostic = FirSimpleDiagnostic("Callee reference to candidate without return type: ${candidateFir.render()}") diagnostic = ConeSimpleDiagnostic("Callee reference to candidate without return type: ${candidateFir.render()}")
} }
qualifiedAccessExpression.replaceTypeRefWithSubstituted(calleeReference, typeRef).replaceTypeArguments(typeArguments) qualifiedAccessExpression.replaceTypeRefWithSubstituted(calleeReference, typeRef).replaceTypeArguments(typeArguments)
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.*
import org.jetbrains.kotlin.fir.scopes.FirIterableScope import org.jetbrains.kotlin.fir.scopes.FirIterableScope
@@ -266,7 +266,7 @@ private class FirSupertypeResolverVisitor(
private fun createErrorTypeRef(fir: FirElement, message: String) = buildErrorTypeRef { private fun createErrorTypeRef(fir: FirElement, message: String) = buildErrorTypeRef {
source = fir.source source = fir.source
diagnostic = FirSimpleDiagnostic(message) diagnostic = ConeSimpleDiagnostic(message)
} }
private class SupertypeComputationSession { private class SupertypeComputationSession {
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirStubReference import org.jetbrains.kotlin.fir.references.impl.FirStubReference
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
import org.jetbrains.kotlin.fir.resolve.calls.* import org.jetbrains.kotlin.fir.resolve.calls.*
import org.jetbrains.kotlin.fir.resolve.diagnostics.FirUnresolvedNameError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedNameError
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirAbstractBodyResolveTransformer
import org.jetbrains.kotlin.fir.symbols.CallableId import org.jetbrains.kotlin.fir.symbols.CallableId
import org.jetbrains.kotlin.fir.symbols.SyntheticCallableId import org.jetbrains.kotlin.fir.symbols.SyntheticCallableId
@@ -114,7 +114,7 @@ class FirSyntheticCallGenerator(
StoreCalleeReference, StoreCalleeReference,
buildErrorNamedReference { buildErrorNamedReference {
source = callableReferenceAccess.source source = callableReferenceAccess.source
diagnostic = FirUnresolvedNameError(callableReferenceAccess.calleeReference.name) diagnostic = ConeUnresolvedNameError(callableReferenceAccess.calleeReference.name)
} }
) )
val fakeCallElement = buildFunctionCall { val fakeCallElement = buildFunctionCall {
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration import org.jetbrains.kotlin.fir.declarations.FirTypedDeclaration
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
@@ -23,7 +23,7 @@ class ReturnTypeCalculatorForFullBodyResolve : ReturnTypeCalculator {
if (returnTypeRef is FirResolvedTypeRef) return returnTypeRef if (returnTypeRef is FirResolvedTypeRef) return returnTypeRef
return buildErrorTypeRef { return buildErrorTypeRef {
diagnostic = FirSimpleDiagnostic( diagnostic = ConeSimpleDiagnostic(
"Cannot calculate return type during full-body resolution (local class/object?): ${declaration.render()}", "Cannot calculate return type during full-body resolution (local class/object?): ${declaration.render()}",
DiagnosticKind.InferenceError DiagnosticKind.InferenceError
) )
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers.body.resolve
import org.jetbrains.kotlin.fir.FirTargetElement import org.jetbrains.kotlin.fir.FirTargetElement
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyExpressionBlock import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyExpressionBlock
@@ -17,7 +17,6 @@ import org.jetbrains.kotlin.fir.resolve.transformers.FirSyntheticCallGenerator
import org.jetbrains.kotlin.fir.resolve.transformers.FirWhenExhaustivenessTransformer import org.jetbrains.kotlin.fir.resolve.transformers.FirWhenExhaustivenessTransformer
import org.jetbrains.kotlin.fir.resolvedTypeFromPrototype import org.jetbrains.kotlin.fir.resolvedTypeFromPrototype
import org.jetbrains.kotlin.fir.scopes.impl.FirLocalScope import org.jetbrains.kotlin.fir.scopes.impl.FirLocalScope
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
import org.jetbrains.kotlin.fir.types.coneTypeSafe import org.jetbrains.kotlin.fir.types.coneTypeSafe
@@ -77,7 +76,7 @@ class FirControlFlowStatementsResolveTransformer(transformer: FirBodyResolveTran
whenExpression = whenExpression.transformSingle(whenExhaustivenessTransformer, null) whenExpression = whenExpression.transformSingle(whenExhaustivenessTransformer, null)
dataFlowAnalyzer.exitWhenExpression(whenExpression, callCompleted = true) dataFlowAnalyzer.exitWhenExpression(whenExpression, callCompleted = true)
whenExpression.resultType = buildErrorTypeRef { whenExpression.resultType = buildErrorTypeRef {
diagnostic = FirSimpleDiagnostic("Can't resolve when expression", DiagnosticKind.InferenceError) diagnostic = ConeSimpleDiagnostic("Can't resolve when expression", DiagnosticKind.InferenceError)
} }
return@with whenExpression.compose() return@with whenExpression.compose()
} }
@@ -150,7 +149,7 @@ class FirControlFlowStatementsResolveTransformer(transformer: FirBodyResolveTran
completionResult.result completionResult.result
} ?: run { } ?: run {
tryExpression.resultType = buildErrorTypeRef { tryExpression.resultType = buildErrorTypeRef {
diagnostic = FirSimpleDiagnostic("Can't resolve try expression", DiagnosticKind.InferenceError) diagnostic = ConeSimpleDiagnostic("Can't resolve try expression", DiagnosticKind.InferenceError)
} }
callCompleted = true callCompleted = true
tryExpression tryExpression
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.fir.declarations.builder.buildValueParameter
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.buildReturnExpression import org.jetbrains.kotlin.fir.expressions.builder.buildReturnExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildUnitExpression import org.jetbrains.kotlin.fir.expressions.builder.buildUnitExpression
@@ -428,7 +428,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
} else { } else {
result.transformReturnTypeRef( result.transformReturnTypeRef(
transformer, transformer,
withExpectedType(buildErrorTypeRef { diagnostic = FirSimpleDiagnostic("empty body", DiagnosticKind.Other) }) withExpectedType(buildErrorTypeRef { diagnostic = ConeSimpleDiagnostic("empty body", DiagnosticKind.Other) })
) )
} }
} }
@@ -646,7 +646,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
initializer != null -> { initializer != null -> {
val expectedType = when (val resultType = initializer.resultType) { val expectedType = when (val resultType = initializer.resultType) {
is FirImplicitTypeRef -> buildErrorTypeRef { is FirImplicitTypeRef -> buildErrorTypeRef {
diagnostic = FirSimpleDiagnostic("No result type for initializer", DiagnosticKind.InferenceError) diagnostic = ConeSimpleDiagnostic("No result type for initializer", DiagnosticKind.InferenceError)
} }
else -> resultType else -> resultType
} }
@@ -658,7 +658,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
variable.getter != null && variable.getter !is FirDefaultPropertyAccessor -> { variable.getter != null && variable.getter !is FirDefaultPropertyAccessor -> {
val expectedType = when (val resultType = variable.getter?.returnTypeRef) { val expectedType = when (val resultType = variable.getter?.returnTypeRef) {
is FirImplicitTypeRef -> buildErrorTypeRef { is FirImplicitTypeRef -> buildErrorTypeRef {
diagnostic = FirSimpleDiagnostic("No result type for getter", DiagnosticKind.InferenceError) diagnostic = ConeSimpleDiagnostic("No result type for getter", DiagnosticKind.InferenceError)
} }
else -> resultType else -> resultType
} }
@@ -672,7 +672,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer)
transformer, transformer,
withExpectedType( withExpectedType(
buildErrorTypeRef { buildErrorTypeRef {
diagnostic = FirSimpleDiagnostic( diagnostic = ConeSimpleDiagnostic(
"Cannot infer variable type without initializer / getter / delegate", "Cannot infer variable type without initializer / getter / delegate",
DiagnosticKind.InferenceError, DiagnosticKind.InferenceError,
) )
@@ -9,7 +9,7 @@ import com.intellij.openapi.progress.ProcessCanceledException
import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.*
import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner import org.jetbrains.kotlin.fir.declarations.FirTypeParametersOwner
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.builder.buildErrorExpression import org.jetbrains.kotlin.fir.expressions.builder.buildErrorExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildFunctionCall import org.jetbrains.kotlin.fir.expressions.builder.buildFunctionCall
@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.fir.resolve.transformers.InvocationKindTransformer
import org.jetbrains.kotlin.fir.resolve.transformers.StoreReceiver import org.jetbrains.kotlin.fir.resolve.transformers.StoreReceiver
import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType
import org.jetbrains.kotlin.fir.symbols.StandardClassIds import org.jetbrains.kotlin.fir.symbols.StandardClassIds
import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLookupTagWithFixedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
import org.jetbrains.kotlin.fir.symbols.invoke import org.jetbrains.kotlin.fir.symbols.invoke
@@ -52,7 +51,7 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
val type = buildErrorTypeRef { val type = buildErrorTypeRef {
source = expression.source source = expression.source
diagnostic = diagnostic =
FirSimpleDiagnostic("Type calculating for ${expression::class} is not supported", DiagnosticKind.InferenceError) ConeSimpleDiagnostic("Type calculating for ${expression::class} is not supported", DiagnosticKind.InferenceError)
} }
expression.resultType = type expression.resultType = type
} }
@@ -94,7 +93,7 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
superTypeRefs?.isNotEmpty() != true -> { superTypeRefs?.isNotEmpty() != true -> {
buildErrorTypeRef { buildErrorTypeRef {
source = qualifiedAccessExpression.source source = qualifiedAccessExpression.source
diagnostic = FirSimpleDiagnostic("No super type", DiagnosticKind.NoSupertype) diagnostic = ConeSimpleDiagnostic("No super type", DiagnosticKind.NoSupertype)
} }
} }
superTypeRefs.size == 1 -> { superTypeRefs.size == 1 -> {
@@ -210,7 +209,7 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
block.resultType.resolvedTypeFromPrototype(session.builtinTypes.unitType.type) block.resultType.resolvedTypeFromPrototype(session.builtinTypes.unitType.type)
} else { } else {
(resultExpression.resultType as? FirResolvedTypeRef) ?: buildErrorTypeRef { (resultExpression.resultType as? FirResolvedTypeRef) ?: buildErrorTypeRef {
diagnostic = FirSimpleDiagnostic("No type for block", DiagnosticKind.InferenceError) diagnostic = ConeSimpleDiagnostic("No type for block", DiagnosticKind.InferenceError)
} }
} }
dataFlowAnalyzer.exitBlock(block) dataFlowAnalyzer.exitBlock(block)
@@ -290,14 +289,14 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
else else
buildErrorNamedReference { buildErrorNamedReference {
source = operatorCall.argument.source source = operatorCall.argument.source
diagnostic = FirVariableExpectedError() diagnostic = ConeVariableExpectedError()
} }
} }
assignment.transform(transformer, ResolutionMode.ContextIndependent) assignment.transform(transformer, ResolutionMode.ContextIndependent)
} }
else -> buildErrorExpression { else -> buildErrorExpression {
source = operatorCall.source source = operatorCall.source
diagnostic = FirOperatorAmbiguityError(listOf(operatorCallReference.resolvedSymbol, assignCallReference.resolvedSymbol)) diagnostic = ConeOperatorAmbiguityError(listOf(operatorCallReference.resolvedSymbol, assignCallReference.resolvedSymbol))
}.compose() }.compose()
} }
} }
@@ -383,7 +382,7 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
} ?: run { } ?: run {
checkNotNullCall.resultType = checkNotNullCall.resultType =
buildErrorTypeRef { buildErrorTypeRef {
diagnostic = FirSimpleDiagnostic("Can't resolve !! operator call", DiagnosticKind.InferenceError) diagnostic = ConeSimpleDiagnostic("Can't resolve !! operator call", DiagnosticKind.InferenceError)
} }
callCompleted = true callCompleted = true
checkNotNullCall checkNotNullCall
@@ -532,7 +531,7 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
dataFlowAnalyzer.exitConstExpresion(constExpression as FirConstExpression<*>) dataFlowAnalyzer.exitConstExpresion(constExpression as FirConstExpression<*>)
constExpression.resultType = buildErrorTypeRef { constExpression.resultType = buildErrorTypeRef {
source = constExpression.source source = constExpression.source
diagnostic = FirTypeMismatchError(expectedType, integerLiteralType.getApproximatedType()) diagnostic = ConeTypeMismatchError(expectedType, integerLiteralType.getApproximatedType())
} }
return constExpression.compose() return constExpression.compose()
} }
@@ -671,7 +670,7 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
buildErrorNamedReference { buildErrorNamedReference {
// TODO: add better diagnostic // TODO: add better diagnostic
source = augmentedArraySetCall.source source = augmentedArraySetCall.source
diagnostic = FirAmbiguityError(operatorName, emptyList()) diagnostic = ConeAmbiguityError(operatorName, emptyList())
} }
) )
} }
@@ -683,7 +682,7 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
it.replaceCalleeReference( it.replaceCalleeReference(
buildErrorNamedReference { buildErrorNamedReference {
source = augmentedArraySetCall.source source = augmentedArraySetCall.source
diagnostic = FirUnresolvedNameError(operatorName) diagnostic = ConeUnresolvedNameError(operatorName)
} }
) )
} }
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.diagnostics.FirSimpleDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.ResolutionMode
@@ -155,7 +155,7 @@ private class ReturnTypeCalculatorWithJump(
declaration.transformReturnTypeRef( declaration.transformReturnTypeRef(
TransformImplicitType, TransformImplicitType,
buildErrorTypeRef { buildErrorTypeRef {
diagnostic = FirSimpleDiagnostic("Unsupported: implicit VP type") diagnostic = ConeSimpleDiagnostic("Unsupported: implicit VP type")
} }
) )
} }
@@ -168,7 +168,7 @@ private class ReturnTypeCalculatorWithJump(
return when (val status = implicitBodyResolveComputationSession.getStatus(declaration.symbol)) { return when (val status = implicitBodyResolveComputationSession.getStatus(declaration.symbol)) {
is ImplicitBodyResolveComputationStatus.Computed -> status.resolvedTypeRef is ImplicitBodyResolveComputationStatus.Computed -> status.resolvedTypeRef
is ImplicitBodyResolveComputationStatus.Computing -> is ImplicitBodyResolveComputationStatus.Computing ->
buildErrorTypeRef {diagnostic = FirSimpleDiagnostic("cycle", DiagnosticKind.RecursionInImplicitTypes) } buildErrorTypeRef {diagnostic = ConeSimpleDiagnostic("cycle", DiagnosticKind.RecursionInImplicitTypes) }
else -> computeReturnTypeRef(declaration) else -> computeReturnTypeRef(declaration)
} }
} }
@@ -187,7 +187,7 @@ private class ReturnTypeCalculatorWithJump(
if (file == null || outerClasses.any { it == null }) { if (file == null || outerClasses.any { it == null }) {
return buildErrorTypeRef { return buildErrorTypeRef {
diagnostic = FirSimpleDiagnostic( diagnostic = ConeSimpleDiagnostic(
"Cannot calculate return type (local class/object?)", "Cannot calculate return type (local class/object?)",
DiagnosticKind.InferenceError DiagnosticKind.InferenceError
) )
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.fir.FirPureAbstractElement import org.jetbrains.kotlin.fir.FirPureAbstractElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
@@ -33,7 +33,7 @@ abstract class FirErrorFunction : FirPureAbstractElement(), FirFunction<FirError
abstract override val controlFlowGraphReference: FirControlFlowGraphReference abstract override val controlFlowGraphReference: FirControlFlowGraphReference
abstract override val valueParameters: List<FirValueParameter> abstract override val valueParameters: List<FirValueParameter>
abstract override val body: FirBlock? abstract override val body: FirBlock?
abstract override val diagnostic: FirDiagnostic abstract override val diagnostic: ConeDiagnostic
abstract override val symbol: FirErrorFunctionSymbol abstract override val symbol: FirErrorFunctionSymbol
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorFunction(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorFunction(this, data)
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.declarations.impl.FirErrorFunctionImpl import org.jetbrains.kotlin.fir.declarations.impl.FirErrorFunctionImpl
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
@@ -38,7 +38,7 @@ class FirErrorFunctionBuilder : FirAnnotationContainerBuilder {
override val annotations: MutableList<FirAnnotationCall> = mutableListOf() override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
val typeParameters: MutableList<FirTypeParameter> = mutableListOf() val typeParameters: MutableList<FirTypeParameter> = mutableListOf()
val valueParameters: MutableList<FirValueParameter> = mutableListOf() val valueParameters: MutableList<FirValueParameter> = mutableListOf()
lateinit var diagnostic: FirDiagnostic lateinit var diagnostic: ConeDiagnostic
lateinit var symbol: FirErrorFunctionSymbol lateinit var symbol: FirErrorFunctionSymbol
override fun build(): FirErrorFunction { override fun build(): FirErrorFunction {
@@ -11,7 +11,7 @@ import org.jetbrains.kotlin.fir.declarations.FirErrorFunction
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
@@ -33,7 +33,7 @@ internal class FirErrorFunctionImpl(
override val annotations: MutableList<FirAnnotationCall>, override val annotations: MutableList<FirAnnotationCall>,
override val typeParameters: MutableList<FirTypeParameter>, override val typeParameters: MutableList<FirTypeParameter>,
override val valueParameters: MutableList<FirValueParameter>, override val valueParameters: MutableList<FirValueParameter>,
override val diagnostic: FirDiagnostic, override val diagnostic: ConeDiagnostic,
override val symbol: FirErrorFunctionSymbol, override val symbol: FirErrorFunctionSymbol,
) : FirErrorFunction() { ) : FirErrorFunction() {
override var returnTypeRef: FirTypeRef = FirErrorTypeRefImpl(null, diagnostic) override var returnTypeRef: FirTypeRef = FirErrorTypeRefImpl(null, diagnostic)
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.fir.visitors.*
interface FirDiagnosticHolder : FirElement { interface FirDiagnosticHolder : FirElement {
override val source: FirSourceElement? override val source: FirSourceElement?
val diagnostic: FirDiagnostic val diagnostic: ConeDiagnostic
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitDiagnosticHolder(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitDiagnosticHolder(this, data)
} }
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir.expressions package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -20,7 +20,7 @@ abstract class FirErrorExpression : FirExpression(), FirDiagnosticHolder {
abstract override val source: FirSourceElement? abstract override val source: FirSourceElement?
abstract override val typeRef: FirTypeRef abstract override val typeRef: FirTypeRef
abstract override val annotations: List<FirAnnotationCall> abstract override val annotations: List<FirAnnotationCall>
abstract override val diagnostic: FirDiagnostic abstract override val diagnostic: ConeDiagnostic
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorExpression(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorExpression(this, data)
} }
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.FirLabel import org.jetbrains.kotlin.fir.FirLabel
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -22,7 +22,7 @@ abstract class FirErrorLoop : FirLoop(), FirDiagnosticHolder {
abstract override val block: FirBlock abstract override val block: FirBlock
abstract override val condition: FirExpression abstract override val condition: FirExpression
abstract override val label: FirLabel? abstract override val label: FirLabel?
abstract override val diagnostic: FirDiagnostic abstract override val diagnostic: ConeDiagnostic
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorLoop(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorLoop(this, data)
@@ -9,7 +9,7 @@ import kotlin.contracts.*
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder import org.jetbrains.kotlin.fir.expressions.builder.FirExpressionBuilder
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.fir.visitors.*
@FirBuilderDsl @FirBuilderDsl
class FirErrorExpressionBuilder : FirAnnotationContainerBuilder, FirExpressionBuilder { class FirErrorExpressionBuilder : FirAnnotationContainerBuilder, FirExpressionBuilder {
override var source: FirSourceElement? = null override var source: FirSourceElement? = null
lateinit var diagnostic: FirDiagnostic lateinit var diagnostic: ConeDiagnostic
override fun build(): FirErrorExpression { override fun build(): FirErrorExpression {
return FirErrorExpressionImpl( return FirErrorExpressionImpl(
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.fir.FirLabel
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.expressions.FirErrorLoop import org.jetbrains.kotlin.fir.expressions.FirErrorLoop
@@ -29,7 +29,7 @@ class FirErrorLoopBuilder : FirAnnotationContainerBuilder {
override var source: FirSourceElement? = null override var source: FirSourceElement? = null
override val annotations: MutableList<FirAnnotationCall> = mutableListOf() override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
var label: FirLabel? = null var label: FirLabel? = null
lateinit var diagnostic: FirDiagnostic lateinit var diagnostic: ConeDiagnostic
override fun build(): FirErrorLoop { override fun build(): FirErrorLoop {
return FirErrorLoopImpl( return FirErrorLoopImpl(
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir.expressions.impl package org.jetbrains.kotlin.fir.expressions.impl
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirErrorExpression import org.jetbrains.kotlin.fir.expressions.FirErrorExpression
import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirErrorExpressionImpl( internal class FirErrorExpressionImpl(
override val source: FirSourceElement?, override val source: FirSourceElement?,
override val diagnostic: FirDiagnostic, override val diagnostic: ConeDiagnostic,
) : FirErrorExpression() { ) : FirErrorExpression() {
override var typeRef: FirTypeRef = FirErrorTypeRefImpl(source, diagnostic) override var typeRef: FirTypeRef = FirErrorTypeRefImpl(source, diagnostic)
override val annotations: List<FirAnnotationCall> get() = emptyList() override val annotations: List<FirAnnotationCall> get() = emptyList()
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.expressions.impl
import org.jetbrains.kotlin.fir.FirLabel import org.jetbrains.kotlin.fir.FirLabel
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.expressions.FirBlock import org.jetbrains.kotlin.fir.expressions.FirBlock
import org.jetbrains.kotlin.fir.expressions.FirErrorLoop import org.jetbrains.kotlin.fir.expressions.FirErrorLoop
@@ -24,7 +24,7 @@ internal class FirErrorLoopImpl(
override val source: FirSourceElement?, override val source: FirSourceElement?,
override val annotations: MutableList<FirAnnotationCall>, override val annotations: MutableList<FirAnnotationCall>,
override var label: FirLabel?, override var label: FirLabel?,
override val diagnostic: FirDiagnostic, override val diagnostic: ConeDiagnostic,
) : FirErrorLoop() { ) : FirErrorLoop() {
override var block: FirBlock = FirEmptyExpressionBlock() override var block: FirBlock = FirEmptyExpressionBlock()
override var condition: FirExpression = FirErrorExpressionImpl(source, diagnostic) override var condition: FirExpression = FirErrorExpressionImpl(source, diagnostic)
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir.references package org.jetbrains.kotlin.fir.references
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -21,7 +21,7 @@ abstract class FirErrorNamedReference : FirNamedReference(), FirDiagnosticHolder
abstract override val source: FirSourceElement? abstract override val source: FirSourceElement?
abstract override val name: Name abstract override val name: Name
abstract override val candidateSymbol: AbstractFirBasedSymbol<*>? abstract override val candidateSymbol: AbstractFirBasedSymbol<*>?
abstract override val diagnostic: FirDiagnostic abstract override val diagnostic: ConeDiagnostic
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorNamedReference(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorNamedReference(this, data)
} }
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.references.builder
import kotlin.contracts.* import kotlin.contracts.*
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl import org.jetbrains.kotlin.fir.references.impl.FirErrorNamedReferenceImpl
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.name.Name
@FirBuilderDsl @FirBuilderDsl
class FirErrorNamedReferenceBuilder { class FirErrorNamedReferenceBuilder {
var source: FirSourceElement? = null var source: FirSourceElement? = null
lateinit var diagnostic: FirDiagnostic lateinit var diagnostic: ConeDiagnostic
fun build(): FirErrorNamedReference { fun build(): FirErrorNamedReference {
return FirErrorNamedReferenceImpl( return FirErrorNamedReferenceImpl(
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir.references.impl package org.jetbrains.kotlin.fir.references.impl
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
@@ -19,7 +19,7 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirErrorNamedReferenceImpl( internal class FirErrorNamedReferenceImpl(
override val source: FirSourceElement?, override val source: FirSourceElement?,
override val diagnostic: FirDiagnostic, override val diagnostic: ConeDiagnostic,
) : FirErrorNamedReference() { ) : FirErrorNamedReference() {
override val name: Name = Name.special("<${diagnostic.reason}>") override val name: Name = Name.special("<${diagnostic.reason}>")
override val candidateSymbol: AbstractFirBasedSymbol<*>? get() = null override val candidateSymbol: AbstractFirBasedSymbol<*>? get() = null
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir.types package org.jetbrains.kotlin.fir.types
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.visitors.* import org.jetbrains.kotlin.fir.visitors.*
@@ -21,7 +21,7 @@ abstract class FirErrorTypeRef : FirResolvedTypeRef(), FirDiagnosticHolder {
abstract override val annotations: List<FirAnnotationCall> abstract override val annotations: List<FirAnnotationCall>
abstract override val type: ConeKotlinType abstract override val type: ConeKotlinType
abstract override val delegatedTypeRef: FirTypeRef? abstract override val delegatedTypeRef: FirTypeRef?
abstract override val diagnostic: FirDiagnostic abstract override val diagnostic: ConeDiagnostic
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorTypeRef(this, data) override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitErrorTypeRef(this, data)
} }
@@ -9,7 +9,7 @@ import kotlin.contracts.*
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder import org.jetbrains.kotlin.fir.builder.FirAnnotationContainerBuilder
import org.jetbrains.kotlin.fir.builder.FirBuilderDsl import org.jetbrains.kotlin.fir.builder.FirBuilderDsl
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.types.ConeClassErrorType import org.jetbrains.kotlin.fir.types.ConeClassErrorType
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.fir.visitors.*
@FirBuilderDsl @FirBuilderDsl
class FirErrorTypeRefBuilder : FirAnnotationContainerBuilder { class FirErrorTypeRefBuilder : FirAnnotationContainerBuilder {
override var source: FirSourceElement? = null override var source: FirSourceElement? = null
lateinit var diagnostic: FirDiagnostic lateinit var diagnostic: ConeDiagnostic
override fun build(): FirErrorTypeRef { override fun build(): FirErrorTypeRef {
return FirErrorTypeRefImpl( return FirErrorTypeRefImpl(
@@ -6,7 +6,7 @@
package org.jetbrains.kotlin.fir.types.impl package org.jetbrains.kotlin.fir.types.impl
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.types.ConeClassErrorType import org.jetbrains.kotlin.fir.types.ConeClassErrorType
import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeKotlinType
@@ -21,7 +21,7 @@ import org.jetbrains.kotlin.fir.visitors.*
internal class FirErrorTypeRefImpl( internal class FirErrorTypeRefImpl(
override val source: FirSourceElement?, override val source: FirSourceElement?,
override val diagnostic: FirDiagnostic, override val diagnostic: ConeDiagnostic,
) : FirErrorTypeRef() { ) : FirErrorTypeRef() {
override val annotations: MutableList<FirAnnotationCall> = mutableListOf() override val annotations: MutableList<FirAnnotationCall> = mutableListOf()
override val type: ConeKotlinType = ConeClassErrorType(diagnostic.reason) override val type: ConeKotlinType = ConeClassErrorType(diagnostic.reason)
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.fir.diagnostics package org.jetbrains.kotlin.fir.diagnostics
abstract class FirDiagnostic { abstract class ConeDiagnostic {
abstract val reason: String abstract val reason: String
} }
class FirStubDiagnostic(val original: FirDiagnostic) : FirDiagnostic() { class ConeStubDiagnostic(val original: ConeDiagnostic) : ConeDiagnostic() {
override val reason: String get() = original.reason override val reason: String get() = original.reason
} }
@@ -5,9 +5,13 @@
package org.jetbrains.kotlin.fir.diagnostics package org.jetbrains.kotlin.fir.diagnostics
class FirSimpleDiagnostic(override val reason: String, val kind: DiagnosticKind = DiagnosticKind.Other) : FirDiagnostic() class ConeSimpleDiagnostic(override val reason: String, val kind: DiagnosticKind = DiagnosticKind.Other) : ConeDiagnostic()
class FirDiagnosticWithParameters1<A>(override val reason: String, val a: A, val kind: DiagnosticKind = DiagnosticKind.Other) : FirDiagnostic() class ConeSimpleDiagnosticWithParameters1<A>(
override val reason: String,
val a: A,
val kind: DiagnosticKind = DiagnosticKind.Other
) : ConeDiagnostic()
enum class DiagnosticKind { enum class DiagnosticKind {
Syntax, Syntax,
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.expressions
import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression import org.jetbrains.kotlin.fir.expressions.builder.buildConstExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildErrorExpression import org.jetbrains.kotlin.fir.expressions.builder.buildErrorExpression
import org.jetbrains.kotlin.fir.expressions.builder.buildErrorLoop import org.jetbrains.kotlin.fir.expressions.builder.buildErrorLoop
@@ -28,7 +28,7 @@ inline val FirAnnotationCall.coneClassLikeType: ConeClassLikeType?
inline val FirAnnotationCall.classId: ClassId? inline val FirAnnotationCall.classId: ClassId?
get() = coneClassLikeType?.lookupTag?.classId get() = coneClassLikeType?.lookupTag?.classId
fun <T> buildConstOrErrorExpression(source: FirSourceElement?, kind: FirConstKind<T>, value: T?, diagnostic: FirDiagnostic): FirExpression = fun <T> buildConstOrErrorExpression(source: FirSourceElement?, kind: FirConstKind<T>, value: T?, diagnostic: ConeDiagnostic): FirExpression =
value?.let { value?.let {
buildConstExpression(source, kind, it) buildConstExpression(source, kind, it)
} ?: buildErrorExpression { } ?: buildErrorExpression {
@@ -51,14 +51,14 @@ fun FirExpression.toResolvedCallableSymbol(): FirCallableSymbol<*>? {
return toResolvedCallableReference()?.resolvedSymbol as FirCallableSymbol<*>? return toResolvedCallableReference()?.resolvedSymbol as FirCallableSymbol<*>?
} }
fun buildErrorLoop(source: FirSourceElement?, diagnostic: FirDiagnostic): FirErrorLoop { fun buildErrorLoop(source: FirSourceElement?, diagnostic: ConeDiagnostic): FirErrorLoop {
return buildErrorLoop { return buildErrorLoop {
this.source = source this.source = source
this.diagnostic = diagnostic this.diagnostic = diagnostic
} }
} }
fun buildErrorExpression(source: FirSourceElement?, diagnostic: FirDiagnostic): FirErrorExpression { fun buildErrorExpression(source: FirSourceElement?, diagnostic: ConeDiagnostic): FirErrorExpression {
return buildErrorExpression { return buildErrorExpression {
this.source = source this.source = source
this.diagnostic = diagnostic this.diagnostic = diagnostic
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.fir.tree.generator package org.jetbrains.kotlin.fir.tree.generator
import org.jetbrains.kotlin.descriptors.effectiveVisibility
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.annotations import org.jetbrains.kotlin.fir.tree.generator.FieldSets.annotations
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.arguments import org.jetbrains.kotlin.fir.tree.generator.FieldSets.arguments
import org.jetbrains.kotlin.fir.tree.generator.FieldSets.body import org.jetbrains.kotlin.fir.tree.generator.FieldSets.body
@@ -58,7 +57,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
} }
diagnosticHolder.configure { diagnosticHolder.configure {
+field("diagnostic", firDiagnosticType) +field("diagnostic", coneDiagnosticType)
} }
declaration.configure { declaration.configure {
@@ -64,7 +64,7 @@ val firScopeProviderType = type("fir.scopes", "FirScopeProvider")
val pureAbstractElementType = generatedType("FirPureAbstractElement") val pureAbstractElementType = generatedType("FirPureAbstractElement")
val effectDeclarationType = type("fir.contracts.description", "ConeEffectDeclaration") val effectDeclarationType = type("fir.contracts.description", "ConeEffectDeclaration")
val emptyContractDescriptionType = generatedType("contracts.impl", "FirEmptyContractDescription") val emptyContractDescriptionType = generatedType("contracts.impl", "FirEmptyContractDescription")
val firDiagnosticType = generatedType("diagnostics", "FirDiagnostic") val coneDiagnosticType = generatedType("diagnostics", "ConeDiagnostic")
val dslBuilderAnnotationType = generatedType("builder", "FirBuilderDsl") val dslBuilderAnnotationType = generatedType("builder", "FirBuilderDsl")
val firImplementationDetailType = generatedType("FirImplementationDetail") val firImplementationDetailType = generatedType("FirImplementationDetail")
@@ -22,7 +22,7 @@ import org.jetbrains.kotlin.checkers.utils.CheckerTestUtil
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
import org.jetbrains.kotlin.diagnostics.PsiDiagnosticUtils import org.jetbrains.kotlin.diagnostics.PsiDiagnosticUtils
import org.jetbrains.kotlin.fir.analysis.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.fir.builder.RawFirBuilder import org.jetbrains.kotlin.fir.builder.RawFirBuilder
import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirFile
@@ -196,7 +196,7 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
} }
protected fun TestFile.getActualText( protected fun TestFile.getActualText(
coneDiagnostics: Iterable<ConeDiagnostic>, firDiagnostics: Iterable<FirDiagnostic>,
actualText: StringBuilder actualText: StringBuilder
): Boolean { ): Boolean {
val ktFile = this.ktFile val ktFile = this.ktFile
@@ -211,7 +211,7 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
// TODO: report JVM signature diagnostics also for implementing modules // TODO: report JVM signature diagnostics also for implementing modules
val ok = booleanArrayOf(true) val ok = booleanArrayOf(true)
val diagnostics = coneDiagnostics.toActualDiagnostic(ktFile) val diagnostics = firDiagnostics.toActualDiagnostic(ktFile)
val filteredDiagnostics = diagnostics // TODO val filteredDiagnostics = diagnostics // TODO
actualDiagnostics.addAll(filteredDiagnostics) actualDiagnostics.addAll(filteredDiagnostics)
@@ -308,7 +308,7 @@ abstract class AbstractFirBaseDiagnosticsTest : BaseDiagnosticsTest() {
return ok[0] return ok[0]
} }
private fun Iterable<ConeDiagnostic>.toActualDiagnostic(root: PsiElement): List<ActualDiagnostic> { private fun Iterable<FirDiagnostic>.toActualDiagnostic(root: PsiElement): List<ActualDiagnostic> {
val result = mutableListOf<ActualDiagnostic>() val result = mutableListOf<ActualDiagnostic>()
filter { it.diagnostic.factory != FirErrors.SYNTAX_ERROR }.mapTo(result) { ActualDiagnostic(it.diagnostic, null, true) } filter { it.diagnostic.factory != FirErrors.SYNTAX_ERROR }.mapTo(result) { ActualDiagnostic(it.diagnostic, null, true) }
for (errorElement in AnalyzingUtils.getSyntaxErrorRanges(root)) { for (errorElement in AnalyzingUtils.getSyntaxErrorRanges(root)) {
@@ -8,7 +8,7 @@ import com.intellij.openapi.fileEditor.FileDocumentManager
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.builder.RawFirBuilder import org.jetbrains.kotlin.fir.builder.RawFirBuilder
import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.diagnostics.FirStubDiagnostic import org.jetbrains.kotlin.fir.diagnostics.ConeStubDiagnostic
import org.jetbrains.kotlin.fir.expressions.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.FirFunctionCall
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir import org.jetbrains.kotlin.fir.lightTree.LightTree2Fir
@@ -255,7 +255,7 @@ class FirResolveBench(val withProgress: Boolean) {
unresolvedTypes++ unresolvedTypes++
if (typeRef.psi != null) { if (typeRef.psi != null) {
if (typeRef is FirErrorTypeRef && typeRef.diagnostic is FirStubDiagnostic) { if (typeRef is FirErrorTypeRef && typeRef.diagnostic is ConeStubDiagnostic) {
return return
} }
val psi = typeRef.psi!! val psi = typeRef.psi!!
@@ -278,7 +278,7 @@ class FirResolveBench(val withProgress: Boolean) {
implicitTypes++ implicitTypes++
} else { } else {
errorTypes++ errorTypes++
if (resolvedTypeRef is FirErrorTypeRef && resolvedTypeRef.diagnostic is FirStubDiagnostic) { if (resolvedTypeRef is FirErrorTypeRef && resolvedTypeRef.diagnostic is ConeStubDiagnostic) {
return return
} }
val psi = resolvedTypeRef.psi!! val psi = resolvedTypeRef.psi!!
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.idea.fir
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector
import org.jetbrains.kotlin.fir.analysis.collectors.registerAllComponents import org.jetbrains.kotlin.fir.analysis.collectors.registerAllComponents
import org.jetbrains.kotlin.fir.analysis.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtElement
@@ -20,7 +20,7 @@ class FirIdeDiagnosticsCollector(session: FirSession, private val resolveState:
} }
private inner class Reporter : DiagnosticReporter() { private inner class Reporter : DiagnosticReporter() {
override fun report(diagnostic: ConeDiagnostic?) { override fun report(diagnostic: FirDiagnostic?) {
if (diagnostic == null) return if (diagnostic == null) return
val psi = diagnostic.source.psi as? KtElement ?: return val psi = diagnostic.source.psi as? KtElement ?: return
resolveState.record(psi, diagnostic.diagnostic) resolveState.record(psi, diagnostic.diagnostic)
@@ -34,7 +34,7 @@ class FirIdeDiagnosticsCollector(session: FirSession, private val resolveState:
reporter = Reporter() reporter = Reporter()
} }
override fun getCollectedDiagnostics(): Iterable<ConeDiagnostic> { override fun getCollectedDiagnostics(): Iterable<FirDiagnostic> {
// Not necessary in IDE // Not necessary in IDE
return emptyList() return emptyList()
} }
@@ -11,7 +11,7 @@ import com.intellij.psi.PsiElementVisitor
import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.analysis.diagnostics.ConeDiagnostic import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnostic
import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirFile
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.fir.psi
@@ -49,7 +49,7 @@ interface FirModuleResolveState {
fun record(psi: KtElement, diagnostic: Diagnostic) fun record(psi: KtElement, diagnostic: Diagnostic)
fun setDiagnosticsForFile(file: KtFile, fir: FirFile, diagnostics: Iterable<ConeDiagnostic> = emptyList()) fun setDiagnosticsForFile(file: KtFile, fir: FirFile, diagnostics: Iterable<FirDiagnostic> = emptyList())
} }
class FirModuleResolveStateImpl(override val sessionProvider: FirProjectSessionProvider) : FirModuleResolveState { class FirModuleResolveStateImpl(override val sessionProvider: FirProjectSessionProvider) : FirModuleResolveState {
@@ -91,7 +91,7 @@ class FirModuleResolveStateImpl(override val sessionProvider: FirProjectSessionP
list += diagnostic list += diagnostic
} }
override fun setDiagnosticsForFile(file: KtFile, fir: FirFile, diagnostics: Iterable<ConeDiagnostic>) { override fun setDiagnosticsForFile(file: KtFile, fir: FirFile, diagnostics: Iterable<FirDiagnostic>) {
for (diagnostic in diagnostics) { for (diagnostic in diagnostics) {
(diagnostic.source.psi as? KtElement)?.let { record(it, diagnostic.diagnostic) } (diagnostic.source.psi as? KtElement)?.let { record(it, diagnostic.diagnostic) }
} }