diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt index 949a578a387..ce11356d80e 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/components/KtFe10CallResolver.kt @@ -154,6 +154,7 @@ internal class KtFe10CallResolver( val parentBinaryExpression = psi.parentOfType() val lhs = KtPsiUtil.deparenthesize(parentBinaryExpression?.left) val unwrappedPsi = KtPsiUtil.deparenthesize(psi as? KtExpression) ?: psi + if (parentBinaryExpression != null && parentBinaryExpression.operationToken == KtTokens.EQ && (lhs == unwrappedPsi || (lhs as? KtQualifiedExpression)?.selectorExpression == unwrappedPsi) && @@ -163,6 +164,11 @@ internal class KtFe10CallResolver( // treated as a property read. return resolveCall(parentBinaryExpression) } + + if (psi is KtCallableReferenceExpression) { + return resolveCall(psi.callableReference) + } + when (unwrappedPsi) { is KtBinaryExpression -> { handleAsCompoundAssignment(this, unwrappedPsi)?.let { return@with it } diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java index 76d87ee2f8e..3961268d36f 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/components/callResolver/Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated.java @@ -1010,6 +1010,130 @@ public class Fe10IdeNormalAnalysisSourceModuleResolveCallTestGenerated extends A } } + @Nested + @TestMetadata("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences") + @TestDataPath("$PROJECT_ROOT") + public class CallableReferences { + @Test + public void testAllFilesPresentInCallableReferences() { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("annotationConstructor.kt") + public void testAnnotationConstructor() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/annotationConstructor.kt"); + } + + @Test + @TestMetadata("boundMemberExtensionFunction.kt") + public void testBoundMemberExtensionFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberExtensionFunction.kt"); + } + + @Test + @TestMetadata("boundMemberFunction.kt") + public void testBoundMemberFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberFunction.kt"); + } + + @Test + @TestMetadata("boundMemberProperty.kt") + public void testBoundMemberProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberProperty.kt"); + } + + @Test + @TestMetadata("boundTopLevelExtensionFunction.kt") + public void testBoundTopLevelExtensionFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionFunction.kt"); + } + + @Test + @TestMetadata("boundTopLevelExtensionProperty.kt") + public void testBoundTopLevelExtensionProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionProperty.kt"); + } + + @Test + @TestMetadata("constructor.kt") + public void testConstructor() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/constructor.kt"); + } + + @Test + @TestMetadata("genericParameterType.kt") + public void testGenericParameterType() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterType.kt"); + } + + @Test + @TestMetadata("genericParameterTypeGenericConsumer.kt") + public void testGenericParameterTypeGenericConsumer() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterTypeGenericConsumer.kt"); + } + + @Test + @TestMetadata("genericReturnType.kt") + public void testGenericReturnType() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnType.kt"); + } + + @Test + @TestMetadata("genericReturnTypeGenericConsumer.kt") + public void testGenericReturnTypeGenericConsumer() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnTypeGenericConsumer.kt"); + } + + @Test + @TestMetadata("memberExtensionProperty.kt") + public void testMemberExtensionProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberExtensionProperty.kt"); + } + + @Test + @TestMetadata("memberFunction.kt") + public void testMemberFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberFunction.kt"); + } + + @Test + @TestMetadata("memberProperty.kt") + public void testMemberProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberProperty.kt"); + } + + @Test + @TestMetadata("simple.kt") + public void testSimple() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/simple.kt"); + } + + @Test + @TestMetadata("topLevelExtensionFunction.kt") + public void testTopLevelExtensionFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionFunction.kt"); + } + + @Test + @TestMetadata("topLevelExtensionProperty.kt") + public void testTopLevelExtensionProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionProperty.kt"); + } + + @Test + @TestMetadata("topLevelFunction.kt") + public void testTopLevelFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelFunction.kt"); + } + + @Test + @TestMetadata("topLevelProperty.kt") + public void testTopLevelProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelProperty.kt"); + } + } + @Nested @TestMetadata("analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode") @TestDataPath("$PROJECT_ROOT") diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt index d063a8e27ef..5094fd67c31 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KtFirCallResolver.kt @@ -554,7 +554,9 @@ internal class KtFirCallResolver( KtSimpleVariableAccess.Write(rhs) ) } - is FirPropertyAccessExpression -> { + is FirPropertyAccessExpression, is FirCallableReferenceAccess -> { + @Suppress("USELESS_IS_CHECK") // K2 warning suppression, TODO: KT-62472 + require(fir is FirQualifiedAccessExpression) when (unsubstitutedKtSignature.symbol) { is KtVariableLikeSymbol -> { @Suppress("UNCHECKED_CAST") // safe because of the above check on targetKtSymbol @@ -999,11 +1001,12 @@ internal class KtFirCallResolver( is FirArrayLiteral, is FirEqualityOperatorCall -> { toKtCallInfo(psi, resolveCalleeExpressionOfFunctionCall, resolveFragmentOfCall).toKtCallCandidateInfos() } - is FirComparisonExpression -> compareToCall.toKtCallInfo( - psi, - resolveCalleeExpressionOfFunctionCall, - resolveFragmentOfCall - ).toKtCallCandidateInfos() + is FirComparisonExpression -> { + compareToCall.toKtCallInfo(psi, resolveCalleeExpressionOfFunctionCall, resolveFragmentOfCall).toKtCallCandidateInfos() + } + is FirCallableReferenceAccess -> { + calleeReference.toKtCallInfo(psi, resolveCalleeExpressionOfFunctionCall, resolveFragmentOfCall).toKtCallCandidateInfos() + } is FirResolvedQualifier -> toKtCallCandidateInfos() is FirDelegatedConstructorCall -> collectCallCandidatesForDelegatedConstructorCall(psi, resolveFragmentOfCall) else -> toKtCallInfo(psi, resolveCalleeExpressionOfFunctionCall, resolveFragmentOfCall).toKtCallCandidateInfos() diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisScriptSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisScriptSourceModuleResolveCallTestGenerated.java index 1e51431a166..ef56998c2a7 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisScriptSourceModuleResolveCallTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisScriptSourceModuleResolveCallTestGenerated.java @@ -56,6 +56,16 @@ public class FirIdeNormalAnalysisScriptSourceModuleResolveCallTestGenerated exte } } + @Nested + @TestMetadata("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences") + @TestDataPath("$PROJECT_ROOT") + public class CallableReferences { + @Test + public void testAllFilesPresentInCallableReferences() { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences"), Pattern.compile("^(.+)\\.kts$"), null, true); + } + } + @Nested @TestMetadata("analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode") @TestDataPath("$PROJECT_ROOT") diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java index dfc560d430c..4082aa71b5f 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/callResolver/FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated.java @@ -1010,6 +1010,130 @@ public class FirIdeNormalAnalysisSourceModuleResolveCallTestGenerated extends Ab } } + @Nested + @TestMetadata("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences") + @TestDataPath("$PROJECT_ROOT") + public class CallableReferences { + @Test + public void testAllFilesPresentInCallableReferences() { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("annotationConstructor.kt") + public void testAnnotationConstructor() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/annotationConstructor.kt"); + } + + @Test + @TestMetadata("boundMemberExtensionFunction.kt") + public void testBoundMemberExtensionFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberExtensionFunction.kt"); + } + + @Test + @TestMetadata("boundMemberFunction.kt") + public void testBoundMemberFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberFunction.kt"); + } + + @Test + @TestMetadata("boundMemberProperty.kt") + public void testBoundMemberProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberProperty.kt"); + } + + @Test + @TestMetadata("boundTopLevelExtensionFunction.kt") + public void testBoundTopLevelExtensionFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionFunction.kt"); + } + + @Test + @TestMetadata("boundTopLevelExtensionProperty.kt") + public void testBoundTopLevelExtensionProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionProperty.kt"); + } + + @Test + @TestMetadata("constructor.kt") + public void testConstructor() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/constructor.kt"); + } + + @Test + @TestMetadata("genericParameterType.kt") + public void testGenericParameterType() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterType.kt"); + } + + @Test + @TestMetadata("genericParameterTypeGenericConsumer.kt") + public void testGenericParameterTypeGenericConsumer() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterTypeGenericConsumer.kt"); + } + + @Test + @TestMetadata("genericReturnType.kt") + public void testGenericReturnType() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnType.kt"); + } + + @Test + @TestMetadata("genericReturnTypeGenericConsumer.kt") + public void testGenericReturnTypeGenericConsumer() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnTypeGenericConsumer.kt"); + } + + @Test + @TestMetadata("memberExtensionProperty.kt") + public void testMemberExtensionProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberExtensionProperty.kt"); + } + + @Test + @TestMetadata("memberFunction.kt") + public void testMemberFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberFunction.kt"); + } + + @Test + @TestMetadata("memberProperty.kt") + public void testMemberProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberProperty.kt"); + } + + @Test + @TestMetadata("simple.kt") + public void testSimple() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/simple.kt"); + } + + @Test + @TestMetadata("topLevelExtensionFunction.kt") + public void testTopLevelExtensionFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionFunction.kt"); + } + + @Test + @TestMetadata("topLevelExtensionProperty.kt") + public void testTopLevelExtensionProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionProperty.kt"); + } + + @Test + @TestMetadata("topLevelFunction.kt") + public void testTopLevelFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelFunction.kt"); + } + + @Test + @TestMetadata("topLevelProperty.kt") + public void testTopLevelProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelProperty.kt"); + } + } + @Nested @TestMetadata("analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode") @TestDataPath("$PROJECT_ROOT") diff --git a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/AbstractKtCallResolver.kt b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/AbstractKtCallResolver.kt index 815cb6342a9..b455ee207fd 100644 --- a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/AbstractKtCallResolver.kt +++ b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/AbstractKtCallResolver.kt @@ -54,6 +54,7 @@ abstract class AbstractKtCallResolver : KtCallResolver() { is KtNameReferenceExpression -> true is KtOperationExpression -> true is KtArrayAccessExpression -> true + is KtCallableReferenceExpression -> true else -> false } diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java index 6573a720629..6057c7a91e1 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/callResolver/FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated.java @@ -1010,6 +1010,130 @@ public class FirStandaloneNormalAnalysisSourceModuleResolveCallTestGenerated ext } } + @Nested + @TestMetadata("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences") + @TestDataPath("$PROJECT_ROOT") + public class CallableReferences { + @Test + public void testAllFilesPresentInCallableReferences() { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences"), Pattern.compile("^(.+)\\.kt$"), null, true, "withTestCompilerPluginEnabled"); + } + + @Test + @TestMetadata("annotationConstructor.kt") + public void testAnnotationConstructor() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/annotationConstructor.kt"); + } + + @Test + @TestMetadata("boundMemberExtensionFunction.kt") + public void testBoundMemberExtensionFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberExtensionFunction.kt"); + } + + @Test + @TestMetadata("boundMemberFunction.kt") + public void testBoundMemberFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberFunction.kt"); + } + + @Test + @TestMetadata("boundMemberProperty.kt") + public void testBoundMemberProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberProperty.kt"); + } + + @Test + @TestMetadata("boundTopLevelExtensionFunction.kt") + public void testBoundTopLevelExtensionFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionFunction.kt"); + } + + @Test + @TestMetadata("boundTopLevelExtensionProperty.kt") + public void testBoundTopLevelExtensionProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionProperty.kt"); + } + + @Test + @TestMetadata("constructor.kt") + public void testConstructor() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/constructor.kt"); + } + + @Test + @TestMetadata("genericParameterType.kt") + public void testGenericParameterType() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterType.kt"); + } + + @Test + @TestMetadata("genericParameterTypeGenericConsumer.kt") + public void testGenericParameterTypeGenericConsumer() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterTypeGenericConsumer.kt"); + } + + @Test + @TestMetadata("genericReturnType.kt") + public void testGenericReturnType() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnType.kt"); + } + + @Test + @TestMetadata("genericReturnTypeGenericConsumer.kt") + public void testGenericReturnTypeGenericConsumer() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnTypeGenericConsumer.kt"); + } + + @Test + @TestMetadata("memberExtensionProperty.kt") + public void testMemberExtensionProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberExtensionProperty.kt"); + } + + @Test + @TestMetadata("memberFunction.kt") + public void testMemberFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberFunction.kt"); + } + + @Test + @TestMetadata("memberProperty.kt") + public void testMemberProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberProperty.kt"); + } + + @Test + @TestMetadata("simple.kt") + public void testSimple() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/simple.kt"); + } + + @Test + @TestMetadata("topLevelExtensionFunction.kt") + public void testTopLevelExtensionFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionFunction.kt"); + } + + @Test + @TestMetadata("topLevelExtensionProperty.kt") + public void testTopLevelExtensionProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionProperty.kt"); + } + + @Test + @TestMetadata("topLevelFunction.kt") + public void testTopLevelFunction() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelFunction.kt"); + } + + @Test + @TestMetadata("topLevelProperty.kt") + public void testTopLevelProperty() { + runTest("analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelProperty.kt"); + } + } + @Nested @TestMetadata("analysis/analysis-api/testData/components/callResolver/resolveCall/invalidCode") @TestDataPath("$PROJECT_ROOT") diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/annotationConstructor.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/annotationConstructor.kt new file mode 100644 index 00000000000..c551f73587d --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/annotationConstructor.kt @@ -0,0 +1,8 @@ +annotation class Anno(val value: String) + +fun test() { + // Annotation class cannot be instantiated + consume(::Anno) +} + +fun consume(f: (String) -> Any) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/annotationConstructor.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/annotationConstructor.txt new file mode 100644 index 00000000000..9ff3ce3291e --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/annotationConstructor.txt @@ -0,0 +1,21 @@ +KtSuccessCallInfo: + call = KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = Anno + symbol = (value: kotlin.String): Anno + valueParameters = [ + KtVariableLikeSignature: + name = value + receiverType = null + returnType = kotlin.String + symbol = value: kotlin.String + callableIdIfNonLocal = null + ] + callableIdIfNonLocal = null + typeArgumentsMapping = {} + argumentMapping = {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberExtensionFunction.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberExtensionFunction.kt new file mode 100644 index 00000000000..10bd522cf9c --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberExtensionFunction.kt @@ -0,0 +1,15 @@ +interface Foo { + fun Bar.foo(a: Int) +} + +interface Bar + +fun test(foo: Foo) { + with(foo) { + // 'foo' is a member and an extension at the same time. + // References to such elements are prohibited. + consume(Bar::foo) + } +} + +fun consume(f: (Bar, Int) -> Unit) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberExtensionFunction.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberExtensionFunction.txt new file mode 100644 index 00000000000..35f05ed6a4b --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberExtensionFunction.txt @@ -0,0 +1,30 @@ +KtSuccessCallInfo: + call = KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = KtImplicitReceiverValue: + symbol = KtReceiverParameterSymbol: + annotationsList: [] + origin: SOURCE + owningCallableSymbol: KtAnonymousFunctionSymbol(/) + type: KtUsualClassType: + annotationsList: [] + ownTypeArguments: [] + type: Foo + type = Foo + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = Bar + returnType = kotlin.Unit + symbol = /Foo.foo(: Bar, : Foo, a: kotlin.Int): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = a + receiverType = null + returnType = kotlin.Int + symbol = a: kotlin.Int + callableIdIfNonLocal = null + ] + callableIdIfNonLocal = /Foo.foo + typeArgumentsMapping = {} + argumentMapping = {} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberFunction.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberFunction.kt new file mode 100644 index 00000000000..a0576c40ba5 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberFunction.kt @@ -0,0 +1,9 @@ +interface Foo { + fun foo(a: Int) +} + +fun test(obj: Foo) { + consume(obj::foo) +} + +fun consume(f: (Int) -> Unit) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberFunction.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberFunction.txt new file mode 100644 index 00000000000..40336c29768 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberFunction.txt @@ -0,0 +1,24 @@ +KtSuccessCallInfo: + call = KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = KtExplicitReceiverValue: + expression = obj + isSafeNavigation = false + type = Foo + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /Foo.foo(: Foo, a: kotlin.Int): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = a + receiverType = null + returnType = kotlin.Int + symbol = a: kotlin.Int + callableIdIfNonLocal = null + ] + callableIdIfNonLocal = /Foo.foo + typeArgumentsMapping = {} + argumentMapping = {} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberProperty.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberProperty.kt new file mode 100644 index 00000000000..8c9ccba67fc --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberProperty.kt @@ -0,0 +1,10 @@ +class Foo { + val foo: String + get() = "" +} + +fun test(obj: Foo) { + consume(obj::foo) +} + +fun consume(f: () -> String) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberProperty.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberProperty.txt new file mode 100644 index 00000000000..f320cc729a6 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundMemberProperty.txt @@ -0,0 +1,17 @@ +KtSuccessCallInfo: + call = KtSimpleVariableAccessCall: + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = KtExplicitReceiverValue: + expression = obj + isSafeNavigation = false + type = Foo + extensionReceiver = null + signature = KtVariableLikeSignature: + name = foo + receiverType = null + returnType = kotlin.String + symbol = val foo: kotlin.String + callableIdIfNonLocal = /Foo.foo + simpleAccess = Read: + + typeArgumentsMapping = {} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionFunction.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionFunction.kt new file mode 100644 index 00000000000..3039ab02ac4 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionFunction.kt @@ -0,0 +1,9 @@ +interface Foo + +fun Foo.foo(a: Int) {} + +fun test(obj: Foo) { + consume(obj::foo) +} + +fun consume(f: (Int) -> Unit) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionFunction.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionFunction.txt new file mode 100644 index 00000000000..3dc7e40c072 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionFunction.txt @@ -0,0 +1,24 @@ +KtSuccessCallInfo: + call = KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = KtExplicitReceiverValue: + expression = obj + isSafeNavigation = false + type = Foo + signature = KtFunctionLikeSignature: + receiverType = Foo + returnType = kotlin.Unit + symbol = /foo(: Foo, a: kotlin.Int): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = a + receiverType = null + returnType = kotlin.Int + symbol = a: kotlin.Int + callableIdIfNonLocal = null + ] + callableIdIfNonLocal = /foo + typeArgumentsMapping = {} + argumentMapping = {} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionProperty.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionProperty.kt new file mode 100644 index 00000000000..ae024667114 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionProperty.kt @@ -0,0 +1,10 @@ +interface Foo + +val Foo.foo: String + get() = "" + +fun test(obj: Foo) { + consume(obj::foo) +} + +fun consume(f: () -> String) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionProperty.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionProperty.txt new file mode 100644 index 00000000000..aac012c24ce --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/boundTopLevelExtensionProperty.txt @@ -0,0 +1,17 @@ +KtSuccessCallInfo: + call = KtSimpleVariableAccessCall: + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = KtExplicitReceiverValue: + expression = obj + isSafeNavigation = false + type = Foo + signature = KtVariableLikeSignature: + name = foo + receiverType = Foo + returnType = kotlin.String + symbol = val foo: kotlin.String + callableIdIfNonLocal = /foo + simpleAccess = Read: + + typeArgumentsMapping = {} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/constructor.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/constructor.kt new file mode 100644 index 00000000000..447544908be --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/constructor.kt @@ -0,0 +1,7 @@ +class Foo(val value: String) + +fun test() { + consume(::Foo) +} + +fun consume(f: (String) -> Foo) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/constructor.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/constructor.txt new file mode 100644 index 00000000000..83d809e4bf7 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/constructor.txt @@ -0,0 +1,21 @@ +KtSuccessCallInfo: + call = KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = Foo + symbol = (value: kotlin.String): Foo + valueParameters = [ + KtVariableLikeSignature: + name = value + receiverType = null + returnType = kotlin.String + symbol = value: kotlin.String + callableIdIfNonLocal = null + ] + callableIdIfNonLocal = null + typeArgumentsMapping = {} + argumentMapping = {} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterType.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterType.kt new file mode 100644 index 00000000000..4e8fc190dd0 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterType.kt @@ -0,0 +1,9 @@ +interface Foo { + fun foo(value: T) +} + +fun test() { + consume(Foo::foo) +} + +fun consume(f: (Foo, Int) -> Unit) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterType.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterType.txt new file mode 100644 index 00000000000..396fa4de3d1 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterType.txt @@ -0,0 +1,21 @@ +KtSuccessCallInfo: + call = KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /Foo.foo(: Foo, value: T): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = value + receiverType = null + returnType = kotlin.Int + symbol = value: T + callableIdIfNonLocal = null + ] + callableIdIfNonLocal = /Foo.foo + typeArgumentsMapping = {} + argumentMapping = {} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterTypeGenericConsumer.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterTypeGenericConsumer.kt new file mode 100644 index 00000000000..e60c187b710 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterTypeGenericConsumer.kt @@ -0,0 +1,9 @@ +interface Foo { + fun foo(value: T) +} + +fun test() { + consume(Foo::foo) +} + +fun consume(f: (Foo, T) -> Unit) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterTypeGenericConsumer.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterTypeGenericConsumer.txt new file mode 100644 index 00000000000..396fa4de3d1 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericParameterTypeGenericConsumer.txt @@ -0,0 +1,21 @@ +KtSuccessCallInfo: + call = KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /Foo.foo(: Foo, value: T): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = value + receiverType = null + returnType = kotlin.Int + symbol = value: T + callableIdIfNonLocal = null + ] + callableIdIfNonLocal = /Foo.foo + typeArgumentsMapping = {} + argumentMapping = {} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnType.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnType.kt new file mode 100644 index 00000000000..50b0cb38397 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnType.kt @@ -0,0 +1,9 @@ +interface Foo { + fun foo(): T +} + +fun test() { + consume(Foo::foo) +} + +fun consume(f: (Foo) -> Int) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnType.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnType.txt new file mode 100644 index 00000000000..76fea4aaaf4 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnType.txt @@ -0,0 +1,14 @@ +KtSuccessCallInfo: + call = KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Int + symbol = /Foo.foo(: Foo): T + valueParameters = [] + callableIdIfNonLocal = /Foo.foo + typeArgumentsMapping = {} + argumentMapping = {} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnTypeGenericConsumer.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnTypeGenericConsumer.kt new file mode 100644 index 00000000000..1c43dacd4a7 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnTypeGenericConsumer.kt @@ -0,0 +1,9 @@ +interface Foo { + fun foo(): T +} + +fun test() { + consume(Foo::foo) +} + +fun consume(f: (Foo) -> T) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnTypeGenericConsumer.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnTypeGenericConsumer.txt new file mode 100644 index 00000000000..76fea4aaaf4 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/genericReturnTypeGenericConsumer.txt @@ -0,0 +1,14 @@ +KtSuccessCallInfo: + call = KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Int + symbol = /Foo.foo(: Foo): T + valueParameters = [] + callableIdIfNonLocal = /Foo.foo + typeArgumentsMapping = {} + argumentMapping = {} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberExtensionProperty.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberExtensionProperty.kt new file mode 100644 index 00000000000..f53b92f699f --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberExtensionProperty.kt @@ -0,0 +1,16 @@ +interface Foo { + val Bar.foo: String + get() = "" +} + +interface Bar + +fun test(foo: Foo) { + with(foo) { + // 'foo' is a member and an extension at the same time. + // References to such elements are prohibited. + consume(Bar::foo) + } +} + +fun consume(f: (Bar) -> String) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberExtensionProperty.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberExtensionProperty.txt new file mode 100644 index 00000000000..ee0f2aa0eea --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberExtensionProperty.txt @@ -0,0 +1,23 @@ +KtSuccessCallInfo: + call = KtSimpleVariableAccessCall: + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = KtImplicitReceiverValue: + symbol = KtReceiverParameterSymbol: + annotationsList: [] + origin: SOURCE + owningCallableSymbol: KtAnonymousFunctionSymbol(/) + type: KtUsualClassType: + annotationsList: [] + ownTypeArguments: [] + type: Foo + type = Foo + extensionReceiver = null + signature = KtVariableLikeSignature: + name = foo + receiverType = Bar + returnType = kotlin.String + symbol = val foo: kotlin.String + callableIdIfNonLocal = /Foo.foo + simpleAccess = Read: + + typeArgumentsMapping = {} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberFunction.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberFunction.kt new file mode 100644 index 00000000000..277d352db2c --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberFunction.kt @@ -0,0 +1,9 @@ +interface Foo { + fun foo(a: Int) +} + +fun test() { + consume(Foo::foo) +} + +fun consume(f: (Foo, Int) -> Unit) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberFunction.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberFunction.txt new file mode 100644 index 00000000000..b57ffb94e65 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberFunction.txt @@ -0,0 +1,21 @@ +KtSuccessCallInfo: + call = KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /Foo.foo(: Foo, a: kotlin.Int): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = a + receiverType = null + returnType = kotlin.Int + symbol = a: kotlin.Int + callableIdIfNonLocal = null + ] + callableIdIfNonLocal = /Foo.foo + typeArgumentsMapping = {} + argumentMapping = {} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberProperty.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberProperty.kt new file mode 100644 index 00000000000..8e72d869b3b --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberProperty.kt @@ -0,0 +1,10 @@ +class Foo { + val foo: String + get() = "" +} + +fun test() { + consume(Foo::foo) +} + +fun consume(f: (Foo) -> String) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberProperty.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberProperty.txt new file mode 100644 index 00000000000..18d8111514f --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/memberProperty.txt @@ -0,0 +1,14 @@ +KtSuccessCallInfo: + call = KtSimpleVariableAccessCall: + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtVariableLikeSignature: + name = foo + receiverType = null + returnType = kotlin.String + symbol = val foo: kotlin.String + callableIdIfNonLocal = /Foo.foo + simpleAccess = Read: + + typeArgumentsMapping = {} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/simple.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/simple.kt new file mode 100644 index 00000000000..c9bcb9672eb --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/simple.kt @@ -0,0 +1,3 @@ +fun foo() { + ::foo +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/simple.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/simple.txt new file mode 100644 index 00000000000..4b9e67cd38f --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/simple.txt @@ -0,0 +1,14 @@ +KtSuccessCallInfo: + call = KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /foo(): kotlin.Unit + valueParameters = [] + callableIdIfNonLocal = /foo + typeArgumentsMapping = {} + argumentMapping = {} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionFunction.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionFunction.kt new file mode 100644 index 00000000000..33883836cc7 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionFunction.kt @@ -0,0 +1,9 @@ +interface Foo + +fun Foo.foo(a: Int) {} + +fun test(foo: Foo) { + consume(Foo::foo) +} + +fun consume(f: (Foo, Int) -> Unit) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionFunction.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionFunction.txt new file mode 100644 index 00000000000..e527a425446 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionFunction.txt @@ -0,0 +1,21 @@ +KtSuccessCallInfo: + call = KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = Foo + returnType = kotlin.Unit + symbol = /foo(: Foo, a: kotlin.Int): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = a + receiverType = null + returnType = kotlin.Int + symbol = a: kotlin.Int + callableIdIfNonLocal = null + ] + callableIdIfNonLocal = /foo + typeArgumentsMapping = {} + argumentMapping = {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionProperty.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionProperty.kt new file mode 100644 index 00000000000..f69756844e8 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionProperty.kt @@ -0,0 +1,10 @@ +interface Foo + +val Foo.foo: String + get() = "" + +fun test() { + consume(Foo::foo) +} + +fun consume(f: (Foo) -> String) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionProperty.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionProperty.txt new file mode 100644 index 00000000000..98a401dee46 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelExtensionProperty.txt @@ -0,0 +1,14 @@ +KtSuccessCallInfo: + call = KtSimpleVariableAccessCall: + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtVariableLikeSignature: + name = foo + receiverType = Foo + returnType = kotlin.String + symbol = val foo: kotlin.String + callableIdIfNonLocal = /foo + simpleAccess = Read: + + typeArgumentsMapping = {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelFunction.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelFunction.kt new file mode 100644 index 00000000000..3bbffd247ba --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelFunction.kt @@ -0,0 +1,7 @@ +fun foo(a: Int) {} + +fun test() { + consume(::foo) +} + +fun consume(f: (Int) -> Unit) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelFunction.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelFunction.txt new file mode 100644 index 00000000000..cb6fe8d1220 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelFunction.txt @@ -0,0 +1,21 @@ +KtSuccessCallInfo: + call = KtSimpleFunctionCall: + isImplicitInvoke = false + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtFunctionLikeSignature: + receiverType = null + returnType = kotlin.Unit + symbol = /foo(a: kotlin.Int): kotlin.Unit + valueParameters = [ + KtVariableLikeSignature: + name = a + receiverType = null + returnType = kotlin.Int + symbol = a: kotlin.Int + callableIdIfNonLocal = null + ] + callableIdIfNonLocal = /foo + typeArgumentsMapping = {} + argumentMapping = {} diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelProperty.kt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelProperty.kt new file mode 100644 index 00000000000..80e26589a1b --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelProperty.kt @@ -0,0 +1,8 @@ +val foo: String + get() = "" + +fun test(foo: Foo) { + consume(::foo) +} + +fun consume(f: () -> String) {} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelProperty.txt b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelProperty.txt new file mode 100644 index 00000000000..df538974166 --- /dev/null +++ b/analysis/analysis-api/testData/components/callResolver/resolveCall/callableReferences/topLevelProperty.txt @@ -0,0 +1,14 @@ +KtSuccessCallInfo: + call = KtSimpleVariableAccessCall: + partiallyAppliedSymbol = KtPartiallyAppliedSymbol: + dispatchReceiver = null + extensionReceiver = null + signature = KtVariableLikeSignature: + name = foo + receiverType = null + returnType = kotlin.String + symbol = val foo: kotlin.String + callableIdIfNonLocal = /foo + simpleAccess = Read: + + typeArgumentsMapping = {}