From a6479bfc907459194f794f971873dc35804a8973 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 14 Nov 2014 16:33:17 +0300 Subject: [PATCH] Light Classes: Do not add "final" modifier to enum light classes --- .../org/jetbrains/jet/codegen/ImplementationBodyCodegen.java | 3 ++- .../jet/asJava/KotlinLightClassForExplicitDeclaration.java | 2 +- .../jetbrains/jet/asJava/KotlinLightClassStructureTest.java | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 8e9db9e1baa..932793a3ecc 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -142,7 +142,8 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { } if (!jetClass.hasModifier(JetTokens.OPEN_KEYWORD) && !isAbstract) { - isFinal = true; + // Light-class mode: Do not make enum classes final since PsiClass corresponding to enum is expected to be inheritable from + isFinal = !(jetClass.isEnum() && state.getClassBuilderMode() == ClassBuilderMode.LIGHT_CLASSES); } isStatic = !jetClass.isInner(); } diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java index b7a62a65c30..0f4a58c01a3 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java @@ -431,7 +431,7 @@ public class KotlinLightClassForExplicitDeclaration extends KotlinWrappingLightC if (isAbstract(classOrObject)) { psiModifiers.add(PsiModifier.ABSTRACT); } - else if (!classOrObject.hasModifier(OPEN_KEYWORD)) { + else if (!(classOrObject.hasModifier(OPEN_KEYWORD) || (classOrObject instanceof JetClass && ((JetClass) classOrObject).isEnum()))) { psiModifiers.add(PsiModifier.FINAL); } diff --git a/compiler/tests/org/jetbrains/jet/asJava/KotlinLightClassStructureTest.java b/compiler/tests/org/jetbrains/jet/asJava/KotlinLightClassStructureTest.java index 798a0a30bd0..23e9d310462 100644 --- a/compiler/tests/org/jetbrains/jet/asJava/KotlinLightClassStructureTest.java +++ b/compiler/tests/org/jetbrains/jet/asJava/KotlinLightClassStructureTest.java @@ -76,7 +76,7 @@ public abstract class KotlinLightClassStructureTest extends KotlinAsJavaTestBase } public void testEnum() { - checkModifiers("test.Enum", PUBLIC, FINAL, ENUM); + checkModifiers("test.Enum", PUBLIC, ENUM); } public void testTrait() {