This commit is contained in:
Alexey Kudravtsev
2017-03-16 14:31:02 +03:00
parent 3ce24db8e1
commit 4d2e1aaaf6
2 changed files with 9 additions and 19 deletions
@@ -39,7 +39,6 @@ import java.util.concurrent.atomic.AtomicBoolean;
* @author Gregory.Shrago
*/
public class DfaUtil {
@Nullable("null means DFA analysis has failed (too complex to analyze)")
public static Collection<PsiExpression> getCachedVariableValues(@Nullable final PsiVariable variable, @Nullable final PsiElement context) {
if (variable == null || context == null) return Collections.emptyList();
@@ -53,7 +52,7 @@ public class DfaUtil {
ValuableInstructionVisitor.PlaceResult placeResult = value.get(context);
final Collection<FList<PsiExpression>> concatenations = placeResult == null ? null : placeResult.myValues.get(variable);
if (concatenations != null) {
return ContainerUtil.map(concatenations, expressions -> concatenateExpressions(expressions));
return ContainerUtil.map(concatenations, DfaUtil::concatenateExpressions);
}
return Collections.emptyList();
}
@@ -83,23 +82,23 @@ public class DfaUtil {
}
@NotNull
public static Collection<? extends PsiElement> getPossibleInitializationElements(final PsiElement qualifierExpression) {
public static Collection<PsiExpression> getPossibleInitializationElements(@NotNull PsiElement qualifierExpression) {
if (qualifierExpression instanceof PsiMethodCallExpression) {
return Collections.singletonList(qualifierExpression);
return Collections.singletonList((PsiMethodCallExpression)qualifierExpression);
}
if (qualifierExpression instanceof PsiReferenceExpression) {
final PsiElement targetElement = ((PsiReferenceExpression)qualifierExpression).resolve();
if (!(targetElement instanceof PsiVariable)) {
return Collections.emptyList();
}
final Collection<? extends PsiElement> variableValues = getCachedVariableValues((PsiVariable)targetElement, qualifierExpression);
Collection<PsiExpression> variableValues = getCachedVariableValues((PsiVariable)targetElement, qualifierExpression);
if (variableValues == null || variableValues.isEmpty()) {
return DfaPsiUtil.getVariableAssignmentsInFile((PsiVariable)targetElement, false, qualifierExpression);
}
return variableValues;
}
if (qualifierExpression instanceof PsiLiteralExpression) {
return Collections.singletonList(qualifierExpression);
return Collections.singletonList((PsiLiteralExpression)qualifierExpression);
}
return Collections.emptyList();
}
@@ -180,10 +179,7 @@ public class DfaUtil {
public DfaInstructionState[] visitPush(PushInstruction instruction, DataFlowRunner runner, DfaMemoryState memState) {
PsiExpression place = instruction.getPlace();
if (place != null) {
PlaceResult result = myResults.get(place);
if (result == null) {
myResults.put(place, result = new PlaceResult());
}
PlaceResult result = myResults.computeIfAbsent(place, __ -> new PlaceResult());
final Map<DfaVariableValue,DfaVariableState> map = ((ValuableDataFlowRunner.MyDfaMemoryState)memState).getVariableStates();
for (Map.Entry<DfaVariableValue, DfaVariableState> entry : map.entrySet()) {
ValuableDataFlowRunner.ValuableDfaVariableState state = (ValuableDataFlowRunner.ValuableDfaVariableState)entry.getValue();
@@ -35,8 +35,7 @@ public abstract class SliceUsage extends UsageInfo2UsageAdapter {
private final SliceUsage myParent;
public final SliceAnalysisParams params;
public SliceUsage(@NotNull PsiElement element,
@NotNull SliceUsage parent) {
public SliceUsage(@NotNull PsiElement element, @NotNull SliceUsage parent) {
super(new UsageInfo(element));
myParent = parent;
params = parent.params;
@@ -51,12 +50,7 @@ public abstract class SliceUsage extends UsageInfo2UsageAdapter {
}
public void processChildren(@NotNull Processor<SliceUsage> processor) {
final PsiElement element = ApplicationManager.getApplication().runReadAction(new Computable<PsiElement>() {
@Override
public PsiElement compute() {
return getElement();
}
});
final PsiElement element = ApplicationManager.getApplication().runReadAction((Computable<PsiElement>)this::getElement);
ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator();
indicator.checkCanceled();
@@ -97,5 +91,5 @@ public abstract class SliceUsage extends UsageInfo2UsageAdapter {
}
@NotNull
protected abstract SliceUsage copy();
protected abstract SliceUsage copy();
}