From e3fffa6b0bdeb9d81e03ad5e33e1365ef7568901 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 14 Nov 2013 21:38:51 +0400 Subject: [PATCH] Fix decompiled data for objects and enum entries Also prettify it for enum entries: output only names --- .../libraries/DecompiledDataFactory.java | 43 ++++++------------- idea/testData/libraries/decompiled/Color.kt | 14 +++--- 2 files changed, 20 insertions(+), 37 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java b/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java index 900a4f3abbc..2d202b00981 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java +++ b/idea/src/org/jetbrains/jet/plugin/libraries/DecompiledDataFactory.java @@ -36,6 +36,8 @@ import org.jetbrains.jet.renderer.DescriptorRendererBuilder; import java.util.*; +import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isEnumEntry; +import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isSyntheticClassObject; import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_KOTLIN_SOURCES; import static org.jetbrains.jet.plugin.libraries.JetDecompiledData.descriptorToKey; @@ -85,12 +87,10 @@ public final class DecompiledDataFactory { NamespaceDescriptor nd = javaDescriptorResolver.resolveNamespace(packageFqName, INCLUDE_KOTLIN_SOURCES); if (nd != null) { for (DeclarationDescriptor member : sortDeclarations(nd.getMemberScope().getAllDescriptors())) { - if (member instanceof ClassDescriptor || member instanceof NamespaceDescriptor - || isNamedObjectProperty(member)) { - continue; + if (!(member instanceof ClassOrNamespaceDescriptor)) { + appendDescriptor(member, ""); + builder.append("\n"); } - appendDescriptor(member, ""); - builder.append("\n"); } } } @@ -124,11 +124,11 @@ public final class DecompiledDataFactory { } private void appendDescriptor(@NotNull DeclarationDescriptor descriptor, String indent) { - // Don't render property for object declaration int startOffset = builder.length(); - String renderedDescriptor = DESCRIPTOR_RENDERER.render(descriptor); - renderedDescriptor = renderedDescriptor.replace("= ...", "= " + DECOMPILED_COMMENT); - builder.append(renderedDescriptor); + String header = isEnumEntry(descriptor) + ? descriptor.getName().asString() + : DESCRIPTOR_RENDERER.render(descriptor).replace("= ...", "= " + DECOMPILED_COMMENT); + builder.append(header); int endOffset = builder.length(); if (descriptor instanceof FunctionDescriptor || descriptor instanceof PropertyDescriptor) { @@ -138,22 +138,20 @@ public final class DecompiledDataFactory { endOffset = builder.length(); } else { // descriptor instanceof PropertyDescriptor - if (((PropertyDescriptor) descriptor).getModality() != Modality.ABSTRACT) { - builder.append(" ").append(DECOMPILED_COMMENT); - } + builder.append(" ").append(DECOMPILED_COMMENT); } } } - else if (descriptor instanceof ClassDescriptor) { + else if (descriptor instanceof ClassDescriptor && !isEnumEntry(descriptor)) { builder.append(" {\n"); ClassDescriptor classDescriptor = (ClassDescriptor) descriptor; boolean firstPassed = false; String subindent = indent + " "; - ClassDescriptor classObjectDescriptor = classDescriptor.getClassObjectDescriptor(); - if (classObjectDescriptor != null) { + ClassDescriptor classObject = classDescriptor.getClassObjectDescriptor(); + if (classObject != null && !isSyntheticClassObject(classObject)) { firstPassed = true; builder.append(subindent); - appendDescriptor(classObjectDescriptor, subindent); + appendDescriptor(classObject, subindent); } for (DeclarationDescriptor member : sortDeclarations(classDescriptor.getDefaultType().getMemberScope().getAllDescriptors())) { if (member.getContainingDeclaration() != descriptor) { @@ -162,9 +160,6 @@ public final class DecompiledDataFactory { if (member instanceof CallableMemberDescriptor && ((CallableMemberDescriptor) member).getKind() != CallableMemberDescriptor.Kind.DECLARATION) { continue; } - if (isNamedObjectProperty(member)) { - continue; - } if (firstPassed) { builder.append("\n"); @@ -193,14 +188,4 @@ public final class DecompiledDataFactory { private void saveDescriptorToRange(DeclarationDescriptor descriptor, int startOffset, int endOffset) { renderedDescriptorsToRange.put(descriptorToKey(descriptor), new TextRange(startOffset, endOffset)); } - - private static boolean isNamedObjectProperty(@NotNull DeclarationDescriptor descriptor) { - if (descriptor instanceof PropertyDescriptor && descriptor instanceof VariableDescriptorForObject) { - ClassDescriptor objectClass = ((VariableDescriptorForObject) descriptor).getObjectClass(); - if (objectClass.getKind() == ClassKind.OBJECT) { - return true; - } - } - return false; - } } diff --git a/idea/testData/libraries/decompiled/Color.kt b/idea/testData/libraries/decompiled/Color.kt index 80972b81114..4f03af21e08 100644 --- a/idea/testData/libraries/decompiled/Color.kt +++ b/idea/testData/libraries/decompiled/Color.kt @@ -4,13 +4,11 @@ package testData.libraries [[public final enum class Color(rgb: jet.Int) : jet.Enum { - [[public class object { - [public final val BLUE: testData.libraries.Color] /* compiled code */ - - [public final val GREEN: testData.libraries.Color] /* compiled code */ - - [public final val RED: testData.libraries.Color] /* compiled code */ - }]] - [internal final val rgb: jet.Int] /* compiled code */ + + [[BLUE]] + + [[GREEN]] + + [[RED]] }]] \ No newline at end of file