Make visible now suggests all possible visibilities

This commit is contained in:
Mikhail Glukhikh
2016-04-22 10:47:38 +03:00
committed by Mikhail Glukhikh
parent d5b9a336a3
commit 8938752cf9
4 changed files with 26 additions and 8 deletions
@@ -32,21 +32,21 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.descriptorUtil.module
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
object MakeVisibleFactory : KotlinSingleIntentionActionFactory() {
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
val element = diagnostic.psiElement as? KtElement ?: return null
object MakeVisibleFactory : KotlinIntentionActionsFactory() {
override fun doCreateActions(diagnostic: Diagnostic): List<IntentionAction> {
val element = diagnostic.psiElement as? KtElement ?: return emptyList()
val context = element.analyze(BodyResolveMode.PARTIAL)
val usageModule = context.get(BindingContext.FILE_TO_PACKAGE_FRAGMENT, element.getContainingKtFile())?.module
@Suppress("UNCHECKED_CAST")
val factory = diagnostic.factory as DiagnosticFactory3<*, DeclarationDescriptor, *, DeclarationDescriptor>
val descriptor = factory.cast(diagnostic).c as? DeclarationDescriptorWithVisibility ?: return null
val declaration = DescriptorToSourceUtils.getSourceFromDescriptor(descriptor) as? KtModifierListOwner ?: return null
val descriptor = factory.cast(diagnostic).c as? DeclarationDescriptorWithVisibility ?: return emptyList()
val declaration = DescriptorToSourceUtils.getSourceFromDescriptor(descriptor) as? KtModifierListOwner ?: return emptyList()
val module = DescriptorUtils.getContainingModule(descriptor)
val targetVisibility = if (module != usageModule || descriptor.visibility != PRIVATE) PUBLIC else INTERNAL
val targetVisibilities = if (module != usageModule || descriptor.visibility != PRIVATE) listOf(PUBLIC)
else listOf(PUBLIC, INTERNAL)
return ChangeVisibilityFix.create(declaration, descriptor, targetVisibility)
return targetVisibilities.mapNotNull { ChangeVisibilityFix.create(declaration, descriptor, it) }
}
}
@@ -0,0 +1,6 @@
// "Make x public" "true"
class First(private val x: Int)
class Second(f: First) {
val y = f.<caret>x
}
@@ -0,0 +1,6 @@
// "Make x public" "true"
class First(val x: Int)
class Second(f: First) {
val y = f.x
}
@@ -4872,6 +4872,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
doTest(fileName);
}
@TestMetadata("privateMemberToPublicSingleFile.kt")
public void testPrivateMemberToPublicSingleFile() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/increaseVisibility/privateMemberToPublicSingleFile.kt");
doTest(fileName);
}
@TestMetadata("protectedMemberToPublicSingleFile.kt")
public void testProtectedMemberToPublicSingleFile() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/increaseVisibility/protectedMemberToPublicSingleFile.kt");