mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Fixed bug in constant expression evaluator
This commit is contained in:
@@ -6,9 +6,13 @@ package com.intellij.psi.util;
|
||||
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import gnu.trove.THashSet;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
public class IsConstantExpressionVisitor extends PsiElementVisitor {
|
||||
protected boolean myIsConstant;
|
||||
private Set<PsiVariable> visitedVars = new THashSet<PsiVariable>();
|
||||
|
||||
public boolean isConstant() {
|
||||
return myIsConstant;
|
||||
@@ -92,6 +96,10 @@ public class IsConstantExpressionVisitor extends PsiElementVisitor {
|
||||
return;
|
||||
}
|
||||
PsiVariable variable = (PsiVariable)refElement;
|
||||
if (!visitedVars.add(variable)) {
|
||||
myIsConstant = false;
|
||||
return;
|
||||
}
|
||||
if (variable instanceof PsiEnumConstant) {
|
||||
myIsConstant = true;
|
||||
return;
|
||||
|
||||
@@ -180,6 +180,7 @@ public final class PsiUtil {
|
||||
}
|
||||
|
||||
public static boolean isConstantExpression(PsiExpression expression) {
|
||||
if (expression == null) return false;
|
||||
IsConstantExpressionVisitor visitor = new IsConstantExpressionVisitor();
|
||||
expression.accept(visitor);
|
||||
return visitor.myIsConstant;
|
||||
|
||||
Reference in New Issue
Block a user