WrapObjectWithOptionalOfNullableFix: get nullability from common dataflow

This commit is contained in:
Tagir Valeev
2018-09-28 11:13:11 +07:00
parent 003aa20f96
commit 43f52af2ba
2 changed files with 4 additions and 15 deletions
@@ -20,7 +20,7 @@ import com.intellij.codeInsight.daemon.QuickFixBundle;
import com.intellij.codeInsight.intention.HighPriorityAction;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.codeInspection.LocalQuickFixAndIntentionActionOnPsiElement;
import com.intellij.codeInspection.dataFlow.DfaPsiUtil;
import com.intellij.codeInspection.dataFlow.NullabilityUtil;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
@@ -134,7 +134,7 @@ public class WrapObjectWithOptionalOfNullableFix extends MethodArgumentFix imple
if (resolvedClass == null || !CommonClassNames.JAVA_UTIL_OPTIONAL.equals(resolvedClass.getQualifiedName())) return false;
final Collection<PsiType> values = resolve.getSubstitutor().getSubstitutionMap().values();
if (values.size() == 0) return true;
if (values.isEmpty()) return true;
if (values.size() > 1) return false;
final PsiType optionalTypeParameter = ContainerUtil.getFirstItem(values);
if (optionalTypeParameter == null) return false;
@@ -144,18 +144,7 @@ public class WrapObjectWithOptionalOfNullableFix extends MethodArgumentFix imple
@NotNull
private static PsiExpression getModifiedExpression(PsiExpression expression) {
final Project project = expression.getProject();
PsiModifierListOwner toCheckNullability = null;
if (expression instanceof PsiMethodCallExpression) {
toCheckNullability = ((PsiMethodCallExpression)expression).resolveMethod();
}
else if (expression instanceof PsiReferenceExpression) {
final PsiElement resolved = ((PsiReferenceExpression)expression).resolve();
if (resolved instanceof PsiModifierListOwner) {
toCheckNullability = (PsiModifierListOwner)resolved;
}
}
final Nullability nullability = toCheckNullability == null ? Nullability.NOT_NULL : DfaPsiUtil
.getElementNullability(expression.getType(), toCheckNullability);
final Nullability nullability = NullabilityUtil.getExpressionNullability(expression, true);
String methodName = nullability == Nullability.NOT_NULL ? "of" : "ofNullable";
final String newExpressionText = CommonClassNames.JAVA_UTIL_OPTIONAL + "." + methodName + "(" + expression.getText() + ")";
return JavaPsiFacade.getElementFactory(project).createExpressionFromText(newExpressionText, expression);
@@ -5,7 +5,7 @@ public class Test {
void m() {
long ll = 10;
f(10, Optional.ofNullable(ll), 10);
f(10, Optional.of(ll), 10);
}