[SLC] SymbolLightClassForFacade: reduce access to visibility

This commit is contained in:
Dmitrii Gridin
2023-01-05 09:51:17 +01:00
committed by Space Team
parent 96aa067aad
commit a05842400c
@@ -12,10 +12,7 @@ import com.intellij.psi.impl.light.LightModifierList
import org.jetbrains.annotations.NonNls import org.jetbrains.annotations.NonNls
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.scopes.KtScope import org.jetbrains.kotlin.analysis.api.scopes.KtScope
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.analysis.api.symbols.*
import org.jetbrains.kotlin.analysis.api.symbols.KtFileSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility
import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.project.structure.KtModule
@@ -98,8 +95,7 @@ class SymbolLightClassForFacade(
if (callableSymbol !is KtFunctionSymbol && callableSymbol !is KtKotlinPropertySymbol) continue if (callableSymbol !is KtFunctionSymbol && callableSymbol !is KtKotlinPropertySymbol) continue
if (callableSymbol !is KtSymbolWithVisibility) continue if (callableSymbol !is KtSymbolWithVisibility) continue
if ((callableSymbol as? KtAnnotatedSymbol)?.hasInlineOnlyAnnotation() == true) continue if ((callableSymbol as? KtAnnotatedSymbol)?.hasInlineOnlyAnnotation() == true) continue
val isPrivate = callableSymbol.toPsiVisibilityForMember() == PsiModifier.PRIVATE if (multiFileClass && callableSymbol.toPsiVisibilityForMember() == PsiModifier.PRIVATE) continue
if (isPrivate && multiFileClass) continue
yield(callableSymbol) yield(callableSymbol)
} }
} }
@@ -121,23 +117,16 @@ class SymbolLightClassForFacade(
result: MutableList<KtLightField> result: MutableList<KtLightField>
) { ) {
for (propertySymbol in fileScope.getCallableSymbols()) { for (propertySymbol in fileScope.getCallableSymbols()) {
if (propertySymbol !is KtKotlinPropertySymbol) continue if (propertySymbol !is KtKotlinPropertySymbol) continue
// If this facade represents multiple files, only `const` properties need to be generated. // If this facade represents multiple files, only `const` properties need to be generated.
if (multiFileClass && !propertySymbol.isConst) continue if (multiFileClass && !propertySymbol.isConst) continue
val isLateInitWithPublicAccessors = if (propertySymbol.isLateInit) { val forceStaticAndPropertyVisibility = propertySymbol.isConst ||
val getterIsPublic = propertySymbol.getter?.toPsiVisibilityForMember() propertySymbol.hasJvmFieldAnnotation() ||
?.let { it == PsiModifier.PUBLIC } ?: true propertySymbol.isLateInit &&
val setterIsPublic = propertySymbol.setter?.toPsiVisibilityForMember() propertySymbol.getter.isNullOrPublic() &&
?.let { it == PsiModifier.PUBLIC } ?: true propertySymbol.setter.isNullOrPublic()
getterIsPublic && setterIsPublic
} else false
val forceStaticAndPropertyVisibility = isLateInitWithPublicAccessors ||
(propertySymbol.isConst) ||
propertySymbol.hasJvmFieldAnnotation()
createField( createField(
propertySymbol, propertySymbol,
@@ -145,12 +134,14 @@ class SymbolLightClassForFacade(
isTopLevel = true, isTopLevel = true,
forceStatic = forceStaticAndPropertyVisibility, forceStatic = forceStaticAndPropertyVisibility,
takePropertyVisibility = forceStaticAndPropertyVisibility, takePropertyVisibility = forceStaticAndPropertyVisibility,
result result,
) )
} }
} }
private fun KtPropertyAccessorSymbol?.isNullOrPublic(): Boolean =
this?.toPsiVisibilityForMember()?.let { it == PsiModifier.PUBLIC } != false
private val _ownFields: List<KtLightField> by lazyPub { private val _ownFields: List<KtLightField> by lazyPub {
val result = mutableListOf<KtLightField>() val result = mutableListOf<KtLightField>()
val nameGenerator = SymbolLightField.FieldNameGenerator() val nameGenerator = SymbolLightField.FieldNameGenerator()