diff options
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.java | 46 |
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() { |