[AA LC] Fix computing visibility for classes
This commit is contained in:
+1
-1
@@ -50,7 +50,7 @@ internal open class SymbolLightClass(
|
||||
|
||||
private val _modifierList: PsiModifierList? by lazyPub {
|
||||
|
||||
val modifiers = mutableSetOf(classOrObjectSymbol.toPsiVisibilityForClass(isTopLevel))
|
||||
val modifiers = mutableSetOf(classOrObjectSymbol.toPsiVisibilityForClass(isNested = !isTopLevel))
|
||||
classOrObjectSymbol.computeSimpleModality()?.run {
|
||||
modifiers.add(this)
|
||||
}
|
||||
|
||||
+3
-3
@@ -93,7 +93,7 @@ class SymbolLightClassForFacade(
|
||||
if (callableSymbol !is KtFunctionSymbol && callableSymbol !is KtKotlinPropertySymbol) continue
|
||||
if (callableSymbol !is KtSymbolWithVisibility) continue
|
||||
if ((callableSymbol as? KtAnnotatedSymbol)?.hasInlineOnlyAnnotation() == true) continue
|
||||
val isPrivate = callableSymbol.toPsiVisibilityForMember(isTopLevel = true) == PsiModifier.PRIVATE
|
||||
val isPrivate = callableSymbol.toPsiVisibilityForMember() == PsiModifier.PRIVATE
|
||||
if (isPrivate && multiFileClass) continue
|
||||
yield(callableSymbol)
|
||||
}
|
||||
@@ -121,9 +121,9 @@ class SymbolLightClassForFacade(
|
||||
if (multiFileClass && !propertySymbol.isConst) continue
|
||||
|
||||
val isLateInitWithPublicAccessors = if (propertySymbol.isLateInit) {
|
||||
val getterIsPublic = propertySymbol.getter?.toPsiVisibilityForMember(isTopLevel = true)
|
||||
val getterIsPublic = propertySymbol.getter?.toPsiVisibilityForMember()
|
||||
?.let { it == PsiModifier.PUBLIC } ?: true
|
||||
val setterIsPublic = propertySymbol.setter?.toPsiVisibilityForMember(isTopLevel = true)
|
||||
val setterIsPublic = propertySymbol.setter?.toPsiVisibilityForMember()
|
||||
?.let { it == PsiModifier.PUBLIC } ?: true
|
||||
getterIsPublic && setterIsPublic
|
||||
} else false
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ internal abstract class SymbolLightInterfaceOrAnnotationClass(
|
||||
|
||||
private val _modifierList: PsiModifierList? by lazyPub {
|
||||
|
||||
val modifiers = mutableSetOf(classOrObjectSymbol.toPsiVisibilityForClass(isTopLevel), PsiModifier.ABSTRACT)
|
||||
val modifiers = mutableSetOf(classOrObjectSymbol.toPsiVisibilityForClass(isNested = !isTopLevel), PsiModifier.ABSTRACT)
|
||||
if (!isTopLevel && !classOrObjectSymbol.isInner) {
|
||||
modifiers.add(PsiModifier.STATIC)
|
||||
}
|
||||
|
||||
+1
-1
@@ -34,7 +34,7 @@ internal class SymbolLightFieldForObject(
|
||||
override fun getName(): String = name
|
||||
|
||||
private val _modifierList: PsiModifierList by lazyPub {
|
||||
val modifiers = setOf(objectSymbol.toPsiVisibilityForMember(isTopLevel = false), PsiModifier.STATIC, PsiModifier.FINAL)
|
||||
val modifiers = setOf(objectSymbol.toPsiVisibilityForMember(), PsiModifier.STATIC, PsiModifier.FINAL)
|
||||
val notNullAnnotation = SymbolLightSimpleAnnotation(NotNull::class.java.name, this)
|
||||
SymbolLightMemberModifierList(this, modifiers, listOf(notNullAnnotation))
|
||||
}
|
||||
|
||||
+1
-1
@@ -87,7 +87,7 @@ internal class SymbolLightFieldForProperty(
|
||||
}
|
||||
|
||||
val visibility =
|
||||
if (takePropertyVisibility) propertySymbol.toPsiVisibilityForMember(isTopLevel = false) else PsiModifier.PRIVATE
|
||||
if (takePropertyVisibility) propertySymbol.toPsiVisibilityForMember() else PsiModifier.PRIVATE
|
||||
modifiers.add(visibility)
|
||||
|
||||
if (!suppressFinal) {
|
||||
|
||||
+2
-2
@@ -115,8 +115,8 @@ internal class SymbolLightAccessorMethod(
|
||||
|
||||
val visibility = isOverrideMethod.ifTrue {
|
||||
tryGetEffectiveVisibility(containingPropertySymbol)
|
||||
?.toPsiVisibilityForMember(isTopLevel)
|
||||
} ?: propertyAccessorSymbol.toPsiVisibilityForMember(isTopLevel)
|
||||
?.toPsiVisibilityForMember()
|
||||
} ?: propertyAccessorSymbol.toPsiVisibilityForMember()
|
||||
modifiers.add(visibility)
|
||||
|
||||
if (!suppressStatic &&
|
||||
|
||||
+1
-1
@@ -67,7 +67,7 @@ internal class SymbolLightConstructor(
|
||||
if (containingClass is SymbolLightClassForEnumEntry)
|
||||
setOf(PsiModifier.PACKAGE_LOCAL)
|
||||
else
|
||||
setOf(constructorSymbol.toPsiVisibilityForMember(isTopLevel = false))
|
||||
setOf(constructorSymbol.toPsiVisibilityForMember())
|
||||
}
|
||||
|
||||
private val _modifierList: PsiModifierList by lazyPub {
|
||||
|
||||
+2
-2
@@ -105,8 +105,8 @@ internal class SymbolLightSimpleMethod(
|
||||
|
||||
val visibility: String = functionSymbol.isOverride.ifTrue {
|
||||
tryGetEffectiveVisibility(functionSymbol)
|
||||
?.toPsiVisibilityForMember(isTopLevel)
|
||||
} ?: functionSymbol.toPsiVisibilityForMember(isTopLevel = isTopLevel)
|
||||
?.toPsiVisibilityForMember()
|
||||
} ?: functionSymbol.toPsiVisibilityForMember()
|
||||
|
||||
modifiers.add(visibility)
|
||||
|
||||
|
||||
+27
-13
@@ -109,23 +109,37 @@ internal fun PsiElement.tryGetEffectiveVisibility(symbol: KtCallableSymbol): Vis
|
||||
return visibility
|
||||
}
|
||||
|
||||
internal fun KtSymbolWithVisibility.toPsiVisibilityForMember(isTopLevel: Boolean): String =
|
||||
visibility.toPsiVisibility(isTopLevel, forClass = false)
|
||||
internal fun KtSymbolWithVisibility.toPsiVisibilityForMember(): String =
|
||||
visibility.toPsiVisibilityForMember()
|
||||
|
||||
internal fun KtSymbolWithVisibility.toPsiVisibilityForClass(isTopLevel: Boolean): String =
|
||||
visibility.toPsiVisibility(isTopLevel, forClass = true)
|
||||
internal fun KtSymbolWithVisibility.toPsiVisibilityForClass(isNested: Boolean): String =
|
||||
visibility.toPsiVisibilityForClass(isNested)
|
||||
|
||||
internal fun Visibility.toPsiVisibilityForMember(isTopLevel: Boolean): String =
|
||||
toPsiVisibility(isTopLevel, forClass = false)
|
||||
internal fun Visibility.toPsiVisibilityForMember(): String =
|
||||
when (this) {
|
||||
Visibilities.Private, Visibilities.PrivateToThis -> PsiModifier.PRIVATE
|
||||
Visibilities.Protected -> PsiModifier.PROTECTED
|
||||
else -> PsiModifier.PUBLIC
|
||||
}
|
||||
|
||||
private fun Visibility.toPsiVisibility(isTopLevel: Boolean, forClass: Boolean): String = when (this) {
|
||||
// Top-level private class has PACKAGE_LOCAL visibility in Java
|
||||
// Nested private class has PRIVATE visibility
|
||||
Visibilities.Private, Visibilities.PrivateToThis ->
|
||||
if (forClass && isTopLevel) PsiModifier.PACKAGE_LOCAL else PsiModifier.PRIVATE
|
||||
private fun Visibility.toPsiVisibilityForClass(isNested: Boolean): String {
|
||||
return when (isNested) {
|
||||
false -> when (this) {
|
||||
Visibilities.Public,
|
||||
Visibilities.Protected,
|
||||
Visibilities.Local,
|
||||
Visibilities.Internal -> PsiModifier.PUBLIC
|
||||
|
||||
Visibilities.Protected -> PsiModifier.PROTECTED
|
||||
else -> PsiModifier.PUBLIC
|
||||
else -> PsiModifier.PACKAGE_LOCAL
|
||||
}
|
||||
|
||||
true -> when (this) {
|
||||
Visibilities.Public, Visibilities.Internal, Visibilities.Local -> PsiModifier.PUBLIC
|
||||
Visibilities.Protected -> PsiModifier.PROTECTED
|
||||
Visibilities.Private -> PsiModifier.PRIVATE
|
||||
else -> PsiModifier.PACKAGE_LOCAL
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal fun basicIsEquivalentTo(`this`: PsiElement?, that: PsiElement?): Boolean {
|
||||
|
||||
@@ -5,11 +5,11 @@ public class Open /* pkg.Open*/ {
|
||||
|
||||
|
||||
class Private ...
|
||||
|
||||
|
||||
class Private2 ...
|
||||
|
||||
|
||||
class StaticInternal ...
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static final class Private /* pkg.Open.Private*/ extends pkg.Open {
|
||||
@@ -42,7 +42,7 @@ public abstract class Season /* pkg.Season*/ {
|
||||
|
||||
|
||||
class Nested ...
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static final class Nested /* pkg.Season.Nested*/ extends pkg.Season {
|
||||
|
||||
@@ -5,4 +5,4 @@ public final class multifileFacade /* multifileFacade*/ {
|
||||
|
||||
public static final int getX();// getX()
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user