diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractFunction/ui/KotlinExtractFunctionDialog.java b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractFunction/ui/KotlinExtractFunctionDialog.java index 56aec13f089..24f2857c982 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractFunction/ui/KotlinExtractFunctionDialog.java +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractFunction/ui/KotlinExtractFunctionDialog.java @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.idea.refactoring.KotlinRefactoringUtilKt; import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.*; import org.jetbrains.kotlin.idea.refactoring.introduce.ui.KotlinSignatureComponent; import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers; +import org.jetbrains.kotlin.lexer.KtModifierKeywordToken; import org.jetbrains.kotlin.lexer.KtTokens; import org.jetbrains.kotlin.psi.psiUtil.KtPsiUtilKt; import org.jetbrains.kotlin.types.KotlinType; @@ -94,11 +95,12 @@ public class KotlinExtractFunctionDialog extends DialogWrapper { return KtPsiUtilKt.quoteIfNeeded(functionNameField.getEnteredName()); } - private String getVisibility() { - if (!isVisibilitySectionAvailable()) return ""; + @Nullable + private KtModifierKeywordToken getVisibility() { + if (!isVisibilitySectionAvailable()) return null; - String value = (String) visibilityBox.getSelectedItem(); - return KtTokens.PUBLIC_KEYWORD.getValue().equals(value) ? "" : value; + KtModifierKeywordToken value = (KtModifierKeywordToken) visibilityBox.getSelectedItem(); + return KtTokens.DEFAULT_VISIBILITY_KEYWORD.equals(value) ? null : value; } private boolean checkNames() { @@ -174,12 +176,14 @@ public class KotlinExtractFunctionDialog extends DialogWrapper { returnTypePanel.getParent().remove(returnTypePanel); } + visibilityBox.setModel(new DefaultComboBoxModel(KtTokens.VISIBILITY_MODIFIERS.getTypes())); + boolean enableVisibility = isVisibilitySectionAvailable(); visibilityBox.setEnabled(enableVisibility); if (enableVisibility) { - String defaultVisibility = extractableCodeDescriptor.getVisibility(); - if (defaultVisibility.isEmpty()) { - defaultVisibility = KtTokens.PUBLIC_KEYWORD.getValue(); + KtModifierKeywordToken defaultVisibility = extractableCodeDescriptor.getVisibility(); + if (defaultVisibility != null) { + defaultVisibility = KtTokens.DEFAULT_VISIBILITY_KEYWORD; } visibilityBox.setSelectedItem(defaultVisibility); } @@ -275,7 +279,7 @@ public class KotlinExtractFunctionDialog extends DialogWrapper { public static ExtractableCodeDescriptor createNewDescriptor( @NotNull ExtractableCodeDescriptor originalDescriptor, @NotNull String newName, - @NotNull String newVisibility, + @Nullable KtModifierKeywordToken newVisibility, @Nullable ExtractFunctionParameterTablePanel.ParameterInfo newReceiverInfo, @NotNull List newParameterInfos, @Nullable KotlinType returnType diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractableCodeDescriptor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractableCodeDescriptor.kt index f140c8a2439..e76c4fc37a9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractableCodeDescriptor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractableCodeDescriptor.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.idea.util.approximateFlexibleTypes import org.jetbrains.kotlin.idea.util.psi.patternMatching.KotlinPsiRange import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.lexer.KtKeywordToken +import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* @@ -349,7 +350,7 @@ data class ExtractableCodeDescriptor( val extractionData: ExtractionData, val originalContext: BindingContext, val suggestedNames: List, - val visibility: String, + val visibility: KtModifierKeywordToken?, val parameters: List, val receiverParameter: Parameter?, val typeParameters: List, @@ -364,7 +365,7 @@ data class ExtractableCodeDescriptor( fun ExtractableCodeDescriptor.copy( newName: String, - newVisibility: String, + newVisibility: KtModifierKeywordToken?, oldToNewParameters: Map, newReceiver: Parameter?, returnType: KotlinType? diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt index 85af5483ea6..b5e609fac16 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractableAnalysisUtil.kt @@ -56,6 +56,7 @@ import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers import org.jetbrains.kotlin.idea.util.approximateWithResolvableType import org.jetbrains.kotlin.idea.util.getResolutionScope import org.jetbrains.kotlin.idea.util.isResolvableInScope +import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* @@ -613,16 +614,16 @@ fun ExtractionData.isVisibilityApplicable(): Boolean { return true } -fun ExtractionData.getDefaultVisibility(): String { - if (!isVisibilityApplicable()) return "" +fun ExtractionData.getDefaultVisibility(): KtModifierKeywordToken? { + if (!isVisibilityApplicable()) return null val parent = targetSibling.getStrictParentOfType() if (parent is KtClass) { - if (parent.isInterface()) return "" - if (parent.isEnum() && commonParent.getNonStrictParentOfType()?.getStrictParentOfType() == parent) return "" + if (parent.isInterface()) return null + if (parent.isEnum() && commonParent.getNonStrictParentOfType()?.getStrictParentOfType() == parent) return null } - return "private" + return KtTokens.PRIVATE_KEYWORD } fun ExtractionData.performAnalysis(): AnalysisResult { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt index 3c3fd88034b..df98d149701 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt @@ -65,7 +65,7 @@ private fun buildSignature(config: ExtractionGeneratorConfiguration, renderer: D else -> CallableBuilder.Target.READ_ONLY_PROPERTY } return CallableBuilder(builderTarget).apply { - val visibility = config.descriptor.visibility + val visibility = config.descriptor.visibility?.value ?: "" val extraModifiers = config.descriptor.modifiers.map { it.value } val modifiers = if (visibility.isNotEmpty()) listOf(visibility) + extraModifiers else extraModifiers modifier(modifiers.joinToString(separator = " ")) diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt index ef857c10bbc..285006ecffe 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt @@ -269,7 +269,7 @@ class KotlinIntroduceParameterDialog private constructor( val newDescriptor = KotlinExtractFunctionDialog.createNewDescriptor( oldDescriptor, chosenName, - "", + null, parameterTablePanel?.selectedReceiverInfo, parameterTablePanel?.selectedParameterInfos ?: listOf(), null