From 51f1e31cce97e5464b78cadaa9fbfd1b23d6a301 Mon Sep 17 00:00:00 2001 From: Marco Pennekamp Date: Tue, 9 Jan 2024 01:15:32 +0100 Subject: [PATCH] [AA] Support sealed class inheritors in dangling file tests - In dangling file tests, the project structure's main module is a non-dangling file module. Sealed class inheritors are registered for that module. However, later when sealed class inheritors are requested, the FIR class has a dangling file module as its `KtModule`, which isn't known by the inheritors provider. We need to take the sealed inheritors of the context module instead. --- ...LLFirSealedClassInheritorsProcessorFactoryForTests.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/services/LLFirSealedClassInheritorsProcessorFactoryForTests.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/services/LLFirSealedClassInheritorsProcessorFactoryForTests.kt index c25d8bca0d9..31a135a74f9 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/services/LLFirSealedClassInheritorsProcessorFactoryForTests.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/services/LLFirSealedClassInheritorsProcessorFactoryForTests.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.services import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.FirSealedClassInheritorsProcessorFactory import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.llFirModuleData +import org.jetbrains.kotlin.analysis.project.structure.KtDanglingFileModule import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.fir.declarations.FirRegularClass import org.jetbrains.kotlin.fir.declarations.SealedClassInheritorsProvider @@ -33,8 +34,12 @@ private class SealedClassInheritorsProviderForTests( @OptIn(SealedClassInheritorsProviderInternals::class) override fun getSealedClassInheritors(firClass: FirRegularClass): List { val ktModule = firClass.llFirModuleData.ktModule - val inheritorsForModuleMap = inheritorsByModule.getValue(ktModule) + val relevantModule = when (ktModule) { + is KtDanglingFileModule -> ktModule.contextModule + else -> ktModule + } + + val inheritorsForModuleMap = inheritorsByModule.getValue(relevantModule) return inheritorsForModuleMap[firClass.classId] ?: firClass.sealedInheritorsAttr?.value ?: emptyList() } - }