diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorDispatcher.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorDispatcher.java index 49a13e3a785..7db995a7465 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorDispatcher.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorDispatcher.java @@ -38,11 +38,40 @@ import static org.jetbrains.kotlin.resolve.bindingContextUtil.BindingContextUtil public class ExpressionTypingVisitorDispatcher extends JetVisitor implements ExpressionTypingInternals { + public interface StatementVisitorProvider { + ExpressionTypingVisitorForStatements get(@NotNull ExpressionTypingContext context); + } + + public class StatementVisitorProviderForBlock implements StatementVisitorProvider { + private final ExpressionTypingVisitorForStatements visitorForBlock; + + + public StatementVisitorProviderForBlock(@NotNull WritableScope scope) { + visitorForBlock = new ExpressionTypingVisitorForStatements( + ExpressionTypingVisitorDispatcher.this, scope, basic, controlStructures, patterns, functions + ); + } + + @Override + public ExpressionTypingVisitorForStatements get(@NotNull ExpressionTypingContext context) { + return visitorForBlock; + } + } + + public class StatementVisitorProviderForDeclarations implements StatementVisitorProvider { + @Override + public ExpressionTypingVisitorForStatements get(@NotNull ExpressionTypingContext context) { + return createStatementVisitor(context); + } + } + private static final Logger LOG = Logger.getInstance(ExpressionTypingVisitor.class); @NotNull public static ExpressionTypingFacade create(@NotNull ExpressionTypingComponents components) { - return new ExpressionTypingVisitorDispatcher(components, null); + ExpressionTypingVisitorDispatcher typingVisitorDispatcher = new ExpressionTypingVisitorDispatcher(components); + typingVisitorDispatcher.setProviderForStatements(typingVisitorDispatcher.new StatementVisitorProviderForDeclarations()); + return typingVisitorDispatcher; } @NotNull @@ -50,28 +79,31 @@ public class ExpressionTypingVisitorDispatcher extends JetVisitor