From 68c8ae3a319651e7ae283e937cfaaf5e146f7389 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 30 Jun 2011 17:54:14 +0200 Subject: [PATCH] honor abstract modifier for classes --- .../jetbrains/jet/codegen/ImplementationBodyCodegen.java | 6 +++++- idea/tests/org/jetbrains/jet/codegen/ClassGenTest.java | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/idea/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/idea/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 2726c54b25a..4bbbe4aaaea 100644 --- a/idea/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -5,6 +5,7 @@ import com.intellij.psi.PsiElement; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.types.JetType; +import org.jetbrains.jet.lexer.JetTokens; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; @@ -32,8 +33,11 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { if (!(myClass instanceof JetObjectDeclaration)) { interfaces.add(JetTypeMapper.jvmNameForInterface(descriptor)); } + + boolean isAbstract = myClass instanceof JetClass && ((JetClass) myClass).hasModifier(JetTokens.ABSTRACT_KEYWORD); + v.visit(Opcodes.V1_6, - Opcodes.ACC_PUBLIC, + Opcodes.ACC_PUBLIC | (isAbstract ? Opcodes.ACC_ABSTRACT : 0), jvmName(), null, superClass, diff --git a/idea/tests/org/jetbrains/jet/codegen/ClassGenTest.java b/idea/tests/org/jetbrains/jet/codegen/ClassGenTest.java index e04f1eacd94..c68cfab8461 100644 --- a/idea/tests/org/jetbrains/jet/codegen/ClassGenTest.java +++ b/idea/tests/org/jetbrains/jet/codegen/ClassGenTest.java @@ -1,6 +1,7 @@ package org.jetbrains.jet.codegen; import java.lang.reflect.Method; +import java.lang.reflect.Modifier; import java.util.List; /** @@ -107,4 +108,11 @@ public class ClassGenTest extends CodegenTestCase { public void testSimpleBox() throws Exception { blackBoxFile("classes/simpleBox.jet"); } + + public void testAbstractClass() throws Exception { + loadText("abstract class SimpleClass() { }"); + + final Class aClass = loadAllClasses(generateClassesInFile()).get("SimpleClass$$Impl"); + assertTrue((aClass.getModifiers() & Modifier.ABSTRACT) != 0); + } }