FIR: Fix false positive INAPPLICABLE_INFIX_MODIFIER
This commit is contained in:
+11
-2
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirSourceElement
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.isInfix
|
||||
@@ -16,7 +17,7 @@ import org.jetbrains.kotlin.fir.declarations.isInfix
|
||||
object FirInfixFunctionDeclarationChecker : FirDeclarationChecker<FirMemberDeclaration>() {
|
||||
override fun check(declaration: FirMemberDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (declaration is FirSimpleFunction && declaration.isInfix) {
|
||||
if (declaration.valueParameters.size != 1 || declaration.receiverTypeRef == null) {
|
||||
if (declaration.valueParameters.size != 1 || !hasExtensionOrDispatchReceiver(declaration, context)) {
|
||||
reporter.report(declaration.source)
|
||||
}
|
||||
return
|
||||
@@ -26,7 +27,15 @@ object FirInfixFunctionDeclarationChecker : FirDeclarationChecker<FirMemberDecla
|
||||
}
|
||||
}
|
||||
|
||||
private fun hasExtensionOrDispatchReceiver(
|
||||
function: FirSimpleFunction,
|
||||
context: CheckerContext
|
||||
): Boolean {
|
||||
if (function.receiverTypeRef != null) return true
|
||||
return context.containingDeclarations.lastOrNull() is FirClass<*>
|
||||
}
|
||||
|
||||
private fun DiagnosticReporter.report(source: FirSourceElement?) {
|
||||
source?.let { report(FirErrors.INAPPLICABLE_INFIX_MODIFIER.on(it, "Inapplicable infix modifier")) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user