From b38c5b9d08ed0cfc1a0392aefc6691ec229627ba Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 22 May 2013 20:44:09 +0400 Subject: [PATCH] Outer classes are properly computed --- .../jetbrains/jet/descriptors/serialization/ClassId.java | 9 +++++++++ .../AbstractDescriptorSerializationTest.java | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/ClassId.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/ClassId.java index b984ffefc59..031b6525e29 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/ClassId.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/ClassId.java @@ -30,6 +30,15 @@ public final class ClassId { return new ClassId(getPackageFqName(), relativeClassName.child(name)); } + @NotNull + public ClassId getOuterClassId() { + return new ClassId(getPackageFqName(), relativeClassName.parent()); + } + + public boolean isTopLevelClass() { + return relativeClassName.parent().isRoot(); + } + public FqNameUnsafe asSingleFqName() { if (packageFqName.isRoot()) return relativeClassName; return new FqNameUnsafe(packageFqName.asString() + "." + relativeClassName.asString()); diff --git a/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java b/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java index 1c1a17e4d16..feb93d19af5 100644 --- a/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java +++ b/compiler/tests/org/jetbrains/jet/descriptors/serialization/AbstractDescriptorSerializationTest.java @@ -324,7 +324,10 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith @Nullable @Override protected ClassDescriptor doCompute(@NotNull ClassId classId) { - return resolveClass(ClassResolverImpl.this.parentForClasses, classId); + DeclarationDescriptor containingDeclaration = + classId.isTopLevelClass() ? ClassResolverImpl.this.parentForClasses : findClass(classId.getOuterClassId()); + assert containingDeclaration != null : "Containing declaration not found: " + classId.getOuterClassId(); + return resolveClass(containingDeclaration, classId); } }; }