FE: forbid extension calls on inline functional parameters
Extension receivers are currently implicitly noinline, and changing that would require modifying the syntax to allow marking them noinline or crossinline. ^KT-5837 Open ^KT-25787 Fixed ^KT-47965 Fixed ^KT-50107 Fixed ^KT-52403 Fixed
This commit is contained in:
+3
-2
@@ -187,7 +187,7 @@ object FirInlineDeclarationChecker : FirFunctionChecker() {
|
||||
if (receiverSymbol in inalienableParameters) {
|
||||
if (!isInvokeOrInlineExtension(targetSymbol)) {
|
||||
reporter.reportOn(
|
||||
qualifiedAccessExpression.source,
|
||||
receiverExpression.source ?: qualifiedAccessExpression.source,
|
||||
FirErrors.USAGE_IS_NOT_INLINABLE,
|
||||
receiverSymbol,
|
||||
context
|
||||
@@ -198,7 +198,8 @@ object FirInlineDeclarationChecker : FirFunctionChecker() {
|
||||
|
||||
private fun isInvokeOrInlineExtension(targetSymbol: FirBasedSymbol<*>?): Boolean {
|
||||
if (targetSymbol !is FirNamedFunctionSymbol) return false
|
||||
if (targetSymbol.isInline) return true
|
||||
// TODO: receivers are currently not inline (KT-5837)
|
||||
// if (targetSymbol.isInline) return true
|
||||
return targetSymbol.name == OperatorNameConventions.INVOKE &&
|
||||
targetSymbol.dispatchReceiverType?.isBuiltinFunctionalType(session) == true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user