mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-204461 DFA: Make final getter stable if it gets a final field
This commit is contained in:
+5
-5
@@ -26,10 +26,7 @@ import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.impl.JavaConstantExpressionEvaluator;
|
||||
import com.intellij.psi.util.InheritanceUtil;
|
||||
import com.intellij.psi.util.PropertyUtilBase;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.*;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.siyeh.ig.psiutils.ClassUtils;
|
||||
@@ -378,9 +375,12 @@ public class DfaExpressionFactory {
|
||||
|
||||
private static final class GetterDescriptor implements VariableDescriptor {
|
||||
private final @NotNull PsiMethod myGetter;
|
||||
private final boolean myStable;
|
||||
|
||||
GetterDescriptor(@NotNull PsiMethod getter) {
|
||||
myGetter = getter;
|
||||
PsiField field = PsiUtil.canBeOverridden(getter) ? null : PropertyUtil.getFieldOfGetter(getter);
|
||||
myStable = field != null && field.hasModifierProperty(PsiModifier.FINAL);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -397,7 +397,7 @@ public class DfaExpressionFactory {
|
||||
|
||||
@Override
|
||||
public boolean isStable() {
|
||||
return false;
|
||||
return myStable;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+1
-1
@@ -42,7 +42,7 @@ class BrokenAlignment {
|
||||
|
||||
private static class Data {
|
||||
@Nullable final String text;
|
||||
@Nullable final Data inner;
|
||||
@Nullable Data inner;
|
||||
|
||||
Data(@Nullable String text, Data inner) {
|
||||
this.text = text;
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
import java.io.File;
|
||||
|
||||
final class MyClass {
|
||||
|
||||
|
||||
void test(Point p) {
|
||||
if (p.getX() == p.getY()) {
|
||||
unknown();
|
||||
if (<warning descr="Condition 'p.getX() == p.getY()' is always 'true'">p.getX() == p.getY()</warning>) {}
|
||||
}
|
||||
}
|
||||
|
||||
native void unknown();
|
||||
|
||||
void testFile(File f) {
|
||||
if (!f.exists()) {
|
||||
unknown();
|
||||
if (!f.exists()) {}
|
||||
}
|
||||
}
|
||||
|
||||
final class Point {
|
||||
final int x;
|
||||
final int y;
|
||||
|
||||
Point(int x, int y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public int getX() {return x;}
|
||||
public int getY() {return y;}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user