Add PRIVATE_TO_THIS visibility to KtSymbolWithVisibility
This visibility is used for some cases where it isn't allowed to access to private members of the object from other instances of the same object because of the type parameter variance. For almost all clients this visibility is the same as PRIVATE
This commit is contained in:
+5
-1
@@ -12,8 +12,12 @@ interface KtSymbolWithVisibility {
|
||||
sealed class KtSymbolVisibility {
|
||||
object PUBLIC : KtSymbolVisibility()
|
||||
object PRIVATE : KtSymbolVisibility()
|
||||
object PRIVATE_TO_THIS : KtSymbolVisibility()
|
||||
object PROTECTED : KtSymbolVisibility()
|
||||
object INTERNAL : KtSymbolVisibility()
|
||||
object UNKNOWN : KtSymbolVisibility()
|
||||
object LOCAL : KtSymbolVisibility()
|
||||
}
|
||||
}
|
||||
|
||||
fun KtSymbolVisibility.isPrivateOrPrivateToThis(): Boolean =
|
||||
this == KtSymbolVisibility.PRIVATE || this == KtSymbolVisibility.PRIVATE_TO_THIS
|
||||
+2
-2
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassKind
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassOrObjectSymbol
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtConstructorSymbol
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionSymbol
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolVisibility
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.isPrivateOrPrivateToThis
|
||||
|
||||
internal class FirLightAnnotationClassSymbol(
|
||||
private val classOrObjectSymbol: KtClassOrObjectSymbol,
|
||||
@@ -44,7 +44,7 @@ internal class FirLightAnnotationClassSymbol(
|
||||
|
||||
analyzeWithSymbolAsContext(classOrObjectSymbol) {
|
||||
val visibleDeclarations = classOrObjectSymbol.getDeclaredMemberScope().getCallableSymbols()
|
||||
.filterNot { it is KtFunctionSymbol && it.visibility == KtSymbolVisibility.PRIVATE }
|
||||
.filterNot { it is KtFunctionSymbol && it.visibility.isPrivateOrPrivateToThis() }
|
||||
.filterNot { it is KtConstructorSymbol }
|
||||
|
||||
createMethods(visibleDeclarations, result)
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.idea.frontend.api.fir.analyzeWithSymbolAsContext
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassKind
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassOrObjectSymbol
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtFunctionSymbol
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolVisibility
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.isPrivateOrPrivateToThis
|
||||
|
||||
internal class FirLightInterfaceClassSymbol(
|
||||
private val classOrObjectSymbol: KtClassOrObjectSymbol,
|
||||
@@ -41,7 +41,7 @@ internal class FirLightInterfaceClassSymbol(
|
||||
|
||||
analyzeWithSymbolAsContext(classOrObjectSymbol) {
|
||||
val visibleDeclarations = classOrObjectSymbol.getDeclaredMemberScope().getCallableSymbols()
|
||||
.filterNot { it is KtFunctionSymbol && it.visibility == KtSymbolVisibility.PRIVATE }
|
||||
.filterNot { it is KtFunctionSymbol && it.visibility.isPrivateOrPrivateToThis() }
|
||||
|
||||
createMethods(visibleDeclarations, result)
|
||||
}
|
||||
|
||||
+3
-6
@@ -24,10 +24,7 @@ import org.jetbrains.kotlin.idea.frontend.api.analyze
|
||||
import org.jetbrains.kotlin.idea.frontend.api.fir.analyzeWithSymbolAsContext
|
||||
import org.jetbrains.kotlin.idea.frontend.api.hackyAllowRunningOnEdt
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.*
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtCommonSymbolModality
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolVisibility
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSymbolWithMembers
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtTypeAndAnnotations
|
||||
import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.*
|
||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtClassType
|
||||
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
@@ -185,7 +182,7 @@ internal fun FirLightClassBase.createMethods(
|
||||
|
||||
if (declaration is KtKotlinPropertySymbol && declaration.isConst) continue
|
||||
|
||||
if (declaration.visibility == KtSymbolVisibility.PRIVATE &&
|
||||
if (declaration.visibility.isPrivateOrPrivateToThis() &&
|
||||
declaration.getter?.hasBody == false &&
|
||||
declaration.setter?.hasBody == false
|
||||
) continue
|
||||
@@ -194,7 +191,7 @@ internal fun FirLightClassBase.createMethods(
|
||||
|
||||
fun KtPropertyAccessorSymbol.needToCreateAccessor(siteTarget: AnnotationUseSiteTarget): Boolean {
|
||||
if (isInline) return false
|
||||
if (!hasBody && visibility == KtSymbolVisibility.PRIVATE) return false
|
||||
if (!hasBody && visibility.isPrivateOrPrivateToThis()) return false
|
||||
if (declaration.isHiddenOrSynthetic(siteTarget)) return false
|
||||
if (isHiddenOrSynthetic()) return false
|
||||
return true
|
||||
|
||||
@@ -245,7 +245,8 @@ internal fun KtSymbolVisibility.toPsiVisibilityForMember(isTopLevel: Boolean): S
|
||||
private fun KtSymbolVisibility.toPsiVisibility(isTopLevel: Boolean, forClass: Boolean): String = when (this) {
|
||||
// Top-level private class has PACKAGE_LOCAL visibility in Java
|
||||
// Nested private class has PRIVATE visibility
|
||||
KtSymbolVisibility.PRIVATE -> if (forClass && isTopLevel) PsiModifier.PACKAGE_LOCAL else PsiModifier.PRIVATE
|
||||
KtSymbolVisibility.PRIVATE, KtSymbolVisibility.PRIVATE_TO_THIS ->
|
||||
if (forClass && isTopLevel) PsiModifier.PACKAGE_LOCAL else PsiModifier.PRIVATE
|
||||
KtSymbolVisibility.PROTECTED -> PsiModifier.PROTECTED
|
||||
else -> PsiModifier.PUBLIC
|
||||
}
|
||||
|
||||
+1
@@ -39,6 +39,7 @@ internal fun Visibility?.getSymbolVisibility(): KtSymbolVisibility = when (this)
|
||||
Visibilities.Public -> KtSymbolVisibility.PUBLIC
|
||||
Visibilities.Protected -> KtSymbolVisibility.PROTECTED
|
||||
Visibilities.Private -> KtSymbolVisibility.PRIVATE
|
||||
Visibilities.PrivateToThis -> KtSymbolVisibility.PRIVATE_TO_THIS
|
||||
Visibilities.Internal -> KtSymbolVisibility.INTERNAL
|
||||
Visibilities.Local -> KtSymbolVisibility.LOCAL
|
||||
Visibilities.Unknown -> KtSymbolVisibility.UNKNOWN
|
||||
|
||||
Reference in New Issue
Block a user