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 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) { if (expression is JetBlockExpression) {
return expression return expression
} }
return BlockWrapper(expression) val function = createFunction("fun f() { ${expression.getText()} }")
}
public fun BlockWrapper(expressionToWrap: JetExpression): BlockWrapper {
val function = createFunction("fun f() { ${expressionToWrap.getText()} }")
val block = function.getBodyExpression() as JetBlockExpression 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> { override fun getStatements(): List<JetElement> {
return listOf(expression) return listOf(expression)
} }
@@ -126,8 +126,8 @@ public class ControlStructureTypingVisitor extends ExpressionTypingVisitor {
elseBranch, elseScope, elseInfo, thenInfo, contextWithExpectedType, ifExpression, isStatement); elseBranch, elseScope, elseInfo, thenInfo, contextWithExpectedType, ifExpression, isStatement);
} }
JetPsiFactory psiFactory = JetPsiFactory(ifExpression); JetPsiFactory psiFactory = JetPsiFactory(ifExpression);
JetBlockExpression thenBlock = psiFactory.wrapInABlock(thenBranch); JetBlockExpression thenBlock = psiFactory.wrapInABlockWrapper(thenBranch);
JetBlockExpression elseBlock = psiFactory.wrapInABlock(elseBranch); JetBlockExpression elseBlock = psiFactory.wrapInABlockWrapper(elseBranch);
Call callForIf = createCallForSpecialConstruction(ifExpression, ifExpression, Lists.newArrayList(thenBlock, elseBlock)); Call callForIf = createCallForSpecialConstruction(ifExpression, ifExpression, Lists.newArrayList(thenBlock, elseBlock));
MutableDataFlowInfoForArguments dataFlowInfoForArguments = MutableDataFlowInfoForArguments dataFlowInfoForArguments =
createDataFlowInfoForArgumentsForIfCall(callForIf, thenInfo, elseInfo); createDataFlowInfoForArgumentsForIfCall(callForIf, thenInfo, elseInfo);