[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 com.intellij.psi.PsiModifierList
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.*
|
import org.jetbrains.kotlin.analysis.api.annotations.*
|
||||||
import org.jetbrains.kotlin.builtins.StandardNames
|
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.JvmAbi
|
||||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||||
import org.jetbrains.kotlin.name.CallableId
|
import org.jetbrains.kotlin.name.CallableId
|
||||||
@@ -19,41 +18,29 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
import org.jetbrains.kotlin.name.StandardClassIds
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
import java.lang.annotation.ElementType
|
import java.lang.annotation.ElementType
|
||||||
|
|
||||||
internal object DefaultAdditionalAnnotationsProvider : AdditionalAnnotationsProvider {
|
internal object AbstractClassAdditionalAnnotationsProvider : AdditionalAnnotationsProvider {
|
||||||
override fun addAllAnnotations(
|
override fun addAllAnnotations(
|
||||||
currentRawAnnotations: MutableList<in PsiAnnotation>,
|
currentRawAnnotations: MutableList<in PsiAnnotation>,
|
||||||
foundQualifiers: MutableSet<String>,
|
foundQualifiers: MutableSet<String>,
|
||||||
owner: PsiModifierList,
|
owner: PsiModifierList
|
||||||
) {
|
) {
|
||||||
val parent = owner.parent
|
if (!owner.parent.isAnnotationClass()) return
|
||||||
if (parent.isAnnotationClass()) {
|
|
||||||
addAllAnnotationsFromAnnotationClass(currentRawAnnotations, foundQualifiers, owner)
|
addAllAnnotationsFromAnnotationClass(currentRawAnnotations, foundQualifiers, owner)
|
||||||
} else if (parent.isMethodWithOverride()) {
|
|
||||||
addSimpleAnnotationIfMissing(JvmAnnotationNames.OVERRIDE_ANNOTATION.asString(), currentRawAnnotations, foundQualifiers, owner)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun findAdditionalAnnotation(
|
override fun findAdditionalAnnotation(
|
||||||
annotationsBox: LazyAnnotationsBox,
|
annotationsBox: LazyAnnotationsBox,
|
||||||
qualifiedName: String,
|
qualifiedName: String,
|
||||||
owner: PsiModifierList,
|
owner: PsiModifierList
|
||||||
): PsiAnnotation? {
|
): PsiAnnotation? = if (owner.parent.isAnnotationClass())
|
||||||
val parent = owner.parent
|
findAdditionalAnnotationFromAnnotationClass(annotationsBox, qualifiedName, owner)
|
||||||
return when {
|
else
|
||||||
parent.isAnnotationClass() -> findAdditionalAnnotationFromAnnotationClass(annotationsBox, qualifiedName, owner)
|
null
|
||||||
parent.isMethodWithOverride() -> {
|
|
||||||
createSimpleAnnotationIfMatches(
|
|
||||||
qualifier = qualifiedName,
|
|
||||||
expectedQualifier = JvmAnnotationNames.OVERRIDE_ANNOTATION.asString(),
|
|
||||||
owner = owner,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun PsiElement.isAnnotationClass(): Boolean = this is PsiClass && isAnnotationType
|
||||||
|
|
||||||
private fun addAllAnnotationsFromAnnotationClass(
|
private fun addAllAnnotationsFromAnnotationClass(
|
||||||
currentRawAnnotations: MutableList<in PsiAnnotation>,
|
currentRawAnnotations: MutableList<in PsiAnnotation>,
|
||||||
foundQualifiers: MutableSet<String>,
|
foundQualifiers: MutableSet<String>,
|
||||||
@@ -88,8 +75,6 @@ private fun findAdditionalAnnotationFromAnnotationClass(
|
|||||||
?: annotationsBox.tryConvertToDocumentedJavaAnnotation(qualifiedName, owner)
|
?: annotationsBox.tryConvertToDocumentedJavaAnnotation(qualifiedName, owner)
|
||||||
?: annotationsBox.tryConvertToRepeatableJavaAnnotation(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(
|
private fun LazyAnnotationsBox.tryConvertToDocumentedJavaAnnotation(
|
||||||
qualifiedName: String,
|
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.analysis.project.structure.KtModule
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightField
|
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.LazyAnnotationsBox
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.LazyModifiersBox
|
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.LazyModifiersBox
|
||||||
@@ -74,7 +74,7 @@ internal abstract class SymbolLightClassForInterfaceOrAnnotationClass : SymbolLi
|
|||||||
),
|
),
|
||||||
annotationsBox = LazyAnnotationsBox(
|
annotationsBox = LazyAnnotationsBox(
|
||||||
annotationsProvider = SymbolAnnotationsProvider(ktModule, classOrObjectSymbolPointer),
|
annotationsProvider = SymbolAnnotationsProvider(ktModule, classOrObjectSymbolPointer),
|
||||||
additionalAnnotationsProvider = DefaultAdditionalAnnotationsProvider,
|
additionalAnnotationsProvider = AbstractClassAdditionalAnnotationsProvider,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user