Minor: ControlFlowInformationProvider cleanup
This commit is contained in:
+14
-13
@@ -94,7 +94,7 @@ public class ControlFlowInformationProvider {
|
|||||||
this(declaration, trace, new ControlFlowProcessor(trace).generatePseudocode(declaration));
|
this(declaration, trace, new ControlFlowProcessor(trace).generatePseudocode(declaration));
|
||||||
}
|
}
|
||||||
|
|
||||||
public PseudocodeVariablesData getPseudocodeVariablesData() {
|
private PseudocodeVariablesData getPseudocodeVariablesData() {
|
||||||
if (pseudocodeVariablesData == null) {
|
if (pseudocodeVariablesData == null) {
|
||||||
pseudocodeVariablesData = new PseudocodeVariablesData(pseudocode, trace.getBindingContext());
|
pseudocodeVariablesData = new PseudocodeVariablesData(pseudocode, trace.getBindingContext());
|
||||||
}
|
}
|
||||||
@@ -216,7 +216,7 @@ public class ControlFlowInformationProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkDefiniteReturn(final @NotNull KotlinType expectedReturnType, @NotNull final UnreachableCode unreachableCode) {
|
private void checkDefiniteReturn(final @NotNull KotlinType expectedReturnType, @NotNull final UnreachableCode unreachableCode) {
|
||||||
assert subroutine instanceof KtDeclarationWithBody;
|
assert subroutine instanceof KtDeclarationWithBody;
|
||||||
KtDeclarationWithBody function = (KtDeclarationWithBody) subroutine;
|
KtDeclarationWithBody function = (KtDeclarationWithBody) subroutine;
|
||||||
|
|
||||||
@@ -294,7 +294,7 @@ public class ControlFlowInformationProvider {
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Uninitialized variables analysis
|
// Uninitialized variables analysis
|
||||||
|
|
||||||
public void markUninitializedVariables() {
|
private void markUninitializedVariables() {
|
||||||
final Collection<VariableDescriptor> varWithUninitializedErrorGenerated = Sets.newHashSet();
|
final Collection<VariableDescriptor> varWithUninitializedErrorGenerated = Sets.newHashSet();
|
||||||
final Collection<VariableDescriptor> varWithValReassignErrorGenerated = Sets.newHashSet();
|
final Collection<VariableDescriptor> varWithValReassignErrorGenerated = Sets.newHashSet();
|
||||||
final boolean processClassOrObject = subroutine instanceof KtClassOrObject;
|
final boolean processClassOrObject = subroutine instanceof KtClassOrObject;
|
||||||
@@ -346,7 +346,7 @@ public class ControlFlowInformationProvider {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void recordInitializedVariables() {
|
private void recordInitializedVariables() {
|
||||||
PseudocodeVariablesData pseudocodeVariablesData = getPseudocodeVariablesData();
|
PseudocodeVariablesData pseudocodeVariablesData = getPseudocodeVariablesData();
|
||||||
Pseudocode pseudocode = pseudocodeVariablesData.getPseudocode();
|
Pseudocode pseudocode = pseudocodeVariablesData.getPseudocode();
|
||||||
Map<Instruction, Edges<InitControlFlowInfo>> initializers = pseudocodeVariablesData.getVariableInitializers();
|
Map<Instruction, Edges<InitControlFlowInfo>> initializers = pseudocodeVariablesData.getVariableInitializers();
|
||||||
@@ -537,7 +537,7 @@ public class ControlFlowInformationProvider {
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// "Unused variable" & "unused value" analyses
|
// "Unused variable" & "unused value" analyses
|
||||||
|
|
||||||
public void markUnusedVariables() {
|
private void markUnusedVariables() {
|
||||||
final PseudocodeVariablesData pseudocodeVariablesData = getPseudocodeVariablesData();
|
final PseudocodeVariablesData pseudocodeVariablesData = getPseudocodeVariablesData();
|
||||||
Map<Instruction, Edges<UseControlFlowInfo>> variableStatusData = pseudocodeVariablesData.getVariableUseStatusData();
|
Map<Instruction, Edges<UseControlFlowInfo>> variableStatusData = pseudocodeVariablesData.getVariableUseStatusData();
|
||||||
final Map<Instruction, DiagnosticFactory<?>> reportedDiagnosticMap = Maps.newHashMap();
|
final Map<Instruction, DiagnosticFactory<?>> reportedDiagnosticMap = Maps.newHashMap();
|
||||||
@@ -647,7 +647,7 @@ public class ControlFlowInformationProvider {
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// "Unused expressions" in block
|
// "Unused expressions" in block
|
||||||
|
|
||||||
public void markUnusedExpressions() {
|
private void markUnusedExpressions() {
|
||||||
final Map<Instruction, DiagnosticFactory<?>> reportedDiagnosticMap = Maps.newHashMap();
|
final Map<Instruction, DiagnosticFactory<?>> reportedDiagnosticMap = Maps.newHashMap();
|
||||||
PseudocodeTraverserKt.traverse(
|
PseudocodeTraverserKt.traverse(
|
||||||
pseudocode, TraversalOrder.FORWARD, new ControlFlowInformationProvider.FunctionVoid1<Instruction>() {
|
pseudocode, TraversalOrder.FORWARD, new ControlFlowInformationProvider.FunctionVoid1<Instruction>() {
|
||||||
@@ -676,7 +676,7 @@ public class ControlFlowInformationProvider {
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Statements
|
// Statements
|
||||||
|
|
||||||
public void markStatements() {
|
private void markStatements() {
|
||||||
PseudocodeTraverserKt.traverse(
|
PseudocodeTraverserKt.traverse(
|
||||||
pseudocode, TraversalOrder.FORWARD, new ControlFlowInformationProvider.FunctionVoid1<Instruction>() {
|
pseudocode, TraversalOrder.FORWARD, new ControlFlowInformationProvider.FunctionVoid1<Instruction>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -711,7 +711,7 @@ public class ControlFlowInformationProvider {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkIfExpressions() {
|
private void checkIfExpressions() {
|
||||||
PseudocodeTraverserKt.traverse(
|
PseudocodeTraverserKt.traverse(
|
||||||
pseudocode, TraversalOrder.FORWARD, new ControlFlowInformationProvider.FunctionVoid1<Instruction>() {
|
pseudocode, TraversalOrder.FORWARD, new ControlFlowInformationProvider.FunctionVoid1<Instruction>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -814,7 +814,7 @@ public class ControlFlowInformationProvider {
|
|||||||
return finger;
|
return finger;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkWhenExpressions() {
|
private void checkWhenExpressions() {
|
||||||
final Map<Instruction, Edges<InitControlFlowInfo>> initializers = pseudocodeVariablesData.getVariableInitializers();
|
final Map<Instruction, Edges<InitControlFlowInfo>> initializers = pseudocodeVariablesData.getVariableInitializers();
|
||||||
PseudocodeTraverserKt.traverse(
|
PseudocodeTraverserKt.traverse(
|
||||||
pseudocode, TraversalOrder.FORWARD, new ControlFlowInformationProvider.FunctionVoid1<Instruction>() {
|
pseudocode, TraversalOrder.FORWARD, new ControlFlowInformationProvider.FunctionVoid1<Instruction>() {
|
||||||
@@ -876,7 +876,7 @@ public class ControlFlowInformationProvider {
|
|||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Tail calls
|
// Tail calls
|
||||||
|
|
||||||
public void markTailCalls() {
|
private void markTailCalls() {
|
||||||
final DeclarationDescriptor subroutineDescriptor = trace.get(BindingContext.DECLARATION_TO_DESCRIPTOR, subroutine);
|
final DeclarationDescriptor subroutineDescriptor = trace.get(BindingContext.DECLARATION_TO_DESCRIPTOR, subroutine);
|
||||||
if (!(subroutineDescriptor instanceof FunctionDescriptor)) return;
|
if (!(subroutineDescriptor instanceof FunctionDescriptor)) return;
|
||||||
if (!((FunctionDescriptor) subroutineDescriptor).isTailrec()) return;
|
if (!((FunctionDescriptor) subroutineDescriptor).isTailrec()) return;
|
||||||
@@ -884,7 +884,7 @@ public class ControlFlowInformationProvider {
|
|||||||
// finally blocks are copied which leads to multiple diagnostics reported on one instruction
|
// finally blocks are copied which leads to multiple diagnostics reported on one instruction
|
||||||
class KindAndCall {
|
class KindAndCall {
|
||||||
TailRecursionKind kind;
|
TailRecursionKind kind;
|
||||||
ResolvedCall<?> call;
|
private final ResolvedCall<?> call;
|
||||||
|
|
||||||
KindAndCall(TailRecursionKind kind, ResolvedCall<?> call) {
|
KindAndCall(TailRecursionKind kind, ResolvedCall<?> call) {
|
||||||
this.kind = kind;
|
this.kind = kind;
|
||||||
@@ -896,6 +896,7 @@ public class ControlFlowInformationProvider {
|
|||||||
pseudocode,
|
pseudocode,
|
||||||
TraversalOrder.FORWARD,
|
TraversalOrder.FORWARD,
|
||||||
new FunctionVoid1<Instruction>() {
|
new FunctionVoid1<Instruction>() {
|
||||||
|
@Override
|
||||||
public void execute(@NotNull Instruction instruction) {
|
public void execute(@NotNull Instruction instruction) {
|
||||||
if (!(instruction instanceof CallInstruction)) return;
|
if (!(instruction instanceof CallInstruction)) return;
|
||||||
CallInstruction callInstruction = (CallInstruction) instruction;
|
CallInstruction callInstruction = (CallInstruction) instruction;
|
||||||
@@ -1109,7 +1110,7 @@ public class ControlFlowInformationProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//TODO after KT-4621 rewrite to Kotlin
|
//TODO after KT-4621 rewrite to Kotlin
|
||||||
public abstract static class InstructionDataAnalyzeStrategy<D> implements Function3<Instruction, D, D, Unit> {
|
private abstract static class InstructionDataAnalyzeStrategy<D> implements Function3<Instruction, D, D, Unit> {
|
||||||
@Override
|
@Override
|
||||||
public Unit invoke(Instruction instruction, D enterData, D exitData) {
|
public Unit invoke(Instruction instruction, D enterData, D exitData) {
|
||||||
execute(instruction, enterData, exitData);
|
execute(instruction, enterData, exitData);
|
||||||
@@ -1119,7 +1120,7 @@ public class ControlFlowInformationProvider {
|
|||||||
public abstract void execute(Instruction instruction, D enterData, D exitData);
|
public abstract void execute(Instruction instruction, D enterData, D exitData);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract static class FunctionVoid1<P> implements Function1<P, Unit> {
|
private abstract static class FunctionVoid1<P> implements Function1<P, Unit> {
|
||||||
@Override
|
@Override
|
||||||
public Unit invoke(P p) {
|
public Unit invoke(P p) {
|
||||||
execute(p);
|
execute(p);
|
||||||
|
|||||||
Reference in New Issue
Block a user