Definite returns extracted as a separate issue KT-281
This commit is contained in:
@@ -241,7 +241,7 @@ public class JetTypeInferrer {
|
|||||||
expectedReturnType = NO_EXPECTED_TYPE;
|
expectedReturnType = NO_EXPECTED_TYPE;
|
||||||
}
|
}
|
||||||
JetScope functionInnerScope = FunctionDescriptorUtil.getFunctionInnerScope(outerScope, functionDescriptor, trace);
|
JetScope functionInnerScope = FunctionDescriptorUtil.getFunctionInnerScope(outerScope, functionDescriptor, trace);
|
||||||
checkFunctionReturnType(functionInnerScope, function, expectedReturnType, dataFlowInfo, CoercionStrategy.NO_COERCION);
|
checkFunctionReturnType(functionInnerScope, function, expectedReturnType, dataFlowInfo);
|
||||||
// Map<JetElement, JetType> typeMap = collectReturnedExpressionsWithTypes(outerScope, function, functionDescriptor, expectedReturnType);
|
// Map<JetElement, JetType> typeMap = collectReturnedExpressionsWithTypes(outerScope, function, functionDescriptor, expectedReturnType);
|
||||||
// if (typeMap.isEmpty()) {
|
// if (typeMap.isEmpty()) {
|
||||||
// return; // The function returns Nothing
|
// return; // The function returns Nothing
|
||||||
@@ -276,10 +276,10 @@ public class JetTypeInferrer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void checkFunctionReturnType(JetScope functionInnerScope, JetDeclarationWithBody function, @NotNull final JetType expectedReturnType) {
|
public void checkFunctionReturnType(JetScope functionInnerScope, JetDeclarationWithBody function, @NotNull final JetType expectedReturnType) {
|
||||||
checkFunctionReturnType(functionInnerScope, function, expectedReturnType, DataFlowInfo.getEmpty(), CoercionStrategy.NO_COERCION);
|
checkFunctionReturnType(functionInnerScope, function, expectedReturnType, DataFlowInfo.getEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkFunctionReturnType(JetScope functionInnerScope, JetDeclarationWithBody function, @NotNull final JetType expectedReturnType, @NotNull DataFlowInfo dataFlowInfo, CoercionStrategy coercionForLastExpression) {
|
private void checkFunctionReturnType(JetScope functionInnerScope, JetDeclarationWithBody function, @NotNull final JetType expectedReturnType, @NotNull DataFlowInfo dataFlowInfo) {
|
||||||
JetExpression bodyExpression = function.getBodyExpression();
|
JetExpression bodyExpression = function.getBodyExpression();
|
||||||
assert bodyExpression != null;
|
assert bodyExpression != null;
|
||||||
|
|
||||||
@@ -935,7 +935,7 @@ public class JetTypeInferrer {
|
|||||||
JetTypeReference returnTypeRef = functionLiteral.getReturnTypeRef();
|
JetTypeReference returnTypeRef = functionLiteral.getReturnTypeRef();
|
||||||
if (returnTypeRef != null) {
|
if (returnTypeRef != null) {
|
||||||
returnType = context.typeResolver.resolveType(context.scope, returnTypeRef);
|
returnType = context.typeResolver.resolveType(context.scope, returnTypeRef);
|
||||||
context.services.checkFunctionReturnType(functionInnerScope, expression, returnType, context.dataFlowInfo, CoercionStrategy.COERCION_TO_UNIT);
|
context.services.checkFunctionReturnType(functionInnerScope, expression, returnType, context.dataFlowInfo);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (functionTypeExpected) {
|
if (functionTypeExpected) {
|
||||||
|
|||||||
@@ -115,20 +115,6 @@ fun blockReturnValueTypeMatch() : Int {
|
|||||||
fun blockNoReturnIfValDeclaration(): Int {
|
fun blockNoReturnIfValDeclaration(): Int {
|
||||||
<error>val x = 1</error>
|
<error>val x = 1</error>
|
||||||
}
|
}
|
||||||
fun blockNoReturnIfEmptyIf(): Int {
|
|
||||||
if (1 < 2) <error>{}</error> else <error>{}</error>
|
|
||||||
}
|
|
||||||
fun blockNoReturnIfUnitInOneBranch(): Int {
|
|
||||||
if (1 < 2) {
|
|
||||||
return 1
|
|
||||||
} else {
|
|
||||||
if (3 < 4) <error>{
|
|
||||||
}</error> else {
|
|
||||||
return 2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val a = <error>return 1</error>
|
val a = <error>return 1</error>
|
||||||
|
|
||||||
class A() {
|
class A() {
|
||||||
|
|||||||
Reference in New Issue
Block a user