diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index f9873af4c82..3899aea5158 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1643,9 +1643,7 @@ public class ExpressionCodegen extends JetVisitor implem } if (descriptor instanceof VariableDescriptorForObject) { - VariableDescriptorForObject variableDescriptor = (VariableDescriptorForObject) descriptor; - ClassDescriptor objectClassDescriptor = variableDescriptor.getObjectClass(); - return genObjectClassInstance(variableDescriptor, objectClassDescriptor); + return genObjectClassInstance((VariableDescriptorForObject) descriptor); } int index = lookupLocalIndex(descriptor); @@ -1674,7 +1672,11 @@ public class ExpressionCodegen extends JetVisitor implem } if (descriptor instanceof ClassDescriptor) { - ClassDescriptor classObjectDescriptor = ((ClassDescriptor) descriptor).getClassObjectDescriptor(); + ClassDescriptor classDescriptor = (ClassDescriptor) descriptor; + if (classDescriptor.getKind() == ClassKind.OBJECT) { + return StackValue.singleton(classDescriptor, typeMapper); + } + ClassDescriptor classObjectDescriptor = classDescriptor.getClassObjectDescriptor(); assert classObjectDescriptor != null : "Class object is not found for " + descriptor; return StackValue.singleton(classObjectDescriptor, typeMapper); } @@ -1723,7 +1725,8 @@ public class ExpressionCodegen extends JetVisitor implem throw new UnsupportedOperationException("don't know how to generate reference " + descriptor); } - private StackValue genObjectClassInstance(VariableDescriptor variableDescriptor, ClassDescriptor objectClassDescriptor) { + @NotNull + private StackValue genObjectClassInstance(@NotNull VariableDescriptorForObject variableDescriptor) { boolean isEnumEntry = DescriptorUtils.isEnumClassObject(variableDescriptor.getContainingDeclaration()); if (isEnumEntry) { ClassDescriptor containing = (ClassDescriptor) variableDescriptor.getContainingDeclaration().getContainingDeclaration(); @@ -1732,7 +1735,7 @@ public class ExpressionCodegen extends JetVisitor implem return StackValue.field(type, type, variableDescriptor.getName().asString(), true); } else { - return StackValue.singleton(objectClassDescriptor, typeMapper); + return StackValue.singleton(variableDescriptor.getObjectClass(), typeMapper); } } diff --git a/compiler/tests/org/jetbrains/jet/codegen/KotlinPackageAnnotationTest.java b/compiler/tests/org/jetbrains/jet/codegen/KotlinPackageAnnotationTest.java index cb077dcba81..32a2e8f19dc 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/KotlinPackageAnnotationTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/KotlinPackageAnnotationTest.java @@ -19,7 +19,10 @@ package org.jetbrains.jet.codegen; import jet.KotlinPackage; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.ConfigurationKind; -import org.jetbrains.jet.descriptors.serialization.*; +import org.jetbrains.jet.descriptors.serialization.JavaProtoBufUtil; +import org.jetbrains.jet.descriptors.serialization.NameResolver; +import org.jetbrains.jet.descriptors.serialization.PackageData; +import org.jetbrains.jet.descriptors.serialization.ProtoBuf; import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -59,7 +62,7 @@ public class KotlinPackageAnnotationTest extends CodegenTestCase { "data")); Set callableNames = collectCallableNames(data.getPackageProto().getMemberList(), data.getNameResolver()); - assertSameElements(Arrays.asList("foo", "bar", "C"), callableNames); + assertSameElements(callableNames, Arrays.asList("foo", "bar")); } @NotNull