From 0808f4e233b09c75bf757a0cff7898f92537ad4c Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Thu, 3 Nov 2022 11:47:03 +0100 Subject: [PATCH] [AA K2] implement symbol pointers for classes and objects ^KT-54311 --- .../symbols/KtFirNamedClassOrObjectSymbol.kt | 18 +- .../KtFirMemberClassOrObjectSymbolPointer.kt | 28 + ...tFirTopLevelClassOrObjectSymbolPointer.kt} | 4 +- .../api/fir/symbols/pointers/pointerUtils.kt | 16 +- .../outerAndInnerClasses.descriptors.txt | 539 ++++++++++++++++++ .../symbolByPsi/outerAndInnerClasses.kt | 11 + .../symbolByPsi/outerAndInnerClasses.txt | 270 +++++++++ 7 files changed, 877 insertions(+), 9 deletions(-) create mode 100644 analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirMemberClassOrObjectSymbolPointer.kt rename analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/{KtFirClassOrObjectInLibrarySymbolPointer.kt => KtFirTopLevelClassOrObjectSymbolPointer.kt} (82%) create mode 100644 analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerClasses.descriptors.txt diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt index 4bfbfbdbe11..7ed4c22830b 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/KtFirNamedClassOrObjectSymbol.kt @@ -11,7 +11,9 @@ import org.jetbrains.kotlin.analysis.api.base.KtContextReceiver 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.KtFirClassOrObjectInLibrarySymbolPointer +import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirMemberClassOrObjectSymbolPointer +import org.jetbrains.kotlin.analysis.api.fir.symbols.pointers.KtFirTopLevelClassOrObjectSymbolPointer +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.impl.base.symbols.toKtClassKind import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken @@ -22,15 +24,14 @@ 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.symbols.pointers.UnsupportedSymbolKind import org.jetbrains.kotlin.analysis.api.types.KtType import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirTypeParameter import org.jetbrains.kotlin.fir.declarations.utils.* -import org.jetbrains.kotlin.fir.resolve.getContainingDeclaration import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name @@ -105,10 +106,15 @@ internal class KtFirNamedClassOrObjectSymbol( override fun createPointer(): KtSymbolPointer = withValidityAssertion { KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it } - if (symbolKind == KtSymbolKind.LOCAL) { - throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(classIdIfNonLocal?.asString().orEmpty()) + + when (val symbolKind = symbolKind) { + KtSymbolKind.LOCAL -> + throw CanNotCreateSymbolPointerForLocalLibraryDeclarationException(classIdIfNonLocal?.asString().orEmpty()) + + KtSymbolKind.CLASS_MEMBER -> KtFirMemberClassOrObjectSymbolPointer(requireOwnerPointer(), name) + KtSymbolKind.TOP_LEVEL -> KtFirTopLevelClassOrObjectSymbolPointer(classIdIfNonLocal!!) + else -> throw UnsupportedSymbolKind(this::class, symbolKind) } - return KtFirClassOrObjectInLibrarySymbolPointer(classIdIfNonLocal!!) } override fun equals(other: Any?): Boolean = symbolEquals(other) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirMemberClassOrObjectSymbolPointer.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirMemberClassOrObjectSymbolPointer.kt new file mode 100644 index 00000000000..eda91aac0f8 --- /dev/null +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirMemberClassOrObjectSymbolPointer.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.KtNamedClassOrObjectSymbol +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.FirRegularClassSymbol +import org.jetbrains.kotlin.name.Name + +internal class KtFirMemberClassOrObjectSymbolPointer( + ownerPointer: KtSymbolPointer, + private val name: Name, +) : KtFirMemberSymbolPointer(ownerPointer) { + override fun KtFirAnalysisSession.chooseCandidateAndCreateSymbol( + candidates: FirScope, + firSession: FirSession + ): KtNamedClassOrObjectSymbol? { + val result = candidates.findClassifier(name) ?: return null + return firSymbolBuilder.classifierBuilder.buildNamedClassOrObjectSymbol(result) + } +} diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirClassOrObjectInLibrarySymbolPointer.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirTopLevelClassOrObjectSymbolPointer.kt similarity index 82% rename from analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirClassOrObjectInLibrarySymbolPointer.kt rename to analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirTopLevelClassOrObjectSymbolPointer.kt index 26a9a791356..227e1ff12cf 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirClassOrObjectInLibrarySymbolPointer.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/KtFirTopLevelClassOrObjectSymbolPointer.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * 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. */ @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtNamedClassOrObjectSymbol import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.name.ClassId -class KtFirClassOrObjectInLibrarySymbolPointer(private val classId: ClassId) : KtSymbolPointer() { +class KtFirTopLevelClassOrObjectSymbolPointer(private val classId: ClassId) : KtSymbolPointer() { @Deprecated("Consider using org.jetbrains.kotlin.analysis.api.KtAnalysisSession.restoreSymbol") override fun restoreSymbol(analysisSession: KtAnalysisSession): KtNamedClassOrObjectSymbol? { require(analysisSession is KtFirAnalysisSession) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/pointerUtils.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/pointerUtils.kt index 58f7903cd71..b198e3c53be 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/pointerUtils.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/symbols/pointers/pointerUtils.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * 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. */ @@ -12,10 +12,13 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.renderWithType import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.scopes.FirScope +import org.jetbrains.kotlin.fir.scopes.processClassifiersByName import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirClassifierSymbol import org.jetbrains.kotlin.ir.util.IdSignature import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.Name internal inline fun FirScope.findDeclarationWithSignature( signature: IdSignature, @@ -33,6 +36,17 @@ internal inline fun FirScope.findDeclarationWithSig return foundSymbol } +internal inline fun > FirScope.findClassifier(name: Name): D? { + var foundSymbol: D? = null + processClassifiersByName(name) { + if (it is D) { + foundSymbol = it + } + } + + return foundSymbol +} + internal inline fun Collection>.findDeclarationWithSignatureBySymbols( signature: IdSignature, firSession: FirSession diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerClasses.descriptors.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerClasses.descriptors.txt new file mode 100644 index 00000000000..4ac8488cd17 --- /dev/null +++ b/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerClasses.descriptors.txt @@ -0,0 +1,539 @@ +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T1 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtNamedClassOrObjectSymbol: + annotationsList: [] + classIdIfNonLocal: X.Y + classKind: CLASS + companionObject: null + contextReceivers: [] + isData: false + isExternal: false + isFun: false + isInline: false + isInner: true + modality: FINAL + name: Y + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T1) + ] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T2 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtNamedClassOrObjectSymbol: + annotationsList: [] + classIdIfNonLocal: X.Z + classKind: CLASS + companionObject: null + contextReceivers: [] + isData: false + isExternal: false + isFun: false + isInline: false + isInner: false + modality: FINAL + name: Z + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T2) + ] + visibility: Public + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T3 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T4 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T5 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + 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: true + modality: FINAL + name: K + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T5) + ] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T6 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + 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: C + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T6) + ] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T1 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + 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: true + modality: FINAL + name: Y + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T1) + ] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T2 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + 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: Z + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T2) + ] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T3 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T4 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T5 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + 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: true + modality: FINAL + name: K + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T5) + ] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T6 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + 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: C + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T6) + ] + visibility: Local + 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: U + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: LOCAL + typeParameters: [ + KtTypeParameterSymbol(T4) + ] + 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: foo + origin: SOURCE + receiverType: null + returnType: kotlin/Unit + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T3) + ] + valueParameters: [] + visibility: Public + getDispatchReceiver(): X + 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: X + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T) + ] + visibility: Local + 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: U + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: LOCAL + typeParameters: [ + KtTypeParameterSymbol(T4) + ] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtFunctionSymbol: + annotationsList: [] + callableIdIfNonLocal: /X.foo + contextReceivers: [] + hasStableParameterNames: true + isBuiltinFunctionInvoke: false + isExtension: false + isExternal: false + isInfix: false + isInline: false + isOperator: false + isOverride: false + isStatic: false + isSuspend: false + modality: FINAL + name: foo + origin: SOURCE + receiverType: null + returnType: kotlin/Unit + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T3) + ] + valueParameters: [] + visibility: Public + getDispatchReceiver(): X + 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 \ No newline at end of file diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerClasses.kt b/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerClasses.kt index 8f0d147bdca..a696bcd559e 100644 --- a/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerClasses.kt +++ b/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerClasses.kt @@ -7,6 +7,17 @@ class X { class U { inner class K class C + class X { + inner class Y + class Z + + fun foo() { + class U { + inner class K + class C + } + } + } } } } diff --git a/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerClasses.txt b/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerClasses.txt index 814cc597b1e..e428cf3de9c 100644 --- a/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerClasses.txt +++ b/analysis/analysis-api/testData/symbols/symbolByPsi/outerAndInnerClasses.txt @@ -189,6 +189,276 @@ KtNamedClassOrObjectSymbol: getContainingModule: KtSourceModule "Sources of main" deprecationStatus: null +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T1 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + 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: true + modality: FINAL + name: Y + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T1) + ] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T2 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + 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: Z + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T2) + ] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T3 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T4 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T5 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + 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: true + modality: FINAL + name: K + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T5) + ] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + +KtTypeParameterSymbol: + annotationsList: [] + isReified: false + name: T6 + origin: SOURCE + typeParameters: [] + upperBounds: [ + kotlin/Any? + ] + variance: INVARIANT + 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: C + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T6) + ] + visibility: Local + 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: U + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: LOCAL + typeParameters: [ + KtTypeParameterSymbol(T4) + ] + 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: foo + origin: SOURCE + receiverType: null + returnType: kotlin/Unit + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T3) + ] + valueParameters: [] + visibility: Public + getDispatchReceiver(): X.U.X + 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: X + origin: SOURCE + superTypes: [ + kotlin/Any + ] + symbolKind: CLASS_MEMBER + typeParameters: [ + KtTypeParameterSymbol(T) + ] + visibility: Local + getContainingModule: KtSourceModule "Sources of main" + deprecationStatus: null + KtNamedClassOrObjectSymbol: annotationsList: [] classIdIfNonLocal: null