Generate package private visibility in bytecode for private classes
This commit is contained in:
@@ -257,8 +257,7 @@ public class AsmUtil {
|
||||
Classes in byte code should be public or package private
|
||||
*/
|
||||
public static int getVisibilityAccessFlagForClass(ClassDescriptor descriptor) {
|
||||
if (DescriptorUtils.isTopLevelDeclaration(descriptor) ||
|
||||
descriptor.getVisibility() == Visibilities.PUBLIC ||
|
||||
if (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) {
|
||||
|
||||
+4
-5
@@ -284,13 +284,12 @@ open class KtLightClassForExplicitDeclaration(
|
||||
}
|
||||
|
||||
if (classOrObject.hasModifier(PRIVATE_KEYWORD)) {
|
||||
// Top-level private class has PUBLIC visibility in Java
|
||||
// Top-level private class has PACKAGE_LOCAL visibility in Java
|
||||
// Nested private class has PRIVATE visibility
|
||||
psiModifiers.add(if (classOrObject.isTopLevel()) PsiModifier.PUBLIC else PsiModifier.PRIVATE)
|
||||
psiModifiers.add(if (classOrObject.isTopLevel()) PsiModifier.PACKAGE_LOCAL else PsiModifier.PRIVATE)
|
||||
}
|
||||
|
||||
if (!psiModifiers.contains(PsiModifier.PRIVATE) && !psiModifiers.contains(PsiModifier.PROTECTED)) {
|
||||
psiModifiers.add(PsiModifier.PUBLIC) // For internal (default) visibility
|
||||
else if (!psiModifiers.contains(PsiModifier.PROTECTED)) {
|
||||
psiModifiers.add(PsiModifier.PUBLIC)
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -4,4 +4,4 @@ private class MyClass() {
|
||||
|
||||
// TESTED_OBJECT_KIND: class
|
||||
// TESTED_OBJECTS: MyClass
|
||||
// FLAGS: ACC_FINAL, ACC_PUBLIC, ACC_SUPER
|
||||
// FLAGS: ACC_FINAL, ACC_SUPER
|
||||
|
||||
@@ -3,4 +3,4 @@ private enum class MyClass() {
|
||||
|
||||
// TESTED_OBJECT_KIND: class
|
||||
// TESTED_OBJECTS: MyClass
|
||||
// FLAGS: ACC_FINAL, ACC_PUBLIC, ACC_SUPER, ACC_ENUM
|
||||
// FLAGS: ACC_FINAL, ACC_SUPER, ACC_ENUM
|
||||
|
||||
@@ -3,4 +3,4 @@ private object MyClass {
|
||||
|
||||
// TESTED_OBJECT_KIND: class
|
||||
// TESTED_OBJECTS: MyClass
|
||||
// FLAGS: ACC_FINAL, ACC_PUBLIC, ACC_SUPER
|
||||
// FLAGS: ACC_FINAL, ACC_SUPER
|
||||
|
||||
@@ -3,4 +3,4 @@ private interface MyClass {
|
||||
|
||||
// TESTED_OBJECT_KIND: class
|
||||
// TESTED_OBJECTS: MyClass
|
||||
// FLAGS: ACC_ABSTRACT, ACC_INTERFACE, ACC_PUBLIC
|
||||
// FLAGS: ACC_ABSTRACT, ACC_INTERFACE
|
||||
|
||||
@@ -54,7 +54,7 @@ public abstract class KotlinLightClassStructureTest extends KotlinAsJavaTestBase
|
||||
|
||||
public void testTopLevelVisibilities() {
|
||||
checkModifiers("test.Public", PUBLIC, FINAL);
|
||||
checkModifiers("test.Private", PUBLIC, FINAL);
|
||||
checkModifiers("test.Private", PACKAGE_LOCAL, FINAL);
|
||||
checkModifiers("test.Internal", PUBLIC, FINAL);
|
||||
}
|
||||
|
||||
@@ -253,6 +253,7 @@ public abstract class KotlinLightClassStructureTest extends KotlinAsJavaTestBase
|
||||
enum ClassProperty {
|
||||
PUBLIC(PsiModifier.PUBLIC),
|
||||
PROTECTED(PsiModifier.PROTECTED),
|
||||
PACKAGE_LOCAL(PsiModifier.PACKAGE_LOCAL),
|
||||
PRIVATE(PsiModifier.PRIVATE),
|
||||
STATIC(PsiModifier.STATIC),
|
||||
ABSTRACT(PsiModifier.ABSTRACT),
|
||||
|
||||
Reference in New Issue
Block a user