From 0fea6822c317bd6a550c70e887bdf7629325289b Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 9 Jan 2013 15:40:21 +0400 Subject: [PATCH] Fix codegen of loaded class objects Remove useless check and todo. #KT-2717 Fixed #KT-3142 Fixed --- .../jetbrains/jet/codegen/ExpressionCodegen.java | 13 +++---------- .../ClassObjectMember.A.kt | 6 ++++++ .../ClassObjectMember.B.kt | 4 ++++ .../CompileKotlinAgainstKotlinTestGenerated.java | 5 +++++ 4 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 compiler/testData/compileKotlinAgainstKotlin/ClassObjectMember.A.kt create mode 100644 compiler/testData/compileKotlinAgainstKotlin/ClassObjectMember.B.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index dcd04b8cf0a..06d99a93af8 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1449,16 +1449,9 @@ public class ExpressionCodegen extends JetVisitor implem } if (descriptor instanceof ClassDescriptor) { - PsiElement declaration = descriptorToDeclaration(bindingContext, descriptor); - if (declaration instanceof JetClass) { - final ClassDescriptor classObjectDescriptor = ((ClassDescriptor) descriptor).getClassObjectDescriptor(); - assert classObjectDescriptor != null; - return StackValue.singleton(classObjectDescriptor, typeMapper); - } - else { - // todo ? - return StackValue.none(); - } + ClassDescriptor classObjectDescriptor = ((ClassDescriptor) descriptor).getClassObjectDescriptor(); + assert classObjectDescriptor != null : "Class object is not found for " + descriptor; + return StackValue.singleton(classObjectDescriptor, typeMapper); } if (descriptor instanceof TypeParameterDescriptor) { diff --git a/compiler/testData/compileKotlinAgainstKotlin/ClassObjectMember.A.kt b/compiler/testData/compileKotlinAgainstKotlin/ClassObjectMember.A.kt new file mode 100644 index 00000000000..faeeaca6e30 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstKotlin/ClassObjectMember.A.kt @@ -0,0 +1,6 @@ +class A { + class object { + fun foo() = 42 + val bar = "OK" + } +} diff --git a/compiler/testData/compileKotlinAgainstKotlin/ClassObjectMember.B.kt b/compiler/testData/compileKotlinAgainstKotlin/ClassObjectMember.B.kt new file mode 100644 index 00000000000..21c5e8cd412 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstKotlin/ClassObjectMember.B.kt @@ -0,0 +1,4 @@ +fun main(args: Array) { + if (A.foo() != 42) throw Exception() + if (A.bar != "OK") throw Exception() +} diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileKotlinAgainstKotlinTestGenerated.java index eb94267216e..8b8284a32c2 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileKotlinAgainstKotlinTestGenerated.java @@ -33,6 +33,11 @@ public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotl JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/compileKotlinAgainstKotlin"), "A.kt", true); } + @TestMetadata("ClassObjectMember.A.kt") + public void testClassObjectMember_A() throws Exception { + doTest("compiler/testData/compileKotlinAgainstKotlin/ClassObjectMember.A.kt"); + } + @TestMetadata("DefaultConstructor.A.kt") public void testDefaultConstructor_A() throws Exception { doTest("compiler/testData/compileKotlinAgainstKotlin/DefaultConstructor.A.kt");