From d865a44c9403fc9f1b3392cdd32236a26cb0d396 Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Thu, 9 Nov 2023 11:10:13 +0100 Subject: [PATCH] KT-61890 [AA] Add test for `ContextCollector` at loop variable position This turns out to be important for conflict resolution in postfix completion in K2 IDE (see `KotlinDeclarationNameValidator`) --- ...eScopeContextForPositionTestGenerated.java | 6 + ...eScopeContextForPositionTestGenerated.java | 6 + .../forLoopVariable.kt | 5 + .../forLoopVariable.pretty.txt | 55 +++++++ .../forLoopVariable.txt | 152 ++++++++++++++++++ .../contextCollector/forLoopVariable.kt | 5 + .../contextCollector/forLoopVariable.txt | 42 +++++ .../ContextCollectorSourceTestGenerated.java | 6 + 8 files changed, 277 insertions(+) create mode 100644 analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.kt create mode 100644 analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.pretty.txt create mode 100644 analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.txt create mode 100644 analysis/low-level-api-fir/testData/contextCollector/forLoopVariable.kt create mode 100644 analysis/low-level-api-fir/testData/contextCollector/forLoopVariable.txt diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/scopeProvider/FirIdeDependentAnalysisSourceModuleScopeContextForPositionTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/scopeProvider/FirIdeDependentAnalysisSourceModuleScopeContextForPositionTestGenerated.java index d90c21b81e2..d073cf6df2b 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/scopeProvider/FirIdeDependentAnalysisSourceModuleScopeContextForPositionTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/scopeProvider/FirIdeDependentAnalysisSourceModuleScopeContextForPositionTestGenerated.java @@ -100,6 +100,12 @@ public class FirIdeDependentAnalysisSourceModuleScopeContextForPositionTestGener runTest("analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/errorType.kt"); } + @Test + @TestMetadata("forLoopVariable.kt") + public void testForLoopVariable() throws Exception { + runTest("analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.kt"); + } + @Test @TestMetadata("kDocOnClass.kt") public void testKDocOnClass() throws Exception { diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/scopeProvider/FirIdeNormalAnalysisSourceModuleScopeContextForPositionTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/scopeProvider/FirIdeNormalAnalysisSourceModuleScopeContextForPositionTestGenerated.java index 0375c11f6f3..23760a9c6d1 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/scopeProvider/FirIdeNormalAnalysisSourceModuleScopeContextForPositionTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/scopeProvider/FirIdeNormalAnalysisSourceModuleScopeContextForPositionTestGenerated.java @@ -100,6 +100,12 @@ public class FirIdeNormalAnalysisSourceModuleScopeContextForPositionTestGenerate runTest("analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/errorType.kt"); } + @Test + @TestMetadata("forLoopVariable.kt") + public void testForLoopVariable() throws Exception { + runTest("analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.kt"); + } + @Test @TestMetadata("kDocOnClass.kt") public void testKDocOnClass() throws Exception { diff --git a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.kt b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.kt new file mode 100644 index 00000000000..7c705d7ebd8 --- /dev/null +++ b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.kt @@ -0,0 +1,5 @@ +package test + +fun usage(list: List) { + for (loopVar in list) {} +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.pretty.txt b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.pretty.txt new file mode 100644 index 00000000000..4b5479910be --- /dev/null +++ b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.pretty.txt @@ -0,0 +1,55 @@ +element: loopVar +implicit receivers: +scopes: + LocalScope, index = 0 + packages: 0 + classifiers: 0 + callables: 0 + constructors: 0 + + LocalScope, index = 1 + packages: 0 + classifiers: 0 + callables: 1 + val ``: kotlin.collections.Iterator + constructors: 0 + + LocalScope, index = 2 + packages: 0 + classifiers: 0 + callables: 0 + constructors: 0 + + LocalScope, index = 3 + packages: 0 + classifiers: 0 + callables: 1 + list: kotlin.collections.List + constructors: 0 + + ExplicitSimpleImportingScope, index = 4 + packages: 0 + classifiers: 0 + callables: 0 + constructors: 0 + + PackageMemberScope, index = 5 + packages: 0 + classifiers: 0 + callables: 1 + fun usage(list: kotlin.collections.List) + constructors: 0 + + DefaultSimpleImportingScope, index = 6 + + DefaultSimpleImportingScope, index = 7 + + ExplicitStarImportingScope, index = 8 + packages: 0 + classifiers: 0 + callables: 0 + constructors: 0 + + DefaultSimpleImportingScope, index = 9 + + DefaultStarImportingScope, index = 10 diff --git a/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.txt b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.txt new file mode 100644 index 00000000000..55f82a81c89 --- /dev/null +++ b/analysis/analysis-api/testData/components/scopeProvider/scopeContextForPosition/forLoopVariable.txt @@ -0,0 +1,152 @@ +element: loopVar +implicit receivers: +scopes: + LocalScope, index = 0 + packages: 0 + classifiers: 0 + callables: 0 + constructors: 0 + + LocalScope, index = 1 + packages: 0 + classifiers: 0 + callables: 1 + KtLocalVariableSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + isExtension: false + isVal: true + name: + origin: SOURCE + receiverParameter: null + returnType: KtUsualClassType: + annotationsList: [] + ownTypeArguments: [ + KtUsualClassType: + annotationsList: [] + ownTypeArguments: [] + type: kotlin/Int + ] + type: kotlin/collections/Iterator + symbolKind: LOCAL + typeParameters: [] + constructors: 0 + + LocalScope, index = 2 + packages: 0 + classifiers: 0 + callables: 0 + constructors: 0 + + LocalScope, index = 3 + packages: 0 + classifiers: 0 + callables: 1 + KtValueParameterSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + generatedPrimaryConstructorProperty: null + hasDefaultValue: false + isCrossinline: false + isExtension: false + isImplicitLambdaParameter: false + isNoinline: false + isVararg: false + name: list + origin: SOURCE + receiverParameter: null + returnType: KtUsualClassType: + annotationsList: [] + ownTypeArguments: [ + KtUsualClassType: + annotationsList: [] + ownTypeArguments: [] + type: kotlin/Int + ] + type: kotlin/collections/List + symbolKind: LOCAL + typeParameters: [] + constructors: 0 + + ExplicitSimpleImportingScope, index = 4 + packages: 0 + classifiers: 0 + callables: 0 + constructors: 0 + + PackageMemberScope, index = 5 + packages: 0 + classifiers: 0 + callables: 1 + KtFunctionSymbol: + annotationsList: [] + callableIdIfNonLocal: test/usage + contextReceivers: [] + contractEffects: [] + hasStableParameterNames: true + isActual: false + isBuiltinFunctionInvoke: false + isExpect: false + isExtension: false + isExternal: false + isInfix: false + isInline: false + isOperator: false + isOverride: false + isStatic: false + isSuspend: false + modality: FINAL + name: usage + origin: SOURCE + receiverParameter: null + returnType: KtUsualClassType: + annotationsList: [] + ownTypeArguments: [] + type: kotlin/Unit + symbolKind: TOP_LEVEL + typeParameters: [] + valueParameters: [ + KtValueParameterSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + generatedPrimaryConstructorProperty: null + hasDefaultValue: false + isCrossinline: false + isExtension: false + isImplicitLambdaParameter: false + isNoinline: false + isVararg: false + name: list + origin: SOURCE + receiverParameter: null + returnType: KtUsualClassType: + annotationsList: [] + ownTypeArguments: [ + KtUsualClassType: + annotationsList: [] + ownTypeArguments: [] + type: kotlin/Int + ] + type: kotlin/collections/List + symbolKind: LOCAL + typeParameters: [] + ] + visibility: Public + constructors: 0 + + DefaultSimpleImportingScope, index = 6 + + DefaultSimpleImportingScope, index = 7 + + ExplicitStarImportingScope, index = 8 + packages: 0 + classifiers: 0 + callables: 0 + constructors: 0 + + DefaultSimpleImportingScope, index = 9 + + DefaultStarImportingScope, index = 10 diff --git a/analysis/low-level-api-fir/testData/contextCollector/forLoopVariable.kt b/analysis/low-level-api-fir/testData/contextCollector/forLoopVariable.kt new file mode 100644 index 00000000000..7c705d7ebd8 --- /dev/null +++ b/analysis/low-level-api-fir/testData/contextCollector/forLoopVariable.kt @@ -0,0 +1,5 @@ +package test + +fun usage(list: List) { + for (loopVar in list) {} +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/testData/contextCollector/forLoopVariable.txt b/analysis/low-level-api-fir/testData/contextCollector/forLoopVariable.txt new file mode 100644 index 00000000000..4ed7896e6ab --- /dev/null +++ b/analysis/low-level-api-fir/testData/contextCollector/forLoopVariable.txt @@ -0,0 +1,42 @@ +Tower Data Context: + Element 0 + Scope: FirDefaultStarImportingScope + Element 1 + Scope: FirDefaultSimpleImportingScope + Element 2 + Scope: FirExplicitStarImportingScope + Element 3 + Scope: FirDefaultSimpleImportingScope + Element 4 + Scope: FirDefaultSimpleImportingScope + Element 5 + Scope: FirPackageMemberScope + Element 6 + Scope: FirExplicitSimpleImportingScope + Element 7 + Scope: FirLocalScope + Properties: + FirValueParameterSymbol list: R|kotlin/collections/List| + Element 8 + Scope: FirLocalScope + Element 9 + Scope: FirLocalScope + Properties: + FirPropertySymbol lval : R|kotlin/collections/Iterator| + Element 10 + Scope: FirLocalScope + +FILE: [ResolvedTo(IMPORTS)] forLoopVariable.kt + public final [ResolvedTo(BODY_RESOLVE)] fun usage([ResolvedTo(BODY_RESOLVE)] list: R|kotlin/collections/List|): R|kotlin/Unit| { + { + [ResolvedTo(BODY_RESOLVE)] lval : R|kotlin/collections/Iterator| = R|/list|.R|SubstitutionOverride|>|() + while(R|/|.R|SubstitutionOverride|()) { + [ResolvedTo(BODY_RESOLVE)] lval loopVar: R|kotlin/Int| = R|/|.R|SubstitutionOverride|() + { + } + + } + + } + + } diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ContextCollectorSourceTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ContextCollectorSourceTestGenerated.java index ae912b435fe..d221b85be83 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ContextCollectorSourceTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/ContextCollectorSourceTestGenerated.java @@ -60,6 +60,12 @@ public class ContextCollectorSourceTestGenerated extends AbstractContextCollecto runTest("analysis/low-level-api-fir/testData/contextCollector/file.kt"); } + @Test + @TestMetadata("forLoopVariable.kt") + public void testForLoopVariable() throws Exception { + runTest("analysis/low-level-api-fir/testData/contextCollector/forLoopVariable.kt"); + } + @Test @TestMetadata("innerClasses.kt") public void testInnerClasses() throws Exception {