From 18f0802de09f9f20db42042708a54be6b66538b0 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Thu, 17 Nov 2022 09:12:29 +0100 Subject: [PATCH] [SLC] introduce hasTypeParameters ^KT-54051 --- .../symbol/methods/SymbolLightAccessorMethod.kt | 5 +---- .../kotlin/light/classes/symbol/symbolLightUtils.kt | 12 ++++++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt index 17846a253b4..9fd367b92db 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightAccessorMethod.kt @@ -98,10 +98,7 @@ internal class SymbolLightAccessorMethod( } } - override fun hasTypeParameters(): Boolean = - containingPropertyDeclaration?.typeParameters?.isNotEmpty() ?: analyzeForLightClasses(ktModule) { - propertySymbol().typeParameters.isNotEmpty() - } + override fun hasTypeParameters(): Boolean = hasTypeParameters(ktModule, containingPropertyDeclaration, containingPropertySymbolPointer) override fun getTypeParameterList(): PsiTypeParameterList? = _typeParameterList override fun getTypeParameters(): Array = _typeParameterList?.typeParameters ?: PsiTypeParameter.EMPTY_ARRAY diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt index f2860f19055..6c04c6e6cf6 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt @@ -9,14 +9,17 @@ import com.intellij.psi.* import com.intellij.psi.util.TypeConversionUtil import com.intellij.util.IncorrectOperationException import org.jetbrains.kotlin.analysis.api.KtAnalysisSession +import org.jetbrains.kotlin.analysis.api.analyze import org.jetbrains.kotlin.analysis.api.annotations.* import org.jetbrains.kotlin.analysis.api.base.KtConstantValue import org.jetbrains.kotlin.analysis.api.components.DefaultTypeClassIds import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithModality +import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithTypeParameters import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.types.* +import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.asJava.elements.KtLightElement import org.jetbrains.kotlin.asJava.elements.KtLightMember import org.jetbrains.kotlin.asJava.elements.psiType @@ -29,6 +32,7 @@ import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolPsiExpression import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolPsiLiteral import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.SpecialNames +import org.jetbrains.kotlin.psi.KtTypeParameterListOwner import java.util.* internal fun L.invalidAccess(): Nothing = @@ -287,3 +291,11 @@ context(KtAnalysisSession) internal fun KtSymbolPointer.restoreSymbolOrThrowIfDisposed(): T = requireNotNull(restoreSymbol()) { "${this::class} pointer already disposed" } + +internal fun hasTypeParameters( + ktModule: KtModule, + declaration: KtTypeParameterListOwner?, + declarationPointer: KtSymbolPointer, +): Boolean = declaration?.typeParameters?.isNotEmpty() ?: analyze(ktModule) { + declarationPointer.restoreSymbolOrThrowIfDisposed().typeParameters.isNotEmpty() +}