[SLC] SymbolLightClassForFacade: reduce access to visibility
This commit is contained in:
committed by
Space Team
parent
96aa067aad
commit
a05842400c
+11
-20
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user