making LambdaArgument methods nullable

overridden `LambdaArgument.getArgumentExpression` removed because it is already nullable in parent

#EA-117013
This commit is contained in:
Nicolay Mitropolsky
2018-02-26 15:34:28 +03:00
parent 664a25ce81
commit 2f6fb4091b
18 changed files with 47 additions and 45 deletions
@@ -173,7 +173,7 @@ class EffectsExtractingVisitor(
valueArgumentsByIndex?.mapTo(arguments) {
val valueArgument = (it as? ExpressionValueArgument)?.valueArgument ?: return null
when (valueArgument) {
is KtLambdaArgument -> ESLambda(valueArgument.getLambdaExpression())
is KtLambdaArgument -> valueArgument.getLambdaExpression()?.let { ESLambda(it) } ?: return null
else -> extractOrGetCached(valueArgument.getArgumentExpression() ?: return null)
}
} ?: return null
@@ -20,9 +20,7 @@ import com.intellij.lang.ASTNode
class KtLambdaArgument(node: ASTNode) : KtValueArgument(node), LambdaArgument {
override fun getArgumentExpression() = super.getArgumentExpression()!!
override fun getLambdaExpression(): KtLambdaExpression = getArgumentExpression().unpackFunctionLiteral()!!
override fun getLambdaExpression(): KtLambdaExpression? = getArgumentExpression()?.unpackFunctionLiteral()
}
fun KtExpression.unpackFunctionLiteral(allowParentheses: Boolean = false): KtLambdaExpression? {
@@ -37,9 +37,7 @@ interface ValueArgument {
}
interface LambdaArgument : ValueArgument {
fun getLambdaExpression(): KtLambdaExpression
override fun getArgumentExpression(): KtExpression
fun getLambdaExpression(): KtLambdaExpression?
}
interface ValueArgumentName {
@@ -31,11 +31,8 @@ import org.jetbrains.kotlin.resolve.scopes.MemberScopeImpl
import org.jetbrains.kotlin.resolve.scopes.receivers.TransientReceiver
import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.storage.getValue
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.types.createDynamicType
import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.expressions.OperatorConventions
import org.jetbrains.kotlin.types.isDynamic
import org.jetbrains.kotlin.utils.Printer
import java.util.*
@@ -53,7 +50,8 @@ class DynamicCallableDescriptors(storageManager: StorageManager, builtIns: Kotli
override fun getContributedFunctions(name: Name, location: LookupLocation): Collection<SimpleFunctionDescriptor> {
if (isAugmentedAssignmentConvention(name)) return listOf()
if (call.callType == Call.CallType.INVOKE
&& call.valueArgumentList == null && call.functionLiteralArguments.isEmpty()) {
&& call.valueArgumentList == null && call.functionLiteralArguments.isEmpty()
) {
// this means that we are looking for "imaginary" invokes,
// e.g. in `+d` we are looking for property "plus" with member "invoke"
return listOf()
@@ -217,7 +215,10 @@ class DynamicCallableDescriptors(storageManager: StorageManager, builtIns: Kotli
if (hasSpreadOperator) {
for (funLiteralArg in call.functionLiteralArguments) {
addParameter(funLiteralArg, getFunctionType(funLiteralArg.getLambdaExpression()), null)
addParameter(
funLiteralArg,
funLiteralArg.getLambdaExpression()?.let { getFunctionType(it) } ?: TypeUtils.CANT_INFER_FUNCTION_PARAM_TYPE,
null)
}
break
@@ -462,8 +462,8 @@ class PSICallResolver(
oldCall.valueArguments.last()
} else {
if (externalLambdaArguments.size > 2) {
externalLambdaArguments.drop(1).forEach {
context.trace.report(Errors.MANY_LAMBDA_EXPRESSION_ARGUMENTS.on(it.getLambdaExpression()))
externalLambdaArguments.drop(1).mapNotNull { it.getLambdaExpression() }.forEach {
context.trace.report(Errors.MANY_LAMBDA_EXPRESSION_ARGUMENTS.on(it))
}
}
@@ -50,17 +50,13 @@ class ErrorExpressionGenerator(statementGenerator: StatementGenerator) : Stateme
receiverExpression.genExpr()
}
ktCall.valueArguments.forEach {
(ktCall.valueArguments + ktCall.lambdaArguments).forEach {
val ktArgument = it.getArgumentExpression()
if (ktArgument != null) {
irErrorCall.addArgument(ktArgument.genExpr())
}
}
ktCall.lambdaArguments.forEach {
irErrorCall.addArgument(it.getArgumentExpression().genExpr())
}
irErrorCall
}