From 3592aff81267962170cb5d7e1866f7276f562eef Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 15 Jul 2011 16:31:00 +0200 Subject: [PATCH] methods on objects should always be called via invokevirtual() and not invokeinterface() --- idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java | 2 +- idea/testData/codegen/objects/methodOnObject.jet | 5 +++++ idea/tests/org/jetbrains/jet/codegen/ObjectGenTest.java | 4 ++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 idea/testData/codegen/objects/methodOnObject.jet diff --git a/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java b/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java index b4a6ae3812b..886c1ede092 100644 --- a/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java +++ b/idea/src/org/jetbrains/jet/codegen/JetTypeMapper.java @@ -165,7 +165,7 @@ public class JetTypeMapper { public boolean isInterface(ClassDescriptor jetClass, OwnerKind kind) { PsiElement declaration = bindingContext.getDeclarationPsiElement(jetClass); - if (declaration instanceof JetObjectDeclaration && ((JetObjectDeclaration) declaration).isObjectLiteral()) { + if (declaration instanceof JetObjectDeclaration) { return false; } return kind == OwnerKind.INTERFACE; diff --git a/idea/testData/codegen/objects/methodOnObject.jet b/idea/testData/codegen/objects/methodOnObject.jet new file mode 100644 index 00000000000..bdff2a1fec1 --- /dev/null +++ b/idea/testData/codegen/objects/methodOnObject.jet @@ -0,0 +1,5 @@ +object A { + fun result() = "OK" +} + +fun box(): String = A.result() diff --git a/idea/tests/org/jetbrains/jet/codegen/ObjectGenTest.java b/idea/tests/org/jetbrains/jet/codegen/ObjectGenTest.java index db7bfa6ef7a..286900722d5 100644 --- a/idea/tests/org/jetbrains/jet/codegen/ObjectGenTest.java +++ b/idea/tests/org/jetbrains/jet/codegen/ObjectGenTest.java @@ -11,4 +11,8 @@ public class ObjectGenTest extends CodegenTestCase { public void testObjectLiteral() throws Exception { blackBoxFile("objects/objectLiteral.jet"); } + + public void testMethodOnObject() throws Exception { + blackBoxFile("objects/methodOnObject.jet"); + } }