diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/ConstantExpressionVisitor.java b/java/java-psi-impl/src/com/intellij/psi/impl/ConstantExpressionVisitor.java index 4e2a1ebfdbbd..0c53e114b46d 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/ConstantExpressionVisitor.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/ConstantExpressionVisitor.java @@ -16,16 +16,17 @@ package com.intellij.psi.impl; import com.intellij.psi.*; +import com.intellij.psi.impl.source.PsiClassReferenceType; import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.ClassUtil; import com.intellij.psi.util.ConstantEvaluationOverflowException; import com.intellij.psi.util.ConstantExpressionUtil; -import java.util.HashMap; import com.intellij.util.containers.StringInterner; import gnu.trove.THashSet; import org.jetbrains.annotations.Nullable; import java.util.Arrays; +import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentMap; @@ -507,7 +508,14 @@ class ConstantExpressionVisitor extends JavaElementVisitor implements PsiConstan @Override public void visitClassObjectAccessExpression(PsiClassObjectAccessExpression expression) { - myResult = expression.getOperand().getType(); + PsiType type = expression.getOperand().getType(); + if (type instanceof PsiClassReferenceType) { + PsiClass aClass = ((PsiClassReferenceType)type).resolve(); + if (aClass != null) { + type = JavaPsiFacade.getElementFactory(expression.getProject()).createType(aClass, ((PsiClassReferenceType)type).getParameters()); + } + } + myResult = type; } @Override public void visitReferenceExpression(PsiReferenceExpression expression) { diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/JavaConstantExpressionEvaluator.java b/java/java-psi-impl/src/com/intellij/psi/impl/JavaConstantExpressionEvaluator.java index dea9c8b1fc43..a8c083d6ead7 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/JavaConstantExpressionEvaluator.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/JavaConstantExpressionEvaluator.java @@ -89,7 +89,7 @@ public class JavaConstantExpressionEvaluator extends JavaRecursiveElementWalking } private static final CachedValueProvider> PROVIDER = () -> { - ConcurrentMap value = ContainerUtil.createConcurrentSoftMap(); + ConcurrentMap value = ContainerUtil.createConcurrentWeakMap(); return CachedValueProvider.Result.create(value, PsiModificationTracker.MODIFICATION_COUNT); };