Pseudocode: Add mapping from pseudo-values to PSI elements

This commit is contained in:
Alexey Sedunov
2014-07-11 19:30:23 +04:00
parent 4f54d833d3
commit 8083ffad47
2 changed files with 12 additions and 1 deletions
@@ -59,6 +59,9 @@ public interface Pseudocode {
@Nullable
PseudoValue getElementValue(@Nullable JetElement element);
@NotNull
List<? extends JetElement> getValueElements(@Nullable PseudoValue value);
@NotNull
List<? extends Instruction> getUsages(@Nullable PseudoValue value);
}
@@ -18,6 +18,7 @@ package org.jetbrains.jet.lang.cfg.pseudocode;
import com.google.common.collect.*;
import com.intellij.openapi.util.NotNullLazyValue;
import com.intellij.util.containers.BidirectionalMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.cfg.Label;
@@ -88,7 +89,7 @@ public class PseudocodeImpl implements Pseudocode {
private final List<Instruction> mutableInstructionList = new ArrayList<Instruction>();
private final List<Instruction> instructions = new ArrayList<Instruction>();
private final Map<JetElement, PseudoValue> elementsToValues = new HashMap<JetElement, PseudoValue>();
private final BidirectionalMap<JetElement, PseudoValue> elementsToValues = new BidirectionalMap<JetElement, PseudoValue>();
private final NotNullLazyValue<Map<PseudoValue, List<? extends Instruction>>> valueUsages =
new NotNullLazyValue<Map<PseudoValue, List<? extends Instruction>>>() {
@@ -261,6 +262,13 @@ public class PseudocodeImpl implements Pseudocode {
return elementsToValues.get(element);
}
@NotNull
@Override
public List<? extends JetElement> getValueElements(@Nullable PseudoValue value) {
List<? extends JetElement> result = elementsToValues.getKeysByValue(value);
return result != null ? result : Collections.<JetElement>emptyList();
}
@NotNull
@Override
public List<? extends Instruction> getUsages(@Nullable PseudoValue value) {