[SLC] split DefaultAdditionalAnnotationsProvider into MethodAdditionalAnnotationsProvider and AbstractClassAdditionalAnnotationsProvider
^KT-56046
This commit is contained in:
committed by
Space Team
parent
cb531635b1
commit
e081fe92db
+12
-27
@@ -11,7 +11,6 @@ import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiModifierList
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.*
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethod
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
@@ -19,41 +18,29 @@ import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
import java.lang.annotation.ElementType
|
||||
|
||||
internal object DefaultAdditionalAnnotationsProvider : AdditionalAnnotationsProvider {
|
||||
internal object AbstractClassAdditionalAnnotationsProvider : AdditionalAnnotationsProvider {
|
||||
override fun addAllAnnotations(
|
||||
currentRawAnnotations: MutableList<in PsiAnnotation>,
|
||||
foundQualifiers: MutableSet<String>,
|
||||
owner: PsiModifierList,
|
||||
owner: PsiModifierList
|
||||
) {
|
||||
val parent = owner.parent
|
||||
if (parent.isAnnotationClass()) {
|
||||
addAllAnnotationsFromAnnotationClass(currentRawAnnotations, foundQualifiers, owner)
|
||||
} else if (parent.isMethodWithOverride()) {
|
||||
addSimpleAnnotationIfMissing(JvmAnnotationNames.OVERRIDE_ANNOTATION.asString(), currentRawAnnotations, foundQualifiers, owner)
|
||||
}
|
||||
if (!owner.parent.isAnnotationClass()) return
|
||||
|
||||
addAllAnnotationsFromAnnotationClass(currentRawAnnotations, foundQualifiers, owner)
|
||||
}
|
||||
|
||||
override fun findAdditionalAnnotation(
|
||||
annotationsBox: LazyAnnotationsBox,
|
||||
qualifiedName: String,
|
||||
owner: PsiModifierList,
|
||||
): PsiAnnotation? {
|
||||
val parent = owner.parent
|
||||
return when {
|
||||
parent.isAnnotationClass() -> findAdditionalAnnotationFromAnnotationClass(annotationsBox, qualifiedName, owner)
|
||||
parent.isMethodWithOverride() -> {
|
||||
createSimpleAnnotationIfMatches(
|
||||
qualifier = qualifiedName,
|
||||
expectedQualifier = JvmAnnotationNames.OVERRIDE_ANNOTATION.asString(),
|
||||
owner = owner,
|
||||
)
|
||||
}
|
||||
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
owner: PsiModifierList
|
||||
): PsiAnnotation? = if (owner.parent.isAnnotationClass())
|
||||
findAdditionalAnnotationFromAnnotationClass(annotationsBox, qualifiedName, owner)
|
||||
else
|
||||
null
|
||||
}
|
||||
|
||||
private fun PsiElement.isAnnotationClass(): Boolean = this is PsiClass && isAnnotationType
|
||||
|
||||
private fun addAllAnnotationsFromAnnotationClass(
|
||||
currentRawAnnotations: MutableList<in PsiAnnotation>,
|
||||
foundQualifiers: MutableSet<String>,
|
||||
@@ -88,8 +75,6 @@ private fun findAdditionalAnnotationFromAnnotationClass(
|
||||
?: annotationsBox.tryConvertToDocumentedJavaAnnotation(qualifiedName, owner)
|
||||
?: annotationsBox.tryConvertToRepeatableJavaAnnotation(qualifiedName, owner)
|
||||
|
||||
private fun PsiElement.isAnnotationClass(): Boolean = this is PsiClass && isAnnotationType
|
||||
private fun PsiElement.isMethodWithOverride(): Boolean = this is SymbolLightMethod<*> && (isDelegated || isOverride())
|
||||
|
||||
private fun LazyAnnotationsBox.tryConvertToDocumentedJavaAnnotation(
|
||||
qualifiedName: String,
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* 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.PsiElement
|
||||
import com.intellij.psi.PsiModifierList
|
||||
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethod
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||
|
||||
internal object MethodAdditionalAnnotationsProvider : AdditionalAnnotationsProvider {
|
||||
override fun addAllAnnotations(
|
||||
currentRawAnnotations: MutableList<in PsiAnnotation>,
|
||||
foundQualifiers: MutableSet<String>,
|
||||
owner: PsiModifierList,
|
||||
) {
|
||||
if (owner.parent.isMethodWithOverride()) {
|
||||
addSimpleAnnotationIfMissing(JvmAnnotationNames.OVERRIDE_ANNOTATION.asString(), currentRawAnnotations, foundQualifiers, owner)
|
||||
}
|
||||
}
|
||||
|
||||
override fun findAdditionalAnnotation(
|
||||
annotationsBox: LazyAnnotationsBox,
|
||||
qualifiedName: String,
|
||||
owner: PsiModifierList,
|
||||
): PsiAnnotation? = if (owner.parent.isMethodWithOverride())
|
||||
createSimpleAnnotationIfMatches(
|
||||
qualifier = qualifiedName,
|
||||
expectedQualifier = JvmAnnotationNames.OVERRIDE_ANNOTATION.asString(),
|
||||
owner = owner,
|
||||
)
|
||||
else
|
||||
null
|
||||
}
|
||||
|
||||
private fun PsiElement.isMethodWithOverride(): Boolean = this is SymbolLightMethod<*> && (isDelegated || isOverride())
|
||||
+2
-2
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.symbolPointerOfType
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.DefaultAdditionalAnnotationsProvider
|
||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.AbstractClassAdditionalAnnotationsProvider
|
||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.LazyAnnotationsBox
|
||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
|
||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.LazyModifiersBox
|
||||
@@ -74,7 +74,7 @@ internal abstract class SymbolLightClassForInterfaceOrAnnotationClass : SymbolLi
|
||||
),
|
||||
annotationsBox = LazyAnnotationsBox(
|
||||
annotationsProvider = SymbolAnnotationsProvider(ktModule, classOrObjectSymbolPointer),
|
||||
additionalAnnotationsProvider = DefaultAdditionalAnnotationsProvider,
|
||||
additionalAnnotationsProvider = AbstractClassAdditionalAnnotationsProvider,
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user