Fix for KT-14774: Incorrect inner class modifier generated for sealed inner classes

#KT-14774 Fixed
This commit is contained in:
Mikhael Bogdanov
2016-12-15 15:21:52 +01:00
parent 654cecde69
commit 004ff86bec
3 changed files with 20 additions and 2 deletions
@@ -307,10 +307,11 @@ public class AsmUtil {
case ANNOTATION_CLASS: case ANNOTATION_CLASS:
return ACC_ABSTRACT | ACC_ANNOTATION | ACC_INTERFACE; return ACC_ABSTRACT | ACC_ANNOTATION | ACC_INTERFACE;
default: default:
if (innerClass.getModality() == Modality.FINAL) { Modality modality = innerClass.getModality();
if (modality == Modality.FINAL) {
return ACC_FINAL; return ACC_FINAL;
} }
else if (innerClass.getModality() == Modality.ABSTRACT) { else if (modality == Modality.ABSTRACT || modality == Modality.SEALED) {
return ACC_ABSTRACT; return ACC_ABSTRACT;
} }
} }
@@ -0,0 +1,11 @@
class Foo {
sealed class Bar
}
// TESTED_OBJECT_KIND: class
// TESTED_OBJECTS: Foo$Bar
// FLAGS: ACC_PUBLIC, ACC_ABSTRACT, ACC_SUPER
// TESTED_OBJECT_KIND: innerClass
// TESTED_OBJECTS: Foo, Bar
// FLAGS: ACC_PUBLIC, ACC_ABSTRACT, ACC_STATIC
@@ -100,6 +100,12 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest {
doTest(fileName); doTest(fileName);
} }
@TestMetadata("innerSealed.kt")
public void testInnerSealed() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/class/accessFlags/innerSealed.kt");
doTest(fileName);
}
@TestMetadata("mappingWhen.kt") @TestMetadata("mappingWhen.kt")
public void testMappingWhen() throws Exception { public void testMappingWhen() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/class/accessFlags/mappingWhen.kt"); String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/class/accessFlags/mappingWhen.kt");