Refactor JetControlFlowBuilderAdapter to avoid mutable fields
This commit is contained in:
+42
-40
@@ -27,204 +27,206 @@ import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class JetControlFlowBuilderAdapter implements JetControlFlowBuilder {
|
public abstract class JetControlFlowBuilderAdapter implements JetControlFlowBuilder {
|
||||||
protected JetControlFlowBuilder builder;
|
|
||||||
|
@NotNull
|
||||||
|
protected abstract JetControlFlowBuilder getDelegateBuilder();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadUnit(@NotNull JetExpression expression) {
|
public void loadUnit(@NotNull JetExpression expression) {
|
||||||
builder.loadUnit(expression);
|
getDelegateBuilder().loadUnit(expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadConstant(@NotNull JetExpression expression, @Nullable CompileTimeConstant<?> constant) {
|
public void loadConstant(@NotNull JetExpression expression, @Nullable CompileTimeConstant<?> constant) {
|
||||||
builder.loadConstant(expression, constant);
|
getDelegateBuilder().loadConstant(expression, constant);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createAnonymousObject(@NotNull JetObjectLiteralExpression expression) {
|
public void createAnonymousObject(@NotNull JetObjectLiteralExpression expression) {
|
||||||
builder.createAnonymousObject(expression);
|
getDelegateBuilder().createAnonymousObject(expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void loadStringTemplate(@NotNull JetStringTemplateExpression expression) {
|
public void loadStringTemplate(@NotNull JetStringTemplateExpression expression) {
|
||||||
builder.loadStringTemplate(expression);
|
getDelegateBuilder().loadStringTemplate(expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readThis(@NotNull JetExpression expression, @Nullable ReceiverParameterDescriptor parameterDescriptor) {
|
public void readThis(@NotNull JetExpression expression, @Nullable ReceiverParameterDescriptor parameterDescriptor) {
|
||||||
builder.readThis(expression, parameterDescriptor);
|
getDelegateBuilder().readThis(expression, parameterDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void readVariable(@NotNull JetExpression expression, @Nullable VariableDescriptor variableDescriptor) {
|
public void readVariable(@NotNull JetExpression expression, @Nullable VariableDescriptor variableDescriptor) {
|
||||||
builder.readVariable(expression, variableDescriptor);
|
getDelegateBuilder().readVariable(expression, variableDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void call(@NotNull JetExpression expression, @NotNull ResolvedCall<?> resolvedCall) {
|
public void call(@NotNull JetExpression expression, @NotNull ResolvedCall<?> resolvedCall) {
|
||||||
builder.call(expression, resolvedCall);
|
getDelegateBuilder().call(expression, resolvedCall);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void predefinedOperation(@NotNull JetExpression expression, @Nullable PredefinedOperation operation) {
|
public void predefinedOperation(@NotNull JetExpression expression, @Nullable PredefinedOperation operation) {
|
||||||
builder.predefinedOperation(expression, operation);
|
getDelegateBuilder().predefinedOperation(expression, operation);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void compilationError(@NotNull JetElement element, @NotNull String message) {
|
public void compilationError(@NotNull JetElement element, @NotNull String message) {
|
||||||
builder.compilationError(element, message);
|
getDelegateBuilder().compilationError(element, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public Label createUnboundLabel() {
|
public Label createUnboundLabel() {
|
||||||
return builder.createUnboundLabel();
|
return getDelegateBuilder().createUnboundLabel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public Label createUnboundLabel(@NotNull String name) {
|
public Label createUnboundLabel(@NotNull String name) {
|
||||||
return builder.createUnboundLabel(name);
|
return getDelegateBuilder().createUnboundLabel(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void bindLabel(@NotNull Label label) {
|
public void bindLabel(@NotNull Label label) {
|
||||||
builder.bindLabel(label);
|
getDelegateBuilder().bindLabel(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void jump(@NotNull Label label) {
|
public void jump(@NotNull Label label) {
|
||||||
builder.jump(label);
|
getDelegateBuilder().jump(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void jumpOnFalse(@NotNull Label label) {
|
public void jumpOnFalse(@NotNull Label label) {
|
||||||
builder.jumpOnFalse(label);
|
getDelegateBuilder().jumpOnFalse(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void jumpOnTrue(@NotNull Label label) {
|
public void jumpOnTrue(@NotNull Label label) {
|
||||||
builder.jumpOnTrue(label);
|
getDelegateBuilder().jumpOnTrue(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void nondeterministicJump(@NotNull Label label) {
|
public void nondeterministicJump(@NotNull Label label) {
|
||||||
builder.nondeterministicJump(label);
|
getDelegateBuilder().nondeterministicJump(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void nondeterministicJump(@NotNull List<Label> labels) {
|
public void nondeterministicJump(@NotNull List<Label> labels) {
|
||||||
builder.nondeterministicJump(labels);
|
getDelegateBuilder().nondeterministicJump(labels);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void jumpToError() {
|
public void jumpToError() {
|
||||||
builder.jumpToError();
|
getDelegateBuilder().jumpToError();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void throwException(@NotNull JetThrowExpression throwExpression) {
|
public void throwException(@NotNull JetThrowExpression throwExpression) {
|
||||||
builder.throwException(throwExpression);
|
getDelegateBuilder().throwException(throwExpression);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
public Label getEntryPoint(@NotNull JetElement labelElement) {
|
public Label getEntryPoint(@NotNull JetElement labelElement) {
|
||||||
return builder.getEntryPoint(labelElement);
|
return getDelegateBuilder().getEntryPoint(labelElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public Label getExitPoint(@NotNull JetElement labelElement) {
|
public Label getExitPoint(@NotNull JetElement labelElement) {
|
||||||
return builder.getExitPoint(labelElement);
|
return getDelegateBuilder().getExitPoint(labelElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public LoopInfo enterLoop(@NotNull JetExpression expression, @Nullable Label loopExitPoint, Label conditionEntryPoint) {
|
public LoopInfo enterLoop(@NotNull JetExpression expression, @Nullable Label loopExitPoint, Label conditionEntryPoint) {
|
||||||
return builder.enterLoop(expression, loopExitPoint, conditionEntryPoint);
|
return getDelegateBuilder().enterLoop(expression, loopExitPoint, conditionEntryPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void exitLoop(@NotNull JetExpression expression) {
|
public void exitLoop(@NotNull JetExpression expression) {
|
||||||
builder.exitLoop(expression);
|
getDelegateBuilder().exitLoop(expression);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public JetElement getCurrentLoop() {
|
public JetElement getCurrentLoop() {
|
||||||
return builder.getCurrentLoop();
|
return getDelegateBuilder().getCurrentLoop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void enterTryFinally(@NotNull GenerationTrigger trigger) {
|
public void enterTryFinally(@NotNull GenerationTrigger trigger) {
|
||||||
builder.enterTryFinally(trigger);
|
getDelegateBuilder().enterTryFinally(trigger);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void exitTryFinally() {
|
public void exitTryFinally() {
|
||||||
builder.exitTryFinally();
|
getDelegateBuilder().exitTryFinally();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void enterSubroutine(@NotNull JetElement subroutine) {
|
public void enterSubroutine(@NotNull JetElement subroutine) {
|
||||||
builder.enterSubroutine(subroutine);
|
getDelegateBuilder().enterSubroutine(subroutine);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public Pseudocode exitSubroutine(@NotNull JetElement subroutine) {
|
public Pseudocode exitSubroutine(@NotNull JetElement subroutine) {
|
||||||
return builder.exitSubroutine(subroutine);
|
return getDelegateBuilder().exitSubroutine(subroutine);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public JetElement getCurrentSubroutine() {
|
public JetElement getCurrentSubroutine() {
|
||||||
return builder.getCurrentSubroutine();
|
return getDelegateBuilder().getCurrentSubroutine();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public JetElement getReturnSubroutine() {
|
public JetElement getReturnSubroutine() {
|
||||||
return builder.getReturnSubroutine();
|
return getDelegateBuilder().getReturnSubroutine();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void returnValue(@NotNull JetExpression returnExpression, @NotNull JetElement subroutine) {
|
public void returnValue(@NotNull JetExpression returnExpression, @NotNull JetElement subroutine) {
|
||||||
builder.returnValue(returnExpression, subroutine);
|
getDelegateBuilder().returnValue(returnExpression, subroutine);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void returnNoValue(@NotNull JetElement returnExpression, @NotNull JetElement subroutine) {
|
public void returnNoValue(@NotNull JetElement returnExpression, @NotNull JetElement subroutine) {
|
||||||
builder.returnNoValue(returnExpression, subroutine);
|
getDelegateBuilder().returnNoValue(returnExpression, subroutine);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void unsupported(JetElement element) {
|
public void unsupported(JetElement element) {
|
||||||
builder.unsupported(element);
|
getDelegateBuilder().unsupported(element);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void write(@NotNull JetElement assignment, @NotNull JetElement lValue) {
|
public void write(@NotNull JetElement assignment, @NotNull JetElement lValue) {
|
||||||
builder.write(assignment, lValue);
|
getDelegateBuilder().write(assignment, lValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void declareParameter(@NotNull JetParameter parameter) {
|
public void declareParameter(@NotNull JetParameter parameter) {
|
||||||
builder.declareParameter(parameter);
|
getDelegateBuilder().declareParameter(parameter);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void declareVariable(@NotNull JetVariableDeclaration property) {
|
public void declareVariable(@NotNull JetVariableDeclaration property) {
|
||||||
builder.declareVariable(property);
|
getDelegateBuilder().declareVariable(property);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void declareFunction(@NotNull JetElement subroutine, @NotNull Pseudocode pseudocode) {
|
public void declareFunction(@NotNull JetElement subroutine, @NotNull Pseudocode pseudocode) {
|
||||||
builder.declareFunction(subroutine, pseudocode);
|
getDelegateBuilder().declareFunction(subroutine, pseudocode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void repeatPseudocode(@NotNull Label startLabel, @NotNull Label finishLabel) {
|
public void repeatPseudocode(@NotNull Label startLabel, @NotNull Label finishLabel) {
|
||||||
builder.repeatPseudocode(startLabel, finishLabel);
|
getDelegateBuilder().repeatPseudocode(startLabel, finishLabel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+8
@@ -33,6 +33,8 @@ import java.util.Map;
|
|||||||
|
|
||||||
public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAdapter {
|
public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAdapter {
|
||||||
|
|
||||||
|
private JetControlFlowBuilder builder = null;
|
||||||
|
|
||||||
private final Stack<BreakableBlockInfo> loopInfo = new Stack<BreakableBlockInfo>();
|
private final Stack<BreakableBlockInfo> loopInfo = new Stack<BreakableBlockInfo>();
|
||||||
private final Map<JetElement, BreakableBlockInfo> elementToBlockInfo = new HashMap<JetElement, BreakableBlockInfo>();
|
private final Map<JetElement, BreakableBlockInfo> elementToBlockInfo = new HashMap<JetElement, BreakableBlockInfo>();
|
||||||
private int labelCount = 0;
|
private int labelCount = 0;
|
||||||
@@ -42,6 +44,12 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd
|
|||||||
|
|
||||||
private final Stack<BlockInfo> allBlocks = new Stack<BlockInfo>();
|
private final Stack<BlockInfo> allBlocks = new Stack<BlockInfo>();
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
protected JetControlFlowBuilder getDelegateBuilder() {
|
||||||
|
return builder;
|
||||||
|
}
|
||||||
|
|
||||||
private void pushBuilder(JetElement scopingElement, JetElement subroutine) {
|
private void pushBuilder(JetElement scopingElement, JetElement subroutine) {
|
||||||
JetControlFlowInstructionsGeneratorWorker worker = new JetControlFlowInstructionsGeneratorWorker(scopingElement, subroutine);
|
JetControlFlowInstructionsGeneratorWorker worker = new JetControlFlowInstructionsGeneratorWorker(scopingElement, subroutine);
|
||||||
builders.push(worker);
|
builders.push(worker);
|
||||||
|
|||||||
Reference in New Issue
Block a user