summaryrefslogtreecommitdiff
path: root/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaValueFactory.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaValueFactory.java')
-rw-r--r--java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaValueFactory.java46
1 files changed, 3 insertions, 43 deletions
diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaValueFactory.java b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaValueFactory.java
index ba7772ba2ca2..da1d2d952634 100644
--- a/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaValueFactory.java
+++ b/java/java-analysis-impl/src/com/intellij/codeInspection/dataFlow/value/DfaValueFactory.java
@@ -27,7 +27,6 @@ package com.intellij.codeInspection.dataFlow.value;
import com.intellij.codeInspection.dataFlow.Nullness;
import com.intellij.openapi.util.Pair;
import com.intellij.psi.*;
-import com.intellij.psi.impl.JavaConstantExpressionEvaluator;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.TypeConversionUtil;
import com.intellij.util.containers.ContainerUtil;
@@ -52,6 +51,7 @@ public class DfaValueFactory {
myBoxedFactory = new DfaBoxedValue.Factory(this);
myTypeFactory = new DfaTypeValue.Factory(this);
myRelationFactory = new DfaRelationValue.Factory(this);
+ myExpressionFactory = new DfaExpressionFactory(this);
}
public boolean isHonorFieldInitializers() {
@@ -83,28 +83,7 @@ public class DfaValueFactory {
@Nullable
public DfaValue createValue(PsiExpression psiExpression) {
- if (psiExpression instanceof PsiReferenceExpression) {
- return createReferenceValue((PsiReferenceExpression)psiExpression);
- }
-
- if (psiExpression instanceof PsiLiteralExpression) {
- return createLiteralValue((PsiLiteralExpression)psiExpression);
- }
-
- if (psiExpression instanceof PsiNewExpression) {
- return createTypeValue(psiExpression.getType(), Nullness.NOT_NULL);
- }
-
- final Object value = JavaConstantExpressionEvaluator.computeConstantExpression(psiExpression, false);
- PsiType type = psiExpression.getType();
- if (value != null && type != null) {
- if (value instanceof String) {
- return createTypeValue(type, Nullness.NOT_NULL); // Non-null string literal.
- }
- return getConstFactory().createFromValue(value, type, null);
- }
-
- return null;
+ return myExpressionFactory.getExpressionDfaValue(psiExpression);
}
@Nullable
@@ -116,26 +95,6 @@ public class DfaValueFactory {
}
@Nullable
- public DfaValue createReferenceValue(PsiReferenceExpression referenceExpression) {
- PsiElement psiSource = referenceExpression.resolve();
- if (!(psiSource instanceof PsiVariable)) {
- return null;
- }
-
- final PsiVariable variable = (PsiVariable)psiSource;
- if (variable.hasModifierProperty(PsiModifier.FINAL) && !variable.hasModifierProperty(PsiModifier.TRANSIENT)) {
- DfaValue constValue = getConstFactory().create(variable);
- if (constValue != null) return constValue;
- }
-
- if (!variable.hasModifierProperty(PsiModifier.VOLATILE) && isEffectivelyUnqualified(referenceExpression)) {
- return getVarFactory().createVariableValue(variable, referenceExpression.getType(), false, null);
- }
-
- return null;
- }
-
- @Nullable
public static PsiVariable resolveUnqualifiedVariable(PsiReferenceExpression refExpression) {
if (isEffectivelyUnqualified(refExpression)) {
PsiElement resolved = refExpression.resolve();
@@ -168,6 +127,7 @@ public class DfaValueFactory {
private final DfaBoxedValue.Factory myBoxedFactory;
private final DfaTypeValue.Factory myTypeFactory;
private final DfaRelationValue.Factory myRelationFactory;
+ private final DfaExpressionFactory myExpressionFactory;
@NotNull
public DfaVariableValue.Factory getVarFactory() {