From 47c9618b79ae501592ad6f9637c1ca736760fb6f Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Thu, 3 Nov 2022 12:06:45 +0100 Subject: [PATCH] [AA K2] implement symbol pointers for type aliases ^KT-54311 --- ...sSourceModuleSymbolByPsiTestGenerated.java | 6 + .../api/fir/symbols/KtFirTypeAliasSymbol.kt | 21 +- .../KtFirMemberTypeAliasSymbolPointer.kt | 28 ++ .../KtFirTopLevelTypeAliasSymbolPointer.kt | 21 ++ ...sSourceModuleSymbolByPsiTestGenerated.java | 6 + ...sSourceModuleSymbolByPsiTestGenerated.java | 6 + .../outerAndInnerTypeAlias.descriptors.txt | 259 ++++++++++++++++++ .../symbolByPsi/outerAndInnerTypeAlias.kt | 24 ++ .../outerAndInnerTypeAlias.pretty.txt | 9 + .../symbolByPsi/outerAndInnerTypeAlias.txt | 259 ++++++++++++++++++ 10 files changed, 634 insertions(+), 5 deletions(-) create mode 100644 analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirMemberTypeAliasSymbolPointer.kt create mode 100644 analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirTopLevelTypeAliasSymbolPointer.kt create mode 100644 analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.descriptors.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.kt create mode 100644 analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.pretty.txt create mode 100644 analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.txt diff --git a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java index d7c783da0df..2ce1c4d4ff5 100644 --- a/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java +++ b/analysis/analysis-api-fe10/tests-gen/org/jetbrains/kotlin/analysis/api/fe10/test/cases/generated/cases/symbols/Fe10IdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java @@ -220,6 +220,12 @@ public class Fe10IdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated extends A runTest("analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerClasses.kt"); } + @Test + @TestMetadata("outerAndInnerTypeAlias.kt") + public void testOuterAndInnerTypeAlias() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.kt"); + } + @Test @TestMetadata("topLevelFunctions.kt") public void testTopLevelFunctions() throws Exception { diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeAliasSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeAliasSymbol.kt index 54d809bbc72..77181683b0a 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeAliasSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirTypeAliasSymbol.kt @@ -10,18 +10,22 @@ import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder import org.jetbrains.kotlin.analysis.api.fir.annotations.KtFirAnnotationListForDeclaration import org.jetbrains.kotlin.analysis.api.fir.findPsi +import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirMemberTypeAliasSymbolPointer +import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirTopLevelTypeAliasSymbolPointer +import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.requireOwnerPointer import org.jetbrains.kotlin.analysis.api.fir.utils.cached +import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken +import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion import org.jetbrains.kotlin.analysis.api.symbols.KtTypeAliasSymbol +import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind +import org.jetbrains.kotlin.analysis.api.symbols.pointers.CanNotCreateSymbolPointerForLocalLibraryDeclarationException import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtPsiBasedSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer -import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken +import org.jetbrains.kotlin.analysis.api.symbols.pointers.UnsupportedSymbolKind import org.jetbrains.kotlin.analysis.api.types.KtType -import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion -import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.declarations.utils.isLocal import org.jetbrains.kotlin.fir.declarations.utils.visibility import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol import org.jetbrains.kotlin.name.ClassId @@ -58,7 +62,14 @@ internal class KtFirTypeAliasSymbol( override fun createPointer(): KtSymbolPointer = withValidityAssertion { KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it } - TODO("Creating symbols for library typealiases is not supported yet") + when (val symbolKind = symbolKind) { + KtSymbolKind.LOCAL -> + throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(classIdIfNonLocal?.asString() ?: name.asString()) + + KtSymbolKind.CLASS_MEMBER -> KtFirMemberTypeAliasSymbolPointer(requireOwnerPointer(), name) + KtSymbolKind.TOP_LEVEL -> KtFirTopLevelTypeAliasSymbolPointer(classIdIfNonLocal!!) + else -> throw UnsupportedSymbolKind(this::class, symbolKind) + } } override fun equals(other: Any?): Boolean = symbolEquals(other) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirMemberTypeAliasSymbolPointer.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirMemberTypeAliasSymbolPointer.kt new file mode 100644 index 00000000000..76ac89fbe60 --- /dev/null +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirMemberTypeAliasSymbolPointer.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.analysis.api.fir.symbols.pointers + +import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession +import org.jetbrains.kotlin.analysis.api.symbols.KtTypeAliasSymbol +import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithMembers +import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.scopes.FirScope +import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol +import org.jetbrains.kotlin.name.Name + +internal class KtFirMemberTypeAliasSymbolPointer( + ownerPointer: KtSymbolPointer, + private val name: Name, +) : KtFirMemberSymbolPointer(ownerPointer) { + override fun KtFirAnalysisSession.chooseCandidateAndCreateSymbol( + candidates: FirScope, + firSession: FirSession + ): KtTypeAliasSymbol? { + val result = candidates.findClassifier(name) ?: return null + return firSymbolBuilder.classifierBuilder.buildTypeAliasSymbol(result) + } +} diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirTopLevelTypeAliasSymbolPointer.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirTopLevelTypeAliasSymbolPointer.kt new file mode 100644 index 00000000000..77d9889517d --- /dev/null +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirTopLevelTypeAliasSymbolPointer.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.analysis.api.fir.symbols.pointers + +import org.jetbrains.kotlin.analysis.api.KtAnalysisSession +import org.jetbrains.kotlin.analysis.api.fir.KtFirAnalysisSession +import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol +import org.jetbrains.kotlin.analysis.api.symbols.KtTypeAliasSymbol +import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer +import org.jetbrains.kotlin.name.ClassId + +class KtFirTopLevelTypeAliasSymbolPointer(private val classId: ClassId) : KtSymbolPointer() { + @Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol") + override fun restoreSymbol(analysisSession: KtAnalysisSession): KtTypeAliasSymbol? { + require(analysisSession is KtFirAnalysisSession) + return analysisSession.firSymbolBuilder.classifierBuilder.buildClassLikeSymbolByClassId(classId) as? KtTypeAliasSymbol + } +} diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java index 456cd3ebdee..42ff1b433ab 100644 --- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java +++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/symbols/FirIdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java @@ -220,6 +220,12 @@ public class FirIdeNormalAnalysisSourceModuleSymbolByPsiTestGenerated extends Ab runTest("analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerClasses.kt"); } + @Test + @TestMetadata("outerAndInnerTypeAlias.kt") + public void testOuterAndInnerTypeAlias() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.kt"); + } + @Test @TestMetadata("topLevelFunctions.kt") public void testTopLevelFunctions() throws Exception { diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java index 70090824228..53048993b43 100644 --- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java +++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/symbols/FirStandaloneNormalAnalysisSourceModuleSymbolByPsiTestGenerated.java @@ -220,6 +220,12 @@ public class FirStandaloneNormalAnalysisSourceModuleSymbolByPsiTestGenerated ext runTest("analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerClasses.kt"); } + @Test + @TestMetadata("outerAndInnerTypeAlias.kt") + public void testOuterAndInnerTypeAlias() throws Exception { + runTest("analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.kt"); + } + @Test @TestMetadata("topLevelFunctions.kt") public void testTopLevelFunctions() throws Exception { diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.descriptors.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.descriptors.txt new file mode 100644 index 00000000000..351be56cfdd --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.descriptors.txt @@ -0,0 +1,259 @@ +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtNamedClassOrObjectSymbol: + annotationsList: [] + classIdIfNonLocal: X + classKind: CLASS + companionObject: null + contextReceivers: [] + isData: false + isExternal: false + isFun: false + isInline: false + isInner: false + modality: FINAL + name: X + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: TOP_LEVEL + typeParameters: [ + KtTypeParameterSymbol(T) + ] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeAliasSymbol: + annotationsList: [] + classIdIfNonLocal: TopLevelAlias + expandedType: X + name: TopLevelAlias + origin: SOURCE + symbolKind: TOP_LEVEL + typeParameters: [] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeAliasSymbol: + annotationsList: [] + classIdIfNonLocal: A.NestedLevelAlias + expandedType: X + name: NestedLevelAlias + origin: SOURCE + symbolKind: CLASS_MEMBER + typeParameters: [] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeAliasSymbol: + annotationsList: [] + classIdIfNonLocal: null + expandedType: X + name: LocalTypeAlias + origin: SOURCE + symbolKind: LOCAL + typeParameters: [] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeAliasSymbol: + annotationsList: [] + classIdIfNonLocal: null + expandedType: X + name: NestedLevelAliasInLocalClass + origin: SOURCE + symbolKind: CLASS_MEMBER + typeParameters: [] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeAliasSymbol: + annotationsList: [] + classIdIfNonLocal: null + expandedType: X + name: LocalTypeAlias + origin: SOURCE + symbolKind: LOCAL + typeParameters: [] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeAliasSymbol: + annotationsList: [] + classIdIfNonLocal: null + expandedType: X + name: NestedLevelAliasInLocalClass + origin: SOURCE + symbolKind: CLASS_MEMBER + typeParameters: [] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtFunctionSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + hasStableParameterNames: true + isBuiltinFunctionInvoke: false + isExtension: false + isExternal: false + isInfix: false + isInline: false + isOperator: false + isOverride: false + isStatic: false + isSuspend: false + modality: FINAL + name: check + origin: SOURCE + receiverType: null + returnType: kotlin/Unit + symbolKind: CLASS_MEMBER + typeParameters: [] + valueParameters: [] + visibility: Public + getDispatchReceiver(): LocalClass + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtNamedClassOrObjectSymbol: + annotationsList: [] + classIdIfNonLocal: null + classKind: CLASS + companionObject: null + contextReceivers: [] + isData: false + isExternal: false + isFun: false + isInline: false + isInner: false + modality: FINAL + name: LocalClass + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: LOCAL + typeParameters: [] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtFunctionSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + hasStableParameterNames: true + isBuiltinFunctionInvoke: false + isExtension: false + isExternal: false + isInfix: false + isInline: false + isOperator: false + isOverride: false + isStatic: false + isSuspend: false + modality: FINAL + name: check + origin: SOURCE + receiverType: null + returnType: kotlin/Unit + symbolKind: CLASS_MEMBER + typeParameters: [] + valueParameters: [] + visibility: Public + getDispatchReceiver(): LocalClass + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtNamedClassOrObjectSymbol: + annotationsList: [] + classIdIfNonLocal: null + classKind: CLASS + companionObject: null + contextReceivers: [] + isData: false + isExternal: false + isFun: false + isInline: false + isInner: false + modality: FINAL + name: LocalClass + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: LOCAL + typeParameters: [] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtFunctionSymbol: + annotationsList: [] + callableIdIfNonLocal: /A.check + contextReceivers: [] + hasStableParameterNames: true + isBuiltinFunctionInvoke: false + isExtension: false + isExternal: false + isInfix: false + isInline: false + isOperator: false + isOverride: false + isStatic: false + isSuspend: false + modality: FINAL + name: check + origin: SOURCE + receiverType: null + returnType: kotlin/Unit + symbolKind: CLASS_MEMBER + typeParameters: [] + valueParameters: [] + visibility: Public + getDispatchReceiver(): A + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtNamedClassOrObjectSymbol: + annotationsList: [] + classIdIfNonLocal: A + classKind: CLASS + companionObject: null + contextReceivers: [] + isData: false + isExternal: false + isFun: false + isInline: false + isInner: false + modality: FINAL + name: A + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: TOP_LEVEL + typeParameters: [] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.kt b/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.kt new file mode 100644 index 00000000000..1a62aa68829 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.kt @@ -0,0 +1,24 @@ +// DO_NOT_CHECK_NON_PSI_SYMBOL_RESTORE +class X + +typealias TopLevelAlias = X + +class A { + typealias NestedLevelAlias = X + fun check() { + typealias LocalTypeAlias = X + class LocalClass { + typealias NestedLevelAliasInLocalClass = X + + fun check() { + typealias LocalTypeAlias = X + class LocalClass { + typealias NestedLevelAliasInLocalClass = X + fun check() { + + } + } + } + } + } +} diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.pretty.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.pretty.txt new file mode 100644 index 00000000000..ca90db7adf2 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.pretty.txt @@ -0,0 +1,9 @@ +class X + +typealias TopLevelAlias = X + +class A { + typealias NestedLevelAlias = X + + fun check() +} \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.txt new file mode 100644 index 00000000000..3fab1d575c0 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerTypeAlias.txt @@ -0,0 +1,259 @@ +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtNamedClassOrObjectSymbol: + annotationsList: [] + classIdIfNonLocal: X + classKind: CLASS + companionObject: null + contextReceivers: [] + isData: false + isExternal: false + isFun: false + isInline: false + isInner: false + modality: FINAL + name: X + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: TOP_LEVEL + typeParameters: [ + KtTypeParameterSymbol(T) + ] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeAliasSymbol: + annotationsList: [] + classIdIfNonLocal: TopLevelAlias + expandedType: X + name: TopLevelAlias + origin: SOURCE + symbolKind: TOP_LEVEL + typeParameters: [] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeAliasSymbol: + annotationsList: [] + classIdIfNonLocal: A.NestedLevelAlias + expandedType: X + name: NestedLevelAlias + origin: SOURCE + symbolKind: CLASS_MEMBER + typeParameters: [] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeAliasSymbol: + annotationsList: [] + classIdIfNonLocal: null + expandedType: X + name: LocalTypeAlias + origin: SOURCE + symbolKind: CLASS_MEMBER + typeParameters: [] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeAliasSymbol: + annotationsList: [] + classIdIfNonLocal: null + expandedType: X + name: NestedLevelAliasInLocalClass + origin: SOURCE + symbolKind: CLASS_MEMBER + typeParameters: [] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeAliasSymbol: + annotationsList: [] + classIdIfNonLocal: null + expandedType: X + name: LocalTypeAlias + origin: SOURCE + symbolKind: CLASS_MEMBER + typeParameters: [] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeAliasSymbol: + annotationsList: [] + classIdIfNonLocal: null + expandedType: X + name: NestedLevelAliasInLocalClass + origin: SOURCE + symbolKind: CLASS_MEMBER + typeParameters: [] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtFunctionSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + hasStableParameterNames: true + isBuiltinFunctionInvoke: false + isExtension: false + isExternal: false + isInfix: false + isInline: false + isOperator: false + isOverride: false + isStatic: false + isSuspend: false + modality: FINAL + name: check + origin: SOURCE + receiverType: null + returnType: kotlin/Unit + symbolKind: CLASS_MEMBER + typeParameters: [] + valueParameters: [] + visibility: Public + getDispatchReceiver(): A.LocalClass.LocalClass + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtNamedClassOrObjectSymbol: + annotationsList: [] + classIdIfNonLocal: null + classKind: CLASS + companionObject: null + contextReceivers: [] + isData: false + isExternal: false + isFun: false + isInline: false + isInner: false + modality: FINAL + name: LocalClass + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: LOCAL + typeParameters: [] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtFunctionSymbol: + annotationsList: [] + callableIdIfNonLocal: null + contextReceivers: [] + hasStableParameterNames: true + isBuiltinFunctionInvoke: false + isExtension: false + isExternal: false + isInfix: false + isInline: false + isOperator: false + isOverride: false + isStatic: false + isSuspend: false + modality: FINAL + name: check + origin: SOURCE + receiverType: null + returnType: kotlin/Unit + symbolKind: CLASS_MEMBER + typeParameters: [] + valueParameters: [] + visibility: Public + getDispatchReceiver(): A.LocalClass + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtNamedClassOrObjectSymbol: + annotationsList: [] + classIdIfNonLocal: null + classKind: CLASS + companionObject: null + contextReceivers: [] + isData: false + isExternal: false + isFun: false + isInline: false + isInner: false + modality: FINAL + name: LocalClass + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: LOCAL + typeParameters: [] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtFunctionSymbol: + annotationsList: [] + callableIdIfNonLocal: /A.check + contextReceivers: [] + hasStableParameterNames: true + isBuiltinFunctionInvoke: false + isExtension: false + isExternal: false + isInfix: false + isInline: false + isOperator: false + isOverride: false + isStatic: false + isSuspend: false + modality: FINAL + name: check + origin: SOURCE + receiverType: null + returnType: kotlin/Unit + symbolKind: CLASS_MEMBER + typeParameters: [] + valueParameters: [] + visibility: Public + getDispatchReceiver(): A + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtNamedClassOrObjectSymbol: + annotationsList: [] + classIdIfNonLocal: A + classKind: CLASS + companionObject: null + contextReceivers: [] + isData: false + isExternal: false + isFun: false + isInline: false + isInner: false + modality: FINAL + name: A + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: TOP_LEVEL + typeParameters: [] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null \ No newline at end of file