Minor: !!-related quick-fixes refactoring

This commit is contained in:
Mikhail Glukhikh
2017-07-03 15:18:10 +03:00
parent 4f678fa85c
commit 2d1e1cb6ed
@@ -110,45 +110,45 @@ class AddExclExclCallFix(psiElement: PsiElement, val checkImplicitReceivers: Boo
private fun getExpressionForIntroduceCall(): ExpressionForCall? { private fun getExpressionForIntroduceCall(): ExpressionForCall? {
val psiElement = element ?: return null val psiElement = element ?: return null
return if ((psiElement as? KtExpression).isNullExpression()) { if ((psiElement as? KtExpression).isNullExpression()) {
return null return null
} }
else if (psiElement is LeafPsiElement && psiElement.elementType == KtTokens.DOT) { if (psiElement is LeafPsiElement && psiElement.elementType == KtTokens.DOT) {
(psiElement.prevSibling as? KtExpression).expressionForCall() return (psiElement.prevSibling as? KtExpression).expressionForCall()
} }
else if (psiElement is KtArrayAccessExpression) { return when (psiElement) {
psiElement.arrayExpression.expressionForCall() is KtArrayAccessExpression -> psiElement.arrayExpression.expressionForCall()
} is KtOperationReferenceExpression -> {
else if (psiElement is KtOperationReferenceExpression) { val parent = psiElement.parent
val parent = psiElement.parent when (parent) {
when (parent) { is KtUnaryExpression -> parent.baseExpression.expressionForCall()
is KtUnaryExpression -> parent.baseExpression.expressionForCall() is KtBinaryExpression -> {
is KtBinaryExpression -> { val receiver = if (KtPsiUtil.isInOrNotInOperation(parent)) parent.right else parent.left
val receiver = if (KtPsiUtil.isInOrNotInOperation(parent)) parent.right else parent.left receiver.expressionForCall()
receiver.expressionForCall()
}
else -> null
}
}
else if (psiElement is KtExpression) {
val context = psiElement.analyze()
if (checkImplicitReceivers && psiElement.getResolvedCall(context)?.getImplicitReceiverValue() != null) {
val expressionToReplace = psiElement.parent as? KtCallExpression ?: psiElement
expressionToReplace.expressionForCall(implicitReceiver = true)
}
else {
context[BindingContext.EXPRESSION_TYPE_INFO, psiElement]?.let {
val type = it.type
if (type != null) {
val nullability = it.dataFlowInfo.getStableNullability(DataFlowValueFactory.createDataFlowValue(psiElement, type, context, psiElement.findModuleDescriptor()))
if (!nullability.canBeNonNull()) return null
} }
else -> null
} }
psiElement.expressionForCall()
} }
} is KtExpression -> {
else { val context = psiElement.analyze()
null if (checkImplicitReceivers && psiElement.getResolvedCall(context)?.getImplicitReceiverValue() != null) {
val expressionToReplace = psiElement.parent as? KtCallExpression ?: psiElement
expressionToReplace.expressionForCall(implicitReceiver = true)
}
else {
context[BindingContext.EXPRESSION_TYPE_INFO, psiElement]?.let {
val type = it.type
if (type != null) {
val nullability = it.dataFlowInfo.getStableNullability(
DataFlowValueFactory.createDataFlowValue(psiElement, type, context, psiElement.findModuleDescriptor())
)
if (!nullability.canBeNonNull()) return null
}
}
psiElement.expressionForCall()
}
}
else -> null
} }
} }