From 6035260e68afeefbb6cc7973547a83fd00afd2d8 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Mon, 26 Jan 2015 18:40:25 +0300 Subject: [PATCH] LOCAL classes are ACC_PUBLIC in byte code --- .../backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java index 8e93f4e0a55..44df66c5807 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java @@ -257,6 +257,8 @@ public class AsmUtil { public static int getVisibilityAccessFlagForClass(ClassDescriptor descriptor) { if (DescriptorUtils.isTopLevelDeclaration(descriptor) || descriptor.getVisibility() == Visibilities.PUBLIC || + // TODO: should be package private, but for now Kotlin's reflection can't access members of such classes + descriptor.getVisibility() == Visibilities.LOCAL || descriptor.getVisibility() == Visibilities.INTERNAL) { return ACC_PUBLIC; } @@ -281,7 +283,8 @@ public class AsmUtil { } public static int calculateInnerClassAccessFlags(@NotNull ClassDescriptor innerClass) { - return getVisibilityAccessFlag(innerClass) | + int visibility = (innerClass.getVisibility() == Visibilities.LOCAL) ? ACC_PUBLIC : getVisibilityAccessFlag(innerClass); + return visibility | innerAccessFlagsForModalityAndKind(innerClass) | (innerClass.isInner() ? 0 : ACC_STATIC); }