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 = "";