refactoring: PseudocodeVariableDataCollector

added a reference to pseudocode
This commit is contained in:
Svetlana Isakova
2014-02-25 15:12:06 +04:00
parent 006f3ccbe9
commit 9dd23d9289
2 changed files with 13 additions and 11 deletions
@@ -28,23 +28,23 @@ import org.jetbrains.jet.lang.cfg.PseudocodeTraverser.*
import java.util.*
public class PseudocodeVariableDataCollector(private val bindingContext: BindingContext) : PseudocodeTraverser() {
public class PseudocodeVariableDataCollector(
private val bindingContext: BindingContext,
private val pseudocode: Pseudocode
) : PseudocodeTraverser() {
suppress("UNCHECKED_CAST")
public fun <D> collectDataJ(
pseudocode: Pseudocode,
traversalOrder: TraversalOrder,
instructionDataMergeStrategy: InstructionDataMergeStrategy<MutableMap<VariableDescriptor, D>>
): MutableMap<Instruction, Edges<MutableMap<VariableDescriptor, D>>> {
//see KT-4605
return collectData(
pseudocode, traversalOrder,
instructionDataMergeStrategy as InstructionDataMergeStrategy<Map<VariableDescriptor, D>>
traversalOrder, instructionDataMergeStrategy as InstructionDataMergeStrategy<Map<VariableDescriptor, D>>
) as MutableMap<Instruction, Edges<MutableMap<VariableDescriptor, D>>>
}
public fun <D> collectData(
pseudocode: Pseudocode,
traversalOrder: TraversalOrder,
instructionDataMergeStrategy: InstructionDataMergeStrategy<Map<VariableDescriptor, D>>
): Map<Instruction, Edges<Map<VariableDescriptor, D>>> {
@@ -41,6 +41,7 @@ import static org.jetbrains.jet.lang.cfg.PseudocodeTraverser.TraversalOrder.FORW
public class PseudocodeVariablesData {
private final Pseudocode pseudocode;
private final BindingContext bindingContext;
private final PseudocodeVariableDataCollector pseudocodeVariableDataCollector;
private final Map<Pseudocode, Set<VariableDescriptor>> declaredVariablesForDeclaration = Maps.newHashMap();
private final Map<Pseudocode, Set<VariableDescriptor>> usedVariablesForDeclaration = Maps.newHashMap();
@@ -50,6 +51,7 @@ public class PseudocodeVariablesData {
public PseudocodeVariablesData(@NotNull Pseudocode pseudocode, @NotNull BindingContext bindingContext) {
this.pseudocode = pseudocode;
this.bindingContext = bindingContext;
this.pseudocodeVariableDataCollector = new PseudocodeVariableDataCollector(bindingContext, pseudocode);
}
@NotNull
@@ -124,19 +126,19 @@ public class PseudocodeVariablesData {
@NotNull
public Map<Instruction, Edges<Map<VariableDescriptor, VariableInitState>>> getVariableInitializers() {
if (variableInitializers == null) {
variableInitializers = getVariableInitializers(pseudocode);
variableInitializers = computeVariableInitializers();
}
return variableInitializers;
}
@NotNull
private Map<Instruction, Edges<Map<VariableDescriptor, VariableInitState>>> getVariableInitializers(@NotNull Pseudocode pseudocode) {
private Map<Instruction, Edges<Map<VariableDescriptor, VariableInitState>>> computeVariableInitializers() {
final Set<VariableDescriptor> declaredVariables = getDeclaredVariables(pseudocode, true);
return new PseudocodeVariableDataCollector(bindingContext).collectDataJ(
pseudocode, FORWARD,
return pseudocodeVariableDataCollector.collectDataJ(
FORWARD,
new InstructionDataMergeStrategy<Map<VariableDescriptor, VariableInitState>>() {
@NotNull
@Override
@@ -231,8 +233,8 @@ public class PseudocodeVariablesData {
@NotNull
public Map<Instruction, Edges<Map<VariableDescriptor, VariableUseState>>> getVariableUseStatusData() {
return new PseudocodeVariableDataCollector(bindingContext).collectDataJ(
pseudocode, BACKWARD,
return pseudocodeVariableDataCollector.collectDataJ(
BACKWARD,
new InstructionDataMergeStrategy<Map<VariableDescriptor, VariableUseState>>() {
@NotNull
@Override