diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java index 9cfc470617d..b5f4aeb7381 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java @@ -290,6 +290,13 @@ public class CodegenUtil { //TODO: It's best to use this code also for compilation against sources // but sometimes structures that have expectedThisObject (bug?) mapped to static classes ReceiverParameterDescriptor expectedThisObject = descriptor.getExpectedThisObject(); - return expectedThisObject != null ? (ClassDescriptor) expectedThisObject.getContainingDeclaration() : null; + if (expectedThisObject != null) { + ClassDescriptor expectedThisClass = (ClassDescriptor) expectedThisObject.getContainingDeclaration(); + if (!expectedThisClass.getKind().isObject()) { + return expectedThisClass; + } + } + + return null; } } diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorDeserializer.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorDeserializer.java index 8cb8cee8f3c..36532caa87d 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorDeserializer.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorDeserializer.java @@ -25,11 +25,11 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.impl.*; import org.jetbrains.jet.lang.resolve.DescriptorFactory; import org.jetbrains.jet.lang.resolve.DescriptorUtils; -import org.jetbrains.jet.storage.StorageManager; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.ErrorUtils; import org.jetbrains.jet.lang.types.Variance; +import org.jetbrains.jet.storage.StorageManager; import java.util.ArrayList; import java.util.Collections; @@ -267,7 +267,7 @@ public class DescriptorDeserializer { classDescriptor.getTypeConstructor().getParameters(), local.valueParameters(proto.getValueParameterList()), visibility(Flags.VISIBILITY.get(proto.getFlags())), - !classDescriptor.isInner() + DescriptorUtils.isConstructorOfStaticNestedClass(descriptor) ); descriptor.setReturnType(local.typeDeserializer.type(proto.getReturnType())); return descriptor; diff --git a/compiler/testData/compileKotlinAgainstKotlin/ClassInObject.A.kt b/compiler/testData/compileKotlinAgainstKotlin/ClassInObject.A.kt new file mode 100644 index 00000000000..3751a4ecfcd --- /dev/null +++ b/compiler/testData/compileKotlinAgainstKotlin/ClassInObject.A.kt @@ -0,0 +1,5 @@ +package a + +object CartRoutes { + class RemoveOrderItem() +} diff --git a/compiler/testData/compileKotlinAgainstKotlin/ClassInObject.B.kt b/compiler/testData/compileKotlinAgainstKotlin/ClassInObject.B.kt new file mode 100644 index 00000000000..7bbaa98c932 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstKotlin/ClassInObject.B.kt @@ -0,0 +1,5 @@ +import a.CartRoutes + +fun main(args: Array) { + val r = CartRoutes.RemoveOrderItem() +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/BytecodeTextTestGenerated.java index e7856ab530a..af4f3ad1a78 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/BytecodeTextTestGenerated.java @@ -16,14 +16,17 @@ package org.jetbrains.jet.codegen; +import junit.framework.Assert; import junit.framework.Test; import junit.framework.TestSuite; + +import java.io.File; +import java.util.regex.Pattern; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.jet.test.TestMetadata; -import java.io.File; -import java.util.regex.Pattern; +import org.jetbrains.jet.codegen.AbstractBytecodeTextTest; /** This class is generated by {@link org.jetbrains.jet.generators.tests.GenerateTests}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileKotlinAgainstKotlinTestGenerated.java index 701f5eb8753..cf33cf9668b 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileKotlinAgainstKotlinTestGenerated.java @@ -36,6 +36,11 @@ public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotl JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/compileKotlinAgainstKotlin"), Pattern.compile("^(.+)\\.A.kt$"), true); } + @TestMetadata("ClassInObject.A.kt") + public void testClassInObject() throws Exception { + doTest("compiler/testData/compileKotlinAgainstKotlin/ClassInObject.A.kt"); + } + @TestMetadata("ClassObjectMember.A.kt") public void testClassObjectMember() throws Exception { doTest("compiler/testData/compileKotlinAgainstKotlin/ClassObjectMember.A.kt");