better JetTypeMapper.getFQName

This commit is contained in:
Stepan Koltsov
2012-06-02 03:35:09 +04:00
parent 99621537b5
commit d46379acf2
2 changed files with 18 additions and 21 deletions
@@ -190,7 +190,7 @@ public class CodegenContexts {
final Type type = enclosingClassType(typeMapper); final Type type = enclosingClassType(typeMapper);
outerExpression = type != null outerExpression = type != null
? StackValue.field(type, JvmClassName.byInternalName(typeMapper.getFQName(contextType)), "this$0", false) ? StackValue.field(type, typeMapper.getClassFQName(contextType), "this$0", false)
: null; : null;
} }
@@ -269,9 +269,9 @@ public class JetTypeMapper {
String local = getLocalNameForObject(object); String local = getLocalNameForObject(object);
if (local == null) return null; if (local == null) return null;
DeclarationDescriptor containingClass = getContainingClass(descriptor); ClassDescriptor containingClass = getContainingClass(descriptor);
if (containingClass != null) { if (containingClass != null) {
return getFQName(containingClass) + "$" + local; return getClassFQName(containingClass).getInternalName() + "$" + local;
} }
else { else {
return getFQName(getContainingNamespace(descriptor)) + "/" + local; return getFQName(getContainingNamespace(descriptor)) + "/" + local;
@@ -296,11 +296,12 @@ public class JetTypeMapper {
* *
* @see DescriptorUtils#getFQName(DeclarationDescriptor) * @see DescriptorUtils#getFQName(DeclarationDescriptor)
*/ */
public String getFQName(DeclarationDescriptor descriptor) { @NotNull
private String getFQName(@NotNull DeclarationDescriptor descriptor) {
descriptor = descriptor.getOriginal(); descriptor = descriptor.getOriginal();
if(descriptor instanceof FunctionDescriptor) { if (descriptor instanceof FunctionDescriptor) {
return getFQName(descriptor.getContainingDeclaration()); throw new IllegalStateException("requested fq name for function: " + descriptor);
} }
if (descriptor.getContainingDeclaration() instanceof ModuleDescriptor || descriptor instanceof ScriptDescriptor) { if (descriptor.getContainingDeclaration() instanceof ModuleDescriptor || descriptor instanceof ScriptDescriptor) {
@@ -327,27 +328,23 @@ public class JetTypeMapper {
} }
DeclarationDescriptor container = descriptor.getContainingDeclaration(); DeclarationDescriptor container = descriptor.getContainingDeclaration();
Name name = descriptor.getName();
if(JetPsiUtil.NO_NAME_PROVIDED.equals(name)) { if (container == null) {
return closureAnnotator throw new IllegalStateException("descriptor has no container: " + descriptor);
.classNameForAnonymousClass((JetElement) BindingContextUtils.descriptorToDeclaration(bindingContext, descriptor))
.getInternalName();
} }
if (descriptor instanceof ClassDescriptor) { Name name = descriptor.getName();
if (descriptor instanceof ClassDescriptor && name.isSpecial()) {
ClassDescriptor clazz = (ClassDescriptor) descriptor; ClassDescriptor clazz = (ClassDescriptor) descriptor;
JvmClassName className = closureAnnotator.classNameForClassDescriptorIfDefined(clazz); JvmClassName className = closureAnnotator.classNameForClassDescriptor(clazz);
if (className != null) {
return className.getInternalName(); return className.getInternalName();
} }
}
if (container != null) {
String baseName = getFQName(container); String baseName = getFQName(container);
if (!baseName.isEmpty()) { if (!baseName.isEmpty()) {
return baseName + (container instanceof NamespaceDescriptor ? "/" : "$") + name.getIdentifier(); return baseName + (container instanceof NamespaceDescriptor ? "/" : "$") + name.getIdentifier();
} }
}
return name.getIdentifier(); return name.getIdentifier();
} }