From 4a01a55480c8eb8c484dd6ee59d502a2b8da837a Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Sat, 2 Jun 2012 02:55:42 +0400 Subject: [PATCH] do not store jvm class name in descriptor name --- .../jet/codegen/ClosureAnnotator.java | 41 +++++++++++-------- .../jetbrains/jet/codegen/JetTypeMapper.java | 10 +++-- .../jetbrains/jet/lang/resolve/name/Name.java | 2 +- .../jet/lang/resolve/name/NameUtils.java | 2 +- 4 files changed, 32 insertions(+), 23 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java index 3fc2e420152..9f760ff0616 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureAnnotator.java @@ -18,6 +18,7 @@ package org.jetbrains.jet.codegen; import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.psi.*; @@ -74,8 +75,8 @@ public class ClosureAnnotator { classDescriptor = new ClassDescriptorImpl( funDescriptor, Collections.emptyList(), - // TODO: internal name used as identifier - Name.identifier(name.getInternalName())); // TODO: + Name.special("")); + recordName(classDescriptor, name); classDescriptor.initialize( false, Collections.emptyList(), @@ -264,18 +265,6 @@ public class ClosureAnnotator { classStack.pop(); } - // TODO: please insert either @NotNull or @Nullable here - // stepan.koltsov@ 2012-04-08 - private void recordName(ClassDescriptor classDescriptor, @NotNull JvmClassName name) { - JvmClassName old = classNamesForClassDescriptor.put(classDescriptor, name); - if (old == null) { - // TODO: fix this assertion - // previosly here was incorrect assert that was ignored without -ea - // stepan.koltsov@ 2012-04-08 - //throw new IllegalStateException("rewrite at key " + classDescriptor); - } - } - @Override public void visitProperty(JetProperty property) { nameStack.push(nameStack.peek() + '$' + property.getName()); @@ -316,9 +305,25 @@ public class ClosureAnnotator { } } - public JvmClassName classNameForClassDescriptor(ClassDescriptor classDescriptor) { - JvmClassName name = classNamesForClassDescriptor.get(classDescriptor); - assert name != null; - return name; + // TODO: please insert either @NotNull or @Nullable here + // stepan.koltsov@ 2012-04-08 + private void recordName(ClassDescriptor classDescriptor, @NotNull JvmClassName name) { + JvmClassName old = classNamesForClassDescriptor.put(classDescriptor, name); + if (old == null) { + // TODO: fix this assertion + // previosly here was incorrect assert that was ignored without -ea + // stepan.koltsov@ 2012-04-08 + //throw new IllegalStateException("rewrite at key " + classDescriptor); + } + } + + @NotNull + public JvmClassName classNameForClassDescriptor(@NotNull ClassDescriptor classDescriptor) { + return classNamesForClassDescriptor.get(classDescriptor); + } + + @Nullable + public JvmClassName classNameForClassDescriptorIfDefined(@NotNull ClassDescriptor classDescriptor) { + return classNamesForClassDescriptor.get(classDescriptor); } } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java index c57b8d537a4..102c3d4b642 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java @@ -334,9 +334,13 @@ public class JetTypeMapper { .getInternalName(); } - // This is the worst code in the project - if(name.getName().contains("/")) - return name.getName(); + if (descriptor instanceof ClassDescriptor) { + ClassDescriptor clazz = (ClassDescriptor) descriptor; + JvmClassName className = closureAnnotator.classNameForClassDescriptorIfDefined(clazz); + if (className != null) { + return className.getInternalName(); + } + } if (container != null) { String baseName = getFQName(container); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/name/Name.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/name/Name.java index 629eab91830..795ce1bbe0e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/name/Name.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/name/Name.java @@ -41,7 +41,7 @@ public class Name implements Comparable { if (special) { throw new IllegalStateException("not identifier: " + this); } - return name; + return getName(); } public boolean isSpecial() { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/name/NameUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/name/NameUtils.java index 251c0d199f3..a9a474f2318 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/name/NameUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/name/NameUtils.java @@ -24,7 +24,7 @@ import org.jetbrains.annotations.NotNull; public class NameUtils { public static boolean isValidIdentified(@NotNull String name) { - return name.length() > 0 && !name.startsWith("<") && !name.contains("."); + return name.length() > 0 && !name.startsWith("<") && !name.contains(".") && !name.contains("/"); } public static void requireIdentifier(@NotNull String name) {