summaryrefslogtreecommitdiff
path: root/java/java-impl/src/com/intellij/slicer/SliceUsage.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/java-impl/src/com/intellij/slicer/SliceUsage.java')
-rw-r--r--java/java-impl/src/com/intellij/slicer/SliceUsage.java24
1 files changed, 19 insertions, 5 deletions
diff --git a/java/java-impl/src/com/intellij/slicer/SliceUsage.java b/java/java-impl/src/com/intellij/slicer/SliceUsage.java
index 0942dcc862a0..b8d5a34c3c61 100644
--- a/java/java-impl/src/com/intellij/slicer/SliceUsage.java
+++ b/java/java-impl/src/com/intellij/slicer/SliceUsage.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -35,21 +35,34 @@ public class SliceUsage extends UsageInfo2UsageAdapter {
private final SliceUsage myParent;
public final SliceAnalysisParams params;
private final PsiSubstitutor mySubstitutor;
+ protected final int indexNesting; // 0 means bare expression 'x', 1 means x[?], 2 means x[?][?] etc
+ @NotNull protected final String syntheticField; // "" means no field, otherwise it's a name of fake field of container, e.g. "keys" for Map
- public SliceUsage(@NotNull PsiElement element, @NotNull SliceUsage parent, @NotNull PsiSubstitutor substitutor) {
+ public SliceUsage(@NotNull PsiElement element,
+ @NotNull SliceUsage parent,
+ @NotNull PsiSubstitutor substitutor,
+ int indexNesting,
+ @NotNull String syntheticField) {
super(new UsageInfo(element));
myParent = parent;
mySubstitutor = substitutor;
+ this.syntheticField = syntheticField;
params = parent.params;
assert params != null;
+ this.indexNesting = indexNesting;
}
+
+ // root usage
private SliceUsage(@NotNull PsiElement element, @NotNull SliceAnalysisParams params) {
super(new UsageInfo(element));
myParent = null;
this.params = params;
mySubstitutor = PsiSubstitutor.EMPTY;
+ indexNesting = 0;
+ syntheticField = "";
}
+ @NotNull
public static SliceUsage createRootUsage(@NotNull PsiElement element, @NotNull SliceAnalysisParams params) {
return new SliceUsage(element, params);
}
@@ -76,7 +89,7 @@ public class SliceUsage extends UsageInfo2UsageAdapter {
@Override
public void run() {
if (params.dataFlowToThis) {
- SliceUtil.processUsagesFlownDownTo(element, uniqueProcessor, SliceUsage.this, mySubstitutor);
+ SliceUtil.processUsagesFlownDownTo(element, uniqueProcessor, SliceUsage.this, mySubstitutor, indexNesting,syntheticField);
}
else {
SliceForwardUtil.processUsagesFlownFromThe(element, uniqueProcessor, SliceUsage.this);
@@ -94,13 +107,14 @@ public class SliceUsage extends UsageInfo2UsageAdapter {
return params.scope;
}
+ @NotNull
SliceUsage copy() {
PsiElement element = getUsageInfo().getElement();
- return getParent() == null ? createRootUsage(element, params) : new SliceUsage(element, getParent(),mySubstitutor);
+ return getParent() == null ? createRootUsage(element, params) : new SliceUsage(element, getParent(),mySubstitutor,indexNesting,syntheticField);
}
+ @NotNull
public PsiSubstitutor getSubstitutor() {
return mySubstitutor;
}
-
}