Drop diagnostic reported on lambda's return type
Because it's not allowed syntactically anymore. Also adjust related methods within JetFunctionNotStubbed
This commit is contained in:
@@ -649,7 +649,6 @@ public interface Errors {
|
|||||||
DiagnosticFactory0<JetWhenConditionInRange> TYPE_MISMATCH_IN_RANGE = DiagnosticFactory0.create(ERROR, WHEN_CONDITION_IN_RANGE);
|
DiagnosticFactory0<JetWhenConditionInRange> TYPE_MISMATCH_IN_RANGE = DiagnosticFactory0.create(ERROR, WHEN_CONDITION_IN_RANGE);
|
||||||
|
|
||||||
DiagnosticFactory1<JetParameter, JetType> EXPECTED_PARAMETER_TYPE_MISMATCH = DiagnosticFactory1.create(ERROR);
|
DiagnosticFactory1<JetParameter, JetType> EXPECTED_PARAMETER_TYPE_MISMATCH = DiagnosticFactory1.create(ERROR);
|
||||||
DiagnosticFactory1<JetTypeReference, JetType> EXPECTED_RETURN_TYPE_MISMATCH = DiagnosticFactory1.create(ERROR);
|
|
||||||
DiagnosticFactory2<JetFunction, Integer, List<JetType>> EXPECTED_PARAMETERS_NUMBER_MISMATCH =
|
DiagnosticFactory2<JetFunction, Integer, List<JetType>> EXPECTED_PARAMETERS_NUMBER_MISMATCH =
|
||||||
DiagnosticFactory2.create(ERROR, FUNCTION_PARAMETERS);
|
DiagnosticFactory2.create(ERROR, FUNCTION_PARAMETERS);
|
||||||
|
|
||||||
|
|||||||
-1
@@ -360,7 +360,6 @@ public class DefaultErrorMessages {
|
|||||||
"Expected a value of type {0}. Assignment operation is not an expression, so it does not return any value", RENDER_TYPE);
|
"Expected a value of type {0}. Assignment operation is not an expression, so it does not return any value", RENDER_TYPE);
|
||||||
|
|
||||||
MAP.put(EXPECTED_PARAMETER_TYPE_MISMATCH, "Expected parameter of type {0}", RENDER_TYPE);
|
MAP.put(EXPECTED_PARAMETER_TYPE_MISMATCH, "Expected parameter of type {0}", RENDER_TYPE);
|
||||||
MAP.put(EXPECTED_RETURN_TYPE_MISMATCH, "Expected return type {0}", RENDER_TYPE);
|
|
||||||
MAP.put(EXPECTED_PARAMETERS_NUMBER_MISMATCH, "Expected {0,choice,0#no parameters|1#one parameter of type|1<{0,number,integer} parameters of types} {1}", null, RENDER_COLLECTION_OF_TYPES);
|
MAP.put(EXPECTED_PARAMETERS_NUMBER_MISMATCH, "Expected {0,choice,0#no parameters|1#one parameter of type|1<{0,number,integer} parameters of types} {1}", null, RENDER_COLLECTION_OF_TYPES);
|
||||||
|
|
||||||
MAP.put(IMPLICIT_CAST_TO_UNIT_OR_ANY, "Type is cast to ''{0}''. Please specify ''{0}'' as expected type, if you mean such cast",
|
MAP.put(IMPLICIT_CAST_TO_UNIT_OR_ANY, "Type is cast to ''{0}''. Please specify ''{0}'' as expected type, if you mean such cast",
|
||||||
|
|||||||
@@ -55,41 +55,32 @@ public abstract class JetFunctionNotStubbed extends JetTypeParameterListOwnerNot
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasDeclaredReturnType() {
|
public boolean hasDeclaredReturnType() {
|
||||||
return getTypeReference() != null;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public JetTypeReference getReceiverTypeReference() {
|
public JetTypeReference getReceiverTypeReference() {
|
||||||
PsiElement child = getFirstChild();
|
|
||||||
while (child != null) {
|
|
||||||
IElementType tt = child.getNode().getElementType();
|
|
||||||
if (tt == JetTokens.LPAR || tt == JetTokens.COLON) break;
|
|
||||||
if (child instanceof JetTypeReference) {
|
|
||||||
return (JetTypeReference) child;
|
|
||||||
}
|
|
||||||
child = child.getNextSibling();
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
public JetTypeReference getTypeReference() {
|
public JetTypeReference getTypeReference() {
|
||||||
return TypeRefHelpersPackage.getTypeReference(this);
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public JetTypeReference setTypeReference(@Nullable JetTypeReference typeRef) {
|
public JetTypeReference setTypeReference(@Nullable JetTypeReference typeRef) {
|
||||||
return TypeRefHelpersPackage.setTypeReference(this, getValueParameterList(), typeRef);
|
if (typeRef == null) return null;
|
||||||
|
throw new IllegalStateException("Function literals can't have type reference");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public PsiElement getColon() {
|
public PsiElement getColon() {
|
||||||
return findChildByType(JetTokens.COLON);
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+2
-10
@@ -196,16 +196,8 @@ public class FunctionsTypingVisitor(facade: ExpressionTypingInternals) : Express
|
|||||||
expectedReturnType: JetType?
|
expectedReturnType: JetType?
|
||||||
): JetType? {
|
): JetType? {
|
||||||
val functionLiteral = expression.getFunctionLiteral()
|
val functionLiteral = expression.getFunctionLiteral()
|
||||||
val declaredReturnType = functionLiteral.getTypeReference()?.let {
|
|
||||||
val type = components.typeResolver.resolveType(context.scope, it, context.trace, true)
|
|
||||||
if (expectedReturnType != null && !TypeUtils.noExpectedType(expectedReturnType)
|
|
||||||
&& !JetTypeChecker.DEFAULT.isSubtypeOf(type, expectedReturnType)) {
|
|
||||||
context.trace.report(EXPECTED_RETURN_TYPE_MISMATCH.on(it, expectedReturnType))
|
|
||||||
}
|
|
||||||
type
|
|
||||||
}
|
|
||||||
|
|
||||||
val expectedType = declaredReturnType ?: (expectedReturnType ?: NO_EXPECTED_TYPE)
|
val expectedType = expectedReturnType ?: NO_EXPECTED_TYPE
|
||||||
val functionInnerScope = FunctionDescriptorUtil.getFunctionInnerScope(context.scope, functionDescriptor, context.trace)
|
val functionInnerScope = FunctionDescriptorUtil.getFunctionInnerScope(context.scope, functionDescriptor, context.trace)
|
||||||
val newContext = context.replaceScope(functionInnerScope).replaceExpectedType(expectedType)
|
val newContext = context.replaceScope(functionInnerScope).replaceExpectedType(expectedType)
|
||||||
|
|
||||||
@@ -214,7 +206,7 @@ public class FunctionsTypingVisitor(facade: ExpressionTypingInternals) : Express
|
|||||||
val typeOfBodyExpression = // Type-check the body
|
val typeOfBodyExpression = // Type-check the body
|
||||||
components.expressionTypingServices.getBlockReturnedType(functionLiteral.getBodyExpression()!!, COERCION_TO_UNIT, newContext).type
|
components.expressionTypingServices.getBlockReturnedType(functionLiteral.getBodyExpression()!!, COERCION_TO_UNIT, newContext).type
|
||||||
|
|
||||||
return declaredReturnType ?: computeReturnTypeBasedOnReturnExpressions(functionLiteral, context, typeOfBodyExpression)
|
return computeReturnTypeBasedOnReturnExpressions(functionLiteral, context, typeOfBodyExpression)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun computeReturnTypeBasedOnReturnExpressions(
|
private fun computeReturnTypeBasedOnReturnExpressions(
|
||||||
|
|||||||
Reference in New Issue
Block a user