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