From a23a255ec1a6d98fea57a68322bc3554443f3774 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 15 Jan 2013 18:19:31 +0400 Subject: [PATCH] Top-level private classes are public in Java --- .../asJava/KotlinLightClassForExplicitDeclaration.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java index ce76c14309f..86ad3bf3573 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/KotlinLightClassForExplicitDeclaration.java @@ -273,6 +273,7 @@ public class KotlinLightClassForExplicitDeclaration extends AbstractLightClass i @NotNull private String[] computeModifiers() { + boolean nestedClass = classOrObject.getParent() != classOrObject.getContainingFile(); Collection psiModifiers = Sets.newHashSet(); // PUBLIC, PROTECTED, PRIVATE, ABSTRACT, FINAL @@ -280,7 +281,6 @@ public class KotlinLightClassForExplicitDeclaration extends AbstractLightClass i Pair.create(PUBLIC_KEYWORD, PsiModifier.PUBLIC), Pair.create(INTERNAL_KEYWORD, PsiModifier.PUBLIC), Pair.create(PROTECTED_KEYWORD, PsiModifier.PROTECTED), - Pair.create(PRIVATE_KEYWORD, PsiModifier.PRIVATE), Pair.create(ABSTRACT_KEYWORD, PsiModifier.ABSTRACT), Pair.create(FINAL_KEYWORD, PsiModifier.FINAL)); @@ -290,6 +290,12 @@ public class KotlinLightClassForExplicitDeclaration extends AbstractLightClass i } } + if (classOrObject.hasModifier(PRIVATE_KEYWORD)) { + // Top-level private class has PUBLIC visibility in Java + // Nested private class has PRIVATE visibility + psiModifiers.add(nestedClass ? PsiModifier.PRIVATE : PsiModifier.PUBLIC); + } + if (!psiModifiers.contains(PsiModifier.PRIVATE) && !psiModifiers.contains(PsiModifier.PROTECTED)) { psiModifiers.add(PsiModifier.PUBLIC); // For internal (default) visibility } @@ -300,7 +306,7 @@ public class KotlinLightClassForExplicitDeclaration extends AbstractLightClass i } // STATIC - if (classOrObject.getParent() != classOrObject.getContainingFile() + if (nestedClass //TODO: && !jetModifierList.hasModifier(INNER_KEYWORD) ) { psiModifiers.add(PsiModifier.STATIC);