diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java index 2522ce7cd82c..b5876ba15922 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/DfaPsiUtil.java @@ -89,7 +89,7 @@ public class DfaPsiUtil { if (owner instanceof PsiEnumConstant || PsiUtil.isAnnotationMethod(owner)) { return Nullness.NOT_NULL; } - if (owner instanceof PsiMethod && isEnumValueOf((PsiMethod)owner)) { + if (owner instanceof PsiMethod && isEnumPredefinedMethod((PsiMethod)owner)) { return Nullness.NOT_NULL; } @@ -169,14 +169,14 @@ public class DfaPsiUtil { return AnnotationUtil.findAnnotation(owner, anno.getQualifiedName()) == anno; } - private static boolean isEnumValueOf(PsiMethod method) { - if ("valueOf".equals(method.getName()) && method.hasModifierProperty(PsiModifier.STATIC)) { + private static boolean isEnumPredefinedMethod(PsiMethod method) { + String methodName = method.getName(); + if (("valueOf".equals(methodName) || "values".equals(methodName)) && method.hasModifierProperty(PsiModifier.STATIC)) { PsiClass containingClass = method.getContainingClass(); if (containingClass != null && containingClass.isEnum()) { PsiParameter[] parameters = method.getParameterList().getParameters(); - if (parameters.length == 1 && parameters[0].getType().equalsToText(CommonClassNames.JAVA_LANG_STRING)) { - return true; - } + if ("values".equals(methodName)) return parameters.length == 0; + return parameters.length == 1 && parameters[0].getType().equalsToText(CommonClassNames.JAVA_LANG_STRING); } } return false; diff --git a/java/java-tests/testData/inspection/dataFlow/fixture/ParanoidMode.java b/java/java-tests/testData/inspection/dataFlow/fixture/ParanoidMode.java index 099b3c78a848..c1eb33204ae5 100644 --- a/java/java-tests/testData/inspection/dataFlow/fixture/ParanoidMode.java +++ b/java/java-tests/testData/inspection/dataFlow/fixture/ParanoidMode.java @@ -23,4 +23,14 @@ class Test { @NotNull native Object knownObject(); +} + +enum DemoEnum { + TEST, DEMO, DEMO_1; + + public static DemoEnum testMethod(String value){ + for (DemoEnum demoEnum : DemoEnum.values()) { + } + return null; + } } \ No newline at end of file