From fe4dd2f661d5f9a110721b748b63bd8b4709a862 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 18 Apr 2013 17:35:41 +0400 Subject: [PATCH] Fix tests (by extracting a method and calling it multiple times) --- .../expressions/BasicExpressionTypingVisitor.java | 10 ++++++---- .../types/expressions/ExpressionTypingUtils.java | 11 +++++++++++ .../ExpressionTypingVisitorForStatements.java | 8 ++------ .../tests/nullableTypes/nullableArgumentForIn.kt | 3 +++ .../jet/checkers/JetDiagnosticsTestGenerated.java | 12 +++++++----- 5 files changed, 29 insertions(+), 15 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/nullableTypes/nullableArgumentForIn.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java index d1a9b385951..da950623f29 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java @@ -754,10 +754,6 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { JetExpression right = expression.getRight(); IElementType operationType = operationSign.getReferencedNameElementType(); - JetTypeInfo leftTypeInfo = left != null - ? facade.getTypeInfo(left, context) - : JetTypeInfo.create(null, context.dataFlowInfo); - JetType result = null; DataFlowInfo dataFlowInfo = context.dataFlowInfo; @@ -801,6 +797,8 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { if (right != null && left != null) { ExpressionReceiver receiver = ExpressionTypingUtils.safeGetExpressionReceiver(facade, left, context); + JetTypeInfo leftTypeInfo = getTypeInfoOrNullType(left, context, facade); + dataFlowInfo = leftTypeInfo.getDataFlowInfo(); ExpressionTypingContext contextWithDataFlow = context.replaceDataFlowInfo(dataFlowInfo); @@ -843,6 +841,8 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { result = typeInfo.getType(); } else if (OperatorConventions.BOOLEAN_OPERATIONS.containsKey(operationType)) { + JetTypeInfo leftTypeInfo = getTypeInfoOrNullType(left, context, facade); + JetType leftType = leftTypeInfo.getType(); dataFlowInfo = leftTypeInfo.getDataFlowInfo(); @@ -865,6 +865,8 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { result = booleanType; } else if (operationType == JetTokens.ELVIS) { + JetTypeInfo leftTypeInfo = getTypeInfoOrNullType(left, context, facade); + JetType leftType = leftTypeInfo.getType(); dataFlowInfo = leftTypeInfo.getDataFlowInfo(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java index ee6508084a2..cd19b98f6d9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java @@ -467,4 +467,15 @@ public class ExpressionTypingUtils { } }; } + + @NotNull + public static JetTypeInfo getTypeInfoOrNullType( + @Nullable JetExpression expression, + @NotNull ExpressionTypingContext context, + @NotNull ExpressionTypingInternals facade + ) { + return expression != null + ? facade.getTypeInfo(expression, context) + : JetTypeInfo.create(null, context.dataFlowInfo); + } } 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 dbacfe2defc..5e3077be019 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 @@ -209,9 +209,7 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito JetSimpleNameExpression operationSign = expression.getOperationReference(); IElementType operationType = operationSign.getReferencedNameElementType(); JetExpression leftOperand = expression.getLeft(); - JetTypeInfo leftInfo = leftOperand != null - ? facade.getTypeInfo(leftOperand, context) - : JetTypeInfo.create(null, context.dataFlowInfo); + JetTypeInfo leftInfo = ExpressionTypingUtils.getTypeInfoOrNullType(leftOperand, context, facade); JetType leftType = leftInfo.getType(); DataFlowInfo dataFlowInfo = leftInfo.getDataFlowInfo(); @@ -294,9 +292,7 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito return JetTypeInfo.create(checkAssignmentType(typeInfo.getType(), expression, contextWithExpectedType), typeInfo.getDataFlowInfo()); } - JetTypeInfo leftInfo = leftOperand != null - ? facade.getTypeInfo(leftOperand, context) - : JetTypeInfo.create(null, context.dataFlowInfo); + JetTypeInfo leftInfo = ExpressionTypingUtils.getTypeInfoOrNullType(left, context, facade); JetType leftType = leftInfo.getType(); DataFlowInfo dataFlowInfo = leftInfo.getDataFlowInfo(); if (right != null) { diff --git a/compiler/testData/diagnostics/tests/nullableTypes/nullableArgumentForIn.kt b/compiler/testData/diagnostics/tests/nullableTypes/nullableArgumentForIn.kt new file mode 100644 index 00000000000..fbc5a29dad2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/nullableTypes/nullableArgumentForIn.kt @@ -0,0 +1,3 @@ +fun test(x: Int?) { + x in 1..2 +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index b04566314a4..fb8a8df7b74 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -16,17 +16,14 @@ package org.jetbrains.jet.checkers; -import junit.framework.Assert; import junit.framework.Test; import junit.framework.TestSuite; - -import java.io.File; -import java.util.regex.Pattern; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.jet.test.TestMetadata; -import org.jetbrains.jet.checkers.AbstractDiagnosticsTestWithEagerResolve; +import java.io.File; +import java.util.regex.Pattern; /** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") @@ -3050,6 +3047,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/nullableTypes/nullAssertOnTypeWithNullableUpperBound.kt"); } + @TestMetadata("nullableArgumentForIn.kt") + public void testNullableArgumentForIn() throws Exception { + doTest("compiler/testData/diagnostics/tests/nullableTypes/nullableArgumentForIn.kt"); + } + @TestMetadata("redundantNullable.kt") public void testRedundantNullable() throws Exception { doTest("compiler/testData/diagnostics/tests/nullableTypes/redundantNullable.kt");