mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-05-06 05:10:22 +07:00
ExpressionUtils#isSimpleExpression: disable for non-final fields
This commit is contained in:
@@ -5,7 +5,7 @@ import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class Main {
|
||||
private Point field = new Point(0, 0);
|
||||
private final Point field = new Point(0, 0);
|
||||
|
||||
public Point find(List<Point> points) {
|
||||
return points.stream().filter(Objects::nonNull).findFirst().orElse(field);
|
||||
|
||||
@@ -5,7 +5,7 @@ import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class Main {
|
||||
private static Point ZERO = new Point(0, 0);
|
||||
private static final Point ZERO = new Point(0, 0);
|
||||
|
||||
public static Point find(List<Point> points) {
|
||||
return points.stream().filter(Objects::nonNull).findFirst().orElse(ZERO);
|
||||
|
||||
@@ -4,7 +4,7 @@ import java.awt.*;
|
||||
import java.util.List;
|
||||
|
||||
public class Main {
|
||||
private Point field = new Point(0, 0);
|
||||
private final Point field = new Point(0, 0);
|
||||
|
||||
public Point find(List<Point> points) {
|
||||
for (Point pt : poin<caret>ts) {
|
||||
|
||||
@@ -4,7 +4,7 @@ import java.awt.*;
|
||||
import java.util.List;
|
||||
|
||||
public class Main {
|
||||
private static Point ZERO = new Point(0, 0);
|
||||
private static final Point ZERO = new Point(0, 0);
|
||||
|
||||
public static Point find(List<Point> points) {
|
||||
for (Point pt : point<caret>s) {
|
||||
|
||||
@@ -8,7 +8,7 @@ import java.util.function.Predicate;
|
||||
import static java.util.stream.Collectors.*;
|
||||
|
||||
public class Main {
|
||||
static Predicate<String> nonEmpty = s -> s != null && !s.isEmpty();
|
||||
static final Predicate<String> nonEmpty = s -> s != null && !s.isEmpty();
|
||||
|
||||
private static long testFunctionInField(List<String> strings) {
|
||||
long count = 0L;
|
||||
|
||||
@@ -7,7 +7,7 @@ import java.util.function.Predicate;
|
||||
import static java.util.stream.Collectors.*;
|
||||
|
||||
public class Main {
|
||||
static Predicate<String> nonEmpty = s -> s != null && !s.isEmpty();
|
||||
static final Predicate<String> nonEmpty = s -> s != null && !s.isEmpty();
|
||||
|
||||
private static long testFunctionInField(List<String> strings) {
|
||||
return strings.stream().filter(nonEmpty).cou<caret>nt();
|
||||
|
||||
@@ -746,12 +746,14 @@ public class ExpressionUtils {
|
||||
/**
|
||||
* Returns true if the expression can be moved to earlier point in program order without possible semantic change or
|
||||
* notable performance handicap. Examples of simple expressions are:
|
||||
* - literal (number, char, string, class literal, true, false, null)
|
||||
* - compile-time constant
|
||||
* - this
|
||||
* - variable/parameter read
|
||||
* - static field read
|
||||
* - instance field read having 'this' as qualifier
|
||||
* <ul>
|
||||
* <li>literal (number, char, string, class literal, true, false, null)</li>
|
||||
* <li>compile-time constant</li>
|
||||
* <li>this</li>
|
||||
* <li>variable/parameter read</li>
|
||||
* <li>final field read (either static or this-qualified)</li>
|
||||
* <li>some static method calls known to return final static field (like {@code Collections.emptyList()})</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param expression an expression to test (must be valid expression)
|
||||
* @return true if the supplied expression is simple
|
||||
@@ -766,11 +768,14 @@ public class ExpressionUtils {
|
||||
return true;
|
||||
}
|
||||
if(expression instanceof PsiReferenceExpression) {
|
||||
PsiElement target = ((PsiReferenceExpression)expression).resolve();
|
||||
if (target instanceof PsiLocalVariable || target instanceof PsiParameter) return true;
|
||||
PsiExpression qualifier = ((PsiReferenceExpression)expression).getQualifierExpression();
|
||||
if(qualifier == null || qualifier instanceof PsiThisExpression) return true;
|
||||
if(qualifier instanceof PsiReferenceExpression) {
|
||||
PsiElement resolvedQualifier = ((PsiReferenceExpression)qualifier).resolve();
|
||||
if(resolvedQualifier instanceof PsiClass) return true;
|
||||
if (target == null && qualifier == null) return true;
|
||||
if (target instanceof PsiField) {
|
||||
PsiField field = (PsiField)target;
|
||||
if (!field.hasModifierProperty(PsiModifier.FINAL)) return false;
|
||||
return qualifier == null || qualifier instanceof PsiThisExpression || field.hasModifierProperty(PsiModifier.STATIC);
|
||||
}
|
||||
}
|
||||
if (expression instanceof PsiMethodCallExpression) {
|
||||
|
||||
Reference in New Issue
Block a user