[SLC] Fix modifiers for @JvmStatic methods in interfaces

This commit is contained in:
Pavel Mikhailovskii
2023-02-23 17:04:22 +00:00
committed by Space Team
parent 253cdb1b8f
commit 9204f8162e
5 changed files with 41 additions and 10 deletions
@@ -13,5 +13,5 @@ import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
context(KtAnalysisSession)
internal fun String.isSuppressedFinalModifier(containingClass: SymbolLightClassBase, symbol: KtCallableSymbol): Boolean {
return this == PsiModifier.FINAL && containingClass.isEnum && symbol.origin == KtSymbolOrigin.SOURCE_MEMBER_GENERATED
return this == PsiModifier.FINAL && (containingClass.isEnum && symbol.origin == KtSymbolOrigin.SOURCE_MEMBER_GENERATED || containingClass.isInterface)
}
@@ -23,7 +23,7 @@ internal class SymbolLightMemberModifierList<T : KtLightMember<*>>(
override fun hasModifierProperty(name: String): Boolean = when {
name == PsiModifier.ABSTRACT && isImplementationInInterface() -> false
// Pretend this method behaves like a `default` method
name == PsiModifier.DEFAULT && isImplementationInInterface() -> true
name == PsiModifier.DEFAULT && isImplementationInInterface() && !hasModifierProperty(PsiModifier.STATIC) -> true
// TODO: FINAL && isPossiblyAffectedByAllOpen
else -> super.hasModifierProperty(name)
}
@@ -39,10 +39,10 @@ private class KtUltraLightMethodModifierList(
owner: KtUltraLightMethod,
val delegate: PsiMethod,
) : KtUltraLightModifierList<KtUltraLightMethod>(owner, support) {
override fun hasModifierProperty(name: String) = when {
override fun hasModifierProperty(name: String): Boolean = when {
name == PsiModifier.ABSTRACT && isImplementationInInterface() -> false
// pretend this method behaves like a default method
name == PsiModifier.DEFAULT && isImplementationInInterface() -> true
name == PsiModifier.DEFAULT && isImplementationInInterface() && !hasModifierProperty(PsiModifier.STATIC) -> true
name == PsiModifier.FINAL &&
(owner.containingClass.safeAs<KtLightClassForSourceDeclaration>()?.isPossiblyAffectedByAllOpen() == true)
-> delegate.hasModifierProperty(name)
@@ -7,6 +7,31 @@ public final class A /* A*/ {
public A();// .ctor()
public static abstract interface I /* A.I*/ {
@org.jetbrains.annotations.NotNull()
public static final A.I.Companion Companion;
@kotlin.jvm.JvmStatic()
public static void h();// h()
public static final class C /* A.I.C*/ {
@org.jetbrains.annotations.NotNull()
public static final A.I.C INSTANCE;
@kotlin.jvm.JvmStatic()
public static final void i();// i()
private C();// .ctor()
}
public static final class Companion /* A.I.Companion*/ {
@kotlin.jvm.JvmStatic()
public final void h();// h()
private Companion();// .ctor()
}
}
public static final class B /* A.B*/ {
@org.jetbrains.annotations.NotNull()
public static final A.B INSTANCE;
@@ -23,4 +48,4 @@ public final class A /* A*/ {
private Companion();// .ctor()
}
}
}
@@ -3,15 +3,21 @@
class A {
companion object {
@JvmStatic fun f() {
}
@JvmStatic fun f() { }
}
object B {
@JvmStatic
fun g() {
@JvmStatic fun g() { }
}
interface I {
companion object {
@JvmStatic fun h() { }
}
object C {
@JvmStatic
fun i() { }
}
}
}