LOCAL classes are ACC_PUBLIC in byte code

This commit is contained in:
Andrey Breslav
2015-01-26 18:40:25 +03:00
parent 54a50ef0b5
commit 6035260e68
@@ -257,6 +257,8 @@ public class AsmUtil {
public static int getVisibilityAccessFlagForClass(ClassDescriptor descriptor) { public static int getVisibilityAccessFlagForClass(ClassDescriptor descriptor) {
if (DescriptorUtils.isTopLevelDeclaration(descriptor) || if (DescriptorUtils.isTopLevelDeclaration(descriptor) ||
descriptor.getVisibility() == Visibilities.PUBLIC || 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) { descriptor.getVisibility() == Visibilities.INTERNAL) {
return ACC_PUBLIC; return ACC_PUBLIC;
} }
@@ -281,7 +283,8 @@ public class AsmUtil {
} }
public static int calculateInnerClassAccessFlags(@NotNull ClassDescriptor innerClass) { public static int calculateInnerClassAccessFlags(@NotNull ClassDescriptor innerClass) {
return getVisibilityAccessFlag(innerClass) | int visibility = (innerClass.getVisibility() == Visibilities.LOCAL) ? ACC_PUBLIC : getVisibilityAccessFlag(innerClass);
return visibility |
innerAccessFlagsForModalityAndKind(innerClass) | innerAccessFlagsForModalityAndKind(innerClass) |
(innerClass.isInner() ? 0 : ACC_STATIC); (innerClass.isInner() ? 0 : ACC_STATIC);
} }