[LL API] return FirErrorProperty for top level destructuring declaration

KTIJ-23552
This commit is contained in:
Anna Kozlova
2022-11-10 15:07:39 +01:00
parent 3590c4ea35
commit 9f470e2a4d
17 changed files with 76 additions and 12 deletions
@@ -19,10 +19,7 @@ import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.references.FirErrorNamedReference
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeConstraintSystemHasContradiction
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeInapplicableCandidateError
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedNameError
import org.jetbrains.kotlin.fir.resolve.diagnostics.*
import org.jetbrains.kotlin.fir.resolvedSymbol
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
@@ -113,6 +113,7 @@ private fun ConeDiagnostic.toKtDiagnostic(
else -> this.getFactory(source).createOn(qualifiedAccessSource ?: source)
}
is ConeDestructuringDeclarationsOnTopLevel -> FirSyntaxErrors.SYNTAX.createOn(source)
is ConeCannotInferParameterType -> FirErrors.CANNOT_INFER_PARAMETER_TYPE.createOn(source)
is ConeInstanceAccessBeforeSuperCall -> FirErrors.INSTANCE_ACCESS_BEFORE_SUPER_CALL.createOn(source, this.target)
is ConeStubDiagnostic -> null
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.utils.addDeclaration
import org.jetbrains.kotlin.fir.declarations.utils.isCompanion
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
import org.jetbrains.kotlin.fir.diagnostics.ConeDestructuringDeclarationsOnTopLevel
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.ConeUnderscoreIsReserved
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
@@ -1276,9 +1277,7 @@ abstract class BaseFirBuilder<T>(val baseSession: FirSession, val context: Conte
moduleData = baseModuleData
origin = FirDeclarationOrigin.Source
name = Name.special("<destructuring>")
diagnostic = ConeSimpleDiagnostic(
"Destructuring declarations are only allowed for local variables/values", DiagnosticKind.Syntax
)
diagnostic = ConeDestructuringDeclarationsOnTopLevel
symbol = FirErrorPropertySymbol(diagnostic)
}
@@ -242,4 +242,4 @@ class ConeAmbiguousAlteredAssign(val altererNames: List<String?>) : ConeDiagnost
object ConeForbiddenIntersection : ConeDiagnostic {
override val reason: String get() = "Such an intersection type is not allowed"
}
}
@@ -6,9 +6,7 @@
package org.jetbrains.kotlin.fir.diagnostics
import org.jetbrains.kotlin.KtSourceElement
import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
import org.jetbrains.kotlin.fir.types.ConeKotlinType
import org.jetbrains.kotlin.name.Name
@@ -43,6 +41,11 @@ class ConeRecursiveTypeParameterDuringErasureError(val typeParameterName: Name)
get() = "self-recursive type parameter $typeParameterName"
}
object ConeDestructuringDeclarationsOnTopLevel : ConeDiagnostic {
override val reason: String
get() = "Destructuring declarations are only allowed for local variables/values"
}
enum class DiagnosticKind {
Syntax,
ExpressionExpected,