diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java index c7d398a3239..06163a0605c 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java @@ -10447,6 +10447,11 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirOldFronte runTest("compiler/testData/diagnostics/tests/inference/kt39220.kt"); } + @TestMetadata("kt40396.kt") + public void testKt40396() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/kt40396.kt"); + } + @TestMetadata("kt6175.kt") public void testKt6175() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/kt6175.kt"); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt index 4069520529c..3ff54236166 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt @@ -436,8 +436,8 @@ class DiagnosticReporterByTrackingStrategy( if (isSpecialFunction(error.resolvedAtom)) return - val expression = when (val atom = error.resolvedAtom.atom) { + is PSIKotlinCallForInvoke -> (atom.psiCall as? CallTransformer.CallForImplicitInvoke)?.outerCall?.calleeExpression is PSIKotlinCall -> atom.psiCall.calleeExpression is PSIKotlinCallArgument -> atom.valueArgument.getArgumentExpression() else -> call.calleeExpression diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/OperatorCallChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/OperatorCallChecker.kt index beb528f59ae..a7eef6f2422 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/OperatorCallChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/checkers/OperatorCallChecker.kt @@ -24,10 +24,7 @@ import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.diagnostics.DiagnosticSink import org.jetbrains.kotlin.diagnostics.Errors -import org.jetbrains.kotlin.psi.Call -import org.jetbrains.kotlin.psi.KtArrayAccessExpression -import org.jetbrains.kotlin.psi.KtDestructuringDeclarationEntry -import org.jetbrains.kotlin.psi.KtOperationReferenceExpression +import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.calls.CallTransformer import org.jetbrains.kotlin.resolve.calls.callResolverUtil.isConventionCall import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall @@ -52,11 +49,7 @@ class OperatorCallChecker : CallChecker { val containingDeclarationName = functionDescriptor.containingDeclaration.fqNameUnsafe.asString() context.trace.report(Errors.PROPERTY_AS_OPERATOR.on(reportOn, functionDescriptor, containingDeclarationName)) } else if (isWrongCallWithExplicitTypeArguments(resolvedCall, outerCall)) { - throw AssertionError( - "Illegal resolved call to variable with invoke for $outerCall. " + - "Variable: ${resolvedCall.variableCall.resultingDescriptor}" + - "Invoke: ${resolvedCall.functionCall.resultingDescriptor}" - ) + context.trace.report(Errors.TYPE_ARGUMENTS_NOT_ALLOWED.on(reportOn as KtElement, "on implicit invoke call")) } } diff --git a/compiler/testData/diagnostics/tests/inference/kt40396.fir.kt b/compiler/testData/diagnostics/tests/inference/kt40396.fir.kt new file mode 100644 index 00000000000..c5f56f12b7c --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/kt40396.fir.kt @@ -0,0 +1,13 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER +// ISSUE: KT-40396 + +val C.foo get() = Foo() + +class Foo { + operator fun invoke(body: () -> Unit) {} +} + +class Bar { + val bar = foo {} + val baz = foo {} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inference/kt40396.kt b/compiler/testData/diagnostics/tests/inference/kt40396.kt new file mode 100644 index 00000000000..5b9fe4df45a --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/kt40396.kt @@ -0,0 +1,13 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER +// ISSUE: KT-40396 + +val C.foo get() = Foo() + +class Foo { + operator fun invoke(body: () -> Unit) {} +} + +class Bar { + val bar = foo {} + val baz = foo {} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inference/kt40396.txt b/compiler/testData/diagnostics/tests/inference/kt40396.txt new file mode 100644 index 00000000000..d9ba8fcae8b --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/kt40396.txt @@ -0,0 +1,20 @@ +package + +public val C.foo: Foo + +public final class Bar { + public constructor Bar() + public final val bar: kotlin.Unit + public final val baz: kotlin.Unit + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Foo { + public constructor Foo() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public final operator fun invoke(/*0*/ body: () -> kotlin.Unit): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests-gen/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index cb8ec64cf4f..9b634e16da3 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -10454,6 +10454,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTestWithFirVali runTest("compiler/testData/diagnostics/tests/inference/kt39220.kt"); } + @TestMetadata("kt40396.kt") + public void testKt40396() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/kt40396.kt"); + } + @TestMetadata("kt6175.kt") public void testKt6175() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/kt6175.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 6c5f6fceffd..52520f545d7 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -10449,6 +10449,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/inference/kt39220.kt"); } + @TestMetadata("kt40396.kt") + public void testKt40396() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/kt40396.kt"); + } + @TestMetadata("kt6175.kt") public void testKt6175() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/kt6175.kt");