From 67cce57aeb2511d116e2e0d5e236708808cc9f66 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 7 May 2015 18:50:53 +0300 Subject: [PATCH] Decompiler & stub builder fixed accordingly with new enum syntax. Companion object now directly follows enum entries to avoid having them at the middle. Some decompiler & stub builder tests fixed accordingly. --- .../stubBuilder/ClassClsStubBuilder.kt | 2 +- .../textBuilder/DecompiledTextFactory.kt | 30 +++++++++++-------- .../decompiledText/Enum.expected.kt | 20 ++++++++++--- .../decompiler/decompiledText/Enum/Enum.kt | 15 ++++++---- .../decompiler/stubBuilder/Enum/Enum.txt | 12 ++++---- 5 files changed, 49 insertions(+), 30 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt index 400f3b3528b..c24db528d13 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt @@ -161,8 +161,8 @@ private class ClassClsStubBuilder( private fun createClassBodyAndMemberStubs() { val classBody = KotlinPlaceHolderStubImpl(classOrObjectStub, JetStubElementTypes.CLASS_BODY) - createCompanionObjectStub(classBody) createEnumEntryStubs(classBody) + createCompanionObjectStub(classBody) createCallableMemberStubs(classBody) createInnerAndNestedClasses(classBody) } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt index 6162321b917..5f072ab3f56 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/textBuilder/DecompiledTextFactory.kt @@ -169,13 +169,17 @@ private fun buildDecompiledText(packageFqName: FqName, descriptors: List, dependency.Tr { - ONE +internal final enum class Enum private () : kotlin.Enum { + A - TWO + B - THREE + C + + D + + E + + F + + internal companion object { + internal final val c: kotlin.Int /* compiled code */ + } + + internal open fun f(): kotlin.Int { /* compiled code */ } } diff --git a/idea/testData/decompiler/decompiledText/Enum/Enum.kt b/idea/testData/decompiler/decompiledText/Enum/Enum.kt index 2594d74c45b..17a7da31c98 100644 --- a/idea/testData/decompiler/decompiledText/Enum/Enum.kt +++ b/idea/testData/decompiler/decompiledText/Enum/Enum.kt @@ -2,11 +2,14 @@ package test import dependency.* -public enum class Enum : Tr { - ONE - TWO - THREE { - fun g() { - } +enum class Enum { + A B C D E F { + override fun f() = 4 } + + companion object { + val c: Int = 1 + } + + open fun f() = 3 } diff --git a/idea/testData/decompiler/stubBuilder/Enum/Enum.txt b/idea/testData/decompiler/stubBuilder/Enum/Enum.txt index 28f9054ced5..a3c72017040 100644 --- a/idea/testData/decompiler/stubBuilder/Enum/Enum.txt +++ b/idea/testData/decompiler/stubBuilder/Enum/Enum.txt @@ -37,6 +37,12 @@ PsiJetFileStubImpl[package=a.b.c.test.enum] REFERENCE_EXPRESSION:[referencedName=enum] REFERENCE_EXPRESSION:[referencedName=Enum] CLASS_BODY: + ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.A, isEnumEntry=true, isInterface=false, isLocal=false, isTopLevel=false, name=A, superNames=[]] + ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.B, isEnumEntry=true, isInterface=false, isLocal=false, isTopLevel=false, name=B, superNames=[]] + ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.C, isEnumEntry=true, isInterface=false, isLocal=false, isTopLevel=false, name=C, superNames=[]] + ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.D, isEnumEntry=true, isInterface=false, isLocal=false, isTopLevel=false, name=D, superNames=[]] + ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.E, isEnumEntry=true, isInterface=false, isLocal=false, isTopLevel=false, name=E, superNames=[]] + ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.F, isEnumEntry=true, isInterface=false, isLocal=false, isTopLevel=false, name=F, superNames=[]] OBJECT_DECLARATION:[fqName=a.b.c.test.enum.Enum.Companion, isCompanion=true, isLocal=false, isObjectLiteral=false, isTopLevel=false, name=Companion, superNames=[]] MODIFIER_LIST:[internal companion] CLASS_BODY: @@ -47,12 +53,6 @@ PsiJetFileStubImpl[package=a.b.c.test.enum] USER_TYPE:[isAbsoluteInRootPackage=false] REFERENCE_EXPRESSION:[referencedName=kotlin] REFERENCE_EXPRESSION:[referencedName=Int] - ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.A, isEnumEntry=true, isInterface=false, isLocal=false, isTopLevel=false, name=A, superNames=[]] - ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.B, isEnumEntry=true, isInterface=false, isLocal=false, isTopLevel=false, name=B, superNames=[]] - ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.C, isEnumEntry=true, isInterface=false, isLocal=false, isTopLevel=false, name=C, superNames=[]] - ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.D, isEnumEntry=true, isInterface=false, isLocal=false, isTopLevel=false, name=D, superNames=[]] - ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.E, isEnumEntry=true, isInterface=false, isLocal=false, isTopLevel=false, name=E, superNames=[]] - ENUM_ENTRY:[fqName=a.b.c.test.enum.Enum.F, isEnumEntry=true, isInterface=false, isLocal=false, isTopLevel=false, name=F, superNames=[]] FUN:[fqName=a.b.c.test.enum.Enum.f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, name=f] MODIFIER_LIST:[open internal] VALUE_PARAMETER_LIST: