This commit is contained in:
Valentin Kipyatkov
2015-05-24 02:00:24 +03:00
parent df0d27b8b2
commit c167ddb2fe
2 changed files with 8 additions and 11 deletions
@@ -587,21 +587,18 @@ public class JetPsiFactory(private val project: Project) {
return comment
}
public fun wrapInABlock(expression: JetExpression): JetBlockExpression {
// special hack used in ControlStructureTypingVisitor
// TODO: get rid of it
public fun wrapInABlockWrapper(expression: JetExpression): JetBlockExpression {
if (expression is JetBlockExpression) {
return expression
}
return BlockWrapper(expression)
}
public fun BlockWrapper(expressionToWrap: JetExpression): BlockWrapper {
val function = createFunction("fun f() { ${expressionToWrap.getText()} }")
val function = createFunction("fun f() { ${expression.getText()} }")
val block = function.getBodyExpression() as JetBlockExpression
return BlockWrapper(block, expressionToWrap)
return BlockWrapper(block, expression)
}
private inner class BlockWrapper(fakeBlockExpression: JetBlockExpression, private val expression: JetExpression) : JetBlockExpression(fakeBlockExpression.getNode()), JetPsiUtil.JetExpressionWrapper {
private class BlockWrapper(fakeBlockExpression: JetBlockExpression, private val expression: JetExpression) : JetBlockExpression(fakeBlockExpression.getNode()), JetPsiUtil.JetExpressionWrapper {
override fun getStatements(): List<JetElement> {
return listOf(expression)
}
@@ -126,8 +126,8 @@ public class ControlStructureTypingVisitor extends ExpressionTypingVisitor {
elseBranch, elseScope, elseInfo, thenInfo, contextWithExpectedType, ifExpression, isStatement);
}
JetPsiFactory psiFactory = JetPsiFactory(ifExpression);
JetBlockExpression thenBlock = psiFactory.wrapInABlock(thenBranch);
JetBlockExpression elseBlock = psiFactory.wrapInABlock(elseBranch);
JetBlockExpression thenBlock = psiFactory.wrapInABlockWrapper(thenBranch);
JetBlockExpression elseBlock = psiFactory.wrapInABlockWrapper(elseBranch);
Call callForIf = createCallForSpecialConstruction(ifExpression, ifExpression, Lists.newArrayList(thenBlock, elseBlock));
MutableDataFlowInfoForArguments dataFlowInfoForArguments =
createDataFlowInfoForArgumentsForIfCall(callForIf, thenInfo, elseInfo);