From 126c3d00338e107bf1f8676bdd4b2f83252972e3 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Sat, 10 Mar 2012 20:29:24 +0400 Subject: [PATCH] Added class objects support in JetDecompiledData. --- .../plugin/libraries/JetDecompiledData.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/JetDecompiledData.java b/idea/src/org/jetbrains/jet/plugin/libraries/JetDecompiledData.java index bfd4e79ffa9..4a5044daed2 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/JetDecompiledData.java +++ b/idea/src/org/jetbrains/jet/plugin/libraries/JetDecompiledData.java @@ -176,8 +176,6 @@ public class JetDecompiledData { private void appendDescriptor(StringBuilder builder, DeclarationDescriptor descriptor, BindingContext bindingContext, String indent) { String decompiledComment = "/* " + PsiBundle.message("psi.decompiled.method.body") + " */"; - builder.append(indent); - int startOffset = builder.length(); builder.append(DescriptorRenderer.COMPACT.render(descriptor)); int endOffset = builder.length(); @@ -189,15 +187,23 @@ public class JetDecompiledData { builder.append(" ").append(decompiledComment); } else if (descriptor instanceof ClassDescriptor) { builder.append(" {\n"); + ClassDescriptor classDescriptor = (ClassDescriptor) descriptor; boolean firstPassed = false; - for (DeclarationDescriptor member : ((ClassDescriptor) descriptor).getDefaultType().getMemberScope().getAllDescriptors()) { + String subindent = indent + " "; + if (classDescriptor.getClassObjectDescriptor() != null) { + firstPassed = true; + builder.append(subindent).append("class "); + appendDescriptor(builder, classDescriptor.getClassObjectDescriptor(), bindingContext, subindent); + } + for (DeclarationDescriptor member : classDescriptor.getDefaultType().getMemberScope().getAllDescriptors()) { if (member.getContainingDeclaration() == descriptor) { if (firstPassed) { builder.append("\n"); } else { firstPassed = true; } - appendDescriptor(builder, member, bindingContext, indent + " "); + builder.append(subindent); + appendDescriptor(builder, member, bindingContext, subindent); } } builder.append(indent).append("}"); @@ -206,7 +212,9 @@ public class JetDecompiledData { builder.append("\n"); PsiElement clsMember = bindingContext.get(BindingContext.DESCRIPTOR_TO_DECLARATION, descriptor); - myClsMembersToRanges.put(clsMember, new TextRange(startOffset, endOffset)); + if (clsMember != null) { + myClsMembersToRanges.put(clsMember, new TextRange(startOffset, endOffset)); + } } private static boolean hasAnnotation(PsiModifierListOwner modifierListOwner, String qualifiedName) {