refactoring: PseudocodeVariableDataCollector
added a reference to pseudocode
This commit is contained in:
@@ -28,23 +28,23 @@ import org.jetbrains.jet.lang.cfg.PseudocodeTraverser.*
|
|||||||
|
|
||||||
import java.util.*
|
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")
|
suppress("UNCHECKED_CAST")
|
||||||
public fun <D> collectDataJ(
|
public fun <D> collectDataJ(
|
||||||
pseudocode: Pseudocode,
|
|
||||||
traversalOrder: TraversalOrder,
|
traversalOrder: TraversalOrder,
|
||||||
instructionDataMergeStrategy: InstructionDataMergeStrategy<MutableMap<VariableDescriptor, D>>
|
instructionDataMergeStrategy: InstructionDataMergeStrategy<MutableMap<VariableDescriptor, D>>
|
||||||
): MutableMap<Instruction, Edges<MutableMap<VariableDescriptor, D>>> {
|
): MutableMap<Instruction, Edges<MutableMap<VariableDescriptor, D>>> {
|
||||||
//see KT-4605
|
//see KT-4605
|
||||||
return collectData(
|
return collectData(
|
||||||
pseudocode, traversalOrder,
|
traversalOrder, instructionDataMergeStrategy as InstructionDataMergeStrategy<Map<VariableDescriptor, D>>
|
||||||
instructionDataMergeStrategy as InstructionDataMergeStrategy<Map<VariableDescriptor, D>>
|
|
||||||
) as MutableMap<Instruction, Edges<MutableMap<VariableDescriptor, D>>>
|
) as MutableMap<Instruction, Edges<MutableMap<VariableDescriptor, D>>>
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun <D> collectData(
|
public fun <D> collectData(
|
||||||
pseudocode: Pseudocode,
|
|
||||||
traversalOrder: TraversalOrder,
|
traversalOrder: TraversalOrder,
|
||||||
instructionDataMergeStrategy: InstructionDataMergeStrategy<Map<VariableDescriptor, D>>
|
instructionDataMergeStrategy: InstructionDataMergeStrategy<Map<VariableDescriptor, D>>
|
||||||
): Map<Instruction, Edges<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 {
|
public class PseudocodeVariablesData {
|
||||||
private final Pseudocode pseudocode;
|
private final Pseudocode pseudocode;
|
||||||
private final BindingContext bindingContext;
|
private final BindingContext bindingContext;
|
||||||
|
private final PseudocodeVariableDataCollector pseudocodeVariableDataCollector;
|
||||||
|
|
||||||
private final Map<Pseudocode, Set<VariableDescriptor>> declaredVariablesForDeclaration = Maps.newHashMap();
|
private final Map<Pseudocode, Set<VariableDescriptor>> declaredVariablesForDeclaration = Maps.newHashMap();
|
||||||
private final Map<Pseudocode, Set<VariableDescriptor>> usedVariablesForDeclaration = 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) {
|
public PseudocodeVariablesData(@NotNull Pseudocode pseudocode, @NotNull BindingContext bindingContext) {
|
||||||
this.pseudocode = pseudocode;
|
this.pseudocode = pseudocode;
|
||||||
this.bindingContext = bindingContext;
|
this.bindingContext = bindingContext;
|
||||||
|
this.pseudocodeVariableDataCollector = new PseudocodeVariableDataCollector(bindingContext, pseudocode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -124,19 +126,19 @@ public class PseudocodeVariablesData {
|
|||||||
@NotNull
|
@NotNull
|
||||||
public Map<Instruction, Edges<Map<VariableDescriptor, VariableInitState>>> getVariableInitializers() {
|
public Map<Instruction, Edges<Map<VariableDescriptor, VariableInitState>>> getVariableInitializers() {
|
||||||
if (variableInitializers == null) {
|
if (variableInitializers == null) {
|
||||||
variableInitializers = getVariableInitializers(pseudocode);
|
variableInitializers = computeVariableInitializers();
|
||||||
}
|
}
|
||||||
|
|
||||||
return variableInitializers;
|
return variableInitializers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@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);
|
final Set<VariableDescriptor> declaredVariables = getDeclaredVariables(pseudocode, true);
|
||||||
|
|
||||||
return new PseudocodeVariableDataCollector(bindingContext).collectDataJ(
|
return pseudocodeVariableDataCollector.collectDataJ(
|
||||||
pseudocode, FORWARD,
|
FORWARD,
|
||||||
new InstructionDataMergeStrategy<Map<VariableDescriptor, VariableInitState>>() {
|
new InstructionDataMergeStrategy<Map<VariableDescriptor, VariableInitState>>() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
@@ -231,8 +233,8 @@ public class PseudocodeVariablesData {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public Map<Instruction, Edges<Map<VariableDescriptor, VariableUseState>>> getVariableUseStatusData() {
|
public Map<Instruction, Edges<Map<VariableDescriptor, VariableUseState>>> getVariableUseStatusData() {
|
||||||
return new PseudocodeVariableDataCollector(bindingContext).collectDataJ(
|
return pseudocodeVariableDataCollector.collectDataJ(
|
||||||
pseudocode, BACKWARD,
|
BACKWARD,
|
||||||
new InstructionDataMergeStrategy<Map<VariableDescriptor, VariableUseState>>() {
|
new InstructionDataMergeStrategy<Map<VariableDescriptor, VariableUseState>>() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user