FIR: add groups to diagnostics DSL

This commit is contained in:
Ilya Kirillov
2021-01-29 20:53:42 +01:00
parent aaba5742dc
commit e008ad03a2
5 changed files with 358 additions and 272 deletions
@@ -5,10 +5,7 @@
package org.jetbrains.kotlin.fir.checkers.generator.diagnostics package org.jetbrains.kotlin.fir.checkers.generator.diagnostics
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.diagnostics.Severity import org.jetbrains.kotlin.diagnostics.Severity
import org.jetbrains.kotlin.fir.FirSourceElement
import kotlin.reflect.KClass
import kotlin.reflect.KType import kotlin.reflect.KType
data class Diagnostic( data class Diagnostic(
@@ -18,6 +15,7 @@ data class Diagnostic(
val psiType: KType, val psiType: KType,
val parameters: List<DiagnosticParameter>, val parameters: List<DiagnosticParameter>,
val positioningStrategy: PositioningStrategy, val positioningStrategy: PositioningStrategy,
val group: String?,
) )
data class DiagnosticParameter( data class DiagnosticParameter(
@@ -19,6 +19,19 @@ class DiagnosticListBuilder private constructor() {
@PrivateForInline @PrivateForInline
val diagnostics = mutableListOf<Diagnostic>() val diagnostics = mutableListOf<Diagnostic>()
@PrivateForInline
var currentGroupName: String? = null
@OptIn(PrivateForInline::class)
inline fun group(groupName: String, inner: () -> Unit) {
if (currentGroupName != null) {
error("Groups can not be nested ")
}
currentGroupName = groupName
inner()
currentGroupName = null
}
@OptIn(PrivateForInline::class) @OptIn(PrivateForInline::class)
inline fun <reified E : FirSourceElement, reified P : PsiElement> error( inline fun <reified E : FirSourceElement, reified P : PsiElement> error(
positioningStrategy: PositioningStrategy = PositioningStrategy.DEFAULT, positioningStrategy: PositioningStrategy = PositioningStrategy.DEFAULT,
@@ -45,6 +58,7 @@ class DiagnosticListBuilder private constructor() {
sourceElementType = typeOf<E>(), sourceElementType = typeOf<E>(),
psiType = typeOf<P>(), psiType = typeOf<P>(),
positioningStrategy, positioningStrategy,
group = currentGroupName,
).apply(init).build() ).apply(init).build()
AlwaysReturningUnitPropertyDelegate AlwaysReturningUnitPropertyDelegate
} }
@@ -68,7 +82,8 @@ class DiagnosticBuilder(
private val name: String, private val name: String,
private val sourceElementType: KType, private val sourceElementType: KType,
private val psiType: KType, private val psiType: KType,
private val positioningStrategy: PositioningStrategy private val positioningStrategy: PositioningStrategy,
private val group: String?
) { ) {
@PrivateForInline @PrivateForInline
val parameters = mutableListOf<DiagnosticParameter>() val parameters = mutableListOf<DiagnosticParameter>()
@@ -92,5 +107,6 @@ class DiagnosticBuilder(
psiType, psiType,
parameters, parameters,
positioningStrategy, positioningStrategy,
group
) )
} }
@@ -33,12 +33,24 @@ object ErrorListDiagnosticListRenderer : DiagnosticListRenderer() {
private fun SmartPrinter.printErrorsObject(diagnosticList: DiagnosticList) { private fun SmartPrinter.printErrorsObject(diagnosticList: DiagnosticList) {
inBracketsWithIndent("object FirErrors") { inBracketsWithIndent("object FirErrors") {
for (it in diagnosticList.diagnostics) { val groups = diagnosticList.diagnostics.groupBy { it.group }
printDiagnostic(it) for ((group, diagnostics) in groups) {
printDiagnosticGroup(group, diagnostics)
println()
} }
} }
} }
private fun SmartPrinter.printDiagnosticGroup(
group: String?,
diagnostics: List<Diagnostic>
) {
println("// ${group ?: "NO GROUP"}")
for (it in diagnostics) {
printDiagnostic(it)
}
}
private fun SmartPrinter.printDiagnostic(diagnostic: Diagnostic) { private fun SmartPrinter.printDiagnostic(diagnostic: Diagnostic) {
print("val ${diagnostic.name} by ${diagnostic.getFactoryFunction()}") print("val ${diagnostic.name} by ${diagnostic.getFactoryFunction()}")
printTypeArguments(diagnostic.getAllTypeArguments()) printTypeArguments(diagnostic.getAllTypeArguments())
@@ -25,11 +25,12 @@ import org.jetbrains.kotlin.psi.*
@Suppress("UNUSED_VARIABLE", "LocalVariableName") @Suppress("UNUSED_VARIABLE", "LocalVariableName")
@OptIn(PrivateForInline::class) @OptIn(PrivateForInline::class)
val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList { val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
// Miscellaneous group("Miscellaneous") {
val SYNTAX by error<FirSourceElement, PsiElement>() val SYNTAX by error<FirSourceElement, PsiElement>()
val OTHER_ERROR by error<FirSourceElement, PsiElement>() val OTHER_ERROR by error<FirSourceElement, PsiElement>()
}
// General syntax group("General syntax") {
val ILLEGAL_CONST_EXPRESSION by error<FirSourceElement, PsiElement>() val ILLEGAL_CONST_EXPRESSION by error<FirSourceElement, PsiElement>()
val ILLEGAL_UNDERSCORE by error<FirSourceElement, PsiElement>() val ILLEGAL_UNDERSCORE by error<FirSourceElement, PsiElement>()
val EXPRESSION_REQUIRED by error<FirSourceElement, PsiElement>() val EXPRESSION_REQUIRED by error<FirSourceElement, PsiElement>()
@@ -38,8 +39,9 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
val VARIABLE_EXPECTED by error<FirSourceElement, PsiElement>() val VARIABLE_EXPECTED by error<FirSourceElement, PsiElement>()
val RETURN_NOT_ALLOWED by error<FirSourceElement, PsiElement>() val RETURN_NOT_ALLOWED by error<FirSourceElement, PsiElement>()
val DELEGATION_IN_INTERFACE by error<FirSourceElement, PsiElement>() val DELEGATION_IN_INTERFACE by error<FirSourceElement, PsiElement>()
}
// Unresolved group("Unresolved") {
val HIDDEN by error<FirSourceElement, PsiElement> { val HIDDEN by error<FirSourceElement, PsiElement> {
parameter<AbstractFirBasedSymbol<*>>("hidden") parameter<AbstractFirBasedSymbol<*>>("hidden")
} }
@@ -52,16 +54,18 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
val UNKNOWN_CALLABLE_KIND by error<FirSourceElement, PsiElement>() val UNKNOWN_CALLABLE_KIND by error<FirSourceElement, PsiElement>()
val MISSING_STDLIB_CLASS by error<FirSourceElement, PsiElement>() val MISSING_STDLIB_CLASS by error<FirSourceElement, PsiElement>()
val NO_THIS by error<FirSourceElement, PsiElement>() val NO_THIS by error<FirSourceElement, PsiElement>()
}
// Super group("Super") {
val SUPER_IS_NOT_AN_EXPRESSION by error<FirSourceElement, PsiElement>() val SUPER_IS_NOT_AN_EXPRESSION by error<FirSourceElement, PsiElement>()
val SUPER_NOT_AVAILABLE by error<FirSourceElement, PsiElement>() val SUPER_NOT_AVAILABLE by error<FirSourceElement, PsiElement>()
val ABSTRACT_SUPER_CALL by error<FirSourceElement, PsiElement>() val ABSTRACT_SUPER_CALL by error<FirSourceElement, PsiElement>()
val INSTANCE_ACCESS_BEFORE_SUPER_CALL by error<FirSourceElement, PsiElement>() { val INSTANCE_ACCESS_BEFORE_SUPER_CALL by error<FirSourceElement, PsiElement>() {
parameter<String>("target") parameter<String>("target")
} }
}
// Supertypes group("Supertypes") {
val TYPE_PARAMETER_AS_SUPERTYPE by error<FirSourceElement, PsiElement>() val TYPE_PARAMETER_AS_SUPERTYPE by error<FirSourceElement, PsiElement>()
val ENUM_AS_SUPERTYPE by error<FirSourceElement, PsiElement>() val ENUM_AS_SUPERTYPE by error<FirSourceElement, PsiElement>()
val RECURSION_IN_SUPERTYPES by error<FirSourceElement, PsiElement>() val RECURSION_IN_SUPERTYPES by error<FirSourceElement, PsiElement>()
@@ -75,8 +79,9 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
val CLASS_IN_SUPERTYPE_FOR_ENUM by error<FirSourceElement, PsiElement>() val CLASS_IN_SUPERTYPE_FOR_ENUM by error<FirSourceElement, PsiElement>()
val SEALED_SUPERTYPE by error<FirSourceElement, PsiElement>() val SEALED_SUPERTYPE by error<FirSourceElement, PsiElement>()
val SEALED_SUPERTYPE_IN_LOCAL_CLASS by error<FirSourceElement, PsiElement>() val SEALED_SUPERTYPE_IN_LOCAL_CLASS by error<FirSourceElement, PsiElement>()
}
// Constructor problems group(" Constructor problems") {
val CONSTRUCTOR_IN_OBJECT by error<FirSourceElement, KtDeclaration>(PositioningStrategy.DECLARATION_SIGNATURE) val CONSTRUCTOR_IN_OBJECT by error<FirSourceElement, KtDeclaration>(PositioningStrategy.DECLARATION_SIGNATURE)
val CONSTRUCTOR_IN_INTERFACE by error<FirSourceElement, KtDeclaration>(PositioningStrategy.DECLARATION_SIGNATURE) val CONSTRUCTOR_IN_INTERFACE by error<FirSourceElement, KtDeclaration>(PositioningStrategy.DECLARATION_SIGNATURE)
val NON_PRIVATE_CONSTRUCTOR_IN_ENUM by error<FirSourceElement, PsiElement>() val NON_PRIVATE_CONSTRUCTOR_IN_ENUM by error<FirSourceElement, PsiElement>()
@@ -88,8 +93,9 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
val PRIMARY_CONSTRUCTOR_REQUIRED_FOR_DATA_CLASS by warning<FirSourceElement, PsiElement>() val PRIMARY_CONSTRUCTOR_REQUIRED_FOR_DATA_CLASS by warning<FirSourceElement, PsiElement>()
val EXPLICIT_DELEGATION_CALL_REQUIRED by warning<FirSourceElement, PsiElement>(PositioningStrategy.SECONDARY_CONSTRUCTOR_DELEGATION_CALL) val EXPLICIT_DELEGATION_CALL_REQUIRED by warning<FirSourceElement, PsiElement>(PositioningStrategy.SECONDARY_CONSTRUCTOR_DELEGATION_CALL)
val SEALED_CLASS_CONSTRUCTOR_CALL by error<FirSourceElement, PsiElement>() val SEALED_CLASS_CONSTRUCTOR_CALL by error<FirSourceElement, PsiElement>()
}
// Annotations group("Annotations") {
val ANNOTATION_ARGUMENT_KCLASS_LITERAL_OF_TYPE_PARAMETER_ERROR by error<FirSourceElement, KtExpression>() val ANNOTATION_ARGUMENT_KCLASS_LITERAL_OF_TYPE_PARAMETER_ERROR by error<FirSourceElement, KtExpression>()
val ANNOTATION_ARGUMENT_MUST_BE_CONST by error<FirSourceElement, KtExpression>() val ANNOTATION_ARGUMENT_MUST_BE_CONST by error<FirSourceElement, KtExpression>()
val ANNOTATION_ARGUMENT_MUST_BE_ENUM_CONST by error<FirSourceElement, KtExpression>() val ANNOTATION_ARGUMENT_MUST_BE_ENUM_CONST by error<FirSourceElement, KtExpression>()
@@ -105,8 +111,9 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
} }
val NULLABLE_TYPE_OF_ANNOTATION_MEMBER by error<FirSourceElement, KtTypeReference>() val NULLABLE_TYPE_OF_ANNOTATION_MEMBER by error<FirSourceElement, KtTypeReference>()
val VAR_ANNOTATION_PARAMETER by error<FirSourceElement, KtParameter>(PositioningStrategy.VAL_OR_VAR_NODE) val VAR_ANNOTATION_PARAMETER by error<FirSourceElement, KtParameter>(PositioningStrategy.VAL_OR_VAR_NODE)
}
// Exposed visibility group group("Exposed visibility group") {
val EXPOSED_TYPEALIAS_EXPANDED_TYPE by exposedVisibilityError<KtNamedDeclaration>(PositioningStrategy.DECLARATION_NAME) val EXPOSED_TYPEALIAS_EXPANDED_TYPE by exposedVisibilityError<KtNamedDeclaration>(PositioningStrategy.DECLARATION_NAME)
val EXPOSED_FUNCTION_RETURN_TYPE by exposedVisibilityError<KtNamedDeclaration>(PositioningStrategy.DECLARATION_NAME) val EXPOSED_FUNCTION_RETURN_TYPE by exposedVisibilityError<KtNamedDeclaration>(PositioningStrategy.DECLARATION_NAME)
@@ -116,8 +123,9 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
val EXPOSED_SUPER_INTERFACE by exposedVisibilityError<KtTypeReference>() val EXPOSED_SUPER_INTERFACE by exposedVisibilityError<KtTypeReference>()
val EXPOSED_SUPER_CLASS by exposedVisibilityError<KtTypeReference>() val EXPOSED_SUPER_CLASS by exposedVisibilityError<KtTypeReference>()
val EXPOSED_TYPE_PARAMETER_BOUND by exposedVisibilityError<KtTypeReference>() val EXPOSED_TYPE_PARAMETER_BOUND by exposedVisibilityError<KtTypeReference>()
}
// Modifiers group("Modifiers") {
val INAPPLICABLE_INFIX_MODIFIER by error<FirSourceElement, PsiElement> { val INAPPLICABLE_INFIX_MODIFIER by error<FirSourceElement, PsiElement> {
parameter<String>("modifier") // TODO or it should be a message? parameter<String>("modifier") // TODO or it should be a message?
} }
@@ -137,8 +145,9 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
parameter<KtModifierKeywordToken>("modifier2") parameter<KtModifierKeywordToken>("modifier2")
} }
val REDUNDANT_OPEN_IN_INTERFACE by warning<FirSourceElement, KtModifierListOwner>(PositioningStrategy.MODALITY_MODIFIER) val REDUNDANT_OPEN_IN_INTERFACE by warning<FirSourceElement, KtModifierListOwner>(PositioningStrategy.MODALITY_MODIFIER)
}
// Applicability group("Applicability") {
val NONE_APPLICABLE by error<FirSourceElement, PsiElement> { val NONE_APPLICABLE by error<FirSourceElement, PsiElement> {
parameter<Collection<AbstractFirBasedSymbol<*>>>("candidates") parameter<Collection<AbstractFirBasedSymbol<*>>>("candidates")
} }
@@ -149,16 +158,18 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
val INAPPLICABLE_LATEINIT_MODIFIER by error<FirSourceElement, PsiElement>() { val INAPPLICABLE_LATEINIT_MODIFIER by error<FirSourceElement, PsiElement>() {
parameter<String>("reason") parameter<String>("reason")
} }
}
// Ambiguity group("Ambiguity") {
val AMBIGUITY by error<FirSourceElement, PsiElement> { val AMBIGUITY by error<FirSourceElement, PsiElement> {
parameter<Collection<AbstractFirBasedSymbol<*>>>("candidates") parameter<Collection<AbstractFirBasedSymbol<*>>>("candidates")
} }
val ASSIGN_OPERATOR_AMBIGUITY by error<FirSourceElement, PsiElement> { val ASSIGN_OPERATOR_AMBIGUITY by error<FirSourceElement, PsiElement> {
parameter<Collection<AbstractFirBasedSymbol<*>>>("candidates") parameter<Collection<AbstractFirBasedSymbol<*>>>("candidates")
} }
}
// Types & type parameters group("Types & type parameters") {
val TYPE_MISMATCH by error<FirSourceElement, PsiElement> { val TYPE_MISMATCH by error<FirSourceElement, PsiElement> {
parameter<ConeKotlinType>("expectedType") parameter<ConeKotlinType>("expectedType")
parameter<ConeKotlinType>("actualType") parameter<ConeKotlinType>("actualType")
@@ -195,8 +206,9 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
parameter<String>("variableType") // TODO use ConeType instead of String parameter<String>("variableType") // TODO use ConeType instead of String
parameter<FirMemberDeclaration>("targetVariable") parameter<FirMemberDeclaration>("targetVariable")
} }
}
// Redeclarations group("Redeclarations") {
val MANY_COMPANION_OBJECTS by error<FirSourceElement, PsiElement>() val MANY_COMPANION_OBJECTS by error<FirSourceElement, PsiElement>()
val CONFLICTING_OVERLOADS by error<FirSourceElement, PsiElement>(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) { val CONFLICTING_OVERLOADS by error<FirSourceElement, PsiElement>(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) {
parameter<String>("conflictingOverloads") // TODO use Collection<Symbol> instead of String parameter<String>("conflictingOverloads") // TODO use Collection<Symbol> instead of String
@@ -205,16 +217,18 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
parameter<String>("conflictingDeclaration") // TODO use Collection<Symbol> instead of String parameter<String>("conflictingDeclaration") // TODO use Collection<Symbol> instead of String
} }
val ANY_METHOD_IMPLEMENTED_IN_INTERFACE by error<FirSourceElement, PsiElement>() val ANY_METHOD_IMPLEMENTED_IN_INTERFACE by error<FirSourceElement, PsiElement>()
}
// Invalid local declarations group("Invalid local declarations") {
val LOCAL_OBJECT_NOT_ALLOWED by error<FirSourceElement, KtNamedDeclaration>(PositioningStrategy.DECLARATION_NAME) { val LOCAL_OBJECT_NOT_ALLOWED by error<FirSourceElement, KtNamedDeclaration>(PositioningStrategy.DECLARATION_NAME) {
parameter<Name>("objectName") parameter<Name>("objectName")
} }
val LOCAL_INTERFACE_NOT_ALLOWED by error<FirSourceElement, KtNamedDeclaration>(PositioningStrategy.DECLARATION_NAME) { val LOCAL_INTERFACE_NOT_ALLOWED by error<FirSourceElement, KtNamedDeclaration>(PositioningStrategy.DECLARATION_NAME) {
parameter<Name>("interfaceName") parameter<Name>("interfaceName")
} }
}
// Functions group("Functions") {
val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error<FirSourceElement, KtFunction>(PositioningStrategy.MODALITY_MODIFIER) { val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error<FirSourceElement, KtFunction>(PositioningStrategy.MODALITY_MODIFIER) {
parameter<FirMemberDeclaration>("function") parameter<FirMemberDeclaration>("function")
parameter<FirMemberDeclaration>("containingClass") // TODO use FirClass instead of FirMemberDeclaration parameter<FirMemberDeclaration>("containingClass") // TODO use FirClass instead of FirMemberDeclaration
@@ -240,8 +254,9 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
val ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE by error<FirSourceElement, KtParameter>(PositioningStrategy.PARAMETER_DEFAULT_VALUE) val ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE by error<FirSourceElement, KtParameter>(PositioningStrategy.PARAMETER_DEFAULT_VALUE)
val USELESS_VARARG_ON_PARAMETER by warning<FirSourceElement, KtParameter>() val USELESS_VARARG_ON_PARAMETER by warning<FirSourceElement, KtParameter>()
}
// Properties & accessors group("Properties & accessors") {
val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error<FirSourceElement, KtModifierListOwner>(PositioningStrategy.MODALITY_MODIFIER) { val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error<FirSourceElement, KtModifierListOwner>(PositioningStrategy.MODALITY_MODIFIER) {
parameter<FirMemberDeclaration>("property") parameter<FirMemberDeclaration>("property")
parameter<FirMemberDeclaration>("containingClass") // TODO use FirClass instead of FirMemberDeclaration parameter<FirMemberDeclaration>("containingClass") // TODO use FirClass instead of FirMemberDeclaration
@@ -261,15 +276,17 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
val PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY by error<FirSourceElement, PsiElement>() val PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY by error<FirSourceElement, PsiElement>()
val PRIVATE_SETTER_FOR_OPEN_PROPERTY by error<FirSourceElement, PsiElement>() val PRIVATE_SETTER_FOR_OPEN_PROPERTY by error<FirSourceElement, PsiElement>()
val EXPECTED_PRIVATE_DECLARATION by error<FirSourceElement, KtModifierListOwner>(PositioningStrategy.VISIBILITY_MODIFIER) val EXPECTED_PRIVATE_DECLARATION by error<FirSourceElement, KtModifierListOwner>(PositioningStrategy.VISIBILITY_MODIFIER)
}
// Multi-platform projects group("Multi-platform projects") {
val EXPECTED_DECLARATION_WITH_BODY by error<FirSourceElement, KtDeclaration>(PositioningStrategy.DECLARATION_SIGNATURE) val EXPECTED_DECLARATION_WITH_BODY by error<FirSourceElement, KtDeclaration>(PositioningStrategy.DECLARATION_SIGNATURE)
val EXPECTED_PROPERTY_INITIALIZER by error<FirSourceElement, KtExpression>() val EXPECTED_PROPERTY_INITIALIZER by error<FirSourceElement, KtExpression>()
// TODO: need to cover `by` as well as delegate expression // TODO: need to cover `by` as well as delegate expression
val EXPECTED_DELEGATED_PROPERTY by error<FirSourceElement, KtPropertyDelegate>() val EXPECTED_DELEGATED_PROPERTY by error<FirSourceElement, KtPropertyDelegate>()
}
// Destructuring declaration group("Destructuring declaration") {
val INITIALIZER_REQUIRED_FOR_DESTRUCTURING_DECLARATION by error<FirSourceElement, KtDestructuringDeclaration>() val INITIALIZER_REQUIRED_FOR_DESTRUCTURING_DECLARATION by error<FirSourceElement, KtDestructuringDeclaration>()
val COMPONENT_FUNCTION_MISSING by error<FirSourceElement, PsiElement> { val COMPONENT_FUNCTION_MISSING by error<FirSourceElement, PsiElement> {
parameter<Name>("missingFunctionName") parameter<Name>("missingFunctionName")
@@ -281,8 +298,9 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
} }
// TODO: val COMPONENT_FUNCTION_ON_NULLABLE by ... // TODO: val COMPONENT_FUNCTION_ON_NULLABLE by ...
// TODO: val COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH by ... // TODO: val COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH by ...
}
// Control flow diagnostics group("Control flow diagnostics") {
val UNINITIALIZED_VARIABLE by error<FirSourceElement, PsiElement> { val UNINITIALIZED_VARIABLE by error<FirSourceElement, PsiElement> {
parameter<FirPropertySymbol>("variable") parameter<FirPropertySymbol>("variable")
} }
@@ -295,8 +313,9 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
parameter<AbstractFirBasedSymbol<*>>("lambda") parameter<AbstractFirBasedSymbol<*>>("lambda")
} }
val WRONG_IMPLIES_CONDITION by warning<FirSourceElement, PsiElement>() val WRONG_IMPLIES_CONDITION by warning<FirSourceElement, PsiElement>()
}
// Extended checkers group group(" Extended checkers") {
val REDUNDANT_VISIBILITY_MODIFIER by warning<FirSourceElement, KtModifierListOwner>(PositioningStrategy.VISIBILITY_MODIFIER) val REDUNDANT_VISIBILITY_MODIFIER by warning<FirSourceElement, KtModifierListOwner>(PositioningStrategy.VISIBILITY_MODIFIER)
val REDUNDANT_MODALITY_MODIFIER by warning<FirSourceElement, KtModifierListOwner>(PositioningStrategy.MODALITY_MODIFIER) val REDUNDANT_MODALITY_MODIFIER by warning<FirSourceElement, KtModifierListOwner>(PositioningStrategy.MODALITY_MODIFIER)
val REDUNDANT_RETURN_UNIT_TYPE by warning<FirSourceElement, PsiTypeElement>() val REDUNDANT_RETURN_UNIT_TYPE by warning<FirSourceElement, PsiTypeElement>()
@@ -314,6 +333,7 @@ val DIAGNOSTICS_LIST = DiagnosticListBuilder.buildDiagnosticList {
val VARIABLE_NEVER_READ by warning<FirSourceElement, KtNamedDeclaration>(PositioningStrategy.DECLARATION_NAME) val VARIABLE_NEVER_READ by warning<FirSourceElement, KtNamedDeclaration>(PositioningStrategy.DECLARATION_NAME)
val USELESS_CALL_ON_NOT_NULL by warning<FirSourceElement, PsiElement>() val USELESS_CALL_ON_NOT_NULL by warning<FirSourceElement, PsiElement>()
} }
}
private inline fun <reified P : PsiElement> DiagnosticListBuilder.exposedVisibilityError( private inline fun <reified P : PsiElement> DiagnosticListBuilder.exposedVisibilityError(
positioningStrategy: PositioningStrategy = PositioningStrategy.DEFAULT positioningStrategy: PositioningStrategy = PositioningStrategy.DEFAULT
@@ -40,8 +40,11 @@ import org.jetbrains.kotlin.psi.KtTypeReference
*/ */
object FirErrors { object FirErrors {
// Miscellaneous
val SYNTAX by error0<FirSourceElement, PsiElement>() val SYNTAX by error0<FirSourceElement, PsiElement>()
val OTHER_ERROR by error0<FirSourceElement, PsiElement>() val OTHER_ERROR by error0<FirSourceElement, PsiElement>()
// General syntax
val ILLEGAL_CONST_EXPRESSION by error0<FirSourceElement, PsiElement>() val ILLEGAL_CONST_EXPRESSION by error0<FirSourceElement, PsiElement>()
val ILLEGAL_UNDERSCORE by error0<FirSourceElement, PsiElement>() val ILLEGAL_UNDERSCORE by error0<FirSourceElement, PsiElement>()
val EXPRESSION_REQUIRED by error0<FirSourceElement, PsiElement>() val EXPRESSION_REQUIRED by error0<FirSourceElement, PsiElement>()
@@ -50,6 +53,8 @@ object FirErrors {
val VARIABLE_EXPECTED by error0<FirSourceElement, PsiElement>() val VARIABLE_EXPECTED by error0<FirSourceElement, PsiElement>()
val RETURN_NOT_ALLOWED by error0<FirSourceElement, PsiElement>() val RETURN_NOT_ALLOWED by error0<FirSourceElement, PsiElement>()
val DELEGATION_IN_INTERFACE by error0<FirSourceElement, PsiElement>() val DELEGATION_IN_INTERFACE by error0<FirSourceElement, PsiElement>()
// Unresolved
val HIDDEN by error1<FirSourceElement, PsiElement, AbstractFirBasedSymbol<*>>() val HIDDEN by error1<FirSourceElement, PsiElement, AbstractFirBasedSymbol<*>>()
val UNRESOLVED_REFERENCE by error1<FirSourceElement, PsiElement, String>() val UNRESOLVED_REFERENCE by error1<FirSourceElement, PsiElement, String>()
val UNRESOLVED_LABEL by error0<FirSourceElement, PsiElement>() val UNRESOLVED_LABEL by error0<FirSourceElement, PsiElement>()
@@ -58,10 +63,14 @@ object FirErrors {
val UNKNOWN_CALLABLE_KIND by error0<FirSourceElement, PsiElement>() val UNKNOWN_CALLABLE_KIND by error0<FirSourceElement, PsiElement>()
val MISSING_STDLIB_CLASS by error0<FirSourceElement, PsiElement>() val MISSING_STDLIB_CLASS by error0<FirSourceElement, PsiElement>()
val NO_THIS by error0<FirSourceElement, PsiElement>() val NO_THIS by error0<FirSourceElement, PsiElement>()
// Super
val SUPER_IS_NOT_AN_EXPRESSION by error0<FirSourceElement, PsiElement>() val SUPER_IS_NOT_AN_EXPRESSION by error0<FirSourceElement, PsiElement>()
val SUPER_NOT_AVAILABLE by error0<FirSourceElement, PsiElement>() val SUPER_NOT_AVAILABLE by error0<FirSourceElement, PsiElement>()
val ABSTRACT_SUPER_CALL by error0<FirSourceElement, PsiElement>() val ABSTRACT_SUPER_CALL by error0<FirSourceElement, PsiElement>()
val INSTANCE_ACCESS_BEFORE_SUPER_CALL by error1<FirSourceElement, PsiElement, String>() val INSTANCE_ACCESS_BEFORE_SUPER_CALL by error1<FirSourceElement, PsiElement, String>()
// Supertypes
val TYPE_PARAMETER_AS_SUPERTYPE by error0<FirSourceElement, PsiElement>() val TYPE_PARAMETER_AS_SUPERTYPE by error0<FirSourceElement, PsiElement>()
val ENUM_AS_SUPERTYPE by error0<FirSourceElement, PsiElement>() val ENUM_AS_SUPERTYPE by error0<FirSourceElement, PsiElement>()
val RECURSION_IN_SUPERTYPES by error0<FirSourceElement, PsiElement>() val RECURSION_IN_SUPERTYPES by error0<FirSourceElement, PsiElement>()
@@ -73,6 +82,8 @@ object FirErrors {
val CLASS_IN_SUPERTYPE_FOR_ENUM by error0<FirSourceElement, PsiElement>() val CLASS_IN_SUPERTYPE_FOR_ENUM by error0<FirSourceElement, PsiElement>()
val SEALED_SUPERTYPE by error0<FirSourceElement, PsiElement>() val SEALED_SUPERTYPE by error0<FirSourceElement, PsiElement>()
val SEALED_SUPERTYPE_IN_LOCAL_CLASS by error0<FirSourceElement, PsiElement>() val SEALED_SUPERTYPE_IN_LOCAL_CLASS by error0<FirSourceElement, PsiElement>()
// Constructor problems
val CONSTRUCTOR_IN_OBJECT by error0<FirSourceElement, KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) val CONSTRUCTOR_IN_OBJECT by error0<FirSourceElement, KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
val CONSTRUCTOR_IN_INTERFACE by error0<FirSourceElement, KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) val CONSTRUCTOR_IN_INTERFACE by error0<FirSourceElement, KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
val NON_PRIVATE_CONSTRUCTOR_IN_ENUM by error0<FirSourceElement, PsiElement>() val NON_PRIVATE_CONSTRUCTOR_IN_ENUM by error0<FirSourceElement, PsiElement>()
@@ -84,6 +95,8 @@ object FirErrors {
val PRIMARY_CONSTRUCTOR_REQUIRED_FOR_DATA_CLASS by warning0<FirSourceElement, PsiElement>() val PRIMARY_CONSTRUCTOR_REQUIRED_FOR_DATA_CLASS by warning0<FirSourceElement, PsiElement>()
val EXPLICIT_DELEGATION_CALL_REQUIRED by warning0<FirSourceElement, PsiElement>(SourceElementPositioningStrategies.SECONDARY_CONSTRUCTOR_DELEGATION_CALL) val EXPLICIT_DELEGATION_CALL_REQUIRED by warning0<FirSourceElement, PsiElement>(SourceElementPositioningStrategies.SECONDARY_CONSTRUCTOR_DELEGATION_CALL)
val SEALED_CLASS_CONSTRUCTOR_CALL by error0<FirSourceElement, PsiElement>() val SEALED_CLASS_CONSTRUCTOR_CALL by error0<FirSourceElement, PsiElement>()
// Annotations
val ANNOTATION_ARGUMENT_KCLASS_LITERAL_OF_TYPE_PARAMETER_ERROR by error0<FirSourceElement, KtExpression>() val ANNOTATION_ARGUMENT_KCLASS_LITERAL_OF_TYPE_PARAMETER_ERROR by error0<FirSourceElement, KtExpression>()
val ANNOTATION_ARGUMENT_MUST_BE_CONST by error0<FirSourceElement, KtExpression>() val ANNOTATION_ARGUMENT_MUST_BE_CONST by error0<FirSourceElement, KtExpression>()
val ANNOTATION_ARGUMENT_MUST_BE_ENUM_CONST by error0<FirSourceElement, KtExpression>() val ANNOTATION_ARGUMENT_MUST_BE_ENUM_CONST by error0<FirSourceElement, KtExpression>()
@@ -97,6 +110,8 @@ object FirErrors {
val NOT_AN_ANNOTATION_CLASS by error1<FirSourceElement, PsiElement, String>() val NOT_AN_ANNOTATION_CLASS by error1<FirSourceElement, PsiElement, String>()
val NULLABLE_TYPE_OF_ANNOTATION_MEMBER by error0<FirSourceElement, KtTypeReference>() val NULLABLE_TYPE_OF_ANNOTATION_MEMBER by error0<FirSourceElement, KtTypeReference>()
val VAR_ANNOTATION_PARAMETER by error0<FirSourceElement, KtParameter>(SourceElementPositioningStrategies.VAL_OR_VAR_NODE) val VAR_ANNOTATION_PARAMETER by error0<FirSourceElement, KtParameter>(SourceElementPositioningStrategies.VAL_OR_VAR_NODE)
// Exposed visibility group
val EXPOSED_TYPEALIAS_EXPANDED_TYPE by error3<FirSourceElement, KtNamedDeclaration, FirEffectiveVisibility, FirMemberDeclaration, FirEffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME) val EXPOSED_TYPEALIAS_EXPANDED_TYPE by error3<FirSourceElement, KtNamedDeclaration, FirEffectiveVisibility, FirMemberDeclaration, FirEffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME)
val EXPOSED_FUNCTION_RETURN_TYPE by error3<FirSourceElement, KtNamedDeclaration, FirEffectiveVisibility, FirMemberDeclaration, FirEffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME) val EXPOSED_FUNCTION_RETURN_TYPE by error3<FirSourceElement, KtNamedDeclaration, FirEffectiveVisibility, FirMemberDeclaration, FirEffectiveVisibility>(SourceElementPositioningStrategies.DECLARATION_NAME)
val EXPOSED_RECEIVER_TYPE by error3<FirSourceElement, KtTypeReference, FirEffectiveVisibility, FirMemberDeclaration, FirEffectiveVisibility>() val EXPOSED_RECEIVER_TYPE by error3<FirSourceElement, KtTypeReference, FirEffectiveVisibility, FirMemberDeclaration, FirEffectiveVisibility>()
@@ -105,17 +120,25 @@ object FirErrors {
val EXPOSED_SUPER_INTERFACE by error3<FirSourceElement, KtTypeReference, FirEffectiveVisibility, FirMemberDeclaration, FirEffectiveVisibility>() val EXPOSED_SUPER_INTERFACE by error3<FirSourceElement, KtTypeReference, FirEffectiveVisibility, FirMemberDeclaration, FirEffectiveVisibility>()
val EXPOSED_SUPER_CLASS by error3<FirSourceElement, KtTypeReference, FirEffectiveVisibility, FirMemberDeclaration, FirEffectiveVisibility>() val EXPOSED_SUPER_CLASS by error3<FirSourceElement, KtTypeReference, FirEffectiveVisibility, FirMemberDeclaration, FirEffectiveVisibility>()
val EXPOSED_TYPE_PARAMETER_BOUND by error3<FirSourceElement, KtTypeReference, FirEffectiveVisibility, FirMemberDeclaration, FirEffectiveVisibility>() val EXPOSED_TYPE_PARAMETER_BOUND by error3<FirSourceElement, KtTypeReference, FirEffectiveVisibility, FirMemberDeclaration, FirEffectiveVisibility>()
// Modifiers
val INAPPLICABLE_INFIX_MODIFIER by error1<FirSourceElement, PsiElement, String>() val INAPPLICABLE_INFIX_MODIFIER by error1<FirSourceElement, PsiElement, String>()
val REPEATED_MODIFIER by error1<FirSourceElement, PsiElement, KtModifierKeywordToken>() val REPEATED_MODIFIER by error1<FirSourceElement, PsiElement, KtModifierKeywordToken>()
val REDUNDANT_MODIFIER by error2<FirSourceElement, PsiElement, KtModifierKeywordToken, KtModifierKeywordToken>() val REDUNDANT_MODIFIER by error2<FirSourceElement, PsiElement, KtModifierKeywordToken, KtModifierKeywordToken>()
val DEPRECATED_MODIFIER_PAIR by error2<FirSourceElement, PsiElement, KtModifierKeywordToken, KtModifierKeywordToken>() val DEPRECATED_MODIFIER_PAIR by error2<FirSourceElement, PsiElement, KtModifierKeywordToken, KtModifierKeywordToken>()
val INCOMPATIBLE_MODIFIERS by error2<FirSourceElement, PsiElement, KtModifierKeywordToken, KtModifierKeywordToken>() val INCOMPATIBLE_MODIFIERS by error2<FirSourceElement, PsiElement, KtModifierKeywordToken, KtModifierKeywordToken>()
val REDUNDANT_OPEN_IN_INTERFACE by warning0<FirSourceElement, KtModifierListOwner>(SourceElementPositioningStrategies.MODALITY_MODIFIER) val REDUNDANT_OPEN_IN_INTERFACE by warning0<FirSourceElement, KtModifierListOwner>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
// Applicability
val NONE_APPLICABLE by error1<FirSourceElement, PsiElement, Collection<AbstractFirBasedSymbol<*>>>() val NONE_APPLICABLE by error1<FirSourceElement, PsiElement, Collection<AbstractFirBasedSymbol<*>>>()
val INAPPLICABLE_CANDIDATE by error1<FirSourceElement, PsiElement, AbstractFirBasedSymbol<*>>() val INAPPLICABLE_CANDIDATE by error1<FirSourceElement, PsiElement, AbstractFirBasedSymbol<*>>()
val INAPPLICABLE_LATEINIT_MODIFIER by error1<FirSourceElement, PsiElement, String>() val INAPPLICABLE_LATEINIT_MODIFIER by error1<FirSourceElement, PsiElement, String>()
// Ambiguity
val AMBIGUITY by error1<FirSourceElement, PsiElement, Collection<AbstractFirBasedSymbol<*>>>() val AMBIGUITY by error1<FirSourceElement, PsiElement, Collection<AbstractFirBasedSymbol<*>>>()
val ASSIGN_OPERATOR_AMBIGUITY by error1<FirSourceElement, PsiElement, Collection<AbstractFirBasedSymbol<*>>>() val ASSIGN_OPERATOR_AMBIGUITY by error1<FirSourceElement, PsiElement, Collection<AbstractFirBasedSymbol<*>>>()
// Types & type parameters
val TYPE_MISMATCH by error2<FirSourceElement, PsiElement, ConeKotlinType, ConeKotlinType>() val TYPE_MISMATCH by error2<FirSourceElement, PsiElement, ConeKotlinType, ConeKotlinType>()
val RECURSION_IN_IMPLICIT_TYPES by error0<FirSourceElement, PsiElement>() val RECURSION_IN_IMPLICIT_TYPES by error0<FirSourceElement, PsiElement>()
val INFERENCE_ERROR by error0<FirSourceElement, PsiElement>() val INFERENCE_ERROR by error0<FirSourceElement, PsiElement>()
@@ -132,12 +155,18 @@ object FirErrors {
val RETURN_TYPE_MISMATCH_ON_OVERRIDE by error2<FirSourceElement, PsiElement, String, FirMemberDeclaration>() val RETURN_TYPE_MISMATCH_ON_OVERRIDE by error2<FirSourceElement, PsiElement, String, FirMemberDeclaration>()
val PROPERTY_TYPE_MISMATCH_ON_OVERRIDE by error2<FirSourceElement, PsiElement, String, FirMemberDeclaration>() val PROPERTY_TYPE_MISMATCH_ON_OVERRIDE by error2<FirSourceElement, PsiElement, String, FirMemberDeclaration>()
val VAR_TYPE_MISMATCH_ON_OVERRIDE by error2<FirSourceElement, PsiElement, String, FirMemberDeclaration>() val VAR_TYPE_MISMATCH_ON_OVERRIDE by error2<FirSourceElement, PsiElement, String, FirMemberDeclaration>()
// Redeclarations
val MANY_COMPANION_OBJECTS by error0<FirSourceElement, PsiElement>() val MANY_COMPANION_OBJECTS by error0<FirSourceElement, PsiElement>()
val CONFLICTING_OVERLOADS by error1<FirSourceElement, PsiElement, String>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT) val CONFLICTING_OVERLOADS by error1<FirSourceElement, PsiElement, String>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
val REDECLARATION by error1<FirSourceElement, PsiElement, String>() val REDECLARATION by error1<FirSourceElement, PsiElement, String>()
val ANY_METHOD_IMPLEMENTED_IN_INTERFACE by error0<FirSourceElement, PsiElement>() val ANY_METHOD_IMPLEMENTED_IN_INTERFACE by error0<FirSourceElement, PsiElement>()
// Invalid local declarations
val LOCAL_OBJECT_NOT_ALLOWED by error1<FirSourceElement, KtNamedDeclaration, Name>(SourceElementPositioningStrategies.DECLARATION_NAME) val LOCAL_OBJECT_NOT_ALLOWED by error1<FirSourceElement, KtNamedDeclaration, Name>(SourceElementPositioningStrategies.DECLARATION_NAME)
val LOCAL_INTERFACE_NOT_ALLOWED by error1<FirSourceElement, KtNamedDeclaration, Name>(SourceElementPositioningStrategies.DECLARATION_NAME) val LOCAL_INTERFACE_NOT_ALLOWED by error1<FirSourceElement, KtNamedDeclaration, Name>(SourceElementPositioningStrategies.DECLARATION_NAME)
// Functions
val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error2<FirSourceElement, KtFunction, FirMemberDeclaration, FirMemberDeclaration>(SourceElementPositioningStrategies.MODALITY_MODIFIER) val ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS by error2<FirSourceElement, KtFunction, FirMemberDeclaration, FirMemberDeclaration>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
val ABSTRACT_FUNCTION_WITH_BODY by error1<FirSourceElement, KtFunction, FirMemberDeclaration>(SourceElementPositioningStrategies.MODALITY_MODIFIER) val ABSTRACT_FUNCTION_WITH_BODY by error1<FirSourceElement, KtFunction, FirMemberDeclaration>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
val NON_ABSTRACT_FUNCTION_WITH_NO_BODY by error1<FirSourceElement, KtFunction, FirMemberDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) val NON_ABSTRACT_FUNCTION_WITH_NO_BODY by error1<FirSourceElement, KtFunction, FirMemberDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
@@ -146,6 +175,8 @@ object FirErrors {
val FUNCTION_DECLARATION_WITH_NO_NAME by error0<FirSourceElement, KtFunction>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) val FUNCTION_DECLARATION_WITH_NO_NAME by error0<FirSourceElement, KtFunction>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
val ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE by error0<FirSourceElement, KtParameter>(SourceElementPositioningStrategies.PARAMETER_DEFAULT_VALUE) val ANONYMOUS_FUNCTION_PARAMETER_WITH_DEFAULT_VALUE by error0<FirSourceElement, KtParameter>(SourceElementPositioningStrategies.PARAMETER_DEFAULT_VALUE)
val USELESS_VARARG_ON_PARAMETER by warning0<FirSourceElement, KtParameter>() val USELESS_VARARG_ON_PARAMETER by warning0<FirSourceElement, KtParameter>()
// Properties & accessors
val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error2<FirSourceElement, KtModifierListOwner, FirMemberDeclaration, FirMemberDeclaration>(SourceElementPositioningStrategies.MODALITY_MODIFIER) val ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS by error2<FirSourceElement, KtModifierListOwner, FirMemberDeclaration, FirMemberDeclaration>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
val PRIVATE_PROPERTY_IN_INTERFACE by error0<FirSourceElement, KtProperty>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) val PRIVATE_PROPERTY_IN_INTERFACE by error0<FirSourceElement, KtProperty>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
val ABSTRACT_PROPERTY_WITH_INITIALIZER by error0<FirSourceElement, KtExpression>() val ABSTRACT_PROPERTY_WITH_INITIALIZER by error0<FirSourceElement, KtExpression>()
@@ -158,16 +189,24 @@ object FirErrors {
val PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY by error0<FirSourceElement, PsiElement>() val PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY by error0<FirSourceElement, PsiElement>()
val PRIVATE_SETTER_FOR_OPEN_PROPERTY by error0<FirSourceElement, PsiElement>() val PRIVATE_SETTER_FOR_OPEN_PROPERTY by error0<FirSourceElement, PsiElement>()
val EXPECTED_PRIVATE_DECLARATION by error0<FirSourceElement, KtModifierListOwner>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) val EXPECTED_PRIVATE_DECLARATION by error0<FirSourceElement, KtModifierListOwner>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
// Multi-platform projects
val EXPECTED_DECLARATION_WITH_BODY by error0<FirSourceElement, KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) val EXPECTED_DECLARATION_WITH_BODY by error0<FirSourceElement, KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
val EXPECTED_PROPERTY_INITIALIZER by error0<FirSourceElement, KtExpression>() val EXPECTED_PROPERTY_INITIALIZER by error0<FirSourceElement, KtExpression>()
val EXPECTED_DELEGATED_PROPERTY by error0<FirSourceElement, KtPropertyDelegate>() val EXPECTED_DELEGATED_PROPERTY by error0<FirSourceElement, KtPropertyDelegate>()
// Destructuring declaration
val INITIALIZER_REQUIRED_FOR_DESTRUCTURING_DECLARATION by error0<FirSourceElement, KtDestructuringDeclaration>() val INITIALIZER_REQUIRED_FOR_DESTRUCTURING_DECLARATION by error0<FirSourceElement, KtDestructuringDeclaration>()
val COMPONENT_FUNCTION_MISSING by error2<FirSourceElement, PsiElement, Name, FirTypeRef>() val COMPONENT_FUNCTION_MISSING by error2<FirSourceElement, PsiElement, Name, FirTypeRef>()
val COMPONENT_FUNCTION_AMBIGUITY by error2<FirSourceElement, PsiElement, Name, Collection<AbstractFirBasedSymbol<*>>>() val COMPONENT_FUNCTION_AMBIGUITY by error2<FirSourceElement, PsiElement, Name, Collection<AbstractFirBasedSymbol<*>>>()
// Control flow diagnostics
val UNINITIALIZED_VARIABLE by error1<FirSourceElement, PsiElement, FirPropertySymbol>() val UNINITIALIZED_VARIABLE by error1<FirSourceElement, PsiElement, FirPropertySymbol>()
val WRONG_INVOCATION_KIND by warning3<FirSourceElement, PsiElement, AbstractFirBasedSymbol<*>, EventOccurrencesRange, EventOccurrencesRange>() val WRONG_INVOCATION_KIND by warning3<FirSourceElement, PsiElement, AbstractFirBasedSymbol<*>, EventOccurrencesRange, EventOccurrencesRange>()
val LEAKED_IN_PLACE_LAMBDA by error1<FirSourceElement, PsiElement, AbstractFirBasedSymbol<*>>() val LEAKED_IN_PLACE_LAMBDA by error1<FirSourceElement, PsiElement, AbstractFirBasedSymbol<*>>()
val WRONG_IMPLIES_CONDITION by warning0<FirSourceElement, PsiElement>() val WRONG_IMPLIES_CONDITION by warning0<FirSourceElement, PsiElement>()
// Extended checkers
val REDUNDANT_VISIBILITY_MODIFIER by warning0<FirSourceElement, KtModifierListOwner>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER) val REDUNDANT_VISIBILITY_MODIFIER by warning0<FirSourceElement, KtModifierListOwner>(SourceElementPositioningStrategies.VISIBILITY_MODIFIER)
val REDUNDANT_MODALITY_MODIFIER by warning0<FirSourceElement, KtModifierListOwner>(SourceElementPositioningStrategies.MODALITY_MODIFIER) val REDUNDANT_MODALITY_MODIFIER by warning0<FirSourceElement, KtModifierListOwner>(SourceElementPositioningStrategies.MODALITY_MODIFIER)
val REDUNDANT_RETURN_UNIT_TYPE by warning0<FirSourceElement, PsiTypeElement>() val REDUNDANT_RETURN_UNIT_TYPE by warning0<FirSourceElement, PsiTypeElement>()
@@ -184,4 +223,5 @@ object FirErrors {
val VARIABLE_INITIALIZER_IS_REDUNDANT by warning0<FirSourceElement, PsiElement>() val VARIABLE_INITIALIZER_IS_REDUNDANT by warning0<FirSourceElement, PsiElement>()
val VARIABLE_NEVER_READ by warning0<FirSourceElement, KtNamedDeclaration>(SourceElementPositioningStrategies.DECLARATION_NAME) val VARIABLE_NEVER_READ by warning0<FirSourceElement, KtNamedDeclaration>(SourceElementPositioningStrategies.DECLARATION_NAME)
val USELESS_CALL_ON_NOT_NULL by warning0<FirSourceElement, PsiElement>() val USELESS_CALL_ON_NOT_NULL by warning0<FirSourceElement, PsiElement>()
} }