From 72a78eb423d7cdcaf4224119125e01a7d4691e3b Mon Sep 17 00:00:00 2001 From: Victor Petukhov Date: Fri, 29 Oct 2021 17:26:03 +0300 Subject: [PATCH] Replace errors with warnings for type checker recursion on delegates ^KT-49477 Fixed --- ...CompilerTestFE10TestdataTestGenerated.java | 12 + ...irOldFrontendDiagnosticsTestGenerated.java | 12 + ...DiagnosticsWithLightTreeTestGenerated.java | 12 + .../jetbrains/kotlin/diagnostics/Errors.java | 2 +- .../resolve/DelegatedPropertyResolver.kt | 17 +- .../ExpressionTypingVisitorDispatcher.java | 4 +- .../tests/InvokeAndRecursiveResolve.kt | 2 +- .../diagnostics/tests/RecursiveResolve.kt | 8 +- .../tests/RecursiveTypeInference.kt | 6 +- .../UninitializedOrReassignedVariables.kt | 2 +- .../tests/delegatedProperty/recursiveType.kt | 6 +- .../diagnostics/tests/delegation/kt44843.kt | 4 +- .../tests/delegation/kt49477.fir.fail | 232 ++++++++++++++++++ .../tests/delegation/kt49477.fir.kt | 35 +++ .../diagnostics/tests/delegation/kt49477.kt | 35 +++ .../diagnostics/tests/delegation/kt49477.txt | 56 +++++ .../tests/delegation/kt49477Error.fir.fail | 151 ++++++++++++ .../tests/delegation/kt49477Error.fir.kt | 36 +++ .../tests/delegation/kt49477Error.kt | 36 +++ .../tests/delegation/kt49477Error.txt | 56 +++++ .../tests/inference/recursiveCalls/kt23531.kt | 8 +- .../recursiveLocalFuns/localFactorial.kt | 2 +- .../recursiveLocalFuns/recursiveFun.kt | 2 +- .../recursiveLocalFuns/recursiveLambda.kt | 2 +- .../inference/recursiveLocalFuns/selfCall.kt | 6 +- .../j+k/recursionWithJavaSyntheticProperty.kt | 2 +- .../inferenceFromGetters/objectExpression.kt | 2 +- .../inferenceFromGetters/recursiveGetter.kt | 10 +- .../diagnostics/tests/regressions/Jet81.kt | 4 +- .../diagnostics/tests/regressions/ea76264.kt | 4 +- .../diagnostics/tests/regressions/kt328.kt | 12 +- .../diagnostics/tests/regressions/kt9384.kt | 2 +- .../testsWithStdLib/coroutines/kt18292.kt | 2 +- .../test/runners/DiagnosticTestGenerated.java | 12 + .../return-expressions/p-4/neg/1.1.kt | 2 +- .../kotlin/config/LanguageVersionSettings.kt | 1 + 36 files changed, 749 insertions(+), 48 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/delegation/kt49477.fir.fail create mode 100644 compiler/testData/diagnostics/tests/delegation/kt49477.fir.kt create mode 100644 compiler/testData/diagnostics/tests/delegation/kt49477.kt create mode 100644 compiler/testData/diagnostics/tests/delegation/kt49477.txt create mode 100644 compiler/testData/diagnostics/tests/delegation/kt49477Error.fir.fail create mode 100644 compiler/testData/diagnostics/tests/delegation/kt49477Error.fir.kt create mode 100644 compiler/testData/diagnostics/tests/delegation/kt49477Error.kt create mode 100644 compiler/testData/diagnostics/tests/delegation/kt49477Error.txt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index 0464c54a7c2..fc13644b888 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -8488,6 +8488,18 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/delegation/kt44843.kt"); } + @Test + @TestMetadata("kt49477.kt") + public void testKt49477() throws Exception { + runTest("compiler/testData/diagnostics/tests/delegation/kt49477.kt"); + } + + @Test + @TestMetadata("kt49477Error.kt") + public void testKt49477Error() throws Exception { + runTest("compiler/testData/diagnostics/tests/delegation/kt49477Error.kt"); + } + @Test @TestMetadata("kt8154.kt") public void testKt8154() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index be683b08eb9..d22ae128b90 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -8488,6 +8488,18 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/delegation/kt44843.kt"); } + @Test + @TestMetadata("kt49477.kt") + public void testKt49477() throws Exception { + runTest("compiler/testData/diagnostics/tests/delegation/kt49477.kt"); + } + + @Test + @TestMetadata("kt49477Error.kt") + public void testKt49477Error() throws Exception { + runTest("compiler/testData/diagnostics/tests/delegation/kt49477Error.kt"); + } + @Test @TestMetadata("kt8154.kt") public void testKt8154() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index 318b49db4e2..a6dfc33c376 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -8488,6 +8488,18 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/delegation/kt44843.kt"); } + @Test + @TestMetadata("kt49477.kt") + public void testKt49477() throws Exception { + runTest("compiler/testData/diagnostics/tests/delegation/kt49477.kt"); + } + + @Test + @TestMetadata("kt49477Error.kt") + public void testKt49477Error() throws Exception { + runTest("compiler/testData/diagnostics/tests/delegation/kt49477Error.kt"); + } + @Test @TestMetadata("kt8154.kt") public void testKt8154() throws Exception { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java index b5206aa39b1..63274861c59 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/diagnostics/Errors.java @@ -791,7 +791,7 @@ public interface Errors { DiagnosticFactory1 NAME_SHADOWING = DiagnosticFactory1.create(WARNING, PositioningStrategies.FOR_REDECLARATION); DiagnosticFactory0 ACCESSOR_PARAMETER_NAME_SHADOWING = DiagnosticFactory0.create(WARNING); - DiagnosticFactory0 TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM = DiagnosticFactory0.create(ERROR); + DiagnosticFactoryForDeprecation0 TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM = DiagnosticFactoryForDeprecation0.create(LanguageFeature.ForbidRecursiveDelegateExpressions); // Checking call arguments diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt index 6ba57eecf45..5fdcd2f729d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt @@ -541,6 +541,21 @@ class DelegatedPropertyResolver( return delegateType } + private fun completeNotComputedDelegateType(trace: BindingTrace, traceToResolveDelegatedProperty: TemporaryBindingTrace) { + val ranIntoRecursionDiagnostic = traceToResolveDelegatedProperty.bindingContext.diagnostics.find { + it.factory == TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM.errorFactory + || it.factory == TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM.warningFactory + } + if (ranIntoRecursionDiagnostic != null) { + trace.report( + TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM.on( + languageVersionSettings, + ranIntoRecursionDiagnostic.psiElement as KtExpression + ) + ) + } + } + private fun resolveWithNewInference( delegateExpression: KtExpression, variableDescriptor: VariableDescriptorWithAccessors, @@ -561,7 +576,7 @@ class DelegatedPropertyResolver( ) var delegateType = delegateTypeInfo.type ?: run { - traceToResolveDelegatedProperty.commit() + completeNotComputedDelegateType(trace, traceToResolveDelegatedProperty) return null } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorDispatcher.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorDispatcher.java index 738d33e8853..ae838e30968 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorDispatcher.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ExpressionTypingVisitorDispatcher.java @@ -196,7 +196,7 @@ public abstract class ExpressionTypingVisitorDispatcher extends KtVisitortest() - val test = bar() + val test = bar() } diff --git a/compiler/testData/diagnostics/tests/RecursiveResolve.kt b/compiler/testData/diagnostics/tests/RecursiveResolve.kt index 8f4ec4db0b6..671869c43ce 100644 --- a/compiler/testData/diagnostics/tests/RecursiveResolve.kt +++ b/compiler/testData/diagnostics/tests/RecursiveResolve.kt @@ -32,7 +32,7 @@ class Test2(foo: Any?, bar: Any?) { class Test3(foo: Any?, bar: Any?) { val foo = foo ?: this private val bar = bar ?: this - private val bas = bas() + private val bas = bas() val bas2 = bas2() private fun bas(): Int = null!! @@ -40,14 +40,14 @@ class Test3(foo: Any?, bar: Any?) { fun bar() = bar(1) fun bar(i: Int) = 2 - private fun bar2() = bar2(1) + private fun bar2() = bar2(1) private fun bar2(i: Int) = 2 } class Test4(foo: Any?, bar: Any?) { val foo = foo ?: this private val bar = bar ?: this - private val bas = bas() + private val bas = bas() val bas2 = bas2() private fun bas(): Int = null!! @@ -55,7 +55,7 @@ class Test4(foo: Any?, bar: Any?) { fun bar() = bar(1) fun bar(i: Int) = 2 - private fun bar2() = bar2(1) + private fun bar2() = bar2(1) private fun bar2(i: Int) = 2 } diff --git a/compiler/testData/diagnostics/tests/RecursiveTypeInference.kt b/compiler/testData/diagnostics/tests/RecursiveTypeInference.kt index b6ca0bf304b..1067e308a32 100644 --- a/compiler/testData/diagnostics/tests/RecursiveTypeInference.kt +++ b/compiler/testData/diagnostics/tests/RecursiveTypeInference.kt @@ -4,19 +4,19 @@ package a val foo = bar() - fun bar() = foo + fun bar() = foo // FILE: b.kt package b fun foo() = bar() - fun bar() = foo() + fun bar() = foo() // FILE: c.kt package c fun bazz() = bar() - fun foo() = bazz() + fun foo() = bazz() fun bar() = foo() diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/UninitializedOrReassignedVariables.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/UninitializedOrReassignedVariables.kt index 354d78c5cc7..b261a0f4a1e 100644 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/UninitializedOrReassignedVariables.kt +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/UninitializedOrReassignedVariables.kt @@ -240,7 +240,7 @@ class Outer() { } class ForwardAccessToBackingField() { //kt-147 - val a = a // error + val a = a // error val b = c // error val c = 1 } diff --git a/compiler/testData/diagnostics/tests/delegatedProperty/recursiveType.kt b/compiler/testData/diagnostics/tests/delegatedProperty/recursiveType.kt index 07b3afb0747..dfaf11099d0 100644 --- a/compiler/testData/diagnostics/tests/delegatedProperty/recursiveType.kt +++ b/compiler/testData/diagnostics/tests/delegatedProperty/recursiveType.kt @@ -3,12 +3,12 @@ import kotlin.reflect.KProperty -val a by a +val a by a -val b by Delegate(b) +val b by Delegate(b) val c by d -val d by c +val d by c class Delegate(i: Int) { operator fun getValue(t: Any?, p: KProperty<*>): Int { diff --git a/compiler/testData/diagnostics/tests/delegation/kt44843.kt b/compiler/testData/diagnostics/tests/delegation/kt44843.kt index b916a66f8ee..45664958627 100644 --- a/compiler/testData/diagnostics/tests/delegation/kt44843.kt +++ b/compiler/testData/diagnostics/tests/delegation/kt44843.kt @@ -1,13 +1,13 @@ // WITH_STDLIB // FILE: test.kt -val bar2 by bar2() +val bar2 by bar2() // FILE: lt/neworld/compiler/Foo.kt package lt.neworld.compiler class Foo { - val bar by bar() + val bar by bar() } // FILE: lt/neworld/compiler/bar/Bar.kt diff --git a/compiler/testData/diagnostics/tests/delegation/kt49477.fir.fail b/compiler/testData/diagnostics/tests/delegation/kt49477.fir.fail new file mode 100644 index 00000000000..e7b302aa460 --- /dev/null +++ b/compiler/testData/diagnostics/tests/delegation/kt49477.fir.fail @@ -0,0 +1,232 @@ +java.lang.RuntimeException: While resolving call parent#(Q|GitLabChangesProcessor|::buildProcessors#) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirExpressionsResolveTransformer.transformFunctionCall(FirExpressionsResolveTransformer.kt:375) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformFunctionCall(FirBodyResolveTransformer.kt:123) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformFunctionCall(FirBodyResolveTransformer.kt:27) + at org.jetbrains.kotlin.fir.expressions.FirFunctionCall.transform(FirFunctionCall.kt:38) + at org.jetbrains.kotlin.fir.visitors.FirTransformerUtilKt.transformSingle(FirTransformerUtil.kt:12) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.transformWrappedDelegateExpression(FirDeclarationsResolveTransformer.kt:307) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformWrappedDelegateExpression(FirBodyResolveTransformer.kt:205) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformWrappedDelegateExpression(FirBodyResolveTransformer.kt:27) + at org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression.transform(FirWrappedDelegateExpression.kt:29) + at org.jetbrains.kotlin.fir.declarations.impl.FirPropertyImpl.transformDelegate(FirPropertyImpl.kt:121) + at org.jetbrains.kotlin.fir.declarations.impl.FirPropertyImpl.transformDelegate(FirPropertyImpl.kt:37) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.transformPropertyAccessorsWithDelegate(FirDeclarationsResolveTransformer.kt:273) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.access$transformPropertyAccessorsWithDelegate(FirDeclarationsResolveTransformer.kt:53) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.transformProperty(FirDeclarationsResolveTransformer.kt:158) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformProperty(FirBodyResolveTransformer.kt:279) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer.access$transformProperty$s-1523881058(FirImplicitBodyResolve.kt:130) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer$transformProperty$1.invoke(FirImplicitBodyResolve.kt:159) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer$transformProperty$1.invoke(FirImplicitBodyResolve.kt:158) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer.computeCachedTransformationResult(FirImplicitBodyResolve.kt:187) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer.transformProperty(FirImplicitBodyResolve.kt:158) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer.transformProperty(FirImplicitBodyResolve.kt:130) + at org.jetbrains.kotlin.fir.declarations.FirProperty.transform(FirProperty.kt:59) + at org.jetbrains.kotlin.fir.visitors.FirTransformerUtilKt.transformInplace(FirTransformerUtil.kt:19) + at org.jetbrains.kotlin.fir.declarations.impl.FirRegularClassImpl.transformDeclarations(FirRegularClassImpl.kt:88) + at org.jetbrains.kotlin.fir.declarations.impl.FirRegularClassImpl.transformChildren(FirRegularClassImpl.kt:70) + at org.jetbrains.kotlin.fir.declarations.impl.FirRegularClassImpl.transformChildren(FirRegularClassImpl.kt:32) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformElement(FirBodyResolveTransformer.kt:61) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformDeclarationContent(FirBodyResolveTransformer.kt:264) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.transformDeclarationContent(FirDeclarationsResolveTransformer.kt:72) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.access$transformDeclarationContent(FirDeclarationsResolveTransformer.kt:53) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer$doTransformRegularClass$result$1.invoke(FirDeclarationsResolveTransformer.kt:511) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer$doTransformRegularClass$result$1.invoke(FirDeclarationsResolveTransformer.kt:510) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.BodyResolveContext$withRegularClass$2$1.invoke(BodyResolveContext.kt:783) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.BodyResolveContext.withScopesForClass(BodyResolveContext.kt:481) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.BodyResolveContext.withRegularClass(BodyResolveContext.kt:395) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.BodyResolveContext.withRegularClass$default(BodyResolveContext.kt:374) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.doTransformRegularClass(FirDeclarationsResolveTransformer.kt:510) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.transformRegularClass(FirDeclarationsResolveTransformer.kt:483) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformRegularClass(FirBodyResolveTransformer.kt:294) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformRegularClass(FirBodyResolveTransformer.kt:27) + at org.jetbrains.kotlin.fir.declarations.FirRegularClass.transform(FirRegularClass.kt:49) + at org.jetbrains.kotlin.fir.visitors.FirTransformerUtilKt.transformInplace(FirTransformerUtil.kt:19) + at org.jetbrains.kotlin.fir.declarations.impl.FirFileImpl.transformDeclarations(FirFileImpl.kt:72) + at org.jetbrains.kotlin.fir.declarations.impl.FirFileImpl.transformChildren(FirFileImpl.kt:57) + at org.jetbrains.kotlin.fir.declarations.impl.FirFileImpl.transformChildren(FirFileImpl.kt:26) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformElement(FirBodyResolveTransformer.kt:61) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformDeclarationContent(FirBodyResolveTransformer.kt:264) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformFile(FirBodyResolveTransformer.kt:55) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformFile(FirBodyResolveTransformer.kt:27) + at org.jetbrains.kotlin.fir.declarations.FirFile.transform(FirFile.kt:39) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitTypeBodyResolveTransformerAdapter.transformFile(FirImplicitBodyResolve.kt:57) + at org.jetbrains.kotlin.fir.declarations.FirFile.transform(FirFile.kt:39) + at org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveProcessor.processFile(FirResolveProcessor.kt:33) + at org.jetbrains.kotlin.fir.resolve.transformers.FirTotalResolveProcessor.process(FirTotalResolveProcessor.kt:34) + at org.jetbrains.kotlin.fir.analysis.FirAnalyzerFacade.runResolution(FirAnalyzerFacade.kt:84) + at org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade.analyze(FirFrontendFacade.kt:125) + at org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade.analyze(FirFrontendFacade.kt:42) + at org.jetbrains.kotlin.test.model.FrontendFacade.transform(Facades.kt:43) + at org.jetbrains.kotlin.test.model.FrontendFacade.transform(Facades.kt:28) + at org.jetbrains.kotlin.test.TestStep$FacadeStep.processModule(TestStep.kt:33) + at org.jetbrains.kotlin.test.TestRunner.processModule(TestRunner.kt:200) + at org.jetbrains.kotlin.test.TestRunner.hackyProcessModule(TestRunner.kt:191) + at org.jetbrains.kotlin.test.TestRunner.processModule(TestRunner.kt:133) + at org.jetbrains.kotlin.test.TestRunner.runTestPipeline(TestRunner.kt:85) + at org.jetbrains.kotlin.test.TestRunner.runTestImpl(TestRunner.kt:69) + at org.jetbrains.kotlin.test.TestRunner.runTest(TestRunner.kt:29) + at org.jetbrains.kotlin.test.TestRunner.runTest$default(TestRunner.kt:27) + at org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerTest.runTest(AbstractKotlinCompilerTest.kt:82) + at org.jetbrains.kotlin.test.runners.FirOldFrontendDiagnosticsTestGenerated$Tests$Delegation.testKt49477(FirOldFrontendDiagnosticsTestGenerated.java:8463) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:498) + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725) + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84) + at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115) + at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104) + at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:214) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:210) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:135) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:66) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:185) + at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:129) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:185) + at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:129) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:185) + at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:129) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:185) + at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService.invokeAll(ForkJoinPoolHierarchicalTestExecutorService.java:129) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.ForkJoinPoolHierarchicalTestExecutorService$ExclusiveTask.compute(ForkJoinPoolHierarchicalTestExecutorService.java:185) + at java.util.concurrent.RecursiveAction.exec(RecursiveAction.java:189) + at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) + at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056) + at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) + at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157) +Caused by: java.lang.AssertionError: Not singleClassifierType and not intersection subType: TypeVariable(Target) + at org.jetbrains.kotlin.resolve.calls.inference.components.TypeCheckerStateForConstraintSystem.assertInputTypes(TypeCheckerStateForConstraintSystem.kt:360) + at org.jetbrains.kotlin.resolve.calls.inference.components.TypeCheckerStateForConstraintSystem.internalAddSubtypeConstraint(TypeCheckerStateForConstraintSystem.kt:124) + at org.jetbrains.kotlin.resolve.calls.inference.components.TypeCheckerStateForConstraintSystem.addSubtypeConstraint(TypeCheckerStateForConstraintSystem.kt:79) + at org.jetbrains.kotlin.types.AbstractTypeChecker.completeIsSubTypeOf(AbstractTypeChecker.kt:254) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOf(AbstractTypeChecker.kt:216) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOf$default(AbstractTypeChecker.kt:206) + at org.jetbrains.kotlin.types.AbstractTypeChecker.equalTypes(AbstractTypeChecker.kt:235) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeForSameConstructor(AbstractTypeChecker.kt:438) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOfForSingleClassifierType(AbstractTypeChecker.kt:345) + at org.jetbrains.kotlin.types.AbstractTypeChecker.completeIsSubTypeOf(AbstractTypeChecker.kt:256) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOf(AbstractTypeChecker.kt:216) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOf$default(AbstractTypeChecker.kt:206) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeForSameConstructor(AbstractTypeChecker.kt:439) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOfForSingleClassifierType(AbstractTypeChecker.kt:345) + at org.jetbrains.kotlin.types.AbstractTypeChecker.completeIsSubTypeOf(AbstractTypeChecker.kt:256) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOf(AbstractTypeChecker.kt:216) + at org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector$TypeCheckerStateForConstraintInjector.runIsSubtypeOf$isSubtypeOf(ConstraintInjector.kt:268) + at org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector$TypeCheckerStateForConstraintInjector.runIsSubtypeOf(ConstraintInjector.kt:275) + at org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector$TypeCheckerStateForConstraintInjector.runIsSubtypeOf$default(ConstraintInjector.kt:261) + at org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector.addSubTypeConstraintAndIncorporateIt(ConstraintInjector.kt:91) + at org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector.addInitialSubtypeConstraint(ConstraintInjector.kt:51) + at org.jetbrains.kotlin.resolve.calls.inference.model.NewConstraintSystemImpl.addSubtypeConstraint(NewConstraintSystemImpl.kt:162) + at org.jetbrains.kotlin.fir.resolve.calls.CheckCallableReferenceExpectedType$check$2.invoke(CallableReferenceResolution.kt:67) + at org.jetbrains.kotlin.fir.resolve.calls.CheckCallableReferenceExpectedType$check$2.invoke(CallableReferenceResolution.kt:61) + at org.jetbrains.kotlin.fir.resolve.calls.CheckCallableReferenceExpectedType$check$3.invoke(CallableReferenceResolution.kt:83) + at org.jetbrains.kotlin.fir.resolve.calls.CheckCallableReferenceExpectedType$check$3.invoke(CallableReferenceResolution.kt:82) + at org.jetbrains.kotlin.resolve.calls.inference.model.NewConstraintSystemImpl.runTransaction(NewConstraintSystemImpl.kt:211) + at org.jetbrains.kotlin.fir.resolve.calls.CheckCallableReferenceExpectedType.check(CallableReferenceResolution.kt:82) + at org.jetbrains.kotlin.fir.resolve.calls.ResolutionStageRunner$processCandidate$1.invokeSuspend(ResolutionStageRunner.kt:24) + at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) + at org.jetbrains.kotlin.fir.resolve.calls.ResolutionStageRunner.processCandidate(ResolutionStageRunner.kt:37) + at org.jetbrains.kotlin.fir.resolve.calls.ResolutionStageRunner.processCandidate$default(ResolutionStageRunner.kt:17) + at org.jetbrains.kotlin.fir.resolve.calls.CandidateCollector.consumeCandidate(CandidateCollector.kt:34) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerScopeLevelProcessor.consumeCandidate(TowerLevelHandler.kt:82) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerScopeLevel$TowerScopeLevelProcessor$DefaultImpls.consumeCandidate$default(TowerLevels.kt:54) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel$processMembers$1.invoke(TowerLevels.kt:103) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel$processMembers$1.invoke(TowerLevels.kt:93) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel$processPropertiesByName$1$1$1.invoke(TowerLevels.kt:169) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel$processPropertiesByName$1$1$1.invoke(TowerLevels.kt:165) + at org.jetbrains.kotlin.fir.scopes.impl.AbstractFirUseSiteMemberScope.processPropertiesByName(AbstractFirUseSiteMemberScope.kt:67) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel$processPropertiesByName$1.invoke(TowerLevels.kt:165) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel$processPropertiesByName$1.invoke(TowerLevels.kt:162) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel.processMembers(TowerLevels.kt:93) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel.processPropertiesByName(TowerLevels.kt:162) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerLevelHandler.handleLevel(TowerLevelHandler.kt:57) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirBaseTowerResolveTask.processLevel(FirTowerResolveTask.kt:132) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirBaseTowerResolveTask.access$processLevel(FirTowerResolveTask.kt:53) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirTowerResolveTask.runResolverForExpressionReceiver(FirTowerResolveTask.kt:436) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirTowerResolveTask.runResolverForQualifierReceiver(FirTowerResolveTask.kt:180) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirTowerResolver$enqueueResolutionTasks$1.invokeSuspend(FirTowerResolver.kt:58) + at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerResolveManager.resumeTask(TowerResolveManager.kt:77) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerResolveManager.runTasks(TowerResolveManager.kt:83) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirTowerResolver.runResolver(FirTowerResolver.kt:37) + at org.jetbrains.kotlin.fir.FirCallResolver.resolveCallableReference(FirCallResolver.kt:365) + at org.jetbrains.kotlin.fir.resolve.calls.EagerResolveOfCallableReferences.check(ResolutionStages.kt:396) + at org.jetbrains.kotlin.fir.resolve.calls.ResolutionStageRunner$processCandidate$1.invokeSuspend(ResolutionStageRunner.kt:24) + at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) + at org.jetbrains.kotlin.fir.resolve.calls.ResolutionStageRunner.processCandidate(ResolutionStageRunner.kt:37) + at org.jetbrains.kotlin.fir.resolve.calls.ResolutionStageRunner.processCandidate$default(ResolutionStageRunner.kt:17) + at org.jetbrains.kotlin.fir.resolve.calls.CandidateCollector.consumeCandidate(CandidateCollector.kt:34) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerScopeLevelProcessor.consumeCandidate(TowerLevelHandler.kt:82) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerScopeLevel$TowerScopeLevelProcessor$DefaultImpls.consumeCandidate$default(TowerLevels.kt:54) + at org.jetbrains.kotlin.fir.resolve.calls.tower.ScopeTowerLevel.consumeCallableCandidate(TowerLevels.kt:297) + at org.jetbrains.kotlin.fir.resolve.calls.tower.ScopeTowerLevel.access$consumeCallableCandidate(TowerLevels.kt:218) + at org.jetbrains.kotlin.fir.resolve.calls.tower.ScopeTowerLevel$processFunctionsByName$1.invoke(TowerLevels.kt:317) + at org.jetbrains.kotlin.fir.resolve.calls.tower.ScopeTowerLevel$processFunctionsByName$1.invoke(TowerLevels.kt:310) + at org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope.processFunctionsByName(FirPackageMemberScope.kt:53) + at org.jetbrains.kotlin.fir.resolve.calls.ConstructorProcessingKt.processFunctionsAndConstructorsByName(ConstructorProcessing.kt:73) + at org.jetbrains.kotlin.fir.resolve.calls.tower.ScopeTowerLevel.processFunctionsByName(TowerLevels.kt:310) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerLevelHandler.handleLevel(TowerLevelHandler.kt:53) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirBaseTowerResolveTask.processLevel(FirTowerResolveTask.kt:132) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirBaseTowerResolveTask.access$processLevel(FirTowerResolveTask.kt:53) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirBaseTowerResolveTask$processLevel$3.invokeSuspend(FirTowerResolveTask.kt) + at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerResolveManager.resumeTask(TowerResolveManager.kt:77) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerResolveManager.runTasks(TowerResolveManager.kt:83) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirTowerResolver.runResolver(FirTowerResolver.kt:37) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirTowerResolver.runResolver$default(FirTowerResolver.kt:27) + at org.jetbrains.kotlin.fir.FirCallResolver.collectCandidates(FirCallResolver.kt:184) + at org.jetbrains.kotlin.fir.FirCallResolver.collectCandidates$default(FirCallResolver.kt:160) + at org.jetbrains.kotlin.fir.FirCallResolver.resolveCallAndSelectCandidate(FirCallResolver.kt:86) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirExpressionsResolveTransformer.transformFunctionCall(FirExpressionsResolveTransformer.kt:367) + ... 145 more diff --git a/compiler/testData/diagnostics/tests/delegation/kt49477.fir.kt b/compiler/testData/diagnostics/tests/delegation/kt49477.fir.kt new file mode 100644 index 00000000000..ed6fbf2bcb9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/delegation/kt49477.fir.kt @@ -0,0 +1,35 @@ +// WITH_STDLIB + +import kotlin.properties.ReadWriteProperty +import kotlin.reflect.KProperty +import kotlin.reflect.KProperty1 + +inline fun Self.parent( + property: KProperty1>): Delegate = TODO() + +class GitLabBuildProcessor: DatabaseEntity { + var processor by parent(GitLabChangesProcessor::buildProcessors) +} + +interface DatabaseEntity: Entity +interface Entity +interface ResourceFactory +interface ValueFilter + +interface Delegate : ReadWriteProperty, ValueFilter { + infix fun name(desc: KProperty<*>): String +infix fun by(name: String): Delegate +infix fun resource(factory: ResourceFactory): Delegate +infix fun filter(filter: (R, Any?) -> Boolean): Delegate +} + +class GitLabChangesProcessor: DatabaseEntity { + var buildProcessors by child_many( + GitLabBuildProcessor::class.java, + GitLabBuildProcessor::processor + ) +} + +fun Self.child_many( + clazz: Class, property: KProperty1, name: String = property.name +): Delegate> = TODO() // Type checking has run into a recursive problem. Easiest workaround: specify types of your declarations explicitly \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/delegation/kt49477.kt b/compiler/testData/diagnostics/tests/delegation/kt49477.kt new file mode 100644 index 00000000000..75283ef72b1 --- /dev/null +++ b/compiler/testData/diagnostics/tests/delegation/kt49477.kt @@ -0,0 +1,35 @@ +// WITH_STDLIB + +import kotlin.properties.ReadWriteProperty +import kotlin.reflect.KProperty +import kotlin.reflect.KProperty1 + +inline fun Self.parent( + property: KProperty1>): Delegate = TODO() + +class GitLabBuildProcessor: DatabaseEntity { + var processor by ")!>parent(GitLabChangesProcessor::buildProcessors) +} + +interface DatabaseEntity: Entity +interface Entity +interface ResourceFactory +interface ValueFilter + +interface Delegate : ReadWriteProperty, ValueFilter { + infix fun name(desc: KProperty<*>): String +infix fun by(name: String): Delegate +infix fun resource(factory: ResourceFactory): Delegate +infix fun filter(filter: (R, Any?) -> Boolean): Delegate +} + +class GitLabChangesProcessor: DatabaseEntity { + var buildProcessors by >"), TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM_WARNING!>child_many( + GitLabBuildProcessor::class.java, + GitLabBuildProcessor::processor + ) +} + +fun Self.child_many( + clazz: Class, property: KProperty1, name: String = property.name +): Delegate> = TODO() // Type checking has run into a recursive problem. Easiest workaround: specify types of your declarations explicitly \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/delegation/kt49477.txt b/compiler/testData/diagnostics/tests/delegation/kt49477.txt new file mode 100644 index 00000000000..a4ac7b78c2d --- /dev/null +++ b/compiler/testData/diagnostics/tests/delegation/kt49477.txt @@ -0,0 +1,56 @@ +package + +public fun Self.child_many(/*0*/ clazz: java.lang.Class, /*1*/ property: kotlin.reflect.KProperty1, /*2*/ name: kotlin.String = ...): Delegate> +public inline fun Self.parent(/*0*/ property: kotlin.reflect.KProperty1>): Delegate + +public interface DatabaseEntity : Entity { + 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 interface Delegate : kotlin.properties.ReadWriteProperty, ValueFilter { + public abstract infix fun by(/*0*/ name: kotlin.String): Delegate + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract infix fun filter(/*0*/ filter: (R, kotlin.Any?) -> kotlin.Boolean): Delegate + public abstract override /*1*/ /*fake_override*/ fun getValue(/*0*/ thisRef: R, /*1*/ property: kotlin.reflect.KProperty<*>): T + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract infix fun name(/*0*/ desc: kotlin.reflect.KProperty<*>): kotlin.String + public abstract infix fun resource(/*0*/ factory: ResourceFactory): Delegate + public abstract override /*1*/ /*fake_override*/ fun setValue(/*0*/ thisRef: R, /*1*/ property: kotlin.reflect.KProperty<*>, /*2*/ value: T): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface Entity { + 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 GitLabBuildProcessor : DatabaseEntity { + public constructor GitLabBuildProcessor() + public final var processor: GitLabChangesProcessor? + 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 GitLabChangesProcessor : DatabaseEntity { + public constructor GitLabChangesProcessor() + public final var buildProcessors: kotlin.collections.MutableCollection + 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 interface ResourceFactory { + 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 interface ValueFilter { + 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 +} diff --git a/compiler/testData/diagnostics/tests/delegation/kt49477Error.fir.fail b/compiler/testData/diagnostics/tests/delegation/kt49477Error.fir.fail new file mode 100644 index 00000000000..6fc265e9fd9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/delegation/kt49477Error.fir.fail @@ -0,0 +1,151 @@ +java.lang.RuntimeException: While resolving call parent#(Q|GitLabChangesProcessor|::buildProcessors#) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirExpressionsResolveTransformer.transformFunctionCall(FirExpressionsResolveTransformer.kt:375) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformFunctionCall(FirBodyResolveTransformer.kt:123) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformFunctionCall(FirBodyResolveTransformer.kt:27) + at org.jetbrains.kotlin.fir.expressions.FirFunctionCall.transform(FirFunctionCall.kt:38) + at org.jetbrains.kotlin.fir.visitors.FirTransformerUtilKt.transformSingle(FirTransformerUtil.kt:12) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.transformWrappedDelegateExpression(FirDeclarationsResolveTransformer.kt:307) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformWrappedDelegateExpression(FirBodyResolveTransformer.kt:205) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformWrappedDelegateExpression(FirBodyResolveTransformer.kt:27) + at org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression.transform(FirWrappedDelegateExpression.kt:29) + at org.jetbrains.kotlin.fir.declarations.impl.FirPropertyImpl.transformDelegate(FirPropertyImpl.kt:121) + at org.jetbrains.kotlin.fir.declarations.impl.FirPropertyImpl.transformDelegate(FirPropertyImpl.kt:37) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.transformPropertyAccessorsWithDelegate(FirDeclarationsResolveTransformer.kt:273) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.access$transformPropertyAccessorsWithDelegate(FirDeclarationsResolveTransformer.kt:53) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.transformProperty(FirDeclarationsResolveTransformer.kt:158) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformProperty(FirBodyResolveTransformer.kt:279) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer.access$transformProperty$s-1523881058(FirImplicitBodyResolve.kt:130) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer$transformProperty$1.invoke(FirImplicitBodyResolve.kt:159) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer$transformProperty$1.invoke(FirImplicitBodyResolve.kt:158) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer.computeCachedTransformationResult(FirImplicitBodyResolve.kt:187) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer.transformProperty(FirImplicitBodyResolve.kt:158) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer.transformProperty(FirImplicitBodyResolve.kt:130) + at org.jetbrains.kotlin.fir.declarations.FirProperty.transform(FirProperty.kt:59) + at org.jetbrains.kotlin.fir.visitors.FirTransformerUtilKt.transformInplace(FirTransformerUtil.kt:19) + at org.jetbrains.kotlin.fir.declarations.impl.FirRegularClassImpl.transformDeclarations(FirRegularClassImpl.kt:88) + at org.jetbrains.kotlin.fir.declarations.impl.FirRegularClassImpl.transformChildren(FirRegularClassImpl.kt:70) + at org.jetbrains.kotlin.fir.declarations.impl.FirRegularClassImpl.transformChildren(FirRegularClassImpl.kt:32) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformElement(FirBodyResolveTransformer.kt:61) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformDeclarationContent(FirBodyResolveTransformer.kt:264) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.transformDeclarationContent(FirDeclarationsResolveTransformer.kt:72) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.access$transformDeclarationContent(FirDeclarationsResolveTransformer.kt:53) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer$doTransformRegularClass$result$1.invoke(FirDeclarationsResolveTransformer.kt:511) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer$doTransformRegularClass$result$1.invoke(FirDeclarationsResolveTransformer.kt:510) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.BodyResolveContext$withRegularClass$2$1.invoke(BodyResolveContext.kt:791) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.BodyResolveContext.withScopesForClass(BodyResolveContext.kt:489) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.BodyResolveContext.withRegularClass(BodyResolveContext.kt:403) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.BodyResolveContext.withRegularClass$default(BodyResolveContext.kt:382) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.doTransformRegularClass(FirDeclarationsResolveTransformer.kt:510) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirDeclarationsResolveTransformer.transformRegularClass(FirDeclarationsResolveTransformer.kt:483) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformRegularClass(FirBodyResolveTransformer.kt:294) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformRegularClass(FirBodyResolveTransformer.kt:27) + at org.jetbrains.kotlin.fir.declarations.FirRegularClass.transform(FirRegularClass.kt:49) + at org.jetbrains.kotlin.fir.visitors.FirTransformerUtilKt.transformInplace(FirTransformerUtil.kt:19) + at org.jetbrains.kotlin.fir.declarations.impl.FirFileImpl.transformDeclarations(FirFileImpl.kt:72) + at org.jetbrains.kotlin.fir.declarations.impl.FirFileImpl.transformChildren(FirFileImpl.kt:57) + at org.jetbrains.kotlin.fir.declarations.impl.FirFileImpl.transformChildren(FirFileImpl.kt:26) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformElement(FirBodyResolveTransformer.kt:61) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformDeclarationContent(FirBodyResolveTransformer.kt:264) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformFile(FirBodyResolveTransformer.kt:55) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer.transformFile(FirBodyResolveTransformer.kt:27) + at org.jetbrains.kotlin.fir.declarations.FirFile.transform(FirFile.kt:39) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitTypeBodyResolveTransformerAdapter.transformFile(FirImplicitBodyResolve.kt:57) + at org.jetbrains.kotlin.fir.declarations.FirFile.transform(FirFile.kt:39) + at org.jetbrains.kotlin.fir.resolve.transformers.FirTransformerBasedResolveProcessor.processFile(FirResolveProcessor.kt:33) + at org.jetbrains.kotlin.fir.resolve.transformers.FirTotalResolveProcessor.process(FirTotalResolveProcessor.kt:34) + at org.jetbrains.kotlin.fir.analysis.FirAnalyzerFacade.runResolution(FirAnalyzerFacade.kt:84) + at org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade.analyze(FirFrontendFacade.kt:125) + at org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade.analyze(FirFrontendFacade.kt:42) + at org.jetbrains.kotlin.test.model.FrontendFacade.transform(Facades.kt:43) + at org.jetbrains.kotlin.test.model.FrontendFacade.transform(Facades.kt:28) + at org.jetbrains.kotlin.test.TestStep$FacadeStep.processModule(TestStep.kt:33) + at org.jetbrains.kotlin.test.TestRunner.processModule(TestRunner.kt:200) + at org.jetbrains.kotlin.test.TestRunner.hackyProcessModule(TestRunner.kt:191) + at org.jetbrains.kotlin.test.TestRunner.processModule(TestRunner.kt:133) + at org.jetbrains.kotlin.test.TestRunner.runTestPipeline(TestRunner.kt:85) + ... 87 more + Caused by: java.lang.AssertionError: Not singleClassifierType and not intersection subType: TypeVariable(Target) + at org.jetbrains.kotlin.resolve.calls.inference.components.TypeCheckerStateForConstraintSystem.assertInputTypes(TypeCheckerStateForConstraintSystem.kt:360) + at org.jetbrains.kotlin.resolve.calls.inference.components.TypeCheckerStateForConstraintSystem.internalAddSubtypeConstraint(TypeCheckerStateForConstraintSystem.kt:124) + at org.jetbrains.kotlin.resolve.calls.inference.components.TypeCheckerStateForConstraintSystem.addSubtypeConstraint(TypeCheckerStateForConstraintSystem.kt:79) + at org.jetbrains.kotlin.types.AbstractTypeChecker.completeIsSubTypeOf(AbstractTypeChecker.kt:282) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOf(AbstractTypeChecker.kt:244) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOf$default(AbstractTypeChecker.kt:234) + at org.jetbrains.kotlin.types.AbstractTypeChecker.equalTypes(AbstractTypeChecker.kt:263) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeForSameConstructor(AbstractTypeChecker.kt:469) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOfForSingleClassifierType(AbstractTypeChecker.kt:373) + at org.jetbrains.kotlin.types.AbstractTypeChecker.completeIsSubTypeOf(AbstractTypeChecker.kt:284) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOf(AbstractTypeChecker.kt:244) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOf$default(AbstractTypeChecker.kt:234) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeForSameConstructor(AbstractTypeChecker.kt:470) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOfForSingleClassifierType(AbstractTypeChecker.kt:373) + at org.jetbrains.kotlin.types.AbstractTypeChecker.completeIsSubTypeOf(AbstractTypeChecker.kt:284) + at org.jetbrains.kotlin.types.AbstractTypeChecker.isSubtypeOf(AbstractTypeChecker.kt:244) + at org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector$TypeCheckerStateForConstraintInjector.runIsSubtypeOf$isSubtypeOf(ConstraintInjector.kt:379) + at org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector$TypeCheckerStateForConstraintInjector.runIsSubtypeOf(ConstraintInjector.kt:386) + at org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector$TypeCheckerStateForConstraintInjector.runIsSubtypeOf$default(ConstraintInjector.kt:372) + at org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector.addSubTypeConstraintAndIncorporateIt(ConstraintInjector.kt:99) + at org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintInjector.addInitialSubtypeConstraint(ConstraintInjector.kt:59) + at org.jetbrains.kotlin.resolve.calls.inference.model.NewConstraintSystemImpl.addSubtypeConstraint(NewConstraintSystemImpl.kt:166) + at org.jetbrains.kotlin.fir.resolve.calls.CheckCallableReferenceExpectedType$check$2.invoke(CallableReferenceResolution.kt:67) + at org.jetbrains.kotlin.fir.resolve.calls.CheckCallableReferenceExpectedType$check$2.invoke(CallableReferenceResolution.kt:61) + at org.jetbrains.kotlin.fir.resolve.calls.CheckCallableReferenceExpectedType$check$3.invoke(CallableReferenceResolution.kt:83) + at org.jetbrains.kotlin.fir.resolve.calls.CheckCallableReferenceExpectedType$check$3.invoke(CallableReferenceResolution.kt:82) + at org.jetbrains.kotlin.resolve.calls.inference.model.NewConstraintSystemImpl.runTransaction(NewConstraintSystemImpl.kt:216) + at org.jetbrains.kotlin.fir.resolve.calls.CheckCallableReferenceExpectedType.check(CallableReferenceResolution.kt:82) + at org.jetbrains.kotlin.fir.resolve.calls.ResolutionStageRunner$processCandidate$1.invokeSuspend(ResolutionStageRunner.kt:24) + at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) + at org.jetbrains.kotlin.fir.resolve.calls.ResolutionStageRunner.processCandidate(ResolutionStageRunner.kt:37) + at org.jetbrains.kotlin.fir.resolve.calls.ResolutionStageRunner.processCandidate$default(ResolutionStageRunner.kt:17) + at org.jetbrains.kotlin.fir.resolve.calls.CandidateCollector.consumeCandidate(CandidateCollector.kt:34) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerScopeLevelProcessor.consumeCandidate(TowerLevelHandler.kt:82) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerScopeLevel$TowerScopeLevelProcessor$DefaultImpls.consumeCandidate$default(TowerLevels.kt:54) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel$processMembers$1.invoke(TowerLevels.kt:103) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel$processMembers$1.invoke(TowerLevels.kt:93) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel$processPropertiesByName$1$1$1.invoke(TowerLevels.kt:169) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel$processPropertiesByName$1$1$1.invoke(TowerLevels.kt:165) + at org.jetbrains.kotlin.fir.scopes.impl.AbstractFirUseSiteMemberScope.processPropertiesByName(AbstractFirUseSiteMemberScope.kt:67) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel$processPropertiesByName$1.invoke(TowerLevels.kt:165) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel$processPropertiesByName$1.invoke(TowerLevels.kt:162) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel.processMembers(TowerLevels.kt:93) + at org.jetbrains.kotlin.fir.resolve.calls.tower.MemberScopeTowerLevel.processPropertiesByName(TowerLevels.kt:162) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerLevelHandler.handleLevel(TowerLevelHandler.kt:57) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirBaseTowerResolveTask.processLevel(FirTowerResolveTask.kt:132) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirBaseTowerResolveTask.access$processLevel(FirTowerResolveTask.kt:53) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirTowerResolveTask.runResolverForExpressionReceiver(FirTowerResolveTask.kt:436) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirTowerResolveTask.runResolverForQualifierReceiver(FirTowerResolveTask.kt:180) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirTowerResolver$enqueueResolutionTasks$1.invokeSuspend(FirTowerResolver.kt:58) + at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerResolveManager.resumeTask(TowerResolveManager.kt:77) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerResolveManager.runTasks(TowerResolveManager.kt:83) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirTowerResolver.runResolver(FirTowerResolver.kt:37) + at org.jetbrains.kotlin.fir.FirCallResolver.resolveCallableReference(FirCallResolver.kt:365) + at org.jetbrains.kotlin.fir.resolve.calls.EagerResolveOfCallableReferences.check(ResolutionStages.kt:402) + at org.jetbrains.kotlin.fir.resolve.calls.ResolutionStageRunner$processCandidate$1.invokeSuspend(ResolutionStageRunner.kt:24) + at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) + at org.jetbrains.kotlin.fir.resolve.calls.ResolutionStageRunner.processCandidate(ResolutionStageRunner.kt:37) + at org.jetbrains.kotlin.fir.resolve.calls.ResolutionStageRunner.processCandidate$default(ResolutionStageRunner.kt:17) + at org.jetbrains.kotlin.fir.resolve.calls.CandidateCollector.consumeCandidate(CandidateCollector.kt:34) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerScopeLevelProcessor.consumeCandidate(TowerLevelHandler.kt:82) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerScopeLevel$TowerScopeLevelProcessor$DefaultImpls.consumeCandidate$default(TowerLevels.kt:54) + at org.jetbrains.kotlin.fir.resolve.calls.tower.ScopeTowerLevel.consumeCallableCandidate(TowerLevels.kt:297) + at org.jetbrains.kotlin.fir.resolve.calls.tower.ScopeTowerLevel.access$consumeCallableCandidate(TowerLevels.kt:218) + at org.jetbrains.kotlin.fir.resolve.calls.tower.ScopeTowerLevel$processFunctionsByName$1.invoke(TowerLevels.kt:317) + at org.jetbrains.kotlin.fir.resolve.calls.tower.ScopeTowerLevel$processFunctionsByName$1.invoke(TowerLevels.kt:310) + at org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope.processFunctionsByName(FirPackageMemberScope.kt:53) + at org.jetbrains.kotlin.fir.resolve.calls.ConstructorProcessingKt.processFunctionsAndConstructorsByName(ConstructorProcessing.kt:73) + at org.jetbrains.kotlin.fir.resolve.calls.tower.ScopeTowerLevel.processFunctionsByName(TowerLevels.kt:310) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerLevelHandler.handleLevel(TowerLevelHandler.kt:53) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirBaseTowerResolveTask.processLevel(FirTowerResolveTask.kt:132) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirBaseTowerResolveTask.access$processLevel(FirTowerResolveTask.kt:53) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirBaseTowerResolveTask$processLevel$3.invokeSuspend(FirTowerResolveTask.kt) + at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerResolveManager.resumeTask(TowerResolveManager.kt:77) + at org.jetbrains.kotlin.fir.resolve.calls.tower.TowerResolveManager.runTasks(TowerResolveManager.kt:83) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirTowerResolver.runResolver(FirTowerResolver.kt:37) + at org.jetbrains.kotlin.fir.resolve.calls.tower.FirTowerResolver.runResolver$default(FirTowerResolver.kt:27) + at org.jetbrains.kotlin.fir.FirCallResolver.collectCandidates(FirCallResolver.kt:184) + at org.jetbrains.kotlin.fir.FirCallResolver.collectCandidates$default(FirCallResolver.kt:160) + at org.jetbrains.kotlin.fir.FirCallResolver.resolveCallAndSelectCandidate(FirCallResolver.kt:86) + at org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirExpressionsResolveTransformer.transformFunctionCall(FirExpressionsResolveTransformer.kt:367) + ... 150 more diff --git a/compiler/testData/diagnostics/tests/delegation/kt49477Error.fir.kt b/compiler/testData/diagnostics/tests/delegation/kt49477Error.fir.kt new file mode 100644 index 00000000000..403866e6034 --- /dev/null +++ b/compiler/testData/diagnostics/tests/delegation/kt49477Error.fir.kt @@ -0,0 +1,36 @@ +// !LANGUAGE: +ForbidRecursiveDelegateExpressions +// WITH_STDLIB + +import kotlin.properties.ReadWriteProperty +import kotlin.reflect.KProperty +import kotlin.reflect.KProperty1 + +inline fun Self.parent( + property: KProperty1>): Delegate = TODO() + +class GitLabBuildProcessor: DatabaseEntity { + var processor by parent(GitLabChangesProcessor::buildProcessors) +} + +interface DatabaseEntity: Entity +interface Entity +interface ResourceFactory +interface ValueFilter + +interface Delegate : ReadWriteProperty, ValueFilter { + infix fun name(desc: KProperty<*>): String +infix fun by(name: String): Delegate +infix fun resource(factory: ResourceFactory): Delegate +infix fun filter(filter: (R, Any?) -> Boolean): Delegate +} + +class GitLabChangesProcessor: DatabaseEntity { + var buildProcessors by child_many( + GitLabBuildProcessor::class.java, + GitLabBuildProcessor::processor + ) +} + +fun Self.child_many( + clazz: Class, property: KProperty1, name: String = property.name +): Delegate> = TODO() // Type checking has run into a recursive problem. Easiest workaround: specify types of your declarations explicitly \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/delegation/kt49477Error.kt b/compiler/testData/diagnostics/tests/delegation/kt49477Error.kt new file mode 100644 index 00000000000..e51ea6d7b9e --- /dev/null +++ b/compiler/testData/diagnostics/tests/delegation/kt49477Error.kt @@ -0,0 +1,36 @@ +// !LANGUAGE: +ForbidRecursiveDelegateExpressions +// WITH_STDLIB + +import kotlin.properties.ReadWriteProperty +import kotlin.reflect.KProperty +import kotlin.reflect.KProperty1 + +inline fun Self.parent( + property: KProperty1>): Delegate = TODO() + +class GitLabBuildProcessor: DatabaseEntity { + var processor by ")!>parent(GitLabChangesProcessor::buildProcessors) +} + +interface DatabaseEntity: Entity +interface Entity +interface ResourceFactory +interface ValueFilter + +interface Delegate : ReadWriteProperty, ValueFilter { + infix fun name(desc: KProperty<*>): String +infix fun by(name: String): Delegate +infix fun resource(factory: ResourceFactory): Delegate +infix fun filter(filter: (R, Any?) -> Boolean): Delegate +} + +class GitLabChangesProcessor: DatabaseEntity { + var buildProcessors by >"), TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM_ERROR!>child_many( + GitLabBuildProcessor::class.java, + GitLabBuildProcessor::processor + ) +} + +fun Self.child_many( + clazz: Class, property: KProperty1, name: String = property.name +): Delegate> = TODO() // Type checking has run into a recursive problem. Easiest workaround: specify types of your declarations explicitly \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/delegation/kt49477Error.txt b/compiler/testData/diagnostics/tests/delegation/kt49477Error.txt new file mode 100644 index 00000000000..a4ac7b78c2d --- /dev/null +++ b/compiler/testData/diagnostics/tests/delegation/kt49477Error.txt @@ -0,0 +1,56 @@ +package + +public fun Self.child_many(/*0*/ clazz: java.lang.Class, /*1*/ property: kotlin.reflect.KProperty1, /*2*/ name: kotlin.String = ...): Delegate> +public inline fun Self.parent(/*0*/ property: kotlin.reflect.KProperty1>): Delegate + +public interface DatabaseEntity : Entity { + 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 interface Delegate : kotlin.properties.ReadWriteProperty, ValueFilter { + public abstract infix fun by(/*0*/ name: kotlin.String): Delegate + public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract infix fun filter(/*0*/ filter: (R, kotlin.Any?) -> kotlin.Boolean): Delegate + public abstract override /*1*/ /*fake_override*/ fun getValue(/*0*/ thisRef: R, /*1*/ property: kotlin.reflect.KProperty<*>): T + public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int + public abstract infix fun name(/*0*/ desc: kotlin.reflect.KProperty<*>): kotlin.String + public abstract infix fun resource(/*0*/ factory: ResourceFactory): Delegate + public abstract override /*1*/ /*fake_override*/ fun setValue(/*0*/ thisRef: R, /*1*/ property: kotlin.reflect.KProperty<*>, /*2*/ value: T): kotlin.Unit + public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface Entity { + 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 GitLabBuildProcessor : DatabaseEntity { + public constructor GitLabBuildProcessor() + public final var processor: GitLabChangesProcessor? + 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 GitLabChangesProcessor : DatabaseEntity { + public constructor GitLabChangesProcessor() + public final var buildProcessors: kotlin.collections.MutableCollection + 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 interface ResourceFactory { + 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 interface ValueFilter { + 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 +} diff --git a/compiler/testData/diagnostics/tests/inference/recursiveCalls/kt23531.kt b/compiler/testData/diagnostics/tests/inference/recursiveCalls/kt23531.kt index 02b0b011eaa..12d5f370ad2 100644 --- a/compiler/testData/diagnostics/tests/inference/recursiveCalls/kt23531.kt +++ b/compiler/testData/diagnostics/tests/inference/recursiveCalls/kt23531.kt @@ -12,7 +12,7 @@ fun insideJob1() = doTheJob1() suspend fun insideJob2() = doTheJob2() suspend fun insideJob3() = doTheJob3() -fun doTheJob0() = simpleAsync0 { insideJob0() } -fun doTheJob1() = simpleAsync1 { insideJob1() } -suspend fun doTheJob2() = simpleAsync2 { insideJob2() } -suspend fun doTheJob3() = simpleAsync3 { insideJob3() } +fun doTheJob0() = simpleAsync0 { insideJob0() } +fun doTheJob1() = simpleAsync1 { insideJob1() } +suspend fun doTheJob2() = simpleAsync2 { insideJob2() } +suspend fun doTheJob3() = simpleAsync3 { insideJob3() } diff --git a/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/localFactorial.kt b/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/localFactorial.kt index 37cc64d26fe..81e181f99a1 100644 --- a/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/localFactorial.kt +++ b/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/localFactorial.kt @@ -3,7 +3,7 @@ fun foo() { fun fact(n: Int) = { if (n > 0) { - fact(n - 1) * n + fact(n - 1) * n } else { 1 diff --git a/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/recursiveFun.kt b/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/recursiveFun.kt index 956c1e7ffaf..9a099374232 100644 --- a/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/recursiveFun.kt +++ b/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/recursiveFun.kt @@ -1,4 +1,4 @@ // FIR_IDE_IGNORE fun foo() { - fun bar() = (fun() = bar()) + fun bar() = (fun() = bar()) } diff --git a/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/recursiveLambda.kt b/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/recursiveLambda.kt index af8ad14babc..56099b7c8e4 100644 --- a/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/recursiveLambda.kt +++ b/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/recursiveLambda.kt @@ -1,6 +1,6 @@ // FIR_IDE_IGNORE fun foo() { fun bar() = { - bar() + bar() } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/selfCall.kt b/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/selfCall.kt index 096dda38711..0d401d069b6 100644 --- a/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/selfCall.kt +++ b/compiler/testData/diagnostics/tests/inference/recursiveLocalFuns/selfCall.kt @@ -1,9 +1,9 @@ // FIR_IDE_IGNORE fun foo() { - fun bar1() = bar1() + fun bar1() = bar1() - fun bar2() = 1 + bar2() - fun bar3() = id(bar3()) + fun bar2() = 1 + bar2() + fun bar3() = id(bar3()) } fun id(x: T) = x diff --git a/compiler/testData/diagnostics/tests/j+k/recursionWithJavaSyntheticProperty.kt b/compiler/testData/diagnostics/tests/j+k/recursionWithJavaSyntheticProperty.kt index 3580249bf80..10664c2a131 100644 --- a/compiler/testData/diagnostics/tests/j+k/recursionWithJavaSyntheticProperty.kt +++ b/compiler/testData/diagnostics/tests/j+k/recursionWithJavaSyntheticProperty.kt @@ -8,5 +8,5 @@ public class X { class A : X() { // TODO: DEBUG_INFO_MISSING_UNRESOLVED indicates a bug here - override fun getFoo() = foo + override fun getFoo() = foo } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/properties/inferenceFromGetters/objectExpression.kt b/compiler/testData/diagnostics/tests/properties/inferenceFromGetters/objectExpression.kt index 4912c8201d2..2a4ea49f03c 100644 --- a/compiler/testData/diagnostics/tests/properties/inferenceFromGetters/objectExpression.kt +++ b/compiler/testData/diagnostics/tests/properties/inferenceFromGetters/objectExpression.kt @@ -6,7 +6,7 @@ object Outer { get() = 0 override fun get(index: Int): Char { - checkSubtype(x) + checkSubtype(x) return ' ' } diff --git a/compiler/testData/diagnostics/tests/properties/inferenceFromGetters/recursiveGetter.kt b/compiler/testData/diagnostics/tests/properties/inferenceFromGetters/recursiveGetter.kt index 3c28e0cee61..09fbb9936a5 100644 --- a/compiler/testData/diagnostics/tests/properties/inferenceFromGetters/recursiveGetter.kt +++ b/compiler/testData/diagnostics/tests/properties/inferenceFromGetters/recursiveGetter.kt @@ -1,16 +1,16 @@ // !CHECK_TYPE // NI_EXPECTED_FILE -val x get() = x +val x get() = x class A { - val y get() = y + val y get() = y val a get() = b - val b get() = a + val b get() = a - val z1 get() = id(z1) - val z2 get() = l(z2) + val z1 get() = id(z1) + val z2 get() = l(z2) val u get() = field } diff --git a/compiler/testData/diagnostics/tests/regressions/Jet81.kt b/compiler/testData/diagnostics/tests/regressions/Jet81.kt index 8692deeaf17..1d4f9c2cd33 100644 --- a/compiler/testData/diagnostics/tests/regressions/Jet81.kt +++ b/compiler/testData/diagnostics/tests/regressions/Jet81.kt @@ -3,7 +3,7 @@ class Test { private val y = object { - val a = y; + val a = y; } val z = y.a; @@ -23,6 +23,6 @@ class Test2 { val y = 1 } - val b = a.x + val b = a.x val c = a.y } diff --git a/compiler/testData/diagnostics/tests/regressions/ea76264.kt b/compiler/testData/diagnostics/tests/regressions/ea76264.kt index b33f1c33d2b..47b401b0af7 100644 --- a/compiler/testData/diagnostics/tests/regressions/ea76264.kt +++ b/compiler/testData/diagnostics/tests/regressions/ea76264.kt @@ -1,4 +1,4 @@ // StackOverflow -val p = ::p +val p = ::p -fun foo() = ::foo +fun foo() = ::foo diff --git a/compiler/testData/diagnostics/tests/regressions/kt328.kt b/compiler/testData/diagnostics/tests/regressions/kt328.kt index 935ebe7670f..3aef64b71fc 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt328.kt +++ b/compiler/testData/diagnostics/tests/regressions/kt328.kt @@ -2,27 +2,27 @@ //KT-328 Local function in function literals cause exceptions fun bar1() = { - bar1() + bar1() } fun bar2() = { - fun foo2() = bar2() + fun foo2() = bar2() } //properties //in a class class A() { - val x = { x } + val x = { x } } //in a package -val x = { x } +val x = { x } //KT-787 AssertionError on code 'val x = x' -val z = z +val z = z //KT-329 Assertion failure on local function fun block(f : () -> Unit) = f() fun bar3() = block{ foo3() // <-- missing closing curly bracket -fun foo3() = block{ bar3() } +fun foo3() = block{ bar3() } diff --git a/compiler/testData/diagnostics/tests/regressions/kt9384.kt b/compiler/testData/diagnostics/tests/regressions/kt9384.kt index f16eb9cbfbd..2806a764dae 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt9384.kt +++ b/compiler/testData/diagnostics/tests/regressions/kt9384.kt @@ -4,7 +4,7 @@ fun main(args: Array) { fun f() = run { private class C { private fun foo() { - f().foo(); + f().foo(); } } diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/kt18292.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/kt18292.kt index 462d1ca178e..2a93b60c16f 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/kt18292.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/kt18292.kt @@ -13,6 +13,6 @@ suspend fun fib(n: Long) = async { when { n < 2 -> n - else -> fib(n - 1).await() + fib(n - 2).await() + else -> fib(n - 1).await() + fib(n - 2).await() } } diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index c959df3529f..3a6602183ff 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -8494,6 +8494,18 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/delegation/kt44843.kt"); } + @Test + @TestMetadata("kt49477.kt") + public void testKt49477() throws Exception { + runTest("compiler/testData/diagnostics/tests/delegation/kt49477.kt"); + } + + @Test + @TestMetadata("kt49477Error.kt") + public void testKt49477Error() throws Exception { + runTest("compiler/testData/diagnostics/tests/delegation/kt49477Error.kt"); + } + @Test @TestMetadata("kt8154.kt") public void testKt8154() throws Exception { diff --git a/compiler/tests-spec/testData/diagnostics/linked/expressions/jump-expressions/return-expressions/p-4/neg/1.1.kt b/compiler/tests-spec/testData/diagnostics/linked/expressions/jump-expressions/return-expressions/p-4/neg/1.1.kt index a26ab73d434..ff87cfc3551 100644 --- a/compiler/tests-spec/testData/diagnostics/linked/expressions/jump-expressions/return-expressions/p-4/neg/1.1.kt +++ b/compiler/tests-spec/testData/diagnostics/linked/expressions/jump-expressions/return-expressions/p-4/neg/1.1.kt @@ -18,5 +18,5 @@ fun case1(a: Boolean) = run { println("d"); r // TESTCASE NUMBER: 2 val case2 -get() = run { println("d"); return true } +get() = run { println("d"); return true } diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index 87a77984615..49af9212317 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -245,6 +245,7 @@ enum class LanguageFeature( YieldIsNoMoreReserved(KOTLIN_1_7), NoDeprecationOnDeprecatedEnumEntries(KOTLIN_1_7), // KT-37975 ProhibitQualifiedAccessToUninitializedEnumEntry(KOTLIN_1_7, kind = BUG_FIX), // KT-41124 + ForbidRecursiveDelegateExpressions(KOTLIN_1_7, kind = BUG_FIX), // 1.8