From c19785252cf37287bda7a763d308e22dc360dc10 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 15 Jul 2015 16:14:01 +0300 Subject: [PATCH] Sealed classes now are decompiled correctly + test #EA-70762 Fixed --- .../decompiler/stubBuilder/clsStubBuilding.kt | 3 +- .../decompiler/stubBuilder/Sealed/Sealed.kt | 6 ++++ .../decompiler/stubBuilder/Sealed/Sealed.txt | 33 +++++++++++++++++++ .../ClsStubBuilderTestGenerated.java | 6 ++++ 4 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 idea/testData/decompiler/stubBuilder/Sealed/Sealed.kt create mode 100644 idea/testData/decompiler/stubBuilder/Sealed/Sealed.txt diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt index 39716526e45..b66cc21dac1 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/clsStubBuilding.kt @@ -116,7 +116,8 @@ enum class FlagsToModifiers { ProtoBuf.Modality.ABSTRACT -> JetTokens.ABSTRACT_KEYWORD ProtoBuf.Modality.FINAL -> JetTokens.FINAL_KEYWORD ProtoBuf.Modality.OPEN -> JetTokens.OPEN_KEYWORD - else -> throw IllegalStateException("Unexpected modality: $modality") + ProtoBuf.Modality.SEALED -> JetTokens.SEALED_KEYWORD + null -> throw IllegalStateException("Unexpected modality: null") } } }, diff --git a/idea/testData/decompiler/stubBuilder/Sealed/Sealed.kt b/idea/testData/decompiler/stubBuilder/Sealed/Sealed.kt new file mode 100644 index 00000000000..53be5967af5 --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/Sealed/Sealed.kt @@ -0,0 +1,6 @@ +package test + +sealed class Sealed { + class Nested: Sealed() + object Top: Sealed() +} diff --git a/idea/testData/decompiler/stubBuilder/Sealed/Sealed.txt b/idea/testData/decompiler/stubBuilder/Sealed/Sealed.txt new file mode 100644 index 00000000000..389c3ed96da --- /dev/null +++ b/idea/testData/decompiler/stubBuilder/Sealed/Sealed.txt @@ -0,0 +1,33 @@ +PsiJetFileStubImpl[package=test] + PACKAGE_DIRECTIVE: + REFERENCE_EXPRESSION:[referencedName=test] + IMPORT_LIST: + CLASS:[fqName=test.Sealed, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=Sealed, superNames=[]] + MODIFIER_LIST:[internal sealed] + PRIMARY_CONSTRUCTOR: + MODIFIER_LIST:[private] + VALUE_PARAMETER_LIST: + CLASS_BODY: + CLASS:[fqName=test.Sealed.Nested, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=false, name=Nested, superNames=[Sealed]] + MODIFIER_LIST:[internal final] + PRIMARY_CONSTRUCTOR: + MODIFIER_LIST:[public] + VALUE_PARAMETER_LIST: + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=test] + REFERENCE_EXPRESSION:[referencedName=Sealed] + CLASS_BODY: + OBJECT_DECLARATION:[fqName=test.Sealed.Top, isCompanion=false, isLocal=false, isObjectLiteral=false, isTopLevel=false, name=Top, superNames=[Sealed]] + MODIFIER_LIST:[internal] + DELEGATION_SPECIFIER_LIST: + DELEGATOR_SUPER_CLASS: + TYPE_REFERENCE: + USER_TYPE:[isAbsoluteInRootPackage=false] + USER_TYPE:[isAbsoluteInRootPackage=false] + REFERENCE_EXPRESSION:[referencedName=test] + REFERENCE_EXPRESSION:[referencedName=Sealed] + CLASS_BODY: diff --git a/idea/tests/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClsStubBuilderTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClsStubBuilderTestGenerated.java index 269eb227ffb..d46059314e0 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClsStubBuilderTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClsStubBuilderTestGenerated.java @@ -125,6 +125,12 @@ public class ClsStubBuilderTestGenerated extends AbstractClsStubBuilderTest { doTest(fileName); } + @TestMetadata("Sealed") + public void testSealed() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/Sealed/"); + doTest(fileName); + } + @TestMetadata("SecondaryConstructors") public void testSecondaryConstructors() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/decompiler/stubBuilder/SecondaryConstructors/");