[FIR IDE] LC More accurate processing for JvmSynthetic and JvmHidden annotations
This commit is contained in:
+3
-1
@@ -10,7 +10,9 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.pointers.KtSymbolPointer
|
|||||||
|
|
||||||
sealed class KtPropertyAccessorSymbol : KtCallableSymbol(),
|
sealed class KtPropertyAccessorSymbol : KtCallableSymbol(),
|
||||||
KtSymbolWithModality<KtCommonSymbolModality>,
|
KtSymbolWithModality<KtCommonSymbolModality>,
|
||||||
KtSymbolWithVisibility {
|
KtSymbolWithVisibility,
|
||||||
|
KtAnnotatedSymbol {
|
||||||
|
|
||||||
abstract val isDefault: Boolean
|
abstract val isDefault: Boolean
|
||||||
abstract val isInline: Boolean
|
abstract val isInline: Boolean
|
||||||
abstract val isOverride: Boolean
|
abstract val isOverride: Boolean
|
||||||
|
|||||||
+7
-6
@@ -16,11 +16,12 @@ import org.jetbrains.kotlin.fir.expressions.*
|
|||||||
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
import org.jetbrains.kotlin.fir.references.FirNamedReference
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.fir.symbols.KtFirSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.mapAnnotationParameters
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.mapAnnotationParameters
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotatedSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotatedSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSimpleConstantValue
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSimpleConstantValue
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.hasJvmSyntheticAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget?): Boolean =
|
internal fun KtAnnotatedSymbol.hasJvmSyntheticAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): Boolean =
|
||||||
hasAnnotation("kotlin/jvm/JvmSynthetic", annotationUseSiteTarget)
|
hasAnnotation("kotlin/jvm/JvmSynthetic", annotationUseSiteTarget)
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.getJvmNameFromAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): String? {
|
internal fun KtAnnotatedSymbol.getJvmNameFromAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): String? {
|
||||||
@@ -35,15 +36,14 @@ internal fun KtAnnotatedSymbol.getJvmNameFromAnnotation(annotationUseSiteTarget:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.isHiddenByDeprecation(annotationUseSiteTarget: AnnotationUseSiteTarget?): Boolean {
|
internal fun KtAnnotatedSymbol.isHiddenByDeprecation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): Boolean {
|
||||||
require(this is KtFirSymbol<*>)
|
require(this is KtFirSymbol<*>)
|
||||||
|
|
||||||
return this.firRef.withFir(FirResolvePhase.TYPES) {
|
return this.firRef.withFir(FirResolvePhase.TYPES) {
|
||||||
if (it !is FirAnnotatedDeclaration) return@withFir false
|
if (it !is FirAnnotatedDeclaration) return@withFir false
|
||||||
|
|
||||||
val deprecatedAnnotationCall = it.annotations.firstOrNull { annotationCall ->
|
val deprecatedAnnotationCall = it.annotations.firstOrNull { annotationCall ->
|
||||||
val siteTarget = annotationCall.useSiteTarget
|
annotationCall.useSiteTarget == annotationUseSiteTarget &&
|
||||||
(siteTarget == null || siteTarget == annotationUseSiteTarget) &&
|
|
||||||
annotationCall.classId?.asString() == "kotlin/Deprecated"
|
annotationCall.classId?.asString() == "kotlin/Deprecated"
|
||||||
} ?: return@withFir false
|
} ?: return@withFir false
|
||||||
|
|
||||||
@@ -56,6 +56,8 @@ internal fun KtAnnotatedSymbol.isHiddenByDeprecation(annotationUseSiteTarget: An
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal fun KtAnnotatedSymbol.isHiddenOrSynthetic(annotationUseSiteTarget: AnnotationUseSiteTarget? = null) =
|
||||||
|
isHiddenByDeprecation(annotationUseSiteTarget) || hasJvmSyntheticAnnotation(annotationUseSiteTarget)
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.hasJvmFieldAnnotation(): Boolean =
|
internal fun KtAnnotatedSymbol.hasJvmFieldAnnotation(): Boolean =
|
||||||
hasAnnotation("kotlin/jvm/JvmField", null)
|
hasAnnotation("kotlin/jvm/JvmField", null)
|
||||||
@@ -77,8 +79,7 @@ internal fun KtAnnotatedSymbol.hasInlineOnlyAnnotation(): Boolean =
|
|||||||
|
|
||||||
internal fun KtAnnotatedSymbol.hasAnnotation(classIdString: String, annotationUseSiteTarget: AnnotationUseSiteTarget?): Boolean =
|
internal fun KtAnnotatedSymbol.hasAnnotation(classIdString: String, annotationUseSiteTarget: AnnotationUseSiteTarget?): Boolean =
|
||||||
annotations.any {
|
annotations.any {
|
||||||
val siteTarget = it.useSiteTarget
|
it.useSiteTarget == annotationUseSiteTarget && it.classId?.asString() == classIdString
|
||||||
(siteTarget == null || siteTarget == annotationUseSiteTarget) && it.classId?.asString() == classIdString
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.computeAnnotations(
|
internal fun KtAnnotatedSymbol.computeAnnotations(
|
||||||
|
|||||||
+9
-9
@@ -104,14 +104,10 @@ internal fun FirLightClassBase.createMethods(
|
|||||||
) {
|
) {
|
||||||
for (declaration in declarations) {
|
for (declaration in declarations) {
|
||||||
|
|
||||||
if (declaration is KtFunctionSymbol && declaration.isInline) continue
|
|
||||||
|
|
||||||
if (declaration is KtAnnotatedSymbol && declaration.hasJvmSyntheticAnnotation(annotationUseSiteTarget = null)) continue
|
|
||||||
|
|
||||||
if (declaration is KtAnnotatedSymbol && declaration.isHiddenByDeprecation(annotationUseSiteTarget = null)) continue
|
|
||||||
|
|
||||||
when (declaration) {
|
when (declaration) {
|
||||||
is KtFunctionSymbol -> {
|
is KtFunctionSymbol -> {
|
||||||
|
if (declaration.isInline || declaration.isHiddenOrSynthetic()) continue
|
||||||
|
|
||||||
var methodIndex = METHOD_INDEX_BASE
|
var methodIndex = METHOD_INDEX_BASE
|
||||||
result.add(
|
result.add(
|
||||||
FirLightSimpleMethodForSymbol(
|
FirLightSimpleMethodForSymbol(
|
||||||
@@ -147,6 +143,7 @@ internal fun FirLightClassBase.createMethods(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
is KtConstructorSymbol -> {
|
is KtConstructorSymbol -> {
|
||||||
|
if (declaration.isHiddenOrSynthetic()) continue
|
||||||
result.add(
|
result.add(
|
||||||
FirLightConstructorForSymbol(
|
FirLightConstructorForSymbol(
|
||||||
constructorSymbol = declaration,
|
constructorSymbol = declaration,
|
||||||
@@ -164,8 +161,9 @@ internal fun FirLightClassBase.createMethods(
|
|||||||
fun KtPropertyAccessorSymbol.needToCreateAccessor(siteTarget: AnnotationUseSiteTarget): Boolean {
|
fun KtPropertyAccessorSymbol.needToCreateAccessor(siteTarget: AnnotationUseSiteTarget): Boolean {
|
||||||
if (isInline) return false
|
if (isInline) return false
|
||||||
if (!hasBody && visibility == KtSymbolVisibility.PRIVATE) return false
|
if (!hasBody && visibility == KtSymbolVisibility.PRIVATE) return false
|
||||||
return !declaration.hasJvmSyntheticAnnotation(siteTarget)
|
if (declaration.isHiddenOrSynthetic(siteTarget)) return false
|
||||||
&& !declaration.isHiddenByDeprecation(siteTarget)
|
if (isHiddenOrSynthetic()) return false
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
val getter = declaration.getter?.takeIf {
|
val getter = declaration.getter?.takeIf {
|
||||||
@@ -212,13 +210,15 @@ internal fun FirLightClassBase.createField(
|
|||||||
takePropertyVisibility: Boolean,
|
takePropertyVisibility: Boolean,
|
||||||
result: MutableList<KtLightField>
|
result: MutableList<KtLightField>
|
||||||
) {
|
) {
|
||||||
|
|
||||||
fun hasBackingField(property: KtPropertySymbol): Boolean = when (property) {
|
fun hasBackingField(property: KtPropertySymbol): Boolean = when (property) {
|
||||||
is KtSyntheticJavaPropertySymbol -> true
|
is KtSyntheticJavaPropertySymbol -> true
|
||||||
is KtKotlinPropertySymbol -> when {
|
is KtKotlinPropertySymbol -> when {
|
||||||
property.modality == KtCommonSymbolModality.ABSTRACT -> false
|
property.modality == KtCommonSymbolModality.ABSTRACT -> false
|
||||||
|
property.isHiddenOrSynthetic() -> false
|
||||||
property.isLateInit -> true
|
property.isLateInit -> true
|
||||||
//IS PARAMETER -> true
|
//IS PARAMETER -> true
|
||||||
!property.hasGetter && !property.hasSetter -> true
|
property.getter == null && property.setter == null -> true
|
||||||
property.hasJvmSyntheticAnnotation(AnnotationUseSiteTarget.FIELD) -> false
|
property.hasJvmSyntheticAnnotation(AnnotationUseSiteTarget.FIELD) -> false
|
||||||
else -> property.hasBackingField
|
else -> property.hasBackingField
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -13,9 +13,11 @@ import org.jetbrains.kotlin.idea.fir.findPsi
|
|||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertAnnotation
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtParameterSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtParameterSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertyGetterSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertyGetterSymbol
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtCommonSymbolModality
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtCommonSymbolModality
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolVisibility
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolVisibility
|
||||||
@@ -52,6 +54,9 @@ internal class KtFirPropertyGetterSymbol(
|
|||||||
override val type: KtType by firRef.withFirAndCache { builder.buildKtType(it.returnTypeRef) }
|
override val type: KtType by firRef.withFirAndCache { builder.buildKtType(it.returnTypeRef) }
|
||||||
override val modality: KtCommonSymbolModality get() = firRef.withFir(FirResolvePhase.STATUS) { it.modality.getSymbolModality() }
|
override val modality: KtCommonSymbolModality get() = firRef.withFir(FirResolvePhase.STATUS) { it.modality.getSymbolModality() }
|
||||||
override val visibility: KtSymbolVisibility get() = firRef.withFir(FirResolvePhase.STATUS) { it.visibility.getSymbolVisibility() }
|
override val visibility: KtSymbolVisibility get() = firRef.withFir(FirResolvePhase.STATUS) { it.visibility.getSymbolVisibility() }
|
||||||
|
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache(FirResolvePhase.TYPES) {
|
||||||
|
convertAnnotation(it)
|
||||||
|
}
|
||||||
|
|
||||||
override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> {
|
override fun createPointer(): KtSymbolPointer<KtPropertyGetterSymbol> {
|
||||||
KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it }
|
KtPsiBasedSymbolPointer.createForSymbolFromSource(this)?.let { return it }
|
||||||
|
|||||||
+5
@@ -13,9 +13,11 @@ import org.jetbrains.kotlin.idea.fir.findPsi
|
|||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
import org.jetbrains.kotlin.idea.frontend.api.fir.KtSymbolByFirBuilder
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.convertAnnotation
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.firRef
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySetterSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtPropertySetterSymbol
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSetterParameterSymbol
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtSetterParameterSymbol
|
||||||
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtAnnotationCall
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtCommonSymbolModality
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtCommonSymbolModality
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolKind
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolVisibility
|
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolVisibility
|
||||||
@@ -43,6 +45,9 @@ internal class KtFirPropertySetterSymbol(
|
|||||||
|
|
||||||
override val modality: KtCommonSymbolModality get() = firRef.withFir(FirResolvePhase.STATUS) { it.modality.getSymbolModality() }
|
override val modality: KtCommonSymbolModality get() = firRef.withFir(FirResolvePhase.STATUS) { it.modality.getSymbolModality() }
|
||||||
override val visibility: KtSymbolVisibility get() = firRef.withFir(FirResolvePhase.STATUS) { it.visibility.getSymbolVisibility() }
|
override val visibility: KtSymbolVisibility get() = firRef.withFir(FirResolvePhase.STATUS) { it.visibility.getSymbolVisibility() }
|
||||||
|
override val annotations: List<KtAnnotationCall> by firRef.withFirAndCache(FirResolvePhase.TYPES) {
|
||||||
|
convertAnnotation(it)
|
||||||
|
}
|
||||||
override val parameter: KtSetterParameterSymbol by firRef.withFirAndCache { fir ->
|
override val parameter: KtSetterParameterSymbol by firRef.withFirAndCache { fir ->
|
||||||
builder.buildFirSetterParameter(fir.valueParameters.single())
|
builder.buildFirSetterParameter(fir.valueParameters.single())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user