Fixed bug in constant expression evaluator

This commit is contained in:
Alexey Kudravtsev
2005-02-25 15:15:38 +03:00
parent 90fc8fa1e3
commit ca115ac756
2 changed files with 9 additions and 0 deletions
@@ -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;