[FIR] Add VARIABLE_WITH_NO_TYPE_NO_INITIALIZER diagnostic

This commit is contained in:
Andrey Zinovyev
2021-07-22 17:43:25 +03:00
committed by teamcityserver
parent a63f218dd3
commit b706e776ad
16 changed files with 51 additions and 18 deletions
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
import org.jetbrains.kotlin.fir.declarations.Deprecation
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.calls.Candidate
@@ -152,6 +153,10 @@ class ConeDeprecated(val source: FirSourceElement?, val symbol: FirBasedSymbol<*
override val reason: String get() = "Deprecated: ${deprecation.message}"
}
class ConeLocalVariableNoTypeOrInitializer(val variable: FirVariable) : ConeDiagnostic() {
override val reason: String get() = "Cannot infer variable type without initializer / getter / delegate"
}
private fun describeSymbol(symbol: FirBasedSymbol<*>): String {
return when (symbol) {
is FirClassLikeSymbol<*> -> symbol.classId.asString()
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate
import org.jetbrains.kotlin.fir.resolve.constructFunctionalTypeRef
import org.jetbrains.kotlin.fir.resolve.dfa.FirControlFlowGraphReferenceImpl
import org.jetbrains.kotlin.fir.resolve.dfa.unwrapSmartcastExpression
import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeLocalVariableNoTypeOrInitializer
import org.jetbrains.kotlin.fir.resolve.inference.extractLambdaInfoFromFunctionalType
import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType
import org.jetbrains.kotlin.fir.resolve.mode
@@ -841,10 +842,8 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor
transformer,
withExpectedType(
buildErrorTypeRef {
diagnostic = ConeSimpleDiagnostic(
"Cannot infer variable type without initializer / getter / delegate",
DiagnosticKind.InferenceError,
)
diagnostic = ConeLocalVariableNoTypeOrInitializer(variable)
source = variable.source
},
)
)