From 71a4f36faf1ae7ade00c54f2721291629c8b64aa Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Tue, 8 Aug 2023 23:28:20 +0200 Subject: [PATCH] KTIJ-26576 [Analysis API] Add `where` clause to `classHeaderParts` in `FirTowerDataContextAllElementsCollector` In `where` clause there are type constraints, and there are no supertypes scopes at those positions ^KTIJ-26576 Fixed --- ...nalysisSourceModuleReferenceShortenerTestGenerated.java | 6 ++++++ ...nalysisSourceModuleReferenceShortenerTestGenerated.java | 6 ++++++ .../classHeaderPositions/typeBound_whereClause.kt | 7 +++++++ .../classHeaderPositions/typeBound_whereClause.txt | 7 +++++++ .../fir/element/builder/FirTowerDataContextCollector.kt | 1 + 5 files changed, 27 insertions(+) create mode 100644 analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_whereClause.kt create mode 100644 analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_whereClause.txt diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java index f7f6927f00c..c8425d113d6 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/references/FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java @@ -645,6 +645,12 @@ public class FirIdeNormalAnalysisSourceModuleReferenceShortenerTestGenerated ext public void testTypeBound_nested() throws Exception { runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_nested.kt"); } + + @Test + @TestMetadata("typeBound_whereClause.kt") + public void testTypeBound_whereClause() throws Exception { + runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_whereClause.kt"); + } } } } diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java index 9f2977bab28..c83145d6cb6 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/references/FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenerated.java @@ -645,6 +645,12 @@ public class FirStandaloneNormalAnalysisSourceModuleReferenceShortenerTestGenera public void testTypeBound_nested() throws Exception { runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_nested.kt"); } + + @Test + @TestMetadata("typeBound_whereClause.kt") + public void testTypeBound_whereClause() throws Exception { + runTest("analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_whereClause.kt"); + } } } } diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_whereClause.kt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_whereClause.kt new file mode 100644 index 00000000000..a58557382ac --- /dev/null +++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_whereClause.kt @@ -0,0 +1,7 @@ +// FILE: main.kt + +abstract class Outer { + abstract class Nested : Outer() +} + +class Foo : Outer.Nested() where T : Outer.Nested diff --git a/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_whereClause.txt b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_whereClause.txt new file mode 100644 index 00000000000..cea78ad2998 --- /dev/null +++ b/analysis/analysis-api/testData/components/referenceShortener/referenceShortener/nestedClasses/classHeaderPositions/typeBound_whereClause.txt @@ -0,0 +1,7 @@ +Before shortening: Outer.Nested +with DO_NOT_SHORTEN: +with SHORTEN_IF_ALREADY_IMPORTED: +with SHORTEN_AND_IMPORT: +[type] Outer.Nested +with SHORTEN_AND_STAR_IMPORT: +[type] Outer.Nested diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/element/builder/FirTowerDataContextCollector.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/element/builder/FirTowerDataContextCollector.kt index 25ace460d43..83a59282cab 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/element/builder/FirTowerDataContextCollector.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/element/builder/FirTowerDataContextCollector.kt @@ -157,6 +157,7 @@ private fun KtClassOrObject.containsInHeader(element: PsiElement): Boolean { addIfNotNull(getContextReceiverList()) addIfNotNull(modifierList) // for annotations declared on class addIfNotNull(typeParameterList) + addIfNotNull(typeConstraintList) // `where` clause type constraints for (superTypeEntry in superTypeListEntries) { addIfNotNull(superTypeEntry.typeReference)