[kotlin] k2 override/implement: take care of enum entries

^KTIJ-25970 fixed

GitOrigin-RevId: dbea6ce1ed3e5c48e1df6c548a175f8862ae22fc
This commit is contained in:
Anna Kozlova
2024-07-25 12:13:49 +02:00
committed by intellij-monorepo-bot
parent 28345d51c0
commit e9124d5314
5 changed files with 46 additions and 16 deletions

View File

@@ -25,22 +25,24 @@ open class KtOverrideMembersHandler : KtGenerateMembersHandler(false) {
context(KaSession)
@OptIn(KaExperimentalApi::class)
private fun collectMembers(classOrObject: KtClassOrObject): List<KtClassMember> =
classOrObject.classSymbol?.let { getOverridableMembers(it) }.orEmpty().map { (symbol, bodyType, containingSymbol) ->
@NlsSafe
val fqName = containingSymbol?.classId?.asSingleFqName()?.toString() ?: containingSymbol?.name?.asString()
KtClassMember(
KtClassMemberInfo.create(
symbol,
symbol.render(renderer),
getIcon(symbol),
fqName,
containingSymbol?.let { getIcon(it) },
),
bodyType,
preferConstructorParameter = false,
)
}
private fun collectMembers(classOrObject: KtClassOrObject): List<KtClassMember> {
val classSymbol = (classOrObject.symbol as? KaEnumEntrySymbol)?.enumEntryInitializer as? KaClassSymbol ?: classOrObject.classSymbol ?: return emptyList()
return getOverridableMembers(classSymbol).map { (symbol, bodyType, containingSymbol) ->
@NlsSafe
val fqName = containingSymbol?.classId?.asSingleFqName()?.toString() ?: containingSymbol?.name?.asString()
KtClassMember(
KtClassMemberInfo.create(
symbol,
symbol.render(renderer),
getIcon(symbol),
fqName,
containingSymbol?.let { getIcon(it) },
),
bodyType,
preferConstructorParameter = false,
)
}
}
context(KaSession)
@OptIn(KaExperimentalApi::class)

View File

@@ -396,6 +396,10 @@ internal class FirOverrideImplementTest : OverrideImplementTest<KtClassMember>()
super.testEnumClass4()
}
override fun testEnumEntry() {
super.testEnumEntry()
}
override fun testOverrideExternalFunction() {
super.testOverrideExternalFunction()
}

View File

@@ -401,6 +401,10 @@ abstract class OverrideImplementTest<T : ClassMember> : AbstractOverrideImplemen
doOverrideFileTest("toString")
}
open fun testEnumEntry() {
doOverrideFileTest("foo")
}
open fun testOverrideExternalFunction() {
doOverrideFileTest()
}

View File

@@ -0,0 +1,9 @@
// FIR_IDENTICAL
enum class EnumIssue {
A {
<caret>
};
abstract fun foo()
}

View File

@@ -0,0 +1,11 @@
// FIR_IDENTICAL
enum class EnumIssue {
A {
override fun foo() {
TODO("Not yet implemented")
}
};
abstract fun foo()
}