diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightAbstractAnnotationParameterList.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightAbstractAnnotationParameterList.kt new file mode 100644 index 00000000000..3e54d35036a --- /dev/null +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightAbstractAnnotationParameterList.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2010-2023 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.light.classes.symbol.annotations + +import com.intellij.psi.PsiAnnotationParameterList +import org.jetbrains.kotlin.analysis.api.annotations.KtNamedAnnotationValue +import org.jetbrains.kotlin.asJava.elements.KtLightElementBase +import org.jetbrains.kotlin.psi.KtElement + +internal sealed class SymbolLightAbstractAnnotationParameterList( + parent: SymbolLightAbstractAnnotation, +) : KtLightElementBase(parent), PsiAnnotationParameterList { + override val kotlinOrigin: KtElement? + get() = (parent as SymbolLightAbstractAnnotation).kotlinOrigin?.valueArgumentList + + override fun equals(other: Any?): Boolean = other === this || other is SymbolLightLazyAnnotationParameterList && other.parent == parent + override fun hashCode(): Int = parent.hashCode() +} + +internal fun SymbolLightAbstractAnnotation.symbolLightAnnotationParameterList( + arguments: List = emptyList(), +): SymbolLightAbstractAnnotationParameterList = if (arguments.isNotEmpty()) { + SymbolLightLazyAnnotationParameterList(this, lazyOf(arguments)) +} else { + SymbolLightEmptyAnnotationParameterList(this) +} diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightAnnotationForAnnotationCall.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightAnnotationForAnnotationCall.kt index b1bd70afcfa..4dc95de781d 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightAnnotationForAnnotationCall.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightAnnotationForAnnotationCall.kt @@ -19,7 +19,7 @@ internal class SymbolLightAnnotationForAnnotationCall( parent: PsiModifierList, ) : SymbolLightAbstractAnnotation(parent) { private val _parameterList: PsiAnnotationParameterList by lazyPub { - SymbolLightLazyAnnotationParameterList(this, lazyOf(annotationCall.arguments)) + symbolLightAnnotationParameterList(annotationCall.arguments) } override fun getParameterList(): PsiAnnotationParameterList = _parameterList diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightEmptyAnnotationParameterList.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightEmptyAnnotationParameterList.kt new file mode 100644 index 00000000000..dca1767f09a --- /dev/null +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightEmptyAnnotationParameterList.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2010-2023 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.light.classes.symbol.annotations + +import com.intellij.psi.PsiNameValuePair + +internal class SymbolLightEmptyAnnotationParameterList( + parent: SymbolLightAbstractAnnotation, +) : SymbolLightAbstractAnnotationParameterList(parent) { + override fun getAttributes(): Array = PsiNameValuePair.EMPTY_ARRAY +} diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightLazyAnnotation.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightLazyAnnotation.kt index 1e5108f3fdb..2495777cabd 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightLazyAnnotation.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightLazyAnnotation.kt @@ -64,7 +64,11 @@ internal class SymbolLightLazyAnnotation private constructor( override fun getQualifiedName(): String = fqName.asString() private val _parameterList: PsiAnnotationParameterList by lazyPub { - SymbolLightLazyAnnotationParameterList(this, lazyPub { annotationApplication.value.arguments }) + if (annotationOverview?.hasArguments == true || !specialAnnotationApplication?.arguments.isNullOrEmpty()) { + SymbolLightLazyAnnotationParameterList(this, lazyPub { annotationApplication.value.arguments }) + } else { + SymbolLightEmptyAnnotationParameterList(this) + } } override fun getParameterList(): PsiAnnotationParameterList = _parameterList diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightLazyAnnotationParameterList.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightLazyAnnotationParameterList.kt index 4bcf9eec966..88d1197613e 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightLazyAnnotationParameterList.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightLazyAnnotationParameterList.kt @@ -5,21 +5,14 @@ package org.jetbrains.kotlin.light.classes.symbol.annotations -import com.intellij.psi.PsiAnnotationParameterList import com.intellij.psi.PsiNameValuePair import org.jetbrains.kotlin.analysis.api.annotations.KtNamedAnnotationValue import org.jetbrains.kotlin.asJava.classes.lazyPub -import org.jetbrains.kotlin.asJava.elements.KtLightElementBase -import org.jetbrains.kotlin.psi.KtElement internal class SymbolLightLazyAnnotationParameterList( parent: SymbolLightAbstractAnnotation, private val lazyArguments: Lazy>, -) : KtLightElementBase(parent), - PsiAnnotationParameterList { - override val kotlinOrigin: KtElement? - get() = (parent as SymbolLightAbstractAnnotation).kotlinOrigin?.valueArgumentList - +) : SymbolLightAbstractAnnotationParameterList(parent) { private val _attributes: Array by lazyPub { val attributes = lazyArguments.value.map { SymbolNameValuePairForAnnotationArgument(it, this) @@ -29,7 +22,4 @@ internal class SymbolLightLazyAnnotationParameterList( } override fun getAttributes(): Array = _attributes - - override fun equals(other: Any?): Boolean = other === this || other is SymbolLightLazyAnnotationParameterList && other.parent == parent - override fun hashCode(): Int = parent.hashCode() } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightSimpleAnnotation.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightSimpleAnnotation.kt index 8a6720f9464..940c5312eaf 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightSimpleAnnotation.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/SymbolLightSimpleAnnotation.kt @@ -29,9 +29,8 @@ internal class SymbolLightSimpleAnnotation( override fun hashCode(): Int = fqName.hashCode() private val _parameterList: PsiAnnotationParameterList by lazyPub { - SymbolLightLazyAnnotationParameterList(this, lazyOf(arguments)) + symbolLightAnnotationParameterList(arguments) } override fun getParameterList(): PsiAnnotationParameterList = _parameterList - }