IDEA-151898 (Optional.get without isPresent)

This commit is contained in:
Bas Leijdekkers
2016-02-19 15:15:52 +01:00
parent 351b1a0d15
commit 3198fbf508
2 changed files with 21 additions and 4 deletions
@@ -62,16 +62,18 @@ public class OptionalGetWithoutIsPresentInspection extends BaseInspection {
return;
}
final PsiExpression qualifier = ParenthesesUtils.stripParentheses(methodExpression.getQualifierExpression());
if (!(qualifier instanceof PsiReferenceExpression)) {
if (qualifier == null) {
return;
}
final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)qualifier;
final PsiType type = qualifier.getType();
if (!TypeUtils.isOptional(type)) {
return;
}
if (isSurroundedByIsPresentGuard(referenceExpression)) {
return;
if (qualifier instanceof PsiReferenceExpression) {
final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)qualifier;
if (isSurroundedByIsPresentGuard(referenceExpression)) {
return;
}
}
registerMethodCallError(expression, type);
}
@@ -43,6 +43,18 @@ public class OptionalGetWithoutIsPresentInspectionTest extends LightInspectionTe
"}");
}
public void testOptionalWithoutVariable() {
doTest("import java.util.Optional;" +
"class X {" +
" {" +
" System.out.println(getName()./*'Optional.get()' without 'isPresent()' check*/get/**/());" +
" }" +
" Optional<String> getName() {" +
" return Optional.empty();" +
" }" +
"}");
}
@Nullable
@Override
protected InspectionProfileEntry getInspection() {
@@ -60,6 +72,9 @@ public class OptionalGetWithoutIsPresentInspectionTest extends LightInspectionTe
" public boolean isPresent() {" +
" return true;" +
" }" +
" public static<T> Optional<T> empty() {" +
" return new Optional<>();" +
" }" +
"}",
"package java.util;" +