From 305c42e15d0ce4ca73fd6c5bc2cac1a0f39c12d5 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Tue, 18 Sep 2012 13:15:17 +0400 Subject: [PATCH] creation JvmClassName from class descriptor --- .../jet/lang/resolve/java/JvmClassName.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmClassName.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmClassName.java index e2c3a962d5d..99b7ed9eec8 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmClassName.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JvmClassName.java @@ -19,6 +19,10 @@ package org.jetbrains.jet.lang.resolve.java; import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.asm4.Type; +import org.jetbrains.jet.lang.descriptors.ClassDescriptor; +import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.FqName; /** @@ -65,6 +69,19 @@ public class JvmClassName { return StringUtil.replace(decodedObjectNames, TRAIT_IMPL_REPLACE_GUARD, JvmAbi.TRAIT_IMPL_CLASS_NAME); } + @NotNull + public static JvmClassName byClassDescriptor(@NotNull ClassifierDescriptor classDescriptor) { + //todo inner inner classes + DeclarationDescriptor containingDeclaration = classDescriptor.getContainingDeclaration(); + + if (!(containingDeclaration instanceof ClassDescriptor)) { + return byFqNameWithoutInnerClasses(DescriptorUtils.getFQName(classDescriptor).toSafe()); + } + + String fqName = DescriptorUtils.getFQName(containingDeclaration).getFqName(); + return new JvmClassName(fqName.replace('.', '/') + "." + classDescriptor.getName()); + } + private final static String CLASS_OBJECT_REPLACE_GUARD = ""; private final static String TRAIT_IMPL_REPLACE_GUARD = "";