From ca115ac7567518b3a01fcf6a591d7cce4ac84f2f Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Fri, 25 Feb 2005 15:15:38 +0300 Subject: [PATCH] Fixed bug in constant expression evaluator --- .../intellij/psi/util/IsConstantExpressionVisitor.java | 8 ++++++++ openapi/src/com/intellij/psi/util/PsiUtil.java | 1 + 2 files changed, 9 insertions(+) diff --git a/openapi/src/com/intellij/psi/util/IsConstantExpressionVisitor.java b/openapi/src/com/intellij/psi/util/IsConstantExpressionVisitor.java index 2d482305361b..4d19d505a7ea 100644 --- a/openapi/src/com/intellij/psi/util/IsConstantExpressionVisitor.java +++ b/openapi/src/com/intellij/psi/util/IsConstantExpressionVisitor.java @@ -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 visitedVars = new THashSet(); 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; diff --git a/openapi/src/com/intellij/psi/util/PsiUtil.java b/openapi/src/com/intellij/psi/util/PsiUtil.java index 2c33b842257a..82f4d1be9c37 100644 --- a/openapi/src/com/intellij/psi/util/PsiUtil.java +++ b/openapi/src/com/intellij/psi/util/PsiUtil.java @@ -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;