From db23cbe29e361e3daa305fb56d7c137ee6df9b51 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Thu, 10 Nov 2022 14:25:53 +0100 Subject: [PATCH] [AA] introduce api to create symbol pointer from psi ^KT-54051 --- .../KtFe10DescSyntheticFieldSymbol.kt | 3 +- .../pointers/KtPsiBasedSymbolPointer.kt | 45 ++++++++++++++++--- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticFieldSymbol.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticFieldSymbol.kt index 5391d8c6941..ed9ce988883 100644 --- a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticFieldSymbol.kt +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/symbols/descriptorBased/KtFe10DescSyntheticFieldSymbol.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2021 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. */ @@ -26,7 +26,6 @@ import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor import org.jetbrains.kotlin.load.kotlin.toSourceElement import org.jetbrains.kotlin.psi.KtPropertyAccessor -import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer import org.jetbrains.kotlin.resolve.source.getPsi internal class KtFe10DescSyntheticFieldSymbol( diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/pointers/KtPsiBasedSymbolPointer.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/pointers/KtPsiBasedSymbolPointer.kt index 2299e9a9c03..d09efa7b1b2 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/pointers/KtPsiBasedSymbolPointer.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/symbols/pointers/KtPsiBasedSymbolPointer.kt @@ -8,12 +8,8 @@ package org.jetbrains.kotlin.analysis.api.symbols.pointers import com.intellij.psi.SmartPsiElementPointer import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.analysis.api.KtAnalysisSession -import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol -import org.jetbrains.kotlin.analysis.api.symbols.KtSymbolOrigin -import org.jetbrains.kotlin.psi.KtDeclaration -import org.jetbrains.kotlin.psi.KtElement -import org.jetbrains.kotlin.psi.KtFile -import org.jetbrains.kotlin.psi.KtObjectLiteralExpression +import org.jetbrains.kotlin.analysis.api.symbols.* +import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.createSmartPointer import kotlin.reflect.KClass @@ -97,3 +93,40 @@ public class KtPsiBasedSymbolPointer private constructor( private var disablePsiPointer: Boolean = false } } + +public fun KtElement.symbolPointer(): KtSymbolPointer = KtPsiBasedSymbolPointer(this, KtSymbol::class) +public inline fun KtElement.symbolPointerOfType(): KtSymbolPointer = KtPsiBasedSymbolPointer(this, S::class) + +public fun KtFile.symbolPointer(): KtSymbolPointer = KtPsiBasedSymbolPointer(this, KtFileSymbol::class) +public fun KtParameter.symbolPointer(): KtSymbolPointer = KtPsiBasedSymbolPointer(this, KtVariableLikeSymbol::class) +public fun KtTypeAlias.symbolPointer(): KtSymbolPointer = KtPsiBasedSymbolPointer(this, KtTypeAliasSymbol::class) +public fun KtEnumEntry.symbolPointer(): KtSymbolPointer = KtPsiBasedSymbolPointer(this, KtEnumEntrySymbol::class) +public fun KtProperty.symbolPointer(): KtSymbolPointer = KtPsiBasedSymbolPointer(this, KtVariableSymbol::class) + +public fun KtNamedFunction.symbolPointer(): KtSymbolPointer { + return KtPsiBasedSymbolPointer(this, KtFunctionLikeSymbol::class) +} + +public fun KtConstructor<*>.symbolPointer(): KtSymbolPointer { + return KtPsiBasedSymbolPointer(this, KtConstructorSymbol::class) +} + +public fun KtTypeParameter.symbolPointer(): KtSymbolPointer { + return KtPsiBasedSymbolPointer(this, KtTypeParameterSymbol::class) +} + +public fun KtFunctionLiteral.symbolPointer(): KtSymbolPointer { + return KtPsiBasedSymbolPointer(this, KtAnonymousFunctionSymbol::class) +} + +public fun KtObjectLiteralExpression.symbolPointer(): KtSymbolPointer { + return KtPsiBasedSymbolPointer(this, KtAnonymousObjectSymbol::class) +} + +public fun KtClassOrObject.symbolPointer(): KtSymbolPointer { + return KtPsiBasedSymbolPointer(this, KtClassOrObjectSymbol::class) +} + +public fun KtPropertyAccessor.symbolPointer(): KtSymbolPointer { + return KtPsiBasedSymbolPointer(this, KtPropertyAccessorSymbol::class) +}