diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorSerializer.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorSerializer.java index c594f1037c3..6003ba12894 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorSerializer.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorSerializer.java @@ -27,13 +27,11 @@ import java.util.Collection; public class DescriptorSerializer { - // TODO: flags - private final NameTable nameTable; private final Interner typeParameters; - public DescriptorSerializer() { - this(new NameTable(), new Interner()); + public DescriptorSerializer(@NotNull NameTable.Namer namer) { + this(new NameTable(namer), new Interner()); } private DescriptorSerializer(NameTable nameTable, Interner typeParameters) { diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/NameTable.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/NameTable.java index 4d62bab0666..ed375dfe7a6 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/NameTable.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/NameTable.java @@ -51,9 +51,23 @@ public class NameTable { } }; + public interface Namer { + @NotNull + Name getClassName(@NotNull ClassDescriptor classDescriptor); + + @NotNull + Name getPackageName(@NotNull NamespaceDescriptor namespaceDescriptor); + } + + private final Namer namer; + private final Interner simpleNames = new Interner(); private final Interner qualifiedNames = new Interner(QUALIFIED_NAME_BUILDER_HASHING); + public NameTable(@NotNull Namer namer) { + this.namer = namer; + } + @NotNull public List getSimpleNames() { return simpleNames.getAllInternedObjects(); @@ -71,7 +85,7 @@ public class NameTable { public int getFqNameIndex(@NotNull ClassDescriptor classDescriptor) { QualifiedName.Builder builder = QualifiedName.newBuilder(); builder.setKind(QualifiedName.Kind.CLASS); - builder.setShortName(getSimpleNameIndex(classDescriptor.getName())); + builder.setShortName(getSimpleNameIndex(namer.getClassName(classDescriptor))); DeclarationDescriptor containingDeclaration = classDescriptor.getContainingDeclaration(); if (containingDeclaration instanceof NamespaceDescriptor) { @@ -89,7 +103,7 @@ public class NameTable { public int getFqNameIndex(@NotNull NamespaceDescriptor namespaceDescriptor) { QualifiedName.Builder builder = QualifiedName.newBuilder(); //default: builder.setKind(QualifiedNameTable.QualifiedName.Kind.PACKAGE); - builder.setShortName(getSimpleNameIndex(namespaceDescriptor.getName())); + builder.setShortName(getSimpleNameIndex(namer.getPackageName(namespaceDescriptor))); NamespaceDescriptorParent containingDeclaration = namespaceDescriptor.getContainingDeclaration(); if (containingDeclaration instanceof NamespaceDescriptor) { @@ -105,6 +119,4 @@ public class NameTable { return qualifiedNames.intern(builder); } - - } diff --git a/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java b/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java index 5bc3000881c..2b08cc4eaea 100644 --- a/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java +++ b/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java @@ -57,6 +57,22 @@ import java.util.*; public abstract class AbstractDescriptorSerializationTest extends KotlinTestWithEnvironment { public static final Name TEST_PACKAGE_NAME = Name.identifier("test"); + public static final NameTable.Namer JAVA_NAMER = new NameTable.Namer() { + @NotNull + @Override + public Name getClassName(@NotNull ClassDescriptor classDescriptor) { + if (classDescriptor.getKind() == ClassKind.CLASS_OBJECT) { + return Name.identifier(JvmAbi.CLASS_OBJECT_CLASS_NAME); + } + return classDescriptor.getName(); + } + + @NotNull + @Override + public Name getPackageName(@NotNull NamespaceDescriptor namespaceDescriptor) { + return namespaceDescriptor.getName(); + } + }; @Override protected JetCoreEnvironment createEnvironment() { @@ -212,7 +228,7 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith serializeClasses(classes, serializedClasses); - DescriptorSerializer descriptorSerializer = new DescriptorSerializer(); + DescriptorSerializer descriptorSerializer = new DescriptorSerializer(JAVA_NAMER); List messages = Lists.newArrayList(); for (CallableMemberDescriptor callable : callables) { messages.add(descriptorSerializer.callableProto(callable).build()); @@ -227,7 +243,7 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith private static void serializeClasses(Collection classes, Map serializedClasses) throws IOException { for (ClassDescriptor classDescriptor : classes) { - DescriptorSerializer descriptorSerializer = new DescriptorSerializer(); + DescriptorSerializer descriptorSerializer = new DescriptorSerializer(JAVA_NAMER); ByteArrayOutputStream bytes = new ByteArrayOutputStream(); ProtoBuf.Class classProto = descriptorSerializer.classProto(classDescriptor).build();