Pseudocode: Add mapping from pseudo-values to PSI elements
This commit is contained in:
@@ -59,6 +59,9 @@ public interface Pseudocode {
|
|||||||
@Nullable
|
@Nullable
|
||||||
PseudoValue getElementValue(@Nullable JetElement element);
|
PseudoValue getElementValue(@Nullable JetElement element);
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
List<? extends JetElement> getValueElements(@Nullable PseudoValue value);
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
List<? extends Instruction> getUsages(@Nullable PseudoValue value);
|
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.google.common.collect.*;
|
||||||
import com.intellij.openapi.util.NotNullLazyValue;
|
import com.intellij.openapi.util.NotNullLazyValue;
|
||||||
|
import com.intellij.util.containers.BidirectionalMap;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.cfg.Label;
|
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> mutableInstructionList = new ArrayList<Instruction>();
|
||||||
private final List<Instruction> instructions = 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 =
|
private final NotNullLazyValue<Map<PseudoValue, List<? extends Instruction>>> valueUsages =
|
||||||
new NotNullLazyValue<Map<PseudoValue, List<? extends Instruction>>>() {
|
new NotNullLazyValue<Map<PseudoValue, List<? extends Instruction>>>() {
|
||||||
@@ -261,6 +262,13 @@ public class PseudocodeImpl implements Pseudocode {
|
|||||||
return elementsToValues.get(element);
|
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
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public List<? extends Instruction> getUsages(@Nullable PseudoValue value) {
|
public List<? extends Instruction> getUsages(@Nullable PseudoValue value) {
|
||||||
|
|||||||
Reference in New Issue
Block a user