diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt index 5ac7f7caf48..1ff8effb074 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/InterfaceImplBodyCodegen.kt @@ -50,7 +50,7 @@ class InterfaceImplBodyCodegen( override fun generateDeclaration() { v.defineClass( - myClass, V1_6, ACC_PUBLIC or ACC_FINAL, + myClass, V1_6, ACC_PUBLIC or ACC_FINAL or ACC_SUPER, typeMapper.mapDefaultImpls(descriptor).internalName, null, "java/lang/Object", ArrayUtil.EMPTY_STRING_ARRAY ) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt index 760f31bc216..4ddd4ac63c5 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt @@ -297,8 +297,8 @@ class MultifileClassCodegen( } companion object { - private val FACADE_CLASS_ATTRIBUTES = Opcodes.ACC_PUBLIC or Opcodes.ACC_FINAL - private val OPEN_FACADE_CLASS_ATTRIBUTES = Opcodes.ACC_PUBLIC + private val FACADE_CLASS_ATTRIBUTES = Opcodes.ACC_PUBLIC or Opcodes.ACC_FINAL or Opcodes.ACC_SUPER + private val OPEN_FACADE_CLASS_ATTRIBUTES = Opcodes.ACC_PUBLIC or Opcodes.ACC_SUPER private fun getOnlyPackageFragment(packageFqName: FqName, files: Collection, bindingContext: BindingContext): PackageFragmentDescriptor? { val fragments = SmartList() diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt index 5302758b26c..d34aedb4e3f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassPartCodegen.kt @@ -46,7 +46,7 @@ class MultifileClassPartCodegen( override fun generateDeclaration() { v.defineClass(element, Opcodes.V1_6, - Opcodes.ACC_FINAL or Opcodes.ACC_SYNTHETIC, + Opcodes.ACC_FINAL or Opcodes.ACC_SYNTHETIC or Opcodes.ACC_SUPER, filePartType.internalName, null, "java/lang/Object", diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java index 388651deedc..6af5f124927 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PackagePartCodegen.java @@ -63,7 +63,7 @@ public class PackagePartCodegen extends MemberCodegen { @Override protected void generateDeclaration() { v.defineClass(element, V1_6, - ACC_PUBLIC | ACC_FINAL, + ACC_PUBLIC | ACC_FINAL | ACC_SUPER, packagePartType.getInternalName(), null, "java/lang/Object", diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java index 9fb7872160b..ca728c51add 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/SamWrapperCodegen.java @@ -86,7 +86,7 @@ public class SamWrapperCodegen { ClassBuilder cv = state.getFactory().newVisitor(JvmDeclarationOriginKt.OtherOrigin(erasedInterfaceFunction), asmType, file); cv.defineClass(file, V1_6, - ACC_FINAL, + ACC_FINAL | ACC_SUPER, asmType.getInternalName(), null, OBJECT_TYPE.getInternalName(), diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ScriptCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ScriptCodegen.java index b61f694c48f..33f13957cac 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ScriptCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ScriptCodegen.java @@ -88,7 +88,7 @@ public class ScriptCodegen extends MemberCodegen { v.defineClass(scriptDeclaration, V1_6, - ACC_PUBLIC, + ACC_PUBLIC | ACC_SUPER, classType.getInternalName(), null, "java/lang/Object", diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/when/MappingClassesForWhenByEnumCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/when/MappingClassesForWhenByEnumCodegen.java index a18f0cf957a..5c52ce0470f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/when/MappingClassesForWhenByEnumCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/when/MappingClassesForWhenByEnumCodegen.java @@ -47,7 +47,7 @@ public class MappingClassesForWhenByEnumCodegen { cb.defineClass( srcFile, V1_6, - ACC_FINAL | ACC_SYNTHETIC | ACC_PUBLIC, + ACC_PUBLIC | ACC_FINAL | ACC_SUPER | ACC_SYNTHETIC, mappingsClass.getInternalName(), null, OBJECT_TYPE.getInternalName(), diff --git a/compiler/testData/codegen/bytecodeText/superFlagInMultiFileFacade.kt b/compiler/testData/codegen/bytecodeText/superFlagInMultiFileFacade.kt new file mode 100644 index 00000000000..4c5b29c5e83 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/superFlagInMultiFileFacade.kt @@ -0,0 +1,13 @@ +@file:kotlin.jvm.JvmMultifileClass +@file:kotlin.jvm.JvmName("Test") + +fun foo() { + +} + + +/*ACC_PUBLIC ACC_FINAL ACC_SUPER */ +// 1 access flags 0x31 + +/*ACC_SYNTHETIC ACC_FINAL ACC_SUPER */ +// 1 access flags 0x1030 \ No newline at end of file diff --git a/compiler/testData/writeFlags/class/accessFlags/defaultImpls.kt b/compiler/testData/writeFlags/class/accessFlags/defaultImpls.kt new file mode 100644 index 00000000000..9503ec3c751 --- /dev/null +++ b/compiler/testData/writeFlags/class/accessFlags/defaultImpls.kt @@ -0,0 +1,11 @@ + +interface Test { + fun a() { + + } +} + + +// TESTED_OBJECT_KIND: class +// TESTED_OBJECTS: Test$DefaultImpls +// FLAGS: ACC_PUBLIC, ACC_FINAL, ACC_SUPER diff --git a/compiler/testData/writeFlags/class/accessFlags/mappingWhen.kt b/compiler/testData/writeFlags/class/accessFlags/mappingWhen.kt new file mode 100644 index 00000000000..bfa271ec30d --- /dev/null +++ b/compiler/testData/writeFlags/class/accessFlags/mappingWhen.kt @@ -0,0 +1,19 @@ + +enum class BigEnum { + ITEM1, + ITEM2 +} + +fun bar1(x : BigEnum) : String { + when (x) { + BigEnum.ITEM1 -> return "123" + BigEnum.ITEM2-> return "456" + } + + return "-1"; + +} + +// TESTED_OBJECT_KIND: class +// TESTED_OBJECTS: MappingWhenKt$WhenMappings +// FLAGS: ACC_PUBLIC, ACC_SYNTHETIC, ACC_FINAL, ACC_SUPER diff --git a/compiler/testData/writeFlags/class/accessFlags/simpleFilePackageFacade.kt b/compiler/testData/writeFlags/class/accessFlags/simpleFilePackageFacade.kt new file mode 100644 index 00000000000..124f8f7f420 --- /dev/null +++ b/compiler/testData/writeFlags/class/accessFlags/simpleFilePackageFacade.kt @@ -0,0 +1,7 @@ +fun foo() { + +} + +// TESTED_OBJECT_KIND: class +// TESTED_OBJECTS: SimpleFilePackageFacadeKt +// FLAGS: ACC_PUBLIC, ACC_FINAL, ACC_SUPER diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index de9f79b078d..4285f440db9 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -299,6 +299,12 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { doTest(fileName); } + @TestMetadata("superFlagInMultiFileFacade.kt") + public void testSuperFlagInMultiFileFacade() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/superFlagInMultiFileFacade.kt"); + doTest(fileName); + } + @TestMetadata("topLevelFunWithDefaultArgs.kt") public void testTopLevelFunWithDefaultArgs() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/topLevelFunWithDefaultArgs.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java index e86e8fed9a0..d53cf5d6efd 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/flags/WriteFlagsTestGenerated.java @@ -93,6 +93,18 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/writeFlags/class/accessFlags"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("defaultImpls.kt") + public void testDefaultImpls() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/class/accessFlags/defaultImpls.kt"); + doTest(fileName); + } + + @TestMetadata("mappingWhen.kt") + public void testMappingWhen() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/class/accessFlags/mappingWhen.kt"); + doTest(fileName); + } + @TestMetadata("objectLiteral.kt") public void testObjectLiteral() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/class/accessFlags/objectLiteral.kt"); @@ -122,6 +134,12 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/class/accessFlags/publicInterface.kt"); doTest(fileName); } + + @TestMetadata("simpleFilePackageFacade.kt") + public void testSimpleFilePackageFacade() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/writeFlags/class/accessFlags/simpleFilePackageFacade.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/writeFlags/class/deprecatedFlag")