From 1583b010c068f5fbf440a9d4249e9fba125ddda0 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Thu, 1 Sep 2011 17:40:21 +0400 Subject: [PATCH] Type checker error recovery fixed --- .../src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java | 3 ++- idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/idea/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java b/idea/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java index 7aa5f76c3c8..090e81903cd 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java @@ -145,7 +145,7 @@ public class CallResolver { prioritizedTasks = Collections.singletonList(new ResolutionTask(constructors, null, call)); } else { - throw new UnsupportedOperationException("Type argument inference not implemented for " + call); + throw new UnsupportedOperationException("Type argument inference not implemented for " + call.getText()); } return resolveCallToDescriptor(trace, scope, call, call.getNode(), expectedType, prioritizedTasks, functionReference); @@ -263,6 +263,7 @@ public class CallResolver { if (ErrorUtils.isError(candidate)) { successfulCandidates.put(candidate, candidate); + checkTypesWithNoCallee(temporaryTrace, scope, task.getTypeArguments(), task.getValueArguments(), task.getFunctionLiteralArguments()); continue; } diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java index 206a5fc812e..d5322dddf95 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java @@ -1842,8 +1842,8 @@ public class JetTypeInferrer { JetExpression selectorExpression = expression.getSelectorExpression(); JetExpression receiverExpression = expression.getReceiverExpression(); JetType receiverType = context.services.typeInferrerVisitorWithNamespaces.getType(receiverExpression, context.replaceExpectedTypes(NO_EXPECTED_TYPE, NO_EXPECTED_TYPE)); - if (receiverType == null) return null; if (selectorExpression == null) return null; + if (receiverType == null) receiverType = ErrorUtils.createErrorType("Type for " + expression.getText()); // Clean resolution: no autocasts TemporaryBindingTrace cleanResolutionTrace = TemporaryBindingTrace.create(context.trace);