From 950f9121548f6b6478ef86b62933e5bc83bfa8dc Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 8 Nov 2012 22:35:19 +0400 Subject: [PATCH] Retain data flow info after multi-declaration #KT-2825 In Progress --- .../ExpressionTypingVisitorForStatements.java | 10 +++++----- .../tests/dataFlowInfoTraversal/MultiDeclaration.kt | 7 +++++++ .../jet/checkers/JetDiagnosticsTestGenerated.java | 5 +++++ 3 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/dataFlowInfoTraversal/MultiDeclaration.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java index 67d5a598061..30e71b8f673 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingVisitorForStatements.java @@ -137,14 +137,14 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito context.trace.report(INITIALIZER_REQUIRED_FOR_MULTIDECLARATION.on(multiDeclaration)); return JetTypeInfo.create(null, context.dataFlowInfo); } - final ExpressionReceiver expressionReceiver = ExpressionTypingUtils.getExpressionReceiver(facade, initializer, - context.replaceExpectedType( - TypeUtils.NO_EXPECTED_TYPE)); + final ExpressionReceiver expressionReceiver = + ExpressionTypingUtils.getExpressionReceiver(facade, initializer, context.replaceExpectedType(TypeUtils.NO_EXPECTED_TYPE)); + DataFlowInfo dataFlowInfo = facade.getTypeInfo(initializer, context).getDataFlowInfo(); if (expressionReceiver == null) { - return JetTypeInfo.create(null, context.dataFlowInfo); + return JetTypeInfo.create(null, dataFlowInfo); } ExpressionTypingUtils.defineLocalVariablesFromMultiDeclaration(scope, multiDeclaration, expressionReceiver, initializer, context); - return DataFlowUtils.checkStatementType(multiDeclaration, context, context.dataFlowInfo); + return DataFlowUtils.checkStatementType(multiDeclaration, context, dataFlowInfo); } @Override diff --git a/compiler/testData/diagnostics/tests/dataFlowInfoTraversal/MultiDeclaration.kt b/compiler/testData/diagnostics/tests/dataFlowInfoTraversal/MultiDeclaration.kt new file mode 100644 index 00000000000..0640943825e --- /dev/null +++ b/compiler/testData/diagnostics/tests/dataFlowInfoTraversal/MultiDeclaration.kt @@ -0,0 +1,7 @@ +fun Int.component1() = "a" + +fun foo(a: Number) { + val (x) = a as Int + a : Int + x : String +} diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index ac7e0ce7534..f010019fbb6 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -1241,6 +1241,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/dataFlowInfoTraversal/IfThenElseBothInvalid.kt"); } + @TestMetadata("MultiDeclaration.kt") + public void testMultiDeclaration() throws Exception { + doTest("compiler/testData/diagnostics/tests/dataFlowInfoTraversal/MultiDeclaration.kt"); + } + @TestMetadata("ObjectExpression.kt") public void testObjectExpression() throws Exception { doTest("compiler/testData/diagnostics/tests/dataFlowInfoTraversal/ObjectExpression.kt");