[SLC] implement NullabilityAnnotationsProvider
^KT-56046
This commit is contained in:
committed by
Space Team
parent
d76e902b21
commit
465ac23650
+13
@@ -11,4 +11,17 @@ import com.intellij.psi.PsiModifierList
|
||||
internal interface AdditionalAnnotationsProvider {
|
||||
fun addAllAnnotations(currentRawAnnotations: MutableList<in PsiAnnotation>, foundQualifiers: MutableSet<String>, owner: PsiModifierList)
|
||||
fun findAdditionalAnnotation(annotationsBox: LazyAnnotationsBox, qualifiedName: String, owner: PsiModifierList): PsiAnnotation?
|
||||
|
||||
fun addSimpleAnnotationIfMissing(
|
||||
qualifier: String,
|
||||
currentRawAnnotations: MutableList<in PsiAnnotation>,
|
||||
foundQualifiers: MutableSet<String>,
|
||||
owner: PsiModifierList,
|
||||
) {
|
||||
if (!foundQualifiers.add(qualifier)) return
|
||||
currentRawAnnotations += SymbolLightSimpleAnnotation(qualifier, owner)
|
||||
}
|
||||
|
||||
fun createSimpleAnnotationIfMatches(qualifier: String, expectedQualifier: String, owner: PsiModifierList): PsiAnnotation? =
|
||||
if (qualifier == expectedQualifier) SymbolLightSimpleAnnotation(expectedQualifier, owner) else null
|
||||
}
|
||||
|
||||
+5
-12
@@ -42,8 +42,11 @@ internal object DefaultAnnotationsProvider : AdditionalAnnotationsProvider {
|
||||
return when {
|
||||
parent.isAnnotationClass() -> findAdditionalAnnotationFromAnnotationClass(annotationsBox, qualifiedName, owner)
|
||||
parent.isMethodWithOverride() -> {
|
||||
val overrideQualifier = JvmAnnotationNames.OVERRIDE_ANNOTATION.asString()
|
||||
if (qualifiedName == overrideQualifier) SymbolLightSimpleAnnotation(overrideQualifier, owner) else null
|
||||
createSimpleAnnotationIfMatches(
|
||||
qualifier = qualifiedName,
|
||||
expectedQualifier = JvmAnnotationNames.OVERRIDE_ANNOTATION.asString(),
|
||||
owner = owner,
|
||||
)
|
||||
}
|
||||
|
||||
else -> null
|
||||
@@ -88,16 +91,6 @@ private fun findAdditionalAnnotationFromAnnotationClass(
|
||||
private fun PsiElement.isAnnotationClass(): Boolean = this is PsiClass && isAnnotationType
|
||||
private fun PsiElement.isMethodWithOverride(): Boolean = this is SymbolLightMethod<*> && (isDelegated || isOverride())
|
||||
|
||||
private fun addSimpleAnnotationIfMissing(
|
||||
qualifier: String,
|
||||
currentRawAnnotations: MutableList<in PsiAnnotation>,
|
||||
foundQualifiers: MutableSet<String>,
|
||||
owner: PsiModifierList,
|
||||
) {
|
||||
if (!foundQualifiers.add(qualifier)) return
|
||||
currentRawAnnotations += SymbolLightSimpleAnnotation(qualifier, owner)
|
||||
}
|
||||
|
||||
private fun LazyAnnotationsBox.tryConvertToDocumentedJavaAnnotation(
|
||||
qualifiedName: String,
|
||||
owner: PsiModifierList,
|
||||
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* 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.PsiAnnotation
|
||||
import com.intellij.psi.PsiModifierList
|
||||
import org.jetbrains.kotlin.light.classes.symbol.NullabilityType
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||
|
||||
internal class NullabilityAnnotationsProvider(private val lazyNullabilityType: Lazy<NullabilityType>) : AdditionalAnnotationsProvider {
|
||||
override fun addAllAnnotations(
|
||||
currentRawAnnotations: MutableList<in PsiAnnotation>,
|
||||
foundQualifiers: MutableSet<String>,
|
||||
owner: PsiModifierList
|
||||
) {
|
||||
val qualifier = lazyNullabilityType.qualifier ?: return
|
||||
addSimpleAnnotationIfMissing(qualifier, currentRawAnnotations, foundQualifiers, owner)
|
||||
}
|
||||
|
||||
override fun findAdditionalAnnotation(
|
||||
annotationsBox: LazyAnnotationsBox,
|
||||
qualifiedName: String,
|
||||
owner: PsiModifierList
|
||||
): PsiAnnotation? {
|
||||
if (qualifiedName != JvmAnnotationNames.JETBRAINS_NOT_NULL_ANNOTATION.asString() &&
|
||||
qualifiedName != JvmAnnotationNames.JETBRAINS_NULLABLE_ANNOTATION.asString()
|
||||
) {
|
||||
return null
|
||||
}
|
||||
|
||||
val expectedQualifier = lazyNullabilityType.qualifier ?: return null
|
||||
return createSimpleAnnotationIfMatches(qualifiedName, expectedQualifier, owner)
|
||||
}
|
||||
}
|
||||
|
||||
private val Lazy<NullabilityType>.qualifier: String?
|
||||
get() = when (value) {
|
||||
NullabilityType.NotNull -> JvmAnnotationNames.JETBRAINS_NOT_NULL_ANNOTATION
|
||||
NullabilityType.Nullable -> JvmAnnotationNames.JETBRAINS_NULLABLE_ANNOTATION
|
||||
else -> null
|
||||
}?.asString()
|
||||
Reference in New Issue
Block a user