diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/inheritorsProvider/AbstractSealedInheritorsTest.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/inheritorsProvider/AbstractSealedInheritorsTest.kt index 7b8e9bd57be..1d70b3ec32f 100644 --- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/inheritorsProvider/AbstractSealedInheritorsTest.kt +++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/components/inheritorsProvider/AbstractSealedInheritorsTest.kt @@ -6,6 +6,9 @@ package org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.inheritorsProvider import org.jetbrains.kotlin.analysis.api.impl.base.test.SymbolByFqName +import org.jetbrains.kotlin.analysis.api.renderer.declarations.impl.KtDeclarationRendererForSource +import org.jetbrains.kotlin.analysis.api.renderer.types.impl.KtTypeRendererForSource +import org.jetbrains.kotlin.analysis.api.renderer.types.renderers.KtUsualClassTypeRenderer import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedTest import org.jetbrains.kotlin.psi.KtFile @@ -21,7 +24,30 @@ abstract class AbstractSealedInheritorsTest : AbstractAnalysisApiBasedTest() { ?: error("Expected a single named class to be specified.") classSymbol.getSealedClassInheritors().joinToString("\n\n") { inheritor -> - "${inheritor.classIdIfNonLocal!!}\n${inheritor.render()}" + // Render sealed inheritor supertypes as fully expanded types to avoid discrepancies between Standalone and IDE mode. + // + // Assume the following code is compiled to a library: + // + // ``` + // open class C + // typealias T = C + // class A : T() + // ``` + // + // The supertype of `A` will be different in Standalone and IDE mode: + // + // - Standalone: The compiled library contains fully expanded types, so `A`'s supertype is `C`. + // - IDE: Symbols from libraries are deserialized from stubs, where type aliases are currently not fully expanded, so + // `A`'s supertype is `T`. + // + // We want to render `class A : C()` in both cases, so we need to expand the type alias. + val declarationRenderer = KtDeclarationRendererForSource.WITH_QUALIFIED_NAMES.with { + typeRenderer = KtTypeRendererForSource.WITH_QUALIFIED_NAMES.with { + usualClassTypeRenderer = KtUsualClassTypeRenderer.AS_FULLY_EXPANDED_CLASS_TYPE_WITH_TYPE_ARGUMENTS + } + } + + "${inheritor.classIdIfNonLocal!!}\n${inheritor.render(declarationRenderer)}" } } diff --git a/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedClassTypeAliasedFromDependency.txt b/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedClassTypeAliasedFromDependency.txt index 16828a2798d..8d8200839c3 100644 --- a/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedClassTypeAliasedFromDependency.txt +++ b/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedClassTypeAliasedFromDependency.txt @@ -2,7 +2,7 @@ foo/bar/OneSealedChild class OneSealedChild : foo.bar.MySealedClass() foo/bar/ThreeSealedChild -class ThreeSealedChild : foo.bar.T2() +class ThreeSealedChild : foo.bar.MySealedClass() foo/bar/TwoSealedChild -class TwoSealedChild : foo.bar.T1() +class TwoSealedChild : foo.bar.MySealedClass() diff --git a/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedClassTypeAliasedSameModule.txt b/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedClassTypeAliasedSameModule.txt index 16828a2798d..8d8200839c3 100644 --- a/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedClassTypeAliasedSameModule.txt +++ b/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedClassTypeAliasedSameModule.txt @@ -2,7 +2,7 @@ foo/bar/OneSealedChild class OneSealedChild : foo.bar.MySealedClass() foo/bar/ThreeSealedChild -class ThreeSealedChild : foo.bar.T2() +class ThreeSealedChild : foo.bar.MySealedClass() foo/bar/TwoSealedChild -class TwoSealedChild : foo.bar.T1() +class TwoSealedChild : foo.bar.MySealedClass() diff --git a/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedInterfaceTypeAliasedFromDependency.txt b/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedInterfaceTypeAliasedFromDependency.txt index 9b01fbc099d..3458ee1d46e 100644 --- a/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedInterfaceTypeAliasedFromDependency.txt +++ b/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedInterfaceTypeAliasedFromDependency.txt @@ -2,7 +2,7 @@ foo/bar/OneSealedChild class OneSealedChild : foo.bar.MySealedInterface foo/bar/ThreeSealedChild -class ThreeSealedChild : foo.bar.T2 +class ThreeSealedChild : foo.bar.MySealedInterface foo/bar/TwoSealedChild -class TwoSealedChild : foo.bar.T1 +class TwoSealedChild : foo.bar.MySealedInterface diff --git a/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedInterfaceTypeAliasedSameModule.txt b/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedInterfaceTypeAliasedSameModule.txt index 9b01fbc099d..3458ee1d46e 100644 --- a/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedInterfaceTypeAliasedSameModule.txt +++ b/analysis/analysis-api/testData/components/inheritorsProvider/sealedInheritors/sealedInterfaceTypeAliasedSameModule.txt @@ -2,7 +2,7 @@ foo/bar/OneSealedChild class OneSealedChild : foo.bar.MySealedInterface foo/bar/ThreeSealedChild -class ThreeSealedChild : foo.bar.T2 +class ThreeSealedChild : foo.bar.MySealedInterface foo/bar/TwoSealedChild -class TwoSealedChild : foo.bar.T1 +class TwoSealedChild : foo.bar.MySealedInterface