[SLC] drop redundant resolve for visibility, fix several cases
^KTIJ-23783
This commit is contained in:
committed by
Space Team
parent
9970623e95
commit
a8c111b304
+2
-8
@@ -156,21 +156,15 @@ internal class SymbolLightAccessorMethod private constructor(
|
||||
private fun computeModifiers(): Set<String> = analyzeForLightClasses(ktModule) {
|
||||
val propertySymbol = propertySymbol()
|
||||
val propertyAccessorSymbol = propertyAccessorSymbol()
|
||||
val isOverrideMethod = propertyAccessorSymbol.isOverride || propertySymbol.isOverride
|
||||
val isInterfaceMethod = containingClass.isInterface
|
||||
|
||||
val modifiers = mutableSetOf<String>()
|
||||
|
||||
propertySymbol.computeModalityForMethod(
|
||||
isTopLevel = isTopLevel,
|
||||
suppressFinal = isOverrideMethod || isInterfaceMethod,
|
||||
suppressFinal = containingClass.isInterface || propertySymbol.isOverride,
|
||||
result = modifiers,
|
||||
)
|
||||
|
||||
val visibility = isOverrideMethod.ifTrue {
|
||||
tryGetEffectiveVisibility(propertySymbol)?.toPsiVisibilityForMember()
|
||||
} ?: propertyAccessorSymbol.toPsiVisibilityForMember()
|
||||
modifiers.add(visibility)
|
||||
modifiers.add(propertyAccessorSymbol.toPsiVisibilityForMember())
|
||||
|
||||
if (!suppressStatic &&
|
||||
(propertySymbol.hasJvmStaticAnnotation() || propertyAccessorSymbol.hasJvmStaticAnnotation(accessorSite))
|
||||
|
||||
+1
-8
@@ -27,8 +27,6 @@ import org.jetbrains.kotlin.light.classes.symbol.SymbolLightMemberBase
|
||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.getJvmNameFromAnnotation
|
||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasPublishedApiAnnotation
|
||||
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
|
||||
import org.jetbrains.kotlin.light.classes.symbol.tryGetEffectiveVisibility
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
|
||||
|
||||
internal abstract class SymbolLightMethodBase(
|
||||
lightMemberOrigin: LightMemberOrigin?,
|
||||
@@ -93,12 +91,7 @@ internal abstract class SymbolLightMethodBase(
|
||||
annotationUseSiteTarget: AnnotationUseSiteTarget?,
|
||||
): String where T : KtAnnotatedSymbol, T : KtSymbolWithVisibility, T : KtCallableSymbol {
|
||||
getJvmNameFromAnnotation(annotationUseSiteTarget)?.let { return it }
|
||||
|
||||
val effectiveVisibilityIfNotInternal = (visibility != Visibilities.Internal).ifTrue {
|
||||
tryGetEffectiveVisibility(this)
|
||||
} ?: this.visibility
|
||||
|
||||
if (effectiveVisibilityIfNotInternal != Visibilities.Internal) return defaultName
|
||||
if (visibility != Visibilities.Internal) return defaultName
|
||||
if (containingClass is KtLightClassForFacade) return defaultName
|
||||
if (hasPublishedApiAnnotation(annotationUseSiteTarget)) return defaultName
|
||||
|
||||
|
||||
+1
-6
@@ -100,12 +100,7 @@ internal class SymbolLightSimpleMethod(
|
||||
result = modifiers
|
||||
)
|
||||
|
||||
val visibility: String = functionSymbol.isOverride.ifTrue {
|
||||
tryGetEffectiveVisibility(functionSymbol)
|
||||
?.toPsiVisibilityForMember()
|
||||
} ?: functionSymbol.toPsiVisibilityForMember()
|
||||
|
||||
modifiers.add(visibility)
|
||||
modifiers.add(functionSymbol.toPsiVisibilityForMember())
|
||||
|
||||
if (!suppressStatic && functionSymbol.hasJvmStaticAnnotation()) {
|
||||
modifiers.add(PsiModifier.STATIC)
|
||||
|
||||
+24
-40
@@ -12,7 +12,10 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.*
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtConstantValue
|
||||
import org.jetbrains.kotlin.analysis.api.components.DefaultTypeClassIds
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithModality
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithTypeParameters
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility
|
||||
@@ -89,64 +92,45 @@ internal fun KtSymbolWithModality.computeModalityForMethod(
|
||||
if (this is KtFunctionSymbol && isExternal) {
|
||||
result.add(PsiModifier.NATIVE)
|
||||
}
|
||||
|
||||
if (isTopLevel) {
|
||||
result.add(PsiModifier.STATIC)
|
||||
val needFinalModifier = when (this) {
|
||||
is KtPropertySymbol -> isDelegatedProperty || isVal
|
||||
else -> true
|
||||
}
|
||||
|
||||
if (needFinalModifier) {
|
||||
result.add(PsiModifier.FINAL)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
context(KtAnalysisSession)
|
||||
internal fun PsiElement.tryGetEffectiveVisibility(symbol: KtCallableSymbol): Visibility? {
|
||||
if (symbol !is KtPropertySymbol && symbol !is KtFunctionSymbol) return null
|
||||
internal fun KtSymbolWithVisibility.toPsiVisibilityForMember(): String = visibility.toPsiVisibilityForMember()
|
||||
|
||||
var visibility = (symbol as? KtSymbolWithVisibility)?.visibility
|
||||
internal fun KtSymbolWithVisibility.toPsiVisibilityForClass(isNested: Boolean): String = visibility.toPsiVisibilityForClass(isNested)
|
||||
|
||||
for (overriddenSymbol in symbol.getAllOverriddenSymbols()) {
|
||||
val newVisibility = (overriddenSymbol as? KtSymbolWithVisibility)?.visibility
|
||||
if (newVisibility != null) {
|
||||
visibility = newVisibility
|
||||
}
|
||||
}
|
||||
|
||||
return visibility
|
||||
internal fun Visibility.toPsiVisibilityForMember(): String = when (this) {
|
||||
Visibilities.Private, Visibilities.PrivateToThis -> PsiModifier.PRIVATE
|
||||
Visibilities.Protected -> PsiModifier.PROTECTED
|
||||
else -> PsiModifier.PUBLIC
|
||||
}
|
||||
|
||||
internal fun KtSymbolWithVisibility.toPsiVisibilityForMember(): String =
|
||||
visibility.toPsiVisibilityForMember()
|
||||
private fun Visibility.toPsiVisibilityForClass(isNested: Boolean): String = when (isNested) {
|
||||
false -> when (this) {
|
||||
Visibilities.Public,
|
||||
Visibilities.Protected,
|
||||
Visibilities.Local,
|
||||
Visibilities.Internal -> PsiModifier.PUBLIC
|
||||
|
||||
internal fun KtSymbolWithVisibility.toPsiVisibilityForClass(isNested: Boolean): String =
|
||||
visibility.toPsiVisibilityForClass(isNested)
|
||||
|
||||
internal fun Visibility.toPsiVisibilityForMember(): String =
|
||||
when (this) {
|
||||
Visibilities.Private, Visibilities.PrivateToThis -> PsiModifier.PRIVATE
|
||||
Visibilities.Protected -> PsiModifier.PROTECTED
|
||||
else -> PsiModifier.PUBLIC
|
||||
else -> PsiModifier.PACKAGE_LOCAL
|
||||
}
|
||||
|
||||
private fun Visibility.toPsiVisibilityForClass(isNested: Boolean): String {
|
||||
return when (isNested) {
|
||||
false -> when (this) {
|
||||
Visibilities.Public,
|
||||
Visibilities.Protected,
|
||||
Visibilities.Local,
|
||||
Visibilities.Internal -> 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
|
||||
}
|
||||
true -> when (this) {
|
||||
Visibilities.Public, Visibilities.Internal, Visibilities.Local -> PsiModifier.PUBLIC
|
||||
Visibilities.Protected -> PsiModifier.PROTECTED
|
||||
Visibilities.Private -> PsiModifier.PRIVATE
|
||||
else -> PsiModifier.PACKAGE_LOCAL
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -38,14 +38,14 @@ public final class Derived /* Derived*/ extends Base implements IntfWithProp {
|
||||
private final int x = 3 /* initializer type: int */;
|
||||
|
||||
@java.lang.Override()
|
||||
protected error.NonExistentClass v();// v()
|
||||
public error.NonExistentClass v();// v()
|
||||
|
||||
@java.lang.Override()
|
||||
public int abs();// abs()
|
||||
|
||||
public Derived(int);// .ctor(int)
|
||||
|
||||
public int getX$light_idea_test_case();// getX$light_idea_test_case()
|
||||
public int getX();// getX()
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user