KT-11679 Fixed exception at ResolvedCallImpl.getArgumentMapping()

#KT-11679 Fixed
Also fixed EA-75913 EA-78908
This commit is contained in:
Stanislav Erokhin
2016-06-21 16:29:33 +03:00
parent 7389d412a5
commit ad285d5ca2
3 changed files with 23 additions and 0 deletions
@@ -31,6 +31,7 @@ import org.jetbrains.kotlin.resolve.bindingContextUtil.recordDataFlowInfo
import org.jetbrains.kotlin.resolve.bindingContextUtil.recordScope
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.ResolveArgumentsMode
import org.jetbrains.kotlin.resolve.calls.callUtil.getCalleeExpressionIfAny
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
import org.jetbrains.kotlin.resolve.calls.context.CheckArgumentTypesMode
import org.jetbrains.kotlin.resolve.calls.context.ContextDependency.INDEPENDENT
@@ -38,10 +39,12 @@ import org.jetbrains.kotlin.resolve.calls.context.ResolutionContext
import org.jetbrains.kotlin.resolve.calls.context.TemporaryTraceAndCache
import org.jetbrains.kotlin.resolve.calls.model.DataFlowInfoForArgumentsImpl
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCallImpl
import org.jetbrains.kotlin.resolve.calls.results.OverloadResolutionResults
import org.jetbrains.kotlin.resolve.calls.results.OverloadResolutionResults.Code.CANDIDATES_WITH_WRONG_RECEIVER
import org.jetbrains.kotlin.resolve.calls.results.OverloadResolutionResults.Code.NAME_NOT_FOUND
import org.jetbrains.kotlin.resolve.calls.results.OverloadResolutionResultsUtil
import org.jetbrains.kotlin.resolve.calls.results.ResolutionStatus
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValue
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory
@@ -246,6 +249,12 @@ class CallExpressionResolver(
context.replaceTraceAndCache(temporaryForVariable))
val qualifier = temporaryForVariable.trace.get(BindingContext.QUALIFIER, calleeExpression)
if (notNothing && (qualifier == null || qualifier !is PackageQualifier)) {
// mark property call as unsuccessful to avoid exceptions
callExpression.getResolvedCall(temporaryForVariable.trace.bindingContext).let {
(it as? ResolvedCallImpl)?.addStatus(ResolutionStatus.OTHER_ERROR)
}
temporaryForVariable.commit()
context.trace.report(FUNCTION_EXPECTED.on(calleeExpression, calleeExpression,
type ?: ErrorUtils.createErrorType("")))
+8
View File
@@ -0,0 +1,8 @@
// ERROR: Expression 'f' of type 'String' cannot be invoked as a function. The function 'invoke()' is not found
// IS_APPLICABLE: false
class Paren(val f: String) {
}
fun nonSimple() {
Paren("").f(<caret>6)
}
@@ -295,6 +295,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest {
doTest(fileName);
}
@TestMetadata("kt11679.kt")
public void testKt11679() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/addNameToArgument/kt11679.kt");
doTest(fileName);
}
@TestMetadata("notInsideIndices.kt")
public void testNotInsideIndices() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/addNameToArgument/notInsideIndices.kt");