[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 {
|
internal interface AdditionalAnnotationsProvider {
|
||||||
fun addAllAnnotations(currentRawAnnotations: MutableList<in PsiAnnotation>, foundQualifiers: MutableSet<String>, owner: PsiModifierList)
|
fun addAllAnnotations(currentRawAnnotations: MutableList<in PsiAnnotation>, foundQualifiers: MutableSet<String>, owner: PsiModifierList)
|
||||||
fun findAdditionalAnnotation(annotationsBox: LazyAnnotationsBox, qualifiedName: String, owner: PsiModifierList): PsiAnnotation?
|
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 {
|
return when {
|
||||||
parent.isAnnotationClass() -> findAdditionalAnnotationFromAnnotationClass(annotationsBox, qualifiedName, owner)
|
parent.isAnnotationClass() -> findAdditionalAnnotationFromAnnotationClass(annotationsBox, qualifiedName, owner)
|
||||||
parent.isMethodWithOverride() -> {
|
parent.isMethodWithOverride() -> {
|
||||||
val overrideQualifier = JvmAnnotationNames.OVERRIDE_ANNOTATION.asString()
|
createSimpleAnnotationIfMatches(
|
||||||
if (qualifiedName == overrideQualifier) SymbolLightSimpleAnnotation(overrideQualifier, owner) else null
|
qualifier = qualifiedName,
|
||||||
|
expectedQualifier = JvmAnnotationNames.OVERRIDE_ANNOTATION.asString(),
|
||||||
|
owner = owner,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> null
|
else -> null
|
||||||
@@ -88,16 +91,6 @@ private fun findAdditionalAnnotationFromAnnotationClass(
|
|||||||
private fun PsiElement.isAnnotationClass(): Boolean = this is PsiClass && isAnnotationType
|
private fun PsiElement.isAnnotationClass(): Boolean = this is PsiClass && isAnnotationType
|
||||||
private fun PsiElement.isMethodWithOverride(): Boolean = this is SymbolLightMethod<*> && (isDelegated || isOverride())
|
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(
|
private fun LazyAnnotationsBox.tryConvertToDocumentedJavaAnnotation(
|
||||||
qualifiedName: String,
|
qualifiedName: String,
|
||||||
owner: PsiModifierList,
|
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